Blob Blame History Raw
From c97f2acfbdde311586703001f99e36ae3dc22863 Mon Sep 17 00:00:00 2001
From: Michal Schmidt <mschmidt@redhat.com>
Date: Tue, 22 May 2012 01:20:13 +0200
Subject: [PATCH] F16: Revert "logind: close FIFO before ending sessions
 cleanly"

This reverts commit 75c8e3cffd7da8eede614cf61384957af2c82a29.

In F17 it caused a regression:
https://bugzilla.redhat.com/show_bug.cgi?id=823485
---
 src/logind-dbus.c |   30 ----------------------
 src/pam-module.c  |   71 +++--------------------------------------------------
 2 files changed, 3 insertions(+), 98 deletions(-)

diff --git a/src/logind-dbus.c b/src/logind-dbus.c
index 83e7cb0..03069bf 100644
--- a/src/logind-dbus.c
+++ b/src/logind-dbus.c
@@ -75,9 +75,6 @@
         "   <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"                                                 \
@@ -985,33 +982,6 @@ 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/pam-module.c b/src/pam-module.c
index 0ddd1bd..d13e906 100644
--- a/src/pam-module.c
+++ b/src/pam-module.c
@@ -431,6 +431,7 @@ _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;
@@ -629,77 +630,11 @@ _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;
-
-        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);
 
-        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;
+        return PAM_SUCCESS;
 }