svn commit: samba r5397 - in branches/SAMBA_4_0/source: nbt_server torture/nbt

tridge at samba.org tridge at samba.org
Mon Feb 14 12:46:03 GMT 2005


Author: tridge
Date: 2005-02-14 12:46:03 +0000 (Mon, 14 Feb 2005)
New Revision: 5397

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

Log:
added testing and server support for the special handling required for the 0x1d local master browser name
in WINS


Modified:
   branches/SAMBA_4_0/source/nbt_server/winsserver.c
   branches/SAMBA_4_0/source/torture/nbt/wins.c


Changeset:
Modified: branches/SAMBA_4_0/source/nbt_server/winsserver.c
===================================================================
--- branches/SAMBA_4_0/source/nbt_server/winsserver.c	2005-02-14 11:31:48 UTC (rev 5396)
+++ branches/SAMBA_4_0/source/nbt_server/winsserver.c	2005-02-14 12:46:03 UTC (rev 5397)
@@ -112,6 +112,12 @@
 	uint16_t nb_flags = packet->additional[0].rdata.netbios.addresses[0].nb_flags;
 	const char *address = packet->additional[0].rdata.netbios.addresses[0].ipaddr;
 
+	/* as a special case, the local master browser name is always accepted
+	   for registration, but never stored */
+	if (name->type == NBT_NAME_MASTER) {
+		goto done;
+	}
+
 	rec = winsdb_load(winssrv, name, packet);
 	if (rec == NULL) {
 		rcode = wins_register_new(nbtsock, packet, src_address, src_port);

Modified: branches/SAMBA_4_0/source/torture/nbt/wins.c
===================================================================
--- branches/SAMBA_4_0/source/torture/nbt/wins.c	2005-02-14 11:31:48 UTC (rev 5396)
+++ branches/SAMBA_4_0/source/torture/nbt/wins.c	2005-02-14 12:46:03 UTC (rev 5397)
@@ -111,7 +111,7 @@
 	CHECK_STRING(io.out.wins_server, address);
 	CHECK_VALUE(io.out.rcode, 0);
 
-	if (nb_flags & NBT_NM_GROUP) {
+	if (name->type != NBT_NAME_MASTER && nb_flags & NBT_NM_GROUP) {
 		printf("Try to register as non-group\n");
 		io.in.nb_flags &= ~NBT_NM_GROUP;
 		status = nbt_name_register_wins(nbtsock, mem_ctx, &io);
@@ -132,6 +132,14 @@
 	query.in.retries = 0;
 
 	status = nbt_name_query(nbtsock, mem_ctx, &query);
+	if (name->type == NBT_NAME_MASTER) {
+		if (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND)) {
+			printf("Bad response from %s for name query - %s\n",
+			       address, nt_errstr(status));
+			return False;
+		}
+		return ret;
+	}
 	if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
 		printf("No response from %s for name query\n", address);
 		return False;
@@ -287,6 +295,11 @@
 	name.scope = NULL;
 	ret &= nbt_test_wins_name(mem_ctx, address, &name, NBT_NODE_H);
 
+	name.type = NBT_NAME_MASTER;
+	ret &= nbt_test_wins_name(mem_ctx, address, &name, NBT_NODE_H);
+
+	ret &= nbt_test_wins_name(mem_ctx, address, &name, NBT_NODE_H | NBT_NM_GROUP);
+
 	name.scope = "example";
 	name.type = 0x72;
 	ret &= nbt_test_wins_name(mem_ctx, address, &name, NBT_NODE_H);



More information about the samba-cvs mailing list