r21758: Fix a very specific dfs bug when passing in POSIX
authorJeremy Allison <jra@samba.org>
Thu, 8 Mar 2007 02:51:41 +0000 (02:51 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:18:28 +0000 (12:18 -0500)
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.
(This used to be commit 1722ea20db2d531f92fb18fa5783f09258727c64)

source3/smbd/msdfs.c

index 25c9c59497529038964fffbe64480cee9c671d60..c34512493ff35859f164a69f9e2c57cf74c3bd05 100644 (file)
@@ -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;
                                        }