[systemd/f21] Pull bugfixes and some small features from upstream

Zbigniew Jędrzejewski-Szmek zbyszek at fedoraproject.org
Sat Jul 19 19:51:06 UTC 2014


commit 43ff24caabe4ac862916c15c26cce3d171736b28
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Sat Jul 19 14:38:18 2014 -0400

    Pull bugfixes and some small features from upstream

 ...dd-link-to-Open-Group-Base-Specifications.patch |   35 +++
 0002-sd-path-add-missing-header.patch              |   22 ++
 ...-architecture-remove-cris-from-uname-list.patch |   25 ++
 ...tworkd-link-improve-link-tracking-logging.patch |   50 ++++
 ...properly-track-addresses-when-first-added.patch |  103 ++++++++
 0006-man-netdev-mention-tun-and-tap.patch          |   26 ++
 ...tionalize-static-device-node-logic-on-CAP.patch |   47 ++++
 ...tionalize-configfs-and-debugfs-with-CAP_S.patch |   42 +++
 ...-check-whether-etc-is-unpopulated-to-look.patch |   32 +++
 ...n-t-clear-dhcpv6-lease-timers-if-there-s-.patch |   28 ++
 ...cept-section-DHCP-in-systemd.network-file.patch |   23 ++
 ...chine-don-t-return-uninitialized-variable.patch |   25 ++
 0013-sysusers-fix-uninitialized-warning.patch      |   23 ++
 ...console-setup-run-setfont-before-loadkeys.patch |   92 +++++++
 ...-show-a-useful-error-on-permission-proble.patch |   33 +++
 0016-networkd-netdev-add-missing-refs.patch        |   68 +++++
 ...console-setup-fix-inverted-error-messages.patch |   35 +++
 ...onfig-ignore-errors-due-to-missing-MAC-ad.patch |   40 +++
 ...er-0x7F-a-control-chracter-which-it-is-DE.patch |   53 ++++
 ...in-our-etc-empty-check-a-bit-in-a-comment.patch |   29 ++
 ...sing-archs-to-ConditionArchitecture-descr.patch |   45 ++++
 ...jails-are-no-longer-detected-by-Condition.patch |   23 ++
 ...e-add-string-table-entries-for-mips-le-ar.patch |   25 ++
 ...sh-status-text-and-errno-values-each-time.patch |   27 ++
 ...stem.c-terminate-string-array-elements-wi.patch |   36 +++
 ...ferences-to-the-priviliged-command-line-o.patch |   50 ++++
 ...ator-add-comma-when-removed-option-is-in-.patch |   27 ++
 ...d-format-attribute-and-fix-a-wrong-caller.patch |   43 +++
 0029-add-new-systemd-escape-tool.patch             |   92 +++++++
 0030-escape-beef-up-new-systemd-escape-tool.patch  |  274 ++++++++++++++++++++
 0031-man-document-systemd-escape-1.patch           |  234 +++++++++++++++++
 ...-shared-fix-format-string-for-usec_t-type.patch |   23 ++
 ...llow-switching-to-unused-VTs-via-SwitchTo.patch |   35 +++
 ...ix-visual-alignment-for-lines-prefixed-wi.patch |   24 ++
 ...er-Don-t-wait-for-new-data-from-the-senso.patch |   74 ++++++
 0036-escape-move-to-rootbindir.patch               |   38 +++
 ...mpress-improve-xz-compression-performance.patch |   67 +++++
 ...tnamed-add-a-new-chassis-type-for-watches.patch |   24 ++
 ...pdate-documentation-with-new-watch-chassi.patch |   39 +++
 ...ake-ExecStopPost-action-part-of-ExecStart.patch |   51 ++++
 ...consider-tabs-special-in-string_has_cc-an.patch |  119 +++++++++
 0042-util-fix-has-cc-check-and-add-test.patch      |   56 ++++
 ...n-t-allow-user-names-longer-than-UT_NAMES.patch |   52 ++++
 ...n-t-allow-control-characters-in-gecos-fie.patch |   27 ++
 0045-sysusers-allow-overrides-in-etc-and-run.patch |  122 +++++++++
 ...ent-x-systemd.device-timeout-for-crypttab.patch |   37 +++
 ...etion-man-beef-up-chassis-completions-and.patch |  224 ++++++++++++++++
 ...d-sys-include-PolicyKit-files-as-part-of-.patch |   33 +++
 ...o-not-distribute-generated-emergency.serv.patch |   27 ++
 ...susers-preserve-label-of-etc-passwd-group.patch |   54 ++++
 ...nction-to-open-temp-files-in-selinux-mode.patch |  111 ++++++++
 ...d-systemd-coredump-8-and-a-bunch-of-links.patch |  200 ++++++++++++++
 ...man-sysusers.d-correct-default-user-shell.patch |   26 ++
 ...man-mention-XDG_DATA_HOME-in-systemd.unit.patch |   41 +++
 ...-don-t-make-.local-share-systemd-user-a-s.patch |   49 ++++
 ...o-quote-more-shell-characters-in-envfiles.patch |   53 ++++
 ....netdev-make-it-clear-that-we-do-not-touc.patch |   30 +++
 0058-rules-consistently-use-instead-of.patch       |   67 +++++
 ...uppress-resync-at-system-time-change-when.patch |   31 +++
 ...nly-listen-to-clock-changes-when-connecte.patch |   45 ++++
 ...shell-completion-restore-completion-for-p.patch |  140 ++++++++++
 ...core-fix-oneshot-service-resource-control.patch |   27 ++
 0063-rules-uaccess-add-ID_SOFTWARE_RADIO.patch     |   44 +++
 ...urnal-allow-files-with-no-data-whatsoever.patch |   32 +++
 ...l-getty-.service-use-the-default-RestartS.patch |   33 +++
 0066-build-sys-don-t-move-libgudev-to-lib.patch    |   33 +++
 0067-shared-include-stdbool.h-in-mkdir.h.patch     |   22 ++
 0068-missing.h-add-IFLA_MACVLAN_FLAGS.patch        |   48 ++++
 ...ent-yearly-and-annually-in-systemd.time-7.patch |   47 ++++
 ...message-when-inotify-watches-are-exhauste.patch |   28 ++
 0071-detect-virt-Fix-Xen-domU-discovery.patch      |   31 +++
 ...uce-test-journal-send-timeout-from-10s-to.patch |   27 ++
 ...md-detect-virt-detect-s390-virtualization.patch |   71 +++++
 ...-add-note-about-sd_journal_get_cutoff_mon.patch |  116 +++++++++
 ...Be-more-verbose-when-bind-or-listen-fails.patch |  106 ++++++++
 0076-core-show-timeouts-when-watchdog-howls.patch  |   31 +++
 0077-escape-fix-return-code.patch                  |   21 ++
 systemd.spec                                       |   97 +++++++-
 78 files changed, 4438 insertions(+), 2 deletions(-)
