[CIFS] fixup prefixpaths which contain multiple path components
authorSteve French <sfrench@us.ibm.com>
Thu, 14 Feb 2008 06:38:30 +0000 (06:38 +0000)
committerSteve French <sfrench@us.ibm.com>
Thu, 14 Feb 2008 06:38:30 +0000 (06:38 +0000)
commit03a143c909b808759f188a45c75acb8f043cb209
treec530f351a3bff2997b68009bec280c92eb7098c7
parentc1ce264470f000ccd5965d3718f7d905d559fd64
[CIFS] fixup prefixpaths which contain multiple path components

Currently, when we get a prefixpath as part of mount, the kernel only
changes the first character to be a '/' or '\' depending on whether
posix extensions are enabled. This is problematic as it expects
mount.cifs to pass in the correct delimiter in the rest of the
prefixpath. But, mount.cifs may not know *what* the correct delimiter
is. It's a chicken and egg problem.

Note that mount.cifs should not do conversion of the
prefixpath - if we want posix behavior then '\' is legal in a path
(and we have had bugs in the distant path to prove to me that
customers sometimes have apps that require '\').  The kernel code
assumes that the path passed in is posix (and current code will handle
the first path component fine but was broken for Windows mounts
for "deep" prefixpaths unless the user specified a prefixpath with '\'
deep in it.   So e.g. with current kernel code:

1) mount to //server/share/dir1 will work to all server types
2) mount to //server/share/dir1/subdir1 will work to Samba
3) mount to //server/share/dir1\\subdir1 will work to Windows

But case two would fail to Windows without the fix.
With the kernel cifs module fix case two now works.

First analyzed by Jeff Layton and Simo Sorce

CC: Jeff Layton <jlayton@redhat.com>
CC: Simo Sorce <simo@samba.org>
Signed-off-by: Steve French <sfrench@us.ibm.com>
fs/cifs/CHANGES
fs/cifs/connect.c