summaryrefslogtreecommitdiff
path: root/source3/nsswitch
diff options
context:
space:
mode:
authorGerald Carter <jerry@samba.org>2004-03-22 22:49:40 +0000
committerGerald Carter <jerry@samba.org>2004-03-22 22:49:40 +0000
commit14dd75d181293fa5335184d2d836834a42edcbb4 (patch)
tree2c26a8a1dc66ac9c755b08937c7d64954289a544 /source3/nsswitch
parentf58e6a997750c16e0c1ffccabbbf69469eb280c2 (diff)
downloadsamba-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.c23
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;
}