svn commit: samba r22122 - in branches: SAMBA_3_0/source/include SAMBA_3_0/source/libsmb SAMBA_3_0/source/smbd SAMBA_3_0_25/source/include SAMBA_3_0_25/source/libsmb SAMBA_3_0_25/source/smbd

jra at samba.org jra at samba.org
Sat Apr 7 05:49:25 GMT 2007


Author: jra
Date: 2007-04-07 05:49:24 +0000 (Sat, 07 Apr 2007)
New Revision: 22122

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

Log:
Start to fix csc issue with Vista. Make smbd support
the extended 7 word response for tconX rather than the
3 word one we supported previously.
Jeremy.

Modified:
   branches/SAMBA_3_0/source/include/smb.h
   branches/SAMBA_3_0/source/libsmb/cliconnect.c
   branches/SAMBA_3_0/source/smbd/reply.c
   branches/SAMBA_3_0_25/source/include/smb.h
   branches/SAMBA_3_0_25/source/libsmb/cliconnect.c
   branches/SAMBA_3_0_25/source/smbd/reply.c


Changeset:
Modified: branches/SAMBA_3_0/source/include/smb.h
===================================================================
--- branches/SAMBA_3_0/source/include/smb.h	2007-04-07 05:19:24 UTC (rev 22121)
+++ branches/SAMBA_3_0/source/include/smb.h	2007-04-07 05:49:24 UTC (rev 22122)
@@ -1199,6 +1199,10 @@
 #define SMB_SUPPORT_SEARCH_BITS        0x0001
 #define SMB_SHARE_IN_DFS               0x0002
 
+/* Share specific rights. */
+#define SHARE_ALL_ACCESS      0x001F01FF
+#define SHARE_READ_ONLY       0x001200A9
+
 /* Named pipe write mode flags. Used in writeX calls. */
 #define PIPE_RAW_MODE 0x4
 #define PIPE_START_MESSAGE 0x8
@@ -1480,6 +1484,9 @@
 
 #define FLAGS2_WIN2K_SIGNATURE         0xC852 /* Hack alert ! For now... JRA. */
 
+/* TCONX Flag (smb_vwv2). */
+#define TCONX_FLAG_EXTENDED_RESPONSE	0x8
+
 /* Capabilities.  see ftp.microsoft.com/developr/drg/cifs/cifs/cifs4.txt */
 
 #define CAP_RAW_MODE         0x0001

Modified: branches/SAMBA_3_0/source/libsmb/cliconnect.c
===================================================================
--- branches/SAMBA_3_0/source/libsmb/cliconnect.c	2007-04-07 05:19:24 UTC (rev 22121)
+++ branches/SAMBA_3_0/source/libsmb/cliconnect.c	2007-04-07 05:49:24 UTC (rev 22122)
@@ -1064,6 +1064,7 @@
 	cli_setup_packet(cli);
 
 	SSVAL(cli->outbuf,smb_vwv0,0xFF);
+	SSVAL(cli->outbuf,smb_vwv2,TCONX_FLAG_EXTENDED_RESPONSE);
 	SSVAL(cli->outbuf,smb_vwv3,passlen);
 
 	p = smb_buf(cli->outbuf);

Modified: branches/SAMBA_3_0/source/smbd/reply.c
===================================================================
--- branches/SAMBA_3_0/source/smbd/reply.c	2007-04-07 05:19:24 UTC (rev 22121)
+++ branches/SAMBA_3_0/source/smbd/reply.c	2007-04-07 05:49:24 UTC (rev 22122)
@@ -452,6 +452,7 @@
 	int passlen = SVAL(inbuf,smb_vwv3);
 	pstring path;
 	char *p, *q;
+	uint16 tcon_flags = SVAL(inbuf,smb_vwv2);
 	
 	START_PROFILE(SMBtconX);	
 
@@ -522,8 +523,28 @@
 		/* NT sets the fstype of IPC$ to the null string */
 		const char *fstype = IS_IPC(conn) ? "" : lp_fstype(SNUM(conn));
 		
