mirror of
https://github.com/samba-team/samba.git
synced 2025-08-04 08:22:08 +03:00
r5647: Caches are good for performance, but you get a consistency problem.
Fix bug # 2401. Volker
This commit is contained in:
committed by
Gerald (Jerry) Carter
parent
ce0dedea8d
commit
eb4ef94f24
@ -50,6 +50,7 @@ static int smb_create_user(const char *domain, const char *unix_username, const
|
||||
if (homedir)
|
||||
all_string_sub(add_script, "%H", homedir, sizeof(pstring));
|
||||
ret = smbrun(add_script,NULL);
|
||||
flush_pwnam_cache();
|
||||
DEBUG(ret ? 0 : 3,("smb_create_user: Running the command `%s' gave %d\n",add_script,ret));
|
||||
return ret;
|
||||
}
|
||||
|
@ -1050,6 +1050,7 @@ int smb_set_primary_group(const char *unix_group, const char* unix_user)
|
||||
all_string_sub(add_script, "%g", unix_group, sizeof(add_script));
|
||||
all_string_sub(add_script, "%u", unix_user, sizeof(add_script));
|
||||
ret = smbrun(add_script,NULL);
|
||||
flush_pwnam_cache();
|
||||
DEBUG(ret ? 0 : 3,("smb_set_primary_group: "
|
||||
"Running the command `%s' gave %d\n",add_script,ret));
|
||||
return ret;
|
||||
@ -1060,6 +1061,7 @@ int smb_set_primary_group(const char *unix_group, const char* unix_user)
|
||||
if ( winbind_set_user_primary_group( unix_user, unix_group ) ) {
|
||||
DEBUG(3,("smb_delete_group: winbindd set the group (%s) as the primary group for user (%s)\n",
|
||||
unix_group, unix_user));
|
||||
flush_pwnam_cache();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -70,6 +70,20 @@ static void init_pwnam_cache(void)
|
||||
return;
|
||||
}
|
||||
|
||||
void flush_pwnam_cache(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
init_pwnam_cache();
|
||||
|
||||
for (i=0; i<PWNAMCACHE_SIZE; i++) {
|
||||
if (pwnam_cache[i] == NULL)
|
||||
continue;
|
||||
|
||||
passwd_free(&pwnam_cache[i]);
|
||||
}
|
||||
}
|
||||
|
||||
struct passwd *getpwnam_alloc(const char *name)
|
||||
{
|
||||
int i;
|
||||
|
@ -2335,6 +2335,7 @@ NTSTATUS _samr_create_user(pipes_struct *p, SAMR_Q_CREATE_USER *q_u, SAMR_R_CREA
|
||||
|
||||
/* implicit call to getpwnam() next. we have a valid SID coming out of this call */
|
||||
|
||||
flush_pwnam_cache();
|
||||
nt_status = pdb_init_sam_new(&sam_pass, account, new_rid);
|
||||
|
||||
/* this code is order such that we have no unnecessary retuns
|
||||
@ -3805,6 +3806,7 @@ static int smb_delete_user(const char *unix_user)
|
||||
return -1;
|
||||
all_string_sub(del_script, "%u", unix_user, sizeof(del_script));
|
||||
ret = smbrun(del_script,NULL);
|
||||
flush_pwnam_cache();
|
||||
DEBUG(ret ? 0 : 3,("smb_delete_user: Running the command `%s' gave %d\n",del_script,ret));
|
||||
|
||||
return ret;
|
||||
|
Reference in New Issue
Block a user