svn commit: samba r15161 - in trunk/source: include libsmb
jra at samba.org
jra at samba.org
Sat Apr 22 02:32:36 GMT 2006
Author: jra
Date: 2006-04-22 02:32:35 +0000 (Sat, 22 Apr 2006)
New Revision: 15161
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=15161
Log:
Patch for bug #3668. Windows has a bug with LARGE_READX
where if you ask for exactly 64k bytes it returns 0.
Jeremy.
Modified:
trunk/source/include/client.h
trunk/source/libsmb/cliconnect.c
trunk/source/libsmb/clireadwrite.c
Changeset:
Modified: trunk/source/include/client.h
===================================================================
--- trunk/source/include/client.h 2006-04-22 01:59:23 UTC (rev 15160)
+++ trunk/source/include/client.h 2006-04-22 02:32:35 UTC (rev 15161)
@@ -27,7 +27,8 @@
overlap on the wire. This size gives us a nice read/write size, which
will be a multiple of the page size on almost any system */
#define CLI_BUFFER_SIZE (0xFFFF)
-#define CLI_MAX_LARGE_READX_SIZE (127*1024)
+#define CLI_SAMBA_MAX_LARGE_READX_SIZE (127*1024) /* Works for Samba servers */
+#define CLI_WINDOWS_MAX_LARGE_READX_SIZE ((64*1024)-2) /* Windows servers are broken.... */
/*
* These definitions depend on smb.h
@@ -143,6 +144,7 @@
unsigned int bufsize;
int initialised;
int win95;
+ BOOL is_samba;
uint32 capabilities;
BOOL dfsroot;
Modified: trunk/source/libsmb/cliconnect.c
===================================================================
--- trunk/source/libsmb/cliconnect.c 2006-04-22 01:59:23 UTC (rev 15160)
+++ trunk/source/libsmb/cliconnect.c 2006-04-22 02:32:35 UTC (rev 15161)
@@ -199,6 +199,10 @@
p += clistr_pull(cli, cli->server_type, p, sizeof(fstring), -1, STR_TERMINATE);
p += clistr_pull(cli, cli->server_domain, p, sizeof(fstring), -1, STR_TERMINATE);
+ if (strstr(cli->server_type, "Samba")) {
+ cli->is_samba = True;
+ }
+
fstrcpy(cli->user_name, "");
return True;
@@ -263,6 +267,10 @@
p += clistr_pull(cli, cli->server_domain, p, sizeof(fstring), -1, STR_TERMINATE);
fstrcpy(cli->user_name, user);
+ if (strstr(cli->server_type, "Samba")) {
+ cli->is_samba = True;
+ }
+
return True;
}
@@ -408,6 +416,10 @@
p += clistr_pull(cli, cli->server_type, p, sizeof(fstring), -1, STR_TERMINATE);
p += clistr_pull(cli, cli->server_domain, p, sizeof(fstring), -1, STR_TERMINATE);
+ if (strstr(cli->server_type, "Samba")) {
+ cli->is_samba = True;
+ }
+
fstrcpy(cli->user_name, user);
if (session_key.data) {
@@ -873,6 +885,10 @@
}
}
+ if (strstr(cli->server_type, "Samba")) {
+ cli->is_samba = True;
+ }
+
return True;
}
@@ -1159,9 +1175,9 @@
if (cli->capabilities & (CAP_LARGE_READX|CAP_LARGE_WRITEX)) {
SAFE_FREE(cli->outbuf);
SAFE_FREE(cli->inbuf);
- cli->outbuf = (char *)SMB_MALLOC(CLI_MAX_LARGE_READX_SIZE+SAFETY_MARGIN);
- cli->inbuf = (char *)SMB_MALLOC(CLI_MAX_LARGE_READX_SIZE+SAFETY_MARGIN);
- cli->bufsize = CLI_MAX_LARGE_READX_SIZE;
+ cli->outbuf = (char *)SMB_MALLOC(CLI_SAMBA_MAX_LARGE_READX_SIZE+SAFETY_MARGIN);
+ cli->inbuf = (char *)SMB_MALLOC(CLI_SAMBA_MAX_LARGE_READX_SIZE+SAFETY_MARGIN);
+ cli->bufsize = CLI_SAMBA_MAX_LARGE_READX_SIZE;
}
} else if (cli->protocol >= PROTOCOL_LANMAN1) {
Modified: trunk/source/libsmb/clireadwrite.c
===================================================================
--- trunk/source/libsmb/clireadwrite.c 2006-04-22 01:59:23 UTC (rev 15160)
+++ trunk/source/libsmb/clireadwrite.c 2006-04-22 02:32:35 UTC (rev 15161)
@@ -76,7 +76,11 @@
*/
if (cli->capabilities & CAP_LARGE_READX) {
- readsize = CLI_MAX_LARGE_READX_SIZE;
+ if (cli->is_samba) {
+ readsize = CLI_SAMBA_MAX_LARGE_READX_SIZE;
+ } else {
+ readsize = CLI_WINDOWS_MAX_LARGE_READX_SIZE;
+ }
} else {
readsize = (cli->max_xmit - (smb_size+32)) & ~1023;
}
More information about the samba-cvs
mailing list