From e4998337e75c5e9debe914ff4eb2c0b0fa97c156 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Sun, 2 Apr 2006 19:45:42 +0000 Subject: r14868: I will not write code when changing to Daylight Savings Time. I will not write code when changing to Daylight Savings Time. I will not write code when changing to Daylight Savings Time. I will not write code when changing to Daylight Savings Time. I will not write code when changing to Daylight Savings Time. I will not write code when changing to Daylight Savings Time. I will not write code when changing to Daylight Savings Time. I will not write code when changing to Daylight Savings Time. I will not write code when changing to Daylight Savings Time. ... Fix my brain dead inverted logic for turning winbindd on and off when run on a DC or when calling pdb functions from within winbindd. (This used to be commit 021b3dc2db9fb422ede4657a1f27ef7ef2d22cee) --- source3/lib/system_smbd.c | 16 ++++++---------- source3/nsswitch/wb_common.c | 16 +++++++++------- source3/nsswitch/winbindd.c | 2 +- source3/passdb/pdb_interface.c | 15 ++++++++++----- 4 files changed, 26 insertions(+), 23 deletions(-) diff --git a/source3/lib/system_smbd.c b/source3/lib/system_smbd.c index ac7a096295..afa64489cf 100644 --- a/source3/lib/system_smbd.c +++ b/source3/lib/system_smbd.c @@ -132,13 +132,7 @@ static int sys_getgrouplist(const char *user, gid_t gid, gid_t *groups, int *grp * always determined by the info3 coming back from auth3 or the * PAC. */ - if ( !winbind_putenv("0") ) { - DEBUG(0,("sys_getgroup_list: Insufficient environment space " - "for %s\n", WINBINDD_DONT_ENV)); - } else { - DEBUG(10,("sys_getgrouplist(): disabled winbindd for group " - "lookup [user == %s]\n", user)); - } + winbind_off() ; #ifdef HAVE_GETGROUPLIST retval = getgrouplist(user, gid, groups, grpcnt); @@ -148,10 +142,12 @@ static int sys_getgrouplist(const char *user, gid_t gid, gid_t *groups, int *grp unbecome_root(); #endif - /* allow winbindd lookups */ + /* allow winbindd lookups , but only if they were not already disabled */ + + if ( !(winbindd_env && strequal(winbindd_env, "1")) ) { + winbind_on(); + } - winbind_putenv( winbindd_env ? winbindd_env : "1" ); - return retval; } diff --git a/source3/nsswitch/wb_common.c b/source3/nsswitch/wb_common.c index 05f080e73a..91ec912b7d 100644 --- a/source3/nsswitch/wb_common.c +++ b/source3/nsswitch/wb_common.c @@ -618,15 +618,17 @@ NSS_STATUS winbindd_request_response(int req_type, /* Use putenv() instead of setenv() in these functions as not all environments have the latter. */ -BOOL winbind_putenv( const char *s ) +BOOL winbind_off( void ) { - fstring env; + static char *s = CONST_DISCARD(char *, WINBINDD_DONT_ENV "=1"); - if ( !s ) { - return False; - } + return putenv(s) != -1; +} - snprintf( env, sizeof(env), "%s=%s", WINBINDD_DONT_ENV, s ); +BOOL winbind_on( void ) +{ + static char *s = CONST_DISCARD(char *, WINBINDD_DONT_ENV "=0"); - return putenv(env) != -1; + return putenv(s) != -1; } + diff --git a/source3/nsswitch/winbindd.c b/source3/nsswitch/winbindd.c index 51a7c1f6b0..ad2774eea6 100644 --- a/source3/nsswitch/winbindd.c +++ b/source3/nsswitch/winbindd.c @@ -945,7 +945,7 @@ int main(int argc, char **argv) /* Set environment variable so we don't recursively call ourselves. This may also be useful interactively. */ - if ( !winbind_putenv("0") ) { + if ( !winbind_off() ) { DEBUG(0,("Failed to disable recusive winbindd calls. Exiting.\n")); exit(1); } diff --git a/source3/passdb/pdb_interface.c b/source3/passdb/pdb_interface.c index 88cf387838..b6e635cca1 100644 --- a/source3/passdb/pdb_interface.c +++ b/source3/passdb/pdb_interface.c @@ -1509,11 +1509,13 @@ static BOOL get_memberuids(TALLOC_CTX *mem_ctx, gid_t gid, uid_t **pp_uids, size /* We only look at our own sam, so don't care about imported stuff */ winbindd_env = getenv(WINBINDD_DONT_ENV); - winbind_putenv("0"); + winbind_off(); if ((grp = getgrgid(gid)) == NULL) { - /* allow winbindd lookups */ - winbind_putenv( winbindd_env ? winbindd_env : "1" ); + /* allow winbindd lookups, but only if they weren't already disabled */ + if ( !(winbindd_env && strequal(winbindd_env, "1")) ) { + winbind_on(); + } return False; } @@ -1539,8 +1541,11 @@ static BOOL get_memberuids(TALLOC_CTX *mem_ctx, gid_t gid, uid_t **pp_uids, size add_uid_to_array_unique(mem_ctx, pw->pw_uid, pp_uids, p_num); } - /* allow winbindd lookups */ - winbind_putenv( winbindd_env ? winbindd_env : "1" ); + /* allow winbindd lookups, but only if they weren't already disabled */ + + if ( !(winbindd_env && strequal(winbindd_env, "1")) ) { + winbind_on(); + } return True; } -- cgit