mirror of
https://github.com/systemd/systemd.git
synced 2024-11-05 06:52:22 +03:00
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
This commit is contained in:
parent
9e542e0b3a
commit
79d860fe78
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user