summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2011-06-30 02:18:01 +0200
committerLennart Poettering <lennart@poettering.net>2011-06-30 02:18:01 +0200
commitd42d27ead91e470cb12986d928441e56c0f543ca (patch)
tree1b1ae1f9c579e33915774591ee5768caf7aa12d8
parente6061ab2afecfaaa0d0797b88f9a4f53720b31ee (diff)
logind: add service for per-user shared systemd daemon
-rw-r--r--Makefile.am4
-rw-r--r--src/pam-module.c8
-rw-r--r--units/.gitignore1
-rw-r--r--units/user@.service.in18
4 files changed, 29 insertions, 2 deletions
diff --git a/Makefile.am b/Makefile.am
index 2a027c3855..9a67505623 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -353,7 +353,8 @@ nodist_systemunit_DATA = \
units/fsck@.service \
units/fsck-root.service \
units/quotacheck.service \
- units/rescue.service
+ units/rescue.service \
+ units/user@.service
if ENABLE_BINFMT
nodist_systemunit_DATA += \
@@ -404,6 +405,7 @@ EXTRA_DIST = \
units/fsck@.service.in \
units/fsck-root.service.in \
units/quotacheck.service.in \
+ units/user@.service.in \
systemd.pc.in \
introspect.awk \
src/org.freedesktop.systemd1.policy.in \
diff --git a/src/pam-module.c b/src/pam-module.c
index a15b4cae1c..178c46940c 100644
--- a/src/pam-module.c
+++ b/src/pam-module.c
@@ -361,6 +361,13 @@ _public_ PAM_EXTERN int pam_sm_open_session(
if (sd_booted() <= 0)
return PAM_SUCCESS;
+ /* Make sure we don't enter a loop by talking to
+ * systemd-logind when it is actually waiting for the
+ * background to finish start-up, */
+ pam_get_item(handle, PAM_SERVICE, (const void**) &service);
+ if (streq_ptr(service, "systemd-shared"))
+ return PAM_SUCCESS;
+
if (parse_argv(handle,
argc, argv,
&controllers, &reset_controllers,
@@ -401,7 +408,6 @@ _public_ PAM_EXTERN int pam_sm_open_session(
uid = pw->pw_uid;
pid = getpid();
- pam_get_item(handle, PAM_SERVICE, (const void**) &service);
pam_get_item(handle, PAM_XDISPLAY, (const void**) &display);
pam_get_item(handle, PAM_TTY, (const void**) &tty);
pam_get_item(handle, PAM_RUSER, (const void**) &remote_user);
diff --git a/units/.gitignore b/units/.gitignore
index 8da3804edb..ac700e8044 100644
--- a/units/.gitignore
+++ b/units/.gitignore
@@ -1,3 +1,4 @@
+user@.service
systemd-logind.service
systemd-localed.service
systemd-timedated.service
diff --git a/units/user@.service.in b/units/user@.service.in
new file mode 100644
index 0000000000..d692c8ece8
--- /dev/null
+++ b/units/user@.service.in
@@ -0,0 +1,18 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=User Manager for %I
+After=systemd-user-sessions.service
+
+[Service]
+User=%I
+PAMName=systemd-shared
+ControlGroup=/user/%I/shared
+ControlGroupModify=yes
+Type=notify
+ExecStart=-@rootbindir@/systemd --user