cgroup-util: do not check validity of controller in cg_split_spec()
Now the controller part is always ignored, hence let's skip check for the controller part of the spec. This also make it acceppt unnormalized path. Previously paths were checked by path_is_normalized(), but now checked by path_is_safe(). Also, now this mapps an empty path to NULL.
This commit is contained in:
+30
-25
@@ -322,47 +322,52 @@ TEST(escape, .sd_booted = true) {
|
||||
test_escape_one(".", "_.");
|
||||
}
|
||||
|
||||
TEST(controller_is_valid) {
|
||||
assert_se(cg_controller_is_valid("foobar"));
|
||||
assert_se(cg_controller_is_valid("foo_bar"));
|
||||
assert_se(cg_controller_is_valid("name=foo"));
|
||||
assert_se(!cg_controller_is_valid(""));
|
||||
assert_se(!cg_controller_is_valid("name="));
|
||||
assert_se(!cg_controller_is_valid("="));
|
||||
assert_se(!cg_controller_is_valid("cpu,cpuacct"));
|
||||
assert_se(!cg_controller_is_valid("_"));
|
||||
assert_se(!cg_controller_is_valid("_foobar"));
|
||||
assert_se(!cg_controller_is_valid("tatü"));
|
||||
}
|
||||
|
||||
TEST(cg_split_spec) {
|
||||
char *c, *p;
|
||||
|
||||
ASSERT_OK_ZERO(cg_split_spec("foobar:/", &c, &p));
|
||||
ASSERT_OK(cg_split_spec("foobar:/", &c, &p));
|
||||
ASSERT_STREQ(c, "foobar");
|
||||
ASSERT_STREQ(p, "/");
|
||||
c = mfree(c);
|
||||
p = mfree(p);
|
||||
|
||||
ASSERT_OK_ZERO(cg_split_spec("foobar:", &c, &p));
|
||||
ASSERT_OK(cg_split_spec("foobar:", &c, &p));
|
||||
ASSERT_STREQ(c, "foobar");
|
||||
ASSERT_NULL(p);
|
||||
c = mfree(c);
|
||||
|
||||
ASSERT_OK(cg_split_spec("foobar", &c, &p));
|
||||
ASSERT_STREQ(c, "foobar");
|
||||
ASSERT_NULL(p);
|
||||
c = mfree(c);
|
||||
|
||||
ASSERT_OK(cg_split_spec(":///", &c, &p));
|
||||
ASSERT_STREQ(c, "");
|
||||
ASSERT_STREQ(p, "/");
|
||||
c = mfree(c);
|
||||
p = mfree(p);
|
||||
|
||||
ASSERT_FAIL(cg_split_spec("foobar:asdfd", &c, &p));
|
||||
ASSERT_FAIL(cg_split_spec(":///", &c, &p));
|
||||
ASSERT_FAIL(cg_split_spec(":", &c, &p));
|
||||
ASSERT_FAIL(cg_split_spec("", &c, &p));
|
||||
ASSERT_FAIL(cg_split_spec("fo/obar:/", &c, &p));
|
||||
ASSERT_OK(cg_split_spec(":", &c, &p));
|
||||
ASSERT_STREQ(c, "");
|
||||
ASSERT_NULL(p);
|
||||
c = mfree(c);
|
||||
|
||||
ASSERT_OK(cg_split_spec("", &c, &p));
|
||||
ASSERT_NULL(c);
|
||||
ASSERT_NULL(p);
|
||||
|
||||
ASSERT_OK(cg_split_spec("fo/obar:/", &c, &p));
|
||||
ASSERT_STREQ(c, "fo/obar");
|
||||
ASSERT_STREQ(p, "/");
|
||||
c = mfree(c);
|
||||
p = mfree(p);
|
||||
|
||||
ASSERT_ERROR(cg_split_spec("foobar:asdfd", &c, &p), EINVAL);
|
||||
|
||||
ASSERT_OK(cg_split_spec("/", &c, &p));
|
||||
ASSERT_NULL(c);
|
||||
ASSERT_STREQ(p, "/");
|
||||
p = mfree(p);
|
||||
|
||||
ASSERT_OK(cg_split_spec("foo", &c, &p));
|
||||
ASSERT_STREQ(c, "foo");
|
||||
ASSERT_NULL(p);
|
||||
c = mfree(c);
|
||||
}
|
||||
|
||||
static void test_slice_to_path_one(const char *unit, const char *path, int error) {
|
||||
|
||||
Reference in New Issue
Block a user