weston: Provide a default version of weston-launch that doesn't require PAM

weston-launch requires PAM for starting weston as a non-root user.

Since starting weston as root is a valid use case by itself, we check
the distro for 'pam' and build weston-launch with or without
non-root-user support.

(From OE-Core rev: 6295197adc022445fff01ca5ee75780a4c007d99)

Signed-off-by: Tom Hochstein <tom.hochstein@nxp.com>
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Tom Hochstein 2016-05-18 13:40:41 -03:00 committed by Richard Purdie
parent 9a9f04ff9b
commit 959237ef88
2 changed files with 177 additions and 3 deletions

View File

@ -0,0 +1,171 @@
From 228349e796e9baa86f2ba8232c730c18ac41283d Mon Sep 17 00:00:00 2001
From: Tom Hochstein <tom.hochstein@nxp.com>
Date: Fri, 13 May 2016 09:31:55 -0500
Subject: [PATCH weston] weston-launch: Provide a default version that doesn't
require PAM
weston-launch requires PAM for starting weston as a non-root user.
Since starting weston as root is a valid use case by itself, if
PAM is not available, provide a default version of weston-launch
without non-root-user support.
Upstream-Status: Pending
Signed-off-by: Tom Hochstein <tom.hochstein@nxp.com>
---
Makefile.am | 3 ---
configure.ac | 12 +++++++-----
src/weston-launch.c | 20 ++++++++++++++++++++
3 files changed, 27 insertions(+), 8 deletions(-)
Index: weston-1.10.0/configure.ac
===================================================================
--- weston-1.10.0.orig/configure.ac 2016-05-13 11:02:05.711817559 -0500
+++ weston-1.10.0/configure.ac 2016-05-13 13:30:28.000000000 -0500
@@ -445,13 +445,17 @@
AS_IF([test "x$have_systemd_login_209" = "xyes"],
[AC_DEFINE([HAVE_SYSTEMD_LOGIN_209], [1], [Have systemd-login >= 209])])
+AC_ARG_WITH(pam,
+ AS_HELP_STRING([--with-pam], [Use PAM]),
+ [use_pam=$withval], [use_pam=yes])
AC_ARG_ENABLE(weston-launch, [ --enable-weston-launch],, enable_weston_launch=yes)
AM_CONDITIONAL(BUILD_WESTON_LAUNCH, test x$enable_weston_launch == xyes)
-if test x$enable_weston_launch == xyes; then
+if test x$enable_weston_launch = xyes -a x$use_pam = xyes; then
AC_CHECK_LIB([pam], [pam_open_session], [have_pam=yes], [have_pam=no])
if test x$have_pam == xno; then
- AC_ERROR([weston-launch requires pam])
+ AC_ERROR([PAM support is explicitly requested, but libpam couldn't be found])
fi
+ AC_DEFINE([HAVE_PAM], [1], [Define if PAM is available])
PAM_LIBS=-lpam
AC_SUBST(PAM_LIBS)
fi
@@ -667,6 +671,7 @@
Enable developer documentation ${enable_devdocs}
weston-launch utility ${enable_weston_launch}
+ PAM support ${use_pam}
systemd-login support ${have_systemd_login}
systemd notify support ${enable_systemd_notify}
Index: weston-1.10.0/src/weston-launch.c
===================================================================
--- weston-1.10.0.orig/src/weston-launch.c 2016-05-13 11:02:05.779817896 -0500
+++ weston-1.10.0/src/weston-launch.c 2016-05-13 11:02:05.851818253 -0500
@@ -51,7 +51,9 @@
#include <pwd.h>
#include <grp.h>
+#ifdef HAVE_PAM
#include <security/pam_appl.h>
+#endif
#ifdef HAVE_SYSTEMD_LOGIN
#include <systemd/sd-login.h>
@@ -93,8 +95,10 @@
#endif
struct weston_launch {
+#ifdef HAVE_PAM
struct pam_conv pc;
pam_handle_t *ph;
+#endif
int tty;
int ttynr;
int sock[2];
@@ -181,6 +185,7 @@
return false;
}
+#ifdef HAVE_PAM
static int
pam_conversation_fn(int msg_count,
const struct pam_message **messages,
@@ -221,6 +226,7 @@
return 0;
}
+#endif
static int
setup_launcher_socket(struct weston_launch *wl)
@@ -414,6 +420,7 @@
close(wl->signalfd);
close(wl->sock[0]);
+#ifdef HAVE_PAM
if (wl->new_user) {
err = pam_close_session(wl->ph, 0);
if (err)
@@ -421,6 +428,7 @@
err, pam_strerror(wl->ph, err));
pam_end(wl->ph, err);
}
+#endif
if (ioctl(wl->tty, KDSKBMUTE, 0) &&
ioctl(wl->tty, KDSKBMODE, wl->kb_mode))
@@ -600,6 +608,7 @@
setenv("HOME", wl->pw->pw_dir, 1);
setenv("SHELL", wl->pw->pw_shell, 1);
+#ifdef HAVE_PAM
env = pam_getenvlist(wl->ph);
if (env) {
for (i = 0; env[i]; ++i) {
@@ -608,6 +617,7 @@
}
free(env);
}
+#endif
}
static void
@@ -665,7 +675,9 @@
help(const char *name)
{
fprintf(stderr, "Usage: %s [args...] [-- [weston args..]]\n", name);
+#ifdef HAVE_PAM
fprintf(stderr, " -u, --user Start session as specified username\n");
+#endif
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");
@@ -678,7 +690,9 @@
int i, c;
char *tty = NULL;
struct option opts[] = {
+#ifdef HAVE_PAM
{ "user", required_argument, NULL, 'u' },
+#endif
{ "tty", required_argument, NULL, 't' },
{ "verbose", no_argument, NULL, 'v' },
{ "help", no_argument, NULL, 'h' },
@@ -690,9 +704,13 @@
while ((c = getopt_long(argc, argv, "u:t::vh", opts, &i)) != -1) {
switch (c) {
case 'u':
+#ifdef HAVE_PAM
wl.new_user = optarg;
if (getuid() != 0)
error(1, 0, "Permission denied. -u allowed for root only");
+#else
+ error(1, 0, "-u is unsupported in this weston-launch build");
+#endif
break;
case 't':
tty = optarg;
@@ -730,8 +748,10 @@
if (setup_tty(&wl, tty) < 0)
exit(EXIT_FAILURE);
+#ifdef HAVE_PAM
if (wl.new_user && setup_pam(&wl) < 0)
exit(EXIT_FAILURE);
+#endif
if (setup_launcher_socket(&wl) < 0)
exit(EXIT_FAILURE);

View File

@ -12,6 +12,7 @@ SRC_URI = "https://wayland.freedesktop.org/releases/${BPN}-${PV}.tar.xz \
file://0001-make-error-portable.patch \
file://0001-configure.ac-Fix-wayland-protocols-path.patch \
file://make-weston-launch-exit-for-unrecognized-option.patch \
file://0001-weston-launch-Provide-a-default-version-that-doesn-t.patch \
"
SRC_URI[md5sum] = "1cd17c54ecac6d9a3cd90bf12eaa3e20"
SRC_URI[sha256sum] = "e0b2004d00d8293ddf7903ca283c1746afa9ccb5919ab50fd04397ff472aa5c1"
@ -39,9 +40,9 @@ EXTRA_OECONF_append_qemux86-64 = "\
PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'kms fbdev wayland egl', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'x11 wayland', 'xwayland', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'launch', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)} \
clients"
clients launch"
#
# Compositor choices
#
@ -56,7 +57,7 @@ PACKAGECONFIG[headless] = "--enable-headless-compositor,--disable-headless-compo
# Weston on framebuffer
PACKAGECONFIG[fbdev] = "--enable-fbdev-compositor,--disable-fbdev-compositor,udev mtdev"
# weston-launch
PACKAGECONFIG[launch] = "--enable-weston-launch,--disable-weston-launch,libpam drm"
PACKAGECONFIG[launch] = "--enable-weston-launch,--disable-weston-launch,drm"
# VA-API desktop recorder
PACKAGECONFIG[vaapi] = "--enable-vaapi-recorder,--disable-vaapi-recorder,libva"
# Weston with EGL support
@ -77,6 +78,8 @@ PACKAGECONFIG[xwayland] = "--enable-xwayland,--disable-xwayland"
PACKAGECONFIG[colord] = "--enable-colord,--disable-colord,colord"
# Clients support
PACKAGECONFIG[clients] = "--enable-clients --enable-simple-clients --enable-demo-clients-install,--disable-clients --disable-simple-clients"
# Weston with PAM support
PACKAGECONFIG[pam] = "--with-pam,--without-pam,libpam"
do_install_append() {
# Weston doesn't need the .la files to load modules, so wipe them