From: Daniel Wallace Date: Fri, 7 Dec 2012 05:01:15 +0000 (-0500) Subject: unit: add %U for uids in units X-Git-Tag: v197~116 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=067d851d30386c553e3a84f59d81d003ff638b91;hp=490b7e47093d491a2bdb1084fe92b796f4e07eef;p=elogind.git unit: add %U for uids in units --- diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml index 35644d38a..bf91b4eb1 100644 --- a/man/systemd.unit.xml +++ b/man/systemd.unit.xml @@ -263,6 +263,11 @@ User name This is the name of the configured user of the unit, or (if none is set) the user running the systemd instance. + + %U + User uid + This is the uid of the configured user of the unit, or (if none is set) the user running the systemd instance. + %h User home directory diff --git a/src/core/unit-printf.c b/src/core/unit-printf.c index a8eb60a3d..a58c96c23 100644 --- a/src/core/unit-printf.c +++ b/src/core/unit-printf.c @@ -123,6 +123,8 @@ 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); @@ -134,11 +136,21 @@ static char *specifier_user_name(char specifier, void *data, void *userdata) { /* 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) { @@ -292,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 },