svn commit: samba r3400 - in branches/SAMBA_4_0/source: include libcli/raw torture/basic

tridge at samba.org tridge at samba.org
Sun Oct 31 03:26:30 GMT 2004


Author: tridge
Date: 2004-10-31 03:26:30 +0000 (Sun, 31 Oct 2004)
New Revision: 3400

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

Log:
- allow callers to control the flags2 field in raw packets

- added testing of the FLAGS2_READ_PERMIT_EXECUTE bit in the ntdeny tests



Modified:
   branches/SAMBA_4_0/source/include/cli_context.h
   branches/SAMBA_4_0/source/libcli/raw/clisession.c
   branches/SAMBA_4_0/source/libcli/raw/rawrequest.c
   branches/SAMBA_4_0/source/torture/basic/denytest.c


Changeset:
Modified: branches/SAMBA_4_0/source/include/cli_context.h
===================================================================
--- branches/SAMBA_4_0/source/include/cli_context.h	2004-10-31 03:11:41 UTC (rev 3399)
+++ branches/SAMBA_4_0/source/include/cli_context.h	2004-10-31 03:26:30 UTC (rev 3400)
@@ -189,6 +189,10 @@
 	/* default pid for this session */
 	uint32_t pid;
 
+	/* the flags2 for each packet - this allows
+	   the user to control these for torture testing */
+	uint16_t flags2;
+
 	DATA_BLOB user_session_key;
 
 	/* the spnego context if we use extented security */

Modified: branches/SAMBA_4_0/source/libcli/raw/clisession.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/raw/clisession.c	2004-10-31 03:11:41 UTC (rev 3399)
+++ branches/SAMBA_4_0/source/libcli/raw/clisession.c	2004-10-31 03:26:30 UTC (rev 3400)
@@ -33,6 +33,8 @@
 struct smbcli_session *smbcli_session_init(struct smbcli_transport *transport)
 {
 	struct smbcli_session *session;
+	uint16_t flags2;
+	uint32_t capabilities;
 
 	session = talloc_p(transport, struct smbcli_session);
 	if (!session) {
@@ -44,6 +46,26 @@
 	session->pid = (uint16_t)getpid();
 	session->vuid = UID_FIELD_INVALID;
 
+	
+	capabilities = transport->negotiate.capabilities;
+
+	flags2 = FLAGS2_LONG_PATH_COMPONENTS;
+
+	if (capabilities & CAP_UNICODE) {
+		flags2 |= FLAGS2_UNICODE_STRINGS;
+	}
+	if (capabilities & CAP_STATUS32) {
+		flags2 |= FLAGS2_32_BIT_ERROR_CODES;
+	}
+	if (capabilities & CAP_EXTENDED_SECURITY) {
+		flags2 |= FLAGS2_EXTENDED_SECURITY;
+	}
+	if (session->transport->negotiate.sign_info.doing_signing) {
+		flags2 |= FLAGS2_SMB_SECURITY_SIGNATURES;
+	}
+
+	session->flags2 = flags2;
+
 	return session;
 }
 

Modified: branches/SAMBA_4_0/source/libcli/raw/rawrequest.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/raw/rawrequest.c	2004-10-31 03:11:41 UTC (rev 3399)
+++ branches/SAMBA_4_0/source/libcli/raw/rawrequest.c	2004-10-31 03:26:30 UTC (rev 3400)
@@ -139,35 +139,17 @@
   way. This interface is used before a session is setup.
 */
 struct smbcli_request *smbcli_request_setup_session(struct smbcli_session *session,
-					      uint8_t command, uint_t wct, uint_t buflen)
+						    uint8_t command, uint_t wct, uint_t buflen)
 {
 	struct smbcli_request *req;
-	uint16_t flags2;
-	uint32_t capabilities;
 
 	req = smbcli_request_setup_transport(session->transport, command, wct, buflen);
 
 	if (!req) return NULL;
 
 	req->session = session;
-	
-	flags2 = FLAGS2_LONG_PATH_COMPONENTS;
-	capabilities = session->transport->negotiate.capabilities;
 
-	if (capabilities & CAP_UNICODE) {
-		flags2 |= FLAGS2_UNICODE_STRINGS;
-	}
-	if (capabilities & CAP_STATUS32) {
-		flags2 |= FLAGS2_32_BIT_ERROR_CODES;
-	}
-	if (capabilities & CAP_EXTENDED_SECURITY) {
-		flags2 |= FLAGS2_EXTENDED_SECURITY;
-	}
-	if (session->transport->negotiate.sign_info.doing_signing) {
-		flags2 |= FLAGS2_SMB_SECURITY_SIGNATURES;
-	}
-
-	SSVAL(req->out.hdr, HDR_FLG2, flags2);
+	SSVAL(req->out.hdr, HDR_FLG2, session->flags2);
 	SSVAL(req->out.hdr, HDR_PID, session->pid & 0xFFFF);
 	SSVAL(req->out.hdr, HDR_PIDHIGH, session->pid >> 16);
 	SSVAL(req->out.hdr, HDR_UID, session->vuid);

Modified: branches/SAMBA_4_0/source/torture/basic/denytest.c
===================================================================
--- branches/SAMBA_4_0/source/torture/basic/denytest.c	2004-10-31 03:11:41 UTC (rev 3399)
+++ branches/SAMBA_4_0/source/torture/basic/denytest.c	2004-10-31 03:26:30 UTC (rev 3400)
@@ -1689,7 +1689,7 @@
   determine if two opens conflict
 */
 static NTSTATUS predict_share_conflict(uint32_t sa1, uint32_t am1, uint32_t sa2, uint32_t am2,
-				       enum deny_result *res)
+				       uint16_t flags2, enum deny_result *res)
 {
 #define CHECK_MASK(am, sa, right, share) do { \
 	if (((am) & (right)) && !((sa) & (share))) { \
@@ -1703,6 +1703,9 @@
 	}
 	if (am2 & SA_RIGHT_FILE_READ_DATA) {
 		*res += A_R;
+	} else if ((am2 & SA_RIGHT_FILE_EXECUTE) && 
+		   (flags2 & FLAGS2_READ_PERMIT_EXECUTE)) {
+		*res += A_R;
 	}
 
 	/* if either open involves no read.write or delete access then
@@ -1820,6 +1823,12 @@
 
 		status1 = smb_raw_open(cli1->tree, mem_ctx, &io1);
 		status2 = smb_raw_open(cli2->tree, mem_ctx, &io2);
+
+		if (random() % 2 == 0) {
+			cli2->tree->session->flags2 |= FLAGS2_READ_PERMIT_EXECUTE;
+		} else {
+			cli2->tree->session->flags2 &= ~FLAGS2_READ_PERMIT_EXECUTE;
+		}
 		
 		if (!NT_STATUS_IS_OK(status1)) {
 			res = A_X;
@@ -1847,7 +1856,9 @@
 		status2_p = predict_share_conflict(io1.ntcreatex.in.share_access,
 						   io1.ntcreatex.in.access_mask,
 						   io2.ntcreatex.in.share_access,
-						   io2.ntcreatex.in.access_mask, &res2);
+						   io2.ntcreatex.in.access_mask, 
+						   cli2->tree->session->flags2,
+						   &res2);
 		
 		GetTimeOfDay(&tv);
 		tdif = usec_time_diff(&tv, &tv_start);



More information about the samba-cvs mailing list