[PATCH weston v2 1/2] weston-launch: Only run a login shell for new sessions
Quentin Glidic
sardemff7+wayland at sardemff7.net
Mon Aug 15 15:05:13 UTC 2016
On 13/06/2016 09:45, Pekka Paalanen wrote:
> On Fri, 10 Jun 2016 16:01:21 +0200
> Quentin Glidic <sardemff7+wayland at sardemff7.net> wrote:
>
>> From: Quentin Glidic <sardemff7+git at sardemff7.net>
>>
>> This way, the environment is correctly preserved for weston. Since
>> commit 636156d5f693ac5b01cec6a2937d2b6cd4237ea9, clearenv() is only
>> called when we open a new PAM session, so it makes sense to only use a
>> login shell in that case.
>>
>> Signed-off-by: Quentin Glidic <sardemff7+git at sardemff7.net>
>> ---
>>
>> v2:
>> - Changed to char ** to avoid the confusing
>> - Added the braces around the if body
>
> Hi,
>
> very good:
> Reviewed-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
>
> But I haven't tested it.
Pushed:
ee27744..056889a master -> master
Cheers,
>> src/weston-launch.c | 36 +++++++++++++++++++++++-------------
>> 1 file changed, 23 insertions(+), 13 deletions(-)
>>
>> diff --git a/src/weston-launch.c b/src/weston-launch.c
>> index 9987d8e..140fde1 100644
>> --- a/src/weston-launch.c
>> +++ b/src/weston-launch.c
>> @@ -577,8 +577,8 @@ setup_tty(struct weston_launch *wl, const char *tty)
>> return 0;
>> }
>>
>> -static void
>> -setup_session(struct weston_launch *wl)
>> +static int
>> +setup_session(struct weston_launch *wl, char **child_argv)
>> {
>> char **env;
>> char *term;
>> @@ -608,6 +608,17 @@ setup_session(struct weston_launch *wl)
>> }
>> free(env);
>> }
>> +
>> + /*
>> + * We open a new session, so it makes sense
>> + * to run a new login shell
>> + */
>> + child_argv[0] = "/bin/sh";
>> + child_argv[1] = "-l";
>> + child_argv[2] = "-c";
>> + child_argv[3] = BINDIR "/weston \"$@\"";
>> + child_argv[4] = "weston";
>> + return 5;
>> }
>>
>> static void
>> @@ -626,12 +637,19 @@ launch_compositor(struct weston_launch *wl, int argc, char *argv[])
>> {
>> char *child_argv[MAX_ARGV_SIZE];
>> sigset_t mask;
>> - int i;
>> + int o, i;
>>
>> if (wl->verbose)
>> printf("weston-launch: spawned weston with pid: %d\n", getpid());
>> - if (wl->new_user)
>> - setup_session(wl);
>> + if (wl->new_user) {
>> + o = setup_session(wl, child_argv);
>> + } else {
>> + child_argv[0] = BINDIR "/weston";
>> + o = 1;
>> + }
>> + for (i = 0; i < argc; ++i)
>> + child_argv[o + i] = argv[i];
>> + child_argv[o + i] = NULL;
>>
>> if (geteuid() == 0)
>> drop_privileges(wl);
>> @@ -648,14 +666,6 @@ launch_compositor(struct weston_launch *wl, int argc, char *argv[])
>> sigaddset(&mask, SIGINT);
>> sigprocmask(SIG_UNBLOCK, &mask, NULL);
>>
>> - child_argv[0] = "/bin/sh";
>> - child_argv[1] = "-l";
>> - child_argv[2] = "-c";
>> - child_argv[3] = BINDIR "/weston \"$@\"";
>> - child_argv[4] = "weston";
>> - for (i = 0; i < argc; ++i)
>> - child_argv[5 + i] = argv[i];
>> - child_argv[5 + i] = NULL;
>>
>> execv(child_argv[0], child_argv);
>> error(1, errno, "exec failed");
>
--
Quentin “Sardem FF7” Glidic
More information about the wayland-devel
mailing list