s3:libads: Allocate ads->config.bind_path under ADS_STRUCT talloc context
authorSamuel Cabrero <scabrero@samba.org>
Wed, 15 Jun 2022 09:36:25 +0000 (11:36 +0200)
committerJeremy Allison <jra@samba.org>
Mon, 27 Jun 2022 15:50:30 +0000 (15:50 +0000)
Signed-off-by: Samuel Cabrero <scabrero@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/libads/ads_proto.h
source3/libads/ads_struct.c
source3/libads/ldap.c

index 9e65faa466894f4e6dfe6713008ed72a2653cc41..ce04ac2a2520882540a4ca415abfbd67659e3216 100644 (file)
@@ -45,7 +45,7 @@ ADS_STATUS ads_build_path(const char *realm,
                          const char *field,
                          int reverse,
                          char **_path);
-ADS_STATUS ads_build_dn(const char *realm, char **_dn);
+ADS_STATUS ads_build_dn(const char *realm, TALLOC_CTX *mem_ctx, char **_dn);
 char *ads_build_domain(const char *dn);
 ADS_STRUCT *ads_init(TALLOC_CTX *mem_ctx,
                     const char *realm,
index a1954bd37db6f465c9d9d8fe6246158fc986ce13..79aa517e1236821c4059fb807c6f1a7172a7d75e 100644 (file)
@@ -100,7 +100,7 @@ ADS_STATUS ads_build_path(const char *realm,
    realm of the form AA.BB.CC 
    caller must free
 */
-ADS_STATUS ads_build_dn(const char *realm, char **_dn)
+ADS_STATUS ads_build_dn(const char *realm, TALLOC_CTX *mem_ctx, char **_dn)
 {
        ADS_STATUS status;
        char *dn = NULL;
@@ -110,7 +110,11 @@ ADS_STATUS ads_build_dn(const char *realm, char **_dn)
                return status;
        }
 
-       *_dn = dn;
+       *_dn = talloc_strdup(mem_ctx, dn);
+       SAFE_FREE(dn);
+       if (*_dn == NULL) {
+               return ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
+       }
 
        return ADS_ERROR_NT(NT_STATUS_OK);
 }
@@ -149,7 +153,6 @@ static void ads_destroy(ADS_STRUCT **ads)
 #ifdef HAVE_LDAP
                ads_disconnect(*ads);
 #endif
-               SAFE_FREE((*ads)->config.bind_path);
                SAFE_FREE((*ads)->config.ldap_server_name);
                SAFE_FREE((*ads)->config.server_site_name);
                SAFE_FREE((*ads)->config.client_site_name);
index 4fc0ab9b8c2abf4293dd7223970b61ad75abd193..a471ac2f07171a087a70f28a136573ef0f99dc63 100755 (executable)
@@ -293,7 +293,7 @@ static bool ads_try_connect(ADS_STRUCT *ads, bool gc,
        /* Fill in the ads->config values */
 
        TALLOC_FREE(ads->config.realm);
-       SAFE_FREE(ads->config.bind_path);
+       TALLOC_FREE(ads->config.bind_path);
        SAFE_FREE(ads->config.ldap_server_name);
        SAFE_FREE(ads->config.server_site_name);
        SAFE_FREE(ads->config.client_site_name);
@@ -315,7 +315,7 @@ static bool ads_try_connect(ADS_STRUCT *ads, bool gc,
                goto out;
        }
 
-       status = ads_build_dn(ads->config.realm, &ads->config.bind_path);
+       status = ads_build_dn(ads->config.realm, ads, &ads->config.bind_path);
        if (!ADS_ERR_OK(status)) {
                DBG_DEBUG("Failed to build bind path: %s\n",
                          ads_errstr(status));