diff options
Diffstat (limited to 'source4/nbt_server/query.c')
-rw-r--r-- | source4/nbt_server/query.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/source4/nbt_server/query.c b/source4/nbt_server/query.c index f71d7b99ed..39300f6e01 100644 --- a/source4/nbt_server/query.c +++ b/source4/nbt_server/query.c @@ -24,7 +24,7 @@ #include "dlinklist.h" #include "system/network.h" #include "nbt_server/nbt_server.h" - +#include "nbt_server/wins/winsserver.h" /* answer a name query @@ -54,25 +54,30 @@ void nbtd_request_query(struct nbt_name_socket *nbtsock, /* see if we have the requested name on this interface */ name = &packet->questions[0].name; - if (!(packet->operation & NBT_FLAG_BROADCAST) && - (packet->operation & NBT_FLAG_RECURSION_DESIRED)) { - nbtd_winsserver_request(nbtsock, packet, src); - return; - } - iname = nbtd_find_iname(iface, name, 0); - if (iname == NULL) { /* don't send negative replies to broadcast queries */ if (packet->operation & NBT_FLAG_BROADCAST) { return; } + if (packet->operation & NBT_FLAG_RECURSION_DESIRED) { + nbtd_winsserver_request(nbtsock, packet, src); + return; + } + /* otherwise send a negative reply */ nbtd_negative_name_query_reply(nbtsock, packet, src); return; } + if (!(packet->operation & NBT_FLAG_BROADCAST) && + (packet->operation & NBT_FLAG_RECURSION_DESIRED) && + (iname->nb_flags & NBT_NM_GROUP)) { + nbtd_winsserver_request(nbtsock, packet, src); + return; + } + /* if the name is not yet active and its a broadcast query then ignore it for now */ if (!(iname->nb_flags & NBT_NM_ACTIVE) && |