summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorGerald Carter <jerry@samba.org>2006-10-19 22:34:58 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:15:34 -0500
commit2145eff91d5b7e16ee486b410181f4b849a3fb9e (patch)
treef4228e9543e406c2227f2f1cf0df604e093b809b /source3
parent7ac5df4824f3ad464276b6deeee6cecfe9e21c76 (diff)
downloadsamba-2145eff91d5b7e16ee486b410181f4b849a3fb9e.tar.gz
samba-2145eff91d5b7e16ee486b410181f4b849a3fb9e.tar.bz2
samba-2145eff91d5b7e16ee486b410181f4b849a3fb9e.zip
r19419: BUG 4109: Patch from Timur Bakeyev. Fix bug causing smbd to turn off
winbindd and fail to disable the _NO_WINBIND environment. (This used to be commit a6366b40b3967853c20ca5399021108f09ffd505)
Diffstat (limited to 'source3')
-rw-r--r--source3/lib/system_smbd.c15
-rw-r--r--source3/nsswitch/wb_common.c21
-rw-r--r--source3/passdb/pdb_interface.c16
3 files changed, 25 insertions, 27 deletions
diff --git a/source3/lib/system_smbd.c b/source3/lib/system_smbd.c
index afa64489cf..fc506c901d 100644
--- a/source3/lib/system_smbd.c
+++ b/source3/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/source3/nsswitch/wb_common.c b/source3/nsswitch/wb_common.c
index e665a0ffd5..05238f16fb 100644
--- a/source3/nsswitch/wb_common.c
+++ b/source3/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/source3/passdb/pdb_interface.c b/source3/passdb/pdb_interface.c
index 73f538214d..607a8b91d3 100644
--- a/source3/passdb/pdb_interface.c
+++ b/source3/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;
}