[arch-commits] Commit in systemd/trunk (2 files)
Dave Reisner
dreisner at archlinux.org
Sun Apr 1 23:16:48 UTC 2012
Date: Sunday, April 1, 2012 @ 19:16:47
Author: dreisner
Revision: 155343
upgpkg: systemd 44-4
- backport patch to fix FS#28386
- move bash-completion to /usr/share/bash-completion
Added:
systemd/trunk/0001-logind-close-FIFO-before-ending-sessions-cleanly.patch
Modified:
systemd/trunk/PKGBUILD
-------------------------------------------------------------+
0001-logind-close-FIFO-before-ending-sessions-cleanly.patch | 156 ++++++++++
PKGBUILD | 20 -
2 files changed, 171 insertions(+), 5 deletions(-)
Added: 0001-logind-close-FIFO-before-ending-sessions-cleanly.patch
===================================================================
--- 0001-logind-close-FIFO-before-ending-sessions-cleanly.patch (rev 0)
+++ 0001-logind-close-FIFO-before-ending-sessions-cleanly.patch 2012-04-01 23:16:47 UTC (rev 155343)
@@ -0,0 +1,156 @@
+From 75c8e3cffd7da8eede614cf61384957af2c82a29 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 22 Mar 2012 02:06:40 +0100
+Subject: [PATCH] logind: close FIFO before ending sessions cleanly
+
+For clean session endings ask logind explicitly to get rid of the FIFO
+before closing it so that the FIFO logic doesn't result in su/sudo to be
+terminated immediately.
+---
+ src/login/logind-dbus.c | 30 ++++++++++++++++++++
+ src/login/pam-module.c | 71 +++++++++++++++++++++++++++++++++++++++++++++--
+ 2 files changed, 98 insertions(+), 3 deletions(-)
+
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index d8f4d89..ea6b89f 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -80,6 +80,9 @@
+ " <arg name=\"seat\" type=\"s\" direction=\"out\"/>\n" \
+ " <arg name=\"vtnr\" type=\"u\" direction=\"out\"/>\n" \
+ " </method>\n" \
++ " <method name=\"ReleaseSession\">\n" \
++ " <arg name=\"id\" type=\"s\" direction=\"in\"/>\n" \
++ " </method>\n" \
+ " <method name=\"ActivateSession\">\n" \
+ " <arg name=\"id\" type=\"s\" direction=\"in\"/>\n" \
+ " </method>\n" \
+@@ -1075,6 +1078,33 @@ static DBusHandlerResult manager_message_handler(
+ if (r < 0)
+ return bus_send_error_reply(connection, message, &error, r);
+
++ } else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "ReleaseSession")) {
++ const char *name;
++ Session *session;
++
++ if (!dbus_message_get_args(
++ message,
++ &error,
++ DBUS_TYPE_STRING, &name,
++ DBUS_TYPE_INVALID))
++ return bus_send_error_reply(connection, message, &error, -EINVAL);
++
++ session = hashmap_get(m->sessions, name);
++ if (!session)
++ return bus_send_error_reply(connection, message, &error, -ENOENT);
++
++ /* We use the FIFO to detect stray sessions where the
++ process invoking PAM dies abnormally. We need to make
++ sure that that process is not killed if at the clean
++ end of the session it closes the FIFO. Hence, with
++ this call explicitly turn off the FIFO logic, so that
++ the PAM code can finish clean up on its own */
++ session_remove_fifo(session);
++
++ reply = dbus_message_new_method_return(message);
++ if (!reply)
++ goto oom;
++
+ } else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "ActivateSession")) {
+ const char *name;
+ Session *session;
+diff --git a/src/login/pam-module.c b/src/login/pam-module.c
+index 8544413..4106d2b 100644
+--- a/src/login/pam-module.c
++++ b/src/login/pam-module.c
+@@ -414,7 +414,6 @@ _public_ PAM_EXTERN int pam_sm_open_session(
+ "/org/freedesktop/login1",
+ "org.freedesktop.login1.Manager",
+ "CreateSession");
+-
+ if (!m) {
+ pam_syslog(handle, LOG_ERR, "Could not allocate create session message.");
+ r = PAM_BUF_ERR;
+@@ -620,11 +619,77 @@ _public_ PAM_EXTERN int pam_sm_close_session(
+ int argc, const char **argv) {
+
+ const void *p = NULL;
++ const char *id;
++ DBusConnection *bus = NULL;
++ DBusMessage *m = NULL, *reply = NULL;
++ DBusError error;
++ int r;
+
+- pam_get_data(handle, "systemd.session-fd", &p);
++ assert(handle);
++
++ dbus_error_init(&error);
++
++ id = pam_getenv(handle, "XDG_SESSION_ID");
++ if (id) {
++
++ /* Before we go and close the FIFO we need to tell
++ * logind that this is a clean session shutdown, so
++ * that it doesn't just go and slaughter us
++ * immediately after closing the fd */
++
++ bus = dbus_bus_get_private(DBUS_BUS_SYSTEM, &error);
++ if (!bus) {
++ pam_syslog(handle, LOG_ERR, "Failed to connect to system bus: %s", bus_error_message(&error));
++ r = PAM_SESSION_ERR;
++ goto finish;
++ }
++
++ m = dbus_message_new_method_call(
++ "org.freedesktop.login1",
++ "/org/freedesktop/login1",
++ "org.freedesktop.login1.Manager",
++ "ReleaseSession");
++ if (!m) {
++ pam_syslog(handle, LOG_ERR, "Could not allocate release session message.");
++ r = PAM_BUF_ERR;
++ goto finish;
++ }
++
++ if (!dbus_message_append_args(m,
++ DBUS_TYPE_STRING, &id,
++ DBUS_TYPE_INVALID)) {
++ pam_syslog(handle, LOG_ERR, "Could not attach parameters to message.");
++ r = PAM_BUF_ERR;
++ goto finish;
++ }
+
++ reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
++ if (!reply) {
++ pam_syslog(handle, LOG_ERR, "Failed to release session: %s", bus_error_message(&error));
++ r = PAM_SESSION_ERR;
++ goto finish;
++ }
++ }
++
++ r = PAM_SUCCESS;
++
++finish:
++ pam_get_data(handle, "systemd.session-fd", &p);
+ if (p)
+ close_nointr(PTR_TO_INT(p) - 1);
+
+- return PAM_SUCCESS;
++ dbus_error_free(&error);
++
++ if (bus) {
++ dbus_connection_close(bus);
++ dbus_connection_unref(bus);
++ }
++
++ if (m)
++ dbus_message_unref(m);
++
++ if (reply)
++ dbus_message_unref(reply);
++
++ return r;
+ }
+--
+1.7.9.5
+
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2012-04-01 22:24:23 UTC (rev 155342)
+++ PKGBUILD 2012-04-01 23:16:47 UTC (rev 155343)
@@ -4,7 +4,7 @@
pkgbase=systemd
pkgname=('systemd' 'libsystemd')
pkgver=44
-pkgrel=3
+pkgrel=4
arch=('i686' 'x86_64')
url="http://www.freedesktop.org/wiki/Software/systemd"
license=('GPL2')
@@ -13,10 +13,12 @@
options=('!libtool')
source=("http://www.freedesktop.org/software/$pkgname/$pkgname-$pkgver.tar.xz"
"os-release"
- 0001-util-never-follow-symlinks-in-rm_rf_children.patch)
+ 0001-util-never-follow-symlinks-in-rm_rf_children.patch
+ 0001-logind-close-FIFO-before-ending-sessions-cleanly.patch)
md5sums=('11f44ff74c87850064e4351518bcff17'
'752636def0db3c03f121f8b4f44a63cd'
- 'b5863d6d4b47e2b5bda8eb57bde0d327')
+ 'b5863d6d4b47e2b5bda8eb57bde0d327'
+ 'd37833358ef6c23fad622ea4a0941d1f')
build() {
cd "$pkgname-$pkgver"
@@ -24,6 +26,9 @@
# https://bugzilla.redhat.com/show_bug.cgi?id=803358
patch -Np1 <"$srcdir/0001-util-never-follow-symlinks-in-rm_rf_children.patch"
+ # https://bugs.archlinux.org/task/28386
+ patch -Np1 <"$srcdir/0001-logind-close-FIFO-before-ending-sessions-cleanly.patch"
+
./configure --sysconfdir=/etc \
--libexecdir=/usr/lib \
--with-pamlibdir=/lib/security \
@@ -65,9 +70,8 @@
chmod 644 "$pkgdir/usr/lib/tmpfiles.d/console.conf"
# symlink to /bin/systemd for compat and sanity
- mkdir -p "$pkgdir/bin"
+ install -dm755 "$pkgdir/bin" "$pkgdir/lib/systemd"
ln -s ../usr/lib/systemd/systemd "$pkgdir/bin/systemd"
- mkdir -p "$pkgdir/lib/systemd"
ln -s ../../usr/lib/systemd/systemd "$pkgdir/lib/systemd/systemd"
# use python2 for systemd-analyze
@@ -89,6 +93,12 @@
mv "$manpage" "$section/systemd.$page"
done
+ # move bash-completion and symlink for loginctl
+ install -Dm644 "$pkgdir/etc/bash_completion.d/systemd-bash-completion.sh" \
+ "$pkgdir/usr/share/bash-completion/completions/systemctl"
+ ln -s systemctl "$pkgdir/usr/share/bash-completion/completions/loginctl"
+ rm -rf "$pkgdir/etc/bash_completion.d"
+
### split off libsystemd (libs, includes, pkgconfig, man3)
install -dm755 "$srcdir"/libsystemd/usr/{include,lib/pkgconfig}
More information about the arch-commits
mailing list