Fix two memleaks in pdb_ldap.c.
authorVolker Lendecke <vlendec@samba.org>
Fri, 18 Jul 2003 09:05:30 +0000 (09:05 +0000)
committerVolker Lendecke <vlendec@samba.org>
Fri, 18 Jul 2003 09:05:30 +0000 (09:05 +0000)
Whoever put the private.backend_private_data_free_fn thingy into
SAM_ACCOUNT, could you please revisit my change to pdb_get_set.c and
comment on my comment there?

Thanks,

Volker

source/passdb/pdb_get_set.c
source/passdb/pdb_ldap.c

index ba07a4e01c8b01281aa429340e0138a25ab637e8..15054585512a9b29a60dfaf6b1f3b47f863a8ef7 100644 (file)
@@ -1027,9 +1027,18 @@ BOOL pdb_set_backend_private_data (SAM_ACCOUNT *sampass, void *private_data,
        if (!sampass)
                return False;
 
+#if 0
+       /* With this check backend_private_data_free_fn is *never* set
+          as the methods are never set anywhere. What is this
+          supposed to do ????
+
+          Volker
+       */
+
        /* does this backend 'own' this SAM_ACCOUNT? */
        if (my_methods != sampass->private.backend_private_methods)
                return False;
+#endif
 
        if (sampass->private.backend_private_data && sampass->private.backend_private_data_free_fn) {
                sampass->private.backend_private_data_free_fn(&sampass->private.backend_private_data);
index 84ac6c576a894c33aab9f11b2bf5f7dbc462b0e4..8f5efbbd648f5c33dbb2e27a2c253a3c777f2fc0 100644 (file)
@@ -104,7 +104,7 @@ struct ldapsam_privates {
  
 static void private_data_free_fn(void **result) 
 {
-       ldap_memfree(*result);
+       ldap_msgfree(*result);
        *result = NULL;
 }
 
@@ -1377,6 +1377,7 @@ static NTSTATUS ldapsam_update_sam_account(struct pdb_methods *my_methods, SAM_A
        if (!init_ldap_from_sam(ldap_state, entry, &mods, newpwd,
                                element_is_changed)) {
                DEBUG(0, ("ldapsam_update_sam_account: init_ldap_from_sam failed!\n"));
+               ldap_memfree(dn);
                return NT_STATUS_UNSUCCESSFUL;
        }
        
@@ -1384,11 +1385,13 @@ static NTSTATUS ldapsam_update_sam_account(struct pdb_methods *my_methods, SAM_A
                DEBUG(4,("mods is empty: nothing to update for user: %s\n",
                         pdb_get_username(newpwd)));
                ldap_mods_free(mods, True);
+               ldap_memfree(dn);
                return NT_STATUS_OK;
        }
        
        ret = ldapsam_modify_entry(my_methods,newpwd,dn,mods,LDAP_MOD_REPLACE, element_is_changed);
        ldap_mods_free(mods,True);
+       ldap_memfree(dn);
 
        if (!NT_STATUS_IS_OK(ret)) {
                char *ld_error = NULL;