summaryrefslogtreecommitdiff
path: root/source4/libcli/resolve
diff options
context:
space:
mode:
Diffstat (limited to 'source4/libcli/resolve')
-rw-r--r--source4/libcli/resolve/nbtlist.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/source4/libcli/resolve/nbtlist.c b/source4/libcli/resolve/nbtlist.c
index 595743e693..21792a665a 100644
--- a/source4/libcli/resolve/nbtlist.c
+++ b/source4/libcli/resolve/nbtlist.c
@@ -38,6 +38,7 @@ struct nbtlist_state {
struct nbt_name_request **queries;
struct nbt_name_query *io_queries;
const char *reply_addr;
+ struct interface *ifaces;
};
/*
@@ -49,7 +50,6 @@ 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++) {
@@ -76,16 +76,14 @@ static void nbtlist_handler(struct nbt_name_request *req)
}
/* favor a local address if possible */
- load_interfaces(NULL, lp_interfaces(global_loadparm), &ifaces);
state->reply_addr = NULL;
for (i=0;i<q->out.num_addrs;i++) {
- if (iface_is_local(ifaces, q->out.reply_addrs[i])) {
+ if (iface_is_local(state->ifaces, q->out.reply_addrs[i])) {
state->reply_addr = talloc_steal(state,
q->out.reply_addrs[i]);
break;
}
}
- talloc_free(ifaces);
if (state->reply_addr == NULL) {
state->reply_addr = talloc_steal(state,
@@ -129,6 +127,8 @@ struct composite_context *resolve_name_nbtlist_send(TALLOC_CTX *mem_ctx,
if (composite_nomem(state->name.scope, c)) return c;
}
+ load_interfaces(state, lp_interfaces(global_loadparm), &state->ifaces);
+
/*
* we can't push long names on the wire,
* so bail out here to give a useful error message
@@ -200,7 +200,8 @@ NTSTATUS resolve_name_nbtlist(struct nbt_name *name,
bool broadcast, bool wins_lookup,
const char **reply_addr)
{
- struct composite_context *c = resolve_name_nbtlist_send(mem_ctx, NULL, name, address_list,
+ struct composite_context *c = resolve_name_nbtlist_send(mem_ctx, NULL,
+ name, address_list,
broadcast, wins_lookup);
return resolve_name_nbtlist_recv(c, mem_ctx, reply_addr);
}