1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2024-12-23 17:34:00 +03:00

unit: add %U for uids in units

This commit is contained in:
Daniel Wallace 2012-12-07 00:01:15 -05:00 committed by Lennart Poettering
parent 490b7e4709
commit 067d851d30
2 changed files with 20 additions and 2 deletions

View File

@ -263,6 +263,11 @@
<entry>User name</entry>
<entry>This is the name of the configured user of the unit, or (if none is set) the user running the systemd instance.</entry>
</row>
<row>
<entry><literal>%U</literal></entry>
<entry>User uid</entry>
<entry>This is the uid of the configured user of the unit, or (if none is set) the user running the systemd instance.</entry>
</row>
<row>
<entry><literal>%h</literal></entry>
<entry>User home directory</entry>

View File

@ -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 },