|
Zbigniew Jędrzejewski-Szmek |
794d16 |
From 0a1d15d3b802128cc9be10c849c29b76a8fae3ed Mon Sep 17 00:00:00 2001
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
Date: Wed, 2 Oct 2013 13:23:10 +0200
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
Subject: [PATCH] execute.c: always set $SHELL
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
In e6dca81 $SHELL was added to user@.service. Let's
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
instead provide it to all units which have a user.
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
---
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
TODO | 2 --
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
man/systemd.exec.xml | 21 +++++++++++++++++--
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
src/core/execute.c | 56 +++++++++++++++++---------------------------------
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
units/user@.service.in | 1 -
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
4 files changed, 38 insertions(+), 42 deletions(-)
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
diff --git a/TODO b/TODO
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
index 07269f4..425f673 100644
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
--- a/TODO
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+++ b/TODO
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
@@ -54,8 +54,6 @@ CGroup Rework Completion:
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
Features:
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
-* set $SHELL where we set $HOME and $USER when User= is set of a service, drop its manual setting from user@.service
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
* we probably should replace the left-over uses of strv_append() and replace them by strv_push() or strv_extend()
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
* move config_parse_path_strv() out of conf-parser.c
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
index f50161f..e213ec4 100644
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
--- a/man/systemd.exec.xml
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+++ b/man/systemd.exec.xml
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
@@ -1021,10 +1021,13 @@
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
<varlistentry>
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
<term><varname>$USER</varname></term>
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ <term><varname>$LOGNAME</varname></term>
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
<term><varname>$HOME</varname></term>
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ <term><varname>$SHELL</varname></term>
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- <listitem><para>User name and home
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- directory. Set for the units which
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ <listitem><para>User name (twice), home
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ directory, and the login shell.
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ Set for the units which
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
have <varname>User=</varname> set,
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
which includes user
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
<command>systemd</command> instances.
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
@@ -1080,6 +1083,20 @@
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
<citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
</para></listitem>
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
</varlistentry>
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ <varlistentry>
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ <term><varname>$TERM</varname></term>
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ <listitem><para>Terminal type, set
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ only for units connected to a terminal
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ (<varname>StandardInput=tty</varname>,
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ <varname>StandardOutput=tty</varname>,
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ or
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ <varname>StandardError=tty</varname>).
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ See
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ <citerefentry><refentrytitle>termcap</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ </para></listitem>
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ </varlistentry>
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
</variablelist>
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
<para>Additional variables may be configured by the
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
diff --git a/src/core/execute.c b/src/core/execute.c
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
index a53ef48..3979f35 100644
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
--- a/src/core/execute.c
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+++ b/src/core/execute.c
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
@@ -1094,7 +1094,7 @@ int exec_spawn(ExecCommand *command,
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
if (pid == 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
int i, err;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
sigset_t ss;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- const char *username = NULL, *home = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ const char *username = NULL, *home = NULL, *shell = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
uid_t uid = (uid_t) -1;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
gid_t gid = (gid_t) -1;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
_cleanup_strv_free_ char **our_env = NULL, **pam_env = NULL,
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
@@ -1277,7 +1277,7 @@ int exec_spawn(ExecCommand *command,
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
if (context->user) {
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
username = context->user;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- err = get_user_creds(&username, &uid, &gid, &home, NULL);
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ err = get_user_creds(&username, &uid, &gid, &home, &shell);
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
if (err < 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
r = EXIT_USER;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
goto fail_child;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
@@ -1462,46 +1462,28 @@ int exec_spawn(ExecCommand *command,
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- our_env = new0(char*, 7);
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- if (!our_env) {
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ our_env = new(char*, 8);
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ if (!our_env ||
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ (n_fds > 0 && (
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ asprintf(our_env + n_env++, "LISTEN_PID=%lu", (unsigned long) getpid()) < 0 ||
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ asprintf(our_env + n_env++, "LISTEN_FDS=%u", n_fds) < 0)) ||
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ (home && asprintf(our_env + n_env++, "HOME=%s", home) < 0) ||
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ (username && (
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ asprintf(our_env + n_env++, "LOGNAME=%s", username) < 0 ||
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ asprintf(our_env + n_env++, "USER=%s", username) < 0)) ||
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ (shell && asprintf(our_env + n_env++, "SHELL=%s", shell) < 0) ||
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ ((is_terminal_input(context->std_input) ||
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ context->std_output == EXEC_OUTPUT_TTY ||
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ context->std_error == EXEC_OUTPUT_TTY) && (
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ !(our_env[n_env++] = strdup(default_term_for_tty(tty_path(context))))))) {
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
err = -ENOMEM;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
r = EXIT_MEMORY;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
goto fail_child;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- if (n_fds > 0)
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- if (asprintf(our_env + n_env++, "LISTEN_PID=%lu", (unsigned long) getpid()) < 0 ||
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- asprintf(our_env + n_env++, "LISTEN_FDS=%u", n_fds) < 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- err = -ENOMEM;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- r = EXIT_MEMORY;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- goto fail_child;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- }
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- if (home)
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- if (asprintf(our_env + n_env++, "HOME=%s", home) < 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- err = -ENOMEM;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- r = EXIT_MEMORY;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- goto fail_child;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- }
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- if (username)
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- if (asprintf(our_env + n_env++, "LOGNAME=%s", username) < 0 ||
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- asprintf(our_env + n_env++, "USER=%s", username) < 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- err = -ENOMEM;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- r = EXIT_MEMORY;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- goto fail_child;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- }
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- if (is_terminal_input(context->std_input) ||
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- context->std_output == EXEC_OUTPUT_TTY ||
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- context->std_error == EXEC_OUTPUT_TTY)
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- if (!(our_env[n_env++] = strdup(default_term_for_tty(tty_path(context))))) {
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- err = -ENOMEM;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- r = EXIT_MEMORY;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- goto fail_child;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- }
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
- assert(n_env <= 7);
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ our_env[n_env++] = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+ assert(n_env <= 8);
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
final_env = strv_env_merge(5,
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
environment,
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
diff --git a/units/user@.service.in b/units/user@.service.in
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
index 3718a57..3f8b59d 100644
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
--- a/units/user@.service.in
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
+++ b/units/user@.service.in
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
@@ -13,7 +13,6 @@ After=systemd-user-sessions.service
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
User=%I
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
PAMName=systemd-user
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
Type=notify
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
-Environment=SHELL=%s
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
ExecStart=-@rootlibexecdir@/systemd --user
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%I/dbus/user_bus_socket
|
|
Zbigniew Jędrzejewski-Szmek |
794d16 |
Slice=user-%i.slice
|