summaryrefslogtreecommitdiffstats
path: root/source3/smbd/msdfs.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2007-08-06 18:54:26 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:29:21 -0500
commitd75a38ae264ab3bbe73414576b37ccdafbbb9975 (patch)
tree95dd360b34a42ff49e237d176c00383891b54ae9 /source3/smbd/msdfs.c
parent6ba2d944a0b5314564f077c6e896312b03cdd236 (diff)
downloadsamba-d75a38ae264ab3bbe73414576b37ccdafbbb9975.tar.gz
samba-d75a38ae264ab3bbe73414576b37ccdafbbb9975.tar.xz
samba-d75a38ae264ab3bbe73414576b37ccdafbbb9975.zip
r24253: From Jan Martin <Jan.Martin@rwedea.com>.
---------------------------------------------------------- In rare cases, Samba 3.0.25b shows directory contents at the wrong position in the file tree when displaying a subdirectory of a DFS link. The problem occurs whenever Windows XP asks for a DFS referral for a subdirectory of a DFS link with a trailing backslash. Windows does not do this very often, but we saw it several times per day on our central DFS server. smbd/msdfs.c, dfs_path_lookup() does the following with the requested path: - in line 390, the local copy 'localpath' is 'unix_convert'ed; the trailing backslash is removed inside unix_convert - in lines 417-20, 'dfspath' (another copy of the requested path) is mangled another way without removing trailing backslashes That's why the following loop (lines 435-461) that is meant to synchronously cut off the last path component from both strings until it comes to a DFS link, does not handle both strings the same. When the original path ended with a backslash, 'canon_dfspath' has always one component more than 'localpath', so that *consumedcntp gets too big in line 446. This value is reported to the client. ---------------------------------------------------------- Bug #4860. Jeremy. (This used to be commit 42d1c6713a56197ca8dfebf74eb0d483102148f7)
Diffstat (limited to 'source3/smbd/msdfs.c')
-rw-r--r--source3/smbd/msdfs.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/source3/smbd/msdfs.c b/source3/smbd/msdfs.c
index a89f4ceffcb..16f3cd4370c 100644
--- a/source3/smbd/msdfs.c
+++ b/source3/smbd/msdfs.c
@@ -422,6 +422,14 @@ static NTSTATUS dfs_path_lookup(connection_struct *conn,
}
/*
+ * localpath comes out of unix_convert, so it has
+ * no trailing backslash. Make sure that canon_dfspath hasn't either.
+ * Fix for bug #4860 from Jan Martin <Jan.Martin@rwedea.com>.
+ */
+
+ trim_char(canon_dfspath,0,'/');
+
+ /*
* Redirect if any component in the path is a link.
* We do this by walking backwards through the
* local path, chopping off the last component