-		set_message(outbuf,3,0,True);
+		if (tcon_flags & TCONX_FLAG_EXTENDED_RESPONSE) {
+			/* Return permissions. */
+			uint32 perm1 = 0;
+			uint32 perm2 = 0;
 
+			set_message(outbuf,7,0,True);
+
+			if (IS_IPC(conn)) {
+				perm1 = FILE_ALL_ACCESS;
+				perm2 = FILE_ALL_ACCESS;
+			} else {
+				perm1 = CAN_WRITE(conn) ?
+						SHARE_ALL_ACCESS :
+						SHARE_READ_ONLY;
+			}
+
+			SIVAL(outbuf, smb_vwv3, perm1);
+			SIVAL(outbuf, smb_vwv5, perm2);
+		} else {
+			set_message(outbuf,3,0,True);
+		}
+
 		p = smb_buf(outbuf);
 		p += srvstr_push(outbuf, p, server_devicetype, -1, 
 				 STR_TERMINATE|STR_ASCII);

Modified: branches/SAMBA_3_0_25/source/include/smb.h
===================================================================
--- branches/SAMBA_3_0_25/source/include/smb.h	2007-04-07 05:19:24 UTC (rev 22121)
+++ branches/SAMBA_3_0_25/source/include/smb.h	2007-04-07 05:49:24 UTC (rev 22122)
@@ -1206,6 +1206,10 @@
 #define SMB_SUPPORT_SEARCH_BITS        0x0001
 #define SMB_SHARE_IN_DFS               0x0002
 
+/* Share specific rights. */
+#define SHARE_ALL_ACCESS      0x001F01FF
+#define SHARE_READ_ONLY       0x001200A9
+
 /* Named pipe write mode flags. Used in writeX calls. */
 #define PIPE_RAW_MODE 0x4
 #define PIPE_START_MESSAGE 0x8
@@ -1487,6 +1491,9 @@
 
 #define FLAGS2_WIN2K_SIGNATURE         0xC852 /* Hack alert ! For now... JRA. */
 
+/* TCONX Flag (smb_vwv2). */
+#define TCONX_FLAG_EXTENDED_RESPONSE	0x8
+
 /* Capabilities.  see ftp.microsoft.com/developr/drg/cifs/cifs/cifs4.txt */
 
 #define CAP_RAW_MODE         0x0001

Modified: branches/SAMBA_3_0_25/source/libsmb/cliconnect.c
===================================================================
--- branches/SAMBA_3_0_25/source/libsmb/cliconnect.c	2007-04-07 05:19:24 UTC (rev 22121)
+++ branches/SAMBA_3_0_25/source/libsmb/cliconnect.c	2007-04-07 05:49:24 UTC (rev 22122)
@@ -1065,6 +1065,7 @@
 	cli_setup_packet(cli);
 
 	SSVAL(cli->outbuf,smb_vwv0,0xFF);
+	SSVAL(cli->outbuf,smb_vwv2,TCONX_FLAG_EXTENDED_RESPONSE);
 	SSVAL(cli->outbuf,smb_vwv3,passlen);
 
 	p = smb_buf(cli->outbuf);

Modified: branches/SAMBA_3_0_25/source/smbd/reply.c
===================================================================
--- branches/SAMBA_3_0_25/source/smbd/reply.c	2007-04-07 05:19:24 UTC (rev 22121)
+++ branches/SAMBA_3_0_25/source/smbd/reply.c	2007-04-07 05:49:24 UTC (rev 22122)
@@ -451,6 +451,7 @@
 	int passlen = SVAL(inbuf,smb_vwv3);
 	pstring path;
 	char *p, *q;
+	uint16 tcon_flags = SVAL(inbuf,smb_vwv2);
 	
 	START_PROFILE(SMBtconX);	
 
@@ -521,8 +522,28 @@
 		/* NT sets the fstype of IPC$ to the null string */
 		const char *fstype = IS_IPC(conn) ? "" : lp_fstype(SNUM(conn));
 		
-		set_message(outbuf,3,0,True);
+		if (tcon_flags & TCONX_FLAG_EXTENDED_RESPONSE) {
+			/* Return permissions. */
+			uint32 perm1 = 0;
+			uint32 perm2 = 0;
 
+			set_message(outbuf,7,0,True);
+
+			if (IS_IPC(conn)) {
+				perm1 = FILE_ALL_ACCESS;
+				perm2 = FILE_ALL_ACCESS;
+			} else {
+				perm1 = CAN_WRITE(conn) ?
+						SHARE_ALL_ACCESS :
+						SHARE_READ_ONLY;
+			}
+
+			SIVAL(outbuf, smb_vwv3, perm1);
+			SIVAL(outbuf, smb_vwv5, perm2);
+		} else {
+			set_message(outbuf,3,0,True);
+		}
+
 		p = smb_buf(outbuf);
 		p += srvstr_push(outbuf, p, server_devicetype, -1, 
 				 STR_TERMINATE|STR_ASCII);



More information about the samba-cvs mailing list