summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShirish Kalele <kalele@samba.org>2003-04-23 19:06:21 +0000
committerShirish Kalele <kalele@samba.org>2003-04-23 19:06:21 +0000
commit8a106dcda90bbdb53b4a4be33a8db04514b9a3f0 (patch)
tree404f802759de564ab797ac3760eab73ae77ade90
parentfd472ad1e89a6e4785de54a3a33d1908f9f466bc (diff)
downloadsamba-8a106dcda90bbdb53b4a4be33a8db04514b9a3f0.tar.gz
samba-8a106dcda90bbdb53b4a4be33a8db04514b9a3f0.tar.bz2
samba-8a106dcda90bbdb53b4a4be33a8db04514b9a3f0.zip
For deep referrals, track consumed path using a counter, and calculate the
consumed count only if and when it is needed. Check into SAMBA_3_0. (This used to be commit d6a326ba46b0e45a2d97b7aa9762bfefca347d89)
-rw-r--r--source3/msdfs/msdfs.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/source3/msdfs/msdfs.c b/source3/msdfs/msdfs.c
index fa6617cb52..69a315d4e4 100644
--- a/source3/msdfs/msdfs.c
+++ b/source3/msdfs/msdfs.c
@@ -212,10 +212,9 @@ static BOOL resolve_dfs_path(char* dfspath, struct dfs_path* dp,
BOOL* self_referralp, int* consumedcntp)
{
fstring localpath;
-
+ int consumed_level = 1;
char *p;
fstring reqpath;
- pstring consumedbuf;
if (!dp || !conn) {
DEBUG(1,("resolve_dfs_path: NULL dfs_path* or NULL connection_struct*!\n"));
@@ -248,9 +247,6 @@ static BOOL resolve_dfs_path(char* dfspath, struct dfs_path* dp,
}
}
- pstrcpy(consumedbuf, dfspath);
- trim_string(consumedbuf, NULL, "\\");
-
/* redirect if any component in the path is a link */
fstrcpy(reqpath, dp->reqpath);
p = strrchr(reqpath, '/');
@@ -269,16 +265,21 @@ static BOOL resolve_dfs_path(char* dfspath, struct dfs_path* dp,
*/
if (consumedcntp) {
char *q;
- q = strrchr(consumedbuf, '\\');
- if (q)
- *q = '\0';
- *consumedcntp = strlen(consumedbuf);
- DEBUG(10, ("resolve_dfs_path: Path consumed: %d\n", *consumedcntp));
+ pstring buf;
+ pstrcpy(buf, dfspath);
+ trim_string(buf, NULL, "\\");
+ for (; consumed_level; consumed_level--) {
+ q = strrchr(buf, '\\');
+ if (q) *q = 0;
+ }
+ *consumedcntp = strlen(buf);
+ DEBUG(10, ("resolve_dfs_path: Path consumed: %s (%d)\n", buf, *consumedcntp));
}
return True;
}
p = strrchr(reqpath, '/');
+ consumed_level++;
}
return False;