X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Finstall-printf.c;h=c44459b4e0fbd73fd7db9d6739fd30571f24985a;hb=b32ff512191bf873266ee8067f6f6c8a30c96a5e;hp=85aebc42cc010045bad17445afc7a9b2c715080c;hpb=7584d236eac91f9b7128b1eb08bddf18be2bce9f;p=elogind.git diff --git a/src/shared/install-printf.c b/src/shared/install-printf.c index 85aebc42c..c44459b4e 100644 --- a/src/shared/install-printf.c +++ b/src/shared/install-printf.c @@ -24,6 +24,7 @@ #include "specifier.h" #include "unit-name.h" +#include "util.h" #include "install-printf.h" static char *specifier_prefix_and_instance(char specifier, void *data, void *userdata) { @@ -56,6 +57,42 @@ static char *specifier_instance(char specifier, void *data, void *userdata) { return strdup(""); } +static char *specifier_user_name(char specifier, void *data, void *userdata) { + InstallInfo *i = userdata; + const char *username; + _cleanup_free_ char *tmp = NULL; + char *printed = NULL; + + assert(i); + + if (i->user) + username = i->user; + else + /* get USER env from env or our own uid */ + username = tmp = getusername_malloc(); + + switch (specifier) { + case 'u': + printed = strdup(username); + break; + case 'U': { + /* fish username from passwd */ + uid_t uid; + int r; + + r = get_user_creds(&username, &uid, NULL, NULL, NULL); + if (r < 0) + return NULL; + + if (asprintf(&printed, "%d", uid) < 0) + return NULL; + break; + }} + + return printed; +} + + char *install_full_printf(InstallInfo *i, const char *format) { /* This is similar to unit_full_printf() but does not support @@ -79,8 +116,8 @@ char *install_full_printf(InstallInfo *i, const char *format) { { 'p', specifier_prefix, NULL }, { 'i', specifier_instance, NULL }, -// { 'U', specifier_user_name, NULL }, -// { 'u', specifier_user_name, NULL }, + { 'U', specifier_user_name, NULL }, + { 'u', specifier_user_name, NULL }, { 'm', specifier_machine_id, NULL }, { 'H', specifier_host_name, NULL },