r18879: Fix crash for "net ads gpo list".
authorGünther Deschner <gd@samba.org>
Sun, 24 Sep 2006 23:44:00 +0000 (23:44 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:14:41 +0000 (12:14 -0500)
Guenther
(This used to be commit 7df5808d8b1d9458dbd47b92750c0b128325335c)

source3/libads/gpo.c
source3/utils/net_ads_gpo.c

index 84898ab38718940ed5acea53465c853b3db66356..fc7f9064e81a359527b7c9e08f8ef402a7b1ce0a 100644 (file)
@@ -380,12 +380,10 @@ ADS_STATUS ads_delete_gpo_link(ADS_STRUCT *ads,
                gpo->ds_path = ads_get_dn(ads, res);
        }
        if (gpo->ds_path == NULL) {
-               ads_msgfree(ads, res);
                return ADS_ERROR(LDAP_NO_MEMORY);
        }
 
        if (!ads_pull_uint32(ads, res, "versionNumber", &gpo->version)) {
-               ads_msgfree(ads, res);
                return ADS_ERROR(LDAP_NO_MEMORY);
        }
 
@@ -395,25 +393,21 @@ ADS_STATUS ads_delete_gpo_link(ADS_STRUCT *ads,
 
        /* sure ??? */
        if (!ads_pull_uint32(ads, res, "flags", &gpo->options)) {
-               ads_msgfree(ads, res);
                return ADS_ERROR(LDAP_NO_MEMORY);
        }
 
        gpo->file_sys_path = ads_pull_string(ads, mem_ctx, res, "gPCFileSysPath");
        if (gpo->file_sys_path == NULL) {
-               ads_msgfree(ads, res);
                return ADS_ERROR(LDAP_NO_MEMORY);
        }
 
        gpo->display_name = ads_pull_string(ads, mem_ctx, res, "displayName");
        if (gpo->display_name == NULL) {
-               ads_msgfree(ads, res);
                return ADS_ERROR(LDAP_NO_MEMORY);
        }
 
        gpo->name = ads_pull_string(ads, mem_ctx, res, "name");
        if (gpo->name == NULL) {
-               ads_msgfree(ads, res);
                return ADS_ERROR(LDAP_NO_MEMORY);
        }
 
@@ -421,8 +415,6 @@ ADS_STATUS ads_delete_gpo_link(ADS_STRUCT *ads,
        gpo->machine_extensions = ads_pull_string(ads, mem_ctx, res, "gPCMachineExtensionNames");
        gpo->user_extensions = ads_pull_string(ads, mem_ctx, res, "gPCUserExtensionNames");
 
-       ads_msgfree(ads, res);
-
        return ADS_ERROR(LDAP_SUCCESS);
 }
 
@@ -478,16 +470,18 @@ ADS_STATUS ads_get_gpo(ADS_STRUCT *ads,
 
        if (ads_count_replies(ads, res) != 1) {
                DEBUG(10,("ads_get_gpo: no result\n"));
+               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);
        }
        
        status = ads_parse_gpo(ads, mem_ctx, res, dn, gpo);
-       
+       ads_msgfree(ads, res);
        ads_memfree(ads, dn);
 
        return status;
index 094ab099382f9a64879ebe44994bce64872f03e1..dc0bcb74d22af8a68bd6971245b98206a63ad50e 100644 (file)
@@ -139,6 +139,16 @@ static int net_ads_gpo_list(int argc, const char **argv)
        struct GROUP_POLICY_OBJECT gpo;
        TALLOC_CTX *mem_ctx;
        char *dn;
+       const char *attrs[] = {
+               "versionNumber",
+               "flags",
+               "gPCFileSysPath",
+               "displayName",
+               "name",
+               "gPCMachineExtensionNames",
+               "gPCUserExtensionNames",
+               NULL
+       };
 
        mem_ctx = talloc_init("net_ads_gpo_list");
        if (mem_ctx == NULL) {
@@ -152,7 +162,7 @@ static int net_ads_gpo_list(int argc, const char **argv)
 
        status = ads_do_search_all(ads, ads->config.bind_path,
                                   LDAP_SCOPE_SUBTREE,
-                                  "(objectclass=groupPolicyContainer)", NULL, &res);
+                                  "(objectclass=groupPolicyContainer)", attrs, &res);
        if (!ADS_ERR_OK(status)) {
                d_printf("search failed: %s\n", ads_errstr(status));
                goto out;