summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2015-02-03 20:07:37 -0500
committerLennart Poettering <lennart@poettering.net>2015-02-04 02:16:33 +0100
commit320814811417146cfa1e416f69f1101eed630c36 (patch)
tree2547bffbd141320cd081a133a128d8b27916b7ac /src/shared
parent5e07a79e84ab8b045b9df1a2719f14fc84471a1d (diff)
cg_path_get_user_unit(): Did not correctly parse user-unit templates.
It ran either skip_session() or skip_user_manager(), then ran skip_slices() iff skip_session() ran. It needs to run skip_slices() in either case. Included is a test case demonstrating why.
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/cgroup-util.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/shared/cgroup-util.c b/src/shared/cgroup-util.c
index b527868e6b..dfd8689b72 100644
--- a/src/shared/cgroup-util.c
+++ b/src/shared/cgroup-util.c
@@ -1251,17 +1251,15 @@ int cg_path_get_user_unit(const char *path, char **unit) {
/* Skip slices, if there are any */
e = skip_slices(path);
- /* Skip the session scope... */
+ /* Skip the session scope or user manager... */
t = skip_session(e);
- if (t)
- /* ... and skip more slices if there's one */
- e = skip_slices(t);
- else {
- /* ... or require a user manager unit to be there */
- e = skip_user_manager(e);
- if (!e)
- return -ENOENT;
- }
+ if (!t)
+ t = skip_user_manager(e);
+ if (!t)
+ return -ENOENT;
+
+ /* ... and skip more slices if there are any */
+ e = skip_slices(t);
return cg_path_decode_unit(e, unit);
}