s3: smbtorture: Add new local test LOCAL-CANONICALIZE-PATH
authorJeremy Allison <jra@samba.org>
Fri, 27 Jan 2017 00:08:42 +0000 (16:08 -0800)
committerJeremy Allison <jra@samba.org>
Mon, 30 Jan 2017 17:39:18 +0000 (18:39 +0100)
Tests new canonicalize_absolute_path() function.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=12531

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Uri Simchoni <uri@samba.org>
source3/selftest/tests.py
source3/torture/torture.c

index 3a6186c7db1240dd6729f8f2ffd30c5e149500f4..8e1c33d66f0fc2e45b7f2371258398e7b910fba8 100755 (executable)
@@ -125,6 +125,7 @@ local_tests = [
     "LOCAL-MESSAGING-FDPASS2a",
     "LOCAL-MESSAGING-FDPASS2b",
     "LOCAL-PTHREADPOOL-TEVENT",
+    "LOCAL-CANONICALIZE-PATH",
     "LOCAL-hex_encode_buf",
     "LOCAL-remove_duplicate_addrs2"]
 
index 073931e097e5cb55ef7b4b583feeead13a55d486..1bd7d6e1393da199dd99c1c8b004e540b56a79ba 100644 (file)
@@ -11020,6 +11020,49 @@ static bool run_local_tdb_writer(int dummy)
        return true;
 }
 
+static bool run_local_canonicalize_path(int dummy)
+{
+       const char *src[] = {
+                       "/foo/..",
+                       "/..",
+                       "/foo/bar/../baz",
+                       "/foo/././",
+                       "/../foo",
+                       ".././././",
+                       ".././././../../../boo",
+                       "./..",
+                       NULL
+                       };
+       const char *dst[] = {
+                       "/",
+                       "/",
+                       "/foo/baz",
+                       "/foo",
+                       "/foo",
+                       "/",
+                       "/boo",
+                       "/",
+                       NULL
+                       };
+       unsigned int i;
+
+       for (i = 0; src[i] != NULL; i++) {
+               char *d = canonicalize_absolute_path(talloc_tos(), src[i]);
+               if (d == NULL) {
+                       perror("talloc fail\n");
+                       return false;
+               }
+               if (strcmp(d, dst[i]) != 0) {
+                       d_fprintf(stderr,
+                               "canonicalize missmatch %s -> %s != %s",
+                               src[i], d, dst[i]);
+                       return false;
+               }
+               talloc_free(d);
+       }
+       return true;
+}
+
 static double create_procs(bool (*fn)(int), bool *result)
 {
        int i, status;
@@ -11256,6 +11299,7 @@ static struct {
        { "LOCAL-DBWRAP-CTDB", run_local_dbwrap_ctdb, 0 },
        { "LOCAL-BENCH-PTHREADPOOL", run_bench_pthreadpool, 0 },
        { "LOCAL-PTHREADPOOL-TEVENT", run_pthreadpool_tevent, 0 },
+       { "LOCAL-CANONICALIZE-PATH", run_local_canonicalize_path, 0 },
        { "qpathinfo-bufsize", run_qpathinfo_bufsize, 0 },
        {NULL, NULL, 0}};