[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