svn commit: samba r13589 - branches/SAMBA_3_0/source/passdb trunk/source/passdb

jerry at samba.org jerry at samba.org
Tue Feb 21 14:03:16 GMT 2006


Author: jerry
Date: 2006-02-21 14:03:15 +0000 (Tue, 21 Feb 2006)
New Revision: 13589

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=13589

Log:
Make sure we only try to close the tdbsam file in endsampwent() when we 
have a valid pwent list from a setsampwent().  Fixes a bug with the
reference count on the open tdb.



Modified:
   branches/SAMBA_3_0/source/passdb/pdb_tdb.c
   trunk/source/passdb/pdb_tdb.c


Changeset:
Modified: branches/SAMBA_3_0/source/passdb/pdb_tdb.c
===================================================================
--- branches/SAMBA_3_0/source/passdb/pdb_tdb.c	2006-02-21 03:29:02 UTC (rev 13588)
+++ branches/SAMBA_3_0/source/passdb/pdb_tdb.c	2006-02-21 14:03:15 UTC (rev 13589)
@@ -50,6 +50,7 @@
 	TDB_DATA key;
 };
 static struct pwent_list *tdbsam_pwent_list;
+static BOOL pwent_initialized;
 
 /* GLOBAL TDB SAM CONTEXT */
 
@@ -292,6 +293,7 @@
 	}
 
 	tdb_traverse( tdbsam, tdbsam_traverse_setpwent, NULL );
+	pwent_initialized = True;
 
 	return NT_STATUS_OK;
 }
@@ -305,6 +307,13 @@
 {
 	struct pwent_list *ptr, *ptr_next;
 	
+	/* close the tdb only if we have a valid pwent state */
+	
+	if ( pwent_initialized ) {
+		DEBUG(7, ("endtdbpwent: closed sam database.\n"));
+		tdbsam_close();
+	}
+	
 	/* clear out any remaining entries in the list */
 	
 	for ( ptr=tdbsam_pwent_list; ptr; ptr = ptr_next ) {
@@ -312,11 +321,9 @@
 		DLIST_REMOVE( tdbsam_pwent_list, ptr );
 		SAFE_FREE( ptr->key.dptr);
 		SAFE_FREE( ptr );
-	}
+	}	
 	
-	DEBUG(7, ("endtdbpwent: closed sam database.\n"));
-
-	tdbsam_close();
+	pwent_initialized = False;
 }
 
 /*****************************************************************

Modified: trunk/source/passdb/pdb_tdb.c
===================================================================
--- trunk/source/passdb/pdb_tdb.c	2006-02-21 03:29:02 UTC (rev 13588)
+++ trunk/source/passdb/pdb_tdb.c	2006-02-21 14:03:15 UTC (rev 13589)
@@ -50,6 +50,7 @@
 	TDB_DATA key;
 };
 static struct pwent_list *tdbsam_pwent_list;
+static BOOL pwent_initialized;
 
 /* GLOBAL TDB SAM CONTEXT */
 
@@ -292,6 +293,7 @@
 	}
 
 	tdb_traverse( tdbsam, tdbsam_traverse_setpwent, NULL );
+	pwent_initialized = True;
 
 	return NT_STATUS_OK;
 }
@@ -305,6 +307,13 @@
 {
 	struct pwent_list *ptr, *ptr_next;
 	
+	/* close the tdb only if we have a valid pwent state */
+	
+	if ( pwent_initialized ) {
+		DEBUG(7, ("endtdbpwent: closed sam database.\n"));
+		tdbsam_close();
+	}
+	
 	/* clear out any remaining entries in the list */
 	
 	for ( ptr=tdbsam_pwent_list; ptr; ptr = ptr_next ) {
@@ -312,11 +321,9 @@
 		DLIST_REMOVE( tdbsam_pwent_list, ptr );
 		SAFE_FREE( ptr->key.dptr);
 		SAFE_FREE( ptr );
-	}
+	}	
 	
-	DEBUG(7, ("endtdbpwent: closed sam database.\n"));
-
-	tdbsam_close();
+	pwent_initialized = False;
 }
 
 /*****************************************************************



More information about the samba-cvs mailing list