svn commit: samba r11480 - in branches/SAMBA_4_0/source/torture/nbt: .

metze at samba.org metze at samba.org
Wed Nov 2 17:15:17 GMT 2005


Author: metze
Date: 2005-11-02 17:15:17 +0000 (Wed, 02 Nov 2005)
New Revision: 11480

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

Log:
demonstrate the only the positive name query response cares,
not the addresses that are returned in it

metze
Modified:
   branches/SAMBA_4_0/source/torture/nbt/winsreplication.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/nbt/winsreplication.c
===================================================================
--- branches/SAMBA_4_0/source/torture/nbt/winsreplication.c	2005-11-02 16:48:22 UTC (rev 11479)
+++ branches/SAMBA_4_0/source/torture/nbt/winsreplication.c	2005-11-02 17:15:17 UTC (rev 11480)
@@ -5531,6 +5531,9 @@
 		BOOL positive;
 		BOOL expect_release;
 		BOOL ret;
+		/* when num_ips == 0, then .wins.ips are used */
+		uint32_t num_ips;
+		const struct wrepl_ip *ips;
 	} defend;
 	struct {
 		enum wrepl_name_type type;
@@ -5616,6 +5619,35 @@
 		},
 	},
 	/*
+	 * unique,active vs. unique,active with different ip(s), positive response other ips
+	 */
+	{
+		.line	= __location__,
+		.name	= _NBT_NAME("_UA_UA_DI_O", 0x00, NULL),
+		.wins	= {
+			.nb_flags	= 0,
+			.mhomed		= False,
+			.num_ips	= ctx->addresses_best_num,
+			.ips		= ctx->addresses_best,
+			.apply_expected	= True
+		},
+		.defend	= {
+			.timeout	= 10,
+			.positive	= True,
+			.num_ips	= ARRAY_SIZE(addresses_A_3_4),
+			.ips		= addresses_A_3_4,
+		},
+		.replica= {
+			.type		= WREPL_TYPE_UNIQUE,
+			.state		= WREPL_STATE_ACTIVE,
+			.node		= WREPL_NODE_B,
+			.is_static	= False,
+			.num_ips	= ARRAY_SIZE(addresses_B_1),
+			.ips		= addresses_B_1,
+			.apply_expected	= False
+		},
+	},
+	/*
 	 * unique,active vs. unique,active with different ip(s), negative response
 	 */
 	{
@@ -5995,6 +6027,35 @@
 		},
 	},
 	/*
+	 * unique,active vs. mhomed,active with different ip(s), positive response other ips
+	 */
+	{
+		.line	= __location__,
+		.name	= _NBT_NAME("_UA_MA_DI_O", 0x00, NULL),
+		.wins	= {
+			.nb_flags	= 0,
+			.mhomed		= False,
+			.num_ips	= ctx->addresses_best_num,
+			.ips		= ctx->addresses_best,
+			.apply_expected	= True
+		},
+		.defend	= {
+			.timeout	= 10,
+			.positive	= True,
+			.num_ips	= ARRAY_SIZE(addresses_A_3_4),
+			.ips		= addresses_A_3_4,
+		},
+		.replica= {
+			.type		= WREPL_TYPE_MHOMED,
+			.state		= WREPL_STATE_ACTIVE,
+			.node		= WREPL_NODE_B,
+			.is_static	= False,
+			.num_ips	= ARRAY_SIZE(addresses_B_3_4),
+			.ips		= addresses_B_3_4,
+			.apply_expected	= False
+		},
+	},
+	/*
 	 * unique,active vs. mhomed,active with different ip(s), negative response
 	 */
 	{
@@ -6879,6 +6940,35 @@
 		},
 	},
 	/*
+	 * mhomed,active vs. unique,active with different ip(s), positive response other ips
+	 */
+	{
+		.line	= __location__,
+		.name	= _NBT_NAME("_MA_UA_DI_O", 0x00, NULL),
+		.wins	= {
+			.nb_flags	= 0,
+			.mhomed		= True,
+			.num_ips	= ctx->addresses_best_num,
+			.ips		= ctx->addresses_best,
+			.apply_expected	= True
+		},
+		.defend	= {
+			.timeout	= 10,
+			.positive	= True,
+			.num_ips	= ARRAY_SIZE(addresses_A_3_4),
+			.ips		= addresses_A_3_4,
+		},
+		.replica= {
+			.type		= WREPL_TYPE_UNIQUE,
+			.state		= WREPL_STATE_ACTIVE,
+			.node		= WREPL_NODE_B,
+			.is_static	= False,
+			.num_ips	= ARRAY_SIZE(addresses_B_1),
+			.ips		= addresses_B_1,
+			.apply_expected	= False
+		},
+	},
+	/*
 	 * mhomed,active vs. unique,active with different ip(s), negative response
 	 */
 	{
@@ -7252,12 +7342,41 @@
 			.state		= WREPL_STATE_ACTIVE,
 			.node		= WREPL_NODE_B,
 			.is_static	= False,
-			.num_ips	= ARRAY_SIZE(addresses_B_1),
-			.ips		= addresses_B_1,
+			.num_ips	= ARRAY_SIZE(addresses_B_3_4),
+			.ips		= addresses_B_3_4,
 			.apply_expected	= False
 		},
 	},
 	/*
+	 * mhomed,active vs. mhomed,active with different ip(s), positive response other ips
+	 */
+	{
+		.line	= __location__,
+		.name	= _NBT_NAME("_MA_MA_DI_O", 0x00, NULL),
+		.wins	= {
+			.nb_flags	= 0,
+			.mhomed		= True,
+			.num_ips	= ctx->addresses_best_num,
+			.ips		= ctx->addresses_best,
+			.apply_expected	= True
+		},
+		.defend	= {
+			.timeout	= 10,
+			.positive	= True,
+			.num_ips	= ARRAY_SIZE(addresses_A_3_4),
+			.ips		= addresses_A_3_4,
+		},
+		.replica= {
+			.type		= WREPL_TYPE_MHOMED,
+			.state		= WREPL_STATE_ACTIVE,
+			.node		= WREPL_NODE_B,
+			.is_static	= False,
+			.num_ips	= ARRAY_SIZE(addresses_B_3_4),
+			.ips		= addresses_B_3_4,
+			.apply_expected	= False
+		},
+	},
+	/*
 	 * mhomed,active vs. mhomed,active with different ip(s), negative response
 	 */
 	{
@@ -7519,8 +7638,17 @@
 	rep_packet->answers[0].ttl       = 0;
 
 	if (rec->defend.positive) {
-		uint32_t i;
+		uint32_t i, num_ips;
+		const struct wrepl_ip *ips;		
 
+		if (rec->defend.num_ips > 0) {
+			num_ips	= rec->defend.num_ips;
+			ips	= rec->defend.ips;
+		} else {
+			num_ips	= rec->wins.num_ips;
+			ips	= rec->wins.ips;
+		}
+
 		/* send a positive reply */
 		rep_packet->operation	= 
 					NBT_FLAG_REPLY | 
@@ -7531,16 +7659,16 @@
 
 		rep_packet->answers[0].rr_type   = NBT_QTYPE_NETBIOS;
 
-		rep_packet->answers[0].rdata.netbios.length = rec->wins.num_ips*6;
+		rep_packet->answers[0].rdata.netbios.length = num_ips*6;
 		rep_packet->answers[0].rdata.netbios.addresses = 
-			talloc_array(rep_packet->answers, struct nbt_rdata_address, rec->wins.num_ips);
+			talloc_array(rep_packet->answers, struct nbt_rdata_address, num_ips);
 		if (rep_packet->answers[0].rdata.netbios.addresses == NULL) return;
 
-		for (i=0; i < rec->wins.num_ips; i++) {
+		for (i=0; i < num_ips; i++) {
 			struct nbt_rdata_address *addr = 
 				&rep_packet->answers[0].rdata.netbios.addresses[i];
 			addr->nb_flags	= rec->wins.nb_flags;
-			addr->ipaddr	= rec->wins.ips[i].ip;
+			addr->ipaddr	= ips[i].ip;
 		}
 		DEBUG(2,("Sending positive name query reply for %s to %s:%d\n", 
 			nbt_name_string(rep_packet, name), src->addr, src->port));



More information about the samba-cvs mailing list