svn commit: samba r3383 - in branches/SAMBA_4_0/source: libcli/raw librpc/rpc torture/basic torture/rap

tridge at samba.org tridge at samba.org
Sat Oct 30 02:17:03 GMT 2004


Author: tridge
Date: 2004-10-30 02:17:03 +0000 (Sat, 30 Oct 2004)
New Revision: 3383

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

Log:
avoid multi-part SMBtrans and SMBtrans2 replies until our client library can handle
them properly (they are difficult to do in an async fashion). 

By choosing trans.in.max_data to fix in the negotiated buffer size a
server won't send us multi-part replies.

I notice that windows seems to avoid them too :)

Modified:
   branches/SAMBA_4_0/source/libcli/raw/rawacl.c
   branches/SAMBA_4_0/source/libcli/raw/rawfileinfo.c
   branches/SAMBA_4_0/source/libcli/raw/rawfsinfo.c
   branches/SAMBA_4_0/source/libcli/raw/rawsearch.c
   branches/SAMBA_4_0/source/libcli/raw/rawtrans.c
   branches/SAMBA_4_0/source/librpc/rpc/dcerpc_smb.c
   branches/SAMBA_4_0/source/torture/basic/aliases.c
   branches/SAMBA_4_0/source/torture/basic/scanner.c
   branches/SAMBA_4_0/source/torture/rap/rap.c


Changeset:
Modified: branches/SAMBA_4_0/source/libcli/raw/rawacl.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/raw/rawacl.c	2004-10-30 01:32:12 UTC (rev 3382)
+++ branches/SAMBA_4_0/source/libcli/raw/rawacl.c	2004-10-30 02:17:03 UTC (rev 3383)
@@ -31,7 +31,7 @@
 
 	nt.in.max_setup = 0;
 	nt.in.max_param = 4;
-	nt.in.max_data = 0x10000;
+	nt.in.max_data = smb_raw_max_trans_data(tree, 4);
 	nt.in.setup_count = 0;
 	nt.in.function = NT_TRANSACT_QUERY_SECURITY_DESC;
 	nt.in.setup = NULL;

Modified: branches/SAMBA_4_0/source/libcli/raw/rawfileinfo.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/raw/rawfileinfo.c	2004-10-30 01:32:12 UTC (rev 3382)
+++ branches/SAMBA_4_0/source/libcli/raw/rawfileinfo.c	2004-10-30 02:17:03 UTC (rev 3383)
@@ -291,7 +291,7 @@
 	tp.in.setup_count = 1;
 	tp.in.data = data_blob(NULL, 0);
 	tp.in.max_param = 2;
-	tp.in.max_data = 0xFFFF;
+	tp.in.max_data = smb_raw_max_trans_data(tree, 2);
 	tp.in.setup = &setup;
 	
 	tp.in.params = data_blob_talloc(mem_ctx, NULL, 4);
@@ -344,7 +344,7 @@
 	tp.in.setup_count = 1;
 	tp.in.data = data_blob(NULL, 0);
 	tp.in.max_param = 2;
-	tp.in.max_data = 0xFFFF;
+	tp.in.max_data = smb_raw_max_trans_data(tree, 2);
 	tp.in.setup = &setup;
 	
 	tp.in.params = data_blob_talloc(mem_ctx, NULL, 6);

Modified: branches/SAMBA_4_0/source/libcli/raw/rawfsinfo.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/raw/rawfsinfo.c	2004-10-30 01:32:12 UTC (rev 3382)
+++ branches/SAMBA_4_0/source/libcli/raw/rawfsinfo.c	2004-10-30 02:17:03 UTC (rev 3383)
@@ -77,7 +77,7 @@
 	tp.in.timeout = 0;
 	tp.in.setup_count = 1;
 	tp.in.max_param = 0;
-	tp.in.max_data = 0x1000; /* plenty for all possible QFS levels */
+	tp.in.max_data = smb_raw_max_trans_data(tree, 0);
 	tp.in.setup = &setup;
 	tp.in.data = data_blob(NULL, 0);
 	tp.in.timeout = 0;

Modified: branches/SAMBA_4_0/source/libcli/raw/rawsearch.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/raw/rawsearch.c	2004-10-30 01:32:12 UTC (rev 3382)
+++ branches/SAMBA_4_0/source/libcli/raw/rawsearch.c	2004-10-30 02:17:03 UTC (rev 3383)
@@ -206,8 +206,8 @@
 	tp.in.timeout = 0;
 	tp.in.setup_count = 1;
 	tp.in.data = data_blob(NULL, 0);
-	tp.in.max_param = 1024;
-	tp.in.max_data = 8192;
+	tp.in.max_param = 10;
+	tp.in.max_data = smb_raw_max_trans_data(tree, 10);
 	tp.in.setup = &setup;
 	
 	tp.in.params = data_blob_talloc(mem_ctx, NULL, 12);
@@ -258,8 +258,8 @@
 	tp.in.timeout = 0;
 	tp.in.setup_count = 1;
 	tp.in.data = data_blob(NULL, 0);
-	tp.in.max_param = 1024;
-	tp.in.max_data = 8192;
+	tp.in.max_param = 10;
+	tp.in.max_data = smb_raw_max_trans_data(tree, 10);
 	tp.in.setup = &setup;
 	
 	tp.in.params = data_blob_talloc(mem_ctx, NULL, 12);

Modified: branches/SAMBA_4_0/source/libcli/raw/rawtrans.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/raw/rawtrans.c	2004-10-30 01:32:12 UTC (rev 3382)
+++ branches/SAMBA_4_0/source/libcli/raw/rawtrans.c	2004-10-30 02:17:03 UTC (rev 3383)
@@ -531,3 +531,15 @@
 
 	return smb_raw_nttrans_recv(req, mem_ctx, parms);
 }
