summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKay Sievers <kay@vrfy.org>2014-01-06 08:00:16 +0400
committerKay Sievers <kay@vrfy.org>2014-01-08 18:11:37 +0800
commit8b255ecd99dfee4e27b40a075b15d1e117f819fa (patch)
tree29e06155680211970985f3b760806edd3acecf68
parentbc6422cbd1dfc258fb2b4909a2a25ad356e63400 (diff)
pam_systemd: export DBUS_SESSION_BUS_ADDRESS
-rw-r--r--Makefile.am2
-rw-r--r--src/login/pam-module.c32
-rw-r--r--units/.gitignore1
-rw-r--r--units/user@.service.in (renamed from units/user@.service.m4.in)9
4 files changed, 35 insertions, 9 deletions
diff --git a/Makefile.am b/Makefile.am
index 7a159429e8..725a37563a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -494,7 +494,7 @@ EXTRA_DIST += \
units/user/systemd-exit.service.in \
units/systemd-fsck@.service.in \
units/systemd-fsck-root.service.in \
- units/user@.service.m4.in \
+ units/user@.service.in \
units/systemd-udevd.service \
units/systemd-udev-trigger.service \
units/systemd-udev-settle.service \
diff --git a/src/login/pam-module.c b/src/login/pam-module.c
index 89623aa765..c67e677384 100644
--- a/src/login/pam-module.c
+++ b/src/login/pam-module.c
@@ -164,6 +164,30 @@ static int get_seat_from_display(const char *display, const char **seat, uint32_
return 0;
}
+static int export_legacy_dbus_address(
+ pam_handle_t *handle,
+ uid_t uid,
+ const char *runtime) {
+
+#ifdef ENABLE_KDBUS
+ _cleanup_free_ char *s = NULL;
+ int r;
+
+ if (asprintf(&s, "kernel:path=/dev/kdbus/%lu-user/bus;unix:path=%s/bus",
+ (unsigned long) uid, runtime) < 0) {
+ pam_syslog(handle, LOG_ERR, "Failed to set bus variable.");
+ return PAM_BUF_ERR;
+ }
+
+ r = pam_misc_setenv(handle, "DBUS_SESSION_BUS_ADDRESS", s, 0);
+ if (r != PAM_SUCCESS) {
+ pam_syslog(handle, LOG_ERR, "Failed to set bus variable.");
+ return r;
+ }
+#endif
+ return PAM_SUCCESS;
+}
+
_public_ PAM_EXTERN int pam_sm_open_session(
pam_handle_t *handle,
int flags,
@@ -232,6 +256,10 @@ _public_ PAM_EXTERN int pam_sm_open_session(
pam_syslog(handle, LOG_ERR, "Failed to set runtime dir.");
return r;
}
+
+ r = export_legacy_dbus_address(handle, pw->pw_uid, rt);
+ if (r != PAM_SUCCESS)
+ return r;
}
return PAM_SUCCESS;
@@ -386,6 +414,10 @@ _public_ PAM_EXTERN int pam_sm_open_session(
pam_syslog(handle, LOG_ERR, "Failed to set runtime dir.");
return r;
}
+
+ r = export_legacy_dbus_address(handle, pw->pw_uid, runtime_path);
+ if (r != PAM_SUCCESS)
+ return r;
}
if (!isempty(seat)) {
diff --git a/units/.gitignore b/units/.gitignore
index cb9fa1c0c4..76c4cb39e6 100644
--- a/units/.gitignore
+++ b/units/.gitignore
@@ -65,5 +65,4 @@
/systemd-update-utmp.service
/systemd-user-sessions.service
/systemd-vconsole-setup.service
-/user@.service.m4
/user@.service
diff --git a/units/user@.service.m4.in b/units/user@.service.in
index 7b7d52b60b..c2d495f53f 100644
--- a/units/user@.service.m4.in
+++ b/units/user@.service.in
@@ -6,17 +6,12 @@
# (at your option) any later version.
[Unit]
-Description=User Manager for %I
+Description=User Manager for %i
After=systemd-user-sessions.service
[Service]
-User=%I
+User=%i
PAMName=systemd-user
Type=notify
ExecStart=-@rootlibexecdir@/systemd --user
-m4_ifdef(`ENABLE_KDBUS',
-Environment=DBUS_SESSION_BUS_ADDRESS=kernel:path=/dev/kdbus/%I-user/bus;unix:path=/run/user/%I/bus
-,m4_dnl
-Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%I/bus
-)m4_dnl
Slice=user-%i.slice