diff options
author | Shirish Kalele <kalele@samba.org> | 2003-04-23 19:06:21 +0000 |
---|---|---|
committer | Shirish Kalele <kalele@samba.org> | 2003-04-23 19:06:21 +0000 |
commit | 8a106dcda90bbdb53b4a4be33a8db04514b9a3f0 (patch) | |
tree | 404f802759de564ab797ac3760eab73ae77ade90 /source3/msdfs | |
parent | fd472ad1e89a6e4785de54a3a33d1908f9f466bc (diff) | |
download | samba-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)
Diffstat (limited to 'source3/msdfs')
-rw-r--r-- | source3/msdfs/msdfs.c | 21 |
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; |