+
+/*
+  work out the maximum data size for a trans request while avoiding 
+  multi-part replies
+
+  TODO: we only need to avoid multi-part replies because the
+  multi-part trans receive code is broken.
+*/
+size_t smb_raw_max_trans_data(struct smbcli_tree *tree, size_t param_size)
+{
+	return tree->session->transport->options.max_xmit - (70 + param_size);
+}

Modified: branches/SAMBA_4_0/source/librpc/rpc/dcerpc_smb.c
===================================================================
--- branches/SAMBA_4_0/source/librpc/rpc/dcerpc_smb.c	2004-10-30 01:32:12 UTC (rev 3382)
+++ branches/SAMBA_4_0/source/librpc/rpc/dcerpc_smb.c	2004-10-30 02:17:03 UTC (rev 3383)
@@ -236,7 +236,7 @@
         setup[1] = smb->fnum;
 
         trans->in.max_param = 0;
-        trans->in.max_data = 0x8000;
+        trans->in.max_data = smb_raw_max_trans_data(smb->tree, 0);
         trans->in.max_setup = 0;
         trans->in.setup_count = 2;
         trans->in.flags = 0;

Modified: branches/SAMBA_4_0/source/torture/basic/aliases.c
===================================================================
--- branches/SAMBA_4_0/source/torture/basic/aliases.c	2004-10-30 01:32:12 UTC (rev 3382)
+++ branches/SAMBA_4_0/source/torture/basic/aliases.c	2004-10-30 02:17:03 UTC (rev 3383)
@@ -86,7 +86,7 @@
 	d_printf("\nChecking for QFSINFO aliases\n");
 
 	t2.in.max_param = 0;
-	t2.in.max_data = 0x8000;
+	t2.in.max_data = smb_raw_max_trans_data(cli->tree, 0);
 	t2.in.max_setup = 0;
 	t2.in.flags = 0;
 	t2.in.timeout = 0;
@@ -109,7 +109,7 @@
 	d_printf("\nChecking for QFILEINFO aliases\n");
 
 	t2.in.max_param = 2;
-	t2.in.max_data = 0x8000;
+	t2.in.max_data = smb_raw_max_trans_data(cli->tree, 2);
 	t2.in.max_setup = 0;
 	t2.in.flags = 0;
 	t2.in.timeout = 0;
@@ -149,7 +149,7 @@
 	d_printf("\nChecking for QPATHINFO aliases\n");
 
 	t2.in.max_param = 2;
-	t2.in.max_data = 0x8000;
+	t2.in.max_data = smb_raw_max_trans_data(cli->tree, 2);
 	t2.in.max_setup = 0;
 	t2.in.flags = 0;
 	t2.in.timeout = 0;
@@ -193,7 +193,7 @@
 	d_printf("\nChecking for FINDFIRST aliases\n");
 
 	t2.in.max_param = 16;
-	t2.in.max_data = 0x8000;
+	t2.in.max_data = smb_raw_max_trans_data(cli->tree, 16);
 	t2.in.max_setup = 0;
 	t2.in.flags = 0;
 	t2.in.timeout = 0;
@@ -345,7 +345,7 @@
 	d_printf("\nChecking for SETPATHINFO aliases\n");
 
 	t2.in.max_param = 32;
-	t2.in.max_data = 0x8000;
+	t2.in.max_data = smb_raw_max_trans_data(cli->tree, 32);
 	t2.in.max_setup = 0;
 	t2.in.flags = 0;
 	t2.in.timeout = 0;

Modified: branches/SAMBA_4_0/source/torture/basic/scanner.c
===================================================================
--- branches/SAMBA_4_0/source/torture/basic/scanner.c	2004-10-30 01:32:12 UTC (rev 3382)
+++ branches/SAMBA_4_0/source/torture/basic/scanner.c	2004-10-30 02:17:03 UTC (rev 3383)
@@ -58,8 +58,8 @@
 
 	mem_ctx = talloc_init("try_trans2");
 
-	t2.in.max_param = 1024;
-	t2.in.max_data = 0x8000;
+	t2.in.max_param = 64;
+	t2.in.max_data = smb_raw_max_trans_data(cli->tree, 64);
 	t2.in.max_setup = 10;
 	t2.in.flags = 0;
 	t2.in.timeout = 0;
@@ -339,8 +339,8 @@
 	ntdata_blob.length = data_len;
 	ntdata_blob.data = data;
 
-	parms.in.max_param = 1024;
-	parms.in.max_data = 1024;
+	parms.in.max_param = 64;
+	parms.in.max_data = smb_raw_max_trans_data(cli->tree, 64);
 	parms.in.max_setup = 0;
 	parms.in.setup_count = 0;
 	parms.in.function = op;

Modified: branches/SAMBA_4_0/source/torture/rap/rap.c
===================================================================
--- branches/SAMBA_4_0/source/torture/rap/rap.c	2004-10-30 01:32:12 UTC (rev 3382)
+++ branches/SAMBA_4_0/source/torture/rap/rap.c	2004-10-30 02:17:03 UTC (rev 3383)
@@ -172,7 +172,7 @@
 	params->flags = RAPNDR_FLAGS;
 
 	trans.in.max_param = call->rcv_paramlen;
-	trans.in.max_data = call->rcv_datalen;
+	trans.in.max_data = smb_raw_max_trans_data(cli->tree, call->rcv_paramlen);
 	trans.in.max_setup = 0;
 	trans.in.flags = 0;
 	trans.in.timeout = 0;



More information about the samba-cvs mailing list