svn commit: samba r14208 - in branches/SAMBA_4_0/source: libcli libcli/raw libcli/smb_composite librpc/rpc ntvfs ntvfs/posix smb_server/smb torture torture/basic torture/nbench torture/raw

tridge at samba.org tridge at samba.org
Sat Mar 11 12:58:37 GMT 2006


Author: tridge
Date: 2006-03-11 12:58:36 +0000 (Sat, 11 Mar 2006)
New Revision: 14208

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

Log:

removed use of req->flags2 inside the ntvfs layer. This should help
metze on his quest to unify the ntvfs strucures for the smb and smb2
servers. The only place we needed flags2 inside ntvfs was for the
FLAGS2_READ_PERMIT_EXECUTE bit, which only affects readx, so I added a
readx.in.read_for_execute flag instead.

Modified:
   branches/SAMBA_4_0/source/libcli/clireadwrite.c
   branches/SAMBA_4_0/source/libcli/raw/interfaces.h
   branches/SAMBA_4_0/source/libcli/raw/rawreadwrite.c
   branches/SAMBA_4_0/source/libcli/smb_composite/loadfile.c
   branches/SAMBA_4_0/source/librpc/rpc/dcerpc_smb.c
   branches/SAMBA_4_0/source/ntvfs/ntvfs_generic.c
   branches/SAMBA_4_0/source/ntvfs/posix/pvfs_read.c
   branches/SAMBA_4_0/source/smb_server/smb/reply.c
   branches/SAMBA_4_0/source/torture/basic/denytest.c
   branches/SAMBA_4_0/source/torture/gentest.c
   branches/SAMBA_4_0/source/torture/nbench/nbio.c
   branches/SAMBA_4_0/source/torture/raw/read.c


Changeset:
Modified: branches/SAMBA_4_0/source/libcli/clireadwrite.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/clireadwrite.c	2006-03-11 10:59:03 UTC (rev 14207)
+++ branches/SAMBA_4_0/source/libcli/clireadwrite.c	2006-03-11 12:58:36 UTC (rev 14208)
@@ -56,6 +56,7 @@
 		parms.readx.in.mincnt    = readsize;
 		parms.readx.in.maxcnt    = readsize;
 		parms.readx.in.remaining = size - total;
+		parms.readx.in.read_for_execute = False;
 		parms.readx.out.data     = buf + total;
 		
 		status = smb_raw_read(tree, &parms);

Modified: branches/SAMBA_4_0/source/libcli/raw/interfaces.h
===================================================================
--- branches/SAMBA_4_0/source/libcli/raw/interfaces.h	2006-03-11 10:59:03 UTC (rev 14207)
+++ branches/SAMBA_4_0/source/libcli/raw/interfaces.h	2006-03-11 12:58:36 UTC (rev 14208)
@@ -1352,6 +1352,7 @@
 			uint16_t mincnt;
 			uint32_t maxcnt;
 			uint16_t remaining;
+			BOOL read_for_execute;
 		} in;
 		struct {
 			uint8_t *data;

Modified: branches/SAMBA_4_0/source/libcli/raw/rawreadwrite.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/raw/rawreadwrite.c	2006-03-11 10:59:03 UTC (rev 14207)
+++ branches/SAMBA_4_0/source/libcli/raw/rawreadwrite.c	2006-03-11 12:58:36 UTC (rev 14208)
@@ -84,6 +84,9 @@
 		if (bigoffset) {
 			SIVAL(req->out.vwv, VWV(10),parms->readx.in.offset>>32);
 		}
+		if (parms->readx.in.read_for_execute) {
+			req->flags2 |= FLAGS2_READ_PERMIT_EXECUTE;
+		}
 		break;
 	}
 

Modified: branches/SAMBA_4_0/source/libcli/smb_composite/loadfile.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/smb_composite/loadfile.c	2006-03-11 10:59:03 UTC (rev 14207)
+++ branches/SAMBA_4_0/source/libcli/smb_composite/loadfile.c	2006-03-11 12:58:36 UTC (rev 14208)
@@ -106,6 +106,7 @@
 	state->io_read->readx.in.mincnt    = MIN(32768, io->out.size);
 	state->io_read->readx.in.maxcnt    = state->io_read->readx.in.mincnt;
 	state->io_read->readx.in.remaining = 0;
+	state->io_read->readx.in.read_for_execute = False;
 	state->io_read->readx.out.data     = io->out.data;
 
 	state->req = smb_raw_read_send(tree, state->io_read);

