diff options
author | Andrew Bartlett <abartlet@samba.org> | 2003-04-23 00:59:19 +0000 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2003-04-23 00:59:19 +0000 |
commit | 5edeee5116b9c775a1bded1d53cb2b22c7a2765f (patch) | |
tree | 1d7fce2af1f9dd9476afa3781cbe8d82f01ae745 | |
parent | 93bdd1a2925edb9dea3e85d8b025a65460896c05 (diff) | |
download | samba-5edeee5116b9c775a1bded1d53cb2b22c7a2765f.tar.gz samba-5edeee5116b9c775a1bded1d53cb2b22c7a2765f.tar.xz samba-5edeee5116b9c775a1bded1d53cb2b22c7a2765f.zip |
- Merge a memory leak fix from HEAD
- 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
-rw-r--r-- | source/passdb/pdb_ldap.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/source/passdb/pdb_ldap.c b/source/passdb/pdb_ldap.c index 6646b3836ae..6112a65a76c 100644 --- a/source/passdb/pdb_ldap.c +++ b/source/passdb/pdb_ldap.c @@ -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); |