svn commit: samba r1841 - in branches/SAMBA_3_0/source: param smbd

jra at samba.org jra at samba.org
Mon Aug 16 21:27:26 GMT 2004


Author: jra
Date: 2004-08-16 21:27:26 +0000 (Mon, 16 Aug 2004)
New Revision: 1841

WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_3_0/source&rev=1841&nolog=1

Log:
Fix for #1606, can't launch dos exe's.
2 related problems - 1). DOS uses chained commands - when we
are replying with sendfile we neglect to send the chained header. 2). Win9x and
DOS TCP stacks blow up when getting data back from a Linux sendfile - "The
engines canna take the strain cap'n". Don't use sendfile for anything less than NT1.
Jeremy.

Modified:
   branches/SAMBA_3_0/source/param/loadparm.c
   branches/SAMBA_3_0/source/smbd/reply.c


Changeset:
Modified: branches/SAMBA_3_0/source/param/loadparm.c
===================================================================
--- branches/SAMBA_3_0/source/param/loadparm.c	2004-08-16 21:27:22 UTC (rev 1840)
+++ branches/SAMBA_3_0/source/param/loadparm.c	2004-08-16 21:27:26 UTC (rev 1841)
@@ -4320,6 +4320,11 @@
 
 BOOL lp_use_sendfile(int snum)
 {
+	extern int Protocol;
+	/* Using sendfile blows the brains out of any DOS or Win9x TCP stack... JRA. */
+	if (Protocol < PROTOCOL_NT1) {
+		return False;
+	}
 	return (_lp_use_sendfile(snum) && (get_remote_arch() != RA_WIN95) && !srv_is_signing_active());
 }
 

Modified: branches/SAMBA_3_0/source/smbd/reply.c
===================================================================
--- branches/SAMBA_3_0/source/smbd/reply.c	2004-08-16 21:27:22 UTC (rev 1840)
+++ branches/SAMBA_3_0/source/smbd/reply.c	2004-08-16 21:27:26 UTC (rev 1841)
@@ -1735,7 +1735,7 @@
 	 * reply_readbraw has already checked the length.
 	 */
 
-	if ((nread > 0) && (lp_write_cache_size(SNUM(conn)) == 0) && lp_use_sendfile(SNUM(conn)) ) {
+	if (chain_size ==0 && (nread > 0) && (lp_write_cache_size(SNUM(conn)) == 0) && lp_use_sendfile(SNUM(conn)) ) {
 		DATA_BLOB header;
 
 		_smb_setlen(outbuf,nread);
@@ -2075,7 +2075,7 @@
 	 * on a train in Germany :-). JRA.
 	 */
 
-	if ((CVAL(inbuf,smb_vwv0) == 0xFF) && lp_use_sendfile(SNUM(conn)) &&
+	if (chain_size ==0 && (CVAL(inbuf,smb_vwv0) == 0xFF) && lp_use_sendfile(SNUM(conn)) &&
 			(lp_write_cache_size(SNUM(conn)) == 0) ) {
 		SMB_STRUCT_STAT sbuf;
 		DATA_BLOB header;



More information about the samba-cvs mailing list