---
diff --git a/0001-man-add-link-to-Open-Group-Base-Specifications.patch b/0001-man-add-link-to-Open-Group-Base-Specifications.patch
new file mode 100644
index 0000000..14f2d75
--- /dev/null
+++ b/0001-man-add-link-to-Open-Group-Base-Specifications.patch
@@ -0,0 +1,35 @@
+From ff14f3b995bfa85af05eb3108c96568eadf9d99c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Mon, 30 Jun 2014 20:10:16 -0400
+Subject: [PATCH] man: add link to Open Group Base Specifications
+
+(cherry picked from commit 9c5dcb68b058b6bde056fc1ece768ba74a120091)
+---
+ man/file-hierarchy.xml | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/man/file-hierarchy.xml b/man/file-hierarchy.xml
+index ed6e0e9a05..408042ee6e 100644
+--- a/man/file-hierarchy.xml
++++ b/man/file-hierarchy.xml
+@@ -190,7 +190,9 @@
+                                 should prefer using the directory
+                                 specified in it over directly
+                                 referencing
+-                                <filename>/tmp</filename> (see <citerefentry><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry> for details).</para></listitem>
++                                <filename>/tmp</filename> (see <citerefentry><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry>
++                                and
++                                <ulink url="http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03">IEEE Std 1003.1</ulink> for details).</para></listitem>
+                         </varlistentry>
+ 
+                 </variablelist>
+@@ -461,7 +463,8 @@
+                                 set they should prefer using the
+                                 directory specified in it over
+                                 directly referencing
+-                                <filename>/var/tmp</filename> (see <citerefentry><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry> for details).
++                                <filename>/var/tmp</filename> (see <citerefentry><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry>
++                                for details).
+                                 </para></listitem>
+                         </varlistentry>
+ 
diff --git a/0002-sd-path-add-missing-header.patch b/0002-sd-path-add-missing-header.patch
new file mode 100644
index 0000000..8a1f679
--- /dev/null
+++ b/0002-sd-path-add-missing-header.patch
@@ -0,0 +1,22 @@
+From b1177a14132cb362a50f3ee8b79fab65ec6796dd Mon Sep 17 00:00:00 2001
+From: Umut Tezduyar Lindskog <umut.tezduyar at axis.com>
+Date: Thu, 3 Jul 2014 22:28:29 +0200
+Subject: [PATCH] sd-path: add missing header
+
+(cherry picked from commit 0c7448867271180e8ac5795ebdff4bee0c0acd0c)
+---
+ src/libsystemd/sd-path/sd-path.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/libsystemd/sd-path/sd-path.c b/src/libsystemd/sd-path/sd-path.c
+index 7ade915c2b..360c85405b 100644
+--- a/src/libsystemd/sd-path/sd-path.c
++++ b/src/libsystemd/sd-path/sd-path.c
+@@ -22,6 +22,7 @@
+ #include "path-util.h"
+ #include "strv.h"
+ #include "sd-path.h"
++#include "missing.h"
+ 
+ static int from_environment(const char *envname, const char *fallback, const char **ret) {
+         assert(ret);
diff --git a/0003-architecture-remove-cris-from-uname-list.patch b/0003-architecture-remove-cris-from-uname-list.patch
new file mode 100644
index 0000000..1890d34
--- /dev/null
+++ b/0003-architecture-remove-cris-from-uname-list.patch
@@ -0,0 +1,25 @@
+From eda7cab62bcd8ba26a4a8681527684a7c4495357 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 3 Jul 2014 22:52:44 +0200
+Subject: [PATCH] architecture: remove "cris" from uname list
+
+the only correct name appears to be "crisv32"...
+
+http://lists.freedesktop.org/archives/systemd-devel/2014-July/020899.html
+(cherry picked from commit bc4bc52bc3de56405045b0437e145a7067fb085d)
+---
+ src/shared/architecture.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/src/shared/architecture.c b/src/shared/architecture.c
+index 7dd049a36a..6cdca4e7e5 100644
+--- a/src/shared/architecture.c
++++ b/src/shared/architecture.c
+@@ -115,7 +115,6 @@ Architecture uname_architecture(void) {
+ #elif defined(__tilegx__)
+                 { "tilegx",     ARCHITECTURE_TILEGX   },
+ #elif defined(__cris__)
+-                { "cris",       ARCHITECTURE_CRIS     },
+                 { "crisv32",    ARCHITECTURE_CRIS     },
+ #else
+ #error "Please register your architecture here!"
diff --git a/0004-networkd-link-improve-link-tracking-logging.patch b/0004-networkd-link-improve-link-tracking-logging.patch
new file mode 100644
index 0000000..f22f3ff
--- /dev/null
+++ b/0004-networkd-link-improve-link-tracking-logging.patch
@@ -0,0 +1,50 @@
+From a8e0b3dcb6cb021193f7ab71e94bcc554cfd0348 Mon Sep 17 00:00:00 2001
+From: Tom Gundersen <teg at jklm.no>
+Date: Thu, 3 Jul 2014 21:35:03 +0200
+Subject: [PATCH] networkd: link - improve link tracking logging
+
+(cherry picked from commit 393c0c5e64d0cb85ce14f25a06fa8958c9e119e7)
+---
+ src/network/networkd-link.c | 13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
+index 14c0417d83..961c1ab8ad 100644
+--- a/src/network/networkd-link.c
++++ b/src/network/networkd-link.c
+@@ -2140,7 +2140,7 @@ int link_rtnl_process_address(sd_rtnl *rtnl, sd_rtnl_message *message, void *use
+ 
+         r = address_new_dynamic(&address);
+         if (r < 0)
+-                return 0;
++                return r;
+ 
+         r = sd_rtnl_message_addr_get_family(message, &address->family);
+         if (r < 0 || !IN_SET(address->family, AF_INET, AF_INET6)) {
+@@ -2204,7 +2204,10 @@ int link_rtnl_process_address(sd_rtnl *rtnl, sd_rtnl_message *message, void *use
+         case RTM_NEWADDR:
+                 if (!address_dropped)
+                         log_debug_link(link, "added address: %s/%u", buf,
+-                                      address->prefixlen);
++                                       address->prefixlen);
++                else
++                        log_debug_link(link, "updated address: %s/%u", buf,
++                                       address->prefixlen);
+ 
+                 LIST_PREPEND(addresses, link->addresses, address);
+                 address = NULL;
+@@ -2215,10 +2218,12 @@ int link_rtnl_process_address(sd_rtnl *rtnl, sd_rtnl_message *message, void *use
+         case RTM_DELADDR:
+                 if (address_dropped) {
+                         log_debug_link(link, "removed address: %s/%u", buf,
+-                                      address->prefixlen);
++                                       address->prefixlen);
+ 
+                         link_save(link);
+-                }
++                } else
++                        log_warning_link(link, "removing non-existent address: %s/%u",
++                                         buf, address->prefixlen);
+ 
+                 break;
+         default:
diff --git a/0005-networkd-properly-track-addresses-when-first-added.patch b/0005-networkd-properly-track-addresses-when-first-added.patch
new file mode 100644
index 0000000..c760ff7
--- /dev/null
+++ b/0005-networkd-properly-track-addresses-when-first-added.patch
@@ -0,0 +1,103 @@
+From f49887cbe75da56dc8555d56c66daad78400b2b3 Mon Sep 17 00:00:00 2001
+From: Tom Gundersen <teg at jklm.no>
+Date: Thu, 3 Jul 2014 22:47:51 +0200
+Subject: [PATCH] networkd: properly track addresses when first added
+
+When doing a NEWADDR, the reply we get back is the NEWADDR itself, rather
+than just an empty ack (unlike how NEWLINK works). For this reason, the
+process that did the NEWADDR does not get the broadcast message.
+
+We were only listening for broadcast messages, and hence not tracking the
+addresses we added ourselves. This went unnoticed as the kernel will usually
+send NEWADDR messages from time to time anyway, so things would mostly work,
+but in the worst case we would not notice that a routable address was available
+and consider ourselves offline.
+
+(cherry picked from commit 4958aee4977f325be19f0e1e4b424922c3cada5f)
+---
+ src/network/networkd-link.c | 54 +++++++++++++++++++++++++--------------------
+ 1 file changed, 30 insertions(+), 24 deletions(-)
+
+diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
+index 961c1ab8ad..6257372ffd 100644
+--- a/src/network/networkd-link.c
++++ b/src/network/networkd-link.c
+@@ -599,10 +599,35 @@ static int route_drop_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata)
+         return 0;
+ }
+ 
++static int link_get_address_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) {
++        _cleanup_link_unref_ Link *link = userdata;
++        int r;
++
++        assert(rtnl);
++        assert(m);
++        assert(link);
++        assert(link->manager);
++
++        for (; m; m = sd_rtnl_message_next(m)) {
++                r = sd_rtnl_message_get_errno(m);
++                if (r < 0) {
++                        log_debug_link(link, "getting address failed: %s", strerror(-r));
++                        continue;
++                }
++
++                r = link_rtnl_process_address(rtnl, m, link->manager);
++                if (r < 0)
++                        log_warning_link(link, "could not process address: %s", strerror(-r));
++        }
++
++        return 1;
++}
++
+ static int address_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) {
+         _cleanup_link_unref_ Link *link = userdata;
+         int r;
+ 
++        assert(rtnl);
+         assert(m);
+         assert(link);
+         assert(link->ifname);
+@@ -623,6 +648,11 @@ static int address_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) {
+                                 link->ifname, strerror(-r),
+                                 "ERRNO=%d", -r,
+                                 NULL);
++        if (r >= 0) {
++                /* calling handler directly so take a ref */
++                link_ref(link);
++                link_get_address_handler(rtnl, m, link);
++        }
+ 
+         if (link->addr_messages == 0) {
+                 log_debug_link(link, "addresses set");
+@@ -2233,30 +2263,6 @@ int link_rtnl_process_address(sd_rtnl *rtnl, sd_rtnl_message *message, void *use
+         return 1;
+ }
+ 
+-static int link_get_address_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) {
+-        _cleanup_link_unref_ Link *link = userdata;
+-        int r;
+-
+-        assert(rtnl);
+-        assert(m);
+-        assert(link);
+-        assert(link->manager);
+-
+-        for (; m; m = sd_rtnl_message_next(m)) {
+-                r = sd_rtnl_message_get_errno(m);
+-                if (r < 0) {
+-                        log_debug_link(link, "getting address failed: %s", strerror(-r));
+-                        continue;
+-                }
+-
+-                r = link_rtnl_process_address(rtnl, m, link->manager);
+-                if (r < 0)
+-                        log_warning_link(link, "could not process address: %s", strerror(-r));
+-        }
+-
+-        return 1;
+-}
+-
+ int link_add(Manager *m, sd_rtnl_message *message, Link **ret) {
+         Link *link;
+         _cleanup_rtnl_message_unref_ sd_rtnl_message *req = NULL;
diff --git a/0006-man-netdev-mention-tun-and-tap.patch b/0006-man-netdev-mention-tun-and-tap.patch
new file mode 100644
index 0000000..82e4bac
--- /dev/null
+++ b/0006-man-netdev-mention-tun-and-tap.patch
@@ -0,0 +1,26 @@
+From 9cb3134113680e868cd116944c8d6f0d21c1e939 Mon Sep 17 00:00:00 2001
+From: Tom Gundersen <teg at jklm.no>
+Date: Fri, 4 Jul 2014 01:26:19 +0200
+Subject: [PATCH] man: netdev - mention tun and tap
+
+Reported by Moviuro <moviuro at gmail.com>
+
+(cherry picked from commit 54f601debc07addbed803fb847cd5bd3e91e021e)
+---
+ man/systemd.netdev.xml | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml
+index c90bd8f98c..857221fdb0 100644
+--- a/man/systemd.netdev.xml
++++ b/man/systemd.netdev.xml
+@@ -163,7 +163,8 @@
+                                                 <literal>macvlan</literal>, <literal>vxlan</literal>,
+                                                 <literal>ipip</literal>, <literal>gre</literal>,
+                                                 <literal>sit</literal>, <literal>vti</literal>,
+-                                                <literal>veth</literal>, and <literal>dummy</literal>
++                                                <literal>veth</literal>, <literal>tun</literal>,
++                                                <literal>tap</literal> and <literal>dummy</literal>
+                                                 are supported. This option is compulsory.</para>
+                                         </listitem>
+                                 </varlistentry>
diff --git a/0007-units-conditionalize-static-device-node-logic-on-CAP.patch b/0007-units-conditionalize-static-device-node-logic-on-CAP.patch
new file mode 100644
index 0000000..4c5bad9
--- /dev/null
+++ b/0007-units-conditionalize-static-device-node-logic-on-CAP.patch
@@ -0,0 +1,47 @@
+From fce5e80589911d813dd13d1d0d64df96e0ab7939 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Fri, 4 Jul 2014 03:07:20 +0200
+Subject: [PATCH] units: conditionalize static device node logic on
+ CAP_SYS_MODULES instead of CAP_MKNOD
+
+npsawn containers generally have CAP_MKNOD, since this is required
+to make PrviateDevices= work. Thus, it's not useful anymore to
+conditionalize the kmod static device node units.
+
+Use CAP_SYS_MODULES instead which is not available for nspawn
+containers. However, the static device node logic is only done for being
+able to autoload modules with it, and if we can't do that there's no
+point in doing it.
+
+(cherry picked from commit e0c74691c41a204eba2fd5f39615049fc9ff1648)
+---
+ units/kmod-static-nodes.service.in          | 2 +-
+ units/systemd-tmpfiles-setup-dev.service.in | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/units/kmod-static-nodes.service.in b/units/kmod-static-nodes.service.in
+index 368f980fd1..0934a8751f 100644
+--- a/units/kmod-static-nodes.service.in
++++ b/units/kmod-static-nodes.service.in
+@@ -9,7 +9,7 @@
+ Description=Create list of required static device nodes for the current kernel
+ DefaultDependencies=no
+ Before=sysinit.target systemd-tmpfiles-setup-dev.service
+-ConditionCapability=CAP_MKNOD
++ConditionCapability=CAP_SYS_MODULE
+ ConditionPathExists=/lib/modules/%v/modules.devname
+ 
+ [Service]
+diff --git a/units/systemd-tmpfiles-setup-dev.service.in b/units/systemd-tmpfiles-setup-dev.service.in
+index b9cfc53bd1..06346d3b7c 100644
+--- a/units/systemd-tmpfiles-setup-dev.service.in
++++ b/units/systemd-tmpfiles-setup-dev.service.in
+@@ -12,7 +12,7 @@ DefaultDependencies=no
+ Conflicts=shutdown.target
+ After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-sysusers.service
+ Before=sysinit.target local-fs-pre.target systemd-udevd.service shutdown.target
+-ConditionCapability=CAP_MKNOD
++ConditionCapability=CAP_SYS_MODULE
+ 
+ [Service]
+ Type=oneshot
diff --git a/0008-units-conditionalize-configfs-and-debugfs-with-CAP_S.patch b/0008-units-conditionalize-configfs-and-debugfs-with-CAP_S.patch
new file mode 100644
index 0000000..1ff7dec
--- /dev/null
+++ b/0008-units-conditionalize-configfs-and-debugfs-with-CAP_S.patch
@@ -0,0 +1,42 @@
+From b654a1065f278c93b3891cc5993645026e0d3702 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Fri, 4 Jul 2014 03:10:09 +0200
+Subject: [PATCH] units: conditionalize configfs and debugfs with CAP_SYS_RAWIO
+
+We really don't want these in containers as they provide a too lowlevel
+look on the system.
+
+Conditionalize them with CAP_SYS_RAWIO since that's required to access
+/proc/kcore, /dev/kmem and similar, which feel similar in style. Also,
+npsawn containers lack that capability.
+
+(cherry picked from commit fa229d09281d435153b4cfd138a2a62fa66d889b)
+---
+ units/sys-kernel-config.mount | 1 +
+ units/sys-kernel-debug.mount  | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/units/sys-kernel-config.mount b/units/sys-kernel-config.mount
+index 020101c0d8..21648eff6a 100644
+--- a/units/sys-kernel-config.mount
++++ b/units/sys-kernel-config.mount
+@@ -11,6 +11,7 @@ Documentation=https://www.kernel.org/doc/Documentation/filesystems/configfs/conf
+ Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ ConditionPathExists=/sys/kernel/config
++ConditionCapability=CAP_SYS_RAWIO
+ After=systemd-modules-load.service
+ Before=sysinit.target
+ 
+diff --git a/units/sys-kernel-debug.mount b/units/sys-kernel-debug.mount
+index 5369728a9f..1e94387bac 100644
+--- a/units/sys-kernel-debug.mount
++++ b/units/sys-kernel-debug.mount
+@@ -11,6 +11,7 @@ Documentation=https://www.kernel.org/doc/Documentation/filesystems/debugfs.txt
+ Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ ConditionPathExists=/sys/kernel/debug
++ConditionCapability=CAP_SYS_RAWIO
+ Before=sysinit.target
+ 
+ [Mount]
diff --git a/0009-main-change-check-whether-etc-is-unpopulated-to-look.patch b/0009-main-change-check-whether-etc-is-unpopulated-to-look.patch
new file mode 100644
index 0000000..ade4725
--- /dev/null
+++ b/0009-main-change-check-whether-etc-is-unpopulated-to-look.patch
@@ -0,0 +1,32 @@
+From 59afe82145260430e426cf4ac999e8fc69e2a288 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Fri, 4 Jul 2014 03:13:05 +0200
+Subject: [PATCH] main: change check whether /etc is unpopulated to look for
+ /etc/machine-id
+
+Previously, we checked whether /etc was completely empty. This makes it
+difficult though for container managers such as nspawn to install a
+small number of files (such as /etc/timezone), and have the system
+otherwise populate its own tree.
+
+Hence, change this by looking for /etc/machine-id, which should be a
+good sign whether /etc is populated or not.
+
+(cherry picked from commit baa1bdf70f21848fbe01d3f383ae0f59d86a9bf3)
+---
+ src/core/main.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/core/main.c b/src/core/main.c
+index 38835fc620..1ca899998e 100644
+--- a/src/core/main.c
++++ b/src/core/main.c
+@@ -1543,7 +1543,7 @@ int main(int argc, char *argv[]) {
+                 if (in_initrd())
+                         log_info("Running in initial RAM disk.");
+ 
+-                empty_etc = dir_is_empty("/etc") > 0;
++                empty_etc = access("/etc/machine-id", F_OK) < 0;
+                 if (empty_etc)
+                         log_info("Running with unpopulated /etc.");
+         } else {
diff --git a/0010-networkd-don-t-clear-dhcpv6-lease-timers-if-there-s-.patch b/0010-networkd-don-t-clear-dhcpv6-lease-timers-if-there-s-.patch
new file mode 100644
index 0000000..284ce5e
--- /dev/null
+++ b/0010-networkd-don-t-clear-dhcpv6-lease-timers-if-there-s-.patch
@@ -0,0 +1,28 @@
+From 1b74050afb9b407eaa59c67b6015611c9113f7e4 Mon Sep 17 00:00:00 2001
+From: Steven Noonan <steven at uplinklabs.net>
+Date: Thu, 3 Jul 2014 19:43:56 -0700
+Subject: [PATCH] networkd: don't clear dhcpv6 lease timers if there's no
+ previous lease
+
+If client->lease is NULL, dhcp6_lease_clear_timers will cause a segmentation
+fault.
+
+(cherry picked from commit b1e1238fb3af77419eca704fb64f68a313954734)
+---
+ src/libsystemd-network/sd-dhcp6-client.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c
+index 8fdbbfe320..a83778e938 100644
+--- a/src/libsystemd-network/sd-dhcp6-client.c
++++ b/src/libsystemd-network/sd-dhcp6-client.c
+@@ -708,7 +708,8 @@ static int client_receive_reply(sd_dhcp6_client *client, DHCP6Message *reply,
+                         return 0;
+         }
+ 
+-        dhcp6_lease_clear_timers(&client->lease->ia);
++        if (client->lease)
++            dhcp6_lease_clear_timers(&client->lease->ia);
+ 
+         client->lease = sd_dhcp6_lease_unref(client->lease);
+         client->lease = lease;
diff --git a/0011-networkd-accept-section-DHCP-in-systemd.network-file.patch b/0011-networkd-accept-section-DHCP-in-systemd.network-file.patch
new file mode 100644
index 0000000..42d1cb4
--- /dev/null
+++ b/0011-networkd-accept-section-DHCP-in-systemd.network-file.patch
@@ -0,0 +1,23 @@
+From 18aa6c0119fbcad1e569f1d178c4f1691d4e3b90 Mon Sep 17 00:00:00 2001
+From: Steven Noonan <steven at uplinklabs.net>
+Date: Thu, 3 Jul 2014 19:42:19 -0700
+Subject: [PATCH] networkd: accept section DHCP in systemd.network files
+
+(cherry picked from commit c38d2eb828f1a62ae9052c9db45ccc70f98fdb47)
+---
+ src/network/networkd-network.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c
+index 9ab4f23068..9f6de18538 100644
+--- a/src/network/networkd-network.c
++++ b/src/network/networkd-network.c
+@@ -92,7 +92,7 @@ static int network_load_one(Manager *manager, const char *filename) {
+         network->dhcp_routes = true;
+         network->dhcp_sendhost = true;
+ 
+-        r = config_parse(NULL, filename, file, "Match\0Network\0Address\0Route\0DHCPv4\0", config_item_perf_lookup,
++        r = config_parse(NULL, filename, file, "Match\0Network\0Address\0Route\0DHCP\0DHCPv4\0", config_item_perf_lookup,
+                         (void*) network_network_gperf_lookup, false, false, network);
+         if (r < 0) {
+                 log_warning("Could not parse config file %s: %s", filename, strerror(-r));
diff --git a/0012-machine-don-t-return-uninitialized-variable.patch b/0012-machine-don-t-return-uninitialized-variable.patch
new file mode 100644
index 0000000..ea3e6e4
--- /dev/null
+++ b/0012-machine-don-t-return-uninitialized-variable.patch
@@ -0,0 +1,25 @@
+From 6e07a1c070376b7c2bcc8d57e8adbc8f6f78e8d5 Mon Sep 17 00:00:00 2001
+From: Tom Gundersen <teg at jklm.no>
+Date: Sun, 6 Jul 2014 14:12:28 +0200
+Subject: [PATCH] machine: don't return uninitialized variable
+
+Repotred by Ronny Chevalier
+
+(cherry picked from commit f14aa1f1b2e4e99ee20393871b5f64f1378ed6c3)
+---
+ src/machine/machine.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/machine/machine.c b/src/machine/machine.c
+index c0fa1b24b6..cf38e3fb94 100644
+--- a/src/machine/machine.c
++++ b/src/machine/machine.c
+@@ -371,7 +371,7 @@ static int machine_stop_scope(Machine *m) {
+         free(m->scope_job);
+         m->scope_job = job;
+ 
+-        return r;
++        return 0;
+ }
+ 
+ int machine_stop(Machine *m) {
diff --git a/0013-sysusers-fix-uninitialized-warning.patch b/0013-sysusers-fix-uninitialized-warning.patch
new file mode 100644
index 0000000..909093f
--- /dev/null
+++ b/0013-sysusers-fix-uninitialized-warning.patch
@@ -0,0 +1,23 @@
+From e41d164c532fa4345bc2dd1c5e1daaaec76b787c Mon Sep 17 00:00:00 2001
+From: Ronny Chevalier <chevalier.ronny at gmail.com>
+Date: Sun, 6 Jul 2014 13:33:38 +0200
+Subject: [PATCH] sysusers: fix uninitialized warning
+
+(cherry picked from commit bce415edcae8e7af8327de8265d621f95fa5426f)
+---
+ src/sysusers/sysusers.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
+index 1209a5a8b4..c0af69300a 100644
+--- a/src/sysusers/sysusers.c
++++ b/src/sysusers/sysusers.c
+@@ -1312,6 +1312,8 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
+ 
+                 h = groups;
+                 break;
++        default:
++                return -EBADMSG;
+         }
+ 
+         i->type = action[0];
diff --git a/0014-vconsole-setup-run-setfont-before-loadkeys.patch b/0014-vconsole-setup-run-setfont-before-loadkeys.patch
new file mode 100644
index 0000000..ea58eb2
--- /dev/null
+++ b/0014-vconsole-setup-run-setfont-before-loadkeys.patch
@@ -0,0 +1,92 @@
+From 20a575e8935cf5d2d078bbe3acf21fff56f2345c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Tue, 1 Jul 2014 22:20:11 -0400
+Subject: [PATCH] vconsole-setup: run setfont before loadkeys
+
+https://bugs.freedesktop.org/show_bug.cgi?id=80685
+(cherry picked from commit abee28c56d523e55751b0c007d0bf812cc285c00)
+---
+ src/vconsole/vconsole-setup.c | 48 +++++++++++++++++++++----------------------
+ 1 file changed, 23 insertions(+), 25 deletions(-)
+
+diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c
+index e0c4050611..25d15afd5c 100644
+--- a/src/vconsole/vconsole-setup.c
++++ b/src/vconsole/vconsole-setup.c
+@@ -238,12 +238,10 @@ static void font_copy_to_all_vcs(int fd) {
+ 
+ int main(int argc, char **argv) {
+         const char *vc;
+-        char *vc_keymap = NULL;
+-        char *vc_keymap_toggle = NULL;
+-        char *vc_font = NULL;
+-        char *vc_font_map = NULL;
+-        char *vc_font_unimap = NULL;
+-        int fd = -1;
++        _cleanup_free_ char
++                *vc_keymap = NULL, *vc_keymap_toggle = NULL,
++                *vc_font = NULL, *vc_font_map = NULL, *vc_font_unimap = NULL;
++        _cleanup_close_ int fd = -1;
+         bool utf8;
+         pid_t font_pid = 0, keymap_pid = 0;
+         bool font_copy = false;
+@@ -265,12 +263,12 @@ int main(int argc, char **argv) {
+         fd = open_terminal(vc, O_RDWR|O_CLOEXEC);
+         if (fd < 0) {
+                 log_error("Failed to open %s: %m", vc);
+-                goto finish;
++                return EXIT_FAILURE;
+         }
+ 
+         if (!is_vconsole(fd)) {
+                 log_error("Device %s is not a virtual console.", vc);
+-                goto finish;
++                return EXIT_FAILURE;
+         }
+ 
+         utf8 = is_locale_utf8();
+@@ -305,27 +303,27 @@ int main(int argc, char **argv) {
+         else
+                 disable_utf8(fd);
+ 
+-        r = EXIT_FAILURE;
+-        if (keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid) >= 0 &&
+-            font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid) >= 0)
+-                r = EXIT_SUCCESS;
+-
+-finish:
+-        if (keymap_pid > 0)
+-                wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid);
++        r = font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid);
++        if (r < 0) {
++                log_error("Failed to start " KBD_LOADKEYS ": %s", strerror(-r));
++                return EXIT_FAILURE;
++        }
+ 
+-        if (font_pid > 0) {
++        if (font_pid > 0)
+                 wait_for_terminate_and_warn(KBD_SETFONT, font_pid);
+-                if (font_copy)
+-                        font_copy_to_all_vcs(fd);
++
++        r = keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid);
++        if (r < 0) {
++                log_error("Failed to start " KBD_SETFONT ": %s", strerror(-r));
++                return EXIT_FAILURE;
+         }
+ 
+-        free(vc_keymap);
+-        free(vc_font);
+-        free(vc_font_map);
+-        free(vc_font_unimap);
++        if (keymap_pid > 0)
++                wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid);
+ 
+-        safe_close(fd);
++        /* Only copy the font when we started setfont successfully */
++        if (font_copy && font_pid > 0)
++                font_copy_to_all_vcs(fd);
+ 
+-        return r;
++        return EXIT_SUCCESS;
+ }
diff --git a/0015-coredumpctl-show-a-useful-error-on-permission-proble.patch b/0015-coredumpctl-show-a-useful-error-on-permission-proble.patch
new file mode 100644
index 0000000..9235cd3
--- /dev/null
+++ b/0015-coredumpctl-show-a-useful-error-on-permission-proble.patch
@@ -0,0 +1,33 @@
+From 34156047f4e34b0d3c621b0641ec3444f2b37f8d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 6 Jul 2014 18:35:46 -0400
+Subject: [PATCH] coredumpctl: show a useful error on permission problems
+
+(cherry picked from commit 31cda3d1759dee3e48c8ed4a949d99f041bdca1c)
+---
+ src/journal/coredumpctl.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/src/journal/coredumpctl.c b/src/journal/coredumpctl.c
+index 2158d73771..ecde54744d 100644
+--- a/src/journal/coredumpctl.c
++++ b/src/journal/coredumpctl.c
+@@ -595,7 +595,8 @@ static int save_core(sd_journal *j, int fd, char **path, bool *unlink_temp) {
+                 retrieve(data, len, "COREDUMP_FILENAME", &filename);
+ 
+         if (filename && access(filename, R_OK) < 0) {
+-                log_debug("File %s is not readable: %m", filename);
++                log_full(errno == ENOENT ? LOG_DEBUG : LOG_WARNING,
++                         "File %s is not readable: %m", filename);
+                 free(filename);
+                 filename = NULL;
+         }
+@@ -668,7 +669,7 @@ static int save_core(sd_journal *j, int fd, char **path, bool *unlink_temp) {
+ #endif
+                 } else {
+                         if (r == -ENOENT)
+-                                log_error("Coredump neither in journal file nor stored externally on disk.");
++                                log_error("Cannot retrieve coredump from journal nor disk.");
+                         else
+                                 log_error("Failed to retrieve COREDUMP field: %s", strerror(-r));
+                         goto error;
diff --git a/0016-networkd-netdev-add-missing-refs.patch b/0016-networkd-netdev-add-missing-refs.patch
new file mode 100644
index 0000000..c282e2b
--- /dev/null
+++ b/0016-networkd-netdev-add-missing-refs.patch
@@ -0,0 +1,68 @@
+From 65b8b293a6a8560fc1d6eecf7712f870d597965b Mon Sep 17 00:00:00 2001
+From: Tom Gundersen <teg at jklm.no>
+Date: Mon, 7 Jul 2014 14:18:26 +0200
+Subject: [PATCH] networkd: netdev - add missing refs
+
+Without this, the underlying device would get freed (and hence
+fail).
+
+(cherry picked from commit e04468dec04a968c523ee09da7d2163a1d1a5a15)
+---
+ src/network/networkd-macvlan.c | 2 ++
+ src/network/networkd-tunnel.c  | 2 ++
+ src/network/networkd-vlan.c    | 2 ++
+ src/network/networkd-vxlan.c   | 2 ++
+ 4 files changed, 8 insertions(+)
+
+diff --git a/src/network/networkd-macvlan.c b/src/network/networkd-macvlan.c
+index 9227144531..7c234264ac 100644
+--- a/src/network/networkd-macvlan.c
++++ b/src/network/networkd-macvlan.c
+@@ -150,6 +150,8 @@ int netdev_create_macvlan(NetDev *netdev, Link *link, sd_rtnl_message_handler_t
+                 return r;
+         }
+ 
++        link_ref(link);
++
+         log_debug_netdev(netdev, "creating netdev");
+ 
+         netdev->state = NETDEV_STATE_CREATING;
+diff --git a/src/network/networkd-tunnel.c b/src/network/networkd-tunnel.c
+index 7341487795..5a244f61b0 100644
+--- a/src/network/networkd-tunnel.c
++++ b/src/network/networkd-tunnel.c
+@@ -529,6 +529,8 @@ int netdev_create_tunnel(NetDev *netdev, Link *link, sd_rtnl_message_handler_t c
+                 return r;
+         }
+ 
++        link_ref(link);
++
+         log_debug_netdev(netdev, "Creating tunnel netdev: %s",
+                          netdev_kind_to_string(netdev->kind));
+ 
+diff --git a/src/network/networkd-vlan.c b/src/network/networkd-vlan.c
+index 1d812fdcaa..8727b9f103 100644
+--- a/src/network/networkd-vlan.c
++++ b/src/network/networkd-vlan.c
+@@ -139,6 +139,8 @@ int netdev_create_vlan(NetDev *netdev, Link *link, sd_rtnl_message_handler_t cal
+                 return r;
+         }
+ 
++        link_ref(link);
++
+         log_debug_netdev(netdev, "creating netdev");
+ 
+         netdev->state = NETDEV_STATE_CREATING;
+diff --git a/src/network/networkd-vxlan.c b/src/network/networkd-vxlan.c
+index 8832024ef1..160459450d 100644
+--- a/src/network/networkd-vxlan.c
++++ b/src/network/networkd-vxlan.c
+@@ -154,6 +154,8 @@ int netdev_create_vxlan(NetDev *netdev, Link *link, sd_rtnl_message_handler_t ca
+                 return r;
+         }
+ 
++        link_ref(link);
++
+         log_debug_netdev(netdev, "Creating vxlan netdev: %s",
+                          netdev_kind_to_string(netdev->kind));
+ 
diff --git a/0017-vconsole-setup-fix-inverted-error-messages.patch b/0017-vconsole-setup-fix-inverted-error-messages.patch
new file mode 100644
index 0000000..206529f
--- /dev/null
+++ b/0017-vconsole-setup-fix-inverted-error-messages.patch
@@ -0,0 +1,35 @@
+From 14c30a407a7599c96af2e9998c3038574005c368 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Mon, 7 Jul 2014 08:55:30 -0400
+Subject: [PATCH] vconsole-setup: fix inverted error messages
+
+Introduced in abee28c56d.
+
+Pointed-out-by: Werner Fink <werner at suse.de>
+(cherry picked from commit 3dde3f819732aaa66ab8e881305488adaea17641)
+---
+ src/vconsole/vconsole-setup.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c
+index 25d15afd5c..645b1e6994 100644
+--- a/src/vconsole/vconsole-setup.c
++++ b/src/vconsole/vconsole-setup.c
+@@ -305,7 +305,7 @@ int main(int argc, char **argv) {
+ 
+         r = font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid);
+         if (r < 0) {
+-                log_error("Failed to start " KBD_LOADKEYS ": %s", strerror(-r));
++                log_error("Failed to start " KBD_SETFONT ": %s", strerror(-r));
+                 return EXIT_FAILURE;
+         }
+ 
+@@ -314,7 +314,7 @@ int main(int argc, char **argv) {
+ 
+         r = keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid);
+         if (r < 0) {
+-                log_error("Failed to start " KBD_SETFONT ": %s", strerror(-r));
++                log_error("Failed to start " KBD_LOADKEYS ": %s", strerror(-r));
+                 return EXIT_FAILURE;
+         }
+ 
diff --git a/0018-udev-link_config-ignore-errors-due-to-missing-MAC-ad.patch b/0018-udev-link_config-ignore-errors-due-to-missing-MAC-ad.patch
new file mode 100644
index 0000000..8d1e277
--- /dev/null
+++ b/0018-udev-link_config-ignore-errors-due-to-missing-MAC-ad.patch
@@ -0,0 +1,40 @@
+From 0afeabd2abb0f86c17f04558d84e39528d3eb9ee Mon Sep 17 00:00:00 2001
+From: Tom Gundersen <teg at jklm.no>
+Date: Mon, 7 Jul 2014 14:50:16 +0200
+Subject: [PATCH] udev: link_config - ignore errors due to missing MAC address
+
+Otherwis, we get misleading error messages on links with MACs.
+
+Reported by Leonid Isaev.
+
+(cherry picked from commit a669ea9860900d5cdebbc4cb9aaea72db7e28a02)
+---
+ src/udev/net/link-config.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c
+index b8650a6c6c..5a45c53cc6 100644
+--- a/src/udev/net/link-config.c
++++ b/src/udev/net/link-config.c
+@@ -383,7 +383,9 @@ int link_config_apply(link_config_ctx *ctx, link_config *config, struct udev_dev
+                 case MACPOLICY_PERSISTENT:
+                         if (mac_is_random(device)) {
+                                 r = get_mac(device, false, &generated_mac);
+-                                if (r < 0)
++                                if (r == -ENOENT)
++                                        break;
++                                else if (r < 0)
+                                         return r;
+                                 mac = &generated_mac;
+                         }
+@@ -391,7 +393,9 @@ int link_config_apply(link_config_ctx *ctx, link_config *config, struct udev_dev
+                 case MACPOLICY_RANDOM:
+                         if (!mac_is_random(device)) {
+                                 r = get_mac(device, true, &generated_mac);
+-                                if (r < 0)
++                                if (r == -ENOENT)
++                                        break;
++                                else if (r < 0)
+                                         return r;
+                                 mac = &generated_mac;
+                         }
diff --git a/0019-util-consider-0x7F-a-control-chracter-which-it-is-DE.patch b/0019-util-consider-0x7F-a-control-chracter-which-it-is-DE.patch
new file mode 100644
index 0000000..4253b00
--- /dev/null
+++ b/0019-util-consider-0x7F-a-control-chracter-which-it-is-DE.patch
@@ -0,0 +1,53 @@
+From a71b7b7e52f312c7a9fc19154ac0d444e057e1d4 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 7 Jul 2014 11:47:10 +0200
+Subject: [PATCH] util: consider 0x7F a control chracter (which it is: DEL)
+
+Let's better be safe than sorry.
+
+(cherry picked from commit 3a8a916338d8446b938f3cf40f6aae0c611892e3)
+---
+ src/shared/util.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/src/shared/util.c b/src/shared/util.c
+index 3d875c72b3..d25ee6652f 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -1608,8 +1608,9 @@ int read_one_char(FILE *f, char *ret, usec_t t, bool *need_nl) {
+                         return -ETIMEDOUT;
+         }
+ 
++        errno = 0;
+         if (!fgets(line, sizeof(line), f))
+-                return -EIO;
++                return errno ? -errno : -EIO;
+ 
+         truncate_nl(line);
+ 
+@@ -5355,6 +5356,9 @@ bool string_is_safe(const char *p) {
+                 if (*t > 0 && *t < ' ')
+                         return false;
+ 
++                if (*t == 127)
++                        return false;
++
+                 if (strchr("\\\"\'", *t))
+                         return false;
+         }
+@@ -5371,10 +5375,14 @@ bool string_has_cc(const char *p) {
+ 
+         assert(p);
+ 
+-        for (t = p; *t; t++)
++        for (t = p; *t; t++) {
+                 if (*t > 0 && *t < ' ' && *t != '\t')
+                         return true;
+ 
++                if (*t == 127)
++                        return true;
++        }
++
+         return false;
+ }
+ 
diff --git a/0020-main-explain-our-etc-empty-check-a-bit-in-a-comment.patch b/0020-main-explain-our-etc-empty-check-a-bit-in-a-comment.patch
new file mode 100644
index 0000000..470c9b7
--- /dev/null
+++ b/0020-main-explain-our-etc-empty-check-a-bit-in-a-comment.patch
@@ -0,0 +1,29 @@
+From a821499e679a2d76c96ea6fda76e7847ba57a565 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 7 Jul 2014 11:47:46 +0200
+Subject: [PATCH] main: explain our /etc empty check a bit in a comment
+
+(cherry picked from commit 3408ba015aee3a88c91962c028738be757779519)
+---
+ src/core/main.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/src/core/main.c b/src/core/main.c
+index 1ca899998e..a732c6945a 100644
+--- a/src/core/main.c
++++ b/src/core/main.c
+@@ -1543,6 +1543,14 @@ int main(int argc, char *argv[]) {
+                 if (in_initrd())
+                         log_info("Running in initial RAM disk.");
+ 
++                /* Let's check whether /etc is already populated. We
++                 * don't actually really check for that, but use
++                 * /etc/machine-id as flag file. This allows container
++                 * managers and installers to provision a couple of
++                 * files already. If the container manager wants to
++                 * provision the machine ID itself it should pass
++                 * $container_uuid to PID 1.*/
++
+                 empty_etc = access("/etc/machine-id", F_OK) < 0;
+                 if (empty_etc)
+                         log_info("Running with unpopulated /etc.");
diff --git a/0021-man-add-missing-archs-to-ConditionArchitecture-descr.patch b/0021-man-add-missing-archs-to-ConditionArchitecture-descr.patch
new file mode 100644
index 0000000..84e01e0
--- /dev/null
+++ b/0021-man-add-missing-archs-to-ConditionArchitecture-descr.patch
@@ -0,0 +1,45 @@
+From 8606ef2e22777f167a528c41fc15371bfe934f45 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 7 Jul 2014 14:58:13 +0200
+Subject: [PATCH] man: add missing archs to ConditionArchitecture= description
+
+(cherry picked from commit f1e4d93f573087655ab1d0adb725102d5d2c1960)
+---
+ man/systemd.unit.xml | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index 960fb90dbd..be0873c344 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -931,7 +931,9 @@
+                                 <varname>x86</varname>,
+                                 <varname>x86-64</varname>,
+                                 <varname>ppc</varname>,
++                                <varname>ppc-le</varname>,
+                                 <varname>ppc64</varname>,
++                                <varname>ppc64-le</varname>,
+                                 <varname>ia64</varname>,
+                                 <varname>parisc</varname>,
+                                 <varname>parisc64</varname>,
+@@ -940,7 +942,9 @@
+                                 <varname>sparc</varname>,
+                                 <varname>sparc64</varname>,
+                                 <varname>mips</varname>,
++                                <varname>mips-le</varname>,
+                                 <varname>mips64</varname>,
++                                <varname>mips64-le</varname>,
+                                 <varname>alpha</varname>,
+                                 <varname>arm</varname>,
+                                 <varname>arm-be</varname>,
+@@ -948,7 +952,9 @@
+                                 <varname>arm64-be</varname>,
+                                 <varname>sh</varname>,
+                                 <varname>sh64</varname>,
+-                                <varname>m86k</varname> to test
++                                <varname>m86k</varname>,
++                                <varname>tilegx</varname>,
++                                <varname>cris</varname> to test
+                                 against a specific architecture. The
+                                 architecture is determined from the
+                                 information returned by
diff --git a/0022-man-chroot-jails-are-no-longer-detected-by-Condition.patch b/0022-man-chroot-jails-are-no-longer-detected-by-Condition.patch
new file mode 100644
index 0000000..1055098
--- /dev/null
+++ b/0022-man-chroot-jails-are-no-longer-detected-by-Condition.patch
@@ -0,0 +1,23 @@
+From 3fe1ea74a50b7815816157da93c60379e8328821 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 7 Jul 2014 14:58:36 +0200
+Subject: [PATCH] man: chroot jails are no longer detected by
+ ConditionVirtualization=
+
+(cherry picked from commit ac8ddf8c964f813464ef32cad1fcb7b61b692a01)
+---
+ man/systemd.unit.xml | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index be0873c344..cd3279c192 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -990,7 +990,6 @@
+                                 <varname>oracle</varname>,
+                                 <varname>xen</varname>,
+                                 <varname>bochs</varname>,
+-                                <varname>chroot</varname>,
+                                 <varname>uml</varname>,
+                                 <varname>openvz</varname>,
+                                 <varname>lxc</varname>,
diff --git a/0023-architecture-add-string-table-entries-for-mips-le-ar.patch b/0023-architecture-add-string-table-entries-for-mips-le-ar.patch
new file mode 100644
index 0000000..1c69cae
--- /dev/null
+++ b/0023-architecture-add-string-table-entries-for-mips-le-ar.patch
@@ -0,0 +1,25 @@
+From 384bcccd9d6557a7543a21a44fce57ca06efcfdd Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 7 Jul 2014 14:59:06 +0200
+Subject: [PATCH] architecture: add string table entries for mips-le archs
+ which were missing
+
+(cherry picked from commit 037c26d0aeb750ca9c8d605884ea1db7baecfea8)
+---
+ src/shared/architecture.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/shared/architecture.c b/src/shared/architecture.c
+index 6cdca4e7e5..dc45f3589d 100644
+--- a/src/shared/architecture.c
++++ b/src/shared/architecture.c
+@@ -153,7 +153,9 @@ static const char *const architecture_table[_ARCHITECTURE_MAX] = {
+         [ARCHITECTURE_SPARC] = "sparc",
+         [ARCHITECTURE_SPARC64] = "sparc64",
+         [ARCHITECTURE_MIPS] = "mips",
++        [ARCHITECTURE_MIPS_LE] = "mips-le",
+         [ARCHITECTURE_MIPS64] = "mips64",
++        [ARCHITECTURE_MIPS64_LE] = "mips64-le",
+         [ARCHITECTURE_ALPHA] = "alpha",
+         [ARCHITECTURE_ARM] = "arm",
+         [ARCHITECTURE_ARM_BE] = "arm-be",
diff --git a/0024-service-flush-status-text-and-errno-values-each-time.patch b/0024-service-flush-status-text-and-errno-values-each-time.patch
new file mode 100644
index 0000000..c695719
--- /dev/null
+++ b/0024-service-flush-status-text-and-errno-values-each-time.patch
@@ -0,0 +1,27 @@
+From 853896f09d35f8c2db3bf25376d1c3ab240287ed Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 7 Jul 2014 17:33:46 +0200
+Subject: [PATCH] service: flush status text and errno values each time a
+ service is started
+
+We shouldn't show status texts from previous service starts
+
+(cherry picked from commit 8cfdb077b8e3da1c47fc1d735d051f21f33144c1)
+---
+ src/core/service.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index 0b19767d9e..2d8aa01445 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -1699,6 +1699,9 @@ static int service_start(Unit *u) {
+         s->main_pid_alien = false;
+         s->forbid_restart = false;
+ 
++        free(s->status_text);
++        s->status_text = NULL;
++
+         service_enter_start_pre(s);
+         return 0;
+ }
diff --git a/0025-base-filesystem.c-terminate-string-array-elements-wi.patch b/0025-base-filesystem.c-terminate-string-array-elements-wi.patch
new file mode 100644
index 0000000..3e90355
--- /dev/null
+++ b/0025-base-filesystem.c-terminate-string-array-elements-wi.patch
@@ -0,0 +1,36 @@
+From 313b57468fae9e3d4b762326c46e82afe6ec1c36 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Mon, 7 Jul 2014 17:45:53 +0200
+Subject: [PATCH] base-filesystem.c: terminate string array elements with \0
+
+NULSTR_FOREACH() looks for a terminating zero and the element also needs
+one.
+
+(cherry picked from commit 30d7c9c472bd7be1b6a09d3bd5afd939988de990)
+---
+ src/shared/base-filesystem.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/src/shared/base-filesystem.c b/src/shared/base-filesystem.c
+index daaeaca515..addd26ca39 100644
+--- a/src/shared/base-filesystem.c
++++ b/src/shared/base-filesystem.c
+@@ -42,12 +42,13 @@ typedef struct BaseFilesystem {
+ } BaseFilesystem;
+ 
+ static const BaseFilesystem table[] = {
+-        { "bin",      0, "usr/bin",                             NULL },
+-        { "lib",      0, "usr/lib",                             NULL },
+-        { "root",  0755, NULL,                                  NULL },
+-        { "sbin",     0, "usr/sbin",                            NULL },
++        { "bin",      0, "usr/bin\0",                  NULL },
++        { "lib",      0, "usr/lib\0",                  NULL },
++        { "root",  0755, NULL,                         NULL },
++        { "sbin",     0, "usr/sbin\0",                 NULL },
+ #if defined(__i386__) || defined(__x86_64__)
+-        { "lib64",    0, "usr/lib/x86_64-linux-gnu\0usr/lib64", "ld-linux-x86-64.so.2" },
++        { "lib64",    0, "usr/lib/x86_64-linux-gnu\0"
++                         "usr/lib64\0",                "ld-linux-x86-64.so.2" },
+ #endif
+ };
+ 
diff --git a/0026-man-drop-references-to-the-priviliged-command-line-o.patch b/0026-man-drop-references-to-the-priviliged-command-line-o.patch
new file mode 100644
index 0000000..7db254d
--- /dev/null
+++ b/0026-man-drop-references-to-the-priviliged-command-line-o.patch
@@ -0,0 +1,50 @@
+From 13191f413a4dbff98094fe407cb592ae9723f956 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 7 Jul 2014 18:45:07 +0200
+Subject: [PATCH] man: drop references to the --priviliged command line option
+ which has been removed a while back
+
+(cherry picked from commit ed3e4a3fd96891b5e7015723978e78cd21efd4fe)
+---
+ man/hostnamectl.xml | 8 --------
+ man/localectl.xml   | 8 --------
+ 2 files changed, 16 deletions(-)
+
+diff --git a/man/hostnamectl.xml b/man/hostnamectl.xml
+index 71973fde91..4e456eb8f9 100644
+--- a/man/hostnamectl.xml
++++ b/man/hostnamectl.xml
+@@ -102,14 +102,6 @@
+                         </varlistentry>
+ 
+                         <varlistentry>
+-                                <term><option>-P</option></term>
+-                                <term><option>--privileged</option></term>
+-
+-                                <listitem><para>Acquire privileges via PolicyKit
+-                                before executing the operation.</para></listitem>
+-                        </varlistentry>
+-
+-                        <varlistentry>
+                                 <term><option>--static</option></term>
+                                 <term><option>--transient</option></term>
+                                 <term><option>--pretty</option></term>
+diff --git a/man/localectl.xml b/man/localectl.xml
+index c2e79a2d71..9c32c794aa 100644
+--- a/man/localectl.xml
++++ b/man/localectl.xml
+@@ -90,14 +90,6 @@
+                         </varlistentry>
+ 
+                         <varlistentry>
+-                                <term><option>-P</option></term>
+-                                <term><option>--privileged</option></term>
+-
+-                                <listitem><para>Acquire privileges via PolicyKit
+-                                before executing the operation.</para></listitem>
+-                        </varlistentry>
+-
+-                        <varlistentry>
+                                 <term><option>--no-convert</option></term>
+ 
+                                 <listitem><para>If
diff --git a/0027-fstab-generator-add-comma-when-removed-option-is-in-.patch b/0027-fstab-generator-add-comma-when-removed-option-is-in-.patch
new file mode 100644
index 0000000..c3ceaa7
--- /dev/null
+++ b/0027-fstab-generator-add-comma-when-removed-option-is-in-.patch
@@ -0,0 +1,27 @@
+From 06d46a47eb13907a597a0e67cd8142321a81494e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Mon, 7 Jul 2014 16:10:38 -0400
+Subject: [PATCH] fstab-generator: add comma when removed option is in the
+ middle
+
+xxx,x-systemd.default-timeout=y,zzz was filtered to xxxzzz,
+but should be xxx,zzz, of course.
+
+(cherry picked from commit 36a259d22c450fbf3f696df0161db50275a98667)
+---
+ src/shared/generator.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/generator.c b/src/shared/generator.c
+index 5d5b6a0a61..2f9e5954c2 100644
+--- a/src/shared/generator.c
++++ b/src/shared/generator.c
+@@ -125,7 +125,7 @@ int generator_write_timeouts(const char *dir, const char *what, const char *wher
+                 char *prefix, *postfix;
+ 
+                 prefix = strndupa(opts, start - opts - (start != opts));
+-                postfix = timeout + len + (timeout[len] != '\0');
++                postfix = timeout + len + (start == opts && timeout[len] != '\0');
+                 *filtered = strjoin(prefix, *postfix ? postfix : NULL, NULL);
+                 if (!*filtered)
+                         return log_oom();
diff --git a/0028-dropin-add-format-attribute-and-fix-a-wrong-caller.patch b/0028-dropin-add-format-attribute-and-fix-a-wrong-caller.patch
new file mode 100644
index 0000000..734825a
--- /dev/null
+++ b/0028-dropin-add-format-attribute-and-fix-a-wrong-caller.patch
@@ -0,0 +1,43 @@
+From 5cec192e0c86a24bad9c3b24eca7d655470382df Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen <phomes at gmail.com>
+Date: Mon, 7 Jul 2014 21:40:00 +0200
+Subject: [PATCH] dropin: add format attribute and fix a wrong caller
+
+(cherry picked from commit f5a4b0d3534bb13ef734a857647ab04be236c6f3)
+---
+ src/shared/dropin.h    | 4 +++-
+ src/shared/generator.c | 2 +-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/src/shared/dropin.h b/src/shared/dropin.h
+index 27a2b2953f..9c9742d0e4 100644
+--- a/src/shared/dropin.h
++++ b/src/shared/dropin.h
+@@ -21,6 +21,8 @@
+   along with systemd; If not, see <http://www.gnu.org/licenses/>.
+ ***/
+ 
++#include "macro.h"
++
+ int drop_in_file(const char *dir, const char *unit, unsigned level,
+                  const char *name, char **_p, char **_q);
+ 
+@@ -28,4 +30,4 @@ int write_drop_in(const char *dir, const char *unit, unsigned level,
+                   const char *name, const char *data);
+ 
+ int write_drop_in_format(const char *dir, const char *unit, unsigned level,
+-                         const char *name, const char *format, ...);
++                         const char *name, const char *format, ...) _printf_(5, 6);
+diff --git a/src/shared/generator.c b/src/shared/generator.c
+index 2f9e5954c2..5d4cb5d54f 100644
+--- a/src/shared/generator.c
++++ b/src/shared/generator.c
+@@ -148,7 +148,7 @@ int generator_write_timeouts(const char *dir, const char *what, const char *wher
+ 
+         return write_drop_in_format(dir, unit, 50, "device-timeout",
+                                     "# Automatically generated by %s\n\n"
+-                                    "[Unit]\nJobTimeoutSec=%u",
++                                    "[Unit]\nJobTimeoutSec=%lu",
+                                     program_invocation_short_name,
+                                     u / USEC_PER_SEC);
+ }
diff --git a/0029-add-new-systemd-escape-tool.patch b/0029-add-new-systemd-escape-tool.patch
new file mode 100644
index 0000000..89da584
--- /dev/null
+++ b/0029-add-new-systemd-escape-tool.patch
@@ -0,0 +1,92 @@
+From af50ff78b93b683687464e45dee14033f494fcbe Mon Sep 17 00:00:00 2001
+From: Michael Biebl <biebl at debian.org>
+Date: Wed, 4 Jun 2014 01:57:11 +0200
+Subject: [PATCH] add new systemd-escape tool
+
+(cherry picked from commit b1a5a9989ada9b3738d71605f051ff393d41f2ff)
+---
+ Makefile.am         | 10 +++++++++-
+ src/escape/escape.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 55 insertions(+), 1 deletion(-)
+ create mode 100644 src/escape/escape.c
+
+diff --git a/Makefile.am b/Makefile.am
+index e238cdeebf..c856d822de 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -347,7 +347,8 @@ bin_PROGRAMS = \
+ 	systemd-delta \
+ 	systemd-analyze \
+ 	systemd-run \
+-	systemd-path
++	systemd-path \
++	systemd-escape
+ 
+ dist_bin_SCRIPTS = \
+ 	src/kernel-install/kernel-install
+@@ -2079,6 +2080,13 @@ systemd_cgroups_agent_LDADD = \
+ 	libsystemd-shared.la
+ 
+ # ------------------------------------------------------------------------------
++systemd_escape_SOURCES = \
++	src/escape/escape.c
++
++systemd_escape_LDADD = \
++	libsystemd-shared.la
++
++# -----------------------------------------------------------------------------
+ systemctl_SOURCES = \
+ 	src/systemctl/systemctl.c
+ 
+diff --git a/src/escape/escape.c b/src/escape/escape.c
+new file mode 100644
+index 0000000000..0a59a05e28
+--- /dev/null
++++ b/src/escape/escape.c
+@@ -0,0 +1,46 @@
++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
++
++/***
++  This file is part of systemd.
++
++  Copyright 2014 Michael Biebl
++
++  systemd is free software; you can redistribute it and/or modify it
++  under the terms of the GNU Lesser General Public License as published by
++  the Free Software Foundation; either version 2.1 of the License, or
++  (at your option) any later version.
++
++  systemd is distributed in the hope that it will be useful, but
++  WITHOUT ANY WARRANTY; without even the implied warranty of
++  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++  Lesser General Public License for more details.
++
++  You should have received a copy of the GNU Lesser General Public License
++  along with systemd; If not, see <http://www.gnu.org/licenses/>.
++***/
++
++#include <stdio.h>
++#include <stdlib.h>
++
++#include "log.h"
++#include "unit-name.h"
++
++int main(int argc, char *argv[]) {
++        char *escaped_name = NULL;
++
++        if (argc != 2) {
++                log_error("This program requires on argument.");
++                return EXIT_FAILURE;
++        }
++
++        escaped_name = unit_name_escape(argv[1]);
++
++        if (!escaped_name) {
++                log_error("Failed to escape name.");
++                return EXIT_FAILURE;
++        }
++
++        printf("%s", escaped_name);
++
++        return EXIT_SUCCESS;
++}
diff --git a/0030-escape-beef-up-new-systemd-escape-tool.patch b/0030-escape-beef-up-new-systemd-escape-tool.patch
new file mode 100644
index 0000000..e50b64b
--- /dev/null
+++ b/0030-escape-beef-up-new-systemd-escape-tool.patch
@@ -0,0 +1,274 @@
+From ee228789816679b6fff19c7c2f637eb0a1a3fcc4 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 7 Jul 2014 22:23:00 +0200
+Subject: [PATCH] escape: beef up new systemd-escape tool
+
+Add various options for making it easy unescape, or mangle, or format as
+template instance or append a suffix.
+
+(cherry picked from commit a1948c7bfeb87b54bc7715a44490c01593ee6e23)
+
+Conflicts:
+	.gitignore
+---
+ .gitignore          |   1 +
+ src/escape/Makefile |   1 +
+ src/escape/escape.c | 215 +++++++++++++++++++++++++++++++++++++++++++++++++---
+ 3 files changed, 206 insertions(+), 11 deletions(-)
+ create mode 120000 src/escape/Makefile
+
+diff --git a/.gitignore b/.gitignore
+index 9523ea027e..e08aa52aee 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -64,6 +64,7 @@
+ /systemd-delta
+ /systemd-detect-virt
+ /systemd-efi-boot-generator
++/systemd-escape
+ /systemd-fsck
+ /systemd-fstab-generator
+ /systemd-getty-generator
+diff --git a/src/escape/Makefile b/src/escape/Makefile
+new file mode 120000
+index 0000000000..d0b0e8e008
+--- /dev/null
++++ b/src/escape/Makefile
+@@ -0,0 +1 @@
++../Makefile
+\ No newline at end of file
+diff --git a/src/escape/escape.c b/src/escape/escape.c
+index 0a59a05e28..ae0c183eca 100644
+--- a/src/escape/escape.c
++++ b/src/escape/escape.c
+@@ -21,26 +21,219 @@
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <getopt.h>
+ 
+ #include "log.h"
+ #include "unit-name.h"
++#include "build.h"
++#include "strv.h"
+ 
+-int main(int argc, char *argv[]) {
+-        char *escaped_name = NULL;
++static enum {
++        ACTION_ESCAPE,
++        ACTION_UNESCAPE,
++        ACTION_MANGLE
++} arg_action = ACTION_ESCAPE;
++static const char *arg_suffix = NULL;
++static const char *arg_template = NULL;
++static bool arg_path = false;
++
++static int help(void) {
++
++        printf("%s [OPTIONS...] [NAME...]\n\n"
++               "Show system and user paths.\n\n"
++               "  -h --help               Show this help\n"
++               "     --version            Show package version\n"
++               "     --suffix=SUFFIX      Unit suffix to append to escaped strings\n"
++               "     --template=TEMPLATE  Insert strings as instance into template\n"
++               "  -u --unescape           Unescape strings\n"
++               "  -m --mangle             Mangle strings\n"
++               "  -p --path               When escaping/unescaping assume the string is a path\n",
++               program_invocation_short_name);
++
++        return 0;
++}
++
++static int parse_argv(int argc, char *argv[]) {
++
++        enum {
++                ARG_VERSION = 0x100,
++                ARG_SUFFIX,
++                ARG_TEMPLATE
++        };
++
++        static const struct option options[] = {
++                { "help",      no_argument,       NULL, 'h'           },
++                { "version",   no_argument,       NULL, ARG_VERSION   },
++                { "suffix",    required_argument, NULL, ARG_SUFFIX    },
++                { "template",  required_argument, NULL, ARG_TEMPLATE  },
++                { "unescape",  no_argument,       NULL, 'u'           },
++                { "mangle",    no_argument,       NULL, 'm'           },
++                { "path",      no_argument,       NULL, 'p'           },
++                {}
++        };
++
++        int c;
++
++        assert(argc >= 0);
++        assert(argv);
++
++        while ((c = getopt_long(argc, argv, "hump", options, NULL)) >= 0) {
++
++                switch (c) {
++
++                case 'h':
++                        return help();
++
++                case ARG_VERSION:
++                        puts(PACKAGE_STRING);
++                        puts(SYSTEMD_FEATURES);
++                        return 0;
++
++                case ARG_SUFFIX:
++
++                        if (unit_type_from_string(optarg) < 0) {
++                                log_error("Invalid unit suffix type %s.", optarg);
++                                return -EINVAL;
++                        }
++
++                        arg_suffix = optarg;
++                        break;
++
++                case ARG_TEMPLATE:
++
++                        if (!unit_name_is_valid(optarg, true) || !unit_name_is_template(optarg)) {
++                                log_error("Template name %s is not valid.", optarg);
++                                return -EINVAL;
++                        }
++
++                        arg_template = optarg;
++                        break;
++
++                case 'u':
++                        arg_action = ACTION_UNESCAPE;
++                        break;
++
++                case 'm':
++                        arg_action = ACTION_MANGLE;
++                        break;
++
++                case 'p':
++                        arg_path = true;
++                        break;
++
++                case '?':
++                        return -EINVAL;
++
++                default:
++                        assert_not_reached("Unhandled option");
++                }
++        }
+ 
+-        if (argc != 2) {
+-                log_error("This program requires on argument.");
+-                return EXIT_FAILURE;
++        if (optind >= argc) {
++                log_error("Not enough arguments.");
++                return -EINVAL;
+         }
+ 
+-        escaped_name = unit_name_escape(argv[1]);
++        if (arg_template && arg_suffix) {
++                log_error("--suffix= and --template= may not be combined.");
++                return -EINVAL;
++        }
++
++        if ((arg_template || arg_suffix) && arg_action != ACTION_ESCAPE) {
++                log_error("--suffix= and --template= are not compatible with --unescape or --mangle.");
++                return -EINVAL;
++        }
++
++        if (arg_path && !IN_SET(arg_action, ACTION_ESCAPE, ACTION_UNESCAPE)) {
++                log_error("--path may not be combined with --mangle.");
++                return -EINVAL;
++        }
++
++        return 1;
++}
++
++int main(int argc, char *argv[]) {
++        char **i;
++        int r;
++
++        log_parse_environment();
++        log_open();
++
++        r = parse_argv(argc, argv);
++        if (r <= 0)
++                goto finish;
++
++        STRV_FOREACH(i, argv + optind) {
++                _cleanup_free_ char *e = NULL;
++
++                switch (arg_action) {
++
++                case ACTION_ESCAPE:
++                        if (arg_path)
++                                e = unit_name_path_escape(*i);
++                        else
++                                e = unit_name_escape(*i);
++
++                        if (!e) {
++                                r = log_oom();
++                                goto finish;
++                        }
++
++                        if (arg_template) {
++                                char *x;
++
++                                x = unit_name_replace_instance(arg_template, e);
++                                if (!x) {
++                                        r = log_oom();
++                                        goto finish;
++                                }
++
++                                free(e);
++                                e = x;
++                        } else if (arg_suffix) {
++                                char *x;
++
++                                x = strjoin(e, ".", arg_suffix, NULL);
++                                if (!x) {
++                                        r = log_oom();
++                                        goto finish;
++                                }
++
++                                free(e);
++                                e = x;
++                        }
++
++                        break;
++
++                case ACTION_UNESCAPE:
++                        if (arg_path)
++                                e = unit_name_path_unescape(*i);
++                        else
++                                e = unit_name_unescape(*i);
++
++                        if (!e) {
++                                r = log_oom();
++                                goto finish;
++                        }
++                        break;
++
++                case ACTION_MANGLE:
++                        e = unit_name_mangle(*i, MANGLE_NOGLOB);
++                        if (!e) {
++                                r = log_oom();
++                                goto finish;
++                        }
++                        break;
++                }
++
++                if (i != argv+optind)
++                        fputc(' ', stdout);
+ 
+-        if (!escaped_name) {
+-                log_error("Failed to escape name.");
+-                return EXIT_FAILURE;
++                fputs(e, stdout);
+         }
+ 
+-        printf("%s", escaped_name);
++        fputc('\n', stdout);
+ 
+-        return EXIT_SUCCESS;
++finish:
++        return r ? EXIT_FAILURE : EXIT_SUCCESS;
+ }
diff --git a/0031-man-document-systemd-escape-1.patch b/0031-man-document-systemd-escape-1.patch
new file mode 100644
index 0000000..da4c358
--- /dev/null
+++ b/0031-man-document-systemd-escape-1.patch
@@ -0,0 +1,234 @@
+From 9045c9cedb155255e4dd55b988a39093364efbac Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 7 Jul 2014 22:48:25 +0200
+Subject: [PATCH] man: document systemd-escape(1)
+
+(cherry picked from commit 9869e75929acd9377aa460074334d8523cf8e822)
+
+Conflicts:
+	Makefile-man.am
+---
+ Makefile-man.am        |   2 +
+ man/systemd-escape.xml | 193 +++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 195 insertions(+)
+ create mode 100644 man/systemd-escape.xml
+
+diff --git a/Makefile-man.am b/Makefile-man.am
+index 5c289dda2a..4238c21710 100644
+--- a/Makefile-man.am
++++ b/Makefile-man.am
+@@ -63,6 +63,7 @@ MANPAGES += \
+ 	man/systemd-delta.1 \
+ 	man/systemd-detect-virt.1 \
+ 	man/systemd-efi-boot-generator.8 \
++	man/systemd-escape.1 \
+ 	man/systemd-fsck at .service.8 \
+ 	man/systemd-fstab-generator.8 \
+ 	man/systemd-getty-generator.8 \
+@@ -1600,6 +1601,7 @@ EXTRA_DIST += \
+ 	man/systemd-delta.xml \
+ 	man/systemd-detect-virt.xml \
+ 	man/systemd-efi-boot-generator.xml \
++	man/systemd-escape.xml \
+ 	man/systemd-fsck at .service.xml \
+ 	man/systemd-fstab-generator.xml \
+ 	man/systemd-getty-generator.xml \
+diff --git a/man/systemd-escape.xml b/man/systemd-escape.xml
+new file mode 100644
+index 0000000000..b2a4a9ce8c
+--- /dev/null
++++ b/man/systemd-escape.xml
+@@ -0,0 +1,193 @@
++<?xml version='1.0'?> <!--*-nxml-*-->
++<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
++        "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
++
++<!--
++  This file is part of systemd.
++
++  Copyright 2014 Lennart Poettering
++
++  systemd is free software; you can redistribute it and/or modify it
++  under the terms of the GNU Lesser General Public License as published by
++  the Free Software Foundation; either version 2.1 of the License, or
++  (at your option) any later version.
++
++  systemd is distributed in the hope that it will be useful, but
++  WITHOUT ANY WARRANTY; without even the implied warranty of
++  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++  Lesser General Public License for more details.
++
++  You should have received a copy of the GNU Lesser General Public License
++  along with systemd; If not, see <http://www.gnu.org/licenses/>.
++-->
++
++<refentry id="systemd-escape"
++          xmlns:xi="http://www.w3.org/2001/XInclude">
++
++        <refentryinfo>
++                <title>systemd-escape</title>
++                <productname>systemd</productname>
++
++                <authorgroup>
++                        <author>
++                                <contrib>Developer</contrib>
++                                <firstname>Lennart</firstname>
++                                <surname>Poettering</surname>
++                                <email>lennart at poettering.net</email>
++                        </author>
++                </authorgroup>
++        </refentryinfo>
++
++        <refmeta>
++                <refentrytitle>systemd-escape</refentrytitle>
++                <manvolnum>1</manvolnum>
++        </refmeta>
++
++        <refnamediv>
++                <refname>systemd-escape</refname>
++                <refpurpose>Escape strings for usage in system unit names</refpurpose>
++        </refnamediv>
++
++        <refsynopsisdiv>
++                <cmdsynopsis>
++                        <command>systemd-escape <arg choice="opt" rep="repeat">OPTIONS</arg> <arg choice="opt" rep="repeat">STRING</arg></command>
++                </cmdsynopsis>
++        </refsynopsisdiv>
++
++        <refsect1>
++                <title>Description</title>
++
++                <para><command>systemd-escape</command> may be used to
++                escape strings for inclusion in systemd unit
++                names. The command may be used to escape and to undo
++                escaping of strings.</para>
++
++                <para>The command takes any number of strings on the
++                command line, and will process them individually, one
++                after the other. It will output them separated by
++                spaces to stdout.</para>
++
++                <para>By default this command will escape the strings
++                passed, unless <option>--unescape</option> is passed
++                which results in the inverse operation being
++                applied. If <option>--mangle</option> a special mode
++                of escaping is applied instead, which assumes a string
++                to be already escaped but will escape everything that
++                appears obviously non-escaped.</para>
++        </refsect1>
++
++        <refsect1>
++                <title>Options</title>
++
++                <para>The following options are understood:</para>
++
++                <variablelist>
++                        <varlistentry>
++                                <term><option>--suffix=</option></term>
++
++                                <listitem><para>Appends the specified
++                                unit type suffix to the escaped
++                                string. Takes one of the unit types
++                                supported by systemd, such as
++                                <literal>.service</literal> or
++                                <literal>.mount</literal>. May not be
++                                used in conjunction with
++                                <option>--template=</option>,
++                                <option>--unescape</option> or
++                                <option>--mangle</option>.</para></listitem>
++                        </varlistentry>
++
++                        <varlistentry>
++                                <term><option>--template=</option></term>
++
++                                <listitem><para>Inserts the escaped
++                                strings in a unit name template. Takes
++                                a unit name template such as
++                                <filename>foobar at .service</filename>
++                                May not be used in conjunction with
++                                <option>--suffix=</option>,
++                                <option>--unescape</option> or
++                                <option>--mangle</option>.</para></listitem>
++                        </varlistentry>
++
++                        <varlistentry>
++                                <term><option>--path</option></term>
++                                <term><option>-p</option></term>
++
++                                <listitem><para>When escaping or
++                                unescaping a string, assume it refers
++                                to a file system path. This enables
++                                special processing of the initial
++                                <literal>/</literal> of the
++                                path.</para></listitem>
++                        </varlistentry>
++
++                        <varlistentry>
++                                <term><option>--unescape</option></term>
++
++                                <listitem><para>Instead of escaping
++                                the specified strings, undo the
++                                escaping, reversing the operation. May
++                                not be used in conjunction with
++                                <option>--suffix=</option>,
++                                <option>--template=</option> or
++                                <option>--mangle</option>.</para></listitem>
++                        </varlistentry>
++
++                        <varlistentry>
++                                <term><option>--mangle</option></term>
++
++                                <listitem><para>Like
++                                <option>--escape</option>, but only
++                                escape characters that are obviously
++                                not escaped yet, and possibly
++                                automatically append an appropriate
++                                unit type suffix to the string. May
++                                not be used in conjunction with
++                                <option>--suffix=</option>,
++                                <option>--template=</option> or
++                                <option>--unescape</option>.</para></listitem>
++                        </varlistentry>
++
++                        <xi:include href="standard-options.xml" xpointer="help" />
++                        <xi:include href="standard-options.xml" xpointer="version" />
++                </variablelist>
++
++        </refsect1>
++
++        <refsect1>
++                <title>Examples</title>
++
++                <para>Escape a single string:</para>
++                <programlisting>$ systemd-escape 'Hallöchen, Meister'
++Hall\xc3\xb6chen\x2c\x20Meister</programlisting>
++
++                <para>To undo escaping on a single string:</para>
++                <programlisting>$ systemd-escape -u 'Hall\xc3\xb6chen\x2c\x20Meister'
++Hallöchen, Meister</programlisting>
++
++                <para>To generate the mount unit for a path:</para>
++                <programlisting>$ systemd-escape -p --suffix=mount "/tmp//waldi/foobar/"
++tmp-waldi-foobar.mount</programlisting>
++
++                <para>To generate instance names of three strings</para>
++                <programlisting>$ systemd-escape --template=systemd-nspawn at .service 'My Container 1' 'containerb' 'container/III'
++systemd-nspawn at My\x20Container\x201.service systemd-nspawn at containerb.service systemd-nspawn at container-III.service</programlisting>
++        </refsect1>
++
++        <refsect1>
++                <title>Exit status</title>
++
++                <para>On success, 0 is returned, a non-zero failure
++                code otherwise.</para>
++        </refsect1>
++
++        <refsect1>
++                <title>See Also</title>
++                <para>
++                        <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
++                        <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
++                </para>
++        </refsect1>
++
++</refentry>
diff --git a/0032-shared-fix-format-string-for-usec_t-type.patch b/0032-shared-fix-format-string-for-usec_t-type.patch
new file mode 100644
index 0000000..4d95808
--- /dev/null
+++ b/0032-shared-fix-format-string-for-usec_t-type.patch
@@ -0,0 +1,23 @@
+From 539fc6acb23fb2928a2443d1e27db95d7084d41a Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 7 Jul 2014 22:49:59 +0200
+Subject: [PATCH] shared: fix format string for usec_t type
+
+(cherry picked from commit de48d5ab62e452b596d6f2762422d0ab32c4d313)
+---
+ src/shared/generator.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/generator.c b/src/shared/generator.c
+index 5d4cb5d54f..414470be1c 100644
+--- a/src/shared/generator.c
++++ b/src/shared/generator.c
+@@ -148,7 +148,7 @@ int generator_write_timeouts(const char *dir, const char *what, const char *wher
+ 
+         return write_drop_in_format(dir, unit, 50, "device-timeout",
+                                     "# Automatically generated by %s\n\n"
+-                                    "[Unit]\nJobTimeoutSec=%lu",
++                                    "[Unit]\nJobTimeoutSec=" USEC_FMT,
+                                     program_invocation_short_name,
+                                     u / USEC_PER_SEC);
+ }
diff --git a/0033-logind-allow-switching-to-unused-VTs-via-SwitchTo.patch b/0033-logind-allow-switching-to-unused-VTs-via-SwitchTo.patch
new file mode 100644
index 0000000..f78bf4f
--- /dev/null
+++ b/0033-logind-allow-switching-to-unused-VTs-via-SwitchTo.patch
@@ -0,0 +1,35 @@
+From a1a46db86071388fcfeb35d06147f673c6c58c6d Mon Sep 17 00:00:00 2001
+From: David Herrmann <dh.herrmann at gmail.com>
+Date: Tue, 8 Jul 2014 12:56:55 +0200
+Subject: [PATCH] logind: allow switching to unused VTs via SwitchTo()
+
+If compositors use the new SwitchTo() logic to map F1-F12, we should allow
+them to switch to unregistered VTs, too. Otherwise, the auto-spawn logic
+of gettys won't trigger.
+
+Reported-by: Jasper St. Pierre <jstpierre at mecheye.net>
+Signed-off-by: David Herrmann <dh.herrmann at gmail.com>
+(cherry picked from commit 154034270c4643b7cfe61c0be1676d78bb1b7b07)
+---
+ src/login/logind-seat.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/src/login/logind-seat.c b/src/login/logind-seat.c
+index 3114de84de..9992195151 100644
+--- a/src/login/logind-seat.c
++++ b/src/login/logind-seat.c
+@@ -275,8 +275,13 @@ int seat_switch_to(Seat *s, unsigned int num) {
+         if (!num)
+                 return -EINVAL;
+ 
+-        if (num >= s->position_count || !s->positions[num])
++        if (num >= s->position_count || !s->positions[num]) {
++                /* allow switching to unused VTs to trigger auto-activate */
++                if (seat_has_vts(s) && num < 64)
++                        return chvt(num);
++
+                 return -EINVAL;
++        }
+ 
+         return session_activate(s->positions[num]);
+ }
diff --git a/0034-systemctl-fix-visual-alignment-for-lines-prefixed-wi.patch b/0034-systemctl-fix-visual-alignment-for-lines-prefixed-wi.patch
new file mode 100644
index 0000000..e90e53b
--- /dev/null
+++ b/0034-systemctl-fix-visual-alignment-for-lines-prefixed-wi.patch
@@ -0,0 +1,24 @@
+From bcb94736047823194fcfc98e23c4ed4e392eb3d3 Mon Sep 17 00:00:00 2001
+From: Michal Schmidt <mschmidt at redhat.com>
+Date: Tue, 8 Jul 2014 15:17:36 +0200
+Subject: [PATCH] systemctl: fix visual alignment for lines prefixed with color
+ dots
+
+(cherry picked from commit b7bbdabeb4a5b66fdbcdfed0d097109cfb39c43e)
+---
+ src/systemctl/systemctl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index 03720f411d..8086e1e296 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -456,7 +456,7 @@ static int output_units_list(const UnitInfo *unit_infos, unsigned c) {
+                 }
+ 
+                 if (circle_len > 0)
+-                        printf("%s%s%s", on_circle, circle ? draw_special_char(DRAW_BLACK_CIRCLE) : "  ", off_circle);
++                        printf("%s%s%s ", on_circle, circle ? draw_special_char(DRAW_BLACK_CIRCLE) : " ", off_circle);
+ 
+                 printf("%s%-*s%s %s%-*s%s %s%-*s %-*s%s %-*s",
+                        on_active, id_len, id, off_active,
diff --git a/0035-accelerometer-Don-t-wait-for-new-data-from-the-senso.patch b/0035-accelerometer-Don-t-wait-for-new-data-from-the-senso.patch
new file mode 100644
index 0000000..5d02ff3
--- /dev/null
+++ b/0035-accelerometer-Don-t-wait-for-new-data-from-the-senso.patch
@@ -0,0 +1,74 @@
+From e27bfc22bba932950a398b32bf57be6f825438ee Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess at hadess.net>
+Date: Tue, 8 Jul 2014 18:29:06 +0200
+Subject: [PATCH] accelerometer: Don't wait for new data from the sensor
+
+Instead of waiting for new data from the sensor, which might be
+a long time coming, depending on the sensor device, ask the kernel
+for the last state for that particular input device.
+
+(cherry picked from commit a545c6e1aa31b4d7e80c9d3609d9fc4fc9921498)
+---
+ src/udev/accelerometer/accelerometer.c | 33 ++++++---------------------------
+ 1 file changed, 6 insertions(+), 27 deletions(-)
+
+diff --git a/src/udev/accelerometer/accelerometer.c b/src/udev/accelerometer/accelerometer.c
+index 925d38de1f..32adf27777 100644
+--- a/src/udev/accelerometer/accelerometer.c
++++ b/src/udev/accelerometer/accelerometer.c
+@@ -180,7 +180,7 @@ get_prev_orientation(struct udev_device *dev)
+         return string_to_orientation(value);
+ }
+ 
+-#define SET_AXIS(axis, code_) if (ev[i].code == code_) { if (got_##axis == 0) { axis = ev[i].value; got_##axis = true; } }
++#define READ_AXIS(axis, var) { memzero(&abs_info, sizeof(abs_info)); r = ioctl(fd, EVIOCGABS(axis), &abs_info); if (r < 0) return; var = abs_info.value; }
+ 
+ /* accelerometers */
+ static void test_orientation(struct udev *udev,
+@@ -189,10 +189,9 @@ static void test_orientation(struct udev *udev,
+ {
+         OrientationUp old, new;
+         _cleanup_close_ int fd = -1;
+-        struct input_event ev[64];
+-        bool got_syn = false;
+-        bool got_x = false, got_y = false, got_z = false;
++        struct input_absinfo abs_info;
+         int x = 0, y = 0, z = 0;
++        int r;
+         char text[64];
+ 
+         old = get_prev_orientation(dev);
+@@ -201,30 +200,10 @@ static void test_orientation(struct udev *udev,
+         if (fd < 0)
+                 return;
+ 
+-        while (1) {
+-                int i, r;
+-
+-                r = read(fd, ev, sizeof(struct input_event) * 64);
+-
+-                if (r < (int) sizeof(struct input_event))
+-                        return;
+-
+-                for (i = 0; i < r / (int) sizeof(struct input_event); i++) {
+-                        if (got_syn) {
+-                                if (ev[i].type == EV_ABS) {
+-                                        SET_AXIS(x, ABS_X);
+-                                        SET_AXIS(y, ABS_Y);
+-                                        SET_AXIS(z, ABS_Z);
+-                                }
+-                        }
+-                        if (ev[i].type == EV_SYN && ev[i].code == SYN_REPORT)
+-                                got_syn = true;
+-                        if (got_x && got_y && got_z)
+-                                goto read_dev;
+-                }
+-        }
++        READ_AXIS(ABS_X, x);
++        READ_AXIS(ABS_Y, y);
++        READ_AXIS(ABS_Z, z);
+ 
+-read_dev:
+         new = orientation_calc(old, x, y, z);
+         snprintf(text, sizeof(text),
+                  "ID_INPUT_ACCELEROMETER_ORIENTATION=%s", orientation_to_string(new));
diff --git a/0036-escape-move-to-rootbindir.patch b/0036-escape-move-to-rootbindir.patch
new file mode 100644
index 0000000..b950053
--- /dev/null
+++ b/0036-escape-move-to-rootbindir.patch
@@ -0,0 +1,38 @@
+From f6431973ef3d681c1c0c3e6850c7906a22ee7ec7 Mon Sep 17 00:00:00 2001
+From: Michael Biebl <biebl at debian.org>
+Date: Tue, 8 Jul 2014 21:06:07 +0200
+Subject: [PATCH] escape: move to rootbindir
+
+The systemd-escape utility might be used during early boot (e.g. when
+being triggered from udev rules), so move it to rootbindir to support
+systems with a split /usr setup.
+
+(cherry picked from commit 2945a452b084879c6885efe51aefea00c179aa5f)
+---
+ Makefile.am | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index c856d822de..7210ab70be 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -337,7 +337,8 @@ rootbin_PROGRAMS = \
+ 	systemd-notify \
+ 	systemd-ask-password \
+ 	systemd-tty-ask-password-agent \
+-	systemd-machine-id-setup
++	systemd-machine-id-setup \
++	systemd-escape
+ 
+ bin_PROGRAMS = \
+ 	systemd-cgls \
+@@ -347,8 +348,7 @@ bin_PROGRAMS = \
+ 	systemd-delta \
+ 	systemd-analyze \
+ 	systemd-run \
+-	systemd-path \
+-	systemd-escape
++	systemd-path
+ 
+ dist_bin_SCRIPTS = \
+ 	src/kernel-install/kernel-install
diff --git a/0037-journal-compress-improve-xz-compression-performance.patch b/0037-journal-compress-improve-xz-compression-performance.patch
new file mode 100644
index 0000000..976e175
--- /dev/null
+++ b/0037-journal-compress-improve-xz-compression-performance.patch
@@ -0,0 +1,67 @@
+From 00464ad8a698fe7735737fab57420f8a44013890 Mon Sep 17 00:00:00 2001
+From: Jon Severinsson <jon at severinsson.net>
+Date: Tue, 8 Jul 2014 18:29:46 +0200
+Subject: [PATCH] journal/compress: improve xz compression performance
+
+The new lzma2 compression options at the top of compress_blob_xz are
+equivalent to using preset "0", exept for using a 1 MiB dictionary
+(the same as preset "1"). This makes the memory usage at most 7.5 MiB
+in the compressor, and 1 MiB in the decompressor, instead of the
+previous 92 MiB in the compressor and 8 MiB in the decompressor.
+
+According to test-compress-benchmark this commit makes XZ compression
+20 times faster, with no increase in compressed data size.
+Using more realistic test data (an ELF binary rather than repeating
+ASCII letters 'a' through 'z' in order) it only provides a factor 10
+speedup, and at a cost if a 10% increase in compressed data size.
+But that is still a worthwhile trade-off.
+
+According to test-compress-benchmark XZ compression is still 25 times
+slower than LZ4, but the compressed data is one eighth the size.
+Using more realistic test data XZ compression is only 18 times slower
+than LZ4, and the compressed data is only one quarter the size.
+
+$ ./test-compress-benchmark
+XZ: compressed & decompressed 2535300963 bytes in 42.30s (57.15MiB/s), mean compresion 99.95%, skipped 3570 bytes
+LZ4: compressed & decompressed 2535303543 bytes in 1.60s (1510.60MiB/s), mean compresion 99.60%, skipped 990 bytes
+
+(cherry picked from commit 1930eed2a7855d2df06ccf51f9e394428bf547e2)
+
+Conflicts:
+	src/journal/compress.c
+---
+ src/journal/compress.c | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/src/journal/compress.c b/src/journal/compress.c
+index 1fc62ead2a..9c0b74c455 100644
+--- a/src/journal/compress.c
++++ b/src/journal/compress.c
+@@ -30,6 +30,13 @@
+ #include "util.h"
+ 
+ bool compress_blob(const void *src, uint64_t src_size, void *dst, uint64_t *dst_size) {
++        static const lzma_options_lzma opt = {
++                1u << 20u, NULL, 0, LZMA_LC_DEFAULT, LZMA_LP_DEFAULT,
++                LZMA_PB_DEFAULT, LZMA_MODE_FAST, 128, LZMA_MF_HC3, 4};
++        static const lzma_filter filters[2] = {
++                {LZMA_FILTER_LZMA2, (lzma_options_lzma*) &opt},
++                {LZMA_VLI_UNKNOWN, NULL}
++        };
+         lzma_ret ret;
+         size_t out_pos = 0;
+ 
+@@ -41,8 +48,11 @@ bool compress_blob(const void *src, uint64_t src_size, void *dst, uint64_t *dst_
+         /* Returns false if we couldn't compress the data or the
+          * compressed result is longer than the original */
+ 
+-        ret = lzma_easy_buffer_encode(LZMA_PRESET_DEFAULT, LZMA_CHECK_NONE, NULL,
+-                                      src, src_size, dst, &out_pos, src_size);
++        if (src_size < 80)
++                return -ENOBUFS;
++
++        ret = lzma_stream_buffer_encode((lzma_filter*) filters, LZMA_CHECK_NONE, NULL,
++                                        src, src_size, dst, &out_pos, src_size - 1);
+         if (ret != LZMA_OK)
+                 return false;
+ 
diff --git a/0038-hostnamed-add-a-new-chassis-type-for-watches.patch b/0038-hostnamed-add-a-new-chassis-type-for-watches.patch
new file mode 100644
index 0000000..1fc4a40
--- /dev/null
+++ b/0038-hostnamed-add-a-new-chassis-type-for-watches.patch
@@ -0,0 +1,24 @@
+From 6f977a8c14c4cec72a85f20d0986daa391dd3319 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Wed, 9 Jul 2014 13:20:05 +0200
+Subject: [PATCH] hostnamed: add a new chassis type for watches
+
+(cherry picked from commit c49e59c1831f20fe02276d7bc6ba7d23d24c4ab3)
+---
+ src/hostname/hostnamed.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c
+index 14629dd3a9..8127b688c4 100644
+--- a/src/hostname/hostnamed.c
++++ b/src/hostname/hostnamed.c
+@@ -144,7 +144,8 @@ static bool valid_chassis(const char *chassis) {
+                         "laptop\0"
+                         "server\0"
+                         "tablet\0"
+-                        "handset\0",
++                        "handset\0"
++                        "watch\0",
+                         chassis);
+ }
+ 
diff --git a/0039-hostnamed-update-documentation-with-new-watch-chassi.patch b/0039-hostnamed-update-documentation-with-new-watch-chassi.patch
new file mode 100644
index 0000000..00ad15a
--- /dev/null
+++ b/0039-hostnamed-update-documentation-with-new-watch-chassi.patch
@@ -0,0 +1,39 @@
+From 710348ce7349b224ba58bae765611455320f68d1 Mon Sep 17 00:00:00 2001
+From: Tomasz Torcz <tomek at pipebreaker.pl>
+Date: Wed, 9 Jul 2014 13:37:50 +0200
+Subject: [PATCH] hostnamed: update documentation with new "watch" chassis type
+
+(cherry picked from commit efab8d0b0ebf6d715949b7af66fecaf5e5e5d77b)
+---
+ man/hostnamectl.xml  | 3 ++-
+ man/machine-info.xml | 3 ++-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/man/hostnamectl.xml b/man/hostnamectl.xml
+index 4e456eb8f9..001bfced03 100644
+--- a/man/hostnamectl.xml
++++ b/man/hostnamectl.xml
+@@ -205,7 +205,8 @@
+                                 <literal>laptop</literal>,
+                                 <literal>server</literal>,
+                                 <literal>tablet</literal>,
+-                                <literal>handset</literal>, as well as
++				<literal>handset</literal>,
++				<literal>watch</literal>, as well as
+                                 the special chassis types
+                                 <literal>vm</literal> and
+                                 <literal>container</literal> for
+diff --git a/man/machine-info.xml b/man/machine-info.xml
+index 7448e68fd4..244e9b69cf 100644
+--- a/man/machine-info.xml
++++ b/man/machine-info.xml
+@@ -138,7 +138,8 @@
+                                 <literal>laptop</literal>,
+                                 <literal>server</literal>,
+                                 <literal>tablet</literal>,
+-                                <literal>handset</literal>, as well as
++				<literal>handset</literal>,
++				<literal>watch</literal>, as well as
+                                 the special chassis types
+                                 <literal>vm</literal> and
+                                 <literal>container</literal> for
diff --git a/0040-units-make-ExecStopPost-action-part-of-ExecStart.patch b/0040-units-make-ExecStopPost-action-part-of-ExecStart.patch
new file mode 100644
index 0000000..6b9fbea
--- /dev/null
+++ b/0040-units-make-ExecStopPost-action-part-of-ExecStart.patch
@@ -0,0 +1,51 @@
+From 7a4ab10135c2b8fdeedb53c0585c67a0d6448ce6 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta at redhat.com>
+Date: Tue, 8 Jul 2014 17:42:23 +0200
+Subject: [PATCH] units: make ExecStopPost action part of ExecStart
+
+Currently after exiting rescue shell we isolate default target. User
+might want to isolate to some other target than default one. However
+issuing systemctl isolate command to desired target would bring system
+to default target as a consequence of running ExecStopPost action.
+
+Having common ancestor for rescue shell and possible followup systemctl
+default command should fix this. If user exits rescue shell we will
+proceed with isolating default target, otherwise, on manual isolate,
+parent shell process is terminated and we don't isolate default target,
+but target chosen by user.
+
+Suggested-by: Michal Schmidt <mschmidt at redhat.com>
+(cherry picked from commit d3381512282f2ca1c7669f77fb736a90fdce6982)
+---
+ units/emergency.service.in | 3 +--
+ units/rescue.service.m4.in | 3 +--
+ 2 files changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/units/emergency.service.in b/units/emergency.service.in
+index 94c090f654..91fc1bbf51 100644
+--- a/units/emergency.service.in
++++ b/units/emergency.service.in
+@@ -17,8 +17,7 @@ Environment=HOME=/root
+ WorkingDirectory=/root
+ ExecStartPre=-/bin/plymouth quit
+ ExecStartPre=-/bin/echo -e 'Welcome to emergency mode! After logging in, type "journalctl -xb" to view\\nsystem logs, "systemctl reboot" to reboot, "systemctl default" to try again\\nto boot into default mode.'
+-ExecStart=-/sbin/sulogin
+-ExecStopPost=@SYSTEMCTL@ --fail --no-block default
++ExecStart=-/bin/sh -c "/sbin/sulogin; @SYSTEMCTL@ --fail --no-block default"
+ Type=idle
+ StandardInput=tty-force
+ StandardOutput=inherit
+diff --git a/units/rescue.service.m4.in b/units/rescue.service.m4.in
+index 552ef8981b..ef5436960f 100644
+--- a/units/rescue.service.m4.in
++++ b/units/rescue.service.m4.in
+@@ -18,8 +18,7 @@ Environment=HOME=/root
+ WorkingDirectory=/root
+ ExecStartPre=-/bin/plymouth quit
+ ExecStartPre=-/bin/echo -e 'Welcome to rescue mode! Type "systemctl default" or ^D to enter default mode.\\nType "journalctl -xb" to view system logs. Type "systemctl reboot" to reboot.'
+-ExecStart=-/sbin/sulogin
+-ExecStopPost=- at SYSTEMCTL@ --fail --no-block default
++ExecStart=-/bin/sh -c "/sbin/sulogin; @SYSTEMCTL@ --fail --no-block default"
+ Type=idle
+ StandardInput=tty-force
+ StandardOutput=inherit
diff --git a/0041-util-don-t-consider-tabs-special-in-string_has_cc-an.patch b/0041-util-don-t-consider-tabs-special-in-string_has_cc-an.patch
new file mode 100644
index 0000000..df43802
--- /dev/null
+++ b/0041-util-don-t-consider-tabs-special-in-string_has_cc-an.patch
@@ -0,0 +1,119 @@
+From 15dbdbd90db21bea19e48194a485bbaaa9501b9b Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 7 Jul 2014 12:04:55 +0200
+Subject: [PATCH] util: don't consider tabs special in string_has_cc() anymore
+
+Instead, take a list of exceptions to our usual CC check
+
+(cherry picked from commit 6294aa76d818e831de4592b41a37e225fd0871f9)
+---
+ src/hostname/hostnamed.c |  3 +--
+ src/shared/env-util.c    |  4 +++-
+ src/shared/fileio.c      |  2 +-
+ src/shared/util.c        | 19 ++++++++++---------
+ src/shared/util.h        |  2 +-
+ 5 files changed, 16 insertions(+), 14 deletions(-)
+
+diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c
+index 8127b688c4..eaae1139fa 100644
+--- a/src/hostname/hostnamed.c
++++ b/src/hostname/hostnamed.c
+@@ -551,8 +551,7 @@ static int set_machine_info(Context *c, sd_bus *bus, sd_bus_message *m, int prop
+ 
+                 if (prop == PROP_ICON_NAME && !filename_is_safe(name))
+                         return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid icon name '%s'", name);
+-                if (prop == PROP_PRETTY_HOSTNAME &&
+-                    (string_has_cc(name) || chars_intersect(name, "\t")))
++                if (prop == PROP_PRETTY_HOSTNAME && string_has_cc(name, NULL))
+                         return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid pretty host name '%s'", name);
+                 if (prop == PROP_CHASSIS && !valid_chassis(name))
+                         return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid chassis '%s'", name);
+diff --git a/src/shared/env-util.c b/src/shared/env-util.c
+index b2e45531ab..20b208f63c 100644
+--- a/src/shared/env-util.c
++++ b/src/shared/env-util.c
+@@ -78,7 +78,9 @@ bool env_value_is_valid(const char *e) {
+         if (!utf8_is_valid(e))
+                 return false;
+ 
+-        if (string_has_cc(e))
++        /* bash allows tabs in environment variables, and so should
++         * we */
++        if (string_has_cc(e, "\t"))
+                 return false;
+ 
+         /* POSIX says the overall size of the environment block cannot
+diff --git a/src/shared/fileio.c b/src/shared/fileio.c
+index fb1c1bcf9f..b1de5908c5 100644
+--- a/src/shared/fileio.c
++++ b/src/shared/fileio.c
+@@ -738,7 +738,7 @@ static void write_env_var(FILE *f, const char *v) {
+         p++;
+         fwrite(v, 1, p-v, f);
+ 
+-        if (string_has_cc(p) || chars_intersect(p, WHITESPACE "\'\"\\`$")) {
++        if (string_has_cc(p, NULL) || chars_intersect(p, WHITESPACE "\'\"\\`$")) {
+                 fputc('\"', f);
+ 
+                 for (; *p; p++) {
+diff --git a/src/shared/util.c b/src/shared/util.c
+index d25ee6652f..d223ecf711 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -5350,16 +5350,14 @@ bool filename_is_safe(const char *p) {
+ bool string_is_safe(const char *p) {
+         const char *t;
+ 
+-        assert(p);
++        if (!p)
++                return false;
+ 
+         for (t = p; *t; t++) {
+                 if (*t > 0 && *t < ' ')
+                         return false;
+ 
+-                if (*t == 127)
+-                        return false;
+-
+-                if (strchr("\\\"\'", *t))
++                if (strchr("\\\"\'\0x7f", *t))
+                         return false;
+         }
+ 
+@@ -5367,16 +5365,19 @@ bool string_is_safe(const char *p) {
+ }
+ 
+ /**
+- * Check if a string contains control characters.
+- * Spaces and tabs are not considered control characters.
++ * Check if a string contains control characters. If 'ok' is non-NULL
++ * it may be a string containing additional CCs to be considered OK.
+  */
+-bool string_has_cc(const char *p) {
++bool string_has_cc(const char *p, const char *ok) {
+         const char *t;
+ 
+         assert(p);
+ 
+         for (t = p; *t; t++) {
+-                if (*t > 0 && *t < ' ' && *t != '\t')
++                if (ok && strchr(ok, *t))
++                        return false;
++
++                if (*t > 0 && *t < ' ')
+                         return true;
+ 
+                 if (*t == 127)
+diff --git a/src/shared/util.h b/src/shared/util.h
+index e23069c016..7124e51d90 100644
+--- a/src/shared/util.h
++++ b/src/shared/util.h
+@@ -692,7 +692,7 @@ _alloc_(2, 3) static inline void *memdup_multiply(const void *p, size_t a, size_
+ bool filename_is_safe(const char *p) _pure_;
+ bool path_is_safe(const char *p) _pure_;
+ bool string_is_safe(const char *p) _pure_;
+-bool string_has_cc(const char *p) _pure_;
++bool string_has_cc(const char *p, const char *ok) _pure_;
+ 
+ /**
+  * Check if a string contains any glob patterns.
diff --git a/0042-util-fix-has-cc-check-and-add-test.patch b/0042-util-fix-has-cc-check-and-add-test.patch
new file mode 100644
index 0000000..901a6aa
--- /dev/null
+++ b/0042-util-fix-has-cc-check-and-add-test.patch
@@ -0,0 +1,56 @@
+From 10242a06bf0b1cd3bde58cada79c8a1aae5d8caa Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Fri, 11 Jul 2014 09:21:15 -0400
+Subject: [PATCH] util: fix has cc check and add test
+
+---
+ src/shared/util.c    |  2 +-
+ src/test/test-util.c | 15 +++++++++++++++
+ 2 files changed, 16 insertions(+), 1 deletion(-)
+
+diff --git a/src/shared/util.c b/src/shared/util.c
+index d223ecf711..03a5860a62 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -5375,7 +5375,7 @@ bool string_has_cc(const char *p, const char *ok) {
+ 
+         for (t = p; *t; t++) {
+                 if (ok && strchr(ok, *t))
+-                        return false;
++                        continue;
+ 
+                 if (*t > 0 && *t < ' ')
+                         return true;
+diff --git a/src/test/test-util.c b/src/test/test-util.c
+index 44921bd156..ed91a67d10 100644
+--- a/src/test/test-util.c
++++ b/src/test/test-util.c
+@@ -731,6 +731,20 @@ static void test_filename_is_safe(void) {
+         assert_se(filename_is_safe("o.o"));
+ }
+ 
++static void test_string_has_cc(void) {
++        assert_se(string_has_cc("abc\1", NULL));
++        assert_se(string_has_cc("abc\x7f", NULL));
++        assert_se(string_has_cc("abc\x7f", NULL));
++        assert_se(string_has_cc("abc\t\x7f", "\t"));
++        assert_se(string_has_cc("abc\t\x7f", "\t"));
++        assert_se(string_has_cc("\x7f", "\t"));
++        assert_se(string_has_cc("\x7f", "\t\a"));
++
++        assert_se(!string_has_cc("abc\t\t", "\t"));
++        assert_se(!string_has_cc("abc\t\t\a", "\t\a"));
++        assert_se(!string_has_cc("a\ab\tc", "\t\a"));
++}
++
+ static void test_ascii_strlower(void) {
+         char a[] = "AabBcC Jk Ii Od LKJJJ kkd LK";
+         assert_se(streq(ascii_strlower(a), "aabbcc jk ii od lkjjj kkd lk"));
+@@ -937,6 +951,7 @@ int main(int argc, char *argv[]) {
+         test_log2i();
+         test_foreach_string();
+         test_filename_is_safe();
++        test_string_has_cc();
+         test_ascii_strlower();
+         test_files_same();
+         test_is_valid_documentation_url();
diff --git a/0043-sysusers-don-t-allow-user-names-longer-than-UT_NAMES.patch b/0043-sysusers-don-t-allow-user-names-longer-than-UT_NAMES.patch
new file mode 100644
index 0000000..1ab8523
--- /dev/null
+++ b/0043-sysusers-don-t-allow-user-names-longer-than-UT_NAMES.patch
@@ -0,0 +1,52 @@
+From e17ff7ab5115b80f0d2bd4989cd31889bd54fbb1 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Wed, 9 Jul 2014 19:20:58 +0200
+Subject: [PATCH] sysusers: don't allow user names longer than UT_NAMESIZE
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+As pointed out by Miloslav Trmač it might be a good idea to make sure
+that usernames stay with in the utmp-defined limits.
+
+(cherry picked from commit 932ad62b84165b0acf690ea34c4b8083657ae244)
+---
+ man/sysusers.d.xml      | 2 +-
+ src/sysusers/sysusers.c | 4 ++++
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/man/sysusers.d.xml b/man/sysusers.d.xml
+index 549b3f6351..40f8715bc0 100644
+--- a/man/sysusers.d.xml
++++ b/man/sysusers.d.xml
+@@ -142,7 +142,7 @@ m authd input</programlisting>
+                         <title>Name</title>
+ 
+                         <para>The name field specifies the user or
+-                        group name. It should be be shorter than 256
++                        group name. It should be be shorter than 31
+                         characters and avoid any non-ASCII characters,
+                         and not begin with a numeric character. It is
+                         strongly recommended to pick user and group
+diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
+index c0af69300a..f3ba8cf7b3 100644
+--- a/src/sysusers/sysusers.c
++++ b/src/sysusers/sysusers.c
+@@ -24,6 +24,7 @@
+ #include <grp.h>
+ #include <shadow.h>
+ #include <getopt.h>
++#include <utmp.h>
+ 
+ #include "util.h"
+ #include "hashmap.h"
+@@ -1095,6 +1096,9 @@ static bool valid_user_group_name(const char *u) {
+         if ((size_t) (i-u) > (size_t) sz)
+                 return false;
+ 
++        if ((size_t) (i-u) > UT_NAMESIZE - 1)
++                return false;
++
+         return true;
+ }
+ 
diff --git a/0044-sysusers-don-t-allow-control-characters-in-gecos-fie.patch b/0044-sysusers-don-t-allow-control-characters-in-gecos-fie.patch
new file mode 100644
index 0000000..9c9195c
--- /dev/null
+++ b/0044-sysusers-don-t-allow-control-characters-in-gecos-fie.patch
@@ -0,0 +1,27 @@
+From b374a6f62172bf5352cc1ad825ace44d78430e0c Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Wed, 9 Jul 2014 19:21:42 +0200
+Subject: [PATCH] sysusers: don't allow control characters in gecos fields
+
+(cherry picked from commit 38c74dad1c3d605018e61074e0b80f6b9523b1c8)
+---
+ src/sysusers/sysusers.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
+index f3ba8cf7b3..16ea0c9c57 100644
+--- a/src/sysusers/sysusers.c
++++ b/src/sysusers/sysusers.c
+@@ -1107,7 +1107,11 @@ static bool valid_gecos(const char *d) {
+         if (!utf8_is_valid(d))
+                 return false;
+ 
+-        if (strpbrk(d, ":\n"))
++        if (string_has_cc(d, NULL))
++                return false;
++
++        /* Colons are used as field separators, and hence not OK */
++        if (strchr(d, ':'))
+                 return false;
+ 
+         return true;
diff --git a/0045-sysusers-allow-overrides-in-etc-and-run.patch b/0045-sysusers-allow-overrides-in-etc-and-run.patch
new file mode 100644
index 0000000..1468430
--- /dev/null
+++ b/0045-sysusers-allow-overrides-in-etc-and-run.patch
@@ -0,0 +1,122 @@
+From e65cf4e9d68dd4526524b33709bd16afb95f374a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Thu, 10 Jul 2014 08:50:32 -0400
+Subject: [PATCH] sysusers: allow overrides in /etc and /run
+
+An administrator might want to block a certain sysusers config file from
+being executed, e.g. to block the creation of a certain user.
+
+Only a relatively short description is added in the man page, since
+overrides should be relatively rare.
+
+(cherry picked from commit 938a560b7608e8906134ed7d717c3f5aa459a760)
+---
+ man/sysusers.d.xml      | 63 ++++++++++++++++++++++++++++++++++---------------
+ src/sysusers/sysusers.c |  2 ++
+ 2 files changed, 46 insertions(+), 19 deletions(-)
+
+diff --git a/man/sysusers.d.xml b/man/sysusers.d.xml
+index 40f8715bc0..00eb7ec942 100644
+--- a/man/sysusers.d.xml
++++ b/man/sysusers.d.xml
+@@ -53,32 +53,28 @@
+                 <title>Description</title>
+ 
+                 <para><command>systemd-sysusers</command> uses the
+-                files from <filename>/usr/lib/sysusers.d/</filename>
++                files from <filename>sysusers.d</filename> directory
+                 to create system users and groups at package
+-                installation or boot time. This tool may be used for
+-                allocating system users and groups only, it is not
++                installation or boot time. This tool may be used to
++                allocate system users and groups only, it is not
+                 useful for creating non-system users and groups, as it
+-                accessed <filename>/etc/passwd</filename> and
++                accesses <filename>/etc/passwd</filename> and
+                 <filename>/etc/group</filename> directly, bypassing
+-                any more complex user database, for example any
++                any more complex user databases, for example any
+                 database involving NIS or LDAP.</para>
+-
+         </refsect1>
+ 
+         <refsect1>
+-                <title>File Format</title>
+-
+-                <para>Each file shall be named in the style of
+-                <filename><replaceable>package</replaceable>.conf</filename>.</para>
++                <title>Configuration Format</title>
+ 
+-                <para>All files are sorted by their filename in
+-                lexicographic order, regardless of which of the
+-                directories they reside in. If multiple files specify
+-                the same user or group, the entry in the file with the
+-                lexicographically earliest name will be applied, all
+-                all other conflicting entries will be logged as
+-                errors. Users and groups are
+-                processed in the order they are listed.</para>
++                <para>Each configuration file shall be named in the
++                style of
++                <filename><replaceable>package</replaceable>.conf</filename>
++                or
++                <filename><replaceable>package</replaceable>-<replaceable>part</replaceable>.conf</filename>.
++                The second variant should be used when it is desirable
++                to make it easy to override just this part of
++                configuration.</para>
+ 
+                 <para>The file format is one line per user or group
+                 containing name, ID and GECOS field description:</para>
+@@ -193,10 +189,39 @@ m authd input</programlisting>
+         </refsect1>
+ 
+         <refsect1>
++                <title>Overriding vendor configuration</title>
++
++                <para>Note that <command>systemd-sysusers</command>
++                will do nothing if the specified users or groups
++                already exist, so normally there no reason to override
++                <filename>sysusers.d</filename> vendor configuration,
++                except to block certain users or groups from being
++                created.</para>
++
++                <para>Files in <filename>/etc/sysusers.d</filename>
++                override files with the same name in
++                <filename>/usr/lib/sysusers.d</filename> and
++                <filename>/run/sysusers.d</filename>. Files in
++                <filename>/run/sysusers.d</filename> override files
++                with the same name in
++                <filename>/usr/lib/sysusers.d</filename>. The scheme is the same as for
++                <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
++                except for the directory name.</para>
++
++                <para>If the administrator wants to disable a
++                configuration file supplied by the vendor, the
++                recommended way is to place a symlink to
++                <filename>/dev/null</filename> in
++                <filename>/etc/sysusers.d/</filename> bearing the
++                same filename.</para>
++        </refsect1>
++
++        <refsect1>
+                 <title>See Also</title>
+                 <para>
+                         <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+-                        <citerefentry><refentrytitle>systemd-sysusers</refentrytitle><manvolnum>8</manvolnum></citerefentry>
++                        <citerefentry><refentrytitle>systemd-sysusers</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
++                        <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+                 </para>
+         </refsect1>
+ 
+diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
+index 16ea0c9c57..61c9bb5efb 100644
+--- a/src/sysusers/sysusers.c
++++ b/src/sysusers/sysusers.c
+@@ -62,6 +62,8 @@ typedef struct Item {
+ static char *arg_root = NULL;
+ 
+ static const char conf_file_dirs[] =
++        "/etc/sysusers.d\0"
++        "/run/sysusers.d\0"
+         "/usr/local/lib/sysusers.d\0"
+         "/usr/lib/sysusers.d\0"
+ #ifdef HAVE_SPLIT_USR
diff --git a/0046-man-document-x-systemd.device-timeout-for-crypttab.patch b/0046-man-document-x-systemd.device-timeout-for-crypttab.patch
new file mode 100644
index 0000000..8b735af
--- /dev/null
+++ b/0046-man-document-x-systemd.device-timeout-for-crypttab.patch
@@ -0,0 +1,37 @@
+From 634ddd73f790dd779e97edd1491178897858f7c0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Thu, 10 Jul 2014 22:34:43 -0400
+Subject: [PATCH] man: document x-systemd.device-timeout for crypttab
+
+https://bugs.freedesktop.org/show_bug.cgi?id=54210
+(cherry picked from commit dc5cd2b77288dc85c82cb95810cd14caee311e7e)
+---
+ man/crypttab.xml | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+diff --git a/man/crypttab.xml b/man/crypttab.xml
+index 9dbf1546b1..d658a6ff20 100644
+--- a/man/crypttab.xml
++++ b/man/crypttab.xml
+@@ -319,6 +319,21 @@
+                         </varlistentry>
+ 
+                         <varlistentry>
++                                <term><option>x-systemd.device-timeout=</option></term>
++
++                                <listitem><para>Specifies how long
++                                systemd should wait for a device to
++                                show up before giving up on the
++                                entry. The argument is a time in
++                                seconds or explicitly specifified
++                                units of <literal>s</literal>,
++                                <literal>min</literal>,
++                                <literal>h</literal>,
++                                <literal>ms</literal>.
++                                </para></listitem>
++                        </varlistentry>
++
++                        <varlistentry>
+                                 <term><option>tmp</option></term>
+ 
+                                 <listitem><para>The encrypted block device will
diff --git a/0047-shell-completion-man-beef-up-chassis-completions-and.patch b/0047-shell-completion-man-beef-up-chassis-completions-and.patch
new file mode 100644
index 0000000..45693b1
--- /dev/null
+++ b/0047-shell-completion-man-beef-up-chassis-completions-and.patch
@@ -0,0 +1,224 @@
+From ba838f7f9b3de1777f3528c0fe211f9bedbd2a8b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Fri, 11 Jul 2014 08:25:20 -0400
+Subject: [PATCH] shell-completion,man: beef up chassis completions and
+ description
+
+Parameters to hostnamectl command are not optional and should not be marked
+as such in the man page.
+
+(cherry picked from commit 1ed774956406941d4812a3fb4493d2915f130f12)
+---
+ man/hostnamectl.xml               | 73 +++++++++++++++++++++------------------
+ shell-completion/bash/hostnamectl |  3 ++
+ shell-completion/zsh/_hostnamectl | 32 +++++++++++++++--
+ shell-completion/zsh/_localectl   |  4 +--
+ 4 files changed, 75 insertions(+), 37 deletions(-)
+
+diff --git a/man/hostnamectl.xml b/man/hostnamectl.xml
+index 001bfced03..13e5bd57f2 100644
+--- a/man/hostnamectl.xml
++++ b/man/hostnamectl.xml
+@@ -141,13 +141,14 @@
+                         </varlistentry>
+ 
+                         <varlistentry>
+-                                <term><command>set-hostname [NAME]</command></term>
++                                <term><command>set-hostname <replaceable>NAME</replaceable></command></term>
+ 
+                                 <listitem><para>Set the system
+-                                hostname. By default, this will alter
+-                                the pretty, the static, and the
+-                                transient hostname alike; however, if
+-                                one or more of
++                                hostname to
++                                <replaceable>NAME</replaceable>. By
++                                default, this will alter the pretty,
++                                the static, and the transient hostname
++                                alike; however, if one or more of
+                                 <option>--static</option>,
+                                 <option>--transient</option>,
+                                 <option>--pretty</option> are used,
+@@ -168,55 +169,61 @@
+                                 the hostname string is not done if
+                                 only the transient and/or static host
+                                 names are set, and the pretty host
+-                                name is left untouched. Pass the empty
+-                                string <literal></literal> as the
+-                                hostname to reset the selected
+-                                hostnames to their default (usually
++                                name is left untouched.</para>
++
++                                <para>Pass the empty string
++                                <literal></literal> as the hostname to
++                                reset the selected hostnames to their
++                                default (usually
+                                 <literal>localhost</literal>).</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+-                                <term><command>set-icon-name [NAME]</command></term>
++                                <term><command>set-icon-name <replaceable>NAME</replaceable></command></term>
+ 
+                                 <listitem><para>Set the system icon
+-                                name. The icon name is used by some
+-                                graphical applications to visualize
+-                                this host. The icon name should follow
+-                                the <ulink
++                                name to
++                                <replaceable>NAME</replaceable>. The
++                                icon name is used by some graphical
++                                applications to visualize this host.
++                                The icon name should follow the <ulink
+                                 url="http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html">Icon
+-                                Naming Specification</ulink>. Pass an
+-                                empty string to this operation to
+-                                reset the icon name to the default
+-                                value, which is determined from chassis
+-                                type (see below) and possibly other
++                                Naming Specification</ulink>.</para>
++
++                                <para>Pass an empty string to reset
++                                the icon name to the default value,
++                                which is determined from chassis type
++                                (see below) and possibly other
+                                 parameters.</para></listitem>
+                         </varlistentry>
+ 
+                         <varlistentry>
+-                                <term><command>set-chassis [TYPE]</command></term>
++                                <term><command>set-chassis <replaceable>TYPE</replaceable></command></term>
+ 
+-                                <listitem><para>Set the chassis
+-                                type. The chassis type is used by some
++                                <listitem><para>Set the chassis type
++                                to <replaceable>TYPE</replaceable>.
++                                The chassis type is used by some
+                                 graphical applications to visualize
+-                                the host or alter user
+-                                interaction. Currently, the following
+-                                chassis types are defined:
++                                the host or alter user interaction.
++                                Currently, the following chassis types
++                                are defined:
+                                 <literal>desktop</literal>,
+                                 <literal>laptop</literal>,
+                                 <literal>server</literal>,
+                                 <literal>tablet</literal>,
+-				<literal>handset</literal>,
+-				<literal>watch</literal>, as well as
++                                <literal>handset</literal>,
++                                <literal>watch</literal>, as well as
+                                 the special chassis types
+                                 <literal>vm</literal> and
+                                 <literal>container</literal> for
+                                 virtualized systems that lack an
+-                                immediate physical chassis. Pass an
+-                                empty string to this operation to
+-                                reset the chassis type to the default
+-                                value which is determined from the
+-                                firmware and possibly other
+-                                parameters.</para></listitem>
++                                immediate physical chassis.</para>
++
++                                <para>Pass an empty string to reset
++                                the chassis type to the default value
++                                which is determined from the firmware
++                                and possibly other parameters.</para>
++                                </listitem>
+                         </varlistentry>
+ 
+                 </variablelist>
+diff --git a/shell-completion/bash/hostnamectl b/shell-completion/bash/hostnamectl
+index 9c75da9e7f..22f8f06b69 100644
+--- a/shell-completion/bash/hostnamectl
++++ b/shell-completion/bash/hostnamectl
+@@ -39,6 +39,7 @@ _hostnamectl() {
+                 [STANDALONE]='status'
+                      [ICONS]='set-icon-name'
+                       [NAME]='set-hostname'
++                   [CHASSIS]='set-chassis'
+         )
+ 
+         for ((i=0; i < COMP_CWORD; i++)); do
+@@ -50,6 +51,8 @@ _hostnamectl() {
+ 
+         if [[ -z $verb ]]; then
+                 comps=${VERBS[*]}
++        elif __contains_word "$verb" ${VERBS[CHASSIS]}; then
++                comps='desktop laptop server tablet handset watch vm container'
+         elif __contains_word "$verb" ${VERBS[STANDALONE]} ${VERBS[ICONS]} ${VERBS[NAME]}; then
+                 comps=''
+         fi
+diff --git a/shell-completion/zsh/_hostnamectl b/shell-completion/zsh/_hostnamectl
+index 7effa0489e..be8687609e 100644
+--- a/shell-completion/zsh/_hostnamectl
++++ b/shell-completion/zsh/_hostnamectl
+@@ -1,5 +1,30 @@
+ #compdef hostnamectl
+ 
++_hostnamectl_set-hostname() {
++    if (( CURRENT <= 3 )); then
++        _message "new hostname"
++    else
++        _message "no more options"
++    fi
++}
++
++_hostnamectl_set-icon-name() {
++    if (( CURRENT <= 3 )); then
++        _message "new icon name"
++    else
++        _message "no more options"
++    fi
++}
++
++_hostnamectl_set-chassis() {
++    if (( CURRENT <= 3 )); then
++        _chassis=( desktop laptop server tablet handset watch vm container )
++        _describe chassis _chassis
++    else
++        _message "no more options"
++    fi
++}
++
+ _hostnamectl_command() {
+     local -a _hostnamectl_cmds
+     _hostnamectl_cmds=(
+@@ -14,8 +39,11 @@ _hostnamectl_command() {
+         local curcontext="$curcontext"
+         cmd="${${_hostnamectl_cmds[(r)$words[1]:*]%%:*}}"
+         if (( $#cmd )); then
+-            [[ $cmd == status ]] && msg="no options" || msg="options for $cmd"
+-            _message "$msg"
++            if [[ $cmd == status ]]; then
++                _message "no options"
++            else
++                _hostnamectl_$cmd
++            fi
+         else
+             _message "unknown hostnamectl command: $words[1]"
+         fi
+diff --git a/shell-completion/zsh/_localectl b/shell-completion/zsh/_localectl
+index 87432da1dc..d8af4d1863 100644
+--- a/shell-completion/zsh/_localectl
++++ b/shell-completion/zsh/_localectl
+@@ -22,8 +22,8 @@ _localectl_set-locale() {
+ 
+ _localectl_set-keymap() {
+     local -a _keymaps
+-    _keymaps=( ${(f)"$(_call_program locales "$service" list-keymaps)"} )
+     if (( CURRENT <= 3 )); then
++        _keymaps=( ${(f)"$(_call_program locales "$service" list-keymaps)"} )
+         _describe keymaps _keymaps
+     else
+         _message "no more options"
+@@ -77,7 +77,7 @@ _localectl_command() {
+         if (( $+functions[_localectl_$cmd] )); then
+             _localectl_$cmd
+         else
+-            _message "no more options"
++            _message "unknown localectl command: $words[1]"
+         fi
+     fi
+ }
diff --git a/0048-Revert-build-sys-include-PolicyKit-files-as-part-of-.patch b/0048-Revert-build-sys-include-PolicyKit-files-as-part-of-.patch
new file mode 100644
index 0000000..d984e24
--- /dev/null
+++ b/0048-Revert-build-sys-include-PolicyKit-files-as-part-of-.patch
@@ -0,0 +1,33 @@
+From 33def81ef9cbfd7827e5239c1389c571db600f98 Mon Sep 17 00:00:00 2001
+From: Mike Gilbert <floppym at gentoo.org>
+Date: Fri, 4 Jul 2014 14:43:14 -0400
+Subject: [PATCH] Revert "build-sys: include PolicyKit files as part of
+ distribution"
+
+This reverts commit 0c26bfc3d21fdb3963f1248c237e2f1a33b5566d.
+
+src/core/org.freedesktop.systemd1.policy.in.in depends on values which
+are specified at configure time, so we cannot ship the corresponding
+policy file in the tarball.
+
+Since we need to regenerate one policy file, we might as well generate
+them all.
+
+(cherry picked from commit 3ce142490907d31c33ac03d72554f92459192f92)
+---
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 7210ab70be..9525e748cf 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -5224,7 +5224,7 @@ units/user/%: units/%.m4
+ 	$(AM_V_M4)$(M4) -P $(M4_DEFINES) -DFOR_USER=1 < $< > $@
+ 
+ if ENABLE_POLKIT
+-dist_polkitpolicy_DATA = \
++nodist_polkitpolicy_DATA = \
+ 	$(polkitpolicy_files) \
+ 	$(polkitpolicy_in_in_files:.policy.in.in=.policy)
+ endif
diff --git a/0049-build-sys-Do-not-distribute-generated-emergency.serv.patch b/0049-build-sys-Do-not-distribute-generated-emergency.serv.patch
new file mode 100644
index 0000000..1fa221b
--- /dev/null
+++ b/0049-build-sys-Do-not-distribute-generated-emergency.serv.patch
@@ -0,0 +1,27 @@
+From 8147d2f97abd8460541fdb0ba961f3fac5ca86ae Mon Sep 17 00:00:00 2001
+From: Jon Severinsson <jon at severinsson.net>
+Date: Fri, 11 Jul 2014 14:37:36 +0200
+Subject: [PATCH] build-sys: Do not distribute generated emergency.service
+
+It is already in nodist_systemunit_DATA and if it is
+shipped, it contains the hardcoded path to systemctl
+which will cause it to fail to start when
+rootprefix != prefix and rootbindir != bindir.
+
+(cherry picked from commit 3864c28549d742427fdf33026e522e9f10a7e4ec)
+---
+ Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 9525e748cf..025461b497 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -413,7 +413,6 @@ dist_sysctl_DATA = \
+ dist_systemunit_DATA = \
+ 	units/graphical.target \
+ 	units/multi-user.target \
+-	units/emergency.service \
+ 	units/emergency.target \
+ 	units/sysinit.target \
+ 	units/basic.target \
diff --git a/0050-sysusers-preserve-label-of-etc-passwd-group.patch b/0050-sysusers-preserve-label-of-etc-passwd-group.patch
new file mode 100644
index 0000000..3fc1784
--- /dev/null
+++ b/0050-sysusers-preserve-label-of-etc-passwd-group.patch
@@ -0,0 +1,54 @@
+From 2d258d4a029f43d22050cab56c3dfae36a8ace45 Mon Sep 17 00:00:00 2001
+From: Colin Walters <walters at verbum.org>
+Date: Sun, 13 Jul 2014 13:35:33 -0700
+Subject: [PATCH] sysusers: preserve label of /etc/{passwd, group}
+
+These files are specially labeled on SELinux systems, and we need to
+preserve that label.
+
+(cherry picked from commit a334cbba7222d3d7d886c17c828fa4227c656535)
+---
+ src/sysusers/sysusers.c | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
+index 61c9bb5efb..6ec22ccc73 100644
+--- a/src/sysusers/sysusers.c
++++ b/src/sysusers/sysusers.c
+@@ -312,7 +312,11 @@ static int write_files(void) {
+                 _cleanup_fclose_ FILE *original = NULL;
+ 
+                 group_path = fix_root("/etc/group");
++                r = label_context_set("/etc/group", S_IFREG);
++                if (r < 0)
++                        goto finish;
+                 r = fopen_temporary(group_path, &group, &group_tmp);
++                label_context_clear();
+                 if (r < 0)
+                         goto finish;
+ 
+@@ -388,9 +392,14 @@ static int write_files(void) {
+                 _cleanup_fclose_ FILE *original = NULL;
+ 
+                 passwd_path = fix_root("/etc/passwd");
+-                r = fopen_temporary(passwd_path, &passwd, &passwd_tmp);
++                r = label_context_set("/etc/passwd", S_IFREG);
+                 if (r < 0)
+                         goto finish;
++                r = fopen_temporary(passwd_path, &passwd, &passwd_tmp);
++                label_context_clear();
++                if (r < 0) {
++                        goto finish;
++                }
+ 
+                 if (fchmod(fileno(passwd), 0644) < 0) {
+                         r = -errno;
+@@ -1527,6 +1536,8 @@ int main(int argc, char *argv[]) {
+ 
+         umask(0022);
+ 
++        label_init(NULL);
++
+         r = 0;
+ 
+         if (optind < argc) {
diff --git a/0051-Add-function-to-open-temp-files-in-selinux-mode.patch b/0051-Add-function-to-open-temp-files-in-selinux-mode.patch
new file mode 100644
index 0000000..733e906
--- /dev/null
+++ b/0051-Add-function-to-open-temp-files-in-selinux-mode.patch
@@ -0,0 +1,111 @@
+From 8aa593f9b9c68d27a9722d1c80c39b9ff65bc2de Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 13 Jul 2014 21:10:38 -0400
+Subject: [PATCH] Add function to open temp files in selinux mode
+
+(cherry picked from commit f7f628b5db770feb8b18990436baefaec55c460b)
+---
+ src/shared/fileio-label.c | 20 ++++++++++++++++++--
+ src/shared/fileio-label.h |  2 ++
+ src/sysusers/sysusers.c   | 15 ++++-----------
+ 3 files changed, 24 insertions(+), 13 deletions(-)
+
+diff --git a/src/shared/fileio-label.c b/src/shared/fileio-label.c
+index 0711826e85..417ca5695a 100644
+--- a/src/shared/fileio-label.c
++++ b/src/shared/fileio-label.c
+@@ -25,12 +25,13 @@
+ 
+ #include "fileio-label.h"
+ #include "label.h"
++#include "util.h"
+ 
+ int write_string_file_atomic_label(const char *fn, const char *line) {
+         int r;
+ 
+         r = label_context_set(fn, S_IFREG);
+-        if (r  < 0)
++        if (r < 0)
+                 return r;
+ 
+         write_string_file_atomic(fn, line);
+@@ -44,7 +45,7 @@ int write_env_file_label(const char *fname, char **l) {
+         int r;
+ 
+         r = label_context_set(fname, S_IFREG);
+-        if (r  < 0)
++        if (r < 0)
+                 return r;
+ 
+         write_env_file(fname, l);
+@@ -53,3 +54,18 @@ int write_env_file_label(const char *fname, char **l) {
+ 
+         return r;
+ }
++
++int fopen_temporary_label(const char *target,
++                          const char *path, FILE **f, char **temp_path) {
++        int r;
++
++        r = label_context_set("/etc/passwd", S_IFREG);
++        if (r < 0)
++                return r;
++
++        r = fopen_temporary(path, f, temp_path);
++
++        label_context_clear();
++
++        return r;
++}
+diff --git a/src/shared/fileio-label.h b/src/shared/fileio-label.h
+index fce4fe0d73..25fa351be2 100644
+--- a/src/shared/fileio-label.h
++++ b/src/shared/fileio-label.h
+@@ -27,3 +27,5 @@
+ 
+ int write_string_file_atomic_label(const char *fn, const char *line);
+ int write_env_file_label(const char *fname, char **l);
++int fopen_temporary_label(const char *target,
++                          const char *path, FILE **f, char **temp_path);
+diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
+index 6ec22ccc73..bf2fbbc252 100644
+--- a/src/sysusers/sysusers.c
++++ b/src/sysusers/sysusers.c
+@@ -35,6 +35,8 @@
+ #include "conf-files.h"
+ #include "copy.h"
+ #include "utf8.h"
++#include "label.h"
++#include "fileio-label.h"
+ 
+ typedef enum ItemType {
+         ADD_USER = 'u',
+@@ -312,11 +314,7 @@ static int write_files(void) {
+                 _cleanup_fclose_ FILE *original = NULL;
+ 
+                 group_path = fix_root("/etc/group");
+-                r = label_context_set("/etc/group", S_IFREG);
+-                if (r < 0)
+-                        goto finish;
+-                r = fopen_temporary(group_path, &group, &group_tmp);
+-                label_context_clear();
++                r = fopen_temporary_label("/etc/group", group_path, &group, &group_tmp);
+                 if (r < 0)
+                         goto finish;
+ 
+@@ -392,14 +390,9 @@ static int write_files(void) {
+                 _cleanup_fclose_ FILE *original = NULL;
+ 
+                 passwd_path = fix_root("/etc/passwd");
+-                r = label_context_set("/etc/passwd", S_IFREG);
++                r = fopen_temporary_label("/etc/passwd", passwd_path, &passwd, &passwd_tmp);
+                 if (r < 0)
+                         goto finish;
+-                r = fopen_temporary(passwd_path, &passwd, &passwd_tmp);
+-                label_context_clear();
+-                if (r < 0) {
+-                        goto finish;
+-                }
+ 
+                 if (fchmod(fileno(passwd), 0644) < 0) {
+                         r = -errno;
diff --git a/0052-man-add-systemd-coredump-8-and-a-bunch-of-links.patch b/0052-man-add-systemd-coredump-8-and-a-bunch-of-links.patch
new file mode 100644
index 0000000..f5ed3ca
--- /dev/null
+++ b/0052-man-add-systemd-coredump-8-and-a-bunch-of-links.patch
@@ -0,0 +1,200 @@
+From e6751d628bdc96c751517e9b6680d3a3a5cd8f2f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 13 Jul 2014 20:32:46 -0400
+Subject: [PATCH] man: add systemd-coredump(8) and a bunch of links
+
+(cherry picked from commit 5146e7e8aec2d394c06771d4c9d0d03fc2cd911c)
+---
+ Makefile-man.am                  |   4 +-
+ man/coredumpctl.xml              |   2 +
+ man/journalctl.xml               |   1 +
+ man/systemd-coredump.xml         | 105 +++++++++++++++++++++++++++++++++++++++
+ man/systemd-journald.service.xml |   1 +
+ sysctl.d/50-coredump.conf.in     |   4 +-
+ 6 files changed, 115 insertions(+), 2 deletions(-)
+ create mode 100644 man/systemd-coredump.xml
+
+diff --git a/Makefile-man.am b/Makefile-man.am
+index 4238c21710..a02ef733aa 100644
+--- a/Makefile-man.am
++++ b/Makefile-man.am
+@@ -681,7 +681,8 @@ endif
+ if ENABLE_COREDUMP
+ MANPAGES += \
+ 	man/coredump.conf.5 \
+-	man/coredumpctl.1
++	man/coredumpctl.1 \
++	man/systemd-coredump.8
+ MANPAGES_ALIAS += \
+ 	#
+ 
+@@ -1595,6 +1596,7 @@ EXTRA_DIST += \
+ 	man/systemd-cat.xml \
+ 	man/systemd-cgls.xml \
+ 	man/systemd-cgtop.xml \
++	man/systemd-coredump.xml \
+ 	man/systemd-cryptsetup-generator.xml \
+ 	man/systemd-cryptsetup at .service.xml \
+ 	man/systemd-debug-generator.xml \
+diff --git a/man/coredumpctl.xml b/man/coredumpctl.xml
+index 73d1b8435f..327ef6e859 100644
+--- a/man/coredumpctl.xml
++++ b/man/coredumpctl.xml
+@@ -210,6 +210,8 @@
+         <refsect1>
+                 <title>See Also</title>
+                 <para>
++                        <citerefentry><refentrytitle>systemd-coredump</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
++                        <citerefentry><refentrytitle>coredump.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+                         <citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+                         <citerefentry><refentrytitle>gdb</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                 </para>
+diff --git a/man/journalctl.xml b/man/journalctl.xml
+index 78fc6f6160..de7741c819 100644
+--- a/man/journalctl.xml
++++ b/man/journalctl.xml
+@@ -908,6 +908,7 @@
+                         <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+                         <citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+                         <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
++                        <citerefentry><refentrytitle>coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+                         <citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+                         <citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+                 </para>
+diff --git a/man/systemd-coredump.xml b/man/systemd-coredump.xml
+new file mode 100644
+index 0000000000..b83b278620
+--- /dev/null
++++ b/man/systemd-coredump.xml
+@@ -0,0 +1,105 @@
++<?xml version='1.0'?> <!--*-nxml-*-->
++<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
++        "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
++
++<!--
++  This file is part of systemd.
++
++  Copyright 2014 Zbigniew Jędrzejewski-Szmek
++
++  systemd is free software; you can redistribute it and/or modify it
++  under the terms of the GNU Lesser General Public License as published by
++  the Free Software Foundation; either version 2.1 of the License, or
++  (at your option) any later version.
++
++  systemd is distributed in the hope that it will be useful, but
++  WITHOUT ANY WARRANTY; without even the implied warranty of
++  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++  Lesser General Public License for more details.
++
++  You should have received a copy of the GNU Lesser General Public License
++  along with systemd; If not, see <http://www.gnu.org/licenses/>.
++-->
++
++<refentry id="systemd-coredump" conditional='ENABLE_COREDUMP'
++          xmlns:xi="http://www.w3.org/2001/XInclude">
++
++  <refentryinfo>
++    <title>systemd-coredump</title>
++    <productname>systemd</productname>
++
++    <authorgroup>
++      <author>
++        <contrib>Developer</contrib>
++        <firstname>Lennart</firstname>
++        <surname>Poettering</surname>
++        <email>lennart at poettering.net</email>
++      </author>
++    </authorgroup>
++  </refentryinfo>
++
++  <refmeta>
++    <refentrytitle>systemd-coredump</refentrytitle>
++    <manvolnum>8</manvolnum>
++  </refmeta>
++
++  <refnamediv>
++    <refname>systemd-coredump</refname>
++    <refpurpose>Log and store core dumps</refpurpose>
++  </refnamediv>
++
++  <refsynopsisdiv>
++    <para><filename>/usr/lib/systemd/systemd-coredump</filename></para>
++  </refsynopsisdiv>
++
++  <refsect1>
++    <title>Description</title>
++
++    <para><command>systemd-coredump</command> can be used as a helper
++    binary by the kernel when a user space program receives a fatal
++    signal and dumps core. For it to be used in this capacity, it must
++    be specified by the
++    <varname>kernel.core_pattern</varname> <citerefentry project='man-pages'><refentrytitle>sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>
++    setting. Systemd installs
++    <filename>/usr/lib/sysctl.d/50-coredump.conf</filename> which
++    configures <varname>kernel.core_pattern</varname> to invoke
++    <command>systemd-coredump</command>. This file may be masked or
++    overriden to use a different setting following normal
++    <citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> rules.</para>
++
++    <para>The behaviour of a specific program upon reception of a
++    signal is governed by a few factors which are described in detail
++    in <citerefentry project='man-pages'><refentrytitle>core</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
++    In particular, the coredump will only be processed when the
++    related resource limits are high enough. For programs started by
++    <command>systemd</command> those may be set using
++    <varname>LimitCore=</varname> (see
++    <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
++    </para>
++
++    <para><command>systemd-coredump</command> will log the coredump
++    including a backtrace if possible, and store the core (contents of
++    process' memory contents) in an external file on disk in
++    <filename>/var/lib/systemd/coredump</filename>, or directly in
++    the journal. This behaviour may be modified using
++    <citerefentry><refentrytitle>coredump.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
++
++    <para>Apart from the
++    <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
++    log viewer,
++    <citerefentry><refentrytitle>coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
++    may be used to list and extract coredumps.</para>
++  </refsect1>
++
++  <refsect1>
++    <title>See Also</title>
++    <para>
++      <citerefentry><refentrytitle>coredump.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
++      <citerefentry><refentrytitle>coredumpctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
++      <citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
++      <citerefentry project='man-pages'><refentrytitle>core</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
++      <citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
++      <citerefentry><refentrytitle>systemd-sysctl.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
++    </para>
++  </refsect1>
++</refentry>
+diff --git a/man/systemd-journald.service.xml b/man/systemd-journald.service.xml
+index 7ac73ed66d..eb16118afd 100644
+--- a/man/systemd-journald.service.xml
++++ b/man/systemd-journald.service.xml
+@@ -248,6 +248,7 @@
+                         <citerefentry><refentrytitle>journald.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+                         <citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+                         <citerefentry><refentrytitle>sd-journal</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
++                        <citerefentry><refentrytitle>systemd-coredump</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+                         <citerefentry><refentrytitle>setfacl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+                         <command>pydoc systemd.journal</command>.
+                 </para>
+diff --git a/sysctl.d/50-coredump.conf.in b/sysctl.d/50-coredump.conf.in
+index d5795a37d5..d5f600ef45 100644
+--- a/sysctl.d/50-coredump.conf.in
++++ b/sysctl.d/50-coredump.conf.in
+@@ -5,6 +5,8 @@
+ #  the Free Software Foundation; either version 2.1 of the License, or
+ #  (at your option) any later version.
+ 
+-# See sysctl.d(5) and core(5) for for details.
++# See sysctl.d(5) for the description of the files in this directory,
++# and systemd-coredump(8) and core(5) for the explanation of the
++# setting below.
+ 
+ kernel.core_pattern=|@rootlibexecdir@/systemd-coredump %p %u %g %s %t %e
diff --git a/0053-man-sysusers.d-correct-default-user-shell.patch b/0053-man-sysusers.d-correct-default-user-shell.patch
new file mode 100644
index 0000000..feced97
--- /dev/null
+++ b/0053-man-sysusers.d-correct-default-user-shell.patch
@@ -0,0 +1,26 @@
+From 508627c15e7f98b1169810a2998c1707305fd58c Mon Sep 17 00:00:00 2001
+From: Sjoerd Simons <sjoerd at luon.net>
+Date: Sun, 13 Jul 2014 16:56:16 +0200
+Subject: [PATCH] man: sysusers.d correct default user shell
+
+For the non-root user sysusers uses nologin as the default shell, not
+login. Correct the documentation to match the code.
+
+(cherry picked from commit eb34cba76323ea673471e226f97721bd6bdbcbf6)
+---
+ man/sysusers.d.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/sysusers.d.xml b/man/sysusers.d.xml
+index 00eb7ec942..1e079b2111 100644
+--- a/man/sysusers.d.xml
++++ b/man/sysusers.d.xml
+@@ -102,7 +102,7 @@ m authd input</programlisting>
+                                         group will be set to the group
+                                         bearing the same name. The
+                                         user's shell will be set to
+-                                        <filename>/sbin/login</filename>,
++                                        <filename>/sbin/nologin</filename>,
+                                         the home directory to
+                                         <filename>/</filename>. The
+                                         account will be created
diff --git a/0054-man-mention-XDG_DATA_HOME-in-systemd.unit.patch b/0054-man-mention-XDG_DATA_HOME-in-systemd.unit.patch
new file mode 100644
index 0000000..b843b86
--- /dev/null
+++ b/0054-man-mention-XDG_DATA_HOME-in-systemd.unit.patch
@@ -0,0 +1,41 @@
+From 7dd741b242fef522190d6a1412ca9b422286a879 Mon Sep 17 00:00:00 2001
+From: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
+Date: Sat, 12 Jul 2014 19:36:16 +0300
+Subject: [PATCH] man: mention XDG_DATA_HOME in systemd.unit
+
+(cherry picked from commit 91acdc17a5b47e775369c6b907601f44fab07dcb)
+---
+ man/systemd.unit.xml | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index cd3279c192..f66c580a37 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -74,6 +74,8 @@
+ <filename>$HOME/.config/systemd/user/*</filename>
+ <filename>/etc/systemd/user/*</filename>
+ <filename>/run/systemd/user/*</filename>
++<filename>$XDG_DATA_HOME/systemd/user/*</filename>
++<filename>$HOME/.local/share/systemd/user/*</filename>
+ <filename>/usr/lib/systemd/user/*</filename>
+ <filename>...</filename>
+                 </literallayout></para>
+@@ -339,8 +341,16 @@
+                         <entry>Runtime units</entry>
+                       </row>
+                       <row>
++                        <entry><filename>$XDG_DATA_HOME/systemd/user</filename></entry>
++                        <entry>Units of packages that have been installed in the home directory (only used when $XDG_DATA_HOME is set)</entry>
++                      </row>
++                      <row>
++                        <entry><filename>$HOME/.local/share/systemd/user</filename></entry>
++                        <entry>Units of packages that have been installed in the home directory (only used when $XDG_DATA_HOME is not set)</entry>
++                      </row>
++                      <row>
+                         <entry><filename>/usr/lib/systemd/user</filename></entry>
+-                        <entry>Units of installed packages</entry>
++                        <entry>Units of packages that have been installed system-wide</entry>
+                       </row>
+                     </tbody>
+                   </tgroup>
diff --git a/0055-path-lookup-don-t-make-.local-share-systemd-user-a-s.patch b/0055-path-lookup-don-t-make-.local-share-systemd-user-a-s.patch
new file mode 100644
index 0000000..773aea1
--- /dev/null
+++ b/0055-path-lookup-don-t-make-.local-share-systemd-user-a-s.patch
@@ -0,0 +1,49 @@
+From d8f6518b91f3c493471fa73b7ca98759e895a3d7 Mon Sep 17 00:00:00 2001
+From: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
+Date: Sat, 12 Jul 2014 18:59:19 +0300
+Subject: [PATCH] path-lookup: don't make ~/.local/share/systemd/user a symlink
+
+We already encourage upstreams to keep the default configuration
+separate from user customizations for software that is installed in
+the system location. Let's allow that separation also for software
+that is installed in the home directory.
+
+Some discussion:
+http://thread.gmane.org/gmane.comp.sysutils.systemd.devel/19627
+
+(cherry picked from commit 667a1cd645c9402921dedff08a86bb35cddbcbf9)
+---
+ src/shared/path-lookup.c | 18 ------------------
+ 1 file changed, 18 deletions(-)
+
+diff --git a/src/shared/path-lookup.c b/src/shared/path-lookup.c
+index e0aaf4431f..7d53d859b6 100644
+--- a/src/shared/path-lookup.c
++++ b/src/shared/path-lookup.c
+@@ -125,26 +125,8 @@ static char** user_dirs(
+                         goto fail;
+ 
+         } else if (home) {
+-                _cleanup_free_ char *data_home_parent = NULL;
+-
+                 if (asprintf(&data_home, "%s/.local/share/systemd/user", home) < 0)
+                         goto fail;
+-
+-                /* There is really no need for two unit dirs in $HOME,
+-                 * except to be fully compliant with the XDG spec. We
+-                 * now try to link the two dirs, so that we can
+-                 * minimize disk seeks a little. Further down we'll
+-                 * then filter out this link, if it is actually is
+-                 * one. */
+-
+-                if (path_get_parent(data_home, &data_home_parent) >= 0) {
+-                        _cleanup_free_ char *config_home_relative = NULL;
+-
+-                        if (path_make_relative(data_home_parent, config_home, &config_home_relative) >= 0) {
+-                                mkdir_parents_label(data_home, 0777);
+-                                (void) symlink(config_home_relative, data_home);
+-                        }
+-                }
+         }
+ 
+         e = getenv("XDG_DATA_DIRS");
diff --git a/0056-fileio-quote-more-shell-characters-in-envfiles.patch b/0056-fileio-quote-more-shell-characters-in-envfiles.patch
new file mode 100644
index 0000000..b983470
--- /dev/null
+++ b/0056-fileio-quote-more-shell-characters-in-envfiles.patch
@@ -0,0 +1,53 @@
+From b91985eca0db632daecf6e20b1d3718f0f884389 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Mantas=20Mikul=C4=97nas?= <grawity at gmail.com>
+Date: Sun, 13 Jul 2014 18:49:00 +0300
+Subject: [PATCH] fileio: quote more shell characters in envfiles
+
+Turns out, making strings shell-proof is harder than expected:
+
+    # machinectl set-hostname "foo|poweroff" && . /etc/machine-info
+
+(This could be simplified by quoting *and* escaping all characters,
+which is harmless in shell but unnecessary.)
+
+(cherry picked from commit 0ce5a80601597fe4d1a715a8f70ce8d5ccaa2d86)
+---
+ src/shared/fileio.c | 4 ++--
+ src/shared/util.h   | 6 ++++++
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/src/shared/fileio.c b/src/shared/fileio.c
+index b1de5908c5..d22770b772 100644
+--- a/src/shared/fileio.c
++++ b/src/shared/fileio.c
+@@ -738,11 +738,11 @@ static void write_env_var(FILE *f, const char *v) {
+         p++;
+         fwrite(v, 1, p-v, f);
+ 
+-        if (string_has_cc(p, NULL) || chars_intersect(p, WHITESPACE "\'\"\\`$")) {
++        if (string_has_cc(p, NULL) || chars_intersect(p, WHITESPACE SHELL_NEED_QUOTES)) {
+                 fputc('\"', f);
+ 
+                 for (; *p; p++) {
+-                        if (strchr("\'\"\\`$", *p))
++                        if (strchr(SHELL_NEED_ESCAPE, *p))
+                                 fputc('\\', f);
+ 
+                         fputc(*p, f);
+diff --git a/src/shared/util.h b/src/shared/util.h
+index 7124e51d90..64b9fc6884 100644
+--- a/src/shared/util.h
++++ b/src/shared/util.h
+@@ -93,6 +93,12 @@
+ #define COMMENTS   "#;"
+ #define GLOB_CHARS "*?["
+ 
++/* What characters are special in the shell? */
++/* must be escaped outside and inside double-quotes */
++#define SHELL_NEED_ESCAPE "\"\\`$"
++/* can be escaped or double-quoted */
++#define SHELL_NEED_QUOTES SHELL_NEED_ESCAPE GLOB_CHARS "'()<>|&;"
++
+ #define FORMAT_BYTES_MAX 8
+ 
+ #define ANSI_HIGHLIGHT_ON "\x1B[1;39m"
diff --git a/0057-man-systemd.netdev-make-it-clear-that-we-do-not-touc.patch b/0057-man-systemd.netdev-make-it-clear-that-we-do-not-touc.patch
new file mode 100644
index 0000000..3d99e39
--- /dev/null
+++ b/0057-man-systemd.netdev-make-it-clear-that-we-do-not-touc.patch
@@ -0,0 +1,30 @@
+From f096a48e2195d0189742f8ed2e61cb0091d8fc62 Mon Sep 17 00:00:00 2001
+From: Tom Gundersen <teg at jklm.no>
+Date: Mon, 14 Jul 2014 12:25:42 +0200
+Subject: [PATCH] man: systemd.netdev - make it clear that we do not touch
+ preexisting netdevs
+
+We will happily use bridges/bonds as master devices, but we will not change their settings if they were created by
+someone else.
+
+(cherry picked from commit 7c1cff4ff79f3121189403a8c1b7c350925b3aaa)
+---
+ man/systemd.netdev.xml | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml
+index 857221fdb0..347f80e692 100644
+--- a/man/systemd.netdev.xml
++++ b/man/systemd.netdev.xml
+@@ -60,7 +60,10 @@
+ 
+                 <para>Virtual Network Device files must have the extension
+                 <filename>.netdev</filename>; other extensions are ignored. Virtual
+-                network devices are created as soon as networkd is started.</para>
++                network devices are created as soon as networkd is started. If a netdev
++                with the specified name already exists, networkd will use that as-is
++                rather than create its own. Note that the settings of the pre-existing
++                netdev will not be changed by networkd.</para>
+ 
+                 <para>The <filename>.netdev</filename> files are read from the files located in the
+                 system network directory <filename>/usr/lib/systemd/network</filename>,
diff --git a/0058-rules-consistently-use-instead-of.patch b/0058-rules-consistently-use-instead-of.patch
new file mode 100644
index 0000000..7e8fd6a
--- /dev/null
+++ b/0058-rules-consistently-use-instead-of.patch
@@ -0,0 +1,67 @@
+From 9221fcfe485a71dd206691f25fc7db3b02076bf3 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Tue, 15 Jul 2014 02:04:47 +0200
+Subject: [PATCH] rules: consistently use "?*" instead of "*?"
+
+(cherry picked from commit 64dfe7b74446bd56e2d0e1588f900372ac13ae42)
+---
+ rules/99-systemd.rules.in  |  2 +-
+ src/login/70-uaccess.rules | 12 ++++++------
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in
+index db72373c16..c3ef81b178 100644
+--- a/rules/99-systemd.rules.in
++++ b/rules/99-systemd.rules.in
+@@ -43,7 +43,7 @@ SUBSYSTEM=="net", KERNEL!="lo", TAG+="systemd", ENV{SYSTEMD_ALIAS}+="/sys/subsys
+ SUBSYSTEM=="bluetooth", TAG+="systemd", ENV{SYSTEMD_ALIAS}+="/sys/subsystem/bluetooth/devices/%k"
+ 
+ SUBSYSTEM=="bluetooth", TAG+="systemd", ENV{SYSTEMD_WANTS}+="bluetooth.target"
+-ENV{ID_SMARTCARD_READER}=="*?", TAG+="systemd", ENV{SYSTEMD_WANTS}+="smartcard.target"
++ENV{ID_SMARTCARD_READER}=="?*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="smartcard.target"
+ SUBSYSTEM=="sound", KERNEL=="card*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sound.target"
+ 
+ SUBSYSTEM=="printer", TAG+="systemd", ENV{SYSTEMD_WANTS}+="printer.target"
+diff --git a/src/login/70-uaccess.rules b/src/login/70-uaccess.rules
+index e1cf897acd..57f619d5eb 100644
+--- a/src/login/70-uaccess.rules
++++ b/src/login/70-uaccess.rules
+@@ -12,7 +12,7 @@ ENV{MAJOR}=="", GOTO="uaccess_end"
+ SUBSYSTEM=="usb", ENV{ID_USB_INTERFACES}=="*:060101:*", TAG+="uaccess"
+ 
+ # Digicams with proprietary protocol
+-ENV{ID_GPHOTO2}=="*?", TAG+="uaccess"
++ENV{ID_GPHOTO2}=="?*", TAG+="uaccess"
+ 
+ # SCSI and USB scanners
+ ENV{libsane_matched}=="yes", TAG+="uaccess"
+@@ -49,13 +49,13 @@ SUBSYSTEM=="drm", KERNEL=="card*|renderD*", TAG+="uaccess"
+ SUBSYSTEM=="misc", KERNEL=="kvm", TAG+="uaccess"
+ 
+ # smart-card readers
+-ENV{ID_SMARTCARD_READER}=="*?", TAG+="uaccess"
++ENV{ID_SMARTCARD_READER}=="?*", TAG+="uaccess"
+ 
+ # (USB) authentication devices
+-ENV{ID_SECURITY_TOKEN}=="*?", TAG+="uaccess"
++ENV{ID_SECURITY_TOKEN}=="?*", TAG+="uaccess"
+ 
+ # PDA devices
+-ENV{ID_PDA}=="*?", TAG+="uaccess"
++ENV{ID_PDA}=="?*", TAG+="uaccess"
+ 
+ # Programmable remote control
+ ENV{ID_REMOTE_CONTROL}=="1", TAG+="uaccess"
+@@ -64,10 +64,10 @@ ENV{ID_REMOTE_CONTROL}=="1", TAG+="uaccess"
+ SUBSYSTEM=="input", ENV{ID_INPUT_JOYSTICK}=="?*", TAG+="uaccess"
+ 
+ # color measurement devices
+-ENV{COLOR_MEASUREMENT_DEVICE}=="*?", TAG+="uaccess"
++ENV{COLOR_MEASUREMENT_DEVICE}=="?*", TAG+="uaccess"
+ 
+ # DDC/CI device, usually high-end monitors such as the DreamColor
+-ENV{DDC_DEVICE}=="*?", TAG+="uaccess"
++ENV{DDC_DEVICE}=="?*", TAG+="uaccess"
+ 
+ # media player raw devices (for user-mode drivers, Android SDK, etc.)
+ SUBSYSTEM=="usb", ENV{ID_MEDIA_PLAYER}=="?*", TAG+="uaccess"
diff --git a/0059-timesyncd-suppress-resync-at-system-time-change-when.patch b/0059-timesyncd-suppress-resync-at-system-time-change-when.patch
new file mode 100644
index 0000000..49ce70a
--- /dev/null
+++ b/0059-timesyncd-suppress-resync-at-system-time-change-when.patch
@@ -0,0 +1,31 @@
+From 5c34306656dbcc8932f3dd992cf7e3e1d78c8a80 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Tue, 15 Jul 2014 02:24:35 +0200
+Subject: [PATCH] timesyncd: suppress resync at system time change when not
+ connected
+
+Jul 04 17:46:03 orchid systemd[1]: Starting Network Time Synchronization...
+Jul 04 17:46:03 orchid systemd[1]: Started Network Time Synchronization.
+Jul 04 17:46:22 orchid systemd-timesyncd[301]: System time changed. Resyncing.
+Jul 04 17:46:22 orchid systemd-timesyncd[301]: Assertion 'm->current_server_name'
+
+https://bugs.freedesktop.org/show_bug.cgi?id=80932
+(cherry picked from commit afc7b1b9c170b9d23a3d91367e00f33b2ee2e89e)
+---
+ src/timesync/timesyncd.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/timesync/timesyncd.c b/src/timesync/timesyncd.c
+index 27f6b2d226..9bc773ce5f 100644
+--- a/src/timesync/timesyncd.c
++++ b/src/timesync/timesyncd.c
+@@ -331,6 +331,9 @@ static int manager_clock_watch(sd_event_source *source, int fd, uint32_t revents
+         /* rearm timer */
+         manager_clock_watch_setup(m);
+ 
++        if (!m->current_server_address)
++                return 0;
++
+         /* skip our own jumps */
+         if (m->jumped) {
+                 m->jumped = false;
diff --git a/0060-timesyncd-only-listen-to-clock-changes-when-connecte.patch b/0060-timesyncd-only-listen-to-clock-changes-when-connecte.patch
new file mode 100644
index 0000000..16b8880
--- /dev/null
+++ b/0060-timesyncd-only-listen-to-clock-changes-when-connecte.patch
@@ -0,0 +1,45 @@
+From 1e673f08f3299f4704e26cb983f046091881dc01 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Tue, 15 Jul 2014 09:52:17 -0400
+Subject: [PATCH] timesyncd: only listen to clock changes when connected
+
+This reverts previous commit and applies a different fix.
+
+manager_clock_watch() callback calls manager_send_request() to kick
+off a resync. We can only do that when we're actually connected to
+something. It is not useful to setup the callback from manager_new().
+
+Now the callback will be dropped in manager_connect() and requested
+in manager_begin().
+
+https://bugs.freedesktop.org/show_bug.cgi?id=80932
+(cherry picked from commit c566ee3253132cc2ec37ed04c5bccbadf8e60c58)
+---
+ src/timesync/timesyncd.c | 7 -------
+ 1 file changed, 7 deletions(-)
+
+diff --git a/src/timesync/timesyncd.c b/src/timesync/timesyncd.c
+index 9bc773ce5f..19af9f9b61 100644
+--- a/src/timesync/timesyncd.c
++++ b/src/timesync/timesyncd.c
+@@ -331,9 +331,6 @@ static int manager_clock_watch(sd_event_source *source, int fd, uint32_t revents
+         /* rearm timer */
+         manager_clock_watch_setup(m);
+ 
+-        if (!m->current_server_address)
+-                return 0;
+-
+         /* skip our own jumps */
+         if (m->jumped) {
+                 m->jumped = false;
+@@ -1047,10 +1044,6 @@ static int manager_new(Manager **ret) {
+         if (r < 0)
+                 return r;
+ 
+-        r = manager_clock_watch_setup(m);
+-        if (r < 0)
+-                return r;
+-
+         *ret = m;
+         m = NULL;
+ 
diff --git a/0061-shell-completion-restore-completion-for-p.patch b/0061-shell-completion-restore-completion-for-p.patch
new file mode 100644
index 0000000..26a9545
--- /dev/null
+++ b/0061-shell-completion-restore-completion-for-p.patch
@@ -0,0 +1,140 @@
+From 49323e421a0fad064e3258ca26ae8c80a3386666 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Mon, 14 Jul 2014 19:24:46 -0400
+Subject: [PATCH] shell-completion: restore completion for -p
+
+It was broken since systemd was moved out of /bin.
+
+For zsh it was never there.
+
+(cherry picked from commit c0a67aef31bb9716617ffe150ca8be19c5df203e)
+---
+ Makefile.am                                        | 19 +++++++++++++++++--
+ shell-completion/bash/.gitignore                   |  1 +
+ shell-completion/bash/{systemctl => systemctl.in}  |  4 ++--
+ shell-completion/zsh/.gitignore                    |  1 +
+ shell-completion/zsh/{_systemctl => _systemctl.in} | 15 ++++++++++++++-
+ 5 files changed, 35 insertions(+), 5 deletions(-)
+ create mode 100644 shell-completion/bash/.gitignore
+ rename shell-completion/bash/{systemctl => systemctl.in} (98%)
+ create mode 100644 shell-completion/zsh/.gitignore
+ rename shell-completion/zsh/{_systemctl => _systemctl.in} (95%)
+
+diff --git a/Makefile.am b/Makefile.am
+index 025461b497..9847ff50bc 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -383,7 +383,6 @@ systemgenerator_PROGRAMS = \
+ dist_bashcompletion_DATA = \
+ 	shell-completion/bash/busctl \
+ 	shell-completion/bash/journalctl \
+-	shell-completion/bash/systemctl \
+ 	shell-completion/bash/systemd-analyze \
+ 	shell-completion/bash/systemd-cat \
+ 	shell-completion/bash/systemd-cgls \
+@@ -395,8 +394,10 @@ dist_bashcompletion_DATA = \
+ 	shell-completion/bash/udevadm \
+ 	shell-completion/bash/kernel-install
+ 
++nodist_bashcompletion_DATA = \
++	shell-completion/bash/systemctl
++
+ dist_zshcompletion_DATA = \
+-	shell-completion/zsh/_systemctl \
+ 	shell-completion/zsh/_journalctl \
+ 	shell-completion/zsh/_udevadm \
+ 	shell-completion/zsh/_kernel-install \
+@@ -407,6 +408,17 @@ dist_zshcompletion_DATA = \
+ 	shell-completion/zsh/_systemd-delta \
+ 	shell-completion/zsh/_systemd
+ 
++nodist_zshcompletion_DATA = \
++	shell-completion/zsh/_systemctl
++
++EXTRA_DIST += \
++	shell-completion/bash/systemctl.in \
++	shell-completion/zsh/_systemctl.in
++
++CLEANFILES += \
++	$(nodist_bashcompletion_DATA) \
++	$(nodist_zshcompletion_DATA)
++
+ dist_sysctl_DATA = \
+ 	sysctl.d/50-default.conf
+ 
+@@ -5196,6 +5208,9 @@ src/core/macros.%: src/core/macros.%.in
+ src/%.policy.in: src/%.policy.in.in
+ 	$(SED_PROCESS)
+ 
++shell-completion/%: shell-completion/%.in
++	$(SED_PROCESS)
++
+ %.rules: %.rules.in
+ 	$(SED_PROCESS)
+ 
+diff --git a/shell-completion/bash/.gitignore b/shell-completion/bash/.gitignore
+new file mode 100644
+index 0000000000..016e09d1e7
+--- /dev/null
++++ b/shell-completion/bash/.gitignore
+@@ -0,0 +1 @@
++/systemctl
+diff --git a/shell-completion/bash/systemctl b/shell-completion/bash/systemctl.in
+similarity index 98%
+rename from shell-completion/bash/systemctl
+rename to shell-completion/bash/systemctl.in
+index e1c842006e..4beec4e13f 100644
+--- a/shell-completion/bash/systemctl
++++ b/shell-completion/bash/systemctl.in
+@@ -24,8 +24,8 @@ __systemctl() {
+ 
+ __systemd_properties() {
+         local mode=$1
+-        { __systemctl -a $mode show;
+-         systemd --dump-configuration-items; } |
++        { __systemctl $mode show --all;
++         @rootlibexecdir@/systemd --dump-configuration-items; } |
+         while IFS='=' read -r key value; do
+             [[ $value ]] && echo "$key"
+         done
+diff --git a/shell-completion/zsh/.gitignore b/shell-completion/zsh/.gitignore
+new file mode 100644
+index 0000000000..75f13ad6d1
+--- /dev/null
++++ b/shell-completion/zsh/.gitignore
+@@ -0,0 +1 @@
++/_systemctl
+diff --git a/shell-completion/zsh/_systemctl b/shell-completion/zsh/_systemctl.in
+similarity index 95%
+rename from shell-completion/zsh/_systemctl
+rename to shell-completion/zsh/_systemctl.in
+index b6cf664587..d9b8d1c0e3 100644
+--- a/shell-completion/zsh/_systemctl
++++ b/shell-completion/zsh/_systemctl.in
+@@ -301,12 +301,25 @@ _unit_types() {
+     _values -s , "${_types[@]}"
+ }
+ 
++_unit_properties() {
++  if ( [[ ${+_sys_all_properties} -eq 0 ]] || _cache_invalid SYS_ALL_PROPERTIES ) &&
++    ! _retrieve_cache SYS_ALL_PROPERTIES;
++  then
++    _sys_all_properties=( $( {__systemctl show --all;
++       @rootlibexecdir@/systemd --dump-configuration-items; } | {
++       while IFS='=' read -r a b; do [ -n "$b" ] && echo "$a"; done
++    }) )
++    _store_cache SYS_ALL_PROPRTIES _sys_all_properties
++  fi
++  _values -s , "${_sys_all_properties[@]}"
++}
++
+ _arguments -s \
+     {-h,--help}'[Show help]' \
+     '--version[Show package version]' \
+     {-t+,--type=}'[List only units of a particular type]:unit type:_unit_types' \
+     '--state=[Display units in the specifyied state]:unit state:_unit_states' \
+-    \*{-p+,--property=}'[Show only properties by specific name]:unit property' \
++    {-p+,--property=}'[Show only properties by specific name]:unit property:_unit_properties' \
+     {-a,--all}'[Show all units/properties, including dead/empty ones]' \
+     '--reverse[Show reverse dependencies]' \
+     '--after[Show units ordered after]' \
diff --git a/0062-core-fix-oneshot-service-resource-control.patch b/0062-core-fix-oneshot-service-resource-control.patch
new file mode 100644
index 0000000..057e4b0
--- /dev/null
+++ b/0062-core-fix-oneshot-service-resource-control.patch
@@ -0,0 +1,27 @@
+From 5ad965069574badd35f79ecb8e6def133de8bd8b Mon Sep 17 00:00:00 2001
+From: Umut Tezduyar Lindskog <umut.tezduyar at axis.com>
+Date: Tue, 15 Jul 2014 08:36:29 +0200
+Subject: [PATCH] core: fix oneshot service resource control
+
+Oneshot services's cgroup is removed when the service
+exits. An assert is hit otherwise.
+
+(cherry picked from commit 285cd771cbe275265e165bdb5650b92b31eeab47)
+---
+ src/core/manager.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/manager.c b/src/core/manager.c
+index 0cb2044325..edcde31ec1 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -2539,7 +2539,8 @@ void manager_check_finished(Manager *m) {
+         }
+ 
+         SET_FOREACH(u, m->startup_units, i)
+-                cgroup_context_apply(unit_get_cgroup_context(u), unit_get_cgroup_mask(u), u->cgroup_path, manager_state(m));
++                if (u->cgroup_path)
++                        cgroup_context_apply(unit_get_cgroup_context(u), unit_get_cgroup_mask(u), u->cgroup_path, manager_state(m));
+ 
+         bus_manager_send_finished(m, firmware_usec, loader_usec, kernel_usec, initrd_usec, userspace_usec, total_usec);
+ 
diff --git a/0063-rules-uaccess-add-ID_SOFTWARE_RADIO.patch b/0063-rules-uaccess-add-ID_SOFTWARE_RADIO.patch
new file mode 100644
index 0000000..e25ac9d
--- /dev/null
+++ b/0063-rules-uaccess-add-ID_SOFTWARE_RADIO.patch
@@ -0,0 +1,44 @@
+From 4e0d085ff52a7d7858a30c651e37b18f3e92618b Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Tue, 15 Jul 2014 17:35:53 +0200
+Subject: [PATCH] rules: uaccess - add ID_SOFTWARE_RADIO
+
+On Tue, Jul 15, 2014 at 1:52 PM, Alick Zhao <alick9188 at gmail.com> wrote:
+>>>
+>>> So maybe ID_SOFTWARE_RADIO ?
+>>
+>> Hmm, SDR is more a term for a generic technology than for a device
+>> class. To me it does not really sound like an administrator would know
+>> what this is.
+>>
+>> What exactly is the device or subsystem you want to make accessible to
+>> locally logged-in users only?
+>
+> Initially it is bladeRF, but many more are of interest: USRP, rtl-sdr,
+> HackRF, ... [1]
+>
+> I agree an administrator might not know what SDR is, since it is
+> currently still not widely known, and makes sense only for amateurs
+> and researchers. But as a SDR fan, I see many new SDR peripherals
+> are created recently, and expect to see more. So a generic ID seems
+> reasonable to me.
+>
+> [1] http://en.wikipedia.org/wiki/List_of_software-defined_radios
+
+(cherry picked from commit 30632d97d9d68c8202e562f34afae8f8d6e9c377)
+---
+ src/login/70-uaccess.rules | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/login/70-uaccess.rules b/src/login/70-uaccess.rules
+index 57f619d5eb..694df2cfc8 100644
+--- a/src/login/70-uaccess.rules
++++ b/src/login/70-uaccess.rules
+@@ -72,4 +72,7 @@ ENV{DDC_DEVICE}=="?*", TAG+="uaccess"
+ # media player raw devices (for user-mode drivers, Android SDK, etc.)
+ SUBSYSTEM=="usb", ENV{ID_MEDIA_PLAYER}=="?*", TAG+="uaccess"
+ 
++# software-defined radio communication devices
++ENV{ID_SOFTWARE_RADIO}=="?*", TAG+="uaccess"
++
+ LABEL="uaccess_end"
diff --git a/0064-journal-allow-files-with-no-data-whatsoever.patch b/0064-journal-allow-files-with-no-data-whatsoever.patch
new file mode 100644
index 0000000..0c8382b
--- /dev/null
+++ b/0064-journal-allow-files-with-no-data-whatsoever.patch
@@ -0,0 +1,32 @@
+From ae1d412f96829802688194e6957f75d37da9d7e9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sun, 30 Mar 2014 14:20:34 -0400
+Subject: [PATCH] journal: allow files with no data whatsoever
+
+If a file was opened for writing, and then closed immediately without
+actually writing any entries, on subsequent opening, it would be
+considered "corrupted". This should be totally fine, and even in
+read mode, an empty file can become non-empty later on.
+
+(cherry picked from commit b3306e9c3c1e036396bc6bf74555eecea3f45ad9)
+---
+ src/journal/journal-file.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index b3b1ffc3c0..ef54af4558 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -271,12 +271,6 @@ static int journal_file_verify_header(JournalFile *f) {
+             !VALID64(le64toh(f->header->entry_array_offset)))
+                 return -ENODATA;
+ 
+-        if (le64toh(f->header->data_hash_table_offset) < le64toh(f->header->header_size) ||
+-            le64toh(f->header->field_hash_table_offset) < le64toh(f->header->header_size) ||
+-            le64toh(f->header->tail_object_offset) < le64toh(f->header->header_size) ||
+-            le64toh(f->header->entry_array_offset) < le64toh(f->header->header_size))
+-                return -ENODATA;
+-
+         if (f->writable) {
+                 uint8_t state;
+                 sd_id128_t machine_id;
diff --git a/0065-units-serial-getty-.service-use-the-default-RestartS.patch b/0065-units-serial-getty-.service-use-the-default-RestartS.patch
new file mode 100644
index 0000000..fa1cf0c
--- /dev/null
+++ b/0065-units-serial-getty-.service-use-the-default-RestartS.patch
@@ -0,0 +1,33 @@
+From 89b958ef6a43400d1f7b25c58b02f4b5c3c59b36 Mon Sep 17 00:00:00 2001
+From: Michael Olbrich <m.olbrich at pengutronix.de>
+Date: Tue, 15 Jul 2014 18:28:10 +0200
+Subject: [PATCH] units/serial-getty at .service: use the default RestartSec
+
+For pluggable ttys such as USB serial devices, the getty is restarted
+and exits in a loop until the remove event reaches systemd. Under
+certain circumstances the restart loop can overload the system in a
+way that prevents the remove event from reaching systemd for a long
+time (e.g. at least several minutes on a small embedded system).
+
+Use the default RestartSec to prevent the restart loop from
+overloading the system. Serial gettys are interactive units, so
+waiting an extra 100ms really doesn't make a difference anyways
+compared to the time it takes the user to log in.
+
+(cherry picked from commit 4bf04322b8b7ecca4f3d65cfc642d0ac16356129)
+---
+ units/serial-getty at .service.m4 | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/units/serial-getty at .service.m4 b/units/serial-getty at .service.m4
+index 4ac51e768d..4522d0d2be 100644
+--- a/units/serial-getty at .service.m4
++++ b/units/serial-getty at .service.m4
+@@ -25,7 +25,6 @@ IgnoreOnIsolate=yes
+ ExecStart=-/sbin/agetty --keep-baud 115200,38400,9600 %I $TERM
+ Type=idle
+ Restart=always
+-RestartSec=0
+ UtmpIdentifier=%I
+ TTYPath=/dev/%I
+ TTYReset=yes
diff --git a/0066-build-sys-don-t-move-libgudev-to-lib.patch b/0066-build-sys-don-t-move-libgudev-to-lib.patch
new file mode 100644
index 0000000..30a1700
--- /dev/null
+++ b/0066-build-sys-don-t-move-libgudev-to-lib.patch
@@ -0,0 +1,33 @@
+From c46cee9156e8785fc70e8528d6deb402bef06ca0 Mon Sep 17 00:00:00 2001
+From: Michael Biebl <biebl at debian.org>
+Date: Wed, 16 Jul 2014 12:09:47 +0200
+Subject: [PATCH] build-sys: don't move libgudev to /lib
+
+It depends on libgobject and libgmodule which are installed in /usr/lib.
+
+(cherry picked from commit 5c059d2ead0787a90732d27ed1b485d236abf641)
+---
+ Makefile.am | 10 ----------
+ 1 file changed, 10 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 9847ff50bc..2b0c855da2 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -3338,16 +3338,6 @@ typelibs_DATA = \
+ 
+ CLEANFILES += $(gir_DATA) $(typelibs_DATA)
+ endif # HAVE_INTROSPECTION
+-
+-# move lib from $(libdir) to $(rootlibdir) and update devel link, if needed
+-libgudev-install-hook:
+-	libname=libgudev-1.0.so && $(move-to-rootlibdir)
+-
+-libgudev-uninstall-hook:
+-	rm -f $(DESTDIR)$(rootlibdir)/libgudev-1.0.so*
+-
+-INSTALL_EXEC_HOOKS += libgudev-install-hook
+-UNINSTALL_EXEC_HOOKS += libgudev-uninstall-hook
+ endif
+ 
+ EXTRA_DIST += \
diff --git a/0067-shared-include-stdbool.h-in-mkdir.h.patch b/0067-shared-include-stdbool.h-in-mkdir.h.patch
new file mode 100644
index 0000000..a61177a
--- /dev/null
+++ b/0067-shared-include-stdbool.h-in-mkdir.h.patch
@@ -0,0 +1,22 @@
+From a6874d3be0e08b17cc62b84e4dde2abebe035d81 Mon Sep 17 00:00:00 2001
+From: Sjoerd Simons <sjoerd at luon.net>
+Date: Wed, 16 Jul 2014 12:09:56 +0200
+Subject: [PATCH] shared: include stdbool.h in mkdir.h
+
+(cherry picked from commit 4e4877d96c8afd0818176a472080986bbf28ea3a)
+---
+ src/shared/mkdir.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/shared/mkdir.h b/src/shared/mkdir.h
+index d15ede6064..dd5b41ec6f 100644
+--- a/src/shared/mkdir.h
++++ b/src/shared/mkdir.h
+@@ -22,6 +22,7 @@
+   along with systemd; If not, see <http://www.gnu.org/licenses/>.
+ ***/
+ 
++#include <stdbool.h>
+ #include <sys/types.h>
+ 
+ int mkdir_safe(const char *path, mode_t mode, uid_t uid, gid_t gid);
diff --git a/0068-missing.h-add-IFLA_MACVLAN_FLAGS.patch b/0068-missing.h-add-IFLA_MACVLAN_FLAGS.patch
new file mode 100644
index 0000000..88ebc54
--- /dev/null
+++ b/0068-missing.h-add-IFLA_MACVLAN_FLAGS.patch
@@ -0,0 +1,48 @@
+From 5a263a734350a1f2de6b3e6ac8813b51280a9794 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Wed, 16 Jul 2014 16:44:45 -0400
+Subject: [PATCH] missing.h: add IFLA_MACVLAN_FLAGS
+
+Now we are getting into kernel < 3.4 territory...
+
+https://bugs.freedesktop.org/show_bug.cgi?id=80095
+(cherry picked from commit 75616a1332aff00d27db713cda3bd93c508a5b59)
+---
+ configure.ac         | 3 ++-
+ src/shared/missing.h | 9 +++++++++
+ 2 files changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index ae88382e21..df6b3571d1 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -310,7 +310,8 @@ AC_CHECK_DECLS([gettid, pivot_root, name_to_handle_at, setns, LO_FLAGS_PARTSCAN]
+ #include <linux/loop.h>
+ ]])
+ 
+-AC_CHECK_DECLS([IFLA_PHYS_PORT_ID,
++AC_CHECK_DECLS([IFLA_MACVLAN_FLAGS,
++                IFLA_PHYS_PORT_ID,
+                 IFLA_BOND_AD_INFO,
+                 IFLA_VLAN_PROTOCOL,
+                 IFLA_VXLAN_LOCAL6,
+diff --git a/src/shared/missing.h b/src/shared/missing.h
+index f129f0b2d3..818d704f92 100644
+--- a/src/shared/missing.h
++++ b/src/shared/missing.h
+@@ -371,6 +371,15 @@ static inline int setns(int fd, int nstype) {
+ #define LOOP_CTL_GET_FREE 0x4C82
+ #endif
+ 
++#if !HAVE_DECL_IFLA_MACVLAN_FLAGS
++#define IFLA_MACVLAN_UNSPEC 0
++#define IFLA_MACVLAN_MODE 1
++#define IFLA_MACVLAN_FLAGS 2
++#define __IFLA_MACVLAN_MAX 3
++
++#define IFLA_MACVLAN_MAX (__IFLA_MACVLAN_MAX - 1)
++#endif
++
+ #if !HAVE_DECL_IFLA_PHYS_PORT_ID
+ #undef IFLA_PROMISCUITY
+ #define IFLA_PROMISCUITY 30
diff --git a/0069-man-document-yearly-and-annually-in-systemd.time-7.patch b/0069-man-document-yearly-and-annually-in-systemd.time-7.patch
new file mode 100644
index 0000000..ee6f890
--- /dev/null
+++ b/0069-man-document-yearly-and-annually-in-systemd.time-7.patch
@@ -0,0 +1,47 @@
+From 6941ea3fb076b8abc3e4e1759f448e2532ed14a5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Wed, 16 Jul 2014 22:17:29 -0400
+Subject: [PATCH] man: document yearly and annually in systemd.time(7)
+
+https://bugs.freedesktop.org/show_bug.cgi?id=81158
+(cherry picked from commit 8c275eef38bf7e3e592e4cb35a497522d1f15bb6)
+---
+ man/systemd.time.xml | 18 ++++++++++++------
+ 1 file changed, 12 insertions(+), 6 deletions(-)
+
+diff --git a/man/systemd.time.xml b/man/systemd.time.xml
+index 0706cdf54a..02431a5a1e 100644
+--- a/man/systemd.time.xml
++++ b/man/systemd.time.xml
+@@ -243,12 +243,16 @@
+ 
+                 <para>The special expressions
+                 <literal>hourly</literal>, <literal>daily</literal>,
+-                <literal>monthly</literal> and <literal>weekly</literal>
+-                may be used as calendar events which refer to
+-                <literal>*-*-* *:00:00</literal>, <literal>*-*-*
+-                00:00:00</literal>, <literal>*-*-01 00:00:00</literal> and
+-                <literal>Mon *-*-* 00:00:00</literal>,
+-                respectively.</para>
++                <literal>monthly</literal>, <literal>weekly</literal>,
++                and <literal>yearly</literal> or
++                <literal>annually</literal> may be used as calendar
++                events which refer to
++                <literal>*-*-* *:00:00</literal>,
++                <literal>*-*-* 00:00:00</literal>,
++                <literal>*-*-01 00:00:00</literal>,
++                <literal>Mon *-*-* 00:00:00</literal>, and
++                <literal>*-01-01 00:00:00</literal> respectively.
++                </para>
+ 
+                 <para>Examples for valid timestamps and their
+                 normalized form:</para>
+@@ -277,6 +281,8 @@ Wed-Sat,Tue 12-10-15 1:2:3 → Tue-Sat 2012-10-15 01:02:03
+                      daily → *-*-* 00:00:00
+                    monthly → *-*-01 00:00:00
+                     weekly → Mon *-*-* 00:00:00
++                    yearly → *-01-01 00:00:00
++                  annually → *-01-01 00:00:00
+                      *:2/3 → *-*-* *:02/3:00</programlisting>
+ 
+                   <para>Calendar events are used by timer units, see
diff --git a/0070-core-nicer-message-when-inotify-watches-are-exhauste.patch b/0070-core-nicer-message-when-inotify-watches-are-exhauste.patch
new file mode 100644
index 0000000..f797a5f
--- /dev/null
+++ b/0070-core-nicer-message-when-inotify-watches-are-exhauste.patch
@@ -0,0 +1,28 @@
+From fe85271fb6090e58b36e182ce3e20a388f0ca006 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Wed, 16 Jul 2014 22:52:53 -0400
+Subject: [PATCH] core: nicer message when inotify watches are exhausted
+
+inotify_add_watch returns ENOSPC, which translates to
+"No space left on device", which is misleading.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=73628
+(cherry picked from commit 18abe7bd3e13525b257da69ac49ff7841c289567)
+---
+ src/core/path.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/path.c b/src/core/path.c
+index 20e454d96f..f54c77f6c3 100644
+--- a/src/core/path.c
++++ b/src/core/path.c
+@@ -99,7 +99,8 @@ int path_spec_watch(PathSpec *s, sd_event_io_handler_t handler) {
+                                 break;
+                         }
+ 
+-                        log_warning("Failed to add watch on %s: %m", s->path);
++                        log_warning("Failed to add watch on %s: %s", s->path,
++                                    errno == ENOSPC ? "too many watches" : strerror(-r));
+                         r = -errno;
+                         if (cut)
+                                 *cut = tmp;
diff --git a/0071-detect-virt-Fix-Xen-domU-discovery.patch b/0071-detect-virt-Fix-Xen-domU-discovery.patch
new file mode 100644
index 0000000..de03de5
--- /dev/null
+++ b/0071-detect-virt-Fix-Xen-domU-discovery.patch
@@ -0,0 +1,31 @@
+From be8dbe82ba453b40e119010454e30237e6d02b12 Mon Sep 17 00:00:00 2001
+From: Thomas Blume <Thomas.Blume at suse.com>
+Date: Thu, 17 Jul 2014 11:25:37 +0200
+Subject: [PATCH] detect-virt: Fix Xen domU discovery
+
+The conditional for detection xen virtualization contained a little mistake.
+It is checking for i to be empty: 'if (!i)  {', but it must check for cap instead,
+because: 'cap = strsep(&i, ",")' will set cap to the discovered value and i to
+the next value after the separator.
+Hence, i would be empty, if there is only control_d in domcap, leading to a wrong
+domU detection.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=77271
+(cherry picked from commit a71516dfd1858f37712ef52a288bf5fb274383e0)
+---
+ src/shared/virt.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/shared/virt.c b/src/shared/virt.c
+index 774915f4be..20a8d7c5bf 100644
+--- a/src/shared/virt.c
++++ b/src/shared/virt.c
+@@ -173,7 +173,7 @@ int detect_vm(const char **id) {
+                         if (streq(cap, "control_d"))
+                                 break;
+ 
+-                if (!i)  {
++                if (!cap)  {
+                         _id = "xen";
+                         r = 1;
+                 }
diff --git a/0072-journal-reduce-test-journal-send-timeout-from-10s-to.patch b/0072-journal-reduce-test-journal-send-timeout-from-10s-to.patch
new file mode 100644
index 0000000..29857b5
--- /dev/null
+++ b/0072-journal-reduce-test-journal-send-timeout-from-10s-to.patch
@@ -0,0 +1,27 @@
+From 918af53be96fe4284538ebf8eb4fac1aa8839529 Mon Sep 17 00:00:00 2001
+From: David Herrmann <dh.herrmann at gmail.com>
+Date: Fri, 18 Jul 2014 12:58:00 +0200
+Subject: [PATCH] journal: reduce test-journal-send timeout from 10s to 1s
+
+The sleep(10) in test-journal-send is quite aggressive. We need it only
+for the journal to get our cgroup information. But even that information
+is not vital to the test, so a sleep(1) should be just fine.
+
+(cherry picked from commit 037ee337f0f64bd35ced765f2e2d97f496d4e7c7)
+---
+ src/journal/test-journal-send.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/journal/test-journal-send.c b/src/journal/test-journal-send.c
+index 3e986ed99a..45eb327609 100644
+--- a/src/journal/test-journal-send.c
++++ b/src/journal/test-journal-send.c
+@@ -72,7 +72,7 @@ int main(int argc, char *argv[]) {
+                         "N_CPUS=%li", sysconf(_SC_NPROCESSORS_ONLN),
+                         NULL);
+ 
+-        sleep(10);
++        sleep(1);
+ 
+         return 0;
+ }
diff --git a/0073-systemd-detect-virt-detect-s390-virtualization.patch b/0073-systemd-detect-virt-detect-s390-virtualization.patch
new file mode 100644
index 0000000..dcd3f75
--- /dev/null
+++ b/0073-systemd-detect-virt-detect-s390-virtualization.patch
@@ -0,0 +1,71 @@
+From 4b41b0d24b5efe70a5d6a39ff7b1f6571a7315b5 Mon Sep 17 00:00:00 2001
+From: Thomas Blume <Thomas.Blume at suse.com>
+Date: Fri, 18 Jul 2014 09:13:36 -0400
+Subject: [PATCH] systemd-detect-virt: detect s390 virtualization
+
+A system that is running on a logical partition (LPAR) provided by
+PR/SM has access to physical hardware (except CPU). It is true that
+PR/SM abstracts the hardware, but only for sharing purposes.
+
+Details are statet at:
+
+http://publib.boulder.ibm.com/infocenter/eserver/v1r2/topic/eicaz/eicazzlpar.htm
+
+-->--
+In other words, PR/SM transforms physical resources into virtual resources so
+that many logical partitions can share the same physical resources.
+--<--
+
+Still, from the OS point of view, the shared virtual resource is real
+hardware. ConditionVirtualization must be set to false if the OS runs
+directly on PR/SM (e.g. in an LPAR).
+
+[zj: reorder code so that variables are not allocated when #if-def is
+false. Add commit message.]
+
+(cherry picked from commit f41925b4e442a34c93ad120ef1426c974a047ed1)
+---
+ man/systemd.unit.xml |  1 +
+ src/shared/virt.c    | 17 +++++++++++++++++
+ 2 files changed, 18 insertions(+)
+
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index f66c580a37..e66be4ee51 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -995,6 +995,7 @@
+                                 virtualization solution, or one of
+                                 <varname>qemu</varname>,
+                                 <varname>kvm</varname>,
++                                <varname>zvm</varname>,
+                                 <varname>vmware</varname>,
+                                 <varname>microsoft</varname>,
+                                 <varname>oracle</varname>,
+diff --git a/src/shared/virt.c b/src/shared/virt.c
+index 20a8d7c5bf..b4368952ff 100644
+--- a/src/shared/virt.c
++++ b/src/shared/virt.c
+@@ -220,6 +220,23 @@ int detect_vm(const char **id) {
+                 goto finish;
+         }
+ 
++#if defined(__s390__)
++        {
++                _cleanup_free_ char *t = NULL;
++
++                r = get_status_field("/proc/sysinfo", "VM00 Control Program:", &t);
++                if (r >= 0) {
++                        if (streq(t, "z/VM"))
++                                _id = "zvm";
++                        else
++                                _id = "kvm";
++                        r = 1;
++
++                        goto finish;
++                }
++        }
++#endif
++
+         r = 0;
+ 
+ finish:
diff --git a/0074-man-journal-add-note-about-sd_journal_get_cutoff_mon.patch b/0074-man-journal-add-note-about-sd_journal_get_cutoff_mon.patch
new file mode 100644
index 0000000..608cefa
--- /dev/null
+++ b/0074-man-journal-add-note-about-sd_journal_get_cutoff_mon.patch
@@ -0,0 +1,116 @@
+From 634a6893abd524b5ccae0c9b8cd0957fa00abb24 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Fri, 18 Jul 2014 21:44:36 -0400
+Subject: [PATCH] man,journal: add note about
+ sd_journal_get_cutoff_monotonic_usec return value
+
+Also modify the function itself to be a bit simpler to read.
+
+(cherry picked from commit 1651e2c61e544de9ca947c8b3202552b1272ef57)
+---
+ man/sd_journal_get_cutoff_realtime_usec.xml | 36 ++++++++++++++++++-----------
+ src/journal/sd-journal.c                    | 16 ++++++-------
+ 2 files changed, 31 insertions(+), 21 deletions(-)
+
+diff --git a/man/sd_journal_get_cutoff_realtime_usec.xml b/man/sd_journal_get_cutoff_realtime_usec.xml
+index 6df4b26e6f..ef987d85b0 100644
+--- a/man/sd_journal_get_cutoff_realtime_usec.xml
++++ b/man/sd_journal_get_cutoff_realtime_usec.xml
+@@ -74,25 +74,29 @@
+                 <title>Description</title>
+ 
+                 <para><function>sd_journal_get_cutoff_realtime_usec()</function>
+-                gets the realtime (wallclock) timestamps of the first
+-                and last entries accessible in the journal.  It takes
+-                three arguments: the journal context object and two
+-                pointers to 64-bit unsigned integers to store the
+-                timestamps in. The timestamps are in microseconds
+-                since the epoch,
++                retrieves the realtime (wallclock) timestamps of the
++                first and last entries accessible in the journal.  It
++                takes three arguments: the journal context object
++                <parameter>j</parameter> and two pointers
++                <parameter>from</parameter> and
++                <parameter>to</parameter> pointing at 64-bit unsigned
++                integers to store the timestamps in. The timestamps
++                are in microseconds since the epoch,
+                 i.e. <constant>CLOCK_REALTIME</constant>. Either one
+                 of the two timestamp arguments may be passed as
+                 <constant>NULL</constant> in case the timestamp is not
+                 needed, but not both.</para>
+ 
+                 <para><function>sd_journal_get_cutoff_monotonic_usec()</function>
+-                gets the monotonic timestamps of the first and last
+-                entries accessible in the journal. It takes three
+-                arguments: the journal context object, a 128-bit
+-                identifier for the boot, and two pointers to 64-bit
+-                unsigned integers to store the timestamps. The
+-                timestamps are in microseconds since boot-up of the
+-                specific boot,
++                retrieves the monotonic timestamps of the first and
++                last entries accessible in the journal. It takes three
++                arguments: the journal context object
++                <parameter>j</parameter>, a 128-bit identifier for the
++                boot <parameter>boot_id</parameter>, and two pointers
++                to 64-bit unsigned integers to store the timestamps,
++                <parameter>from</parameter> and
++                <parameter>to</parameter>. The timestamps are in
++                microseconds since boot-up of the specific boot,
+                 i.e. <constant>CLOCK_MONOTONIC</constant>. Since the
+                 monotonic clock begins new with every reboot it only
+                 defines a well-defined point in time when used
+@@ -113,6 +117,12 @@
+                 <function>sd_journal_get_cutoff_monotonic_usec()</function>
+                 return 1 on success, 0 if not suitable entries are in
+                 the journal or a negative errno-style error code.</para>
++
++                <para>Locations pointed to by parameters
++                <parameter>from</parameter> and
++                <parameter>to</parameter> will be set only if the
++                return value is positive, and obviously, the
++                parameters are non-null.</para>
+         </refsect1>
+ 
+         <refsect1>
+diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c
+index ca805f83fe..15dae90925 100644
+--- a/src/journal/sd-journal.c
++++ b/src/journal/sd-journal.c
+@@ -2390,7 +2390,7 @@ _public_ int sd_journal_get_cutoff_realtime_usec(sd_journal *j, uint64_t *from,
+ _public_ int sd_journal_get_cutoff_monotonic_usec(sd_journal *j, sd_id128_t boot_id, uint64_t *from, uint64_t *to) {
+         Iterator i;
+         JournalFile *f;
+-        bool first = true;
++        bool found = false;
+         int r;
+ 
+         assert_return(j, -EINVAL);
+@@ -2409,21 +2409,21 @@ _public_ int sd_journal_get_cutoff_monotonic_usec(sd_journal *j, sd_id128_t boot
+                 if (r == 0)
+                         continue;
+ 
+-                if (first) {
++                if (found) {
+                         if (from)
+-                                *from = fr;
++                                *from = MIN(fr, *from);
+                         if (to)
+-                                *to = t;
+-                        first = false;
++                                *to = MAX(t, *to);
+                 } else {
+                         if (from)
+-                                *from = MIN(fr, *from);
++                                *from = fr;
+                         if (to)
+-                                *to = MAX(t, *to);
++                                *to = t;
++                        found = true;
+                 }
+         }
+ 
+-        return first ? 0 : 1;
++        return found;
+ }
+ 
+ void journal_print_header(sd_journal *j) {
diff --git a/0075-Be-more-verbose-when-bind-or-listen-fails.patch b/0075-Be-more-verbose-when-bind-or-listen-fails.patch
new file mode 100644
index 0000000..bb1c8e7
--- /dev/null
+++ b/0075-Be-more-verbose-when-bind-or-listen-fails.patch
@@ -0,0 +1,106 @@
+From 1d9614d1e6086b6b5c0e08ebdb4df3c66d59ab6f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Mon, 3 Mar 2014 19:49:40 -0500
+Subject: [PATCH] Be more verbose when bind or listen fails
+
+Also be more verbose in devnode_acl_all().
+
+(cherry picked from commit 6b9732b2bf0499c5e4ea8a9d4f6051d98033f680)
+---
+ src/core/manager.c            | 2 +-
+ src/journal/journald-native.c | 2 +-
+ src/journal/journald-stream.c | 4 ++--
+ src/journal/journald-syslog.c | 2 +-
+ src/login/logind-acl.c        | 5 ++++-
+ src/shared/ask-password-api.c | 2 +-
+ 6 files changed, 10 insertions(+), 7 deletions(-)
+
+diff --git a/src/core/manager.c b/src/core/manager.c
+index edcde31ec1..9b754d8f02 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -554,7 +554,7 @@ static int manager_setup_notify(Manager *m) {
+                 strncpy(sa.un.sun_path, m->notify_socket, sizeof(sa.un.sun_path)-1);
+                 r = bind(fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + strlen(sa.un.sun_path));
+                 if (r < 0) {
+-                        log_error("bind() failed: %m");
++                        log_error("bind(@%s) failed: %m", sa.un.sun_path+1);
+                         return -errno;
+                 }
+ 
+diff --git a/src/journal/journald-native.c b/src/journal/journald-native.c
+index c54f6475d3..666cbd2102 100644
+--- a/src/journal/journald-native.c
++++ b/src/journal/journald-native.c
+@@ -387,7 +387,7 @@ int server_open_native_socket(Server*s) {
+ 
+                 r = bind(s->native_fd, &sa.sa, offsetof(union sockaddr_union, un.sun_path) + strlen(sa.un.sun_path));
+                 if (r < 0) {
+-                        log_error("bind() failed: %m");
++                        log_error("bind(%s) failed: %m", sa.un.sun_path);
+                         return -errno;
+                 }
+ 
+diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c
+index 89da150a60..8a983d84d9 100644
+--- a/src/journal/journald-stream.c
++++ b/src/journal/journald-stream.c
+@@ -450,14 +450,14 @@ int server_open_stdout_socket(Server *s) {
+ 
+                 r = bind(s->stdout_fd, &sa.sa, offsetof(union sockaddr_union, un.sun_path) + strlen(sa.un.sun_path));
+                 if (r < 0) {
+-                        log_error("bind() failed: %m");
++                        log_error("bind(%s) failed: %m", sa.un.sun_path);
+                         return -errno;
+                 }
+ 
+                 chmod(sa.un.sun_path, 0666);
+ 
+                 if (listen(s->stdout_fd, SOMAXCONN) < 0) {
+-                        log_error("listen() failed: %m");
++                        log_error("listen(%s) failed: %m", sa.un.sun_path);
+                         return -errno;
+                 }
+         } else
+diff --git a/src/journal/journald-syslog.c b/src/journal/journald-syslog.c
+index b826e23c01..f97e0d2ba9 100644
+--- a/src/journal/journald-syslog.c
++++ b/src/journal/journald-syslog.c
+@@ -441,7 +441,7 @@ int server_open_syslog_socket(Server *s) {
+ 
+                 r = bind(s->syslog_fd, &sa.sa, offsetof(union sockaddr_union, un.sun_path) + strlen(sa.un.sun_path));
+                 if (r < 0) {
+-                        log_error("bind() failed: %m");
++                        log_error("bind(%s) failed: %m", sa.un.sun_path);
+                         return -errno;
+                 }
+ 
+diff --git a/src/login/logind-acl.c b/src/login/logind-acl.c
+index 4bbeb64e8b..af7c352ce5 100644
+--- a/src/login/logind-acl.c
++++ b/src/login/logind-acl.c
+@@ -277,7 +277,10 @@ int devnode_acl_all(struct udev *udev,
+         SET_FOREACH(n, nodes, i) {
+                 int k;
+ 
+-                log_debug("Fixing up ACLs at %s for seat %s", n, seat);
++                log_debug("Changing ACLs at %s for seat %s (uid "UID_FMT"→"UID_FMT"%s%s)",
++                          n, seat, old_uid, new_uid,
++                          del ? " del" : "", add ? " add" : "");
++
+                 k = devnode_acl(n, flush, del, old_uid, add, new_uid);
+                 if (k == -ENOENT)
+                         log_debug("Device %s disappeared while setting ACLs", n);
+diff --git a/src/shared/ask-password-api.c b/src/shared/ask-password-api.c
+index 5997a03fb2..8d03f4ad09 100644
+--- a/src/shared/ask-password-api.c
++++ b/src/shared/ask-password-api.c
+@@ -270,7 +270,7 @@ static int create_socket(char **name) {
+ 
+         if (r < 0) {
+                 r = -errno;
+-                log_error("bind() failed: %m");
++                log_error("bind(%s) failed: %m", sa.un.sun_path);
+                 goto fail;
+         }
+ 
diff --git a/0076-core-show-timeouts-when-watchdog-howls.patch b/0076-core-show-timeouts-when-watchdog-howls.patch
new file mode 100644
index 0000000..161bab1
--- /dev/null
+++ b/0076-core-show-timeouts-when-watchdog-howls.patch
@@ -0,0 +1,31 @@
+From 51a993c94f70e1d18838dae05e10047a7b25c2f4 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Fri, 27 Dec 2013 17:14:24 -0500
+Subject: [PATCH] core: show timeouts when watchdog howls
+
+(cherry picked from commit a7850c7d1339b490ac021ff82c2081285ea28503)
+---
+ src/core/service.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index 2d8aa01445..73a0e849e8 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -2550,11 +2550,15 @@ static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *us
+ 
+ static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
+         Service *s = SERVICE(userdata);
++        char t[FORMAT_TIMESPAN_MAX];
+ 
+         assert(s);
+         assert(source == s->watchdog_event_source);
+ 
+-        log_error_unit(UNIT(s)->id, "%s watchdog timeout!", UNIT(s)->id);
++        log_error_unit(UNIT(s)->id,
++                       "%s watchdog timeout (limit %s)!",
++                       UNIT(s)->id,
++                       format_timespan(t, sizeof(t), s->watchdog_usec, 1));
+         service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_WATCHDOG);
+ 
+         return 0;
diff --git a/0077-escape-fix-return-code.patch b/0077-escape-fix-return-code.patch
new file mode 100644
index 0000000..2f80590
--- /dev/null
+++ b/0077-escape-fix-return-code.patch
@@ -0,0 +1,21 @@
+From e8aa845bcf37e9ec7709c49af77c906332225c93 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Sat, 19 Jul 2014 15:35:48 -0400
+Subject: [PATCH] escape: fix return code
+
+(cherry picked from commit 91a81d93b569a98e04566eef1753a0956ba035f3)
+---
+ src/escape/escape.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/escape/escape.c b/src/escape/escape.c
+index ae0c183eca..ba2fb4789f 100644
+--- a/src/escape/escape.c
++++ b/src/escape/escape.c
+@@ -235,5 +235,5 @@ int main(int argc, char *argv[]) {
+         fputc('\n', stdout);
+ 
+ finish:
+-        return r ? EXIT_FAILURE : EXIT_SUCCESS;
++        return r <= 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+ }
diff --git a/systemd.spec b/systemd.spec
index c5c8de1..bae4ed3 100644
--- a/systemd.spec
+++ b/systemd.spec
@@ -16,7 +16,7 @@
 Name:           systemd
 Url:            http://www.freedesktop.org/wiki/Software/systemd
 Version:        215
-Release:        3%{?gitcommit:.git%{gitcommit}}%{?dist}
+Release:        4%{?gitcommit:.git%{gitcommit}}%{?dist}
 # For a breakdown of the licensing, see README
 License:        LGPLv2+ and MIT and GPLv2+
 Summary:        A System and Service Manager
@@ -39,6 +39,83 @@ Source6:        yum-protect-systemd.conf
 # Patch series is available from http://cgit.freedesktop.org/systemd/systemd-stable/log/?h=v215-stable
 # GIT_DIR=~/src/systemd/.git git format-patch-ab -M -N --no-signature v215..v215-stable
 # i=1; for p in 0*patch;do printf "Patch%03d:       %s\n" $i $p; ((i++));done
+Patch001:       0001-man-add-link-to-Open-Group-Base-Specifications.patch
+Patch002:       0002-sd-path-add-missing-header.patch
+Patch003:       0003-architecture-remove-cris-from-uname-list.patch
+Patch004:       0004-networkd-link-improve-link-tracking-logging.patch
+Patch005:       0005-networkd-properly-track-addresses-when-first-added.patch
+Patch006:       0006-man-netdev-mention-tun-and-tap.patch
+Patch007:       0007-units-conditionalize-static-device-node-logic-on-CAP.patch
+Patch008:       0008-units-conditionalize-configfs-and-debugfs-with-CAP_S.patch
+Patch009:       0009-main-change-check-whether-etc-is-unpopulated-to-look.patch
+Patch010:       0010-networkd-don-t-clear-dhcpv6-lease-timers-if-there-s-.patch
+Patch011:       0011-networkd-accept-section-DHCP-in-systemd.network-file.patch
+Patch012:       0012-machine-don-t-return-uninitialized-variable.patch
+Patch013:       0013-sysusers-fix-uninitialized-warning.patch
+Patch014:       0014-vconsole-setup-run-setfont-before-loadkeys.patch
+Patch015:       0015-coredumpctl-show-a-useful-error-on-permission-proble.patch
+Patch016:       0016-networkd-netdev-add-missing-refs.patch
+Patch017:       0017-vconsole-setup-fix-inverted-error-messages.patch
+Patch018:       0018-udev-link_config-ignore-errors-due-to-missing-MAC-ad.patch
+Patch019:       0019-util-consider-0x7F-a-control-chracter-which-it-is-DE.patch
+Patch020:       0020-main-explain-our-etc-empty-check-a-bit-in-a-comment.patch
+Patch021:       0021-man-add-missing-archs-to-ConditionArchitecture-descr.patch
+Patch022:       0022-man-chroot-jails-are-no-longer-detected-by-Condition.patch
+Patch023:       0023-architecture-add-string-table-entries-for-mips-le-ar.patch
+Patch024:       0024-service-flush-status-text-and-errno-values-each-time.patch
+Patch025:       0025-base-filesystem.c-terminate-string-array-elements-wi.patch
+Patch026:       0026-man-drop-references-to-the-priviliged-command-line-o.patch
+Patch027:       0027-fstab-generator-add-comma-when-removed-option-is-in-.patch
+Patch028:       0028-dropin-add-format-attribute-and-fix-a-wrong-caller.patch
+Patch029:       0029-add-new-systemd-escape-tool.patch
+Patch030:       0030-escape-beef-up-new-systemd-escape-tool.patch
+Patch031:       0031-man-document-systemd-escape-1.patch
+Patch032:       0032-shared-fix-format-string-for-usec_t-type.patch
+Patch033:       0033-logind-allow-switching-to-unused-VTs-via-SwitchTo.patch
+Patch034:       0034-systemctl-fix-visual-alignment-for-lines-prefixed-wi.patch
+Patch035:       0035-accelerometer-Don-t-wait-for-new-data-from-the-senso.patch
+Patch036:       0036-escape-move-to-rootbindir.patch
+Patch037:       0037-journal-compress-improve-xz-compression-performance.patch
+Patch038:       0038-hostnamed-add-a-new-chassis-type-for-watches.patch
+Patch039:       0039-hostnamed-update-documentation-with-new-watch-chassi.patch
+Patch040:       0040-units-make-ExecStopPost-action-part-of-ExecStart.patch
+Patch041:       0041-util-don-t-consider-tabs-special-in-string_has_cc-an.patch
+Patch042:       0042-util-fix-has-cc-check-and-add-test.patch
+Patch043:       0043-sysusers-don-t-allow-user-names-longer-than-UT_NAMES.patch
+Patch044:       0044-sysusers-don-t-allow-control-characters-in-gecos-fie.patch
+Patch045:       0045-sysusers-allow-overrides-in-etc-and-run.patch
+Patch046:       0046-man-document-x-systemd.device-timeout-for-crypttab.patch
+Patch047:       0047-shell-completion-man-beef-up-chassis-completions-and.patch
+Patch048:       0048-Revert-build-sys-include-PolicyKit-files-as-part-of-.patch
+Patch049:       0049-build-sys-Do-not-distribute-generated-emergency.serv.patch
+Patch050:       0050-sysusers-preserve-label-of-etc-passwd-group.patch
+Patch051:       0051-Add-function-to-open-temp-files-in-selinux-mode.patch
+Patch052:       0052-man-add-systemd-coredump-8-and-a-bunch-of-links.patch
+Patch053:       0053-man-sysusers.d-correct-default-user-shell.patch
+Patch054:       0054-man-mention-XDG_DATA_HOME-in-systemd.unit.patch
+Patch055:       0055-path-lookup-don-t-make-.local-share-systemd-user-a-s.patch
+Patch056:       0056-fileio-quote-more-shell-characters-in-envfiles.patch
+Patch057:       0057-man-systemd.netdev-make-it-clear-that-we-do-not-touc.patch
+Patch058:       0058-rules-consistently-use-instead-of.patch
+Patch059:       0059-timesyncd-suppress-resync-at-system-time-change-when.patch
+Patch060:       0060-timesyncd-only-listen-to-clock-changes-when-connecte.patch
+Patch061:       0061-shell-completion-restore-completion-for-p.patch
+Patch062:       0062-core-fix-oneshot-service-resource-control.patch
+Patch063:       0063-rules-uaccess-add-ID_SOFTWARE_RADIO.patch
+Patch064:       0064-journal-allow-files-with-no-data-whatsoever.patch
+Patch065:       0065-units-serial-getty-.service-use-the-default-RestartS.patch
+Patch066:       0066-build-sys-don-t-move-libgudev-to-lib.patch
+Patch067:       0067-shared-include-stdbool.h-in-mkdir.h.patch
+Patch068:       0068-missing.h-add-IFLA_MACVLAN_FLAGS.patch
+Patch069:       0069-man-document-yearly-and-annually-in-systemd.time-7.patch
+Patch070:       0070-core-nicer-message-when-inotify-watches-are-exhauste.patch
+Patch071:       0071-detect-virt-Fix-Xen-domU-discovery.patch
+Patch072:       0072-journal-reduce-test-journal-send-timeout-from-10s-to.patch
+Patch073:       0073-systemd-detect-virt-detect-s390-virtualization.patch
+Patch074:       0074-man-journal-add-note-about-sd_journal_get_cutoff_mon.patch
+Patch075:       0075-Be-more-verbose-when-bind-or-listen-fails.patch
+Patch076:       0076-core-show-timeouts-when-watchdog-howls.patch
+Patch077:       0077-escape-fix-return-code.patch
 
 # Presently not accepted upstream, but we disable systemd-resolved in
 # the presets anyways, and this unbreaks anaconda/lorax/livecd-creator
@@ -593,6 +670,7 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
 %{_bindir}/systemctl
 %{_bindir}/systemd-notify
 %{_bindir}/systemd-analyze
+%{_bindir}/systemd-escape
 %{_bindir}/systemd-ask-password
 %{_bindir}/systemd-tty-ask-password-agent
 %{_bindir}/systemd-machine-id-setup
@@ -765,10 +843,25 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g
 %{_datadir}/systemd/gatewayd
 
 %changelog
+* Sat Jul 19 2014 Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl> - 215-4
+- Various man page updates
+- Static device node logic is conditionalized on CAP_SYS_MODULES instead of CAP_MKNOD
+  for better behaviour in containers
+- Some small networkd link handling fixes
+- vconsole-setup runs setfont before loadkeys (https://bugs.freedesktop.org/show_bug.cgi?id=80685)
+- New systemd-escape tool
+- XZ compression settings are tweaked to greatly improve journald performance
+- "watch" is accepted as chassis type
+- Various sysusers fixes, most importantly correct selinux labels
+- systemd-timesyncd bug fix (https://bugs.freedesktop.org/show_bug.cgi?id=80932)
+- Shell completion improvements
+- New udev tag ID_SOFTWARE_RADIO can be used to instruct logind to allow user access
+- XEN and s390 virtualization is properly detected
+
 * Mon Jul 07 2014 Colin Walters <walters at redhat.com> - 215-3
 - Add patch to disable resolve.conf symlink (#1043119)
 
-* Sat Jul 06 2014 Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl> - 215-2
+* Sun Jul 06 2014 Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl> - 215-2
 - Move systemd-journal-remote to systemd-journal-gateway package (#1114688)
 - Disable /etc/mtab handling temporarily (#1116158)
 


More information about the scm-commits mailing list