svn commit: samba r13007 - in branches/SAMBA_4_0/source/nbt_server: .

metze at samba.org metze at samba.org
Wed Jan 18 16:36:55 GMT 2006


Author: metze
Date: 2006-01-18 16:36:53 +0000 (Wed, 18 Jan 2006)
New Revision: 13007

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=13007

Log:
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
Modified:
   branches/SAMBA_4_0/source/nbt_server/defense.c
   branches/SAMBA_4_0/source/nbt_server/interfaces.c
   branches/SAMBA_4_0/source/nbt_server/packet.c


Changeset:
Modified: branches/SAMBA_4_0/source/nbt_server/defense.c
===================================================================
--- branches/SAMBA_4_0/source/nbt_server/defense.c	2006-01-18 16:32:24 UTC (rev 13006)
+++ branches/SAMBA_4_0/source/nbt_server/defense.c	2006-01-18 16:36:53 UTC (rev 13007)
@@ -41,6 +41,15 @@
 	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, 

Modified: branches/SAMBA_4_0/source/nbt_server/interfaces.c
===================================================================
--- branches/SAMBA_4_0/source/nbt_server/interfaces.c	2006-01-18 16:32:24 UTC (rev 13006)
+++ branches/SAMBA_4_0/source/nbt_server/interfaces.c	2006-01-18 16:36:53 UTC (rev 13007)
@@ -42,8 +42,8 @@
 	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;
 	}
 

Modified: branches/SAMBA_4_0/source/nbt_server/packet.c
===================================================================
--- branches/SAMBA_4_0/source/nbt_server/packet.c	2006-01-18 16:32:24 UTC (rev 13006)
+++ branches/SAMBA_4_0/source/nbt_server/packet.c	2006-01-18 16:36:53 UTC (rev 13007)
@@ -41,28 +41,43 @@
   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;
 	}
 



More information about the samba-cvs mailing list