Modified: branches/SAMBA_4_0/source/librpc/rpc/dcerpc_smb.c
===================================================================
--- branches/SAMBA_4_0/source/librpc/rpc/dcerpc_smb.c	2006-03-11 10:59:03 UTC (rev 14207)
+++ branches/SAMBA_4_0/source/librpc/rpc/dcerpc_smb.c	2006-03-11 12:58:36 UTC (rev 14208)
@@ -157,6 +157,7 @@
 	io->readx.in.maxcnt = io->readx.in.mincnt;
 	io->readx.in.offset = 0;
 	io->readx.in.remaining = 0;
+	io->readx.in.read_for_execute = False;
 	io->readx.out.data = state->data.data + state->received;
 	req = smb_raw_read_send(smb->tree, io);
 	if (req == NULL) {

Modified: branches/SAMBA_4_0/source/ntvfs/ntvfs_generic.c
===================================================================
--- branches/SAMBA_4_0/source/ntvfs/ntvfs_generic.c	2006-03-11 10:59:03 UTC (rev 14207)
+++ branches/SAMBA_4_0/source/ntvfs/ntvfs_generic.c	2006-03-11 12:58:36 UTC (rev 14208)
@@ -1158,6 +1158,7 @@
 	}
 
 	rd2->readx.level = RAW_READ_READX;
+	rd2->readx.in.read_for_execute = False;
 
 	switch (rd->generic.level) {
 	case RAW_READ_READX:

Modified: branches/SAMBA_4_0/source/ntvfs/posix/pvfs_read.c
===================================================================
--- branches/SAMBA_4_0/source/ntvfs/posix/pvfs_read.c	2006-03-11 10:59:03 UTC (rev 14207)
+++ branches/SAMBA_4_0/source/ntvfs/posix/pvfs_read.c	2006-03-11 12:58:36 UTC (rev 14208)
@@ -51,7 +51,7 @@
 	}
 
 	mask = SEC_FILE_READ_DATA;
