Use talloc_stackframe() not talloc_tos() in namequery.c
authorAndrew Bartlett <abartlet@samba.org>
Thu, 26 Oct 2017 03:06:27 +0000 (16:06 +1300)
committerGarming Sam <garming@samba.org>
Mon, 20 Nov 2017 20:41:15 +0000 (21:41 +0100)
The pygpo code calls these functions but there was not stackframe set up so
tallos_tos() fails.

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Signed-off-by: David Mulder <dmulder@suse.com>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
source3/libsmb/namequery.c

index afc2bc06d3f76733c0b8e15b189c177f2671bd98..4b41546b533041c734b2a4b67c2240096ca70332 100644 (file)
@@ -2862,12 +2862,15 @@ bool resolve_name(const char *name,
        char *sitename = NULL;
        int count = 0;
        NTSTATUS status;
+       TALLOC_CTX *frame = NULL;
 
        if (is_ipaddress(name)) {
                return interpret_string_addr(return_ss, name, AI_NUMERICHOST);
        }
 
-       sitename = sitename_fetch(talloc_tos(), lp_realm()); /* wild guess */
+       frame = talloc_stackframe();
+
+       sitename = sitename_fetch(frame, lp_realm()); /* wild guess */
 
        status = internal_resolve_name(name, name_type, sitename,
                                       &ss_list, &count,
@@ -2882,7 +2885,7 @@ bool resolve_name(const char *name,
                                                (ss_list[i].ss.ss_family == AF_INET)) {
                                        *return_ss = ss_list[i].ss;
                                        SAFE_FREE(ss_list);
-                                       TALLOC_FREE(sitename);
+                                       TALLOC_FREE(frame);
                                        return True;
                                }
                        }
@@ -2894,14 +2897,14 @@ bool resolve_name(const char *name,
                            !is_broadcast_addr((struct sockaddr *)(void *)&ss_list[i].ss)) {
                                *return_ss = ss_list[i].ss;
                                SAFE_FREE(ss_list);
-                               TALLOC_FREE(sitename);
+                               TALLOC_FREE(frame);
                                return True;
                        }
                }
        }
 
        SAFE_FREE(ss_list);
-       TALLOC_FREE(sitename);
+       TALLOC_FREE(frame);
        return False;
 }
 
@@ -3092,16 +3095,12 @@ static NTSTATUS get_dc_list(const char *domain,
        bool done_auto_lookup = false;
        int auto_count = 0;
        NTSTATUS status;
-       TALLOC_CTX *ctx = talloc_init("get_dc_list");
+       TALLOC_CTX *ctx = talloc_stackframe();
        int auto_name_type = 0x1C;
 
        *ip_list = NULL;
        *count = 0;
 
-       if (!ctx) {
-               return NT_STATUS_NO_MEMORY;
-       }
-
        *ordered = False;
 
        /* if we are restricted to solely using DNS for looking