s3:libads: Allocate ads->config.realm under ADS_STRUCT talloc context
authorSamuel Cabrero <scabrero@samba.org>
Mon, 13 Jun 2022 15:44:02 +0000 (17:44 +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_struct.c
source3/libads/ldap.c
source3/utils/net_ads.c

index 4e9a2d33c0806732e1838875d2577cdf33d09212..5453a00a853aa81954c96f844d9981deaf27231e 100644 (file)
@@ -130,7 +130,6 @@ static void ads_destroy(ADS_STRUCT **ads)
 #ifdef HAVE_LDAP
                ads_disconnect(*ads);
 #endif
-               SAFE_FREE((*ads)->config.realm);
                SAFE_FREE((*ads)->config.bind_path);
                SAFE_FREE((*ads)->config.ldap_server_name);
                SAFE_FREE((*ads)->config.server_site_name);
index 5ac5b1b0e1296ce5a57c2594ec6297eece9dfc55..e7117b79ede3e1acefa308b527eaddf10d13638e 100755 (executable)
@@ -291,7 +291,7 @@ static bool ads_try_connect(ADS_STRUCT *ads, bool gc,
 
        /* Fill in the ads->config values */
 
-       SAFE_FREE(ads->config.realm);
+       TALLOC_FREE(ads->config.realm);
        SAFE_FREE(ads->config.bind_path);
        SAFE_FREE(ads->config.ldap_server_name);
        SAFE_FREE(ads->config.server_site_name);
@@ -305,8 +305,11 @@ static bool ads_try_connect(ADS_STRUCT *ads, bool gc,
        }
 
        ads->config.ldap_server_name   = SMB_STRDUP(cldap_reply.pdc_dns_name);
-       ads->config.realm              = SMB_STRDUP(cldap_reply.dns_domain);
-       if (!strupper_m(ads->config.realm)) {
+       ads->config.realm = talloc_asprintf_strupper_m(ads,
+                                                      "%s",
+                                                      cldap_reply.dns_domain);
+       if (ads->config.realm == NULL) {
+               DBG_WARNING("Out of memory\n");
                ret = false;
                goto out;
        }
index b842171d892235892c354eece737115d29db7e4c..3086652706fe03d70537ccab4a891352ccf36ac7 100644 (file)
@@ -436,7 +436,11 @@ static int net_ads_lookup(struct net_context *c, int argc, const char **argv)
        }
 
        if (!ads->config.realm) {
-               ads->config.realm = discard_const_p(char, c->opt_target_workgroup);
+               ads->config.realm = talloc_strdup(ads, c->opt_target_workgroup);
+               if (ads->config.realm == NULL) {
+                       d_fprintf(stderr, _("Out of memory\n"));
+                       goto out;
+               }
                ads->ldap.port = 389;
        }
 
@@ -844,7 +848,11 @@ static int net_ads_workgroup(struct net_context *c, int argc, const char **argv)
        }
 
        if (!ads->config.realm) {
-               ads->config.realm = discard_const_p(char, c->opt_target_workgroup);
+               ads->config.realm = talloc_strdup(ads, c->opt_target_workgroup);
+               if (ads->config.realm == NULL) {
+                       d_fprintf(stderr, _("Out of memory\n"));
+                       goto out;
+               }
                ads->ldap.port = 389;
        }