From e1d936f95c6cfead846f0a2175e938c53c941b38 Mon Sep 17 00:00:00 2001 From: Shirish Kalele Date: Wed, 23 Apr 2003 19:05:47 +0000 Subject: For deep referrals, track consumed path using a counter, and calculate the consumed count only if and when it is needed. Check into HEAD. (This used to be commit 11281c39209b501a69f4e6f32ea2081d15947f0a) --- source3/msdfs/msdfs.c | 21 +++++++++++---------- 1 file 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; -- cgit