mirror of
https://github.com/samba-team/samba.git
synced 2025-02-02 09:47:23 +03:00
r5222: made the nbtd_self_packet() code more efficient
(This used to be commit 8fe477955d0e28c891281803d625d80cb78a51b0)
This commit is contained in:
parent
db4ba6e690
commit
6348a343de
@ -38,7 +38,8 @@ void nbtd_bad_packet(struct nbt_name_packet *packet,
|
||||
|
||||
|
||||
/*
|
||||
see if an incoming packet is from one of our own interfaces
|
||||
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,
|
||||
@ -48,20 +49,29 @@ BOOL nbtd_self_packet(struct nbt_name_socket *nbtsock,
|
||||
struct nbt_interface);
|
||||
struct nbt_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()) {
|
||||
return False;
|
||||
}
|
||||
|
||||
/* this uses the fact that iface->nbtsock is our non-broadcast
|
||||
listen address */
|
||||
if (iface->nbtsock == nbtsock) {
|
||||
return False;
|
||||
}
|
||||
|
||||
/* we have to loop over our interface list, seeing if its from
|
||||
one of our own interfaces */
|
||||
for (iface=nbtsrv->interfaces;iface;iface=iface->next) {
|
||||
if (strcmp(src_address, iface->ip_address) == 0) {
|
||||
return True;
|
||||
}
|
||||
}
|
||||
|
||||
if (nbtsrv->bcast_interface &&
|
||||
strcmp(src_address, nbtsrv->bcast_interface->ip_address) == 0) {
|
||||
return True;
|
||||
}
|
||||
|
||||
return False;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user