mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
r5259: make sure we give the ip of the interface that a name query comes in
on as the first IP in a multi-homed reply
This commit is contained in:
parent
38ac6b8d57
commit
a9128f6544
@ -234,18 +234,35 @@ NTSTATUS nbtd_startup_interfaces(struct nbtd_server *nbtsrv)
|
||||
|
||||
/*
|
||||
form a list of addresses that we should use in name query replies
|
||||
we always place the IP in the given interface first
|
||||
*/
|
||||
const char **nbtd_address_list(struct nbtd_server *nbtsrv, TALLOC_CTX *mem_ctx)
|
||||
const char **nbtd_address_list(struct nbtd_interface *iface, TALLOC_CTX *mem_ctx)
|
||||
{
|
||||
struct nbtd_server *nbtsrv = iface->nbtsrv;
|
||||
const char **ret = NULL;
|
||||
struct nbtd_interface *iface;
|
||||
int count = 0;
|
||||
struct nbtd_interface *iface2;
|
||||
int count;
|
||||
|
||||
for (iface=nbtsrv->interfaces;iface;iface=iface->next) {
|
||||
const char **ret2 = talloc_realloc(mem_ctx, ret, const char *, count+2);
|
||||
ret = talloc_array(mem_ctx, const char *, 2);
|
||||
if (ret == NULL) goto failed;
|
||||
|
||||
ret[0] = talloc_strdup(ret, iface->ip_address);
|
||||
if (ret[0] == NULL) goto failed;
|
||||
ret[1] = NULL;
|
||||
|
||||
count = 1;
|
||||
|
||||
for (iface2=nbtsrv->interfaces;iface2;iface2=iface2->next) {
|
||||
const char **ret2;
|
||||
|
||||
if (strcmp(iface2->ip_address, iface->ip_address) == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ret2 = talloc_realloc(mem_ctx, ret, const char *, count+2);
|
||||
if (ret2 == NULL) goto failed;
|
||||
ret = ret2;
|
||||
ret[count] = talloc_strdup(ret, iface->ip_address);
|
||||
ret[count] = talloc_strdup(ret, iface2->ip_address);
|
||||
if (ret[count] == NULL) goto failed;
|
||||
count++;
|
||||
}
|
||||
|
@ -129,5 +129,5 @@ void nbtd_request_query(struct nbt_name_socket *nbtsock,
|
||||
|
||||
nbtd_name_query_reply(nbtsock, packet, src_address, src_port,
|
||||
&iname->name, iname->ttl, iname->nb_flags,
|
||||
nbtd_address_list(iface->nbtsrv, packet));
|
||||
nbtd_address_list(iface, packet));
|
||||
}
|
||||
|
@ -107,7 +107,7 @@ void nbtd_winsclient_refresh(struct nbtd_iface_name *iname)
|
||||
/* setup a wins name refresh request */
|
||||
io.in.name = iname->name;
|
||||
io.in.wins_servers = lp_wins_server_list();
|
||||
io.in.addresses = nbtd_address_list(iface->nbtsrv, iname);
|
||||
io.in.addresses = nbtd_address_list(iface, iname);
|
||||
io.in.nb_flags = iname->nb_flags;
|
||||
io.in.ttl = iname->ttl;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user