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:
Yu Watanabe
2025-11-17 21:31:51 +09:00
parent 6a8ab5f062
commit b9e612e070
3 changed files with 75 additions and 98 deletions
+30 -25
View File
@@ -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) {