From: Jeremy Allison Date: Thu, 8 Mar 2007 02:51:41 +0000 (+0000) Subject: r21758: Fix a very specific dfs bug when passing in POSIX X-Git-Tag: samba-misc-tags/initial-v3-0-unstable~979 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1722ea20db2d531f92fb18fa5783f09258727c64;p=thirdparty%2Fsamba.git r21758: Fix a very specific dfs bug when passing in POSIX pathnames. When we're working out how much we've consumed we need to backtrack by either a '/' or '\\' component, as both are valid separators. Jeremy. --- diff --git a/source/smbd/msdfs.c b/source/smbd/msdfs.c index 25c9c594975..c34512493ff 100644 --- a/source/smbd/msdfs.c +++ b/source/smbd/msdfs.c @@ -92,7 +92,7 @@ static BOOL parse_processed_dfs_path(char* pathname, struct dfs_path *pdp, BOOL ZERO_STRUCTP(pdp); trim_char(temp,sepchar,sepchar); - DEBUG(10,("temp in parse_processed_dfs_path: .%s. after trimming \\'s\n",temp)); + DEBUG(10,("temp in parse_processed_dfs_path: .%s. after trimming /'s\n",temp)); /* now tokenize */ /* parse out hostname */ @@ -401,12 +401,15 @@ static BOOL resolve_dfs_path(TALLOC_CTX *ctx, */ if (consumedcntp) { - char *q; pstring buf; pstrcpy(buf, dfspath); trim_char(buf, '\0', '\\'); for (; consumed_level; consumed_level--) { - q = strrchr_m(buf, '\\'); + char *q, *q1, *q2; + /* Either '\\' or '/' may be a separator. */ + q1 = strrchr_m(buf, '\\'); + q2 = strrchr_m(buf, '/'); + q = MAX(q1,q2); if (q) { *q = 0; }