chiark / gitweb /
Move generic specifier functions to shared
[elogind.git] / src / core / unit-printf.c
index cbae45d9f75c2f2db756982acac52f7154ef4772..3aa735e5b20f3277cd1685201463ecd335e3fb60 100644 (file)
@@ -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);
@@ -205,42 +211,6 @@ static char *specifier_user_shell(char specifier, void *data, void *userdata) {
         return strdup(shell);
 }
 
-static char *specifier_machine_id(char specifier, void *data, void *userdata) {
-        sd_id128_t id;
-        char *buf;
-        int r;
-
-        r = sd_id128_get_machine(&id);
-        if (r < 0)
-                return NULL;
-
-        buf = new(char, 33);
-        if (!buf)
-                return NULL;
-
-        return sd_id128_to_string(id, buf);
-}
-
-static char *specifier_boot_id(char specifier, void *data, void *userdata) {
-        sd_id128_t id;
-        char *buf;
-        int r;
-
-        r = sd_id128_get_boot(&id);
-        if (r < 0)
-                return NULL;
-
-        buf = new(char, 33);
-        if (!buf)
-                return NULL;
-
-        return sd_id128_to_string(id, buf);
-}
-
-static char *specifier_host_name(char specifier, void *data, void *userdata) {
-        return gethostname_malloc();
-}
-
 char *unit_name_printf(Unit *u, const char* format) {
 
         /*
@@ -298,6 +268,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 },