From c442e5e75fc0f3161a09559550b39095ccff95b8 Mon Sep 17 00:00:00 2001 From: Slava Zanko Date: Tue, 7 Jun 2011 16:35:17 +0300 Subject: [PATCH] Changed custom_canonicalize_pathname() function for handle URL:// style Signed-off-by: Slava Zanko --- lib/tests/canonicalize_pathname.c | 9 +++++++++ lib/utilunix.c | 13 +++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/tests/canonicalize_pathname.c b/lib/tests/canonicalize_pathname.c index aa629d04c..fd56f8d35 100644 --- a/lib/tests/canonicalize_pathname.c +++ b/lib/tests/canonicalize_pathname.c @@ -72,6 +72,15 @@ START_TEST (test_canonicalize_path) /* Collapse "/.." with the previous part of path */ check_canonicalize ("/some_server/ww/some_server/../ww/../some_server/..//ww/some_server/ww", "/some_server/ww/ww/some_server/ww"); + /* URI style */ + check_canonicalize ("/some_server/ww/ftp://user:pass@host.net/path/", "/some_server/ww/ftp://user:pass@host.net/path"); + + check_canonicalize ("/some_server/ww/ftp://user:pass@host.net/path/../../", "/some_server/ww"); + + check_canonicalize ("ftp://user:pass@host.net/path/../../", "."); + + check_canonicalize ("ftp://user/../../", ".."); + } END_TEST diff --git a/lib/utilunix.c b/lib/utilunix.c index 354a9b3b7..66f797d63 100644 --- a/lib/utilunix.c +++ b/lib/utilunix.c @@ -565,7 +565,7 @@ custom_canonicalize_pathname (char *path, CANON_PATH_FLAGS flags) p = lpath; while (*p) { - if (p[0] == PATH_SEP && p[1] == PATH_SEP) + if (p[0] == PATH_SEP && p[1] == PATH_SEP && (p == lpath || *(p - 1) != ':')) { s = p + 1; while (*(++s) == PATH_SEP); @@ -650,8 +650,17 @@ custom_canonicalize_pathname (char *path, CANON_PATH_FLAGS flags) /* search for the previous token */ s = p - 1; - while (s >= lpath && *s != PATH_SEP) + while (s >= lpath) + { + if (s >= lpath + 2 && strncmp (s - 2, "://", 3) == 0) + { + s -= 2; + continue; + } + if (*s == PATH_SEP) + break; s--; + } s++;