diff options
author | Jeremy Allison <jra@samba.org> | 2001-12-04 05:13:04 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2001-12-04 05:13:04 +0000 |
commit | 6f0e7b69b72738214bf6657bcfbe941415da533b (patch) | |
tree | cec3e2d1bd6ace96e96535a9b002715d7def0149 | |
parent | 3bc87626ae7894269535333aadb45ec786f3908d (diff) | |
download | samba-6f0e7b69b72738214bf6657bcfbe941415da533b.tar.gz samba-6f0e7b69b72738214bf6657bcfbe941415da533b.tar.bz2 samba-6f0e7b69b72738214bf6657bcfbe941415da533b.zip |
winbindd friendly user_in_list code. Tested on a 65k user domain.
Jeremy.
(This used to be commit 5215bcca15f2cfbe438ac62cbaf94afae63ce993)
-rw-r--r-- | source3/lib/username.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/source3/lib/username.c b/source3/lib/username.c index fdb942cd23..111a757e4e 100644 --- a/source3/lib/username.c +++ b/source3/lib/username.c @@ -3,6 +3,7 @@ Version 1.9. Username handling Copyright (C) Andrew Tridgell 1992-1998 + Copyright (C) Jeremy Allison 1997-2001. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -390,8 +391,7 @@ static BOOL user_in_unix_group_list(const char *user,const char *gname) */ if (pass) { - gptr = getgrgid(pass->pw_gid); - if (gptr && strequal(gptr->gr_name,gname)) { + if (strequal(gname,gidtoname(pass->pw_gid))) { DEBUG(10,("user_in_unix_group_list: group %s is primary group.\n", gname )); return True; } @@ -421,12 +421,15 @@ static BOOL user_in_unix_group_list(const char *user,const char *gname) BOOL user_in_group_list(const char *user, const char *gname) { BOOL winbind_answered = False; - BOOL ret = user_in_winbind_group_list(user, gname, &winbind_answered); + BOOL ret; - if (winbind_answered) - return ret; + ret = user_in_winbind_group_list(user, gname, &winbind_answered); + if (!winbind_answered) + ret = user_in_unix_group_list(user, gname); - return user_in_unix_group_list(user, gname); + if (ret) + DEBUG(10,("user_in_group_list: user |%s| is in group |%s|\n", user, gname)); + return ret; } /**************************************************************************** @@ -442,6 +445,9 @@ BOOL user_in_list(const char *user,char **list) DEBUG(10,("user_in_list: checking user %s in list\n", user)); while (*list) { + + DEBUG(10,("user_in_list: checking user |%s| in group |%s|\n", user, *list)); + /* * Check raw username. */ @@ -518,8 +524,10 @@ BOOL user_in_list(const char *user,char **list) /* Check if user name is in the Windows group */ ret = user_in_winbind_group_list(user, *list, &winbind_answered); - if (winbind_answered && ret == True) + if (winbind_answered && ret == True) { + DEBUG(10,("user_in_list: user |%s| is in group |%s|\n", user, *list)); return ret; + } } } |