[linux-cifs-client] Re: CIFS and Windows 2003 Server shares

Leonardo Chiquitto leonardo.lists at gmail.com
Tue Jan 6 20:24:53 GMT 2009


On Fri, Dec 19, 2008 at 11:12 AM, Leonardo Chiquitto
<leonardo.lists at gmail.com> wrote:
> Hello,
>
> I'm doing some tests with CIFS client 1.54, trying to discover what
> changed with Windows 2003 server that is resulting in a different
> behavior from previous Windows versions. In the end, the goal is
> to understand whether this is something we can workaround / avoid
> on the client side.
>
> The test:
> - the same share is mounted twice with different user names
> - the server is not a domain controller or member server
> - the server doesn't "know" the users
> - "Everyone" and "Guest" have full permissions in the share
>
> The following commands were used:
>
> # mount -t cifs //192.168.8.1/Shared /mnt/a -o
>  noacl,noperm,user=john,dir_mode=0700,domain=DOMAIN,rw
> # mount -t cifs //192.168.8.1/Shared /mnt/b -o
>  noacl,noperm,user=jeff,dir_mode=0700,domain=DOMAIN,rw
>
> Results with Windows 2000 Server:
>
> - Both mount points are accessible in the client:
>
> client:/mnt # ls -la
> total 8
> drwxr-xr-x  4 root root 4096 Dec  9 19:14 .
> drwxr-xr-x 31 root root 4096 Dec 15 11:40 ..
> drwx------  1 root root    0 Dec 15  2008 a
> drwx------  1 root root    0 Dec 15  2008 b
>
> - "net session" output from server:
>
> Computer               User name            Client Type       Opens Idle time
> -------------------------------------------------------------------------------
> \\192.168.8.1          JOHN                 Linux version 2.6     0 00:01:40
> \\192.168.8.1          JEFF                 Linux version 2.6     0 00:01:40
>
> * We can see that Windows 2000 Server keeps the user name provided
> by the client.
>
> Results with Windows 2003 Server:
>
> - Just the mount point mounted last is accessible:
>
> client:/mnt # ls -la
> ls: cannot access a: Permission denied
> total 8
> drwxr-xr-x  4 root root 4096 Dec  9 19:14 .
> drwxr-xr-x 31 root root 4096 Dec 15 11:40 ..
> d?????????  ? ?    ?       ?            ? a
> drwx------  1 root root    0 Dec 15  2008 b
>
> - "net session" output from the server:
>
> Computer               User name            Client Type       Opens Idle time
> -------------------------------------------------------------------------------
> 192.168.8.1          GUEST                Linux version 2.6     0 000012
>
> * We can see that just one session remains and the user name was mapped to
> GUEST.
>
> I suppose this is expected, but I really would like to understand what is
> the underlying cause.

I couldn't find a solution for this problem yet, but I have more information
to share:

- The problem also happens with Windows 2008 Server and earlier versions
  of the CIFS client (tested with 1.20).

Playing with the code, I found that disabling TCP connection sharing by
applying the following patch, will workaround the problem: I can now
mount the same share twice with different users and still have access to
both.

--- linux.orig/fs/cifs/connect.c
+++ linux/fs/cifs/connect.c
@@ -1463,9 +1463,11 @@ cifs_get_tcp_session(struct smb_vol *vol
 	}

 	/* see if we already have a matching tcp_ses */
+#if 0
 	tcp_ses = cifs_find_tcp_session(&addr);
 	if (tcp_ses)
 		return tcp_ses;
+#endif

 	tcp_ses = kzalloc(sizeof(struct TCP_Server_Info), GFP_KERNEL);
 	if (!tcp_ses) {

I understand that this is not a valid fix, it was made only for debugging.

It's also interesting that even when not sharing the TCP connection,
"net session" output from Windows 2003 still shows only one session
opened. Don't laugh, but is there any documentation that describes what
defines an unique SMB session for different versions of Windows?

Thanks!
Leonardo


More information about the linux-cifs-client mailing list