commit:     ee9334a6a23b7555354883f66653a73c6437727d
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Wed Nov 26 05:47:11 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Wed Nov 26 05:47:11 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=ee9334a6

sys-auth/elogind: revert patch breaking OpenRC user services

Do as Alpine did.

Bug: https://bugs.gentoo.org/966481
Signed-off-by: Sam James <sam <AT> gentoo.org>

 sys-auth/elogind/elogind-255.22-r1.ebuild          | 199 +++++++++++++++++++++
 .../files/elogind-255.22-revert-openrc-user.patch  |  71 ++++++++
 2 files changed, 270 insertions(+)

diff --git a/sys-auth/elogind/elogind-255.22-r1.ebuild 
b/sys-auth/elogind/elogind-255.22-r1.ebuild
new file mode 100644
index 000000000000..abec7f283991
--- /dev/null
+++ b/sys-auth/elogind/elogind-255.22-r1.ebuild
@@ -0,0 +1,199 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{11..14} )
+
+if [[ ${PV} = *9999* ]]; then
+       EGIT_BRANCH="v255-stable"
+       EGIT_REPO_URI="https://github.com/elogind/elogind.git";
+       inherit git-r3
+else
+       SRC_URI="https://github.com/${PN}/${PN}/archive/refs/tags/V${PV}.tar.gz 
-> ${P}.tar.gz"
+       KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 
~riscv ~s390 ~sparc ~x86"
+fi
+
+inherit eapi9-ver linux-info meson pam python-any-r1 udev xdg-utils
+
+DESCRIPTION="The systemd project's logind, extracted to a standalone package"
+HOMEPAGE="https://github.com/elogind/elogind";
+
+LICENSE="CC0-1.0 LGPL-2.1+ public-domain"
+SLOT="0"
+IUSE="+acl audit cgroup-hybrid debug doc +pam +policykit selinux test"
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+       app-text/docbook-xml-dtd:4.2
+       app-text/docbook-xml-dtd:4.5
+       app-text/docbook-xsl-stylesheets
+       dev-util/gperf
+       virtual/pkgconfig
+       $(python_gen_any_dep 'dev-python/jinja2[${PYTHON_USEDEP}]')
+       $(python_gen_any_dep 'dev-python/lxml[${PYTHON_USEDEP}]')
+"
+DEPEND="
+       audit? ( sys-process/audit )
+       sys-apps/util-linux
+       sys-libs/libcap
+       virtual/libudev:=
+       acl? ( sys-apps/acl )
+       pam? ( sys-libs/pam )
+       selinux? ( sys-libs/libselinux )
+"
+RDEPEND="${DEPEND}
+       !sys-apps/systemd
+       >=sys-apps/systemd-utils-255.7-r4[udev]
+"
+PDEPEND="
+       sys-apps/dbus
+       policykit? ( sys-auth/polkit )
+"
+
+DOCS=( README.md )
+
+PATCHES=(
+       # all downstream patches:
+       "${FILESDIR}/${PN}-252.9-nodocs.patch"
+       # See also:
+       # https://github.com/elogind/elogind/issues/285
+       "${FILESDIR}/${PN}-255.17-revert-s2idle.patch" # bug 939042
+       "${FILESDIR}/${PN}-255.22-revert-openrc-user.patch" # bug 966481
+)
+
+python_check_deps() {
+       python_has_version "dev-python/jinja2[${PYTHON_USEDEP}]" &&
+       python_has_version "dev-python/lxml[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+       local CONFIG_CHECK="~CGROUPS ~EPOLL ~INOTIFY_USER ~SIGNALFD ~TIMERFD"
+
+       use kernel_linux && linux-info_pkg_setup
+}
+
+src_prepare() {
+       default
+       xdg_environment_reset
+
+       # don't cleanup /dev/shm/ on logout on logout
+       # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=949698
+       sed -e "s/#RemoveIPC=yes/RemoveIPC=no/" \
+               -i src/login/logind.conf.in || die
+}
+
+src_configure() {
+       if use cgroup-hybrid; then
+               cgroupmode="hybrid"
+       else
+               cgroupmode="unified"
+       fi
+
+       python_setup
+
+       EMESON_BUILDTYPE="$(usex debug debug release)"
+
+       local emesonargs=(
+               -Ddocdir="${EPREFIX}/usr/share/doc/${PF}"
+               -Dhtmldir="${EPREFIX}/usr/share/doc/${PF}/html"
+               -Dudevrulesdir="${EPREFIX}$(get_udevdir)"/rules.d
+               --libexecdir="lib/elogind"
+               --localstatedir="${EPREFIX}"/var
+               
-Dbashcompletiondir="${EPREFIX}/usr/share/bash-completion/completions"
+               -Dman=auto
+               -Dsmack=true
+               -Dcgroup-controller=openrc
+               -Ddefault-hierarchy=${cgroupmode}
+               -Ddefault-kill-user-processes=false
+               -Dacl=$(usex acl enabled disabled)
+               -Daudit=$(usex audit enabled disabled)
+               -Dhtml=$(usex doc auto disabled)
+               -Dpam=$(usex pam enabled disabled)
+               -Dpamlibdir="$(getpam_mod_dir)"
+               -Dselinux=$(usex selinux enabled disabled)
+               -Dtests=$(usex test true false)
+               -Dutmp=$(usex elibc_musl false true)
+               -Dmode=release
+
+               # Ensure consistency between merged-usr and split-usr (bug 
945965)
+               -Dhalt-path="${EPREFIX}/sbin/halt"
+               -Dkexec-path="${EPREFIX}/usr/sbin/kexec"
+               -Dnologin-path="${EPREFIX}/sbin/nologin"
+               -Dpoweroff-path="${EPREFIX}/sbin/poweroff"
+               -Dreboot-path="${EPREFIX}/sbin/reboot"
+       )
+
+       meson_src_configure
+}
+
+src_install() {
+       meson_src_install
+       keepdir /var/lib/elogind
+
+       newinitd "${FILESDIR}"/${PN}.init-r1 ${PN}
+
+       newconfd "${FILESDIR}"/${PN}.conf ${PN}
+}
+
+pkg_postinst() {
+       udev_reload
+       if ! use pam; then
+               ewarn "${PN} will not be managing user logins/seats without 
USE=\"pam\"!"
+               ewarn "In other words, it will be useless for most 
applications."
+               ewarn
+       fi
+       if ! use policykit; then
+               ewarn "loginctl will not be able to perform privileged 
operations without"
+               ewarn "USE=\"policykit\"! That means e.g. no suspend or 
hibernate."
+               ewarn
+       fi
+       if [[ "$(rc-config list boot | grep elogind)" != "" ]]; then
+               elog "elogind is currently started from boot runlevel."
+       elif [[ "$(rc-config list default | grep elogind)" != "" ]]; then
+               ewarn "elogind is currently started from default runlevel."
+               ewarn "Please remove elogind from the default runlevel and"
+               ewarn "add it to the boot runlevel by:"
+               ewarn "# rc-update del elogind default"
+               ewarn "# rc-update add elogind boot"
+       else
+               elog "elogind is currently not started from any runlevel."
+               elog "You may add it to the boot runlevel by:"
+               elog "# rc-update add elogind boot"
+               elog
+               elog "Alternatively, you can leave elogind out of any"
+               elog "runlevel. It will then be started automatically"
+               if use pam; then
+                       elog "when the first service calls it via dbus, or"
+                       elog "the first user logs into the system."
+               else
+                       elog "when the first service calls it via dbus."
+               fi
+       fi
+
+       if ver_replacing -lt 252.9; then
+               elog "Starting with release 252.9 the sleep configuration is 
now done"
+               elog "in the /etc/elogind/sleep.conf. Should you use 
non-default sleep"
+               elog "configuration remember to migrate those to new 
configuration file."
+       fi
+
+       local file files
+       # find custom hooks excluding known (nvidia-drivers, sys-power/tlp)
+       if [[ -d "${EROOT}"/$(get_libdir)/elogind/system-sleep ]]; then
+               readarray -t files < <(find 
"${EROOT}"/$(get_libdir)/elogind/system-sleep/ \
+                       -type f \( -not -iname ".keep_dir" -a \
+                               -not -iname "nvidia" -a \
+                               -not -iname "49-tlp-sleep" \) || die)
+       fi
+       if [[ ${#files[@]} -gt 0 ]]; then
+               ewarn "*** Custom hooks in obsolete path detected ***"
+               for file in "${files[@]}"; do
+                       ewarn "    ${file}"
+               done
+               ewarn "Move these custom hooks to 
${EROOT}/etc/elogind/system-sleep/ instead."
+       fi
+}
+
+pkg_postrm() {
+       udev_reload
+}

diff --git a/sys-auth/elogind/files/elogind-255.22-revert-openrc-user.patch 
b/sys-auth/elogind/files/elogind-255.22-revert-openrc-user.patch
new file mode 100644
index 000000000000..05111c90a700
--- /dev/null
+++ b/sys-auth/elogind/files/elogind-255.22-revert-openrc-user.patch
@@ -0,0 +1,71 @@
+https://bugs.gentoo.org/966481
+https://gitlab.alpinelinux.org/alpine/aports/-/issues/17736
+
+From 7ca52bb11c92e80a2d7c16efbf77194115a1b678 Mon Sep 17 00:00:00 2001
+From: Lauri Tirkkonen <[email protected]>
+Date: Mon, 24 Nov 2025 20:38:44 +0900
+Subject: [PATCH 10/10] Revert "pam_elogind: Add special treatment of
+ openrc-user"
+
+https://gitlab.alpinelinux.org/alpine/aports/-/issues/17745
+
+This reverts commit ff4c383caa3963bee0df0b92c7f851ef1c161e66.
+
+Signed-off-by: Achill Gilgenast <[email protected]>
+---
+ src/login/pam_elogind.c | 22 ++++++++--------------
+ 1 file changed, 8 insertions(+), 14 deletions(-)
+
+diff --git a/src/login/pam_elogind.c b/src/login/pam_elogind.c
+index 5ceab0a80955..add1c340417f 100644
+--- a/src/login/pam_elogind.c
++++ b/src/login/pam_elogind.c
+@@ -779,6 +779,7 @@ static uint64_t pick_default_capability_ambient_set(
+                 const char *service,
+                 const char *seat) {
+ 
++#if 0 /// elogind has no user instances like systemd-user
+         /* If not configured otherwise, let's enable CAP_WAKE_ALARM for 
regular users when logging in on a
+          * seat (i.e. when they are present physically on the device), or 
when invoked for the systemd --user
+          * instances. This allows desktops to install CAP_WAKE_ALARM to 
implement alarm clock apps without
+@@ -786,11 +787,15 @@ static uint64_t pick_default_capability_ambient_set(
+ 
+         return ur &&
+                 user_record_disposition(ur) == USER_REGULAR &&
+-#if 0 /// elogind also recognizes openrc-user
+                 (streq_ptr(service, "systemd-user") || !isempty(seat)) ? 
(UINT64_C(1) << CAP_WAKE_ALARM) : UINT64_MAX;
+ #else // 0
+-                (streq_ptr(service, "openrc-user") || streq_ptr(service, 
"systemd-user") || !isempty(seat))
+-                        ? (UINT64_C(1) << CAP_WAKE_ALARM) : UINT64_MAX;
++        /* If not configured otherwise, let's enable CAP_WAKE_ALARM for 
regular users when logging in on a
++         * seat (i.e. when they are present physically on the device).
++         * This allows desktops to install CAP_WAKE_ALARM to implement alarm 
clock apps without
++         * much fuss. */
++
++        return ur && user_record_disposition(ur) == USER_REGULAR && 
(!isempty(seat))
++                ? (UINT64_C(1) << CAP_WAKE_ALARM) : UINT64_MAX;
+ #endif // 0
+ }
+ 
+@@ -1003,18 +1008,7 @@ _public_ PAM_EXTERN int pam_sm_open_session(
+ 
+         tty = strempty(tty);
+ 
+-#if 0 /// Detect when elogind is called from an openrc-user PAM stack.
+         if (strchr(tty, ':')) {
+-#else // 0
+-        if (streq_ptr(service, "openrc-user")) {
+-                /* If we detect that we are running in the "openrc-user" PAM 
stack, then let's patch the class to
+-                 * 'manager' if not set, simply for robustness reasons. */
+-                type = "unspecified";
+-                class = IN_SET(user_record_disposition(ur), USER_INTRINSIC, 
USER_SYSTEM, USER_DYNAMIC) ?
+-                        "manager-early" : "manager";
+-                tty = NULL;
+-        } else if (strchr(tty, ':')) {
+-#endif // 0
+                 /* A tty with a colon is usually an X11 display, placed there 
to show up in utmp. We rearrange things
+                  * and don't pretend that an X display was a tty. */
+                 if (isempty(display))
+-- 
+2.52.0
+

Reply via email to