[systemd-commits] src/login src/shared src/udev

Martin Pitt martin at kemper.freedesktop.org
Fri Apr 5 09:21:45 PDT 2013


 src/login/pam-module.c          |    6 ++----
 src/shared/util.h               |    5 +++++
 src/udev/udev-builtin-uaccess.c |    3 +--
 3 files changed, 8 insertions(+), 6 deletions(-)

New commits:
commit 79d860fe78ff9e53fe3150fb55a8a8b03c4f6470
Author: Martin Pitt <martinpitt at gnome.org>
Date:   Tue Mar 26 11:36:31 2013 +0100

    PAM, uaccess: check for logind, not for systemd
    
    It is possible to build systemd without logind or run logind without systemd
    init. Commit 66e41181 fixed sd_booted() to only succeed for systemd init; with
    that, testing for systemd init is wrong in the parts that talk to logind.
    
    In particular, this affects the PAM module and the "uaccess" udev builtin.
    Change sd_booted() to a new logind_running() which tests for
    /run/systemd/seats/.
    
    For details, see:
    <https://mail.gnome.org/archives/desktop-devel-list/2013-March/msg00092.html>
    
    https://bugs.freedesktop.org/show_bug.cgi?id=62754

diff --git a/src/login/pam-module.c b/src/login/pam-module.c
index 702095e..0d4f799 100644
--- a/src/login/pam-module.c
+++ b/src/login/pam-module.c
@@ -32,8 +32,6 @@
 #include <security/pam_ext.h>
 #include <security/pam_misc.h>
 
-#include <systemd/sd-daemon.h>
-
 #include "util.h"
 #include "audit.h"
 #include "macro.h"
@@ -348,8 +346,8 @@ _public_ PAM_EXTERN int pam_sm_open_session(
 
         /* pam_syslog(handle, LOG_INFO, "pam-systemd initializing"); */
 
-        /* Make this a NOP on non-systemd systems */
-        if (sd_booted() <= 0)
+        /* Make this a NOP on non-logind systems */
+        if (!logind_running())
                 return PAM_SUCCESS;
 
         if (parse_argv(handle,
diff --git a/src/shared/util.h b/src/shared/util.h
index 7c3da08..4c4aed5 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -36,6 +36,7 @@
 #include <dirent.h>
 #include <sys/resource.h>
 #include <stddef.h>
+#include <unistd.h>
 #include <systemd/sd-journal.h>
 
 #include "macro.h"
@@ -639,3 +640,7 @@ static inline void _reset_umask_(struct umask_struct *s) {
 static inline unsigned u64log2(uint64_t n) {
         return (n > 1) ? __builtin_clzll(n) ^ 63U : 0;
 }
+
+static inline bool logind_running(void) {
+        return access("/run/systemd/seats/", F_OK) >= 0;
+}
diff --git a/src/udev/udev-builtin-uaccess.c b/src/udev/udev-builtin-uaccess.c
index 662bac9..354ee08 100644
--- a/src/udev/udev-builtin-uaccess.c
+++ b/src/udev/udev-builtin-uaccess.c
@@ -29,7 +29,6 @@
 #include <dirent.h>
 #include <getopt.h>
 
-#include <systemd/sd-daemon.h>
 #include <systemd/sd-login.h>
 #include "logind-acl.h"
 #include "udev.h"
@@ -49,7 +48,7 @@ static int builtin_uaccess(struct udev_device *dev, int argc, char *argv[], bool
         umask(0022);
 
         /* don't muck around with ACLs when the system is not running systemd */
-        if (!sd_booted())
+        if (!logind_running())
                 return 0;
 
         path = udev_device_get_devnode(dev);



More information about the systemd-commits mailing list