From: Volker Lendecke Date: Thu, 10 Jul 2008 16:21:03 +0000 (+0200) Subject: Fix some memleaks regarding trustdom passwords X-Git-Tag: samba-3.3.0pre1~589 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3d2913d599a4cd773614110ec7b7493aa7adb547;p=thirdparty%2Fsamba.git Fix some memleaks regarding trustdom passwords --- diff --git a/source/passdb/pdb_ldap.c b/source/passdb/pdb_ldap.c index e5080bac14d..5ddb485bb50 100644 --- a/source/passdb/pdb_ldap.c +++ b/source/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; }