- Merge a memory leak fix from HEAD
authorAndrew Bartlett <abartlet@samba.org>
Wed, 23 Apr 2003 00:59:19 +0000 (00:59 +0000)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 23 Apr 2003 00:59:19 +0000 (00:59 +0000)
- change update behaviour for new RIDs:
 - store the new RID into the SAM_ACCOUNT, so that the caller get's it back
   automaticly
 - use this to make the code paths simpiler for the normal 'need_update' code.

We must always store a RID if we intend to use the sambaAccount objectClass

Andrew Bartlett
(This used to be commit 5edeee5116b9c775a1bded1d53cb2b22c7a2765f)

source3/passdb/pdb_ldap.c

index 6646b3836aed2008495c33584a295e5739f312d6..6112a65a76c1fe63398890cd697331019fc65afc 100644 (file)
@@ -100,6 +100,8 @@ static BOOL fetch_ldapsam_pw(char **dn, char** pw)
        }
        
        *pw=secrets_fetch(key, &size);
+       SAFE_FREE(key);
+
        if (!size) {
                /* Upgrade 2.2 style entry */
                char *p;
@@ -1315,7 +1317,7 @@ Initialize SAM_ACCOUNT from an LDAP query
 *********************************************************************/
 static BOOL init_ldap_from_sam (struct ldapsam_privates *ldap_state, 
                                LDAPMessage *existing,
-                               LDAPMod *** mods, const SAM_ACCOUNT * sampass,
+                               LDAPMod *** mods, SAM_ACCOUNT * sampass,
                                BOOL (*need_update)(const SAM_ACCOUNT *,
                                                    enum pdb_elements))
 {
@@ -1361,18 +1363,21 @@ static BOOL init_ldap_from_sam (struct ldapsam_privates *ldap_state,
                        return False;
                }
 
-               slprintf(temp, sizeof(temp) - 1, "%i", rid);
-               
-               make_ldap_mod(ldap_state->ldap_struct, existing, mods,
-                             "rid", temp);
-       } else {
-               slprintf(temp, sizeof(temp) - 1, "%i", rid);
-
-               if (need_update(sampass, PDB_USERSID))
-                       make_ldap_mod(ldap_state->ldap_struct, existing, mods,
-                                     "rid", temp);
+               /* now that we have figured out the RID, always store it, as
+                  the schema requires it */
+               if (!pdb_set_user_sid_from_rid(sampass, rid, PDB_CHANGED)) {
+                       DEBUG(0, ("Could not store RID back onto SAM_ACCOUNT for user %s!\n", 
+                                 pdb_get_username(sampass)));
+                       ldap_mods_free(*mods, 1);
+                       return False;
+               }
        }
 
+       /* only update the RID if we actually need to */
+       slprintf(temp, sizeof(temp) - 1, "%i", rid);
+       if (need_update(sampass, PDB_USERSID))
+               make_ldap_mod(ldap_state->ldap_struct, existing, mods,
+                             "rid", temp);
 
        rid = pdb_get_group_rid(sampass);