1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-03 13:47:25 +03:00

r13007: let our winsclient code register multihomed records with

our winsserver and don't defend our local name against
our own register packets...

this won gave quite confusing logmessages...

metze
This commit is contained in:
Stefan Metzmacher 2006-01-18 16:36:53 +00:00 committed by Gerald (Jerry) Carter
parent f7481a4c8c
commit 31ce24d7b1
3 changed files with 38 additions and 14 deletions

View File

@ -41,6 +41,15 @@ void nbtd_request_defense(struct nbt_name_socket *nbtsock,
struct nbtd_interface *iface = talloc_get_type(nbtsock->incoming.private,
struct nbtd_interface);
/*
* if the packet comes from one of our interfaces
* it must be our winsclient trying to reach the winsserver
*/
if (nbtd_self_packet(nbtsock, packet, src)) {
nbtd_winsserver_request(nbtsock, packet, src);
return;
}
NBTD_ASSERT_PACKET(packet, src, packet->qdcount == 1);
NBTD_ASSERT_PACKET(packet, src, packet->arcount == 1);
NBTD_ASSERT_PACKET(packet, src,

View File

@ -42,8 +42,8 @@ static void nbtd_request_handler(struct nbt_name_socket *nbtsock,
nbtsrv->stats.total_received++;
/* see if its from one of our own interfaces - if so, then ignore it */
if (nbtd_self_packet(nbtsock, packet, src)) {
DEBUG(10,("Ignoring self packet from %s:%d\n", src->addr, src->port));
if (nbtd_self_packet_and_bcast(nbtsock, packet, src)) {
DEBUG(10,("Ignoring bcast self packet from %s:%d\n", src->addr, src->port));
return;
}

View File

@ -41,6 +41,33 @@ 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_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);
/* if its not a broadcast then its not considered a self packet */
if (!(packet->operation & NBT_FLAG_BROADCAST)) {
return False;
}
/*
* 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;
}
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)
@ -49,23 +76,11 @@ BOOL nbtd_self_packet(struct nbt_name_socket *nbtsock,
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()) {
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 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) {