diff options
author | Gerald Carter <jerry@samba.org> | 2004-03-22 22:49:40 +0000 |
---|---|---|
committer | Gerald Carter <jerry@samba.org> | 2004-03-22 22:49:40 +0000 |
commit | 14dd75d181293fa5335184d2d836834a42edcbb4 (patch) | |
tree | 2c26a8a1dc66ac9c755b08937c7d64954289a544 /source3/nsswitch | |
parent | f58e6a997750c16e0c1ffccabbbf69469eb280c2 (diff) | |
download | samba-14dd75d181293fa5335184d2d836834a42edcbb4.tar.gz samba-14dd75d181293fa5335184d2d836834a42edcbb4.tar.bz2 samba-14dd75d181293fa5335184d2d836834a42edcbb4.zip |
bug 1195: add flag to ADS_STRUCT so we know who owns the main structure's memory (not the members though)
(This used to be commit 4449e0e251190b741f51348819669453f0758f36)
Diffstat (limited to 'source3/nsswitch')
-rw-r--r-- | source3/nsswitch/winbindd_ads.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/source3/nsswitch/winbindd_ads.c b/source3/nsswitch/winbindd_ads.c index e6b857f406..8bec04f1f1 100644 --- a/source3/nsswitch/winbindd_ads.c +++ b/source3/nsswitch/winbindd_ads.c @@ -5,6 +5,7 @@ Copyright (C) Andrew Tridgell 2001 Copyright (C) Andrew Bartlett <abartlet@samba.org> 2003 + Copyright (C) Gerald (Jerry) Carter 2004 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 @@ -39,7 +40,21 @@ static ADS_STRUCT *ads_cached_connection(struct winbindd_domain *domain) ADS_STATUS status; if (domain->private) { - return (ADS_STRUCT *)domain->private; + ads = (ADS_STRUCT *)domain->private; + + /* check for a valid structure */ + if ( ads->config.realm ) { + return ads; + } + else { + /* we own this ADS_STRUCT so make sure it goes away */ + ads->is_mine = True; + ads_destroy( &ads ); + + /* we should always be NULL here */ + SMB_ASSERT( ads == NULL ); + } + } /* we don't want this to affect the users ccache */ @@ -79,6 +94,12 @@ static ADS_STRUCT *ads_cached_connection(struct winbindd_domain *domain) return NULL; } + /* set the flag that says we don't own the memory even + though we do so that ads_destroy() won't destroy the + structure we pass back by reference */ + + ads->is_mine = False; + domain->private = (void *)ads; return ads; } |