1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

split the username in the vuser structure into a separate

userdom_struct. As the name implies this also contains a domain
(unused at the moment).

This will be important shortly, as operation in appliance mode needs
the domain to be always carried with the username.
This commit is contained in:
Andrew Tridgell 0001-01-01 00:00:00 +00:00
parent a85ae6e0ae
commit ee8546342d
10 changed files with 34 additions and 27 deletions

View File

@ -603,14 +603,19 @@ struct dcinfo
};
typedef struct {
fstring smb_name; /* user name from the client */
fstring unix_name; /* unix user name of a validated user */
fstring real_name; /* to store real name from password file - simeon */
fstring domain; /* domain that the client specified */
} userdom_struct;
typedef struct
{
uid_t uid; /* uid of a validated user */
gid_t gid; /* gid of a validated user */
fstring requested_name; /* user name from the client */
fstring name; /* unix user name of a validated user */
fstring real_name; /* to store real name from password file - simeon */
userdom_struct user;
BOOL guest;
/* following groups stuff added by ih */

View File

@ -280,7 +280,7 @@ void standard_sub_snum(int snum, char *str)
********************************************************************/
void standard_sub_vuser(char *str, user_struct *vuser)
{
standard_sub_advanced(-1, vuser->name, "", -1, str);
standard_sub_advanced(-1, vuser->user.unix_name, "", -1, str);
}
/*******************************************************************
@ -288,6 +288,6 @@ void standard_sub_vuser(char *str, user_struct *vuser)
********************************************************************/
void standard_sub_vsnum(char *str, user_struct *vuser, int snum)
{
standard_sub_advanced(snum, vuser->name, "", -1, str);
standard_sub_advanced(snum, vuser->user.unix_name, "", -1, str);
}

View File

@ -611,10 +611,10 @@ static BOOL posix_lock_in_range(SMB_OFF_T *offset_out, SMB_OFF_T *count_out,
return True;
}
#if defined(LARGE_SMB_OFF_T)
/****************************************************************************
Pathetically try and map a 64 bit lock offset into 31 bits. I hate Windows :-).
****************************************************************************/
static uint32 map_lock_offset(uint32 high, uint32 low)
{
unsigned int i;
@ -642,6 +642,7 @@ static uint32 map_lock_offset(uint32 high, uint32 low)
return (high|low);
}
#endif
/****************************************************************************
Actual function that does POSIX locks. Copes with 64 -> 32 bit cruft and

View File

@ -995,7 +995,7 @@ static void init_globals(void)
Globals.shmem_size = SHMEM_SIZE;
Globals.stat_cache_size = 50; /* Number of stat translations we'll keep */
Globals.announce_as = ANNOUNCE_AS_NT_SERVER;
Globals.bUnixRealname = False;
Globals.bUnixRealname = True;
#if (defined(HAVE_NETGROUP) && defined(WITH_AUTOMOUNT))
Globals.bNISHomeMap = False;
#ifdef WITH_NISPLUS_HOME

View File

@ -808,7 +808,7 @@ static BOOL api_net_sam_logon(prs_struct *data, prs_struct *rdata)
&dummy_time, /* pass_must_change_time */
nt_username , /* user_name */
vuser->real_name, /* full_name */
vuser->user.real_name, /* full_name */
logon_script , /* logon_script */
profile_path , /* profile_path */
home_dir , /* home_dir */

View File

@ -120,8 +120,8 @@ static void attempt_remote_rpc_connect(pipes_struct *p)
ZERO_STRUCT(usr);
/* set up unix credentials from the smb side, to feed over the pipe */
make_creds_unix(&usr.uxc, vuser->name, vuser->requested_name,
vuser->real_name, vuser->guest);
make_creds_unix(&usr.uxc, vuser->user.unix_name, vuser->user.smb_name,
vuser->user.real_name, vuser->guest);
usr.ptr_uxc = 1;
make_creds_unix_sec(&usr.uxs, vuser->uid, vuser->gid,
vuser->n_groups, vuser->groups);

View File

@ -2285,7 +2285,8 @@ static BOOL api_RNetUserGetInfo(connection_struct *conn,uint16 vuid, char *param
Don't depend on vuser being non-null !!. JRA */
user_struct *vuser = get_valid_user_struct(vuid);
if(vuser != NULL)
DEBUG(3,(" Username of UID %d is %s\n", (int)vuser->uid, vuser->name));
DEBUG(3,(" Username of UID %d is %s\n", (int)vuser->uid,
vuser->user.unix_name));
*rparam_len = 6;
*rparam = REALLOC(*rparam,*rparam_len);
@ -2335,7 +2336,7 @@ static BOOL api_RNetUserGetInfo(connection_struct *conn,uint16 vuid, char *param
/* EEK! the cifsrap.txt doesn't have this in!!!! */
SIVAL(p,usri11_full_name,PTR_DIFF(p2,p)); /* full name */
pstrcpy(p2,((vuser != NULL) ? vuser->real_name : UserName));
pstrcpy(p2,((vuser != NULL) ? vuser->user.real_name : UserName));
p2 = skip_string(p2,1);
}
@ -2394,7 +2395,7 @@ static BOOL api_RNetUserGetInfo(connection_struct *conn,uint16 vuid, char *param
{
SIVAL(p,60,0); /* auth_flags */
SIVAL(p,64,PTR_DIFF(p2,*rdata)); /* full_name */
pstrcpy(p2,((vuser != NULL) ? vuser->real_name : UserName));
pstrcpy(p2,((vuser != NULL) ? vuser->user.real_name : UserName));
p2 = skip_string(p2,1);
SIVAL(p,68,0); /* urs_comment */
SIVAL(p,72,PTR_DIFF(p2,*rdata)); /* parms */

View File

@ -140,7 +140,7 @@ char *validated_username(uint16 vuid)
user_struct *vuser = get_valid_user_struct(vuid);
if (vuser == NULL)
return 0;
return(vuser->name);
return(vuser->user.unix_name);
}
@ -246,8 +246,8 @@ uint16 register_vuid(uid_t uid,gid_t gid, char *unix_name, char *requested_name,
vuser->uid = uid;
vuser->gid = gid;
vuser->guest = guest;
fstrcpy(vuser->name,unix_name);
fstrcpy(vuser->requested_name,requested_name);
fstrcpy(vuser->user.unix_name,unix_name);
fstrcpy(vuser->user.smb_name,requested_name);
vuser->n_groups = 0;
vuser->groups = NULL;
@ -261,12 +261,12 @@ uint16 register_vuid(uid_t uid,gid_t gid, char *unix_name, char *requested_name,
DEBUG(3,("uid %d registered to name %s\n",(int)uid,unix_name));
DEBUG(3, ("Clearing default real name\n"));
fstrcpy(vuser->real_name, "<Full Name>\0");
fstrcpy(vuser->user.real_name, "<Full Name>");
if (lp_unix_realname()) {
if ((pwfile=sys_getpwnam(vuser->name))!= NULL)
if ((pwfile=sys_getpwnam(vuser->user.unix_name))!= NULL)
{
DEBUG(3, ("User name: %s\tReal name: %s\n",vuser->name,pwfile->pw_gecos));
fstrcpy(vuser->real_name, pwfile->pw_gecos);
DEBUG(3, ("User name: %s\tReal name: %s\n",vuser->user.unix_name,pwfile->pw_gecos));
fstrcpy(vuser->user.real_name, pwfile->pw_gecos);
}
}
@ -707,9 +707,9 @@ BOOL authorise_login(int snum,char *user,char *password, int pwlen,
/* check for a previously registered guest username */
if (!ok && (vuser != 0) && vuser->guest) {
if (user_ok(vuser->name,snum) &&
password_ok(vuser->name, password, pwlen, NULL)) {
fstrcpy(user, vuser->name);
if (user_ok(vuser->user.unix_name,snum) &&
password_ok(vuser->user.unix_name, password, pwlen, NULL)) {
fstrcpy(user, vuser->user.unix_name);
vuser->guest = False;
DEBUG(3,("ACCEPTED: given password with registered user %s\n", user));
ok = True;
@ -744,8 +744,8 @@ BOOL authorise_login(int snum,char *user,char *password, int pwlen,
/* check for a previously validated username/password pair */
if (!ok && (!lp_revalidate(snum) || lp_security() > SEC_SHARE) &&
(vuser != 0) && !vuser->guest &&
user_ok(vuser->name,snum)) {
fstrcpy(user,vuser->name);
user_ok(vuser->user.unix_name,snum)) {
fstrcpy(user,vuser->user.unix_name);
*guest = False;
DEBUG(3,("ACCEPTED: validated uid ok as non-guest\n"));
ok = True;

View File

@ -495,7 +495,7 @@ static int switch_message(int type,char *inbuf,char *outbuf,int size,int bufsize
if(session_tag != UID_FIELD_INVALID)
vuser = get_valid_user_struct(session_tag);
if(vuser != NULL)
pstrcpy( sesssetup_user, vuser->requested_name);
pstrcpy( sesssetup_user, vuser->user.smb_name);
}
/* does this protocol need to be run as root? */

View File

@ -140,7 +140,7 @@ static BOOL check_user_ok(connection_struct *conn, user_struct *vuser,int snum)
for (i=0;i<conn->uid_cache.entries;i++)
if (conn->uid_cache.list[i] == vuser->uid) return(True);
if (!user_ok(vuser->name,snum)) return(False);
if (!user_ok(vuser->user.unix_name,snum)) return(False);
i = conn->uid_cache.entries % UID_CACHE_SIZE;
conn->uid_cache.list[i] = vuser->uid;