svn commit: samba r11891 - in branches/SAMBA_4_0/source: include libcli/smb2 librpc/rpc

tridge at samba.org tridge at samba.org
Fri Nov 25 05:46:46 GMT 2005


Author: tridge
Date: 2005-11-25 05:46:46 +0000 (Fri, 25 Nov 2005)
New Revision: 11891

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

Log:

- added pipe_flags field in smb2_trans

- while running dcerpc over SMB2, the server will occasionally send us
  a oh-so-useful STATUS_PENDING result meaning "I don't have a result
  for you yet, but I'm working on it". These can be discarded :-)



Modified:
   branches/SAMBA_4_0/source/include/nterr.h
   branches/SAMBA_4_0/source/libcli/smb2/smb2_calls.h
   branches/SAMBA_4_0/source/libcli/smb2/transport.c
   branches/SAMBA_4_0/source/librpc/rpc/dcerpc_smb2.c


Changeset:
Modified: branches/SAMBA_4_0/source/include/nterr.h
===================================================================
--- branches/SAMBA_4_0/source/include/nterr.h	2005-11-25 05:26:12 UTC (rev 11890)
+++ branches/SAMBA_4_0/source/include/nterr.h	2005-11-25 05:46:46 UTC (rev 11891)
@@ -34,6 +34,7 @@
 #define STATUS_INVALID_EA_FLAG            NT_STATUS(0x80000015)
 #define NT_STATUS_NO_MORE_ENTRIES         NT_STATUS(0x8000001a)
 
+#define STATUS_PENDING                    NT_STATUS(0x0103)
 #define STATUS_MORE_ENTRIES               NT_STATUS(0x0105)
 #define STATUS_SOME_UNMAPPED              NT_STATUS(0x0107)
 #define ERROR_INVALID_PARAMETER		  NT_STATUS(0x0057)

Modified: branches/SAMBA_4_0/source/libcli/smb2/smb2_calls.h
===================================================================
--- branches/SAMBA_4_0/source/libcli/smb2/smb2_calls.h	2005-11-25 05:26:12 UTC (rev 11890)
+++ branches/SAMBA_4_0/source/libcli/smb2/smb2_calls.h	2005-11-25 05:46:46 UTC (rev 11891)
@@ -304,9 +304,11 @@
 	} out;
 };
 
+#define SMB2_TRANS_PIPE_FLAGS 0x0011c017 /* what are these? */
+
 struct smb2_trans {
 	struct {
-		uint32_t unknown1;
+		uint32_t pipe_flags;
 		struct smb2_handle handle;
 		uint32_t unknown2;
 		uint32_t max_response_size;

Modified: branches/SAMBA_4_0/source/libcli/smb2/transport.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/smb2/transport.c	2005-11-25 05:26:12 UTC (rev 11890)
+++ branches/SAMBA_4_0/source/libcli/smb2/transport.c	2005-11-25 05:46:46 UTC (rev 11891)
@@ -185,6 +185,13 @@
 	req->in.body_size = req->in.size - (SMB2_HDR_BODY+NBT_HDR_SIZE);
 	req->status       = NT_STATUS(IVAL(hdr, SMB2_HDR_STATUS));
 
+	if (NT_STATUS_EQUAL(req->status, STATUS_PENDING)) {
+		/* the server has helpfully told us that this request is still being
+		   processed. how useful :) */
+		talloc_free(buffer);
+		return NT_STATUS_OK;
+	}
+
 	buffer_code = SVAL(req->in.body, 0);
 	req->in.dynamic = NULL;
 	dynamic_size = req->in.body_size - (buffer_code & ~1);

Modified: branches/SAMBA_4_0/source/librpc/rpc/dcerpc_smb2.c
===================================================================
--- branches/SAMBA_4_0/source/librpc/rpc/dcerpc_smb2.c	2005-11-25 05:26:12 UTC (rev 11890)
+++ branches/SAMBA_4_0/source/librpc/rpc/dcerpc_smb2.c	2005-11-25 05:46:46 UTC (rev 11891)
@@ -104,6 +104,9 @@
 	ZERO_STRUCT(io);
 	io.in.length = MIN(state->c->srv_max_xmit_frag, 
 			   frag_length - state->data.length);
+	if (io.in.length < 16) {
+		io.in.length = 16;
+	}
 	io.in.handle = smb->handle;
 	
 	req = smb2_read_send(smb->tree, &io);
@@ -228,9 +231,9 @@
 	state->c = c;
 	
 	ZERO_STRUCT(io);
-	io.in.unknown1 = 0x0011c017;
+	io.in.pipe_flags = SMB2_TRANS_PIPE_FLAGS;
 	io.in.handle = smb->handle;
-	io.in.max_response_size = 0x10000;
+	io.in.max_response_size = 0x1000;
 	io.in.flags = 1;
 	io.in.out = *blob;
 
@@ -383,7 +386,9 @@
 		NTCREATEX_SHARE_ACCESS_READ |
 		NTCREATEX_SHARE_ACCESS_WRITE;
 	io.in.open_disposition = NTCREATEX_DISP_OPEN;
-	io.in.create_options   = 0x400040;
+	io.in.create_options   = 
+		NTCREATEX_OPTIONS_NON_DIRECTORY_FILE | 
+		NTCREATEX_OPTIONS_UNKNOWN_400000;
 	io.in.impersonation    = NTCREATEX_IMPERSONATION_IMPERSONATION;
 
 	if ((strncasecmp(pipe_name, "/pipe/", 6) == 0) || 



More information about the samba-cvs mailing list