diff options
Diffstat (limited to 'src/test/test-fs-util.c')
-rw-r--r-- | src/test/test-fs-util.c | 104 |
1 files changed, 53 insertions, 51 deletions
diff --git a/src/test/test-fs-util.c b/src/test/test-fs-util.c index 7cf4f4976b..ac8b95aece 100644 --- a/src/test/test-fs-util.c +++ b/src/test/test-fs-util.c @@ -61,45 +61,45 @@ static void test_chase_symlinks(void) { /* Paths that use symlinks underneath the "root" */ - r = chase_symlinks(p, NULL, 0, &result); + r = chase_symlinks(p, NULL, 0, &result, NULL); assert_se(r > 0); assert_se(path_equal(result, "/usr")); result = mfree(result); pslash = strjoina(p, "/"); - r = chase_symlinks(pslash, NULL, 0, &result); + r = chase_symlinks(pslash, NULL, 0, &result, NULL); assert_se(r > 0); assert_se(path_equal(result, "/usr/")); result = mfree(result); - r = chase_symlinks(p, temp, 0, &result); + r = chase_symlinks(p, temp, 0, &result, NULL); assert_se(r == -ENOENT); - r = chase_symlinks(pslash, temp, 0, &result); + r = chase_symlinks(pslash, temp, 0, &result, NULL); assert_se(r == -ENOENT); q = strjoina(temp, "/usr"); - r = chase_symlinks(p, temp, CHASE_NONEXISTENT, &result); + r = chase_symlinks(p, temp, CHASE_NONEXISTENT, &result, NULL); assert_se(r == 0); assert_se(path_equal(result, q)); result = mfree(result); qslash = strjoina(q, "/"); - r = chase_symlinks(pslash, temp, CHASE_NONEXISTENT, &result); + r = chase_symlinks(pslash, temp, CHASE_NONEXISTENT, &result, NULL); assert_se(r == 0); assert_se(path_equal(result, qslash)); result = mfree(result); assert_se(mkdir(q, 0700) >= 0); - r = chase_symlinks(p, temp, 0, &result); + r = chase_symlinks(p, temp, 0, &result, NULL); assert_se(r > 0); assert_se(path_equal(result, q)); result = mfree(result); - r = chase_symlinks(pslash, temp, 0, &result); + r = chase_symlinks(pslash, temp, 0, &result, NULL); assert_se(r > 0); assert_se(path_equal(result, qslash)); result = mfree(result); @@ -107,12 +107,12 @@ static void test_chase_symlinks(void) { p = strjoina(temp, "/slash"); assert_se(symlink("/", p) >= 0); - r = chase_symlinks(p, NULL, 0, &result); + r = chase_symlinks(p, NULL, 0, &result, NULL); assert_se(r > 0); assert_se(path_equal(result, "/")); result = mfree(result); - r = chase_symlinks(p, temp, 0, &result); + r = chase_symlinks(p, temp, 0, &result, NULL); assert_se(r > 0); assert_se(path_equal(result, temp)); result = mfree(result); @@ -122,21 +122,21 @@ static void test_chase_symlinks(void) { p = strjoina(temp, "/6dots"); assert_se(symlink("../../..", p) >= 0); - r = chase_symlinks(p, temp, 0, &result); + r = chase_symlinks(p, temp, 0, &result, NULL); assert_se(r > 0 && path_equal(result, temp)); result = mfree(result); p = strjoina(temp, "/6dotsusr"); assert_se(symlink("../../../usr", p) >= 0); - r = chase_symlinks(p, temp, 0, &result); + r = chase_symlinks(p, temp, 0, &result, NULL); assert_se(r > 0 && path_equal(result, q)); result = mfree(result); p = strjoina(temp, "/top/8dotsusr"); assert_se(symlink("../../../../usr", p) >= 0); - r = chase_symlinks(p, temp, 0, &result); + r = chase_symlinks(p, temp, 0, &result, NULL); assert_se(r > 0 && path_equal(result, q)); result = mfree(result); @@ -145,12 +145,12 @@ static void test_chase_symlinks(void) { p = strjoina(temp, "/slashslash"); assert_se(symlink("///usr///", p) >= 0); - r = chase_symlinks(p, NULL, 0, &result); + r = chase_symlinks(p, NULL, 0, &result, NULL); assert_se(r > 0); assert_se(path_equal(result, "/usr")); result = mfree(result); - r = chase_symlinks(p, temp, 0, &result); + r = chase_symlinks(p, temp, 0, &result, NULL); assert_se(r > 0); assert_se(path_equal(result, q)); result = mfree(result); @@ -169,48 +169,48 @@ static void test_chase_symlinks(void) { assert_se(symlink("/", p) >= 0); /* Fail when user-owned directories contain root-owned subdirectories. */ - r = chase_symlinks(p, temp, CHASE_SAFE, &result); + r = chase_symlinks(p, temp, CHASE_SAFE, &result, NULL); assert_se(r == -ENOLINK); result = mfree(result); /* Allow this when the user-owned directories are all in the "root". */ - r = chase_symlinks(p, q, CHASE_SAFE, &result); + r = chase_symlinks(p, q, CHASE_SAFE, &result, NULL); assert_se(r > 0); result = mfree(result); } /* Paths using . */ - r = chase_symlinks("/etc/./.././", NULL, 0, &result); + r = chase_symlinks("/etc/./.././", NULL, 0, &result, NULL); assert_se(r > 0); assert_se(path_equal(result, "/")); result = mfree(result); - r = chase_symlinks("/etc/./.././", "/etc", 0, &result); + r = chase_symlinks("/etc/./.././", "/etc", 0, &result, NULL); assert_se(r > 0 && path_equal(result, "/etc")); result = mfree(result); - r = chase_symlinks("/../.././//../../etc", NULL, 0, &result); + r = chase_symlinks("/../.././//../../etc", NULL, 0, &result, NULL); assert_se(r > 0); assert_se(streq(result, "/etc")); result = mfree(result); - r = chase_symlinks("/../.././//../../test-chase.fsldajfl", NULL, CHASE_NONEXISTENT, &result); + r = chase_symlinks("/../.././//../../test-chase.fsldajfl", NULL, CHASE_NONEXISTENT, &result, NULL); assert_se(r == 0); assert_se(streq(result, "/test-chase.fsldajfl")); result = mfree(result); - r = chase_symlinks("/../.././//../../etc", "/", CHASE_PREFIX_ROOT, &result); + r = chase_symlinks("/../.././//../../etc", "/", CHASE_PREFIX_ROOT, &result, NULL); assert_se(r > 0); assert_se(streq(result, "/etc")); result = mfree(result); - r = chase_symlinks("/../.././//../../test-chase.fsldajfl", "/", CHASE_PREFIX_ROOT|CHASE_NONEXISTENT, &result); + r = chase_symlinks("/../.././//../../test-chase.fsldajfl", "/", CHASE_PREFIX_ROOT|CHASE_NONEXISTENT, &result, NULL); assert_se(r == 0); assert_se(streq(result, "/test-chase.fsldajfl")); result = mfree(result); - r = chase_symlinks("/etc/machine-id/foo", NULL, 0, &result); + r = chase_symlinks("/etc/machine-id/foo", NULL, 0, &result, NULL); assert_se(r == -ENOTDIR); result = mfree(result); @@ -218,25 +218,25 @@ static void test_chase_symlinks(void) { p = strjoina(temp, "/recursive-symlink"); assert_se(symlink("recursive-symlink", p) >= 0); - r = chase_symlinks(p, NULL, 0, &result); + r = chase_symlinks(p, NULL, 0, &result, NULL); assert_se(r == -ELOOP); /* Path which doesn't exist */ p = strjoina(temp, "/idontexist"); - r = chase_symlinks(p, NULL, 0, &result); + r = chase_symlinks(p, NULL, 0, &result, NULL); assert_se(r == -ENOENT); - r = chase_symlinks(p, NULL, CHASE_NONEXISTENT, &result); + r = chase_symlinks(p, NULL, CHASE_NONEXISTENT, &result, NULL); assert_se(r == 0); assert_se(path_equal(result, p)); result = mfree(result); p = strjoina(temp, "/idontexist/meneither"); - r = chase_symlinks(p, NULL, 0, &result); + r = chase_symlinks(p, NULL, 0, &result, NULL); assert_se(r == -ENOENT); - r = chase_symlinks(p, NULL, CHASE_NONEXISTENT, &result); + r = chase_symlinks(p, NULL, CHASE_NONEXISTENT, &result, NULL); assert_se(r == 0); assert_se(path_equal(result, p)); result = mfree(result); @@ -244,17 +244,17 @@ static void test_chase_symlinks(void) { /* Path which doesn't exist, but contains weird stuff */ p = strjoina(temp, "/idontexist/.."); - r = chase_symlinks(p, NULL, 0, &result); + r = chase_symlinks(p, NULL, 0, &result, NULL); assert_se(r == -ENOENT); - r = chase_symlinks(p, NULL, CHASE_NONEXISTENT, &result); + r = chase_symlinks(p, NULL, CHASE_NONEXISTENT, &result, NULL); assert_se(r == -ENOENT); p = strjoina(temp, "/target"); q = strjoina(temp, "/top"); assert_se(symlink(q, p) >= 0); p = strjoina(temp, "/target/idontexist"); - r = chase_symlinks(p, NULL, 0, &result); + r = chase_symlinks(p, NULL, 0, &result, NULL); assert_se(r == -ENOENT); if (geteuid() == 0) { @@ -264,30 +264,30 @@ static void test_chase_symlinks(void) { q = strjoina(p, "/priv2"); assert_se(mkdir(q, 0755) >= 0); - assert_se(chase_symlinks(q, NULL, CHASE_SAFE, NULL) >= 0); + assert_se(chase_symlinks(q, NULL, CHASE_SAFE, NULL, NULL) >= 0); assert_se(chown(q, UID_NOBODY, GID_NOBODY) >= 0); - assert_se(chase_symlinks(q, NULL, CHASE_SAFE, NULL) >= 0); + assert_se(chase_symlinks(q, NULL, CHASE_SAFE, NULL, NULL) >= 0); assert_se(chown(p, UID_NOBODY, GID_NOBODY) >= 0); - assert_se(chase_symlinks(q, NULL, CHASE_SAFE, NULL) >= 0); + assert_se(chase_symlinks(q, NULL, CHASE_SAFE, NULL, NULL) >= 0); assert_se(chown(q, 0, 0) >= 0); - assert_se(chase_symlinks(q, NULL, CHASE_SAFE, NULL) == -ENOLINK); + assert_se(chase_symlinks(q, NULL, CHASE_SAFE, NULL, NULL) == -ENOLINK); assert_se(rmdir(q) >= 0); assert_se(symlink("/etc/passwd", q) >= 0); - assert_se(chase_symlinks(q, NULL, CHASE_SAFE, NULL) == -ENOLINK); + assert_se(chase_symlinks(q, NULL, CHASE_SAFE, NULL, NULL) == -ENOLINK); assert_se(chown(p, 0, 0) >= 0); - assert_se(chase_symlinks(q, NULL, CHASE_SAFE, NULL) >= 0); + assert_se(chase_symlinks(q, NULL, CHASE_SAFE, NULL, NULL) >= 0); } p = strjoina(temp, "/machine-id-test"); assert_se(symlink("/usr/../etc/./machine-id", p) >= 0); - pfd = chase_symlinks(p, NULL, CHASE_OPEN, NULL); - if (pfd != -ENOENT) { + r = chase_symlinks(p, NULL, 0, NULL, &pfd); + if (r != -ENOENT) { _cleanup_close_ int fd = -1; sd_id128_t a, b; @@ -307,8 +307,9 @@ static void test_chase_symlinks(void) { p = strjoina(temp, "/target"); q = strjoina(temp, "/symlink"); assert_se(symlink(p, q) >= 0); - pfd = chase_symlinks(q, NULL, CHASE_OPEN|CHASE_NOFOLLOW, &result); - assert_se(pfd > 0); + r = chase_symlinks(q, NULL, CHASE_NOFOLLOW, &result, &pfd); + assert_se(r >= 0); + assert_se(pfd >= 0); assert_se(path_equal(result, q)); assert_se(fstat(pfd, &st) >= 0); assert_se(S_ISLNK(st.st_mode)); @@ -319,8 +320,9 @@ static void test_chase_symlinks(void) { assert_se(symlink("s2", q) >= 0); p = strjoina(temp, "/s2"); assert_se(symlink("nonexistent", p) >= 0); - pfd = chase_symlinks(q, NULL, CHASE_OPEN|CHASE_NOFOLLOW, &result); - assert_se(pfd > 0); + r = chase_symlinks(q, NULL, CHASE_NOFOLLOW, &result, &pfd); + assert_se(r >= 0); + assert_se(pfd >= 0); assert_se(path_equal(result, q)); assert_se(fstat(pfd, &st) >= 0); assert_se(S_ISLNK(st.st_mode)); @@ -329,42 +331,42 @@ static void test_chase_symlinks(void) { /* Test CHASE_ONE */ p = strjoina(temp, "/start"); - r = chase_symlinks(p, NULL, CHASE_STEP, &result); + r = chase_symlinks(p, NULL, CHASE_STEP, &result, NULL); assert_se(r == 0); p = strjoina(temp, "/top/dot/dotdota"); assert_se(streq(p, result)); result = mfree(result); - r = chase_symlinks(p, NULL, CHASE_STEP, &result); + r = chase_symlinks(p, NULL, CHASE_STEP, &result, NULL); assert_se(r == 0); p = strjoina(temp, "/top/./dotdota"); assert_se(streq(p, result)); result = mfree(result); - r = chase_symlinks(p, NULL, CHASE_STEP, &result); + r = chase_symlinks(p, NULL, CHASE_STEP, &result, NULL); assert_se(r == 0); p = strjoina(temp, "/top/../a"); assert_se(streq(p, result)); result = mfree(result); - r = chase_symlinks(p, NULL, CHASE_STEP, &result); + r = chase_symlinks(p, NULL, CHASE_STEP, &result, NULL); assert_se(r == 0); p = strjoina(temp, "/a"); assert_se(streq(p, result)); result = mfree(result); - r = chase_symlinks(p, NULL, CHASE_STEP, &result); + r = chase_symlinks(p, NULL, CHASE_STEP, &result, NULL); assert_se(r == 0); p = strjoina(temp, "/b"); assert_se(streq(p, result)); result = mfree(result); - r = chase_symlinks(p, NULL, CHASE_STEP, &result); + r = chase_symlinks(p, NULL, CHASE_STEP, &result, NULL); assert_se(r == 0); assert_se(streq("/usr", result)); result = mfree(result); - r = chase_symlinks("/usr", NULL, CHASE_STEP, &result); + r = chase_symlinks("/usr", NULL, CHASE_STEP, &result, NULL); assert_se(r > 0); assert_se(streq("/usr", result)); result = mfree(result); |