[PATCH] Bugs LDAPSAM : 2 fixes

Aurélien Degrémont adegremont at idealx.com
Fri Oct 31 11:12:43 GMT 2003


Jeremy Allison wrote:

>On Thu, Oct 30, 2003 at 05:57:31PM +0100, Aur?lien Degr?mont wrote:
>  
>
>>Hi,
>>
>>I recently posted a message concerning a bug with ldapsam.
>>On September somebody posted the same bug concerning rpc vampire (on 
>>samba mailing-list) and explained that with rc1 it was ok.
>>It affects only the group mapping update with LDAPSAM.
>>It was a bug which appeared between the RC3 and RC4 on pdb_ldap.c. Here 
>>is a patch which correct it.
>>    
>>
>Thanks, this fix is already in CVS and will be in Samba 3.0.1.
>
>Cheers,
>
>  
>
Thanks, it's great.
But it seems you only applied one change ?

Inside ldapsam_update_group_mapping_entry():
The ldap_mods_free() call must really be moved after the 
smbldap_get_dn() call, otherwise the ldapsam_update_group_mapping will 
crash and keep crashing.
In fact, 'result' is a chained-list and 'entry' refers to the first 
element of this list. They point on the same address, so, when 'result' 
is freed, 'entry' is freed too, and as a result, the smbldap_get_dn() 
call crashes as it uses a memory-free 'entry'. Ask me if it's not clear 
:). But understand that the patch must be applied completely :). 

Bye

Aurélien





-------------- next part --------------
diff -ruN samba-3.0.1pre1-orig/source/passdb/pdb_ldap.c samba-3.0.1pre1/source/passdb/pdb_ldap.c
--- samba-3.0.1pre1-orig/source/passdb/pdb_ldap.c	Fri Oct 10 20:08:36 2003
+++ samba-3.0.1pre1/source/passdb/pdb_ldap.c	Thu Oct 30 08:50:14 2003
@@ -1983,11 +1983,10 @@
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 
-	ldap_msgfree(result);
-
 	if (mods == NULL) {
 		DEBUG(4, ("ldapsam_update_group_mapping_entry: mods is empty: nothing to do\n"));
-		return NT_STATUS_UNSUCCESSFUL;
+		ldap_msgfree(result);
+		return NT_STATUS_OK;
 	}
 
 	dn = smbldap_get_dn(ldap_state->smbldap_state->ldap_struct, entry);
@@ -1998,6 +1997,7 @@
 	SAFE_FREE(dn);
 
 	ldap_mods_free(mods, True);
+	ldap_msgfree(result);
 
 	if (rc != LDAP_SUCCESS) {
 		char *ld_error = NULL;


More information about the samba-technical mailing list