r26401: Don't cache interfaces context in libnetif.
[samba.git] / source4 / libcli / resolve / nbtlist.c
index be4d01b79a4b5a1ff2f4a548011640486d9beeeb..6c12fe706b432095d4bfc3fad2c30a9148a63102 100644 (file)
@@ -49,6 +49,7 @@ static void nbtlist_handler(struct nbt_name_request *req)
                                                      struct composite_context);
        struct nbtlist_state *state = talloc_get_type(c->private_data, struct nbtlist_state);
        struct nbt_name_query *q;
+       struct interface *ifaces;
        int i;
 
        for (i=0;i<state->num_queries;i++) {
@@ -75,9 +76,10 @@ static void nbtlist_handler(struct nbt_name_request *req)
        }
 
        /* favor a local address if possible */
+       load_interfaces(lp_interfaces(global_loadparm), &ifaces);
        state->reply_addr = NULL;
        for (i=0;i<q->out.num_addrs;i++) {
-               if (iface_is_local(q->out.reply_addrs[i])) {
+               if (iface_is_local(ifaces, q->out.reply_addrs[i])) {
                        state->reply_addr = talloc_steal(state, 
                                                         q->out.reply_addrs[i]);
                        break;
@@ -99,8 +101,8 @@ struct composite_context *resolve_name_nbtlist_send(TALLOC_CTX *mem_ctx,
                                                    struct event_context *event_ctx,
                                                    struct nbt_name *name, 
                                                    const char **address_list,
-                                                   BOOL broadcast,
-                                                   BOOL wins_lookup)
+                                                   bool broadcast,
+                                                   bool wins_lookup)
 {
        struct composite_context *c;
        struct nbtlist_state *state;
@@ -151,11 +153,12 @@ struct composite_context *resolve_name_nbtlist_send(TALLOC_CTX *mem_ctx,
        for (i=0;i<state->num_queries;i++) {
                state->io_queries[i].in.name        = state->name;
                state->io_queries[i].in.dest_addr   = talloc_strdup(state->io_queries, address_list[i]);
+               state->io_queries[i].in.dest_port   = lp_nbt_port(global_loadparm);
                if (composite_nomem(state->io_queries[i].in.dest_addr, c)) return c;
 
                state->io_queries[i].in.broadcast   = broadcast;
                state->io_queries[i].in.wins_lookup = wins_lookup;
-               state->io_queries[i].in.timeout     = lp_parm_int(NULL, "nbt", "timeout", 1);
+               state->io_queries[i].in.timeout     = lp_parm_int(global_loadparm, NULL, "nbt", "timeout", 1);
                state->io_queries[i].in.retries     = 2;
 
                state->queries[i] = nbt_name_query_send(state->nbtsock, &state->io_queries[i]);
@@ -193,7 +196,7 @@ NTSTATUS resolve_name_nbtlist_recv(struct composite_context *c,
 NTSTATUS resolve_name_nbtlist(struct nbt_name *name, 
                              TALLOC_CTX *mem_ctx,
                              const char **address_list,
-                             BOOL broadcast, BOOL wins_lookup,
+                             bool broadcast, bool wins_lookup,
                              const char **reply_addr)
 {
        struct composite_context *c = resolve_name_nbtlist_send(mem_ctx, NULL, name, address_list,