[systemd/f18] couple of reverts, patches from v197+
Michal Schmidt
michich at fedoraproject.org
Mon Jan 28 18:54:09 UTC 2013
commit 54dbdc6c2a513fed37fdec82d70fbba1f9cc37e6
Author: Michal Schmidt <mschmidt at redhat.com>
Date: Mon Jan 28 17:08:46 2013 +0100
couple of reverts, patches from v197+
Revert a couple of patches causing surprising breakage.
Resolves: #896135, #903716
Pick more post-v197 fixes and minor enhancements from upstream.
Resolves: #873634, #875531, #860464, #889624, #890827, #756787, #866693, #757928
...udev-network-device-renaming-immediately-.patch | 98 +
...udev-set-device-node-permissions-only-at-.patch | 58 +
...onour-inhibitors-when-shutting-down-or-en.patch | 239 ++
0016-man-localectl-s-set-keyboard-set-keymap.patch | 23 +
...-sense-of-dvorak-alt-intel-X-variant-in-m.patch | 24 +
...nt-that-JoinControllers-might-be-ineffect.patch | 38 +
...-Type-forking-services-ignore-exit-status.patch | 46 +
...on-t-hit-an-assert-if-we-try-to-reboot-an.patch | 26 +
...onour-inhibitors-only-when-running-unpriv.patch | 71 +
...re-non-tty-non-x11-session-when-checking-.patch | 31 +
...load-font-to-dev-tty1-and-copy-it-to-all-.patch | 151 +
...n-wiki-documentation-about-network.target.patch | 41 +
...ink-in-API-FS-documentation-from-the-wiki.patch | 89 +
0026-vconsole-copy-font-to-tty1-15.patch | 117 +
0027-localectl-fix-typo-in-man-page.patch | 24 +
...rrect-order-of-precedence-for-fstab-units.patch | 33 +
...eference-to-new-wiki-page-to-all-api-moun.patch | 113 +
...erence-to-wiki-doc-from-DefaultController.patch | 47 +
...e-dev-vcsa1-15-to-check-for-allocated-VTs.patch | 30 +
...re-use-correct-argument-of-type-JobResult.patch | 23 +
0033-journalctl-quit-on-I-O-error.patch | 39 +
...-core-do-not-make-sockets-dependent-on-lo.patch | 25 +
...nt-replace-specifiers-in-path-unit-s-Unit.patch | 45 +
0036-load-fragment-fix-bad-memory-access.patch | 23 +
...-the-final-umount-loop-don-t-use-MNT_FORC.patch | 33 +
...gnore-loop-devices-without-a-backing-file.patch | 35 +
...oginctl-cgls-do-not-ellipsize-cgroup-memb.patch | 777 ++++
0040-man-typo-fixes.patch | 39 +
...it-s-PartOf-and-ConsistsOf-deps-to-intros.patch | 29 +
...ll-unit-settings-that-take-lists-allow-th.patch | 1934 ++++++++++
...perly-signal-permanent-failure-of-a-servi.patch | 38 +
0044-util-fix-bad-memory-access.patch | 22 +
0045-hwdb-update.patch | 3691 ++++++++++++++++++++
...awn-add-audit-caps-to-default-set-to-keep.patch | 62 +
...te-suggested-yum-command-line-in-nspawn-1.patch | 33 +
...pfiles-do-not-make-run-nologin-executable.patch | 20 +
...-shutdown-loop-convert-to-enumerate-match.patch | 45 +
0050-Fix-some-typos.patch | 37 +
...y-the-meaning-of-timeout-0-for-password-a.patch | 42 +
...c-combine-Wformat-options-into-one-argume.patch | 29 +
...-allow-one-shutdown-sleep-action-to-be-qu.patch | 206 ++
0054-hwdb-update.patch | 720 ++++
...-really-stop-watchdog-timer-when-stopping.patch | 27 +
...e-sure-the-watchdog-timer-is-not-restarte.patch | 31 +
...ore-Set-source-for-mountinfo-.mount-units.patch | 48 +
...temd.exec-explicit-Environment-assignment.patch | 54 +
...on-proc-self-mountinfo-in-systemd.mount-5.patch | 34 +
...ess-Delete-debugging-message-logged-as-an.patch | 24 +
...don-t-need-that-many-debug-messages-by-de.patch | 40 +
...-Resumed-signal-after-we-come-back-from-s.patch | 112 +
...UnlockSessions-clal-to-complement-LockSes.patch | 96 +
...ow-seat-master-and-uaccess-devices-in-sea.patch | 50 +
...tl-don-t-show-UACCESS-info-in-device-tree.patch | 46 +
0066-logind-rework-delay-inhibition-logic.patch | 447 +++
0067-tmpfiles-introduce-type-X.patch | 332 ++
...-job-fix-merging-with-ignore-dependencies.patch | 24 +
...me-stdout-is-always-writable-if-it-does-n.patch | 39 +
...mention-that-PrivateTmp-means-var-tmp-too.patch | 36 +
...support-for-the-brower-hotkey-on-the-HP-P.patch | 24 +
0072-keymap-Add-HP-HDX-9494NR.patch | 63 +
...eymap-Add-HP-HDX-9494NR-Fix-touchpad-keys.patch | 23 +
systemd.spec | 71 +-
62 files changed, 10866 insertions(+), 1 deletions(-)
---
diff --git a/0013-F18-Revert-udev-network-device-renaming-immediately-.patch b/0013-F18-Revert-udev-network-device-renaming-immediately-.patch
new file mode 100644
index 0000000..26675bc
--- /dev/null
+++ b/0013-F18-Revert-udev-network-device-renaming-immediately-.patch
@@ -0,0 +1,98 @@
+From 6cebb9b39ec04ba11c81dca9b0c10faa51929d72 Mon Sep 17 00:00:00 2001
+From: Michal Schmidt <mschmidt at redhat.com>
+Date: Mon, 28 Jan 2013 14:15:56 +0100
+Subject: [PATCH] (F18) Revert "udev: network device renaming - immediately
+ give up if the target name isn't available"
+
+This reverts commit 97595710b77aa162ca5e20da57d0a1ed7355eaad (and fixes
+it up for printk_kmsg-related changes that came later).
+
+Many users upgraded from earlier Fedora releases and kept their
+/etc/udev/rules.d/70-persistent-net.rules with rules renaming interfaces
+into the ethX namespace. The udev change that made this entirely
+unsupported was not announced loud enough. For F18 let's re-add the
+renaming hack.
+
+Add an annoying message about the need to fix udev rules.
+
+BZ: https://bugzilla.redhat.com/show_bug.cgi?id=896135
+---
+ src/udev/udev-event.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++---
+ 1 file changed, 51 insertions(+), 3 deletions(-)
+
+diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
+index 5eedf4f..8aedc5f 100644
+--- a/src/udev/udev-event.c
++++ b/src/udev/udev-event.c
+@@ -750,7 +750,14 @@ static int rename_netif(struct udev_event *event)
+ struct udev_device *dev = event->dev;
+ int sk;
+ struct ifreq ifr;
++ int loop;
+ int err;
++ static const char rename_hack_msg_fmt[] =
++ "Tried to rename network interface %s, but the target name %s already exists! "
++ "The names that udev rules assign to network interfaces must be changed. "
++ "Avoid names that collide with kernel created ones. "
++ "A workaround will be attempted now, but this WILL BREAK in a future release! "
++ "See https://bugs.freedesktop.org/show_bug.cgi?id=56929#c3\n";
+
+ log_debug("changing net interface name from '%s' to '%s'\n",
+ udev_device_get_sysname(dev), event->name);
+@@ -766,12 +773,53 @@ static int rename_netif(struct udev_event *event)
+ util_strscpy(ifr.ifr_name, IFNAMSIZ, udev_device_get_sysname(dev));
+ util_strscpy(ifr.ifr_newname, IFNAMSIZ, event->name);
+ err = ioctl(sk, SIOCSIFNAME, &ifr);
+- if (err >= 0) {
++ if (err == 0) {
+ print_kmsg("renamed network interface %s to %s\n", ifr.ifr_name, ifr.ifr_newname);
+- } else {
++ goto out;
++ }
++
++ /* keep trying if the destination interface name already exists */
++ err = -errno;
++ if (err != -EEXIST)
++ goto out;
++
++ /* F18: scream both into dmesg and journal */
++ print_kmsg(rename_hack_msg_fmt, ifr.ifr_name, ifr.ifr_newname);
++ log_error (rename_hack_msg_fmt, ifr.ifr_name, ifr.ifr_newname);
++
++ /* free our own name, another process may wait for us */
++ snprintf(ifr.ifr_newname, IFNAMSIZ, "rename%u", udev_device_get_ifindex(dev));
++ err = ioctl(sk, SIOCSIFNAME, &ifr);
++ if (err < 0) {
+ err = -errno;
+- log_error("error changing net interface name %s to %s: %m\n", ifr.ifr_name, ifr.ifr_newname);
++ goto out;
++ }
++
++ /* log temporary name */
++ print_kmsg("renamed network interface %s to %s\n", ifr.ifr_name, ifr.ifr_newname);
++
++ /* wait a maximum of 90 seconds for our target to become available */
++ util_strscpy(ifr.ifr_name, IFNAMSIZ, ifr.ifr_newname);
++ util_strscpy(ifr.ifr_newname, IFNAMSIZ, event->name);
++ loop = 90 * 20;
++ while (loop--) {
++ const struct timespec duration = { 0, 1000 * 1000 * 1000 / 20 };
++
++ nanosleep(&duration, NULL);
++
++ err = ioctl(sk, SIOCSIFNAME, &ifr);
++ if (err == 0) {
++ print_kmsg("renamed network interface %s to %s\n", ifr.ifr_name, ifr.ifr_newname);
++ break;
++ }
++ err = -errno;
++ if (err != -EEXIST)
++ break;
+ }
++
++out:
++ if (err < 0)
++ log_error("error changing net interface name %s to %s: %m\n", ifr.ifr_name, ifr.ifr_newname);
+ close(sk);
+ return err;
+ }
diff --git a/0014-F18-Revert-udev-set-device-node-permissions-only-at-.patch b/0014-F18-Revert-udev-set-device-node-permissions-only-at-.patch
new file mode 100644
index 0000000..8a9126f
--- /dev/null
+++ b/0014-F18-Revert-udev-set-device-node-permissions-only-at-.patch
@@ -0,0 +1,58 @@
+From f45160dfd901824b898751383bd299ee3ad4abdf Mon Sep 17 00:00:00 2001
+From: Michal Schmidt <mschmidt at redhat.com>
+Date: Mon, 28 Jan 2013 15:15:23 +0100
+Subject: [PATCH] (F18) Revert "udev: set device node permissions only at "add"
+ events"
+
+This reverts commit 48a849ee17fb25e0001bfcc0f28a4aa633d016a1.
+
+Kay says a proper fix for the BZ is non-trivial, so the change that
+broke 12-vdsm-lvm.rules should be reverted in F18.
+
+BZ: https://bugzilla.redhat.com/show_bug.cgi?id=903716
+---
+ src/udev/udev-node.c | 29 ++++++++++++++---------------
+ 1 file changed, 14 insertions(+), 15 deletions(-)
+
+diff --git a/src/udev/udev-node.c b/src/udev/udev-node.c
+index 1e378ad..7774303 100644
+--- a/src/udev/udev-node.c
++++ b/src/udev/udev-node.c
+@@ -279,23 +279,22 @@ static int node_fixup(struct udev_device *dev, mode_t mode, uid_t uid, gid_t gid
+ goto out;
+ }
+
++ if ((stats.st_mode & 0777) != (mode & 0777) || stats.st_uid != uid || stats.st_gid != gid) {
++ log_debug("set permissions %s, %#o, uid=%u, gid=%u\n", devnode, mode, uid, gid);
++ chmod(devnode, mode);
++ chown(devnode, uid, gid);
++ } else {
++ log_debug("preserve permissions %s, %#o, uid=%u, gid=%u\n", devnode, mode, uid, gid);
++ }
++
+ /*
+- * Set permissions and selinux file context only on add events. We always
+- * set it on bootup (coldplug) with "trigger --action=add" for all devices
+- * and for any newly added devices (hotplug). We don't want to change it
+- * later, in case something else has applied custom settings in the meantime.
++ * Set initial selinux file context only on add events.
++ * We set the proper context on bootup (triger) or for newly
++ * added devices, but we don't change it later, in case
++ * something else has set a custom context in the meantime.
+ */
+- if (strcmp(udev_device_get_action(dev), "add") == 0) {
+- if ((stats.st_mode & 0777) != (mode & 0777) || stats.st_uid != uid || stats.st_gid != gid) {
+- log_debug("set permissions %s, %#o, uid=%u, gid=%u\n", devnode, mode, uid, gid);
+- chmod(devnode, mode);
+- chown(devnode, uid, gid);
+- } else {
+- log_debug("preserve permissions %s, %#o, uid=%u, gid=%u\n", devnode, mode, uid, gid);
+- }
+-
+- label_fix(devnode, true, false);
+- }
++ if (strcmp(udev_device_get_action(dev), "add") == 0)
++ label_fix(devnode, true, false);
+
+ /* always update timestamp when we re-use the node, like on media change events */
+ utimensat(AT_FDCWD, devnode, NULL, 0);
diff --git a/0015-systemctl-honour-inhibitors-when-shutting-down-or-en.patch b/0015-systemctl-honour-inhibitors-when-shutting-down-or-en.patch
new file mode 100644
index 0000000..84fa9f8
--- /dev/null
+++ b/0015-systemctl-honour-inhibitors-when-shutting-down-or-en.patch
@@ -0,0 +1,239 @@
+From 2100a589b3fe2f0dec0168c5231c6dc513a2409c Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Fri, 11 Jan 2013 04:24:05 +0100
+Subject: [PATCH] systemctl: honour inhibitors when shutting down or entering
+ sleep state (cherry picked from commit
+ b37844d3d72af3afbcb801476cf07c085519f392)
+
+---
+ man/systemctl.xml | 27 ++++++++++
+ src/systemctl/systemctl.c | 122 +++++++++++++++++++++++++++++++++++++++++++++-
+ 2 files changed, 147 insertions(+), 2 deletions(-)
+
+diff --git a/man/systemctl.xml b/man/systemctl.xml
+index f86952c..2f33e0c 100644
+--- a/man/systemctl.xml
++++ b/man/systemctl.xml
+@@ -191,6 +191,33 @@
+ </varlistentry>
+
+ <varlistentry>
++ <term><option>-i</option></term>
++ <term><option>--ignore-inhibitors</option></term>
++
++ <listitem><para>When system shutdown
++ or a sleep state is requested, ignore
++ inhibitor locks. Applications can
++ establish inhibitor locks to avoid
++ that certain important operations
++ (such as CD burning or suchlike) are
++ interrupted by system shutdown or a
++ sleep state. Any user may take these
++ locks and privileged users may
++ override these locks. If any locks are
++ taken, shutdown and sleep state
++ requests will normally fail
++ (regardless if privileged or not) and
++ list of active locks is
++ printed. However if
++ <option>--ignore-inhibitors</option>
++ is specified the locks are ignored and
++ not printed, and the operation
++ attempted anyway, possibly requiring
++ additional
++ privileges.</para></listitem>
++ </varlistentry>
++
++ <varlistentry>
+ <term><option>--quiet</option></term>
+ <term><option>-q</option></term>
+
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index 2ebfff8..1ebe49d 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -78,6 +78,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;
++static bool arg_ignore_inhibitors = false;
+ static bool arg_dry = false;
+ static bool arg_quiet = false;
+ static bool arg_full = false;
+@@ -1804,6 +1805,104 @@ static int reboot_with_logind(DBusConnection *bus, enum action a) {
+ #endif
+ }
+
++static int check_inhibitors(DBusConnection *bus, enum action a) {
++#ifdef HAVE_LOGIND
++ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
++ DBusMessageIter iter, sub, sub2;
++ int r;
++ unsigned c = 0;
++
++ if (arg_ignore_inhibitors)
++ return 0;
++
++ if (!on_tty())
++ return 0;
++
++ r = bus_method_call_with_reply(
++ bus,
++ "org.freedesktop.login1",
++ "/org/freedesktop/login1",
++ "org.freedesktop.login1.Manager",
++ "ListInhibitors",
++ &reply,
++ NULL,
++ DBUS_TYPE_INVALID);
++ if (r < 0)
++ /* If logind is not around, then there are no inhibitors... */
++ return 0;
++
++ if (!dbus_message_iter_init(reply, &iter) ||
++ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
++ dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_STRUCT) {
++ log_error("Failed to parse reply.");
++ return -EIO;
++ }
++
++ dbus_message_iter_recurse(&iter, &sub);
++ while (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_INVALID) {
++ const char *what, *who, *why, *mode;
++ uint32_t uid, pid;
++ _cleanup_strv_free_ char **sv = NULL;
++ _cleanup_free_ char *comm = NULL;
++
++ if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRUCT) {
++ log_error("Failed to parse reply.");
++ return -EIO;
++ }
++
++ dbus_message_iter_recurse(&sub, &sub2);
++
++ if (bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &what, true) < 0 ||
++ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &who, true) < 0 ||
++ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &why, true) < 0 ||
++ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &mode, true) < 0 ||
++ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_UINT32, &uid, true) < 0 ||
++ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_UINT32, &pid, false) < 0) {
++ log_error("Failed to parse reply.");
++ return -EIO;
++ }
++
++ if (!streq(mode, "block"))
++ goto next;
++
++ sv = strv_split(what, ":");
++ if (!sv)
++ return log_oom();
++
++ if (!strv_contains(sv,
++ a == ACTION_HALT ||
++ a == ACTION_POWEROFF ||
++ a == ACTION_REBOOT ||
++ a == ACTION_KEXEC ? "shutdown" : "sleep"))
++ goto next;
++
++ get_process_comm(pid, &comm);
++ log_warning("Operation inhibited by \"%s\" (PID %lu \"%s\", UID %lu), reason is \"%s\".", who, (unsigned long) pid, strna(comm), (unsigned long) uid, why);
++ c++;
++
++ next:
++ dbus_message_iter_next(&sub);
++ }
++
++ dbus_message_iter_recurse(&iter, &sub);
++
++ if (c <= 0)
++ return 0;
++
++ log_error("Please try again after closing inhibitors or ignore them with 'systemctl %s -i'.",
++ a == ACTION_HALT ? "halt" :
++ a == ACTION_POWEROFF ? "poweroff" :
++ a == ACTION_REBOOT ? "reboot" :
++ a == ACTION_KEXEC ? "kexec" :
++ a == ACTION_SUSPEND ? "suspend" :
++ a == ACTION_HIBERNATE ? "hibernate" : "hybrid-sleep");
++
++ return -EPERM;
++#else
++ return 0;
++#endif
++}
++
+ static int start_special(DBusConnection *bus, char **args) {
+ enum action a;
+ int r;
+@@ -1831,6 +1930,12 @@ static int start_special(DBusConnection *bus, char **args) {
+ a == ACTION_EXIT))
+ return daemon_reload(bus, args);
+
++ if (arg_force <= 0) {
++ r = check_inhibitors(bus, a);
++ if (r < 0)
++ return r;
++ }
++
+ /* first try logind, to allow authentication with polkit */
+ if (geteuid() != 0 &&
+ (a == ACTION_POWEROFF ||
+@@ -3952,6 +4057,8 @@ static int systemctl_help(void) {
+ " pending\n"
+ " --ignore-dependencies\n"
+ " When queueing a new job, ignore all its dependencies\n"
++ " -i --ignore-inhibitors\n"
++ " When shutting down or sleeping, ignore inhibitors\n"
+ " --kill-who=WHO Who to send signal to\n"
+ " -s --signal=SIGNAL Which signal to send\n"
+ " -H --host=[USER@]HOST\n"
+@@ -4162,6 +4269,7 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
+ { "full", no_argument, NULL, ARG_FULL },
+ { "fail", no_argument, NULL, ARG_FAIL },
+ { "ignore-dependencies", no_argument, NULL, ARG_IGNORE_DEPENDENCIES },
++ { "ignore-inhibitors", no_argument, NULL, 'i' },
+ { "user", no_argument, NULL, ARG_USER },
+ { "system", no_argument, NULL, ARG_SYSTEM },
+ { "global", no_argument, NULL, ARG_GLOBAL },
+@@ -4191,7 +4299,7 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
+ assert(argc >= 0);
+ assert(argv);
+
+- while ((c = getopt_long(argc, argv, "ht:p:aqfs:H:Pn:o:", options, NULL)) >= 0) {
++ while ((c = getopt_long(argc, argv, "ht:p:aqfs:H:Pn:o:i", options, NULL)) >= 0) {
+
+ switch (c) {
+
+@@ -4357,6 +4465,10 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
+ }
+ break;
+
++ case 'i':
++ arg_ignore_inhibitors = true;
++ break;
++
+ case '?':
+ return -EINVAL;
+
+@@ -5229,6 +5341,12 @@ static _noreturn_ void halt_now(enum action a) {
+ static int halt_main(DBusConnection *bus) {
+ int r;
+
++ if (arg_when <= 0 && arg_force <= 0) {
++ r = check_inhibitors(bus, arg_action);
++ if (r < 0)
++ return r;
++ }
++
+ if (geteuid() != 0) {
+ /* Try logind if we are a normal user and no special
+ * mode applies. Maybe PolicyKit allows us to shutdown
+@@ -5236,7 +5354,7 @@ static int halt_main(DBusConnection *bus) {
+
+ if (arg_when <= 0 &&
+ !arg_dry &&
+- !arg_force &&
++ arg_force <= 0 &&
+ (arg_action == ACTION_POWEROFF ||
+ arg_action == ACTION_REBOOT)) {
+ r = reboot_with_logind(bus, arg_action);
diff --git a/0016-man-localectl-s-set-keyboard-set-keymap.patch b/0016-man-localectl-s-set-keyboard-set-keymap.patch
new file mode 100644
index 0000000..10a0f07
--- /dev/null
+++ b/0016-man-localectl-s-set-keyboard-set-keymap.patch
@@ -0,0 +1,23 @@
+From 315729da525ccc5d0b3d05e3c51ada78a9d838a3 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Sun, 13 Jan 2013 11:19:37 +0100
+Subject: [PATCH] man: localectl - s/set-keyboard/set-keymap/ (cherry picked
+ from commit 735248643920eadf021526714c1eb67518086e8d)
+
+---
+ man/localectl.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/localectl.xml b/man/localectl.xml
+index 33508cf..f375bfa 100644
+--- a/man/localectl.xml
++++ b/man/localectl.xml
+@@ -194,7 +194,7 @@
+ <listitem><para>List available
+ keyboard mappings for the console,
+ useful for configuration with
+- <command>set-keyboard</command>.</para></listitem>
++ <command>set-keymap</command>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
diff --git a/0017-locale-make-sense-of-dvorak-alt-intel-X-variant-in-m.patch b/0017-locale-make-sense-of-dvorak-alt-intel-X-variant-in-m.patch
new file mode 100644
index 0000000..e6500f9
--- /dev/null
+++ b/0017-locale-make-sense-of-dvorak-alt-intel-X-variant-in-m.patch
@@ -0,0 +1,24 @@
+From b7e1e4ed4159647268a2773d3a5827e1a07ebf17 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 14 Jan 2013 18:23:18 +0100
+Subject: [PATCH] locale: make sense of "dvorak-alt-intel" X variant in mapping
+ database
+
+https://bugzilla.redhat.com/show_bug.cgi?id=873634
+(cherry picked from commit 65426b76324ea8ecf9d42812151b12e314bd2742)
+---
+ src/locale/kbd-model-map | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/locale/kbd-model-map b/src/locale/kbd-model-map
+index b0860ab..1fe9bca 100644
+--- a/src/locale/kbd-model-map
++++ b/src/locale/kbd-model-map
+@@ -53,6 +53,7 @@ de-latin1-nodeadkeys de pc105 nodeadkeys terminate:ctrl_alt_bksp
+ no no pc105 - terminate:ctrl_alt_bksp
+ bg_bds-utf8 bg,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ dvorak us pc105 dvorak terminate:ctrl_alt_bksp
++dvorak us pc105 dvorak-alt-intl terminate:ctrl_alt_bksp
+ ru ru,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll
+ cz-lat2 cz pc105 qwerty terminate:ctrl_alt_bksp
+ pl2 pl pc105 - terminate:ctrl_alt_bksp
diff --git a/0018-core-document-that-JoinControllers-might-be-ineffect.patch b/0018-core-document-that-JoinControllers-might-be-ineffect.patch
new file mode 100644
index 0000000..7f8d0ee
--- /dev/null
+++ b/0018-core-document-that-JoinControllers-might-be-ineffect.patch
@@ -0,0 +1,38 @@
+From 2dcc89840ae19fe79adf88b7a004fe6a1bb33d84 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 14 Jan 2013 20:37:12 +0100
+Subject: [PATCH] core: document that JoinControllers= might be ineffective in
+ initrd uses
+
+https://bugzilla.redhat.com/show_bug.cgi?id=875531
+(cherry picked from commit e5e991a11c7749f8cb424e99ca4206264b0cf836)
+---
+ man/systemd.conf.xml | 15 ++++++++++++++-
+ 1 file changed, 14 insertions(+), 1 deletion(-)
+
+diff --git a/man/systemd.conf.xml b/man/systemd.conf.xml
+index a6be932..da3c7f7 100644
+--- a/man/systemd.conf.xml
++++ b/man/systemd.conf.xml
+@@ -134,7 +134,20 @@
+ 'cpu,cpuacct'. Pass an empty string to
+ ensure that systemd mounts all
+ controllers in separate
+- hierarchies.</para></listitem>
++ hierarchies.</para>
++
++ <para>Note that this option is only
++ applied once, at very early boot. If
++ you use an initial RAM disk (initrd)
++ that uses systemd it might hence be
++ necessary to rebuild the initrd if
++ this option is changed, and make sure
++ the new configuration file is included
++ in it. Otherwise the initrd might
++ mount the controllers in different
++ configuration than intended, and the
++ main system cannot remount them
++ anymore.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
diff --git a/0019-service-for-Type-forking-services-ignore-exit-status.patch b/0019-service-for-Type-forking-services-ignore-exit-status.patch
new file mode 100644
index 0000000..1beec60
--- /dev/null
+++ b/0019-service-for-Type-forking-services-ignore-exit-status.patch
@@ -0,0 +1,46 @@
+From 877dc69a6783ca8d307f4f2972fe025509cf5cf8 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 14 Jan 2013 21:05:17 +0100
+Subject: [PATCH] service: for Type=forking services, ignore exit status of
+ main process depending on ExecStart's ignore setting
+
+https://bugzilla.redhat.com/show_bug.cgi?id=860464
+(cherry picked from commit fbeefb45ac1a257a0c5af975ad26d68ed6c39fda)
+---
+ src/core/service.c | 18 ++++++++++++++----
+ 1 file changed, 14 insertions(+), 4 deletions(-)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index 5db72b8..82b664f 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -2931,15 +2931,25 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
+ s->main_pid = 0;
+ exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
+
+- /* If this is not a forking service than the main
+- * process got started and hence we copy the exit
+- * status so that it is recorded both as main and as
+- * control process exit status */
+ if (s->main_command) {
++ /* If this is not a forking service than the
++ * main process got started and hence we copy
++ * the exit status so that it is recorded both
++ * as main and as control process exit
++ * status */
++
+ s->main_command->exec_status = s->main_exec_status;
+
+ if (s->main_command->ignore)
+ f = SERVICE_SUCCESS;
++ } else if (s->exec_command[SERVICE_EXEC_START]) {
++
++ /* If this is a forked process, then we should
++ * ignore the return value if this was
++ * configured for the starter process */
++
++ if (s->exec_command[SERVICE_EXEC_START]->ignore)
++ f = SERVICE_SUCCESS;
+ }
+
+ log_struct(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
diff --git a/0020-systemctl-don-t-hit-an-assert-if-we-try-to-reboot-an.patch b/0020-systemctl-don-t-hit-an-assert-if-we-try-to-reboot-an.patch
new file mode 100644
index 0000000..58e0640
--- /dev/null
+++ b/0020-systemctl-don-t-hit-an-assert-if-we-try-to-reboot-an.patch
@@ -0,0 +1,26 @@
+From 7c426f3f278ae51d39348648d399926d5f3aa8e4 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Sat, 12 Jan 2013 00:00:22 +0100
+Subject: [PATCH] systemctl: don't hit an assert if we try to reboot and dbus
+ is dead
+
+https://bugzilla.redhat.com/show_bug.cgi?id=889624
+(cherry picked from commit d255133d8edc84662d2370a77414505a800d1922)
+---
+ src/systemctl/systemctl.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index 1ebe49d..b876720 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -1762,6 +1762,9 @@ static int reboot_with_logind(DBusConnection *bus, enum action a) {
+ const char *method;
+ dbus_bool_t interactive = true;
+
++ if (!bus)
++ return -EIO;
++
+ polkit_agent_open_if_enabled();
+
+ switch (a) {
diff --git a/0021-systemctl-honour-inhibitors-only-when-running-unpriv.patch b/0021-systemctl-honour-inhibitors-only-when-running-unpriv.patch
new file mode 100644
index 0000000..dbd0076
--- /dev/null
+++ b/0021-systemctl-honour-inhibitors-only-when-running-unpriv.patch
@@ -0,0 +1,71 @@
+From 05e814d1f8bc47dddcd737ee0a6e9f25e6c1a7c7 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Sat, 12 Jan 2013 00:09:22 +0100
+Subject: [PATCH] systemctl: honour inhibitors only when running unprivileged
+ (cherry picked from commit 748ebafa7a10d4e1f168dd8ae0193124cdf4226e)
+
+---
+ src/systemctl/systemctl.c | 29 +++++++++++++++++------------
+ 1 file changed, 17 insertions(+), 12 deletions(-)
+
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index b876720..012fd56 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -1815,7 +1815,16 @@ static int check_inhibitors(DBusConnection *bus, enum action a) {
+ int r;
+ unsigned c = 0;
+
+- if (arg_ignore_inhibitors)
++ if (!bus)
++ return 0;
++
++ if (arg_ignore_inhibitors || arg_force > 0)
++ return 0;
++
++ if (arg_when > 0)
++ return 0;
++
++ if (geteuid() == 0)
+ return 0;
+
+ if (!on_tty())
+@@ -1914,6 +1923,10 @@ static int start_special(DBusConnection *bus, char **args) {
+
+ a = verb_to_action(args[0]);
+
++ r = check_inhibitors(bus, a);
++ if (r < 0)
++ return r;
++
+ if (arg_force >= 2 && geteuid() != 0) {
+ log_error("Must be root.");
+ return -EPERM;
+@@ -1933,12 +1946,6 @@ static int start_special(DBusConnection *bus, char **args) {
+ a == ACTION_EXIT))
+ return daemon_reload(bus, args);
+
+- if (arg_force <= 0) {
+- r = check_inhibitors(bus, a);
+- if (r < 0)
+- return r;
+- }
+-
+ /* first try logind, to allow authentication with polkit */
+ if (geteuid() != 0 &&
+ (a == ACTION_POWEROFF ||
+@@ -5344,11 +5351,9 @@ static _noreturn_ void halt_now(enum action a) {
+ static int halt_main(DBusConnection *bus) {
+ int r;
+
+- if (arg_when <= 0 && arg_force <= 0) {
+- r = check_inhibitors(bus, arg_action);
+- if (r < 0)
+- return r;
+- }
++ r = check_inhibitors(bus, arg_action);
++ if (r < 0)
++ return r;
+
+ if (geteuid() != 0) {
+ /* Try logind if we are a normal user and no special
diff --git a/0022-logind-ignore-non-tty-non-x11-session-when-checking-.patch b/0022-logind-ignore-non-tty-non-x11-session-when-checking-.patch
new file mode 100644
index 0000000..ad755b9
--- /dev/null
+++ b/0022-logind-ignore-non-tty-non-x11-session-when-checking-.patch
@@ -0,0 +1,31 @@
+From 063c988f6ce8a2f35ae636ed026ddfdc5a75e4d2 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Mon, 14 Jan 2013 21:40:38 +0100
+Subject: [PATCH] logind: ignore non-tty/non-x11 session when checking if there
+ are other sessions before shutting down
+
+https://bugzilla.redhat.com/show_bug.cgi?id=890827
+(cherry picked from commit 1ca04b87979b2add53ebb8a7fdf13c34fb6c2743)
+---
+ src/login/logind-dbus.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index 77a06f2..d64debe 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -979,9 +979,12 @@ static int have_multiple_sessions(
+
+ assert(m);
+
+- /* Check for other users' sessions. Greeter sessions do not count. */
++ /* Check for other users' sessions. Greeter sessions do not
++ * count, and non-login sessions do not count either. */
+ HASHMAP_FOREACH(session, m->sessions, i)
+- if (session->class == SESSION_USER && session->user->uid != uid)
++ if (session->class == SESSION_USER &&
++ (session->type == SESSION_TTY || session->type == SESSION_X11) &&
++ session->user->uid != uid)
+ return true;
+
+ return false;
diff --git a/0023-vconsole-upload-font-to-dev-tty1-and-copy-it-to-all-.patch b/0023-vconsole-upload-font-to-dev-tty1-and-copy-it-to-all-.patch
new file mode 100644
index 0000000..ed39878
--- /dev/null
+++ b/0023-vconsole-upload-font-to-dev-tty1-and-copy-it-to-all-.patch
@@ -0,0 +1,151 @@
+From 4a674e08c1972955c4a220f840531829f82b4a86 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Tue, 15 Jan 2013 02:25:56 +0100
+Subject: [PATCH] vconsole: upload font to /dev/tty1 and copy it to all
+ allocated VTs (cherry picked from commit
+ dd04aac97f9e4739152e77d9f52bb0d0da1375d6)
+
+---
+ src/vconsole/vconsole-setup.c | 74 +++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 60 insertions(+), 14 deletions(-)
+
+diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c
+index b9d8681..d8cdb7c 100644
+--- a/src/vconsole/vconsole-setup.c
++++ b/src/vconsole/vconsole-setup.c
+@@ -33,6 +33,7 @@
+ #include <sys/wait.h>
+ #include <linux/tiocl.h>
+ #include <linux/kd.h>
++#include <linux/vt.h>
+
+ #include "util.h"
+ #include "log.h"
+@@ -84,7 +85,7 @@ static int enable_utf8(int fd) {
+ return r;
+ }
+
+-static int load_keymap(const char *vc, const char *map, const char *map_toggle, bool utf8, pid_t *_pid) {
++static int keymap_load(const char *vc, const char *map, const char *map_toggle, bool utf8, pid_t *_pid) {
+ const char *args[8];
+ int i = 0;
+ pid_t pid;
+@@ -119,7 +120,7 @@ static int load_keymap(const char *vc, const char *map, const char *map_toggle,
+ return 0;
+ }
+
+-static int load_font(const char *vc, const char *font, const char *map, const char *unimap, pid_t *_pid) {
++static int font_load(const char *vc, const char *font, const char *map, const char *unimap, pid_t *_pid) {
+ const char *args[9];
+ int i = 0;
+ pid_t pid;
+@@ -157,6 +158,50 @@ static int load_font(const char *vc, const char *font, const char *map, const ch
+ return 0;
+ }
+
++static void font_copy_to_all_vts(int fd, int from_vt) {
++ struct vt_stat vts;
++ unsigned short bits;
++ int i;
++ int r;
++
++ /* get 16 bit mask of used VT numbers */
++ zero(vts);
++ r = ioctl(fd, VT_GETSTATE, &vts);
++ if (r < 0)
++ return;
++
++ bits = vts.v_state;
++ for (i = 1; i <= 16; i++) {
++ char vtname[16];
++ int vtfd;
++ struct console_font_op cfo;
++ bool used;
++
++ /* skip unused VTs */
++ used = bits & 1;
++ bits >>= 1;
++ if (!used)
++ continue;
++
++ if (i == from_vt)
++ continue;
++
++ snprintf(vtname , sizeof(vtname), "/dev/tty%i", i);
++ vtfd = open_terminal(vtname, O_RDWR|O_CLOEXEC);
++ if (vtfd < 0)
++ continue;
++
++ /* copy font from from_vt to this VT */
++ zero(cfo);
++ cfo.op = KD_FONT_OP_COPY;
++ /* the index numbers seem to start at 0 for tty1 */
++ cfo.height = from_vt - 1;
++ ioctl(vtfd, KDFONTOP, &cfo);
++
++ close_nointr_nofail(vtfd);
++ }
++}
++
+ int main(int argc, char **argv) {
+ const char *vc;
+ char *vc_keymap = NULL;
+@@ -166,8 +211,9 @@ int main(int argc, char **argv) {
+ char *vc_font_unimap = NULL;
+ int fd = -1;
+ bool utf8;
+- int r = EXIT_FAILURE;
+ pid_t font_pid = 0, keymap_pid = 0;
++ int font_copy_from_vt = 0;
++ int r = EXIT_FAILURE;
+
+ log_set_target(LOG_TARGET_AUTO);
+ log_parse_environment();
+@@ -177,8 +223,10 @@ int main(int argc, char **argv) {
+
+ if (argv[1])
+ vc = argv[1];
+- else
+- vc = "/dev/tty0";
++ else {
++ vc = "/dev/tty1";
++ font_copy_from_vt = 1;
++ }
+
+ fd = open_terminal(vc, O_RDWR|O_CLOEXEC);
+ if (fd < 0) {
+@@ -223,27 +271,25 @@ int main(int argc, char **argv) {
+ log_warning("Failed to read /etc/vconsole.conf: %s", strerror(-r));
+ }
+
+- if (r <= 0) {
+- }
+-
+- r = EXIT_FAILURE;
+-
+ if (utf8)
+ enable_utf8(fd);
+ else
+ disable_utf8(fd);
+
+-
+- if (load_keymap(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid) >= 0 &&
+- load_font(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid) >= 0)
++ r = EXIT_FAILURE;
++ if (keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid) >= 0 &&
++ font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid) >= 0)
+ r = EXIT_SUCCESS;
+
+ finish:
+ if (keymap_pid > 0)
+ wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid);
+
+- if (font_pid > 0)
++ if (font_pid > 0) {
+ wait_for_terminate_and_warn(KBD_SETFONT, font_pid);
++ if (font_copy_from_vt > 0)
++ font_copy_to_all_vts(fd, font_copy_from_vt);
++ }
+
+ free(vc_keymap);
+ free(vc_font);
diff --git a/0024-man-link-in-wiki-documentation-about-network.target.patch b/0024-man-link-in-wiki-documentation-about-network.target.patch
new file mode 100644
index 0000000..b664ded
--- /dev/null
+++ b/0024-man-link-in-wiki-documentation-about-network.target.patch
@@ -0,0 +1,41 @@
+From c2a8a0e1d59672cde78f2e85f1e53bfd5869101c Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 15 Jan 2013 04:12:53 +0100
+Subject: [PATCH] man: link in wiki documentation about network.target (cherry
+ picked from commit aa6c53bf05f27bb094735e7bc2bbfc73ac7bc2ba)
+
+---
+ man/systemd.special.xml | 10 ++++++++++
+ units/network.target | 1 +
+ 2 files changed, 11 insertions(+)
+
+diff --git a/man/systemd.special.xml b/man/systemd.special.xml
+index d3b6181..20f1c1f 100644
+--- a/man/systemd.special.xml
++++ b/man/systemd.special.xml
+@@ -414,6 +414,16 @@
+ referring to the
+ <literal>$network</literal>
+ facility.</para>
++
++ <para>This unit is supposed to
++ indicate when the network is
++ "up", but it is only very
++ losely defined what that is
++ supposed to mean. Also see <ulink
++ url="http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget">Running
++ Services After the Network is
++ up</ulink> for more
++ information.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+diff --git a/units/network.target b/units/network.target
+index 5406f4e..65fc64b 100644
+--- a/units/network.target
++++ b/units/network.target
+@@ -8,3 +8,4 @@
+ [Unit]
+ Description=Network
+ Documentation=man:systemd.special(7)
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget
diff --git a/0025-man-link-in-API-FS-documentation-from-the-wiki.patch b/0025-man-link-in-API-FS-documentation-from-the-wiki.patch
new file mode 100644
index 0000000..3786ca8
--- /dev/null
+++ b/0025-man-link-in-API-FS-documentation-from-the-wiki.patch
@@ -0,0 +1,89 @@
+From 144b31e8b0f383abab1b1010370ad658cb8c11d3 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 15 Jan 2013 05:10:50 +0100
+Subject: [PATCH] man: link in API FS documentation from the wiki (cherry
+ picked from commit 236bc7573a400b77e515c441a34419b133d11b18)
+
+---
+ man/systemd-remount-fs.service.xml | 24 +++++++++++++++---------
+ man/systemd.mount.xml | 12 ++++++++++--
+ units/systemd-remount-fs.service.in | 1 +
+ 3 files changed, 26 insertions(+), 11 deletions(-)
+
+diff --git a/man/systemd-remount-fs.service.xml b/man/systemd-remount-fs.service.xml
+index d920c0c..9fe953e 100644
+--- a/man/systemd-remount-fs.service.xml
++++ b/man/systemd-remount-fs.service.xml
+@@ -59,20 +59,26 @@
+ listed in
+ <citerefentry><refentrytitle>fstab</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ to the root file system, the <filename>/usr</filename>
+- file system and the kernel API virtual file
+- systems. This is required so that the mount options of
+- these file systems -- which are pre-mounted by the
+- kernel, the initial RAM disk, container environments
+- or system manager code -- are updated to those listed
+- in <filename>/etc/fstab</filename>. This service
+- ignores normal file systems and only changes the root
+- file system (i.e. <filename>/</filename>),
++ file system and the kernel API file systems. This is
++ required so that the mount options of these file
++ systems -- which are pre-mounted by the kernel, the
++ initial RAM disk, container environments or system
++ manager code -- are updated to those listed in
++ <filename>/etc/fstab</filename>. This service ignores
++ normal file systems and only changes the root file
++ system (i.e. <filename>/</filename>),
+ <filename>/usr</filename> and the virtual kernel API
+ file systems such as <filename>/proc</filename>,
+ <filename>/sys</filename> or
+ <filename>/dev/</filename>. This service executes no
+ operation if <filename>/etc/fstab</filename> does not
+- exist or lists no entries for the mentioned file systems.</para>
++ exist or lists no entries for the mentioned file
++ systems.</para>
++
++ <para>For a longer discussion of kernel API file
++ systems see <ulink
++ url="http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems">API
++ File Systems</ulink>.</para>
+ </refsect1>
+
+ <refsect1>
+diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
+index 78b5f52..d194083 100644
+--- a/man/systemd.mount.xml
++++ b/man/systemd.mount.xml
+@@ -102,10 +102,18 @@
+ in the file system hierarchy, a dependency between both
+ units is created automatically.</para>
+
+- <para>Mount points created at runtime independent on
+- unit files or <filename>/etc/fstab</filename> will be
++ <para>Mount points created at runtime (independently of
++ unit files or <filename>/etc/fstab</filename>) will be
+ monitored by systemd and appear like any other mount
+ unit in systemd.</para>
++
++ <para>Some file systems have special semantics as API
++ file systems for kernel-to-userspace and
++ userspace-to-userpace interfaces. Some of them may not
++ be changed via mount units, and cannot be disabled.
++ For a longer discussion see <ulink
++ url="http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems">API
++ File Systems</ulink>.</para>
+ </refsect1>
+
+ <refsect1>
+diff --git a/units/systemd-remount-fs.service.in b/units/systemd-remount-fs.service.in
+index cddb0a1..70e1a86 100644
+--- a/units/systemd-remount-fs.service.in
++++ b/units/systemd-remount-fs.service.in
+@@ -8,6 +8,7 @@
+ [Unit]
+ Description=Remount Root and Kernel File Systems
+ Documentation=man:systemd-remount-fs.service(8)
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ Conflicts=shutdown.target
+ After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-fsck-root.service
diff --git a/0026-vconsole-copy-font-to-tty1-15.patch b/0026-vconsole-copy-font-to-tty1-15.patch
new file mode 100644
index 0000000..ebbe01c
--- /dev/null
+++ b/0026-vconsole-copy-font-to-tty1-15.patch
@@ -0,0 +1,117 @@
+From be9d3099a7d5b2c4981ea8241ece207cb193b2f2 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Tue, 15 Jan 2013 15:57:12 +0100
+Subject: [PATCH] vconsole: copy font to tty1-15 (cherry picked from commit
+ d3b37e846950aab3ce940c46204b729552093df8)
+
+---
+ src/vconsole/vconsole-setup.c | 58 +++++++++++++++++++++----------------------
+ 1 file changed, 29 insertions(+), 29 deletions(-)
+
+diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c
+index d8cdb7c..679dc1a 100644
+--- a/src/vconsole/vconsole-setup.c
++++ b/src/vconsole/vconsole-setup.c
+@@ -158,47 +158,47 @@ static int font_load(const char *vc, const char *font, const char *map, const ch
+ return 0;
+ }
+
+-static void font_copy_to_all_vts(int fd, int from_vt) {
+- struct vt_stat vts;
+- unsigned short bits;
++/*
++ * A newly allocated VT uses the font from the active VT. Here
++ * we update all possibly already allocated VTs with the configured
++ * font. It also allows to restart systemd-vconsole-setup.service,
++ * to apply a new font to all VTs.
++ */
++static void font_copy_to_all_vcs(int fd) {
++ struct vt_stat vcs;
+ int i;
+ int r;
+
+- /* get 16 bit mask of used VT numbers */
+- zero(vts);
+- r = ioctl(fd, VT_GETSTATE, &vts);
++ /* get active, and 16 bit mask of used VT numbers */
++ zero(vcs);
++ r = ioctl(fd, VT_GETSTATE, &vcs);
+ if (r < 0)
+ return;
+
+- bits = vts.v_state;
+- for (i = 1; i <= 16; i++) {
+- char vtname[16];
+- int vtfd;
++ for (i = 1; i <= 15; i++) {
++ char vcname[16];
++ int vcfd;
+ struct console_font_op cfo;
+- bool used;
+
+- /* skip unused VTs */
+- used = bits & 1;
+- bits >>= 1;
+- if (!used)
++ if (i == vcs.v_active)
+ continue;
+
+- if (i == from_vt)
++ /* skip unused VTs above tty6 to avoid allocating them */
++ if (i > 6 && ((vcs.v_state >> i) & 1) == 0)
+ continue;
+
+- snprintf(vtname , sizeof(vtname), "/dev/tty%i", i);
+- vtfd = open_terminal(vtname, O_RDWR|O_CLOEXEC);
+- if (vtfd < 0)
++ snprintf(vcname , sizeof(vcname), "/dev/tty%i", i);
++ vcfd = open_terminal(vcname, O_RDWR|O_CLOEXEC);
++ if (vcfd < 0)
+ continue;
+
+- /* copy font from from_vt to this VT */
++ /* copy font from active VT, where the font was uploaded to */
+ zero(cfo);
+ cfo.op = KD_FONT_OP_COPY;
+- /* the index numbers seem to start at 0 for tty1 */
+- cfo.height = from_vt - 1;
+- ioctl(vtfd, KDFONTOP, &cfo);
++ cfo.height = vcs.v_active-1; /* tty1 == index 0 */
++ ioctl(vcfd, KDFONTOP, &cfo);
+
+- close_nointr_nofail(vtfd);
++ close_nointr_nofail(vcfd);
+ }
+ }
+
+@@ -212,7 +212,7 @@ int main(int argc, char **argv) {
+ int fd = -1;
+ bool utf8;
+ pid_t font_pid = 0, keymap_pid = 0;
+- int font_copy_from_vt = 0;
++ bool font_copy = false;
+ int r = EXIT_FAILURE;
+
+ log_set_target(LOG_TARGET_AUTO);
+@@ -224,8 +224,8 @@ int main(int argc, char **argv) {
+ if (argv[1])
+ vc = argv[1];
+ else {
+- vc = "/dev/tty1";
+- font_copy_from_vt = 1;
++ vc = "/dev/tty0";
++ font_copy = true;
+ }
+
+ fd = open_terminal(vc, O_RDWR|O_CLOEXEC);
+@@ -287,8 +287,8 @@ finish:
+
+ if (font_pid > 0) {
+ wait_for_terminate_and_warn(KBD_SETFONT, font_pid);
+- if (font_copy_from_vt > 0)
+- font_copy_to_all_vts(fd, font_copy_from_vt);
++ if (font_copy)
++ font_copy_to_all_vcs(fd);
+ }
+
+ free(vc_keymap);
diff --git a/0027-localectl-fix-typo-in-man-page.patch b/0027-localectl-fix-typo-in-man-page.patch
new file mode 100644
index 0000000..edf2c9c
--- /dev/null
+++ b/0027-localectl-fix-typo-in-man-page.patch
@@ -0,0 +1,24 @@
+From be50fc0741345eceb235d866660aaf5e36d71592 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 15 Jan 2013 16:27:11 +0100
+Subject: [PATCH] localectl: fix typo in man page
+
+https://bugs.freedesktop.org/show_bug.cgi?id=59247
+(cherry picked from commit 8bae5e6abeca9ec2beb6d6e6b14a558283e895c9)
+---
+ man/localectl.xml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/localectl.xml b/man/localectl.xml
+index f375bfa..73bff98 100644
+--- a/man/localectl.xml
++++ b/man/localectl.xml
+@@ -183,7 +183,7 @@
+ mapping of X11, after converting it to
+ the closest matching X11 keyboard
+ mapping. Use
+- <command>list-locales</command> for a
++ <command>list-keymaps</command> for a
+ list of available keyboard mappings
+ (see below).</para></listitem>
+ </varlistentry>
diff --git a/0028-man-correct-order-of-precedence-for-fstab-units.patch b/0028-man-correct-order-of-precedence-for-fstab-units.patch
new file mode 100644
index 0000000..e3f4252
--- /dev/null
+++ b/0028-man-correct-order-of-precedence-for-fstab-units.patch
@@ -0,0 +1,33 @@
+From a4f80b965230e39a47d239e7cc72f40ddd837b71 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 15 Jan 2013 18:10:11 +0100
+Subject: [PATCH] man: correct order of precedence for fstab units (cherry
+ picked from commit c32247e9d7c4231d4f731c9103d90b4e2e1682a2)
+
+---
+ man/systemd.mount.xml | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
+index d194083..749d426 100644
+--- a/man/systemd.mount.xml
++++ b/man/systemd.mount.xml
+@@ -153,8 +153,16 @@
+ <literal>h</literal>, <literal>ms</literal>.</para>
+
+ <para>If a mount point is configured in both
+- <filename>/etc/fstab</filename> and a unit file, the
+- configuration in the latter takes precedence.</para>
++ <filename>/etc/fstab</filename> and a unit file that
++ is stored below <filename>/usr</filename> the former
++ will take precedence. If the unit file is stored below
++ <filename>/etc</filename> it will take
++ precedence. This means: native unit files take
++ precedence over traditional configuration files, but
++ this is superseded by the rule that configuration in
++ <filename>/etc</filename> will always take precedence
++ over configuration in
++ <filename>/usr</filename>.</para>
+ </refsect1>
+
+ <refsect1>
diff --git a/0029-units-add-reference-to-new-wiki-page-to-all-api-moun.patch b/0029-units-add-reference-to-new-wiki-page-to-all-api-moun.patch
new file mode 100644
index 0000000..ca1c653
--- /dev/null
+++ b/0029-units-add-reference-to-new-wiki-page-to-all-api-moun.patch
@@ -0,0 +1,113 @@
+From b1a7605696035acc9df7e49b4c506c79a294b8b0 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 15 Jan 2013 18:13:34 +0100
+Subject: [PATCH] units: add reference to new wiki page to all api mount units
+ (cherry picked from commit 25ed795892f309feecf048d4b5e66e5447b9c4ad)
+
+---
+ units/dev-hugepages.mount | 1 +
+ units/dev-mqueue.mount | 1 +
+ units/proc-sys-fs-binfmt_misc.automount | 1 +
+ units/proc-sys-fs-binfmt_misc.mount | 1 +
+ units/sys-fs-fuse-connections.mount | 1 +
+ units/sys-kernel-config.mount | 1 +
+ units/sys-kernel-debug.mount | 1 +
+ units/tmp.mount | 1 +
+ 8 files changed, 8 insertions(+)
+
+diff --git a/units/dev-hugepages.mount b/units/dev-hugepages.mount
+index 9381167..d711fae 100644
+--- a/units/dev-hugepages.mount
++++ b/units/dev-hugepages.mount
+@@ -8,6 +8,7 @@
+ [Unit]
+ Description=Huge Pages File System
+ Documentation=https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ Before=sysinit.target
+ ConditionPathExists=/sys/kernel/mm/hugepages
+diff --git a/units/dev-mqueue.mount b/units/dev-mqueue.mount
+index 5786bb1..5c11ca7 100644
+--- a/units/dev-mqueue.mount
++++ b/units/dev-mqueue.mount
+@@ -8,6 +8,7 @@
+ [Unit]
+ Description=POSIX Message Queue File System
+ Documentation=man:mq_overview(7)
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ Before=sysinit.target
+ ConditionPathExists=/proc/sys/fs/mqueue
+diff --git a/units/proc-sys-fs-binfmt_misc.automount b/units/proc-sys-fs-binfmt_misc.automount
+index 7fd5afe..6be3893 100644
+--- a/units/proc-sys-fs-binfmt_misc.automount
++++ b/units/proc-sys-fs-binfmt_misc.automount
+@@ -8,6 +8,7 @@
+ [Unit]
+ Description=Arbitrary Executable File Formats File System Automount Point
+ Documentation=https://www.kernel.org/doc/Documentation/binfmt_misc.txt
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ Before=sysinit.target
+ ConditionPathExists=/proc/sys/fs/binfmt_misc/
+diff --git a/units/proc-sys-fs-binfmt_misc.mount b/units/proc-sys-fs-binfmt_misc.mount
+index c64c849..8c7c386 100644
+--- a/units/proc-sys-fs-binfmt_misc.mount
++++ b/units/proc-sys-fs-binfmt_misc.mount
+@@ -8,6 +8,7 @@
+ [Unit]
+ Description=Arbitrary Executable File Formats File System
+ Documentation=https://www.kernel.org/doc/Documentation/binfmt_misc.txt
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+
+ [Mount]
+diff --git a/units/sys-fs-fuse-connections.mount b/units/sys-fs-fuse-connections.mount
+index 9269ea4..ebd93e2 100644
+--- a/units/sys-fs-fuse-connections.mount
++++ b/units/sys-fs-fuse-connections.mount
+@@ -8,6 +8,7 @@
+ [Unit]
+ Description=FUSE Control File System
+ Documentation=https://www.kernel.org/doc/Documentation/filesystems/fuse.txt
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ ConditionPathExists=/sys/fs/fuse/connections
+ After=systemd-modules-load.service
+diff --git a/units/sys-kernel-config.mount b/units/sys-kernel-config.mount
+index e7cd490..020101c 100644
+--- a/units/sys-kernel-config.mount
++++ b/units/sys-kernel-config.mount
+@@ -8,6 +8,7 @@
+ [Unit]
+ Description=Configuration File System
+ Documentation=https://www.kernel.org/doc/Documentation/filesystems/configfs/configfs.txt
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ ConditionPathExists=/sys/kernel/config
+ After=systemd-modules-load.service
+diff --git a/units/sys-kernel-debug.mount b/units/sys-kernel-debug.mount
+index 8b1e33e..5369728 100644
+--- a/units/sys-kernel-debug.mount
++++ b/units/sys-kernel-debug.mount
+@@ -8,6 +8,7 @@
+ [Unit]
+ Description=Debug File System
+ Documentation=https://www.kernel.org/doc/Documentation/filesystems/debugfs.txt
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ ConditionPathExists=/sys/kernel/debug
+ Before=sysinit.target
+diff --git a/units/tmp.mount b/units/tmp.mount
+index 94c41c2..99a3ba3 100644
+--- a/units/tmp.mount
++++ b/units/tmp.mount
+@@ -8,6 +8,7 @@
+ [Unit]
+ Description=Temporary Directory
+ Documentation=man:hier(7)
++Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
+ DefaultDependencies=no
+ Conflicts=umount.target
+ Before=local-fs.target umount.target
diff --git a/0030-man-add-reference-to-wiki-doc-from-DefaultController.patch b/0030-man-add-reference-to-wiki-doc-from-DefaultController.patch
new file mode 100644
index 0000000..cd5e60c
--- /dev/null
+++ b/0030-man-add-reference-to-wiki-doc-from-DefaultController.patch
@@ -0,0 +1,47 @@
+From fd5b2125c19d5c57f4f9338327637025cb46869b Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 15 Jan 2013 18:17:53 +0100
+Subject: [PATCH] man: add reference to wiki doc from DefaultControllers=
+ setting (cherry picked from commit b02a01dc08317e961545521359f963752bd2c206)
+
+---
+ man/systemd.conf.xml | 19 ++++++++++++++-----
+ 1 file changed, 14 insertions(+), 5 deletions(-)
+
+diff --git a/man/systemd.conf.xml b/man/systemd.conf.xml
+index da3c7f7..d0164ca 100644
+--- a/man/systemd.conf.xml
++++ b/man/systemd.conf.xml
+@@ -114,7 +114,16 @@
+ of controller names. Pass an empty
+ string to ensure that systemd does not
+ touch any hierarchies but its
+- own.</para></listitem>
++ own.</para>
++
++ <para>Note that the default value of
++ 'cpu' will make realtime scheduling
++ unavailable to system services. See
++ <ulink
++ url="http://www.freedesktop.org/wiki/Software/systemd/MyServiceCantGetRealtime">My
++ Service Can't Get Realtime!</ulink>
++ for more
++ information.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+@@ -144,10 +153,10 @@
+ this option is changed, and make sure
+ the new configuration file is included
+ in it. Otherwise the initrd might
+- mount the controllers in different
+- configuration than intended, and the
+- main system cannot remount them
+- anymore.</para></listitem>
++ mount the controller hierachies in a
++ different configuration than intended,
++ and the main system cannot remount
++ them anymore.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
diff --git a/0031-vconsole-use-dev-vcsa1-15-to-check-for-allocated-VTs.patch b/0031-vconsole-use-dev-vcsa1-15-to-check-for-allocated-VTs.patch
new file mode 100644
index 0000000..26b3d6d
--- /dev/null
+++ b/0031-vconsole-use-dev-vcsa1-15-to-check-for-allocated-VTs.patch
@@ -0,0 +1,30 @@
+From ad230436c8726236a9106a77c07e9e9c1ff0687a Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Tue, 15 Jan 2013 20:32:57 +0100
+Subject: [PATCH] vconsole: use /dev/vcsa1-15 to check for allocated VTs
+ (cherry picked from commit 10ffbc99afed12bd59bcf91d8242ea65b04eec40)
+
+---
+ src/vconsole/vconsole-setup.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c
+index 679dc1a..6501705 100644
+--- a/src/vconsole/vconsole-setup.c
++++ b/src/vconsole/vconsole-setup.c
+@@ -183,11 +183,12 @@ static void font_copy_to_all_vcs(int fd) {
+ if (i == vcs.v_active)
+ continue;
+
+- /* skip unused VTs above tty6 to avoid allocating them */
+- if (i > 6 && ((vcs.v_state >> i) & 1) == 0)
++ /* skip non-allocated ttys */
++ snprintf(vcname, sizeof(vcname), "/dev/vcs%i", i);
++ if (access(vcname, F_OK) < 0)
+ continue;
+
+- snprintf(vcname , sizeof(vcname), "/dev/tty%i", i);
++ snprintf(vcname, sizeof(vcname), "/dev/tty%i", i);
+ vcfd = open_terminal(vcname, O_RDWR|O_CLOEXEC);
+ if (vcfd < 0)
+ continue;
diff --git a/0032-core-use-correct-argument-of-type-JobResult.patch b/0032-core-use-correct-argument-of-type-JobResult.patch
new file mode 100644
index 0000000..caa607e
--- /dev/null
+++ b/0032-core-use-correct-argument-of-type-JobResult.patch
@@ -0,0 +1,23 @@
+From 301f9bdc127a2c0a6e974be049c3fbd81324ac93 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta at redhat.com>
+Date: Fri, 11 Jan 2013 17:06:22 +0100
+Subject: [PATCH] core: use correct argument of type JobResult (cherry picked
+ from commit 38c888a4049438f2521edf38d55f937b53d17a9e)
+
+---
+ src/core/job.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/core/job.c b/src/core/job.c
+index 5ff95f5..31ab118 100644
+--- a/src/core/job.c
++++ b/src/core/job.c
+@@ -821,7 +821,7 @@ int job_finish_and_invalidate(Job *j, JobResult result, bool recursive) {
+ log_struct(LOG_NOTICE,
+ "UNIT=%s", u->id,
+ "JOB_TYPE=%s", job_type_to_string(t),
+- "JOB_RESULT=%s", job_result_to_string(t),
++ "JOB_RESULT=%s", job_result_to_string(result),
+ "Job %s/%s failed with result '%s'.",
+ u->id,
+ job_type_to_string(t),
diff --git a/0033-journalctl-quit-on-I-O-error.patch b/0033-journalctl-quit-on-I-O-error.patch
new file mode 100644
index 0000000..f141bf1
--- /dev/null
+++ b/0033-journalctl-quit-on-I-O-error.patch
@@ -0,0 +1,39 @@
+From d28e2e3da2127f86661b7f86bf6c232740319dc4 Mon Sep 17 00:00:00 2001
+From: David Herrmann <dh.herrmann at googlemail.com>
+Date: Sun, 13 Jan 2013 12:28:38 +0100
+Subject: [PATCH] journalctl: quit on I/O error
+
+This makes journalctl quit on ferror() conditions on stdout. It fixes an
+annoying bug if you pipe its output through 'less' and press 'q'. Without
+this fix journalctl will continue reading all journal data until EOF which
+can take quite some time. For instance on my machine:
+
+ david-nb ~ # time journalctl | wc -l
+ 327240
+
+ real 1m13.039s
+ user 1m0.217s
+ sys 0m10.467s
+
+However, expected behavior is journalctl to quit when its pager closed the
+output pipe.
+
+Signed-off-by: David Herrmann <dh.herrmann at googlemail.com>
+(cherry picked from commit 244692cbfb46df5ff79d07da8fb848a1165bd2fb)
+---
+ src/journal/journalctl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
+index a74d43b..45543a5 100644
+--- a/src/journal/journalctl.c
++++ b/src/journal/journalctl.c
+@@ -1077,7 +1077,7 @@ int main(int argc, char *argv[]) {
+ arg_catalog * OUTPUT_CATALOG;
+
+ r = output_journal(stdout, j, arg_output, 0, flags);
+- if (r < 0)
++ if (r < 0 || ferror(stdout))
+ goto finish;
+
+ need_seek = true;
diff --git a/0034-core-do-not-make-sockets-dependent-on-lo.patch b/0034-core-do-not-make-sockets-dependent-on-lo.patch
new file mode 100644
index 0000000..5c6eb1a
--- /dev/null
+++ b/0034-core-do-not-make-sockets-dependent-on-lo.patch
@@ -0,0 +1,25 @@
+From 7aa63b43ffac09bc97cf05dd1b5370667d17fde2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20Bartoszkiewicz?= <mbartoszkiewicz at gmail.com>
+Date: Sat, 12 Jan 2013 23:05:52 +0100
+Subject: [PATCH] core: do not make sockets dependent on lo
+
+/sys/subsystem/net/devices/lo is never considered active, so sockets
+with BindToDevice=lo would never be activated.
+(cherry picked from commit 7d0c710d72f8a6e5c6909c65700aa088c53aebc6)
+---
+ src/core/socket.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/core/socket.c b/src/core/socket.c
+index fcbcdbe..d755040 100644
+--- a/src/core/socket.c
++++ b/src/core/socket.c
+@@ -308,7 +308,7 @@ static int socket_add_device_link(Socket *s) {
+
+ assert(s);
+
+- if (!s->bind_to_device)
++ if (!s->bind_to_device || streq(s->bind_to_device, "lo"))
+ return 0;
+
+ if (asprintf(&t, "/sys/subsystem/net/devices/%s", s->bind_to_device) < 0)
diff --git a/0035-load-fragment-replace-specifiers-in-path-unit-s-Unit.patch b/0035-load-fragment-replace-specifiers-in-path-unit-s-Unit.patch
new file mode 100644
index 0000000..56fe185
--- /dev/null
+++ b/0035-load-fragment-replace-specifiers-in-path-unit-s-Unit.patch
@@ -0,0 +1,45 @@
+From e01cec2c1a88aa7d110e41e7deb717bb71d04db0 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 15 Jan 2013 21:37:17 +0100
+Subject: [PATCH] load-fragment: replace specifiers in path unit's Unit=
+ setting (cherry picked from commit 858c33bf6002bcdbea185ddedde8f8d660afc731)
+
+---
+ src/core/load-fragment.c | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
+index e35fdbc..0869d4f 100644
+--- a/src/core/load-fragment.c
++++ b/src/core/load-fragment.c
+@@ -1287,6 +1287,7 @@ int config_parse_path_unit(
+ int r;
+ DBusError error;
+ Unit *u;
++ _cleanup_free_ char *p = NULL;
+
+ assert(filename);
+ assert(lvalue);
+@@ -1295,13 +1296,18 @@ int config_parse_path_unit(
+
+ dbus_error_init(&error);
+
+- if (endswith(rvalue, ".path")) {
+- log_error("[%s:%u] Unit cannot be of type path, ignoring: %s", filename, line, rvalue);
++ p = unit_name_printf(u, rvalue);
++ if (!p)
++ return log_oom();
++
++ if (endswith(p, ".path")) {
++ log_error("[%s:%u] Unit cannot be of type path, ignoring: %s", filename, line, p);
+ return 0;
+ }
+
+- if ((r = manager_load_unit(UNIT(t)->manager, rvalue, NULL, &error, &u)) < 0) {
+- log_error("[%s:%u] Failed to load unit %s, ignoring: %s", filename, line, rvalue, bus_error(&error, r));
++ r = manager_load_unit(UNIT(t)->manager, p, NULL, &error, &u);
++ if (r < 0) {
++ log_error("[%s:%u] Failed to load unit %s, ignoring: %s", filename, line, p, bus_error(&error, r));
+ dbus_error_free(&error);
+ return 0;
+ }
diff --git a/0036-load-fragment-fix-bad-memory-access.patch b/0036-load-fragment-fix-bad-memory-access.patch
new file mode 100644
index 0000000..1b28487
--- /dev/null
+++ b/0036-load-fragment-fix-bad-memory-access.patch
@@ -0,0 +1,23 @@
+From 856dc37041d98901943ba8a6e6bc9c26cc278b53 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Tue, 15 Jan 2013 21:45:37 +0100
+Subject: [PATCH] load-fragment: fix bad memory access (cherry picked from
+ commit cd7409576d36baeb4ccc93471d3bd9d72a436d59)
+
+---
+ src/core/load-fragment.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
+index 0869d4f..e2ea003 100644
+--- a/src/core/load-fragment.c
++++ b/src/core/load-fragment.c
+@@ -1296,7 +1296,7 @@ int config_parse_path_unit(
+
+ dbus_error_init(&error);
+
+- p = unit_name_printf(u, rvalue);
++ p = unit_name_printf(UNIT(t), rvalue);
+ if (!p)
+ return log_oom();
+
diff --git a/0037-shutdown-in-the-final-umount-loop-don-t-use-MNT_FORC.patch b/0037-shutdown-in-the-final-umount-loop-don-t-use-MNT_FORC.patch
new file mode 100644
index 0000000..025a3c7
--- /dev/null
+++ b/0037-shutdown-in-the-final-umount-loop-don-t-use-MNT_FORC.patch
@@ -0,0 +1,33 @@
+From c8b64923a3124c80654b46dfa5b594257dde807b Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Wed, 16 Jan 2013 03:51:56 +0100
+Subject: [PATCH] shutdown: in the final umount loop don't use MNT_FORCE
+
+MNT_FORCE is honoured by NFS and FUSE and allows unmounting of the FS
+even if consumers still use it. For our brute-force loop we rely on
+EBUSY being reported as long as a file system is still used by a
+loopback device or suchlike. Hence, drop MNT_FORCE to make EBUSY
+reliable.
+(cherry picked from commit 0c08f5cde749bd2818475e487109cd0d413452df)
+---
+ src/core/umount.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/src/core/umount.c b/src/core/umount.c
+index 96232d3..c7b6cee 100644
+--- a/src/core/umount.c
++++ b/src/core/umount.c
+@@ -442,9 +442,11 @@ static int mount_points_list_umount(MountPoint **head, bool *changed, bool log_e
+ )
+ continue;
+
+- /* Trying to umount. Forcing to umount if busy (only for NFS mounts) */
++ /* Trying to umount. We don't force here since we rely
++ * on busy NFS and FUSE file systems to return EBUSY
++ * until we closed everything on top of them. */
+ log_info("Unmounting %s.", m->path);
+- if (umount2(m->path, MNT_FORCE) == 0) {
++ if (umount2(m->path, 0) == 0) {
+ if (changed)
+ *changed = true;
+
diff --git a/0038-shutdown-ignore-loop-devices-without-a-backing-file.patch b/0038-shutdown-ignore-loop-devices-without-a-backing-file.patch
new file mode 100644
index 0000000..fd36ae8
--- /dev/null
+++ b/0038-shutdown-ignore-loop-devices-without-a-backing-file.patch
@@ -0,0 +1,35 @@
+From 60009bdb242ea49e4e64311c67ee840993ffb557 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Wed, 16 Jan 2013 04:35:54 +0100
+Subject: [PATCH] shutdown: ignore loop devices without a backing file (cherry
+ picked from commit bdffb521d01a2e2bc342154d74cb519755c52c25)
+
+---
+ src/core/umount.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/src/core/umount.c b/src/core/umount.c
+index c7b6cee..f0f2711 100644
+--- a/src/core/umount.c
++++ b/src/core/umount.c
+@@ -233,6 +233,7 @@ static int loopback_list_get(MountPoint **head) {
+ udev_list_entry_foreach(item, first) {
+ MountPoint *lb;
+ struct udev_device *d;
++ const char *backing;
+ char *loop;
+ const char *dn;
+
+@@ -241,6 +242,12 @@ static int loopback_list_get(MountPoint **head) {
+ goto finish;
+ }
+
++ backing = udev_device_get_sysattr_value(d, "loop/backing_file");
++ if (!backing) {
++ udev_device_unref(d);
++ continue;
++ }
++
+ if (!(dn = udev_device_get_devnode(d))) {
+ udev_device_unref(d);
+ continue;
diff --git a/0039-systemctl-loginctl-cgls-do-not-ellipsize-cgroup-memb.patch b/0039-systemctl-loginctl-cgls-do-not-ellipsize-cgroup-memb.patch
new file mode 100644
index 0000000..bc61f92
--- /dev/null
+++ b/0039-systemctl-loginctl-cgls-do-not-ellipsize-cgroup-memb.patch
@@ -0,0 +1,777 @@
+From cc85665351f6f68b6190e37dbb3704ce28d1a55b Mon Sep 17 00:00:00 2001
+From: Lukas Nykryn <lnykryn at redhat.com>
+Date: Mon, 14 Jan 2013 18:16:50 +0100
+Subject: [PATCH] systemctl,loginctl,cgls: do not ellipsize cgroup members when
+ --full is specified
+
+New file output.h with output flags and modes.
+
+--full parameter also for cgls and loginctl.
+
+Include 'all' parameter in flags (show_cgroup_by_path, show_cgroup,
+show_cgroup_and_extra, show_cgroup_and_extra_by_spec).
+
+get_process_cmdline with max_length == 0 will not ellipsize output.
+
+Replace LINE_MAX with 0 in some calls of get_process_cmdline.
+
+[zj: Default to --full when under pager for clgs.
+ Drop '-f' since it wasn't documented and didn't actually work.
+ Reindent a bit.
+]
+(cherry picked from commit 9bdbc2e2ec523dbefe1c1c7e164b5544aff0b185)
+---
+ Makefile.am | 3 +-
+ man/loginctl.xml | 7 ++++
+ man/systemctl.xml | 2 +-
+ man/systemd-cgls.xml | 8 +++++
+ src/cgls/cgls.c | 34 +++++++++++++++----
+ src/core/selinux-access.c | 4 +--
+ src/journal/coredump.c | 2 +-
+ src/journal/journald-server.c | 2 +-
+ src/login/loginctl.c | 24 +++++++++++--
+ src/shared/cgroup-show.c | 49 ++++++++++++++-------------
+ src/shared/cgroup-show.h | 10 +++---
+ src/shared/logs-show.h | 23 +------------
+ src/shared/output-mode.h | 44 ++++++++++++++++++++++++
+ src/shared/util.c | 78 +++++++++++++++++++++++++------------------
+ src/systemctl/systemctl.c | 14 ++++----
+ 15 files changed, 201 insertions(+), 103 deletions(-)
+ create mode 100644 src/shared/output-mode.h
+
+diff --git a/Makefile.am b/Makefile.am
+index 28d8d44..1413073 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -810,7 +810,8 @@ libsystemd_shared_la_SOURCES = \
+ src/shared/time-dst.c \
+ src/shared/time-dst.h \
+ src/shared/calendarspec.c \
+- src/shared/calendarspec.h
++ src/shared/calendarspec.h \
++ src/shared/output-mode.h
+
+ libsystemd_shared_la_LIBADD = libsystemd-daemon.la
+
+diff --git a/man/loginctl.xml b/man/loginctl.xml
+index 5dbc1f6..8a20d18 100644
+--- a/man/loginctl.xml
++++ b/man/loginctl.xml
+@@ -110,6 +110,13 @@
+ set or not.</para></listitem>
+ </varlistentry>
+
++ <varlistentry>
++ <term><option>--full</option></term>
++
++ <listitem><para>Do not ellipsize cgroup
++ members.</para>
++ </listitem>
++ </varlistentry>
+
+ <varlistentry>
+ <term><option>--no-pager</option></term>
+diff --git a/man/systemctl.xml b/man/systemctl.xml
+index 2f33e0c..48c5a1c 100644
+--- a/man/systemctl.xml
++++ b/man/systemctl.xml
+@@ -156,7 +156,7 @@
+ <term><option>--full</option></term>
+
+ <listitem><para>Do not ellipsize unit
+- names and truncate unit descriptions
++ names, cgroup members, and truncate unit descriptions
+ in the output of
+ <command>list-units</command> and
+ <command>list-jobs</command>.</para></listitem>
+diff --git a/man/systemd-cgls.xml b/man/systemd-cgls.xml
+index 4b6ee93..b280b87 100644
+--- a/man/systemd-cgls.xml
++++ b/man/systemd-cgls.xml
+@@ -111,6 +111,14 @@
+ </varlistentry>
+
+ <varlistentry>
++ <term><option>--full</option></term>
++
++ <listitem><para>Do not ellipsize cgroup
++ members.</para>
++ </listitem>
++ </varlistentry>
++
++ <varlistentry>
+ <term><option>-k</option></term>
+
+ <listitem><para>Include kernel
+diff --git a/src/cgls/cgls.c b/src/cgls/cgls.c
+index cfb728b..a05f979 100644
+--- a/src/cgls/cgls.c
++++ b/src/cgls/cgls.c
+@@ -33,10 +33,12 @@
+ #include "util.h"
+ #include "pager.h"
+ #include "build.h"
++#include "output-mode.h"
+
+ static bool arg_no_pager = false;
+ static bool arg_kernel_threads = false;
+ static bool arg_all = false;
++static int arg_full = -1;
+
+ static void help(void) {
+
+@@ -46,6 +48,7 @@ static void help(void) {
+ " --version Show package version\n"
+ " --no-pager Do not pipe output into a pager\n"
+ " -a --all Show all groups, including empty\n"
++ " --full Do not ellipsize output\n"
+ " -k Include kernel threads in output\n",
+ program_invocation_short_name);
+ }
+@@ -54,7 +57,8 @@ static int parse_argv(int argc, char *argv[]) {
+
+ enum {
+ ARG_NO_PAGER = 0x100,
+- ARG_VERSION
++ ARG_VERSION,
++ ARG_FULL,
+ };
+
+ static const struct option options[] = {
+@@ -62,6 +66,7 @@ static int parse_argv(int argc, char *argv[]) {
+ { "version", no_argument, NULL, ARG_VERSION },
+ { "no-pager", no_argument, NULL, ARG_NO_PAGER },
+ { "all", no_argument, NULL, 'a' },
++ { "full", no_argument, NULL, ARG_FULL },
+ { NULL, 0, NULL, 0 }
+ };
+
+@@ -91,6 +96,10 @@ static int parse_argv(int argc, char *argv[]) {
+ arg_all = true;
+ break;
+
++ case ARG_FULL:
++ arg_full = true;
++ break;
++
+ case 'k':
+ arg_kernel_threads = true;
+ break;
+@@ -109,6 +118,7 @@ static int parse_argv(int argc, char *argv[]) {
+
+ int main(int argc, char *argv[]) {
+ int r = 0, retval = EXIT_FAILURE;
++ int output_flags;
+
+ log_parse_environment();
+ log_open();
+@@ -121,8 +131,17 @@ int main(int argc, char *argv[]) {
+ goto finish;
+ }
+
+- if (!arg_no_pager)
+- pager_open();
++ if (!arg_no_pager) {
++ r = pager_open();
++ if (r > 0) {
++ if (arg_full == -1)
++ arg_full = true;
++ }
++ }
++
++ output_flags =
++ arg_all * OUTPUT_SHOW_ALL |
++ (arg_full > 0) * OUTPUT_FULL_WIDTH;
+
+ if (optind < argc) {
+ unsigned i;
+@@ -131,7 +150,8 @@ int main(int argc, char *argv[]) {
+ int q;
+ printf("%s:\n", argv[i]);
+
+- q = show_cgroup_by_path(argv[i], NULL, 0, arg_kernel_threads, arg_all);
++ q = show_cgroup_by_path(argv[i], NULL, 0,
++ arg_kernel_threads, output_flags);
+ if (q < 0)
+ r = q;
+ }
+@@ -147,7 +167,8 @@ int main(int argc, char *argv[]) {
+
+ if (path_startswith(p, "/sys/fs/cgroup")) {
+ printf("Working Directory %s:\n", p);
+- r = show_cgroup_by_path(p, NULL, 0, arg_kernel_threads, arg_all);
++ r = show_cgroup_by_path(p, NULL, 0,
++ arg_kernel_threads, output_flags);
+ } else {
+ char _cleanup_free_ *root = NULL;
+ const char *t = NULL;
+@@ -162,7 +183,8 @@ int main(int argc, char *argv[]) {
+ t = root[0] ? root : "/";
+ }
+
+- r = show_cgroup(SYSTEMD_CGROUP_CONTROLLER, t, NULL, 0, arg_kernel_threads, arg_all);
++ r = show_cgroup(SYSTEMD_CGROUP_CONTROLLER, t, NULL, 0,
++ arg_kernel_threads, output_flags);
+ }
+ }
+
+diff --git a/src/core/selinux-access.c b/src/core/selinux-access.c
+index 6dfe8b4..b933698 100644
+--- a/src/core/selinux-access.c
++++ b/src/core/selinux-access.c
+@@ -134,7 +134,7 @@ static int bus_get_audit_data(
+ if (r < 0)
+ return r;
+
+- r = get_process_cmdline(pid, LINE_MAX, true, &audit->cmdline);
++ r = get_process_cmdline(pid, 0, true, &audit->cmdline);
+ if (r < 0)
+ return r;
+
+@@ -280,7 +280,7 @@ static int get_audit_data(
+ if (r < 0)
+ return r;
+
+- r = get_process_cmdline(ucred.pid, LINE_MAX, true, &audit->cmdline);
++ r = get_process_cmdline(ucred.pid, 0, true, &audit->cmdline);
+ if (r < 0)
+ return r;
+
+diff --git a/src/journal/coredump.c b/src/journal/coredump.c
+index a507fc6..c989be9 100644
+--- a/src/journal/coredump.c
++++ b/src/journal/coredump.c
+@@ -205,7 +205,7 @@ int main(int argc, char* argv[]) {
+ IOVEC_SET_STRING(iovec[j++], core_exe);
+ }
+
+- if (get_process_cmdline(pid, LINE_MAX, false, &t) >= 0) {
++ if (get_process_cmdline(pid, 0, false, &t) >= 0) {
+ core_cmdline = strappend("COREDUMP_CMDLINE=", t);
+ free(t);
+
+diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
+index 43ffe75..d3dec54 100644
+--- a/src/journal/journald-server.c
++++ b/src/journal/journald-server.c
+@@ -572,7 +572,7 @@ static void dispatch_message_real(
+ IOVEC_SET_STRING(iovec[n++], exe);
+ }
+
+- r = get_process_cmdline(ucred->pid, LINE_MAX, false, &t);
++ r = get_process_cmdline(ucred->pid, 0, false, &t);
+ if (r >= 0) {
+ cmdline = strappend("_CMDLINE=", t);
+ free(t);
+diff --git a/src/login/loginctl.c b/src/login/loginctl.c
+index e2b33a6..0e57e08 100644
+--- a/src/login/loginctl.c
++++ b/src/login/loginctl.c
+@@ -40,6 +40,7 @@
+
+ static char **arg_property = NULL;
+ static bool arg_all = false;
++static bool arg_full = false;
+ static bool arg_no_pager = false;
+ static const char *arg_kill_who = NULL;
+ static int arg_signal = SIGTERM;
+@@ -402,6 +403,9 @@ static void print_session_status_info(SessionStatusInfo *i) {
+
+ if (i->default_control_group) {
+ unsigned c;
++ int output_flags =
++ arg_all * OUTPUT_SHOW_ALL |
++ arg_full * OUTPUT_FULL_WIDTH;
+
+ printf("\t CGroup: %s\n", i->default_control_group);
+
+@@ -412,7 +416,10 @@ static void print_session_status_info(SessionStatusInfo *i) {
+ else
+ c = 0;
+
+- show_cgroup_and_extra_by_spec(i->default_control_group, "\t\t ", c, false, arg_all, &i->leader, i->leader > 0 ? 1 : 0);
++ show_cgroup_and_extra_by_spec(i->default_control_group,
++ "\t\t ", c, false, &i->leader,
++ i->leader > 0 ? 1 : 0,
++ output_flags);
+ }
+ }
+ }
+@@ -454,6 +461,9 @@ static void print_user_status_info(UserStatusInfo *i) {
+
+ if (i->default_control_group) {
+ unsigned c;
++ int output_flags =
++ arg_all * OUTPUT_SHOW_ALL |
++ arg_full * OUTPUT_FULL_WIDTH;
+
+ printf("\t CGroup: %s\n", i->default_control_group);
+
+@@ -464,7 +474,8 @@ static void print_user_status_info(UserStatusInfo *i) {
+ else
+ c = 0;
+
+- show_cgroup_by_path(i->default_control_group, "\t\t ", c, false, arg_all);
++ show_cgroup_by_path(i->default_control_group, "\t\t ",
++ c, false, output_flags);
+ }
+ }
+ }
+@@ -1323,6 +1334,7 @@ static int help(void) {
+ " -p --property=NAME Show only properties by this name\n"
+ " -a --all Show all properties, including empty ones\n"
+ " --kill-who=WHO Who to send signal to\n"
++ " --full Do not ellipsize output\n"
+ " -s --signal=SIGNAL Which signal to send\n"
+ " --no-ask-password Don't prompt for password\n"
+ " -H --host=[USER@]HOST Show information for remote host\n"
+@@ -1362,7 +1374,8 @@ static int parse_argv(int argc, char *argv[]) {
+ ARG_VERSION = 0x100,
+ ARG_NO_PAGER,
+ ARG_KILL_WHO,
+- ARG_NO_ASK_PASSWORD
++ ARG_NO_ASK_PASSWORD,
++ ARG_FULL,
+ };
+
+ static const struct option options[] = {
+@@ -1376,6 +1389,7 @@ static int parse_argv(int argc, char *argv[]) {
+ { "host", required_argument, NULL, 'H' },
+ { "privileged", no_argument, NULL, 'P' },
+ { "no-ask-password", no_argument, NULL, ARG_NO_ASK_PASSWORD },
++ { "full", no_argument, NULL, ARG_FULL },
+ { NULL, 0, NULL, 0 }
+ };
+
+@@ -1447,6 +1461,10 @@ static int parse_argv(int argc, char *argv[]) {
+ arg_host = optarg;
+ break;
+
++ case ARG_FULL:
++ arg_full = true;
++ break;
++
+ case '?':
+ return -EINVAL;
+
+diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c
+index 2b79f37..2f2669f 100644
+--- a/src/shared/cgroup-show.c
++++ b/src/shared/cgroup-show.c
+@@ -51,7 +51,7 @@ static unsigned ilog10(unsigned long ul) {
+ return n;
+ }
+
+-static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsigned n_columns, bool extra, bool more, bool kernel_threads) {
++static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsigned n_columns, bool extra, bool more, bool kernel_threads, OutputFlags flags) {
+ unsigned i, m, pid_width;
+ pid_t biggest = 0;
+
+@@ -76,11 +76,14 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi
+ /* And sort */
+ qsort(pids, n_pids, sizeof(pid_t), compare);
+
+- if (n_columns > pid_width+2)
+- n_columns -= pid_width+2;
+- else
+- n_columns = 20;
+-
++ if(flags & OUTPUT_FULL_WIDTH)
++ n_columns = 0;
++ else {
++ if (n_columns > pid_width+2)
++ n_columns -= pid_width+2;
++ else
++ n_columns = 20;
++ }
+ for (i = 0; i < n_pids; i++) {
+ char *t = NULL;
+
+@@ -99,7 +102,7 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi
+ }
+
+
+-static int show_cgroup_one_by_path(const char *path, const char *prefix, unsigned n_columns, bool more, bool kernel_threads) {
++static int show_cgroup_one_by_path(const char *path, const char *prefix, unsigned n_columns, bool more, bool kernel_threads, OutputFlags flags) {
+ char *fn;
+ FILE *f;
+ size_t n = 0, n_allocated = 0;
+@@ -149,7 +152,7 @@ static int show_cgroup_one_by_path(const char *path, const char *prefix, unsigne
+ goto finish;
+
+ if (n > 0)
+- show_pid_array(pids, n, prefix, n_columns, false, more, kernel_threads);
++ show_pid_array(pids, n, prefix, n_columns, false, more, kernel_threads, flags);
+
+ r = 0;
+
+@@ -162,7 +165,7 @@ finish:
+ return r;
+ }
+
+-int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, bool all) {
++int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, OutputFlags flags) {
+ DIR *d;
+ char *last = NULL;
+ char *p1 = NULL, *p2 = NULL, *fn = NULL, *gn = NULL;
+@@ -197,13 +200,13 @@ int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns
+ goto finish;
+ }
+
+- if (!all && cg_is_empty_recursive(NULL, k, false) > 0) {
++ if (!(flags & OUTPUT_SHOW_ALL) && cg_is_empty_recursive(NULL, k, false) > 0) {
+ free(k);
+ continue;
+ }
+
+ if (!shown_pids) {
+- show_cgroup_one_by_path(path, prefix, n_columns, true, kernel_threads);
++ show_cgroup_one_by_path(path, prefix, n_columns, true, kernel_threads, flags);
+ shown_pids = true;
+ }
+
+@@ -220,7 +223,7 @@ int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns
+ }
+ }
+
+- show_cgroup_by_path(last, p1, n_columns-2, kernel_threads, all);
++ show_cgroup_by_path(last, p1, n_columns-2, kernel_threads, flags);
+ free(last);
+ }
+
+@@ -231,7 +234,7 @@ int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns
+ goto finish;
+
+ if (!shown_pids)
+- show_cgroup_one_by_path(path, prefix, n_columns, !!last, kernel_threads);
++ show_cgroup_one_by_path(path, prefix, n_columns, !!last, kernel_threads, flags);
+
+ if (last) {
+ printf("%s%s%s\n", prefix, draw_special_char(DRAW_TREE_RIGHT),
+@@ -245,7 +248,7 @@ int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns
+ }
+ }
+
+- show_cgroup_by_path(last, p2, n_columns-2, kernel_threads, all);
++ show_cgroup_by_path(last, p2, n_columns-2, kernel_threads, flags);
+ }
+
+ r = 0;
+@@ -261,7 +264,7 @@ finish:
+ return r;
+ }
+
+-int show_cgroup(const char *controller, const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, bool all) {
++int show_cgroup(const char *controller, const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, OutputFlags flags) {
+ char *p;
+ int r;
+
+@@ -272,13 +275,13 @@ int show_cgroup(const char *controller, const char *path, const char *prefix, un
+ if (r < 0)
+ return r;
+
+- r = show_cgroup_by_path(p, prefix, n_columns, kernel_threads, all);
++ r = show_cgroup_by_path(p, prefix, n_columns, kernel_threads, flags);
+ free(p);
+
+ return r;
+ }
+
+-static int show_extra_pids(const char *controller, const char *path, const char *prefix, unsigned n_columns, const pid_t pids[], unsigned n_pids) {
++static int show_extra_pids(const char *controller, const char *path, const char *prefix, unsigned n_columns, const pid_t pids[], unsigned n_pids, OutputFlags flags) {
+ pid_t *copy;
+ unsigned i, j;
+ int r;
+@@ -314,26 +317,26 @@ static int show_extra_pids(const char *controller, const char *path, const char
+ copy[j++] = pids[i];
+ }
+
+- show_pid_array(copy, j, prefix, n_columns, true, false, false);
++ show_pid_array(copy, j, prefix, n_columns, true, false, false, flags);
+
+ free(copy);
+ return 0;
+ }
+
+-int show_cgroup_and_extra(const char *controller, const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, bool all, const pid_t extra_pids[], unsigned n_extra_pids) {
++int show_cgroup_and_extra(const char *controller, const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, const pid_t extra_pids[], unsigned n_extra_pids, OutputFlags flags) {
+ int r;
+
+ assert(controller);
+ assert(path);
+
+- r = show_cgroup(controller, path, prefix, n_columns, kernel_threads, all);
++ r = show_cgroup(controller, path, prefix, n_columns, kernel_threads, flags);
+ if (r < 0)
+ return r;
+
+- return show_extra_pids(controller, path, prefix, n_columns, extra_pids, n_extra_pids);
++ return show_extra_pids(controller, path, prefix, n_columns, extra_pids, n_extra_pids, flags);
+ }
+
+-int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned n_columns, bool kernel_threads, bool all, const pid_t extra_pids[], unsigned n_extra_pids) {
++int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned n_columns, bool kernel_threads, const pid_t extra_pids[], unsigned n_extra_pids, OutputFlags flags) {
+ int r;
+ _cleanup_free_ char *controller = NULL, *path = NULL;
+
+@@ -343,5 +346,5 @@ int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned
+ if (r < 0)
+ return r;
+
+- return show_cgroup_and_extra(controller, path, prefix, n_columns, kernel_threads, all, extra_pids, n_extra_pids);
++ return show_cgroup_and_extra(controller, path, prefix, n_columns, kernel_threads, extra_pids, n_extra_pids, flags);
+ }
+diff --git a/src/shared/cgroup-show.h b/src/shared/cgroup-show.h
+index dba900a..72bc8a6 100644
+--- a/src/shared/cgroup-show.h
++++ b/src/shared/cgroup-show.h
+@@ -24,11 +24,13 @@
+
+ #include <stdbool.h>
+ #include <sys/types.h>
++#include "util.h"
++#include "logs-show.h"
+
+-int show_cgroup_by_path(const char *path, const char *prefix, unsigned columns, bool kernel_threads, bool all);
+-int show_cgroup(const char *controller, const char *path, const char *prefix, unsigned columns, bool kernel_threads, bool all);
++int show_cgroup_by_path(const char *path, const char *prefix, unsigned columns, bool kernel_threads, OutputFlags flags);
++int show_cgroup(const char *controller, const char *path, const char *prefix, unsigned columns, bool kernel_threads, OutputFlags flags);
+
+-int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned n_columns, bool kernel_threads, bool all, const pid_t extra_pids[], unsigned n_extra_pids);
+-int show_cgroup_and_extra(const char *controller, const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, bool all, const pid_t extra_pids[], unsigned n_extra_pids);
++int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned n_columns, bool kernel_threads, const pid_t extra_pids[], unsigned n_extra_pids, OutputFlags flags);
++int show_cgroup_and_extra(const char *controller, const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, const pid_t extra_pids[], unsigned n_extra_pids, OutputFlags flags);
+
+ #endif
+diff --git a/src/shared/logs-show.h b/src/shared/logs-show.h
+index 11cb41a..6c32aa7 100644
+--- a/src/shared/logs-show.h
++++ b/src/shared/logs-show.h
+@@ -26,28 +26,7 @@
+ #include <systemd/sd-journal.h>
+
+ #include "util.h"
+-
+-typedef enum OutputMode {
+- OUTPUT_SHORT,
+- OUTPUT_SHORT_MONOTONIC,
+- OUTPUT_VERBOSE,
+- OUTPUT_EXPORT,
+- OUTPUT_JSON,
+- OUTPUT_JSON_PRETTY,
+- OUTPUT_JSON_SSE,
+- OUTPUT_CAT,
+- _OUTPUT_MODE_MAX,
+- _OUTPUT_MODE_INVALID = -1
+-} OutputMode;
+-
+-typedef enum OutputFlags {
+- OUTPUT_SHOW_ALL = 1 << 0,
+- OUTPUT_FOLLOW = 1 << 1,
+- OUTPUT_WARN_CUTOFF = 1 << 2,
+- OUTPUT_FULL_WIDTH = 1 << 3,
+- OUTPUT_COLOR = 1 << 4,
+- OUTPUT_CATALOG = 1 << 5
+-} OutputFlags;
++#include "output-mode.h"
+
+ int output_journal(
+ FILE *f,
+diff --git a/src/shared/output-mode.h b/src/shared/output-mode.h
+new file mode 100644
+index 0000000..0efd430
+--- /dev/null
++++ b/src/shared/output-mode.h
+@@ -0,0 +1,44 @@
++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
++
++#pragma once
++
++/***
++ This file is part of systemd.
++
++ Copyright 2013 Lennart Poettering
++
++ systemd is free software; you can redistribute it and/or modify it
++ under the terms of the GNU Lesser General Public License as published by
++ the Free Software Foundation; either version 2.1 of the License, or
++ (at your option) any later version.
++
++ systemd is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public License
++ along with systemd; If not, see <http://www.gnu.org/licenses/>.
++***/
++
++typedef enum OutputMode {
++ OUTPUT_SHORT,
++ OUTPUT_SHORT_MONOTONIC,
++ OUTPUT_VERBOSE,
++ OUTPUT_EXPORT,
++ OUTPUT_JSON,
++ OUTPUT_JSON_PRETTY,
++ OUTPUT_JSON_SSE,
++ OUTPUT_CAT,
++ _OUTPUT_MODE_MAX,
++ _OUTPUT_MODE_INVALID = -1
++} OutputMode;
++
++typedef enum OutputFlags {
++ OUTPUT_SHOW_ALL = 1 << 0,
++ OUTPUT_FOLLOW = 1 << 1,
++ OUTPUT_WARN_CUTOFF = 1 << 2,
++ OUTPUT_FULL_WIDTH = 1 << 3,
++ OUTPUT_COLOR = 1 << 4,
++ OUTPUT_CATALOG = 1 << 5
++} OutputFlags;
+diff --git a/src/shared/util.c b/src/shared/util.c
+index 49b5844..13f1a1c 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -905,13 +905,10 @@ int get_process_comm(pid_t pid, char **name) {
+ }
+
+ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char **line) {
+- char *r, *k;
++ char *r = NULL, *k;
+ int c;
+- bool space = false;
+- size_t left;
+ FILE *f;
+
+- assert(max_length > 0);
+ assert(line);
+
+ if (pid == 0)
+@@ -927,47 +924,64 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char *
+
+ if (!f)
+ return -errno;
++ if (max_length == 0) {
++ size_t len = 1;
++ while ((c = getc(f)) != EOF) {
++ k = realloc(r, len+1);
++ if (k == NULL) {
++ free(r);
++ fclose(f);
++ return -ENOMEM;
++ }
++ r = k;
++ r[len-1] = isprint(c) ? c : ' ';
++ r[len] = 0;
++ len++;
++ }
++ } else {
++ bool space = false;
++ size_t left;
++ r = new(char, max_length);
++ if (!r) {
++ fclose(f);
++ return -ENOMEM;
++ }
+
+- r = new(char, max_length);
+- if (!r) {
+- fclose(f);
+- return -ENOMEM;
+- }
++ k = r;
++ left = max_length;
++ while ((c = getc(f)) != EOF) {
++
++ if (isprint(c)) {
++ if (space) {
++ if (left <= 4)
++ break;
+
+- k = r;
+- left = max_length;
+- while ((c = getc(f)) != EOF) {
++ *(k++) = ' ';
++ left--;
++ space = false;
++ }
+
+- if (isprint(c)) {
+- if (space) {
+ if (left <= 4)
+ break;
+
+- *(k++) = ' ';
++ *(k++) = (char) c;
+ left--;
+- space = false;
+- }
+-
+- if (left <= 4)
+- break;
++ } else
++ space = true;
++ }
+
+- *(k++) = (char) c;
+- left--;
+- } else
+- space = true;
++ if (left <= 4) {
++ size_t n = MIN(left-1, 3U);
++ memcpy(k, "...", n);
++ k[n] = 0;
++ } else
++ *k = 0;
+ }
+
+- if (left <= 4) {
+- size_t n = MIN(left-1, 3U);
+- memcpy(k, "...", n);
+- k[n] = 0;
+- } else
+- *k = 0;
+-
+ fclose(f);
+
+ /* Kernel threads have no argv[] */
+- if (r[0] == 0) {
++ if (r == NULL || r[0] == 0) {
+ char *t;
+ int h;
+
+diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
+index 012fd56..45f3438 100644
+--- a/src/systemctl/systemctl.c
++++ b/src/systemctl/systemctl.c
+@@ -2199,6 +2199,12 @@ static void print_status_info(UnitStatusInfo *i) {
+ char since1[FORMAT_TIMESTAMP_RELATIVE_MAX], *s1;
+ char since2[FORMAT_TIMESTAMP_MAX], *s2;
+ const char *path;
++ int flags =
++ arg_all * OUTPUT_SHOW_ALL |
++ (!on_tty() || pager_have()) * OUTPUT_FULL_WIDTH |
++ on_tty() * OUTPUT_COLOR |
++ !arg_quiet * OUTPUT_WARN_CUTOFF |
++ arg_full * OUTPUT_FULL_WIDTH;
+
+ assert(i);
+
+@@ -2427,17 +2433,11 @@ static void print_status_info(UnitStatusInfo *i) {
+ if (i->control_pid > 0)
+ extra[k++] = i->control_pid;
+
+- show_cgroup_and_extra_by_spec(i->default_control_group, "\t\t ", c, false, arg_all, extra, k);
++ show_cgroup_and_extra_by_spec(i->default_control_group, "\t\t ", c, false, extra, k, flags);
+ }
+ }
+
+ if (i->id && arg_transport != TRANSPORT_SSH) {
+- int flags =
+- arg_all * OUTPUT_SHOW_ALL |
+- (!on_tty() || pager_have()) * OUTPUT_FULL_WIDTH |
+- on_tty() * OUTPUT_COLOR |
+- !arg_quiet * OUTPUT_WARN_CUTOFF;
+-
+ printf("\n");
+ show_journal_by_unit(stdout,
+ i->id,
diff --git a/0040-man-typo-fixes.patch b/0040-man-typo-fixes.patch
new file mode 100644
index 0000000..3d34d86
--- /dev/null
+++ b/0040-man-typo-fixes.patch
@@ -0,0 +1,39 @@
+From e9f0da617941d787e7b887241087052b41d190d5 Mon Sep 17 00:00:00 2001
+From: Thomas Hindoe Paaboel Andersen <phomes at gmail.com>
+Date: Wed, 16 Jan 2013 21:01:30 +0100
+Subject: [PATCH] man: typo fixes (cherry picked from commit
+ a485210ce73fe1186fdc5fae481dc31773e14b3c)
+
+Conflicts:
+ man/sd_session_is_active.xml
+---
+ man/sd_session_is_active.xml | 2 +-
+ man/systemd.special.xml | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/man/sd_session_is_active.xml b/man/sd_session_is_active.xml
+index a9107cb..73b3741 100644
+--- a/man/sd_session_is_active.xml
++++ b/man/sd_session_is_active.xml
+@@ -181,7 +181,7 @@
+ <para><function>sd_session_get_display()</function>
+ may be used to determine the X11 display of the
+ session identified by the specified session
+- identifier. The returned string is one of needs to be
++ identifier. The returned string needs to be
+ freed with the libc
+ <citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+ call after use.</para>
+diff --git a/man/systemd.special.xml b/man/systemd.special.xml
+index 20f1c1f..4909cfb 100644
+--- a/man/systemd.special.xml
++++ b/man/systemd.special.xml
+@@ -418,7 +418,7 @@
+ <para>This unit is supposed to
+ indicate when the network is
+ "up", but it is only very
+- losely defined what that is
++ loosely defined what that is
+ supposed to mean. Also see <ulink
+ url="http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget">Running
+ Services After the Network is
diff --git a/0041-dbus-add-Unit-s-PartOf-and-ConsistsOf-deps-to-intros.patch b/0041-dbus-add-Unit-s-PartOf-and-ConsistsOf-deps-to-intros.patch
new file mode 100644
index 0000000..60185f3
--- /dev/null
+++ b/0041-dbus-add-Unit-s-PartOf-and-ConsistsOf-deps-to-intros.patch
@@ -0,0 +1,29 @@
+From d1aafbf90f317b5dac97a78eddabd3f20a0be63d Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 17 Jan 2013 02:24:49 +0100
+Subject: [PATCH] dbus: add Unit's PartOf and ConsistsOf deps to introspection
+ XML (cherry picked from commit 4b20075e2fbd99caee8b6a782050969a087a1a21)
+
+---
+ src/core/dbus-unit.h | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/dbus-unit.h b/src/core/dbus-unit.h
+index ac6785a..d3c835d 100644
+--- a/src/core/dbus-unit.h
++++ b/src/core/dbus-unit.h
+@@ -69,11 +69,13 @@
+ " <property name=\"Requisite\" type=\"as\" access=\"read\"/>\n" \
+ " <property name=\"RequisiteOverridable\" type=\"as\" access=\"read\"/>\n" \
+ " <property name=\"Wants\" type=\"as\" access=\"read\"/>\n" \
+- " <property name=\"BindsTo\" type=\"as\" access=\"read\"/>\n" \
++ " <property name=\"BindsTo\" type=\"as\" access=\"read\"/>\n" \
++ " <property name=\"PartOf\" type=\"as\" access=\"read\"/>\n" \
+ " <property name=\"RequiredBy\" type=\"as\" access=\"read\"/>\n" \
+ " <property name=\"RequiredByOverridable\" type=\"as\" access=\"read\"/>\n" \
+ " <property name=\"WantedBy\" type=\"as\" access=\"read\"/>\n" \
+ " <property name=\"BoundBy\" type=\"as\" access=\"read\"/>\n" \
++ " <property name=\"ConsistsOf\" type=\"as\" access=\"read\"/>\n" \
+ " <property name=\"Conflicts\" type=\"as\" access=\"read\"/>\n" \
+ " <property name=\"ConflictedBy\" type=\"as\" access=\"read\"/>\n" \
+ " <property name=\"Before\" type=\"as\" access=\"read\"/>\n" \
diff --git a/0042-units-for-all-unit-settings-that-take-lists-allow-th.patch b/0042-units-for-all-unit-settings-that-take-lists-allow-th.patch
new file mode 100644
index 0000000..0255e17
--- /dev/null
+++ b/0042-units-for-all-unit-settings-that-take-lists-allow-th.patch
@@ -0,0 +1,1934 @@
+From 1ce7da3d31e2ac2d294b8da0798eeb628b133099 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 17 Jan 2013 02:27:06 +0100
+Subject: [PATCH] units: for all unit settings that take lists, allow the empty
+ string for resetting the lists
+
+https://bugzilla.redhat.com/show_bug.cgi?id=756787
+(cherry picked from commit 74051b9b5865586bf4d30b9075649af838fb92bd)
+
+Conflicts:
+ src/core/load-fragment.c
+---
+ man/systemd.exec.xml | 190 +++++++++++------
+ man/systemd.path.xml | 23 ++-
+ man/systemd.service.xml | 92 ++++++---
+ man/systemd.socket.xml | 25 ++-
+ man/systemd.timer.xml | 16 +-
+ man/systemd.unit.xml | 17 +-
+ src/core/load-fragment-gperf.gperf.m4 | 14 +-
+ src/core/load-fragment.c | 372 +++++++++++++++++++---------------
+ src/core/path.c | 16 +-
+ src/core/path.h | 2 +
+ src/core/socket.c | 11 +-
+ src/core/socket.h | 2 +
+ src/core/timer.c | 11 +-
+ src/core/timer.h | 2 +
+ src/shared/conf-parser.c | 46 ++++-
+ 15 files changed, 538 insertions(+), 301 deletions(-)
+
+diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
+index 302ac43..37d2dd7 100644
+--- a/man/systemd.exec.xml
++++ b/man/systemd.exec.xml
+@@ -133,10 +133,15 @@
+ of group names or IDs. This option may
+ be specified more than once in which
+ case all listed groups are set as
+- supplementary groups. This option does
+- not override but extends the list of
+- supplementary groups configured in the
+- system group database for the
++ supplementary groups. When the empty
++ string is assigned the list of
++ supplementary groups is reset, and all
++ assignments prior to this one will
++ have no effect. In any way, this
++ option does not override, but extends
++ the list of supplementary groups
++ configured in the system group
++ database for the
+ user.</para></listitem>
+ </varlistentry>
+
+@@ -244,7 +249,13 @@
+ <listitem><para>Controls the CPU
+ affinity of the executed
+ processes. Takes a space-separated
+- list of CPU indexes. See
++ list of CPU indexes. This option may
++ be specified more than once in which
++ case the specificed CPU affinity masks
++ are merged. If the empty string is
++ assigned the mask is reset, all
++ assignments prior to this will have no
++ effect. See
+ <citerefentry><refentrytitle>sched_setaffinity</refentrytitle><manvolnum>2</manvolnum></citerefentry>
+ for details.</para></listitem>
+ </varlistentry>
+@@ -271,7 +282,11 @@
+ in which case all listed variables
+ will be set. If the same variable is
+ set twice the later setting will
+- override the earlier setting. See
++ override the earlier setting. If the
++ empty string is assigned to this
++ option the list of environment
++ variables is reset, all prior
++ assignments have no effect. See
+ <citerefentry><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ for details.</para></listitem>
+ </varlistentry>
+@@ -288,14 +303,22 @@
+ parser strips leading and
+ trailing whitespace from the values
+ of assignments, unless you use
+- double quotes (").
+- The
+- argument passed should be an absolute
+- file name or wildcard expression, optionally prefixed with
++ double quotes (").</para>
++
++ <para>The argument passed should be an
++ absolute file name or wildcard
++ expression, optionally prefixed with
+ "-", which indicates that if the file
+ does not exist it won't be read and no
+- error or warning message is
+- logged. The files listed with this
++ error or warning message is logged.
++ This option may be specified more than
++ once in which case all specified files
++ are read. If the empty string is
++ assigned to this option the list of
++ file to read is reset, all prior
++ assignments have no effect.</para>
++
++ <para>The files listed with this
+ directive will be read shortly before
+ the process is executed. Settings from
+ these files override settings made
+@@ -305,7 +328,7 @@
+ these files the files will be read in
+ the order they are specified and the
+ later setting will override the
+- earlier setting. </para></listitem>
++ earlier setting.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+@@ -695,8 +718,13 @@
+ capability bounding set is not
+ modified on process execution, hence
+ no limits on the capabilities of the
+- process are
+- enforced.</para></listitem>
++ process are enforced. This option may
++ appear more than once in which case
++ the bounding sets are merged. If the empty
++ string is assigned to this option the
++ bounding set is reset, and all prior
++ settings have no
++ effect.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+@@ -710,8 +738,12 @@
+ <option>no-setuid-fixup</option>,
+ <option>no-setuid-fixup-locked</option>,
+ <option>noroot</option> and/or
+- <option>noroot-locked</option>.
+- </para></listitem>
++ <option>noroot-locked</option>. This
++ option may appear more than once in
++ which case the secure bits are
++ ORed. If the empty string is assigned
++ to this option the bits are reset to
++ 0.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+@@ -739,10 +771,10 @@
+ groups the executed processes shall be
+ made members of. Takes a
+ space-separated list of cgroup
+- identifiers. A cgroup identifier has a
+- format like
++ identifiers. A cgroup identifier is
++ formatted like
+ <filename>cpu:/foo/bar</filename>,
+- where "cpu" identifies the kernel
++ where "cpu" indicates the kernel
+ control group controller used, and
+ <filename>/foo/bar</filename> is the
+ control group path. The controller
+@@ -751,30 +783,50 @@
+ hierarchy is implied. Alternatively,
+ the path and ":" may be omitted, in
+ which case the default control group
+- path for this unit is implied. This
+- option may be used to place executed
+- processes in arbitrary groups in
+- arbitrary hierarchies -- which can be
+- configured externally with additional
+- execution limits. By default systemd
+- will place all executed processes in
+- separate per-unit control groups
+- (named after the unit) in the systemd
+- named hierarchy. Since every process
+- can be in one group per hierarchy only
+- overriding the control group path in
+- the named systemd hierarchy will
+- disable automatic placement in the
+- default group. This option is
+- primarily intended to place executed
+- processes in specific paths in
+- specific kernel controller
+- hierarchies. It is however not
++ path for this unit is implied.</para>
++
++ <para>This option may be used to place
++ executed processes in arbitrary groups
++ in arbitrary hierarchies -- which may
++ then be externally configured with
++ additional execution limits. By
++ default systemd will place all
++ executed processes in separate
++ per-unit control groups (named after
++ the unit) in the systemd named
++ hierarchy. This option is primarily
++ intended to place executed processes
++ in specific paths in specific kernel
++ controller hierarchies. It is not
+ recommended to manipulate the service
+ control group path in the systemd
+ named hierarchy. For details about
+ control groups see <ulink
+- url="http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups.txt</ulink>.</para></listitem>
++ url="http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups.txt</ulink>.</para>
++
++ <para>This option may appear more than
++ once, in which case the list of
++ control group assignments is
++ merged. If the same hierarchy gets two
++ different paths assigned only the
++ later setting will take effect. If the
++ empty string is assigned to this
++ option the list of control group
++ assignments is reset, all previous
++ assignments will have no
++ effect.</para>
++
++ <para>Note that the list of control
++ group assignments of a unit is
++ extended implicitly based on the
++ settings of
++ <varname>DefaultControllers=</varname>
++ of
++ <citerefentry><refentrytitle>systemd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
++ but a unit's
++ <varname>ControlGroup=</varname>
++ setting for a specific controller
++ takes precedence.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+@@ -832,8 +884,8 @@
+ the controller and the default unit
+ cgroup path is implied. Thus, using
+ <varname>ControlGroupAttribute=</varname>
+- is in most case sufficient to make use
+- of control group enforcements,
++ is in most cases sufficient to make
++ use of control group enforcements,
+ explicit
+ <varname>ControlGroup=</varname> are
+ only necessary in case the implied
+@@ -844,7 +896,23 @@
+ url="http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups.txt</ulink>. This
+ option may appear more than once, in
+ order to set multiple control group
+- attributes.</para></listitem>
++ attributes. If this option is used
++ multiple times for the same cgroup
++ attribute only the later setting takes
++ effect. If the empty string is
++ assigned to this option the list of
++ attributes is reset, all previous
++ cgroup attribute settings have no
++ effect, including those done with
++ <varname>CPUShares=</varname>,
++ <varname>MemoryLimit=</varname>,
++ <varname>MemorySoftLimit</varname>,
++ <varname>DeviceAllow=</varname>,
++ <varname>DeviceDeny=</varname>,
++ <varname>BlockIOWeight=</varname>,
++ <varname>BlockIOReadBandwidth=</varname>,
++ <varname>BlockIOWriteBandwidth=</varname>.
++ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+@@ -988,18 +1056,21 @@
+ usual file access controls would
+ permit this. Directories listed in
+ <varname>InaccessibleDirectories=</varname>
+- will be made inaccessible for processes
+- inside the namespace. Note that
+- restricting access with these options
+- does not extend to submounts of a
+- directory. You must list submounts
+- separately in these settings to
+- ensure the same limited access. These
+- options may be specified more than
+- once in which case all directories
+- listed will have limited access from
+- within the
+- namespace.</para></listitem>
++ will be made inaccessible for
++ processes inside the namespace. Note
++ that restricting access with these
++ options does not extend to submounts
++ of a directory. You must list
++ submounts separately in these settings
++ to ensure the same limited
++ access. These options may be specified
++ more than once in which case all
++ directories listed will have limited
++ access from within the namespace. If
++ the empty string is assigned to this
++ option the specific list is reset, and
++ all prior assignments have no
++ effect.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+@@ -1131,8 +1202,13 @@
+ <function>exit_group</function>,
+ <function>exit</function> system calls
+ are implicitly whitelisted and don't
+- need to be listed
+- explicitly.</para></listitem>
++ need to be listed explicitly. This
++ option may be specified more than once
++ in which case the filter masks are
++ merged. If the empty string is
++ assigned the filter is reset, all
++ prior assignments will have no
++ effect.</para></listitem>
+ </varlistentry>
+
+ </variablelist>
+diff --git a/man/systemd.path.xml b/man/systemd.path.xml
+index a27a97b..0c2d1a5 100644
+--- a/man/systemd.path.xml
++++ b/man/systemd.path.xml
+@@ -130,13 +130,15 @@
+ specified. <varname>PathChanged=</varname>
+ may be used to watch a file or
+ directory and activate the configured
+- unit whenever it changes. It is not activated
+- on every write to the watched file but it is
+- activated if the file which was open for writing
+- gets closed. <varname>PathModified=</varname>
+- is similar, but additionally it is activated
+- also on simple writes to the watched file.
+-
++ unit whenever it changes. It is not
++ activated on every write to the
++ watched file but it is activated if
++ the file which was open for writing
++ gets
++ closed. <varname>PathModified=</varname>
++ is similar, but additionally it is
++ activated also on simple writes to the
++ watched file.
+ <varname>DirectoryNotEmpty=</varname>
+ may be used to watch a directory and
+ activate the configured unit whenever
+@@ -148,7 +150,12 @@
+
+ <para>Multiple directives may be
+ combined, of the same and of different
+- types, to watch multiple paths.</para>
++ types, to watch multiple paths. If the
++ empty string is assigned to any of
++ these options the list of paths to
++ watch is reset, and any prior
++ assignments of these options will not
++ have any effect.</para>
+
+ <para>If a path is already existing
+ (in case of
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 598e863..8dbef49 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -315,14 +315,18 @@
+ for compatibility with parsers
+ suitable for XDG
+ <filename>.desktop</filename> files.
+- The commands are invoked one by
+- one sequentially in the order they
+- appear in the unit file.
+- When <varname>Type</varname> is
+- not <option>oneshot</option>, only one
++ The commands are invoked one by one
++ sequentially in the order they appear
++ in the unit file. When
++ <varname>Type</varname> is not
++ <option>oneshot</option>, only one
+ command may be given. Lone semicolons
+ may be escaped as
+- '<literal>\;</literal>'.</para>
++ '<literal>\;</literal>'. If the empty
++ string is assigned to this option the
++ list of commands to start is reset,
++ prior assignments of this option will
++ have no effect.</para>
+
+ <para>Unless
+ <varname>Type=forking</varname> is
+@@ -338,23 +342,6 @@
+ line (i.e. the program to execute) may
+ not include specifiers.</para>
+
+- <para>Optionally, if the absolute file
+- name is prefixed with
+- '<literal>@</literal>', the second token
+- will be passed as
+- <literal>argv[0]</literal> to the
+- executed process, followed by the
+- further arguments specified. If the
+- absolute file name is prefixed with
+- '<literal>-</literal>' an exit code of
+- the command normally considered a
+- failure (i.e. non-zero exit status or
+- abnormal exit due to signal) is ignored
+- and considered success. If both
+- '<literal>-</literal>' and
+- '<literal>@</literal>' are used they
+- can appear in either order.</para>
+-
+ <para>On top of that basic environment
+ variable substitution is
+ supported. Use
+@@ -376,6 +363,23 @@
+ literal and absolute path
+ name.</para>
+
++ <para>Optionally, if the absolute file
++ name is prefixed with
++ '<literal>@</literal>', the second token
++ will be passed as
++ <literal>argv[0]</literal> to the
++ executed process, followed by the
++ further arguments specified. If the
++ absolute file name is prefixed with
++ '<literal>-</literal>' an exit code of
++ the command normally considered a
++ failure (i.e. non-zero exit status or
++ abnormal exit due to signal) is ignored
++ and considered success. If both
++ '<literal>-</literal>' and
++ '<literal>@</literal>' are used they
++ can appear in either order.</para>
++
+ <para>Note that this setting does not
+ directly support shell command
+ lines. If shell command lines are to
+@@ -616,8 +620,14 @@
+ SIGKILL</literal>", ensures that exit
+ codes 1, 2, 8 and the termination
+ signal SIGKILL are considered clean
+- service
+- terminations.</para></listitem>
++ service terminations. This option may
++ appear more than once in which case
++ the list of successful exit statuses
++ is merged. If the empty string is
++ assigned to this option the list is
++ reset, all prior assignments of this
++ option will have no
++ effect.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+@@ -638,9 +648,16 @@
+ logic. Example:
+ "<literal>RestartPreventExitStatus=1 6
+ SIGABRT</literal>", ensures that exit
+- codes 1 and 6 and the termination signal
+- SIGABRT will not result in automatic
+- service restarting.</para></listitem>
++ codes 1 and 6 and the termination
++ signal SIGABRT will not result in
++ automatic service restarting. This
++ option may appear more than once in
++ which case the list of restart preventing
++ statuses is merged. If the empty
++ string is assigned to this option the
++ list is reset, all prior assignments
++ of this option will have no
++ effect.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+@@ -754,13 +771,22 @@
+ same time. Also note that a different
+ service may be activated on incoming
+ traffic than inherits the sockets. Or
+- in other words: The
++ in other words: the
+ <varname>Service=</varname> setting of
+ <filename>.socket</filename> units
+- doesn't have to match the inverse of the
+- <varname>Sockets=</varname> setting of
+- the <filename>.service</filename> it
+- refers to.</para></listitem>
++ doesn't have to match the inverse of
++ the <varname>Sockets=</varname>
++ setting of the
++ <filename>.service</filename> it
++ refers to.</para>
++
++ <para>This option may appear more than
++ once, in which case the list of socket
++ units is merged. If the empty string
++ is assigned to this option the list of
++ sockets is reset, all prior uses of
++ this setting will have no
++ effect.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml
+index 4b1fcc8..df54274 100644
+--- a/man/systemd.socket.xml
++++ b/man/systemd.socket.xml
+@@ -205,19 +205,24 @@
+
+ <para>These options may be specified
+ more than once in which case incoming
+- traffic on any of the sockets will trigger
+- service activation, and all listed
+- sockets will be passed to the service,
+- regardless whether there is incoming
+- traffic on them or not.</para>
+-
+- <para>If an IP address is used here, it
+- is often desirable to listen on it
++ traffic on any of the sockets will
++ trigger service activation, and all
++ listed sockets will be passed to the
++ service, regardless whether there is
++ incoming traffic on them or not. If
++ the empty string is assigned to any of
++ these options, the list of addresses
++ to listen on is reset, all prior uses
++ of any of these options will have no
++ effect.</para>
++
++ <para>If an IP address is used here,
++ it is often desirable to listen on it
+ before the interface it is configured
+ on is up and running, and even
+ regardless whether it will be up and
+- running ever at all. To deal with this it is
+- recommended to set the
++ running ever at all. To deal with this
++ it is recommended to set the
+ <varname>FreeBind=</varname> option
+ described below.</para></listitem>
+ </varlistentry>
+diff --git a/man/systemd.timer.xml b/man/systemd.timer.xml
+index 5cc543e..80c8061 100644
+--- a/man/systemd.timer.xml
++++ b/man/systemd.timer.xml
+@@ -115,7 +115,7 @@
+ machine was booted
+ up. <varname>OnStartupSec=</varname>
+ defines a timer relative to when
+- systemd was
++ systemd was first
+ started. <varname>OnUnitActiveSec=</varname>
+ defines a timer relative to when the
+ unit the timer is activating was last
+@@ -157,7 +157,13 @@
+ <para>These are monotonic timers,
+ independent of wall-clock time and timezones. If the
+ computer is temporarily suspended, the
+- monotonic clock stops too.</para></listitem>
++ monotonic clock stops too.</para>
++
++ <para>If the empty string is assigned
++ to any of these options the list of
++ timers is reset, and all prior
++ assignments will have no
++ effect.</para></listitem>
+
+ </varlistentry>
+
+@@ -169,8 +175,10 @@
+ event expressions. See
+ <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ for more information on the syntax of
+- calendar event
+- expressions.</para></listitem>
++ calendar event expressions. Otherwise
++ the semantics are similar to
++ <varname>OnActiveSec=</varname> and
++ related settings.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
+index 54671e7..af25310 100644
+--- a/man/systemd.unit.xml
++++ b/man/systemd.unit.xml
+@@ -350,8 +350,13 @@
+ reference documentation that explains
+ what the unit's purpose is, followed
+ by how it is configured, followed by
+- any other related
+- documentation.</para></listitem>
++ any other related documentation. This
++ option may be specified more than once
++ in which case the specified list of
++ URIs is merged. If the empty string is
++ assigned to this option the list is
++ reset and all prior assignments will
++ have no effect.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+@@ -1003,8 +1008,12 @@
+ pipe symbol must be passed first, the
+ exclamation second. Except for
+ <varname>ConditionPathIsSymbolicLink=</varname>,
+- all path checks follow
+- symlinks.</para></listitem>
++ all path checks follow symlinks. If
++ any of these options is assigned the
++ empty string the list of conditions is
++ reset completely, all previous
++ condition settings (of any kind) will
++ have no effect.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4
+index 7fba0cf..1783ad0 100644
+--- a/src/core/load-fragment-gperf.gperf.m4
++++ b/src/core/load-fragment-gperf.gperf.m4
+@@ -174,13 +174,13 @@ Service.FsckPassNo, config_parse_fsck_passno, 0,
+ EXEC_CONTEXT_CONFIG_ITEMS(Service)m4_dnl
+ KILL_CONTEXT_CONFIG_ITEMS(Service)m4_dnl
+ m4_dnl
+-Socket.ListenStream, config_parse_socket_listen, 0, 0
+-Socket.ListenDatagram, config_parse_socket_listen, 0, 0
+-Socket.ListenSequentialPacket, config_parse_socket_listen, 0, 0
+-Socket.ListenFIFO, config_parse_socket_listen, 0, 0
+-Socket.ListenNetlink, config_parse_socket_listen, 0, 0
+-Socket.ListenSpecial, config_parse_socket_listen, 0, 0
+-Socket.ListenMessageQueue, config_parse_socket_listen, 0, 0
++Socket.ListenStream, config_parse_socket_listen, SOCKET_SOCKET, 0
++Socket.ListenDatagram, config_parse_socket_listen, SOCKET_SOCKET, 0
++Socket.ListenSequentialPacket, config_parse_socket_listen, SOCKET_SOCKET, 0
++Socket.ListenFIFO, config_parse_socket_listen, SOCKET_FIFO, 0
++Socket.ListenNetlink, config_parse_socket_listen, SOCKET_SOCKET, 0
++Socket.ListenSpecial, config_parse_socket_listen, SOCKET_SPECIAL, 0
++Socket.ListenMessageQueue, config_parse_socket_listen, SOCKET_MQUEUE, 0
+ Socket.BindIPv6Only, config_parse_socket_bind, 0, 0,
+ Socket.Backlog, config_parse_unsigned, 0, offsetof(Socket, backlog)
+ Socket.BindToDevice, config_parse_socket_bindtodevice, 0, 0
+diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
+index e2ea003..40f4bfd 100644
+--- a/src/core/load-fragment.c
++++ b/src/core/load-fragment.c
+@@ -91,11 +91,11 @@ int config_parse_unit_deps(
+
+ t = strndup(w, l);
+ if (!t)
+- return -ENOMEM;
++ return log_oom();
+
+ k = unit_name_printf(u, t);
+ if (!k)
+- return -ENOMEM;
++ return log_oom();
+
+ r = unit_add_dependency_by_name(u, d, k, NULL, true);
+ if (r < 0)
+@@ -117,8 +117,7 @@ int config_parse_unit_string_printf(
+ void *userdata) {
+
+ Unit *u = userdata;
+- char *k;
+- int r;
++ _cleanup_free_ char *k = NULL;
+
+ assert(filename);
+ assert(lvalue);
+@@ -127,12 +126,9 @@ int config_parse_unit_string_printf(
+
+ k = unit_full_printf(u, rvalue);
+ if (!k)
+- return -ENOMEM;
+-
+- r = config_parse_string(filename, line, section, lvalue, ltype, k, data, userdata);
+- free (k);
++ return log_oom();
+
+- return r;
++ return config_parse_string(filename, line, section, lvalue, ltype, k, data, userdata);
+ }
+
+ int config_parse_unit_strv_printf(
+@@ -146,8 +142,7 @@ int config_parse_unit_strv_printf(
+ void *userdata) {
+
+ Unit *u = userdata;
+- char *k;
+- int r;
++ _cleanup_free_ char *k = NULL;
+
+ assert(filename);
+ assert(lvalue);
+@@ -156,12 +151,9 @@ int config_parse_unit_strv_printf(
+
+ k = unit_full_printf(u, rvalue);
+ if (!k)
+- return -ENOMEM;
+-
+- r = config_parse_strv(filename, line, section, lvalue, ltype, k, data, userdata);
+- free(k);
++ return log_oom();
+
+- return r;
++ return config_parse_strv(filename, line, section, lvalue, ltype, k, data, userdata);
+ }
+
+ int config_parse_unit_path_printf(
+@@ -175,8 +167,7 @@ int config_parse_unit_path_printf(
+ void *userdata) {
+
+ Unit *u = userdata;
+- char *k;
+- int r;
++ _cleanup_free_ char *k = NULL;
+
+ assert(filename);
+ assert(lvalue);
+@@ -187,10 +178,7 @@ int config_parse_unit_path_printf(
+ if (!k)
+ return log_oom();
+
+- r = config_parse_path(filename, line, section, lvalue, ltype, k, data, userdata);
+- free(k);
+-
+- return r;
++ return config_parse_path(filename, line, section, lvalue, ltype, k, data, userdata);
+ }
+
+ int config_parse_socket_listen(
+@@ -213,50 +201,39 @@ int config_parse_socket_listen(
+
+ s = SOCKET(data);
+
++ if (isempty(rvalue)) {
++ /* An empty assignment removes all ports */
++ socket_free_ports(s);
++ return 0;
++ }
++
+ p = new0(SocketPort, 1);
+ if (!p)
+- return -ENOMEM;
+-
+- if (streq(lvalue, "ListenFIFO")) {
+- p->type = SOCKET_FIFO;
+-
+- if (!(p->path = unit_full_printf(UNIT(s), rvalue))) {
+- free(p);
+- return -ENOMEM;
+- }
+-
+- path_kill_slashes(p->path);
+-
+- } else if (streq(lvalue, "ListenSpecial")) {
+- p->type = SOCKET_SPECIAL;
+-
+- if (!(p->path = unit_full_printf(UNIT(s), rvalue))) {
+- free(p);
+- return -ENOMEM;
+- }
+-
+- path_kill_slashes(p->path);
+-
+- } else if (streq(lvalue, "ListenMessageQueue")) {
++ return log_oom();
+
+- p->type = SOCKET_MQUEUE;
++ if (ltype != SOCKET_SOCKET) {
+
+- if (!(p->path = unit_full_printf(UNIT(s), rvalue))) {
++ p->type = ltype;
++ p->path = unit_full_printf(UNIT(s), rvalue);
++ if (!p->path) {
+ free(p);
+- return -ENOMEM;
++ return log_oom();
+ }
+
+ path_kill_slashes(p->path);
+
+ } else if (streq(lvalue, "ListenNetlink")) {
+- char *k;
++ _cleanup_free_ char *k = NULL;
+ int r;
+
+ p->type = SOCKET_SOCKET;
+ k = unit_full_printf(UNIT(s), rvalue);
+- r = socket_address_parse_netlink(&p->address, k);
+- free(k);
++ if (!k) {
++ free(p);
++ return log_oom();
++ }
+
++ r = socket_address_parse_netlink(&p->address, k);
+ if (r < 0) {
+ log_error("[%s:%u] Failed to parse address value, ignoring: %s", filename, line, rvalue);
+ free(p);
+@@ -264,14 +241,17 @@ int config_parse_socket_listen(
+ }
+
+ } else {
+- char *k;
++ _cleanup_free_ char *k = NULL;
+ int r;
+
+ p->type = SOCKET_SOCKET;
+ k = unit_full_printf(UNIT(s), rvalue);
+- r = socket_address_parse(&p->address, k);
+- free(k);
++ if (!k) {
++ free(p);
++ return log_oom();
++ }
+
++ r = socket_address_parse(&p->address, k);
+ if (r < 0) {
+ log_error("[%s:%u] Failed to parse address value, ignoring: %s", filename, line, rvalue);
+ free(p);
+@@ -430,12 +410,18 @@ int config_parse_exec(
+ assert(rvalue);
+ assert(e);
+
++ e += ltype;
++
++ if (isempty(rvalue)) {
++ /* An empty assignment resets the list */
++ exec_command_free_list(*e);
++ *e = NULL;
++ return 0;
++ }
++
+ /* We accept an absolute path as first argument, or
+ * alternatively an absolute prefixed with @ to allow
+ * overriding of argv[0]. */
+-
+- e += ltype;
+-
+ for (;;) {
+ int i;
+ char *w;
+@@ -480,7 +466,7 @@ int config_parse_exec(
+
+ n = new(char*, k + !honour_argv0);
+ if (!n)
+- return -ENOMEM;
++ return log_oom();
+
+ k = 0;
+ FOREACH_WORD_QUOTED(w, l, rvalue, state) {
+@@ -494,7 +480,7 @@ int config_parse_exec(
+
+ path = strndup(w, l);
+ if (!path) {
+- r = -ENOMEM;
++ r = log_oom();
+ goto fail;
+ }
+
+@@ -509,7 +495,7 @@ int config_parse_exec(
+
+ c = n[k++] = cunescape_length(w, l);
+ if (!c) {
+- r = -ENOMEM;
++ r = log_oom();
+ goto fail;
+ }
+
+@@ -532,7 +518,7 @@ int config_parse_exec(
+ if (!path) {
+ path = strdup(n[0]);
+ if (!path) {
+- r = -ENOMEM;
++ r = log_oom();
+ goto fail;
+ }
+ }
+@@ -541,7 +527,7 @@ int config_parse_exec(
+
+ nce = new0(ExecCommand, 1);
+ if (!nce) {
+- r = -ENOMEM;
++ r = log_oom();
+ goto fail;
+ }
+
+@@ -589,8 +575,9 @@ int config_parse_socket_bindtodevice(
+ assert(data);
+
+ if (rvalue[0] && !streq(rvalue, "*")) {
+- if (!(n = strdup(rvalue)))
+- return -ENOMEM;
++ n = strdup(rvalue);
++ if (!n)
++ return log_oom();
+ } else
+ n = NULL;
+
+@@ -718,7 +705,6 @@ int config_parse_exec_cpu_sched_prio(
+ return 0;
+ }
+
+-
+ /* On Linux RR/FIFO range from 1 to 99 and OTHER/BATCH may only be 0 */
+ min = sched_get_priority_min(c->cpu_sched_policy);
+ max = sched_get_priority_max(c->cpu_sched_policy);
+@@ -754,6 +740,14 @@ int config_parse_exec_cpu_affinity(
+ assert(rvalue);
+ assert(data);
+
++ if (isempty(rvalue)) {
++ /* An empty assignment resets the CPU list */
++ if (c->cpuset)
++ CPU_FREE(c->cpuset);
++ c->cpuset = NULL;
++ return 0;
++ }
++
+ FOREACH_WORD_QUOTED(w, l, rvalue, state) {
+ char _cleanup_free_ *t = NULL;
+ int r;
+@@ -761,14 +755,14 @@ int config_parse_exec_cpu_affinity(
+
+ t = strndup(w, l);
+ if (!t)
+- return -ENOMEM;
++ return log_oom();
+
+ r = safe_atou(t, &cpu);
+
+ if (!c->cpuset) {
+ c->cpuset = cpu_set_malloc(&c->cpuset_ncpus);
+ if (!c->cpuset)
+- return -ENOMEM;
++ return log_oom();
+ }
+
+ if (r < 0 || cpu >= c->cpuset_ncpus) {
+@@ -801,9 +795,10 @@ int config_parse_exec_capabilities(
+ assert(rvalue);
+ assert(data);
+
+- if (!(cap = cap_from_text(rvalue))) {
++ cap = cap_from_text(rvalue);
++ if (!cap) {
+ if (errno == ENOMEM)
+- return -ENOMEM;
++ return log_oom();
+
+ log_error("[%s:%u] Failed to parse capabilities, ignoring: %s", filename, line, rvalue);
+ return 0;
+@@ -836,6 +831,12 @@ int config_parse_exec_secure_bits(
+ assert(rvalue);
+ assert(data);
+
++ if (isempty(rvalue)) {
++ /* An empty assignment resets the field */
++ c->secure_bits = 0;
++ return 0;
++ }
++
+ FOREACH_WORD_QUOTED(w, l, rvalue, state) {
+ if (first_word(w, "keep-caps"))
+ c->secure_bits |= SECURE_KEEP_CAPS;
+@@ -881,6 +882,12 @@ int config_parse_bounding_set(
+ assert(rvalue);
+ assert(data);
+
++ if (isempty(rvalue)) {
++ /* An empty assignment resets */
++ *capability_bounding_set_drop = 0;
++ return 0;
++ }
++
+ if (rvalue[0] == '~') {
+ invert = true;
+ rvalue++;
+@@ -898,7 +905,7 @@ int config_parse_bounding_set(
+
+ t = strndup(w, l);
+ if (!t)
+- return -ENOMEM;
++ return log_oom();
+
+ r = cap_from_name(t, &cap);
+ if (r < 0) {
+@@ -945,9 +952,11 @@ int config_parse_limit(
+ return 0;
+ }
+
+- if (!*rl)
+- if (!(*rl = new(struct rlimit, 1)))
+- return -ENOMEM;
++ if (!*rl) {
++ *rl = new(struct rlimit, 1);
++ if (!*rl)
++ return log_oom();
++ }
+
+ (*rl)->rlim_cur = (*rl)->rlim_max = (rlim_t) u;
+ return 0;
+@@ -968,21 +977,28 @@ int config_parse_unit_cgroup(
+ size_t l;
+ char *state;
+
++ if (isempty(rvalue)) {
++ /* An empty assignment resets the list */
++ cgroup_bonding_free_list(u->cgroup_bondings, false);
++ u->cgroup_bondings = NULL;
++ return 0;
++ }
++
+ FOREACH_WORD_QUOTED(w, l, rvalue, state) {
+ char _cleanup_free_ *t = NULL, *k = NULL, *ku = NULL;
+ int r;
+
+ t = strndup(w, l);
+ if (!t)
+- return -ENOMEM;
++ return log_oom();
+
+ k = unit_full_printf(u, t);
+ if (!k)
+- return -ENOMEM;
++ return log_oom();
+
+ ku = cunescape(k);
+ if (!ku)
+- return -ENOMEM;
++ return log_oom();
+
+ r = unit_add_cgroup_from_text(u, ku);
+ if (r < 0) {
+@@ -1071,7 +1087,8 @@ int config_parse_kill_signal(
+ assert(rvalue);
+ assert(sig);
+
+- if ((r = signal_from_string_try_harder(rvalue)) <= 0) {
++ r = signal_from_string_try_harder(rvalue);
++ if (r <= 0) {
+ log_error("[%s:%u] Failed to parse kill signal, ignoring: %s", filename, line, rvalue);
+ return 0;
+ }
+@@ -1106,7 +1123,7 @@ int config_parse_exec_mount_flags(
+
+ t = strndup(w, l);
+ if (!t)
+- return -ENOMEM;
++ return log_oom();
+
+ if (streq(t, "shared"))
+ flags |= MS_SHARED;
+@@ -1147,6 +1164,12 @@ int config_parse_timer(
+ assert(rvalue);
+ assert(data);
+
++ if (isempty(rvalue)) {
++ /* Empty assignment resets list */
++ timer_free_values(t);
++ return 0;
++ }
++
+ b = timer_base_from_string(lvalue);
+ if (b < 0) {
+ log_error("[%s:%u] Failed to parse timer base, ignoring: %s", filename, line, lvalue);
+@@ -1171,7 +1194,7 @@ int config_parse_timer(
+
+ v = new0(TimerValue, 1);
+ if (!v)
+- return -ENOMEM;
++ return log_oom();
+
+ v->base = b;
+ v->clock_id = id;
+@@ -1197,6 +1220,7 @@ int config_parse_timer_unit(
+ int r;
+ DBusError error;
+ Unit *u;
++ _cleanup_free_ char *p = NULL;
+
+ assert(filename);
+ assert(lvalue);
+@@ -1205,12 +1229,16 @@ int config_parse_timer_unit(
+
+ dbus_error_init(&error);
+
+- if (endswith(rvalue, ".timer")) {
++ p = unit_name_printf(UNIT(t), rvalue);
++ if (!p)
++ return log_oom();
++
++ if (endswith(p, ".timer")) {
+ log_error("[%s:%u] Unit cannot be of type timer, ignoring: %s", filename, line, rvalue);
+ return 0;
+ }
+
+- r = manager_load_unit(UNIT(t)->manager, rvalue, NULL, NULL, &u);
++ r = manager_load_unit(UNIT(t)->manager, p, NULL, NULL, &u);
+ if (r < 0) {
+ log_error("[%s:%u] Failed to load unit %s, ignoring: %s", filename, line, rvalue, bus_error(&error, r));
+ dbus_error_free(&error);
+@@ -1242,6 +1270,12 @@ int config_parse_path_spec(
+ assert(rvalue);
+ assert(data);
+
++ if (isempty(rvalue)) {
++ /* Empty assignment clears list */
++ path_free_specs(p);
++ return 0;
++ }
++
+ b = path_type_from_string(lvalue);
+ if (b < 0) {
+ log_error("[%s:%u] Failed to parse path type, ignoring: %s", filename, line, lvalue);
+@@ -1331,6 +1365,7 @@ int config_parse_socket_service(
+ int r;
+ DBusError error;
+ Unit *x;
++ _cleanup_free_ char *p = NULL;
+
+ assert(filename);
+ assert(lvalue);
+@@ -1339,12 +1374,16 @@ int config_parse_socket_service(
+
+ dbus_error_init(&error);
+
+- if (!endswith(rvalue, ".service")) {
++ p = unit_name_printf(UNIT(s), rvalue);
++ if (!p)
++ return log_oom();
++
++ if (!endswith(p, ".service")) {
+ log_error("[%s:%u] Unit must be of type service, ignoring: %s", filename, line, rvalue);
+ return 0;
+ }
+
+- r = manager_load_unit(UNIT(s)->manager, rvalue, NULL, &error, &x);
++ r = manager_load_unit(UNIT(s)->manager, p, NULL, &error, &x);
+ if (r < 0) {
+ log_error("[%s:%u] Failed to load unit %s, ignoring: %s", filename, line, rvalue, bus_error(&error, r));
+ dbus_error_free(&error);
+@@ -1381,11 +1420,11 @@ int config_parse_service_sockets(
+
+ t = strndup(w, l);
+ if (!t)
+- return -ENOMEM;
++ return log_oom();
+
+ k = unit_name_printf(UNIT(s), t);
+ if (!k)
+- return -ENOMEM;
++ return log_oom();
+
+ if (!endswith(k, ".socket")) {
+ log_error("[%s:%u] Unit must be of type socket, ignoring: %s",
+@@ -1425,8 +1464,7 @@ int config_parse_service_timeout(
+ assert(s);
+
+ r = config_parse_usec(filename, line, section, lvalue, ltype, rvalue, data, userdata);
+-
+- if (r)
++ if (r < 0)
+ return r;
+
+ if (streq(lvalue, "TimeoutSec")) {
+@@ -1457,9 +1495,17 @@ int config_parse_unit_env_file(
+ assert(rvalue);
+ assert(data);
+
++ if (isempty(rvalue)) {
++ /* Empty assignment frees the list */
++
++ strv_free(*env);
++ *env = NULL;
++ return 0;
++ }
++
+ s = unit_full_printf(u, rvalue);
+ if (!s)
+- return -ENOMEM;
++ return log_oom();
+
+ if (!path_is_absolute(s[0] == '-' ? s + 1 : s)) {
+ log_error("[%s:%u] Path '%s' is not absolute, ignoring.", filename, line, s);
+@@ -1470,7 +1516,7 @@ int config_parse_unit_env_file(
+ k = strv_append(*env, s);
+ free(s);
+ if (!k)
+- return -ENOMEM;
++ return log_oom();
+
+ strv_free(*env);
+ *env = k;
+@@ -1526,6 +1572,13 @@ int config_parse_unit_condition_path(
+ assert(rvalue);
+ assert(data);
+
++ if (isempty(rvalue)) {
++ /* Empty assignment resets the list */
++ condition_free_list(u->conditions);
++ u->conditions = NULL;
++ return 0;
++ }
++
+ trigger = rvalue[0] == '|';
+ if (trigger)
+ rvalue++;
+@@ -1536,7 +1589,7 @@ int config_parse_unit_condition_path(
+
+ p = unit_full_printf(u, rvalue);
+ if (!p)
+- return -ENOMEM;
++ return log_oom();
+
+ if (!path_is_absolute(p)) {
+ log_error("[%s:%u] Path in condition not absolute, ignoring: %s", filename, line, p);
+@@ -1545,7 +1598,7 @@ int config_parse_unit_condition_path(
+
+ c = condition_new(cond, p, trigger, negate);
+ if (!c)
+- return -ENOMEM;
++ return log_oom();
+
+ LIST_PREPEND(Condition, conditions, u->conditions, c);
+ return 0;
+@@ -1572,6 +1625,13 @@ int config_parse_unit_condition_string(
+ assert(rvalue);
+ assert(data);
+
++ if (isempty(rvalue)) {
++ /* Empty assignment resets the list */
++ condition_free_list(u->conditions);
++ u->conditions = NULL;
++ return 0;
++ }
++
+ trigger = rvalue[0] == '|';
+ if (trigger)
+ rvalue++;
+@@ -1582,7 +1642,7 @@ int config_parse_unit_condition_string(
+
+ s = unit_full_printf(u, rvalue);
+ if (!s)
+- return -ENOMEM;
++ return log_oom();
+
+ c = condition_new(cond, s, trigger, negate);
+ if (!c)
+@@ -1612,13 +1672,23 @@ int config_parse_unit_condition_null(
+ assert(rvalue);
+ assert(data);
+
+- if ((trigger = rvalue[0] == '|'))
++ if (isempty(rvalue)) {
++ /* Empty assignment resets the list */
++ condition_free_list(u->conditions);
++ u->conditions = NULL;
++ return 0;
++ }
++
++ trigger = rvalue[0] == '|';
++ if (trigger)
+ rvalue++;
+
+- if ((negate = rvalue[0] == '!'))
++ negate = rvalue[0] == '!';
++ if (negate)
+ rvalue++;
+
+- if ((b = parse_boolean(rvalue)) < 0) {
++ b = parse_boolean(rvalue);
++ if (b < 0) {
+ log_error("[%s:%u] Failed to parse boolean value in condition, ignoring: %s", filename, line, rvalue);
+ return 0;
+ }
+@@ -1626,8 +1696,9 @@ int config_parse_unit_condition_null(
+ if (!b)
+ negate = !negate;
+
+- if (!(c = condition_new(CONDITION_NULL, NULL, trigger, negate)))
+- return -ENOMEM;
++ c = condition_new(CONDITION_NULL, NULL, trigger, negate);
++ if (!c)
++ return log_oom();
+
+ LIST_PREPEND(Condition, conditions, u->conditions, c);
+ return 0;
+@@ -1647,7 +1718,7 @@ int config_parse_unit_cgroup_attr(
+ void *userdata) {
+
+ Unit *u = data;
+- char **l;
++ _cleanup_strv_free_ char **l = NULL;
+ int r;
+
+ assert(filename);
+@@ -1655,19 +1726,23 @@ int config_parse_unit_cgroup_attr(
+ assert(rvalue);
+ assert(data);
+
++ if (isempty(rvalue)) {
++ /* Empty assignment clears the list */
++ cgroup_attribute_free_list(u->cgroup_attributes);
++ u->cgroup_attributes = NULL;
++ return 0;
++ }
++
+ l = strv_split_quoted(rvalue);
+ if (!l)
+- return -ENOMEM;
++ return log_oom();
+
+ if (strv_length(l) != 2) {
+ log_error("[%s:%u] Failed to parse cgroup attribute value, ignoring: %s", filename, line, rvalue);
+- strv_free(l);
+ return 0;
+ }
+
+ r = unit_add_cgroup_attribute(u, NULL, l[0], l[1], NULL);
+- strv_free(l);
+-
+ if (r < 0) {
+ log_error("[%s:%u] Failed to add cgroup attribute value, ignoring: %s", filename, line, rvalue);
+ return 0;
+@@ -1680,7 +1755,7 @@ int config_parse_unit_cpu_shares(const char *filename, unsigned line, const char
+ Unit *u = data;
+ int r;
+ unsigned long ul;
+- char *t;
++ _cleanup_free_ char *t = NULL;
+
+ assert(filename);
+ assert(lvalue);
+@@ -1693,11 +1768,9 @@ int config_parse_unit_cpu_shares(const char *filename, unsigned line, const char
+ }
+
+ if (asprintf(&t, "%lu", ul) < 0)
+- return -ENOMEM;
++ return log_oom();
+
+ r = unit_add_cgroup_attribute(u, "cpu", "cpu.shares", t, NULL);
+- free(t);
+-
+ if (r < 0) {
+ log_error("[%s:%u] Failed to add cgroup attribute value, ignoring: %s", filename, line, rvalue);
+ return 0;
+@@ -1710,7 +1783,7 @@ int config_parse_unit_memory_limit(const char *filename, unsigned line, const ch
+ Unit *u = data;
+ int r;
+ off_t sz;
+- char *t;
++ _cleanup_free_ char *t = NULL;
+
+ assert(filename);
+ assert(lvalue);
+@@ -1723,14 +1796,12 @@ int config_parse_unit_memory_limit(const char *filename, unsigned line, const ch
+ }
+
+ if (asprintf(&t, "%llu", (unsigned long long) sz) < 0)
+- return -ENOMEM;
++ return log_oom();
+
+ r = unit_add_cgroup_attribute(u,
+ "memory",
+ streq(lvalue, "MemorySoftLimit") ? "memory.soft_limit_in_bytes" : "memory.limit_in_bytes",
+ t, NULL);
+- free(t);
+-
+ if (r < 0) {
+ log_error("[%s:%u] Failed to add cgroup attribute value, ignoring: %s", filename, line, rvalue);
+ return 0;
+@@ -1740,7 +1811,7 @@ int config_parse_unit_memory_limit(const char *filename, unsigned line, const ch
+ }
+
+ static int device_map(const char *controller, const char *name, const char *value, char **ret) {
+- char **l;
++ _cleanup_strv_free_ char **l = NULL;
+
+ assert(controller);
+ assert(name);
+@@ -1756,43 +1827,34 @@ static int device_map(const char *controller, const char *name, const char *valu
+ if (streq(l[0], "*")) {
+
+ if (asprintf(ret, "a *:*%s%s",
+- isempty(l[1]) ? "" : " ", strempty(l[1])) < 0) {
+- strv_free(l);
++ isempty(l[1]) ? "" : " ", strempty(l[1])) < 0)
+ return -ENOMEM;
+- }
+-
+ } else {
+ struct stat st;
+
+ if (stat(l[0], &st) < 0) {
+ log_warning("Couldn't stat device %s", l[0]);
+- strv_free(l);
+ return -errno;
+ }
+
+ if (!S_ISCHR(st.st_mode) && !S_ISBLK(st.st_mode)) {
+ log_warning("%s is not a device.", l[0]);
+- strv_free(l);
+ return -ENODEV;
+ }
+
+ if (asprintf(ret, "%c %u:%u%s%s",
+ S_ISCHR(st.st_mode) ? 'c' : 'b',
+ major(st.st_rdev), minor(st.st_rdev),
+- isempty(l[1]) ? "" : " ", strempty(l[1])) < 0) {
+-
+- strv_free(l);
++ isempty(l[1]) ? "" : " ", strempty(l[1])) < 0)
+ return -ENOMEM;
+- }
+ }
+
+- strv_free(l);
+ return 0;
+ }
+
+ int config_parse_unit_device_allow(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata) {
+ Unit *u = data;
+- char **l;
++ _cleanup_strv_free_ char **l = NULL;
+ int r;
+ unsigned k;
+
+@@ -1803,27 +1865,23 @@ int config_parse_unit_device_allow(const char *filename, unsigned line, const ch
+
+ l = strv_split_quoted(rvalue);
+ if (!l)
+- return -ENOMEM;
++ return log_oom();
+
+ k = strv_length(l);
+ if (k < 1 || k > 2) {
+ log_error("[%s:%u] Failed to parse device value, ignoring: %s", filename, line, rvalue);
+- strv_free(l);
+ return 0;
+ }
+
+ if (!streq(l[0], "*") && !path_startswith(l[0], "/dev")) {
+ log_error("[%s:%u] Device node path not absolute, ignoring: %s", filename, line, rvalue);
+- strv_free(l);
+ return 0;
+ }
+
+ if (!isempty(l[1]) && !in_charset(l[1], "rwm")) {
+ log_error("[%s:%u] Device access string invalid, ignoring: %s", filename, line, rvalue);
+- strv_free(l);
+ return 0;
+ }
+- strv_free(l);
+
+ r = unit_add_cgroup_attribute(u, "devices",
+ streq(lvalue, "DeviceAllow") ? "devices.allow" : "devices.deny",
+@@ -1839,7 +1897,7 @@ int config_parse_unit_device_allow(const char *filename, unsigned line, const ch
+
+ static int blkio_map(const char *controller, const char *name, const char *value, char **ret) {
+ struct stat st;
+- char **l;
++ _cleanup_strv_free_ char **l = NULL;
+ dev_t d;
+
+ assert(controller);
+@@ -1849,13 +1907,12 @@ static int blkio_map(const char *controller, const char *name, const char *value
+
+ l = strv_split_quoted(value);
+ if (!l)
+- return -ENOMEM;
++ return log_oom();
+
+ assert(strv_length(l) == 2);
+
+ if (stat(l[0], &st) < 0) {
+ log_warning("Couldn't stat device %s", l[0]);
+- strv_free(l);
+ return -errno;
+ }
+
+@@ -1871,16 +1928,12 @@ static int blkio_map(const char *controller, const char *name, const char *value
+ block_get_whole_disk(d, &d);
+ } else {
+ log_warning("%s is not a block device and file system block device cannot be determined or is not local.", l[0]);
+- strv_free(l);
+ return -ENODEV;
+ }
+
+- if (asprintf(ret, "%u:%u %s", major(d), minor(d), l[1]) < 0) {
+- strv_free(l);
++ if (asprintf(ret, "%u:%u %s", major(d), minor(d), l[1]) < 0)
+ return -ENOMEM;
+- }
+
+- strv_free(l);
+ return 0;
+ }
+
+@@ -1890,7 +1943,8 @@ int config_parse_unit_blkio_weight(const char *filename, unsigned line, const ch
+ unsigned long ul;
+ const char *device = NULL, *weight;
+ unsigned k;
+- char *t, **l;
++ _cleanup_free_ char *t = NULL;
++ _cleanup_strv_free_ char **l = NULL;
+
+ assert(filename);
+ assert(lvalue);
+@@ -1899,12 +1953,11 @@ int config_parse_unit_blkio_weight(const char *filename, unsigned line, const ch
+
+ l = strv_split_quoted(rvalue);
+ if (!l)
+- return -ENOMEM;
++ return log_oom();
+
+ k = strv_length(l);
+ if (k < 1 || k > 2) {
+ log_error("[%s:%u] Failed to parse weight value, ignoring: %s", filename, line, rvalue);
+- strv_free(l);
+ return 0;
+ }
+
+@@ -1917,13 +1970,11 @@ int config_parse_unit_blkio_weight(const char *filename, unsigned line, const ch
+
+ if (device && !path_is_absolute(device)) {
+ log_error("[%s:%u] Failed to parse block device node value, ignoring: %s", filename, line, rvalue);
+- strv_free(l);
+ return 0;
+ }
+
+ if (safe_atolu(weight, &ul) < 0 || ul < 10 || ul > 1000) {
+ log_error("[%s:%u] Failed to parse block IO weight value, ignoring: %s", filename, line, rvalue);
+- strv_free(l);
+ return 0;
+ }
+
+@@ -1931,17 +1982,13 @@ int config_parse_unit_blkio_weight(const char *filename, unsigned line, const ch
+ r = asprintf(&t, "%s %lu", device, ul);
+ else
+ r = asprintf(&t, "%lu", ul);
+- strv_free(l);
+-
+ if (r < 0)
+- return -ENOMEM;
++ return log_oom();
+
+ if (device)
+ r = unit_add_cgroup_attribute(u, "blkio", "blkio.weight_device", t, blkio_map);
+ else
+ r = unit_add_cgroup_attribute(u, "blkio", "blkio.weight", t, NULL);
+- free(t);
+-
+ if (r < 0) {
+ log_error("[%s:%u] Failed to add cgroup attribute value, ignoring: %s", filename, line, rvalue);
+ return 0;
+@@ -1955,7 +2002,8 @@ int config_parse_unit_blkio_bandwidth(const char *filename, unsigned line, const
+ int r;
+ off_t bytes;
+ unsigned k;
+- char *t, **l;
++ _cleanup_free_ char *t = NULL;
++ _cleanup_strv_free_ char **l = NULL;
+
+ assert(filename);
+ assert(lvalue);
+@@ -1964,38 +2012,31 @@ int config_parse_unit_blkio_bandwidth(const char *filename, unsigned line, const
+
+ l = strv_split_quoted(rvalue);
+ if (!l)
+- return -ENOMEM;
++ return log_oom();
+
+ k = strv_length(l);
+ if (k != 2) {
+ log_error("[%s:%u] Failed to parse bandwidth value, ignoring: %s", filename, line, rvalue);
+- strv_free(l);
+ return 0;
+ }
+
+ if (!path_is_absolute(l[0])) {
+ log_error("[%s:%u] Failed to parse block device node value, ignoring: %s", filename, line, rvalue);
+- strv_free(l);
+ return 0;
+ }
+
+ if (parse_bytes(l[1], &bytes) < 0 || bytes <= 0) {
+ log_error("[%s:%u] Failed to parse block IO bandwidth value, ignoring: %s", filename, line, rvalue);
+- strv_free(l);
+ return 0;
+ }
+
+ r = asprintf(&t, "%s %llu", l[0], (unsigned long long) bytes);
+- strv_free(l);
+-
+ if (r < 0)
+- return -ENOMEM;
++ return log_oom();
+
+ r = unit_add_cgroup_attribute(u, "blkio",
+ streq(lvalue, "BlockIOReadBandwidth") ? "blkio.read_bps_device" : "blkio.write_bps_device",
+ t, blkio_map);
+- free(t);
+-
+ if (r < 0) {
+ log_error("[%s:%u] Failed to add cgroup attribute value, ignoring: %s", filename, line, rvalue);
+ return 0;
+@@ -2053,6 +2094,13 @@ int config_parse_documentation(
+ assert(rvalue);
+ assert(u);
+
++ if (isempty(rvalue)) {
++ /* Empty assignment resets the list */
++ strv_free(u->documentation);
++ u->documentation = NULL;
++ return 0;
++ }
++
+ r = config_parse_unit_strv_printf(filename, line, section, lvalue, ltype, rvalue, data, userdata);
+ if (r < 0)
+ return r;
+@@ -2101,6 +2149,13 @@ int config_parse_syscall_filter(
+ assert(rvalue);
+ assert(u);
+
++ if (isempty(rvalue)) {
++ /* Empty assignment resets the list */
++ free(c->syscall_filter);
++ c->syscall_filter = NULL;
++ return 0;
++ }
++
+ if (rvalue[0] == '~') {
+ invert = true;
+ rvalue++;
+@@ -2112,7 +2167,7 @@ int config_parse_syscall_filter(
+ n = (syscall_max() + 31) >> 4;
+ c->syscall_filter = new(uint32_t, n);
+ if (!c->syscall_filter)
+- return -ENOMEM;
++ return log_oom();
+
+ memset(c->syscall_filter, invert ? 0xFF : 0, n * sizeof(uint32_t));
+
+@@ -2132,10 +2187,9 @@ int config_parse_syscall_filter(
+
+ t = strndup(w, l);
+ if (!t)
+- return -ENOMEM;
++ return log_oom();
+
+ id = syscall_from_name(t);
+-
+ if (id < 0) {
+ log_error("[%s:%u] Failed to parse syscall, ignoring: %s",
+ filename, line, t);
+diff --git a/src/core/path.c b/src/core/path.c
+index 767620b..3775577 100644
+--- a/src/core/path.c
++++ b/src/core/path.c
+@@ -248,22 +248,28 @@ static void path_init(Unit *u) {
+ p->directory_mode = 0755;
+ }
+
+-static void path_done(Unit *u) {
+- Path *p = PATH(u);
++void path_free_specs(Path *p) {
+ PathSpec *s;
+
+ assert(p);
+
+- unit_ref_unset(&p->unit);
+-
+ while ((s = p->specs)) {
+- path_spec_unwatch(s, u);
++ path_spec_unwatch(s, UNIT(p));
+ LIST_REMOVE(PathSpec, spec, p->specs, s);
+ path_spec_done(s);
+ free(s);
+ }
+ }
+
++static void path_done(Unit *u) {
++ Path *p = PATH(u);
++
++ assert(p);
++
++ unit_ref_unset(&p->unit);
++ path_free_specs(p);
++}
++
+ int path_add_one_mount_link(Path *p, Mount *m) {
+ PathSpec *s;
+ int r;
+diff --git a/src/core/path.h b/src/core/path.h
+index 7792688..645feef 100644
+--- a/src/core/path.h
++++ b/src/core/path.h
+@@ -98,6 +98,8 @@ void path_unit_notify(Unit *u, UnitActiveState new_state);
+ * any of the paths of this path object */
+ int path_add_one_mount_link(Path *p, Mount *m);
+
++void path_free_specs(Path *p);
++
+ extern const UnitVTable path_vtable;
+
+ const char* path_state_to_string(PathState i);
+diff --git a/src/core/socket.c b/src/core/socket.c
+index d755040..f2d8548 100644
+--- a/src/core/socket.c
++++ b/src/core/socket.c
+@@ -102,8 +102,7 @@ static void socket_unwatch_control_pid(Socket *s) {
+ s->control_pid = 0;
+ }
+
+-static void socket_done(Unit *u) {
+- Socket *s = SOCKET(u);
++void socket_free_ports(Socket *s) {
+ SocketPort *p;
+
+ assert(s);
+@@ -119,6 +118,14 @@ static void socket_done(Unit *u) {
+ free(p->path);
+ free(p);
+ }
++}
++
++static void socket_done(Unit *u) {
++ Socket *s = SOCKET(u);
++
++ assert(s);
++
++ socket_free_ports(s);
+
+ exec_context_done(&s->exec_context);
+ exec_command_free_array(s->exec_command, _SOCKET_EXEC_COMMAND_MAX);
+diff --git a/src/core/socket.h b/src/core/socket.h
+index f099520..e0bae29 100644
+--- a/src/core/socket.h
++++ b/src/core/socket.h
+@@ -163,6 +163,8 @@ int socket_add_one_mount_link(Socket *s, Mount *m);
+ /* Called from the service code when a per-connection service ended */
+ void socket_connection_unref(Socket *s);
+
++void socket_free_ports(Socket *s);
++
+ extern const UnitVTable socket_vtable;
+
+ const char* socket_state_to_string(SocketState i);
+diff --git a/src/core/timer.c b/src/core/timer.c
+index 4453aa0..8061f79 100644
+--- a/src/core/timer.c
++++ b/src/core/timer.c
+@@ -48,8 +48,7 @@ static void timer_init(Unit *u) {
+ watch_init(&t->realtime_watch);
+ }
+
+-static void timer_done(Unit *u) {
+- Timer *t = TIMER(u);
++void timer_free_values(Timer *t) {
+ TimerValue *v;
+
+ assert(t);
+@@ -62,6 +61,14 @@ static void timer_done(Unit *u) {
+
+ free(v);
+ }
++}
++
++static void timer_done(Unit *u) {
++ Timer *t = TIMER(u);
++
++ assert(t);
++
++ timer_free_values(t);
+
+ unit_unwatch_timer(u, &t->monotonic_watch);
+ unit_unwatch_timer(u, &t->realtime_watch);
+diff --git a/src/core/timer.h b/src/core/timer.h
+index 10d3ce1..c145348 100644
+--- a/src/core/timer.h
++++ b/src/core/timer.h
+@@ -84,6 +84,8 @@ struct Timer {
+
+ void timer_unit_notify(Unit *u, UnitActiveState new_state);
+
++void timer_free_values(Timer *t);
++
+ extern const UnitVTable timer_vtable;
+
+ const char *timer_state_to_string(TimerState i);
+diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c
+index 9f5c07c..7f28609 100644
+--- a/src/shared/conf-parser.c
++++ b/src/shared/conf-parser.c
+@@ -377,7 +377,8 @@ int config_parse_int(
+ assert(rvalue);
+ assert(data);
+
+- if ((r = safe_atoi(rvalue, i)) < 0) {
++ r = safe_atoi(rvalue, i);
++ if (r < 0) {
+ log_error("[%s:%u] Failed to parse numeric value, ingoring: %s", filename, line, rvalue);
+ return 0;
+ }
+@@ -403,7 +404,8 @@ int config_parse_long(
+ assert(rvalue);
+ assert(data);
+
+- if ((r = safe_atoli(rvalue, i)) < 0) {
++ r = safe_atoli(rvalue, i);
++ if (r < 0) {
+ log_error("[%s:%u] Failed to parse numeric value, ignoring: %s", filename, line, rvalue);
+ return 0;
+ }
+@@ -429,7 +431,8 @@ int config_parse_uint64(
+ assert(rvalue);
+ assert(data);
+
+- if ((r = safe_atou64(rvalue, u)) < 0) {
++ r = safe_atou64(rvalue, u);
++ if (r < 0) {
+ log_error("[%s:%u] Failed to parse numeric value, ignoring: %s", filename, line, rvalue);
+ return 0;
+ }
+@@ -455,7 +458,8 @@ int config_parse_unsigned(
+ assert(rvalue);
+ assert(data);
+
+- if ((r = safe_atou(rvalue, u)) < 0) {
++ r = safe_atou(rvalue, u);
++ if (r < 0) {
+ log_error("[%s:%u] Failed to parse numeric value: %s", filename, line, rvalue);
+ return r;
+ }
+@@ -595,7 +599,7 @@ int config_parse_string(
+
+ n = strdup(rvalue);
+ if (!n)
+- return -ENOMEM;
++ return log_oom();
+
+ if (!utf8_is_valid(n)) {
+ log_error("[%s:%u] String is not UTF-8 clean, ignoring assignment: %s", filename, line, rvalue);
+@@ -644,7 +648,7 @@ int config_parse_path(
+
+ n = strdup(rvalue);
+ if (!n)
+- return -ENOMEM;
++ return log_oom();
+
+ path_kill_slashes(n);
+
+@@ -677,13 +681,19 @@ int config_parse_strv(
+ assert(rvalue);
+ assert(data);
+
++ if (isempty(rvalue)) {
++ /* Empty assignment resets the list */
++ strv_free(*sv);
++ *sv = NULL;
++ }
++
+ k = strv_length(*sv);
+ FOREACH_WORD_QUOTED(w, l, rvalue, state)
+ k++;
+
+ n = new(char*, k+1);
+ if (!n)
+- return -ENOMEM;
++ return log_oom();
+
+ if (*sv)
+ for (k = 0; (*sv)[k]; k++)
+@@ -694,7 +704,7 @@ int config_parse_strv(
+ FOREACH_WORD_QUOTED(w, l, rvalue, state) {
+ n[k] = cunescape_length(w, l);
+ if (!n[k]) {
+- r = -ENOMEM;
++ r = log_oom();
+ goto fail;
+ }
+
+@@ -744,13 +754,19 @@ int config_parse_path_strv(
+ assert(rvalue);
+ assert(data);
+
++ if (isempty(rvalue)) {
++ /* Empty assignment resets the list */
++ strv_free(*sv);
++ *sv = NULL;
++ }
++
+ k = strv_length(*sv);
+ FOREACH_WORD_QUOTED(w, l, rvalue, state)
+ k++;
+
+ n = new(char*, k+1);
+ if (!n)
+- return -ENOMEM;
++ return log_oom();
+
+ k = 0;
+ if (*sv)
+@@ -760,7 +776,7 @@ int config_parse_path_strv(
+ FOREACH_WORD_QUOTED(w, l, rvalue, state) {
+ n[k] = strndup(w, l);
+ if (!n[k]) {
+- r = -ENOMEM;
++ r = log_oom();
+ goto fail;
+ }
+
+@@ -957,6 +973,16 @@ int config_parse_set_status(
+ assert(rvalue);
+ assert(data);
+
++ if (isempty(rvalue)) {
++ /* Empty assignment resets the list */
++
++ set_free(status_set->signal);
++ set_free(status_set->code);
++
++ status_set->signal = status_set->code = NULL;
++ return 0;
++ }
++
+ FOREACH_WORD(w, l, rvalue, state) {
+ int val;
+ char *temp;
diff --git a/0043-service-properly-signal-permanent-failure-of-a-servi.patch b/0043-service-properly-signal-permanent-failure-of-a-servi.patch
new file mode 100644
index 0000000..d157fb6
--- /dev/null
+++ b/0043-service-properly-signal-permanent-failure-of-a-servi.patch
@@ -0,0 +1,38 @@
+From d0b3169a9406ebf151b77b1be0e9b9d508349b98 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 17 Jan 2013 04:52:19 +0100
+Subject: [PATCH] service: properly signal permanent failure of a service to
+ its socket
+
+This makes sure that a service is not indefinitely restarted in a tight
+loop if it fails before it is able to process its socket.
+
+This corrects the breakage introduced with
+8d1b002a2e389e79a2414491523de549783abf73. Shame on me.
+(cherry picked from commit 464876c9c410b2f5bb997259510a13d0ee7d0af0)
+---
+ src/core/service.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index 82b664f..d6a0ffe 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -1536,6 +1536,9 @@ static void service_set_state(Service *s, ServiceState state) {
+ s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
+ }
+
++ if (state == SERVICE_FAILED)
++ service_notify_sockets_dead(s, s->result == SERVICE_FAILURE_START_LIMIT);
++
+ if (state == SERVICE_DEAD ||
+ state == SERVICE_STOP ||
+ state == SERVICE_STOP_SIGTERM ||
+@@ -1543,7 +1546,6 @@ static void service_set_state(Service *s, ServiceState state) {
+ state == SERVICE_STOP_POST ||
+ state == SERVICE_FINAL_SIGTERM ||
+ state == SERVICE_FINAL_SIGKILL ||
+- state == SERVICE_FAILED ||
+ state == SERVICE_AUTO_RESTART)
+ service_notify_sockets_dead(s, false);
+
diff --git a/0044-util-fix-bad-memory-access.patch b/0044-util-fix-bad-memory-access.patch
new file mode 100644
index 0000000..6eea1a6
--- /dev/null
+++ b/0044-util-fix-bad-memory-access.patch
@@ -0,0 +1,22 @@
+From da252dce62cf33efebc91834f5ee852e745d66ce Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 17 Jan 2013 17:38:00 +0100
+Subject: [PATCH] util: fix bad memory access (cherry picked from commit
+ 86ed7ec58b9b6a0907bbb3b8d07c930e52915de0)
+
+---
+ src/shared/util.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/src/shared/util.c b/src/shared/util.c
+index 13f1a1c..b467ea3 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -439,7 +439,6 @@ int get_parent_of_pid(pid_t pid, pid_t *_ppid) {
+
+ if (!fgets(line, sizeof(line), f)) {
+ r = feof(f) ? -EIO : -errno;
+- fclose(f);
+ return r;
+ }
+
diff --git a/0045-hwdb-update.patch b/0045-hwdb-update.patch
new file mode 100644
index 0000000..876e053
--- /dev/null
+++ b/0045-hwdb-update.patch
@@ -0,0 +1,3691 @@
+From a804f1d9024668957f95ee454ba2733a1555747f Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Fri, 18 Jan 2013 00:15:25 +0100
+Subject: [PATCH] hwdb: update (cherry picked from commit
+ 34048c8ca6446497afc69d4deb0c5ce42dffc010)
+
+---
+ hwdb/20-OUI.hwdb | 450 +++++++++++++++++++--
+ hwdb/20-pci-vendor-product.hwdb | 840 ++++++++++++++++++++++++++++------------
+ hwdb/20-usb-vendor-product.hwdb | 15 +
+ 3 files changed, 1020 insertions(+), 285 deletions(-)
+
+diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb
+index be98198..ac07a5d 100644
+--- a/hwdb/20-OUI.hwdb
++++ b/hwdb/20-OUI.hwdb
+@@ -56,7 +56,7 @@ OUI:0050C2010*
+ ID_OUI_FROM_DATABASE=Moisture Systems
+
+ OUI:0050C2011*
+- ID_OUI_FROM_DATABASE=BIHL & Wiedemann GmbH
++ ID_OUI_FROM_DATABASE=Bihl + Wiedemann GmbH
+
+ OUI:0050C2012*
+ ID_OUI_FROM_DATABASE=Floware System Solutions Ltd.
+@@ -3656,7 +3656,7 @@ OUI:0050C24CC*
+ ID_OUI_FROM_DATABASE=ImpediMed Limited
+
+ OUI:0050C24CD*
+- ID_OUI_FROM_DATABASE=Adasoft AG
++ ID_OUI_FROM_DATABASE=Bixi Systems AG
+
+ OUI:0050C24CE*
+ ID_OUI_FROM_DATABASE=Open Date Equipment Limited
+@@ -5174,7 +5174,7 @@ OUI:0050C26C7*
+ ID_OUI_FROM_DATABASE=QuickCircuit Ltd.
+
+ OUI:0050C26C8*
+- ID_OUI_FROM_DATABASE=B&S MEDIA Co., LTD.
++ ID_OUI_FROM_DATABASE=B&S MEDIA CO., LTD.
+
+ OUI:0050C26C9*
+ ID_OUI_FROM_DATABASE=NETAMI
+@@ -5375,7 +5375,7 @@ OUI:0050C270A*
+ ID_OUI_FROM_DATABASE=Efficient Channel Coding
+
+ OUI:0050C270B*
+- ID_OUI_FROM_DATABASE=B.E.A.R. Solutions (Australasia) Pty Ltd
++ ID_OUI_FROM_DATABASE=B.E.A.R. Solutions (Australasia) Pty, Ltd
+
+ OUI:0050C270C*
+ ID_OUI_FROM_DATABASE=Exertus
+@@ -7553,7 +7553,7 @@ OUI:0050C29E2*
+ ID_OUI_FROM_DATABASE=E-ViEWS SAFETY SYSTEMS, INC
+
+ OUI:0050C29E3*
+- ID_OUI_FROM_DATABASE=beON Automatenmanagement GmbH
++ ID_OUI_FROM_DATABASE=SAI Informationstechnik
+
+ OUI:0050C29E4*
+ ID_OUI_FROM_DATABASE=Pyxis Controls WLL
+@@ -9320,7 +9320,7 @@ OUI:0050C2C36*
+ ID_OUI_FROM_DATABASE=SET GmbH
+
+ OUI:0050C2C37*
+- ID_OUI_FROM_DATABASE=BEAR Solutions (Australasia) Pty Ltd
++ ID_OUI_FROM_DATABASE=B.E.A.R. Solutions (Australasia) Pty, Ltd
+
+ OUI:0050C2C38*
+ ID_OUI_FROM_DATABASE=Computer Automation Technology Inc
+@@ -9881,7 +9881,7 @@ OUI:0050C2CF4*
+ ID_OUI_FROM_DATABASE=Baudisch Electronic GmbH
+
+ OUI:0050C2CF5*
+- ID_OUI_FROM_DATABASE=Aircell
++ ID_OUI_FROM_DATABASE=AirCell Inc.
+
+ OUI:0050C2CF6*
+ ID_OUI_FROM_DATABASE=Epec Oy
+@@ -10178,7 +10178,7 @@ OUI:0050C2D58*
+ ID_OUI_FROM_DATABASE=NIK-ELEKTRONIKA Ltd
+
+ OUI:0050C2D59*
+- ID_OUI_FROM_DATABASE=Buanco System A/S
++ ID_OUI_FROM_DATABASE=BUANCO SYSTEM A/S
+
+ OUI:0050C2D5A*
+ ID_OUI_FROM_DATABASE=Embedded Monitoring Systems Ltd.
+@@ -10535,7 +10535,7 @@ OUI:0050C2DD0*
+ ID_OUI_FROM_DATABASE=IDC Solutions Pty Ltd
+
+ OUI:0050C2DD1*
+- ID_OUI_FROM_DATABASE=Dr. Ing. K. Brankamp System Prozessautomation GmbH
++ ID_OUI_FROM_DATABASE=Brankamp GmbH
+
+ OUI:0050C2DD2*
+ ID_OUI_FROM_DATABASE=Electronic Applications, Inc.
+@@ -12547,6 +12547,51 @@ OUI:40D855074*
+ OUI:40D855075*
+ ID_OUI_FROM_DATABASE=Teraflops
+
++OUI:40D855076*
++ ID_OUI_FROM_DATABASE=INTERNET PROTOCOLO LOGICA SL
++
++OUI:40D855077*
++ ID_OUI_FROM_DATABASE=TOEC TECHNOLOGY CO.,LTD
++
++OUI:40D855078*
++ ID_OUI_FROM_DATABASE=NACHI-FUJIKOSHI CORP
++
++OUI:40D855079*
++ ID_OUI_FROM_DATABASE=DelfiSolutions A/S
++
++OUI:40D85507A*
++ ID_OUI_FROM_DATABASE=4embedded
++
++OUI:40D85507B*
++ ID_OUI_FROM_DATABASE=IPS Technology Limited
++
++OUI:40D85507C*
++ ID_OUI_FROM_DATABASE=Agramkow Fluid Systems A/S
++
++OUI:40D85507D*
++ ID_OUI_FROM_DATABASE=Wuxi SiNeng New Energy Co., Ltd.
++
++OUI:40D85507E*
++ ID_OUI_FROM_DATABASE=TESCOM CORPORATION
++
++OUI:40D85507F*
++ ID_OUI_FROM_DATABASE=Wheatstone Corporation
++
++OUI:40D855080*
++ ID_OUI_FROM_DATABASE=Honeywell
++
++OUI:40D855081*
++ ID_OUI_FROM_DATABASE=Sicon srl
++
++OUI:40D855082*
++ ID_OUI_FROM_DATABASE=ard sa
++
++OUI:40D855083*
++ ID_OUI_FROM_DATABASE=DELOPT
++
++OUI:40D855084*
++ ID_OUI_FROM_DATABASE=Papendorf Software Engineering GmbH
++
+ OUI:000000*
+ ID_OUI_FROM_DATABASE=XEROX CORPORATION
+
+@@ -16814,7 +16859,7 @@ OUI:000590*
+ ID_OUI_FROM_DATABASE=Swissvoice Ltd.
+
+ OUI:000591*
+- ID_OUI_FROM_DATABASE=Active Silicon Ltd.
++ ID_OUI_FROM_DATABASE=Active Silicon Ltd
+
+ OUI:000592*
+ ID_OUI_FROM_DATABASE=Pultek Corp.
+@@ -17108,7 +17153,7 @@ OUI:0005F2*
+ ID_OUI_FROM_DATABASE=Power R, Inc.
+
+ OUI:0005F3*
+- ID_OUI_FROM_DATABASE=Weboyn
++ ID_OUI_FROM_DATABASE=Webyn
+
+ OUI:0005F4*
+ ID_OUI_FROM_DATABASE=System Base Co., Ltd.
+@@ -17324,7 +17369,7 @@ OUI:00063A*
+ ID_OUI_FROM_DATABASE=Dura Micro, Inc.
+
+ OUI:00063B*
+- ID_OUI_FROM_DATABASE=Arcturus Networks, Inc.
++ ID_OUI_FROM_DATABASE=Arcturus Networks Inc.
+
+ OUI:00063C*
+ ID_OUI_FROM_DATABASE=Intrinsyc Europe Ltd
+@@ -17645,7 +17690,7 @@ OUI:0006A5*
+ ID_OUI_FROM_DATABASE=PINON Corp.
+
+ OUI:0006A6*
+- ID_OUI_FROM_DATABASE=Artistic Licence (UK) Ltd
++ ID_OUI_FROM_DATABASE=Artistic Licence Engineering Ltd
+
+ OUI:0006A7*
+ ID_OUI_FROM_DATABASE=Primarion
+@@ -21332,7 +21377,7 @@ OUI:000B8F*
+ ID_OUI_FROM_DATABASE=AKITA ELECTRONICS SYSTEMS CO.,LTD.
+
+ OUI:000B90*
+- ID_OUI_FROM_DATABASE=Adva Optical Networking Inc.
++ ID_OUI_FROM_DATABASE=ADVA Optical Networking Ltd.
+
+ OUI:000B91*
+ ID_OUI_FROM_DATABASE=Aglaia Gesellschaft für Bildverarbeitung und Kommunikation mbH
+@@ -21896,7 +21941,7 @@ OUI:000C4C*
+ ID_OUI_FROM_DATABASE=Arcor AG&Co.
+
+ OUI:000C4D*
+- ID_OUI_FROM_DATABASE=ACRA CONTROL
++ ID_OUI_FROM_DATABASE=Curtiss-Wright Controls Avionics & Electronics
+
+ OUI:000C4E*
+ ID_OUI_FROM_DATABASE=Winbest Technology CO,LT
+@@ -22736,7 +22781,7 @@ OUI:000D66*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
+ OUI:000D67*
+- ID_OUI_FROM_DATABASE=BelAir Networks Inc.
++ ID_OUI_FROM_DATABASE=Ericsson
+
+ OUI:000D68*
+ ID_OUI_FROM_DATABASE=Vinci Systems, Inc.
+@@ -24647,7 +24692,7 @@ OUI:000FEB*
+ ID_OUI_FROM_DATABASE=Cylon Controls
+
+ OUI:000FEC*
+- ID_OUI_FROM_DATABASE=Arkus Inc.
++ ID_OUI_FROM_DATABASE=ARKUS Inc.
+
+ OUI:000FED*
+ ID_OUI_FROM_DATABASE=Anam Electronics Co., Ltd
+@@ -25931,7 +25976,7 @@ OUI:001198*
+ ID_OUI_FROM_DATABASE=Prism Media Products Limited
+
+ OUI:001199*
+- ID_OUI_FROM_DATABASE=2wcom GmbH
++ ID_OUI_FROM_DATABASE=2wcom Systems GmbH
+
+ OUI:00119A*
+ ID_OUI_FROM_DATABASE=Alkeria srl
+@@ -26249,7 +26294,7 @@ OUI:001202*
+ ID_OUI_FROM_DATABASE=Decrane Aerospace - Audio International Inc.
+
+ OUI:001203*
+- ID_OUI_FROM_DATABASE=Activ Networks
++ ID_OUI_FROM_DATABASE=ActivNetworks
+
+ OUI:001204*
+ ID_OUI_FROM_DATABASE=u10 Networks, Inc.
+@@ -29669,7 +29714,7 @@ OUI:001676*
+ ID_OUI_FROM_DATABASE=Intel Corporation
+
+ OUI:001677*
+- ID_OUI_FROM_DATABASE=Bihl+Wiedemann GmbH
++ ID_OUI_FROM_DATABASE=Bihl + Wiedemann GmbH
+
+ OUI:001678*
+ ID_OUI_FROM_DATABASE=SHENZHEN BAOAN GAOKE ELECTRONICS CO., LTD
+@@ -30974,7 +31019,7 @@ OUI:00182C*
+ ID_OUI_FROM_DATABASE=Ascend Networks, Inc.
+
+ OUI:00182D*
+- ID_OUI_FROM_DATABASE=Artec Group OÜ
++ ID_OUI_FROM_DATABASE=Artec Design
+
+ OUI:00182E*
+ ID_OUI_FROM_DATABASE=XStreamHD, LLC
+@@ -32852,7 +32897,7 @@ OUI:001A9E*
+ ID_OUI_FROM_DATABASE=ICON Digital International Limited
+
+ OUI:001A9F*
+- ID_OUI_FROM_DATABASE=A-Link Europe Ltd
++ ID_OUI_FROM_DATABASE=A-Link Ltd
+
+ OUI:001AA0*
+ ID_OUI_FROM_DATABASE=Dell Inc
+@@ -38903,7 +38948,7 @@ OUI:002281*
+ ID_OUI_FROM_DATABASE=Daintree Networks Inc
+
+ OUI:002282*
+- ID_OUI_FROM_DATABASE=8086 Limited
++ ID_OUI_FROM_DATABASE=8086 Consultancy
+
+ OUI:002283*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+@@ -39113,7 +39158,7 @@ OUI:0022C7*
+ ID_OUI_FROM_DATABASE=SEGGER Microcontroller GmbH & Co. KG
+
+ OUI:0022C8*
+- ID_OUI_FROM_DATABASE=Applied Instruments
++ ID_OUI_FROM_DATABASE=Applied Instruments B.V.
+
+ OUI:0022C9*
+ ID_OUI_FROM_DATABASE=Lenord, Bauer & Co GmbH
+@@ -41723,7 +41768,7 @@ OUI:00263B*
+ ID_OUI_FROM_DATABASE=Onbnetech
+
+ OUI:00263C*
+- ID_OUI_FROM_DATABASE=Bachmann GmbH & Co. KG
++ ID_OUI_FROM_DATABASE=Bachmann Technology GmbH & Co. KG
+
+ OUI:00263D*
+ ID_OUI_FROM_DATABASE=MIA Corporation
+@@ -42407,7 +42452,7 @@ OUI:002722*
+ ID_OUI_FROM_DATABASE=Ubiquiti Networks
+
+ OUI:0027F8*
+- ID_OUI_FROM_DATABASE=Brocade Communications Systems, Inc
++ ID_OUI_FROM_DATABASE=Brocade Communications Systems, Inc.
+
+ OUI:002A6A*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+@@ -43055,7 +43100,7 @@ OUI:0030D3*
+ ID_OUI_FROM_DATABASE=Agilent Technologies
+
+ OUI:0030D4*
+- ID_OUI_FROM_DATABASE=AAE Systems, Inc
++ ID_OUI_FROM_DATABASE=AAE Systems, Inc.
+
+ OUI:0030D5*
+ ID_OUI_FROM_DATABASE=DResearch GmbH
+@@ -44516,7 +44561,7 @@ OUI:0050B1*
+ ID_OUI_FROM_DATABASE=GIDDINGS & LEWIS
+
+ OUI:0050B2*
+- ID_OUI_FROM_DATABASE=BRODEL AUTOMATION
++ ID_OUI_FROM_DATABASE=BRODEL GmbH
+
+ OUI:0050B3*
+ ID_OUI_FROM_DATABASE=VOICEBOARD CORPORATION
+@@ -45514,6 +45559,9 @@ OUI:006440*
+ OUI:0064A6*
+ ID_OUI_FROM_DATABASE=Maquet CardioVascular
+
++OUI:00664B*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:006B9E*
+ ID_OUI_FROM_DATABASE=VIZIO Inc
+
+@@ -49244,7 +49292,7 @@ OUI:00D08A*
+ ID_OUI_FROM_DATABASE=PHOTRON USA
+
+ OUI:00D08B*
+- ID_OUI_FROM_DATABASE=ADVA Optical Networking Ltd
++ ID_OUI_FROM_DATABASE=ADVA Optical Networking Ltd.
+
+ OUI:00D08C*
+ ID_OUI_FROM_DATABASE=GENOA TECHNOLOGY, INC.
+@@ -50569,6 +50617,9 @@ OUI:044A50*
+ OUI:044BFF*
+ ID_OUI_FROM_DATABASE=GuangZhou Hedy Digital Technology Co., Ltd
+
++OUI:044CEF*
++ ID_OUI_FROM_DATABASE=Fujian Sanao Technology Co.,Ltd
++
+ OUI:044FAA*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
+@@ -50693,7 +50744,7 @@ OUI:04E1C8*
+ ID_OUI_FROM_DATABASE=IMS Soluções em Energia Ltda.
+
+ OUI:04E2F8*
+- ID_OUI_FROM_DATABASE=AEP srl
++ ID_OUI_FROM_DATABASE=AEP Ticketing solutions srl
+
+ OUI:04E451*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+@@ -51178,6 +51229,9 @@ OUI:080CC9*
+ OUI:080D84*
+ ID_OUI_FROM_DATABASE=GECO, Inc.
+
++OUI:080EA8*
++ ID_OUI_FROM_DATABASE=Velex s.r.l.
++
+ OUI:080FFA*
+ ID_OUI_FROM_DATABASE=KSP INC.
+
+@@ -51253,6 +51307,9 @@ OUI:085B0E*
+ OUI:08606E*
+ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+
++OUI:086361*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:0868D0*
+ ID_OUI_FROM_DATABASE=Japan System Design
+
+@@ -51274,6 +51331,9 @@ OUI:0876FF*
+ OUI:087999*
+ ID_OUI_FROM_DATABASE=AIM GmbH
+
++OUI:087A4C*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:087BAA*
+ ID_OUI_FROM_DATABASE=SVYAZKOMPLEKTSERVICE, LLC
+
+@@ -51376,6 +51436,9 @@ OUI:08FAE0*
+ OUI:08FC52*
+ ID_OUI_FROM_DATABASE=OpenXS BV
+
++OUI:08FC88*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:0C130B*
+ ID_OUI_FROM_DATABASE=Uniqoteq Ltd.
+
+@@ -51457,6 +51520,9 @@ OUI:0C7D7C*
+ OUI:0C8230*
+ ID_OUI_FROM_DATABASE=SHENZHEN MAGNUS TECHNOLOGIES CO.,LTD
+
++OUI:0C8268*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:0C826A*
+ ID_OUI_FROM_DATABASE=Wuhan Huagong Genuine Optics Technology Co., Ltd
+
+@@ -51481,6 +51547,9 @@ OUI:0C924E*
+ OUI:0C93FB*
+ ID_OUI_FROM_DATABASE=BNS Solutions
+
++OUI:0C96BF*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:0C9D56*
+ ID_OUI_FROM_DATABASE=Consort Controls Ltd
+
+@@ -51871,6 +51940,9 @@ OUI:141BBD*
+ OUI:141BF0*
+ ID_OUI_FROM_DATABASE=Intellimedia Systems Ltd
+
++OUI:1423D7*
++ ID_OUI_FROM_DATABASE=EUTRONIX CO., LTD.
++
+ OUI:142DF5*
+ ID_OUI_FROM_DATABASE=Amphitech
+
+@@ -51946,6 +52018,9 @@ OUI:148FC6*
+ OUI:149090*
+ ID_OUI_FROM_DATABASE=KongTop industrial(shen zhen)CO.,LTD
+
++OUI:149448*
++ ID_OUI_FROM_DATABASE=BLU CASTLE S.A.
++
+ OUI:149FE8*
+ ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
+
+@@ -52225,6 +52300,9 @@ OUI:18E7F4*
+ OUI:18E80F*
+ ID_OUI_FROM_DATABASE=Viking Electronics Inc.
+
++OUI:18E8DD*
++ ID_OUI_FROM_DATABASE=MODULETEK
++
+ OUI:18EF63*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
+@@ -52279,12 +52357,18 @@ OUI:1C3477*
+ OUI:1C35F1*
+ ID_OUI_FROM_DATABASE=NEW Lift Neue Elektronische Wege Steuerungsbau GmbH
+
++OUI:1C37BF*
++ ID_OUI_FROM_DATABASE=Cloudium Systems Ltd.
++
+ OUI:1C3A4F*
+ ID_OUI_FROM_DATABASE=AccuSpec Electronics, LLC
+
+ OUI:1C3DE7*
+ ID_OUI_FROM_DATABASE=Sigma Koki Co.,Ltd.
+
++OUI:1C3E84*
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
++
+ OUI:1C43EC*
+ ID_OUI_FROM_DATABASE=JAPAN CIRCUIT CO.,LTD
+
+@@ -52393,6 +52477,9 @@ OUI:1CB17F*
+ OUI:1CB243*
+ ID_OUI_FROM_DATABASE=TDC A/S
+
++OUI:1CBA8C*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:1CBBA8*
+ ID_OUI_FROM_DATABASE=OJSC "Ufimskiy Zavod "Promsvyaz"
+
+@@ -52435,6 +52522,9 @@ OUI:1CF061*
+ OUI:1CF5E7*
+ ID_OUI_FROM_DATABASE=Turtle Industry Co., Ltd.
+
++OUI:1CFA68*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:1CFEA7*
+ ID_OUI_FROM_DATABASE=IDentytech Solutins Ltd.
+
+@@ -52732,6 +52822,9 @@ OUI:24767D*
+ OUI:247703*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
++OUI:2481AA*
++ ID_OUI_FROM_DATABASE=KSH International Co., Ltd.
++
+ OUI:24828A*
+ ID_OUI_FROM_DATABASE=Prowave Technologies Ltd.
+
+@@ -52864,6 +52957,9 @@ OUI:28162E*
+ OUI:2817CE*
+ ID_OUI_FROM_DATABASE=Omnisense Ltd
+
++OUI:281878*
++ ID_OUI_FROM_DATABASE=Microsoft Corporation
++
+ OUI:2818FD*
+ ID_OUI_FROM_DATABASE=Aditya Infotech Ltd.
+
+@@ -52873,6 +52969,9 @@ OUI:2826A6*
+ OUI:2829D9*
+ ID_OUI_FROM_DATABASE=GlobalBeiMing technology (Beijing)Co. Ltd
+
++OUI:283152*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:283410*
+ ID_OUI_FROM_DATABASE=Enigma Diagnostics Limited
+
+@@ -52993,6 +53092,9 @@ OUI:28C718*
+ OUI:28C914*
+ ID_OUI_FROM_DATABASE=Taimag Corporation
+
++OUI:28CBEB*
++ ID_OUI_FROM_DATABASE=One
++
+ OUI:28CC01*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+@@ -53008,6 +53110,9 @@ OUI:28CD4C*
+ OUI:28CFDA*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
++OUI:28CFE9*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:28D1AF*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
+@@ -53080,6 +53185,9 @@ OUI:2C26C5*
+ OUI:2C27D7*
+ ID_OUI_FROM_DATABASE=Hewlett-Packard Company
+
++OUI:2C282D*
++ ID_OUI_FROM_DATABASE=BBK COMMUNICATIAO TECHNOLOGY CO.,LTD.
++
+ OUI:2C2D48*
+ ID_OUI_FROM_DATABASE=bct electronic GesmbH
+
+@@ -53098,6 +53206,9 @@ OUI:2C36A0*
+ OUI:2C36F8*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
++OUI:2C3996*
++ ID_OUI_FROM_DATABASE=SAGEMCOM
++
+ OUI:2C3A28*
+ ID_OUI_FROM_DATABASE=Fagor Electrónica
+
+@@ -53122,6 +53233,9 @@ OUI:2C441B*
+ OUI:2C542D*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
++OUI:2C59E5*
++ ID_OUI_FROM_DATABASE=Hewlett Packard
++
+ OUI:2C5AA3*
+ ID_OUI_FROM_DATABASE=PROMATE ELECTRONIC CO.LTD
+
+@@ -53143,9 +53257,6 @@ OUI:2C750F*
+ OUI:2C768A*
+ ID_OUI_FROM_DATABASE=Hewlett-Packard Company
+
+-OUI:2C7AFE*
+- ID_OUI_FROM_DATABASE=IEE&E "Black" ops
+-
+ OUI:2C7B5A*
+ ID_OUI_FROM_DATABASE=Milper Ltd
+
+@@ -53206,6 +53317,9 @@ OUI:2CCD27*
+ OUI:2CCD43*
+ ID_OUI_FROM_DATABASE=Summit Technology Group
+
++OUI:2CD05A*
++ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
++
+ OUI:2CD1DA*
+ ID_OUI_FROM_DATABASE=Sanjole, Inc.
+
+@@ -53234,7 +53348,10 @@ OUI:2CEE26*
+ ID_OUI_FROM_DATABASE=Petroleum Geo-Services
+
+ OUI:2CF4C5*
+- ID_OUI_FROM_DATABASE=Avaya Inc
++ ID_OUI_FROM_DATABASE=Avaya, Inc
++
++OUI:30055C*
++ ID_OUI_FROM_DATABASE=Brother industries, LTD.
+
+ OUI:300B9C*
+ ID_OUI_FROM_DATABASE=Delta Mobile Systems, Inc.
+@@ -53575,6 +53692,9 @@ OUI:34C803*
+ OUI:34C99D*
+ ID_OUI_FROM_DATABASE=EIDOLON COMMUNICATIONS TECHNOLOGY CO. LTD.
+
++OUI:34CDBE*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:34CE94*
+ ID_OUI_FROM_DATABASE=Parsec (Pty) Ltd
+
+@@ -53692,6 +53812,9 @@ OUI:3863F6*
+ OUI:386645*
+ ID_OUI_FROM_DATABASE=OOSIC Technology CO.,Ltd
+
++OUI:386793*
++ ID_OUI_FROM_DATABASE=Asia Optical Co., Inc.
++
+ OUI:386BBB*
+ ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+
+@@ -53914,6 +54037,9 @@ OUI:3C81D8*
+ OUI:3C83B5*
+ ID_OUI_FROM_DATABASE=Advance Vision Electronics Co. Ltd.
+
++OUI:3C86A8*
++ ID_OUI_FROM_DATABASE=Sangshin elecom .co,, LTD
++
+ OUI:3C8AE5*
+ ID_OUI_FROM_DATABASE=Tensun Information Technology(Hangzhou) Co.,LTD
+
+@@ -54019,6 +54145,9 @@ OUI:3CF52C*
+ OUI:3CF72A*
+ ID_OUI_FROM_DATABASE=Nokia Corporation
+
++OUI:3CFB96*
++ ID_OUI_FROM_DATABASE=Emcraft Systems LLC
++
+ OUI:4001C6*
+ ID_OUI_FROM_DATABASE=3COM EUROPE LTD
+
+@@ -54094,6 +54223,9 @@ OUI:404D8E*
+ OUI:4050E0*
+ ID_OUI_FROM_DATABASE=Milton Security Group LLC
+
++OUI:40516C*
++ ID_OUI_FROM_DATABASE=Grandex International Corporation
++
+ OUI:40520D*
+ ID_OUI_FROM_DATABASE=Pico Technology
+
+@@ -54173,7 +54305,7 @@ OUI:40987B*
+ ID_OUI_FROM_DATABASE=Aisino Corporation
+
+ OUI:409FC7*
+- ID_OUI_FROM_DATABASE=BAEKCHUN ENC Co., Ltd.
++ ID_OUI_FROM_DATABASE=BAEKCHUN I&C Co., Ltd.
+
+ OUI:40A6A4*
+ ID_OUI_FROM_DATABASE=PassivSystems Ltd
+@@ -54214,6 +54346,9 @@ OUI:40C245*
+ OUI:40C7C9*
+ ID_OUI_FROM_DATABASE=Naviit Inc.
+
++OUI:40CBA8*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:40CD3A*
+ ID_OUI_FROM_DATABASE=Z3 Technology
+
+@@ -54226,6 +54361,9 @@ OUI:40D40E*
+ OUI:40D559*
+ ID_OUI_FROM_DATABASE=MICRO S.E.R.I.
+
++OUI:40E730*
++ ID_OUI_FROM_DATABASE=DEY Storage Systems, Inc.
++
+ OUI:40E793*
+ ID_OUI_FROM_DATABASE=Shenzhen Siviton Technology Co.,Ltd
+
+@@ -54284,7 +54422,7 @@ OUI:442B03*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
+ OUI:44322A*
+- ID_OUI_FROM_DATABASE=Avaya Inc
++ ID_OUI_FROM_DATABASE=Avaya, Inc
+
+ OUI:44334C*
+ ID_OUI_FROM_DATABASE=Shenzhen Bilian electronic CO.,LTD
+@@ -54469,6 +54607,9 @@ OUI:44ED57*
+ OUI:44F459*
+ ID_OUI_FROM_DATABASE=Samsung Electronics
+
++OUI:44F849*
++ ID_OUI_FROM_DATABASE=Union Pacific Railroad
++
+ OUI:44FB42*
+ ID_OUI_FROM_DATABASE=Apple
+
+@@ -54625,6 +54766,9 @@ OUI:48F8B3*
+ OUI:48F8E1*
+ ID_OUI_FROM_DATABASE=Alcatel Lucent WT
+
++OUI:48F925*
++ ID_OUI_FROM_DATABASE=Maestronic
++
+ OUI:48FCB8*
+ ID_OUI_FROM_DATABASE=Woodstream Corporation
+
+@@ -54742,6 +54886,9 @@ OUI:4C774F*
+ OUI:4C7897*
+ ID_OUI_FROM_DATABASE=Arrowhead Alarm Products Ltd
+
++OUI:4C804F*
++ ID_OUI_FROM_DATABASE=Armstrong Monitoring Corp
++
+ OUI:4C8093*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
+@@ -54808,6 +54955,9 @@ OUI:4CC94F*
+ OUI:4CCA53*
+ ID_OUI_FROM_DATABASE=Skyera, Inc.
+
++OUI:4CCC34*
++ ID_OUI_FROM_DATABASE=Motorola Solutions Inc.
++
+ OUI:4CE676*
+ ID_OUI_FROM_DATABASE=Buffalo Inc.
+
+@@ -54829,6 +54979,9 @@ OUI:5001BB*
+ OUI:50053D*
+ ID_OUI_FROM_DATABASE=CyWee Group Ltd
+
++OUI:500604*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:500B32*
+ ID_OUI_FROM_DATABASE=Foxda Technology Industrial(ShenZhen)Co.,LTD
+
+@@ -54865,6 +55018,9 @@ OUI:502DF4*
+ OUI:502ECE*
+ ID_OUI_FROM_DATABASE=Asahi Electronics Co.,Ltd
+
++OUI:503275*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:503955*
+ ID_OUI_FROM_DATABASE=Cisco SPVTG
+
+@@ -54943,6 +55099,9 @@ OUI:50934F*
+ OUI:509772*
+ ID_OUI_FROM_DATABASE=Westinghouse Digital
+
++OUI:509F27*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:50A4C8*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+@@ -54986,7 +55145,7 @@ OUI:50EAD6*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+ OUI:50EB1A*
+- ID_OUI_FROM_DATABASE=Brocade Communications Systems, Inc
++ ID_OUI_FROM_DATABASE=Brocade Communications Systems, Inc.
+
+ OUI:50ED94*
+ ID_OUI_FROM_DATABASE=Egatel SL
+@@ -54994,6 +55153,9 @@ OUI:50ED94*
+ OUI:50F003*
+ ID_OUI_FROM_DATABASE=Open Stack, Inc.
+
++OUI:50F520*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:50F61A*
+ ID_OUI_FROM_DATABASE=Kunshan JADE Technologies co., Ltd.
+
+@@ -55573,6 +55735,9 @@ OUI:5CF207*
+ OUI:5CF3FC*
+ ID_OUI_FROM_DATABASE=IBM Corp
+
++OUI:5CF8A1*
++ ID_OUI_FROM_DATABASE=Murata Manufactuaring Co.,Ltd.
++
+ OUI:5CF9DD*
+ ID_OUI_FROM_DATABASE=Dell Inc
+
+@@ -55651,6 +55816,9 @@ OUI:6052D0*
+ OUI:605464*
+ ID_OUI_FROM_DATABASE=Eyedro Green Solutions Inc.
+
++OUI:60601F*
++ ID_OUI_FROM_DATABASE=SZ DJI TECHNOLOGY CO.,LTD
++
+ OUI:6063FD*
+ ID_OUI_FROM_DATABASE=Transcend Communication Beijing Co.,Ltd.
+
+@@ -55807,6 +55975,9 @@ OUI:60FACD*
+ OUI:60FB42*
+ ID_OUI_FROM_DATABASE=Apple, Inc
+
++OUI:60FEC5*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:6400F1*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
+@@ -56014,6 +56185,9 @@ OUI:64AE0C*
+ OUI:64AE88*
+ ID_OUI_FROM_DATABASE=Polytec GmbH
+
++OUI:64B310*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:64B64A*
+ ID_OUI_FROM_DATABASE=ViVOtech, Inc.
+
+@@ -56026,6 +56200,9 @@ OUI:64BC11*
+ OUI:64C5AA*
+ ID_OUI_FROM_DATABASE=South African Broadcasting Corporation
+
++OUI:64C667*
++ ID_OUI_FROM_DATABASE=Barnes&Noble
++
+ OUI:64C6AF*
+ ID_OUI_FROM_DATABASE=AXERRA Networks Ltd
+
+@@ -56182,6 +56359,9 @@ OUI:6879ED*
+ OUI:687F74*
+ ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC
+
++OUI:68831A*
++ ID_OUI_FROM_DATABASE=Pandora Mobility Corporation
++
+ OUI:688470*
+ ID_OUI_FROM_DATABASE=eSSys Co.,Ltd
+
+@@ -56233,6 +56413,9 @@ OUI:68AB8A*
+ OUI:68AF13*
+ ID_OUI_FROM_DATABASE=Futura Mobility
+
++OUI:68B094*
++ ID_OUI_FROM_DATABASE=INESA ELECTRON CO.,LTD
++
+ OUI:68B43A*
+ ID_OUI_FROM_DATABASE=WaterFurnace International, Inc.
+
+@@ -56500,6 +56683,9 @@ OUI:700514*
+ OUI:700BC0*
+ ID_OUI_FROM_DATABASE=Dewav Technology Company
+
++OUI:70105C*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:701124*
+ ID_OUI_FROM_DATABASE=Apple
+
+@@ -56542,8 +56728,11 @@ OUI:7032D5*
+ OUI:703811*
+ ID_OUI_FROM_DATABASE=Invensys Rail
+
++OUI:7038B4*
++ ID_OUI_FROM_DATABASE=Low Tech Solutions
++
+ OUI:7038EE*
+- ID_OUI_FROM_DATABASE=Avaya Inc
++ ID_OUI_FROM_DATABASE=Avaya, Inc
+
+ OUI:703AD8*
+ ID_OUI_FROM_DATABASE=Shenzhen Afoundry Electronic Co., Ltd
+@@ -56734,6 +56923,9 @@ OUI:7415E2*
+ OUI:741E93*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Tech.Co.,Ltd.
+
++OUI:74258A*
++ ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
++
+ OUI:74273C*
+ ID_OUI_FROM_DATABASE=ChangYang Technology (Nanjing) Co., LTD
+
+@@ -56821,6 +57013,9 @@ OUI:747E1A*
+ OUI:747E2D*
+ ID_OUI_FROM_DATABASE=Beijing Thomson CITIC Digital Technology Co. LTD.
+
++OUI:74867A*
++ ID_OUI_FROM_DATABASE=Dell Inc PCBA Test
++
+ OUI:74888B*
+ ID_OUI_FROM_DATABASE=ADB Broadband Italia
+
+@@ -56920,6 +57115,9 @@ OUI:74F06D*
+ OUI:74F07D*
+ ID_OUI_FROM_DATABASE=BnCOM Co.,Ltd
+
++OUI:74F102*
++ ID_OUI_FROM_DATABASE=Beijing HCHCOM Technology Co., Ltd
++
+ OUI:74F612*
+ ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+
+@@ -56965,6 +57163,9 @@ OUI:781DBA*
+ OUI:781DFD*
+ ID_OUI_FROM_DATABASE=Jabil Inc
+
++OUI:781FDB*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:78223D*
+ ID_OUI_FROM_DATABASE=Affirmed Networks
+
+@@ -57013,6 +57214,9 @@ OUI:78510C*
+ OUI:785262*
+ ID_OUI_FROM_DATABASE=Shenzhen Hojy Software Co., Ltd.
+
++OUI:78542E*
++ ID_OUI_FROM_DATABASE=D-Link International
++
+ OUI:785517*
+ ID_OUI_FROM_DATABASE=SankyuElectronics
+
+@@ -57064,6 +57268,9 @@ OUI:7898FD*
+ OUI:78995C*
+ ID_OUI_FROM_DATABASE=Nationz Technologies Inc
+
++OUI:789966*
++ ID_OUI_FROM_DATABASE=Musilab Electronics (DongGuan)Co.,Ltd.
++
+ OUI:78998F*
+ ID_OUI_FROM_DATABASE=MEDILINE ITALIA SRL
+
+@@ -57212,7 +57419,7 @@ OUI:7C11BE*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+ OUI:7C1476*
+- ID_OUI_FROM_DATABASE=Damall Technologies S.A.S. Di Ludovic Anselme Glaglanon & C.
++ ID_OUI_FROM_DATABASE=Damall Technologies SAS
+
+ OUI:7C160D*
+ ID_OUI_FROM_DATABASE=Saia-Burgess Controls AG
+@@ -57322,6 +57529,9 @@ OUI:7C94B2*
+ OUI:7C9A9B*
+ ID_OUI_FROM_DATABASE=VSE valencia smart energy
+
++OUI:7CA15D*
++ ID_OUI_FROM_DATABASE=GN ReSound A/S
++
+ OUI:7CA29B*
+ ID_OUI_FROM_DATABASE=D.SignT GmbH & Co. KG
+
+@@ -57365,7 +57575,7 @@ OUI:7CC8D7*
+ ID_OUI_FROM_DATABASE=Damalisk
+
+ OUI:7CCB0D*
+- ID_OUI_FROM_DATABASE=Aaxeon Technologies Inc.
++ ID_OUI_FROM_DATABASE=Antaira Technologies, LLC
+
+ OUI:7CCFCF*
+ ID_OUI_FROM_DATABASE=Shanghai SEARI Intelligent System Co., Ltd
+@@ -57373,6 +57583,9 @@ OUI:7CCFCF*
+ OUI:7CD1C3*
+ ID_OUI_FROM_DATABASE=Apple Inc
+
++OUI:7CD762*
++ ID_OUI_FROM_DATABASE=Freestyle Technology Pty Ltd
++
+ OUI:7CD9FE*
+ ID_OUI_FROM_DATABASE=New Cosmos Electric Co., Ltd.
+
+@@ -57418,6 +57631,9 @@ OUI:7CF0BA*
+ OUI:7CF429*
+ ID_OUI_FROM_DATABASE=NUUO Inc.
+
++OUI:7CFADF*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:7CFE28*
+ ID_OUI_FROM_DATABASE=Salutron Inc.
+
+@@ -57721,6 +57937,9 @@ OUI:845787*
+ OUI:845DD7*
+ ID_OUI_FROM_DATABASE=Shenzhen Netcom Electronics Co.,Ltd
+
++OUI:846223*
++ ID_OUI_FROM_DATABASE=Shenzhen Coship Electronics Co., Ltd.
++
+ OUI:8462A6*
+ ID_OUI_FROM_DATABASE=EuroCB (Phils), Inc.
+
+@@ -57823,12 +58042,18 @@ OUI:84EA99*
+ OUI:84ED33*
+ ID_OUI_FROM_DATABASE=BBMC Co.,Ltd
+
++OUI:84F493*
++ ID_OUI_FROM_DATABASE=OMS spol. s.r.o.
++
+ OUI:84F64C*
+ ID_OUI_FROM_DATABASE=Cross Point BV
+
+ OUI:84FCFE*
+ ID_OUI_FROM_DATABASE=Apple
+
++OUI:880DD9*
++ ID_OUI_FROM_DATABASE=ISC applied systems corp
++
+ OUI:881036*
+ ID_OUI_FROM_DATABASE=Panodic(ShenZhen) Electronics Limted
+
+@@ -57850,6 +58075,9 @@ OUI:8823FE*
+ OUI:88252C*
+ ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation
+
++OUI:882E5A*
++ ID_OUI_FROM_DATABASE=storONE
++
+ OUI:88308A*
+ ID_OUI_FROM_DATABASE=Murata Manufactuaring Co.,Ltd.
+
+@@ -58105,6 +58333,9 @@ OUI:8C76C1*
+ OUI:8C7712*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
++OUI:8C7716*
++ ID_OUI_FROM_DATABASE=LONGCHEER TELECOMMUNICATION LIMITED
++
+ OUI:8C7B9D*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+@@ -58249,6 +58480,9 @@ OUI:901900*
+ OUI:901B0E*
+ ID_OUI_FROM_DATABASE=Fujitsu Technology Solutions GmbH
+
++OUI:901D27*
++ ID_OUI_FROM_DATABASE=zte corporation
++
+ OUI:901EDD*
+ ID_OUI_FROM_DATABASE=GREAT COMPUTER CORPORATION
+
+@@ -58423,6 +58657,9 @@ OUI:90D852*
+ OUI:90D92C*
+ ID_OUI_FROM_DATABASE=HUG-WITSCHI AG
+
++OUI:90DA4E*
++ ID_OUI_FROM_DATABASE=AVANU
++
+ OUI:90E0F0*
+ ID_OUI_FROM_DATABASE=IEEE P1722
+
+@@ -58597,6 +58834,9 @@ OUI:94CCB9*
+ OUI:94CDAC*
+ ID_OUI_FROM_DATABASE=Creowave Oy
+
++OUI:94CE2C*
++ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
++
+ OUI:94D019*
+ ID_OUI_FROM_DATABASE=Cydle Corp.
+
+@@ -58636,6 +58876,9 @@ OUI:94E711*
+ OUI:94E848*
+ ID_OUI_FROM_DATABASE=FYLDE MICRO LTD
+
++OUI:94EBCD*
++ ID_OUI_FROM_DATABASE=Research In Motion Limited
++
+ OUI:94F692*
+ ID_OUI_FROM_DATABASE=Geminico co.,Ltd.
+
+@@ -58876,6 +59119,9 @@ OUI:9C3178*
+ OUI:9C31B6*
+ ID_OUI_FROM_DATABASE=Kulite Semiconductor Products Inc
+
++OUI:9C3AAF*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:9C417C*
+ ID_OUI_FROM_DATABASE=Hame Technology Co., Limited
+
+@@ -59032,6 +59278,9 @@ OUI:9CE1D6*
+ OUI:9CE635*
+ ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+
++OUI:9CE6E7*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:9CEBE8*
+ ID_OUI_FROM_DATABASE=BizLink (Kunshan) Co.,Ltd
+
+@@ -59161,6 +59410,9 @@ OUI:A071A9*
+ OUI:A07332*
+ ID_OUI_FROM_DATABASE=Cashmaster International Limited
+
++OUI:A073FC*
++ ID_OUI_FROM_DATABASE=Rancore Technologies Private Limited
++
+ OUI:A07591*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+@@ -59476,6 +59728,12 @@ OUI:A4E731*
+ OUI:A4E7E4*
+ ID_OUI_FROM_DATABASE=Connex GmbH
+
++OUI:A4E991*
++ ID_OUI_FROM_DATABASE=SISTEMAS AUDIOVISUALES ITELSIS S.L.
++
++OUI:A4EBD3*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:A4ED4E*
+ ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+
+@@ -59701,6 +59959,9 @@ OUI:AC162D*
+ OUI:AC1702*
+ ID_OUI_FROM_DATABASE=Fibar Group sp. z o.o.
+
++OUI:AC1826*
++ ID_OUI_FROM_DATABASE=SEIKO EPSON CORPORATION
++
+ OUI:AC199F*
+ ID_OUI_FROM_DATABASE=SUNGROW POWER SUPPLY CO.,LTD.
+
+@@ -59950,6 +60211,9 @@ OUI:B01266*
+ OUI:B01408*
+ ID_OUI_FROM_DATABASE=LIGHTSPEED INTERNATIONAL CO.
+
++OUI:B01743*
++ ID_OUI_FROM_DATABASE=EDISON GLOBAL CIRCUITS LLC
++
+ OUI:B01B7C*
+ ID_OUI_FROM_DATABASE=Ontrol A.S.
+
+@@ -60055,6 +60319,9 @@ OUI:B0B2DC*
+ OUI:B0B32B*
+ ID_OUI_FROM_DATABASE=Slican Sp. z o.o.
+
++OUI:B0B448*
++ ID_OUI_FROM_DATABASE=Texas Instruments
++
+ OUI:B0B8D5*
+ ID_OUI_FROM_DATABASE=Nanjing Nengrui Auto Equipment CO.,Ltd
+
+@@ -60304,6 +60571,9 @@ OUI:B4D8A9*
+ OUI:B4D8DE*
+ ID_OUI_FROM_DATABASE=iota Computing, Inc.
+
++OUI:B4DD15*
++ ID_OUI_FROM_DATABASE=ControlThings Oy Ab
++
+ OUI:B4DF3B*
+ ID_OUI_FROM_DATABASE=Chromlech
+
+@@ -60349,6 +60619,9 @@ OUI:B80B9D*
+ OUI:B81413*
+ ID_OUI_FROM_DATABASE=Keen High Holding(HK) Ltd.
+
++OUI:B81619*
++ ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
++
+ OUI:B817C2*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+@@ -60523,6 +60796,9 @@ OUI:B8BB6D*
+ OUI:B8BEBF*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
++OUI:B8C46F*
++ ID_OUI_FROM_DATABASE=PRIMMCON INDUSTRIES INC
++
+ OUI:B8C68E*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+@@ -60721,6 +60997,9 @@ OUI:BC851F*
+ OUI:BC8B55*
+ ID_OUI_FROM_DATABASE=NPP ELIKS America Inc. DBA T&M Atlantic
+
++OUI:BC926B*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:BC99BC*
+ ID_OUI_FROM_DATABASE=FonSee Technology Inc.
+
+@@ -60766,6 +61045,9 @@ OUI:BCCD45*
+ OUI:BCCFCC*
+ ID_OUI_FROM_DATABASE=HTC Corporation
+
++OUI:BCD177*
++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
++
+ OUI:BCD5B6*
+ ID_OUI_FROM_DATABASE=d2d technologies
+
+@@ -60883,6 +61165,9 @@ OUI:C0830A*
+ OUI:C0847A*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
++OUI:C0885B*
++ ID_OUI_FROM_DATABASE=SnD Tech Co., Ltd.
++
+ OUI:C08ADE*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
+@@ -61408,6 +61693,9 @@ OUI:C8E1A7*
+ OUI:C8EE08*
+ ID_OUI_FROM_DATABASE=TANGTOP TECHNOLOGY CO.,LTD
+
++OUI:C8EEA6*
++ ID_OUI_FROM_DATABASE=Shenzhen SHX Technology Co., Ltd
++
+ OUI:C8EF2E*
+ ID_OUI_FROM_DATABASE=Beijing Gefei Tech. Co., Ltd
+
+@@ -61450,6 +61738,9 @@ OUI:CC09C8*
+ OUI:CC0CDA*
+ ID_OUI_FROM_DATABASE=Miljovakt AS
+
++OUI:CC0DEC*
++ ID_OUI_FROM_DATABASE=Cisco SPVTG
++
+ OUI:CC14A6*
+ ID_OUI_FROM_DATABASE=Yichun MyEnergy Domain, Inc
+
+@@ -61513,6 +61804,9 @@ OUI:CC5C75*
+ OUI:CC5D4E*
+ ID_OUI_FROM_DATABASE=ZyXEL Communications Corporation
+
++OUI:CC5D57*
++ ID_OUI_FROM_DATABASE=Information System Research Institute,Inc.
++
+ OUI:CC60BB*
+ ID_OUI_FROM_DATABASE=Empower RF Systems
+
+@@ -61690,6 +61984,9 @@ OUI:D023DB*
+ OUI:D02788*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind.Co.Ltd
+
++OUI:D02DB3*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:D03110*
+ ID_OUI_FROM_DATABASE=Ingenic Semiconductor Co.,Ltd
+
+@@ -61744,6 +62041,9 @@ OUI:D0699E*
+ OUI:D0738E*
+ ID_OUI_FROM_DATABASE=DONG OH PRECISION CO., LTD.
+
++OUI:D073D5*
++ ID_OUI_FROM_DATABASE=LIFI LABS MANAGEMENT PTY LTD
++
+ OUI:D075BE*
+ ID_OUI_FROM_DATABASE=Reno A&E
+
+@@ -61792,6 +62092,9 @@ OUI:D0B53D*
+ OUI:D0BB80*
+ ID_OUI_FROM_DATABASE=SHL Telemedicine International Ltd.
+
++OUI:D0BE2C*
++ ID_OUI_FROM_DATABASE=CNSLink Co., Ltd.
++
+ OUI:D0C1B1*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+@@ -61811,11 +62114,14 @@ OUI:D0D212*
+ ID_OUI_FROM_DATABASE=K2NET Co.,Ltd.
+
+ OUI:D0D286*
+- ID_OUI_FROM_DATABASE=Beckman Coulter Biomedical K.K.
++ ID_OUI_FROM_DATABASE=Beckman Coulter K.K.
+
+ OUI:D0D3FC*
+ ID_OUI_FROM_DATABASE=Mios, Ltd.
+
++OUI:D0D471*
++ ID_OUI_FROM_DATABASE=MVTECH co., Ltd
++
+ OUI:D0D6CC*
+ ID_OUI_FROM_DATABASE=Wintop
+
+@@ -61858,6 +62164,9 @@ OUI:D4000D*
+ OUI:D40057*
+ ID_OUI_FROM_DATABASE=MC Technologies GmbH
+
++OUI:D40129*
++ ID_OUI_FROM_DATABASE=Broadcom Corporation
++
+ OUI:D4024A*
+ ID_OUI_FROM_DATABASE=Delphian Systems LLC
+
+@@ -61960,6 +62269,9 @@ OUI:D46CBF*
+ OUI:D46CDA*
+ ID_OUI_FROM_DATABASE=CSM GmbH
+
++OUI:D46E5C*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:D46F42*
+ ID_OUI_FROM_DATABASE=WAXESS USA Inc
+
+@@ -62239,6 +62551,9 @@ OUI:D8AF3B*
+ OUI:D8AFF1*
+ ID_OUI_FROM_DATABASE=Panasonic Appliances Company
+
++OUI:D8B02E*
++ ID_OUI_FROM_DATABASE=Guangzhou Zonerich Business Machine Co., Ltd
++
+ OUI:D8B12A*
+ ID_OUI_FROM_DATABASE=Panasonic Mobile Communications Co., Ltd.
+
+@@ -62324,7 +62639,7 @@ OUI:DC07C1*
+ ID_OUI_FROM_DATABASE=HangZhou QiYang Technology Co.,Ltd.
+
+ OUI:DC0B1A*
+- ID_OUI_FROM_DATABASE=ADB Broadband SpA
++ ID_OUI_FROM_DATABASE=ADB Broadband Italia
+
+ OUI:DC0EA1*
+ ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD
+@@ -62338,6 +62653,9 @@ OUI:DC175A*
+ OUI:DC1D9F*
+ ID_OUI_FROM_DATABASE=U & B tech
+
++OUI:DC1DD4*
++ ID_OUI_FROM_DATABASE=Microstep-MIS spol. s r.o.
++
+ OUI:DC1EA3*
+ ID_OUI_FROM_DATABASE=Accensus LLC
+
+@@ -62497,6 +62815,9 @@ OUI:E00C7F*
+ OUI:E0143E*
+ ID_OUI_FROM_DATABASE=Modoosis Inc.
+
++OUI:E01877*
++ ID_OUI_FROM_DATABASE=Fujitsu Limited
++
+ OUI:E01C41*
+ ID_OUI_FROM_DATABASE=Aerohive Networks Inc.
+
+@@ -62650,6 +62971,9 @@ OUI:E0C2B7*
+ OUI:E0C3F3*
+ ID_OUI_FROM_DATABASE=ZTE Corporation
+
++OUI:E0C6B3*
++ ID_OUI_FROM_DATABASE=MilDef AB
++
+ OUI:E0C79D*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
+@@ -62731,6 +63055,9 @@ OUI:E41C4B*
+ OUI:E41F13*
+ ID_OUI_FROM_DATABASE=IBM Corp
+
++OUI:E425E7*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:E425E9*
+ ID_OUI_FROM_DATABASE=Color-Chip
+
+@@ -62785,12 +63112,18 @@ OUI:E455EA*
+ OUI:E45614*
+ ID_OUI_FROM_DATABASE=Suttle Apparatus
+
++OUI:E457A8*
++ ID_OUI_FROM_DATABASE=Stuart Manufacturing, Inc.
++
+ OUI:E46449*
+ ID_OUI_FROM_DATABASE=Motorola Mobility, Inc.
+
+ OUI:E467BA*
+ ID_OUI_FROM_DATABASE=Danish Interpretation Systems A/S
+
++OUI:E468A3*
++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
++
+ OUI:E46C21*
+ ID_OUI_FROM_DATABASE=messMa GmbH
+
+@@ -63073,6 +63406,9 @@ OUI:E8CBA1*
+ OUI:E8CC32*
+ ID_OUI_FROM_DATABASE=Micronet LTD
+
++OUI:E8CD2D*
++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
++
+ OUI:E8D0FA*
+ ID_OUI_FROM_DATABASE=MKS Instruments Deutschland GmbH
+
+@@ -63136,9 +63472,15 @@ OUI:EC233D*
+ OUI:EC2368*
+ ID_OUI_FROM_DATABASE=IntelliVoice Co.,Ltd.
+
++OUI:EC2C49*
++ ID_OUI_FROM_DATABASE=University of Tokyo
++
+ OUI:EC3091*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
++OUI:EC3586*
++ ID_OUI_FROM_DATABASE=Apple`
++
+ OUI:EC3BF0*
+ ID_OUI_FROM_DATABASE=NovelSat
+
+@@ -63382,9 +63724,15 @@ OUI:F04DA2*
+ OUI:F05849*
+ ID_OUI_FROM_DATABASE=CareView Communications
+
++OUI:F05A09*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:F05D89*
+ ID_OUI_FROM_DATABASE=Dycon Limited
+
++OUI:F05DC8*
++ ID_OUI_FROM_DATABASE=Duracell Powermat
++
+ OUI:F05F5A*
+ ID_OUI_FROM_DATABASE=Getriebebau NORD GmbH and Co. KG
+
+@@ -63400,6 +63748,9 @@ OUI:F065DD*
+ OUI:F06853*
+ ID_OUI_FROM_DATABASE=Integrated Corporation
+
++OUI:F06BCA*
++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
++
+ OUI:F073AE*
+ ID_OUI_FROM_DATABASE=PEAK-System Technik
+
+@@ -63766,6 +64117,9 @@ OUI:F82EDB*
+ OUI:F82F5B*
+ ID_OUI_FROM_DATABASE=eGauge Systems LLC
+
++OUI:F82FA8*
++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
++
+ OUI:F83094*
+ ID_OUI_FROM_DATABASE=Alcatel-Lucent Telecom Limited
+
+@@ -64018,6 +64372,9 @@ OUI:FC5090*
+ OUI:FC52CE*
+ ID_OUI_FROM_DATABASE=Control iD
+
++OUI:FC58FA*
++ ID_OUI_FROM_DATABASE=Shen Zhen Shi Xin Zhong Xin Technology Co.,Ltd.
++
+ OUI:FC5B24*
+ ID_OUI_FROM_DATABASE=Weibel Scientific A/S
+
+@@ -64051,6 +64408,9 @@ OUI:FC8329*
+ OUI:FC8399*
+ ID_OUI_FROM_DATABASE=Avaya, Inc
+
++OUI:FC8B97*
++ ID_OUI_FROM_DATABASE=Shenzhen Gongjin Electronics Co.,Ltd
++
+ OUI:FC8E7E*
+ ID_OUI_FROM_DATABASE=Pace plc
+
+@@ -64108,6 +64468,12 @@ OUI:FCD4F6*
+ OUI:FCD6BD*
+ ID_OUI_FROM_DATABASE=Robert Bosch GmbH
+
++OUI:FCDB96*
++ ID_OUI_FROM_DATABASE=ENERVALLEY CO., LTD
++
++OUI:FCDD55*
++ ID_OUI_FROM_DATABASE=Shenzhen WeWins wireless Co.,Ltd
++
+ OUI:FCE192*
+ ID_OUI_FROM_DATABASE=Sichuan Jinwangtong Electronic Science&Technology Co,.Ltd
+
+diff --git a/hwdb/20-pci-vendor-product.hwdb b/hwdb/20-pci-vendor-product.hwdb
+index 2e87004..f3fbbb7 100644
+--- a/hwdb/20-pci-vendor-product.hwdb
++++ b/hwdb/20-pci-vendor-product.hwdb
+@@ -3,14 +3,11 @@
+ # Data imported from: http://pci-ids.ucw.cz/v2.2/pci.ids
+
+ pci:v00000010*
+- ID_VENDOR_FROM_DATABASE=Allied Telesis, Inc
++ ID_VENDOR_FROM_DATABASE=Allied Telesis, Inc (Wrong ID)
+
+ pci:v00000010d00008139*
+ ID_PRODUCT_FROM_DATABASE=AT-2500TX V3 Ethernet
+
+-pci:v0000001A*
+- ID_VENDOR_FROM_DATABASE=Ascend Communications, Inc.
+-
+ pci:v0000001C*
+ ID_VENDOR_FROM_DATABASE=PEAK-System Technik GmbH
+
+@@ -23,9 +20,6 @@ pci:v0000001Cd00000001sv0000001Csd00000004*
+ pci:v0000001Cd00000001sv0000001Csd00000005*
+ ID_PRODUCT_FROM_DATABASE=2 Channel CAN Bus SJC1000 (Optically Isolated)
+
+-pci:v00000033*
+- ID_VENDOR_FROM_DATABASE=Paradyne corp.
+-
+ pci:v0000003D*
+ ID_VENDOR_FROM_DATABASE=Lockheed Martin-Marietta Corp
+
+@@ -35,60 +29,9 @@ pci:v00000059*
+ pci:v00000070*
+ ID_VENDOR_FROM_DATABASE=Hauppauge computer works Inc.
+
+-pci:v00000070d00000003*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-250
+-
+-pci:v00000070d00000009*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-150
+-
+-pci:v00000070d00000801*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-150
+-
+-pci:v00000070d00000807*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-150
+-
+-pci:v00000070d00004000*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-350
+-
+-pci:v00000070d00004001*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-250 (v1)
+-
+-pci:v00000070d00004009*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-250
+-
+-pci:v00000070d00004800*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-350
+-
+-pci:v00000070d00004801*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-250 MCE
+-
+-pci:v00000070d00004803*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-250
+-
+-pci:v00000070d00007444*
+- ID_PRODUCT_FROM_DATABASE=WinTV HVR-1600
+-
+ pci:v00000070d00007801*
+ ID_PRODUCT_FROM_DATABASE=WinTV HVR-1800 MCE
+
+-pci:v00000070d00008003*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-150
+-
+-pci:v00000070d00008801*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-150
+-
+-pci:v00000070d0000C108*
+- ID_PRODUCT_FROM_DATABASE=WinTV-HVR-4400-HD model 1278
+-
+-pci:v00000070d0000C801*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-150
+-
+-pci:v00000070d0000E807*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-500 MCE (1st tuner)
+-
+-pci:v00000070d0000E817*
+- ID_PRODUCT_FROM_DATABASE=WinTV PVR-500 MCE (2nd tuner)
+-
+ pci:v00000071*
+ ID_VENDOR_FROM_DATABASE=Nebula Electronics Ltd.
+
+@@ -101,9 +44,6 @@ pci:v00000095d00000680*
+ pci:v000000A7*
+ ID_VENDOR_FROM_DATABASE=Teles AG (Wrong ID)
+
+-pci:v000000F5*
+- ID_VENDOR_FROM_DATABASE=BFG Technologies, Inc.
+-
+ pci:v00000100*
+ ID_VENDOR_FROM_DATABASE=Ncipher Corp Ltd
+
+@@ -125,39 +65,27 @@ pci:v0000021Bd00008139*
+ pci:v00000270*
+ ID_VENDOR_FROM_DATABASE=Hauppauge computer works Inc. (Wrong ID)
+
+-pci:v00000291*
+- ID_VENDOR_FROM_DATABASE=Davicom Semiconductor, Inc.
+-
+-pci:v00000291d00008212*
+- ID_PRODUCT_FROM_DATABASE=DM9102A(DM9102AE, SM9102AF) Ethernet 100/10 MBit(Rev 40)
+-
+ pci:v000002AC*
+ ID_VENDOR_FROM_DATABASE=SpeedStream
+
+ pci:v000002ACd00001012*
+ ID_PRODUCT_FROM_DATABASE=1012 PCMCIA 10/100 Ethernet Card [RTL81xx]
+
+-pci:v000002E0*
+- ID_VENDOR_FROM_DATABASE=XFX Pine Group Inc
+-
+ pci:v00000303*
+ ID_VENDOR_FROM_DATABASE=Hewlett-Packard Company (Wrong ID)
+
+ pci:v00000308*
+- ID_VENDOR_FROM_DATABASE=ZyXEL Communications Corporation
++ ID_VENDOR_FROM_DATABASE=ZyXEL Communications Corporation (Wrong ID)
+
+ pci:v00000315*
+ ID_VENDOR_FROM_DATABASE=SK-Electronics Co., Ltd.
+
+ pci:v00000357*
+- ID_VENDOR_FROM_DATABASE=TTTech AG
++ ID_VENDOR_FROM_DATABASE=TTTech Computertechnik AG (Wrong ID)
+
+ pci:v00000357d0000000A*
+ ID_PRODUCT_FROM_DATABASE=TTP-Monitoring Card V2.0
+
+-pci:v0000036F*
+- ID_VENDOR_FROM_DATABASE=Trigem Computer Inc.
+-
+ pci:v00000432*
+ ID_VENDOR_FROM_DATABASE=SCM Microsystems, Inc.
+
+@@ -185,9 +113,6 @@ pci:v00000721*
+ pci:v00000777*
+ ID_VENDOR_FROM_DATABASE=Ubiquiti Networks, Inc.
+
+-pci:v00000777d00003005*
+- ID_PRODUCT_FROM_DATABASE=XtremeRange5
+-
+ pci:v00000795*
+ ID_VENDOR_FROM_DATABASE=Wired Inc.
+
+@@ -197,18 +122,6 @@ pci:v00000795d00006663*
+ pci:v00000795d00006666*
+ ID_PRODUCT_FROM_DATABASE=MediaPress (MPEG2 encoder board)
+
+-pci:v000007CA*
+- ID_VENDOR_FROM_DATABASE=AVerMedia Technologies Inc.
+-
+-pci:v000007CAd0000534A*
+- ID_PRODUCT_FROM_DATABASE=Slim mobile Express DVB-T (Fujitsu)
+-
+-pci:v000007CAd0000A301*
+- ID_PRODUCT_FROM_DATABASE=AVerTV 301
+-
+-pci:v000007CAd0000B808*
+- ID_PRODUCT_FROM_DATABASE=AVerTV DVB-T Volar (USB 2.0)
+-
+ pci:v000007D0*
+ ID_VENDOR_FROM_DATABASE=ITT Geospatial Systems
+
+@@ -1871,6 +1784,9 @@ pci:v00001002d00004152sv00001043sd0000C002*
+ pci:v00001002d00004152sv00001043sd0000C01A*
+ ID_PRODUCT_FROM_DATABASE=A9600XT/TD
+
++pci:v00001002d00004152sv00001462sd00009510*
++ ID_PRODUCT_FROM_DATABASE=RX9600XT (MS-8951)
++
+ pci:v00001002d00004152sv0000174Bsd00007C29*
+ ID_PRODUCT_FROM_DATABASE=Sapphire Radeon 9600XT
+
+@@ -2243,6 +2159,9 @@ pci:v00001002d00004382*
+ pci:v00001002d00004383*
+ ID_PRODUCT_FROM_DATABASE=SBx00 Azalia (Intel HDA)
+
++pci:v00001002d00004383sv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d00004383sv0000103Csd00001611*
+ ID_PRODUCT_FROM_DATABASE=Pavilion DM1Z-3000
+
+@@ -2276,6 +2195,9 @@ pci:v00001002d00004384*
+ pci:v00001002d00004385*
+ ID_PRODUCT_FROM_DATABASE=SBx00 SMBus Controller
+
++pci:v00001002d00004385sv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d00004385sv0000103Csd00001611*
+ ID_PRODUCT_FROM_DATABASE=Pavilion DM1Z-3000
+
+@@ -2477,6 +2399,9 @@ pci:v00001002d00004395*
+ pci:v00001002d00004396*
+ ID_PRODUCT_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB EHCI Controller
+
++pci:v00001002d00004396sv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d00004396sv0000103Csd00001611*
+ ID_PRODUCT_FROM_DATABASE=Pavilion DM1Z-3000
+
+@@ -2495,6 +2420,9 @@ pci:v00001002d00004396sv0000174Bsd00001001*
+ pci:v00001002d00004397*
+ ID_PRODUCT_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
+
++pci:v00001002d00004397sv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d00004397sv0000103Csd00001611*
+ ID_PRODUCT_FROM_DATABASE=Pavilion DM1Z-3000
+
+@@ -2513,6 +2441,9 @@ pci:v00001002d00004397sv0000174Bsd00001001*
+ pci:v00001002d00004398*
+ ID_PRODUCT_FROM_DATABASE=SB7x0 USB OHCI1 Controller
+
++pci:v00001002d00004398sv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d00004398sv00001043sd000082EF*
+ ID_PRODUCT_FROM_DATABASE=M3A78-EH Motherboard
+
+@@ -2522,6 +2453,9 @@ pci:v00001002d00004398sv000015D9sd0000A811*
+ pci:v00001002d00004399*
+ ID_PRODUCT_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
+
++pci:v00001002d00004399sv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d00004399sv00001043sd000082EF*
+ ID_PRODUCT_FROM_DATABASE=M3A78-EH Motherboard
+
+@@ -2534,12 +2468,18 @@ pci:v00001002d00004399sv0000174Bsd00001001*
+ pci:v00001002d0000439C*
+ ID_PRODUCT_FROM_DATABASE=SB7x0/SB8x0/SB9x0 IDE Controller
+
++pci:v00001002d0000439Csv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d0000439Csv00001043sd000082EF*
+ ID_PRODUCT_FROM_DATABASE=M3A78-EH Motherboard
+
+ pci:v00001002d0000439D*
+ ID_PRODUCT_FROM_DATABASE=SB7x0/SB8x0/SB9x0 LPC host controller
+
++pci:v00001002d0000439Dsv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d0000439Dsv0000103Csd00001611*
+ ID_PRODUCT_FROM_DATABASE=Pavilion DM1Z-3000
+
+@@ -3617,6 +3557,9 @@ pci:v00001002d0000515Esv0000103Csd00001304*
+ pci:v00001002d0000515Esv000015D9sd00008680*
+ ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+
++pci:v00001002d0000515Esv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00001002d0000515Esv00008086sd00003476*
+ ID_PRODUCT_FROM_DATABASE=S5000PSLSATA Server Board
+
+@@ -4415,6 +4358,9 @@ pci:v00001002d00005E4Dsv0000148Csd00002116*
+ pci:v00001002d00005E4F*
+ ID_PRODUCT_FROM_DATABASE=RV410 [Radeon X700]
+
++pci:v00001002d00005E4Fsv00001569sd00001E4F*
++ ID_PRODUCT_FROM_DATABASE=Radeon X550 XT
++
+ pci:v00001002d00005E6B*
+ ID_PRODUCT_FROM_DATABASE=RV410 [Radeon X700 Pro (PCIE)] (Secondary)
+
+@@ -4478,6 +4424,9 @@ pci:v00001002d0000673E*
+ pci:v00001002d00006740*
+ ID_PRODUCT_FROM_DATABASE=Whistler XT [AMD Radeon HD 6700M Series]
+
++pci:v00001002d00006740sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00001002d00006741*
+ ID_PRODUCT_FROM_DATABASE=Whistler [AMD Radeon HD 6600M Series]
+
+@@ -4562,6 +4511,9 @@ pci:v00001002d00006818*
+ pci:v00001002d00006819*
+ ID_PRODUCT_FROM_DATABASE=Pitcairn PRO [Radeon HD 7800]
+
++pci:v00001002d00006819sv0000174Bsd0000E221*
++ ID_PRODUCT_FROM_DATABASE=Sapphire HD 7850 2G GDDR5 PCI-E DVI-I/DVI-D/HDMI/DP
++
+ pci:v00001002d00006820*
+ ID_PRODUCT_FROM_DATABASE=Radeon HD 8800M Series
+
+@@ -4736,6 +4688,9 @@ pci:v00001002d000068F9*
+ pci:v00001002d000068F9sv00001028sd0000010E*
+ ID_PRODUCT_FROM_DATABASE=XPS 8300
+
++pci:v00001002d000068F9sv00001043sd000003C2*
++ ID_PRODUCT_FROM_DATABASE=EAH5450 SILENT/DI/512MD2 (LP)
++
+ pci:v00001002d000068FA*
+ ID_PRODUCT_FROM_DATABASE=EG Cedar [Radeon HD 7300 Series]
+
+@@ -5570,6 +5525,9 @@ pci:v00001002d0000964A*
+ pci:v00001002d0000970F*
+ ID_PRODUCT_FROM_DATABASE=RS880 HDMI Audio [Radeon HD 4200 Series]
+
++pci:v00001002d0000970Fsv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d0000970Fsv00001043sd000083A2*
+ ID_PRODUCT_FROM_DATABASE=M4A785TD Motherboard
+
+@@ -5579,6 +5537,9 @@ pci:v00001002d0000970Fsv00001043sd0000843E*
+ pci:v00001002d00009710*
+ ID_PRODUCT_FROM_DATABASE=RS880 [Radeon HD 4200]
+
++pci:v00001002d00009710sv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001002d00009710sv00001043sd000083A2*
+ ID_PRODUCT_FROM_DATABASE=M4A785TD Motherboard
+
+@@ -5693,6 +5654,9 @@ pci:v00001002d0000AA88*
+ pci:v00001002d0000AA90*
+ ID_PRODUCT_FROM_DATABASE=Turks/Whistler HDMI Audio [Radeon HD 6000 Series]
+
++pci:v00001002d0000AA90sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00001002d0000AA98*
+ ID_PRODUCT_FROM_DATABASE=Caicos HDMI Audio [Radeon HD 6400 Series]
+
+@@ -5702,6 +5666,9 @@ pci:v00001002d0000AA98sv0000174Bsd0000AA98*
+ pci:v00001002d0000AAA0*
+ ID_PRODUCT_FROM_DATABASE=Tahiti XT HDMI Audio [Radeon HD 7970 Series]
+
++pci:v00001002d0000AAB0*
++ ID_PRODUCT_FROM_DATABASE=Cape Verde/Pitcairn HDMI Audio [Radeon HD 7700/7800 Series]
++
+ pci:v00001002d0000AC00*
+ ID_PRODUCT_FROM_DATABASE=Theater 600 Pro
+
+@@ -7694,6 +7661,9 @@ pci:v00001022d00009600sv00001043sd000082F1*
+ pci:v00001022d00009601*
+ ID_PRODUCT_FROM_DATABASE=RS880 Host Bridge
+
++pci:v00001022d00009601sv00001019sd00002120*
++ ID_PRODUCT_FROM_DATABASE=A785GM-M
++
+ pci:v00001022d00009601sv00001043sd0000843E*
+ ID_PRODUCT_FROM_DATABASE=M5A88-V EVO
+
+@@ -9297,10 +9267,10 @@ pci:v00001033d0000002D*
+ ID_PRODUCT_FROM_DATABASE=PCI to C-bus Bridge
+
+ pci:v00001033d00000035*
+- ID_PRODUCT_FROM_DATABASE=USB
++ ID_PRODUCT_FROM_DATABASE=OHCI USB Controller
+
+ pci:v00001033d00000035sv00001033sd00000035*
+- ID_PRODUCT_FROM_DATABASE=Hama USB 2.0 CardBus
++ ID_PRODUCT_FROM_DATABASE=USB Controller
+
+ pci:v00001033d00000035sv0000103Csd00001293*
+ ID_PRODUCT_FROM_DATABASE=USB add-in card
+@@ -9402,7 +9372,7 @@ pci:v00001033d000000DF*
+ ID_PRODUCT_FROM_DATABASE=Vr4131
+
+ pci:v00001033d000000E0*
+- ID_PRODUCT_FROM_DATABASE=USB 2.0
++ ID_PRODUCT_FROM_DATABASE=uPD72010x USB 2.0 Controller
+
+ pci:v00001033d000000E0sv000012EEsd00007001*
+ ID_PRODUCT_FROM_DATABASE=Root hub
+@@ -9437,6 +9407,9 @@ pci:v00001033d0000013A*
+ pci:v00001033d00000194*
+ ID_PRODUCT_FROM_DATABASE=uPD720200 USB 3.0 Host Controller
+
++pci:v00001033d00000194sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00001033d00000194sv00001028sd000004B2*
+ ID_PRODUCT_FROM_DATABASE=Vostro 3350
+
+@@ -10787,6 +10760,15 @@ pci:v0000104Ad00000009*
+ pci:v0000104Ad00000010*
+ ID_PRODUCT_FROM_DATABASE=STG4000 [3D Prophet Kyro Series]
+
++pci:v0000104Ad00000010sv0000104Asd00004018*
++ ID_PRODUCT_FROM_DATABASE=ST PowerVR Kyro (64MB AGP TVO)
++
++pci:v0000104Ad00000010sv00001681sd00000028*
++ ID_PRODUCT_FROM_DATABASE=3D Prophet 4000XT
++
++pci:v0000104Ad00000010sv00001681sd0000C010*
++ ID_PRODUCT_FROM_DATABASE=3D Prophet 4500 TV-Out
++
+ pci:v0000104Ad00000010sv00001681sd0000C069*
+ ID_PRODUCT_FROM_DATABASE=3D Prophet 4000XT
+
+@@ -11073,7 +11055,7 @@ pci:v0000104Cd00008024sv00001443sd00008024*
+ ID_PRODUCT_FROM_DATABASE=FireBoard Blue
+
+ pci:v0000104Cd00008024sv00001458sd00001000*
+- ID_PRODUCT_FROM_DATABASE=GA-EP45-DS5/GA-EG45M-DS2H Motherboard
++ ID_PRODUCT_FROM_DATABASE=Motherboard
+
+ pci:v0000104Cd00008025*
+ ID_PRODUCT_FROM_DATABASE=TSB82AA2 IEEE-1394b Link Layer Controller
+@@ -11114,6 +11096,9 @@ pci:v0000104Cd00008026sv00001043sd0000808D*
+ pci:v0000104Cd00008027*
+ ID_PRODUCT_FROM_DATABASE=PCI4451 IEEE-1394 Controller
+
++pci:v0000104Cd00008027sv00001028sd000000E5*
++ ID_PRODUCT_FROM_DATABASE=Latitude C810
++
+ pci:v0000104Cd00008027sv00001028sd000000E6*
+ ID_PRODUCT_FROM_DATABASE=PCI4451 IEEE-1394 Controller (Dell Inspiron 8100)
+
+@@ -14753,13 +14738,13 @@ pci:v000010B5d00000001*
+ pci:v000010B5d00000557*
+ ID_PRODUCT_FROM_DATABASE=PCI9030 32-bit 33MHz PCI <-> IOBus Bridge
+
+-pci:v000010B5d00000557sv0000105Bsd00009030*
++pci:v000010B5d00000557sv000010B5sd00009030*
+ ID_PRODUCT_FROM_DATABASE=Digium Tormenta 2 T400P-SS7 or E400P-SS7 Quad T1 or E1 PCI card
+
+ pci:v000010B5d00001000*
+ ID_PRODUCT_FROM_DATABASE=PCI9030 32-bit 33MHz PCI <-> IOBus Bridge
+
+-pci:v000010B5d00001000sv0000105Bsd00009030*
++pci:v000010B5d00001000sv000010B5sd00009030*
+ ID_PRODUCT_FROM_DATABASE=ATCOM AT400P Quad T1 PCI card
+
+ pci:v000010B5d00001024*
+@@ -14792,7 +14777,7 @@ pci:v000010B5d00001147*
+ pci:v000010B5d00002000*
+ ID_PRODUCT_FROM_DATABASE=PCI9030 32-bit 33MHz PCI <-> IOBus Bridge
+
+-pci:v000010B5d00002000sv0000105Bsd00009030*
++pci:v000010B5d00002000sv000010B5sd00009030*
+ ID_PRODUCT_FROM_DATABASE=ATCOM AE400P Quad E1 PCI card
+
+ pci:v000010B5d00002540*
+@@ -14813,13 +14798,13 @@ pci:v000010B5d00004000sv000010B5sd00009030*
+ pci:v000010B5d00004001*
+ ID_PRODUCT_FROM_DATABASE=PCI9030 32-bit 33MHz PCI <-> IOBus Bridge
+
+-pci:v000010B5d00004001sv0000105Bsd00009030*
++pci:v000010B5d00004001sv000010B5sd00009030*
+ ID_PRODUCT_FROM_DATABASE=ATCOM A400PE Quad E1 PCI card
+
+ pci:v000010B5d00004002*
+ ID_PRODUCT_FROM_DATABASE=PCI9030 32-bit 33MHz PCI <-> IOBus Bridge
+
+-pci:v000010B5d00004002sv0000105Bsd00009030*
++pci:v000010B5d00004002sv000010B5sd00009030*
+ ID_PRODUCT_FROM_DATABASE=ATCOM A400PT Quad T1 PCI card
+
+ pci:v000010B5d00006140*
+@@ -15305,6 +15290,9 @@ pci:v000010B5d00009056sv000010B5sd00003355*
+ pci:v000010B5d00009056sv000010B5sd00003415*
+ ID_PRODUCT_FROM_DATABASE=Alpermann+Velte PCIe TS: Time Synchronisation Board
+
++pci:v000010B5d00009056sv000010B5sd00003493*
++ ID_PRODUCT_FROM_DATABASE=Alpermann+Velte PCL PCIe 3G: Timecode Reader Board
++
+ pci:v000010B5d00009056sv00001369sd0000C001*
+ ID_PRODUCT_FROM_DATABASE=LX6464ES
+
+@@ -15410,15 +15398,12 @@ pci:v000010B5d0000D00Dsv000010B5sd00009030*
+ pci:v000010B5d0000D33D*
+ ID_PRODUCT_FROM_DATABASE=PCI9030 32-bit 33MHz PCI <-> IOBus Bridge
+
+-pci:v000010B5d0000D33Dsv0000105Bsd00009030*
++pci:v000010B5d0000D33Dsv000010B5sd00009030*
+ ID_PRODUCT_FROM_DATABASE=Tormenta 3 Varion V401PT Quad T1/J1 PCI card
+
+ pci:v000010B5d0000D44D*
+ ID_PRODUCT_FROM_DATABASE=PCI9030 32-bit 33MHz PCI <-> IOBus Bridge
+
+-pci:v000010B5d0000D44Dsv0000105Bsd00009030*
+- ID_PRODUCT_FROM_DATABASE=Tormenta 3 Varion V401PE Quad E1 PCI card
+-
+ pci:v000010B5d0000D44Dsv000010B5sd000017F6*
+ ID_PRODUCT_FROM_DATABASE=Allo CP100P/E 1-port E1/T1/J1 PCI/PCIe card
+
+@@ -15428,6 +15413,9 @@ pci:v000010B5d0000D44Dsv000010B5sd000017F7*
+ pci:v000010B5d0000D44Dsv000010B5sd000017F8*
+ ID_PRODUCT_FROM_DATABASE=Allo CP200P/E 2-port E1/T1/J1 PCI/PCIe card
+
++pci:v000010B5d0000D44Dsv000010B5sd00009030*
++ ID_PRODUCT_FROM_DATABASE=Tormenta 3 Varion V401PE Quad E1 PCI card
++
+ pci:v000010B6*
+ ID_VENDOR_FROM_DATABASE=Madge Networks
+
+@@ -16841,6 +16829,9 @@ pci:v000010DEd00000028sv00001092sd00004A02*
+ pci:v000010DEd00000028sv00001092sd00005A00*
+ ID_PRODUCT_FROM_DATABASE=RIVA TNT2/TNT2 Pro
+
++pci:v000010DEd00000028sv00001092sd00005A40*
++ ID_PRODUCT_FROM_DATABASE=Viper V770D AGP
++
+ pci:v000010DEd00000028sv00001092sd00006A02*
+ ID_PRODUCT_FROM_DATABASE=Viper V770 Ultra
+
+@@ -16946,6 +16937,9 @@ pci:v000010DEd0000002Dsv00001048sd00000C3A*
+ pci:v000010DEd0000002Dsv00001048sd00000C3B*
+ ID_PRODUCT_FROM_DATABASE=Erazor III LT
+
++pci:v000010DEd0000002Dsv0000107Dsd00002137*
++ ID_PRODUCT_FROM_DATABASE=WinFast 3D S325
++
+ pci:v000010DEd0000002Dsv000010DEsd00000006*
+ ID_PRODUCT_FROM_DATABASE=RIVA TNT2 Model 64/Model 64 Pro
+
+@@ -16964,6 +16958,9 @@ pci:v000010DEd0000002Dsv00001102sd0000102C*
+ pci:v000010DEd0000002Dsv00001462sd00008808*
+ ID_PRODUCT_FROM_DATABASE=MSI-8808
+
++pci:v000010DEd0000002Dsv000014AFsd00005620*
++ ID_PRODUCT_FROM_DATABASE=Gamer Cougar Video Edition
++
+ pci:v000010DEd0000002Dsv00001554sd00001041*
+ ID_PRODUCT_FROM_DATABASE=Pixelview RIVA TNT2 M64
+
+@@ -17015,9 +17012,18 @@ pci:v000010DEd00000041*
+ pci:v000010DEd00000041sv00001043sd0000817B*
+ ID_PRODUCT_FROM_DATABASE=V9999 Gamer Edition
+
++pci:v000010DEd00000041sv0000107Dsd00002992*
++ ID_PRODUCT_FROM_DATABASE=WinFast A400
++
++pci:v000010DEd00000041sv00001458sd0000310F*
++ ID_PRODUCT_FROM_DATABASE=Geforce 6800 GV-N6812
++
+ pci:v000010DEd00000042*
+ ID_PRODUCT_FROM_DATABASE=NV40.2 [GeForce 6800 LE]
+
++pci:v000010DEd00000042sv0000107Dsd0000299B*
++ ID_PRODUCT_FROM_DATABASE=WinFast A400 LE
++
+ pci:v000010DEd00000043*
+ ID_PRODUCT_FROM_DATABASE=NV40.3 [GeForce 6800 XE]
+
+@@ -21020,6 +21026,9 @@ pci:v000010DEd00000866*
+ pci:v000010DEd00000867*
+ ID_PRODUCT_FROM_DATABASE=C79 [GeForce 9400]
+
++pci:v000010DEd00000867sv0000106Bsd000000AD*
++ ID_PRODUCT_FROM_DATABASE=iMac 9,1
++
+ pci:v000010DEd00000868*
+ ID_PRODUCT_FROM_DATABASE=C79 [nForce 760i SLI]
+
+@@ -21221,18 +21230,33 @@ pci:v000010DEd00000A88*
+ pci:v000010DEd00000A89*
+ ID_PRODUCT_FROM_DATABASE=MCP79 Memory Controller
+
++pci:v000010DEd00000A98*
++ ID_PRODUCT_FROM_DATABASE=MCP79 Memory Controller
++
++pci:v000010DEd00000A98sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=iMac 9,1
++
+ pci:v000010DEd00000AA0*
+ ID_PRODUCT_FROM_DATABASE=MCP79 PCI Express Bridge
+
++pci:v000010DEd00000AA0sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AA2*
+ ID_PRODUCT_FROM_DATABASE=MCP79 SMBus
+
++pci:v000010DEd00000AA2sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AA2sv000019DAsd0000A123*
+ ID_PRODUCT_FROM_DATABASE=IONITX-F-E
+
+ pci:v000010DEd00000AA3*
+ ID_PRODUCT_FROM_DATABASE=MCP79 Co-processor
+
++pci:v000010DEd00000AA3sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AA3sv000019DAsd0000A123*
+ ID_PRODUCT_FROM_DATABASE=IONITX-F-E
+
+@@ -21245,18 +21269,27 @@ pci:v000010DEd00000AA4sv000019DAsd0000A123*
+ pci:v000010DEd00000AA5*
+ ID_PRODUCT_FROM_DATABASE=MCP79 OHCI USB 1.1 Controller
+
++pci:v000010DEd00000AA5sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AA5sv000019DAsd0000A123*
+ ID_PRODUCT_FROM_DATABASE=IONITX-F-E
+
+ pci:v000010DEd00000AA6*
+ ID_PRODUCT_FROM_DATABASE=MCP79 EHCI USB 2.0 Controller
+
++pci:v000010DEd00000AA6sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AA6sv000019DAsd0000A123*
+ ID_PRODUCT_FROM_DATABASE=IONITX-F-E
+
+ pci:v000010DEd00000AA7*
+ ID_PRODUCT_FROM_DATABASE=MCP79 OHCI USB 1.1 Controller
+
++pci:v000010DEd00000AA7sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AA7sv000019DAsd0000A123*
+ ID_PRODUCT_FROM_DATABASE=IONITX-F-E
+
+@@ -21266,6 +21299,9 @@ pci:v000010DEd00000AA8*
+ pci:v000010DEd00000AA9*
+ ID_PRODUCT_FROM_DATABASE=MCP79 EHCI USB 2.0 Controller
+
++pci:v000010DEd00000AA9sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AA9sv000019DAsd0000A123*
+ ID_PRODUCT_FROM_DATABASE=IONITX-F-E
+
+@@ -21275,6 +21311,9 @@ pci:v000010DEd00000AAA*
+ pci:v000010DEd00000AAB*
+ ID_PRODUCT_FROM_DATABASE=MCP79 PCI Bridge
+
++pci:v000010DEd00000AABsv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AAC*
+ ID_PRODUCT_FROM_DATABASE=MCP79 LPC Bridge
+
+@@ -21287,12 +21326,18 @@ pci:v000010DEd00000AADsv000019DAsd0000A123*
+ pci:v000010DEd00000AAE*
+ ID_PRODUCT_FROM_DATABASE=MCP79 LPC Bridge
+
++pci:v000010DEd00000AAEsv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AAF*
+ ID_PRODUCT_FROM_DATABASE=MCP79 LPC Bridge
+
+ pci:v000010DEd00000AB0*
+ ID_PRODUCT_FROM_DATABASE=MCP79 Ethernet
+
++pci:v000010DEd00000AB0sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AB0sv000019DAsd0000A123*
+ ID_PRODUCT_FROM_DATABASE=IONITX-F-E
+
+@@ -21326,6 +21371,9 @@ pci:v000010DEd00000AB8*
+ pci:v000010DEd00000AB9*
+ ID_PRODUCT_FROM_DATABASE=MCP79 AHCI Controller
+
++pci:v000010DEd00000AB9sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000ABA*
+ ID_PRODUCT_FROM_DATABASE=MCP79 AHCI Controller
+
+@@ -21347,6 +21395,9 @@ pci:v000010DEd00000ABF*
+ pci:v000010DEd00000AC0*
+ ID_PRODUCT_FROM_DATABASE=MCP79 High Definition Audio
+
++pci:v000010DEd00000AC0sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AC1*
+ ID_PRODUCT_FROM_DATABASE=MCP79 High Definition Audio
+
+@@ -21359,15 +21410,24 @@ pci:v000010DEd00000AC3*
+ pci:v000010DEd00000AC4*
+ ID_PRODUCT_FROM_DATABASE=MCP79 PCI Express Bridge
+
++pci:v000010DEd00000AC4sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AC5*
+ ID_PRODUCT_FROM_DATABASE=MCP79 PCI Express Bridge
+
+ pci:v000010DEd00000AC6*
+ ID_PRODUCT_FROM_DATABASE=MCP79 PCI Express Bridge
+
++pci:v000010DEd00000AC6sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AC7*
+ ID_PRODUCT_FROM_DATABASE=MCP79 PCI Express Bridge
+
++pci:v000010DEd00000AC7sv000010DEsd0000CB79*
++ ID_PRODUCT_FROM_DATABASE=Apple iMac 9,1
++
+ pci:v000010DEd00000AC8*
+ ID_PRODUCT_FROM_DATABASE=MCP79 PCI Express Bridge
+
+@@ -21422,6 +21482,9 @@ pci:v000010DEd00000BE9*
+ pci:v000010DEd00000BE9sv00001558sd00008687*
+ ID_PRODUCT_FROM_DATABASE=CLEVO/KAPOK W860CU
+
++pci:v000010DEd00000BE9sv00003842sd00001452*
++ ID_PRODUCT_FROM_DATABASE=GeForce GTS 450
++
+ pci:v000010DEd00000BEA*
+ ID_PRODUCT_FROM_DATABASE=GF108 High Definition Audio Controller
+
+@@ -21590,6 +21653,9 @@ pci:v000010DEd00000DEF*
+ pci:v000010DEd00000DF0*
+ ID_PRODUCT_FROM_DATABASE=GF108 [GeForce GT 425M]
+
++pci:v000010DEd00000DF1*
++ ID_PRODUCT_FROM_DATABASE=GF108 [GeForce GT 420M]
++
+ pci:v000010DEd00000DF2*
+ ID_PRODUCT_FROM_DATABASE=GF108 [GeForce GT 435M]
+
+@@ -22530,10 +22596,10 @@ pci:v000010ECd00008167sv00001462sd0000236C*
+ ID_PRODUCT_FROM_DATABASE=945P Neo3-F motherboard
+
+ pci:v000010ECd00008168*
+- ID_PRODUCT_FROM_DATABASE=RTL8111/8168B PCI Express Gigabit Ethernet controller
++ ID_PRODUCT_FROM_DATABASE=RTL8111/8168 PCI Express Gigabit Ethernet controller
+
+ pci:v000010ECd00008168sv00001019sd00008168*
+- ID_PRODUCT_FROM_DATABASE=MCP73PVT-SM
++ ID_PRODUCT_FROM_DATABASE=RTL8111/8168 PCI Express Gigabit Ethernet controller
+
+ pci:v000010ECd00008168sv00001028sd000004B2*
+ ID_PRODUCT_FROM_DATABASE=Vostro 3350
+@@ -22562,11 +22628,17 @@ pci:v000010ECd00008168sv00001043sd000083A3*
+ pci:v000010ECd00008168sv00001043sd00008432*
+ ID_PRODUCT_FROM_DATABASE=P8P67 and other motherboards
+
++pci:v000010ECd00008168sv00001043sd00008505*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
++pci:v000010ECd00008168sv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v000010ECd00008168sv000010ECsd00008168*
+- ID_PRODUCT_FROM_DATABASE=TEG-ECTX Gigabit PCI-E Adapter [Trendnet]
++ ID_PRODUCT_FROM_DATABASE=RTL8111/8168 PCI Express Gigabit Ethernet controller
+
+ pci:v000010ECd00008168sv00001458sd0000E000*
+- ID_PRODUCT_FROM_DATABASE=GA-EP45-DS5/GA-EG45M-DS2H Motherboard
++ ID_PRODUCT_FROM_DATABASE=Motherboard
+
+ pci:v000010ECd00008168sv00001462sd0000238C*
+ ID_PRODUCT_FROM_DATABASE=Onboard RTL8111b on MSI P965 Platinum Mainboard
+@@ -26075,6 +26147,9 @@ pci:v00001131d00007134sv00001894sd0000FE01*
+ pci:v00001131d00007134sv00005168sd00000138*
+ ID_PRODUCT_FROM_DATABASE=FLY TV PRIME 34FM
+
++pci:v00001131d00007134sv00005168sd00000300*
++ ID_PRODUCT_FROM_DATABASE=FlyDVB-S
++
+ pci:v00001131d00007134sv00005ACEsd00005070*
+ ID_PRODUCT_FROM_DATABASE=Behold TV 507 FM
+
+@@ -27983,6 +28058,9 @@ pci:v00001180d00000552sv00001028sd00000188*
+ pci:v00001180d00000552sv00001043sd00001237*
+ ID_PRODUCT_FROM_DATABASE=A6J-Q008
+
++pci:v00001180d00000552sv00001043sd00001757*
++ ID_PRODUCT_FROM_DATABASE=M2400N laptop
++
+ pci:v00001180d00000552sv0000144Dsd0000C005*
+ ID_PRODUCT_FROM_DATABASE=X10 Laptop
+
+@@ -28091,6 +28169,9 @@ pci:v00001180d00000822sv000017AAsd0000201D*
+ pci:v00001180d00000822sv000017AAsd000020C7*
+ ID_PRODUCT_FROM_DATABASE=ThinkPad T61
+
++pci:v00001180d00000822sv000017AAsd000020C8*
++ ID_PRODUCT_FROM_DATABASE=ThinkPad W500
++
+ pci:v00001180d00000832*
+ ID_PRODUCT_FROM_DATABASE=R5C832 IEEE 1394 Controller
+
+@@ -30440,6 +30521,9 @@ pci:v00001217d000010F7*
+ pci:v00001217d000011F7*
+ ID_PRODUCT_FROM_DATABASE=OZ600 1394a-2000 Controller
+
++pci:v00001217d000011F7sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00001217d000013F7*
+ ID_PRODUCT_FROM_DATABASE=1394 OHCI Compliant Host Controller
+
+@@ -30554,9 +30638,21 @@ pci:v00001217d00008120*
+ pci:v00001217d00008130*
+ ID_PRODUCT_FROM_DATABASE=Integrated MS/MSPRO/xD Controller
+
++pci:v00001217d00008320*
++ ID_PRODUCT_FROM_DATABASE=OZ600 MMC/SD Controller
++
++pci:v00001217d00008320sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00001217d00008321*
+ ID_PRODUCT_FROM_DATABASE=Integrated MMC/SD controller
+
++pci:v00001217d00008330*
++ ID_PRODUCT_FROM_DATABASE=OZ600 MS/xD Controller
++
++pci:v00001217d00008330sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00001217d00008331*
+ ID_PRODUCT_FROM_DATABASE=O2 Flash Memory Card
+
+@@ -31244,6 +31340,9 @@ pci:v0000125Dd00001998*
+ pci:v0000125Dd00001998sv00001028sd000000B1*
+ ID_PRODUCT_FROM_DATABASE=Latitude C600
+
++pci:v0000125Dd00001998sv00001028sd000000E5*
++ ID_PRODUCT_FROM_DATABASE=Latitude C810
++
+ pci:v0000125Dd00001998sv00001028sd000000E6*
+ ID_PRODUCT_FROM_DATABASE=ES1983S Maestro-3i (Dell Inspiron 8100)
+
+@@ -36614,63 +36713,6 @@ pci:v00001461d0000F436*
+ pci:v00001462*
+ ID_VENDOR_FROM_DATABASE=Micro-Star International Co., Ltd.
+
+-pci:v00001462d00005501*
+- ID_PRODUCT_FROM_DATABASE=nVidia NV15DDR [GeForce2 Ti]
+-
+-pci:v00001462d00006819*
+- ID_PRODUCT_FROM_DATABASE=Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller [MSI CB54G]
+-
+-pci:v00001462d00006825*
+- ID_PRODUCT_FROM_DATABASE=PCI Card wireless 11g [PC54G]
+-
+-pci:v00001462d00006834*
+- ID_PRODUCT_FROM_DATABASE=RaLink RT2500 802.11g [PC54G2]
+-
+-pci:v00001462d00007125*
+- ID_PRODUCT_FROM_DATABASE=MS-7125 [K8N Neo4 Platinum]
+-
+-pci:v00001462d00007235*
+- ID_PRODUCT_FROM_DATABASE=P965 Neo MS-7235 mainboard
+-
+-pci:v00001462d00007242*
+- ID_PRODUCT_FROM_DATABASE=K9AGM RS485 Motherboard
+-
+-pci:v00001462d00007250*
+- ID_PRODUCT_FROM_DATABASE=MS-7250 Motherboard [K9N Platinum SLI/non-SLI]
+-
+-pci:v00001462d00007327*
+- ID_PRODUCT_FROM_DATABASE=K9AGM2-FIH Motherboard
+-
+-pci:v00001462d00007650*
+- ID_PRODUCT_FROM_DATABASE=Hetis 865GV-E (MS-7065)
+-
+-pci:v00001462d00008725*
+- ID_PRODUCT_FROM_DATABASE=NVIDIA NV25 [GeForce4 Ti 4600] VGA Adapter
+-
+-pci:v00001462d00009000*
+- ID_PRODUCT_FROM_DATABASE=NVIDIA NV28 [GeForce4 Ti 4800] VGA Adapter
+-
+-pci:v00001462d00009110*
+- ID_PRODUCT_FROM_DATABASE=GeFORCE FX5200
+-
+-pci:v00001462d00009119*
+- ID_PRODUCT_FROM_DATABASE=NVIDIA NV31 [GeForce FX 5600XT] VGA Adapter
+-
+-pci:v00001462d00009123*
+- ID_PRODUCT_FROM_DATABASE=NVIDIA NV31 [GeForce FX 5600] FX5600-VTDR128 [MS-8912]
+-
+-pci:v00001462d00009510*
+- ID_PRODUCT_FROM_DATABASE=Radeon 9600XT
+-
+-pci:v00001462d00009511*
+- ID_PRODUCT_FROM_DATABASE=Radeon 9600XT
+-
+-pci:v00001462d00009591*
+- ID_PRODUCT_FROM_DATABASE=nVidia Corporation NV36 [GeForce FX 5700LE]
+-
+-pci:v00001462d0000B834*
+- ID_PRODUCT_FROM_DATABASE=Wireless 11g Turbo G PCI card [MSI PC60G]
+-
+ pci:v00001463*
+ ID_VENDOR_FROM_DATABASE=Fast Corporation
+
+@@ -38294,6 +38336,9 @@ pci:v000014E4d000016C7sv000014E4sd0000000A*
+ pci:v000014E4d000016DD*
+ ID_PRODUCT_FROM_DATABASE=NetLink BCM5781 Gigabit Ethernet PCI Express
+
++pci:v000014E4d000016F3*
++ ID_PRODUCT_FROM_DATABASE=NetXtreme BCM5727 Gigabit Ethernet PCIe
++
+ pci:v000014E4d000016F7*
+ ID_PRODUCT_FROM_DATABASE=NetXtreme BCM5753 Gigabit Ethernet PCI Express
+
+@@ -42101,6 +42146,9 @@ pci:v0000168Cd00000029sv00000777sd00004005*
+ pci:v0000168Cd00000029sv00001186sd00003A7A*
+ ID_PRODUCT_FROM_DATABASE=DWA-552 802.11n Xtreme N Desktop Adapter (rev A2)
+
++pci:v0000168Cd00000029sv00001186sd00003A7D*
++ ID_PRODUCT_FROM_DATABASE=DWA-552 802.11n Xtreme N Desktop Adapter (rev A3)
++
+ pci:v0000168Cd0000002A*
+ ID_PRODUCT_FROM_DATABASE=AR928X Wireless Network Adapter (PCI-Express)
+
+@@ -42191,6 +42239,9 @@ pci:v0000168Cd00000030*
+ pci:v0000168Cd00000030sv0000103Csd00001627*
+ ID_PRODUCT_FROM_DATABASE=AR9380/HB112 802.11abgn 3×3 Wi-Fi Adapter
+
++pci:v0000168Cd00000030sv00001186sd00003A7E*
++ ID_PRODUCT_FROM_DATABASE=DWA-566 Wireless N 300 Dual Band PCIe Desktop Adapter
++
+ pci:v0000168Cd00000030sv00001A56sd00002000*
+ ID_PRODUCT_FROM_DATABASE=Killer Wireless-N 1102 Half-size Mini PCIe Card [AR9382]
+
+@@ -43590,7 +43641,7 @@ pci:v00001876d0000A103*
+ ID_PRODUCT_FROM_DATABASE=Vigra I/O
+
+ pci:v0000187E*
+- ID_VENDOR_FROM_DATABASE=ZyXEL Communication Corporation
++ ID_VENDOR_FROM_DATABASE=ZyXEL Communications Corporation
+
+ pci:v0000187Ed00003403*
+ ID_PRODUCT_FROM_DATABASE=ZyAir G-110 802.11g
+@@ -44184,97 +44235,97 @@ pci:v00001924d00000803sv00001924sd00001201*
+ ID_PRODUCT_FROM_DATABASE=SFA6902F-R1 SFP+ AOE Adapter
+
+ pci:v00001924d00000803sv00001924sd00006200*
+- ID_PRODUCT_FROM_DATABASE=SFN5122F-R0
++ ID_PRODUCT_FROM_DATABASE=SFN5122F-R0 SFP+ Server Adapter
+
+ pci:v00001924d00000803sv00001924sd00006201*
+- ID_PRODUCT_FROM_DATABASE=SFN5122F-R1
++ ID_PRODUCT_FROM_DATABASE=SFN5122F-R1 SFP+ Server Adapter
+
+ pci:v00001924d00000803sv00001924sd00006202*
+- ID_PRODUCT_FROM_DATABASE=SFN5122F-R2
++ ID_PRODUCT_FROM_DATABASE=SFN5122F-R2 SFP+ Server Adapter
+
+ pci:v00001924d00000803sv00001924sd00006204*
+- ID_PRODUCT_FROM_DATABASE=SFN5122F-R4
++ ID_PRODUCT_FROM_DATABASE=SFN5122F-R4 SFP+ Server Adapter
+
+ pci:v00001924d00000803sv00001924sd00006205*
+- ID_PRODUCT_FROM_DATABASE=SFN5122F-R5
++ ID_PRODUCT_FROM_DATABASE=SFN5122F-R5 SFP+ Server Adapter
+
+ pci:v00001924d00000803sv00001924sd00006206*
+- ID_PRODUCT_FROM_DATABASE=SFN5122F-R6
++ ID_PRODUCT_FROM_DATABASE=SFN5122F-R6 SFP+ Server Adapter
+
+ pci:v00001924d00000803sv00001924sd00006207*
+- ID_PRODUCT_FROM_DATABASE=SFN5122F-R7
++ ID_PRODUCT_FROM_DATABASE=SFN5122F-R7 SFP+ Server Adapter
+
+ pci:v00001924d00000803sv00001924sd00006210*
+- ID_PRODUCT_FROM_DATABASE=SFN5322F-R0
++ ID_PRODUCT_FROM_DATABASE=SFN5322F-R0 SFP+ Precision Time Synchronization Server Adapter
+
+ pci:v00001924d00000803sv00001924sd00006211*
+- ID_PRODUCT_FROM_DATABASE=SFN5322F-R1
++ ID_PRODUCT_FROM_DATABASE=SFN5322F-R1 SFP+ Precision Time Synchronization Server Adapter
+
+ pci:v00001924d00000803sv00001924sd00006217*
+- ID_PRODUCT_FROM_DATABASE=SFN5322F-R7
++ ID_PRODUCT_FROM_DATABASE=SFN5322F-R7 SFP+ Precision Time Synchronization Server Adapter
+
+ pci:v00001924d00000803sv00001924sd00006227*
+- ID_PRODUCT_FROM_DATABASE=SFN6122F-R7
++ ID_PRODUCT_FROM_DATABASE=SFN6122F-R7 SFP+ Server Adapter
+
+ pci:v00001924d00000803sv00001924sd00006237*
+- ID_PRODUCT_FROM_DATABASE=SFN6322F-R7
++ ID_PRODUCT_FROM_DATABASE=SFN6322F-R7 SFP+ Precision Time Synchronization Server Adapter
+
+ pci:v00001924d00000803sv00001924sd00006501*
+- ID_PRODUCT_FROM_DATABASE=SFN5802K-R1
++ ID_PRODUCT_FROM_DATABASE=SFN5802K-R1 Mezzanine Adapter
+
+ pci:v00001924d00000803sv00001924sd00006511*
+- ID_PRODUCT_FROM_DATABASE=SFN5814H-R1
++ ID_PRODUCT_FROM_DATABASE=SFN5814H-R1 Mezzanine Adapter
+
+ pci:v00001924d00000803sv00001924sd00006521*
+- ID_PRODUCT_FROM_DATABASE=SFN5812H-R1
++ ID_PRODUCT_FROM_DATABASE=SFN5812H-R1 Mezzanine Adapter
+
+ pci:v00001924d00000803sv00001924sd00006562*
+ ID_PRODUCT_FROM_DATABASE=SFN6832F-R2 SFP+ Mezzanine Adapter
+
+ pci:v00001924d00000803sv00001924sd00006A05*
+- ID_PRODUCT_FROM_DATABASE=SFN5112F-R5
++ ID_PRODUCT_FROM_DATABASE=SFN5112F-R5 SFP+ Server Adapter
+
+ pci:v00001924d00000803sv00001924sd00006A06*
+- ID_PRODUCT_FROM_DATABASE=SFN5112F-R6
++ ID_PRODUCT_FROM_DATABASE=SFN5112F-R6 SFP+ Server Adapter
+
+ pci:v00001924d00000803sv00001924sd00007206*
+- ID_PRODUCT_FROM_DATABASE=SFN5162F-R6
++ ID_PRODUCT_FROM_DATABASE=SFN5162F-R6 SFP+ Server Adapter
+
+ pci:v00001924d00000803sv00001924sd00007207*
+- ID_PRODUCT_FROM_DATABASE=SFN5162F-R7
++ ID_PRODUCT_FROM_DATABASE=SFN5162F-R7 SFP+ Server Adapter
+
+ pci:v00001924d00000803sv00001924sd00007A06*
+- ID_PRODUCT_FROM_DATABASE=SFN5152F-R6
++ ID_PRODUCT_FROM_DATABASE=SFN5152F-R6 SFP+ Server Adapter
+
+ pci:v00001924d00000803sv00001924sd00007A07*
+- ID_PRODUCT_FROM_DATABASE=SFN5152F-R7
++ ID_PRODUCT_FROM_DATABASE=SFN5152F-R7 SFP+ Server Adapter
+
+ pci:v00001924d00000813*
+ ID_PRODUCT_FROM_DATABASE=SFL9021 [Solarstorm]
+
+ pci:v00001924d00000813sv00001924sd00006100*
+- ID_PRODUCT_FROM_DATABASE=SFN5121T-R0
++ ID_PRODUCT_FROM_DATABASE=SFN5121T-R0 10GBASE-T Server Adapter
+
+ pci:v00001924d00000813sv00001924sd00006102*
+- ID_PRODUCT_FROM_DATABASE=SFN5121T-R2
++ ID_PRODUCT_FROM_DATABASE=SFN5121T-R2 10GBASE-T Server Adapter
+
+ pci:v00001924d00000813sv00001924sd00006103*
+- ID_PRODUCT_FROM_DATABASE=SFN5121T-R3
++ ID_PRODUCT_FROM_DATABASE=SFN5121T-R3 10GBASE-T Server Adapter
+
+ pci:v00001924d00000813sv00001924sd00006104*
+- ID_PRODUCT_FROM_DATABASE=SFN5121T-R4
++ ID_PRODUCT_FROM_DATABASE=SFN5121T-R4 10GBASE-T Server Adapter
+
+ pci:v00001924d00000813sv00001924sd00006902*
+- ID_PRODUCT_FROM_DATABASE=SFN5111T-R2
++ ID_PRODUCT_FROM_DATABASE=SFN5111T-R2 10GBASE-T Server Adapter
+
+ pci:v00001924d00000813sv00001924sd00006904*
+- ID_PRODUCT_FROM_DATABASE=SFN5111T-R4
++ ID_PRODUCT_FROM_DATABASE=SFN5111T-R4 10GBASE-T Server Adapter
+
+ pci:v00001924d00000813sv00001924sd00007104*
+- ID_PRODUCT_FROM_DATABASE=SFN5161T-R4
++ ID_PRODUCT_FROM_DATABASE=SFN5161T-R4 10GBASE-T Server Adapter
+
+ pci:v00001924d00000813sv00001924sd00007904*
+- ID_PRODUCT_FROM_DATABASE=SFN5151T-R4
++ ID_PRODUCT_FROM_DATABASE=SFN5151T-R4 10GBASE-T Server Adapter
+
+ pci:v00001924d00001803*
+ ID_PRODUCT_FROM_DATABASE=SFC9020 Virtual Function [Solarstorm]
+@@ -44787,7 +44838,7 @@ pci:v0000197Bd00002363sv00001043sd000081E4*
+ ID_PRODUCT_FROM_DATABASE=P5B [JMB363]
+
+ pci:v0000197Bd00002363sv00001458sd0000B000*
+- ID_PRODUCT_FROM_DATABASE=GA-EP45-DS5 Motherboard
++ ID_PRODUCT_FROM_DATABASE=Motherboard
+
+ pci:v0000197Bd00002363sv00001849sd00002363*
+ ID_PRODUCT_FROM_DATABASE=Motherboard (one of many)
+@@ -45425,6 +45476,9 @@ pci:v00001AF4d00001002*
+ pci:v00001AF4d00001003*
+ ID_PRODUCT_FROM_DATABASE=Virtio console
+
++pci:v00001AF4d00001009*
++ ID_PRODUCT_FROM_DATABASE=Virtio filesystem
++
+ pci:v00001AF5*
+ ID_VENDOR_FROM_DATABASE=Netezza Corp.
+
+@@ -45902,6 +45956,12 @@ pci:v00003080*
+ pci:v00003142*
+ ID_VENDOR_FROM_DATABASE=Post Impression Systems.
+
++pci:v000031AB*
++ ID_VENDOR_FROM_DATABASE=Zonet
++
++pci:v000031ABd00001FAA*
++ ID_PRODUCT_FROM_DATABASE=ZEW1602 802.11b/g Wireless Adapter
++
+ pci:v00003388*
+ ID_VENDOR_FROM_DATABASE=Hint Corp
+
+@@ -47495,6 +47555,9 @@ pci:v00008086d00000044*
+ pci:v00008086d00000044sv00001025sd00000347*
+ ID_PRODUCT_FROM_DATABASE=Aspire 7740G
+
++pci:v00008086d00000044sv00001025sd00000487*
++ ID_PRODUCT_FROM_DATABASE=TravelMate 5742
++
+ pci:v00008086d00000044sv0000E4BFsd000050C1*
+ ID_PRODUCT_FROM_DATABASE=PC1-GROOVE
+
+@@ -47702,9 +47765,15 @@ pci:v00008086d00000101sv0000106Bsd000000DC*
+ pci:v00008086d00000102*
+ ID_PRODUCT_FROM_DATABASE=2nd Generation Core Processor Family Integrated Graphics Controller
+
++pci:v00008086d00000102sv00001028sd000004AA*
++ ID_PRODUCT_FROM_DATABASE=XPS 8300
++
+ pci:v00008086d00000104*
+ ID_PRODUCT_FROM_DATABASE=2nd Generation Core Processor Family DRAM Controller
+
++pci:v00008086d00000104sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00008086d00000104sv00001028sd000004B2*
+ ID_PRODUCT_FROM_DATABASE=Vostro 3350
+
+@@ -47765,15 +47834,24 @@ pci:v00008086d00000126sv00001028sd000004CC*
+ pci:v00008086d00000150*
+ ID_PRODUCT_FROM_DATABASE=Xeon E3-1200 v2/3rd Gen Core processor DRAM Controller
+
++pci:v00008086d00000150sv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00000151*
+ ID_PRODUCT_FROM_DATABASE=Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port
+
+ pci:v00008086d00000151sv00001043sd00001477*
+ ID_PRODUCT_FROM_DATABASE=N56VZ
+
++pci:v00008086d00000151sv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00000152*
+ ID_PRODUCT_FROM_DATABASE=Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller
+
++pci:v00008086d00000152sv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00000153*
+ ID_PRODUCT_FROM_DATABASE=3rd Gen Core Processor Thermal Subsystem
+
+@@ -48305,6 +48383,9 @@ pci:v00008086d00000BE0*
+ pci:v00008086d00000BE1*
+ ID_PRODUCT_FROM_DATABASE=Atom Processor D2xxx/N2xxx Integrated Graphics Controller
+
++pci:v00008086d00000BE1sv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d00000BE2*
+ ID_PRODUCT_FROM_DATABASE=Atom Processor D2xxx/N2xxx Integrated Graphics Controller
+
+@@ -48365,6 +48446,9 @@ pci:v00008086d00000BF4*
+ pci:v00008086d00000BF5*
+ ID_PRODUCT_FROM_DATABASE=Atom Processor D2xxx/N2xxx DRAM Controller
+
++pci:v00008086d00000BF5sv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d00000BF6*
+ ID_PRODUCT_FROM_DATABASE=Atom Processor D2xxx/N2xxx DRAM Controller
+
+@@ -48393,82 +48477,100 @@ pci:v00008086d00000C0C*
+ ID_PRODUCT_FROM_DATABASE=Haswell HD Audio Controller
+
+ pci:v00008086d00000C46*
+- ID_PRODUCT_FROM_DATABASE=Centerton PCI Express Root Port 1
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 PCI Express Root Port 1
+
+ pci:v00008086d00000C47*
+- ID_PRODUCT_FROM_DATABASE=Centerton PCI Express Root Port 2
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 PCI Express Root Port 2
+
+ pci:v00008086d00000C48*
+- ID_PRODUCT_FROM_DATABASE=Centerton PCI Express Root Port 3
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 PCI Express Root Port 3
+
+ pci:v00008086d00000C49*
+- ID_PRODUCT_FROM_DATABASE=Centerton PCI Express Root Port 4
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 PCI Express Root Port 4
+
+ pci:v00008086d00000C4E*
+- ID_PRODUCT_FROM_DATABASE=Centerton NTB Primary
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 NTB Primary
+
+ pci:v00008086d00000C54*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Management
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
++
++pci:v00008086d00000C55*
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 DFX 1
++
++pci:v00008086d00000C56*
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 DFX 2
+
+ pci:v00008086d00000C59*
+- ID_PRODUCT_FROM_DATABASE=Centerton SMBus 2.0 Controller 0
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 SMBus 2.0 Controller 0
+
+ pci:v00008086d00000C5A*
+- ID_PRODUCT_FROM_DATABASE=Centerton SMBus 2.0 Controller 1
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 SMBus 2.0 Controller 1
++
++pci:v00008086d00000C5B*
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 SMBus Controller 2
++
++pci:v00008086d00000C5C*
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 SMBus Controller 3
++
++pci:v00008086d00000C5D*
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 SMBus Controller 4
++
++pci:v00008086d00000C5E*
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 SMBus Controller 5
+
+ pci:v00008086d00000C5F*
+- ID_PRODUCT_FROM_DATABASE=Centerton UART
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 UART
+
+ pci:v00008086d00000C60*
+- ID_PRODUCT_FROM_DATABASE=Centerton Integrated Legacy Bus
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Integrated Legacy Bus
+
+ pci:v00008086d00000C70*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+
+ pci:v00008086d00000C71*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+
+ pci:v00008086d00000C72*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+
+ pci:v00008086d00000C73*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+
+ pci:v00008086d00000C74*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+
+ pci:v00008086d00000C75*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+
+ pci:v00008086d00000C76*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+
+ pci:v00008086d00000C77*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+
+ pci:v00008086d00000C78*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+
+ pci:v00008086d00000C79*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+
+ pci:v00008086d00000C7A*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+
+ pci:v00008086d00000C7B*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+
+ pci:v00008086d00000C7C*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+
+ pci:v00008086d00000C7D*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+
+ pci:v00008086d00000C7E*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+
+ pci:v00008086d00000C7F*
+- ID_PRODUCT_FROM_DATABASE=Centerton Internal Fabric
++ ID_PRODUCT_FROM_DATABASE=Atom Processor S1200 Internal
+
+ pci:v00008086d00000D00*
+ ID_PRODUCT_FROM_DATABASE=Crystal Well DRAM Controller
+@@ -49590,7 +49692,7 @@ pci:v00008086d00001049sv0000103Csd000030C1*
+ ID_PRODUCT_FROM_DATABASE=Compaq 6910p
+
+ pci:v00008086d00001049sv000017AAsd000020B9*
+- ID_PRODUCT_FROM_DATABASE=ThinkPad T61
++ ID_PRODUCT_FROM_DATABASE=ThinkPad T61/R61
+
+ pci:v00008086d0000104A*
+ ID_PRODUCT_FROM_DATABASE=82566DM Gigabit Network Connection
+@@ -49958,6 +50060,9 @@ pci:v00008086d00001095*
+ pci:v00008086d00001096*
+ ID_PRODUCT_FROM_DATABASE=80003ES2LAN Gigabit Ethernet Controller (Copper)
+
++pci:v00008086d00001096sv000015D9sd00001096*
++ ID_PRODUCT_FROM_DATABASE=Motherboard
++
+ pci:v00008086d00001096sv000015D9sd00008680*
+ ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+
+@@ -51116,6 +51221,9 @@ pci:v00008086d00001501*
+ pci:v00008086d00001502*
+ ID_PRODUCT_FROM_DATABASE=82579LM Gigabit Network Connection
+
++pci:v00008086d00001502sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00008086d00001503*
+ ID_PRODUCT_FROM_DATABASE=82579V Gigabit Network Connection
+
+@@ -51575,6 +51683,9 @@ pci:v00008086d00001C02sv00001043sd0000844D*
+ pci:v00008086d00001C03*
+ ID_PRODUCT_FROM_DATABASE=6 Series/C200 Series Chipset Family 6 port SATA AHCI Controller
+
++pci:v00008086d00001C03sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00008086d00001C03sv00001028sd000004B2*
+ ID_PRODUCT_FROM_DATABASE=Vostro 3350
+
+@@ -51599,6 +51710,9 @@ pci:v00008086d00001C09*
+ pci:v00008086d00001C10*
+ ID_PRODUCT_FROM_DATABASE=6 Series/C200 Series Chipset Family PCI Express Root Port 1
+
++pci:v00008086d00001C10sv00001028sd000004AA*
++ ID_PRODUCT_FROM_DATABASE=XPS 8300
++
+ pci:v00008086d00001C10sv00001028sd000004DA*
+ ID_PRODUCT_FROM_DATABASE=Vostro 3750
+
+@@ -51608,6 +51722,9 @@ pci:v00008086d00001C10sv00008086sd00007270*
+ pci:v00008086d00001C12*
+ ID_PRODUCT_FROM_DATABASE=6 Series/C200 Series Chipset Family PCI Express Root Port 2
+
++pci:v00008086d00001C12sv00001028sd000004AA*
++ ID_PRODUCT_FROM_DATABASE=XPS 8300
++
+ pci:v00008086d00001C12sv00008086sd00007270*
+ ID_PRODUCT_FROM_DATABASE=Apple MacBookPro8,2 [Core i7, 15", 2011]
+
+@@ -51623,6 +51740,9 @@ pci:v00008086d00001C14sv00008086sd00007270*
+ pci:v00008086d00001C16*
+ ID_PRODUCT_FROM_DATABASE=6 Series/C200 Series Chipset Family PCI Express Root Port 4
+
++pci:v00008086d00001C16sv00001028sd000004AA*
++ ID_PRODUCT_FROM_DATABASE=XPS 8300
++
+ pci:v00008086d00001C18*
+ ID_PRODUCT_FROM_DATABASE=6 Series/C200 Series Chipset Family PCI Express Root Port 5
+
+@@ -51647,6 +51767,9 @@ pci:v00008086d00001C20*
+ pci:v00008086d00001C20sv00001028sd00000490*
+ ID_PRODUCT_FROM_DATABASE=Alienware M17x R3
+
++pci:v00008086d00001C20sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00008086d00001C20sv00001028sd000004AA*
+ ID_PRODUCT_FROM_DATABASE=XPS 8300
+
+@@ -51668,6 +51791,9 @@ pci:v00008086d00001C20sv00008086sd00007270*
+ pci:v00008086d00001C22*
+ ID_PRODUCT_FROM_DATABASE=6 Series/C200 Series Chipset Family SMBus Controller
+
++pci:v00008086d00001C22sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00008086d00001C22sv00001028sd000004AA*
+ ID_PRODUCT_FROM_DATABASE=XPS 8300
+
+@@ -51692,6 +51818,9 @@ pci:v00008086d00001C25*
+ pci:v00008086d00001C26*
+ ID_PRODUCT_FROM_DATABASE=6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1
+
++pci:v00008086d00001C26sv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00008086d00001C26sv00001028sd000004AA*
+ ID_PRODUCT_FROM_DATABASE=XPS 8300
+
+@@ -51722,6 +51851,9 @@ pci:v00008086d00001C2Csv00008086sd00007270*
+ pci:v00008086d00001C2D*
+ ID_PRODUCT_FROM_DATABASE=6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2
+
++pci:v00008086d00001C2Dsv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00008086d00001C2Dsv00001028sd000004AA*
+ ID_PRODUCT_FROM_DATABASE=XPS 8300
+
+@@ -51746,6 +51878,9 @@ pci:v00008086d00001C35*
+ pci:v00008086d00001C3A*
+ ID_PRODUCT_FROM_DATABASE=6 Series/C200 Series Chipset Family MEI Controller #1
+
++pci:v00008086d00001C3Asv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00008086d00001C3Asv00001028sd000004AA*
+ ID_PRODUCT_FROM_DATABASE=XPS 8300
+
+@@ -51833,6 +51968,9 @@ pci:v00008086d00001C4E*
+ pci:v00008086d00001C4F*
+ ID_PRODUCT_FROM_DATABASE=QM67 Express Chipset Family LPC Controller
+
++pci:v00008086d00001C4Fsv00001028sd000004A3*
++ ID_PRODUCT_FROM_DATABASE=Precision M4600
++
+ pci:v00008086d00001C50*
+ ID_PRODUCT_FROM_DATABASE=B65 Express Chipset Family LPC Controller
+
+@@ -52082,6 +52220,9 @@ pci:v00008086d00001E01*
+ pci:v00008086d00001E02*
+ ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family 6-port SATA Controller [AHCI mode]
+
++pci:v00008086d00001E02sv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E03*
+ ID_PRODUCT_FROM_DATABASE=7 Series Chipset Family 6-port SATA Controller [AHCI mode]
+
+@@ -52121,6 +52262,9 @@ pci:v00008086d00001E10sv00001043sd00001477*
+ pci:v00008086d00001E10sv00001043sd00001517*
+ ID_PRODUCT_FROM_DATABASE=Zenbook Prime UX31A
+
++pci:v00008086d00001E10sv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E12*
+ ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family PCI Express Root Port 2
+
+@@ -52142,6 +52286,9 @@ pci:v00008086d00001E16sv00001043sd00001477*
+ pci:v00008086d00001E18*
+ ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family PCI Express Root Port 5
+
++pci:v00008086d00001E18sv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E1A*
+ ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family PCI Express Root Port 6
+
+@@ -52160,6 +52307,9 @@ pci:v00008086d00001E20sv00001043sd00001477*
+ pci:v00008086d00001E20sv00001043sd00001517*
+ ID_PRODUCT_FROM_DATABASE=Zenbook Prime UX31A
+
++pci:v00008086d00001E20sv00001043sd00008415*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E22*
+ ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family SMBus Controller
+
+@@ -52169,6 +52319,9 @@ pci:v00008086d00001E22sv00001043sd00001477*
+ pci:v00008086d00001E22sv00001043sd00001517*
+ ID_PRODUCT_FROM_DATABASE=Zenbook Prime UX31A
+
++pci:v00008086d00001E22sv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E24*
+ ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family Thermal Management Controller
+
+@@ -52187,6 +52340,9 @@ pci:v00008086d00001E26sv00001043sd00001477*
+ pci:v00008086d00001E26sv00001043sd00001517*
+ ID_PRODUCT_FROM_DATABASE=Zenbook Prime UX31A
+
++pci:v00008086d00001E26sv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E2D*
+ ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2
+
+@@ -52196,6 +52352,9 @@ pci:v00008086d00001E2Dsv00001043sd00001477*
+ pci:v00008086d00001E2Dsv00001043sd00001517*
+ ID_PRODUCT_FROM_DATABASE=Zenbook Prime UX31A
+
++pci:v00008086d00001E2Dsv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E31*
+ ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family USB xHCI Host Controller
+
+@@ -52205,6 +52364,9 @@ pci:v00008086d00001E31sv00001043sd00001477*
+ pci:v00008086d00001E31sv00001043sd00001517*
+ ID_PRODUCT_FROM_DATABASE=Zenbook Prime UX31A
+
++pci:v00008086d00001E31sv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E33*
+ ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family LAN Controller
+
+@@ -52217,6 +52379,9 @@ pci:v00008086d00001E3Asv00001043sd00001477*
+ pci:v00008086d00001E3Asv00001043sd00001517*
+ ID_PRODUCT_FROM_DATABASE=Zenbook Prime UX31A
+
++pci:v00008086d00001E3Asv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E3B*
+ ID_PRODUCT_FROM_DATABASE=7 Series/C210 Series Chipset Family MEI Controller #2
+
+@@ -52256,6 +52421,9 @@ pci:v00008086d00001E49*
+ pci:v00008086d00001E4A*
+ ID_PRODUCT_FROM_DATABASE=H77 Express Chipset LPC Controller
+
++pci:v00008086d00001E4Asv00001043sd000084CA*
++ ID_PRODUCT_FROM_DATABASE=P8H77-I Motherboard
++
+ pci:v00008086d00001E4B*
+ ID_PRODUCT_FROM_DATABASE=7 Series Chipset Family LPC Controller
+
+@@ -52634,18 +52802,27 @@ pci:v00008086d00002448sv0000103Csd000030C1*
+ pci:v00008086d00002448sv0000104Dsd0000902D*
+ ID_PRODUCT_FROM_DATABASE=VAIO VGN-NR120E
+
++pci:v00008086d00002448sv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d00002448sv0000144Dsd0000C00C*
+ ID_PRODUCT_FROM_DATABASE=P30 notebook
+
+ pci:v00008086d00002448sv0000144Dsd0000C072*
+ ID_PRODUCT_FROM_DATABASE=Notebook N150P
+
++pci:v00008086d00002448sv00001458sd00005000*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d00002448sv00001734sd00001055*
+ ID_PRODUCT_FROM_DATABASE=Amilo M1420
+
+ pci:v00008086d00002448sv000017AAsd000020AE*
+ ID_PRODUCT_FROM_DATABASE=ThinkPad T61
+
++pci:v00008086d00002448sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d00002448sv0000E4BFsd0000CC47*
+ ID_PRODUCT_FROM_DATABASE=CCG-RUMBA
+
+@@ -52815,7 +52992,10 @@ pci:v00008086d0000244Esv0000103Csd0000330B*
+ ID_PRODUCT_FROM_DATABASE=ProLiant ML150 G6 Server
+
+ pci:v00008086d0000244Esv00001458sd00005000*
+- ID_PRODUCT_FROM_DATABASE=GA-EP45-DS5 Motherboard
++ ID_PRODUCT_FROM_DATABASE=Motherboard
++
++pci:v00008086d0000244Esv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
+
+ pci:v00008086d0000244Esv00001775sd000011CC*
+ ID_PRODUCT_FROM_DATABASE=CC11/CL11
+@@ -53268,7 +53448,7 @@ pci:v00008086d000024C5sv0000103Csd000008B0*
+ ID_PRODUCT_FROM_DATABASE=tc1100 tablet
+
+ pci:v00008086d000024C5sv00001043sd00001713*
+- ID_PRODUCT_FROM_DATABASE=M6800N
++ ID_PRODUCT_FROM_DATABASE=M2400N/M6800N laptop
+
+ pci:v00008086d000024C5sv00001043sd000080B0*
+ ID_PRODUCT_FROM_DATABASE=P4B533
+@@ -53330,6 +53510,9 @@ pci:v00008086d000024C6sv0000103Csd00000890*
+ pci:v00008086d000024C6sv0000103Csd000008B0*
+ ID_PRODUCT_FROM_DATABASE=tc1100 tablet
+
++pci:v00008086d000024C6sv00001043sd00001716*
++ ID_PRODUCT_FROM_DATABASE=M2400N laptop
++
+ pci:v00008086d000024C6sv00001043sd00001826*
+ ID_PRODUCT_FROM_DATABASE=M6800N
+
+@@ -54644,8 +54827,11 @@ pci:v00008086d000025D4sv000015D9sd00008680*
+ pci:v00008086d000025D8*
+ ID_PRODUCT_FROM_DATABASE=5000P Chipset Memory Controller Hub
+
++pci:v00008086d000025D8sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d000025D8sv00008086sd00003476*
+- ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
++ ID_PRODUCT_FROM_DATABASE=S5000PSLSATA Server Board
+
+ pci:v00008086d000025E2*
+ ID_PRODUCT_FROM_DATABASE=5000 Series Chipset PCI Express x4 Port 2
+@@ -54677,8 +54863,11 @@ pci:v00008086d000025F0sv0000103Csd000031FD*
+ pci:v00008086d000025F0sv000015D9sd00008680*
+ ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+
++pci:v00008086d000025F0sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d000025F0sv00008086sd00003476*
+- ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
++ ID_PRODUCT_FROM_DATABASE=S5000PSLSATA Server Board
+
+ pci:v00008086d000025F1*
+ ID_PRODUCT_FROM_DATABASE=5000 Series Chipset Reserved Registers
+@@ -54689,8 +54878,11 @@ pci:v00008086d000025F1sv0000103Csd000031FD*
+ pci:v00008086d000025F1sv000015D9sd00008680*
+ ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+
++pci:v00008086d000025F1sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d000025F1sv00008086sd00003476*
+- ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
++ ID_PRODUCT_FROM_DATABASE=S5000PSLSATA Server Board
+
+ pci:v00008086d000025F3*
+ ID_PRODUCT_FROM_DATABASE=5000 Series Chipset Reserved Registers
+@@ -54701,8 +54893,11 @@ pci:v00008086d000025F3sv0000103Csd000031FD*
+ pci:v00008086d000025F3sv000015D9sd00008680*
+ ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+
++pci:v00008086d000025F3sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d000025F3sv00008086sd00003476*
+- ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
++ ID_PRODUCT_FROM_DATABASE=S5000PSLSATA Server Board
+
+ pci:v00008086d000025F5*
+ ID_PRODUCT_FROM_DATABASE=5000 Series Chipset FBD Registers
+@@ -54713,8 +54908,11 @@ pci:v00008086d000025F5sv0000103Csd000031FD*
+ pci:v00008086d000025F5sv000015D9sd00008680*
+ ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+
++pci:v00008086d000025F5sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d000025F5sv00008086sd00003476*
+- ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
++ ID_PRODUCT_FROM_DATABASE=S5000PSLSATA Server Board
+
+ pci:v00008086d000025F6*
+ ID_PRODUCT_FROM_DATABASE=5000 Series Chipset FBD Registers
+@@ -54725,8 +54923,11 @@ pci:v00008086d000025F6sv0000103Csd000031FD*
+ pci:v00008086d000025F6sv000015D9sd00008680*
+ ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+
++pci:v00008086d000025F6sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d000025F6sv00008086sd00003476*
+- ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
++ ID_PRODUCT_FROM_DATABASE=S5000PSLSATA Server Board
+
+ pci:v00008086d000025F7*
+ ID_PRODUCT_FROM_DATABASE=5000 Series Chipset PCI Express x8 Port 2-3
+@@ -55319,6 +55520,9 @@ pci:v00008086d00002670sv0000103Csd000031FE*
+ pci:v00008086d00002670sv000015D9sd00008680*
+ ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+
++pci:v00008086d00002670sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d00002670sv00008086sd00003476*
+ ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
+
+@@ -55334,6 +55538,9 @@ pci:v00008086d00002681sv0000103Csd000031FE*
+ pci:v00008086d00002681sv000015D9sd00008680*
+ ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+
++pci:v00008086d00002681sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d00002681sv00008086sd00003476*
+ ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
+
+@@ -55361,6 +55568,9 @@ pci:v00008086d00002688sv0000103Csd000031FE*
+ pci:v00008086d00002688sv000015D9sd00008680*
+ ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+
++pci:v00008086d00002688sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d00002688sv00008086sd00003476*
+ ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
+
+@@ -55379,6 +55589,9 @@ pci:v00008086d00002689sv0000103Csd000031FE*
+ pci:v00008086d00002689sv000015D9sd00008680*
+ ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+
++pci:v00008086d00002689sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d00002689sv00008086sd00003476*
+ ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
+
+@@ -55394,6 +55607,9 @@ pci:v00008086d0000268Asv0000103Csd000031FE*
+ pci:v00008086d0000268Asv000015D9sd00008680*
+ ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+
++pci:v00008086d0000268Asv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d0000268Asv00008086sd00003476*
+ ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
+
+@@ -55424,6 +55640,9 @@ pci:v00008086d0000268Csv0000103Csd000031FE*
+ pci:v00008086d0000268Csv000015D9sd00008680*
+ ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+
++pci:v00008086d0000268Csv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d0000268Csv00008086sd00003476*
+ ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
+
+@@ -55433,6 +55652,9 @@ pci:v00008086d00002690*
+ pci:v00008086d00002690sv0000103Csd000031FE*
+ ID_PRODUCT_FROM_DATABASE=ProLiant DL140 G3
+
++pci:v00008086d00002690sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d00002692*
+ ID_PRODUCT_FROM_DATABASE=631xESB/632xESB/3100 Chipset PCI Express Root Port 2
+
+@@ -55463,6 +55685,9 @@ pci:v00008086d0000269Bsv0000103Csd000031FE*
+ pci:v00008086d0000269Bsv000015D9sd00008680*
+ ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+
++pci:v00008086d0000269Bsv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d0000269Bsv00008086sd00003476*
+ ID_PRODUCT_FROM_DATABASE=Intel S5000PSLSATA Server Board
+
+@@ -55475,6 +55700,9 @@ pci:v00008086d0000269Esv0000103Csd000031FE*
+ pci:v00008086d0000269Esv000015D9sd00008680*
+ ID_PRODUCT_FROM_DATABASE=X7DVL-E-O motherboard
+
++pci:v00008086d0000269Esv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d00002770*
+ ID_PRODUCT_FROM_DATABASE=82945G/GZ/P/PL Memory Controller Hub
+
+@@ -55694,12 +55922,21 @@ pci:v00008086d000027B9sv000017AAsd00002009*
+ pci:v00008086d000027BC*
+ ID_PRODUCT_FROM_DATABASE=NM10 Family LPC Controller
+
++pci:v00008086d000027BCsv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d000027BCsv0000144Dsd0000C072*
+ ID_PRODUCT_FROM_DATABASE=Notebook N150P
+
++pci:v00008086d000027BCsv00001458sd00005001*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d000027BCsv00008086sd00004F4D*
+ ID_PRODUCT_FROM_DATABASE=DeskTop Board D510MO
+
++pci:v00008086d000027BCsv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027BD*
+ ID_PRODUCT_FROM_DATABASE=82801GHM (ICH7-M DH) LPC Interface Bridge
+
+@@ -55733,6 +55970,9 @@ pci:v00008086d000027C0sv00001462sd00007236*
+ pci:v00008086d000027C0sv00001775sd000011CC*
+ ID_PRODUCT_FROM_DATABASE=CC11/CL11
+
++pci:v00008086d000027C0sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027C0sv00008086sd0000544E*
+ ID_PRODUCT_FROM_DATABASE=DeskTop Board D945GTP
+
+@@ -55745,9 +55985,15 @@ pci:v00008086d000027C1sv00001028sd000001DF*
+ pci:v00008086d000027C1sv0000103Csd00002A3B*
+ ID_PRODUCT_FROM_DATABASE=Pavilion A1512X
+
++pci:v00008086d000027C1sv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d000027C1sv0000144Dsd0000C072*
+ ID_PRODUCT_FROM_DATABASE=Notebook N150P
+
++pci:v00008086d000027C1sv00001458sd0000B005*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d000027C1sv00001775sd000011CC*
+ ID_PRODUCT_FROM_DATABASE=CC11/CL11
+
+@@ -55829,12 +56075,18 @@ pci:v00008086d000027C8sv00001043sd00001237*
+ pci:v00008086d000027C8sv00001043sd00008179*
+ ID_PRODUCT_FROM_DATABASE=P5KPL-VM,P5LD2-VM Mainboard
+
++pci:v00008086d000027C8sv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d000027C8sv0000107Bsd00005048*
+ ID_PRODUCT_FROM_DATABASE=E4500
+
+ pci:v00008086d000027C8sv0000144Dsd0000C072*
+ ID_PRODUCT_FROM_DATABASE=Notebook N150P
+
++pci:v00008086d000027C8sv00001458sd00005004*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d000027C8sv00001775sd000011CC*
+ ID_PRODUCT_FROM_DATABASE=CC11/CL11
+
+@@ -55844,6 +56096,9 @@ pci:v00008086d000027C8sv000017AAsd0000200A*
+ pci:v00008086d000027C8sv00008086sd00004F4D*
+ ID_PRODUCT_FROM_DATABASE=DeskTop Board D510MO
+
++pci:v00008086d000027C8sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027C8sv00008086sd0000544E*
+ ID_PRODUCT_FROM_DATABASE=DeskTop Board D945GTP
+
+@@ -55883,12 +56138,18 @@ pci:v00008086d000027C9sv00001043sd00001237*
+ pci:v00008086d000027C9sv00001043sd00008179*
+ ID_PRODUCT_FROM_DATABASE=P5KPL-VM,P5LD2-VM Mainboard
+
++pci:v00008086d000027C9sv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d000027C9sv0000107Bsd00005048*
+ ID_PRODUCT_FROM_DATABASE=E4500
+
+ pci:v00008086d000027C9sv0000144Dsd0000C072*
+ ID_PRODUCT_FROM_DATABASE=Notebook N150P
+
++pci:v00008086d000027C9sv00001458sd00005004*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d000027C9sv00001775sd000011CC*
+ ID_PRODUCT_FROM_DATABASE=CC11/CL11
+
+@@ -55898,6 +56159,9 @@ pci:v00008086d000027C9sv000017AAsd0000200A*
+ pci:v00008086d000027C9sv00008086sd00004F4D*
+ ID_PRODUCT_FROM_DATABASE=DeskTop Board D510MO
+
++pci:v00008086d000027C9sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027C9sv00008086sd0000544E*
+ ID_PRODUCT_FROM_DATABASE=DeskTop Board D945GTP
+
+@@ -55937,12 +56201,18 @@ pci:v00008086d000027CAsv00001043sd00001237*
+ pci:v00008086d000027CAsv00001043sd00008179*
+ ID_PRODUCT_FROM_DATABASE=P5KPL-VM,P5LD2-VM Mainboard
+
++pci:v00008086d000027CAsv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d000027CAsv0000107Bsd00005048*
+ ID_PRODUCT_FROM_DATABASE=E4500
+
+ pci:v00008086d000027CAsv0000144Dsd0000C072*
+ ID_PRODUCT_FROM_DATABASE=Notebook N150P
+
++pci:v00008086d000027CAsv00001458sd00005004*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d000027CAsv00001775sd000011CC*
+ ID_PRODUCT_FROM_DATABASE=CC11/CL11
+
+@@ -55988,12 +56258,18 @@ pci:v00008086d000027CBsv00001043sd00001237*
+ pci:v00008086d000027CBsv00001043sd00008179*
+ ID_PRODUCT_FROM_DATABASE=P5KPL-VM,P5LD2-VM Mainboard
+
++pci:v00008086d000027CBsv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d000027CBsv0000107Bsd00005048*
+ ID_PRODUCT_FROM_DATABASE=E4500
+
+ pci:v00008086d000027CBsv0000144Dsd0000C072*
+ ID_PRODUCT_FROM_DATABASE=Notebook N150P
+
++pci:v00008086d000027CBsv00001458sd00005004*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d000027CBsv00001775sd000011CC*
+ ID_PRODUCT_FROM_DATABASE=CC11/CL11
+
+@@ -56042,9 +56318,15 @@ pci:v00008086d000027CCsv00001043sd00001237*
+ pci:v00008086d000027CCsv00001043sd00008179*
+ ID_PRODUCT_FROM_DATABASE=P5KPL-VM,P5LD2-VM Mainboard
+
++pci:v00008086d000027CCsv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d000027CCsv0000144Dsd0000C072*
+ ID_PRODUCT_FROM_DATABASE=Notebook N150P
+
++pci:v00008086d000027CCsv00001458sd00005006*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d000027CCsv00001775sd000011CC*
+ ID_PRODUCT_FROM_DATABASE=CC11/CL11
+
+@@ -56054,6 +56336,9 @@ pci:v00008086d000027CCsv000017AAsd0000200B*
+ pci:v00008086d000027CCsv00008086sd00004F4D*
+ ID_PRODUCT_FROM_DATABASE=DeskTop Board D510MO
+
++pci:v00008086d000027CCsv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027CCsv00008086sd0000544E*
+ ID_PRODUCT_FROM_DATABASE=DeskTop Board D945GTP
+
+@@ -56069,9 +56354,15 @@ pci:v00008086d000027D0sv0000103Csd000030A3*
+ pci:v00008086d000027D0sv0000144Dsd0000C072*
+ ID_PRODUCT_FROM_DATABASE=Notebook N150P
+
++pci:v00008086d000027D0sv00001458sd00005001*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d000027D0sv00001775sd000011CC*
+ ID_PRODUCT_FROM_DATABASE=CC11/CL11
+
++pci:v00008086d000027D0sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027D2*
+ ID_PRODUCT_FROM_DATABASE=NM10/ICH7 Family PCI Express Port 2
+
+@@ -56087,6 +56378,9 @@ pci:v00008086d000027D2sv0000144Dsd0000C072*
+ pci:v00008086d000027D2sv00001775sd000011CC*
+ ID_PRODUCT_FROM_DATABASE=CC11/CL11
+
++pci:v00008086d000027D2sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027D4*
+ ID_PRODUCT_FROM_DATABASE=NM10/ICH7 Family PCI Express Port 3
+
+@@ -56096,6 +56390,9 @@ pci:v00008086d000027D4sv0000144Dsd0000C072*
+ pci:v00008086d000027D4sv00001775sd000011CC*
+ ID_PRODUCT_FROM_DATABASE=CC11/CL11
+
++pci:v00008086d000027D4sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027D6*
+ ID_PRODUCT_FROM_DATABASE=NM10/ICH7 Family PCI Express Port 4
+
+@@ -56108,6 +56405,9 @@ pci:v00008086d000027D6sv0000144Dsd0000C072*
+ pci:v00008086d000027D6sv00001775sd000011CC*
+ ID_PRODUCT_FROM_DATABASE=CC11/CL11
+
++pci:v00008086d000027D6sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027D8*
+ ID_PRODUCT_FROM_DATABASE=NM10/ICH7 Family High Definition Audio Controller
+
+@@ -56144,6 +56444,9 @@ pci:v00008086d000027D8sv00001043sd00008290*
+ pci:v00008086d000027D8sv00001043sd000082EA*
+ ID_PRODUCT_FROM_DATABASE=P5KPL-CM Motherboard
+
++pci:v00008086d000027D8sv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d000027D8sv0000107Bsd00005048*
+ ID_PRODUCT_FROM_DATABASE=E4500
+
+@@ -56162,6 +56465,9 @@ pci:v00008086d000027D8sv00001447sd00001043*
+ pci:v00008086d000027D8sv0000144Dsd0000C072*
+ ID_PRODUCT_FROM_DATABASE=Notebook N150P
+
++pci:v00008086d000027D8sv00001458sd0000A002*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD (Realtek ALC887)
++
+ pci:v00008086d000027D8sv00001458sd0000A102*
+ ID_PRODUCT_FROM_DATABASE=GA-8I945PG-RH Mainboard
+
+@@ -56213,6 +56519,9 @@ pci:v00008086d000027DAsv0000103Csd00002A3B*
+ pci:v00008086d000027DAsv00001043sd00008179*
+ ID_PRODUCT_FROM_DATABASE=P5KPL-VM Motherboard
+
++pci:v00008086d000027DAsv0000105Bsd00000D7C*
++ ID_PRODUCT_FROM_DATABASE=D270S/D250S Motherboard
++
+ pci:v00008086d000027DAsv000010F7sd00008338*
+ ID_PRODUCT_FROM_DATABASE=Panasonic CF-Y5 laptop
+
+@@ -56220,7 +56529,7 @@ pci:v00008086d000027DAsv0000144Dsd0000C072*
+ ID_PRODUCT_FROM_DATABASE=Notebook N150P
+
+ pci:v00008086d000027DAsv00001458sd00005001*
+- ID_PRODUCT_FROM_DATABASE=GA-8I945PG-RH Mainboard
++ ID_PRODUCT_FROM_DATABASE=GA-8I945PG-RH/GA-D525TUD Mainboard
+
+ pci:v00008086d000027DAsv00001775sd000011CC*
+ ID_PRODUCT_FROM_DATABASE=CC11/CL11
+@@ -56231,6 +56540,9 @@ pci:v00008086d000027DAsv000017AAsd0000200F*
+ pci:v00008086d000027DAsv00008086sd00004F4D*
+ ID_PRODUCT_FROM_DATABASE=DeskTop Board D510MO
+
++pci:v00008086d000027DAsv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d000027DAsv00008086sd0000544E*
+ ID_PRODUCT_FROM_DATABASE=DeskTop Board D945GTP
+
+@@ -57762,7 +58074,7 @@ pci:v00008086d00002A00sv000017AAsd000020B1*
+ ID_PRODUCT_FROM_DATABASE=ThinkPad T61
+
+ pci:v00008086d00002A00sv000017AAsd000020B3*
+- ID_PRODUCT_FROM_DATABASE=T61
++ ID_PRODUCT_FROM_DATABASE=ThinkPad T61/R61
+
+ pci:v00008086d00002A00sv0000E4BFsd0000CC47*
+ ID_PRODUCT_FROM_DATABASE=CCG-RUMBA
+@@ -57789,7 +58101,7 @@ pci:v00008086d00002A02sv0000104Dsd0000902D*
+ ID_PRODUCT_FROM_DATABASE=VAIO VGN-NR120E
+
+ pci:v00008086d00002A02sv000017AAsd000020B5*
+- ID_PRODUCT_FROM_DATABASE=T61
++ ID_PRODUCT_FROM_DATABASE=ThinkPad T61/R61
+
+ pci:v00008086d00002A02sv0000E4BFsd0000CC47*
+ ID_PRODUCT_FROM_DATABASE=CCG-RUMBA
+@@ -57810,7 +58122,7 @@ pci:v00008086d00002A03sv0000104Dsd0000902D*
+ ID_PRODUCT_FROM_DATABASE=VAIO VGN-NR120E
+
+ pci:v00008086d00002A03sv000017AAsd000020B5*
+- ID_PRODUCT_FROM_DATABASE=T61
++ ID_PRODUCT_FROM_DATABASE=ThinkPad T61/R61
+
+ pci:v00008086d00002A03sv0000E4BFsd0000CC47*
+ ID_PRODUCT_FROM_DATABASE=CCG-RUMBA
+@@ -58829,6 +59141,9 @@ pci:v00008086d00003500*
+ pci:v00008086d00003500sv0000103Csd000031FE*
+ ID_PRODUCT_FROM_DATABASE=ProLiant DL140 G3
+
++pci:v00008086d00003500sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d00003501*
+ ID_PRODUCT_FROM_DATABASE=6310ESB PCI Express Upstream Port
+
+@@ -58844,6 +59159,9 @@ pci:v00008086d0000350C*
+ pci:v00008086d0000350Csv0000103Csd000031FE*
+ ID_PRODUCT_FROM_DATABASE=ProLiant DL140 G3
+
++pci:v00008086d0000350Csv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d0000350D*
+ ID_PRODUCT_FROM_DATABASE=6310ESB PCI Express to PCI-X Bridge
+
+@@ -58853,6 +59171,9 @@ pci:v00008086d00003510*
+ pci:v00008086d00003510sv0000103Csd000031FE*
+ ID_PRODUCT_FROM_DATABASE=ProLiant DL140 G3
+
++pci:v00008086d00003510sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d00003511*
+ ID_PRODUCT_FROM_DATABASE=6310ESB PCI Express Downstream Port E1
+
+@@ -58865,6 +59186,9 @@ pci:v00008086d00003515*
+ pci:v00008086d00003518*
+ ID_PRODUCT_FROM_DATABASE=6311ESB/6321ESB PCI Express Downstream Port E3
+
++pci:v00008086d00003518sv000015D9sd00009680*
++ ID_PRODUCT_FROM_DATABASE=X7DBN Motherboard
++
+ pci:v00008086d00003519*
+ ID_PRODUCT_FROM_DATABASE=6310ESB PCI Express Downstream Port E3
+
+@@ -59529,7 +59853,7 @@ pci:v00008086d00003A37sv00001043sd000082D4*
+ ID_PRODUCT_FROM_DATABASE=P5Q Deluxe Motherboard
+
+ pci:v00008086d00003A37sv00001458sd00005004*
+- ID_PRODUCT_FROM_DATABASE=GA-EP45-DS5/GA-EG45M-DS2H Motherboard
++ ID_PRODUCT_FROM_DATABASE=Motherboard
+
+ pci:v00008086d00003A38*
+ ID_PRODUCT_FROM_DATABASE=82801JI (ICH10 Family) USB UHCI Controller #5
+@@ -59547,7 +59871,7 @@ pci:v00008086d00003A38sv00001043sd000082D4*
+ ID_PRODUCT_FROM_DATABASE=P5Q Deluxe Motherboard
+
+ pci:v00008086d00003A38sv00001458sd00005004*
+- ID_PRODUCT_FROM_DATABASE=GA-EP45-DS5/GA-EG45M-DS2H Motherboard
++ ID_PRODUCT_FROM_DATABASE=Motherboard
+
+ pci:v00008086d00003A39*
+ ID_PRODUCT_FROM_DATABASE=82801JI (ICH10 Family) USB UHCI Controller #6
+@@ -59565,7 +59889,7 @@ pci:v00008086d00003A39sv00001043sd000082D4*
+ ID_PRODUCT_FROM_DATABASE=P5Q Deluxe Motherboard
+
+ pci:v00008086d00003A39sv00001458sd00005004*
+- ID_PRODUCT_FROM_DATABASE=GA-EP45-DS5/GA-EG45M-DS2H Motherboard
++ ID_PRODUCT_FROM_DATABASE=Motherboard
+
+ pci:v00008086d00003A3A*
+ ID_PRODUCT_FROM_DATABASE=82801JI (ICH10 Family) USB2 EHCI Controller #1
+@@ -61196,12 +61520,6 @@ pci:v00008086d00008185*
+ pci:v00008086d00008186*
+ ID_PRODUCT_FROM_DATABASE=Atom Processor E6xx LPC Bridge
+
+-pci:v00008086d0000821C*
+- ID_PRODUCT_FROM_DATABASE=Wellsburg PCI Express Root Port #7
+-
+-pci:v00008086d0000821D*
+- ID_PRODUCT_FROM_DATABASE=Wellsburg PCI Express Root Port #7
+-
+ pci:v00008086d000084C4*
+ ID_PRODUCT_FROM_DATABASE=450KX/GX [Orion] - 82454KX/GX PCI bridge
+
+@@ -61598,6 +61916,15 @@ pci:v00008086d00008D19*
+ pci:v00008086d00008D1A*
+ ID_PRODUCT_FROM_DATABASE=Wellsburg PCI Express Root Port #6
+
++pci:v00008086d00008D1B*
++ ID_PRODUCT_FROM_DATABASE=Wellsburg PCI Express Root Port #6
++
++pci:v00008086d00008D1C*
++ ID_PRODUCT_FROM_DATABASE=Wellsburg PCI Express Root Port #7
++
++pci:v00008086d00008D1D*
++ ID_PRODUCT_FROM_DATABASE=Wellsburg PCI Express Root Port #7
++
+ pci:v00008086d00008D1E*
+ ID_PRODUCT_FROM_DATABASE=Wellsburg PCI Express Root Port #8
+
+@@ -61829,6 +62156,18 @@ pci:v00008086d00009C1A*
+ pci:v00008086d00009C1B*
+ ID_PRODUCT_FROM_DATABASE=Lynx Point-LP PCI Express Root Port 6
+
++pci:v00008086d00009C1C*
++ ID_PRODUCT_FROM_DATABASE=Lynx Point-LP PCI Express Root Port 7
++
++pci:v00008086d00009C1D*
++ ID_PRODUCT_FROM_DATABASE=Lynx Point-LP PCI Express Root Port 7
++
++pci:v00008086d00009C1E*
++ ID_PRODUCT_FROM_DATABASE=Lynx Point-LP PCI Express Root Port 8
++
++pci:v00008086d00009C1F*
++ ID_PRODUCT_FROM_DATABASE=Lynx Point-LP PCI Express Root Port 8
++
+ pci:v00008086d00009C20*
+ ID_PRODUCT_FROM_DATABASE=Lynx Point-LP HD Audio Controller
+
+@@ -61847,6 +62186,9 @@ pci:v00008086d00009C24*
+ pci:v00008086d00009C26*
+ ID_PRODUCT_FROM_DATABASE=Lynx Point-LP USB EHCI #1
+
++pci:v00008086d00009C2D*
++ ID_PRODUCT_FROM_DATABASE=Lynx Point-LP USB EHCI #2
++
+ pci:v00008086d00009C31*
+ ID_PRODUCT_FROM_DATABASE=Lynx Point-LP USB xHCI HC
+
+@@ -61916,15 +62258,27 @@ pci:v00008086d00009C66*
+ pci:v00008086d0000A000*
+ ID_PRODUCT_FROM_DATABASE=Atom Processor D4xx/D5xx/N4xx/N5xx DMI Bridge
+
++pci:v00008086d0000A000sv00001458sd00005000*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d0000A000sv00008086sd00004F4D*
+ ID_PRODUCT_FROM_DATABASE=DeskTop Board D510MO
+
++pci:v00008086d0000A000sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d0000A001*
+ ID_PRODUCT_FROM_DATABASE=Atom Processor D4xx/D5xx/N4xx/N5xx Integrated Graphics Controller
+
++pci:v00008086d0000A001sv00001458sd0000D000*
++ ID_PRODUCT_FROM_DATABASE=GA-D525TUD
++
+ pci:v00008086d0000A001sv00008086sd00004F4D*
+ ID_PRODUCT_FROM_DATABASE=DeskTop Board D510MO
+
++pci:v00008086d0000A001sv00008086sd0000544B*
++ ID_PRODUCT_FROM_DATABASE=Desktop Board D425KT
++
+ pci:v00008086d0000A002*
+ ID_PRODUCT_FROM_DATABASE=Atom Processor D4xx/D5xx/N4xx/N5xx Integrated Graphics Controller
+
+diff --git a/hwdb/20-usb-vendor-product.hwdb b/hwdb/20-usb-vendor-product.hwdb
+index a9b5a7e..423c5fb 100644
+--- a/hwdb/20-usb-vendor-product.hwdb
++++ b/hwdb/20-usb-vendor-product.hwdb
+@@ -46484,6 +46484,21 @@ usb:v2659p1207*
+ usb:v2659p1208*
+ ID_PRODUCT_FROM_DATABASE=Sundtek SkyTV Ultimate III
+
++usb:v2659p1209*
++ ID_PRODUCT_FROM_DATABASE=MediaTV Analog/FM/ATSC MiniPCIe
++
++usb:v2659p1210*
++ ID_PRODUCT_FROM_DATABASE=MediaTV Pro III (EU)
++
++usb:v2659p1211*
++ ID_PRODUCT_FROM_DATABASE=MediaTV Pro III (US)
++
++usb:v2659p1212*
++ ID_PRODUCT_FROM_DATABASE=MediaTV Pro III MiniPCIe (EU)
++
++usb:v2659p1213*
++ ID_PRODUCT_FROM_DATABASE=MediaTV Pro III MiniPCIe (US)
++
+ usb:v2730*
+ ID_VENDOR_FROM_DATABASE=Citizen
+
diff --git a/0046-nspawn-add-audit-caps-to-default-set-to-keep.patch b/0046-nspawn-add-audit-caps-to-default-set-to-keep.patch
new file mode 100644
index 0000000..b208acd
--- /dev/null
+++ b/0046-nspawn-add-audit-caps-to-default-set-to-keep.patch
@@ -0,0 +1,62 @@
+From bedaffda101f906b73891e4045da2b962c3325c8 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Fri, 18 Jan 2013 18:13:01 +0100
+Subject: [PATCH] nspawn: add audit caps to default set to keep
+
+Due to the brokeness of much of the userspace audit code we cannot
+really start too many systems without the audit caps set. To make nspawn
+easier to use just add the audit caps by default.
+
+To boot up containers successfully the kernel's auditing needs to be
+turned off still (use "audit=0" on the kernel command line), but at
+least no manual caps have to be passed anymore.
+
+In the long run auditing will be fixed for containers and ve virtualized
+properly at which time it should be safe to enable these caps anyway.
+(cherry picked from commit 88d04e31ce0837ebf937ab46c3c39a0d93ab4c7c)
+---
+ man/systemd-nspawn.xml | 8 +++++---
+ src/nspawn/nspawn.c | 4 +++-
+ 2 files changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/man/systemd-nspawn.xml b/man/systemd-nspawn.xml
+index fef5c2c..e9a290f 100644
+--- a/man/systemd-nspawn.xml
++++ b/man/systemd-nspawn.xml
+@@ -220,8 +220,8 @@
+ list of capability names, see
+ <citerefentry><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ for more information. Note that the
+- following capabilities will be
+- granted in any way: CAP_CHOWN,
++ following capabilities will be granted
++ in any way: CAP_CHOWN,
+ CAP_DAC_OVERRIDE, CAP_DAC_READ_SEARCH,
+ CAP_FOWNER, CAP_FSETID, CAP_IPC_OWNER,
+ CAP_KILL, CAP_LEASE,
+@@ -232,7 +232,9 @@
+ CAP_SETUID, CAP_SYS_ADMIN,
+ CAP_SYS_CHROOT, CAP_SYS_NICE,
+ CAP_SYS_PTRACE, CAP_SYS_TTY_CONFIG,
+- CAP_SYS_RESOURCE, CAP_SYS_BOOT.</para></listitem>
++ CAP_SYS_RESOURCE, CAP_SYS_BOOT,
++ CAP_AUDIT_WRITE,
++ CAP_AUDIT_CONTROL.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
+index 1f3bda5..44557f6 100644
+--- a/src/nspawn/nspawn.c
++++ b/src/nspawn/nspawn.c
+@@ -95,7 +95,9 @@ static uint64_t arg_retain =
+ (1ULL << CAP_SYS_PTRACE) |
+ (1ULL << CAP_SYS_TTY_CONFIG) |
+ (1ULL << CAP_SYS_RESOURCE) |
+- (1ULL << CAP_SYS_BOOT);
++ (1ULL << CAP_SYS_BOOT) |
++ (1ULL << CAP_AUDIT_WRITE) |
++ (1ULL << CAP_AUDIT_CONTROL);
+
+ static int help(void) {
+
diff --git a/0047-man-update-suggested-yum-command-line-in-nspawn-1.patch b/0047-man-update-suggested-yum-command-line-in-nspawn-1.patch
new file mode 100644
index 0000000..4cd7a81
--- /dev/null
+++ b/0047-man-update-suggested-yum-command-line-in-nspawn-1.patch
@@ -0,0 +1,33 @@
+From 61f28fddbc6954339842b93f5594edb336bc50f6 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Fri, 18 Jan 2013 18:22:55 +0100
+Subject: [PATCH] man: update suggested yum command line in nspawn(1) (cherry
+ picked from commit 2b3987a863975f5a1fa1754725e3d07a5d4f6478)
+
+---
+ man/systemd-nspawn.xml | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/man/systemd-nspawn.xml b/man/systemd-nspawn.xml
+index e9a290f..085c187 100644
+--- a/man/systemd-nspawn.xml
++++ b/man/systemd-nspawn.xml
+@@ -291,13 +291,13 @@
+ <refsect1>
+ <title>Example 1</title>
+
+- <programlisting># yum --releasever=17 --nogpgcheck --installroot ~/fedora-tree/ install yum passwd vim-minimal rootfiles systemd
+-# systemd-nspawn -D ~/fedora-tree /usr/lib/systemd/systemd</programlisting>
++ <programlisting># yum -y --releasever=19 --nogpg --installroot=/srv/mycontainer --disablerepo='*' --enablerepo=fedora install systemd passwd yum fedora-release vim-minimal
++# systemd-nspawn -bD /srv/mycontainer</programlisting>
+
+ <para>This installs a minimal Fedora distribution into
+- the directory <filename>~/fedora-tree/</filename>
+- and then boots an OS in a namespace container in it,
+- with systemd as init system.</para>
++ the directory <filename>/srv/mycontainer/</filename> and
++ then boots an OS in a namespace container in
++ it.</para>
+ </refsect1>
+
+ <refsect1>
diff --git a/0048-tmpfiles-do-not-make-run-nologin-executable.patch b/0048-tmpfiles-do-not-make-run-nologin-executable.patch
new file mode 100644
index 0000000..c80401b
--- /dev/null
+++ b/0048-tmpfiles-do-not-make-run-nologin-executable.patch
@@ -0,0 +1,20 @@
+From 2be42c50b89f70820f683ff7d36e53de62a1dea5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Micha=C5=82=20Bartoszkiewicz?= <mbartoszkiewicz at gmail.com>
+Date: Fri, 18 Jan 2013 21:33:59 +0100
+Subject: [PATCH] tmpfiles: do not make /run/nologin executable (cherry picked
+ from commit 610d99284feb9e942bce601c6aac1a5074545e6b)
+
+---
+ tmpfiles.d/systemd.conf | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tmpfiles.d/systemd.conf b/tmpfiles.d/systemd.conf
+index f3928d6..ee86f2e 100644
+--- a/tmpfiles.d/systemd.conf
++++ b/tmpfiles.d/systemd.conf
+@@ -21,4 +21,4 @@ d /run/systemd/sessions 0755 root root -
+ d /run/systemd/users 0755 root root -
+ d /run/systemd/shutdown 0755 root root -
+
+-F /run/nologin 0755 - - - "System is booting up."
++F /run/nologin 0644 - - - "System is booting up."
diff --git a/0049-shutdown-loop-convert-to-enumerate-match.patch b/0049-shutdown-loop-convert-to-enumerate-match.patch
new file mode 100644
index 0000000..52e72ed
--- /dev/null
+++ b/0049-shutdown-loop-convert-to-enumerate-match.patch
@@ -0,0 +1,45 @@
+From ab003157d9f533a1bfbdd0a839c2542e7efb23e3 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Sun, 20 Jan 2013 16:18:00 +0100
+Subject: [PATCH] shutdown: loop - convert to enumerate match (cherry picked
+ from commit e1af7092a8e124eff5f7a668f0f1562c4df4b02f)
+
+---
+ src/core/umount.c | 10 ++--------
+ 1 file changed, 2 insertions(+), 8 deletions(-)
+
+diff --git a/src/core/umount.c b/src/core/umount.c
+index f0f2711..3fcb90e 100644
+--- a/src/core/umount.c
++++ b/src/core/umount.c
+@@ -219,7 +219,8 @@ static int loopback_list_get(MountPoint **head) {
+ }
+
+ if (udev_enumerate_add_match_subsystem(e, "block") < 0 ||
+- udev_enumerate_add_match_sysname(e, "loop*") < 0) {
++ udev_enumerate_add_match_sysname(e, "loop*") < 0 ||
++ udev_enumerate_add_match_sysattr(e, "loop/backing_file", NULL) < 0) {
+ r = -EIO;
+ goto finish;
+ }
+@@ -233,7 +234,6 @@ static int loopback_list_get(MountPoint **head) {
+ udev_list_entry_foreach(item, first) {
+ MountPoint *lb;
+ struct udev_device *d;
+- const char *backing;
+ char *loop;
+ const char *dn;
+
+@@ -242,12 +242,6 @@ static int loopback_list_get(MountPoint **head) {
+ goto finish;
+ }
+
+- backing = udev_device_get_sysattr_value(d, "loop/backing_file");
+- if (!backing) {
+- udev_device_unref(d);
+- continue;
+- }
+-
+ if (!(dn = udev_device_get_devnode(d))) {
+ udev_device_unref(d);
+ continue;
diff --git a/0050-Fix-some-typos.patch b/0050-Fix-some-typos.patch
new file mode 100644
index 0000000..67cda0e
--- /dev/null
+++ b/0050-Fix-some-typos.patch
@@ -0,0 +1,37 @@
+From 0b6b98ed0ff1cbdd02179b7551443a4e43716af2 Mon Sep 17 00:00:00 2001
+From: Eelco Dolstra <eelco.dolstra at logicblox.com>
+Date: Sun, 20 Jan 2013 16:27:58 +0100
+Subject: [PATCH] Fix some typos (cherry picked from commit
+ 28137202027b07fec5c270c1b1ef12ebaf35d58d)
+
+---
+ man/systemd.service.xml | 2 +-
+ src/core/manager.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/man/systemd.service.xml b/man/systemd.service.xml
+index 8dbef49..79bf8d8 100644
+--- a/man/systemd.service.xml
++++ b/man/systemd.service.xml
+@@ -745,7 +745,7 @@
+ open access to the notification socket
+ when using
+ <varname>Type=notify</varname> or
+- <varname>WatchdogUsec=</varname> (see
++ <varname>WatchdogSec=</varname> (see
+ above). If those options are used but
+ <varname>NotifyAccess=</varname> not
+ configured it will be implicitly set
+diff --git a/src/core/manager.c b/src/core/manager.c
+index df0fd63..79d1e85 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -122,7 +122,7 @@ static int manager_setup_notify(Manager *m) {
+ ev.data.ptr = &m->notify_watch;
+
+ if (epoll_ctl(m->epoll_fd, EPOLL_CTL_ADD, m->notify_watch.fd, &ev) < 0) {
+- log_error("Failed to add timer change fd to epoll: %m");
++ log_error("Failed to add notification socket fd to epoll: %m");
+ return -errno;
+ }
+
diff --git a/0051-man-clearify-the-meaning-of-timeout-0-for-password-a.patch b/0051-man-clearify-the-meaning-of-timeout-0-for-password-a.patch
new file mode 100644
index 0000000..a567dcb
--- /dev/null
+++ b/0051-man-clearify-the-meaning-of-timeout-0-for-password-a.patch
@@ -0,0 +1,42 @@
+From 05469f7b42b6947d02ec9dd41fb08e777a2f22b9 Mon Sep 17 00:00:00 2001
+From: Tom Gundersen <teg at jklm.no>
+Date: Wed, 23 Jan 2013 01:02:14 +0100
+Subject: [PATCH] man: clearify the meaning of timeout=0 for password agents
+
+The fact that timeout=0 makes password agents wait indefinitely is documented
+in http://www.freedesktop.org/wiki/Software/systemd/PasswordAgents. Document
+it also in the relevant man pages.
+(cherry picked from commit c93350728e822c3da7522664cf0a0e0ee10509fa)
+---
+ man/crypttab.xml | 3 ++-
+ man/systemd-ask-password.xml | 3 ++-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/man/crypttab.xml b/man/crypttab.xml
+index 2a83994..acc7029 100644
+--- a/man/crypttab.xml
++++ b/man/crypttab.xml
+@@ -220,7 +220,8 @@
+ for querying for a password. If no
+ unit is specified seconds is used.
+ Supported units are s, ms,
+- us, min, h, d.</para></listitem>
++ us, min, h, d. A timeout of 0 waits
++ indefinitely.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+diff --git a/man/systemd-ask-password.xml b/man/systemd-ask-password.xml
+index 7b0b9ab..563f9d5 100644
+--- a/man/systemd-ask-password.xml
++++ b/man/systemd-ask-password.xml
+@@ -129,7 +129,8 @@
+
+ <listitem><para>Specify the query
+ timeout in seconds. Defaults to
+- 90s.</para></listitem>
++ 90s. A timeout of 0 waits indefinitely.
++ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
diff --git a/0052-configure.ac-combine-Wformat-options-into-one-argume.patch b/0052-configure.ac-combine-Wformat-options-into-one-argume.patch
new file mode 100644
index 0000000..e3d162d
--- /dev/null
+++ b/0052-configure.ac-combine-Wformat-options-into-one-argume.patch
@@ -0,0 +1,29 @@
+From 0561647ccf955bb0e76a04924f26a0183e098d77 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Tue, 22 Jan 2013 18:10:55 +0100
+Subject: [PATCH] configure.ac: combine --Wformat* options into one argument
+
+https://bugs.freedesktop.org/show_bug.cgi?id=59621
+(cherry picked from commit 780040dc2a4b08a2c1fe5bd8db3a70e966c2acb3)
+---
+ configure.ac | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 7a3cd87..d1e9bb6 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -129,12 +129,10 @@ CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\
+ -Wextra \
+ -Wno-inline \
+ -Wundef \
+- -Wformat=2 \
++ "-Wformat=2 -Wformat-security -Wformat-nonliteral" \
+ -Wlogical-op \
+ -Wsign-compare \
+- -Wformat-security \
+ -Wmissing-include-dirs \
+- -Wformat-nonliteral \
+ -Wold-style-definition \
+ -Wpointer-arith \
+ -Winit-self \
diff --git a/0053-logind-only-allow-one-shutdown-sleep-action-to-be-qu.patch b/0053-logind-only-allow-one-shutdown-sleep-action-to-be-qu.patch
new file mode 100644
index 0000000..7200089
--- /dev/null
+++ b/0053-logind-only-allow-one-shutdown-sleep-action-to-be-qu.patch
@@ -0,0 +1,206 @@
+From d4e2342bd4b1d0d0c642e231a744ec86098daeae Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 24 Jan 2013 04:56:44 +0100
+Subject: [PATCH] logind: only allow one shutdown/sleep action to be queued at
+ the same time
+
+This should make sure that closing the lid while shutting down won't
+suspend the machine but will simply cause the shutdown to complete.
+(cherry picked from commit af9792ac7f39354f80e9006c42c2400c5e41c447)
+---
+ src/login/logind-action.c | 9 ++++++-
+ src/login/logind-dbus.c | 65 +++++++++++++++++++++++++++++++++++++++--------
+ src/login/logind.c | 2 ++
+ src/login/logind.h | 4 ++-
+ 4 files changed, 67 insertions(+), 13 deletions(-)
+
+diff --git a/src/login/logind-action.c b/src/login/logind-action.c
+index e1517d6..a796ebe 100644
+--- a/src/login/logind-action.c
++++ b/src/login/logind-action.c
+@@ -56,10 +56,15 @@ int manager_handle_action(
+ DBusError error;
+ int r;
+ InhibitWhat inhibit_operation;
+- bool supported = true;
++ bool supported;
+
+ assert(m);
+
++ if (m->action_job || m->delayed_unit) {
++ log_debug("Action already in progress, ignoring.");
++ return -EALREADY;
++ }
++
+ /* If the key handling is turned off, don't do anything */
+ if (handle == HANDLE_IGNORE) {
+ log_debug("Refusing operation, as it is turned off.");
+@@ -74,6 +79,8 @@ int manager_handle_action(
+ supported = can_sleep("disk") > 0 && can_sleep_disk("suspend") > 0;
+ else if (handle == HANDLE_KEXEC)
+ supported = access("/sbin/kexec", X_OK) >= 0;
++ else
++ supported = true;
+
+ if (!supported) {
+ log_warning("Requested operation not supported, ignoring.");
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index d64debe..0ff20fa 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -990,22 +990,44 @@ static int have_multiple_sessions(
+ return false;
+ }
+
+-static int send_start_unit(DBusConnection *connection, const char *unit_name, DBusError *error) {
+- const char *mode = "replace";
++static int send_start_unit(Manager *m, const char *unit_name, DBusError *error) {
++ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
++ const char *mode = "replace", *p;
++ int r;
++ char *c;
+
++ assert(m);
+ assert(unit_name);
+
+- return bus_method_call_with_reply (
+- connection,
++ r = bus_method_call_with_reply(
++ m->bus,
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "StartUnit",
+- NULL,
+- NULL,
++ &reply,
++ error,
+ DBUS_TYPE_STRING, &unit_name,
+ DBUS_TYPE_STRING, &mode,
+ DBUS_TYPE_INVALID);
++ if (r < 0)
++ return r;
++
++ if (!dbus_message_get_args(
++ reply,
++ error,
++ DBUS_TYPE_OBJECT_PATH, &p,
++ DBUS_TYPE_INVALID))
++ return -EINVAL;
++
++ c = strdup(p);
++ if (!c)
++ return -ENOMEM;
++
++ free(m->action_job);
++ m->action_job = c;
++
++ return 0;
+ }
+
+ static int send_prepare_for(Manager *m, InhibitWhat w, bool _active) {
+@@ -1226,6 +1248,7 @@ int bus_manager_shutdown_or_sleep_now_or_later(
+ assert(unit_name);
+ assert(w >= 0);
+ assert(w <= _INHIBIT_WHAT_MAX);
++ assert(!m->action_job);
+
+ delayed =
+ m->inhibit_delay_max > 0 &&
+@@ -1240,7 +1263,7 @@ int bus_manager_shutdown_or_sleep_now_or_later(
+
+ /* Shutdown is not delayed, execute it
+ * immediately */
+- r = send_start_unit(m->bus, unit_name, error);
++ r = send_start_unit(m, unit_name, error);
+ }
+
+ return r;
+@@ -1278,6 +1301,9 @@ static int bus_manager_do_shutdown_or_sleep(
+ assert(error);
+ assert(_reply);
+
++ if (m->action_job || m->delayed_unit)
++ return -EALREADY;
++
+ if (!dbus_message_get_args(
+ message,
+ error,
+@@ -2327,6 +2353,23 @@ DBusHandlerResult bus_message_filter(
+ log_error("Failed to parse Released message: %s", bus_error_message(&error));
+ else
+ manager_cgroup_notify_empty(m, cgroup);
++
++ } else if (dbus_message_is_signal(message, "org.freedesktop.systemd1.Manager", "JobRemoved")) {
++ uint32_t id;
++ const char *path, *result, *unit;
++
++ if (!dbus_message_get_args(message, &error,
++ DBUS_TYPE_UINT32, &id,
++ DBUS_TYPE_OBJECT_PATH, &path,
++ DBUS_TYPE_STRING, &unit,
++ DBUS_TYPE_STRING, &result,
++ DBUS_TYPE_INVALID))
++ log_error("Failed to parse JobRemoved message: %s", bus_error_message(&error));
++ else if (m->action_job && streq(m->action_job, path)) {
++ log_info("Action is complete, result is '%s'.", result);
++ free(m->action_job);
++ m->action_job = NULL;
++ }
+ }
+
+ dbus_error_free(&error);
+@@ -2376,21 +2419,21 @@ int manager_dispatch_delayed(Manager *manager) {
+
+ bus_manager_log_shutdown(manager, manager->delayed_what, manager->delayed_unit);
+
++ /* Tell people about it */
++ send_prepare_for(manager, manager->delayed_what, false);
++
+ /* Reset delay data */
+ unit_name = manager->delayed_unit;
+ manager->delayed_unit = NULL;
+
+ /* Actually do the shutdown */
+ dbus_error_init(&error);
+- r = send_start_unit(manager->bus, unit_name, &error);
++ r = send_start_unit(manager, unit_name, &error);
+ if (r < 0) {
+ log_warning("Failed to send delayed message: %s", bus_error_message_or_strerror(&error, -r));
+ dbus_error_free(&error);
+ return r;
+ }
+
+- /* Tell people about it */
+- send_prepare_for(manager, manager->delayed_what, false);
+-
+ return 1;
+ }
+diff --git a/src/login/logind.c b/src/login/logind.c
+index 6776229..ed0b748 100644
+--- a/src/login/logind.c
++++ b/src/login/logind.c
+@@ -187,6 +187,8 @@ void manager_free(Manager *m) {
+ strv_free(m->kill_only_users);
+ strv_free(m->kill_exclude_users);
+
++ free(m->action_job);
++
+ free(m->cgroup_path);
+ free(m);
+ }
+diff --git a/src/login/logind.h b/src/login/logind.h
+index 816635d..fe6ea0f 100644
+--- a/src/login/logind.h
++++ b/src/login/logind.h
+@@ -100,7 +100,9 @@ struct Manager {
+
+ usec_t inhibit_delay_max;
+
+- int idle_action_fd;
++ char* action_job;
++
++ int idle_action_fd; /* the timer_fd */
+ usec_t idle_action_usec;
+ usec_t idle_action_not_before_usec;
+ HandleAction idle_action;
diff --git a/0054-hwdb-update.patch b/0054-hwdb-update.patch
new file mode 100644
index 0000000..8f9ba87
--- /dev/null
+++ b/0054-hwdb-update.patch
@@ -0,0 +1,720 @@
+From 4deebadc410f1eaad0140a715833bc6c04df3c19 Mon Sep 17 00:00:00 2001
+From: Kay Sievers <kay at vrfy.org>
+Date: Thu, 24 Jan 2013 12:42:57 +0100
+Subject: [PATCH] hwdb: update (cherry picked from commit
+ 3939e155d57e0a7319ed3af8bff48e68aea76543)
+
+---
+ hwdb/20-OUI.hwdb | 117 ++++++++++++++++++++++++++++++++++
+ hwdb/20-pci-vendor-product.hwdb | 136 ++++++++++++++++++++++++++++++++++++++--
+ 2 files changed, 248 insertions(+), 5 deletions(-)
+
+diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb
+index ac07a5d..736299b 100644
+--- a/hwdb/20-OUI.hwdb
++++ b/hwdb/20-OUI.hwdb
+@@ -12592,6 +12592,36 @@ OUI:40D855083*
+ OUI:40D855084*
+ ID_OUI_FROM_DATABASE=Papendorf Software Engineering GmbH
+
++OUI:40D855085*
++ ID_OUI_FROM_DATABASE=Peek Traffic Corporation
++
++OUI:40D855086*
++ ID_OUI_FROM_DATABASE=DSP DESIGN
++
++OUI:40D855087*
++ ID_OUI_FROM_DATABASE=Bestel China
++
++OUI:40D855088*
++ ID_OUI_FROM_DATABASE=JEL SYSTEM CO., LTD.
++
++OUI:40D855089*
++ ID_OUI_FROM_DATABASE=WUHAN XINGTUXINKE ELECTRONIC CO.,LTD
++
++OUI:40D85508A*
++ ID_OUI_FROM_DATABASE=Leder Elektronik Design
++
++OUI:40D85508B*
++ ID_OUI_FROM_DATABASE=MeshWorks Wireless Oy
++
++OUI:40D85508C*
++ ID_OUI_FROM_DATABASE=Magnescale Co.,Ltd
++
++OUI:40D85508D*
++ ID_OUI_FROM_DATABASE=Boehme Nachrichtentechnik
++
++OUI:40D85508E*
++ ID_OUI_FROM_DATABASE=Lyngsoe Systems
++
+ OUI:000000*
+ ID_OUI_FROM_DATABASE=XEROX CORPORATION
+
+@@ -51292,6 +51322,9 @@ OUI:083AB8*
+ OUI:083E8E*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind.Co.Ltd
+
++OUI:08482C*
++ ID_OUI_FROM_DATABASE=Raycore Taiwan Co., LTD.
++
+ OUI:084E1C*
+ ID_OUI_FROM_DATABASE=H2A Systems, LLC
+
+@@ -51718,6 +51751,9 @@ OUI:10189E*
+ OUI:101B54*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
++OUI:101C0C*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:101D51*
+ ID_OUI_FROM_DATABASE=ON-Q LLC dba ON-Q Mesh Networks
+
+@@ -51727,6 +51763,9 @@ OUI:101DC0*
+ OUI:101F74*
+ ID_OUI_FROM_DATABASE=Hewlett-Packard Company
+
++OUI:102831*
++ ID_OUI_FROM_DATABASE=Morion Inc.
++
+ OUI:102D96*
+ ID_OUI_FROM_DATABASE=Looxcie Inc.
+
+@@ -51790,6 +51829,9 @@ OUI:1065A3*
+ OUI:1065CF*
+ ID_OUI_FROM_DATABASE=IQSIM
+
++OUI:106682*
++ ID_OUI_FROM_DATABASE=NEC AccessTechnica, Ltd.
++
+ OUI:10683F*
+ ID_OUI_FROM_DATABASE=LG Electronics
+
+@@ -51898,6 +51940,9 @@ OUI:10EA59*
+ OUI:10EED9*
+ ID_OUI_FROM_DATABASE=Canoga Perkins Corporation
+
++OUI:10F311*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:10F3DB*
+ ID_OUI_FROM_DATABASE=Gridco Systems, Inc.
+
+@@ -52807,6 +52852,9 @@ OUI:24497B*
+ OUI:245FDF*
+ ID_OUI_FROM_DATABASE=KYOCERA Corporation
+
++OUI:246278*
++ ID_OUI_FROM_DATABASE=sysmocom - systems for mobile communications GmbH
++
+ OUI:246511*
+ ID_OUI_FROM_DATABASE=AVM GmbH
+
+@@ -52837,6 +52885,9 @@ OUI:248707*
+ OUI:249442*
+ ID_OUI_FROM_DATABASE=OPEN ROAD SOLUTIONS , INC.
+
++OUI:249504*
++ ID_OUI_FROM_DATABASE=SFR
++
+ OUI:24A42C*
+ ID_OUI_FROM_DATABASE=KOUKAAM a.s.
+
+@@ -52918,6 +52969,9 @@ OUI:24DEC6*
+ OUI:24E6BA*
+ ID_OUI_FROM_DATABASE=JSC Zavod im. Kozitsky
+
++OUI:24EA40*
++ ID_OUI_FROM_DATABASE=Systeme Helmholz GmbH
++
+ OUI:24EC99*
+ ID_OUI_FROM_DATABASE=Askey Computer Corp
+
+@@ -53347,6 +53401,9 @@ OUI:2CEDEB*
+ OUI:2CEE26*
+ ID_OUI_FROM_DATABASE=Petroleum Geo-Services
+
++OUI:2CF203*
++ ID_OUI_FROM_DATABASE=EMKO ELEKTRONIK SAN VE TIC AS
++
+ OUI:2CF4C5*
+ ID_OUI_FROM_DATABASE=Avaya, Inc
+
+@@ -53473,6 +53530,9 @@ OUI:3085A9*
+ OUI:308730*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd
+
++OUI:308999*
++ ID_OUI_FROM_DATABASE=Guangdong East Power Co.,
++
+ OUI:308CFB*
+ ID_OUI_FROM_DATABASE=Dropcam
+
+@@ -53932,6 +53992,9 @@ OUI:3C0754*
+ OUI:3C0771*
+ ID_OUI_FROM_DATABASE=Sony Corporation
+
++OUI:3C081E*
++ ID_OUI_FROM_DATABASE=Beijing Yupont Electric Power Technology Co.,Ltd
++
+ OUI:3C096D*
+ ID_OUI_FROM_DATABASE=Powerhouse Dynamics
+
+@@ -56104,6 +56167,9 @@ OUI:646E6C*
+ OUI:647002*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO., LTD.
+
++OUI:6472D8*
++ ID_OUI_FROM_DATABASE=GooWi Technology Co.,Limited
++
+ OUI:6473E2*
+ ID_OUI_FROM_DATABASE=Arbiter Systems, Inc.
+
+@@ -56389,6 +56455,9 @@ OUI:68967B*
+ OUI:68974B*
+ ID_OUI_FROM_DATABASE=Shenzhen Costar Electronics Co. Ltd.
+
++OUI:6897E8*
++ ID_OUI_FROM_DATABASE=Society of Motion Picture & Television Engineers
++
+ OUI:689C5E*
+ ID_OUI_FROM_DATABASE=AcSiP Technology Corp.
+
+@@ -56752,6 +56821,9 @@ OUI:704AAE*
+ OUI:704AE4*
+ ID_OUI_FROM_DATABASE=Rinstrum Pty Ltd
+
++OUI:7052C5*
++ ID_OUI_FROM_DATABASE=Avaya, Inc.
++
+ OUI:7054D2*
+ ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
+
+@@ -57541,6 +57613,9 @@ OUI:7CA61D*
+ OUI:7CACB2*
+ ID_OUI_FROM_DATABASE=Bosch Software Innovations GmbH
+
++OUI:7CAD74*
++ ID_OUI_FROM_DATABASE=Cisco
++
+ OUI:7CB03E*
+ ID_OUI_FROM_DATABASE=OSRAM AG
+
+@@ -58111,6 +58186,9 @@ OUI:885C4F*
+ OUI:88615A*
+ ID_OUI_FROM_DATABASE=Siano Mobile Silicon Ltd.
+
++OUI:88685C*
++ ID_OUI_FROM_DATABASE=Shenzhen ChuangDao & Perpetual Eternal Technology Co.,Ltd
++
+ OUI:886B76*
+ ID_OUI_FROM_DATABASE=CHINA HOPEFUL GROUP HOPEFUL ELECTRIC CO.,LTD
+
+@@ -58567,6 +58645,9 @@ OUI:906EBB*
+ OUI:907025*
+ ID_OUI_FROM_DATABASE=Garea Microsys Co.,Ltd.
+
++OUI:907AF1*
++ ID_OUI_FROM_DATABASE=SNUPI Technologies
++
+ OUI:907F61*
+ ID_OUI_FROM_DATABASE=Chicony Electronics Co., Ltd.
+
+@@ -59803,6 +59884,9 @@ OUI:A85BB0*
+ OUI:A85BF3*
+ ID_OUI_FROM_DATABASE=Audivo GmbH
+
++OUI:A861AA*
++ ID_OUI_FROM_DATABASE=Cloudview Limited
++
+ OUI:A862A2*
+ ID_OUI_FROM_DATABASE=JIWUMEDIA CO., LTD.
+
+@@ -59995,6 +60079,9 @@ OUI:AC3FA4*
+ OUI:AC40EA*
+ ID_OUI_FROM_DATABASE=C&T Solution Inc.
+
++OUI:AC4122*
++ ID_OUI_FROM_DATABASE=Eclipse Electronic Systems Inc.
++
+ OUI:AC44F2*
+ ID_OUI_FROM_DATABASE=Revolabs Inc
+
+@@ -60607,6 +60694,9 @@ OUI:B4F323*
+ OUI:B4FC75*
+ ID_OUI_FROM_DATABASE=SEMA Electronics(HK) CO.,LTD
+
++OUI:B4FE8C*
++ ID_OUI_FROM_DATABASE=Centro Sicurezza Italia SpA
++
+ OUI:B80305*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
+@@ -60712,6 +60802,9 @@ OUI:B8763F*
+ OUI:B877C3*
+ ID_OUI_FROM_DATABASE=Decagon Devices, Inc.
+
++OUI:B8782E*
++ ID_OUI_FROM_DATABASE=Apple
++
+ OUI:B8797E*
+ ID_OUI_FROM_DATABASE=Secure Meters (UK) Limited
+
+@@ -61594,6 +61687,9 @@ OUI:C88B47*
+ OUI:C8903E*
+ ID_OUI_FROM_DATABASE=Pakton Technologies
+
++OUI:C89346*
++ ID_OUI_FROM_DATABASE=MXCHIP Company Limited
++
+ OUI:C89383*
+ ID_OUI_FROM_DATABASE=Embedded Automation, Inc.
+
+@@ -62332,6 +62428,9 @@ OUI:D4A02A*
+ OUI:D4A425*
+ ID_OUI_FROM_DATABASE=SMAX Technology Co., Ltd.
+
++OUI:D4A499*
++ ID_OUI_FROM_DATABASE=InView Technology Corporation
++
+ OUI:D4A928*
+ ID_OUI_FROM_DATABASE=GreenWave Reality Inc
+
+@@ -62443,6 +62542,9 @@ OUI:D81BFE*
+ OUI:D81C14*
+ ID_OUI_FROM_DATABASE=Compacta International, Ltd.
+
++OUI:D81EDE*
++ ID_OUI_FROM_DATABASE=B&W Group Ltd
++
+ OUI:D824BD*
+ ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+
+@@ -62452,6 +62554,9 @@ OUI:D826B9*
+ OUI:D828C9*
+ ID_OUI_FROM_DATABASE=General Electric Consumer and Industrial
+
++OUI:D82916*
++ ID_OUI_FROM_DATABASE=Ascent Communication Technology
++
+ OUI:D82986*
+ ID_OUI_FROM_DATABASE=Best Wish Technology LTD
+
+@@ -63022,6 +63127,9 @@ OUI:E0E8E8*
+ OUI:E0ED1A*
+ ID_OUI_FROM_DATABASE=vastriver Technology Co., Ltd
+
++OUI:E0EDC7*
++ ID_OUI_FROM_DATABASE=Shenzhen Friendcom Technology Development Co., Ltd
++
+ OUI:E0EE1B*
+ ID_OUI_FROM_DATABASE=Panasonic Automotive Systems Company of America
+
+@@ -63868,6 +63976,9 @@ OUI:F0EEBB*
+ OUI:F0F002*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
++OUI:F0F260*
++ ID_OUI_FROM_DATABASE=Mobitec AB
++
+ OUI:F0F644*
+ ID_OUI_FROM_DATABASE=Whitesky Science & Technology Co.,Ltd.
+
+@@ -63961,6 +64072,9 @@ OUI:F4559C*
+ OUI:F455E0*
+ ID_OUI_FROM_DATABASE=Niceway CNC Technology Co.,Ltd.Hunan Province
+
++OUI:F45842*
++ ID_OUI_FROM_DATABASE=Boxx TV Ltd
++
+ OUI:F45FD4*
+ ID_OUI_FROM_DATABASE=Cisco SPVTG
+
+@@ -64021,6 +64135,9 @@ OUI:F4ACC1*
+ OUI:F4B164*
+ ID_OUI_FROM_DATABASE=Lightning Telecommunications Technology Co. Ltd
+
++OUI:F4B381*
++ ID_OUI_FROM_DATABASE=WindowMaster A/S
++
+ OUI:F4B549*
+ ID_OUI_FROM_DATABASE=Yeastar Technology Co., Ltd.
+
+diff --git a/hwdb/20-pci-vendor-product.hwdb b/hwdb/20-pci-vendor-product.hwdb
+index f3fbbb7..7049d3a 100644
+--- a/hwdb/20-pci-vendor-product.hwdb
++++ b/hwdb/20-pci-vendor-product.hwdb
+@@ -1688,6 +1688,9 @@ pci:v00001002d00003152*
+ pci:v00001002d00003154*
+ ID_PRODUCT_FROM_DATABASE=M24GL [Mobility FireGL V3200]
+
++pci:v00001002d00003155*
++ ID_PRODUCT_FROM_DATABASE=RV380 [FireMV 2400]
++
+ pci:v00001002d00003171*
+ ID_PRODUCT_FROM_DATABASE=M24 [FireMV 2400] (Secondary)
+
+@@ -4400,6 +4403,9 @@ pci:v00001002d00006718*
+ pci:v00001002d00006719*
+ ID_PRODUCT_FROM_DATABASE=Cayman PRO [Radeon HD 6950]
+
++pci:v00001002d0000671C*
++ ID_PRODUCT_FROM_DATABASE=Antilles [Radeon HD 6990]
++
+ pci:v00001002d0000671D*
+ ID_PRODUCT_FROM_DATABASE=Antilles [AMD Radeon HD 6990]
+
+@@ -4409,6 +4415,15 @@ pci:v00001002d0000671F*
+ pci:v00001002d00006720*
+ ID_PRODUCT_FROM_DATABASE=Blackcomb [Radeon HD 6900M series]
+
++pci:v00001002d00006721*
++ ID_PRODUCT_FROM_DATABASE=Blackcomb [Mobility Radeon HD 6000 series]
++
++pci:v00001002d00006724*
++ ID_PRODUCT_FROM_DATABASE=Blackcomb [Mobility Radeon HD 6000 series]
++
++pci:v00001002d00006725*
++ ID_PRODUCT_FROM_DATABASE=Blackcomb [Mobility Radeon HD 6000 series]
++
+ pci:v00001002d00006738*
+ ID_PRODUCT_FROM_DATABASE=Barts XT [Radeon HD 6800 Series]
+
+@@ -4439,6 +4454,9 @@ pci:v00001002d00006742*
+ pci:v00001002d00006743*
+ ID_PRODUCT_FROM_DATABASE=Whistler [Radeon E6760]
+
++pci:v00001002d00006744*
++ ID_PRODUCT_FROM_DATABASE=Whistler [ATI Mobility Radeon HD 6000 series]
++
+ pci:v00001002d00006749*
+ ID_PRODUCT_FROM_DATABASE=Turks [FirePro V4900]
+
+@@ -4472,6 +4490,12 @@ pci:v00001002d00006761*
+ pci:v00001002d00006763*
+ ID_PRODUCT_FROM_DATABASE=Seymour [Radeon E6460]
+
++pci:v00001002d00006764*
++ ID_PRODUCT_FROM_DATABASE=Seymour [Mobility Radeon HD 6000 series]
++
++pci:v00001002d00006765*
++ ID_PRODUCT_FROM_DATABASE=Seymour [Mobility Radeon HD 6000 series]
++
+ pci:v00001002d00006770*
+ ID_PRODUCT_FROM_DATABASE=Caicos [Radeon HD 6400 Series]
+
+@@ -4499,6 +4523,9 @@ pci:v00001002d00006799*
+ pci:v00001002d0000679A*
+ ID_PRODUCT_FROM_DATABASE=Tahiti PRO [Radeon HD 7950]
+
++pci:v00001002d0000679B*
++ ID_PRODUCT_FROM_DATABASE=Tahiti [Radeon HD 7900 Series]
++
+ pci:v00001002d0000679E*
+ ID_PRODUCT_FROM_DATABASE=Tahiti LE [Radeon HD 7800 Series]
+
+@@ -4523,15 +4550,33 @@ pci:v00001002d00006821*
+ pci:v00001002d00006823*
+ ID_PRODUCT_FROM_DATABASE=Radeon HD 8800M Series
+
++pci:v00001002d00006824*
++ ID_PRODUCT_FROM_DATABASE=Chelsea [Radeon HD 7700M Series]
++
+ pci:v00001002d00006825*
+ ID_PRODUCT_FROM_DATABASE=Cape Verde [Radeon HD 7800M Series]
+
++pci:v00001002d00006826*
++ ID_PRODUCT_FROM_DATABASE=Chelsea [Radeon HD 7700M Series]
++
++pci:v00001002d00006827*
++ ID_PRODUCT_FROM_DATABASE=Cape Verde [Radeon HD 7800M Series]
++
+ pci:v00001002d0000682B*
+ ID_PRODUCT_FROM_DATABASE=Radeon HD 8800M Series
+
+ pci:v00001002d0000682F*
+ ID_PRODUCT_FROM_DATABASE=Cape Verde [Radeon HD 7700M Series]
+
++pci:v00001002d00006830*
++ ID_PRODUCT_FROM_DATABASE=Cape Verde [Radeon HD 7800M Series]
++
++pci:v00001002d00006831*
++ ID_PRODUCT_FROM_DATABASE=Cape Verde [AMD Radeon HD 7700M Series]
++
++pci:v00001002d00006837*
++ ID_PRODUCT_FROM_DATABASE=Cape Verde LE [Radeon HD 7700 Series]
++
+ pci:v00001002d0000683B*
+ ID_PRODUCT_FROM_DATABASE=Cape Verde [Radeon HD 7700 Series]
+
+@@ -4553,6 +4598,9 @@ pci:v00001002d00006842*
+ pci:v00001002d00006843*
+ ID_PRODUCT_FROM_DATABASE=Thames [Radeon HD 7670M]
+
++pci:v00001002d00006849*
++ ID_PRODUCT_FROM_DATABASE=Lombok [AMD Radeon HD 7400 Series]
++
+ pci:v00001002d00006850*
+ ID_PRODUCT_FROM_DATABASE=Lombok GL AIO [Radeon HD 7570]
+
+@@ -4592,6 +4640,9 @@ pci:v00001002d0000689B*
+ pci:v00001002d0000689C*
+ ID_PRODUCT_FROM_DATABASE=Hemlock [Radeon HD 5900 Series]
+
++pci:v00001002d0000689D*
++ ID_PRODUCT_FROM_DATABASE=Hemlock [ATI Radeon HD 5900 Series]
++
+ pci:v00001002d0000689E*
+ ID_PRODUCT_FROM_DATABASE=Cypress LE [Radeon HD 5800 Series]
+
+@@ -4652,6 +4703,9 @@ pci:v00001002d000068C7*
+ pci:v00001002d000068C8*
+ ID_PRODUCT_FROM_DATABASE=FirePro V4800
+
++pci:v00001002d000068C9*
++ ID_PRODUCT_FROM_DATABASE=Redwood [FirePro 3800 (FireGL)]
++
+ pci:v00001002d000068D8*
+ ID_PRODUCT_FROM_DATABASE=Redwood [Radeon HD 5670]
+
+@@ -4682,6 +4736,9 @@ pci:v00001002d000068F1*
+ pci:v00001002d000068F2*
+ ID_PRODUCT_FROM_DATABASE=Cedar [FirePro 2270]
+
++pci:v00001002d000068F8*
++ ID_PRODUCT_FROM_DATABASE=Cedar [Radeon HD 7300 Series]
++
+ pci:v00001002d000068F9*
+ ID_PRODUCT_FROM_DATABASE=Cedar PRO [Radeon HD 5450/6350]
+
+@@ -4940,6 +4997,9 @@ pci:v00001002d000071C6*
+ pci:v00001002d000071C7*
+ ID_PRODUCT_FROM_DATABASE=RV535 [Radeon X1650 Series]
+
++pci:v00001002d000071C7sv00001787sd00003000*
++ ID_PRODUCT_FROM_DATABASE=PowerColor X1650 PRO AGP
++
+ pci:v00001002d000071CE*
+ ID_PRODUCT_FROM_DATABASE=RV530LE [Radeon X1600]
+
+@@ -4973,6 +5033,9 @@ pci:v00001002d000071E6*
+ pci:v00001002d000071E7*
+ ID_PRODUCT_FROM_DATABASE=RV535 [Radeon X1650 Series]
+
++pci:v00001002d000071E7sv00001787sd00003001*
++ ID_PRODUCT_FROM_DATABASE=PowerColor X1650 PRO AGP
++
+ pci:v00001002d000071F2*
+ ID_PRODUCT_FROM_DATABASE=RV530GL [FireGL V3400 (Secondary)]
+
+@@ -5163,7 +5226,7 @@ pci:v00001002d00007942*
+ ID_PRODUCT_FROM_DATABASE=RS600 [Radeon Xpress 1250]
+
+ pci:v00001002d0000796E*
+- ID_PRODUCT_FROM_DATABASE=Radeon 2100
++ ID_PRODUCT_FROM_DATABASE=RS740 [Radeon 2100]
+
+ pci:v00001002d00007C37*
+ ID_PRODUCT_FROM_DATABASE=RV350 AQ [Radeon 9600 SE]
+@@ -5177,9 +5240,18 @@ pci:v00001002d00009400sv00001002sd00003000*
+ pci:v00001002d00009400sv00001002sd00003142*
+ ID_PRODUCT_FROM_DATABASE=HIS Radeon HD 2900XT 512MB GDDR3 VIVO PCIe
+
++pci:v00001002d00009401*
++ ID_PRODUCT_FROM_DATABASE=R600 [Radeon HD 2900 XT]
++
++pci:v00001002d00009402*
++ ID_PRODUCT_FROM_DATABASE=R600 [Radeon HD 2900 XT]
++
+ pci:v00001002d00009403*
+ ID_PRODUCT_FROM_DATABASE=R600 [Radeon HD 2900 PRO]
+
++pci:v00001002d00009405*
++ ID_PRODUCT_FROM_DATABASE=R600 [Radeon HD 2900 GT]
++
+ pci:v00001002d0000940A*
+ ID_PRODUCT_FROM_DATABASE=R600GL [Fire GL V8650]
+
+@@ -5207,9 +5279,18 @@ pci:v00001002d00009442sv0000174Bsd0000E810*
+ pci:v00001002d00009443*
+ ID_PRODUCT_FROM_DATABASE=R700 [Radeon HD 4850]
+
++pci:v00001002d00009444*
++ ID_PRODUCT_FROM_DATABASE=RV770 [FirePro V8750 (FireGL)]
++
++pci:v00001002d00009446*
++ ID_PRODUCT_FROM_DATABASE=RV770 [FirePro V7760 (FireGL)]
++
+ pci:v00001002d0000944A*
+ ID_PRODUCT_FROM_DATABASE=M98L [Mobility Radeon HD 4850]
+
++pci:v00001002d0000944B*
++ ID_PRODUCT_FROM_DATABASE=RV770 [Mobility Radeon HD 4850 X2]
++
+ pci:v00001002d0000944C*
+ ID_PRODUCT_FROM_DATABASE=RV770 LE [Radeon HD 4800 Series]
+
+@@ -5222,6 +5303,9 @@ pci:v00001002d00009450*
+ pci:v00001002d00009452*
+ ID_PRODUCT_FROM_DATABASE=RV770 [FireStream 9250]
+
++pci:v00001002d00009456*
++ ID_PRODUCT_FROM_DATABASE=RV770 [FirePro 3D V8700]
++
+ pci:v00001002d0000945A*
+ ID_PRODUCT_FROM_DATABASE=M98 XT [Mobility Radeon HD 4870]
+
+@@ -5231,6 +5315,9 @@ pci:v00001002d00009460*
+ pci:v00001002d00009462*
+ ID_PRODUCT_FROM_DATABASE=RV790LE [Radeon HD 4800 Series]
+
++pci:v00001002d0000946A*
++ ID_PRODUCT_FROM_DATABASE=RV770 [FirePro M7750]
++
+ pci:v00001002d00009480*
+ ID_PRODUCT_FROM_DATABASE=M96 [Mobility Radeon HD 4650]
+
+@@ -5288,6 +5375,9 @@ pci:v00001002d000094B3*
+ pci:v00001002d000094B4*
+ ID_PRODUCT_FROM_DATABASE=RV740 LE [ATI Radeon HD 4700 Series]
+
++pci:v00001002d000094B5*
++ ID_PRODUCT_FROM_DATABASE=RV740 [Radeon HD 4770]
++
+ pci:v00001002d000094C1*
+ ID_PRODUCT_FROM_DATABASE=RV610 [Radeon HD 2400 XT]
+
+@@ -5315,6 +5405,12 @@ pci:v00001002d000094C3sv000018BCsd00003550*
+ pci:v00001002d000094C4*
+ ID_PRODUCT_FROM_DATABASE=RV610 LE AGP [Radeon HD 2400 PRO AGP]
+
++pci:v00001002d000094C5*
++ ID_PRODUCT_FROM_DATABASE=RV610 [Radeon HD 2400 LE]
++
++pci:v00001002d000094C7*
++ ID_PRODUCT_FROM_DATABASE=RV610 [Radeon HD 2350]
++
+ pci:v00001002d000094C8*
+ ID_PRODUCT_FROM_DATABASE=Radeon HD 2400 XT
+
+@@ -5342,12 +5438,18 @@ pci:v00001002d00009504*
+ pci:v00001002d00009505*
+ ID_PRODUCT_FROM_DATABASE=RV670PRO [Radeon HD 3850]
+
++pci:v00001002d00009506*
++ ID_PRODUCT_FROM_DATABASE=RV670 [Mobility Radeon HD 3850 X2]
++
+ pci:v00001002d00009507*
+ ID_PRODUCT_FROM_DATABASE=RV670 [Radeon HD 3850]
+
+ pci:v00001002d00009508*
+ ID_PRODUCT_FROM_DATABASE=M88 XT Mobility Radeon HD 3870]
+
++pci:v00001002d00009509*
++ ID_PRODUCT_FROM_DATABASE=RV670 [Mobility Radeon HD 3870]
++
+ pci:v00001002d0000950F*
+ ID_PRODUCT_FROM_DATABASE=R680 [Radeon HD 3870 x2]
+
+@@ -5411,6 +5513,9 @@ pci:v00001002d00009588sv00001458sd0000216C*
+ pci:v00001002d00009589*
+ ID_PRODUCT_FROM_DATABASE=RV630 [Radeon HD 2600 Series]
+
++pci:v00001002d0000958B*
++ ID_PRODUCT_FROM_DATABASE=RV630 [Mobility Radeon HD 2600 XT]
++
+ pci:v00001002d0000958C*
+ ID_PRODUCT_FROM_DATABASE=RV630GL [FireGL v5600]
+
+@@ -5435,6 +5540,9 @@ pci:v00001002d00009596*
+ pci:v00001002d00009596sv00001043sd00000028*
+ ID_PRODUCT_FROM_DATABASE=EAH3650 SILENT/HTDI/512M/A
+
++pci:v00001002d00009597*
++ ID_PRODUCT_FROM_DATABASE=RV635 [Radeon HD 2600 Series]
++
+ pci:v00001002d00009598*
+ ID_PRODUCT_FROM_DATABASE=RV630 [Radeon HD 3600 Series]
+
+@@ -5579,6 +5687,9 @@ pci:v00001002d00009901*
+ pci:v00001002d00009902*
+ ID_PRODUCT_FROM_DATABASE=Trinity HDMI Audio Controller
+
++pci:v00001002d00009903*
++ ID_PRODUCT_FROM_DATABASE=Trinity [Radeon HD 7640G]
++
+ pci:v00001002d00009904*
+ ID_PRODUCT_FROM_DATABASE=Trinity [Radeon HD 7560D]
+
+@@ -15642,7 +15753,7 @@ pci:v000010B7d00007646*
+ ID_PRODUCT_FROM_DATABASE=3cSOHO100-TX Hurricane
+
+ pci:v000010B7d00007770*
+- ID_PRODUCT_FROM_DATABASE=3CRWE777 PCI(PLX) Wireless Adaptor [Airconnect]
++ ID_PRODUCT_FROM_DATABASE=3CRWE777 PCI Wireless Adapter [Airconnect]
+
+ pci:v000010B7d00007940*
+ ID_PRODUCT_FROM_DATABASE=3c803 FDDILink UTP Controller
+@@ -16889,6 +17000,9 @@ pci:v000010DEd00000029sv00001102sd0000102F*
+ pci:v000010DEd00000029sv000014AFsd00005820*
+ ID_PRODUCT_FROM_DATABASE=Maxi Gamer Xentor 32
+
++pci:v000010DEd00000029sv00004843sd00004F34*
++ ID_PRODUCT_FROM_DATABASE=Dynamite
++
+ pci:v000010DEd0000002A*
+ ID_PRODUCT_FROM_DATABASE=NV5 [Riva TNT2]
+
+@@ -17853,7 +17967,7 @@ pci:v000010DEd00000101sv0000107Dsd00002822*
+ ID_PRODUCT_FROM_DATABASE=WinFast GeForce 256
+
+ pci:v000010DEd00000101sv00001102sd0000102E*
+- ID_PRODUCT_FROM_DATABASE=CT6971 GeForce 256 DDR
++ ID_PRODUCT_FROM_DATABASE=CT6970/CT6971
+
+ pci:v000010DEd00000101sv000014AFsd00005021*
+ ID_PRODUCT_FROM_DATABASE=3D Prophet DDR-DVI
+@@ -18263,6 +18377,12 @@ pci:v000010DEd000001D0*
+ pci:v000010DEd000001D1*
+ ID_PRODUCT_FROM_DATABASE=G72 [GeForce 7300 LE]
+
++pci:v000010DEd000001D1sv0000107Dsd00005EFA*
++ ID_PRODUCT_FROM_DATABASE=WinFast PX7300LE-TD128
++
++pci:v000010DEd000001D1sv0000107Dsd00005EFB*
++ ID_PRODUCT_FROM_DATABASE=WinFast PX7300LE-TD256
++
+ pci:v000010DEd000001D1sv00001462sd00000345*
+ ID_PRODUCT_FROM_DATABASE=7300LE PCI Express Graphics Adapter
+
+@@ -21741,7 +21861,7 @@ pci:v000010DEd00000FD2*
+ ID_PRODUCT_FROM_DATABASE=GK107 [GeForce GT 640M]
+
+ pci:v000010DEd00000FF2*
+- ID_PRODUCT_FROM_DATABASE=GK107 [VGX K1]
++ ID_PRODUCT_FROM_DATABASE=GK107 [GRID K1]
+
+ pci:v000010DEd00000FFA*
+ ID_PRODUCT_FROM_DATABASE=GK107 [Quadro K600]
+@@ -21873,7 +21993,7 @@ pci:v000010DEd000011BE*
+ ID_PRODUCT_FROM_DATABASE=GK104 [Quadro K3000M]
+
+ pci:v000010DEd000011BF*
+- ID_PRODUCT_FROM_DATABASE=GK104GL [VGX K2]
++ ID_PRODUCT_FROM_DATABASE=GK104GL [GRID K2]
+
+ pci:v000010DEd000011FA*
+ ID_PRODUCT_FROM_DATABASE=GK104 [Quadro K4000]
+@@ -45938,6 +46058,12 @@ pci:v0000270F*
+ pci:v00002711*
+ ID_VENDOR_FROM_DATABASE=AVID Technology Inc.
+
++pci:v00002955*
++ ID_VENDOR_FROM_DATABASE=Connectix Virtual PC
++
++pci:v00002955d00006E61*
++ ID_PRODUCT_FROM_DATABASE=OHCI USB 1.1 controller
++
+ pci:v000029B4*
+ ID_VENDOR_FROM_DATABASE=82q35 Express MEI Controller
+
diff --git a/0055-service-really-stop-watchdog-timer-when-stopping.patch b/0055-service-really-stop-watchdog-timer-when-stopping.patch
new file mode 100644
index 0000000..1f55fee
--- /dev/null
+++ b/0055-service-really-stop-watchdog-timer-when-stopping.patch
@@ -0,0 +1,27 @@
+From d774e05381334b64bf2d95f8cdf4f3d9cd7b7949 Mon Sep 17 00:00:00 2001
+From: Michael Olbrich <m.olbrich at pengutronix.de>
+Date: Wed, 23 Jan 2013 14:12:15 +0100
+Subject: [PATCH] service: really stop watchdog timer when stopping
+
+For services without ExecStop= the state SERVICE_STOP is never entered. as
+a result the watchdog timer is not stopped and the service is restarted (if
+it is configuered to restart).
+Stopping the watchdog timer for SERVICE_STOP_SIGTERM as well fixes this.
+(cherry picked from commit 6d594baa3fa3a361efc2a4c1da3557fc4eba960d)
+---
+ src/core/service.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index d6a0ffe..8eefd2d 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -1565,7 +1565,7 @@ static void service_set_state(Service *s, ServiceState state) {
+ service_connection_unref(s);
+ }
+
+- if (state == SERVICE_STOP)
++ if (state == SERVICE_STOP || state == SERVICE_STOP_SIGTERM)
+ service_stop_watchdog(s);
+
+ /* For the inactive states unit_notify() will trim the cgroup,
diff --git a/0056-service-make-sure-the-watchdog-timer-is-not-restarte.patch b/0056-service-make-sure-the-watchdog-timer-is-not-restarte.patch
new file mode 100644
index 0000000..ad67f38
--- /dev/null
+++ b/0056-service-make-sure-the-watchdog-timer-is-not-restarte.patch
@@ -0,0 +1,31 @@
+From 5b2e87901b0220f8c32f3eb0de16a61de5be889f Mon Sep 17 00:00:00 2001
+From: Michael Olbrich <m.olbrich at pengutronix.de>
+Date: Wed, 23 Jan 2013 14:12:16 +0100
+Subject: [PATCH] service: make sure the watchdog timer is not restarted while
+ stopping
+
+A watchdog notification may be handled after the watchdog timer was stopped
+while stopping the service. As a result the timer is restarted and the
+service may be restarted as well.
+The watchdog timestamp is initially set during startup in
+service_enter_start_post() and cleared when the timer is stopped. Therefore
+it can be used as an indication if the timer should be reset.
+(cherry picked from commit 90527fbb2c48ffda5c6d8f232f8993a90b2632a4)
+---
+ src/core/service.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/service.c b/src/core/service.c
+index 8eefd2d..0218e76 100644
+--- a/src/core/service.c
++++ b/src/core/service.c
+@@ -3415,7 +3415,8 @@ static void service_notify_message(Unit *u, pid_t pid, char **tags) {
+ if (strv_find(tags, "WATCHDOG=1")) {
+ log_debug_unit(u->id,
+ "%s: got WATCHDOG=1", u->id);
+- service_reset_watchdog(s);
++ if (dual_timestamp_is_set(&s->watchdog_timestamp))
++ service_reset_watchdog(s);
+ }
+
+ /* Notify clients about changed status or main pid */
diff --git a/0057-core-Set-source-for-mountinfo-.mount-units.patch b/0057-core-Set-source-for-mountinfo-.mount-units.patch
new file mode 100644
index 0000000..217eff2
--- /dev/null
+++ b/0057-core-Set-source-for-mountinfo-.mount-units.patch
@@ -0,0 +1,48 @@
+From 23aabcca1dc3f166d724810ff834c34517595a65 Mon Sep 17 00:00:00 2001
+From: Umut Tezduyar <umut at tezduyar.com>
+Date: Wed, 23 Jan 2013 09:23:49 +0100
+Subject: [PATCH] core: Set source for mountinfo .mount units (cherry picked
+ from commit aa7cb2098302d45c8768ca08bf1e433a19aa46b9)
+
+---
+ src/core/mount.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/mount.c b/src/core/mount.c
+index 5d2b010..4f3a6e4 100644
+--- a/src/core/mount.c
++++ b/src/core/mount.c
+@@ -1472,7 +1472,7 @@ static int mount_add_one(
+ int r;
+ Unit *u;
+ bool delete;
+- char *e, *w = NULL, *o = NULL, *f = NULL;
++ char *e, *w = NULL, *o = NULL, *s = NULL, *f = NULL;
+ MountParameters *p;
+ bool load_extras = false;
+
+@@ -1545,6 +1545,7 @@ static int mount_add_one(
+
+ if (!(w = strdup(what)) ||
+ !(o = strdup(options)) ||
++ !(s = strdup("/proc/self/mountinfo")) ||
+ !(f = strdup(fstype))) {
+ r = -ENOMEM;
+ goto fail;
+@@ -1558,6 +1559,8 @@ static int mount_add_one(
+ }
+
+ MOUNT(u)->from_proc_self_mountinfo = true;
++ free(u->source_path);
++ u->source_path = s;
+
+ free(p->what);
+ p->what = w;
+@@ -1583,6 +1586,7 @@ static int mount_add_one(
+ fail:
+ free(w);
+ free(o);
++ free(s);
+ free(f);
+
+ if (delete && u)
diff --git a/0058-man-systemd.exec-explicit-Environment-assignment.patch b/0058-man-systemd.exec-explicit-Environment-assignment.patch
new file mode 100644
index 0000000..c1a71ad
--- /dev/null
+++ b/0058-man-systemd.exec-explicit-Environment-assignment.patch
@@ -0,0 +1,54 @@
+From 78fe0f6400c6b905e82f04c46c445899c6e577ee Mon Sep 17 00:00:00 2001
+From: Frederic Crozat <fcrozat at suse.com>
+Date: Thu, 24 Jan 2013 18:06:00 +0100
+Subject: [PATCH] man: systemd.exec - explicit Environment assignment
+
+Hi all,
+
+while working on another bug, I discovered the "strange" way systemd is
+parsing Environment= in .service and thought it was worth documenting
+(because I don't expect people to find this syntax by themselves unless
+they read the parsing code ;)
+
+Be more verbose about using space in Environment field and not
+using value of other variables
+
+Fixes https://bugzilla.redhat.com/show_bug.cgi?id=840260
+
+[zj: expand and reformat the example a bit]
+(cherry picked from commit 0ae9c92a933869d5695396d067aa555dacbbba08)
+---
+ man/systemd.exec.xml | 19 +++++++++++++++++--
+ 1 file changed, 17 insertions(+), 2 deletions(-)
+
+diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
+index 37d2dd7..d196c04 100644
+--- a/man/systemd.exec.xml
++++ b/man/systemd.exec.xml
+@@ -286,9 +286,24 @@
+ empty string is assigned to this
+ option the list of environment
+ variables is reset, all prior
+- assignments have no effect. See
++ assignments have no effect.
++ Variable expansion is not performed
++ inside the strings, and $ has no special
++ meaning.
++ If you need to assign a value containing spaces
++ to a variable, use double quotes (")
++ for the assignment.</para>
++
++ <para>Example:
++ <programlisting>Environment="VAR1=word1 word2" VAR2=word3 "VAR3=word 5 6"</programlisting>
++ gives three variables <literal>VAR1</literal>,
++ <literal>VAR2</literal>, <literal>VAR3</literal>.
++ </para>
++
++ <para>
++ See
+ <citerefentry><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+- for details.</para></listitem>
++ for details about environment variables.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><varname>EnvironmentFile=</varname></term>
diff --git a/0059-man-mention-proc-self-mountinfo-in-systemd.mount-5.patch b/0059-man-mention-proc-self-mountinfo-in-systemd.mount-5.patch
new file mode 100644
index 0000000..aca2f4b
--- /dev/null
+++ b/0059-man-mention-proc-self-mountinfo-in-systemd.mount-5.patch
@@ -0,0 +1,34 @@
+From 89f465f1ebb31d8d710b34ce5c8f9cb4e0314081 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Thu, 24 Jan 2013 19:59:33 -0500
+Subject: [PATCH] man: mention /proc/self/mountinfo in systemd.mount(5) (cherry
+ picked from commit e22ac43bc057a305d748221c3b2c935084d6f1b5)
+
+---
+ man/systemd.mount.xml | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
+index 749d426..0845fa0 100644
+--- a/man/systemd.mount.xml
++++ b/man/systemd.mount.xml
+@@ -105,7 +105,10 @@
+ <para>Mount points created at runtime (independently of
+ unit files or <filename>/etc/fstab</filename>) will be
+ monitored by systemd and appear like any other mount
+- unit in systemd.</para>
++ unit in systemd.
++ See <filename>/proc/self/mountinfo</filename> description
++ in <citerefentry><refentrytitle>proc</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
++ </para>
+
+ <para>Some file systems have special semantics as API
+ file systems for kernel-to-userspace and
+@@ -297,6 +300,7 @@
+ <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
++ <citerefentry><refentrytitle>proc</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ </para>
diff --git a/0060-selinux-access-Delete-debugging-message-logged-as-an.patch b/0060-selinux-access-Delete-debugging-message-logged-as-an.patch
new file mode 100644
index 0000000..da984a5
--- /dev/null
+++ b/0060-selinux-access-Delete-debugging-message-logged-as-an.patch
@@ -0,0 +1,24 @@
+From 17d961d7b14dc322507f8b0d1fc67d0f658ccdf5 Mon Sep 17 00:00:00 2001
+From: Colin Walters <walters at verbum.org>
+Date: Thu, 24 Jan 2013 17:47:45 -0500
+Subject: [PATCH] selinux-access: Delete debugging message logged as an error
+
+I don't see why this should be logged at all, so let's delete it.
+(cherry picked from commit 6fd55349ab1c392b01d7979f115f8be2cd89d76a)
+---
+ src/core/selinux-access.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/src/core/selinux-access.c b/src/core/selinux-access.c
+index b933698..41f824a 100644
+--- a/src/core/selinux-access.c
++++ b/src/core/selinux-access.c
+@@ -308,8 +308,6 @@ static int get_calling_context(
+ */
+ sender = dbus_message_get_sender(message);
+ if (sender) {
+- log_error("SELinux Got Sender %s", sender);
+-
+ r = bus_get_selinux_security_context(connection, sender, scon, error);
+ if (r >= 0)
+ return r;
diff --git a/0061-selinux-we-don-t-need-that-many-debug-messages-by-de.patch b/0061-selinux-we-don-t-need-that-many-debug-messages-by-de.patch
new file mode 100644
index 0000000..a348982
--- /dev/null
+++ b/0061-selinux-we-don-t-need-that-many-debug-messages-by-de.patch
@@ -0,0 +1,40 @@
+From b8b2bd1f1d0e3f2f84ae2e7193e52ec867c70d02 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Fri, 25 Jan 2013 03:05:08 +0100
+Subject: [PATCH] selinux: we don't need that many debug messages by default
+ (cherry picked from commit 035dba6f8261af9f714ac3901d695ff39d4a896b)
+
+---
+ src/core/selinux-access.c | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/src/core/selinux-access.c b/src/core/selinux-access.c
+index 41f824a..be728d5 100644
+--- a/src/core/selinux-access.c
++++ b/src/core/selinux-access.c
+@@ -104,8 +104,6 @@ static int bus_get_selinux_security_context(
+
+ *scon = b;
+
+- log_debug("GetConnectionSELinuxSecurityContext %s (pid %ld)", *scon, (long) bus_get_unix_process_id(connection, name, error));
+-
+ return 0;
+ }
+
+@@ -316,7 +314,6 @@ static int get_calling_context(
+ return r;
+ }
+
+- log_debug("SELinux No Sender");
+ if (!dbus_connection_get_unix_fd(connection, &fd)) {
+ log_error("bus_connection_get_unix_fd failed %m");
+ return -EINVAL;
+@@ -361,8 +358,6 @@ int selinux_access_check(
+ if (r < 0)
+ return r;
+
+- log_debug("SELinux access check for path=%s permission=%s", strna(path), permission);
+-
+ audit.uid = audit.loginuid = (uid_t) -1;
+ audit.gid = (gid_t) -1;
+ audit.cmdline = NULL;
diff --git a/0062-logind-send-Resumed-signal-after-we-come-back-from-s.patch b/0062-logind-send-Resumed-signal-after-we-come-back-from-s.patch
new file mode 100644
index 0000000..286ed23
--- /dev/null
+++ b/0062-logind-send-Resumed-signal-after-we-come-back-from-s.patch
@@ -0,0 +1,112 @@
+From 7f77fed65087294f36d4fd60881575c7cb0498ec Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 24 Jan 2013 05:15:36 +0100
+Subject: [PATCH] logind: send Resumed() signal after we come back from
+ suspend/hibernate/hybrid-sleep
+
+This allows clients to get asynchronous notifications for user-requested
+suspend/hibernate cycles. Kernel-triggered automatic suspending is not
+covered.
+(cherry picked from commit ee17c9281d3c208ca3f4fadd800990e61e8fd4f2)
+---
+ src/login/logind-dbus.c | 24 ++++++++++++++++--------
+ src/login/logind.h | 1 +
+ 2 files changed, 17 insertions(+), 8 deletions(-)
+
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index 0ff20fa..1717584 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -197,6 +197,7 @@
+ " <arg name=\"id\" type=\"s\"/>\n" \
+ " <arg name=\"path\" type=\"o\"/>\n" \
+ " </signal>\n" \
++ " <signal name=\"Resumed\"/>\n" \
+ " <signal name=\"PrepareForShutdown\">\n" \
+ " <arg name=\"active\" type=\"b\"/>\n" \
+ " </signal>\n" \
+@@ -990,7 +991,7 @@ static int have_multiple_sessions(
+ return false;
+ }
+
+-static int send_start_unit(Manager *m, const char *unit_name, DBusError *error) {
++static int send_start_unit(Manager *m, const char *unit_name, bool send_resumed, DBusError *error) {
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ const char *mode = "replace", *p;
+ int r;
+@@ -1026,6 +1027,7 @@ static int send_start_unit(Manager *m, const char *unit_name, DBusError *error)
+
+ free(m->action_job);
+ m->action_job = c;
++ m->send_resumed_after_action_job = send_resumed;
+
+ return 0;
+ }
+@@ -1037,8 +1039,7 @@ static int send_prepare_for(Manager *m, InhibitWhat w, bool _active) {
+ };
+
+ dbus_bool_t active = _active;
+- DBusMessage *message;
+- int r = 0;
++ _cleanup_dbus_message_unref_ DBusMessage *message = NULL;
+
+ assert(m);
+ assert(w >= 0);
+@@ -1051,10 +1052,9 @@ static int send_prepare_for(Manager *m, InhibitWhat w, bool _active) {
+
+ if (!dbus_message_append_args(message, DBUS_TYPE_BOOLEAN, &active, DBUS_TYPE_INVALID) ||
+ !dbus_connection_send(m->bus, message, NULL))
+- r = -ENOMEM;
++ return -ENOMEM;
+
+- dbus_message_unref(message);
+- return r;
++ return 0;
+ }
+
+ static int delay_shutdown_or_sleep(Manager *m, InhibitWhat w, const char *unit_name) {
+@@ -1263,7 +1263,7 @@ int bus_manager_shutdown_or_sleep_now_or_later(
+
+ /* Shutdown is not delayed, execute it
+ * immediately */
+- r = send_start_unit(m, unit_name, error);
++ r = send_start_unit(m, unit_name, w & INHIBIT_SLEEP, error);
+ }
+
+ return r;
+@@ -2369,6 +2369,14 @@ DBusHandlerResult bus_message_filter(
+ log_info("Action is complete, result is '%s'.", result);
+ free(m->action_job);
+ m->action_job = NULL;
++
++ if (m->send_resumed_after_action_job) {
++ _cleanup_dbus_message_unref_ DBusMessage *s = NULL;
++
++ s = dbus_message_new_signal("/org/freedesktop/login1", "org.freedesktop.login1.Manager", "Resumed");
++ if (s)
++ dbus_connection_send(m->bus, s, NULL);
++ }
+ }
+ }
+
+@@ -2428,7 +2436,7 @@ int manager_dispatch_delayed(Manager *manager) {
+
+ /* Actually do the shutdown */
+ dbus_error_init(&error);
+- r = send_start_unit(manager, unit_name, &error);
++ r = send_start_unit(manager, unit_name, manager->delayed_what & INHIBIT_SLEEP, &error);
+ if (r < 0) {
+ log_warning("Failed to send delayed message: %s", bus_error_message_or_strerror(&error, -r));
+ dbus_error_free(&error);
+diff --git a/src/login/logind.h b/src/login/logind.h
+index fe6ea0f..7a0f8f2 100644
+--- a/src/login/logind.h
++++ b/src/login/logind.h
+@@ -101,6 +101,7 @@ struct Manager {
+ usec_t inhibit_delay_max;
+
+ char* action_job;
++ bool send_resumed_after_action_job;
+
+ int idle_action_fd; /* the timer_fd */
+ usec_t idle_action_usec;
diff --git a/0063-logind-add-UnlockSessions-clal-to-complement-LockSes.patch b/0063-logind-add-UnlockSessions-clal-to-complement-LockSes.patch
new file mode 100644
index 0000000..1b71dc6
--- /dev/null
+++ b/0063-logind-add-UnlockSessions-clal-to-complement-LockSes.patch
@@ -0,0 +1,96 @@
+From 9abc2c6f11d12a2c849df0ada0f2aeb621d34459 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 24 Jan 2013 05:29:37 +0100
+Subject: [PATCH] logind: add UnlockSessions() clal to complement
+ LockSessions() (cherry picked from commit
+ b61600291e3bbc51482bbb9823ccd48f03c130da)
+
+---
+ man/loginctl.xml | 8 +++++---
+ src/login/loginctl.c | 6 +++++-
+ src/login/logind-dbus.c | 7 +++++--
+ 3 files changed, 15 insertions(+), 6 deletions(-)
+
+diff --git a/man/loginctl.xml b/man/loginctl.xml
+index 8a20d18..9d082cf 100644
+--- a/man/loginctl.xml
++++ b/man/loginctl.xml
+@@ -251,10 +251,12 @@
+
+ <varlistentry>
+ <term><command>lock-sessions</command></term>
++ <term><command>unlock-sessions</command></term>
+
+- <listitem><para>Activate the screen
+- lock on all current sessions
+- supporting it.</para></listitem>
++ <listitem><para>Activates/deactivates
++ the screen lock on all current
++ sessions supporting
++ it.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+diff --git a/src/login/loginctl.c b/src/login/loginctl.c
+index 0e57e08..473c77b 100644
+--- a/src/login/loginctl.c
++++ b/src/login/loginctl.c
+@@ -1287,6 +1287,8 @@ static int flush_devices(DBusConnection *bus, char **args, unsigned n) {
+ }
+
+ static int lock_sessions(DBusConnection *bus, char **args, unsigned n) {
++ assert(args);
++
+ polkit_agent_open_if_enabled();
+
+ return bus_method_call_with_reply (
+@@ -1294,7 +1296,7 @@ static int lock_sessions(DBusConnection *bus, char **args, unsigned n) {
+ "org.freedesktop.login1",
+ "/org/freedesktop/login1",
+ "org.freedesktop.login1.Manager",
+- "LockSessions",
++ streq(args[0], "lock-sessions") ? "LockSessions" : "UnlockSessions",
+ NULL,
+ NULL,
+ DBUS_TYPE_INVALID);
+@@ -1348,6 +1350,7 @@ static int help(void) {
+ " lock-session [ID...] Screen lock one or more sessions\n"
+ " unlock-session [ID...] Screen unlock one or more sessions\n"
+ " lock-sessions Screen lock all current sessions\n"
++ " unlock-sessions Screen unlock all current sessions\n"
+ " terminate-session [ID...] Terminate one or more sessions\n"
+ " kill-session [ID...] Send signal to processes of a session\n"
+ " list-users List users\n"
+@@ -1496,6 +1499,7 @@ static int loginctl_main(DBusConnection *bus, int argc, char *argv[], DBusError
+ { "lock-session", MORE, 2, activate },
+ { "unlock-session", MORE, 2, activate },
+ { "lock-sessions", EQUAL, 1, lock_sessions },
++ { "unlock-sessions", EQUAL, 1, lock_sessions },
+ { "terminate-session", MORE, 2, activate },
+ { "kill-session", MORE, 2, kill_session },
+ { "list-users", EQUAL, 1, list_users },
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index 1717584..0960aab 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -102,6 +102,7 @@
+ " <arg name=\"id\" type=\"s\" direction=\"in\"/>\n" \
+ " </method>\n" \
+ " <method name=\"LockSessions\"/>\n" \
++ " <method name=\"UnlockSessions\"/>\n" \
+ " <method name=\"KillSession\">\n" \
+ " <arg name=\"id\" type=\"s\" direction=\"in\"/>\n" \
+ " <arg name=\"who\" type=\"s\" direction=\"in\"/>\n" \
+@@ -1853,8 +1854,10 @@ static DBusHandlerResult manager_message_handler(
+ if (!reply)
+ goto oom;
+
+- } else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "LockSessions")) {
+- r = session_send_lock_all(m, true);
++ } else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "LockSessions") ||
++ dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "UnlockSessions")) {
++
++ r = session_send_lock_all(m, streq(dbus_message_get_member(message), "LockSessions"));
+ if (r < 0)
+ bus_send_error_reply(connection, message, NULL, r);
+
diff --git a/0064-loginctl-show-seat-master-and-uaccess-devices-in-sea.patch b/0064-loginctl-show-seat-master-and-uaccess-devices-in-sea.patch
new file mode 100644
index 0000000..f70b440
--- /dev/null
+++ b/0064-loginctl-show-seat-master-and-uaccess-devices-in-sea.patch
@@ -0,0 +1,50 @@
+From ce036ab97ed711dabc779b13a9a3cc575d0507b5 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Thu, 24 Jan 2013 05:47:37 +0100
+Subject: [PATCH] loginctl: show seat master and uaccess devices in seat-status
+ output (cherry picked from commit d239d84aa384a532e1056ec1d09fef16d843b8eb)
+
+---
+ src/login/sysfs-show.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/src/login/sysfs-show.c b/src/login/sysfs-show.c
+index d113ec3..da34c3a 100644
+--- a/src/login/sysfs-show.c
++++ b/src/login/sysfs-show.c
+@@ -45,6 +45,7 @@ static int show_sysfs_one(
+ struct udev_device *d;
+ const char *sn, *name, *sysfs, *subsystem, *sysname;
+ char *l, *k;
++ bool is_master, uaccess;
+
+ sysfs = udev_list_entry_get_name(*item);
+ if (!path_startswith(sysfs, sub))
+@@ -60,13 +61,16 @@ static int show_sysfs_one(
+ if (isempty(sn))
+ sn = "seat0";
+
+- /* fixme, also check for tag 'seat' here */
++ /* Explicitly also check for tag 'seat' here */
+ if (!streq(seat, sn) || !udev_device_has_tag(d, "seat")) {
+ udev_device_unref(d);
+ *item = udev_list_entry_get_next(*item);
+ continue;
+ }
+
++ is_master = udev_device_has_tag(d, "seat-master");
++ uaccess = udev_device_has_tag(d, "uaccess");
++
+ name = udev_device_get_sysattr_value(d, "name");
+ if (!name)
+ name = udev_device_get_sysattr_value(d, "id");
+@@ -110,7 +114,8 @@ static int show_sysfs_one(
+ free(k);
+
+ if (asprintf(&l,
+- "(%s:%s)%s%s%s",
++ "%s%s%s:%s%s%s%s",
++ is_master ? "[MASTER] " : "", uaccess ? "[ACL] " : "",
+ subsystem, sysname,
+ name ? " \"" : "", name ? name : "", name ? "\"" : "") < 0) {
+ udev_device_unref(d);
diff --git a/0065-loginctl-don-t-show-UACCESS-info-in-device-tree.patch b/0065-loginctl-don-t-show-UACCESS-info-in-device-tree.patch
new file mode 100644
index 0000000..d2a3730
--- /dev/null
+++ b/0065-loginctl-don-t-show-UACCESS-info-in-device-tree.patch
@@ -0,0 +1,46 @@
+From 2fc3a85f081e2861b6ee3b599332c39046b8e56e Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Fri, 25 Jan 2013 04:48:34 +0100
+Subject: [PATCH] loginctl: don't show [UACCESS] info in device tree
+
+As the tree doesn't really necessarily show all device node devices and
+only those are marked for uaccess it's kinda pointless showing this at
+all, since it would give a pretty incomplete impression of the uaccess
+information.
+(cherry picked from commit 5d1fb81b2c602abd2605f6e50810ac7fcb06c024)
+---
+ src/login/sysfs-show.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/src/login/sysfs-show.c b/src/login/sysfs-show.c
+index da34c3a..fc3af75 100644
+--- a/src/login/sysfs-show.c
++++ b/src/login/sysfs-show.c
+@@ -45,7 +45,7 @@ static int show_sysfs_one(
+ struct udev_device *d;
+ const char *sn, *name, *sysfs, *subsystem, *sysname;
+ char *l, *k;
+- bool is_master, uaccess;
++ bool is_master;
+
+ sysfs = udev_list_entry_get_name(*item);
+ if (!path_startswith(sysfs, sub))
+@@ -69,7 +69,6 @@ static int show_sysfs_one(
+ }
+
+ is_master = udev_device_has_tag(d, "seat-master");
+- uaccess = udev_device_has_tag(d, "uaccess");
+
+ name = udev_device_get_sysattr_value(d, "name");
+ if (!name)
+@@ -114,8 +113,8 @@ static int show_sysfs_one(
+ free(k);
+
+ if (asprintf(&l,
+- "%s%s%s:%s%s%s%s",
+- is_master ? "[MASTER] " : "", uaccess ? "[ACL] " : "",
++ "%s%s:%s%s%s%s",
++ is_master ? "[MASTER] " : "",
+ subsystem, sysname,
+ name ? " \"" : "", name ? name : "", name ? "\"" : "") < 0) {
+ udev_device_unref(d);
diff --git a/0066-logind-rework-delay-inhibition-logic.patch b/0066-logind-rework-delay-inhibition-logic.patch
new file mode 100644
index 0000000..2fca1f1
--- /dev/null
+++ b/0066-logind-rework-delay-inhibition-logic.patch
@@ -0,0 +1,447 @@
+From 8547ac2198ca2ed310ce50379cec911d9ce7fa90 Mon Sep 17 00:00:00 2001
+From: Lennart Poettering <lennart at poettering.net>
+Date: Fri, 25 Jan 2013 06:30:23 +0100
+Subject: [PATCH] logind: rework delay inhibition logic
+
+- Don't allow any locks to be taken while we are in the process of
+ executing the specific operation, so that apps are not surprised if a
+ suspend/shutdown happens while they rely on their inhibitor.
+
+- Get rid of the Resumed signal, it was a bad idea, and redundant due to
+ PrepareForSleep(false), see below.
+
+- Always send out PrepareFor{Shutdown,Sleep} signals, instead of only if
+ a delay lock is taken.
+
+- Move PrepareForSleep(false) after we come back from the suspend, so
+ that apps can use this as "Resumed" notification. This also has the
+ benefit that apps know when to take a new lock.
+(cherry picked from commit 314b4b0a68d9ab35de981923a088fc8c8820caa5)
+
+Conflicts:
+ TODO
+---
+ src/login/logind-action.c | 2 +-
+ src/login/logind-dbus.c | 218 +++++++++++++++++++++++++---------------------
+ src/login/logind.c | 4 +-
+ src/login/logind.h | 22 +++--
+ 4 files changed, 133 insertions(+), 113 deletions(-)
+
+diff --git a/src/login/logind-action.c b/src/login/logind-action.c
+index a796ebe..1e529e1 100644
+--- a/src/login/logind-action.c
++++ b/src/login/logind-action.c
+@@ -60,7 +60,7 @@ int manager_handle_action(
+
+ assert(m);
+
+- if (m->action_job || m->delayed_unit) {
++ if (m->action_what) {
+ log_debug("Action already in progress, ignoring.");
+ return -EALREADY;
+ }
+diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
+index 0960aab..f351859 100644
+--- a/src/login/logind-dbus.c
++++ b/src/login/logind-dbus.c
+@@ -198,7 +198,6 @@
+ " <arg name=\"id\" type=\"s\"/>\n" \
+ " <arg name=\"path\" type=\"o\"/>\n" \
+ " </signal>\n" \
+- " <signal name=\"Resumed\"/>\n" \
+ " <signal name=\"PrepareForShutdown\">\n" \
+ " <arg name=\"active\" type=\"b\"/>\n" \
+ " </signal>\n" \
+@@ -298,9 +297,9 @@ static int bus_manager_append_preparing(DBusMessageIter *i, const char *property
+ assert(property);
+
+ if (streq(property, "PreparingForShutdown"))
+- b = !!(m->delayed_what & INHIBIT_SHUTDOWN);
++ b = !!(m->action_what & INHIBIT_SHUTDOWN);
+ else
+- b = !!(m->delayed_what & INHIBIT_SLEEP);
++ b = !!(m->action_what & INHIBIT_SLEEP);
+
+ dbus_message_iter_append_basic(i, DBUS_TYPE_BOOLEAN, &b);
+ return 0;
+@@ -697,7 +696,13 @@ fail:
+ return r;
+ }
+
+-static int bus_manager_inhibit(Manager *m, DBusConnection *connection, DBusMessage *message, DBusError *error, DBusMessage **_reply) {
++static int bus_manager_inhibit(
++ Manager *m,
++ DBusConnection *connection,
++ DBusMessage *message,
++ DBusError *error,
++ DBusMessage **_reply) {
++
+ Inhibitor *i = NULL;
+ char *id = NULL;
+ const char *who, *why, *what, *mode;
+@@ -744,6 +749,15 @@ static int bus_manager_inhibit(Manager *m, DBusConnection *connection, DBusMessa
+ goto fail;
+ }
+
++ /* Don't allow taking delay locks while we are already
++ * executing the operation. We shouldn't create the impression
++ * that the lock was successful if the machine is about to go
++ * down/suspend any moment. */
++ if (m->action_what & w) {
++ r = -EALREADY;
++ goto fail;
++ }
++
+ r = verify_polkit(connection, message,
+ w == INHIBIT_SHUTDOWN ? (mm == INHIBIT_BLOCK ? "org.freedesktop.login1.inhibit-block-shutdown" : "org.freedesktop.login1.inhibit-delay-shutdown") :
+ w == INHIBIT_SLEEP ? (mm == INHIBIT_BLOCK ? "org.freedesktop.login1.inhibit-block-sleep" : "org.freedesktop.login1.inhibit-delay-sleep") :
+@@ -992,15 +1006,59 @@ static int have_multiple_sessions(
+ return false;
+ }
+
+-static int send_start_unit(Manager *m, const char *unit_name, bool send_resumed, DBusError *error) {
++static int bus_manager_log_shutdown(
++ Manager *m,
++ InhibitWhat w,
++ const char *unit_name) {
++
++ const char *p, *q;
++
++ assert(m);
++ assert(unit_name);
++
++ if (w != INHIBIT_SHUTDOWN)
++ return 0;
++
++ if (streq(unit_name, SPECIAL_POWEROFF_TARGET)) {
++ p = "MESSAGE=System is powering down.";
++ q = "SHUTDOWN=power-off";
++ } else if (streq(unit_name, SPECIAL_HALT_TARGET)) {
++ p = "MESSAGE=System is halting.";
++ q = "SHUTDOWN=halt";
++ } else if (streq(unit_name, SPECIAL_REBOOT_TARGET)) {
++ p = "MESSAGE=System is rebooting.";
++ q = "SHUTDOWN=reboot";
++ } else if (streq(unit_name, SPECIAL_KEXEC_TARGET)) {
++ p = "MESSAGE=System is rebooting with kexec.";
++ q = "SHUTDOWN=kexec";
++ } else {
++ p = "MESSAGE=System is shutting down.";
++ q = NULL;
++ }
++
++ return log_struct(LOG_NOTICE, MESSAGE_ID(SD_MESSAGE_SHUTDOWN),
++ p,
++ q, NULL);
++}
++
++static int execute_shutdown_or_sleep(
++ Manager *m,
++ InhibitWhat w,
++ const char *unit_name,
++ DBusError *error) {
++
+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+ const char *mode = "replace", *p;
+ int r;
+ char *c;
+
+ assert(m);
++ assert(w >= 0);
++ assert(w < _INHIBIT_WHAT_MAX);
+ assert(unit_name);
+
++ bus_manager_log_shutdown(m, w, unit_name);
++
+ r = bus_method_call_with_reply(
+ m->bus,
+ "org.freedesktop.systemd1",
+@@ -1026,54 +1084,27 @@ static int send_start_unit(Manager *m, const char *unit_name, bool send_resumed,
+ if (!c)
+ return -ENOMEM;
+
++ m->action_unit = unit_name;
+ free(m->action_job);
+ m->action_job = c;
+- m->send_resumed_after_action_job = send_resumed;
++ m->action_what = w;
+
+ return 0;
+ }
+
+-static int send_prepare_for(Manager *m, InhibitWhat w, bool _active) {
+- static const char * const signal_name[_INHIBIT_WHAT_MAX] = {
+- [INHIBIT_SHUTDOWN] = "PrepareForShutdown",
+- [INHIBIT_SLEEP] = "PrepareForSleep"
+- };
+-
+- dbus_bool_t active = _active;
+- _cleanup_dbus_message_unref_ DBusMessage *message = NULL;
+-
+- assert(m);
+- assert(w >= 0);
+- assert(w < _INHIBIT_WHAT_MAX);
+- assert(signal_name[w]);
+-
+- message = dbus_message_new_signal("/org/freedesktop/login1", "org.freedesktop.login1.Manager", signal_name[w]);
+- if (!message)
+- return -ENOMEM;
+-
+- if (!dbus_message_append_args(message, DBUS_TYPE_BOOLEAN, &active, DBUS_TYPE_INVALID) ||
+- !dbus_connection_send(m->bus, message, NULL))
+- return -ENOMEM;
+-
+- return 0;
+-}
++static int delay_shutdown_or_sleep(
++ Manager *m,
++ InhibitWhat w,
++ const char *unit_name) {
+
+-static int delay_shutdown_or_sleep(Manager *m, InhibitWhat w, const char *unit_name) {
+ assert(m);
+ assert(w >= 0);
+ assert(w < _INHIBIT_WHAT_MAX);
++ assert(unit_name);
+
+- /* Tell everybody to prepare for shutdown/sleep */
+- send_prepare_for(m, w, true);
+-
+- /* Update timestamp for timeout */
+- if (!m->delayed_unit)
+- m->delayed_timestamp = now(CLOCK_MONOTONIC);
+-
+- /* Remember what we want to do, possibly overriding what kind
+- * of unit we previously queued. */
+- m->delayed_unit = unit_name;
+- m->delayed_what = w;
++ m->action_timestamp = now(CLOCK_MONOTONIC);
++ m->action_unit = unit_name;
++ m->action_what = w;
+
+ return 0;
+ }
+@@ -1201,39 +1232,29 @@ finish:
+ return 0;
+ }
+
+-static int bus_manager_log_shutdown(
+- Manager *m,
+- InhibitWhat w,
+- const char *unit_name) {
++static int send_prepare_for(Manager *m, InhibitWhat w, bool _active) {
++ static const char * const signal_name[_INHIBIT_WHAT_MAX] = {
++ [INHIBIT_SHUTDOWN] = "PrepareForShutdown",
++ [INHIBIT_SLEEP] = "PrepareForSleep"
++ };
+
+- const char *p, *q;
++ dbus_bool_t active = _active;
++ _cleanup_dbus_message_unref_ DBusMessage *message = NULL;
+
+ assert(m);
+- assert(unit_name);
++ assert(w >= 0);
++ assert(w < _INHIBIT_WHAT_MAX);
++ assert(signal_name[w]);
+
+- if (w != INHIBIT_SHUTDOWN)
+- return 0;
++ message = dbus_message_new_signal("/org/freedesktop/login1", "org.freedesktop.login1.Manager", signal_name[w]);
++ if (!message)
++ return -ENOMEM;
+
+- if (streq(unit_name, SPECIAL_POWEROFF_TARGET)) {
+- p = "MESSAGE=System is powering down.";
+- q = "SHUTDOWN=power-off";
+- } else if (streq(unit_name, SPECIAL_HALT_TARGET)) {
+- p = "MESSAGE=System is halting.";
+- q = "SHUTDOWN=halt";
+- } else if (streq(unit_name, SPECIAL_REBOOT_TARGET)) {
+- p = "MESSAGE=System is rebooting.";
+- q = "SHUTDOWN=reboot";
+- } else if (streq(unit_name, SPECIAL_KEXEC_TARGET)) {
+- p = "MESSAGE=System is rebooting with kexec.";
+- q = "SHUTDOWN=kexec";
+- } else {
+- p = "MESSAGE=System is shutting down.";
+- q = NULL;
+- }
++ if (!dbus_message_append_args(message, DBUS_TYPE_BOOLEAN, &active, DBUS_TYPE_INVALID) ||
++ !dbus_connection_send(m->bus, message, NULL))
++ return -ENOMEM;
+
+- return log_struct(LOG_NOTICE, MESSAGE_ID(SD_MESSAGE_SHUTDOWN),
+- p,
+- q, NULL);
++ return 0;
+ }
+
+ int bus_manager_shutdown_or_sleep_now_or_later(
+@@ -1251,6 +1272,9 @@ int bus_manager_shutdown_or_sleep_now_or_later(
+ assert(w <= _INHIBIT_WHAT_MAX);
+ assert(!m->action_job);
+
++ /* Tell everybody to prepare for shutdown/sleep */
++ send_prepare_for(m, w, true);
++
+ delayed =
+ m->inhibit_delay_max > 0 &&
+ manager_is_inhibited(m, w, INHIBIT_DELAY, NULL, false, false, 0);
+@@ -1259,13 +1283,10 @@ int bus_manager_shutdown_or_sleep_now_or_later(
+ /* Shutdown is delayed, keep in mind what we
+ * want to do, and start a timeout */
+ r = delay_shutdown_or_sleep(m, w, unit_name);
+- else {
+- bus_manager_log_shutdown(m, w, unit_name);
+-
++ else
+ /* Shutdown is not delayed, execute it
+ * immediately */
+- r = send_start_unit(m, unit_name, w & INHIBIT_SLEEP, error);
+- }
++ r = execute_shutdown_or_sleep(m, w, unit_name, error);
+
+ return r;
+ }
+@@ -1302,7 +1323,8 @@ static int bus_manager_do_shutdown_or_sleep(
+ assert(error);
+ assert(_reply);
+
+- if (m->action_job || m->delayed_unit)
++ /* Don't allow multiple jobs being executed at the same time */
++ if (m->action_what)
+ return -EALREADY;
+
+ if (!dbus_message_get_args(
+@@ -2368,18 +2390,18 @@ DBusHandlerResult bus_message_filter(
+ DBUS_TYPE_STRING, &result,
+ DBUS_TYPE_INVALID))
+ log_error("Failed to parse JobRemoved message: %s", bus_error_message(&error));
++
+ else if (m->action_job && streq(m->action_job, path)) {
+- log_info("Action is complete, result is '%s'.", result);
+- free(m->action_job);
+- m->action_job = NULL;
+
+- if (m->send_resumed_after_action_job) {
+- _cleanup_dbus_message_unref_ DBusMessage *s = NULL;
++ log_info("Operation finished.");
+
+- s = dbus_message_new_signal("/org/freedesktop/login1", "org.freedesktop.login1.Manager", "Resumed");
+- if (s)
+- dbus_connection_send(m->bus, s, NULL);
+- }
++ /* Tell people that they now may take a lock again */
++ send_prepare_for(m, m->action_what, false);
++
++ free(m->action_job);
++ m->action_job = NULL;
++ m->action_unit = NULL;
++ m->action_what = 0;
+ }
+ }
+
+@@ -2411,38 +2433,32 @@ finish:
+ }
+
+ int manager_dispatch_delayed(Manager *manager) {
+- const char *unit_name;
+ DBusError error;
+- bool delayed;
+ int r;
+
+ assert(manager);
+
+- if (!manager->delayed_unit)
++ if (!manager->action_unit || manager->action_job)
+ return 0;
+
+ /* Continue delay? */
+- delayed =
+- manager->delayed_timestamp + manager->inhibit_delay_max > now(CLOCK_MONOTONIC) &&
+- manager_is_inhibited(manager, manager->delayed_what, INHIBIT_DELAY, NULL, false, false, 0);
+- if (delayed)
+- return 0;
++ if (manager_is_inhibited(manager, manager->action_what, INHIBIT_DELAY, NULL, false, false, 0)) {
+
+- bus_manager_log_shutdown(manager, manager->delayed_what, manager->delayed_unit);
+-
+- /* Tell people about it */
+- send_prepare_for(manager, manager->delayed_what, false);
++ if (manager->action_timestamp + manager->inhibit_delay_max > now(CLOCK_MONOTONIC))
++ return 0;
+
+- /* Reset delay data */
+- unit_name = manager->delayed_unit;
+- manager->delayed_unit = NULL;
++ log_info("Delay lock is active but inhibitor timeout is reached.");
++ }
+
+- /* Actually do the shutdown */
++ /* Actually do the operation */
+ dbus_error_init(&error);
+- r = send_start_unit(manager, unit_name, manager->delayed_what & INHIBIT_SLEEP, &error);
++ r = execute_shutdown_or_sleep(manager, manager->action_what, manager->action_unit, &error);
+ if (r < 0) {
+ log_warning("Failed to send delayed message: %s", bus_error_message_or_strerror(&error, -r));
+ dbus_error_free(&error);
++
++ manager->action_unit = NULL;
++ manager->action_what = 0;
+ return r;
+ }
+
+diff --git a/src/login/logind.c b/src/login/logind.c
+index ed0b748..be793e2 100644
+--- a/src/login/logind.c
++++ b/src/login/logind.c
+@@ -1628,11 +1628,11 @@ int manager_run(Manager *m) {
+
+ manager_gc(m, true);
+
+- if (m->delayed_unit) {
++ if (m->action_what != 0) {
+ usec_t x, y;
+
+ x = now(CLOCK_MONOTONIC);
+- y = m->delayed_timestamp + m->inhibit_delay_max;
++ y = m->action_timestamp + m->inhibit_delay_max;
+
+ msec = x >= y ? 0 : (int) ((y - x) / USEC_PER_MSEC);
+ }
+diff --git a/src/login/logind.h b/src/login/logind.h
+index 7a0f8f2..904dc20 100644
+--- a/src/login/logind.h
++++ b/src/login/logind.h
+@@ -91,17 +91,21 @@ struct Manager {
+ Hashmap *inhibitor_fds;
+ Hashmap *button_fds;
+
+- /* If a shutdown was delayed due to a inhibitor this contains
+- the unit name we are supposed to start after the delay is
+- over */
+- const char *delayed_unit;
+- InhibitWhat delayed_what;
+- usec_t delayed_timestamp;
+-
+ usec_t inhibit_delay_max;
+
+- char* action_job;
+- bool send_resumed_after_action_job;
++ /* If an action is currently being executed or is delayed,
++ * this is != 0 and encodes what is being done */
++ InhibitWhat action_what;
++
++ /* If a shutdown/suspend was delayed due to a inhibitor this
++ contains the unit name we are supposed to start after the
++ delay is over */
++ const char *action_unit;
++
++ /* If a shutdown/suspend is currently executed, then this is
++ * the job of it */
++ char *action_job;
++ usec_t action_timestamp;
+
+ int idle_action_fd; /* the timer_fd */
+ usec_t idle_action_usec;
diff --git a/0067-tmpfiles-introduce-type-X.patch b/0067-tmpfiles-introduce-type-X.patch
new file mode 100644
index 0000000..4acfb09
--- /dev/null
+++ b/0067-tmpfiles-introduce-type-X.patch
@@ -0,0 +1,332 @@
+From 312803beb2b76556e2f8b90982cbbdde4d72d400 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta at redhat.com>
+Date: Fri, 18 Jan 2013 16:13:08 +0100
+Subject: [PATCH] tmpfiles: introduce type X
+
+Type X will exclude path itself from clean-up. However, if the path is a
+directory systemd-tmpfiles will clean-up its content.
+
+In contrast to type x, where path is ignored completely, type X needs some
+Age parameter. In order to determine Age parameter, we will look for config
+entries of type d or D and pick the best match. Best match is either
+exact match or longest prefix match.
+(cherry picked from commit 78a92a5a2306709e4587e332728a76901323ade9)
+---
+ man/tmpfiles.d.xml | 15 ++++
+ src/tmpfiles/tmpfiles.c | 192 +++++++++++++++++++++++++++++++-----------------
+ 2 files changed, 138 insertions(+), 69 deletions(-)
+
+diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
+index 785264e..519f9bc 100644
+--- a/man/tmpfiles.d.xml
++++ b/man/tmpfiles.d.xml
+@@ -166,6 +166,21 @@ L /tmp/foobar - - - - /dev/null</programlisting>
+ </varlistentry>
+
+ <varlistentry>
++ <term><varname>X</varname></term>
++ <listitem><para>Ignore a path
++ during cleanup. Use this type
++ to prevent path removal as
++ controlled with the Age parameter.
++ Note that if path is a directory,
++ content of a directory is not
++ excluded from clean-up, only
++ directory itself. Lines of this
++ type accept shell-style globs
++ in place of normal path
++ names.</para></listitem>
++ </varlistentry>
++
++ <varlistentry>
+ <term><varname>r</varname></term>
+ <listitem><para>Remove a file
+ or directory if it
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index d8fb07e..c2023f5 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -70,6 +70,7 @@ typedef enum ItemType {
+
+ /* These ones take globs */
+ IGNORE_PATH = 'x',
++ IGNORE_DIRECTORY_PATH = 'X',
+ REMOVE_PATH = 'r',
+ RECURSIVE_REMOVE_PATH = 'R',
+ RELABEL_PATH = 'z',
+@@ -119,7 +120,7 @@ static const char * const conf_file_dirs[] = {
+ #define MAX_DEPTH 256
+
+ static bool needs_glob(ItemType t) {
+- return t == IGNORE_PATH || t == REMOVE_PATH || t == RECURSIVE_REMOVE_PATH || t == RELABEL_PATH || t == RECURSIVE_RELABEL_PATH;
++ return t == IGNORE_PATH || t == IGNORE_DIRECTORY_PATH || t == REMOVE_PATH || t == RECURSIVE_REMOVE_PATH || t == RELABEL_PATH || t == RECURSIVE_RELABEL_PATH;
+ }
+
+ static struct Item* find_glob(Hashmap *h, const char *match) {
+@@ -218,6 +219,7 @@ static bool unix_socket_alive(const char *fn) {
+ }
+
+ static int dir_cleanup(
++ Item *i,
+ const char *p,
+ DIR *d,
+ const struct stat *ds,
+@@ -297,7 +299,7 @@ static int dir_cleanup(
+ continue;
+ }
+
+- q = dir_cleanup(sub_path, sub_dir, &s, cutoff, rootdev, false, maxdepth-1, false);
++ q = dir_cleanup(i, sub_path, sub_dir, &s, cutoff, rootdev, false, maxdepth-1, false);
+ closedir(sub_dir);
+
+ if (q < 0)
+@@ -320,12 +322,14 @@ static int dir_cleanup(
+ if (age >= cutoff)
+ continue;
+
+- log_debug("rmdir '%s'\n", sub_path);
++ if (!i->type == IGNORE_DIRECTORY_PATH || !streq(dent->d_name, p)) {
++ log_debug("rmdir '%s'\n", sub_path);
+
+- if (unlinkat(dirfd(d), dent->d_name, AT_REMOVEDIR) < 0) {
+- if (errno != ENOENT && errno != ENOTEMPTY) {
+- log_error("rmdir(%s): %m", sub_path);
+- r = -errno;
++ if (unlinkat(dirfd(d), dent->d_name, AT_REMOVEDIR) < 0) {
++ if (errno != ENOENT && errno != ENOTEMPTY) {
++ log_error("rmdir(%s): %m", sub_path);
++ r = -errno;
++ }
+ }
+ }
+
+@@ -395,68 +399,6 @@ finish:
+ return r;
+ }
+
+-static int clean_item(Item *i) {
+- DIR *d;
+- struct stat s, ps;
+- bool mountpoint;
+- int r;
+- usec_t cutoff, n;
+-
+- assert(i);
+-
+- if (i->type != CREATE_DIRECTORY &&
+- i->type != TRUNCATE_DIRECTORY &&
+- i->type != IGNORE_PATH)
+- return 0;
+-
+- if (!i->age_set)
+- return 0;
+-
+- n = now(CLOCK_REALTIME);
+- if (n < i->age)
+- return 0;
+-
+- cutoff = n - i->age;
+-
+- d = opendir(i->path);
+- if (!d) {
+- if (errno == ENOENT)
+- return 0;
+-
+- log_error("Failed to open directory %s: %m", i->path);
+- return -errno;
+- }
+-
+- if (fstat(dirfd(d), &s) < 0) {
+- log_error("stat(%s) failed: %m", i->path);
+- r = -errno;
+- goto finish;
+- }
+-
+- if (!S_ISDIR(s.st_mode)) {
+- log_error("%s is not a directory.", i->path);
+- r = -ENOTDIR;
+- goto finish;
+- }
+-
+- if (fstatat(dirfd(d), "..", &ps, AT_SYMLINK_NOFOLLOW) != 0) {
+- log_error("stat(%s/..) failed: %m", i->path);
+- r = -errno;
+- goto finish;
+- }
+-
+- mountpoint = s.st_dev != ps.st_dev ||
+- (s.st_dev == ps.st_dev && s.st_ino == ps.st_ino);
+-
+- r = dir_cleanup(i->path, d, &s, cutoff, s.st_dev, mountpoint, MAX_DEPTH, i->keep_first_level);
+-
+-finish:
+- if (d)
+- closedir(d);
+-
+- return r;
+-}
+-
+ static int item_set_perms(Item *i, const char *path) {
+ /* not using i->path directly because it may be a glob */
+ if (i->mode_set)
+@@ -669,6 +611,7 @@ static int create_item(Item *i) {
+ switch (i->type) {
+
+ case IGNORE_PATH:
++ case IGNORE_DIRECTORY_PATH:
+ case REMOVE_PATH:
+ case RECURSIVE_REMOVE_PATH:
+ return 0;
+@@ -852,6 +795,7 @@ static int remove_item_instance(Item *i, const char *instance) {
+ case CREATE_BLOCK_DEVICE:
+ case CREATE_CHAR_DEVICE:
+ case IGNORE_PATH:
++ case IGNORE_DIRECTORY_PATH:
+ case RELABEL_PATH:
+ case RECURSIVE_RELABEL_PATH:
+ case WRITE_FILE:
+@@ -896,6 +840,7 @@ static int remove_item(Item *i) {
+ case CREATE_CHAR_DEVICE:
+ case CREATE_BLOCK_DEVICE:
+ case IGNORE_PATH:
++ case IGNORE_DIRECTORY_PATH:
+ case RELABEL_PATH:
+ case RECURSIVE_RELABEL_PATH:
+ case WRITE_FILE:
+@@ -911,6 +856,84 @@ static int remove_item(Item *i) {
+ return r;
+ }
+
++static int clean_item_instance(Item *i, const char* instance) {
++ DIR *d;
++ struct stat s, ps;
++ bool mountpoint;
++ int r;
++ usec_t cutoff, n;
++
++ assert(i);
++
++ if (!i->age_set)
++ return 0;
++
++ n = now(CLOCK_REALTIME);
++ if (n < i->age)
++ return 0;
++
++ cutoff = n - i->age;
++
++ d = opendir(instance);
++ if (!d) {
++ if (errno == ENOENT || errno == ENOTDIR)
++ return 0;
++
++ log_error("Failed to open directory %s: %m", i->path);
++ return -errno;
++ }
++
++ if (fstat(dirfd(d), &s) < 0) {
++ log_error("stat(%s) failed: %m", i->path);
++ r = -errno;
++ goto finish;
++ }
++
++ if (!S_ISDIR(s.st_mode)) {
++ log_error("%s is not a directory.", i->path);
++ r = -ENOTDIR;
++ goto finish;
++ }
++
++ if (fstatat(dirfd(d), "..", &ps, AT_SYMLINK_NOFOLLOW) != 0) {
++ log_error("stat(%s/..) failed: %m", i->path);
++ r = -errno;
++ goto finish;
++ }
++
++ mountpoint = s.st_dev != ps.st_dev ||
++ (s.st_dev == ps.st_dev && s.st_ino == ps.st_ino);
++
++ r = dir_cleanup(i, instance, d, &s, cutoff, s.st_dev, mountpoint, MAX_DEPTH, i->keep_first_level);
++
++finish:
++ if (d)
++ closedir(d);
++
++ return r;
++}
++
++static int clean_item(Item *i) {
++ int r = 0;
++
++ assert(i);
++
++ switch (i->type) {
++ case CREATE_DIRECTORY:
++ case TRUNCATE_DIRECTORY:
++ case IGNORE_PATH:
++ clean_item_instance(i, i->path);
++ break;
++ case IGNORE_DIRECTORY_PATH:
++ r = glob_item(i, clean_item_instance);
++ break;
++ default:
++ break;
++ }
++
++ return r;
++}
++
+ static int process_item(Item *i) {
+ int r, q, p;
+
+@@ -1030,6 +1053,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
+ case TRUNCATE_DIRECTORY:
+ case CREATE_FIFO:
+ case IGNORE_PATH:
++ case IGNORE_DIRECTORY_PATH:
+ case REMOVE_PATH:
+ case RECURSIVE_REMOVE_PATH:
+ case RELABEL_PATH:
+@@ -1266,6 +1290,8 @@ static int read_config_file(const char *fn, bool ignore_enoent) {
+ FILE *f;
+ unsigned v = 0;
+ int r = 0;
++ Iterator iterator;
++ Item *i;
+
+ assert(fn);
+
+@@ -1298,6 +1324,34 @@ static int read_config_file(const char *fn, bool ignore_enoent) {
+ r = k;
+ }
+
++ /* we have to determine age parameter for each entry of type X */
++ HASHMAP_FOREACH(i, globs, iterator) {
++ Iterator iter;
++ Item *j, *candidate_item = NULL;
++
++ if (i->type != IGNORE_DIRECTORY_PATH)
++ continue;
++
++ HASHMAP_FOREACH(j, items, iter) {
++ if (j->type != CREATE_DIRECTORY && j->type != TRUNCATE_DIRECTORY)
++ continue;
++
++ if (path_equal(j->path, i->path)) {
++ candidate_item = j;
++ break;
++ }
++
++ if ((!candidate_item && path_startswith(i->path, j->path)) ||
++ (candidate_item && path_startswith(j->path, candidate_item->path) && (fnmatch(i->path, j->path, FNM_PATHNAME | FNM_PERIOD) == 0)))
++ candidate_item = j;
++ }
++
++ if (candidate_item) {
++ i->age = candidate_item->age;
++ i->age_set = true;
++ }
++ }
++
+ if (ferror(f)) {
+ log_error("Failed to read from file %s: %m", fn);
+ if (r == 0)
diff --git a/0068-job-fix-merging-with-ignore-dependencies.patch b/0068-job-fix-merging-with-ignore-dependencies.patch
new file mode 100644
index 0000000..b6ae6d4
--- /dev/null
+++ b/0068-job-fix-merging-with-ignore-dependencies.patch
@@ -0,0 +1,24 @@
+From 9b0866e90559157262eaae33049691e9ed66ad37 Mon Sep 17 00:00:00 2001
+From: Michal Schmidt <mschmidt at redhat.com>
+Date: Fri, 25 Jan 2013 19:54:21 +0100
+Subject: [PATCH] job: fix merging with --ignore-dependencies
+
+This fixes a bug where a job with --ignore-dependencies would wait for
+other jobs because it merged into a previously queued job.
+(cherry picked from commit e45460d666512db4f908f86e8722d7932dcf0f82)
+---
+ src/core/job.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/core/job.c b/src/core/job.c
+index 31ab118..3279fda 100644
+--- a/src/core/job.c
++++ b/src/core/job.c
+@@ -166,6 +166,7 @@ static void job_merge_into_installed(Job *j, Job *other) {
+ assert(other->type == JOB_NOP);
+
+ j->override = j->override || other->override;
++ j->ignore_order = j->ignore_order || other->ignore_order;
+ }
+
+ Job* job_install(Job *j) {
diff --git a/0069-nspawn-assume-stdout-is-always-writable-if-it-does-n.patch b/0069-nspawn-assume-stdout-is-always-writable-if-it-does-n.patch
new file mode 100644
index 0000000..1ff40f4
--- /dev/null
+++ b/0069-nspawn-assume-stdout-is-always-writable-if-it-does-n.patch
@@ -0,0 +1,39 @@
+From 977da434f08bb1e7125b367420f46fa2586b7d43 Mon Sep 17 00:00:00 2001
+From: Michal Schmidt <mschmidt at redhat.com>
+Date: Sat, 26 Jan 2013 00:16:13 +0100
+Subject: [PATCH] nspawn: assume stdout is always writable if it does not
+ support epoll
+
+stdout can be redirected to a regular file. Regular files don't support epoll.
+nspawn failed with: "Failed to register fds in epoll: Operation not permitted".
+
+If stdout does not support epoll, assume it's always writable.
+(cherry picked from commit f2956e80c99cd41ca6bbbe41b09e01b234ca8778)
+---
+ src/nspawn/nspawn.c | 13 +++++++++++--
+ 1 file changed, 11 insertions(+), 2 deletions(-)
+
+diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
+index 44557f6..67f26a9 100644
+--- a/src/nspawn/nspawn.c
++++ b/src/nspawn/nspawn.c
+@@ -876,8 +876,17 @@ static int process_pty(int master, pid_t pid, sigset_t *mask) {
+ signal_ev.events = EPOLLIN;
+ signal_ev.data.fd = signal_fd;
+
+- if (epoll_ctl(ep, EPOLL_CTL_ADD, STDOUT_FILENO, &stdout_ev) < 0 ||
+- epoll_ctl(ep, EPOLL_CTL_ADD, master, &master_ev) < 0 ||
++ if (epoll_ctl(ep, EPOLL_CTL_ADD, STDOUT_FILENO, &stdout_ev) < 0) {
++ if (errno != EPERM) {
++ log_error("Failed to register stdout in epoll: %m");
++ r = -errno;
++ goto finish;
++ }
++ /* stdout without epoll support. Likely redirected to regular file. */
++ stdout_writable = true;
++ }
++
++ if (epoll_ctl(ep, EPOLL_CTL_ADD, master, &master_ev) < 0 ||
+ epoll_ctl(ep, EPOLL_CTL_ADD, signal_fd, &signal_ev) < 0) {
+ log_error("Failed to register fds in epoll: %m");
+ r = -errno;
diff --git a/0070-man-mention-that-PrivateTmp-means-var-tmp-too.patch b/0070-man-mention-that-PrivateTmp-means-var-tmp-too.patch
new file mode 100644
index 0000000..777f9b0
--- /dev/null
+++ b/0070-man-mention-that-PrivateTmp-means-var-tmp-too.patch
@@ -0,0 +1,36 @@
+From 0e53b4b6e13268747f21f378aeddd9165405a272 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Fri, 25 Jan 2013 14:25:43 -0500
+Subject: [PATCH] man: mention that PrivateTmp means /var/tmp too (cherry
+ picked from commit 652d0dd7097984801fca0378b762bf96e8fda029)
+
+---
+ man/systemd.exec.xml | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
+index d196c04..7747df7 100644
+--- a/man/systemd.exec.xml
++++ b/man/systemd.exec.xml
+@@ -1094,15 +1094,17 @@
+ <listitem><para>Takes a boolean
+ argument. If true sets up a new file
+ system namespace for the executed
+- processes and mounts a private
+- <filename>/tmp</filename> directory
+- inside it, that is not shared by
++ processes and mounts private
++ <filename>/tmp</filename> and
++ <filename>/var/tmp</filename> directories
++ inside it, that are not shared by
+ processes outside of the
+ namespace. This is useful to secure
+ access to temporary files of the
+ process, but makes sharing between
+ processes via
+- <filename>/tmp</filename>
++ <filename>/tmp</filename> or
++ <filename>/var/tmp</filename>
+ impossible. Defaults to
+ false.</para></listitem>
+ </varlistentry>
diff --git a/0071-keymap-Add-support-for-the-brower-hotkey-on-the-HP-P.patch b/0071-keymap-Add-support-for-the-brower-hotkey-on-the-HP-P.patch
new file mode 100644
index 0000000..12f0b54
--- /dev/null
+++ b/0071-keymap-Add-support-for-the-brower-hotkey-on-the-HP-P.patch
@@ -0,0 +1,24 @@
+From f881e306873dfe9deead58c73e6fde3b759e720c Mon Sep 17 00:00:00 2001
+From: Ayan George <ayan.george at canonical.com>
+Date: Mon, 28 Jan 2013 07:30:01 +0100
+Subject: [PATCH] keymap: Add support for the brower hotkey on the HP ProBook
+
+https://bugs.launchpad.net/bugs/1105191
+(cherry picked from commit c437b20d6efcbd14b086b93de8633d3c23eee811)
+---
+ src/udev/keymap/95-keymap.rules | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/udev/keymap/95-keymap.rules b/src/udev/keymap/95-keymap.rules
+index 347b5a1..945b131 100644
+--- a/src/udev/keymap/95-keymap.rules
++++ b/src/udev/keymap/95-keymap.rules
+@@ -96,7 +96,7 @@ ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*2510p*|*2530p
+ ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[tT][xX]2*", RUN+="keymap $name hewlett-packard-tx2"
+ ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="Presario 2100*", RUN+="keymap $name hewlett-packard-presario-2100"
+ ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP G62 Notebook PC", RUN+="keymap $name 0xB2 www"
+-ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP ProBook*", RUN+="keymap $name 0xF8 rfkill"
++ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP ProBook*", RUN+="keymap $name 0xF8 rfkill 0xB2 www"
+ ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP EliteBook 8440p", RUN+="keymap $name hewlett-packard_elitebook-8440p"
+ # HP Pavillion dv6315ea has empty DMI_VENDOR
+ ATTR{[dmi/id]board_vendor}=="Quanta", ATTR{[dmi/id]board_name}=="30B7", ATTR{[dmi/id]board_version}=="65.2B", RUN+="keymap $name 0x88 media" # "quick play
diff --git a/0072-keymap-Add-HP-HDX-9494NR.patch b/0072-keymap-Add-HP-HDX-9494NR.patch
new file mode 100644
index 0000000..4a49196
--- /dev/null
+++ b/0072-keymap-Add-HP-HDX-9494NR.patch
@@ -0,0 +1,63 @@
+From 56ab9106d1a8acaa94ae86546a897a9a923e1261 Mon Sep 17 00:00:00 2001
+From: Martin Pitt <martinpitt at gnome.org>
+Date: Mon, 28 Jan 2013 07:41:36 +0100
+Subject: [PATCH] keymap: Add HP HDX 9494NR
+
+Add touchpad and www keys.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=757928
+(cherry picked from commit 4dbcb1b3bada9632ca3ea763a8d8cf0ffcbc25d5)
+---
+ Makefile.am | 1 +
+ keymaps/hewlett-packard-hdx9494nr | 3 +++
+ src/udev/keymap/95-keyboard-force-release.rules | 2 +-
+ src/udev/keymap/95-keymap.rules | 1 +
+ 4 files changed, 6 insertions(+), 1 deletion(-)
+ create mode 100644 keymaps/hewlett-packard-hdx9494nr
+
+diff --git a/Makefile.am b/Makefile.am
+index 1413073..c5ff79d 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -2342,6 +2342,7 @@ dist_udevkeymap_DATA = \
+ keymaps/hewlett-packard-tablet \
+ keymaps/hewlett-packard-tx2 \
+ keymaps/hewlett-packard_elitebook-8440p \
++ keymaps/hewlett-packard-hdx9494nr \
+ keymaps/ibm-thinkpad-usb-keyboard-trackpoint \
+ keymaps/inventec-symphony_6.0_7.0 \
+ keymaps/lenovo-3000 \
+diff --git a/keymaps/hewlett-packard-hdx9494nr b/keymaps/hewlett-packard-hdx9494nr
+new file mode 100644
+index 0000000..f3484e1
+--- /dev/null
++++ b/keymaps/hewlett-packard-hdx9494nr
+@@ -0,0 +1,3 @@
++0xB2 www # FnF3
++0xD8 f22 # touchpad off
++0xD9 f23 # touchpad on
+diff --git a/src/udev/keymap/95-keyboard-force-release.rules b/src/udev/keymap/95-keyboard-force-release.rules
+index f97a022..3e33e85 100644
+--- a/src/udev/keymap/95-keyboard-force-release.rules
++++ b/src/udev/keymap/95-keyboard-force-release.rules
+@@ -42,7 +42,7 @@ ENV{DMI_VENDOR}=="Viooo Corporation", ATTR{[dmi/id]product_name}=="PT17", RUN+="
+ # These are all the HP laptops that setup a touchpad toggle key
+ ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[pP][aA][vV][iI][lL][iI][oO][nN]*", RUN+="keyboard-force-release.sh $devpath hp-other"
+ ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[tT][xX]2*", RUN+="keyboard-force-release.sh $devpath hp-other"
+-ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*2510p*|*2530p*|HP G60 Notebook PC", RUN+="keyboard-force-release.sh $devpath hp-other"
++ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*2510p*|*2530p*|HP G60 Notebook PC|HDX9494NR", RUN+="keyboard-force-release.sh $devpath hp-other"
+
+ ENV{DMI_VENDOR}=="Zepto", ATTR{[dmi/id]product_name}=="Znote 6615WD", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
+
+diff --git a/src/udev/keymap/95-keymap.rules b/src/udev/keymap/95-keymap.rules
+index 945b131..a13063e 100644
+--- a/src/udev/keymap/95-keymap.rules
++++ b/src/udev/keymap/95-keymap.rules
+@@ -98,6 +98,7 @@ ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="Presario 2100*"
+ ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP G62 Notebook PC", RUN+="keymap $name 0xB2 www"
+ ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP ProBook*", RUN+="keymap $name 0xF8 rfkill 0xB2 www"
+ ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HP EliteBook 8440p", RUN+="keymap $name hewlett-packard_elitebook-8440p"
++ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="HDX9494NR", RUN+="keymap $name hewlett-packard-hdx9494nr"
+ # HP Pavillion dv6315ea has empty DMI_VENDOR
+ ATTR{[dmi/id]board_vendor}=="Quanta", ATTR{[dmi/id]board_name}=="30B7", ATTR{[dmi/id]board_version}=="65.2B", RUN+="keymap $name 0x88 media" # "quick play
+
diff --git a/0073-keymap-Add-HP-HDX-9494NR-Fix-touchpad-keys.patch b/0073-keymap-Add-HP-HDX-9494NR-Fix-touchpad-keys.patch
new file mode 100644
index 0000000..b2958fb
--- /dev/null
+++ b/0073-keymap-Add-HP-HDX-9494NR-Fix-touchpad-keys.patch
@@ -0,0 +1,23 @@
+From e739715f7ddc8f748845ef8c95c9e35780e3cedd Mon Sep 17 00:00:00 2001
+From: Martin Pitt <martinpitt at gnome.org>
+Date: Mon, 28 Jan 2013 16:21:51 +0100
+Subject: [PATCH] keymap: Add HP HDX 9494NR: Fix touchpad keys
+
+Previous commit had them the wrong way around.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=757928
+(cherry picked from commit 5b56ba707fcd0242d79264c7064563cc8ad81977)
+---
+ keymaps/hewlett-packard-hdx9494nr | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/keymaps/hewlett-packard-hdx9494nr b/keymaps/hewlett-packard-hdx9494nr
+index f3484e1..9221787 100644
+--- a/keymaps/hewlett-packard-hdx9494nr
++++ b/keymaps/hewlett-packard-hdx9494nr
+@@ -1,3 +1,3 @@
+ 0xB2 www # FnF3
+-0xD8 f22 # touchpad off
+-0xD9 f23 # touchpad on
++0xD8 f23 # touchpad off
++0xD9 f22 # touchpad on
diff --git a/systemd.spec b/systemd.spec
index 8e12b63..c5fa21e 100644
--- a/systemd.spec
+++ b/systemd.spec
@@ -14,7 +14,7 @@ Name: systemd
Url: http://www.freedesktop.org/wiki/Software/systemd
Version: 197
-Release: 1%{?gitcommit:.git%{gitcommit}}%{?dist}.1
+Release: 1%{?gitcommit:.git%{gitcommit}}%{?dist}.2
# For a breakdown of the licensing, see README
License: LGPLv2+ and MIT and GPLv2+
Summary: A System and Service Manager
@@ -90,6 +90,69 @@ Patch0009: 0009-man-systemd-bootchart.xml-fix-typo.patch
Patch0010: 0010-man-systemd.unit.xml-fix-typos.patch
Patch0011: 0011-dbus-properly-serialize-calendar-timer-data.patch
Patch0012: 0012-udev-Fix-device-matching-in-the-accelerometer.patch
+# Revert more incompatibilities
+Patch0013: 0013-F18-Revert-udev-network-device-renaming-immediately-.patch
+Patch0014: 0014-F18-Revert-udev-set-device-node-permissions-only-at-.patch
+
+Patch0015: 0015-systemctl-honour-inhibitors-when-shutting-down-or-en.patch
+Patch0016: 0016-man-localectl-s-set-keyboard-set-keymap.patch
+Patch0017: 0017-locale-make-sense-of-dvorak-alt-intel-X-variant-in-m.patch
+Patch0018: 0018-core-document-that-JoinControllers-might-be-ineffect.patch
+Patch0019: 0019-service-for-Type-forking-services-ignore-exit-status.patch
+Patch0020: 0020-systemctl-don-t-hit-an-assert-if-we-try-to-reboot-an.patch
+Patch0021: 0021-systemctl-honour-inhibitors-only-when-running-unpriv.patch
+Patch0022: 0022-logind-ignore-non-tty-non-x11-session-when-checking-.patch
+Patch0023: 0023-vconsole-upload-font-to-dev-tty1-and-copy-it-to-all-.patch
+Patch0024: 0024-man-link-in-wiki-documentation-about-network.target.patch
+Patch0025: 0025-man-link-in-API-FS-documentation-from-the-wiki.patch
+Patch0026: 0026-vconsole-copy-font-to-tty1-15.patch
+Patch0027: 0027-localectl-fix-typo-in-man-page.patch
+Patch0028: 0028-man-correct-order-of-precedence-for-fstab-units.patch
+Patch0029: 0029-units-add-reference-to-new-wiki-page-to-all-api-moun.patch
+Patch0030: 0030-man-add-reference-to-wiki-doc-from-DefaultController.patch
+Patch0031: 0031-vconsole-use-dev-vcsa1-15-to-check-for-allocated-VTs.patch
+Patch0032: 0032-core-use-correct-argument-of-type-JobResult.patch
+Patch0033: 0033-journalctl-quit-on-I-O-error.patch
+Patch0034: 0034-core-do-not-make-sockets-dependent-on-lo.patch
+Patch0035: 0035-load-fragment-replace-specifiers-in-path-unit-s-Unit.patch
+Patch0036: 0036-load-fragment-fix-bad-memory-access.patch
+Patch0037: 0037-shutdown-in-the-final-umount-loop-don-t-use-MNT_FORC.patch
+Patch0038: 0038-shutdown-ignore-loop-devices-without-a-backing-file.patch
+Patch0039: 0039-systemctl-loginctl-cgls-do-not-ellipsize-cgroup-memb.patch
+Patch0040: 0040-man-typo-fixes.patch
+Patch0041: 0041-dbus-add-Unit-s-PartOf-and-ConsistsOf-deps-to-intros.patch
+Patch0042: 0042-units-for-all-unit-settings-that-take-lists-allow-th.patch
+Patch0043: 0043-service-properly-signal-permanent-failure-of-a-servi.patch
+Patch0044: 0044-util-fix-bad-memory-access.patch
+Patch0045: 0045-hwdb-update.patch
+Patch0046: 0046-nspawn-add-audit-caps-to-default-set-to-keep.patch
+Patch0047: 0047-man-update-suggested-yum-command-line-in-nspawn-1.patch
+Patch0048: 0048-tmpfiles-do-not-make-run-nologin-executable.patch
+Patch0049: 0049-shutdown-loop-convert-to-enumerate-match.patch
+Patch0050: 0050-Fix-some-typos.patch
+Patch0051: 0051-man-clearify-the-meaning-of-timeout-0-for-password-a.patch
+Patch0052: 0052-configure.ac-combine-Wformat-options-into-one-argume.patch
+Patch0053: 0053-logind-only-allow-one-shutdown-sleep-action-to-be-qu.patch
+Patch0054: 0054-hwdb-update.patch
+Patch0055: 0055-service-really-stop-watchdog-timer-when-stopping.patch
+Patch0056: 0056-service-make-sure-the-watchdog-timer-is-not-restarte.patch
+Patch0057: 0057-core-Set-source-for-mountinfo-.mount-units.patch
+Patch0058: 0058-man-systemd.exec-explicit-Environment-assignment.patch
+Patch0059: 0059-man-mention-proc-self-mountinfo-in-systemd.mount-5.patch
+Patch0060: 0060-selinux-access-Delete-debugging-message-logged-as-an.patch
+Patch0061: 0061-selinux-we-don-t-need-that-many-debug-messages-by-de.patch
+Patch0062: 0062-logind-send-Resumed-signal-after-we-come-back-from-s.patch
+Patch0063: 0063-logind-add-UnlockSessions-clal-to-complement-LockSes.patch
+Patch0064: 0064-loginctl-show-seat-master-and-uaccess-devices-in-sea.patch
+Patch0065: 0065-loginctl-don-t-show-UACCESS-info-in-device-tree.patch
+Patch0066: 0066-logind-rework-delay-inhibition-logic.patch
+Patch0067: 0067-tmpfiles-introduce-type-X.patch
+Patch0068: 0068-job-fix-merging-with-ignore-dependencies.patch
+Patch0069: 0069-nspawn-assume-stdout-is-always-writable-if-it-does-n.patch
+Patch0070: 0070-man-mention-that-PrivateTmp-means-var-tmp-too.patch
+Patch0071: 0071-keymap-Add-support-for-the-brower-hotkey-on-the-HP-P.patch
+Patch0072: 0072-keymap-Add-HP-HDX-9494NR.patch
+Patch0073: 0073-keymap-Add-HP-HDX-9494NR-Fix-touchpad-keys.patch
Obsoletes: SysVinit < 2.86-24, sysvinit < 2.86-24
Provides: SysVinit = 2.86-24, sysvinit = 2.86-24
@@ -730,6 +793,12 @@ fi
%{_libdir}/pkgconfig/gudev-1.0*
%changelog
+* Mon Jan 28 2013 Michal Schmidt <mschmidt at redhat.com> - 197-1.fc18.2
+- Revert a couple of patches causing surprising breakage.
+- Resolves: #896135, #903716
+- Pick more post-v197 fixes and minor enhancements from upstream.
+- Resolves: #873634, #875531, #860464, #889624, #890827, #756787, #757928
+
* Sat Jan 12 2013 Michal Schmidt <mschmidt at redhat.com> - 197-1.fc18.1
- Pick post-v197 fixes.
More information about the scm-commits
mailing list