[PATCH weston 1/2] weston-launch: Only run a login shell for new sessions
Quentin Glidic
sardemff7+wayland at sardemff7.net
Fri Jun 10 13:58:29 UTC 2016
On 09/06/2016 12:05, Pekka Paalanen wrote:
> On Sun, 29 May 2016 13:59:14 +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>
>> ---
>> src/weston-launch.c | 34 ++++++++++++++++++++++------------
>> 1 file changed, 22 insertions(+), 12 deletions(-)
>>
>> diff --git a/src/weston-launch.c b/src/weston-launch.c
>> index b8dfb17..d731ed8 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[MAX_ARGV_SIZE])
>
> Hi,
>
> that is an array to char-pointer as a function parameter. I never pass
> arrays as parameters like that, so can you explain, does it correspond
> to char** or is the function operating on a copy of the array which
> would be wrong?
Honestly, I had to write a test program to check that, and it’s not
copied. Just changed it to char** to avoid the confusion.
>
> Because I even have to ask the question for this setuid-root program is
> an indication that it would probably be better formulated so that I
> don't even have to think about it.
>
>> {
>> 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)
>
> Braces needed now because the else has them.
Fixed.
>> - setup_session(wl);
>> + 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");
>
> The change looks good to me in principle, but we need two R-bs and
> would like a Tested-by for both paths: with and without new_user.
> My R-b is pending on the two issues mentioned above.
>
> You could list the ways you tested it with in the commit message.
Nothing fancy here, just checked an obvious variable ($PATH) with and
without -u after the patch.
>
> Thanks,
> pq
>
I resend a new series.
Cheers,
--
Quentin “Sardem FF7” Glidic
More information about the wayland-devel
mailing list