-	if (req->flags2 & FLAGS2_READ_PERMIT_EXECUTE) {
+	if (rd->readx.in.read_for_execute) {
 		mask |= SEC_FILE_EXECUTE;
 	}
 	if (!(f->access_mask & mask)) {

Modified: branches/SAMBA_4_0/source/smb_server/smb/reply.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb/reply.c	2006-03-11 10:59:03 UTC (rev 14207)
+++ branches/SAMBA_4_0/source/smb_server/smb/reply.c	2006-03-11 12:58:36 UTC (rev 14208)
@@ -900,6 +900,11 @@
 	io->readx.in.maxcnt        = SVAL(req->in.vwv, VWV(5));
 	io->readx.in.mincnt        = SVAL(req->in.vwv, VWV(6));
 	io->readx.in.remaining     = SVAL(req->in.vwv, VWV(9));
+	if (req->flags2 & FLAGS2_READ_PERMIT_EXECUTE) {
+		io->readx.in.read_for_execute = True;
+	} else {
+		io->readx.in.read_for_execute = False;
+	}
 
 	if (req->smb_conn->negotiate.client_caps & CAP_LARGE_READX) {
 		uint32_t high_part = IVAL(req->in.vwv, VWV(7));

Modified: branches/SAMBA_4_0/source/torture/basic/denytest.c
===================================================================
--- branches/SAMBA_4_0/source/torture/basic/denytest.c	2006-03-11 10:59:03 UTC (rev 14207)
+++ branches/SAMBA_4_0/source/torture/basic/denytest.c	2006-03-11 12:58:36 UTC (rev 14208)
@@ -1693,7 +1693,7 @@
   determine if two opens conflict
 */
 static NTSTATUS predict_share_conflict(uint32_t sa1, uint32_t am1, uint32_t sa2, uint32_t am2,
-				       uint16_t flags2, enum deny_result *res)
+				       BOOL read_for_execute, enum deny_result *res)
 {
 #define CHECK_MASK(am, sa, right, share) do { \
 	if (((am) & (right)) && !((sa) & (share))) { \
@@ -1707,8 +1707,7 @@
 	}
 	if (am2 & SEC_FILE_READ_DATA) {
 		*res += A_R;
-	} else if ((am2 & SEC_FILE_EXECUTE) && 
-		   (flags2 & FLAGS2_READ_PERMIT_EXECUTE)) {
+	} else if ((am2 & SEC_FILE_EXECUTE) && read_for_execute) {
 		*res += A_R;
 	}
 
@@ -1822,6 +1821,7 @@
 		int b_am1 = random() & ((1<<nbits2)-1);
 		int b_sa2 = random() & ((1<<nbits1)-1);
 		int b_am2 = random() & ((1<<nbits2)-1);
+		BOOL read_for_execute;
 
 		progress_bar(i, torture_numops);
 		
@@ -1835,9 +1835,9 @@
 		status2 = smb_raw_open(cli2->tree, mem_ctx, &io2);
 
 		if (random() % 2 == 0) {
-			cli2->tree->session->flags2 |= FLAGS2_READ_PERMIT_EXECUTE;
+			read_for_execute = True;
 		} else {
-			cli2->tree->session->flags2 &= ~FLAGS2_READ_PERMIT_EXECUTE;
+			read_for_execute = False;
 		}
 		
 		if (!NT_STATUS_IS_OK(status1)) {
@@ -1845,9 +1845,23 @@
 		} else if (!NT_STATUS_IS_OK(status2)) {
 			res = A_0;
 		} else {
+			union smb_read r;
+			NTSTATUS status;
+
+			/* we can't use smbcli_read() as we need to
+			   set read_for_execute */
+			r.readx.level = RAW_READ_READX;
+			r.readx.file.fnum = io2.ntcreatex.file.fnum;
+			r.readx.in.offset = 0;
+			r.readx.in.mincnt = sizeof(buf);
+			r.readx.in.maxcnt = sizeof(buf);
+			r.readx.in.remaining = 0;
+			r.readx.in.read_for_execute = read_for_execute;
+			r.readx.out.data = buf;
+
 			res = A_0;
-			if (smbcli_read(cli2->tree, 
-					io2.ntcreatex.file.fnum, buf, 0, sizeof(buf)) >= 1) {
+			status = smb_raw_read(cli2->tree, &r);
+			if (NT_STATUS_IS_OK(status)) {
 				res += A_R;
 			}
 			if (smbcli_write(cli2->tree, 
@@ -1867,7 +1881,7 @@
 						   io1.ntcreatex.in.access_mask,
 						   io2.ntcreatex.in.share_access,
 						   io2.ntcreatex.in.access_mask, 
-						   cli2->tree->session->flags2,
+						   read_for_execute,
 						   &res2);
 		
 		GetTimeOfDay(&tv);

Modified: branches/SAMBA_4_0/source/torture/gentest.c
===================================================================
--- branches/SAMBA_4_0/source/torture/gentest.c	2006-03-11 10:59:03 UTC (rev 14207)
+++ branches/SAMBA_4_0/source/torture/gentest.c	2006-03-11 12:58:36 UTC (rev 14208)
@@ -1351,6 +1351,7 @@
 	parm[0].readx.in.mincnt = gen_io_count();
 	parm[0].readx.in.maxcnt = gen_io_count();
 	parm[0].readx.in.remaining = gen_io_count();
+	parm[0].readx.in.read_for_execute = gen_bool();
 	parm[0].readx.out.data = talloc_size(current_op.mem_ctx,
 					     MAX(parm[0].readx.in.mincnt, parm[0].readx.in.maxcnt));
 

Modified: branches/SAMBA_4_0/source/torture/nbench/nbio.c
===================================================================
--- branches/SAMBA_4_0/source/torture/nbench/nbio.c	2006-03-11 10:59:03 UTC (rev 14207)
+++ branches/SAMBA_4_0/source/torture/nbench/nbio.c	2006-03-11 12:58:36 UTC (rev 14208)
@@ -437,6 +437,7 @@
 	io.readx.in.mincnt    = size;
 	io.readx.in.maxcnt    = size;
 	io.readx.in.remaining = 0;
+	io.readx.in.read_for_execute = False;
 	io.readx.out.data     = buf;
 		
 	ret = smb_raw_read(c->tree, &io);

Modified: branches/SAMBA_4_0/source/torture/raw/read.c
===================================================================
--- branches/SAMBA_4_0/source/torture/raw/read.c	2006-03-11 10:59:03 UTC (rev 14207)
+++ branches/SAMBA_4_0/source/torture/raw/read.c	2006-03-11 12:58:36 UTC (rev 14208)
@@ -382,6 +382,7 @@
 	io.readx.in.maxcnt = 1;
 	io.readx.in.offset = 0;
 	io.readx.in.remaining = 0;
+	io.readx.in.read_for_execute = False;
 	io.readx.out.data = buf;
 	status = smb_raw_read(cli->tree, &io);
 
@@ -411,6 +412,7 @@
 	io.readx.file.fnum = fnum;
 	io.readx.in.offset = 0;
 	io.readx.in.remaining = 0;
+	io.readx.in.read_for_execute = False;
 	io.readx.in.mincnt = strlen(test_data);
 	io.readx.in.maxcnt = strlen(test_data);
 	status = smb_raw_read(cli->tree, &io);



More information about the samba-cvs mailing list