diff options
-rw-r--r-- | pcr/elogind/PKGBUILD | 69 | ||||
-rw-r--r-- | pcr/elogind/elogind-219.12-glibc.patch | 44 | ||||
-rw-r--r-- | pcr/elogind/elogind-219.12-gperf.patch | 109 | ||||
-rw-r--r-- | pcr/elogind/elogind-219.12-login1-perms.patch | 129 | ||||
-rw-r--r-- | pcr/elogind/elogind-219.12-session.patch | 45 | ||||
-rw-r--r-- | pcr/elogind/elogind.conf | 7 | ||||
-rw-r--r-- | pcr/elogind/elogind.init | 32 | ||||
-rw-r--r-- | pcr/elogind/elogind.install | 5 |
8 files changed, 411 insertions, 29 deletions
diff --git a/pcr/elogind/PKGBUILD b/pcr/elogind/PKGBUILD index 07a2fa6cb..dfc9c65ee 100644 --- a/pcr/elogind/PKGBUILD +++ b/pcr/elogind/PKGBUILD @@ -2,48 +2,63 @@ # Maintainer: Omar Vega Ramos <ovruni@gnu.org.pe> pkgname=elogind -pkgver=219.14 -pkgrel=1 +pkgver=219.12 +pkgrel=2 pkgdesc="The systemd project's logind, extracted to a standalone package" arch=('i686' 'x86_64' 'armv7h') url="https://github.com/wingo/elogind" license=('GPL') -groups=('openrc-desktop') depends=('dbus' 'polkit' 'libudev.so') -makedepends=('libcap' 'intltool' 'libtool' 'gperf' 'gtk-doc') -conflicts=('systemd' 'systemd-sysvcompat') +makedepends=('libcap' 'intltool' 'libtool' 'gperf' 'gtk-doc' 'libseccomp') +conflicts=('systemd-sysvcompat') options=('!libtool') install=elogind.install -_commit=6d224ff665195f47c942599b21e0d959bc07ca8f -source=("$pkgname-${pkgver}.tar.gz::${url}/archive/${_commit}.tar.gz" - #"$pkgname-${pkgver}.tar.gz::${url}/archive/v${pkgver}.tar.gz" - 'elogind-docs.patch' - 'elogind-lrt.patch') -sha256sums=('52be61c26bcac7a34b91b6de997b403822c0626dad258ecf146018977b0c034f' +source=("${pkgname}-${pkgver}.tar.gz::${url}/archive/v${pkgver}.tar.gz" + 'elogind-docs.patch' + 'elogind-lrt.patch' + "elogind-219.12-session.patch" + "elogind-219.12-login1-perms.patch" + "elogind-219.12-gperf.patch" + "elogind-219.12-glibc.patch" + "elogind.conf" + "elogind.init") +sha256sums=('80241494f5c794e8501ccf570ac805275ace368755780f38a18762fd06243f95' 'cafea7a13159dee700902e3837aab015d9521dfe122840faf2d909b5dc02229e' - 'a9227ed4e97117ab5751de38c19813560a12f51379ccd882a89e7ef9842659ac') + 'a9227ed4e97117ab5751de38c19813560a12f51379ccd882a89e7ef9842659ac' + 'c63ef9869fa4bc38075dc9f9ef113b6b8c05ae2af2616da68219e0a364dea574' + 'cef5dda99a51a42bc36d1a946d5a21a830bf0f44ed3f447542ec57c1424e0053' + '9f6437abeba2f17d378482e262504f269998d54c6adb16eb16c4eda738065074' + '5e7dfcf695c15a02d8151541c50e26c9e3140f5626d95bbec366aada5ce095d5' + '344db76bf8aadfba4363c63aacd93c945a647bd5e425d756cbfd9cb4453afc66' + '3e3ca3d384b9ced34360e697b2a6102b173731c8cf4f91e2901df68b33d73d44') prepare() { - cd $srcdir/$pkgname-${_commit} #$pkgver - patch -Np 1 -i $srcdir/elogind-docs.patch - patch -Np 1 -i $srcdir/elogind-lrt.patch - sed -e "s|/bin/false|/usr/lib/elogind/elogind|" \ - -i src/login/org.freedesktop.login1.service - autoreconf -vim + cd ${srcdir}/${pkgname}-${pkgver} + patch -Np 1 -i ${srcdir}/elogind-docs.patch + patch -Np 1 -i ${srcdir}/elogind-lrt.patch + patch -Np 1 -i ${srcdir}/elogind-219.12-session.patch + patch -Np 1 -i ${srcdir}/elogind-219.12-login1-perms.patch + patch -Np 1 -i ${srcdir}/elogind-219.12-gperf.patch + patch -Np 1 -i ${srcdir}/elogind-219.12-glibc.patch + + autoreconf -vim } build() { - cd $srcdir/${pkgname}-${_commit} #${pkgver} - intltoolize - ./configure \ - --sysconfdir=/etc \ - --prefix=/usr \ - --libexecdir=/usr/lib + cd ${srcdir}/${pkgname}-${pkgver} + intltoolize + ./configure \ + --sysconfdir=/etc \ + --prefix=/usr \ + --libexecdir=/usr/lib - make + make } package() { - cd $srcdir/${pkgname}-${_commit} #${pkgver} - make DESTDIR="${pkgdir}" install + cd ${srcdir}/${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + + install -Dm755 ${srcdir}/elogind.init ${pkgdir}/etc/init.d/elogind + install -Dm755 ${srcdir}/elogind.conf ${pkgdir}/etc/conf.d/elogind } diff --git a/pcr/elogind/elogind-219.12-glibc.patch b/pcr/elogind/elogind-219.12-glibc.patch new file mode 100644 index 000000000..05477c3e3 --- /dev/null +++ b/pcr/elogind/elogind-219.12-glibc.patch @@ -0,0 +1,44 @@ +commit 27d13af71c3af6b2f9b60556d2c046dbb6e36e23 +Author: Mike Frysinger <vapier@gentoo.org> +Date: Mon Mar 14 17:44:49 2016 -0400 + + include sys/sysmacros.h in more places + + Since glibc is moving away from implicitly including sys/sysmacros.h + all the time via sys/types.h, include the header directly in more + places. This seems to cover most makedev/major/minor usage. + +diff --git a/src/shared/macro.h b/src/shared/macro.h +index c34441d..b36a956 100644 +--- a/src/shared/macro.h ++++ b/src/shared/macro.h +@@ -23,6 +23,7 @@ + #include <inttypes.h> + #include <stdbool.h> + #include <sys/param.h> ++#include <sys/sysmacros.h> + #include <sys/types.h> + + #define _printf_(a,b) __attribute__ ((format (printf, a, b))) +diff --git a/src/shared/util.h b/src/shared/util.h +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -36,6 +36,7 @@ + #include <sys/types.h> + #include <sys/socket.h> + #include <sys/stat.h> ++#include <sys/sysmacros.h> + #include <dirent.h> + #include <stddef.h> + #include <unistd.h> +diff --git a/src/systemd/sd-device.h b/src/systemd/sd-device.h +--- a/src/systemd/sd-device.h ++++ b/src/systemd/sd-device.h +@@ -22,6 +22,7 @@ + ***/ + ++#include <sys/sysmacros.h> + #include <sys/types.h> + #include <stdint.h> + + #include "_sd-common.h" diff --git a/pcr/elogind/elogind-219.12-gperf.patch b/pcr/elogind/elogind-219.12-gperf.patch new file mode 100644 index 000000000..8342b8b3e --- /dev/null +++ b/pcr/elogind/elogind-219.12-gperf.patch @@ -0,0 +1,109 @@ +commit c9f7b4d356a453a01aa77a6bb74ca7ef49732c08 +Author: Mike Gilbert <floppymaster@gmail.com> +Date: Tue Jan 10 02:39:05 2017 -0500 + + build-sys: add check for gperf lookup function signature (#5055) + + gperf-3.1 generates lookup functions that take a size_t length + parameter instead of unsigned int. Test for this at configure time. + + Fixes: https://github.com/systemd/systemd/issues/5039 + +diff --git a/configure.ac b/configure.ac +index 11bd46c..d58fff5 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -255,6 +255,28 @@ AC_CHECK_SIZEOF(rlim_t,,[ + #include <sys/resource.h> + ]) + ++GPERF_TEST="$(echo foo,bar | ${GPERF} -L ANSI-C)" ++ ++AC_COMPILE_IFELSE( ++ [AC_LANG_PROGRAM([ ++ #include <string.h> ++ const char * in_word_set(const char *, size_t); ++ $GPERF_TEST] ++ )], ++ [GPERF_LEN_TYPE=size_t], ++ [AC_COMPILE_IFELSE( ++ [AC_LANG_PROGRAM([ ++ #include <string.h> ++ const char * in_word_set(const char *, unsigned); ++ $GPERF_TEST] ++ )], ++ [GPERF_LEN_TYPE=unsigned], ++ [AC_MSG_ERROR([** unable to determine gperf len type])] ++ )] ++) ++ ++AC_DEFINE_UNQUOTED([GPERF_LEN_TYPE], [$GPERF_LEN_TYPE], [gperf len type]) ++ + # ------------------------------------------------------------------------------ + # we use python to build the man page index + have_python=no +diff --git a/src/shared/af-list.c b/src/shared/af-list.c +index 3fac9c5..4b291d1 100644 +--- a/src/shared/af-list.c ++++ b/src/shared/af-list.c +@@ -23,7 +23,7 @@ + #include "af-list.h" + #include "macro.h" + +-static const struct af_name* lookup_af(register const char *str, register unsigned int len); ++static const struct af_name* lookup_af(register const char *str, register GPERF_LEN_TYPE len); + + #include "af-from-name.h" + #include "af-to-name.h" +diff --git a/src/shared/arphrd-list.c b/src/shared/arphrd-list.c +index 6792d1e..2d598dc 100644 +--- a/src/shared/arphrd-list.c ++++ b/src/shared/arphrd-list.c +@@ -23,7 +23,7 @@ + #include "arphrd-list.h" + #include "macro.h" + +-static const struct arphrd_name* lookup_arphrd(register const char *str, register unsigned int len); ++static const struct arphrd_name* lookup_arphrd(register const char *str, register GPERF_LEN_TYPE len); + + #include "arphrd-from-name.h" + #include "arphrd-to-name.h" +diff --git a/src/shared/cap-list.c b/src/shared/cap-list.c +index 3e773a0..d68cc78 100644 +--- a/src/shared/cap-list.c ++++ b/src/shared/cap-list.c +@@ -26,7 +26,7 @@ + #include "parse-util.h" + #include "util.h" + +-static const struct capability_name* lookup_capability(register const char *str, register unsigned int len); ++static const struct capability_name* lookup_capability(register const char *str, register GPERF_LEN_TYPE len); + + #include "cap-from-name.h" + #include "cap-to-name.h" +diff --git a/src/shared/errno-list.c b/src/shared/errno-list.c +index 31b66ba..c6a01ee 100644 +--- a/src/shared/errno-list.c ++++ b/src/shared/errno-list.c +@@ -23,7 +23,7 @@ + #include "errno-list.h" + + static const struct errno_name* lookup_errno(register const char *str, +- register unsigned int len); ++ register GPERF_LEN_TYPE len); + + #include "errno-to-name.h" + #include "errno-from-name.h" +diff --git a/src/login/logind.h b/src/login/logind.h +index 086fa1e..7556ee2 100644 +--- a/src/login/logind.h ++++ b/src/login/logind.h +@@ -182,7 +182,7 @@ int manager_unit_is_active(Manager *manager, const char *unit); + int manager_job_is_active(Manager *manager, const char *path); + + /* gperf lookup function */ +-const struct ConfigPerfItem* logind_gperf_lookup(const char *key, unsigned length); ++const struct ConfigPerfItem* logind_gperf_lookup(const char *key, GPERF_LEN_TYPE length); + + int manager_set_lid_switch_ignore(Manager *m, usec_t until); + diff --git a/pcr/elogind/elogind-219.12-login1-perms.patch b/pcr/elogind/elogind-219.12-login1-perms.patch new file mode 100644 index 000000000..eecf38ee1 --- /dev/null +++ b/pcr/elogind/elogind-219.12-login1-perms.patch @@ -0,0 +1,129 @@ +From 1ca40c077cd9a08f96a559ba51e8dba230298c4d Mon Sep 17 00:00:00 2001 +From: Michael Palimaka <kensington@gentoo.org> +Date: Sun, 19 Jun 2016 01:56:56 +1000 +Subject: [PATCH] Update org.freedesktop.login1.conf + +This mirrors an upstream change opening up all of logind's bus calls to +unprivileged users via polkit. + +See systemd/systemd/issues/471. +Closes #3. +--- + src/login/org.freedesktop.login1.conf | 68 +++++++++++++++++++++++++++++++++++ + 1 file changed, 68 insertions(+) + +diff --git a/src/login/org.freedesktop.login1.conf b/src/login/org.freedesktop.login1.conf +index 1318328..2e67e3d 100644 +--- a/src/login/org.freedesktop.login1.conf ++++ b/src/login/org.freedesktop.login1.conf +@@ -90,6 +90,42 @@ + + <allow send_destination="org.freedesktop.login1" + send_interface="org.freedesktop.login1.Manager" ++ send_member="LockSession"/> ++ ++ <allow send_destination="org.freedesktop.login1" ++ send_interface="org.freedesktop.login1.Manager" ++ send_member="UnlockSession"/> ++ ++ <allow send_destination="org.freedesktop.login1" ++ send_interface="org.freedesktop.login1.Manager" ++ send_member="LockSessions"/> ++ ++ <allow send_destination="org.freedesktop.login1" ++ send_interface="org.freedesktop.login1.Manager" ++ send_member="UnlockSessions"/> ++ ++ <allow send_destination="org.freedesktop.login1" ++ send_interface="org.freedesktop.login1.Manager" ++ send_member="KillSession"/> ++ ++ <allow send_destination="org.freedesktop.login1" ++ send_interface="org.freedesktop.login1.Manager" ++ send_member="KillUser"/> ++ ++ <allow send_destination="org.freedesktop.login1" ++ send_interface="org.freedesktop.login1.Manager" ++ send_member="TerminateSession"/> ++ ++ <allow send_destination="org.freedesktop.login1" ++ send_interface="org.freedesktop.login1.Manager" ++ send_member="TerminateUser"/> ++ ++ <allow send_destination="org.freedesktop.login1" ++ send_interface="org.freedesktop.login1.Manager" ++ send_member="TerminateSeat"/> ++ ++ <allow send_destination="org.freedesktop.login1" ++ send_interface="org.freedesktop.login1.Manager" + send_member="PowerOff"/> + + <allow send_destination="org.freedesktop.login1" +@@ -130,6 +166,10 @@ + + <allow send_destination="org.freedesktop.login1" + send_interface="org.freedesktop.login1.Manager" ++ send_member="SetWallMessage"/> ++ ++ <allow send_destination="org.freedesktop.login1" ++ send_interface="org.freedesktop.login1.Manager" + send_member="AttachDevice"/> + + <allow send_destination="org.freedesktop.login1" +@@ -138,6 +178,10 @@ + + <allow send_destination="org.freedesktop.login1" + send_interface="org.freedesktop.login1.Seat" ++ send_member="Terminate"/> ++ ++ <allow send_destination="org.freedesktop.login1" ++ send_interface="org.freedesktop.login1.Seat" + send_member="ActivateSession"/> + + <allow send_destination="org.freedesktop.login1" +@@ -154,14 +198,30 @@ + + <allow send_destination="org.freedesktop.login1" + send_interface="org.freedesktop.login1.Session" ++ send_member="Terminate"/> ++ ++ <allow send_destination="org.freedesktop.login1" ++ send_interface="org.freedesktop.login1.Session" + send_member="Activate"/> + + <allow send_destination="org.freedesktop.login1" + send_interface="org.freedesktop.login1.Session" ++ send_member="Lock"/> ++ ++ <allow send_destination="org.freedesktop.login1" ++ send_interface="org.freedesktop.login1.Session" ++ send_member="Unlock"/> ++ ++ <allow send_destination="org.freedesktop.login1" ++ send_interface="org.freedesktop.login1.Session" + send_member="SetIdleHint"/> + + <allow send_destination="org.freedesktop.login1" + send_interface="org.freedesktop.login1.Session" ++ send_member="Kill"/> ++ ++ <allow send_destination="org.freedesktop.login1" ++ send_interface="org.freedesktop.login1.Session" + send_member="TakeControl"/> + + <allow send_destination="org.freedesktop.login1" +@@ -180,6 +240,14 @@ + send_interface="org.freedesktop.login1.Session" + send_member="PauseDeviceComplete"/> + ++ <allow send_destination="org.freedesktop.login1" ++ send_interface="org.freedesktop.login1.User" ++ send_member="Terminate"/> ++ ++ <allow send_destination="org.freedesktop.login1" ++ send_interface="org.freedesktop.login1.User" ++ send_member="Kill"/> ++ + <allow receive_sender="org.freedesktop.login1"/> + </policy> + diff --git a/pcr/elogind/elogind-219.12-session.patch b/pcr/elogind/elogind-219.12-session.patch new file mode 100644 index 000000000..82cbebdea --- /dev/null +++ b/pcr/elogind/elogind-219.12-session.patch @@ -0,0 +1,45 @@ +From b5c5dd2ad43a3bf4fa0fb21139f8d16959b5d14e Mon Sep 17 00:00:00 2001 +From: Andy Wingo <wingo@pobox.com> +Date: Sun, 6 Mar 2016 16:56:33 +0100 +Subject: [PATCH] Fixes to user and session saving + +* src/login/logind-dbus.c (method_create_session): No need to save + session here, as session_send_create_reply will do it. +* src/login/logind-session-dbus.c (session_send_create_reply): On the + other hand we do need to save the user here, so the file marks them as + being active. +--- + src/login/logind-dbus.c | 2 -- + src/login/logind-session-dbus.c | 5 +++-- + 2 files changed, 3 insertions(+), 4 deletions(-) + +diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c +index 5e6952d..6f7e569 100644 +--- a/src/login/logind-dbus.c ++++ b/src/login/logind-dbus.c +@@ -801,8 +801,6 @@ static int method_create_session(sd_bus *bus, sd_bus_message *message, void *use + if (r < 0) + goto fail; + +- session_save(session); +- + return 1; + + fail: +diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c +index f71798b..337bbbb 100644 +--- a/src/login/logind-session-dbus.c ++++ b/src/login/logind-session-dbus.c +@@ -721,9 +721,10 @@ int session_send_create_reply(Session *s, sd_bus_error *error) { + if (fifo_fd < 0) + return fifo_fd; + +- /* Update the session state file before we notify the client +- * about the result. */ ++ /* Update the session and user state files before we notify ++ * the client about the result. */ + session_save(s); ++ user_save(s->user); + + p = session_bus_path(s); + if (!p) diff --git a/pcr/elogind/elogind.conf b/pcr/elogind/elogind.conf new file mode 100644 index 000000000..167260a42 --- /dev/null +++ b/pcr/elogind/elogind.conf @@ -0,0 +1,7 @@ +# /etc/conf.d/elogind: config file for /etc/init.d/elogind + +# this is the elogind executable +ELOGIND_EXEC="/usr/lib/elogind/elogind" + +# this is where elogind will store its pid file +ELOGIND_PIDFILE="/run/elogind.pid" diff --git a/pcr/elogind/elogind.init b/pcr/elogind/elogind.init new file mode 100644 index 000000000..65a28e9c7 --- /dev/null +++ b/pcr/elogind/elogind.init @@ -0,0 +1,32 @@ +#!/usr/bin/openrc-run +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +depend() { + need dbus + + # Make sure elogind is up before xdm starts any dm + before xdm +} + +start() { + ebegin "Starting elogind" + + # elogind needs a /run/systemd directory + if [[ ! -e /run/systemd ]]; then + mkdir -p /run/systemd + chmod 644 /run/systemd + fi + + start-stop-daemon --start --quiet --background \ + --make-pidfile --pidfile "${ELOGIND_PIDFILE}" \ + --exec "${ELOGIND_EXEC}" + eend $? +} + +stop() { + ebegin "Stopping elogind" + start-stop-daemon --stop --quiet --pidfile "${ELOGIND_PIDFILE}" + eend $? +} diff --git a/pcr/elogind/elogind.install b/pcr/elogind/elogind.install index d5a5ec515..28cd5b59c 100644 --- a/pcr/elogind/elogind.install +++ b/pcr/elogind/elogind.install @@ -1,6 +1,7 @@ post_install() { - echo "Add to /etc/pam.d/sddm-greeter" - echo "session optional pam_elogind.so" + echo " ==> /etc/pam.d/system-login" + echo " ==> Replace pam_systemd.so in your pam config with:" + echo ' session optional pam_elogind.so' } post_upgrade() { |