diff --git a/0001-add-hdflush-for-reboot-or-hddown-for-poweroff.patch b/0001-add-hdflush-for-reboot-or-hddown-for-poweroff.patch
index 57ca912b..b4aeb6f4 100644
--- a/0001-add-hdflush-for-reboot-or-hddown-for-poweroff.patch
+++ b/0001-add-hdflush-for-reboot-or-hddown-for-poweroff.patch
@@ -1,497 +1,16 @@
-This seems to be a SUSE specific patch. Here we add the check for unmaintained
-disk like devices to be able to flush and maybe shut them down. Also we add the
-missing sync() system call for the direct halt/reboot systemctl command. Then we
-use the system halt as gfallback if poweroff fails for both the direct poweroff
-systemctl command as well as for the systemd-shutdown utility.
-
---
- Makefile.am | 11 +
- src/core/hdflush.c | 365 ++++++++++++++++++++++++++++++++++++++++++++++
- src/core/hdflush.h | 25 +++
- src/core/shutdown.c | 12 +
- src/systemctl/systemctl.c | 25 ++-
- 5 files changed, 429 insertions(+), 9 deletions(-)
+ systemd-209/src/core/shutdown.c | 4 ++++
+ systemd-209/src/systemctl/systemctl.c | 22 +++++++++++++++-------
+ 2 files changed, 19 insertions(+), 7 deletions(-)
---- systemd-209/Makefile.am
-+++ systemd-209/Makefile.am 2014-01-28 11:06:56.000000000 +0000
-@@ -1004,7 +1004,9 @@ libsystemd_core_la_SOURCES = \
- src/core/audit-fd.c \
- src/core/audit-fd.h \
- src/core/async.c \
-- src/core/async.h
-+ src/core/async.h \
-+ src/core/hdflush.c \
-+ src/core/hdflush.h
-
- if HAVE_KMOD
- libsystemd_core_la_SOURCES += \
-@@ -1522,6 +1524,8 @@ systemd_shutdown_SOURCES = \
- src/core/shutdown.c \
- src/core/mount-setup.c \
- src/core/mount-setup.h \
-+ src/core/hdflush.c \
-+ src/core/hdflush.h \
- src/core/killall.h \
- src/core/killall.c
-
-@@ -1818,7 +1822,9 @@ systemd_cgroups_agent_LDADD = \
-
- # ------------------------------------------------------------------------------
- systemctl_SOURCES = \
-- src/systemctl/systemctl.c
-+ src/systemctl/systemctl.c \
-+ src/core/hdflush.c \
-+ src/core/hdflush.h
-
- systemctl_LDADD = \
- libsystemd-units.la \
-@@ -1826,6 +1832,7 @@ systemctl_LDADD = \
- libsystemd-internal.la \
- libsystemd-logs.la \
- libsystemd-journal-internal.la \
-+ libudev-internal.la \
- libsystemd-shared.la
-
- # ------------------------------------------------------------------------------
---- systemd-209/src/core/hdflush.c
-+++ systemd-209/src/core/hdflush.c 2014-01-28 10:58:56.000000000 +0000
-@@ -0,0 +1,367 @@
-+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-+
-+/***
-+ This file is part of systemd.
-+
-+ Copyright 2014 Werner Fink
-+
-+ 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 .
-+***/
-+
-+/*
-+ * Find all disks on the system, list out IDE, unmanaged ATA disks, and
-+ * USB sticks flush the cache of those and optional shut them down.
-+ */
-+
-+#include
-+#include
-+#ifdef LIST_DEBUG
-+# include
-+#endif
-+#include
-+#include
-+#include
-+
-+#include
-+#include
-+#include
-+#include
-+
-+#include
-+#include
-+#include
-+#ifdef WORDS_BIGENDIAN
-+# include
-+#endif
-+
-+#include "hdflush.h"
-+
-+/* Used in flush_cache_ext(), compare with */
-+#define IDBYTES 512
-+#define MASK_EXT 0xE000 /* Bit 15 shall be zero, bit 14 shall be one, bit 13 flush cache ext */
-+#define TEST_EXT 0x6000
-+
-+/* Maybe set in list_disks() and used in do_standby_disk() */
-+#define DISK_IS_IDE 0x00000001
-+#define DISK_IS_SATA 0x00000002
-+#define DISK_EXTFLUSH 0x00000004
-+#define DISK_REMOVABLE 0x00000008
-+#define DISK_MANAGED 0x00000010
-+#define DISK_FLUSHONLY 0x00000020
-+
-+struct sysfs {
-+ struct udev *udev;
-+ struct udev_enumerate *num;
-+ struct udev_list_entry *item;
-+ char *devnode;
-+ size_t size;
-+};
-+
-+static int flush_cache_ext(const struct sysfs *sysfs);
-+
-+static struct sysfs * open_sysfs(void)
-+{
-+ static struct sysfs sysfs;
-+ sysfs.udev = udev_new();
-+ if (!sysfs.udev)
-+ goto err;
-+ sysfs.num = udev_enumerate_new(sysfs.udev);
-+ if (!sysfs.num)
-+ goto err;
-+ if (udev_enumerate_add_match_subsystem(sysfs.num, "block") < 0)
-+ goto err;
-+ if (udev_enumerate_add_match_sysname(sysfs.num, "sd?") < 0)
-+ goto err;
-+ if (udev_enumerate_add_match_sysname(sysfs.num, "hd?") < 0)
-+ goto err;
-+ if (udev_enumerate_scan_devices(sysfs.num) < 0)
-+ goto err;
-+ sysfs.item = udev_enumerate_get_list_entry(sysfs.num);
-+ sysfs.devnode = NULL;
-+ sysfs.size = 0;
-+ return &sysfs;
-+err:
-+ if (sysfs.num)
-+ udev_unref(sysfs.udev);
-+ if (sysfs.udev)
-+ udev_unref(sysfs.udev);
-+ return NULL;
-+}
-+
-+static void close_sysfs(struct sysfs *sysfs)
-+{
-+ if (sysfs->num)
-+ udev_enumerate_unref(sysfs->num);
-+ if (sysfs->udev)
-+ udev_unref(sysfs->udev);
-+ if (sysfs->devnode)
-+ free(sysfs->devnode);
-+ sysfs->devnode = NULL;
-+}
-+
-+
-+static char *list_disks(struct sysfs *sysfs, unsigned int* flags)
-+{
-+ struct udev_device *device, *parent;
-+ struct udev_list_entry *item;
-+ const char *devnode;
-+ char path[PATH_MAX];
-+
-+ device = NULL;
-+next:
-+ if (device)
-+ udev_device_unref(device);
-+ if (sysfs->devnode)
-+ free(sysfs->devnode);
-+ sysfs->devnode = NULL;
-+ sysfs->size = 0;
-+ *flags = 0;
-+
-+ if (!sysfs->item)
-+ goto empty;
-+ item = sysfs->item;
-+ sysfs->item = udev_list_entry_get_next(sysfs->item);
-+
-+ if (!(device = udev_device_new_from_syspath(sysfs->udev, udev_list_entry_get_name(item))))
-+ goto out;
-+ if (!(devnode = udev_device_get_devnode(device)))
-+ goto out;
-+ if (!(sysfs->devnode = strdup(devnode)))
-+ goto out;
-+
-+ path[0] = '\0';
-+ parent = udev_device_get_parent(device);
-+ if (parent) {
-+ const char *sysname, *devpath;
-+ struct udev_device *disk;
-+ const char *value;
-+ int ret;
-+
-+ sysname = udev_device_get_sysname(parent);
-+ devpath = udev_device_get_devpath(parent);
-+
-+ strcpy(path, "/sys");
-+ strcat(path, devpath);
-+ strcat(path, "/scsi_disk/");
-+ strcat(path, sysname);
-+
-+ disk = udev_device_new_from_syspath(sysfs->udev, path);
-+ if (disk) {
-+ value = udev_device_get_sysattr_value(disk, "manage_start_stop");
-+ udev_device_unref(disk);
-+
-+ if (value && *value != '0') {
-+ *flags = DISK_MANAGED;
-+#ifndef LIST_DEBUG
-+ goto next; /* Device managed by the kernel */
-+#endif
-+ }
-+ }
-+
-+ value = udev_device_get_sysattr_value(device, "size");
-+ if (value && *value)
-+ sysfs->size = (size_t)atoll(value);
-+
-+ value = udev_device_get_sysattr_value(device, "removable");
-+ if (value && *value != '0') {
-+ *flags |= DISK_REMOVABLE;
-+
-+ if ((ret = flush_cache_ext(sysfs))) {
-+ if (ret < 0)
-+ goto next;
-+ *flags |= DISK_EXTFLUSH;
-+ }
-+ goto out; /* Removable disk like USB stick */
-+ }
-+
-+ value = udev_device_get_sysname(device);
-+ if (value && *value == 'h') {
-+ *flags |= DISK_IS_IDE;
-+
-+ if ((ret = flush_cache_ext(sysfs))) {
-+ if (ret < 0)
-+ goto next;
-+ *flags |= DISK_EXTFLUSH;
-+ }
-+ goto out; /* IDE disk found */
-+ }
-+
-+ value = udev_device_get_sysattr_value(parent, "vendor");
-+ if (value && strncmp(value, "ATA", 3) == 0) {
-+ *flags |= (DISK_IS_IDE|DISK_IS_SATA);
-+
-+ if ((ret = flush_cache_ext(sysfs))) {
-+ if (ret < 0)
-+ goto next;
-+ *flags |= DISK_EXTFLUSH;
-+ }
-+ goto out; /* SATA disk to shutdown */
-+ }
-+ goto next;
-+ }
-+out:
-+ udev_device_unref(device);
-+empty:
-+ return sysfs->devnode;
-+}
-+#ifndef LIST_DEBUG
-+/*
-+ * Check IDE/(S)ATA hard disk identity for
-+ * the FLUSH CACHE EXT bit set.
-+ */
-+static int flush_cache_ext(const struct sysfs *sysfs)
-+{
-+#ifndef WIN_IDENTIFY
-+#define WIN_IDENTIFY 0xEC
-+#endif
-+ unsigned char args[4+IDBYTES];
-+ unsigned short *id = (unsigned short*)(&args[4]);
-+ int fd = -1, ret = 0;
-+
-+ if (sysfs->size < (1<<28))
-+ goto out; /* small disk */
-+
-+ if ((fd = open(sysfs->devnode, O_RDONLY|O_NONBLOCK|O_CLOEXEC)) < 0)
-+ goto out;
-+
-+ memset(&args[0], 0, sizeof(args));
-+ args[0] = WIN_IDENTIFY;
-+ args[3] = 1;
-+ if (ioctl(fd, HDIO_DRIVE_CMD, &args))
-+ goto out;
-+#ifdef WORDS_BIGENDIAN
-+# if 0
-+ {
-+ const unsigned short *end = id + IDBYTES/2;
-+ const unsigned short *from = id;
-+ unsigned short *to = id;
-+
-+ while (from < end)
-+ *to++ = bswap_16(*from++);
-+ }
-+# else
-+ id[83] = bswap_16(id[83]);
-+# endif
-+#endif
-+ if ((id[83] & MASK_EXT) == TEST_EXT)
-+ ret = 1;
-+out:
-+ if (fd >= 0)
-+ close(fd);
-+ return ret;
-+}
-+
-+/*
-+ * Put an IDE/SCSI/SATA disk in standby mode.
-+ * Code stolen from hdparm.c
-+ */
-+static int do_standby_disk(struct sysfs *sysfs, unsigned int flags)
-+{
-+#ifndef WIN_STANDBYNOW1
-+#define WIN_STANDBYNOW1 0xE0
-+#endif
-+#ifndef WIN_STANDBYNOW2
-+#define WIN_STANDBYNOW2 0x94
-+#endif
-+#ifndef WIN_FLUSH_CACHE_EXT
-+#define WIN_FLUSH_CACHE_EXT 0xEA
-+#endif
-+#ifndef WIN_FLUSH_CACHE
-+#define WIN_FLUSH_CACHE 0xE7
-+#endif
-+ unsigned char flush1[4] = {WIN_FLUSH_CACHE_EXT,0,0,0};
-+ unsigned char flush2[4] = {WIN_FLUSH_CACHE,0,0,0};
-+ unsigned char stdby1[4] = {WIN_STANDBYNOW1,0,0,0};
-+ unsigned char stdby2[4] = {WIN_STANDBYNOW2,0,0,0};
-+ int fd, ret;
-+
-+ if ((fd = open(sysfs->devnode, O_RDWR|O_NONBLOCK|O_CLOEXEC)) < 0)
-+ return -1;
-+
-+ switch (flags & DISK_EXTFLUSH) {
-+ case DISK_EXTFLUSH:
-+ if ((ret = ioctl(fd, HDIO_DRIVE_CMD, &flush1)) == 0)
-+ break;
-+ /* Extend flush rejected, try standard flush */
-+ default:
-+ ret = ioctl(fd, HDIO_DRIVE_CMD, &flush2) &&
-+ ioctl(fd, BLKFLSBUF);
-+ break;
-+ }
-+
-+ if ((flags & DISK_FLUSHONLY) == 0x0) {
-+ ret = ioctl(fd, HDIO_DRIVE_CMD, &stdby1) &&
-+ ioctl(fd, HDIO_DRIVE_CMD, &stdby2);
-+ }
-+
-+ close(fd);
-+
-+ if (ret)
-+ return -1;
-+ return 0;
-+}
-+#endif
-+#ifdef LIST_DEBUG
-+int main()
-+{
-+ char *disk;
-+ unsigned int flags;
-+ struct sysfs *sysfs = open_sysfs();
-+ if (!sysfs)
-+ goto err;
-+ while ((disk = list_disks(sysfs, &flags)))
-+ fprintf(stdout, "%s\n", sysfs->devnode);
-+ close_sysfs(sysfs);
-+err:
-+ return 0;
-+}
-+#else
-+/*
-+ * List all disks and put them in standby mode.
-+ * This has the side-effect of flushing the writecache,
-+ * which is exactly what we want on poweroff.
-+ */
-+void hddown(void)
-+{
-+ struct sysfs *sysfs;
-+ unsigned int flags;
-+ char *disk;
-+
-+ if (!(sysfs = open_sysfs()))
-+ return;
-+
-+ while ((disk = list_disks(sysfs, &flags)))
-+ do_standby_disk(sysfs, flags);
-+
-+ close_sysfs(sysfs);
-+}
-+
-+/*
-+ * List all disks and cause them to flush their buffers.
-+ */
-+void hdflush(void)
-+{
-+ struct sysfs *sysfs;
-+ unsigned int flags;
-+ char *disk;
-+
-+ if (!(sysfs = open_sysfs()))
-+ return;
-+
-+ while ((disk = list_disks(sysfs, &flags)))
-+ do_standby_disk(sysfs, (flags|DISK_FLUSHONLY));
-+
-+ close_sysfs(sysfs);
-+}
-+#endif
---- systemd-209/src/core/hdflush.h
-+++ systemd-209/src/core/hdflush.h 2014-01-28 11:00:08.000000000 +0000
-@@ -0,0 +1,25 @@
-+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-+
-+#pragma once
-+
-+/***
-+ This file is part of systemd.
-+
-+ Copyright 2014 Werner Fink
-+
-+ 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 .
-+***/
-+
-+void hdflush(void);
-+void hddown(void);
--- systemd-209/src/core/shutdown.c
+++ systemd-209/src/core/shutdown.c 2014-02-28 11:17:22.000000000 +0000
-@@ -40,6 +40,7 @@
- #include "missing.h"
- #include "log.h"
- #include "fileio.h"
-+#include "hdflush.h"
- #include "umount.h"
- #include "util.h"
- #include "mkdir.h"
-@@ -225,7 +226,8 @@ int main(int argc, char *argv[]) {
- _cleanup_free_ char *cgroup = NULL;
- char *arguments[3];
- unsigned retries;
-- int cmd, r;
-+ unsigned cmd;
-+ int r;
-
- log_parse_environment();
- r = parse_argv(argc, argv);
-@@ -388,8 +390,13 @@ int main(int argc, char *argv[]) {
- * on reboot(), but the file systems need to be synce'd
- * explicitly in advance. So let's do this here, but not
- * needlessly slow down containers. */
-- if (!in_container)
-+ if (!in_container) {
- sync();
-+ if (cmd == RB_POWER_OFF || cmd == RB_HALT_SYSTEM)
-+ hddown();
-+ else
-+ hdflush();
-+ }
-
- switch (cmd) {
-
-@@ -449,6 +456,10 @@ int main(int argc, char *argv[]) {
+@@ -449,6 +449,10 @@ int main(int argc, char *argv[]) {
}
reboot(cmd);
+
-+ if (cmd == RB_POWER_OFF)
++ if (cmd == (int)RB_POWER_OFF)
+ reboot(RB_HALT_SYSTEM);
+
if (errno == EPERM && in_container) {
@@ -499,15 +18,7 @@ systemctl command as well as for the systemd-shutdown utility.
* CAP_SYS_BOOT just exit, this will kill our
--- systemd-209/src/systemctl/systemctl.c
+++ systemd-209/src/systemctl/systemctl.c 2014-02-28 11:19:35.000000000 +0000
-@@ -67,6 +67,7 @@
- #include "logs-show.h"
- #include "socket-util.h"
- #include "fileio.h"
-+#include "hdflush.h"
- #include "env-util.h"
- #include "bus-util.h"
- #include "bus-message.h"
-@@ -93,6 +94,7 @@ static bool arg_no_pager = false;
+@@ -93,6 +93,7 @@ static bool arg_no_pager = false;
static bool arg_no_wtmp = false;
static bool arg_no_wall = false;
static bool arg_no_reload = false;
@@ -515,7 +26,7 @@ systemctl command as well as for the systemd-shutdown utility.
static bool arg_show_types = false;
static bool arg_ignore_inhibitors = false;
static bool arg_dry = false;
-@@ -5566,6 +5568,7 @@ static int halt_parse_argv(int argc, cha
+@@ -5578,6 +5579,7 @@ static int halt_parse_argv(int argc, cha
{ "reboot", no_argument, NULL, ARG_REBOOT },
{ "force", no_argument, NULL, 'f' },
{ "wtmp-only", no_argument, NULL, 'w' },
@@ -523,7 +34,7 @@ systemctl command as well as for the systemd-shutdown utility.
{ "no-wtmp", no_argument, NULL, 'd' },
{ "no-wall", no_argument, NULL, ARG_NO_WALL },
{}
-@@ -5617,10 +5620,13 @@ static int halt_parse_argv(int argc, cha
+@@ -5629,10 +5631,13 @@ static int halt_parse_argv(int argc, cha
case 'i':
case 'h':
@@ -538,25 +49,25 @@ systemctl command as well as for the systemd-shutdown utility.
case '?':
return -EINVAL;
-@@ -6266,16 +6272,24 @@ static int halt_now(enum action a) {
+@@ -6274,20 +6279,23 @@ done:
+
+ static int halt_now(enum action a) {
+
+-/* Make sure C-A-D is handled by the kernel from this
++ if (!arg_no_sync)
++ sync();
++
++ /* Make sure C-A-D is handled by the kernel from this
* point on... */
reboot(RB_ENABLE_CAD);
-- switch (a) {
-+ if (!arg_no_sync)
-+ sync();
+ switch (a) {
- case ACTION_HALT:
- log_info("Halting.");
- reboot(RB_HALT_SYSTEM);
- return -errno;
-+ if (a == ACTION_POWEROFF || a == ACTION_HALT)
-+ hddown();
-+ else
-+ hdflush();
-+
-+ switch (a) {
-
+-
case ACTION_POWEROFF:
log_info("Powering off.");
reboot(RB_POWER_OFF);
diff --git a/0001-core-don-t-allow-enabling-if-unit-is-masked.patch b/0001-core-don-t-allow-enabling-if-unit-is-masked.patch
new file mode 100644
index 00000000..7e193738
--- /dev/null
+++ b/0001-core-don-t-allow-enabling-if-unit-is-masked.patch
@@ -0,0 +1,36 @@
+From f7101b7368dfe41dbc8b7203e06133cccb589c01 Mon Sep 17 00:00:00 2001
+From: Jan Synacek
+Date: Tue, 7 Oct 2014 13:35:41 +0200
+Subject: [PATCH] core: don't allow enabling if unit is masked
+
+---
+ src/shared/install.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git src/shared/install.c src/shared/install.c
+index fa064c2..945bb27 100644
+--- src/shared/install.c
++++ src/shared/install.c
+@@ -1516,6 +1516,19 @@ int unit_file_enable(
+ return r;
+
+ STRV_FOREACH(i, files) {
++ UnitFileState state;
++
++ state = unit_file_get_state(scope, root_dir, *i);
++ if (state < 0) {
++ log_error("Failed to get unit file state for %s: %s", *i, strerror(-state));
++ return state;
++ }
++
++ if (state == UNIT_FILE_MASKED || state == UNIT_FILE_MASKED_RUNTIME) {
++ log_error("Failed to enable unit: Unit %s is masked", *i);
++ return -ENOTSUP;
++ }
++
+ r = install_info_add_auto(&c, *i);
+ if (r < 0)
+ return r;
+--
+1.7.9.2
+
diff --git a/0001-core-swap-only-make-configured-units-part-of-swap.ta.patch b/0001-core-swap-only-make-configured-units-part-of-swap.ta.patch
new file mode 100644
index 00000000..18e76f4f
--- /dev/null
+++ b/0001-core-swap-only-make-configured-units-part-of-swap.ta.patch
@@ -0,0 +1,76 @@
+From 3018d31238caabc2e204aa161e647dc1c1b5d1c6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Thu, 2 Oct 2014 00:11:36 -0400
+Subject: [PATCH] core/swap: only make configured units part of swap.target
+
+We used to make all .swap units either RequiredBy=swap.target or
+WantedBy=swap.target. But swap.target should be the "configured swap
+units", either through /etc/fstab or non-generated .swap units. It
+is surprising when systemd starts treating a swap device that was
+possibly temporarily enabled as a hard dependency for other units.
+So do not add dependencies with swap.target for units gleaned from
+/proc/swaps.
+
+Similarly, we added dependencies for all aliases of the device name,
+which clutters up the dependency graph but does not seem to bring any
+value, since the status of those following units is consistent with
+the main one anyway.
+
+This should be a fix for [1], and it seems the right thing to do
+anyway.
+
+[1] https://bugzilla.redhat.com/show_bug.cgi?id=1114786
+---
+ src/core/swap.c | 20 +++++++++++---------
+ 1 file changed, 11 insertions(+), 9 deletions(-)
+
+diff --git src/core/swap.c src/core/swap.c
+index ef90d0e..b2ca048 100644
+--- src/core/swap.c
++++ src/core/swap.c
+@@ -213,7 +213,7 @@ static int swap_add_device_links(Swap *s) {
+ }
+
+ static int swap_add_default_dependencies(Swap *s) {
+- bool nofail = false, noauto = false;
++ bool nofail, noauto;
+ int r;
+
+ assert(s);
+@@ -228,23 +228,25 @@ static int swap_add_default_dependencies(Swap *s) {
+ if (r < 0)
+ return r;
+
+- if (s->from_fragment) {
+- SwapParameters *p = &s->parameters_fragment;
++ if (!s->from_fragment)
++ /* The swap unit can either be for an alternative device name, in which
++ * case we don't need to add the dependency on swap.target because this unit
++ * is following a different unit which will have this dependency added,
++ * or it can be derived from /proc/swaps, in which case it was started
++ * manually, and should not become a dependency of swap.target. */
++ return 0;
+
+- nofail = p->nofail;
+- noauto = p->noauto;
+- }
++ nofail = s->parameters_fragment.nofail;
++ noauto = s->parameters_fragment.noauto;
+
+ if (!noauto) {
+ if (nofail)
+ r = unit_add_dependency_by_name_inverse(UNIT(s), UNIT_WANTS, SPECIAL_SWAP_TARGET, NULL, true);
+ else
+ r = unit_add_two_dependencies_by_name_inverse(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SWAP_TARGET, NULL, true);
+- if (r < 0)
+- return r;
+ }
+
+- return 0;
++ return r < 0 ? r : 0;
+ }
+
+ static int swap_verify(Swap *s) {
+--
+1.7.9.2
+
diff --git a/0001-journalctl-do-not-output-reboot-markers-when-running.patch b/0001-journalctl-do-not-output-reboot-markers-when-running.patch
new file mode 100644
index 00000000..b2aed874
--- /dev/null
+++ b/0001-journalctl-do-not-output-reboot-markers-when-running.patch
@@ -0,0 +1,27 @@
+From 4bed248505da4da94d82078fe60326a374970e97 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Fri, 26 Sep 2014 10:49:55 -0400
+Subject: [PATCH] journalctl: do not output --reboot-- markers when running
+ non-interactively
+
+They are not legal in the export format.
+---
+ src/journal/journalctl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git src/journal/journalctl.c src/journal/journalctl.c
+index 47206d3..89a922c 100644
+--- src/journal/journalctl.c
++++ src/journal/journalctl.c
+@@ -1939,7 +1939,7 @@ int main(int argc, char *argv[]) {
+ goto finish;
+ }
+
+- if (!arg_merge) {
++ if (!arg_merge && !arg_quiet) {
+ sd_id128_t boot_id;
+
+ r = sd_journal_get_monotonic_usec(j, NULL, &boot_id);
+--
+1.7.9.2
+
diff --git a/0001-keymap-Add-support-for-IBM-ThinkPad-X41-Tablet.patch b/0001-keymap-Add-support-for-IBM-ThinkPad-X41-Tablet.patch
new file mode 100644
index 00000000..67fb3061
--- /dev/null
+++ b/0001-keymap-Add-support-for-IBM-ThinkPad-X41-Tablet.patch
@@ -0,0 +1,38 @@
+From 71ed2d38711e345f22e2200bc7bb156aed98972a Mon Sep 17 00:00:00 2001
+From: Bastien Nocera
+Date: Wed, 12 Nov 2014 23:30:46 +0100
+Subject: [PATCH] keymap: Add support for IBM ThinkPad X41 Tablet
+
+Scancode taken from:
+http://www.thinkwiki.org/wiki/Tablet_Hardware_Buttons#Linux_Support
+
+William Jon McCann provided the DMI match. IBM seems to have
+swapped the version and model of the system:
+ Manufacturer: IBM
+ Product Name: 18666TU
+ Version: ThinkPad X41 Tablet
+---
+ hwdb/60-keyboard.hwdb | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git hwdb/60-keyboard.hwdb hwdb/60-keyboard.hwdb
+index d2ca965..56a4009 100644
+--- hwdb/60-keyboard.hwdb
++++ hwdb/60-keyboard.hwdb
+@@ -594,6 +594,13 @@ keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnThinkPad*X6*:pvr*
+ KEYBOARD_KEY_6f=down # down on d-pad
+ KEYBOARD_KEY_69=enter # enter on d-pad
+
++# ThinkPad X41 Tablet
++keyboard:dmi:bvn*:bvr*:bd*:svnIBM*:pn18666TU:pvr*
++ KEYBOARD_KEY_6c=direction # rotate
++ KEYBOARD_KEY_68=f13 # toolbox
++ KEYBOARD_KEY_6b=esc # escape
++ KEYBOARD_KEY_69=enter # enter on d-pad
++
+ # IdeaPad
+ keyboard:name:Ideapad extra buttons:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*
+ KEYBOARD_KEY_42=f23
+--
+1.7.9.2
+
diff --git a/0001-keymap-Fix-touchpad-toggle-on-Toshiba-Satellite-P75-.patch b/0001-keymap-Fix-touchpad-toggle-on-Toshiba-Satellite-P75-.patch
new file mode 100644
index 00000000..29bbbcd1
--- /dev/null
+++ b/0001-keymap-Fix-touchpad-toggle-on-Toshiba-Satellite-P75-.patch
@@ -0,0 +1,27 @@
+From a046659f8551e1c8f79ba4b66472444e285255df Mon Sep 17 00:00:00 2001
+From: Martin Pitt
+Date: Tue, 7 Oct 2014 11:20:04 +0200
+Subject: [PATCH] keymap: Fix touchpad toggle on Toshiba Satellite P75-A7200
+
+Just like everywhere else we use KEY_F21 instead of KEY_TOUCHPAD_TOGGLE for X
+friendliness.
+---
+ hwdb/60-keyboard.hwdb | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git hwdb/60-keyboard.hwdb hwdb/60-keyboard.hwdb
+index 8a1baa7..1fea32a 100644
+--- hwdb/60-keyboard.hwdb
++++ hwdb/60-keyboard.hwdb
+@@ -1094,7 +1094,7 @@ keyboard:name:Toshiba*input*device:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSatellite*P75
+ KEYBOARD_KEY_13c=brightnessdown
+ KEYBOARD_KEY_13d=brightnessup
+ KEYBOARD_KEY_13e=switchvideomode
+- KEYBOARD_KEY_13f=touchpad_toggle
++ KEYBOARD_KEY_13f=f21 # Touchpad toggle
+ KEYBOARD_KEY_9e=wlan
+
+ ###########################################################
+--
+1.7.9.2
+
diff --git a/0001-login-rerun-vconsole-setup-when-switching-from-vgaco.patch b/0001-login-rerun-vconsole-setup-when-switching-from-vgaco.patch
new file mode 100644
index 00000000..ba00c036
--- /dev/null
+++ b/0001-login-rerun-vconsole-setup-when-switching-from-vgaco.patch
@@ -0,0 +1,60 @@
+From f6ba8671d83f9fce9a00045d8fa399a1c07ba7fc Mon Sep 17 00:00:00 2001
+From: Ray Strode
+Date: Wed, 5 Nov 2014 08:30:52 -0500
+Subject: [PATCH] login: rerun vconsole-setup when switching from vgacon to
+ fbcon
+
+The initialization performed by systemd-vconsole-setup is reset
+when changing console drivers (say from vgacon to fbcon), so we
+need to run it in that case.
+
+See
+http://lists.freedesktop.org/archives/systemd-devel/2014-October/023919.html
+http://lists.freedesktop.org/archives/systemd-devel/2014-October/024423.html
+http://lists.freedesktop.org/archives/systemd-devel/2014-November/024881.html
+
+This commit adds a udev rule to make systemd-vconsole-setup get run when
+the fbcon device becomes available.
+
+(david: moved into new file 90-vconsole.rules instead of 71-seats.rules;
+ build-failures are on me, not on Ray)
+---
+ Makefile.am | 3 +++
+ src/vconsole/90-vconsole.rules | 11 +++++++++++
+ 2 files changed, 14 insertions(+)
+ create mode 100644 src/vconsole/90-vconsole.rules
+
+diff --git Makefile.am Makefile.am
+index 3686103..f614b86 100644
+--- Makefile.am
++++ Makefile.am
+@@ -4439,6 +4439,9 @@ rootlibexec_PROGRAMS += \
+ nodist_systemunit_DATA += \
+ units/systemd-vconsole-setup.service
+
++dist_udevrules_DATA += \
++ src/vconsole/90-vconsole.rules
++
+ SYSINIT_TARGET_WANTS += \
+ systemd-vconsole-setup.service
+ endif
+diff --git src/vconsole/90-vconsole.rules src/vconsole/90-vconsole.rules
+new file mode 100644
+index 0000000..bf6a9ef
+--- /dev/null
++++ src/vconsole/90-vconsole.rules
+@@ -0,0 +1,11 @@
++# This file is part of systemd.
++#
++# 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.
++
++# Kernel resets vconsole state when changing console drivers so run
++# systemd-vconsole-setup when fbcon loads
++
++ACTION=="add", SUBSYSTEM=="graphics", KERNEL=="fbcon", RUN+="/usr/lib/systemd/systemd-vconsole-setup"
+--
+1.7.9.2
+
diff --git a/0001-logind-add-support-for-Triton2-Power-Button.patch b/0001-logind-add-support-for-Triton2-Power-Button.patch
new file mode 100644
index 00000000..dbd0047c
--- /dev/null
+++ b/0001-logind-add-support-for-Triton2-Power-Button.patch
@@ -0,0 +1,24 @@
+From 58d4aabedd415a735efeb8c2608ee73618c07f78 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Mon, 22 Sep 2014 22:14:39 -0400
+Subject: [PATCH] logind: add support for Triton2 Power Button
+
+https://bugs.freedesktop.org/show_bug.cgi?id=84201
+---
+ src/login/70-power-switch.rules | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git src/login/70-power-switch.rules src/login/70-power-switch.rules
+index 36fb827..a6997f7 100644
+--- src/login/70-power-switch.rules
++++ src/login/70-power-switch.rules
+@@ -9,5 +9,6 @@ ACTION=="remove", GOTO="power_switch_end"
+
+ SUBSYSTEM=="input", KERNEL=="event*", SUBSYSTEMS=="acpi", TAG+="power-switch"
+ SUBSYSTEM=="input", KERNEL=="event*", KERNELS=="thinkpad_acpi", TAG+="power-switch"
++SUBSYSTEM=="input", KERNEL=="event*", ATTRS{name}=="twl4030_pwrbutton", TAG+="power-switch"
+
+ LABEL="power_switch_end"
+--
+1.7.9.2
+
diff --git a/0001-manager-Linux-on-hppa-has-fewer-rtsigs-hence-avoid-u.patch b/0001-manager-Linux-on-hppa-has-fewer-rtsigs-hence-avoid-u.patch
new file mode 100644
index 00000000..f71e16bd
--- /dev/null
+++ b/0001-manager-Linux-on-hppa-has-fewer-rtsigs-hence-avoid-u.patch
@@ -0,0 +1,79 @@
+Based on 4dffec1459f50ac9f8f67ccfcb79836b4ed5a50e Mon Sep 17 00:00:00 2001
+From: Lennart Poettering
+Date: Fri, 24 Oct 2014 13:44:45 +0200
+Subject: [PATCH] manager: Linux on hppa has fewer rtsigs, hence avoid using
+ the higher ones there
+
+https://bugs.freedesktop.org/show_bug.cgi?id=84931
+---
+ src/core/manager.c | 29 +++++++++++++++++++++++++++--
+ 1 file changed, 27 insertions(+), 2 deletions(-)
+
+--- src/core/manager.c
++++ src/core/manager.c 2014-10-29 14:02:28.635837997 +0000
+@@ -340,11 +340,14 @@ static int manager_setup_signals(Manager
+
+ assert(m);
+
+- /* We are not interested in SIGSTOP and friends. */
+ assert_se(sigaction(SIGCHLD, &sa, NULL) == 0);
+
+- assert_se(sigemptyset(&mask) == 0);
++ /* We make liberal use of realtime signals here. On
++ * Linux/glibc we have 30 of them (with the exception of Linux
++ * on hppa, see below), between SIGRTMIN+0 ... SIGRTMIN+30
++ * (aka SIGRTMAX). */
+
++ assert_se(sigemptyset(&mask) == 0);
+ sigset_add_many(&mask,
+ SIGCHLD, /* Child died */
+ SIGTERM, /* Reexecute daemon */
+@@ -354,6 +357,7 @@ static int manager_setup_signals(Manager
+ SIGINT, /* Kernel sends us this on control-alt-del */
+ SIGWINCH, /* Kernel sends us this on kbrequest (alt-arrowup) */
+ SIGPWR, /* Some kernel drivers and upsd send us this on power failure */
++
+ SIGRTMIN+0, /* systemd: start default.target */
+ SIGRTMIN+1, /* systemd: isolate rescue.target */
+ SIGRTMIN+2, /* systemd: isolate emergency.target */
+@@ -361,19 +365,40 @@ static int manager_setup_signals(Manager
+ SIGRTMIN+4, /* systemd: start poweroff.target */
+ SIGRTMIN+5, /* systemd: start reboot.target */
+ SIGRTMIN+6, /* systemd: start kexec.target */
++
++ /* ... space for more special targets ... */
++
+ SIGRTMIN+13, /* systemd: Immediate halt */
+ SIGRTMIN+14, /* systemd: Immediate poweroff */
+ SIGRTMIN+15, /* systemd: Immediate reboot */
+ SIGRTMIN+16, /* systemd: Immediate kexec */
++
++ /* ... space for more immediate system state changes ... */
++
+ SIGRTMIN+20, /* systemd: enable status messages */
+ SIGRTMIN+21, /* systemd: disable status messages */
+ SIGRTMIN+22, /* systemd: set log level to LOG_DEBUG */
+ SIGRTMIN+23, /* systemd: set log level to LOG_INFO */
+ SIGRTMIN+24, /* systemd: Immediate exit (--user only) */
++
++ /* .. one free signal here ... */
++
++#if !defined(__hppa64__) && !defined(__hppa__)
++ /* Apparently Linux on hppa has fewer RT
++ * signals (SIGRTMAX is SIGRTMIN+25 there),
++ * hence let's not try to make use of them
++ * here. Since these commands are accessible
++ * by different means and only really a safety
++ * net, the missing functionality on hppa
++ * shouldn't matter. */
++
+ SIGRTMIN+26, /* systemd: set log target to journal-or-kmsg */
+ SIGRTMIN+27, /* systemd: set log target to console */
+ SIGRTMIN+28, /* systemd: set log target to kmsg */
+ SIGRTMIN+29, /* systemd: set log target to syslog-or-kmsg */
++
++ /* ... one free signal here SIGRTMIN+30 ... */
++#endif
+ -1);
+ assert_se(sigprocmask(SIG_SETMASK, &mask, NULL) == 0);
+
diff --git a/0001-sd-bus-properly-handle-removals-of-non-existing-matc.patch b/0001-sd-bus-properly-handle-removals-of-non-existing-matc.patch
new file mode 100644
index 00000000..c1326c50
--- /dev/null
+++ b/0001-sd-bus-properly-handle-removals-of-non-existing-matc.patch
@@ -0,0 +1,25 @@
+From ef7b6c0190fefaacf6d8f8e1a6dda4ba8b98091b Mon Sep 17 00:00:00 2001
+From: Lennart Poettering
+Date: Wed, 29 Oct 2014 17:58:43 +0100
+Subject: [PATCH] sd-bus: properly handle removals of non-existing matches
+
+---
+ src/libsystemd/sd-bus/bus-match.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git src/libsystemd/sd-bus/bus-match.c src/libsystemd/sd-bus/bus-match.c
+index 18afe0f..5658c61 100644
+--- src/libsystemd/sd-bus/bus-match.c
++++ src/libsystemd/sd-bus/bus-match.c
+@@ -537,7 +537,7 @@ static int bus_match_find_compare_value(
+ else if (BUS_MATCH_CAN_HASH(t))
+ n = hashmap_get(c->compare.children, value_str);
+ else {
+- for (n = c->child; !value_node_same(n, t, value_u8, value_str); n = n->next)
++ for (n = c->child; n && !value_node_same(n, t, value_u8, value_str); n = n->next)
+ ;
+ }
+
+--
+1.7.9.2
+
diff --git a/0001-sd-event-don-t-require-a-signal-event-source-to-be-e.patch b/0001-sd-event-don-t-require-a-signal-event-source-to-be-e.patch
new file mode 100644
index 00000000..4b9e6e87
--- /dev/null
+++ b/0001-sd-event-don-t-require-a-signal-event-source-to-be-e.patch
@@ -0,0 +1,58 @@
+From 92daebc0d0268c35f416c1665e0da3d4be5dd69f Mon Sep 17 00:00:00 2001
+From: Lennart Poettering
+Date: Fri, 11 Jul 2014 16:48:35 +0200
+Subject: [PATCH] sd-event: don't require a signal event source to be enabled
+ for the child event source to work
+
+---
+ src/libsystemd/sd-event/sd-event.c | 16 +++++++++-------
+ 1 file changed, 9 insertions(+), 7 deletions(-)
+
+diff --git src/libsystemd/sd-event/sd-event.c src/libsystemd/sd-event/sd-event.c
+index a21f7db..9a9664c 100644
+--- src/libsystemd/sd-event/sd-event.c
++++ src/libsystemd/sd-event/sd-event.c
+@@ -1919,14 +1919,13 @@ static int process_signal(sd_event *e, uint32_t events) {
+ int r;
+
+ assert(e);
+- assert(e->signal_sources);
+
+ assert_return(events == EPOLLIN, -EIO);
+
+ for (;;) {
+ struct signalfd_siginfo si;
+ ssize_t ss;
+- sd_event_source *s;
++ sd_event_source *s = NULL;
+
+ ss = read(e->signal_fd, &si, sizeof(si));
+ if (ss < 0) {
+@@ -1941,16 +1940,19 @@ static int process_signal(sd_event *e, uint32_t events) {
+
+ read_one = true;
+
+- s = e->signal_sources[si.ssi_signo];
+ if (si.ssi_signo == SIGCHLD) {
+ r = process_child(e);
+ if (r < 0)
+ return r;
+- if (r > 0 || !s)
++ if (r > 0)
+ continue;
+- } else
+- if (!s)
+- return -EIO;
++ }
++
++ if (e->signal_sources)
++ s = e->signal_sources[si.ssi_signo];
++
++ if (!s)
++ continue;
+
+ s->signal.siginfo = si;
+ r = source_set_pending(s, true);
+--
+1.7.9.2
+
diff --git a/0001-shell-completion-fix-completion-of-inactive-units.patch b/0001-shell-completion-fix-completion-of-inactive-units.patch
new file mode 100644
index 00000000..563d9828
--- /dev/null
+++ b/0001-shell-completion-fix-completion-of-inactive-units.patch
@@ -0,0 +1,95 @@
+Based on f29c77bc0179b0fa57407dbe30b495be9f5ad2e8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Tue, 14 Oct 2014 20:20:07 -0400
+Subject: [PATCH] shell-completion: fix completion of inactive units
+
+Units which not loaded were not proposed properly. OTOH, we should
+filter units from get-unit-files by their state if they are currently
+loaded. Bring zsh completions in line with bash completion, the same
+logic should be used in both implementations.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1024379
+https://bugzilla.redhat.com/show_bug.cgi?id=790768
+https://bugs.freedesktop.org/show_bug.cgi?id=84720
+---
+ shell-completion/bash/systemctl | 17 +++++++++--------
+ shell-completion/zsh/_systemctl | 16 +++++++++-------
+ 2 files changed, 18 insertions(+), 15 deletions(-)
+
+--- shell-completion/bash/systemctl
++++ shell-completion/bash/systemctl
+@@ -55,10 +55,14 @@ __get_all_units () { { __systemctl $1 list-unit-files; __systemctl $1 list-
+ | { while read -r a b; do echo " $a"; done; }; }
+ __get_active_units () { __systemctl $1 list-units \
+ | { while read -r a b; do echo " $a"; done; }; }
+-__get_startable_units () { {
+- __systemctl $1 list-units --all -t service,timer,socket,mount,automount,path,snapshot,swap
+- __systemctl $1 list-unit-files -t service,timer,socket,mount,automount,path,snapshot,swap; } \
+- | { while read -r a b c d; do [[ $c == "inactive" || $c == "failed" ]] && echo " $a"; done; }; }
++__get_startable_units () {
++ # find inactive or failed units, filter out masked and not-found
++ __systemctl $1 list-units --state inactive,failed -- $( __get_all_units ) | \
++ { while read -r a b c d; do [[ $b == "loaded" ]] && echo " $a"; done; }; }
++__get_restartable_units () {
++ # find !masked, filter out masked and not-found
++ __systemctl $1 list-units --state active,inactive,failed -- $( __get_all_units ) | \
++ { while read -r a b c d; do [[ $b == "loaded" ]] && echo " $a"; done; }; }
+ __get_failed_units () { __systemctl $1 list-units \
+ | { while read -r a b c d; do [[ $c == "failed" ]] && echo " $a"; done; }; }
+ __get_enabled_units () { __systemctl $1 list-unit-files \
+@@ -180,10 +184,7 @@ _systemctl () {
+
+ elif __contains_word "$verb" ${VERBS[RESTARTABLE_UNITS]}; then
+ comps=$( __filter_units_by_property $mode CanStart yes \
+- $( __get_all_units $mode \
+- | while read -r line; do \
+- [[ "$line" =~ @\.|\.(device|snapshot|socket|timer)$ ]] || echo " $line"; \
+- done ))
++ $( __get_restartable_units $mode))
+ compopt -o filenames
+
+ elif __contains_word "$verb" ${VERBS[STOPPABLE_UNITS]}; then
+--- shell-completion/zsh/_systemctl
++++ shell-completion/zsh/_systemctl
+@@ -138,8 +138,11 @@ _filter_units_by_property() {
+ done
+ }
+
++_systemctl_all_units() { { __systemctl list-unit-files; __systemctl list-units --all; } | { while read -r a b; do echo -E - " $a"; done; } }
++
+ _systemctl_active_units() {_sys_active_units=( $(__systemctl list-units | { while read -r a b; do echo -E - " $a"; done; }) )}
+-_systemctl_inactive_units(){_sys_inactive_units=($(__systemctl list-units --all | { while read -r a b c d; do [[ $c == "inactive" || $c == "failed" ]] && echo -E - " $a"; done; }) )}
++_systemctl_startable_units(){_sys_startable_units=($(__systemctl list-units --state inactive,failed -- $(_systemctl_all_units) | { while read -r a b c d; do [[ $b == "loaded" ]] && echo -E - " $a"; done; }) )}
++_systemctl_restartable_units(){_sys_restartable_units=($(__systemctl list-units --state inactive,failed,active -- $(_systemctl_all_units) | { while read -r a b c d; do [[ $b == "loaded" ]] && echo -E - " $a"; done; }) )}
+ _systemctl_failed_units() {_sys_failed_units=( $(__systemctl list-units --failed | { while read -r a b; do echo -E - " $a"; done; }) )}
+ _systemctl_enabled_units() {_sys_enabled_units=( $(__systemctl list-unit-files | { while read -r a b; do [[ $b == "enabled" ]] && echo -E - " $a"; done; }) )}
+ _systemctl_disabled_units(){_sys_disabled_units=($(__systemctl list-unit-files | { while read -r a b; do [[ $b == "disabled" ]] && echo -E - " $a"; done; }) )}
+@@ -181,8 +184,9 @@ done
+ # Completion functions for STARTABLE_UNITS
+ (( $+functions[_systemctl_start] )) || _systemctl_start()
+ {
+- _systemctl_inactive_units
+- compadd "$@" -a - _sys_inactive_units
++ _systemctl_startable_units
++ compadd "$@" - $( _filter_units_by_property CanStart yes \
++ ${_sys_startable_units[*]} )
+ }
+
+ # Completion functions for STOPPABLE_UNITS
+@@ -217,11 +221,9 @@ done
+ for fun in restart reload-or-restart ; do
+ (( $+functions[_systemctl_$fun] )) || _systemctl_$fun()
+ {
+- _systemctl_all_units
++ _systemctl_restartable_units
+ compadd "$@" - $( _filter_units_by_property CanStart yes \
+- ${_sys_all_units[*]} | while read -r line; do \
+- [[ "$line" =~ \.device$ ]] || echo -E - " $line"; \
+- done )
++ ${_sys_restartable_units[*]} )
+ }
+ done
+
+--
+1.7.9.2
+
diff --git a/0001-shutdownd-clean-up-initialization-of-struct.patch b/0001-shutdownd-clean-up-initialization-of-struct.patch
new file mode 100644
index 00000000..3f2fb4ea
--- /dev/null
+++ b/0001-shutdownd-clean-up-initialization-of-struct.patch
@@ -0,0 +1,30 @@
+From b748c7596f79945be5263a0d1c88de64eb0c5146 Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen
+Date: Sat, 27 Sep 2014 00:25:09 +0200
+Subject: [PATCH] shutdownd: clean up initialization of struct
+
+No functional change. We just don't assign the value twice.
+
+Found by coverity. Fixes: CID#1237616 and #1237617
+---
+ src/shutdownd/shutdownd.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git src/shutdownd/shutdownd.c src/shutdownd/shutdownd.c
+index 99aa4b3..0f008a6 100644
+--- src/shutdownd/shutdownd.c
++++ src/shutdownd/shutdownd.c
+@@ -52,8 +52,8 @@ static int read_packet(int fd, union shutdown_buffer *_b) {
+ union shutdown_buffer b; /* We maintain our own copy here, in
+ * order not to corrupt the last message */
+ struct iovec iovec = {
+- iovec.iov_base = &b,
+- iovec.iov_len = sizeof(b) - 1,
++ .iov_base = &b,
++ .iov_len = sizeof(b) - 1,
+ };
+ union {
+ struct cmsghdr cmsghdr;
+--
+1.7.9.2
+
diff --git a/0001-strv-add-an-additional-overflow-check-when-enlarging.patch b/0001-strv-add-an-additional-overflow-check-when-enlarging.patch
new file mode 100644
index 00000000..3f953f4f
--- /dev/null
+++ b/0001-strv-add-an-additional-overflow-check-when-enlarging.patch
@@ -0,0 +1,35 @@
+Based on 97569e154b80541cbad39d78231b7f360d4ff058 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering
+Date: Tue, 21 Oct 2014 14:01:28 +0200
+Subject: [PATCH] strv: add an additional overflow check when enlarging
+ strv()s
+
+https://bugs.freedesktop.org/show_bug.cgi?id=76745
+---
+ src/shared/strv.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+--- src/shared/strv.c
++++ src/shared/strv.c 2014-10-23 00:00:00.000000000 +0000
+@@ -361,13 +361,19 @@ char *strv_join_quoted(char **l) {
+
+ int strv_push(char ***l, char *value) {
+ char **c;
+- unsigned n;
++ unsigned n, m;
+
+ if (!value)
+ return 0;
+
+ n = strv_length(*l);
+- c = realloc(*l, sizeof(char*) * (n + 2));
++
++ /* increase and check for overflow */
++ m = n + 2;
++ if (m < n)
++ return -ENOMEM;
++
++ c = realloc(*l, sizeof(char*) * (size_t) m);
+ if (!c)
+ return -ENOMEM;
+
diff --git a/0001-systemctl-let-list-units-unit-files-honour-type.patch b/0001-systemctl-let-list-units-unit-files-honour-type.patch
new file mode 100644
index 00000000..1548d84f
--- /dev/null
+++ b/0001-systemctl-let-list-units-unit-files-honour-type.patch
@@ -0,0 +1,94 @@
+Based on 6c71341aeecc3d092ed90f66e1b2c481b8e260ff Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Wed, 29 Oct 2014 22:46:30 -0400
+Subject: [PATCH] systemctl: let list-{units,unit-files } honour --type
+
+The docs don't clarify what is expected, but I don't see any reason
+why --type should be ignored.
+
+Also restucture the compund conditions into separate clauses for
+easier reading.
+---
+ src/systemctl/systemctl.c | 48 ++++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 37 insertions(+), 11 deletions(-)
+
+--- src/systemctl/systemctl.c
++++ src/systemctl/systemctl.c 2014-11-18 00:00:00.000000000 +0000
+@@ -305,21 +305,37 @@ static int compare_unit_info(const void
+ }
+
+ static bool output_show_unit(const UnitInfo *u, char **patterns) {
+- const char *dot;
+-
+ if (!strv_isempty(patterns)) {
+ char **pattern;
+
+ STRV_FOREACH(pattern, patterns)
+ if (fnmatch(*pattern, u->id, FNM_NOESCAPE) == 0)
+- return true;
++ goto next;
+ return false;
+ }
+
+- return (!arg_types || ((dot = strrchr(u->id, '.')) &&
+- strv_find(arg_types, dot+1))) &&
+- (arg_all || !(streq(u->active_state, "inactive")
+- || u->following[0]) || u->job_id > 0);
++next:
++ if (arg_types) {
++ const char *dot;
++
++ dot = strrchr(u->id, '.');
++ if (!dot)
++ return false;
++
++ if (!strv_find(arg_types, dot+1))
++ return false;
++ }
++
++ if (arg_all)
++ return true;
++
++ if (u->job_id > 0)
++ return true;
++
++ if (streq(u->active_state, "inactive") || u->following[0])
++ return false;
++
++ return true;
+ }
+
+ static void output_units_list(const UnitInfo *unit_infos, unsigned c) {
+@@ -1019,18 +1035,28 @@ static int compare_unit_file_list(const
+ }
+
+ static bool output_show_unit_file(const UnitFileList *u, char **patterns) {
+- const char *dot;
+-
+ if (!strv_isempty(patterns)) {
+ char **pattern;
+
+ STRV_FOREACH(pattern, patterns)
+ if (fnmatch(*pattern, basename(u->path), FNM_NOESCAPE) == 0)
+- return true;
++ goto next;
+ return false;
+ }
+
+- return !arg_types || ((dot = strrchr(u->path, '.')) && strv_find(arg_types, dot+1));
++next:
++ if (!strv_isempty(arg_types)) {
++ const char *dot;
++
++ dot = strrchr(u->path, '.');
++ if (!dot)
++ return false;
++
++ if (!strv_find(arg_types, dot+1))
++ return false;
++ }
++
++ return true;
+ }
+
+ static void output_unit_file_list(const UnitFileList *units, unsigned c) {
diff --git a/0001-systemctl-when-mangle-unit-names-for-the-isolate-suf.patch b/0001-systemctl-when-mangle-unit-names-for-the-isolate-suf.patch
new file mode 100644
index 00000000..544be067
--- /dev/null
+++ b/0001-systemctl-when-mangle-unit-names-for-the-isolate-suf.patch
@@ -0,0 +1,52 @@
+From 08073121d8171f8e6be27b0c80e2ec283064760e Mon Sep 17 00:00:00 2001
+From: Lennart Poettering
+Date: Mon, 13 Oct 2014 15:43:09 +0200
+Subject: [PATCH] systemctl: when mangle unit names for the "isolate", suffix
+ with ".target" rather than ".service" by default
+
+After all, we set AllowIsolate exclusively for target units so far, and
+this is more or less the only thing tht makes sense, hence also use
+".target" as completion suffix by default.
+---
+ src/systemctl/systemctl.c | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git src/systemctl/systemctl.c src/systemctl/systemctl.c
+index 842ca6c..af3cc97 100644
+--- src/systemctl/systemctl.c
++++ src/systemctl/systemctl.c
+@@ -2704,7 +2704,7 @@ static enum action verb_to_action(const char *verb) {
+ static int start_unit(sd_bus *bus, char **args) {
+ _cleanup_set_free_free_ Set *s = NULL;
+ _cleanup_strv_free_ char **names = NULL;
+- const char *method, *mode, *one_name;
++ const char *method, *mode, *one_name, *suffix = NULL;
+ char **name;
+ int r = 0;
+
+@@ -2717,8 +2717,11 @@ static int start_unit(sd_bus *bus, char **args) {
+ method = verb_to_method(args[0]);
+ action = verb_to_action(args[0]);
+
+- mode = streq(args[0], "isolate") ? "isolate" :
+- action_table[action].mode ?: arg_job_mode;
++ if (streq(args[0], "isolate")) {
++ mode = "isolate";
++ suffix = ".target";
++ } else
++ mode = action_table[action].mode ?: arg_job_mode;
+
+ one_name = action_table[action].target;
+ } else {
+@@ -2734,7 +2737,7 @@ static int start_unit(sd_bus *bus, char **args) {
+ if (one_name)
+ names = strv_new(one_name, NULL);
+ else {
+- r = expand_names(bus, args + 1, NULL, &names);
++ r = expand_names(bus, args + 1, suffix, &names);
+ if (r < 0)
+ log_error("Failed to expand names: %s", strerror(-r));
+ }
+--
+1.7.9.2
+
diff --git a/0001-systemd-continue-switch-root-even-if-umount-fails.patch b/0001-systemd-continue-switch-root-even-if-umount-fails.patch
new file mode 100644
index 00000000..e8b3ee9f
--- /dev/null
+++ b/0001-systemd-continue-switch-root-even-if-umount-fails.patch
@@ -0,0 +1,50 @@
+Based on d677d4df80e0ea1c66c691f50867fedd63c6770a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Thu, 16 Oct 2014 19:12:55 -0500
+Subject: [PATCH] systemd: continue switch-root even if umount fails
+
+Leaving the old root around seems better than aborting the
+switch.
+---
+ src/core/main.c | 2 +-
+ src/core/switch-root.c | 11 +++++------
+ 2 files changed, 6 insertions(+), 7 deletions(-)
+
+--- src/core/main.c
++++ src/core/main.c 2014-10-20 13:35:35.915837828 +0000
+@@ -1848,7 +1848,7 @@ finish:
+ /* And switch root */
+ r = switch_root(switch_root_dir);
+ if (r < 0)
+- log_error("Failed to switch root, ignoring: %s", strerror(-r));
++ log_error("Failed to switch root, trying to continue: %s", strerror(-r));
+ }
+
+ args_size = MAX(6, argc+1);
+--- src/core/switch-root.c
++++ src/core/switch-root.c 2014-10-20 13:39:58.167121460 +0000
+@@ -68,10 +68,9 @@ int switch_root(const char *new_root) {
+ goto fail;
+ }
+
+- /* Work-around for a kernel bug: for some reason the kernel
+- * refuses switching root if any file systems are mounted
+- * MS_SHARED. Hence remount them MS_PRIVATE here as a
+- * work-around.
++ /* Work-around for kernel design: the kernel refuses switching
++ * root if any file systems are mounted MS_SHARED. Hence
++ * remount them MS_PRIVATE here as a work-around.
+ *
+ * https://bugzilla.redhat.com/show_bug.cgi?id=847418 */
+ if (mount(NULL, "/", NULL, MS_REC|MS_PRIVATE, NULL) < 0)
+@@ -124,8 +123,8 @@ int switch_root(const char *new_root) {
+ * running off it we need to do this lazily. */
+ if (umount2("/mnt", MNT_DETACH) < 0) {
+ r = -errno;
+- log_error("Failed to umount old root dir /mnt: %m");
+- goto fail;
++ log_error("Failed to lazily umount old root dir /mnt, %s: %m",
++ errno == ENOENT ? "ignoring" : "leaving it around");
+ }
+
+ } else if (mount(new_root, "/", NULL, MS_MOVE, NULL) < 0) {
diff --git a/0001-tmpfiles-compare-return-against-correct-errno.patch b/0001-tmpfiles-compare-return-against-correct-errno.patch
new file mode 100644
index 00000000..10c2e214
--- /dev/null
+++ b/0001-tmpfiles-compare-return-against-correct-errno.patch
@@ -0,0 +1,26 @@
+From e7aab5412829ed6b50d109f670bd0b1b365838a7 Mon Sep 17 00:00:00 2001
+From: Dave Reisner
+Date: Sat, 11 Oct 2014 20:35:06 -0400
+Subject: [PATCH] tmpfiles: compare return against correct errno
+
+name_to_handle_at returns -EOPNOTSUPP, not -ENOTSUP.
+---
+ src/tmpfiles/tmpfiles.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git src/tmpfiles/tmpfiles.c src/tmpfiles/tmpfiles.c
+index dafb9ae..8108b43 100644
+--- src/tmpfiles/tmpfiles.c
++++ src/tmpfiles/tmpfiles.c
+@@ -259,7 +259,7 @@ static int dir_is_mount_point(DIR *d, const char *subdir) {
+
+ /* got only one handle; assume different mount points if one
+ * of both queries was not supported by the filesystem */
+- if (r_p == -ENOSYS || r_p == -ENOTSUP || r == -ENOSYS || r == -ENOTSUP)
++ if (r_p == -ENOSYS || r_p == -EOPNOTSUPP || r == -ENOSYS || r == -EOPNOTSUPP)
+ return true;
+
+ /* return error */
+--
+1.7.9.2
+
diff --git a/0001-units-introduce-network-pre.target-as-place-to-hook-.patch b/0001-units-introduce-network-pre.target-as-place-to-hook-.patch
new file mode 100644
index 00000000..ffbc0569
--- /dev/null
+++ b/0001-units-introduce-network-pre.target-as-place-to-hook-.patch
@@ -0,0 +1,126 @@
+From a4a878d04045b46fa9783664e3643a890b356790 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering
+Date: Wed, 11 Jun 2014 11:33:02 +0200
+Subject: [PATCH] units: introduce network-pre.target as place to hook in
+ firewalls
+
+network-pre.target is a passive target that should be pulled in by
+services that want to be executed before any network is configured (for
+example: firewall scrips).
+
+network-pre.target should be ordered before all network managemet
+services (but not be pulled in by them).
+
+network-pre.target should be order after all services that want to be
+executed before any network is configured (and be pulled in by them).
+---
+ Makefile.am | 1 +
+ man/systemd.special.xml | 15 +++++++++++++++
+ units/local-fs.target | 2 --
+ units/network-pre.target | 12 ++++++++++++
+ units/network.target | 2 ++
+ units/systemd-networkd.service.in | 2 +-
+ 6 files changed, 31 insertions(+), 3 deletions(-)
+ create mode 100644 units/network-pre.target
+
+diff --git Makefile.am Makefile.am
+index 3ea95e9..8514ec9 100644
+--- Makefile.am
++++ Makefile.am
+@@ -413,6 +413,7 @@ dist_systemunit_DATA = \
+ units/remote-fs.target \
+ units/remote-fs-pre.target \
+ units/network.target \
++ units/network-pre.target \
+ units/network-online.target \
+ units/nss-lookup.target \
+ units/nss-user-lookup.target \
+diff --git man/systemd.special.xml man/systemd.special.xml
+index 38b94a7..cda6edd 100644
+--- man/systemd.special.xml
++++ man/systemd.special.xml
+@@ -72,6 +72,7 @@
+ multi-user.target,
+ network.target,
+ network-online.target,
++ network-pre.target,
+ nss-lookup.target,
+ nss-user-lookup.target,
+ paths.target,
+@@ -891,6 +892,20 @@
+
+
+
++ network-pre.target
++
++ This passive target unit
++ may be pulled in by services
++ that want to run before any
++ network is set up, for example
++ for the purpose of setting up a
++ firewall. All network
++ management software orders
++ itself after this target, but
++ does not pull it in.
++
++
++
+ nss-lookup.target
+
+ A target that should be
+diff --git units/local-fs.target units/local-fs.target
+index ae3cedc..70cb13f 100644
+--- units/local-fs.target
++++ units/local-fs.target
+@@ -9,7 +9,5 @@
+ Description=Local File Systems
+ Documentation=man:systemd.special(7)
+ After=local-fs-pre.target
+-DefaultDependencies=no
+-Conflicts=shutdown.target
+ OnFailure=emergency.target
+ OnFailureJobMode=replace-irreversibly
+diff --git units/network-pre.target units/network-pre.target
+new file mode 100644
+index 0000000..0ea4bc7
+--- /dev/null
++++ units/network-pre.target
+@@ -0,0 +1,12 @@
++# This file is part of systemd.
++#
++# 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.
++
++[Unit]
++Description=Network (Pre)
++Documentation=man:systemd.special(7)
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
++RefuseManualStart=yes
+diff --git units/network.target units/network.target
+index 65fc64b..61ebdca 100644
+--- units/network.target
++++ units/network.target
+@@ -9,3 +9,5 @@
+ Description=Network
+ Documentation=man:systemd.special(7)
+ Documentation=http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
++After=network-pre.target
++RefuseManualStart=yes
+diff --git units/systemd-networkd.service.in units/systemd-networkd.service.in
+index 373ac4e..48f4d63 100644
+--- units/systemd-networkd.service.in
++++ units/systemd-networkd.service.in
+@@ -9,7 +9,7 @@
+ Description=Network Service
+ Documentation=man:systemd-networkd.service(8)
+ DefaultDependencies=no
+-After=dbus.service
++After=dbus.service network-pre.target
+ Before=network.target
+ Wants=network.target
+ ConditionCapability=CAP_NET_ADMIN
+--
+1.7.9.2
+
diff --git a/0001-virt-detect-that-we-are-running-inside-the-docker-co.patch b/0001-virt-detect-that-we-are-running-inside-the-docker-co.patch
new file mode 100644
index 00000000..a5358cc9
--- /dev/null
+++ b/0001-virt-detect-that-we-are-running-inside-the-docker-co.patch
@@ -0,0 +1,25 @@
+From 893e72da6b27c21b102e1589276e651e9e4f591c Mon Sep 17 00:00:00 2001
+From: Michal Sekletar
+Date: Tue, 9 Sep 2014 18:14:25 +0200
+Subject: [PATCH] virt: detect that we are running inside the docker container
+
+---
+ src/shared/virt.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git src/shared/virt.c src/shared/virt.c
+index b436895..f9c4e67 100644
+--- src/shared/virt.c
++++ src/shared/virt.c
+@@ -310,6 +310,8 @@ int detect_container(const char **id) {
+ _id = "lxc-libvirt";
+ else if (streq(e, "systemd-nspawn"))
+ _id = "systemd-nspawn";
++ else if (streq(e, "docker"))
++ _id = "docker";
+ else
+ _id = "other";
+
+--
+1.7.9.2
+
diff --git a/0002-bootchart-use-n-a-if-PRETTY_NAME-is-not-found.patch b/0002-bootchart-use-n-a-if-PRETTY_NAME-is-not-found.patch
new file mode 100644
index 00000000..8c1b12e2
--- /dev/null
+++ b/0002-bootchart-use-n-a-if-PRETTY_NAME-is-not-found.patch
@@ -0,0 +1,31 @@
+From 1c92ff85b786c423f4436ec26007e79369c9ac05 Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen
+Date: Fri, 26 Sep 2014 22:01:32 +0200
+Subject: [PATCH] bootchart: use 'n/a' if PRETTY_NAME is not found
+
+Spotted with coverity. If parsing both /etc/os-release and
+/usr/lib/os-release fails then null would be passed on. The calls
+to parse the two files are allowed to fail. A empty /etc may not
+have had the /etc/os-release symlink restored yet and we just
+try again in the loop. If for whatever reason that does not happen
+then we now pass on 'n/a' instead of null.
+---
+ src/bootchart/bootchart.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git src/bootchart/bootchart.c src/bootchart/bootchart.c
+index 366a5ab..813e38d 100644
+--- src/bootchart/bootchart.c
++++ src/bootchart/bootchart.c
+@@ -471,7 +471,7 @@ int main(int argc, char *argv[]) {
+ exit (EXIT_FAILURE);
+ }
+
+- svg_do(build);
++ svg_do(strna(build));
+
+ fprintf(stderr, "systemd-bootchart wrote %s\n", output_file);
+
+--
+1.7.9.2
+
diff --git a/0002-core-watchdog-bus-properties-cannot-be-both-writable.patch b/0002-core-watchdog-bus-properties-cannot-be-both-writable.patch
new file mode 100644
index 00000000..3a136da5
--- /dev/null
+++ b/0002-core-watchdog-bus-properties-cannot-be-both-writable.patch
@@ -0,0 +1,23 @@
+Based on 4c3f1641f13b7687a0dc234d3ae387b7c40494ff Mon Sep 17 00:00:00 2001
+From: Lennart Poettering
+Date: Wed, 19 Nov 2014 20:52:23 +0100
+Subject: [PATCH] core: watchdog bus properties cannot be both writable and
+ constant
+
+---
+ src/core/dbus-manager.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- src/core/dbus-manager.c
++++ src/core/dbus-manager.c 2014-11-20 13:43:06.781518488 +0000
+@@ -1599,8 +1599,8 @@ const sd_bus_vtable bus_manager_vtable[]
+ SD_BUS_PROPERTY("UnitPath", "as", NULL, offsetof(Manager, lookup_paths.unit_path), SD_BUS_VTABLE_PROPERTY_CONST),
+ SD_BUS_PROPERTY("DefaultStandardOutput", "s", bus_property_get_exec_output, offsetof(Manager, default_std_output), SD_BUS_VTABLE_PROPERTY_CONST),
+ SD_BUS_PROPERTY("DefaultStandardError", "s", bus_property_get_exec_output, offsetof(Manager, default_std_output), SD_BUS_VTABLE_PROPERTY_CONST),
+- SD_BUS_WRITABLE_PROPERTY("RuntimeWatchdogUSec", "t", bus_property_get_usec, property_set_runtime_watchdog, offsetof(Manager, runtime_watchdog), SD_BUS_VTABLE_PROPERTY_CONST),
+- SD_BUS_WRITABLE_PROPERTY("ShutdownWatchdogUSec", "t", bus_property_get_usec, bus_property_set_usec, offsetof(Manager, shutdown_watchdog), SD_BUS_VTABLE_PROPERTY_CONST),
++ SD_BUS_WRITABLE_PROPERTY("RuntimeWatchdogUSec", "t", bus_property_get_usec, property_set_runtime_watchdog, offsetof(Manager, runtime_watchdog), 0),
++ SD_BUS_WRITABLE_PROPERTY("ShutdownWatchdogUSec", "t", bus_property_get_usec, bus_property_set_usec, offsetof(Manager, shutdown_watchdog), 0),
+ SD_BUS_PROPERTY("ControlGroup", "s", NULL, offsetof(Manager, cgroup_root), 0),
+
+ SD_BUS_METHOD("GetUnit", "s", "o", method_get_unit, SD_BUS_VTABLE_UNPRIVILEGED),
diff --git a/0002-hwdb-Add-mapping-for-special-keys-on-compaq-ku-0133-.patch b/0002-hwdb-Add-mapping-for-special-keys-on-compaq-ku-0133-.patch
new file mode 100644
index 00000000..8304b2d4
--- /dev/null
+++ b/0002-hwdb-Add-mapping-for-special-keys-on-compaq-ku-0133-.patch
@@ -0,0 +1,42 @@
+From fc1ae82cae69d8dbbd9e7a31938810a486fac782 Mon Sep 17 00:00:00 2001
+From: Hans de Goede
+Date: Wed, 22 Oct 2014 14:09:21 +0200
+Subject: [PATCH] hwdb: Add mapping for special keys on compaq ku 0133
+ keyboards
+
+The compaq ku 0133 keyboard has 8 special keys at the top:
+http://lackof.org/taggart/hacking/keyboard/cpqwireless.jpg
+
+3 of these use standard HID usage codes from the consumer page, the 5
+others use part of the reserved 0x07 - 0x1f range.
+
+This commit adds mapping for this keyboard for these reserved codes, making
+the other 5 keys work.
+
+Cc: Hans de Goede
+Signed-off-by: Hans de Goede
+---
+ hwdb/60-keyboard.hwdb | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git hwdb/60-keyboard.hwdb hwdb/60-keyboard.hwdb
+index 59f467b..06caba9 100644
+--- hwdb/60-keyboard.hwdb
++++ hwdb/60-keyboard.hwdb
+@@ -181,6 +181,13 @@ keyboard:dmi:bvn*:bvr*:bd*:svnCompaq*:pn*Evo*N*:pvr*
+ KEYBOARD_KEY_9e=email
+ KEYBOARD_KEY_9f=homepage
+
++keyboard:usb:v049Fp0051d*dc*dsc*dp*ic*isc*ip*in01*
++ KEYBOARD_KEY_0c0011=presentation
++ KEYBOARD_KEY_0c0012=addressbook
++ KEYBOARD_KEY_0c0013=info
++ KEYBOARD_KEY_0c0014=prog1
++ KEYBOARD_KEY_0c0015=messenger
++
+ ###########################################################
+ # Dell
+ ###########################################################
+--
+1.7.9.2
+
diff --git a/0002-keymap-Fix-special-keys-on-ThinkPad-X60-X61-Tablet.patch b/0002-keymap-Fix-special-keys-on-ThinkPad-X60-X61-Tablet.patch
new file mode 100644
index 00000000..28f7bb2a
--- /dev/null
+++ b/0002-keymap-Fix-special-keys-on-ThinkPad-X60-X61-Tablet.patch
@@ -0,0 +1,33 @@
+From b4c72e52d2109fe7f0ac3440c81ae3e1ce64a143 Mon Sep 17 00:00:00 2001
+From: Bastien Nocera
+Date: Wed, 12 Nov 2014 23:31:08 +0100
+Subject: [PATCH] keymap: Fix special keys on ThinkPad X60/X61 Tablet
+
+KEY_DIRECTION is mapped to XF86RotateWindows, to rotate the display:
+http://cgit.freedesktop.org/xkeyboard-config/commit/symbols/inet?id=ec875f6f9b7c4028e11d32b071989c682e6502bd
+
+And F13 is mapped to XF86Tools, which is closest to the original toolbox
+usage:
+http://cgit.freedesktop.org/xkeyboard-config/tree/symbols/inet?id=7a2c4bed212ebbcc05f3c959aef659ce7dd31fd8#n221
+---
+ hwdb/60-keyboard.hwdb | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git hwdb/60-keyboard.hwdb hwdb/60-keyboard.hwdb
+index 56a4009..533ad5b 100644
+--- hwdb/60-keyboard.hwdb
++++ hwdb/60-keyboard.hwdb
+@@ -585,8 +585,8 @@ keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:pvrThinkPad*X2*Tablet*
+
+ # ThinkPad X6 Tablet
+ keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnThinkPad*X6*:pvr*
+- KEYBOARD_KEY_6c=f21 # rotate
+- KEYBOARD_KEY_68=screenlock # screenlock
++ KEYBOARD_KEY_6c=direction # rotate
++ KEYBOARD_KEY_68=f13 # toolbox
+ KEYBOARD_KEY_6b=esc # escape
+ KEYBOARD_KEY_6d=right # right on d-pad
+ KEYBOARD_KEY_6e=left # left on d-pad
+--
+1.7.9.2
+
diff --git a/0002-keymap-Fix-touchpad-toggle-key-on-Asus-laptops.patch b/0002-keymap-Fix-touchpad-toggle-key-on-Asus-laptops.patch
new file mode 100644
index 00000000..45af9018
--- /dev/null
+++ b/0002-keymap-Fix-touchpad-toggle-key-on-Asus-laptops.patch
@@ -0,0 +1,25 @@
+From 4e3deeedc15b03197d591850061316289245c9a9 Mon Sep 17 00:00:00 2001
+From: Martin Pitt
+Date: Tue, 7 Oct 2014 11:22:31 +0200
+Subject: [PATCH] keymap: Fix touchpad toggle key on Asus laptops
+
+https://launchpad.net/bugs/1377352
+---
+ hwdb/60-keyboard.hwdb | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git hwdb/60-keyboard.hwdb hwdb/60-keyboard.hwdb
+index 1fea32a..59f467b 100644
+--- hwdb/60-keyboard.hwdb
++++ hwdb/60-keyboard.hwdb
+@@ -153,6 +153,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svnASUS:pn*
+
+ keyboard:name:Asus WMI hotkeys:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:pvr*
+ keyboard:name:Eee PC WMI hotkeys:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:pvr*
++keyboard:name:Asus Laptop extra buttons:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:pvr*
+ KEYBOARD_KEY_6b=f21 # Touchpad Toggle
+
+ ###########################################################
+--
+1.7.9.2
+
diff --git a/0002-keymap-Ignore-brightness-keys-on-Dell-Inspiron-1520-.patch b/0002-keymap-Ignore-brightness-keys-on-Dell-Inspiron-1520-.patch
new file mode 100644
index 00000000..e29c01d9
--- /dev/null
+++ b/0002-keymap-Ignore-brightness-keys-on-Dell-Inspiron-1520-.patch
@@ -0,0 +1,41 @@
+From aba248ee6b1eb10baf3d89eca2ad7569459af6ab Mon Sep 17 00:00:00 2001
+From: Hans de Goede
+Date: Thu, 30 Oct 2014 10:15:54 +0100
+Subject: [PATCH] keymap: Ignore brightness keys on Dell Inspiron 1520 to
+ avoid double events
+
+On the Dell Inspiron 1520 both the atkbd and acpi-video input devices report
+an event for pressing the brightness up / down key-combos, resulting in user
+space seeing double events and increasing / decreasing the brightness 2 steps
+for each keypress.
+
+This hwdb snippet suppresses the atkbd events, making the Inspiron 1520 work
+like most modern laptops which emit brightness up / down events through
+acpi-video only.
+
+Reported by Pavel Malyshev
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1141525
+---
+ hwdb/60-keyboard.hwdb | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git hwdb/60-keyboard.hwdb hwdb/60-keyboard.hwdb
+index 06caba9..d2ca965 100644
+--- hwdb/60-keyboard.hwdb
++++ hwdb/60-keyboard.hwdb
+@@ -230,6 +230,11 @@ keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnInspiron*1110:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnInspiron*1210:pvr*
+ KEYBOARD_KEY_84=wlan
+
++# Dell Inspiron 1520
++keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnInspiron*1520:pvr*
++ KEYBOARD_KEY_85=unknown # Brightness Down, also emitted by acpi-video, ignore
++ KEYBOARD_KEY_86=unknown # Brightness Up, also emitted by acpi-video, ignore
++
+ # Latitude XT2
+ keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*XT2:pvr*
+ KEYBOARD_KEY_9b=up # tablet rocker up
+--
+1.7.9.2
+
diff --git a/0002-logind-add-support-for-TPS65217-Power-Button.patch b/0002-logind-add-support-for-TPS65217-Power-Button.patch
new file mode 100644
index 00000000..17a576de
--- /dev/null
+++ b/0002-logind-add-support-for-TPS65217-Power-Button.patch
@@ -0,0 +1,71 @@
+From 492d7a3038b154e1813a1ece913a5a27148fec19 Mon Sep 17 00:00:00 2001
+From: Koen Kooi
+Date: Sat, 27 Sep 2014 09:55:44 +0200
+Subject: [PATCH] logind: add support for TPS65217 Power Button
+
+This PMIC is found on TI AM335x based boards like the beaglebone and
+beaglebone black.
+
+root@beaglebone-white:~# udevadm info -a /dev/input/event0
+
+Udevadm info starts with the device specified by the devpath and then
+walks up the chain of parent devices. It prints for every device
+found, all possible attributes in the udev rules key format.
+A rule to match, can be composed by the attributes of the device
+and the attributes from one single parent device.
+
+ looking at device
+'/devices/ocp.3/44e0b000.i2c/i2c-0/0-0024/input/input0/event0':
+ KERNEL=="event0"
+ SUBSYSTEM=="input"
+ DRIVER==""
+
+ looking at parent device
+'/devices/ocp.3/44e0b000.i2c/i2c-0/0-0024/input/input0':
+ KERNELS=="input0"
+ SUBSYSTEMS=="input"
+ DRIVERS==""
+ ATTRS{name}=="tps65217_pwr_but"
+ ATTRS{phys}==""
+ ATTRS{uniq}==""
+ ATTRS{properties}=="0"
+
+ looking at parent device '/devices/ocp.3/44e0b000.i2c/i2c-0/0-0024':
+ KERNELS=="0-0024"
+ SUBSYSTEMS=="i2c"
+ DRIVERS=="tps65217"
+ ATTRS{name}=="tps65217"
+
+ looking at parent device '/devices/ocp.3/44e0b000.i2c/i2c-0':
+ KERNELS=="i2c-0"
+ SUBSYSTEMS=="i2c"
+ DRIVERS==""
+ ATTRS{name}=="OMAP I2C adapter"
+
+ looking at parent device '/devices/ocp.3/44e0b000.i2c':
+ KERNELS=="44e0b000.i2c"
+ SUBSYSTEMS=="platform"
+ DRIVERS=="omap_i2c"
+
+ looking at parent device '/devices/ocp.3':
+ KERNELS=="ocp.3"
+ SUBSYSTEMS=="platform"
+ DRIVERS==""
+---
+ src/login/70-power-switch.rules | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git src/login/70-power-switch.rules src/login/70-power-switch.rules
+index a6997f7..695d246 100644
+--- src/login/70-power-switch.rules
++++ src/login/70-power-switch.rules
+@@ -10,5 +10,6 @@ ACTION=="remove", GOTO="power_switch_end"
+ SUBSYSTEM=="input", KERNEL=="event*", SUBSYSTEMS=="acpi", TAG+="power-switch"
+ SUBSYSTEM=="input", KERNEL=="event*", KERNELS=="thinkpad_acpi", TAG+="power-switch"
+ SUBSYSTEM=="input", KERNEL=="event*", ATTRS{name}=="twl4030_pwrbutton", TAG+="power-switch"
++SUBSYSTEM=="input", KERNEL=="event*", ATTRS{name}=="tps65217_pwr_but", TAG+="power-switch"
+
+ LABEL="power_switch_end"
+--
+1.7.9.2
+
diff --git a/0002-shell-completion-propose-templates-for-disable-re-en.patch b/0002-shell-completion-propose-templates-for-disable-re-en.patch
new file mode 100644
index 00000000..3a58e013
--- /dev/null
+++ b/0002-shell-completion-propose-templates-for-disable-re-en.patch
@@ -0,0 +1,111 @@
+Based on e9a19bd882ff8a2c8aef5c63b39525ea231e5fb9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Tue, 14 Oct 2014 21:10:02 -0400
+Subject: [PATCH] shell-completion: propose templates for
+ disable/[re]enable/[re]start
+
+Templates can be [re]enabled, on their own if the have DefaultInstance set,
+and with an instance suffix in all cases. Propose just the template name
+ending in @, to underline the instance suffix may have to be appended.
+
+Likewise for start/restart.
+
+This means that sometimes superflous units that one will not really
+want to operate on will be proposed, but this seems better than
+proposing a very incomplete set of names.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=66912
+---
+ shell-completion/bash/systemctl | 15 +++++++++++----
+ shell-completion/zsh/_systemctl | 20 +++++++++++++-------
+ 2 files changed, 24 insertions(+), 11 deletions(-)
+
+--- shell-completion/bash/systemctl
++++ shell-completion/bash/systemctl
+@@ -53,6 +53,9 @@ __filter_units_by_property () {
+
+ __get_all_units () { { __systemctl $1 list-unit-files; __systemctl $1 list-units --all; } \
+ | { while read -r a b; do echo " $a"; done; }; }
++__get_template_names () { __systemctl $1 list-unit-files \
++ | { while read -r a b; do [[ $a =~ @\. ]] && echo " ${a%%@.*}@"; done; }; }
++
+ __get_active_units () { __systemctl $1 list-units \
+ | { while read -r a b; do echo " $a"; done; }; }
+ __get_startable_units () {
+@@ -169,22 +172,26 @@ _systemctl () {
+ compopt -o filenames
+
+ elif __contains_word "$verb" ${VERBS[DISABLED_UNITS]}; then
+- comps=$( __get_disabled_units $mode )
++ comps=$( __get_disabled_units $mode;
++ __get_template_names $mode)
+ compopt -o filenames
+
+ elif __contains_word "$verb" ${VERBS[REENABLABLE_UNITS]}; then
+ comps=$( __get_disabled_units $mode;
+- __get_enabled_units $mode )
++ __get_enabled_units $mode;
++ __get_template_names $mode)
+ compopt -o filenames
+
+ elif __contains_word "$verb" ${VERBS[STARTABLE_UNITS]}; then
+ comps=$( __filter_units_by_property $mode CanStart yes \
+- $( __get_startable_units $mode))
++ $( __get_startable_units $mode);
++ __get_template_names $mode)
+ compopt -o filenames
+
+ elif __contains_word "$verb" ${VERBS[RESTARTABLE_UNITS]}; then
+ comps=$( __filter_units_by_property $mode CanStart yes \
+- $( __get_restartable_units $mode))
++ $( __get_restartable_units $mode); \
++ __get_template_names $mode)
+ compopt -o filenames
+
+ elif __contains_word "$verb" ${VERBS[STOPPABLE_UNITS]}; then
+--- shell-completion/zsh/_systemctl
++++ shell-completion/zsh/_systemctl
+@@ -139,6 +139,8 @@ _filter_units_by_property() {
+ }
+
+ _systemctl_all_units() { { __systemctl list-unit-files; __systemctl list-units --all; } | { while read -r a b; do echo -E - " $a"; done; } }
++_systemctl_get_template_names() { __systemctl list-unit-files | { while read -r a b; do [[ $a =~ @\. ]] && echo -E - " ${a%%@.*}@"; done; } }
++
+
+ _systemctl_active_units() {_sys_active_units=( $(__systemctl list-units | { while read -r a b; do echo -E - " $a"; done; }) )}
+ _systemctl_startable_units(){_sys_startable_units=($(__systemctl list-units --state inactive,failed -- $(_systemctl_all_units) | { while read -r a b c d; do [[ $b == "loaded" ]] && echo -E - " $a"; done; }) )}
+@@ -158,20 +160,24 @@ for fun in is-active is-failed is-enabled status show cat mask preset help list-
+ done
+
+ # Completion functions for ENABLED_UNITS
+-for fun in disable reenable ; do
+- (( $+functions[_systemctl_$fun] )) || _systemctl_$fun()
+- {
++(( $+functions[_systemctl_disable] )) || _systemctl_disable()
++{
++ _systemctl_enabled_units
++ compadd "$@" -a - _sys_enabled_units
++}
++
++(( $+functions[_systemctl_reenable] )) || _systemctl_reenable()
++{
+ _systemctl_enabled_units
+ _systemctl_disabled_units
+- compadd "$@" -a - _sys_enabled_units _sys_disabled_units
+- }
+-done
++ compadd "$@" -a - _sys_enabled_units _sys_disabled_units $(_systemctl_get_template_names)
++}
+
+ # Completion functions for DISABLED_UNITS
+ (( $+functions[_systemctl_enable] )) || _systemctl_enable()
+ {
+ _systemctl_disabled_units
+- compadd "$@" -a - _sys_disabled_units
++ compadd "$@" -a - _sys_disabled_units $(_systemctl_get_template_names)
+ }
+
+ # Completion functions for FAILED_UNITS
+--
+1.7.9.2
+
diff --git a/0002-shutdown-fix-arguments-to-run-initramfs-shutdown.patch b/0002-shutdown-fix-arguments-to-run-initramfs-shutdown.patch
new file mode 100644
index 00000000..12ad7d2d
--- /dev/null
+++ b/0002-shutdown-fix-arguments-to-run-initramfs-shutdown.patch
@@ -0,0 +1,70 @@
+Based on 4b5d8d0f22ae61ceb45a25391354ba53b43ee992 Mon Sep 17 00:00:00 2001
+From: Michal Schmidt
+Date: Thu, 6 Nov 2014 22:24:13 +0100
+Subject: [PATCH] shutdown: fix arguments to /run/initramfs/shutdown
+
+Our initrd interface specifies that the verb is in argv[1].
+This is where systemd passes it to systemd-shutdown, but getopt
+permutes argv[]. This confuses dracut's shutdown script:
+ Shutdown called with argument '--log-level'. Rebooting!
+
+getopt can be convinced to not permute argv[] by having '-' as the first
+character of optstring. Let's use it. This requires changing the way
+non-option arguments (in our case, the verb) are processed.
+
+This fixes a bug where the system would reboot instead of powering off.
+---
+ src/core/shutdown.c | 24 +++++++++++-------------
+ 1 file changed, 11 insertions(+), 13 deletions(-)
+
+--- src/core/shutdown.c
++++ src/core/shutdown.c 2014-11-10 14:14:20.869519112 +0000
+@@ -75,9 +75,9 @@ static int parse_argv(int argc, char *ar
+ assert(argc >= 1);
+ assert(argv);
+
+- opterr = 0;
+-
+- while ((c = getopt_long(argc, argv, ":", options, NULL)) >= 0)
++ /* "-" prevents getopt from permuting argv[] and moving the verb away
++ * from argv[1]. Our interface to initrd promises it'll be there. */
++ while ((c = getopt_long(argc, argv, "-", options, NULL)) >= 0)
+ switch (c) {
+
+ case ARG_LOG_LEVEL:
+@@ -115,27 +115,25 @@ static int parse_argv(int argc, char *ar
+
+ break;
+
+- case '?':
+- log_error("Unknown option %s.", argv[optind-1]);
+- return -EINVAL;
++ case '\001':
++ if (!arg_verb)
++ arg_verb = optarg;
++ else
++ log_error("Excess arguments, ignoring");
++ break;
+
+- case ':':
+- log_error("Missing argument to %s.", argv[optind-1]);
++ case '?':
+ return -EINVAL;
+
+ default:
+ assert_not_reached("Unhandled option code.");
+ }
+
+- if (optind >= argc) {
++ if (!arg_verb) {
+ log_error("Verb argument missing.");
+ return -EINVAL;
+ }
+
+- arg_verb = argv[optind];
+-
+- if (optind + 1 < argc)
+- log_error("Excess arguments, ignoring");
+ return 0;
+ }
+
diff --git a/0002-shutdown-pass-own-argv-to-run-initramfs-shutdown.patch b/0002-shutdown-pass-own-argv-to-run-initramfs-shutdown.patch
new file mode 100644
index 00000000..73a98020
--- /dev/null
+++ b/0002-shutdown-pass-own-argv-to-run-initramfs-shutdown.patch
@@ -0,0 +1,36 @@
+Based on a2726e5cedfa5edeabd7e0784be11bc578555ac5 Mon Sep 17 00:00:00 2001
+From: Marius Tessmann
+Date: Fri, 29 Aug 2014 17:51:45 +0200
+Subject: [PATCH] shutdown: pass own argv to /run/initramfs/shutdown
+
+Since commit b1e90ec515408aec2702522f6f68c4920b56375b systemd passes
+its log settings to systemd-shutdown via command line parameters.
+However, systemd-shutdown doesn't pass these parameters to
+/run/initramfs/shutdown, causing it to fall back to the default log
+settings.
+
+This fixes the following bugs about the shutdown not being quiet
+despite "quiet" being in the kernel parameters:
+
+https://bugs.freedesktop.org/show_bug.cgi?id=79582
+https://bugs.freedesktop.org/show_bug.cgi?id=57216
+---
+ src/core/shutdown.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- src/core/shutdown.c
++++ src/core/shutdown.c 2014-10-24 12:32:44.704337960 +0000
+@@ -377,11 +377,11 @@ int main(int argc, char *argv[]) {
+
+ if (prepare_new_root() >= 0 &&
+ pivot_to_new_root() >= 0) {
+- arguments[0] = (char*) "/shutdown";
++ argv[0] = (char*) "/shutdown";
+
+ log_info("Returning to initrd...");
+
+- execv("/shutdown", arguments);
++ execv("/shutdown", argv);
+ log_error("Failed to execute shutdown binary: %m");
+ }
+ }
diff --git a/0002-snapshot-return-error-when-snapshot-exists.patch b/0002-snapshot-return-error-when-snapshot-exists.patch
new file mode 100644
index 00000000..4a7fcfb3
--- /dev/null
+++ b/0002-snapshot-return-error-when-snapshot-exists.patch
@@ -0,0 +1,25 @@
+From 7cabba07745b388497e8c0fc19b61984167fd474 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Tue, 28 Oct 2014 12:36:17 -0400
+Subject: [PATCH] snapshot: return error when snapshot exists
+
+---
+ src/core/snapshot.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git src/core/snapshot.c src/core/snapshot.c
+index 5eed615..c2678cb 100644
+--- src/core/snapshot.c
++++ src/core/snapshot.c
+@@ -208,7 +208,7 @@ int snapshot_create(Manager *m, const char *name, bool cleanup, sd_bus_error *e,
+ return sd_bus_error_setf(e, SD_BUS_ERROR_INVALID_ARGS, "Unit name %s lacks snapshot suffix.", name);
+
+ if (manager_get_unit(m, name))
+- sd_bus_error_setf(e, BUS_ERROR_UNIT_EXISTS, "Snapshot %s exists already.", name);
++ return sd_bus_error_setf(e, BUS_ERROR_UNIT_EXISTS, "Snapshot %s exists already.", name);
+
+ } else {
+
+--
+1.7.9.2
+
diff --git a/0002-systemctl-obey-state-in-list-unit-files.patch b/0002-systemctl-obey-state-in-list-unit-files.patch
new file mode 100644
index 00000000..aaa1cbf3
--- /dev/null
+++ b/0002-systemctl-obey-state-in-list-unit-files.patch
@@ -0,0 +1,28 @@
+From fec1530e6b5b8d6dc352c7338010357126e84621 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Wed, 29 Oct 2014 22:51:00 -0400
+Subject: [PATCH] systemctl: obey --state in list-unit-files
+
+---
+ src/systemctl/systemctl.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git src/systemctl/systemctl.c src/systemctl/systemctl.c
+index b71040b..8481a9b 100644
+--- src/systemctl/systemctl.c
++++ src/systemctl/systemctl.c
+@@ -1268,6 +1268,11 @@ next:
+ return false;
+ }
+
++ if (!strv_isempty(arg_states)) {
++ if (!strv_find(arg_states, unit_file_state_to_string(u->state)))
++ return false;
++ }
++
+ return true;
+ }
+
+--
+1.7.9.2
+
diff --git a/0002-systemd-try-harder-to-bind-to-notify-socket.patch b/0002-systemd-try-harder-to-bind-to-notify-socket.patch
new file mode 100644
index 00000000..d0277386
--- /dev/null
+++ b/0002-systemd-try-harder-to-bind-to-notify-socket.patch
@@ -0,0 +1,44 @@
+Based on e7bc519620cb7bcdbe2166fc2a446453769d827e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Thu, 16 Oct 2014 19:15:38 -0500
+Subject: [PATCH] systemd: try harder to bind to notify socket
+
+Without the socket open we are going to crash and burn. If for
+whatever reason we fail during deserialization we will fail when
+trying to open the socket. In this case it is better to unlink the old
+socket and maybe lose some messages, than to continue without the
+notification socket.
+
+Of course this situation should not happen, but we should handle
+it as gracefully as possible anyway.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1099299
+---
+ src/core/manager.c | 16 +++++++++++++++-
+ 1 file changed, 15 insertions(+), 1 deletion(-)
+
+--- src/core/manager.c
++++ src/core/manager.c 2014-10-20 13:47:21.035837897 +0000
+@@ -572,7 +572,21 @@ static int manager_setup_notify(Manager
+ r = bind(fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + 1 + strlen(sa.un.sun_path+1));
+ if (r < 0) {
+ log_error("bind(@%s) failed: %m", sa.un.sun_path+1);
+- return -errno;
++ if (errno == EADDRINUSE) {
++ log_notice("Removing %s socket and trying again.", m->notify_socket);
++ r = unlink(m->notify_socket);
++ if (r < 0) {
++ log_error("Failed to remove %s: %m", m->notify_socket);
++ return -EADDRINUSE;
++ }
++
++ r = bind(fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + strlen(sa.un.sun_path));
++ if (r < 0) {
++ log_error("bind(@%s) failed: %m", sa.un.sun_path+1);
++ return -errno;
++ }
++ } else
++ return -errno;
+ }
+
+ r = setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &one, sizeof(one));
diff --git a/0002-time-also-support-infinity-syntax-in-parse_nsec.patch b/0002-time-also-support-infinity-syntax-in-parse_nsec.patch
new file mode 100644
index 00000000..c1f4884c
--- /dev/null
+++ b/0002-time-also-support-infinity-syntax-in-parse_nsec.patch
@@ -0,0 +1,40 @@
+Based on e73c78c27511b03c7abc55aed87896092c0de699 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering
+Date: Fri, 24 Oct 2014 19:07:26 +0200
+Subject: [PATCH] time: also support 'infinity' syntax in parse_nsec()
+
+Let's make parse_usec() and parse_nsec() work similar
+---
+ src/shared/time-util.c | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+--- src/shared/time-util.c
++++ src/shared/time-util.c
+@@ -773,7 +773,7 @@ int parse_nsec(const char *t, nsec_t *nsec) {
+ { "", 1ULL }, /* default is nsec */
+ };
+
+- const char *p;
++ const char *p, *s;
+ nsec_t r = 0;
+ bool something = false;
+
+@@ -781,6 +781,18 @@ int parse_nsec(const char *t, nsec_t *nsec) {
+ assert(nsec);
+
+ p = t;
++
++ p += strspn(p, WHITESPACE);
++ s = startswith(p, "infinity");
++ if (s) {
++ s += strspn(s, WHITESPACE);
++ if (!*s != 0)
++ return -EINVAL;
++
++ *nsec = ((nsec_t) -1);
++ return 0;
++ }
++
+ for (;;) {
+ long long l, z = 0;
+ char *e;
diff --git a/0002-udev-hwdb-New-Entry-for-Dell-XPS12-9Q33-keyboard.patch b/0002-udev-hwdb-New-Entry-for-Dell-XPS12-9Q33-keyboard.patch
new file mode 100644
index 00000000..7fab49e6
--- /dev/null
+++ b/0002-udev-hwdb-New-Entry-for-Dell-XPS12-9Q33-keyboard.patch
@@ -0,0 +1,29 @@
+From 24119cf10c7ed58a8fc0851745149dcc6dd5757f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Stefan=20Br=C3=BCns?=
+Date: Mon, 29 Sep 2014 22:32:10 -0400
+Subject: [PATCH] udev/hwdb: New Entry for Dell XPS12 9Q33 keyboard
+
+https://bugs.freedesktop.org/show_bug.cgi?id=84437
+---
+ hwdb/60-keyboard.hwdb | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git hwdb/60-keyboard.hwdb hwdb/60-keyboard.hwdb
+index 0ffcb83..8a1baa7 100644
+--- hwdb/60-keyboard.hwdb
++++ hwdb/60-keyboard.hwdb
+@@ -243,6 +243,11 @@ keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnPrecision*:pvr*
+ keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnXPS*:pvr*
+ KEYBOARD_KEY_8c=!unknown
+
++# Dell XPS12 9Q33
++keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnXPS12-9Q33*:pvr*
++ KEYBOARD_KEY_88=wlan
++ KEYBOARD_KEY_65=switchvideomode # Screen Rotate
++
+ # Dell Latitude microphone mute
+ keyboard:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*
+ KEYBOARD_KEY_150=f20 # Mic mute toggle, should be micmute
+--
+1.7.9.2
+
diff --git a/0003-bootchart-parse-userinput-with-safe_atoi.patch b/0003-bootchart-parse-userinput-with-safe_atoi.patch
new file mode 100644
index 00000000..16378405
--- /dev/null
+++ b/0003-bootchart-parse-userinput-with-safe_atoi.patch
@@ -0,0 +1,34 @@
+From 9bcf7507fab6e6b022ae3cc7178237e6e0a09e9a Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen
+Date: Fri, 26 Sep 2014 21:41:02 +0200
+Subject: [PATCH] bootchart: parse userinput with safe_atoi
+
+Found by coverity. Fixes: CID#996409
+---
+ src/bootchart/store.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git src/bootchart/store.c src/bootchart/store.c
+index ed683e8..3099ff1 100644
+--- src/bootchart/store.c
++++ src/bootchart/store.c
+@@ -192,12 +192,14 @@ vmstat_next:
+
+ m = buf;
+ while (m) {
++ int r;
++
+ if (sscanf(m, "%s %*s %*s %*s %*s %*s %*s %s %s", key, rt, wt) < 3)
+ goto schedstat_next;
+
+ if (strstr(key, "cpu")) {
+- c = atoi((const char*)(key+3));
+- if (c > MAXCPUS)
++ r = safe_atoi((const char*)(key+3), &c);
++ if (r < 0 || c > MAXCPUS)
+ /* Oops, we only have room for MAXCPUS data */
+ break;
+ sampledata->runtime[c] = atoll(rt);
+--
+1.7.9.2
+
diff --git a/0003-fileio-label-return-error-when-writing-fails.patch b/0003-fileio-label-return-error-when-writing-fails.patch
new file mode 100644
index 00000000..91ea97d9
--- /dev/null
+++ b/0003-fileio-label-return-error-when-writing-fails.patch
@@ -0,0 +1,30 @@
+Based on 754fc0c720eb998b8e47e695c12807ced0ff3602 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Fri, 3 Oct 2014 08:58:40 -0400
+Subject: [PATCH] fileio-label: return error when writing fails
+
+The status of actually writing the file was totally ignored.
+---
+ src/shared/fileio-label.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- src/shared/fileio-label.c
++++ src/shared/fileio-label.c 2014-10-14 14:52:50.883837740 +0000
+@@ -33,7 +33,7 @@ int write_string_file_atomic_label(const
+ if (r < 0)
+ return r;
+
+- write_string_file_atomic(fn, line);
++ r = write_string_file_atomic(fn, line);
+
+ label_context_clear();
+
+@@ -47,7 +47,7 @@ int write_env_file_label(const char *fna
+ if (r < 0)
+ return r;
+
+- write_env_file(fname, l);
++ r = write_env_file(fname, l);
+
+ label_context_clear();
+
diff --git a/0003-journald-add-CAP_MAC_OVERRIDE-in-journald-for-SMACK-.patch b/0003-journald-add-CAP_MAC_OVERRIDE-in-journald-for-SMACK-.patch
new file mode 100644
index 00000000..c88ed60b
--- /dev/null
+++ b/0003-journald-add-CAP_MAC_OVERRIDE-in-journald-for-SMACK-.patch
@@ -0,0 +1,41 @@
+From f2a474aea8f82fa9b695515d4590f4f3398358a7 Mon Sep 17 00:00:00 2001
+From: Juho Son
+Date: Thu, 11 Sep 2014 16:06:38 +0900
+Subject: [PATCH] journald: add CAP_MAC_OVERRIDE in journald for SMACK issue
+
+systemd-journald check the cgroup id to support rate limit option for
+every messages. so journald should be available to access cgroup node in
+each process send messages to journald.
+In system using SMACK, cgroup node in proc is assigned execute label
+as each process's execute label.
+so if journald don't want to denied for every process, journald
+should have all of access rule for all process's label.
+It's too heavy. so we could give special smack label for journald te get
+all accesses's permission.
+'^' label.
+When assign '^' execute smack label to systemd-journald,
+systemd-journald need to add CAP_MAC_OVERRIDE capability to get that smack privilege.
+
+so I want to notice this information and set default capability to
+journald whether system use SMACK or not.
+because that capability affect to only smack enabled kernel
+---
+ units/systemd-journald.service.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git units/systemd-journald.service.in units/systemd-journald.service.in
+index 7013979..4de38fa 100644
+--- units/systemd-journald.service.in
++++ units/systemd-journald.service.in
+@@ -20,7 +20,7 @@ Restart=always
+ RestartSec=0
+ NotifyAccess=all
+ StandardOutput=null
+-CapabilityBoundingSet=CAP_SYS_ADMIN CAP_DAC_OVERRIDE CAP_SYS_PTRACE CAP_SYSLOG CAP_AUDIT_CONTROL CAP_CHOWN CAP_DAC_READ_SEARCH CAP_FOWNER CAP_SETUID CAP_SETGID
++CapabilityBoundingSet=CAP_SYS_ADMIN CAP_DAC_OVERRIDE CAP_SYS_PTRACE CAP_SYSLOG CAP_AUDIT_CONTROL CAP_CHOWN CAP_DAC_READ_SEARCH CAP_FOWNER CAP_SETUID CAP_SETGID CAP_MAC_OVERRIDE
+ WatchdogSec=1min
+
+ # Increase the default a bit in order to allow many simultaneous
+--
+1.7.9.2
+
diff --git a/0003-man-we-don-t-have-Wanted-dependency.patch b/0003-man-we-don-t-have-Wanted-dependency.patch
new file mode 100644
index 00000000..6ab1a897
--- /dev/null
+++ b/0003-man-we-don-t-have-Wanted-dependency.patch
@@ -0,0 +1,29 @@
+From 3e883473a0f36c220fc45ecf61d6878c9ac308b4 Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn
+Date: Wed, 15 Oct 2014 09:28:31 +0200
+Subject: [PATCH] man: we don't have 'Wanted' dependency
+
+---
+ man/systemd.unit.xml | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git man/systemd.unit.xml man/systemd.unit.xml
+index e9395ff..88c9d7f 100644
+--- man/systemd.unit.xml
++++ man/systemd.unit.xml
+@@ -181,10 +181,10 @@
+ foo.service.wants/ may exist. All
+ unit files symlinked from such a directory are
+ implicitly added as dependencies of type
+- Wanted= to the unit. This is useful
++ Wants= to the unit. This is useful
+ to hook units into the start-up of other units,
+ without having to modify their unit files. For details
+- about the semantics of Wanted=, see
++ about the semantics of Wants=, see
+ below. The preferred way to create symlinks in the
+ .wants/ directory of a unit file
+ is with the enable command of the
+--
+1.7.9.2
+
diff --git a/0003-sd-bus-check-return-value-of-vasprintf.patch b/0003-sd-bus-check-return-value-of-vasprintf.patch
new file mode 100644
index 00000000..c908f074
--- /dev/null
+++ b/0003-sd-bus-check-return-value-of-vasprintf.patch
@@ -0,0 +1,35 @@
+From 8bf13eb1e02b9977ae1cd331ae5dc7305a305a09 Mon Sep 17 00:00:00 2001
+From: Daniel Mack
+Date: Tue, 7 Oct 2014 12:10:06 +0200
+Subject: [PATCH] sd-bus: check return value of vasprintf
+
+Check for OOM situations when vasprintf() returns < 0 in bus_error_setfv().
+
+Spotted by coverity.
+---
+ src/libsystemd/sd-bus/bus-error.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git src/libsystemd/sd-bus/bus-error.c src/libsystemd/sd-bus/bus-error.c
+index abdfd73..5ca974a 100644
+--- src/libsystemd/sd-bus/bus-error.c
++++ src/libsystemd/sd-bus/bus-error.c
+@@ -194,8 +194,13 @@ int bus_error_setfv(sd_bus_error *e, const char *name, const char *format, va_li
+ return -ENOMEM;
+ }
+
+- if (format)
+- vasprintf((char**) &e->message, format, ap);
++ if (format) {
++ int r;
++
++ r = vasprintf((char**) &e->message, format, ap);
++ if (r < 0)
++ return -ENOMEM;
++ }
+
+ e->_need_free = 1;
+
+--
+1.7.9.2
+
diff --git a/0003-sd-bus-refuse-properties-that-claim-to-be-both-writa.patch b/0003-sd-bus-refuse-properties-that-claim-to-be-both-writa.patch
new file mode 100644
index 00000000..13b0da4b
--- /dev/null
+++ b/0003-sd-bus-refuse-properties-that-claim-to-be-both-writa.patch
@@ -0,0 +1,29 @@
+From 9b772efb41c2d9f743ba5e96804bdf89b12630d8 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering
+Date: Wed, 19 Nov 2014 20:52:47 +0100
+Subject: [PATCH] sd-bus: refuse properties that claim to be both writable and
+ constant at the same time
+
+---
+ src/libsystemd/sd-bus/bus-objects.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git src/libsystemd/sd-bus/bus-objects.c src/libsystemd/sd-bus/bus-objects.c
+index 0ab1119..7981d65 100644
+--- src/libsystemd/sd-bus/bus-objects.c
++++ src/libsystemd/sd-bus/bus-objects.c
+@@ -1682,6 +1682,11 @@ static int add_object_vtable_internal(
+ goto fail;
+ }
+
++ if (v->flags & SD_BUS_VTABLE_PROPERTY_CONST) {
++ r = -EINVAL;
++ goto fail;
++ }
++
+ /* Fall through */
+
+ case _SD_BUS_VTABLE_PROPERTY: {
+--
+1.7.9.2
+
diff --git a/0003-shared-install-avoid-prematurely-rejecting-missing-u.patch b/0003-shared-install-avoid-prematurely-rejecting-missing-u.patch
new file mode 100644
index 00000000..7aa3506a
--- /dev/null
+++ b/0003-shared-install-avoid-prematurely-rejecting-missing-u.patch
@@ -0,0 +1,39 @@
+From 0ffce503cd6e5a5ff5ba5cd1cc23684cfb8bb9e3 Mon Sep 17 00:00:00 2001
+From: Dave Reisner
+Date: Thu, 30 Oct 2014 20:12:05 -0400
+Subject: [PATCH] shared/install: avoid prematurely rejecting "missing" units
+
+f7101b7368df copied some logic to prevent enabling masked units, but
+also added a check which causes attempts to enable templated units to
+fail. Since we know the logic beyond this check will properly handle
+units which truly do not exist, we can rely on the unit file state
+comparison to suffice for expressing the intent of f7101b7368df.
+
+ref: https://bugs.archlinux.org/task/42616
+---
+ src/shared/install.c | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
+
+diff --git src/shared/install.c src/shared/install.c
+index 035b44c..cab93e8 100644
+--- src/shared/install.c
++++ src/shared/install.c
+@@ -1620,12 +1620,10 @@ int unit_file_enable(
+ STRV_FOREACH(i, files) {
+ UnitFileState state;
+
++ /* We only want to know if this unit is masked, so we ignore
++ * errors from unit_file_get_state, deferring other checks.
++ * This allows templated units to be enabled on the fly. */
+ state = unit_file_get_state(scope, root_dir, *i);
+- if (state < 0) {
+- log_error("Failed to get unit file state for %s: %s", *i, strerror(-state));
+- return state;
+- }
+-
+ if (state == UNIT_FILE_MASKED || state == UNIT_FILE_MASKED_RUNTIME) {
+ log_error("Failed to enable unit: Unit %s is masked", *i);
+ return -ENOTSUP;
+--
+1.7.9.2
+
diff --git a/0003-time-earlier-exit-from-format_timestamp_relative-on-.patch b/0003-time-earlier-exit-from-format_timestamp_relative-on-.patch
new file mode 100644
index 00000000..17cd7d1a
--- /dev/null
+++ b/0003-time-earlier-exit-from-format_timestamp_relative-on-.patch
@@ -0,0 +1,25 @@
+Based on 65de0395ffe1cfb0f9af86504e8588fb31bb0fbc Mon Sep 17 00:00:00 2001
+From: Lennart Poettering
+Date: Fri, 24 Oct 2014 19:08:22 +0200
+Subject: [PATCH] time: earlier exit from format_timestamp_relative() on
+ special times
+
+---
+ src/shared/time-util.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- src/shared/time-util.c
++++ src/shared/time-util.c 2014-10-29 14:07:28.479838096 +0000
+@@ -194,11 +194,10 @@ char *format_timestamp_relative(char *bu
+ const char *s;
+ usec_t n, d;
+
+- n = now(CLOCK_REALTIME);
+-
+ if (t <= 0 || (t == (usec_t) -1))
+ return NULL;
+
++ n = now(CLOCK_REALTIME);
+ if (n > t) {
+ d = n - t;
+ s = "ago";
diff --git a/0003-utf8-when-looking-at-the-next-unichar-honour-the-siz.patch b/0003-utf8-when-looking-at-the-next-unichar-honour-the-siz.patch
new file mode 100644
index 00000000..bc69be20
--- /dev/null
+++ b/0003-utf8-when-looking-at-the-next-unichar-honour-the-siz.patch
@@ -0,0 +1,29 @@
+Based on 144b3d9e093dd9310cd9590bec039dc43a7e2ad6 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering
+Date: Fri, 7 Nov 2014 16:34:00 +0100
+Subject: [PATCH] utf8: when looking at the next unichar, honour the size
+ parameter, in utf8_is_printable_newline()
+
+---
+ src/shared/utf8.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+--- src/shared/utf8.c
++++ src/shared/utf8.c 2014-11-10 14:20:28.094539264 +0000
+@@ -143,9 +143,14 @@ bool utf8_is_printable_newline(const cha
+
+ for (p = (const uint8_t*) str; length;) {
+ int encoded_len = utf8_encoded_valid_unichar((const char *)p);
+- int val = utf8_encoded_to_unichar((const char*)p);
++ int val;
+
+- if (encoded_len < 0 || val < 0 || is_unicode_control(val) ||
++ if (encoded_len < 0 ||
++ (size_t) encoded_len > length)
++ return false;
++
++ val = utf8_encoded_to_unichar((const char*)p);
++ if (val < 0 || is_unicode_control(val) ||
+ (!newline && val == '\n'))
+ return false;
+
diff --git a/0004-Raise-level-of-Found-dependency.-lines.patch b/0004-Raise-level-of-Found-dependency.-lines.patch
new file mode 100644
index 00000000..3ae2e49e
--- /dev/null
+++ b/0004-Raise-level-of-Found-dependency.-lines.patch
@@ -0,0 +1,42 @@
+From 14fe721b5f6d8457cc8737fa75f2ed79e7fa534b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Sun, 2 Nov 2014 12:10:42 -0500
+Subject: [PATCH] Raise level of 'Found dependency...' lines
+
+This way they always show up together with 'Found ordering cycle...'.
+Ordering cycles are a serious error and a major pain to debug. If
+quiet is enabled, only the first and the last line of output are
+shown:
+
+systemd[1]: Found ordering cycle on basic.target/start
+systemd[1]: Breaking ordering cycle by deleting job timers.target/start
+systemd[1]: Job timers.target/start deleted to break ordering cycle starting with basic.target/start
+
+which isn't particularly enlightening. So just show the whole message
+at the same level.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1158206
+---
+ src/core/transaction.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git src/core/transaction.c src/core/transaction.c
+index 488cb86..bbaa6da 100644
+--- src/core/transaction.c
++++ src/core/transaction.c
+@@ -376,9 +376,9 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi
+ for (k = from; k; k = ((k->generation == generation && k->marker != k) ? k->marker : NULL)) {
+
+ /* logging for j not k here here to provide consistent narrative */
+- log_info_unit(j->unit->id,
+- "Found dependency on %s/%s",
+- k->unit->id, job_type_to_string(k->type));
++ log_warning_unit(j->unit->id,
++ "Found dependency on %s/%s",
++ k->unit->id, job_type_to_string(k->type));
+
+ if (!delete && hashmap_get(tr->jobs, k->unit) &&
+ !unit_matters_to_anchor(k->unit, k)) {
+--
+1.7.9.2
+
diff --git a/0004-bootchart-check-return-of-strftime.patch b/0004-bootchart-check-return-of-strftime.patch
new file mode 100644
index 00000000..a629c9e9
--- /dev/null
+++ b/0004-bootchart-check-return-of-strftime.patch
@@ -0,0 +1,63 @@
+From e931d3f4241231e4102eda06adaf7cbfd68c6a5d Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen
+Date: Sat, 27 Sep 2014 22:25:07 +0200
+Subject: [PATCH] bootchart: check return of strftime
+
+Found by coverity. Fixes: CID#996314 and #996312
+---
+ src/bootchart/bootchart.c | 8 ++++++--
+ src/bootchart/svg.c | 5 +++--
+ 2 files changed, 9 insertions(+), 4 deletions(-)
+
+diff --git src/bootchart/bootchart.c src/bootchart/bootchart.c
+index 8ef5ad1..366a5ab 100644
+--- src/bootchart/bootchart.c
++++ src/bootchart/bootchart.c
+@@ -389,7 +389,9 @@ int main(int argc, char *argv[]) {
+
+ if (!of && (access(arg_output_path, R_OK|W_OK|X_OK) == 0)) {
+ t = time(NULL);
+- strftime(datestr, sizeof(datestr), "%Y%m%d-%H%M", localtime(&t));
++ r = strftime(datestr, sizeof(datestr), "%Y%m%d-%H%M", localtime(&t));
++ assert_se(r > 0);
++
+ snprintf(output_file, PATH_MAX, "%s/bootchart-%s.svg", arg_output_path, datestr);
+ of = fopen(output_file, "we");
+ }
+@@ -457,7 +459,9 @@ int main(int argc, char *argv[]) {
+
+ if (!of) {
+ t = time(NULL);
+- strftime(datestr, sizeof(datestr), "%Y%m%d-%H%M", localtime(&t));
++ r = strftime(datestr, sizeof(datestr), "%Y%m%d-%H%M", localtime(&t));
++ assert_se(r > 0);
++
+ snprintf(output_file, PATH_MAX, "%s/bootchart-%s.svg", arg_output_path, datestr);
+ of = fopen(output_file, "we");
+ }
+diff --git src/bootchart/svg.c src/bootchart/svg.c
+index 135883f..faf377e 100644
+--- src/bootchart/svg.c
++++ src/bootchart/svg.c
+@@ -162,7 +162,7 @@ static void svg_title(const char *build) {
+ char *c;
+ FILE *f;
+ time_t t;
+- int fd;
++ int fd, r;
+ struct utsname uts;
+
+ /* grab /proc/cmdline */
+@@ -196,7 +196,8 @@ static void svg_title(const char *build) {
+
+ /* date */
+ t = time(NULL);
+- strftime(date, sizeof(date), "%a, %d %b %Y %H:%M:%S %z", localtime(&t));
++ r = strftime(date, sizeof(date), "%a, %d %b %Y %H:%M:%S %z", localtime(&t));
++ assert_se(r > 0);
+
+ /* CPU type */
+ fd = openat(procfd, "cpuinfo", O_RDONLY);
+--
+1.7.9.2
+
diff --git a/0004-core-map-the-rescue-argument-to-rescue.target.patch b/0004-core-map-the-rescue-argument-to-rescue.target.patch
new file mode 100644
index 00000000..6b639305
--- /dev/null
+++ b/0004-core-map-the-rescue-argument-to-rescue.target.patch
@@ -0,0 +1,27 @@
+From 5329ab10ffaf5b4a3fd6ebd9380b1ec09d05cfc8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Mantas=20Mikul=C4=97nas?=
+Date: Tue, 7 Oct 2014 14:55:21 +0300
+Subject: [PATCH] core: map the 'rescue' argument to rescue.target
+
+Even though the 'emergency' and 'single' aliases come from sysvinit, the
+lack of 'rescue' is still quite confusing (caught me by surprise for the
+9th time yet) and inconsistent with `systemctl rescue` as well.
+---
+ src/core/main.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git src/core/main.c src/core/main.c
+index 1a62e04..44373cc 100644
+--- src/core/main.c
++++ src/core/main.c
+@@ -272,6 +272,7 @@ static int parse_proc_cmdline_item(const char *key, const char *value) {
+ static const char * const rlmap[] = {
+ "emergency", SPECIAL_EMERGENCY_TARGET,
+ "-b", SPECIAL_EMERGENCY_TARGET,
++ "rescue", SPECIAL_RESCUE_TARGET,
+ "single", SPECIAL_RESCUE_TARGET,
+ "-s", SPECIAL_RESCUE_TARGET,
+ "s", SPECIAL_RESCUE_TARGET,
+--
+1.7.9.2
+
diff --git a/0004-journal-do-server_vacuum-for-sigusr1.patch b/0004-journal-do-server_vacuum-for-sigusr1.patch
new file mode 100644
index 00000000..530a5397
--- /dev/null
+++ b/0004-journal-do-server_vacuum-for-sigusr1.patch
@@ -0,0 +1,30 @@
+From 3bfd4e0c6341b0ef946d2198f089743fa99e0a97 Mon Sep 17 00:00:00 2001
+From: WaLyong Cho
+Date: Thu, 28 Aug 2014 21:33:03 +0900
+Subject: [PATCH] journal: do server_vacuum for sigusr1
+
+runtime journal is migrated to system journal when only
+"/run/systemd/journal/flushed" exist. It's ok but according to this
+the system journal directory size(max use) can be over the config. If
+journal is not rotated during some time the journal directory can be
+remained as over the config(or default) size. To avoid, do
+server_vacuum just after the system journal migration from runtime.
+---
+ src/journal/journald-server.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git src/journal/journald-server.c src/journal/journald-server.c
+index 52111f7..bf9cfcc 100644
+--- src/journal/journald-server.c
++++ src/journal/journald-server.c
+@@ -1224,6 +1224,7 @@ static int dispatch_sigusr1(sd_event_source *es, const struct signalfd_siginfo *
+ touch("/run/systemd/journal/flushed");
+ server_flush_to_var(s);
+ server_sync(s);
++ server_vacuum(s);
+
+ return 0;
+ }
+--
+1.7.9.2
+
diff --git a/0004-sd-bus-if-we-don-t-manage-to-properly-allocate-the-e.patch b/0004-sd-bus-if-we-don-t-manage-to-properly-allocate-the-e.patch
new file mode 100644
index 00000000..9ab7a2da
--- /dev/null
+++ b/0004-sd-bus-if-we-don-t-manage-to-properly-allocate-the-e.patch
@@ -0,0 +1,43 @@
+From 455cd8b137b8ef45d04889f2d967c562a097f1e6 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering
+Date: Fri, 24 Oct 2014 19:24:53 +0200
+Subject: [PATCH] sd-bus: if we don't manage to properly allocate the error
+ message for an sd_bus_error, just go on
+
+sd_bus_error_setfv() must initialize the sd_bus_error value to some
+sensible value and then return a good errno code matching that. If it
+cannot work at all it should set the error statically to the OOM error.
+But if it can work half-way (i.e. initialize the name, but not the
+message) it should do so and still return the correct errno number for
+it.
+
+This effectively reverts 8bf13eb1e02b9977ae1cd331ae5dc7305a305a09
+---
+ src/libsystemd/sd-bus/bus-error.c | 11 ++++-------
+ 1 file changed, 4 insertions(+), 7 deletions(-)
+
+diff --git src/libsystemd/sd-bus/bus-error.c src/libsystemd/sd-bus/bus-error.c
+index 5ca974a..af83c12 100644
+--- src/libsystemd/sd-bus/bus-error.c
++++ src/libsystemd/sd-bus/bus-error.c
+@@ -194,13 +194,10 @@ int bus_error_setfv(sd_bus_error *e, const char *name, const char *format, va_li
+ return -ENOMEM;
+ }
+
+- if (format) {
+- int r;
+-
+- r = vasprintf((char**) &e->message, format, ap);
+- if (r < 0)
+- return -ENOMEM;
+- }
++ /* Of we hit OOM on formatting the pretty message, we ignore
++ * this, since we at least managed to write the error name */
++ if (format)
++ (void) vasprintf((char**) &e->message, format, ap);
+
+ e->_need_free = 1;
+
+--
+1.7.9.2
+
diff --git a/0004-sd-event-check-the-value-of-received-signal.patch b/0004-sd-event-check-the-value-of-received-signal.patch
new file mode 100644
index 00000000..9c4662a9
--- /dev/null
+++ b/0004-sd-event-check-the-value-of-received-signal.patch
@@ -0,0 +1,46 @@
+From 7057bd993110c1eff0cd3a8776902ca66417634e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Fri, 3 Oct 2014 18:49:45 -0400
+Subject: [PATCH] sd-event: check the value of received signal
+
+Appease coverity report #1237775.
+
+Also rename ss to n, to make it visually different from ss.
+---
+ src/libsystemd/sd-event/sd-event.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git src/libsystemd/sd-event/sd-event.c src/libsystemd/sd-event/sd-event.c
+index b56182d..4c67ee8 100644
+--- src/libsystemd/sd-event/sd-event.c
++++ src/libsystemd/sd-event/sd-event.c
+@@ -1973,20 +1973,22 @@ static int process_signal(sd_event *e, uint32_t events) {
+
+ for (;;) {
+ struct signalfd_siginfo si;
+- ssize_t ss;
++ ssize_t n;
+ sd_event_source *s = NULL;
+
+- ss = read(e->signal_fd, &si, sizeof(si));
+- if (ss < 0) {
++ n = read(e->signal_fd, &si, sizeof(si));
++ if (n < 0) {
+ if (errno == EAGAIN || errno == EINTR)
+ return read_one;
+
+ return -errno;
+ }
+
+- if (_unlikely_(ss != sizeof(si)))
++ if (_unlikely_(n != sizeof(si)))
+ return -EIO;
+
++ assert(si.ssi_signo < _NSIG);
++
+ read_one = true;
+
+ if (si.ssi_signo == SIGCHLD) {
+--
+1.7.9.2
+
diff --git a/0004-selinux-fix-potential-double-free-crash-in-child-pro.patch b/0004-selinux-fix-potential-double-free-crash-in-child-pro.patch
new file mode 100644
index 00000000..ba22748a
--- /dev/null
+++ b/0004-selinux-fix-potential-double-free-crash-in-child-pro.patch
@@ -0,0 +1,38 @@
+From 5e78424f4a27c07be50e246308035c877f204038 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar
+Date: Mon, 13 Oct 2014 15:25:09 +0200
+Subject: [PATCH] selinux: fix potential double free crash in child process
+
+Before returning from function we should reset ret to NULL, thus cleanup
+function is nop.
+
+Also context_str() returns pointer to a string containing context but not a
+copy, hence we must make copy it explicitly.
+---
+ src/shared/label.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git src/shared/label.c src/shared/label.c
+index b6af38d..69d4616 100644
+--- src/shared/label.c
++++ src/shared/label.c
+@@ -334,7 +334,7 @@ int label_get_child_mls_label(int socket_fd, const char *exe, char **label) {
+ }
+
+ freecon(mycon);
+- mycon = context_str(bcon);
++ mycon = strdup(context_str(bcon));
+ if (!mycon) {
+ r = -errno;
+ goto out;
+@@ -348,6 +348,7 @@ int label_get_child_mls_label(int socket_fd, const char *exe, char **label) {
+ }
+
+ *label = ret;
++ ret = NULL;
+ r = 0;
+
+ out:
+--
+1.7.9.2
+
diff --git a/0005-bootchart-Do-not-try-to-access-data-for-non-existing.patch b/0005-bootchart-Do-not-try-to-access-data-for-non-existing.patch
new file mode 100644
index 00000000..119d1108
--- /dev/null
+++ b/0005-bootchart-Do-not-try-to-access-data-for-non-existing.patch
@@ -0,0 +1,29 @@
+From c119700c06b248b1c2a082b40b1a346f58d89da0 Mon Sep 17 00:00:00 2001
+From: Philippe De Swert
+Date: Sun, 28 Sep 2014 18:12:51 +0300
+Subject: [PATCH] bootchart: Do not try to access data for non-existing CPU's
+
+Cpu's are assigned normally, so starting at 0, so the MAX_CPU index will
+always be one smaller than the actual number.
+
+Found with Coverity.
+---
+ src/bootchart/store.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git src/bootchart/store.c src/bootchart/store.c
+index 3099ff1..9ea1b27 100644
+--- src/bootchart/store.c
++++ src/bootchart/store.c
+@@ -199,7 +199,7 @@ vmstat_next:
+
+ if (strstr(key, "cpu")) {
+ r = safe_atoi((const char*)(key+3), &c);
+- if (r < 0 || c > MAXCPUS)
++ if (r < 0 || c > MAXCPUS -1)
+ /* Oops, we only have room for MAXCPUS data */
+ break;
+ sampledata->runtime[c] = atoll(rt);
+--
+1.7.9.2
+
diff --git a/0005-cryptsetup-fix-an-OOM-check.patch b/0005-cryptsetup-fix-an-OOM-check.patch
new file mode 100644
index 00000000..23b39bb5
--- /dev/null
+++ b/0005-cryptsetup-fix-an-OOM-check.patch
@@ -0,0 +1,25 @@
+From 0e2f14014c65b4d8b30146e414579154cfa932da Mon Sep 17 00:00:00 2001
+From: Lennart Poettering
+Date: Thu, 23 Oct 2014 00:30:04 +0200
+Subject: [PATCH] cryptsetup: fix an OOM check
+
+---
+ src/cryptsetup/cryptsetup-generator.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git src/cryptsetup/cryptsetup-generator.c src/cryptsetup/cryptsetup-generator.c
+index 137b787..c7f30f6 100644
+--- src/cryptsetup/cryptsetup-generator.c
++++ src/cryptsetup/cryptsetup-generator.c
+@@ -387,7 +387,7 @@ int main(int argc, char *argv[]) {
+ if (k == 2 && streq(proc_uuid, device + 5)) {
+ free(options);
+ options = strdup(p);
+- if (!proc_options) {
++ if (!options) {
+ log_oom();
+ goto cleanup;
+ }
+--
+1.7.9.2
+
diff --git a/0005-journalctl-correct-help-text-for-until.patch b/0005-journalctl-correct-help-text-for-until.patch
new file mode 100644
index 00000000..77563faf
--- /dev/null
+++ b/0005-journalctl-correct-help-text-for-until.patch
@@ -0,0 +1,21 @@
+Based on 7558251eef610e71595a0aa48952479906cb899a Mon Sep 17 00:00:00 2001
+From: Santiago Vila
+Date: Sat, 25 Oct 2014 10:40:30 -0400
+Subject: [PATCH] journalctl: correct help text for --until
+
+http://bugs.debian.org/766598
+---
+ src/journal/journalctl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- src/journal/journalctl.c
++++ src/journal/journalctl.c 2014-10-29 14:10:18.863838313 +0000
+@@ -171,7 +171,7 @@ static int help(void) {
+ " --user Show only the user journal for the current user\n"
+ " -M --machine=CONTAINER Operate on local container\n"
+ " --since=DATE Start showing entries on or newer than the specified date\n"
+- " --until=DATE Stop showing entries on or older than the specified date\n"
++ " --until=DATE Stop showing entries on or newer than the specified date\n"
+ " -c --cursor=CURSOR Start showing entries from the specified cursor\n"
+ " --after-cursor=CURSOR Start showing entries from after the specified cursor\n"
+ " --show-cursor Print the cursor after all the entries\n"
diff --git a/0005-sd-id128-do-stricter-checking-of-random-boot-id.patch b/0005-sd-id128-do-stricter-checking-of-random-boot-id.patch
new file mode 100644
index 00000000..3c3d9e50
--- /dev/null
+++ b/0005-sd-id128-do-stricter-checking-of-random-boot-id.patch
@@ -0,0 +1,37 @@
+From cef3566998fcae6936d781e678c309950a8a5787 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Fri, 3 Oct 2014 20:57:30 -0400
+Subject: [PATCH] sd-id128: do stricter checking of random boot id
+
+If we are bothering to check whether the kernel is not feeding us
+bad data, we might as well do it properly.
+
+CID #1237692.
+---
+ src/libsystemd/sd-id128/sd-id128.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git src/libsystemd/sd-id128/sd-id128.c src/libsystemd/sd-id128/sd-id128.c
+index a1e44e6..233ffa0 100644
+--- src/libsystemd/sd-id128/sd-id128.c
++++ src/libsystemd/sd-id128/sd-id128.c
+@@ -183,11 +183,14 @@ _public_ int sd_id128_get_boot(sd_id128_t *ret) {
+ for (j = 0, p = buf; j < 16; j++) {
+ int a, b;
+
+- if (p >= buf + k)
++ if (p >= buf + k - 1)
+ return -EIO;
+
+- if (*p == '-')
++ if (*p == '-') {
+ p++;
++ if (p >= buf + k - 1)
++ return -EIO;
++ }
+
+ a = unhexchar(p[0]);
+ b = unhexchar(p[1]);
+--
+1.7.9.2
+
diff --git a/0005-units-order-sd-journal-flush-after-sd-remount-fs.patch b/0005-units-order-sd-journal-flush-after-sd-remount-fs.patch
new file mode 100644
index 00000000..875c905e
--- /dev/null
+++ b/0005-units-order-sd-journal-flush-after-sd-remount-fs.patch
@@ -0,0 +1,38 @@
+Based on 1f1926aa5e836caa3bd6df43704aecd606135103 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Sun, 2 Nov 2014 21:45:42 -0500
+Subject: [PATCH] units: order sd-journal-flush after sd-remount-fs
+
+Otherwise we could attempt to flush the journal while /var/log/ was
+still ro, and silently skip journal flushing.
+
+The way that errors in flushing are handled should still be changed to
+be more transparent and robust.
+
+Based on 919699ec301ea507edce4a619141ed22e789ac0d Mon Sep 17 00:00:00 2001
+From: Lennart Poettering
+Date: Fri, 31 Oct 2014 16:22:36 +0100
+Subject: [PATCH] units: don't order journal flushing afte remote-fs.target
+
+Instead, only depend on the actual file systems we need.
+
+This should solve dep loops on setups where remote-fs.target is moved
+into late boot.
+---
+ units/systemd-journal-flush.service.in | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- units/systemd-journal-flush.service.in
++++ units/systemd-journal-flush.service.in 2014-11-10 11:46:22.885518923 +0000
+@@ -10,8 +10,9 @@ Description=Trigger Flushing of Journal
+ Documentation=man:systemd-journald.service(8) man:journald.conf(5)
+ DefaultDependencies=no
+ Requires=systemd-journald.service
+-After=systemd-journald.service local-fs.target remote-fs.target
+-Before=systemd-user-sessions.service
++After=systemd-journald.service local-fs.target
++After=systemd-remount-fs.service
++Before=systemd-user-sessions.service systemd-tmpfiles-setup.service
+
+ [Service]
+ ExecStart=@rootbindir@/systemctl kill --kill-who=main --signal=SIGUSR1 systemd-journald.service
diff --git a/0005-util-avoid-double-close-of-fd.patch b/0005-util-avoid-double-close-of-fd.patch
new file mode 100644
index 00000000..e1b5dacc
--- /dev/null
+++ b/0005-util-avoid-double-close-of-fd.patch
@@ -0,0 +1,28 @@
+Based on 6f53e671aa7539cab02c9f739d84d28a343ca5bc Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen
+Date: Wed, 8 Oct 2014 23:57:32 +0200
+Subject: [PATCH] util: avoid double close of fd
+
+We could end with a double close if we close the fd loop and flush_fd
+fails. That would make us goto fail and there we close the fd once
+again. This patch sets the fd to the return value for safe_close: -1
+A fd with negative value will be ignored by the next call to
+safe_close.
+
+CID#996223
+---
+ src/shared/util.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- src/shared/util.c
++++ src/shared/util.c 2014-10-14 15:42:22.515839157 +0000
+@@ -1969,7 +1969,8 @@ int acquire_terminal(
+ * ended our handle will be dead. It's important that
+ * we do this after sleeping, so that we don't enter
+ * an endless loop. */
+- close_nointr_nofail(fd);
++ if (fd >= 0) close_nointr_nofail(fd);
++ fd = -1;
+ }
+
+ if (notify >= 0)
diff --git a/0006-calendarspec-fix-typo-in-annually.patch b/0006-calendarspec-fix-typo-in-annually.patch
new file mode 100644
index 00000000..7e695966
--- /dev/null
+++ b/0006-calendarspec-fix-typo-in-annually.patch
@@ -0,0 +1,27 @@
+From e90efc70900f8e69cfbafd9e9508bdeb4d40dad7 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Sat, 25 Oct 2014 11:59:36 -0400
+Subject: [PATCH] calendarspec: fix typo in "annually"
+
+https://bugs.freedesktop.org/show_bug.cgi?id=85447
+---
+ src/shared/calendarspec.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git src/shared/calendarspec.c src/shared/calendarspec.c
+index 4ac74ab..64d0dec 100644
+--- src/shared/calendarspec.c
++++ src/shared/calendarspec.c
+@@ -688,7 +688,8 @@ int calendar_spec_from_string(const char *p, CalendarSpec **spec) {
+ if (r < 0)
+ goto fail;
+
+- } else if (strcaseeq(p, "anually") || strcaseeq(p, "yearly")) {
++ } else if (strcaseeq(p, "annually") || strcaseeq(p, "yearly")
++ || strcaseeq(p, "anually") /* backwards compatibility */ ) {
+ r = const_chain(1, &c->month);
+ if (r < 0)
+ goto fail;
+--
+1.7.9.2
+
diff --git a/0006-journald-fix-minor-memory-leak.patch b/0006-journald-fix-minor-memory-leak.patch
new file mode 100644
index 00000000..72d2ab39
--- /dev/null
+++ b/0006-journald-fix-minor-memory-leak.patch
@@ -0,0 +1,24 @@
+From 99d0966e75a984bed4f117c888ecc93e16e7b7b6 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering
+Date: Mon, 3 Nov 2014 21:11:16 +0100
+Subject: [PATCH] journald: fix minor memory leak
+
+---
+ src/journal/journald-server.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git src/journal/journald-server.c src/journal/journald-server.c
+index e062427..cf6bbcc 100644
+--- src/journal/journald-server.c
++++ src/journal/journald-server.c
+@@ -1690,6 +1690,7 @@ void server_done(Server *s) {
+ free(s->buffer);
+ free(s->tty_path);
+ free(s->cgroup_root);
++ free(s->hostname_field);
+
+ if (s->mmap)
+ mmap_cache_unref(s->mmap);
+--
+1.7.9.2
+
diff --git a/0007-journald-also-check-journal-file-size-to-deduce-if-i.patch b/0007-journald-also-check-journal-file-size-to-deduce-if-i.patch
new file mode 100644
index 00000000..f2409242
--- /dev/null
+++ b/0007-journald-also-check-journal-file-size-to-deduce-if-i.patch
@@ -0,0 +1,55 @@
+From 332076b45b8a78f018ade2dfdc7e4279a56d49cc Mon Sep 17 00:00:00 2001
+From: Lennart Poettering
+Date: Mon, 3 Nov 2014 23:10:21 +0100
+Subject: [PATCH] journald: also check journal file size to deduce if it is
+ empty
+
+---
+ src/journal/journal-vacuum.c | 22 +++++++++++++++-------
+ 1 file changed, 15 insertions(+), 7 deletions(-)
+
+diff --git src/journal/journal-vacuum.c src/journal/journal-vacuum.c
+index dbf5d22..d141fe0 100644
+--- src/journal/journal-vacuum.c
++++ src/journal/journal-vacuum.c
+@@ -121,22 +121,30 @@ static void patch_realtime(
+ }
+
+ static int journal_file_empty(int dir_fd, const char *name) {
+- int r;
+- le64_t n_entries;
+ _cleanup_close_ int fd;
++ struct stat st;
++ le64_t n_entries;
++ ssize_t n;
+
+ fd = openat(dir_fd, name, O_RDONLY|O_CLOEXEC|O_NOFOLLOW|O_NONBLOCK);
+ if (fd < 0)
+ return -errno;
+
+- if (lseek(fd, offsetof(Header, n_entries), SEEK_SET) < 0)
++ if (fstat(fd, &st) < 0)
+ return -errno;
+
+- r = read(fd, &n_entries, sizeof(n_entries));
+- if (r != sizeof(n_entries))
+- return r == 0 ? -EINVAL : -errno;
++ /* If an offline file doesn't even have a header we consider it empty */
++ if (st.st_size < (off_t) sizeof(Header))
++ return 1;
++
++ /* If the number of entries is empty, we consider it empty, too */
++ n = pread(fd, &n_entries, sizeof(n_entries), offsetof(Header, n_entries));
++ if (n < 0)
++ return -errno;
++ if (n != sizeof(n_entries))
++ return -EIO;
+
+- return le64toh(n_entries) == 0;
++ return le64toh(n_entries) <= 0;
+ }
+
+ int journal_directory_vacuum(
+--
+1.7.9.2
+
diff --git a/0007-systemctl-do-not-ignore-errors-in-symlink-removal.patch b/0007-systemctl-do-not-ignore-errors-in-symlink-removal.patch
new file mode 100644
index 00000000..a161a1c4
--- /dev/null
+++ b/0007-systemctl-do-not-ignore-errors-in-symlink-removal.patch
@@ -0,0 +1,26 @@
+From e95c98378ac2d34df864de4a9b785fd17defb77b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Sat, 25 Oct 2014 15:15:28 -0400
+Subject: [PATCH] systemctl: do not ignore errors in symlink removal
+
+On an ro fs, systemctl disable ... would fail silently.
+---
+ src/shared/install.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git src/shared/install.c src/shared/install.c
+index 0d7c30e..035b44c 100644
+--- src/shared/install.c
++++ src/shared/install.c
+@@ -1679,7 +1679,7 @@ int unit_file_disable(
+ r = install_context_mark_for_removal(&c, &paths, &remove_symlinks_to, config_path, root_dir);
+
+ q = remove_marked_symlinks(remove_symlinks_to, config_path, changes, n_changes, files);
+- if (r == 0)
++ if (r >= 0)
+ r = q;
+
+ return r;
+--
+1.7.9.2
+
diff --git a/0008-journald-fix-memory-leak-on-error-path.patch b/0008-journald-fix-memory-leak-on-error-path.patch
new file mode 100644
index 00000000..6f67860c
--- /dev/null
+++ b/0008-journald-fix-memory-leak-on-error-path.patch
@@ -0,0 +1,29 @@
+From 26d8ff04914a5208d029e899682cd314b7714bf0 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering
+Date: Mon, 3 Nov 2014 23:10:34 +0100
+Subject: [PATCH] journald: fix memory leak on error path
+
+---
+ src/journal/journal-vacuum.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git src/journal/journal-vacuum.c src/journal/journal-vacuum.c
+index d141fe0..80723c4 100644
+--- src/journal/journal-vacuum.c
++++ src/journal/journal-vacuum.c
+@@ -283,7 +283,11 @@ int journal_directory_vacuum(
+
+ patch_realtime(directory, p, &st, &realtime);
+
+- GREEDY_REALLOC(list, n_allocated, n_list + 1);
++ if (!GREEDY_REALLOC(list, n_allocated, n_list + 1)) {
++ free(p);
++ r = -ENOMEM;
++ goto finish;
++ }
+
+ list[n_list].filename = p;
+ list[n_list].usage = 512UL * (uint64_t) st.st_blocks;
+--
+1.7.9.2
+
diff --git a/0008-util-introduce-sethostname_idempotent.patch b/0008-util-introduce-sethostname_idempotent.patch
new file mode 100644
index 00000000..5b42ce14
--- /dev/null
+++ b/0008-util-introduce-sethostname_idempotent.patch
@@ -0,0 +1,85 @@
+Based on 605f81a8968b2df8a28cca2cf11db99ab948a2af Mon Sep 17 00:00:00 2001
+From: Michal Sekletar
+Date: Tue, 21 Oct 2014 18:17:54 +0200
+Subject: [PATCH] util: introduce sethostname_idempotent
+
+Function queries system hostname and applies changes only when necessary. Also,
+migrate all client of sethostname to sethostname_idempotent while at it.
+---
+ src/core/hostname-setup.c | 2 +-
+ src/hostname/hostnamed.c | 2 +-
+ src/nspawn/nspawn.c | 2 +-
+ src/shared/util.c | 20 ++++++++++++++++++++
+ src/shared/util.h | 2 ++
+ 5 files changed, 25 insertions(+), 3 deletions(-)
+
+--- src/core/hostname-setup.c
++++ src/core/hostname-setup.c 2014-10-29 00:00:00.000000000 +0000
+@@ -99,7 +99,7 @@ int hostname_setup(void) {
+ hn = "localhost";
+ }
+
+- if (sethostname(hn, strlen(hn)) < 0) {
++ if (sethostname_idempotent(hn) < 0) {
+ log_warning("Failed to set hostname to <%s>: %m", hn);
+ return -errno;
+ }
+--- src/hostname/hostnamed.c
++++ src/hostname/hostnamed.c 2014-10-29 14:13:26.124337751 +0000
+@@ -244,7 +244,7 @@ static int context_write_data_hostname(C
+ else
+ hn = c->data[PROP_HOSTNAME];
+
+- if (sethostname(hn, strlen(hn)) < 0)
++ if (sethostname_idempotent(hn) < 0)
+ return -errno;
+
+ return 0;
+--- src/nspawn/nspawn.c
++++ src/nspawn/nspawn.c 2014-10-29 00:00:00.000000000 +0000
+@@ -981,7 +981,7 @@ static int setup_hostname(void) {
+ if (arg_share_system)
+ return 0;
+
+- if (sethostname(arg_machine, strlen(arg_machine)) < 0)
++ if (sethostname_idempotent(arg_machine) < 0)
+ return -errno;
+
+ return 0;
+--- src/shared/util.c
++++ src/shared/util.c 2014-10-29 00:00:00.000000000 +0000
+@@ -6451,6 +6451,26 @@ int fd_warn_permissions(const char *path
+ return 0;
+ }
+
++int sethostname_idempotent(const char *s) {
++ int r;
++ char buf[HOST_NAME_MAX + 1] = {};
++
++ assert(s);
++
++ r = gethostname(buf, sizeof(buf));
++ if (r < 0)
++ return -errno;
++
++ if (streq(buf, s))
++ return 0;
++
++ r = sethostname(buf, strlen(buf));
++ if (r < 0)
++ return -errno;
++
++ return 1;
++}
++
+ unsigned long personality_from_string(const char *p) {
+
+ /* Parse a personality specifier. We introduce our own
+--- src/shared/util.h
++++ src/shared/util.h 2014-10-29 14:14:15.764337717 +0000
+@@ -899,3 +899,5 @@ union file_handle_union {
+ };
+
+ int umount_recursive(const char *target, int flags);
++
++int sethostname_idempotent(const char *s);
diff --git a/0009-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/0009-hwdb-Update-database-of-Bluetooth-company-identifier.patch
new file mode 100644
index 00000000..69372137
--- /dev/null
+++ b/0009-hwdb-Update-database-of-Bluetooth-company-identifier.patch
@@ -0,0 +1,38 @@
+From 2e3390ea4684b954edce66b7758b5371d3338a9f Mon Sep 17 00:00:00 2001
+From: Marcel Holtmann
+Date: Thu, 2 Oct 2014 07:53:15 +0200
+Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers
+
+---
+ hwdb/20-bluetooth-vendor-product.hwdb | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git hwdb/20-bluetooth-vendor-product.hwdb hwdb/20-bluetooth-vendor-product.hwdb
+index 14aee74..ee2efdf 100644
+--- hwdb/20-bluetooth-vendor-product.hwdb
++++ hwdb/20-bluetooth-vendor-product.hwdb
+@@ -1148,3 +1148,21 @@ bluetooth:v017B*
+
+ bluetooth:v017C*
+ ID_VENDOR_FROM_DATABASE=Daimler AG
++
++bluetooth:v017D*
++ ID_VENDOR_FROM_DATABASE=BatAndCat
++
++bluetooth:v017E*
++ ID_VENDOR_FROM_DATABASE=BluDotz Ltd
++
++bluetooth:v017F*
++ ID_VENDOR_FROM_DATABASE=XTel ApS
++
++bluetooth:v0180*
++ ID_VENDOR_FROM_DATABASE=Gigaset Communications GmbH
++
++bluetooth:v0181*
++ ID_VENDOR_FROM_DATABASE=Gecko Health Innovations, Inc.
++
++bluetooth:v0182*
++ ID_VENDOR_FROM_DATABASE=HOP Ubiquitous
+--
+1.7.9.2
+
diff --git a/0009-units-make-systemd-journald.service-Type-notify.patch b/0009-units-make-systemd-journald.service-Type-notify.patch
new file mode 100644
index 00000000..4890daf5
--- /dev/null
+++ b/0009-units-make-systemd-journald.service-Type-notify.patch
@@ -0,0 +1,27 @@
+Based on a87a38c20196a4aeb56b6ba71d688eefd0b21c30 Mon Sep 17 00:00:00 2001
+From: Michal Schmidt
+Date: Tue, 4 Nov 2014 20:28:08 +0100
+Subject: [PATCH] units: make systemd-journald.service Type=notify
+
+It already calls sd_notify(), so it looks like an oversight.
+
+Without it, its ordering to systemd-journal-flush.service is
+non-deterministic and the SIGUSR1 from flushing may kill journald before
+it has its signal handlers set up.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=85871
+https://bugzilla.redhat.com/show_bug.cgi?id=1159641
+---
+ units/systemd-journald.service.in | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- units/systemd-journald.service.in
++++ units/systemd-journald.service.in 2014-11-10 12:22:08.461949786 +0000
+@@ -14,6 +14,7 @@ After=systemd-journald.socket syslog.soc
+ Before=sysinit.target
+
+ [Service]
++Type=notify
+ ExecStart=@rootlibexecdir@/systemd-journald
+ Restart=always
+ RestartSec=0
diff --git a/0009-util-fix-copy-paste-error-and-actually-set-the-new-h.patch b/0009-util-fix-copy-paste-error-and-actually-set-the-new-h.patch
new file mode 100644
index 00000000..0e7fdba3
--- /dev/null
+++ b/0009-util-fix-copy-paste-error-and-actually-set-the-new-h.patch
@@ -0,0 +1,26 @@
+From a9169c1c589bf7c7a29e7905d17e350ce7c7c48e Mon Sep 17 00:00:00 2001
+From: Michal Sekletar
+Date: Mon, 27 Oct 2014 11:08:26 +0100
+Subject: [PATCH] util: fix copy-paste error and actually set the new hostname
+
+Reported-by: sztanpet on irc
+---
+ src/shared/util.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git src/shared/util.c src/shared/util.c
+index 7d94a28..4143f6d 100644
+--- src/shared/util.c
++++ src/shared/util.c
+@@ -7189,7 +7189,7 @@ int sethostname_idempotent(const char *s) {
+ if (streq(buf, s))
+ return 0;
+
+- r = sethostname(buf, strlen(buf));
++ r = sethostname(s, strlen(s));
+ if (r < 0)
+ return -errno;
+
+--
+1.7.9.2
+
diff --git a/0010-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/0010-hwdb-Update-database-of-Bluetooth-company-identifier.patch
new file mode 100644
index 00000000..dbf00485
--- /dev/null
+++ b/0010-hwdb-Update-database-of-Bluetooth-company-identifier.patch
@@ -0,0 +1,77 @@
+From 5d20fde4a5c4dff4d7c737b545fbd13582d544c1 Mon Sep 17 00:00:00 2001
+From: Marcel Holtmann
+Date: Fri, 31 Oct 2014 20:37:59 +0100
+Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers
+
+---
+ hwdb/20-bluetooth-vendor-product.hwdb | 57 +++++++++++++++++++++++++++++++++
+ 1 file changed, 57 insertions(+)
+
+diff --git hwdb/20-bluetooth-vendor-product.hwdb hwdb/20-bluetooth-vendor-product.hwdb
+index ee2efdf..58ca87d 100644
+--- hwdb/20-bluetooth-vendor-product.hwdb
++++ hwdb/20-bluetooth-vendor-product.hwdb
+@@ -1166,3 +1166,60 @@ bluetooth:v0181*
+
+ bluetooth:v0182*
+ ID_VENDOR_FROM_DATABASE=HOP Ubiquitous
++
++bluetooth:v0183*
++ ID_VENDOR_FROM_DATABASE=To Be Assigned
++
++bluetooth:v0184*
++ ID_VENDOR_FROM_DATABASE=Nectar
++
++bluetooth:v0185*
++ ID_VENDOR_FROM_DATABASE=bel'apps LLC
++
++bluetooth:v0186*
++ ID_VENDOR_FROM_DATABASE=CORE Lighting Ltd
++
++bluetooth:v0187*
++ ID_VENDOR_FROM_DATABASE=Seraphim Sense Ltd
++
++bluetooth:v0188*
++ ID_VENDOR_FROM_DATABASE=Unico RBC
++
++bluetooth:v0189*
++ ID_VENDOR_FROM_DATABASE=Physical Enterprises Inc.
++
++bluetooth:v018A*
++ ID_VENDOR_FROM_DATABASE=Able Trend Technology Limited
++
++bluetooth:v018B*
++ ID_VENDOR_FROM_DATABASE=Konica Minolta, Inc.
++
++bluetooth:v018C*
++ ID_VENDOR_FROM_DATABASE=Wilo SE
++
++bluetooth:v018D*
++ ID_VENDOR_FROM_DATABASE=Extron Design Services
++
++bluetooth:v018E*
++ ID_VENDOR_FROM_DATABASE=Fitbit, Inc.
++
++bluetooth:v018F*
++ ID_VENDOR_FROM_DATABASE=Fireflies Systems
++
++bluetooth:v0190*
++ ID_VENDOR_FROM_DATABASE=Intelletto Technologies Inc.
++
++bluetooth:v0191*
++ ID_VENDOR_FROM_DATABASE=FDK CORPORATION
++
++bluetooth:v0192*
++ ID_VENDOR_FROM_DATABASE=Cloudleaf, Inc
++
++bluetooth:v0193*
++ ID_VENDOR_FROM_DATABASE=Maveric Automation LLC
++
++bluetooth:v0194*
++ ID_VENDOR_FROM_DATABASE=Acoustic Stream Corporation
++
++bluetooth:v0195*
++ ID_VENDOR_FROM_DATABASE=Zuli
+--
+1.7.9.2
+
diff --git a/0010-shutdown-do-final-unmounting-only-if-not-running-ins.patch b/0010-shutdown-do-final-unmounting-only-if-not-running-ins.patch
new file mode 100644
index 00000000..cafa5324
--- /dev/null
+++ b/0010-shutdown-do-final-unmounting-only-if-not-running-ins.patch
@@ -0,0 +1,27 @@
+Based on d89b5fed9ea5d9ec293585cb85bb27b56ea6ac9c Mon Sep 17 00:00:00 2001
+From: Michal Sekletar
+Date: Tue, 21 Oct 2014 18:38:42 +0200
+Subject: [PATCH] shutdown: do final unmounting only if not running inside the
+ container
+
+If we run in the container then we run in a mount namespace. If namespace dies
+then kernel should do unmounting for us, hence we skip unmounting in containers.
+
+Also, it may be the case that we no longer have capability to do umount,
+because we are running in the unprivileged container.
+
+See: http://lists.freedesktop.org/archives/systemd-devel/2014-October/023536.html
+---
+ src/core/shutdown.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- src/core/shutdown.c
++++ src/core/shutdown.c 2014-10-29 14:18:38.767837898 +0000
+@@ -278,6 +278,7 @@ int main(int argc, char *argv[]) {
+ broadcast_signal(SIGKILL, true, false);
+
+ if (in_container) {
++ need_umount = false;
+ need_swapoff = false;
+ need_dm_detach = false;
+ need_loop_detach = false;
diff --git a/0011-selinux-make-sure-we-do-not-try-to-print-missing-fie.patch b/0011-selinux-make-sure-we-do-not-try-to-print-missing-fie.patch
new file mode 100644
index 00000000..1592a5aa
--- /dev/null
+++ b/0011-selinux-make-sure-we-do-not-try-to-print-missing-fie.patch
@@ -0,0 +1,57 @@
+Based on dec23413ecc90d4a547aa41f02af0482b4513495 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Mon, 27 Oct 2014 21:31:29 -0400
+Subject: [PATCH] selinux: make sure we do not try to print missing fields
+
+UID or GID of 0 is valid, so we cannot use that to distinguish whether
+calls to sd_bus_creds_get_* succeeded, and the return value from the
+function is the only way to know about missing fields. Print "n/a" if
+the fields are missing.
+
+CID #1238779
+---
+ src/core/selinux-access.c | 18 ++++++++++++------
+ 1 file changed, 12 insertions(+), 6 deletions(-)
+
+diff --git src/core/selinux-access.c src/core/selinux-access.c
+index 08ea6ef..351d48f 100644
+--- src/core/selinux-access.c
++++ src/core/selinux-access.c
+@@ -53,7 +53,7 @@ struct audit_info {
+
+ /*
+ Any time an access gets denied this callback will be called
+- with the aduit data. We then need to just copy the audit data into the msgbuf.
++ with the audit data. We then need to just copy the audit data into the msgbuf.
+ */
+ static int audit_callback(
+ void *auditdata,
+@@ -64,14 +64,20 @@ static int audit_callback(
+ const struct audit_info *audit = auditdata;
+ uid_t uid = 0, login_uid = 0;
+ gid_t gid = 0;
++ char login_uid_buf[DECIMAL_STR_MAX(uid_t)] = "n/a";
++ char uid_buf[DECIMAL_STR_MAX(uid_t)] = "n/a";
++ char gid_buf[DECIMAL_STR_MAX(gid_t)] = "n/a";
+
+- sd_bus_creds_get_audit_login_uid(audit->creds, &login_uid);
+- sd_bus_creds_get_uid(audit->creds, &uid);
+- sd_bus_creds_get_gid(audit->creds, &gid);
++ if (sd_bus_creds_get_audit_login_uid(audit->creds, &login_uid) >= 0)
++ snprintf(login_uid_buf, sizeof(login_uid_buf), UID_FMT, login_uid);
++ if (sd_bus_creds_get_uid(audit->creds, &uid) >= 0)
++ snprintf(uid_buf, sizeof(uid_buf), UID_FMT, uid);
++ if (sd_bus_creds_get_gid(audit->creds, &gid) >= 0)
++ snprintf(gid_buf, sizeof(gid_buf), "%lu", (unsigned long)gid);
+
+ snprintf(msgbuf, msgbufsize,
+- "auid=%d uid=%d gid=%d%s%s%s%s%s%s",
+- login_uid, uid, gid,
++ "auid=%s uid=%s gid=%s%s%s%s%s%s%s",
++ login_uid_buf, uid_buf, gid_buf,
+ audit->path ? " path=\"" : "", strempty(audit->path), audit->path ? "\"" : "",
+ audit->cmdline ? " cmdline=\"" : "", strempty(audit->cmdline), audit->cmdline ? "\"" : "");
+
+--
+1.7.9.2
+
diff --git a/0012-manager-do-not-print-anything-while-passwords-are-be.patch b/0012-manager-do-not-print-anything-while-passwords-are-be.patch
new file mode 100644
index 00000000..88c30eab
--- /dev/null
+++ b/0012-manager-do-not-print-anything-while-passwords-are-be.patch
@@ -0,0 +1,180 @@
+Based on e46b13c8c7f48f81d4e09912f2265daaa7f6d27e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Sat, 25 Oct 2014 20:30:51 -0400
+Subject: [PATCH] manager: do not print anything while passwords are being
+ queried
+
+https://bugs.freedesktop.org/show_bug.cgi?id=73942
+---
+ src/core/manager.c | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
+ src/core/manager.h | 5 ++
+ 2 files changed, 109 insertions(+), 1 deletion(-)
+
+--- src/core/manager.c
++++ src/core/manager.c 2014-10-29 14:31:18.984212089 +0000
+@@ -25,6 +25,8 @@
+ #include
+ #include
+ #include
++#include
++#include
+ #include
+ #include
+ #include
+@@ -212,6 +214,96 @@ static void manager_print_jobs_in_progre
+
+ }
+
++static int have_ask_password(void) {
++ _cleanup_closedir_ DIR *dir;
++
++ dir = opendir("/run/systemd/ask-password");
++ if (!dir) {
++ if (errno == ENOENT)
++ return false;
++ else
++ return -errno;
++ }
++
++ for (;;) {
++ struct dirent *de;
++
++ errno = 0;
++ de = readdir(dir);
++ if (!de && errno != 0)
++ return -errno;
++ if (!de)
++ return false;
++
++ if (startswith(de->d_name, "ask."))
++ return true;
++ }
++}
++
++static int manager_dispatch_ask_password_fd(sd_event_source *source,
++ int fd, uint32_t revents, void *userdata) {
++ Manager *m = userdata;
++
++ assert(m);
++
++ flush_fd(fd);
++
++ m->have_ask_password = have_ask_password();
++ if (m->have_ask_password < 0)
++ /* Log error but continue. Negative have_ask_password
++ * is treated as unknown status. */
++ log_error("Failed to list /run/systemd/ask-password: %s", strerror(m->have_ask_password));
++
++ return 0;
++}
++
++static void manager_close_ask_password(Manager *m) {
++ assert(m);
++ if (m->ask_password_inotify_fd >= 0) close_nointr_nofail(m->ask_password_inotify_fd);
++ m->ask_password_inotify_fd = -1;
++ m->ask_password_event_source = sd_event_source_unref(m->ask_password_event_source);
++ m->have_ask_password = -EINVAL;
++}
++
++static int manager_check_ask_password(Manager *m) {
++ int r;
++
++ assert(m);
++
++ if (!m->ask_password_event_source) {
++ assert(m->ask_password_inotify_fd < 0);
++
++ mkdir_p_label("/run/systemd/ask-password", 0755);
++
++ m->ask_password_inotify_fd = inotify_init1(IN_NONBLOCK|IN_CLOEXEC);
++ if (m->ask_password_inotify_fd < 0) {
++ log_error("inotify_init1() failed: %m");
++ return -errno;
++ }
++
++ if (inotify_add_watch(m->ask_password_inotify_fd, "/run/systemd/ask-password", IN_CREATE|IN_DELETE|IN_MOVE) < 0) {
++ log_error("Failed to add watch on /run/systemd/ask-password: %m");
++ manager_close_ask_password(m);
++ return -errno;
++ }
++
++ r = sd_event_add_io(m->event, &m->ask_password_event_source,
++ m->ask_password_inotify_fd, EPOLLIN,
++ manager_dispatch_ask_password_fd, m);
++ if (r < 0) {
++ log_error("Failed to add event source for /run/systemd/ask-password: %m");
++ manager_close_ask_password(m);
++ return -errno;
++ }
++
++ /* Queries might have been added meanwhile... */
++ manager_dispatch_ask_password_fd(m->ask_password_event_source,
++ m->ask_password_inotify_fd, EPOLLIN, m);
++ }
++
++ return m->have_ask_password;
++}
++
+ static int manager_watch_idle_pipe(Manager *m) {
+ int r;
+
+@@ -470,6 +562,9 @@ int manager_new(SystemdRunningAs running
+ m->pin_cgroupfs_fd = m->notify_fd = m->signal_fd = m->time_change_fd = m->dev_autofs_fd = m->private_listen_fd = m->kdbus_fd = -1;
+ m->current_job_id = 1; /* start as id #1, so that we can leave #0 around as "null-like" value */
+
++ m->ask_password_inotify_fd = -1;
++ m->have_ask_password = -EINVAL; /* we don't know */
++
+ r = manager_default_environment(m);
+ if (r < 0)
+ goto fail;
+@@ -847,6 +942,8 @@ void manager_free(Manager *m) {
+ if (m->kdbus_fd >= 0)
+ close_nointr_nofail(m->kdbus_fd);
+
++ manager_close_ask_password(m);
++
+ manager_close_idle_pipe(m);
+
+ udev_unref(m->udev);
+@@ -2526,6 +2623,9 @@ void manager_check_finished(Manager *m)
+ /* Turn off confirm spawn now */
+ m->confirm_spawn = false;
+
++ /* No need to update ask password status when we're going non-interactive */
++ manager_close_ask_password(m);
++
+ if (dual_timestamp_is_set(&m->finish_timestamp))
+ return;
+
+@@ -2843,12 +2943,15 @@ static bool manager_get_show_status(Mana
+ if (m->no_console_output)
+ return false;
+
++ /* If we cannot find out the status properly, just proceed. */
++ if (manager_check_ask_password(m) > 0)
++ return false;
++
+ if (m->show_status > 0)
+ return true;
+
+ /* If Plymouth is running make sure we show the status, so
+ * that there's something nice to see when people press Esc */
+-
+ return plymouth_running();
+ }
+
+--- src/core/manager.h
++++ src/core/manager.h 2014-10-29 00:00:00.000000000 +0000
+@@ -231,6 +231,11 @@ struct Manager {
+ unsigned n_on_console;
+ unsigned jobs_in_progress_iteration;
+
++ /* Do we have any outstanding password prompts? */
++ int have_ask_password;
++ int ask_password_inotify_fd;
++ sd_event_source *ask_password_event_source;
++
+ /* Type=idle pipes */
+ int idle_pipe[4];
+ sd_event_source *idle_pipe_event_source;
diff --git a/1053-better-checks-in-write_net_rules.patch b/1053-better-checks-in-write_net_rules.patch
index 50e03693..5fa8076d 100644
--- a/1053-better-checks-in-write_net_rules.patch
+++ b/1053-better-checks-in-write_net_rules.patch
@@ -8,7 +8,7 @@ Index: systemd-210/src/udev/rule_generator/write_net_rules
if [ "$MATCHADDR" ]; then
+ # Check if MACADDR doesn't exist already in the generated rules
+ MAC="$(/usr/bin/grep -w -o -C1 -m1 "$MATCHADDR" "$RULES_FILE" 2>/dev/null || true)"
-+ if [ "$MAC" == "$MATCHADDR" ]; then
++ if [ "$MAC" = "$MATCHADDR" ]; then
+ unlock_rules_file
+ exit 0
+ fi
@@ -23,7 +23,7 @@ Index: systemd-210/src/udev/rule_generator/write_net_rules
- if [ "$ID" == "$MATCHID" ]; then
+ # Check if KERNEL doesn't exist already in the generated rules
+ KERNEL="$(find_all_rules 'KERNELS==' "$MATCHID")"
-+ if [ "$KERNEL" == "$MATCHID" ]; then
++ if [ "$KERNEL" = "$MATCHID" ]; then
unlock_rules_file
exit 0
fi
diff --git a/1089-fix-cgroup-device-controller.patch b/1089-fix-cgroup-device-controller.patch
new file mode 100644
index 00000000..cd68533f
--- /dev/null
+++ b/1089-fix-cgroup-device-controller.patch
@@ -0,0 +1,74 @@
+From eb0f0863f5af48865fb4569e2076d5f9e2313995 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering
+Date: Mon, 10 Mar 2014 21:36:01 +0100
+Subject: nspawn: don't try mknod() of /dev/console with the correct
+ major/minor
+
+We overmount /dev/console with an external pty anyway, hence there's no
+point in using the real major/minor when we create the node to
+overmount. Instead, use the one of /dev/null now.
+
+This fixes a race against the cgroup device controller setup we are
+using. In case /dev/console was create before the cgroup policy was
+applied all was good, but if created in the opposite order the mknod()
+would fail, since creating /dev/console is not allowed by it. Creating
+/dev/null instances is however permitted, and hence use it.
+
+diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
+index d8d0dae..bef866a 100644
+--- a/src/nspawn/nspawn.c
++++ b/src/nspawn/nspawn.c
+@@ -879,23 +879,19 @@ static int setup_ptmx(const char *dest) {
+ }
+
+ static int setup_dev_console(const char *dest, const char *console) {
++ _cleanup_umask_ mode_t u;
++ const char *to;
+ struct stat st;
+- _cleanup_free_ char *to = NULL;
+ int r;
+- _cleanup_umask_ mode_t u;
+
+ assert(dest);
+ assert(console);
+
+ u = umask(0000);
+
+- if (stat(console, &st) < 0) {
+- log_error("Failed to stat %s: %m", console);
++ if (stat("/dev/null", &st) < 0) {
++ log_error("Failed to stat /dev/null: %m");
+ return -errno;
+-
+- } else if (!S_ISCHR(st.st_mode)) {
+- log_error("/dev/console is not a char device");
+- return -EIO;
+ }
+
+ r = chmod_and_chown(console, 0600, 0, 0);
+@@ -904,16 +900,15 @@ static int setup_dev_console(const char *dest, const char *console) {
+ return r;
+ }
+
+- if (asprintf(&to, "%s/dev/console", dest) < 0)
+- return log_oom();
+-
+ /* We need to bind mount the right tty to /dev/console since
+ * ptys can only exist on pts file systems. To have something
+- * to bind mount things on we create a device node first, that
+- * has the right major/minor (note that the major minor
+- * doesn't actually matter here, since we mount it over
+- * anyway). */
++ * to bind mount things on we create a device node first, and
++ * use /dev/null for that since we the cgroups device policy
++ * allows us to create that freely, while we cannot create
++ * /dev/console. (Note that the major minor doesn't actually
++ * matter here, since we mount it over anyway). */
+
++ to = strappenda(dest, "/dev/console");
+ if (mknod(to, (st.st_mode & ~07777) | 0600, st.st_rdev) < 0) {
+ log_error("mknod() for /dev/console failed: %m");
+ return -errno;
+--
+cgit v0.10.2
+
diff --git a/1090-udev-path_id-set-supported_parent-for-well-known-SCS.patch b/1090-udev-path_id-set-supported_parent-for-well-known-SCS.patch
new file mode 100644
index 00000000..3a3ad550
--- /dev/null
+++ b/1090-udev-path_id-set-supported_parent-for-well-known-SCS.patch
@@ -0,0 +1,58 @@
+Based on cc821d02a37c8c76aaf15bae2d33fee1bdc4b2e0 Mon Sep 17 00:00:00 2001
+From: Kay Sievers
+Date: Tue, 28 Oct 2014 16:50:24 +0100
+Subject: [PATCH] udev: path_id - set supported_parent for well-known SCSI
+ setups
+
+---
+ src/udev/udev-builtin-path_id.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+--- src/udev/udev-builtin-path_id.c
++++ src/udev/udev-builtin-path_id.c 2014-11-03 14:12:48.129956655 +0000
+@@ -379,7 +379,7 @@ out:
+ return hostdev;
+ }
+
+-static struct udev_device *handle_scsi(struct udev_device *parent, char **path)
++static struct udev_device *handle_scsi(struct udev_device *parent, char **path, bool *supported_parent)
+ {
+ const char *devtype;
+ const char *name;
+@@ -394,6 +394,7 @@ static struct udev_device *handle_scsi(s
+ if (id != NULL) {
+ parent = skip_subsystem(parent, "scsi");
+ path_prepend(path, "ieee1394-0x%s", id);
++ *supported_parent = true;
+ goto out;
+ }
+
+@@ -402,16 +403,19 @@ static struct udev_device *handle_scsi(s
+
+ if (strstr(name, "/rport-") != NULL) {
+ parent = handle_scsi_fibre_channel(parent, path);
++ *supported_parent = true;
+ goto out;
+ }
+
+ if (strstr(name, "/end_device-") != NULL) {
+ parent = handle_scsi_sas(parent, path);
++ *supported_parent = true;
+ goto out;
+ }
+
+ if (strstr(name, "/session") != NULL) {
+ parent = handle_scsi_iscsi(parent, path);
++ *supported_parent = true;
+ goto out;
+ }
+
+@@ -545,7 +549,7 @@ static int builtin_path_id(struct udev_d
+ } else if (streq(subsys, "scsi_tape")) {
+ handle_scsi_tape(parent, &path);
+ } else if (streq(subsys, "scsi")) {
+- parent = handle_scsi(parent, &path);
++ parent = handle_scsi(parent, &path, &supported_parent);
+ supported_transport = true;
+ } else if (streq(subsys, "cciss")) {
+ parent = handle_cciss(parent, &path);
diff --git a/1091-udev-path_id-update-comments.patch b/1091-udev-path_id-update-comments.patch
new file mode 100644
index 00000000..a695f0db
--- /dev/null
+++ b/1091-udev-path_id-update-comments.patch
@@ -0,0 +1,42 @@
+From a42cdff19f2d34f12ceca0f40707421a8aaa2c2f Mon Sep 17 00:00:00 2001
+From: Kay Sievers
+Date: Thu, 30 Oct 2014 01:18:34 +0100
+Subject: [PATCH] udev: path_id - update comments
+
+---
+ src/udev/udev-builtin-path_id.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git src/udev/udev-builtin-path_id.c src/udev/udev-builtin-path_id.c
+index 0d247f6..df996cb 100644
+--- src/udev/udev-builtin-path_id.c
++++ src/udev/udev-builtin-path_id.c
+@@ -548,9 +548,9 @@ static int builtin_path_id(struct udev_device *dev, int argc, char *argv[], bool
+ }
+
+ /*
+- * Do return devices with have an unknown type of parent device, they
+- * might produce conflicting IDs below multiple independent parent
+- * devices.
++ * Do not return devices with an unknown parent device type. They
++ * might produce conflicting IDs if the parent does not provide a
++ * unique and predictable name.
+ */
+ if (!supported_parent) {
+ free(path);
+@@ -558,9 +558,9 @@ static int builtin_path_id(struct udev_device *dev, int argc, char *argv[], bool
+ }
+
+ /*
+- * Do not return a have-only a single-parent block devices, some
+- * have entire hidden buses behind it, and not create predictable
+- * IDs that way.
++ * Do not return block devices without a well-known transport. Some
++ * devices do not expose their buses and do not provide a unique
++ * and predictable name that way.
+ */
+ if (streq(udev_device_get_subsystem(dev), "block") && !supported_transport) {
+ free(path);
+--
+1.7.9.2
+
diff --git a/1092-libudev-do-not-accept-invalid-log-levels.patch b/1092-libudev-do-not-accept-invalid-log-levels.patch
new file mode 100644
index 00000000..10b78859
--- /dev/null
+++ b/1092-libudev-do-not-accept-invalid-log-levels.patch
@@ -0,0 +1,67 @@
+Based on ee7122c0ec6aa11f02e9e8d94254b353f12d2c14 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?=
+Date: Sat, 1 Nov 2014 12:06:41 -0400
+Subject: [PATCH] libudev: do not accept invalid log levels
+
+Invalid log levels lead to a assert failure later on.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=85657
+---
+ src/libudev/libudev-util.c | 10 +++++++---
+ src/libudev/libudev.c | 19 ++++++++++++++++---
+ 2 files changed, 23 insertions(+), 6 deletions(-)
+
+--- src/libudev/libudev-util.c
++++ src/libudev/libudev-util.c 2014-11-10 11:33:26.269519209 +0000
+@@ -255,9 +255,13 @@ int util_log_priority(const char *priori
+ char *endptr;
+ int prio;
+
+- prio = strtol(priority, &endptr, 10);
+- if (endptr[0] == '\0' || isspace(endptr[0]))
+- return prio;
++ prio = strtoul(priority, &endptr, 10);
++ if (endptr[0] == '\0' || isspace(endptr[0])) {
++ if (prio >= 0 && prio <= 7)
++ return prio;
++ else
++ return -ERANGE;
++ }
+ if (startswith(priority, "err"))
+ return LOG_ERR;
+ if (startswith(priority, "info"))
+--- src/libudev/libudev.c
++++ src/libudev/libudev.c
+@@ -193,7 +193,13 @@ _public_ struct udev *udev_new(void)
+ }
+
+ if (streq(key, "udev_log")) {
+- udev_set_log_priority(udev, util_log_priority(val));
++ int prio;
++
++ prio = util_log_priority(val);
++ if (prio < 0)
++ udev_err(udev, "/etc/udev/udev.conf:%u: invalid logging level '%s', ignoring.\n", line_nr, val);
++ else
++ udev_set_log_priority(udev, prio);
+ continue;
+ }
+ }
+@@ -201,8 +207,15 @@ _public_ struct udev *udev_new(void)
+
+ /* environment overrides config */
+ env = secure_getenv("UDEV_LOG");
+- if (env != NULL)
+- udev_set_log_priority(udev, util_log_priority(env));
++ if (env != NULL) {
++ int prio;
++
++ prio = util_log_priority(env);
++ if (prio < 0)
++ udev_err(udev, "$UDEV_LOG specifies invalid logging level '%s', ignoring.\n", env);
++ else
++ udev_set_log_priority(udev, prio);
++ }
+
+ return udev;
+ }
diff --git a/1093-udev-Fix-parsing-of-udev.event-timeout-kernel-parame.patch b/1093-udev-Fix-parsing-of-udev.event-timeout-kernel-parame.patch
new file mode 100644
index 00000000..5f3bb576
--- /dev/null
+++ b/1093-udev-Fix-parsing-of-udev.event-timeout-kernel-parame.patch
@@ -0,0 +1,23 @@
+Based on f671774f52838d35d78e62ddcb781b5b65b3373f Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones"
+Date: Tue, 4 Nov 2014 23:45:15 +0000
+Subject: [PATCH] udev: Fix parsing of udev.event-timeout kernel parameter.
+
+---
+ src/udev/udevd.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- src/udev/udevd.c
++++ src/udev/udevd.c 2014-11-10 12:28:20.385559165 +0000
+@@ -1011,9 +1011,9 @@ static void kernel_cmdline_options(struc
+ if (r < 0)
+ log_warning("Invalid udev.exec-delay ignored: %s", opt + 16);
+ } else if (startswith(opt, "udev.event-timeout=")) {
+- r = safe_atou64(opt + 16, &event_timeout_usec);
++ r = safe_atou64(opt + 19, &event_timeout_usec);
+ if (r < 0) {
+- log_warning("Invalid udev.event-timeout ignored: %s", opt + 16);
++ log_warning("Invalid udev.event-timeout ignored: %s", opt + 19);
+ break;
+ }
+ event_timeout_usec *= USEC_PER_SEC;
diff --git a/1094-udev-avoid-magic-constants-in-kernel-cmdline-parsers.patch b/1094-udev-avoid-magic-constants-in-kernel-cmdline-parsers.patch
new file mode 100644
index 00000000..3cd42e5c
--- /dev/null
+++ b/1094-udev-avoid-magic-constants-in-kernel-cmdline-parsers.patch
@@ -0,0 +1,58 @@
+Based on cfe2061add5479710f6597899d632e64c54e62ef Mon Sep 17 00:00:00 2001
+From: David Herrmann
+Date: Wed, 5 Nov 2014 12:56:49 +0100
+Subject: [PATCH] udev: avoid magic constants in kernel-cmdline parsers
+
+Lets recognize the fact that startswith() returns a pointer to the tail on
+success. Use it instead of hard-coding string-lengths as magic constants.
+---
+ src/udev/udevd.c | 24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
+
+--- src/udev/udevd.c
++++ src/udev/udevd.c 2014-11-10 12:31:15.745519116 +0000
+@@ -984,7 +984,7 @@ static void kernel_cmdline_options(struc
+ return;
+
+ FOREACH_WORD_QUOTED(w, l, line, state) {
+- char *s, *opt;
++ char *s, *opt, *value;
+
+ s = strndup(w, l);
+ if (!s)
+@@ -996,24 +996,24 @@ static void kernel_cmdline_options(struc
+ else
+ opt = s;
+
+- if (startswith(opt, "udev.log-priority=")) {
++ if ((value = startswith(opt, "udev.log-priority="))) {
+ int prio;
+
+- prio = util_log_priority(opt + 18);
++ prio = util_log_priority(value);
+ log_set_max_level(prio);
+ udev_set_log_priority(udev, prio);
+- } else if (startswith(opt, "udev.children-max=")) {
+- r = safe_atoi(opt + 18, &children_max);
++ } else if ((value = startswith(opt, "udev.children-max="))) {
++ r = safe_atoi(value, &children_max);
+ if (r < 0)
+- log_warning("Invalid udev.children-max ignored: %s", opt + 18);
+- } else if (startswith(opt, "udev.exec-delay=")) {
+- r = safe_atoi(opt + 16, &exec_delay);
++ log_warning("Invalid udev.children-max ignored: %s", value);
++ } else if ((value = startswith(opt, "udev.exec-delay="))) {
++ r = safe_atoi(value, &exec_delay);
+ if (r < 0)
+- log_warning("Invalid udev.exec-delay ignored: %s", opt + 16);
+- } else if (startswith(opt, "udev.event-timeout=")) {
+- r = safe_atou64(opt + 19, &event_timeout_usec);
++ log_warning("Invalid udev.exec-delay ignored: %s", value);
++ } else if ((value = startswith(opt, "udev.event-timeout="))) {
++ r = safe_atou64(value, &event_timeout_usec);
+ if (r < 0) {
+- log_warning("Invalid udev.event-timeout ignored: %s", opt + 19);
++ log_warning("Invalid udev.event-timeout ignored: %s", value);
+ break;
+ }
+ event_timeout_usec *= USEC_PER_SEC;
diff --git a/1095-set-ssd-disk-to-use-deadline-scheduler.patch b/1095-set-ssd-disk-to-use-deadline-scheduler.patch
new file mode 100644
index 00000000..39c4a74a
--- /dev/null
+++ b/1095-set-ssd-disk-to-use-deadline-scheduler.patch
@@ -0,0 +1,28 @@
+Index: systemd-210/Makefile.am
+===================================================================
+--- systemd-210.orig/Makefile.am
++++ systemd-210/Makefile.am
+@@ -2546,6 +2546,7 @@ dist_udevrules_DATA += \
+ rules/60-persistent-input.rules \
+ rules/60-persistent-alsa.rules \
+ rules/60-persistent-storage.rules \
++ rules/60-ssd-scheduler.rules \
+ rules/64-btrfs.rules \
+ rules/75-net-description.rules \
+ rules/75-tty-description.rules \
+Index: systemd-210/rules/60-ssd-scheduler.rules
+===================================================================
+--- /dev/null
++++ systemd-210/rules/60-ssd-scheduler.rules
+@@ -0,0 +1,11 @@
++# do not edit this file, it will be overwritten on update
++
++ACTION!="add", GOTO="ssd_scheduler_end"
++SUBSYSTEM!="block", GOTO="ssd_scheduler_end"
++
++IMPORT{cmdline}="elevator"
++ENV{elevator}=="*?", GOTO="ssd_scheduler_end"
++
++KERNEL=="sd*[!0-9]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"
++
++LABEL="ssd_scheduler_end"
diff --git a/1096-new-udev-root-symlink-generator.patch b/1096-new-udev-root-symlink-generator.patch
new file mode 100644
index 00000000..49c1b2c9
--- /dev/null
+++ b/1096-new-udev-root-symlink-generator.patch
@@ -0,0 +1,130 @@
+Index: systemd-210/Makefile.am
+===================================================================
+--- systemd-210.orig/Makefile.am
++++ systemd-210/Makefile.am
+@@ -2791,6 +2791,25 @@ EXTRA_DIST += \
+ test/rule-syntax-check.py
+
+ # ------------------------------------------------------------------------------
++rootsymlink_generator_SOURCES = \
++ src/udev/rootsymlink_generator/rootsymlink_generator.c
++
++rootsymlink_generator_CFLAGS = \
++ $(AM_CFLAGS)
++
++udevlibexec_PROGRAMS += \
++ rootsymlink-generator
++
++nodist_systemunit_DATA += \
++ units/systemd-udev-root-symlink.service
++
++SYSINIT_TARGET_WANTS += \
++ systemd-udev-root-symlink.service
++
++EXTRA_DIST += \
++ units/systemd-udev-root-symlink.service.in
++
++# ------------------------------------------------------------------------------
+ ata_id_SOURCES = \
+ src/udev/ata_id/ata_id.c
+
+Index: systemd-210/src/udev/rootsymlink_generator/rootsymlink_generator.c
+===================================================================
+--- /dev/null
++++ systemd-210/src/udev/rootsymlink_generator/rootsymlink_generator.c
+@@ -0,0 +1,65 @@
++/*
++ * Copyright (C) 2014-2015 Robert Milasan
++ *
++ * This program is free software: you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation, either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program 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 General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see .
++ */
++
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++
++#define BUFFER_SIZE 128
++
++#define _ROOTDEV_ "/"
++#define _PATH_ "/run/udev/rules.d"
++#define _FILE_ "10-root-symlink.rules"
++
++int main()
++{
++ struct stat statbuf;
++
++ if (stat(_ROOTDEV_, &statbuf) != 0)
++ return 1;
++
++ if (major(statbuf.st_dev) > 0) {
++ int fd = -1;
++ char filename[BUFFER_SIZE];
++
++ if (mkdir(_PATH_, 0755) != 0 && errno != EEXIST)
++ return errno;
++
++ snprintf(filename, BUFFER_SIZE, "%s/%s", _PATH_, _FILE_);
++
++ if ((fd = open(filename, O_CREAT|O_WRONLY|O_TRUNC, 0644)) == -1)
++ return errno;
++ else {
++ char buf[BUFFER_SIZE];
++
++ snprintf(buf, BUFFER_SIZE, "ACTION==\"add|change\", SUBSYSTEM==\"block\", ENV{MAJOR}==\"%d\", ENV{MINOR}==\"%d\", SYMLINK+=\"root\"\n",
++ major(statbuf.st_dev), minor(statbuf.st_dev));
++
++ if (write(fd, buf, strlen(buf)) == -1)
++ return errno;
++
++ if (close(fd) == -1)
++ return errno;
++ }
++ }
++
++ return 0;
++}
+Index: systemd-210/units/systemd-udev-root-symlink.service.in
+===================================================================
+--- /dev/null
++++ systemd-210/units/systemd-udev-root-symlink.service.in
+@@ -0,0 +1,10 @@
++[Unit]
++Description=Rule generator for /dev/root symlink
++Before=systemd-udevd.service
++DefaultDependencies=no
++ConditionPathIsReadWrite=/run/udev
++
++[Service]
++Type=oneshot
++RemainAfterExit=yes
++ExecStart=@udevlibexec@/rootsymlink-generator
+Index: systemd-210/units/systemd-udev-root-symlink.service
+===================================================================
+--- /dev/null
++++ systemd-210/units/systemd-udev-root-symlink.service
+@@ -0,0 +1,10 @@
++[Unit]
++Description=Rule generator for /dev/root symlink
++Before=systemd-udevd.service
++DefaultDependencies=no
++ConditionPathIsReadWrite=/run/udev
++
++[Service]
++Type=oneshot
++RemainAfterExit=yes
++ExecStart=/usr/lib/udev/rootsymlink-generator
diff --git a/avoid-leaking-socket-descriptors.patch b/avoid-leaking-socket-descriptors.patch
new file mode 100644
index 00000000..d65d1196
--- /dev/null
+++ b/avoid-leaking-socket-descriptors.patch
@@ -0,0 +1,339 @@
+Based on 249968612f16a71df909d6e73785c18a9ff36a65
+with src/core/dbus.c as well and corrected systemctl
+error messages for killing a unit.
+
+---
+ src/analyze/analyze.c | 2 +-
+ src/bus-proxyd/bus-proxyd.c | 4 +---
+ src/cgroups-agent/cgroups-agent.c | 4 +---
+ src/core/dbus.c | 2 +-
+ src/fsck/fsck.c | 2 +-
+ src/hostname/hostnamectl.c | 2 +-
+ src/hostname/hostnamed.c | 4 ++--
+ src/libsystemd/sd-bus/bus-util.h | 9 +++++++++
+ src/libsystemd/sd-bus/busctl.c | 2 +-
+ src/locale/localectl.c | 2 +-
+ src/locale/localed.c | 4 ++--
+ src/login/inhibit.c | 2 +-
+ src/login/loginctl.c | 2 +-
+ src/login/pam-module.c | 4 ++--
+ src/machine/machinectl.c | 4 ++--
+ src/nspawn/nspawn.c | 4 ++--
+ src/run/run.c | 2 +-
+ src/systemctl/systemctl.c | 2 +-
+ src/timedate/timedatectl.c | 2 +-
+ src/timedate/timedated.c | 4 ++--
+ 20 files changed, 34 insertions(+), 29 deletions(-)
+
+--- src/analyze/analyze.c
++++ src/analyze/analyze.c 2014-10-21 11:13:56.113045992 +0000
+@@ -1264,7 +1264,7 @@ static int parse_argv(int argc, char *ar
+ }
+
+ int main(int argc, char *argv[]) {
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int r;
+
+ setlocale(LC_ALL, "");
+--- src/bus-proxyd/bus-proxyd.c
++++ src/bus-proxyd/bus-proxyd.c 2014-10-21 11:16:16.303837968 +0000
+@@ -427,7 +427,7 @@ static int patch_sender(sd_bus *a, sd_bu
+
+ int main(int argc, char *argv[]) {
+
+- _cleanup_bus_unref_ sd_bus *a = NULL, *b = NULL;
++ _cleanup_bus_close_unref_ sd_bus *a = NULL, *b = NULL;
+ sd_id128_t server_id;
+ int r, in_fd, out_fd;
+ bool got_hello = false;
+@@ -777,8 +777,6 @@ int main(int argc, char *argv[]) {
+ r = 0;
+
+ finish:
+- sd_bus_flush(a);
+- sd_bus_flush(b);
+
+ return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+ }
+--- src/cgroups-agent/cgroups-agent.c
++++ src/cgroups-agent/cgroups-agent.c 2014-10-21 11:17:37.400197469 +0000
+@@ -26,7 +26,7 @@
+ #include "bus-util.h"
+
+ int main(int argc, char *argv[]) {
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int r;
+
+ if (argc != 2) {
+@@ -62,7 +62,5 @@ int main(int argc, char *argv[]) {
+ return EXIT_FAILURE;
+ }
+
+- sd_bus_flush(bus);
+-
+ return EXIT_SUCCESS;
+ }
+--- src/core/dbus.c
++++ src/core/dbus.c 2014-10-17 09:52:47.000000000 +0000
+@@ -639,7 +639,7 @@ static int bus_setup_disconnected_match(
+ }
+
+ static int bus_on_connection(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ _cleanup_close_ int nfd = -1;
+ Manager *m = userdata;
+ sd_id128_t id;
+--- src/fsck/fsck.c
++++ src/fsck/fsck.c 2014-10-21 11:18:06.003838037 +0000
+@@ -45,7 +45,7 @@ static bool arg_show_progress = false;
+
+ static void start_target(const char *target) {
+ _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int r;
+
+ assert(target);
+--- src/hostname/hostnamectl.c
++++ src/hostname/hostnamectl.c 2014-10-21 11:18:19.915858156 +0000
+@@ -468,7 +468,7 @@ static int hostnamectl_main(sd_bus *bus,
+ }
+
+ int main(int argc, char *argv[]) {
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int r;
+
+ setlocale(LC_ALL, "");
+--- src/hostname/hostnamed.c
++++ src/hostname/hostnamed.c 2014-10-21 11:24:07.737447673 +0000
+@@ -566,7 +566,7 @@ static const sd_bus_vtable hostname_vtab
+ };
+
+ static int connect_bus(Context *c, sd_event *event, sd_bus **_bus) {
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int r;
+
+ assert(c);
+@@ -607,7 +607,7 @@ int main(int argc, char *argv[]) {
+ Context context = {};
+
+ _cleanup_event_unref_ sd_event *event = NULL;
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int r;
+
+ log_set_target(LOG_TARGET_AUTO);
+--- src/libsystemd/sd-bus/bus-util.h
++++ src/libsystemd/sd-bus/bus-util.h 2014-10-17 09:51:34.000000000 +0000
+@@ -137,11 +137,20 @@ typedef struct UnitInfo {
+
+ int bus_parse_unit_info(sd_bus_message *message, UnitInfo *u);
+
++static inline void sd_bus_close_unrefp(sd_bus **bus) {
++ if (*bus) {
++ sd_bus_flush(*bus);
++ sd_bus_close(*bus);
++ sd_bus_unref(*bus);
++ }
++}
++
+ DEFINE_TRIVIAL_CLEANUP_FUNC(sd_bus*, sd_bus_unref);
+ DEFINE_TRIVIAL_CLEANUP_FUNC(sd_bus_message*, sd_bus_message_unref);
+ DEFINE_TRIVIAL_CLEANUP_FUNC(sd_bus_creds*, sd_bus_creds_unref);
+
+ #define _cleanup_bus_unref_ _cleanup_(sd_bus_unrefp)
++#define _cleanup_bus_close_unref_ _cleanup_(sd_bus_close_unrefp)
+ #define _cleanup_bus_message_unref_ _cleanup_(sd_bus_message_unrefp)
+ #define _cleanup_bus_creds_unref_ _cleanup_(sd_bus_creds_unrefp)
+ #define _cleanup_bus_error_free_ _cleanup_(sd_bus_error_free)
+--- src/libsystemd/sd-bus/busctl.c
++++ src/libsystemd/sd-bus/busctl.c 2014-10-21 11:19:01.472337887 +0000
+@@ -484,7 +484,7 @@ static int busctl_main(sd_bus *bus, int
+ }
+
+ int main(int argc, char *argv[]) {
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int r;
+
+ log_parse_environment();
+--- src/locale/localectl.c
++++ src/locale/localectl.c 2014-10-21 11:19:13.811947994 +0000
+@@ -796,7 +796,7 @@ static int localectl_main(sd_bus *bus, i
+ }
+
+ int main(int argc, char*argv[]) {
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int r;
+
+ setlocale(LC_ALL, "");
+--- src/locale/localed.c
++++ src/locale/localed.c 2014-10-21 11:19:28.415837424 +0000
+@@ -1076,7 +1076,7 @@ static const sd_bus_vtable locale_vtable
+ };
+
+ static int connect_bus(Context *c, sd_event *event, sd_bus **_bus) {
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int r;
+
+ assert(c);
+@@ -1116,7 +1116,7 @@ static int connect_bus(Context *c, sd_ev
+ int main(int argc, char *argv[]) {
+ Context context = {};
+ _cleanup_event_unref_ sd_event *event = NULL;
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int r;
+
+ log_set_target(LOG_TARGET_AUTO);
+--- src/login/inhibit.c
++++ src/login/inhibit.c 2014-10-21 11:19:44.470844885 +0000
+@@ -221,7 +221,7 @@ static int parse_argv(int argc, char *ar
+
+ int main(int argc, char *argv[]) {
+ _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int r;
+
+ log_parse_environment();
+--- src/login/loginctl.c
++++ src/login/loginctl.c 2014-10-21 11:20:16.695837857 +0000
+@@ -1298,7 +1298,7 @@ static int loginctl_main(sd_bus *bus, in
+ }
+
+ int main(int argc, char *argv[]) {
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int r;
+
+ setlocale(LC_ALL, "");
+--- src/login/pam-module.c
++++ src/login/pam-module.c 2014-10-21 10:48:20.000000000 +0000
+@@ -213,7 +213,7 @@ _public_ PAM_EXTERN int pam_sm_open_sess
+ *seat = NULL,
+ *type = NULL, *class = NULL,
+ *class_pam = NULL, *type_pam = NULL, *cvtnr = NULL, *desktop = NULL;
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int session_fd = -1, existing, r;
+ bool debug = false, remote;
+ struct passwd *pw;
+@@ -517,7 +517,7 @@ _public_ PAM_EXTERN int pam_sm_close_ses
+ int argc, const char **argv) {
+
+ _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ const void *existing = NULL;
+ const char *id;
+ int r;
+--- src/machine/machinectl.c
++++ src/machine/machinectl.c 2014-10-21 11:20:45.747838104 +0000
+@@ -550,7 +550,7 @@ static int openpt_in_namespace(pid_t pid
+ static int login_machine(sd_bus *bus, char **args, unsigned n) {
+ _cleanup_bus_message_unref_ sd_bus_message *reply = NULL, *reply2 = NULL, *reply3 = NULL;
+ _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
+- _cleanup_bus_unref_ sd_bus *container_bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *container_bus = NULL;
+ _cleanup_close_ int master = -1;
+ _cleanup_free_ char *getty = NULL;
+ const char *path, *pty, *p;
+@@ -879,7 +879,7 @@ static int machinectl_main(sd_bus *bus,
+ }
+
+ int main(int argc, char*argv[]) {
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int r;
+
+ setlocale(LC_ALL, "");
+--- src/nspawn/nspawn.c
++++ src/nspawn/nspawn.c 2014-10-21 11:21:05.561523449 +0000
+@@ -1163,7 +1163,7 @@ static int drop_capabilities(void) {
+
+ static int register_machine(pid_t pid) {
+ _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int r;
+
+ if (!arg_register)
+@@ -1285,7 +1285,7 @@ static int register_machine(pid_t pid) {
+ static int terminate_machine(pid_t pid) {
+ _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
+ _cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ const char *path;
+ int r;
+
+--- src/run/run.c
++++ src/run/run.c 2014-10-21 11:22:35.163838021 +0000
+@@ -462,7 +462,7 @@ static int start_transient_scope(
+
+ int main(int argc, char* argv[]) {
+ _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ _cleanup_free_ char *description = NULL, *command = NULL;
+ int r;
+
+--- src/systemctl/systemctl.c
++++ src/systemctl/systemctl.c 2014-10-22 09:36:33.399838318 +0000
+@@ -2601,7 +2601,7 @@ static int kill_unit(sd_bus *bus, char *
+ "ssi", *names, arg_kill_who, arg_signal);
+ if (q < 0) {
+ log_error("Failed to kill unit %s: %s",
+- *names, bus_error_message(&error, r));
++ *names, bus_error_message(&error, q));
+ if (r == 0)
+ r = q;
+ }
+@@ -6436,7 +6436,7 @@ static int runlevel_main(void) {
+ }
+
+ int main(int argc, char*argv[]) {
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int r;
+
+ setlocale(LC_ALL, "");
+--- src/timedate/timedatectl.c
++++ src/timedate/timedatectl.c 2014-10-21 11:23:06.107837988 +0000
+@@ -593,7 +593,7 @@ static int timedatectl_main(sd_bus *bus,
+ }
+
+ int main(int argc, char *argv[]) {
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int r;
+
+ setlocale(LC_ALL, "");
+--- src/timedate/timedated.c
++++ src/timedate/timedated.c 2014-10-21 11:23:26.047838675 +0000
+@@ -779,7 +779,7 @@ static const sd_bus_vtable timedate_vtab
+ };
+
+ static int connect_bus(Context *c, sd_event *event, sd_bus **_bus) {
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int r;
+
+ assert(c);
+@@ -825,7 +825,7 @@ int main(int argc, char *argv[]) {
+ };
+
+ _cleanup_event_unref_ sd_event *event = NULL;
+- _cleanup_bus_unref_ sd_bus *bus = NULL;
++ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
+ int r;
+
+ log_set_target(LOG_TARGET_AUTO);
diff --git a/journald-advice-about-use-of-memory.patch b/journald-advice-about-use-of-memory.patch
new file mode 100644
index 00000000..008a72ef
--- /dev/null
+++ b/journald-advice-about-use-of-memory.patch
@@ -0,0 +1,146 @@
+---
+ src/journal/catalog.c | 21 +++++++++++++++++++--
+ src/journal/journal-authenticate.c | 4 ++--
+ src/journal/journal-file.c | 2 +-
+ src/journal/journald-kmsg.c | 2 +-
+ src/journal/mmap-cache.c | 24 ++++++++++++++++++++++--
+ 5 files changed, 45 insertions(+), 8 deletions(-)
+
+--- src/journal/catalog.c
++++ src/journal/catalog.c 2014-10-24 11:44:59.079838065 +0000
+@@ -472,9 +472,19 @@ finish:
+
+ static int open_mmap(const char *database, int *_fd, struct stat *_st, void **_p) {
+ const CatalogHeader *h;
+- int fd;
++ static const struct {
++ const int index;
++ int advise;
++ } advises[] = {
++ {0,MADV_WILLNEED},
++ {1,MADV_SEQUENTIAL},
++ {2,MADV_DONTDUMP},
++ {3,MADV_DONTFORK}
++ };
++ int n, fd;
+ void *p;
+ struct stat st;
++ size_t psize;
+
+ assert(_fd);
+ assert(_st);
+@@ -494,12 +504,19 @@ static int open_mmap(const char *databas
+ return -EINVAL;
+ }
+
+- p = mmap(NULL, PAGE_ALIGN(st.st_size), PROT_READ, MAP_SHARED, fd, 0);
++ psize = PAGE_ALIGN(st.st_size);
++ p = mmap(NULL, psize, PROT_READ, MAP_SHARED|MAP_POPULATE|MAP_NONBLOCK, fd, 0);
+ if (p == MAP_FAILED) {
+ close_nointr_nofail(fd);
+ return -errno;
+ }
+
++ for (n=0; n < sizeof(advises)/sizeof(advises[0]); n++) {
++ int r = madvise(p, psize, advises[n].advise);
++ if (r < 0)
++ log_warning("Failed to give advice about use of memory: %m");
++ }
++
+ h = p;
+ if (memcmp(h->signature, CATALOG_SIGNATURE, sizeof(h->signature)) != 0 ||
+ le64toh(h->header_size) < sizeof(CatalogHeader) ||
+--- src/journal/journal-authenticate.c
++++ src/journal/journal-authenticate.c 2014-10-24 07:41:09.271837523 +0000
+@@ -355,7 +355,7 @@ int journal_file_fss_load(JournalFile *f
+ goto finish;
+ }
+
+- m = mmap(NULL, PAGE_ALIGN(sizeof(FSSHeader)), PROT_READ, MAP_SHARED, fd, 0);
++ m = mmap(NULL, PAGE_ALIGN(sizeof(FSSHeader)), PROT_READ, MAP_SHARED|MAP_STACK, fd, 0);
+ if (m == MAP_FAILED) {
+ m = NULL;
+ r = -errno;
+@@ -399,7 +399,7 @@ int journal_file_fss_load(JournalFile *f
+ goto finish;
+ }
+
+- f->fss_file = mmap(NULL, PAGE_ALIGN(f->fss_file_size), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
++ f->fss_file = mmap(NULL, PAGE_ALIGN(f->fss_file_size), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_STACK, fd, 0);
+ if (f->fss_file == MAP_FAILED) {
+ f->fss_file = NULL;
+ r = -errno;
+--- src/journal/journal-file.c
++++ src/journal/journal-file.c 2014-10-24 07:39:25.603837720 +0000
+@@ -2554,7 +2554,7 @@ int journal_file_open(
+ goto fail;
+ }
+
+- f->header = mmap(NULL, PAGE_ALIGN(sizeof(Header)), prot_from_flags(flags), MAP_SHARED, f->fd, 0);
++ f->header = mmap(NULL, PAGE_ALIGN(sizeof(Header)), prot_from_flags(flags), MAP_SHARED|MAP_STACK, f->fd, 0);
+ if (f->header == MAP_FAILED) {
+ f->header = NULL;
+ r = -errno;
+--- src/journal/journald-kmsg.c
++++ src/journal/journald-kmsg.c 2014-10-24 07:38:01.967837989 +0000
+@@ -473,7 +473,7 @@ int server_open_kernel_seqnum(Server *s)
+ return 0;
+ }
+
+- p = mmap(NULL, sizeof(uint64_t), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
++ p = mmap(NULL, sizeof(uint64_t), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_STACK, fd, 0);
+ if (p == MAP_FAILED) {
+ log_error("Failed to map sequential number file, ignoring: %m");
+ close_nointr_nofail(fd);
+--- src/journal/mmap-cache.c
++++ src/journal/mmap-cache.c 2014-10-24 11:16:47.759837744 +0000
+@@ -439,12 +439,21 @@ static int add_mmap(
+ struct stat *st,
+ void **ret) {
+
++ static const struct {
++ const int index;
++ int vise;
++ } ad[] = {
++ {0, MADV_WILLNEED},
++ {1, MADV_SEQUENTIAL},
++ {2, MADV_DONTDUMP},
++ {3, MADV_DONTFORK}
++ };
+ uint64_t woffset, wsize;
+ Context *c;
+ FileDescriptor *f;
+ Window *w;
+ void *d;
+- int r;
++ int n, r;
+
+ assert(m);
+ assert(m->n_ref > 0);
+@@ -481,7 +490,7 @@ static int add_mmap(
+ }
+
+ for (;;) {
+- d = mmap(NULL, wsize, prot, MAP_SHARED, fd, woffset);
++ d = mmap(NULL, wsize, prot, MAP_SHARED|MAP_POPULATE|MAP_NONBLOCK, fd, woffset);
+ if (d != MAP_FAILED)
+ break;
+ if (errno != ENOMEM)
+@@ -494,6 +503,17 @@ static int add_mmap(
+ return -ENOMEM;
+ }
+
++ for (n=0; n < sizeof(ad)/sizeof(ad[0]); n++) {
++ if (ad[n].vise == MADV_DONTFORK) {
++ int flags = fcntl(fd, F_GETFD);
++ if (flags < 0 || !(flags & FD_CLOEXEC))
++ continue;
++ }
++ r = madvise(d, wsize, ad[n].vise);
++ if (r < 0)
++ log_warning("Failed to give advice about use of memory: %m");
++ }
++
+ c = context_add(m, context);
+ if (!c)
+ goto outofmem;
diff --git a/keep-crypt-password-prompt.patch b/keep-crypt-password-prompt.patch
deleted file mode 100644
index ba356b54..00000000
--- a/keep-crypt-password-prompt.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-Index: systemd-210/src/core/manager.c
-===================================================================
---- systemd-210.orig/src/core/manager.c
-+++ systemd-210/src/core/manager.c
-@@ -152,6 +152,29 @@ void manager_flip_auto_status(Manager *m
- }
- }
-
-+static int check_for_password_prompt(void) {
-+ DIR *d;
-+ struct dirent *de;
-+
-+ if (!(d = opendir("/run/systemd/ask-password"))) {
-+
-+ if (errno == ENOENT)
-+ return 1;
-+ log_error("opendir(/run/systemd/ask-password): %m");
-+
-+ return -errno;
-+ }
-+
-+ while ((de = readdir(d))) {
-+ if (startswith(de->d_name, "ask.")) {
-+ closedir(d);
-+ return 0;
-+ }
-+ }
-+ closedir(d);
-+ return 1;
-+}
-+
- static void manager_print_jobs_in_progress(Manager *m) {
- static int is_ansi_console = -1;
- _cleanup_free_ char *job_of_n = NULL;
-@@ -195,6 +218,10 @@ static void manager_print_jobs_in_progre
-
- m->jobs_in_progress_iteration++;
-
-+ //don't overwrite the crypt password prompt with job status messages
-+ if (check_for_password_prompt() == 0)
-+ return;
-+
- if (m->n_running_jobs > 1)
- if (asprintf(&job_of_n, "(%u of %u) ", counter, m->n_running_jobs) < 0)
- job_of_n = NULL;
diff --git a/parse-crypttab-for-noauto-option.patch b/parse-crypttab-for-noauto-option.patch
index 13f576db..8709dc70 100644
--- a/parse-crypttab-for-noauto-option.patch
+++ b/parse-crypttab-for-noauto-option.patch
@@ -44,7 +44,7 @@ Index: systemd-210/src/fstab-generator/fstab-generator.c
+ }
+
+ if (strcmp((what + 12), name) == 0) {
-+ if (strstr(options, "noauto"))
++ if (options && strstr(options, "noauto"))
+ return 0;
+
+ return 1;
diff --git a/rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch b/rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch
index 52fe82ea..b6859af1 100644
--- a/rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch
+++ b/rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch
@@ -7,14 +7,12 @@ Subject: rules: add lid switch of ARM based Chromebook as a power switch to
src/login/70-power-switch.rules | 1 +
1 file changed, 1 insertion(+)
-diff --git a/src/login/70-power-switch.rules b/src/login/70-power-switch.rules
-index 36fb827..d925ab7 100644
--- a/src/login/70-power-switch.rules
+++ b/src/login/70-power-switch.rules
-@@ -9,5 +9,6 @@ ACTION=="remove", GOTO="power_switch_end"
-
- SUBSYSTEM=="input", KERNEL=="event*", SUBSYSTEMS=="acpi", TAG+="power-switch"
+@@ -11,5 +11,6 @@ SUBSYSTEM=="input", KERNEL=="event*", SU
SUBSYSTEM=="input", KERNEL=="event*", KERNELS=="thinkpad_acpi", TAG+="power-switch"
+ SUBSYSTEM=="input", KERNEL=="event*", ATTRS{name}=="twl4030_pwrbutton", TAG+="power-switch"
+ SUBSYSTEM=="input", KERNEL=="event*", ATTRS{name}=="tps65217_pwr_but", TAG+="power-switch"
+SUBSYSTEM=="input", KERNEL=="event*", KERNELS=="gpio-keys.8", TAG+="power-switch"
LABEL="power_switch_end"
diff --git a/systemd-mini.changes b/systemd-mini.changes
index dcfc946e..f50611e0 100644
--- a/systemd-mini.changes
+++ b/systemd-mini.changes
@@ -1,3 +1,293 @@
+-------------------------------------------------------------------
+Tue Nov 25 09:44:42 UTC 2014 - rmilasan@suse.com
+
+- Fix error return in rootsymlink_generator.c
+ Update 1096-new-udev-root-symlink-generator.patch
+
+-------------------------------------------------------------------
+Fri Nov 21 13:35:40 UTC 2014 - werner@suse.de
+
+- Remove upstream patch
+ 0001-systemd-logind.service-set-Type-notify.patch
+ as systemd-logind.service is already from DBus type, compare with
+ upstream commit eab459bc0639b81b32735f36d3e929e4bfa2cb4b
+
+-------------------------------------------------------------------
+Thu Nov 20 13:45:28 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-systemd-logind.service-set-Type-notify.patch
+ 0002-core-watchdog-bus-properties-cannot-be-both-writable.patch
+ 0003-sd-bus-refuse-properties-that-claim-to-be-both-writa.patch
+
+-------------------------------------------------------------------
+Thu Nov 20 12:18:57 UTC 2014 - werner@suse.de
+
+- Re-add directory /usr/lib/systemd/system/basic.target.wants
+
+-------------------------------------------------------------------
+Wed Nov 19 15:07:43 UTC 2014 - gber@opensuse.org
+
+- remove pm-utils-hooks-compat.sh again, pm-utils built-in hooks
+ partially duplicate hooks run by systemd which may potentially
+ lead to problems, instead temporarily re-enable
+ Forward-suspend-hibernate-calls-to-pm-utils.patch until
+ boo#904828 can be addressed properly
+
+-------------------------------------------------------------------
+Wed Nov 19 00:58:00 UTC 2014 - Led
+
+- fix bashisms in write_net_rules script
+- update patches:
+ * 1053-better-checks-in-write_net_rules.patch
+
+-------------------------------------------------------------------
+Tue Nov 18 10:26:08 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-systemctl-let-list-units-unit-files-honour-type.patch
+ 0002-systemctl-obey-state-in-list-unit-files.patch
+ which allows to use --type in the systemctl command list-units
+ and list-unit-files.
+
+-------------------------------------------------------------------
+Tue Nov 18 10:10:28 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-keymap-Add-support-for-IBM-ThinkPad-X41-Tablet.patch
+ 0002-keymap-Fix-special-keys-on-ThinkPad-X60-X61-Tablet.patch
+
+-------------------------------------------------------------------
+Thu Nov 13 14:47:17 UTC 2014 - rmilasan@suse.com
+
+- New root symlink rule generator
+ Add 1096-new-udev-root-symlink-generator.patch
+- Remove write_dev_root_rule and systemd-udev-root-symlink
+
+-------------------------------------------------------------------
+Thu Nov 13 12:59:05 UTC 2014 - werner@suse.de
+
+- Change patch 0001-add-hdflush-for-reboot-or-hddown-for-poweroff.patch
+ to skip hdflush as well as hddown but only use halt as fallback
+ for poweroff as well as synch in systemctl before any reboot command
+ (compare with commit 4a3ad39957399c4a30fc472a804e72907ecaa4f9)
+
+-------------------------------------------------------------------
+Thu Nov 13 09:54:35 UTC 2014 - rmilasan@suse.com
+
+- Create rule to set I/O scheduler to deadline if device attribute
+ 'rotational' equals 0, usually SSDs (bnc#904517).
+ Add 1095-set-ssd-disk-to-use-deadline-scheduler.patch
+
+-------------------------------------------------------------------
+Thu Nov 13 07:50:49 UTC 2014 - thomas.blume@suse.com
+
+- fix systemd-fstab-generator crypttab parsing (bnc#903963)
+
+-------------------------------------------------------------------
+Tue Nov 11 19:10:35 UTC 2014 - gber@opensuse.org
+
+- Add pm-utils-hooks-compat.sh in order to run pm-utils sleep hooks
+ from systemd (boo#904828)
+
+-------------------------------------------------------------------
+Mon Nov 10 14:23:00 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-login-rerun-vconsole-setup-when-switching-from-vgaco.patch
+ 0002-shutdown-fix-arguments-to-run-initramfs-shutdown.patch
+ 0003-utf8-when-looking-at-the-next-unichar-honour-the-siz.patch
+
+-------------------------------------------------------------------
+Mon Nov 10 12:39:35 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-core-don-t-allow-enabling-if-unit-is-masked.patch
+ 0002-snapshot-return-error-when-snapshot-exists.patch
+ 0003-shared-install-avoid-prematurely-rejecting-missing-u.patch
+ 0004-Raise-level-of-Found-dependency.-lines.patch
+ 0005-units-order-sd-journal-flush-after-sd-remount-fs.patch
+ 0006-journald-fix-minor-memory-leak.patch
+ 0007-journald-also-check-journal-file-size-to-deduce-if-i.patch
+ 0008-journald-fix-memory-leak-on-error-path.patch
+ 0009-units-make-systemd-journald.service-Type-notify.patch
+ 0010-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+
+-------------------------------------------------------------------
+Mon Nov 10 12:36:34 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 1092-libudev-do-not-accept-invalid-log-levels.patch
+ 1093-udev-Fix-parsing-of-udev.event-timeout-kernel-parame.patch
+ 1094-udev-avoid-magic-constants-in-kernel-cmdline-parsers.patch
+
+-------------------------------------------------------------------
+Fri Nov 7 09:45:20 UTC 2014 - werner@suse.de
+
+- Add patch watch_resolv.conf_for_become_changed.patch to add an
+ inotify watch on /etc/resolv.conf which enables the reload of
+ a changed resolver configuration on the fly (bsc#902901)
+- Do not apply patch 0022-systemd-tmpfiles-ownerkeep.patch in case
+ if the script /usr/bin/systemd-tmpfiles-keep is missed
+
+-------------------------------------------------------------------
+Mon Nov 3 14:23:02 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-sd-bus-properly-handle-removals-of-non-existing-matc.patch
+ 0002-keymap-Ignore-brightness-keys-on-Dell-Inspiron-1520-.patch
+
+-------------------------------------------------------------------
+Mon Nov 3 14:17:48 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 1090-udev-path_id-set-supported_parent-for-well-known-SCS.patch
+ 1091-udev-path_id-update-comments.patch
+ which will be applied if patch
+ 1090-udev-path_id-set-supported_parent-for-well-known-SCS.patch
+ is applied a this may fix the trouble with iSCSI (bnc#898233)
+
+-------------------------------------------------------------------
+Thu Oct 30 10:45:01 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-manager-Linux-on-hppa-has-fewer-rtsigs-hence-avoid-u.patch
+ 0002-time-also-support-infinity-syntax-in-parse_nsec.patch
+ 0003-time-earlier-exit-from-format_timestamp_relative-on-.patch
+ 0004-sd-bus-if-we-don-t-manage-to-properly-allocate-the-e.patch
+ 0005-journalctl-correct-help-text-for-until.patch
+ 0006-calendarspec-fix-typo-in-annually.patch
+ 0007-systemctl-do-not-ignore-errors-in-symlink-removal.patch
+ 0008-util-introduce-sethostname_idempotent.patch
+ 0009-util-fix-copy-paste-error-and-actually-set-the-new-h.patch
+ 0010-shutdown-do-final-unmounting-only-if-not-running-ins.patch
+ 0011-selinux-make-sure-we-do-not-try-to-print-missing-fie.patch
+- Replace patch
+ keep-crypt-password-prompt.patch as this with
+ upstream patch
+ 0012-manager-do-not-print-anything-while-passwords-are-be.patch
+
+-------------------------------------------------------------------
+Fri Oct 24 13:02:45 UTC 2014 - werner@suse.de
+
+- Add upstream patch
+ 0002-shutdown-pass-own-argv-to-run-initramfs-shutdown.patch
+- Add patch journald-advice-about-use-of-memory.patch to use mmap()
+ flags as well as madvise(2) for journal files.
+
+-------------------------------------------------------------------
+Thu Oct 23 14:05:08 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-strv-add-an-additional-overflow-check-when-enlarging.patch
+ 0002-hwdb-Add-mapping-for-special-keys-on-compaq-ku-0133-.patch
+ 0003-journald-add-CAP_MAC_OVERRIDE-in-journald-for-SMACK-.patch
+ 0004-journal-do-server_vacuum-for-sigusr1.patch
+ 0005-cryptsetup-fix-an-OOM-check.patch
+
+-------------------------------------------------------------------
+Wed Oct 22 13:56:22 UTC 2014 - werner@suse.de
+
+- Add upstream patch 1089-fix-cgroup-device-controller.patch
+ to avoid trouble on existing /dev/console with nspawn (bsc#902240)
+
+-------------------------------------------------------------------
+Tue Oct 21 11:03:31 UTC 2014 - werner@suse.de
+
+- Modify patch avoid-leaking-socket-descriptors.patch to close
+ file descriptors for incomming connections in pam module in case
+ of short memory.
+
+-------------------------------------------------------------------
+Mon Oct 20 14:10:47 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-systemd-continue-switch-root-even-if-umount-fails.patch
+ 0002-systemd-try-harder-to-bind-to-notify-socket.patch
+- Add patch avoid-leaking-socket-descriptors.patch to close
+ file descriptors if an incomming connection can not be handled
+ due e.g. short memory. Could be related to bsc #901481
+
+-------------------------------------------------------------------
+Wed Oct 15 12:03:36 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-shell-completion-fix-completion-of-inactive-units.patch
+ 0002-shell-completion-propose-templates-for-disable-re-en.patch
+ 0003-man-we-don-t-have-Wanted-dependency.patch
+ 0004-selinux-fix-potential-double-free-crash-in-child-pro.patch
+
+-------------------------------------------------------------------
+Wed Oct 15 08:48:36 UTC 2014 - werner@suse.de
+
+- Adapt patch
+ rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch
+ to make it work even with patch #438 and #439
+
+-------------------------------------------------------------------
+Tue Oct 14 16:23:51 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-systemctl-when-mangle-unit-names-for-the-isolate-suf.patch
+ 0001-tmpfiles-compare-return-against-correct-errno.patch
+
+-------------------------------------------------------------------
+Tue Oct 14 16:19:42 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-keymap-Fix-touchpad-toggle-on-Toshiba-Satellite-P75-.patch
+ 0001-units-introduce-network-pre.target-as-place-to-hook-.patch
+ 0002-keymap-Fix-touchpad-toggle-key-on-Asus-laptops.patch
+ 0003-sd-bus-check-return-value-of-vasprintf.patch
+ 0004-core-map-the-rescue-argument-to-rescue.target.patch
+ 0005-util-avoid-double-close-of-fd.patch
+
+-------------------------------------------------------------------
+Tue Oct 14 16:18:36 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-virt-detect-that-we-are-running-inside-the-docker-co.patch
+ 0002-bootchart-use-n-a-if-PRETTY_NAME-is-not-found.patch
+ 0003-fileio-label-return-error-when-writing-fails.patch
+ 0001-sd-event-don-t-require-a-signal-event-source-to-be-e.patch
+ 0004-sd-event-check-the-value-of-received-signal.patch
+ 0005-sd-id128-do-stricter-checking-of-random-boot-id.patch
+
+-------------------------------------------------------------------
+Tue Oct 14 14:46:58 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-core-swap-only-make-configured-units-part-of-swap.ta.patch
+ 0009-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+
+-------------------------------------------------------------------
+Tue Oct 14 14:16:52 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-journalctl-do-not-output-reboot-markers-when-running.patch
+ 0002-udev-hwdb-New-Entry-for-Dell-XPS12-9Q33-keyboard.patch
+
+-------------------------------------------------------------------
+Tue Oct 14 13:58:45 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-logind-add-support-for-Triton2-Power-Button.patch
+ 0002-logind-add-support-for-TPS65217-Power-Button.patch
+- Add upstream patches
+ 0001-shutdownd-clean-up-initialization-of-struct.patch
+ 0003-bootchart-parse-userinput-with-safe_atoi.patch
+ 0004-bootchart-check-return-of-strftime.patch
+ 0005-bootchart-Do-not-try-to-access-data-for-non-existing.patch
+
+-------------------------------------------------------------------
+Thu Oct 2 07:21:42 PDT 2014 - lduncan@suse.com
+
+- Revert patch 1063, which incorrectly disallows
+ /dev/disk/by-path links for iSCSI (and other)
+ devices. Will be corrected and re-added once
+ upstream is consulted. (bnc#898233). Disable:
+ 1063-udev-path_id-suppress-ID_PATH-for-devices-with-an-un.patc
+
-------------------------------------------------------------------
Fri Sep 26 16:11:10 UTC 2014 - werner@suse.de
diff --git a/systemd-mini.spec b/systemd-mini.spec
index 3bc014d9..43deb2f4 100644
--- a/systemd-mini.spec
+++ b/systemd-mini.spec
@@ -26,6 +26,7 @@
%bcond_without compat_libs
%bcond_with networkd
%bcond_with python
+%bcond_with parentpathid
%ifarch %{ix86} x86_64 aarch64
%define has_efi 1
%else
@@ -41,6 +42,7 @@
%bcond_with udevsettle
%endif
%bcond_with systemgrps
+%{expand: %%global has_tmpkeep %(type -p systemd-tmpfiles-keep &>/dev/null && echo 1 || echo 0)}
Name: systemd-mini
Url: http://www.freedesktop.org/wiki/Software/systemd
@@ -188,8 +190,6 @@ Source10: macros.systemd.upstream
Source11: after-local.service
Source1060: boot.udev
-Source1061: write_dev_root_rule
-Source1062: systemd-udev-root-symlink
Source1063: udev-generate-persistent-rule.sh
Source1064: systemd-sleep-grub
Source1065: systemd-remount-tmpfs
@@ -246,7 +246,7 @@ Patch42: systemd-pam_config.patch
Patch23: disable-nss-myhostname-warning-bnc-783841.patch
# PATCH-FIX-OPENSUSE handle-HOSTNAME.patch fcrozat@suse.com -- handle /etc/HOSTNAME (bnc#803653)
Patch24: handle-etc-HOSTNAME.patch
-# PATCH-FIX-OPENSUSE forward to pm-utils -- for code base <= 1310
+# PATCH-FIX-OPENSUSE forward to pm-utils -- until boo#904828 is addressed
Patch25: Forward-suspend-hibernate-calls-to-pm-utils.patch
# PATCH-FIX-UPSTREAM rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch rjschwei@suse.com -- add lid switch of ARM based Chromebook as a power switch to logind
Patch38: rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch
@@ -438,8 +438,6 @@ Patch202: 0004-implement-a-union-to-pad-out-file_handle.patch
Patch203: respect-nfs-bg-option.patch
# PATCH-FIX-UPSTREAM Stop useless messages on dual_timestamp_is_set is failed.
Patch204: shut-up-annoying-assertion-monotonic-clock-message.patch
-# PATCH-FIX-SUSE Do not override the passphrase prompts due messages of busy jobs
-Patch205: keep-crypt-password-prompt.patch
# PATCH-FIX-UPSTREAM Fix uninitialized memory
Patch206: 0001-sd-rtnl-message-append-fix-uninitialized-memory.patch
# PATCH-FIX-UPSTREAM Make systemd user journal accessible by users (bnc#876694)
@@ -902,6 +900,150 @@ Patch435: 0001-Fix-warning-about-unused-variable-with-SELINUX.patch
Patch436: 0002-bus-remove-unused-check.patch
# PATCH-FIX-UPSTREAM added at 2014/09/26
Patch437: 0001-systemd-tmpfiles-Fix-IGNORE_DIRECTORY_PATH-age-handl.patch
+# PATCH-FIX-UPSTREAM added at 2014/09/29
+Patch438: 0001-logind-add-support-for-Triton2-Power-Button.patch
+# PATCH-FIX-UPSTREAM added at 2014/09/29
+Patch439: 0002-logind-add-support-for-TPS65217-Power-Button.patch
+# PATCH-FIX-UPSTREAM added at 2014/09/29
+Patch440: 0001-shutdownd-clean-up-initialization-of-struct.patch
+# PATCH-FIX-UPSTREAM added at 2014/09/29
+Patch441: 0003-bootchart-parse-userinput-with-safe_atoi.patch
+# PATCH-FIX-UPSTREAM added at 2014/09/29
+Patch442: 0004-bootchart-check-return-of-strftime.patch
+# PATCH-FIX-UPSTREAM added at 2014/09/29
+Patch443: 0005-bootchart-Do-not-try-to-access-data-for-non-existing.patch
+# PATCH-FIX-UPSTREAM added at 2014/09/30
+Patch444: 0001-journalctl-do-not-output-reboot-markers-when-running.patch
+# PATCH-FIX-UPSTREAM added at 2014/09/30
+Patch445: 0002-udev-hwdb-New-Entry-for-Dell-XPS12-9Q33-keyboard.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/02
+Patch446: 0001-core-swap-only-make-configured-units-part-of-swap.ta.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/02
+Patch447: 0009-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/07
+Patch448: 0001-virt-detect-that-we-are-running-inside-the-docker-co.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/07
+Patch449: 0002-bootchart-use-n-a-if-PRETTY_NAME-is-not-found.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/07
+Patch450: 0003-fileio-label-return-error-when-writing-fails.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/07
+Patch451: 0001-sd-event-don-t-require-a-signal-event-source-to-be-e.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/07
+Patch452: 0004-sd-event-check-the-value-of-received-signal.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/07
+Patch453: 0005-sd-id128-do-stricter-checking-of-random-boot-id.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/10
+Patch454: 0001-keymap-Fix-touchpad-toggle-on-Toshiba-Satellite-P75-.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/10
+Patch455: 0001-units-introduce-network-pre.target-as-place-to-hook-.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/10
+Patch456: 0002-keymap-Fix-touchpad-toggle-key-on-Asus-laptops.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/10
+Patch457: 0003-sd-bus-check-return-value-of-vasprintf.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/10
+Patch458: 0004-core-map-the-rescue-argument-to-rescue.target.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/10
+Patch459: 0005-util-avoid-double-close-of-fd.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/13
+Patch460: 0001-systemctl-when-mangle-unit-names-for-the-isolate-suf.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/14
+Patch461: 0001-tmpfiles-compare-return-against-correct-errno.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/15
+Patch462: 0001-shell-completion-fix-completion-of-inactive-units.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/15
+Patch463: 0002-shell-completion-propose-templates-for-disable-re-en.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/15
+Patch464: 0003-man-we-don-t-have-Wanted-dependency.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/15
+Patch465: 0004-selinux-fix-potential-double-free-crash-in-child-pro.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/20
+Patch466: 0001-systemd-continue-switch-root-even-if-umount-fails.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/20
+Patch467: 0002-systemd-try-harder-to-bind-to-notify-socket.patch
+# PATCH-FIX-SUSE added at 2014/10/15
+Patch468: avoid-leaking-socket-descriptors.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/23
+Patch469: 0001-strv-add-an-additional-overflow-check-when-enlarging.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/23
+Patch470: 0002-hwdb-Add-mapping-for-special-keys-on-compaq-ku-0133-.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/23
+Patch471: 0003-journald-add-CAP_MAC_OVERRIDE-in-journald-for-SMACK-.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/23
+Patch472: 0004-journal-do-server_vacuum-for-sigusr1.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/23
+Patch473: 0005-cryptsetup-fix-an-OOM-check.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/24
+Patch474: 0002-shutdown-pass-own-argv-to-run-initramfs-shutdown.patch
+# PATCH-FIX-SUSE added at 2014/10/24
+Patch475: journald-advice-about-use-of-memory.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch476: 0001-manager-Linux-on-hppa-has-fewer-rtsigs-hence-avoid-u.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch477: 0002-time-also-support-infinity-syntax-in-parse_nsec.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch478: 0003-time-earlier-exit-from-format_timestamp_relative-on-.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch479: 0004-sd-bus-if-we-don-t-manage-to-properly-allocate-the-e.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch480: 0005-journalctl-correct-help-text-for-until.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch481: 0006-calendarspec-fix-typo-in-annually.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch482: 0007-systemctl-do-not-ignore-errors-in-symlink-removal.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch483: 0008-util-introduce-sethostname_idempotent.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch484: 0009-util-fix-copy-paste-error-and-actually-set-the-new-h.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch485: 0010-shutdown-do-final-unmounting-only-if-not-running-ins.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch486: 0011-selinux-make-sure-we-do-not-try-to-print-missing-fie.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch487: 0012-manager-do-not-print-anything-while-passwords-are-be.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/31
+Patch488: 0001-sd-bus-properly-handle-removals-of-non-existing-matc.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/31
+Patch489: 0002-keymap-Ignore-brightness-keys-on-Dell-Inspiron-1520-.patch
+# PATCH-FIX-SUSE added at 2014/11/05
+Patch490: watch_resolv.conf_for_become_changed.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch491: 0001-core-don-t-allow-enabling-if-unit-is-masked.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch492: 0002-snapshot-return-error-when-snapshot-exists.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch493: 0003-shared-install-avoid-prematurely-rejecting-missing-u.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch494: 0004-Raise-level-of-Found-dependency.-lines.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch495: 0005-units-order-sd-journal-flush-after-sd-remount-fs.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch496: 0006-journald-fix-minor-memory-leak.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch497: 0007-journald-also-check-journal-file-size-to-deduce-if-i.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch498: 0008-journald-fix-memory-leak-on-error-path.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch499: 0009-units-make-systemd-journald.service-Type-notify.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch500: 0010-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/10
+Patch501: 0001-login-rerun-vconsole-setup-when-switching-from-vgaco.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/10
+Patch502: 0002-shutdown-fix-arguments-to-run-initramfs-shutdown.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/10
+Patch503: 0003-utf8-when-looking-at-the-next-unichar-honour-the-siz.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/18
+Patch504: 0001-keymap-Add-support-for-IBM-ThinkPad-X41-Tablet.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/18
+Patch505: 0002-keymap-Fix-special-keys-on-ThinkPad-X60-X61-Tablet.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/18
+Patch506: 0001-systemctl-let-list-units-unit-files-honour-type.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/18
+Patch507: 0002-systemctl-obey-state-in-list-unit-files.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/20
+Patch509: 0002-core-watchdog-bus-properties-cannot-be-both-writable.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/20
+Patch510: 0003-sd-bus-refuse-properties-that-claim-to-be-both-writa.patch
# UDEV PATCHES
# ============
@@ -1081,10 +1223,26 @@ Patch1084: 1084-udev-ctrl-log-if-setting-SO_PASSCRED-fails.patch
Patch1085: 1085-udev-fix-typos.patch
# PATCH-FIX-UPSTREAM 1085-udevd-don-t-fail-if-run-udev-exists.patch
Patch1086: 1086-udevd-don-t-fail-if-run-udev-exists.patch
-# PATCH-FIX-SSUE 1087-infinit-timeout-for-kmod-loaded-modules.patch
+# PATCH-FIX-SUSE 1087-infinit-timeout-for-kmod-loaded-modules.patch
Patch1087: 1087-infinit-timeout-for-kmod-loaded-modules.patch
-# PATCH-FIX-SSUE 1088-drop-renaming-of-virtual-interfaces-in-guest.patch (bnc#898432)
+# PATCH-FIX-SUSE 1088-drop-renaming-of-virtual-interfaces-in-guest.patch (bnc#898432)
Patch1088: 1088-drop-renaming-of-virtual-interfaces-in-guest.patch
+# PATCH-FIX-UPSTREAM 1089-fix-cgroup-device-controller.patch
+Patch1089: 1089-fix-cgroup-device-controller.patch
+# PATCH-FIX-UPSTREAM 1090-udev-path_id-set-supported_parent-for-well-known-SCS.patch
+Patch1090: 1090-udev-path_id-set-supported_parent-for-well-known-SCS.patch
+# PATCH-FIX-UPSTREAM 1091-udev-path_id-update-comments.patch
+Patch1091: 1091-udev-path_id-update-comments.patch
+# PATCH-FIX-UPSTREAM 1092-libudev-do-not-accept-invalid-log-levels.patch
+Patch1092: 1092-libudev-do-not-accept-invalid-log-levels.patch
+# PATCH-FIX-UPSTREAM 1093-udev-Fix-parsing-of-udev.event-timeout-kernel-parame.patch
+Patch1093: 1093-udev-Fix-parsing-of-udev.event-timeout-kernel-parame.patch
+# PATCH-FIX-UPSTREAM 1094-udev-avoid-magic-constants-in-kernel-cmdline-parsers.patch
+Patch1094: 1094-udev-avoid-magic-constants-in-kernel-cmdline-parsers.patch
+# PATCH-FIX-SUSE 1095-set-ssd-disk-to-use-deadline-scheduler.patch (bnc#904517)
+Patch1095: 1095-set-ssd-disk-to-use-deadline-scheduler.patch
+# PATCH-FIX-SUSE 1096-new-udev-root-symlink-generator.patch
+Patch1096: 1096-new-udev-root-symlink-generator.patch
%description
Systemd is a system and service manager, compatible with SysV and LSB
@@ -1340,17 +1498,12 @@ cp %{SOURCE7} m4/
%patch22 -p1
%patch23 -p1
%patch24 -p1
-%if 0%{?suse_version} <= 1310
%patch25 -p1
-%endif
# check if this is still needed, or can be derived from fbdev uaccess rule
# http://lists.freedesktop.org/archives/systemd-devel/2012-November/007561.html
%patch27 -p1
%patch28 -p1
%patch37 -p1
-%ifarch %arm
-%patch38 -p1
-%endif
%patch39 -p1
%patch40 -p1
%patch41 -p1
@@ -1430,7 +1583,9 @@ cp %{SOURCE7} m4/
%patch181 -p1
%patch182 -p1
%patch183 -p1
+%if 0%{?has_tmpkeep}
%patch184 -p1
+%endif
%patch185 -p1
%patch186 -p1
%patch187 -p1
@@ -1451,7 +1606,6 @@ cp %{SOURCE7} m4/
%patch202 -p0
%patch203 -p1
%patch204 -p1
-%patch205 -p1
%patch206 -p0
%patch207 -p0
%patch208 -p1
@@ -1683,6 +1837,81 @@ cp %{SOURCE7} m4/
%patch435 -p0
%patch436 -p0
%patch437 -p0
+%patch438 -p0
+%patch439 -p0
+%ifarch %arm
+%patch38 -p1
+%endif
+%patch440 -p0
+%patch441 -p0
+%patch442 -p0
+%patch443 -p0
+%patch444 -p0
+%patch445 -p0
+%patch446 -p0
+%patch447 -p0
+%patch448 -p0
+%patch449 -p0
+%patch450 -p0
+%patch451 -p0
+%patch452 -p0
+%patch453 -p0
+%patch454 -p0
+%patch455 -p0
+%patch456 -p0
+%patch457 -p0
+%patch458 -p0
+%patch459 -p0
+%patch460 -p0
+%patch461 -p0
+%patch462 -p0
+%patch463 -p0
+%patch464 -p0
+%patch465 -p0
+%patch466 -p0
+%patch467 -p0
+%patch468 -p0
+%patch469 -p0
+%patch470 -p0
+%patch471 -p0
+%patch472 -p0
+%patch473 -p0
+%patch474 -p0
+%patch475 -p0
+%patch476 -p0
+%patch477 -p0
+%patch478 -p0
+%patch479 -p0
+%patch480 -p0
+%patch481 -p0
+%patch482 -p0
+%patch483 -p0
+%patch484 -p0
+%patch485 -p0
+%patch486 -p0
+%patch487 -p0
+%patch488 -p0
+%patch489 -p0
+%patch490 -p0
+%patch491 -p0
+%patch492 -p0
+%patch493 -p0
+%patch494 -p0
+%patch495 -p0
+%patch496 -p0
+%patch497 -p0
+%patch498 -p0
+%patch499 -p0
+%patch500 -p0
+%patch501 -p0
+%patch502 -p0
+%patch503 -p0
+%patch504 -p0
+%patch505 -p0
+%patch506 -p0
+%patch507 -p0
+%patch509 -p0
+%patch510 -p0
# udev patches
%patch1001 -p1
@@ -1768,7 +1997,9 @@ cp %{SOURCE7} m4/
%patch1060 -p1
%patch1061 -p0
%patch1062 -p1
+%if %{with parentpathid}
%patch1063 -p0
+%endif
%patch1064 -p0
%patch1065 -p0
%patch1066 -p1
@@ -1802,6 +2033,16 @@ cp %{SOURCE7} m4/
%patch1086 -p0
%patch1087 -p0
%patch1088 -p1
+%patch1089 -p1
+%if %{with parentpathid}
+%patch1090 -p0
+%patch1091 -p0
+%endif
+%patch1092 -p0
+%patch1093 -p0
+%patch1094 -p0
+%patch1095 -p1
+%patch1096 -p1
# remove patch backups
find -name '*.orig' -exec rm -f '{}' \+
@@ -1919,7 +2160,7 @@ cflags -Wl,--hash-size=8599 LDFLAGS
%if 0%{?suse_version} <= 1310
--with-firmware-path="%{_prefix}/lib/firmware:/lib/firmware" \
%endif
-%if ! 0%{has_efi}
+%if ! 0%{?has_efi}
--disable-efi \
%endif
--with-rc-local-script-path-start=/etc/init.d/boot.local \
@@ -1981,15 +2222,10 @@ sed -ie "s|@@SYSTEMD@@|%{_prefix}/lib/systemd|g" %{S:1060}
sed -ie "s|@@BINDIR@@|%{_bindir}|g" %{S:1060}
install -m755 -D %{S:1060} %{buildroot}/etc/init.d/boot.udev
ln -s systemd-udevd.service %{buildroot}/%{_prefix}/lib/systemd/system/udev.service
-sed -ie "s|@@PREFIX@@|%{_bindir}|g" %{S:1061}
-install -m755 -D %{S:1061} %{buildroot}/%{_prefix}/lib/udev/write_dev_root_rule
-sed -ie "s|@@PREFIX@@|%{_prefix}/lib/udev|g" %{S:1062}
-install -m644 -D %{S:1062} %{buildroot}/%{_prefix}/lib/systemd/system/systemd-udev-root-symlink.service
install -m755 -D %{S:1063} %{buildroot}/%{_prefix}/lib/udev/udev-generate-persistent-rule
install -m755 -D %{S:1064} %{buildroot}/%{_bindir}/systemd-sleep-grub
install -m755 -D %{S:1065} %{buildroot}/%{_prefix}/lib/udev/remount-tmpfs
mkdir -p %{buildroot}/%{_prefix}/lib/systemd/system/basic.target.wants
-ln -sf ../systemd-udev-root-symlink.service %{buildroot}/%{_prefix}/lib/systemd/system/basic.target.wants
rm -rf %{buildroot}%{_sysconfdir}/rpm
find %{buildroot} -type f -name '*.la' -delete
mkdir -p %{buildroot}/{sbin,var/lib/systemd/sysv-convert,var/lib/systemd/migrated} %{buildroot}/usr/lib/systemd/{system-generators,user-generators,system-preset,user-preset,system/halt.target.wants,system/kexec.target.wants,system/poweroff.target.wants,system/reboot.target.wants,system/shutdown.target.wants}
@@ -2457,7 +2693,7 @@ exit 0
%exclude %{_prefix}/lib/systemd/system/initrd-udevadm-cleanup-db.service
%exclude %{_prefix}/lib/systemd/system/systemd-udev-root-symlink.service
%exclude %{_prefix}/lib/systemd/system/*.target.wants/systemd-udev*.*
-%exclude %{_prefix}/lib/systemd/system/basic.target.wants/systemd-udev-root-symlink.service
+%exclude %{_prefix}/lib/systemd/system/sysinit.target.wants/systemd-udev-root-symlink.service
%if ! 0%{?bootstrap}
%exclude %{_prefix}/lib/systemd/system/systemd-journal-gatewayd.*
%endif
@@ -2691,12 +2927,12 @@ exit 0
%{_prefix}/lib/udev/mtd_probe
%{_prefix}/lib/udev/scsi_id
%{_prefix}/lib/udev/v4l_id
-%{_prefix}/lib/udev/write_dev_root_rule
%{_prefix}/lib/udev/udev-generate-persistent-rule
%{_prefix}/lib/udev/net-set-sriov-names
%{_prefix}/lib/udev/remount-tmpfs
%{_prefix}/lib/udev/rule_generator.functions
%{_prefix}/lib/udev/write_net_rules
+%{_prefix}/lib/udev/rootsymlink-generator
%dir %{_prefix}/lib/udev/rules.d/
%exclude %{_prefix}/lib/udev/rules.d/70-uaccess.rules
%exclude %{_prefix}/lib/udev/rules.d/71-seat.rules
@@ -2716,8 +2952,6 @@ exit 0
%endif
%dir %{_prefix}/lib/systemd/system
%{_prefix}/lib/systemd/systemd-udevd
-%{_prefix}/lib/systemd/system/systemd-udev-root-symlink.service
-%{_prefix}/lib/systemd/system/basic.target.wants/systemd-udev-root-symlink.service
%{_prefix}/lib/systemd/system/*udev*.service
%{_prefix}/lib/systemd/system/systemd-udevd*.socket
%dir %{_prefix}/lib/systemd/system/sysinit.target.wants
diff --git a/systemd-udev-root-symlink b/systemd-udev-root-symlink
deleted file mode 100644
index 8cbe87e9..00000000
--- a/systemd-udev-root-symlink
+++ /dev/null
@@ -1,9 +0,0 @@
-[Unit]
-Description=Create dynamic rule for /dev/root link
-Before=udev.service
-DefaultDependencies=no
-
-[Service]
-Type=oneshot
-RemainAfterExit=yes
-ExecStart=@@PREFIX@@/write_dev_root_rule
diff --git a/systemd.changes b/systemd.changes
index dcfc946e..f50611e0 100644
--- a/systemd.changes
+++ b/systemd.changes
@@ -1,3 +1,293 @@
+-------------------------------------------------------------------
+Tue Nov 25 09:44:42 UTC 2014 - rmilasan@suse.com
+
+- Fix error return in rootsymlink_generator.c
+ Update 1096-new-udev-root-symlink-generator.patch
+
+-------------------------------------------------------------------
+Fri Nov 21 13:35:40 UTC 2014 - werner@suse.de
+
+- Remove upstream patch
+ 0001-systemd-logind.service-set-Type-notify.patch
+ as systemd-logind.service is already from DBus type, compare with
+ upstream commit eab459bc0639b81b32735f36d3e929e4bfa2cb4b
+
+-------------------------------------------------------------------
+Thu Nov 20 13:45:28 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-systemd-logind.service-set-Type-notify.patch
+ 0002-core-watchdog-bus-properties-cannot-be-both-writable.patch
+ 0003-sd-bus-refuse-properties-that-claim-to-be-both-writa.patch
+
+-------------------------------------------------------------------
+Thu Nov 20 12:18:57 UTC 2014 - werner@suse.de
+
+- Re-add directory /usr/lib/systemd/system/basic.target.wants
+
+-------------------------------------------------------------------
+Wed Nov 19 15:07:43 UTC 2014 - gber@opensuse.org
+
+- remove pm-utils-hooks-compat.sh again, pm-utils built-in hooks
+ partially duplicate hooks run by systemd which may potentially
+ lead to problems, instead temporarily re-enable
+ Forward-suspend-hibernate-calls-to-pm-utils.patch until
+ boo#904828 can be addressed properly
+
+-------------------------------------------------------------------
+Wed Nov 19 00:58:00 UTC 2014 - Led
+
+- fix bashisms in write_net_rules script
+- update patches:
+ * 1053-better-checks-in-write_net_rules.patch
+
+-------------------------------------------------------------------
+Tue Nov 18 10:26:08 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-systemctl-let-list-units-unit-files-honour-type.patch
+ 0002-systemctl-obey-state-in-list-unit-files.patch
+ which allows to use --type in the systemctl command list-units
+ and list-unit-files.
+
+-------------------------------------------------------------------
+Tue Nov 18 10:10:28 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-keymap-Add-support-for-IBM-ThinkPad-X41-Tablet.patch
+ 0002-keymap-Fix-special-keys-on-ThinkPad-X60-X61-Tablet.patch
+
+-------------------------------------------------------------------
+Thu Nov 13 14:47:17 UTC 2014 - rmilasan@suse.com
+
+- New root symlink rule generator
+ Add 1096-new-udev-root-symlink-generator.patch
+- Remove write_dev_root_rule and systemd-udev-root-symlink
+
+-------------------------------------------------------------------
+Thu Nov 13 12:59:05 UTC 2014 - werner@suse.de
+
+- Change patch 0001-add-hdflush-for-reboot-or-hddown-for-poweroff.patch
+ to skip hdflush as well as hddown but only use halt as fallback
+ for poweroff as well as synch in systemctl before any reboot command
+ (compare with commit 4a3ad39957399c4a30fc472a804e72907ecaa4f9)
+
+-------------------------------------------------------------------
+Thu Nov 13 09:54:35 UTC 2014 - rmilasan@suse.com
+
+- Create rule to set I/O scheduler to deadline if device attribute
+ 'rotational' equals 0, usually SSDs (bnc#904517).
+ Add 1095-set-ssd-disk-to-use-deadline-scheduler.patch
+
+-------------------------------------------------------------------
+Thu Nov 13 07:50:49 UTC 2014 - thomas.blume@suse.com
+
+- fix systemd-fstab-generator crypttab parsing (bnc#903963)
+
+-------------------------------------------------------------------
+Tue Nov 11 19:10:35 UTC 2014 - gber@opensuse.org
+
+- Add pm-utils-hooks-compat.sh in order to run pm-utils sleep hooks
+ from systemd (boo#904828)
+
+-------------------------------------------------------------------
+Mon Nov 10 14:23:00 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-login-rerun-vconsole-setup-when-switching-from-vgaco.patch
+ 0002-shutdown-fix-arguments-to-run-initramfs-shutdown.patch
+ 0003-utf8-when-looking-at-the-next-unichar-honour-the-siz.patch
+
+-------------------------------------------------------------------
+Mon Nov 10 12:39:35 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-core-don-t-allow-enabling-if-unit-is-masked.patch
+ 0002-snapshot-return-error-when-snapshot-exists.patch
+ 0003-shared-install-avoid-prematurely-rejecting-missing-u.patch
+ 0004-Raise-level-of-Found-dependency.-lines.patch
+ 0005-units-order-sd-journal-flush-after-sd-remount-fs.patch
+ 0006-journald-fix-minor-memory-leak.patch
+ 0007-journald-also-check-journal-file-size-to-deduce-if-i.patch
+ 0008-journald-fix-memory-leak-on-error-path.patch
+ 0009-units-make-systemd-journald.service-Type-notify.patch
+ 0010-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+
+-------------------------------------------------------------------
+Mon Nov 10 12:36:34 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 1092-libudev-do-not-accept-invalid-log-levels.patch
+ 1093-udev-Fix-parsing-of-udev.event-timeout-kernel-parame.patch
+ 1094-udev-avoid-magic-constants-in-kernel-cmdline-parsers.patch
+
+-------------------------------------------------------------------
+Fri Nov 7 09:45:20 UTC 2014 - werner@suse.de
+
+- Add patch watch_resolv.conf_for_become_changed.patch to add an
+ inotify watch on /etc/resolv.conf which enables the reload of
+ a changed resolver configuration on the fly (bsc#902901)
+- Do not apply patch 0022-systemd-tmpfiles-ownerkeep.patch in case
+ if the script /usr/bin/systemd-tmpfiles-keep is missed
+
+-------------------------------------------------------------------
+Mon Nov 3 14:23:02 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-sd-bus-properly-handle-removals-of-non-existing-matc.patch
+ 0002-keymap-Ignore-brightness-keys-on-Dell-Inspiron-1520-.patch
+
+-------------------------------------------------------------------
+Mon Nov 3 14:17:48 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 1090-udev-path_id-set-supported_parent-for-well-known-SCS.patch
+ 1091-udev-path_id-update-comments.patch
+ which will be applied if patch
+ 1090-udev-path_id-set-supported_parent-for-well-known-SCS.patch
+ is applied a this may fix the trouble with iSCSI (bnc#898233)
+
+-------------------------------------------------------------------
+Thu Oct 30 10:45:01 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-manager-Linux-on-hppa-has-fewer-rtsigs-hence-avoid-u.patch
+ 0002-time-also-support-infinity-syntax-in-parse_nsec.patch
+ 0003-time-earlier-exit-from-format_timestamp_relative-on-.patch
+ 0004-sd-bus-if-we-don-t-manage-to-properly-allocate-the-e.patch
+ 0005-journalctl-correct-help-text-for-until.patch
+ 0006-calendarspec-fix-typo-in-annually.patch
+ 0007-systemctl-do-not-ignore-errors-in-symlink-removal.patch
+ 0008-util-introduce-sethostname_idempotent.patch
+ 0009-util-fix-copy-paste-error-and-actually-set-the-new-h.patch
+ 0010-shutdown-do-final-unmounting-only-if-not-running-ins.patch
+ 0011-selinux-make-sure-we-do-not-try-to-print-missing-fie.patch
+- Replace patch
+ keep-crypt-password-prompt.patch as this with
+ upstream patch
+ 0012-manager-do-not-print-anything-while-passwords-are-be.patch
+
+-------------------------------------------------------------------
+Fri Oct 24 13:02:45 UTC 2014 - werner@suse.de
+
+- Add upstream patch
+ 0002-shutdown-pass-own-argv-to-run-initramfs-shutdown.patch
+- Add patch journald-advice-about-use-of-memory.patch to use mmap()
+ flags as well as madvise(2) for journal files.
+
+-------------------------------------------------------------------
+Thu Oct 23 14:05:08 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-strv-add-an-additional-overflow-check-when-enlarging.patch
+ 0002-hwdb-Add-mapping-for-special-keys-on-compaq-ku-0133-.patch
+ 0003-journald-add-CAP_MAC_OVERRIDE-in-journald-for-SMACK-.patch
+ 0004-journal-do-server_vacuum-for-sigusr1.patch
+ 0005-cryptsetup-fix-an-OOM-check.patch
+
+-------------------------------------------------------------------
+Wed Oct 22 13:56:22 UTC 2014 - werner@suse.de
+
+- Add upstream patch 1089-fix-cgroup-device-controller.patch
+ to avoid trouble on existing /dev/console with nspawn (bsc#902240)
+
+-------------------------------------------------------------------
+Tue Oct 21 11:03:31 UTC 2014 - werner@suse.de
+
+- Modify patch avoid-leaking-socket-descriptors.patch to close
+ file descriptors for incomming connections in pam module in case
+ of short memory.
+
+-------------------------------------------------------------------
+Mon Oct 20 14:10:47 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-systemd-continue-switch-root-even-if-umount-fails.patch
+ 0002-systemd-try-harder-to-bind-to-notify-socket.patch
+- Add patch avoid-leaking-socket-descriptors.patch to close
+ file descriptors if an incomming connection can not be handled
+ due e.g. short memory. Could be related to bsc #901481
+
+-------------------------------------------------------------------
+Wed Oct 15 12:03:36 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-shell-completion-fix-completion-of-inactive-units.patch
+ 0002-shell-completion-propose-templates-for-disable-re-en.patch
+ 0003-man-we-don-t-have-Wanted-dependency.patch
+ 0004-selinux-fix-potential-double-free-crash-in-child-pro.patch
+
+-------------------------------------------------------------------
+Wed Oct 15 08:48:36 UTC 2014 - werner@suse.de
+
+- Adapt patch
+ rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch
+ to make it work even with patch #438 and #439
+
+-------------------------------------------------------------------
+Tue Oct 14 16:23:51 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-systemctl-when-mangle-unit-names-for-the-isolate-suf.patch
+ 0001-tmpfiles-compare-return-against-correct-errno.patch
+
+-------------------------------------------------------------------
+Tue Oct 14 16:19:42 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-keymap-Fix-touchpad-toggle-on-Toshiba-Satellite-P75-.patch
+ 0001-units-introduce-network-pre.target-as-place-to-hook-.patch
+ 0002-keymap-Fix-touchpad-toggle-key-on-Asus-laptops.patch
+ 0003-sd-bus-check-return-value-of-vasprintf.patch
+ 0004-core-map-the-rescue-argument-to-rescue.target.patch
+ 0005-util-avoid-double-close-of-fd.patch
+
+-------------------------------------------------------------------
+Tue Oct 14 16:18:36 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-virt-detect-that-we-are-running-inside-the-docker-co.patch
+ 0002-bootchart-use-n-a-if-PRETTY_NAME-is-not-found.patch
+ 0003-fileio-label-return-error-when-writing-fails.patch
+ 0001-sd-event-don-t-require-a-signal-event-source-to-be-e.patch
+ 0004-sd-event-check-the-value-of-received-signal.patch
+ 0005-sd-id128-do-stricter-checking-of-random-boot-id.patch
+
+-------------------------------------------------------------------
+Tue Oct 14 14:46:58 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-core-swap-only-make-configured-units-part-of-swap.ta.patch
+ 0009-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+
+-------------------------------------------------------------------
+Tue Oct 14 14:16:52 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-journalctl-do-not-output-reboot-markers-when-running.patch
+ 0002-udev-hwdb-New-Entry-for-Dell-XPS12-9Q33-keyboard.patch
+
+-------------------------------------------------------------------
+Tue Oct 14 13:58:45 UTC 2014 - werner@suse.de
+
+- Add upstream patches
+ 0001-logind-add-support-for-Triton2-Power-Button.patch
+ 0002-logind-add-support-for-TPS65217-Power-Button.patch
+- Add upstream patches
+ 0001-shutdownd-clean-up-initialization-of-struct.patch
+ 0003-bootchart-parse-userinput-with-safe_atoi.patch
+ 0004-bootchart-check-return-of-strftime.patch
+ 0005-bootchart-Do-not-try-to-access-data-for-non-existing.patch
+
+-------------------------------------------------------------------
+Thu Oct 2 07:21:42 PDT 2014 - lduncan@suse.com
+
+- Revert patch 1063, which incorrectly disallows
+ /dev/disk/by-path links for iSCSI (and other)
+ devices. Will be corrected and re-added once
+ upstream is consulted. (bnc#898233). Disable:
+ 1063-udev-path_id-suppress-ID_PATH-for-devices-with-an-un.patc
+
-------------------------------------------------------------------
Fri Sep 26 16:11:10 UTC 2014 - werner@suse.de
diff --git a/systemd.spec b/systemd.spec
index 79e9153c..a8ae7b75 100644
--- a/systemd.spec
+++ b/systemd.spec
@@ -24,6 +24,7 @@
%bcond_without compat_libs
%bcond_with networkd
%bcond_with python
+%bcond_with parentpathid
%ifarch %{ix86} x86_64 aarch64
%define has_efi 1
%else
@@ -39,6 +40,7 @@
%bcond_with udevsettle
%endif
%bcond_with systemgrps
+%{expand: %%global has_tmpkeep %(type -p systemd-tmpfiles-keep &>/dev/null && echo 1 || echo 0)}
Name: systemd
Url: http://www.freedesktop.org/wiki/Software/systemd
@@ -183,8 +185,6 @@ Source10: macros.systemd.upstream
Source11: after-local.service
Source1060: boot.udev
-Source1061: write_dev_root_rule
-Source1062: systemd-udev-root-symlink
Source1063: udev-generate-persistent-rule.sh
Source1064: systemd-sleep-grub
Source1065: systemd-remount-tmpfs
@@ -241,7 +241,7 @@ Patch42: systemd-pam_config.patch
Patch23: disable-nss-myhostname-warning-bnc-783841.patch
# PATCH-FIX-OPENSUSE handle-HOSTNAME.patch fcrozat@suse.com -- handle /etc/HOSTNAME (bnc#803653)
Patch24: handle-etc-HOSTNAME.patch
-# PATCH-FIX-OPENSUSE forward to pm-utils -- for code base <= 1310
+# PATCH-FIX-OPENSUSE forward to pm-utils -- until boo#904828 is addressed
Patch25: Forward-suspend-hibernate-calls-to-pm-utils.patch
# PATCH-FIX-UPSTREAM rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch rjschwei@suse.com -- add lid switch of ARM based Chromebook as a power switch to logind
Patch38: rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch
@@ -433,8 +433,6 @@ Patch202: 0004-implement-a-union-to-pad-out-file_handle.patch
Patch203: respect-nfs-bg-option.patch
# PATCH-FIX-UPSTREAM Stop useless messages on dual_timestamp_is_set is failed.
Patch204: shut-up-annoying-assertion-monotonic-clock-message.patch
-# PATCH-FIX-SUSE Do not override the passphrase prompts due messages of busy jobs
-Patch205: keep-crypt-password-prompt.patch
# PATCH-FIX-UPSTREAM Fix uninitialized memory
Patch206: 0001-sd-rtnl-message-append-fix-uninitialized-memory.patch
# PATCH-FIX-UPSTREAM Make systemd user journal accessible by users (bnc#876694)
@@ -897,6 +895,150 @@ Patch435: 0001-Fix-warning-about-unused-variable-with-SELINUX.patch
Patch436: 0002-bus-remove-unused-check.patch
# PATCH-FIX-UPSTREAM added at 2014/09/26
Patch437: 0001-systemd-tmpfiles-Fix-IGNORE_DIRECTORY_PATH-age-handl.patch
+# PATCH-FIX-UPSTREAM added at 2014/09/29
+Patch438: 0001-logind-add-support-for-Triton2-Power-Button.patch
+# PATCH-FIX-UPSTREAM added at 2014/09/29
+Patch439: 0002-logind-add-support-for-TPS65217-Power-Button.patch
+# PATCH-FIX-UPSTREAM added at 2014/09/29
+Patch440: 0001-shutdownd-clean-up-initialization-of-struct.patch
+# PATCH-FIX-UPSTREAM added at 2014/09/29
+Patch441: 0003-bootchart-parse-userinput-with-safe_atoi.patch
+# PATCH-FIX-UPSTREAM added at 2014/09/29
+Patch442: 0004-bootchart-check-return-of-strftime.patch
+# PATCH-FIX-UPSTREAM added at 2014/09/29
+Patch443: 0005-bootchart-Do-not-try-to-access-data-for-non-existing.patch
+# PATCH-FIX-UPSTREAM added at 2014/09/30
+Patch444: 0001-journalctl-do-not-output-reboot-markers-when-running.patch
+# PATCH-FIX-UPSTREAM added at 2014/09/30
+Patch445: 0002-udev-hwdb-New-Entry-for-Dell-XPS12-9Q33-keyboard.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/02
+Patch446: 0001-core-swap-only-make-configured-units-part-of-swap.ta.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/02
+Patch447: 0009-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/07
+Patch448: 0001-virt-detect-that-we-are-running-inside-the-docker-co.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/07
+Patch449: 0002-bootchart-use-n-a-if-PRETTY_NAME-is-not-found.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/07
+Patch450: 0003-fileio-label-return-error-when-writing-fails.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/07
+Patch451: 0001-sd-event-don-t-require-a-signal-event-source-to-be-e.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/07
+Patch452: 0004-sd-event-check-the-value-of-received-signal.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/07
+Patch453: 0005-sd-id128-do-stricter-checking-of-random-boot-id.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/10
+Patch454: 0001-keymap-Fix-touchpad-toggle-on-Toshiba-Satellite-P75-.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/10
+Patch455: 0001-units-introduce-network-pre.target-as-place-to-hook-.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/10
+Patch456: 0002-keymap-Fix-touchpad-toggle-key-on-Asus-laptops.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/10
+Patch457: 0003-sd-bus-check-return-value-of-vasprintf.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/10
+Patch458: 0004-core-map-the-rescue-argument-to-rescue.target.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/10
+Patch459: 0005-util-avoid-double-close-of-fd.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/13
+Patch460: 0001-systemctl-when-mangle-unit-names-for-the-isolate-suf.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/14
+Patch461: 0001-tmpfiles-compare-return-against-correct-errno.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/15
+Patch462: 0001-shell-completion-fix-completion-of-inactive-units.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/15
+Patch463: 0002-shell-completion-propose-templates-for-disable-re-en.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/15
+Patch464: 0003-man-we-don-t-have-Wanted-dependency.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/15
+Patch465: 0004-selinux-fix-potential-double-free-crash-in-child-pro.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/20
+Patch466: 0001-systemd-continue-switch-root-even-if-umount-fails.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/20
+Patch467: 0002-systemd-try-harder-to-bind-to-notify-socket.patch
+# PATCH-FIX-SUSE added at 2014/10/15
+Patch468: avoid-leaking-socket-descriptors.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/23
+Patch469: 0001-strv-add-an-additional-overflow-check-when-enlarging.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/23
+Patch470: 0002-hwdb-Add-mapping-for-special-keys-on-compaq-ku-0133-.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/23
+Patch471: 0003-journald-add-CAP_MAC_OVERRIDE-in-journald-for-SMACK-.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/23
+Patch472: 0004-journal-do-server_vacuum-for-sigusr1.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/23
+Patch473: 0005-cryptsetup-fix-an-OOM-check.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/24
+Patch474: 0002-shutdown-pass-own-argv-to-run-initramfs-shutdown.patch
+# PATCH-FIX-SUSE added at 2014/10/24
+Patch475: journald-advice-about-use-of-memory.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch476: 0001-manager-Linux-on-hppa-has-fewer-rtsigs-hence-avoid-u.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch477: 0002-time-also-support-infinity-syntax-in-parse_nsec.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch478: 0003-time-earlier-exit-from-format_timestamp_relative-on-.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch479: 0004-sd-bus-if-we-don-t-manage-to-properly-allocate-the-e.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch480: 0005-journalctl-correct-help-text-for-until.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch481: 0006-calendarspec-fix-typo-in-annually.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch482: 0007-systemctl-do-not-ignore-errors-in-symlink-removal.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch483: 0008-util-introduce-sethostname_idempotent.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch484: 0009-util-fix-copy-paste-error-and-actually-set-the-new-h.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch485: 0010-shutdown-do-final-unmounting-only-if-not-running-ins.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch486: 0011-selinux-make-sure-we-do-not-try-to-print-missing-fie.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/28
+Patch487: 0012-manager-do-not-print-anything-while-passwords-are-be.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/31
+Patch488: 0001-sd-bus-properly-handle-removals-of-non-existing-matc.patch
+# PATCH-FIX-UPSTREAM added at 2014/10/31
+Patch489: 0002-keymap-Ignore-brightness-keys-on-Dell-Inspiron-1520-.patch
+# PATCH-FIX-SUSE added at 2014/11/05
+Patch490: watch_resolv.conf_for_become_changed.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch491: 0001-core-don-t-allow-enabling-if-unit-is-masked.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch492: 0002-snapshot-return-error-when-snapshot-exists.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch493: 0003-shared-install-avoid-prematurely-rejecting-missing-u.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch494: 0004-Raise-level-of-Found-dependency.-lines.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch495: 0005-units-order-sd-journal-flush-after-sd-remount-fs.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch496: 0006-journald-fix-minor-memory-leak.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch497: 0007-journald-also-check-journal-file-size-to-deduce-if-i.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch498: 0008-journald-fix-memory-leak-on-error-path.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch499: 0009-units-make-systemd-journald.service-Type-notify.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/07
+Patch500: 0010-hwdb-Update-database-of-Bluetooth-company-identifier.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/10
+Patch501: 0001-login-rerun-vconsole-setup-when-switching-from-vgaco.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/10
+Patch502: 0002-shutdown-fix-arguments-to-run-initramfs-shutdown.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/10
+Patch503: 0003-utf8-when-looking-at-the-next-unichar-honour-the-siz.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/18
+Patch504: 0001-keymap-Add-support-for-IBM-ThinkPad-X41-Tablet.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/18
+Patch505: 0002-keymap-Fix-special-keys-on-ThinkPad-X60-X61-Tablet.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/18
+Patch506: 0001-systemctl-let-list-units-unit-files-honour-type.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/18
+Patch507: 0002-systemctl-obey-state-in-list-unit-files.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/20
+Patch509: 0002-core-watchdog-bus-properties-cannot-be-both-writable.patch
+# PATCH-FIX-UPSTREAM added at 2014/11/20
+Patch510: 0003-sd-bus-refuse-properties-that-claim-to-be-both-writa.patch
# UDEV PATCHES
# ============
@@ -1076,10 +1218,26 @@ Patch1084: 1084-udev-ctrl-log-if-setting-SO_PASSCRED-fails.patch
Patch1085: 1085-udev-fix-typos.patch
# PATCH-FIX-UPSTREAM 1085-udevd-don-t-fail-if-run-udev-exists.patch
Patch1086: 1086-udevd-don-t-fail-if-run-udev-exists.patch
-# PATCH-FIX-SSUE 1087-infinit-timeout-for-kmod-loaded-modules.patch
+# PATCH-FIX-SUSE 1087-infinit-timeout-for-kmod-loaded-modules.patch
Patch1087: 1087-infinit-timeout-for-kmod-loaded-modules.patch
-# PATCH-FIX-SSUE 1088-drop-renaming-of-virtual-interfaces-in-guest.patch (bnc#898432)
+# PATCH-FIX-SUSE 1088-drop-renaming-of-virtual-interfaces-in-guest.patch (bnc#898432)
Patch1088: 1088-drop-renaming-of-virtual-interfaces-in-guest.patch
+# PATCH-FIX-UPSTREAM 1089-fix-cgroup-device-controller.patch
+Patch1089: 1089-fix-cgroup-device-controller.patch
+# PATCH-FIX-UPSTREAM 1090-udev-path_id-set-supported_parent-for-well-known-SCS.patch
+Patch1090: 1090-udev-path_id-set-supported_parent-for-well-known-SCS.patch
+# PATCH-FIX-UPSTREAM 1091-udev-path_id-update-comments.patch
+Patch1091: 1091-udev-path_id-update-comments.patch
+# PATCH-FIX-UPSTREAM 1092-libudev-do-not-accept-invalid-log-levels.patch
+Patch1092: 1092-libudev-do-not-accept-invalid-log-levels.patch
+# PATCH-FIX-UPSTREAM 1093-udev-Fix-parsing-of-udev.event-timeout-kernel-parame.patch
+Patch1093: 1093-udev-Fix-parsing-of-udev.event-timeout-kernel-parame.patch
+# PATCH-FIX-UPSTREAM 1094-udev-avoid-magic-constants-in-kernel-cmdline-parsers.patch
+Patch1094: 1094-udev-avoid-magic-constants-in-kernel-cmdline-parsers.patch
+# PATCH-FIX-SUSE 1095-set-ssd-disk-to-use-deadline-scheduler.patch (bnc#904517)
+Patch1095: 1095-set-ssd-disk-to-use-deadline-scheduler.patch
+# PATCH-FIX-SUSE 1096-new-udev-root-symlink-generator.patch
+Patch1096: 1096-new-udev-root-symlink-generator.patch
%description
Systemd is a system and service manager, compatible with SysV and LSB
@@ -1335,17 +1493,12 @@ cp %{SOURCE7} m4/
%patch22 -p1
%patch23 -p1
%patch24 -p1
-%if 0%{?suse_version} <= 1310
%patch25 -p1
-%endif
# check if this is still needed, or can be derived from fbdev uaccess rule
# http://lists.freedesktop.org/archives/systemd-devel/2012-November/007561.html
%patch27 -p1
%patch28 -p1
%patch37 -p1
-%ifarch %arm
-%patch38 -p1
-%endif
%patch39 -p1
%patch40 -p1
%patch41 -p1
@@ -1425,7 +1578,9 @@ cp %{SOURCE7} m4/
%patch181 -p1
%patch182 -p1
%patch183 -p1
+%if 0%{?has_tmpkeep}
%patch184 -p1
+%endif
%patch185 -p1
%patch186 -p1
%patch187 -p1
@@ -1446,7 +1601,6 @@ cp %{SOURCE7} m4/
%patch202 -p0
%patch203 -p1
%patch204 -p1
-%patch205 -p1
%patch206 -p0
%patch207 -p0
%patch208 -p1
@@ -1678,6 +1832,81 @@ cp %{SOURCE7} m4/
%patch435 -p0
%patch436 -p0
%patch437 -p0
+%patch438 -p0
+%patch439 -p0
+%ifarch %arm
+%patch38 -p1
+%endif
+%patch440 -p0
+%patch441 -p0
+%patch442 -p0
+%patch443 -p0
+%patch444 -p0
+%patch445 -p0
+%patch446 -p0
+%patch447 -p0
+%patch448 -p0
+%patch449 -p0
+%patch450 -p0
+%patch451 -p0
+%patch452 -p0
+%patch453 -p0
+%patch454 -p0
+%patch455 -p0
+%patch456 -p0
+%patch457 -p0
+%patch458 -p0
+%patch459 -p0
+%patch460 -p0
+%patch461 -p0
+%patch462 -p0
+%patch463 -p0
+%patch464 -p0
+%patch465 -p0
+%patch466 -p0
+%patch467 -p0
+%patch468 -p0
+%patch469 -p0
+%patch470 -p0
+%patch471 -p0
+%patch472 -p0
+%patch473 -p0
+%patch474 -p0
+%patch475 -p0
+%patch476 -p0
+%patch477 -p0
+%patch478 -p0
+%patch479 -p0
+%patch480 -p0
+%patch481 -p0
+%patch482 -p0
+%patch483 -p0
+%patch484 -p0
+%patch485 -p0
+%patch486 -p0
+%patch487 -p0
+%patch488 -p0
+%patch489 -p0
+%patch490 -p0
+%patch491 -p0
+%patch492 -p0
+%patch493 -p0
+%patch494 -p0
+%patch495 -p0
+%patch496 -p0
+%patch497 -p0
+%patch498 -p0
+%patch499 -p0
+%patch500 -p0
+%patch501 -p0
+%patch502 -p0
+%patch503 -p0
+%patch504 -p0
+%patch505 -p0
+%patch506 -p0
+%patch507 -p0
+%patch509 -p0
+%patch510 -p0
# udev patches
%patch1001 -p1
@@ -1763,7 +1992,9 @@ cp %{SOURCE7} m4/
%patch1060 -p1
%patch1061 -p0
%patch1062 -p1
+%if %{with parentpathid}
%patch1063 -p0
+%endif
%patch1064 -p0
%patch1065 -p0
%patch1066 -p1
@@ -1797,6 +2028,16 @@ cp %{SOURCE7} m4/
%patch1086 -p0
%patch1087 -p0
%patch1088 -p1
+%patch1089 -p1
+%if %{with parentpathid}
+%patch1090 -p0
+%patch1091 -p0
+%endif
+%patch1092 -p0
+%patch1093 -p0
+%patch1094 -p0
+%patch1095 -p1
+%patch1096 -p1
# remove patch backups
find -name '*.orig' -exec rm -f '{}' \+
@@ -1914,7 +2155,7 @@ cflags -Wl,--hash-size=8599 LDFLAGS
%if 0%{?suse_version} <= 1310
--with-firmware-path="%{_prefix}/lib/firmware:/lib/firmware" \
%endif
-%if ! 0%{has_efi}
+%if ! 0%{?has_efi}
--disable-efi \
%endif
--with-rc-local-script-path-start=/etc/init.d/boot.local \
@@ -1976,15 +2217,10 @@ sed -ie "s|@@SYSTEMD@@|%{_prefix}/lib/systemd|g" %{S:1060}
sed -ie "s|@@BINDIR@@|%{_bindir}|g" %{S:1060}
install -m755 -D %{S:1060} %{buildroot}/etc/init.d/boot.udev
ln -s systemd-udevd.service %{buildroot}/%{_prefix}/lib/systemd/system/udev.service
-sed -ie "s|@@PREFIX@@|%{_bindir}|g" %{S:1061}
-install -m755 -D %{S:1061} %{buildroot}/%{_prefix}/lib/udev/write_dev_root_rule
-sed -ie "s|@@PREFIX@@|%{_prefix}/lib/udev|g" %{S:1062}
-install -m644 -D %{S:1062} %{buildroot}/%{_prefix}/lib/systemd/system/systemd-udev-root-symlink.service
install -m755 -D %{S:1063} %{buildroot}/%{_prefix}/lib/udev/udev-generate-persistent-rule
install -m755 -D %{S:1064} %{buildroot}/%{_bindir}/systemd-sleep-grub
install -m755 -D %{S:1065} %{buildroot}/%{_prefix}/lib/udev/remount-tmpfs
mkdir -p %{buildroot}/%{_prefix}/lib/systemd/system/basic.target.wants
-ln -sf ../systemd-udev-root-symlink.service %{buildroot}/%{_prefix}/lib/systemd/system/basic.target.wants
rm -rf %{buildroot}%{_sysconfdir}/rpm
find %{buildroot} -type f -name '*.la' -delete
mkdir -p %{buildroot}/{sbin,var/lib/systemd/sysv-convert,var/lib/systemd/migrated} %{buildroot}/usr/lib/systemd/{system-generators,user-generators,system-preset,user-preset,system/halt.target.wants,system/kexec.target.wants,system/poweroff.target.wants,system/reboot.target.wants,system/shutdown.target.wants}
@@ -2452,7 +2688,7 @@ exit 0
%exclude %{_prefix}/lib/systemd/system/initrd-udevadm-cleanup-db.service
%exclude %{_prefix}/lib/systemd/system/systemd-udev-root-symlink.service
%exclude %{_prefix}/lib/systemd/system/*.target.wants/systemd-udev*.*
-%exclude %{_prefix}/lib/systemd/system/basic.target.wants/systemd-udev-root-symlink.service
+%exclude %{_prefix}/lib/systemd/system/sysinit.target.wants/systemd-udev-root-symlink.service
%if ! 0%{?bootstrap}
%exclude %{_prefix}/lib/systemd/system/systemd-journal-gatewayd.*
%endif
@@ -2686,12 +2922,12 @@ exit 0
%{_prefix}/lib/udev/mtd_probe
%{_prefix}/lib/udev/scsi_id
%{_prefix}/lib/udev/v4l_id
-%{_prefix}/lib/udev/write_dev_root_rule
%{_prefix}/lib/udev/udev-generate-persistent-rule
%{_prefix}/lib/udev/net-set-sriov-names
%{_prefix}/lib/udev/remount-tmpfs
%{_prefix}/lib/udev/rule_generator.functions
%{_prefix}/lib/udev/write_net_rules
+%{_prefix}/lib/udev/rootsymlink-generator
%dir %{_prefix}/lib/udev/rules.d/
%exclude %{_prefix}/lib/udev/rules.d/70-uaccess.rules
%exclude %{_prefix}/lib/udev/rules.d/71-seat.rules
@@ -2711,8 +2947,6 @@ exit 0
%endif
%dir %{_prefix}/lib/systemd/system
%{_prefix}/lib/systemd/systemd-udevd
-%{_prefix}/lib/systemd/system/systemd-udev-root-symlink.service
-%{_prefix}/lib/systemd/system/basic.target.wants/systemd-udev-root-symlink.service
%{_prefix}/lib/systemd/system/*udev*.service
%{_prefix}/lib/systemd/system/systemd-udevd*.socket
%dir %{_prefix}/lib/systemd/system/sysinit.target.wants
diff --git a/watch_resolv.conf_for_become_changed.patch b/watch_resolv.conf_for_become_changed.patch
new file mode 100644
index 00000000..41a2b6dc
--- /dev/null
+++ b/watch_resolv.conf_for_become_changed.patch
@@ -0,0 +1,159 @@
+---
+ src/core/manager.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/core/manager.h | 5 ++
+ 2 files changed, 108 insertions(+)
+
+--- src/core/manager.c
++++ src/core/manager.c 2014-11-07 11:12:58.334193988 +0000
+@@ -37,6 +37,7 @@
+ #include
+ #include
+ #include
++#include
+
+ #ifdef HAVE_AUDIT
+ #include
+@@ -304,6 +305,101 @@ static int manager_check_ask_password(Ma
+ return m->have_ask_password;
+ }
+
++static int manager_setup_resolv_conf_change(Manager *);
++
++static int manager_dispatch_resolv_conf_fd(sd_event_source *source,
++ int fd, uint32_t revents, void *userdata) {
++ Manager *m = userdata;
++
++ assert(m);
++ assert(m->resolv_conf_inotify_fd == fd);
++
++ if (revents != EPOLLIN) {
++ log_warning("Got unexpected poll event for notify fd.");
++ return 0;
++ }
++
++ if (fd >= 0)
++ flush_fd(fd);
++
++ m->resolv_conf_event_source = sd_event_source_unref(m->resolv_conf_event_source);
++
++ if (m->resolv_conf_inotify_fd >= 0)
++ close_nointr_nofail(m->resolv_conf_inotify_fd);
++ m->resolv_conf_inotify_fd = -1;
++
++ manager_setup_resolv_conf_change(m);
++
++ return m->resolv_conf_noent ? 0 : res_init();
++}
++
++static int manager_setup_resolv_conf_change(Manager *m) {
++ int r;
++
++ assert(m);
++ assert(m->resolv_conf_inotify_fd < 0);
++
++ m->resolv_conf_inotify_fd = inotify_init1(IN_NONBLOCK|IN_CLOEXEC);
++ if (m->resolv_conf_inotify_fd < 0) {
++ log_error("inotify_init1() failed: %m");
++ r = -errno;
++ goto fail;
++ }
++ if (inotify_add_watch(m->resolv_conf_inotify_fd, "/etc/resolv.conf",
++ IN_CLOSE_WRITE|IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF) < 0) {
++ if (errno == ENOENT) {
++ m->resolv_conf_noent = true;
++ if (inotify_add_watch(m->resolv_conf_inotify_fd, "/etc", IN_CREATE|IN_MOVED_TO) < 0) {
++ log_error("Failed to add watch on /etc: %m");
++ r = -errno;
++ goto fail;
++ }
++ } else {
++ log_error("Failed to add watch on /etc/resolv.conf: %m");
++ r = -errno;
++ goto fail;
++ }
++ }
++ if (inotify_add_watch(m->resolv_conf_inotify_fd, "/etc/host.conf",
++ IN_CLOSE_WRITE|IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF) < 0 && errno != ENOENT) {
++ log_error("Failed to add watch on /etc/host.conf: %m");
++ r = -errno;
++ goto fail;
++ }
++
++ r = sd_event_add_io(m->event, &m->resolv_conf_event_source,
++ m->resolv_conf_inotify_fd, EPOLLIN,
++ manager_dispatch_resolv_conf_fd, m);
++ if (r < 0) {
++ log_error("Failed to add event source for resolver: %s", strerror(-r));
++ goto fail;
++ }
++
++ r = sd_event_source_set_priority(m->resolv_conf_event_source, -10);
++ if (r < 0) {
++ log_error("Failed to add event source for resolver: %s", strerror(-r));
++ m->resolv_conf_event_source = sd_event_source_unref(m->resolv_conf_event_source);
++ goto fail;
++ }
++
++ return 0;
++fail:
++ if (m->resolv_conf_inotify_fd >= 0)
++ close_nointr_nofail(m->resolv_conf_inotify_fd);
++ m->resolv_conf_inotify_fd = -1;
++
++ return 0; /* Ignore error here */
++}
++
++static void manager_shutdown_resolv_conf_change(Manager *m) {
++ assert(m);
++
++ m->resolv_conf_event_source = sd_event_source_unref(m->resolv_conf_event_source);
++ if (m->resolv_conf_inotify_fd >= 0)
++ close_nointr_nofail(m->resolv_conf_inotify_fd);
++ m->resolv_conf_inotify_fd = -1;
++}
++
+ static int manager_watch_idle_pipe(Manager *m) {
+ int r;
+
+@@ -562,6 +658,7 @@ int manager_new(SystemdRunningAs running
+ m->pin_cgroupfs_fd = m->notify_fd = m->signal_fd = m->time_change_fd = m->dev_autofs_fd = m->private_listen_fd = m->kdbus_fd = -1;
+ m->current_job_id = 1; /* start as id #1, so that we can leave #0 around as "null-like" value */
+
++ m->resolv_conf_inotify_fd = -1;
+ m->ask_password_inotify_fd = -1;
+ m->have_ask_password = -EINVAL; /* we don't know */
+
+@@ -613,6 +710,10 @@ int manager_new(SystemdRunningAs running
+ if (r < 0)
+ goto fail;
+
++ r = manager_setup_resolv_conf_change(m);
++ if (r < 0)
++ goto fail;
++
+ m->udev = udev_new();
+ if (!m->udev) {
+ r = -ENOMEM;
+@@ -906,6 +1007,8 @@ void manager_free(Manager *m) {
+
+ assert(m);
+
++ manager_shutdown_resolv_conf_change(m);
++
+ manager_clear_jobs_and_units(m);
+
+ for (c = 0; c < _UNIT_TYPE_MAX; c++)
+--- src/core/manager.h
++++ src/core/manager.h 2014-11-07 11:06:41.466019636 +0000
+@@ -157,6 +157,11 @@ struct Manager {
+ FILE *proc_self_mountinfo;
+ sd_event_source *mount_event_source;
+
++ /* Watch out any change of /etc/resolv.conf */
++ int resolv_conf_inotify_fd;
++ sd_event_source *resolv_conf_event_source;
++ bool resolv_conf_noent;
++
+ /* Data specific to the swap filesystem */
+ FILE *proc_swaps;
+ sd_event_source *swap_event_source;
diff --git a/write_dev_root_rule b/write_dev_root_rule
deleted file mode 100644
index dcb7d5b4..00000000
--- a/write_dev_root_rule
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-
-eval $(@@PREFIX@@/udevadm info --export --export-prefix=ROOT_ --device-id-of-file=/)
-
-[ "$ROOT_MAJOR" -gt 0 ] || exit 0
-mkdir -m 0755 -p /run/udev/rules.d >/dev/null 2>&1
-ln -sf /run/udev /dev/.udev 2>/dev/null || :
-
-echo "ACTION==\"add|change\", SUBSYSTEM==\"block\", \
-ENV{MAJOR}==\"$ROOT_MAJOR\", ENV{MINOR}==\"$ROOT_MINOR\", \
-SYMLINK+=\"root\"" > /run/udev/rules.d/10-root-symlink.rules
-
-exit 0