diff --git a/source3/libads/gpo.c b/source3/libads/gpo.c index fc7f9064e81..15ff54854cd 100644 --- a/source3/libads/gpo.c +++ b/source3/libads/gpo.c @@ -276,6 +276,7 @@ ADS_STATUS ads_add_gpo_link(ADS_STRUCT *ads, if (ads_count_replies(ads, res) != 1) { DEBUG(10,("ads_add_gpo_link: no result\n")); + ads_msgfree(ads, res); return ADS_ERROR(LDAP_NO_SUCH_OBJECT); } @@ -286,6 +287,7 @@ ADS_STATUS ads_add_gpo_link(ADS_STRUCT *ads, gp_link_new = talloc_asprintf(mem_ctx, "%s[%s;%d]", gp_link, gpo_dn, gpo_opt); } + ads_msgfree(ads, res); if (gp_link_new == NULL) { return ADS_ERROR(LDAP_NO_MEMORY); } @@ -334,6 +336,7 @@ ADS_STATUS ads_delete_gpo_link(ADS_STRUCT *ads, if (ads_count_replies(ads, res) != 1) { DEBUG(10,("ads_delete_gpo_link: no result\n")); + ads_msgfree(ads, res); return ADS_ERROR(LDAP_NO_SUCH_OBJECT); } @@ -343,8 +346,9 @@ ADS_STATUS ads_delete_gpo_link(ADS_STRUCT *ads, } /* find link to delete */ -// gp_link_new = talloc_asprintf(mem_ctx, "%s[%s;%d]", gp_link, gpo_dn, gpo_opt); + /* gp_link_new = talloc_asprintf(mem_ctx, "%s[%s;%d]", gp_link, gpo_dn, gpo_opt); */ + ads_msgfree(ads, res); if (gp_link_new == NULL) { return ADS_ERROR(LDAP_NO_MEMORY); } diff --git a/source3/libads/gpo_util.c b/source3/libads/gpo_util.c index 714dcacb8b2..a30df6e9eb4 100644 --- a/source3/libads/gpo_util.c +++ b/source3/libads/gpo_util.c @@ -465,8 +465,6 @@ ADS_STATUS gpo_password_policy(ADS_STRUCT *ads, LDAPMessage *res = NULL; uint32 uac; - return ADS_ERROR_NT(NT_STATUS_NOT_IMPLEMENTED); - filter = talloc_asprintf(mem_ctx, "(&(objectclass=user)(sAMAccountName=%s))", hostname); if (filter == NULL) { return ADS_ERROR(LDAP_NO_MEMORY); @@ -481,19 +479,24 @@ ADS_STATUS gpo_password_policy(ADS_STRUCT *ads, } if (ads_count_replies(ads, res) != 1) { + ads_msgfree(ads, res); return ADS_ERROR(LDAP_NO_SUCH_OBJECT); } dn = ads_get_dn(ads, res); if (dn == NULL) { + ads_msgfree(ads, res); return ADS_ERROR(LDAP_NO_MEMORY); } if (!ads_pull_uint32(ads, res, "userAccountControl", &uac)) { + ads_msgfree(ads, res); ads_memfree(ads, dn); return ADS_ERROR(LDAP_NO_MEMORY); } + ads_msgfree(ads, res); + if (!(uac & UF_WORKSTATION_TRUST_ACCOUNT)) { ads_memfree(ads, dn); return ADS_ERROR(LDAP_NO_SUCH_OBJECT); @@ -505,15 +508,15 @@ ADS_STATUS gpo_password_policy(ADS_STRUCT *ads, return status; } + ads_memfree(ads, dn); + status = gpo_process_gpo_list(ads, mem_ctx, &gpo_list, cse_gpo_name_to_guid_string("Security"), GPO_LIST_FLAG_MACHINE); if (!ADS_ERR_OK(status)) { - ads_memfree(ads, dn); return status; } - ads_memfree(ads, dn); return ADS_ERROR(LDAP_SUCCESS); } diff --git a/source3/libads/ldap.c b/source3/libads/ldap.c index 89c34f03a9b..6077231ae2e 100644 --- a/source3/libads/ldap.c +++ b/source3/libads/ldap.c @@ -2458,9 +2458,12 @@ ADS_STATUS ads_site_dn(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, const char **site_n service_name = ads_pull_string(ads, mem_ctx, res, "dsServiceName"); if (service_name == NULL) { + ads_msgfree(ads, res); return ADS_ERROR(LDAP_NO_RESULTS_RETURNED); } + ads_msgfree(ads, res); + /* go up three levels */ dn = ads_parent_dn(ads_parent_dn(ads_parent_dn(service_name))); if (dn == NULL) { @@ -2472,8 +2475,6 @@ ADS_STATUS ads_site_dn(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, const char **site_n return ADS_ERROR(LDAP_NO_MEMORY); } - ads_msgfree(ads, res); - return status; /* dsServiceName: CN=NTDS Settings,CN=W2K3DC,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=ber,DC=suse,DC=de @@ -2508,37 +2509,45 @@ ADS_STATUS ads_site_dn_for_machine(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, const c config_context = ads_pull_string(ads, mem_ctx, res, "configurationNamingContext"); if (config_context == NULL) { + ads_msgfree(ads, res); return ADS_ERROR(LDAP_NO_MEMORY); } filter = talloc_asprintf(mem_ctx, "(cn=%s)", computer_name); if (filter == NULL) { + ads_msgfree(ads, res); return ADS_ERROR(LDAP_NO_MEMORY); } + ads_msgfree(ads, res); + status = ads_do_search(ads, config_context, LDAP_SCOPE_SUBTREE, filter, NULL, &res); if (!ADS_ERR_OK(status)) { return status; } if (ads_count_replies(ads, res) != 1) { + ads_msgfree(ads, res); return ADS_ERROR(LDAP_NO_SUCH_OBJECT); } dn = ads_get_dn(ads, res); if (dn == NULL) { + ads_msgfree(ads, res); return ADS_ERROR(LDAP_NO_MEMORY); } /* go up three levels */ parent = ads_parent_dn(ads_parent_dn(ads_parent_dn(dn))); if (parent == NULL) { + ads_msgfree(ads, res); ads_memfree(ads, dn); return ADS_ERROR(LDAP_NO_MEMORY); } *site_dn = talloc_strdup(mem_ctx, parent); if (*site_dn == NULL) { + ads_msgfree(ads, res); ads_memfree(ads, dn); ADS_ERROR(LDAP_NO_MEMORY); }