[systemd-devel] [PATCH] add %U for uids in units

Lennart Poettering lennart at poettering.net
Wed Dec 19 08:36:43 PST 2012


On Fri, 07.12.12 00:01, Daniel Wallace (danielwallace at gtmanfred.com) wrote:

Thanks, applied.

> ---
>  man/systemd.unit.xml   |  5 +++++
>  src/core/unit-printf.c | 17 +++++++++++++++--
>  2 files changed, 20 insertions(+), 2 deletions(-)
> 
> diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
> index 35644d3..bf91b4e 100644
> --- a/man/systemd.unit.xml
> +++ b/man/systemd.unit.xml
> @@ -264,6 +264,11 @@
>                          <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>
>                          <entry>This is the home directory of the configured user of the unit, or (if none is set) the user running the systemd instance.</entry>
> diff --git a/src/core/unit-printf.c b/src/core/unit-printf.c
> index a8eb60a..a58c96c 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 },


Lennart

-- 
Lennart Poettering - Red Hat, Inc.


More information about the systemd-devel mailing list