Hello community,

here is the log from the commit of package systemd for openSUSE:Factory checked 
in at 2013-11-30 17:36:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/systemd (Old)
 and      /work/SRC/openSUSE:Factory/.systemd.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "systemd"

Changes:
--------
systemd-rpm-macros.changes: same change
--- /work/SRC/openSUSE:Factory/systemd/systemd.changes  2013-11-07 
09:05:13.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.systemd.new/systemd.changes     2013-11-30 
17:39:55.000000000 +0100
@@ -1,0 +2,22 @@
+Thu Nov 28 10:25:58 UTC 2013 - lbsous...@gmail.com
+
+- Add U_logind_revert_lazy_session_activation_on_non_vt_seats.patch
+  * See: 
http://cgit.freedesktop.org/systemd/systemd/commit/?id=3fdb2494c1e24c0a020f5b54022d2c751fd26f50
 
+
+-------------------------------------------------------------------
+Tue Nov 26 15:12:58 UTC 2013 - wer...@suse.de
+
+- Add patch 
+  1012-pam_systemd_do_override_XDG_RUNTIME_DIR_of_the_original_user.patch
+  to avoid (xdg-)su to set XDG_RUNTIME_DIR to the original user and
+  avoid that e.g. pulseaudio will create /run/user/<pid>/pulse owned
+  by root (bnc#852015)
+
+-------------------------------------------------------------------
+Thu Nov 21 12:27:11 UTC 2013 - wer...@suse.de
+
+- Add patch 
+  1011-check-4-valid-kmsg-device.patch
+  to avoid a busy systemd-journald (bnc#851393)
+
+-------------------------------------------------------------------

New:
----
  1011-check-4-valid-kmsg-device.patch
  1012-pam_systemd_do_override_XDG_RUNTIME_DIR_of_the_original_user.patch
  U_logind_revert_lazy_session_activation_on_non_vt_seats.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
systemd-rpm-macros.spec: same change
++++++ systemd.spec ++++++
--- /var/tmp/diff_new_pack.h4rK2p/_old  2013-11-30 17:39:57.000000000 +0100
+++ /var/tmp/diff_new_pack.h4rK2p/_new  2013-11-30 17:39:57.000000000 +0100
@@ -258,6 +258,11 @@
 Patch1009:      1009-make-xsltproc-use-correct-ROFF-links.patch
 # PATCH-FIX-OPENSUSE 1010-do-not-install-sulogin-unit-with-poweroff.patch -- 
Avoid installing console-shell.service (bnc#849071)
 Patch1010:      1010-do-not-install-sulogin-unit-with-poweroff.patch
+# PATCH-FIX-OPENSUSE 1011-check-4-valid-kmsg-device.patch -- Avoid busy 
systemd-journald (bnc#851393)
+Patch1011:      1011-check-4-valid-kmsg-device.patch
+# PATCH-FIX-PSTREAM 
1012-pam_systemd_do_override_XDG_RUNTIME_DIR_of_the_original_user.patch
+Patch1012:      
1012-pam_systemd_do_override_XDG_RUNTIME_DIR_of_the_original_user.patch
+Patch1013:      U_logind_revert_lazy_session_activation_on_non_vt_seats.patch
 
 %description
 Systemd is a system and service manager, compatible with SysV and LSB
@@ -534,6 +539,9 @@
 %endif
 %patch1009 -p1
 %patch1010 -p1
+%patch1011 -p1
+%patch1012 -p1
+%patch1013 -p1
 
 # ensure generate files are removed
 rm -f units/emergency.service

++++++ 1011-check-4-valid-kmsg-device.patch ++++++
From: Werner Fink <wer...@suse.de>
Date: Thu, 21 Nov 2013 11:50:32 +0000
Subject: [PATCH] Avoid busy systemd-journald

Avoid a busy systemd-journald due polling a broken /dec/kmsg in lxc
environments.

---
 journald-kmsg.c |   27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

Index: systemd-208/src/journal/journald-kmsg.c
===================================================================
--- systemd-208/src/journal/journald-kmsg.c
+++ systemd-208/src/journal/journald-kmsg.c     2013-11-21 13:30:22.930735683 
+0000
@@ -23,7 +23,9 @@
 #include <sys/epoll.h>
 #include <fcntl.h>
 #include <sys/mman.h>
+#include <sys/stat.h>
 #include <sys/socket.h>
+#include <sys/types.h>
 
 #include <systemd/sd-messages.h>
 #include <libudev.h>
@@ -377,20 +379,43 @@ int server_flush_dev_kmsg(Server *s) {
 
 int server_open_dev_kmsg(Server *s) {
         struct epoll_event ev;
+        struct stat st;
 
         assert(s);
 
         s->dev_kmsg_fd = open("/dev/kmsg", 
O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
         if (s->dev_kmsg_fd < 0) {
-                log_warning("Failed to open /dev/kmsg, ignoring: %m");
+                /* Do not warn as it may not exists in LXC environments */
+                if (errno != ENOENT)
+                        log_warning("Failed to open /dev/kmsg, ignoring: %m");
                 return 0;
         }
 
+        if (fstat(s->dev_kmsg_fd, &st) < 0) {
+                log_error("Failed to stat /dev/kmsg fd, ignoring: %m");
+                close_nointr_nofail(s->dev_kmsg_fd);
+                s->dev_kmsg_fd = -1;
+                return 0;
+        }
+
+        if (!S_ISCHR(st.st_mode) || major(st.st_rdev) != 1 || 
minor(st.st_rdev) != 11) {
+                int old_errno = errno;
+                errno = ENODEV;
+                log_warning("Irregular device /dev/kmsg, ignoring: %m");
+                errno = old_errno;
+                close_nointr_nofail(s->dev_kmsg_fd);
+                s->dev_kmsg_fd = -1;
+                return 0;
+        }
+
         zero(ev);
         ev.events = EPOLLIN;
         ev.data.fd = s->dev_kmsg_fd;
         if (epoll_ctl(s->epoll_fd, EPOLL_CTL_ADD, s->dev_kmsg_fd, &ev) < 0) {
 
+                close_nointr_nofail(s->dev_kmsg_fd);
+                s->dev_kmsg_fd = -1;
+
                 /* This will fail with EPERM on older kernels where
                  * /dev/kmsg is not readable. */
                 if (errno == EPERM)
++++++ 1012-pam_systemd_do_override_XDG_RUNTIME_DIR_of_the_original_user.patch 
++++++
Based on upstream baae0358f349870544884e405e82e4be7d8add9f
| From: Lennart Poettering <lenn...@poettering.net>
| Date: Tue, 26 Nov 2013 04:05:00 +0000
| Subject: pam_systemd: do not set XDG_RUNTIME_DIR if the session's original 
user is not the same as the newly logged in one
| It's better not to set any XDG_RUNTIME_DIR at all rather than one of a
| different user. So let's do this.
--- systemd-208/src/login/logind-dbus.c
+++ systemd-208/src/login/logind-dbus.c 2013-11-26 13:37:05.730735774 +0000
@@ -523,6 +523,7 @@ static int bus_manager_create_session(Ma
                                 DBUS_TYPE_OBJECT_PATH, &path,
                                 DBUS_TYPE_STRING, &session->user->runtime_path,
                                 DBUS_TYPE_UNIX_FD, &fifo_fd,
+                                DBUS_TYPE_UINT32, &session->user->uid,
                                 DBUS_TYPE_STRING, &cseat,
                                 DBUS_TYPE_UINT32, &vtnr,
                                 DBUS_TYPE_BOOLEAN, &exists,
--- systemd-208/src/login/logind-session-dbus.c
+++ systemd-208/src/login/logind-session-dbus.c 2013-11-26 13:36:07.478236401 
+0000
@@ -755,6 +755,7 @@ int session_send_create_reply(Session *s
                                     DBUS_TYPE_OBJECT_PATH, &path,
                                     DBUS_TYPE_STRING, &s->user->runtime_path,
                                     DBUS_TYPE_UNIX_FD, &fifo_fd,
+                                    DBUS_TYPE_UINT32, &s->user->uid,
                                     DBUS_TYPE_STRING, &cseat,
                                     DBUS_TYPE_UINT32, &vtnr,
                                     DBUS_TYPE_BOOLEAN, &exists,
--- systemd-208/src/login/pam-module.c
+++ systemd-208/src/login/pam-module.c  2013-11-26 14:32:20.194235777 +0000
@@ -93,24 +93,18 @@ static int get_user_data(
         assert(ret_username);
         assert(ret_pw);
 
-        r = audit_loginuid_from_pid(0, &uid);
-        if (r >= 0)
-                pw = pam_modutil_getpwuid(handle, uid);
-        else {
-                r = pam_get_user(handle, &username, NULL);
-                if (r != PAM_SUCCESS) {
-                        pam_syslog(handle, LOG_ERR, "Failed to get user 
name.");
-                        return r;
-                }
-
-                if (isempty(username)) {
-                        pam_syslog(handle, LOG_ERR, "User name not valid.");
-                        return PAM_AUTH_ERR;
-                }
+        r = pam_get_user(handle, &username, NULL);
+        if (r != PAM_SUCCESS) {
+                pam_syslog(handle, LOG_ERR, "Failed to get user name.");
+                return r;
+        }
 
-                pw = pam_modutil_getpwnam(handle, username);
+        if (isempty(username)) {
+                pam_syslog(handle, LOG_ERR, "User name not valid.");
+                return PAM_AUTH_ERR;
         }
 
+        pw = pam_modutil_getpwnam(handle, username);
         if (!pw) {
                 pam_syslog(handle, LOG_ERR, "Failed to get user data.");
                 return PAM_USER_UNKNOWN;
@@ -123,16 +117,14 @@ static int get_user_data(
 }
 
 static int get_seat_from_display(const char *display, const char **seat, 
uint32_t *vtnr) {
-        _cleanup_free_ char *p = NULL;
-        int r;
-        _cleanup_close_ int fd = -1;
         union sockaddr_union sa = {
                 .un.sun_family = AF_UNIX,
         };
+         _cleanup_free_ char *p = NULL, *tty = NULL;
+         _cleanup_close_ int fd = -1;
         struct ucred ucred;
         socklen_t l;
-        _cleanup_free_ char *tty = NULL;
-        int v;
+        int v, r;
 
         assert(display);
         assert(vtnr);
@@ -194,13 +186,12 @@ _public_ PAM_EXTERN int pam_sm_open_sess
         dbus_bool_t remote, existing;
         int r;
         uint32_t vtnr = 0;
+        uid_t original_uid;
 
         assert(handle);
 
         dbus_error_init(&error);
 
-        /* pam_syslog(handle, LOG_INFO, "pam-systemd initializing"); */
-
         /* Make this a NOP on non-logind systems */
         if (!logind_running())
                 return PAM_SUCCESS;
@@ -213,6 +204,9 @@ _public_ PAM_EXTERN int pam_sm_open_sess
                 goto finish;
         }
 
+        if (debug)
+                pam_syslog(handle, LOG_INFO, "pam-systemd initializing");
+
         r = get_user_data(handle, &username, &pw);
         if (r != PAM_SUCCESS)
                 goto finish;
@@ -374,7 +368,11 @@ _public_ PAM_EXTERN int pam_sm_open_sess
         if (debug)
                 pam_syslog(handle, LOG_DEBUG, "Asking logind to create 
session: "
                            "uid=%u pid=%u service=%s type=%s class=%s seat=%s 
vtnr=%u tty=%s display=%s remote=%s remote_user=%s remote_host=%s",
-                           uid, pid, service, type, class, seat, vtnr, tty, 
display, yes_no(remote), remote_user, remote_host);
+                              pw->pw_uid, pid,
+                              strempty(service),
+                              type, class,
+                              seat, vtnr, tty, display,
+                              yes_no(remote), remote_user, remote_host);
 
         reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
         if (!reply) {
@@ -388,6 +386,7 @@ _public_ PAM_EXTERN int pam_sm_open_sess
                                    DBUS_TYPE_OBJECT_PATH, &object_path,
                                    DBUS_TYPE_STRING, &runtime_path,
                                    DBUS_TYPE_UNIX_FD, &session_fd,
+                                   DBUS_TYPE_UINT32, &original_uid,
                                    DBUS_TYPE_STRING, &seat,
                                    DBUS_TYPE_UINT32, &vtnr,
                                    DBUS_TYPE_BOOLEAN, &existing,
@@ -399,8 +398,8 @@ _public_ PAM_EXTERN int pam_sm_open_sess
 
         if (debug)
                 pam_syslog(handle, LOG_DEBUG, "Reply from logind: "
-                           "id=%s object_path=%s runtime_path=%s session_fd=%d 
seat=%s vtnr=%u",
-                           id, object_path, runtime_path, session_fd, seat, 
vtnr);
+                           "id=%s object_path=%s runtime_path=%s session_fd=%d 
seat=%s vtnr=%u original_uid=%u",
+                           id, object_path, runtime_path, session_fd, seat, 
vtnr, original_uid);
 
         r = pam_misc_setenv(handle, "XDG_SESSION_ID", id, 0);
         if (r != PAM_SUCCESS) {
@@ -408,10 +407,24 @@ _public_ PAM_EXTERN int pam_sm_open_sess
                 goto finish;
         }
 
-        r = pam_misc_setenv(handle, "XDG_RUNTIME_DIR", runtime_path, 0);
-        if (r != PAM_SUCCESS) {
-                pam_syslog(handle, LOG_ERR, "Failed to set runtime dir.");
-                goto finish;
+        if (original_uid == pw->pw_uid) {
+                /* Don't set $XDG_RUNTIME_DIR if the user we now
+                 * authenticated for does not match the original user
+                 * of the session. We do this in order not to result
+                 * in privileged apps clobbering the runtime directory
+                 * unnecessarily. */
+
+                r = pam_misc_setenv(handle, "XDG_RUNTIME_DIR", runtime_path, 
0);
+                if (r != PAM_SUCCESS) {
+                         pam_syslog(handle, LOG_ERR, "Failed to set runtime 
dir.");
+                         goto finish;
+                }
+        } else {
+                (void) unsetenv("XDG_RUNTIME_DIR");
+                r = pam_putenv(handle, "XDG_RUNTIME_DIR");
+                if (r != PAM_SUCCESS && r != PAM_BAD_ITEM) {
+                         pam_syslog(handle, LOG_ERR, "Failed to unset runtime 
dir.");
+                }
         }
 
         if (!isempty(seat)) {
++++++ U_logind_revert_lazy_session_activation_on_non_vt_seats.patch ++++++
>From 3fdb2494c1e24c0a020f5b54022d2c751fd26f50 Mon Sep 17 00:00:00 2001
From: David Herrmann <dh.herrm...@gmail.com>
Date: Thu, 28 Nov 2013 09:52:18 +0000
Subject: login: revert lazy session-activation on non-VT seats

Existing applications like gdm already depend on new sessions to get
immediately activated on seats without VTs. Fixes a bug reported as:
  [systemd-devel] systemd 208:trouble with inactive user sessions at non-seat0 
seats

This patch restores the original behavior. We either need to add a new
flag for session-creation or some other heuristic to avoid activating new
sessions in the future.
---
--- a/src/login/logind-seat.c   2013-11-28 11:30:49.624623090 -0200
+++ b/src/login/logind-seat.c   2013-11-28 11:31:46.668792391 -0200
@@ -420,8 +420,8 @@
         seat_send_changed(s, "Sessions\0");
 
         /* On seats with VTs, the VT logic defines which session is active. On
-         * seats without VTs, we automatically activate the first session. */
-        if (!seat_has_vts(s) && !s->active)
+         * seats without VTs, we automatically activate new sessions. */
+        if (!seat_has_vts(s))
                 seat_set_active(s, session);
 
         return 0;
-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to