chiark / gitweb /
cgroup: when escaping a cgroup object name, also escape names that start with a dot
authorLennart Poettering <lennart@poettering.net>
Fri, 3 May 2013 17:02:24 +0000 (19:02 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 3 May 2013 17:06:06 +0000 (19:06 +0200)
src/shared/cgroup-util.c
src/test/test-cgroup-util.c

index c5a5f8df8348e5dbe7a145c8e8bc17a6d2061622..43c415d760d67dee78646908affe51cf207fd268 100644 (file)
@@ -1527,7 +1527,12 @@ char *cg_escape(const char *p) {
         /* The return value of this function (unlike cg_unescape())
          * needs free()! */
 
-        if (p[0] == '_' || streq(p, "notify_on_release") || streq(p, "release_agent") || streq(p, "tasks"))
+        if (p[0] == 0 ||
+            p[0] == '_' ||
+            p[0] == '.' ||
+            streq(p, "notify_on_release") ||
+            streq(p, "release_agent") ||
+            streq(p, "tasks"))
                 need_prefix = true;
         else {
                 const char *dot;
index cc1a6fd723b5e7ef12dcc6dc505118dccb1e4f09..c9634d42b0999b1480ea5f774e5ef53b6ea26851 100644 (file)
@@ -146,11 +146,15 @@ static void test_escape_one(const char *s, const char *r) {
 
 static void test_escape(void) {
         test_escape_one("foobar", "foobar");
+        test_escape_one(".foobar", "_.foobar");
         test_escape_one("foobar.service", "foobar.service");
         test_escape_one("cgroup.service", "_cgroup.service");
         test_escape_one("cpu.service", "_cpu.service");
         test_escape_one("tasks", "_tasks");
         test_escape_one("_foobar", "__foobar");
+        test_escape_one("", "_");
+        test_escape_one("_", "__");
+        test_escape_one(".", "_.");
 }
 
 static void test_controller_is_valid(void) {