chiark / gitweb /
udev: set default rules permissions only at "add" events
[elogind.git] / src / core / unit-printf.c
index 308bbd6351eeb34a5d172ddeec3d7ddd3352c3f1..a58c96c23877ea98642a700096ec8a9f0d4e242f 100644 (file)
@@ -107,7 +107,7 @@ static char *specifier_runtime(char specifier, void *data, void *userdata) {
         Unit *u = userdata;
         assert(u);
 
-        if (u->manager->running_as == MANAGER_USER) {
+        if (u->manager->running_as == SYSTEMD_USER) {
                 const char *e;
 
                 e = getenv("XDG_RUNTIME_DIR");
@@ -123,24 +123,34 @@ static char *specifier_user_name(char specifier, void *data, void *userdata) {
         ExecContext *c;
         int r;
         const char *username;
+        uid_t uid;
+        char *printed = NULL;
 
         assert(u);
 
         c = unit_get_exec_context(u);
-        if (!c)
-                return NULL;
 
         /* get USER env from our own env if set */
-        if (!c->user)
+        if (!c || !c->user)
                 return getusername_malloc();
 
         /* fish username from passwd */
         username = c->user;
-        r = get_user_creds(&username, NULL, NULL, NULL, NULL);
+        r = get_user_creds(&username, &uid, NULL, NULL, NULL);
         if (r < 0)
                 return NULL;
 
-        return strdup(username);
+        switch (specifier) {
+                case 'U':
+                        if (asprintf(&printed, "%d", uid) < 0)
+                                return NULL;
+                        break;
+                case 'u':
+                        printed = strdup(username);
+                        break;
+        }
+
+        return printed;
 }
 
 static char *specifier_user_home(char specifier, void *data, void *userdata) {
@@ -152,11 +162,9 @@ static char *specifier_user_home(char specifier, void *data, void *userdata) {
         assert(u);
 
         c = unit_get_exec_context(u);
-        if (!c)
-                return NULL;
 
         /* return HOME if set, otherwise from passwd */
-        if (!c->user) {
+        if (!c || !c->user) {
                 char *h;
 
                 r = get_home_dir(&h);
@@ -183,11 +191,9 @@ static char *specifier_user_shell(char specifier, void *data, void *userdata) {
         assert(u);
 
         c = unit_get_exec_context(u);
-        if (!c)
-                return NULL;
 
         /* return HOME if set, otherwise from passwd */
-        if (!c->user) {
+        if (!c || !c->user) {
                 char *sh;
 
                 r = get_shell(&sh);
@@ -298,6 +304,7 @@ char *unit_full_printf(Unit *u, const char *format) {
                 { 'r', specifier_cgroup_root,         NULL },
                 { 'R', specifier_cgroup_root,         NULL },
                 { 't', specifier_runtime,             NULL },
+                { 'U', specifier_user_name,           NULL },
                 { 'u', specifier_user_name,           NULL },
                 { 'h', specifier_user_home,           NULL },
                 { 's', specifier_user_shell,          NULL },