Fix a memleak caused by a crappy get_sorted_dc_list() API
authorVolker Lendecke <vl@samba.org>
Thu, 5 Jun 2008 08:38:58 +0000 (10:38 +0200)
committerVolker Lendecke <vl@samba.org>
Thu, 5 Jun 2008 08:56:18 +0000 (10:56 +0200)
(This used to be commit 2ea03a1e95a30e321e390bef9408a1215711de07)

source3/winbindd/winbindd_cm.c

index 312d30371fe70bd49d939ebef97f9d6b65d66c79..ae51c268bd7a179a7ac29e651b157df250f55427 100644 (file)
@@ -1167,9 +1167,20 @@ static bool get_dcs(TALLOC_CTX *mem_ctx, struct winbindd_domain *domain,
 
                sitename = sitename_fetch(domain->alt_name);
                if (sitename) {
+                       NTSTATUS status;
 
                        /* Do the site-specific AD dns lookup first. */
-                       get_sorted_dc_list(domain->alt_name, sitename, &ip_list, &iplist_size, True);
+                       status = get_sorted_dc_list(domain->alt_name,
+                                                   sitename, &ip_list,
+                                                   &iplist_size, True);
+                       if (!NT_STATUS_IS_OK(status)) {
+                               /*
+                                * Work around a crappy about-to-be-replaced
+                                * get_sorted_dc_list error handling :-)
+                                */
+                               SAFE_FREE(ip_list);
+                               iplist_size = 0;
+                       }
 
                        for ( i=0; i<iplist_size; i++ ) {
                                char addr[INET6_ADDRSTRLEN];
@@ -1202,6 +1213,8 @@ static bool get_dcs(TALLOC_CTX *mem_ctx, struct winbindd_domain *domain,
                                        dcs,
                                        num_dcs);
                }
+               SAFE_FREE(ip_list);
+               iplist_size = 0;
         }
 
        /* try standard netbios queries if no ADS */