cgroup: make sure all our cgroup objects have a suffix and are properly escaped

Session objects will now get the .session suffix, user objects the .user
suffix, nspawn containers the .nspawn suffix.

This also changes the user cgroups to be named after the numeric UID
rather than the username, since this allows us the parse these paths
standalone without requiring access to the cgroup file system.

This also changes the mapping of instanced units to cgroups. Instead of
mapping foo@bar.service to the cgroup path /user/foo@.service/bar we
will now map it to /user/foo@.service/foo@bar.service, in order to
ensure that all our objects are properly suffixed in the tree.
This commit is contained in:
Lennart Poettering
2013-04-22 23:14:12 -03:00
parent cd8f53ab16
commit ae018d9bc9
10 changed files with 274 additions and 168 deletions
+15 -3
View File
@@ -1212,7 +1212,7 @@ finish:
int main(int argc, char *argv[]) {
pid_t pid = 0;
int r = EXIT_FAILURE, k;
_cleanup_free_ char *machine_root = NULL, *newcg = NULL;
_cleanup_free_ char *machine_root = NULL, *name = NULL, *escaped = NULL, *newcg = NULL;
_cleanup_close_ int master = -1;
int n_fd_passed;
const char *console = NULL;
@@ -1298,9 +1298,21 @@ int main(int argc, char *argv[]) {
goto finish;
}
newcg = strjoin(machine_root, "/", arg_machine, ".nspawn", NULL);
name = strappend(arg_machine, ".nspawn");
if (!name) {
log_oom();
goto finish;
}
escaped = cg_escape(name);
if (!escaped) {
log_oom();
goto finish;
}
newcg = strjoin(machine_root, "/", escaped, NULL);
if (!newcg) {
log_error("Failed to allocate cgroup path.");
log_oom();
goto finish;
}