From acf58d33a65d89b13e767dcfc66ea5612016f589 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Thu, 10 Jul 2008 18:21:03 +0200 Subject: [PATCH] Fix some memleaks regarding trustdom passwords (This used to be commit 3d2913d599a4cd773614110ec7b7493aa7adb547) --- source/passdb/pdb_ldap.c | 18 +++++++++++++++--- 1 files changed, 15 insertions(+), 3 deletions(-) diff --git a/source/passdb/pdb_ldap.c b/source/passdb/pdb_ldap.c index 9c135c1..7e6764e 100644 --- a/source/passdb/pdb_ldap.c +++ b/source/passdb/pdb_ldap.c @@ -5760,6 +5760,7 @@ static char *trusteddom_dn(struct ldapsam_privates *ldap_state, } static bool get_trusteddom_pw_int(struct ldapsam_privates *ldap_state, + TALLOC_CTX *mem_ctx, const char *domain, LDAPMessage **entry) { int rc; @@ -5782,6 +5783,10 @@ static bool get_trusteddom_pw_int(struct ldapsam_privates *ldap_state, rc = smbldap_search(ldap_state->smbldap_state, trusted_dn, scope, filter, attrs, attrsonly, &result); + if (result != NULL) { + talloc_autofree_ldapmsg(mem_ctx, result); + } + if (rc == LDAP_NO_SUCH_OBJECT) { *entry = NULL; return True; @@ -5824,7 +5829,7 @@ static bool ldapsam_get_trusteddom_pw(struct pdb_methods *methods, DEBUG(10, ("ldapsam_get_trusteddom_pw called for domain %s\n", domain)); - if (!get_trusteddom_pw_int(ldap_state, domain, &entry) || + if (!get_trusteddom_pw_int(ldap_state, talloc_tos(), domain, &entry) || (entry == NULL)) { return False; @@ -5895,7 +5900,7 @@ static bool ldapsam_set_trusteddom_pw(struct pdb_methods *methods, * get the current entry (if there is one) in order to put the * current password into the previous password attribute */ - if (!get_trusteddom_pw_int(ldap_state, domain, &entry)) { + if (!get_trusteddom_pw_int(ldap_state, talloc_tos(), domain, &entry)) { return False; } @@ -5910,6 +5915,9 @@ static bool ldapsam_set_trusteddom_pw(struct pdb_methods *methods, talloc_asprintf(talloc_tos(), "%li", time(NULL))); smbldap_make_mod(priv2ld(ldap_state), entry, &mods, "sambaClearTextPassword", pwd); + + talloc_autofree_ldapmod(talloc_tos(), mods); + if (entry != NULL) { prev_pwd = smbldap_talloc_single_attribute(priv2ld(ldap_state), entry, "sambaClearTextPassword", talloc_tos()); @@ -5947,7 +5955,7 @@ static bool ldapsam_del_trusteddom_pw(struct pdb_methods *methods, LDAPMessage *entry = NULL; const char *trusted_dn; - if (!get_trusteddom_pw_int(ldap_state, domain, &entry)) { + if (!get_trusteddom_pw_int(ldap_state, talloc_tos(), domain, &entry)) { return False; } @@ -5998,6 +6006,10 @@ static NTSTATUS ldapsam_enum_trusteddoms(struct pdb_methods *methods, attrsonly, &result); + if (result != NULL) { + talloc_autofree_ldapmsg(mem_ctx, result); + } + if (rc != LDAP_SUCCESS) { return NT_STATUS_UNSUCCESSFUL; } -- 1.6.0.4