1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-25 23:21:54 +03:00

Handle deep referrals: check whether each component in the requested path of

a dfs referral is a dfs link, and redirect.
Thanks to John Janosik <jpjanosi@us.ibm.com> for the patch.
(This used to be commit 2c4e59cf26)
This commit is contained in:
Shirish Kalele 2003-04-10 19:54:17 +00:00
parent 6e0bd81f44
commit 5c6fde8eb1

View File

@ -215,6 +215,7 @@ static BOOL resolve_dfs_path(char* dfspath, struct dfs_path* dp,
char *p;
fstring reqpath;
pstring consumedbuf;
if (!dp || !conn) {
DEBUG(1,("resolve_dfs_path: NULL dfs_path* or NULL connection_struct*!\n"));
@ -247,10 +248,13 @@ static BOOL resolve_dfs_path(char* dfspath, struct dfs_path* dp,
}
}
/* also redirect if the parent directory is a dfs link */
pstrcpy(consumedbuf, dfspath);
trim_string(consumedbuf, NULL, "\\");
/* redirect if any component in the path is a link */
fstrcpy(reqpath, dp->reqpath);
p = strrchr(reqpath, '/');
if (p) {
while (p) {
*p = '\0';
fstrcpy(localpath, conn->connectpath);
fstrcat(localpath, "/");
@ -265,18 +269,16 @@ static BOOL resolve_dfs_path(char* dfspath, struct dfs_path* dp,
*/
if (consumedcntp) {
char *q;
pstring buf;
pstrcpy(buf, dfspath);
trim_string(buf, NULL, "\\");
q = strrchr(buf, '\\');
q = strrchr(consumedbuf, '\\');
if (q)
*q = '\0';
*consumedcntp = strlen(buf);
*consumedcntp = strlen(consumedbuf);
DEBUG(10, ("resolve_dfs_path: Path consumed: %d\n", *consumedcntp));
}
return True;
}
p = strrchr(reqpath, '/');
}
return False;
@ -629,8 +631,7 @@ int setup_dfs_referral(char* pathname, int max_referral_level, char** ppdata)
/* Trim pathname sent by client so it begins with only one backslash.
Two backslashes confuse some dfs clients
*/
while (strlen(pathnamep) > 1 && pathnamep[0] == '\\'
&& pathnamep[1] == '\\')
while (pathnamep[0] == '\\' && pathnamep[1] == '\\')
pathnamep++;
pstrcpy(buf, pathnamep);