From: Lennart Poettering Date: Thu, 30 Jun 2011 00:18:01 +0000 (+0200) Subject: logind: add service for per-user shared systemd daemon X-Git-Tag: v30~90 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=d42d27ead91e470cb12986d928441e56c0f543ca logind: add service for per-user shared systemd daemon --- diff --git a/Makefile.am b/Makefile.am index 2a027c385..9a6750562 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 a15b4cae1..178c46940 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 8da3804ed..ac700e804 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 000000000..d692c8ece --- /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