summaryrefslogtreecommitdiff
path: root/source3/smbd/msdfs.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2008-05-13 14:01:19 -0700
committerJeremy Allison <jra@samba.org>2008-05-13 14:01:19 -0700
commitbafe8d22fde97755bf35e8abf389d52b8993a551 (patch)
tree1bd38dbcfbcbcf824026b31fb93e6dceba195872 /source3/smbd/msdfs.c
parent34933a5c236ee489e4c11172820cdc0496b9e334 (diff)
downloadsamba-bafe8d22fde97755bf35e8abf389d52b8993a551.tar.gz
samba-bafe8d22fde97755bf35e8abf389d52b8993a551.tar.bz2
samba-bafe8d22fde97755bf35e8abf389d52b8993a551.zip
Fix bug #5460. The problem is RHEL5.0 shipped a CIFS client
that sets the DFS bit on pathnames but doesn't send DFS paths. This causes lookups to fail as the smbd/msdfs.c code now just eats the first two parts of the pathname and uses the rest as the local path. The previous hostname check used to protect us from that as we knew that when the hostname was invalid it was a local path (and a broken client). I didn't want to put that check back in, but came up with another idea - even though the hostname can be a different one, the sharename must be valid on this machine. So we can check for a valid sharename instead. Jeremy. (This used to be commit e1cda82f6f7de3306a653af920756c1640057f2d)
Diffstat (limited to 'source3/smbd/msdfs.c')
-rw-r--r--source3/smbd/msdfs.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/source3/smbd/msdfs.c b/source3/smbd/msdfs.c
index e321a8c8e4..6306745574 100644
--- a/source3/smbd/msdfs.c
+++ b/source3/smbd/msdfs.c
@@ -133,6 +133,16 @@ static NTSTATUS parse_dfs_path(const char *pathname,
if(p == NULL) {
pdp->servicename = temp;
pdp->reqpath = eos_ptr; /* "" */
+ /* Is this really our servicename ? */
+ if (NULL == conn_find_byname(pdp->servicename)) {
+ DEBUG(10,("parse_dfs_path: %s is not our servicename\n",
+ pdp->servicename));
+ p = temp;
+ DEBUG(10,("parse_dfs_path: trying to convert %s "
+ "to a local path\n",
+ temp));
+ goto local_path;
+ }
return NT_STATUS_OK;
}
*p = '\0';