svn commit: samba r6245 - in branches/SAMBA_4_0/source: libcli/dgram librpc/idl torture/nbt

tridge at samba.org tridge at samba.org
Fri Apr 8 05:34:14 GMT 2005


Author: tridge
Date: 2005-04-08 05:34:13 +0000 (Fri, 08 Apr 2005)
New Revision: 6245

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

Log:
receive and parse the GETDC response in the NBT-DGRAM test. The test
now tries to bind to port 138 if possible, so if you run it as root
and smbd/nmbd is not running then it works against windows servers

Modified:
   branches/SAMBA_4_0/source/libcli/dgram/libdgram.h
   branches/SAMBA_4_0/source/libcli/dgram/mailslot.c
   branches/SAMBA_4_0/source/libcli/dgram/netlogon.c
   branches/SAMBA_4_0/source/librpc/idl/nbt.idl
   branches/SAMBA_4_0/source/torture/nbt/dgram.c


Changeset:
Modified: branches/SAMBA_4_0/source/libcli/dgram/libdgram.h
===================================================================
--- branches/SAMBA_4_0/source/libcli/dgram/libdgram.h	2005-04-08 05:06:31 UTC (rev 6244)
+++ branches/SAMBA_4_0/source/libcli/dgram/libdgram.h	2005-04-08 05:34:13 UTC (rev 6245)
@@ -124,5 +124,7 @@
 				      const char *dest_address,
 				      struct nbt_name *src_name,
 				      struct nbt_netlogon_packet *request);
-
-
+NTSTATUS dgram_mailslot_netlogon_parse(struct dgram_mailslot_handler *dgmslot,
+				       TALLOC_CTX *mem_ctx,
+				       struct nbt_dgram_packet *dgram,
+				       struct nbt_netlogon_packet *netlogon);

Modified: branches/SAMBA_4_0/source/libcli/dgram/mailslot.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/dgram/mailslot.c	2005-04-08 05:06:31 UTC (rev 6244)
+++ branches/SAMBA_4_0/source/libcli/dgram/mailslot.c	2005-04-08 05:34:13 UTC (rev 6245)
@@ -64,6 +64,8 @@
 	DLIST_ADD(dgmsock->mailslot_handlers, dgmslot);
 	talloc_set_destructor(dgmslot, dgram_mailslot_destructor);
 
+	EVENT_FD_READABLE(dgmsock->fde);
+
 	return dgmslot;
 }
 

Modified: branches/SAMBA_4_0/source/libcli/dgram/netlogon.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/dgram/netlogon.c	2005-04-08 05:06:31 UTC (rev 6244)
+++ branches/SAMBA_4_0/source/libcli/dgram/netlogon.c	2005-04-08 05:34:13 UTC (rev 6245)
@@ -56,3 +56,19 @@
 	return status;
 }
 
+
+/*
+  parse a netlogon response. The packet must be a valid mailslot packet
+*/
+NTSTATUS dgram_mailslot_netlogon_parse(struct dgram_mailslot_handler *dgmslot,
+				       TALLOC_CTX *mem_ctx,
+				       struct nbt_dgram_packet *dgram,
+				       struct nbt_netlogon_packet *netlogon)
+{
+	DATA_BLOB *data = &dgram->data.msg.body.smb.body.trans.data;
+	NTSTATUS status;
+
+	status = ndr_pull_struct_blob(data, mem_ctx, netlogon, 
+				      (ndr_pull_flags_fn_t)ndr_pull_nbt_netlogon_packet);
+	return status;
+}

Modified: branches/SAMBA_4_0/source/librpc/idl/nbt.idl
===================================================================
--- branches/SAMBA_4_0/source/librpc/idl/nbt.idl	2005-04-08 05:06:31 UTC (rev 6244)
+++ branches/SAMBA_4_0/source/librpc/idl/nbt.idl	2005-04-08 05:34:13 UTC (rev 6245)
@@ -321,7 +321,8 @@
 
 	/* \MAILSLOT\NET\NETLOGON mailslot requests */
 	typedef [enum8bit] enum {
-		NETLOGON_QUERY_FOR_PDC = 0x7		
+		NETLOGON_QUERY_FOR_PDC     = 0x7,	
+		NETLOGON_RESPONSE_FROM_PDC = 0xc
 	} nbt_netlogon_command;
 
 	/* query for pdc request */
@@ -334,8 +335,19 @@
 		uint16               lm20_token;
 	} nbt_netlogon_query_for_pdc;
 
+	/* response from request */
+	typedef struct {
+		astring              pdc_name;
+		nstring              unicode_pdc_name;
+		nstring              domain_name;
+		uint32               nt_version;
+		uint16               lmnt_token;
+		uint16               lm20_token;
+	} nbt_netlogon_response_from_pdc;
+
 	typedef [nodiscriminant] union {
 		[case(NETLOGON_QUERY_FOR_PDC)] nbt_netlogon_query_for_pdc pdc;
+		[case(NETLOGON_RESPONSE_FROM_PDC)] nbt_netlogon_response_from_pdc response;
 	} nbt_netlogon_request;
 
 	typedef [flag(NDR_NOALIGN),public] struct {

Modified: branches/SAMBA_4_0/source/torture/nbt/dgram.c
===================================================================
--- branches/SAMBA_4_0/source/torture/nbt/dgram.c	2005-04-08 05:06:31 UTC (rev 6244)
+++ branches/SAMBA_4_0/source/torture/nbt/dgram.c	2005-04-08 05:34:13 UTC (rev 6245)
@@ -36,9 +36,22 @@
 			     struct nbt_dgram_packet *packet, 
 			     const char *src_address, int src_port)
 {
+	NTSTATUS status;
+	struct nbt_netlogon_packet netlogon;
+
 	printf("netlogon reply from %s:%d\n", src_address, src_port);
+
+	status = dgram_mailslot_netlogon_parse(dgmslot, dgmslot, packet, &netlogon);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("Failed to parse netlogon packet from %s:%d\n",
+		       src_address, src_port);
+		return;
+	}
+
+	NDR_PRINT_DEBUG(nbt_netlogon_packet, &netlogon);
 }
 
+
 /* test UDP/138 netlogon requests */
 static BOOL nbt_test_netlogon(TALLOC_CTX *mem_ctx, 
 			      struct nbt_name name, const char *address)
@@ -52,7 +65,14 @@
 	int timelimit = lp_parm_int(-1, "torture", "timelimit", 10);
 	struct timeval tv = timeval_current();
 
-	socket_listen(dgmsock->sock, myaddress, 0, 0, 0);
+	/* try receiving replies on port 138 first, which will only
+	   work if we are root and smbd/nmbd are not running - fall
+	   back to listening on any port, which means replies from
+	   some windows versions won't be seen */
+	status = socket_listen(dgmsock->sock, myaddress, lp_dgram_port(), 0, 0);
+	if (!NT_STATUS_IS_OK(status)) {
+		socket_listen(dgmsock->sock, myaddress, 0, 0, 0);
+	}
 
 	/* setup a temporary mailslot listener for replies */
 	dgmslot = dgram_mailslot_temp(dgmsock, "\\MAILSLOT\\NET\\GETDC", 



More information about the samba-cvs mailing list