summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2016-11-29 15:54:42 +0100
committerLennart Poettering <lennart@poettering.net>2016-12-01 00:25:51 +0100
commita4eaf3cf822dae1d076dfc98afc3ab0d53871dac (patch)
tree4d1ac4a9856c484b4fb94fd008f19acf1390fe69 /src/test
parentdf878e682d009bc3c0842499fedc44703a7e7ede (diff)
fs-util: change chase_symlinks() behaviour in regards to escaping the root dir
Previously, we'd generate an EINVAL error if it is attempted to escape a root directory with relative ".." symlinks. With this commit this is changed so that ".." from the root directory is a NOP, following the kernel's own behaviour where /.. is equivalent to /. As suggested by @keszybz.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/test-fs-util.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/test/test-fs-util.c b/src/test/test-fs-util.c
index 7c6deb5416..792ad46847 100644
--- a/src/test/test-fs-util.c
+++ b/src/test/test-fs-util.c
@@ -97,21 +97,21 @@ static void test_chase_symlinks(void) {
result = mfree(result);
r = chase_symlinks(p, temp, &result);
- assert_se(r == -EINVAL);
+ assert_se(r == 0 && path_equal(result, temp));
p = strjoina(temp, "/6dotsusr");
assert_se(symlink("../../../usr", p) >= 0);
result = mfree(result);
r = chase_symlinks(p, temp, &result);
- assert_se(r == -EINVAL);
+ assert_se(r == 0 && path_equal(result, q));
p = strjoina(temp, "/top/8dotsusr");
assert_se(symlink("../../../../usr", p) >= 0);
result = mfree(result);
r = chase_symlinks(p, temp, &result);
- assert_se(r == -EINVAL);
+ assert_se(r == 0 && path_equal(result, q));
/* Paths that contain repeated slashes */
@@ -137,7 +137,7 @@ static void test_chase_symlinks(void) {
result = mfree(result);
r = chase_symlinks("/etc/./.././", "/etc", &result);
- assert_se(r == -EINVAL);
+ assert_se(r == 0 && path_equal(result, "/etc"));
result = mfree(result);
r = chase_symlinks("/etc/machine-id/foo", NULL, &result);