From: Gerald Carter Date: Thu, 19 Oct 2006 22:34:58 +0000 (+0000) Subject: r19419: BUG 4109: Patch from Timur Bakeyev. Fix bug causing smbd to turn off X-Git-Tag: initial-v3-0-unstable~1786 X-Git-Url: http://git.samba.org/samba.git/?p=tprouty%2Fsamba.git;a=commitdiff_plain;h=a6366b40b3967853c20ca5399021108f09ffd505 r19419: BUG 4109: Patch from Timur Bakeyev. Fix bug causing smbd to turn off winbindd and fail to disable the _NO_WINBIND environment. --- diff --git a/source/lib/system_smbd.c b/source/lib/system_smbd.c index afa64489cf..fc506c901d 100644 --- a/source/lib/system_smbd.c +++ b/source/lib/system_smbd.c @@ -120,19 +120,15 @@ static int getgrouplist_internals(const char *user, gid_t gid, gid_t *groups, static int sys_getgrouplist(const char *user, gid_t gid, gid_t *groups, int *grpcnt) { int retval; - char *winbindd_env; + BOOL winbind_env; DEBUG(10,("sys_getgrouplist: user [%s]\n", user)); - /* Save the winbindd state and not just blindly turn it back on */ - - winbindd_env = getenv(WINBINDD_DONT_ENV); - /* This is only ever called for Unix users, remote memberships are * always determined by the info3 coming back from auth3 or the * PAC. */ - - winbind_off() ; + winbind_env = winbind_env_set(); + winbind_off(); #ifdef HAVE_GETGROUPLIST retval = getgrouplist(user, gid, groups, grpcnt); @@ -142,9 +138,8 @@ static int sys_getgrouplist(const char *user, gid_t gid, gid_t *groups, int *grp unbecome_root(); #endif - /* allow winbindd lookups , but only if they were not already disabled */ - - if ( !(winbindd_env && strequal(winbindd_env, "1")) ) { + /* allow winbindd lookups, but only if they were not already disabled */ + if (!winbind_env) { winbind_on(); } diff --git a/source/nsswitch/wb_common.c b/source/nsswitch/wb_common.c index e665a0ffd5..05238f16fb 100644 --- a/source/nsswitch/wb_common.c +++ b/source/nsswitch/wb_common.c @@ -525,15 +525,11 @@ int read_reply(struct winbindd_response *response) NSS_STATUS winbindd_send_request(int req_type, struct winbindd_request *request) { struct winbindd_request lrequest; - char *env; - int value; - + /* Check for our tricky environment variable */ - if ( (env = getenv(WINBINDD_DONT_ENV)) != NULL ) { - value = atoi(env); - if ( value == 1 ) - return NSS_STATUS_NOTFOUND; + if (winbind_env_set()) { + return NSS_STATUS_NOTFOUND; } if (!request) { @@ -632,3 +628,14 @@ BOOL winbind_on( void ) return putenv(s) != -1; } +BOOL winbind_env_set( void ) +{ + char *env; + + if ((env=getenv(WINBINDD_DONT_ENV)) != NULL) { + if(strequal(env, "1")) { + return True; + } + } + return False; +} diff --git a/source/passdb/pdb_interface.c b/source/passdb/pdb_interface.c index 73f538214d..607a8b91d3 100644 --- a/source/passdb/pdb_interface.c +++ b/source/passdb/pdb_interface.c @@ -1295,27 +1295,25 @@ static BOOL get_memberuids(TALLOC_CTX *mem_ctx, gid_t gid, uid_t **pp_uids, size struct group *grp; char **gr; struct passwd *pwd; - char *winbindd_env; + BOOL winbind_env; *pp_uids = NULL; *p_num = 0; /* We only look at our own sam, so don't care about imported stuff */ - - winbindd_env = getenv(WINBINDD_DONT_ENV); + winbind_env = winbind_env_set(); winbind_off(); if ((grp = getgrgid(gid)) == NULL) { /* allow winbindd lookups, but only if they weren't already disabled */ - if ( !(winbindd_env && strequal(winbindd_env, "1")) ) { + if (!winbind_env) { winbind_on(); } - + return False; } /* Primary group members */ - setpwent(); while ((pwd = getpwent()) != NULL) { if (pwd->pw_gid == gid) { @@ -1326,7 +1324,6 @@ static BOOL get_memberuids(TALLOC_CTX *mem_ctx, gid_t gid, uid_t **pp_uids, size endpwent(); /* Secondary group members */ - for (gr = grp->gr_mem; (*gr != NULL) && ((*gr)[0] != '\0'); gr += 1) { struct passwd *pw = getpwnam(*gr); @@ -1336,11 +1333,10 @@ static BOOL get_memberuids(TALLOC_CTX *mem_ctx, gid_t gid, uid_t **pp_uids, size } /* allow winbindd lookups, but only if they weren't already disabled */ - - if ( !(winbindd_env && strequal(winbindd_env, "1")) ) { + if (!winbind_env) { winbind_on(); } - + return True; }