[PATCH weston v2 2/2] weston-launch: Allow the user to use her login shell
Quentin Glidic
sardemff7+wayland at sardemff7.net
Fri Jun 10 14:01:22 UTC 2016
From: Quentin Glidic <sardemff7+git at sardemff7.net>
This avoids the need to maintain two parallel shell profile files for
users with a compatible shell (at least bash, sh and zsh are).
There is no major security issue here, as the shell is the one returned
from the password database, and thus is retricted by /etc/shells (or
root override).
Signed-off-by: Quentin Glidic <sardemff7+git at sardemff7.net>
---
v2: Added some rationale to the commit message
src/weston-launch.c | 29 +++++++++++++++++++----------
1 file changed, 19 insertions(+), 10 deletions(-)
diff --git a/src/weston-launch.c b/src/weston-launch.c
index 140fde1..c206094 100644
--- a/src/weston-launch.c
+++ b/src/weston-launch.c
@@ -108,6 +108,7 @@ struct weston_launch {
pid_t child;
int verbose;
char *new_user;
+ int use_user_shell;
};
union cmsg_data { unsigned char b[4]; int fd; };
@@ -613,7 +614,10 @@ setup_session(struct weston_launch *wl, char **child_argv)
* We open a new session, so it makes sense
* to run a new login shell
*/
- child_argv[0] = "/bin/sh";
+ if (wl->use_user_shell)
+ child_argv[0] = wl->pw->pw_shell;
+ else
+ child_argv[0] = "/bin/sh";
child_argv[1] = "-l";
child_argv[2] = "-c";
child_argv[3] = BINDIR "/weston \"$@\"";
@@ -675,10 +679,11 @@ static void
help(const char *name)
{
fprintf(stderr, "Usage: %s [args...] [-- [weston args..]]\n", name);
- fprintf(stderr, " -u, --user Start session as specified username\n");
- fprintf(stderr, " -t, --tty Start session on alternative tty\n");
- fprintf(stderr, " -v, --verbose Be verbose\n");
- fprintf(stderr, " -h, --help Display this help message\n");
+ fprintf(stderr, " -u, --user Start session as specified username\n");
+ fprintf(stderr, " -s, --use-user-shell Use the user login shell (from PAM) instead of /bin/sh, only has effect with --user\n");
+ fprintf(stderr, " -t, --tty Start session on alternative tty\n");
+ fprintf(stderr, " -v, --verbose Be verbose\n");
+ fprintf(stderr, " -h, --help Display this help message\n");
}
int
@@ -688,11 +693,12 @@ main(int argc, char *argv[])
int i, c;
char *tty = NULL;
struct option opts[] = {
- { "user", required_argument, NULL, 'u' },
- { "tty", required_argument, NULL, 't' },
- { "verbose", no_argument, NULL, 'v' },
- { "help", no_argument, NULL, 'h' },
- { 0, 0, NULL, 0 }
+ { "user", required_argument, NULL, 'u' },
+ { "use-user-shell", no_argument, NULL, 's' },
+ { "tty", required_argument, NULL, 't' },
+ { "verbose", no_argument, NULL, 'v' },
+ { "help", no_argument, NULL, 'h' },
+ { 0, 0, NULL, 0 }
};
memset(&wl, 0, sizeof wl);
@@ -704,6 +710,9 @@ main(int argc, char *argv[])
if (getuid() != 0)
error(1, 0, "Permission denied. -u allowed for root only");
break;
+ case 's':
+ wl.use_user_shell = 1;
+ break;
case 't':
tty = optarg;
break;
--
2.8.3
More information about the wayland-devel
mailing list