diff options
Diffstat (limited to 'source/lib/username.c')
-rw-r--r-- | source/lib/username.c | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/source/lib/username.c b/source/lib/username.c index 517af1bd791..772c0031716 100644 --- a/source/lib/username.c +++ b/source/lib/username.c @@ -347,11 +347,11 @@ failed with error %s\n", strerror(errno) )); Check if a user is in a UNIX group. ****************************************************************************/ -static BOOL user_in_unix_group_list(char *user,char *gname) +static BOOL user_in_unix_group_list(char *user,const char *gname) { - struct group *gptr; - char **member; struct passwd *pass = Get_Pwnam(user,False); + struct sys_userlist *user_list; + struct sys_userlist *member; DEBUG(10,("user_in_unix_group_list: checking user %s in group %s\n", user, gname)); @@ -367,20 +367,22 @@ static BOOL user_in_unix_group_list(char *user,char *gname) } } - if ((gptr = (struct group *)getgrnam(gname)) == NULL) { + user_list = get_users_in_group(gname); + if (user_list == NULL) { DEBUG(10,("user_in_unix_group_list: no such group %s\n", gname )); return False; } - - member = gptr->gr_mem; - while (member && *member) { - DEBUG(10,("user_in_unix_group_list: checking user %s against member %s\n", user, *member )); - if (strequal(*member,user)) { + + for (member = user_list; member; member = member->next) { + DEBUG(10,("user_in_unix_group_list: checking user %s against member %s\n", + user, member->unix_name )); + if (strequal(member->unix_name,user)) { + free_userlist(user_list); return(True); } - member++; } + free_userlist(user_list); return False; } @@ -519,10 +521,6 @@ static struct passwd *uname_string_combinations2(char *s,int offset,struct passw int i; struct passwd *ret; -#ifdef PASSWORD_LENGTH - len = MIN(len,PASSWORD_LENGTH); -#endif - if (N <= 0 || offset >= len) return(fn(s)); |