From 82bf0da9d33d84023338498a6fde9f9f91b173d8 Mon Sep 17 00:00:00 2001 From: Günther Deschner Date: Sun, 24 Sep 2006 23:44:00 +0000 Subject: r18879: Fix crash for "net ads gpo list". Guenther (This used to be commit 7df5808d8b1d9458dbd47b92750c0b128325335c) --- source3/libads/gpo.c | 12 +++--------- source3/utils/net_ads_gpo.c | 12 +++++++++++- 2 files changed, 14 insertions(+), 10 deletions(-) (limited to 'source3') diff --git a/source3/libads/gpo.c b/source3/libads/gpo.c index 84898ab387..fc7f9064e8 100644 --- a/source3/libads/gpo.c +++ b/source3/libads/gpo.c @@ -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; diff --git a/source3/utils/net_ads_gpo.c b/source3/utils/net_ads_gpo.c index 094ab09938..dc0bcb74d2 100644 --- a/source3/utils/net_ads_gpo.c +++ b/source3/utils/net_ads_gpo.c @@ -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; -- cgit