summaryrefslogtreecommitdiff
path: root/source4/nbt_server/packet.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/nbt_server/packet.c')
-rw-r--r--source4/nbt_server/packet.c37
1 files changed, 26 insertions, 11 deletions
diff --git a/source4/nbt_server/packet.c b/source4/nbt_server/packet.c
index 8909d7bbc4..d73a3b027a 100644
--- a/source4/nbt_server/packet.c
+++ b/source4/nbt_server/packet.c
@@ -41,28 +41,43 @@ void nbtd_bad_packet(struct nbt_name_packet *packet,
see if an incoming packet is a broadcast packet from one of our own
interfaces
*/
-BOOL nbtd_self_packet(struct nbt_name_socket *nbtsock,
- struct nbt_name_packet *packet,
- const struct socket_address *src)
+BOOL nbtd_self_packet_and_bcast(struct nbt_name_socket *nbtsock,
+ struct nbt_name_packet *packet,
+ const struct socket_address *src)
{
struct nbtd_interface *iface = talloc_get_type(nbtsock->incoming.private,
struct nbtd_interface);
- struct nbtd_server *nbtsrv = iface->nbtsrv;
-
+
/* if its not a broadcast then its not considered a self packet */
if (!(packet->operation & NBT_FLAG_BROADCAST)) {
return False;
}
- /* if its not from the nbt port, then it wasn't a broadcast from us */
- if (src->port != lp_nbt_port()) {
+ /*
+ * this uses the fact that iface->nbtsock is the unicast listen address
+ * if the interface isn't the global bcast interface
+ *
+ * so if the request was directed to the unicast address it isn't a broadcast
+ * message
+ */
+ if (iface->nbtsock == nbtsock &&
+ iface != iface->nbtsrv->bcast_interface) {
return False;
}
- /* this uses the fact that iface->nbtsock is our non-broadcast
- listen address */
- if (iface->nbtsock == nbtsock &&
- iface != iface->nbtsrv->bcast_interface) {
+ return nbtd_self_packet(nbtsock, packet, src);
+}
+
+BOOL nbtd_self_packet(struct nbt_name_socket *nbtsock,
+ struct nbt_name_packet *packet,
+ const struct socket_address *src)
+{
+ struct nbtd_interface *iface = talloc_get_type(nbtsock->incoming.private,
+ struct nbtd_interface);
+ struct nbtd_server *nbtsrv = iface->nbtsrv;
+
+ /* if its not from the nbt port, then it wasn't a broadcast from us */
+ if (src->port != lp_nbt_port()) {
return False;
}