From 90f3da47205e670bfdde26d5c7858238a5ed7716 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Thu, 10 Jul 2008 18:21:03 +0200 Subject: Fix some memleaks regarding trustdom passwords (This used to be commit 3d2913d599a4cd773614110ec7b7493aa7adb547) --- source3/passdb/pdb_ldap.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'source3/passdb') diff --git a/source3/passdb/pdb_ldap.c b/source3/passdb/pdb_ldap.c index e5080bac14..5ddb485bb5 100644 --- a/source3/passdb/pdb_ldap.c +++ b/source3/passdb/pdb_ldap.c @@ -5788,6 +5788,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; @@ -5810,6 +5811,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; @@ -5852,7 +5857,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; @@ -5923,7 +5928,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; } @@ -5938,6 +5943,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()); @@ -5975,7 +5983,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; } @@ -6026,6 +6034,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; } -- cgit