[systemd-commits] stable Branch 'v216-stable' - 155 commits - catalog/systemd.fr.catalog configure.ac .gitignore hwdb/20-bluetooth-vendor-product.hwdb hwdb/20-OUI.hwdb hwdb/20-pci-vendor-model.hwdb hwdb/20-usb-vendor-model.hwdb hwdb/60-keyboard.hwdb Makefile.am Makefile-man.am man/bootup.xml man/coredump.conf.xml man/hostnamectl.xml man/loginctl.xml man/logind.conf.xml man/os-release.xml man/sd_bus_open_user.xml man/sd_event_add_child.xml man/sd_event_add_signal.xml man/sd_watchdog_enabled.xml man/systemctl.xml man/systemd-analyze.xml man/systemd.exec.xml man/systemd.link.xml man/systemd-modules-load.service.xml man/systemd.mount.xml man/systemd.netdev.xml man/systemd-networkd.service.xml man/systemd.network.xml man/systemd-nspawn.xml man/systemd.service.xml man/systemd.swap.xml man/systemd-sysv-generator.xml man/systemd.unit.xml man/systemd.xml README shell-completion/bash shell-completion/zsh src/core src/dbus1-generator src/delta src/fstab-generator src/gpt-auto-generator src/hostname src/ journal src/journal-remote src/libsystemd src/libsystemd-network src/libudev src/login src/network src/nspawn src/quotacheck src/resolve src/run src/shared src/systemctl src/systemd src/sysusers src/sysv-generator src/test src/tmpfiles src/udev src/vconsole units/container-getty at .service.m4.in units/dev-hugepages.mount units/systemd-journald.service.in units/systemd-journal-gatewayd.service.in units/systemd-journal-upload.service.in

Zbigniew Jędrzejewski-Szmek zbyszek at kemper.freedesktop.org
Mon Jan 19 11:38:36 PST 2015


 .gitignore                                  |    1 
 Makefile-man.am                             |   10 
 Makefile.am                                 |   15 
 README                                      |    2 
 catalog/systemd.fr.catalog                  |    4 
 configure.ac                                |    5 
 hwdb/20-OUI.hwdb                            | 1083 +++++++++++++++++++
 hwdb/20-bluetooth-vendor-product.hwdb       |  106 +
 hwdb/20-pci-vendor-model.hwdb               | 1520 +++++++++++++++++++++++-----
 hwdb/20-usb-vendor-model.hwdb               |  704 ++++++++++++
 hwdb/60-keyboard.hwdb                       |   15 
 man/bootup.xml                              |    7 
 man/coredump.conf.xml                       |    2 
 man/hostnamectl.xml                         |    1 
 man/loginctl.xml                            |   15 
 man/logind.conf.xml                         |    6 
 man/os-release.xml                          |   19 
 man/sd_bus_open_user.xml                    |    4 
 man/sd_event_add_child.xml                  |    2 
 man/sd_event_add_signal.xml                 |    2 
 man/sd_watchdog_enabled.xml                 |    2 
 man/systemctl.xml                           |   88 +
 man/systemd-analyze.xml                     |    4 
 man/systemd-modules-load.service.xml        |    4 
 man/systemd-networkd.service.xml            |    2 
 man/systemd-nspawn.xml                      |    2 
 man/systemd-sysv-generator.xml              |   99 +
 man/systemd.exec.xml                        |   93 +
 man/systemd.link.xml                        |    6 
 man/systemd.mount.xml                       |   34 
 man/systemd.netdev.xml                      |    1 
 man/systemd.network.xml                     |    1 
 man/systemd.service.xml                     |    4 
 man/systemd.swap.xml                        |   37 
 man/systemd.unit.xml                        |   29 
 man/systemd.xml                             |    2 
 shell-completion/bash/journalctl            |    2 
 shell-completion/zsh/_coredumpctl           |    3 
 shell-completion/zsh/_sd_outputmodes        |    2 
 shell-completion/zsh/_systemctl.in          |    1 
 shell-completion/zsh/_systemd-analyze       |   14 
 shell-completion/zsh/_systemd-tmpfiles      |    5 
 shell-completion/zsh/_timedatectl           |    1 
 src/core/build.h                            |    2 
 src/core/cgroup.c                           |   47 
 src/core/dbus-manager.c                     |    4 
 src/core/dbus.c                             |    7 
 src/core/execute.c                          |  117 +-
 src/core/job.c                              |    3 
 src/core/job.h                              |   14 
 src/core/load-fragment.c                    |    7 
 src/core/loopback-setup.c                   |    2 
 src/core/main.c                             |   74 +
 src/core/manager.c                          |   29 
 src/core/mount.c                            |   62 -
 src/core/selinux-access.h                   |    2 
 src/core/selinux-setup.c                    |    2 
 src/core/shutdown.c                         |   19 
 src/core/swap.c                             |   87 -
 src/core/timer.c                            |    6 
 src/core/unit.c                             |   21 
 src/dbus1-generator/dbus1-generator.c       |    1 
 src/delta/delta.c                           |    4 
 src/fstab-generator/fstab-generator.c       |   69 -
 src/gpt-auto-generator/gpt-auto-generator.c |    4 
 src/hostname/hostnamectl.c                  |    2 
 src/journal-remote/journal-upload.c         |    5 
 src/journal/journal-file.c                  |    2 
 src/journal/journalctl.c                    |   15 
 src/journal/journald-native.c               |    4 
 src/journal/sd-journal.c                    |   54 
 src/libsystemd-network/network-internal.c   |    8 
 src/libsystemd-network/sd-dhcp-client.c     |   31 
 src/libsystemd-network/sd-dhcp-lease.c      |    2 
 src/libsystemd-network/test-dhcp-option.c   |    4 
 src/libsystemd/sd-bus/bus-objects.c         |   10 
 src/libsystemd/sd-bus/bus-util.c            |   19 
 src/libsystemd/sd-rtnl/rtnl-message.c       |    5 
 src/libudev/libudev-device.c                |    9 
 src/libudev/libudev-hwdb.c                  |    2 
 src/login/inhibit.c                         |   10 
 src/login/loginctl.c                        |    2 
 src/network/networkd-netdev-veth.c          |    2 
 src/nspawn/nspawn.c                         |   12 
 src/quotacheck/quotacheck.c                 |    5 
 src/resolve/resolved.c                      |    2 
 src/run/run.c                               |    7 
 src/shared/cgroup-util.c                    |    2 
 src/shared/fstab-util.c                     |  147 ++
 src/shared/fstab-util.h                     |   34 
 src/shared/generator.c                      |   41 
 src/shared/install.c                        |   15 
 src/shared/linux/fanotify.h                 |   98 +
 src/shared/macro.h                          |    4 
 src/shared/missing.h                        |   69 +
 src/shared/path-util.c                      |   14 
 src/shared/path-util.h                      |    2 
 src/shared/selinux-util.c                   |   16 
 src/shared/selinux-util.h                   |    2 
 src/shared/set.c                            |    2 
 src/shared/time-dst.c                       |    2 
 src/shared/unit-name.c                      |   87 -
 src/shared/unit-name.h                      |    4 
 src/shared/utf8.c                           |    8 
 src/shared/util.c                           |   47 
 src/shared/util.h                           |    6 
 src/shared/virt.c                           |   22 
 src/systemctl/systemctl.c                   |   51 
 src/systemd/sd-journal.h                    |   10 
 src/sysusers/sysusers.c                     |    3 
 src/sysv-generator/sysv-generator.c         |   49 
 src/test/test-fstab-util.c                  |  129 ++
 src/test/test-path-util.c                   |   16 
 src/test/test-strv.c                        |   31 
 src/test/test-util.c                        |   49 
 src/tmpfiles/tmpfiles.c                     |   36 
 src/udev/accelerometer/accelerometer.c      |    2 
 src/udev/cdrom_id/cdrom_id.c                |   10 
 src/udev/collect/collect.c                  |    2 
 src/udev/udev-builtin-blkid.c               |   13 
 src/udev/udev-builtin-input_id.c            |    8 
 src/udev/udev-rules.c                       |   14 
 src/udev/udevadm-hwdb.c                     |    4 
 src/udev/udevadm-settle.c                   |   19 
 src/udev/udevd.c                            |    4 
 src/vconsole/90-vconsole.rules              |   11 
 src/vconsole/vconsole-setup.c               |    4 
 units/container-getty at .service.m4.in        |    1 
 units/dev-hugepages.mount                   |    1 
 units/systemd-journal-gatewayd.service.in   |    4 
 units/systemd-journal-upload.service.in     |    4 
 units/systemd-journald.service.in           |    5 
 132 files changed, 4839 insertions(+), 1017 deletions(-)

New commits:
commit 5b9f8f0a472c96002360e65eec3e9c07a345a893
Author: Ray Strode <rstrode at redhat.com>
Date:   Wed Nov 5 08:30:52 2014 -0500

    login: rerun vconsole-setup when switching from vgacon to fbcon
    
    The initialization performed by systemd-vconsole-setup is reset
    when changing console drivers (say from vgacon to fbcon), so we
    need to run it in that case.
    
    See
    http://lists.freedesktop.org/archives/systemd-devel/2014-October/023919.html
    http://lists.freedesktop.org/archives/systemd-devel/2014-October/024423.html
    http://lists.freedesktop.org/archives/systemd-devel/2014-November/024881.html
    
    This commit adds a udev rule to make systemd-vconsole-setup get run when
    the fbcon device becomes available.
    
    (david: moved into new file 90-vconsole.rules instead of 71-seats.rules;
            build-failures are on me, not on Ray)
    
    (cherry picked from commit f6ba8671d83f9fce9a00045d8fa399a1c07ba7fc)

diff --git a/Makefile.am b/Makefile.am
index 4101949..d057fcb 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -4414,6 +4414,9 @@ rootlibexec_PROGRAMS += \
 nodist_systemunit_DATA += \
 	units/systemd-vconsole-setup.service
 
+dist_udevrules_DATA += \
+	src/vconsole/90-vconsole.rules
+
 SYSINIT_TARGET_WANTS += \
 	systemd-vconsole-setup.service
 endif
diff --git a/src/vconsole/90-vconsole.rules b/src/vconsole/90-vconsole.rules
new file mode 100644
index 0000000..bf6a9ef
--- /dev/null
+++ b/src/vconsole/90-vconsole.rules
@@ -0,0 +1,11 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+# Kernel resets vconsole state when changing console drivers so run
+# systemd-vconsole-setup when fbcon loads
+
+ACTION=="add", SUBSYSTEM=="graphics", KERNEL=="fbcon", RUN+="/usr/lib/systemd/systemd-vconsole-setup"

commit f14dd032d058427b90681846036f4ea5c353b8e4
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Fri Jan 16 00:45:24 2015 -0500

    manager: print fatal errors on the console too
    
    When booting in quiet mode, fatal messages would not be shown at all to the user.
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1155468
    
    (cherry-picked from cb6531bee6e6f66c3a9d85b24fed68fae7fad6ad)

diff --git a/src/core/main.c b/src/core/main.c
index 912b3ff..face753 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -1245,6 +1245,7 @@ int main(int argc, char *argv[]) {
         bool empty_etc = false;
         char *switch_root_dir = NULL, *switch_root_init = NULL;
         static struct rlimit saved_rlimit_nofile = { 0, 0 };
+        const char *error_message = NULL;
 
 #ifdef HAVE_SYSV_COMPAT
         if (getpid() != 1 && strstr(program_invocation_short_name, "init")) {
@@ -1303,17 +1304,23 @@ int main(int argc, char *argv[]) {
                 if (!skip_setup) {
                         mount_setup_early();
                         dual_timestamp_get(&security_start_timestamp);
-                        if (mac_selinux_setup(&loaded_policy) < 0)
+                        if (mac_selinux_setup(&loaded_policy) < 0) {
+                                error_message = "Failed to load SELinux policy";
                                 goto finish;
-                        if (ima_setup() < 0)
+                        } else if (ima_setup() < 0) {
+                                error_message = "Failed to load IMA policy";
                                 goto finish;
-                        if (mac_smack_setup(&loaded_policy) < 0)
+                        } else if (mac_smack_setup(&loaded_policy) < 0) {
+                                error_message = "Failed to load SMACK policy";
                                 goto finish;
+                        }
                         dual_timestamp_get(&security_finish_timestamp);
                 }
 
-                if (mac_selinux_init(NULL) < 0)
+                if (mac_selinux_init(NULL) < 0) {
+                        error_message = "Failed to initialize SELinux policy";
                         goto finish;
+                }
 
                 if (!skip_setup) {
                         if (clock_is_localtime() > 0) {
@@ -1389,19 +1396,23 @@ int main(int argc, char *argv[]) {
         r = set_default_unit(SPECIAL_DEFAULT_TARGET);
         if (r < 0) {
                 log_error("Failed to set default unit %s: %s", SPECIAL_DEFAULT_TARGET, strerror(-r));
+                error_message = "Failed to set default unit";
                 goto finish;
         }
 
         r = initialize_join_controllers();
-        if (r < 0)
+        if (r < 0) {
+                error_message = "Failed to initalize cgroup controllers";
                 goto finish;
-
+        }
         /* Mount /proc, /sys and friends, so that /proc/cmdline and
          * /proc/$PID/fd is available. */
         if (getpid() == 1) {
                 r = mount_setup(loaded_policy);
-                if (r < 0)
+                if (r < 0) {
+                        error_message = "Failed to mount API filesystems";
                         goto finish;
+                }
         }
 
         /* Reset all signal handlers. */
@@ -1409,8 +1420,10 @@ int main(int argc, char *argv[]) {
 
         ignore_signals(SIGNALS_IGNORE, -1);
 
-        if (parse_config_file() < 0)
+        if (parse_config_file() < 0) {
+                error_message = "Failed to parse config file";
                 goto finish;
+        }
 
         if (arg_running_as == SYSTEMD_SYSTEM)
                 if (parse_proc_cmdline(parse_proc_cmdline_item) < 0)
@@ -1420,8 +1433,10 @@ int main(int argc, char *argv[]) {
          * line, including "debug". */
         log_parse_environment();
 
-        if (parse_argv(argc, argv) < 0)
+        if (parse_argv(argc, argv) < 0) {
+                error_message = "Failed to parse commandline arguments";
                 goto finish;
+        }
 
         if (arg_action == ACTION_TEST &&
             geteuid() == 0) {
@@ -1478,6 +1493,7 @@ int main(int argc, char *argv[]) {
         r = fdset_new_fill(&fds);
         if (r < 0) {
                 log_error("Failed to allocate fd set: %s", strerror(-r));
+                error_message = "Failed to allocate fd set";
                 goto finish;
         } else
                 fdset_cloexec(fds, true);
@@ -1583,19 +1599,23 @@ int main(int argc, char *argv[]) {
                 r = capability_bounding_set_drop_usermode(arg_capability_bounding_set_drop);
                 if (r < 0) {
                         log_error("Failed to drop capability bounding set of usermode helpers: %s", strerror(-r));
+                        error_message = "Failed to drop capability bounding set of usermode helpers";
                         goto finish;
                 }
                 r = capability_bounding_set_drop(arg_capability_bounding_set_drop, true);
                 if (r < 0) {
                         log_error("Failed to drop capability bounding set: %s", strerror(-r));
+                        error_message = "Failed to drop capability bounding set";
                         goto finish;
                 }
         }
 
         if (arg_syscall_archs) {
                 r = enforce_syscall_archs(arg_syscall_archs);
-                if (r < 0)
+                if (r < 0) {
+                        error_message = "Failed to set syscall architectures";
                         goto finish;
+                }
         }
 
         if (arg_running_as == SYSTEMD_USER) {
@@ -1622,6 +1642,7 @@ int main(int argc, char *argv[]) {
         r = manager_new(arg_running_as, arg_action == ACTION_TEST, &m);
         if (r < 0) {
                 log_error("Failed to allocate manager object: %s", strerror(-r));
+                error_message = "Failed to allocate manager object";
                 goto finish;
         }
 
@@ -1691,12 +1712,15 @@ int main(int argc, char *argv[]) {
                         r = manager_load_unit(m, SPECIAL_RESCUE_TARGET, NULL, &error, &target);
                         if (r < 0) {
                                 log_error("Failed to load rescue target: %s", bus_error_message(&error, r));
+                                 error_message = "Failed to load rescue target";
                                 goto finish;
                         } else if (target->load_state == UNIT_ERROR || target->load_state == UNIT_NOT_FOUND) {
                                 log_error("Failed to load rescue target: %s", strerror(-target->load_error));
+                                 error_message = "Failed to load rescue target";
                                 goto finish;
                         } else if (target->load_state == UNIT_MASKED) {
                                 log_error("Rescue target masked.");
+                                error_message = "Rescue target masked";
                                 goto finish;
                         }
                 }
@@ -1715,10 +1739,12 @@ int main(int argc, char *argv[]) {
                         r = manager_add_job(m, JOB_START, target, JOB_REPLACE, false, &error, &default_unit_job);
                         if (r < 0) {
                                 log_error("Failed to start default target: %s", bus_error_message(&error, r));
+                                error_message = "Failed to start default target";
                                 goto finish;
                         }
                 } else if (r < 0) {
                         log_error("Failed to isolate default target: %s", bus_error_message(&error, r));
+                        error_message = "Failed to isolate default target";
                         goto finish;
                 }
 
@@ -1741,6 +1767,7 @@ int main(int argc, char *argv[]) {
                 r = manager_loop(m);
                 if (r < 0) {
                         log_error("Failed to run mainloop: %s", strerror(-r));
+                        error_message = "Failed to run main loop";
                         goto finish;
                 }
 
@@ -1760,8 +1787,10 @@ int main(int argc, char *argv[]) {
 
                 case MANAGER_REEXECUTE:
 
-                        if (prepare_reexecute(m, &arg_serialization, &fds, false) < 0)
+                        if (prepare_reexecute(m, &arg_serialization, &fds, false) < 0) {
+                                error_message = "Failed to prepare for reexection";
                                 goto finish;
+                        }
 
                         reexecute = true;
                         log_notice("Reexecuting.");
@@ -1774,8 +1803,10 @@ int main(int argc, char *argv[]) {
                         m->switch_root = m->switch_root_init = NULL;
 
                         if (!switch_root_init)
-                                if (prepare_reexecute(m, &arg_serialization, &fds, true) < 0)
+                                if (prepare_reexecute(m, &arg_serialization, &fds, true) < 0) {
+                                        error_message = "Failed to prepare for reexection";
                                         goto finish;
+                                }
 
                         reexecute = true;
                         log_notice("Switching root.");
@@ -2023,8 +2054,13 @@ finish:
                           getpid() == 1 ? "freezing" : "quitting");
         }
 
-        if (getpid() == 1)
+        if (getpid() == 1) {
+                if (error_message)
+                        manager_status_printf(NULL, STATUS_TYPE_EMERGENCY,
+                                              ANSI_HIGHLIGHT_RED_ON "!!!!!!" ANSI_HIGHLIGHT_OFF,
+                                              "%s, freezing.", error_message);
                 freeze();
+        }
 
         return retval;
 }
diff --git a/src/core/manager.c b/src/core/manager.c
index b893990..97f0b14 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -2969,12 +2969,14 @@ void manager_set_first_boot(Manager *m, bool b) {
 void manager_status_printf(Manager *m, StatusType type, const char *status, const char *format, ...) {
         va_list ap;
 
-        if (!manager_get_show_status(m, type))
+        /* If m is NULL, assume we're after shutdown and let the messages through. */
+
+        if (m && !manager_get_show_status(m, type))
                 return;
 
         /* XXX We should totally drop the check for ephemeral here
          * and thus effectively make 'Type=idle' pointless. */
-        if (type == STATUS_TYPE_EPHEMERAL && m->n_on_console > 0)
+        if (type == STATUS_TYPE_EPHEMERAL && m && m->n_on_console > 0)
                 return;
 
         va_start(ap, format);
diff --git a/src/core/selinux-setup.c b/src/core/selinux-setup.c
index 25e22b6..cf3c145 100644
--- a/src/core/selinux-setup.c
+++ b/src/core/selinux-setup.c
@@ -113,7 +113,7 @@ int mac_selinux_setup(bool *loaded_policy) {
 
                 if (enforce > 0) {
                         if (!initialized) {
-                                log_error("Failed to load SELinux policy. Freezing.");
+                                log_error("Failed to load SELinux policy.");
                                 return -EIO;
                         }
 

commit f3093590ab485c98943434812325fc7d87bf83e9
Author: David Herrmann <dh.herrmann at gmail.com>
Date:   Thu Jan 15 12:38:57 2015 +0100

    udev: fix NULL-ptr deref
    
    Make sure we properly validate the return value of
    udev_device_get_sysattr_value(). It might be NULL for several reasons.
    
    (cherry picked from commit 975a900782528b57deafadc10457c7ffab0b9791)

diff --git a/src/udev/udev-builtin-input_id.c b/src/udev/udev-builtin-input_id.c
index 1a1121e..8acd742 100644
--- a/src/udev/udev-builtin-input_id.c
+++ b/src/udev/udev-builtin-input_id.c
@@ -4,6 +4,7 @@
  * Copyright (C) 2009 Martin Pitt <martin.pitt at ubuntu.com>
  * Portions Copyright (C) 2004 David Zeuthen, <david at fubar.dk>
  * Copyright (C) 2011 Kay Sievers <kay at vrfy.org>
+ * Copyright (C) 2014 David Herrmann <dh.herrmann at gmail.com>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -48,12 +49,17 @@ static void get_cap_mask(struct udev_device *dev,
                          struct udev_device *pdev, const char* attr,
                          unsigned long *bitmask, size_t bitmask_size,
                          bool test) {
+        const char *v;
         char text[4096];
         unsigned i;
         char* word;
         unsigned long val;
 
-        snprintf(text, sizeof(text), "%s", udev_device_get_sysattr_value(pdev, attr));
+        v = udev_device_get_sysattr_value(pdev, attr);
+        if (!v)
+                v = "";
+
+        snprintf(text, sizeof(text), "%s", v);
         log_debug("%s raw kernel attribute: %s", attr, text);
 
         memzero(bitmask, bitmask_size);

commit a5ef43743566428d7aa800f6d84ea16b2768b478
Author: Moez Bouhlel <bmoez.j at gmail.com>
Date:   Wed Jan 14 14:33:32 2015 +0000

    fix zsh completion typo
    
    json-see => json-sse
    
    (cherry picked from commit d31f44e2818eb00213ca718e05b9bc624e7bfe3f)

diff --git a/shell-completion/zsh/_sd_outputmodes b/shell-completion/zsh/_sd_outputmodes
index 2ce84a7..3836f79 100644
--- a/shell-completion/zsh/_sd_outputmodes
+++ b/shell-completion/zsh/_sd_outputmodes
@@ -1,5 +1,5 @@
 #autoload
 
 local -a _output_opts
-_output_opts=(short short-iso short-precise short-monotonic verbose export json json-pretty json-see cat)
+_output_opts=(short short-iso short-precise short-monotonic verbose export json json-pretty json-sse cat)
 _describe -t output 'output mode' _output_opts || compadd "$@"

commit 46c3a085f0aa48e832be8ac78d77544e1dc0ca6b
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Jan 14 22:37:56 2015 +0100

    sysv-generator: always use fstatat() if we can
    
    (cherry picked from commit 805e5dda0a01c99d231824e1a9c4a208418bf342)

diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
index 6f87f63..bf49b24 100644
--- a/src/sysv-generator/sysv-generator.c
+++ b/src/sysv-generator/sysv-generator.c
@@ -727,28 +727,34 @@ static int enumerate_sysv(LookupPaths lp, Hashmap *all_services) {
                 }
 
                 while ((de = readdir(d))) {
-                        SysvStub *service;
-                        struct stat st;
                         _cleanup_free_ char *fpath = NULL, *name = NULL;
+                        _cleanup_free_ SysvStub *service = NULL;
+                        struct stat st;
                         int r;
 
                         if (ignore_file(de->d_name))
                                 continue;
 
-                        fpath = strjoin(*path, "/", de->d_name, NULL);
-                        if (!fpath)
-                                return log_oom();
-
-                        if (stat(fpath, &st) < 0)
+                        if (fstatat(dirfd(d), de->d_name, &st, 0) < 0) {
+                                log_warning("stat() failed on %s/%s: %s",
+                                            *path, de->d_name, strerror(-r));
                                 continue;
+                        }
 
                         if (!(st.st_mode & S_IXUSR))
                                 continue;
 
+                        if (!S_ISREG(st.st_mode))
+                                continue;
+
                         name = sysv_translate_name(de->d_name);
                         if (!name)
                                 return log_oom();
 
+                        fpath = strjoin(*path, "/", de->d_name, NULL);
+                        if (!fpath)
+                                return log_oom();
+
                         if (hashmap_contains(all_services, name))
                                 continue;
 
@@ -761,12 +767,11 @@ static int enumerate_sysv(LookupPaths lp, Hashmap *all_services) {
                         service->path = fpath;
 
                         r = hashmap_put(all_services, service->name, service);
-                        if (r < 0) {
-                                free(service);
+                        if (r < 0)
                                 return log_oom();
-                        }
 
                         name = fpath = NULL;
+                        service = NULL;
                 }
         }
 

commit 7bc3b3007e7ebd04f88df6bc2c380a9f6d075190
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Jan 14 22:31:03 2015 +0100

    sysv-generator: fix memory leak on failure
    
    This fixes a memory leak introduced by
    1ed0c19f81fd13cdf283c6def0168ce122a853a9
    
    (cherry picked from commit b3fae863ef548add2d01c3956ce7720f4eeeca7e)

diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
index 101dfdd..6f87f63 100644
--- a/src/sysv-generator/sysv-generator.c
+++ b/src/sysv-generator/sysv-generator.c
@@ -760,13 +760,11 @@ static int enumerate_sysv(LookupPaths lp, Hashmap *all_services) {
                         service->name = name;
                         service->path = fpath;
 
-                        r = load_sysv(service);
-                        if (r < 0)
-                                continue;
-
                         r = hashmap_put(all_services, service->name, service);
-                        if (r < 0)
+                        if (r < 0) {
+                                free(service);
                                 return log_oom();
+                        }
 
                         name = fpath = NULL;
                 }
@@ -948,6 +946,12 @@ int main(int argc, char *argv[]) {
         }
 
         HASHMAP_FOREACH(service, all_services, j) {
+                q = load_sysv(service);
+                if (q < 0)
+                        continue;
+        }
+
+        HASHMAP_FOREACH(service, all_services, j) {
                 q = fix_order(service, all_services);
                 if (q < 0)
                         continue;

commit 1b6db97fa2f5d537f3d2ee894b66df9751918247
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Tue Jan 13 20:05:42 2015 -0500

    man: remove "nofail" from systemd.swap(5)
    
    As suggested by Marcos Felipe Rasia de Mello <marcosfrm at gmail.com>.
    
    (cherry picked from commit b50191c23f4cb6bac1180491b52e1df1e6c79a0f)

diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml
index 1155758..9cc3b80 100644
--- a/man/systemd.swap.xml
+++ b/man/systemd.swap.xml
@@ -139,15 +139,12 @@
 
                   <varlistentry>
                     <term><option>nofail</option></term>
-                    <term><option>fail</option></term>
 
                     <listitem><para>With <option>nofail</option> the
                     swap unit will be only wanted, not required by
                     <filename>swap.target</filename>. This means that
                     the boot will continue even if this swap device is
-                    not activated successfully. Option
-                    <option>fail</option> has the opposite meaning and
-                    is the default.</para>
+                    not activated successfully.</para>
                     </listitem>
                   </varlistentry>
                 </variablelist>

commit 9e69da8bdd2b0d9db274816ce9102682a7036cd5
Author: Jan Engelhardt <jengelh at inai.de>
Date:   Mon Jan 12 20:43:14 2015 +0100

    doc: add cross-references between systemd.{link, netdev, network}
    
    (cherry picked from commit bd763d350c7e8bf8b934bd45bc34ac35cdba2a63)

diff --git a/man/systemd.link.xml b/man/systemd.link.xml
index 6075b39..2de36e7 100644
--- a/man/systemd.link.xml
+++ b/man/systemd.link.xml
@@ -395,6 +395,12 @@ MACAddress=cb:a9:87:65:43:21</programlisting>
                         </citerefentry>,
                         <citerefentry>
                                 <refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum>
+                        </citerefentry>,
+                        <citerefentry>
+                                <refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum>
+                        </citerefentry>,
+                        <citerefentry>
+                                <refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum>
                         </citerefentry>
                 </para>
         </refsect1>
diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml
index 275ee52..60e3377 100644
--- a/man/systemd.netdev.xml
+++ b/man/systemd.netdev.xml
@@ -588,6 +588,7 @@ MACAddress=12:34:56:78:9a:bc</programlisting>
                 <para>
                         <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
                         <citerefentry><refentrytitle>systemd-networkd</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+                        <citerefentry><refentrytitle>systemd.link</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                         <citerefentry><refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum></citerefentry>
                 </para>
         </refsect1>
diff --git a/man/systemd.network.xml b/man/systemd.network.xml
index 4cc13b2..55bc515 100644
--- a/man/systemd.network.xml
+++ b/man/systemd.network.xml
@@ -594,6 +594,7 @@ Tunnel=vti-tun</programlisting>
                 <para>
                         <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
                         <citerefentry><refentrytitle>systemd-networkd</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+                        <citerefentry><refentrytitle>systemd.link</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                         <citerefentry><refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum></citerefentry>
                 </para>
         </refsect1>

commit a4f21be76f1fef11908f26e57e792c04e8b6a7ec
Author: Ronny Chevalier <chevalier.ronny at gmail.com>
Date:   Mon Jan 12 22:19:34 2015 +0100

    zsh-completion: add missing completions for systemd-tmpfiles
    
    (cherry picked from commit ee14023fd5720959d3ae22b23ed663efc42608fa)

diff --git a/shell-completion/zsh/_systemd-tmpfiles b/shell-completion/zsh/_systemd-tmpfiles
index 4913ded..6ff02e5 100644
--- a/shell-completion/zsh/_systemd-tmpfiles
+++ b/shell-completion/zsh/_systemd-tmpfiles
@@ -1,10 +1,13 @@
 #compdef systemd-tmpfiles
 
 _arguments \
+    {-h,--help}'[Show help]' \
+    '--version[Show package version]' \
     '--create[Create, set ownership/permissions based on the config files.]' \
     '--clean[Clean up all files and directories with an age parameter configured.]' \
     '--remove[All files and directories marked with r, R in the configuration files are removed.]' \
+    '--boot[Execute actions only safe at boot]' \
     '--prefix=[Only apply rules that apply to paths with the specified prefix.]' \
     '--exclude-prefix=[Ignore rules that apply to paths with the specified prefix.]' \
-    '--help[Prints a short help text and exits.]' \
+    '--root=[Operate on an alternate filesystem root]:directory:_directories' \
     '*::files:_files'

commit 65fd39f8a222a3dadf53de50b15664d5c2f73bf2
Author: Ronny Chevalier <chevalier.ronny at gmail.com>
Date:   Mon Jan 12 21:43:45 2015 +0100

    zsh-completion: add missing completions for systemd-analyze
    
    (cherry picked from commit 26bd71f06c842585b184c3c2f29376564102232d)

diff --git a/shell-completion/zsh/_systemd-analyze b/shell-completion/zsh/_systemd-analyze
index c101ad0..3edf92e 100644
--- a/shell-completion/zsh/_systemd-analyze
+++ b/shell-completion/zsh/_systemd-analyze
@@ -42,13 +42,17 @@ _systemd_analyze_command(){
 }
 
 _arguments \
-    {-h,--help}'[Show help text.]' \
-    '--system[Operate on system systemd instance.]' \
-    '--user[Operate on user systemd instance.]' \
-    '--no-pager[Do not user pager.]' \
-    '--no-man[Do not check man pages.]' \
+    {-h,--help}'[Show help text]' \
+    '--version[Show package version]' \
+    '--system[Operate on system systemd instance]' \
+    '--user[Operate on user systemd instance]' \
+    '--no-pager[Do not pipe output into a pager]' \
+    '--man=[Do (not) check for exietnce of man pages]:boolean:(1 0)' \
     '--order[When generating graph for dot, show only order]' \
     '--require[When generating graph for dot, show only requirement]' \
+    '--fuzz=[When printing the tree of the critical chain, print also services, which finished TIMESPAN earlier, than the latest in the branch]:TIMESPAN' \
+    '--from-pattern=[When generating a dependency graph, filter only origins]:GLOB' \
+    '--to-pattern=[When generating a dependency graph, filter only destinations]:GLOB' \
     {-H+,--host=}'[Operate on remote host]:userathost:_sd_hosts_or_user_at_host' \
     {-M+,--machine=}'[Operate on local container]:machine' \
     '*::systemd-analyze commands:_systemd_analyze_command'

commit fab6d4c7aa4460f4a5016427d627c1a645a5d7f2
Author: Ronny Chevalier <chevalier.ronny at gmail.com>
Date:   Mon Jan 12 21:31:45 2015 +0100

    zsh-completion: add missing -M completion for timedatectl
    
    (cherry picked from commit c285cb5c559638689e3d9e9894a81574ed69d560)

diff --git a/shell-completion/zsh/_timedatectl b/shell-completion/zsh/_timedatectl
index 987c2de..dfdcfeb 100644
--- a/shell-completion/zsh/_timedatectl
+++ b/shell-completion/zsh/_timedatectl
@@ -62,4 +62,5 @@ _arguments -s \
     '--no-pager[Do not pipe output into a pager]' \
     '--no-ask-password[Do not prompt for password]' \
     {-H+,--host=}'[Operate on remote host]:userathost:_sd_hosts_or_user_at_host' \
+    {-M+,--machine=}'[Operate on local container]:machines:_sd_machines' \
     '*::timedatectl commands:_timedatectl_command'

commit 60c149882c1519679335ab2b82fc9e798570078d
Author: Ronny Chevalier <chevalier.ronny at gmail.com>
Date:   Mon Jan 12 21:26:27 2015 +0100

    zsh-completion: add missing completions for coredumpctl
    
    (cherry picked from commit 720e0be0f00f4a7fee808d1cf60db43970900588)

diff --git a/shell-completion/zsh/_coredumpctl b/shell-completion/zsh/_coredumpctl
index d13bc70..833c7e2 100644
--- a/shell-completion/zsh/_coredumpctl
+++ b/shell-completion/zsh/_coredumpctl
@@ -4,6 +4,7 @@ _coredumpctl_command(){
     local -a _coredumpctl_cmds
     _coredumpctl_cmds=(
             'list:List available coredumps'
+            'info:Show detailed information about one or more coredumps'
             'dump:Print coredump to stdout'
             'gdb:Start gdb on a coredump'
     )
@@ -30,7 +31,9 @@ _coredumpctl_command(){
 _arguments \
     {-o+,--output=}'[Write output to FILE]:output file:_files' \
     {-F+,--field=}'[Show field in list output]:field' \
+    '-1[Show information about most recent entry only]' \
     '--no-pager[Do not pipe output into a pager]' \
+    '--no-legend[Do not print the column headers]' \
     {-h,--help}'[Show this help]' \
     '--version[Show package version]' \
     '*::coredumpctl commands:_coredumpctl_command'

commit 63bc82c30cebb7ed39649a45d91d48c109b70cba
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Mon Jan 12 12:14:59 2015 -0500

    core/mount: remove "fail" again
    
    deb6120920 'man: there's actually no "fail" fstab option, but only
    "nofail" removed it from our documentation, which I missed.
    fstab(5) only mentions "auto", "noauto", and "nofail". Stick to
    those three.
    
    (cherry picked from commit 76c37ab6d205c95e8f43ffbc19553b936330195a)

diff --git a/src/core/mount.c b/src/core/mount.c
index 7c0527d..f14599f 100644
--- a/src/core/mount.c
+++ b/src/core/mount.c
@@ -901,7 +901,7 @@ static void mount_enter_mounting(Mount *m) {
                 _cleanup_free_ char *opts = NULL;
 
                 r = fstab_filter_options(m->parameters_fragment.options,
-                                         "nofail\0" "fail\0" "noauto\0" "auto\0", NULL, NULL, &opts);
+                                         "nofail\0" "noauto\0" "auto\0", NULL, NULL, &opts);
                 if (r < 0)
                         goto fail;
 

commit ca542322933c2477b7a67da4eb123ac810de8512
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Sun Jan 11 23:40:46 2015 -0500

    fstab-util: fix priority parsing and add test
    
    (cherry picked from commit a75f4e2a02e287294b21ae9e5b1f28b2f8faea39)
    
    Conflicts:
    	src/shared/fstab-util.c
    	src/test/test-fstab-util.c

diff --git a/src/shared/fstab-util.c b/src/shared/fstab-util.c
index 546c81b..db37699 100644
--- a/src/shared/fstab-util.c
+++ b/src/shared/fstab-util.c
@@ -133,13 +133,15 @@ int fstab_find_pri(const char *options, int *ret) {
         assert(ret);
 
         r = fstab_filter_options(options, "pri\0", NULL, &opt, NULL);
-        if (r <= 0)
+        if (r < 0)
                 return r;
+        if (r == 0 || !opt)
+                return 0;
 
         r = safe_atou(opt, &pri);
         if (r < 0)
                 return r;
 
-        *ret = (int) r;
+        *ret = (int) pri;
         return 1;
 }
diff --git a/src/test/test-fstab-util.c b/src/test/test-fstab-util.c
index ddf965d..7a4fa04 100644
--- a/src/test/test-fstab-util.c
+++ b/src/test/test-fstab-util.c
@@ -107,6 +107,23 @@ static void test_fstab_filter_options(void) {
         do_fstab_filter_options("", "opt\0", 0, NULL, NULL, "");
 }
 
+static void test_fstab_find_pri(void) {
+        int pri = -1;
+
+        assert_se(fstab_find_pri("pri", &pri) == 0);
+        assert_se(pri == -1);
+
+        assert_se(fstab_find_pri("pri=11", &pri) == 1);
+        assert_se(pri == 11);
+
+        assert_se(fstab_find_pri("opt,pri=12,opt", &pri) == 1);
+        assert_se(pri == 12);
+
+        assert_se(fstab_find_pri("opt,opt,pri=12,pri=13", &pri) == 1);
+        assert_se(pri == 13);
+}
+
 int main(void) {
         test_fstab_filter_options();
+        test_fstab_find_pri();
 }

commit ce4ad5de372ecc8b3f5c935c76c2771440e66b4a
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Sun Jan 11 16:57:02 2015 -0500

    core/load-fragment: avoid allocating 0 bytes when given an invalid command
    
    With a command line like "@/something" we would allocate an array with
    0 elements. Avoid that, and add a test too.
    
    (cherry picked from commit e01ff428993f0c126f010b5625002e6a0a8aff4a)
    
    Conflicts:
    	src/core/load-fragment.c
    	src/test/test-unit-file.c

diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
index e31263e..8e785db 100644
--- a/src/core/load-fragment.c
+++ b/src/core/load-fragment.c
@@ -581,7 +581,8 @@ int config_parse_exec(const char *unit,
                 }
 
         found:
-                n = new(char*, k + !honour_argv0);
+                /* If seperate_argv0, we'll move first element to path variable */
+                n = new(char*, MAX(k + !honour_argv0, 1u));
                 if (!n)
                         return log_oom();
 

commit e3880a3d573aa678b36806647661b4de47aaf00d
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Sun Jan 11 00:27:37 2015 -0500

    core/mount: filter out noauto,auto,nofail,fail options
    
    We passed the full option string from fstab to /bin/mount. It would in
    turn pass the full option string to its helper, if it needed to invoke
    one. Some helpers would ignore things like "nofail", but others would
    be confused. We could try to get all helpers to ignore those
    "meta-options", but it seems better to simply filter them out.
    
    In our model, /bin/mount simply has no business in knowing whether the
    mount was configured as fail or nofail, auto or noauto, in the
    fstab. If systemd tells invokes a command to mount something, and it
    fails, it should always return an error. It seems cleaner to filter
    out the option, since then there's no doubt how the command should
    behave.
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1177823
    (cherry picked from commit 17a1c597c5f9be1c25431a764155cd50c0d074b7)
    
    Conflicts:
    	src/core/mount.c

diff --git a/src/core/mount.c b/src/core/mount.c
index 6ca389b..7c0527d 100644
--- a/src/core/mount.c
+++ b/src/core/mount.c
@@ -897,7 +897,14 @@ static void mount_enter_mounting(Mount *m) {
         if (r < 0)
                 goto fail;
 
-        if (m->from_fragment)
+        if (m->from_fragment) {
+                _cleanup_free_ char *opts = NULL;
+
+                r = fstab_filter_options(m->parameters_fragment.options,
+                                         "nofail\0" "fail\0" "noauto\0" "auto\0", NULL, NULL, &opts);
+                if (r < 0)
+                        goto fail;
+
                 r = exec_command_set(
                                 m->control_command,
                                 "/bin/mount",
@@ -905,9 +912,9 @@ static void mount_enter_mounting(Mount *m) {
                                 m->parameters_fragment.what,
                                 m->where,
                                 "-t", m->parameters_fragment.fstype ? m->parameters_fragment.fstype : "auto",
-                                m->parameters_fragment.options ? "-o" : NULL, m->parameters_fragment.options,
+                                isempty(opts) ? NULL : "-o", isempty(opts) ? NULL : opts,
                                 NULL);
-        else
+        } else
                 r = -ENOENT;
 
         if (r < 0)

commit 167deb40adf8e35b9967f56c6648c8204ace859d
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Sun Jan 11 17:35:31 2015 -0500

    .gitignore: add new tests and sort tests alphabetically
    
    (cherry picked from commit 266fd0eabca6b7f10b013c7e4b5c06adc43e1b73)
    
    Conflicts:
    	.gitignore

diff --git a/.gitignore b/.gitignore
index f119b57..65842e2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -212,6 +212,7 @@
 /test-network-tables
 /test-ns
 /test-path-util
+/test-fstab-util
 /test-prioq
 /test-ratelimit
 /test-pty

commit 96bd16efac0e2c7248446d644ff2ade687a23de0
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Fri Jan 9 16:58:29 2015 -0500

    Add new function to filter fstab options
    
    This fixes parsing of options in shared/generator.c. Existing code
    had some issues:
    
    - it would treate whitespace and semicolons as seperators. fstab(5)
      is pretty clear that only commas matter. And the syntax does
      not allow for spaces to be inserted in the field in fstab.
      Whitespace might be escaped, but then it should not seperate
      options. Treat whitespace and semicolons as any other character.
    - it assumed that x-systemd.device-timeout would always be followed
      by "=". But this is not guaranteed, hasmntopt will return this
      option even if there's no value. Uninitialized memory could be read.
    - some error paths would log, and inconsistently, some would just
      return an error code.
    
    Filtering is split out to a separate function and tests are added.
    
    Similar code paths in other places are adjusted to use the new function.
    
    (cherry picked from commit d15d0333be6a1ca7fdd99a1881d967b6be8f387a)
    
    Conflicts:
    	src/core/mount.c

diff --git a/Makefile.am b/Makefile.am
index d88a27e..4101949 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -764,6 +764,8 @@ libsystemd_shared_la_SOURCES = \
 	src/shared/architecture.h \
 	src/shared/efivars.c \
 	src/shared/efivars.h \
+	src/shared/fstab-util.c \
+	src/shared/fstab-util.h \
 	src/shared/path-util.c \
 	src/shared/path-util.h \
 	src/shared/time-util.c \
@@ -1343,6 +1345,7 @@ tests += \
 	test-calendarspec \
 	test-strip-tab-ansi \
 	test-cgroup-util \
+	test-fstab-util \
 	test-prioq \
 	test-fileio \
 	test-time \
@@ -1519,6 +1522,12 @@ test_fdset_SOURCES = \
 test_fdset_LDADD = \
 	libsystemd-core.la
 
+test_fstab_util_SOURCES = \
+	src/test/test-fstab-util.c
+
+test_fstab_util_LDADD = \
+	libsystemd-shared.la
+
 test_ratelimit_SOURCES = \
 	src/test/test-ratelimit.c
 
diff --git a/src/core/mount.c b/src/core/mount.c
index 95d22a6..6ca389b 100644
--- a/src/core/mount.c
+++ b/src/core/mount.c
@@ -42,6 +42,7 @@
 #include "bus-errors.h"
 #include "exit-status.h"
 #include "def.h"
+#include "fstab-util.h"
 
 static const UnitActiveState state_translation_table[_MOUNT_STATE_MAX] = {
         [MOUNT_DEAD] = UNIT_INACTIVE,
@@ -65,7 +66,7 @@ static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents,
 static bool mount_is_network(MountParameters *p) {
         assert(p);
 
-        if (mount_test_option(p->options, "_netdev"))
+        if (fstab_test_option(p->options, "_netdev\0"))
                 return true;
 
         if (p->fstype && fstype_is_network(p->fstype))
@@ -77,16 +78,10 @@ static bool mount_is_network(MountParameters *p) {
 static bool mount_is_bind(MountParameters *p) {
         assert(p);
 
-        if (mount_test_option(p->options, "bind"))
+        if (fstab_test_option(p->options, "bind\0" "rbind\0"))
                 return true;
 
-        if (p->fstype && streq(p->fstype, "bind"))
-                return true;
-
-        if (mount_test_option(p->options, "rbind"))
-                return true;
-
-        if (p->fstype && streq(p->fstype, "rbind"))
+        if (p->fstype && STR_IN_SET(p->fstype, "bind", "rbind"))
                 return true;
 
         return false;
@@ -95,7 +90,7 @@ static bool mount_is_bind(MountParameters *p) {
 static bool mount_is_auto(MountParameters *p) {
         assert(p);
 
-        return !mount_test_option(p->options, "noauto");
+        return !fstab_test_option(p->options, "noauto\0");
 }
 
 static bool needs_quota(MountParameters *p) {
@@ -107,11 +102,8 @@ static bool needs_quota(MountParameters *p) {
         if (mount_is_bind(p))
                 return false;
 
-        return mount_test_option(p->options, "usrquota") ||
-                mount_test_option(p->options, "grpquota") ||
-                mount_test_option(p->options, "quota") ||
-                mount_test_option(p->options, "usrjquota") ||
-                mount_test_option(p->options, "grpjquota");
+        return fstab_test_option(p->options,
+                                 "usrquota\0" "grpquota\0" "quota\0" "usrjquota\0" "grpjquota\0");
 }
 
 static void mount_init(Unit *u) {
@@ -358,7 +350,7 @@ static bool should_umount(Mount *m) {
                 return false;
 
         p = get_mount_parameters(m);
-        if (p && mount_test_option(p->options, "x-initrd.mount") &&
+        if (p && fstab_test_option(p->options, "x-initrd.mount\0") &&
             !in_initrd())
                 return false;
 
diff --git a/src/core/swap.c b/src/core/swap.c
index ecd9675..d8bde95 100644
--- a/src/core/swap.c
+++ b/src/core/swap.c
@@ -41,6 +41,7 @@
 #include "path-util.h"
 #include "virt.h"
 #include "udev-util.h"
+#include "fstab-util.h"
 
 static const UnitActiveState state_translation_table[_SWAP_STATE_MAX] = {
         [SWAP_DEAD] = UNIT_INACTIVE,
@@ -702,71 +703,6 @@ fail:
         swap_enter_dead(s, SWAP_FAILURE_RESOURCES);
 }
 
-static int mount_find_pri(const char *options, int *ret) {
-        const char *opt;
-        char *end;
-        unsigned long r;
-
-        assert(ret);
-
-        if (!options)
-                return 0;
-
-        opt = mount_test_option(options, "pri");
-        if (!opt)
-                return 0;
-
-        opt += strlen("pri");
-        if (*opt != '=')
-                return -EINVAL;
-
-        errno = 0;
-        r = strtoul(opt + 1, &end, 10);
-        if (errno > 0)
-                return -errno;
-
-        if (end == opt + 1 || (*end != ',' && *end != 0))
-                return -EINVAL;
-
-        *ret = (int) r;
-        return 1;
-}
-
-static int mount_find_discard(const char *options, char **ret) {
-        const char *opt;
-        char *ans;
-        size_t len;
-
-        assert(ret);
-
-        if (!options)
-                return 0;
-
-        opt = mount_test_option(options, "discard");
-        if (!opt)
-                return 0;
-
-        opt += strlen("discard");
-        if (*opt == ',' || *opt == '\0')
-                ans = strdup("all");
-        else {
-                if (*opt != '=')
-                        return -EINVAL;
-
-                len = strcspn(opt + 1, ",");
-                if (len == 0)
-                        return -EINVAL;
-
-                ans = strndup(opt + 1, len);
-        }
-
-        if (!ans)
-                return -ENOMEM;
-
-        *ret = ans;
-        return 1;
-}
-
 static void swap_enter_activating(Swap *s) {
         _cleanup_free_ char *discard = NULL;
         int r, priority = -1;
@@ -777,11 +713,12 @@ static void swap_enter_activating(Swap *s) {
         s->control_command = s->exec_command + SWAP_EXEC_ACTIVATE;
 
         if (s->from_fragment) {
-                mount_find_discard(s->parameters_fragment.options, &discard);
+                fstab_filter_options(s->parameters_fragment.options, "discard\0",
+                                     NULL, &discard, NULL);
 
                 priority = s->parameters_fragment.priority;
                 if (priority < 0)
-                        mount_find_pri(s->parameters_fragment.options, &priority);
+                        fstab_find_pri(s->parameters_fragment.options, &priority);
         }
 
         r = exec_command_set(s->control_command, "/sbin/swapon", NULL);
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
index 46c7667..e9e0e97 100644
--- a/src/fstab-generator/fstab-generator.c
+++ b/src/fstab-generator/fstab-generator.c
@@ -29,6 +29,7 @@
 #include "util.h"
 #include "unit-name.h"
 #include "path-util.h"
+#include "fstab-util.h"
 #include "mount-setup.h"
 #include "special.h"
 #include "mkdir.h"
@@ -47,33 +48,6 @@ static char *arg_usr_what = NULL;
 static char *arg_usr_fstype = NULL;
 static char *arg_usr_options = NULL;
 
-static int mount_find_pri(struct mntent *me, int *ret) {
-        char *end, *opt;
-        unsigned long r;
-
-        assert(me);
-        assert(ret);
-
-        opt = hasmntopt(me, "pri");
-        if (!opt)
-                return 0;
-
-        opt += strlen("pri");
-        if (*opt != '=')
-                return -EINVAL;
-
-        errno = 0;
-        r = strtoul(opt + 1, &end, 10);
-        if (errno > 0)
-                return -errno;
-
-        if (end == opt + 1 || (*end != ',' && *end != 0))
-                return -EINVAL;
-
-        *ret = (int) r;
-        return 1;
-}
-
 static int add_swap(
                 const char *what,
                 struct mntent *me,
@@ -92,9 +66,9 @@ static int add_swap(
                 return 0;
         }
 
-        r = mount_find_pri(me, &pri);
+        r = fstab_find_pri(me->mnt_opts, &pri);
         if (r < 0) {
-                log_error("Failed to parse priority");
+                log_error("Failed to parse priority: %s", strerror(-r));
                 return r;
         }
 
@@ -443,8 +417,7 @@ static int add_root_mount(void) {
         if (!arg_root_options)
                 opts = arg_root_rw > 0 ? "rw" : "ro";
         else if (arg_root_rw >= 0 ||
-                 (!mount_test_option(arg_root_options, "ro") &&
-                  !mount_test_option(arg_root_options, "rw")))
+                 !fstab_test_option(arg_root_options, "ro\0" "rw\0"))
                 opts = strappenda(arg_root_options, ",", arg_root_rw > 0 ? "rw" : "ro");
         else
                 opts = arg_root_options;
@@ -501,8 +474,7 @@ static int add_usr_mount(void) {
 
         if (!arg_usr_options)
                 opts = arg_root_rw > 0 ? "rw" : "ro";
-        else if (!mount_test_option(arg_usr_options, "ro") &&
-                 !mount_test_option(arg_usr_options, "rw"))
+        else if (!fstab_test_option(arg_usr_options, "ro\0" "rw\0"))
                 opts = strappenda(arg_usr_options, ",", arg_root_rw > 0 ? "rw" : "ro");
         else
                 opts = arg_usr_options;
diff --git a/src/shared/fstab-util.c b/src/shared/fstab-util.c
new file mode 100644
index 0000000..546c81b
--- /dev/null
+++ b/src/shared/fstab-util.c
@@ -0,0 +1,145 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+  This file is part of systemd.
+
+  Copyright 2015 Zbigniew Jędrzejewski-Szmek
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "fstab-util.h"
+#include "strv.h"
+#include "util.h"
+
+int fstab_filter_options(const char *opts, const char *names,
+                         const char **namefound, char **value, char **filtered) {
+        const char *name, *n = NULL, *x;
+        _cleanup_strv_free_ char **stor = NULL;
+        _cleanup_free_ char *v = NULL, **strv = NULL;
+
+        assert(names && *names);
+
+        if (!opts)
+                goto answer;
+
+        /* If !value and !filtered, this function is not allowed to fail. */
+
+        if (!filtered) {
+                const char *word, *state;
+                size_t l;
+
+                FOREACH_WORD_SEPARATOR(word, l, opts, ",", state)
+                        NULSTR_FOREACH(name, names) {
+                                if (l < strlen(name))
+                                        continue;
+                                if (!strneq(word, name, strlen(name)))
+                                        continue;
+
+                                /* we know that the string is NUL
+                                 * terminated, so *x is valid */
+                                x = word + strlen(name);
+                                if (IN_SET(*x, '\0', '=', ',')) {
+                                        n = name;
+                                        if (value) {
+                                                free(v);
+                                                if (IN_SET(*x, '\0', ','))
+                                                        v = NULL;
+                                                else {
+                                                        assert(*x == '=');
+                                                        x++;
+                                                        v = strndup(x, l - strlen(name) - 1);
+                                                        if (!v)
+                                                                return -ENOMEM;
+                                                }
+                                        }
+                                }
+                        }
+        } else {
+                char **t, **s;
+
+                stor = strv_split(opts, ",");
+                if (!stor)
+                        return -ENOMEM;
+                strv = memdup(stor, sizeof(char*) * (strv_length(stor) + 1));
+                if (!strv)
+                        return -ENOMEM;
+
+                for (s = t = strv; *s; s++) {
+                        NULSTR_FOREACH(name, names) {
+                                x = startswith(*s, name);
+                                if (x && IN_SET(*x, '\0', '='))
+                                        goto found;
+                        }
+
+                        *t = *s;
+                        t++;
+                        continue;
+                found:
+                        /* Keep the last occurence found */
+                        n = name;
+                        if (value) {
+                                free(v);
+                                if (*x == '\0')
+                                        v = NULL;
+                                else {
+                                        assert(*x == '=');
+                                        x++;
+                                        v = strdup(x);
+                                        if (!v)
+                                                return -ENOMEM;
+                                }
+                        }
+                }
+                *t = NULL;
+        }
+
+answer:
+        if (namefound)
+                *namefound = n;
+        if (filtered) {
+                char *f;
+
+                f = strv_join(strv, ",");
+                if (!f)
+                        return -ENOMEM;
+
+                *filtered = f;
+        }
+        if (value) {
+                *value = v;
+                v = NULL;
+        }
+
+        return !!n;
+}
+
+int fstab_find_pri(const char *options, int *ret) {
+        _cleanup_free_ char *opt = NULL;
+        int r;
+        unsigned pri;
+
+        assert(ret);
+
+        r = fstab_filter_options(options, "pri\0", NULL, &opt, NULL);
+        if (r <= 0)
+                return r;
+
+        r = safe_atou(opt, &pri);
+        if (r < 0)
+                return r;
+
+        *ret = (int) r;
+        return 1;
+}
diff --git a/src/shared/fstab-util.h b/src/shared/fstab-util.h
new file mode 100644
index 0000000..39ddb71
--- /dev/null
+++ b/src/shared/fstab-util.h
@@ -0,0 +1,34 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+#pragma once
+
+/***
+  This file is part of systemd.
+
+  Copyright 2015 Zbigniew Jędrzejewski-Szmek
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <stdbool.h>
+#include <stddef.h>
+
+int fstab_filter_options(const char *opts, const char *names,
+                         const char **namefound, char **value, char **filtered);
+
+static inline bool fstab_test_option(const char *opts, const char *names) {
+        return !!fstab_filter_options(opts, names, NULL, NULL, NULL);
+}
+
+int fstab_find_pri(const char *options, int *ret);
diff --git a/src/shared/generator.c b/src/shared/generator.c
index 414470b..868101c 100644
--- a/src/shared/generator.c
+++ b/src/shared/generator.c
@@ -28,6 +28,7 @@
 #include "unit-name.h"
 #include "generator.h"
 #include "path-util.h"
+#include "fstab-util.h"
 #include "dropin.h"
 
 int generator_write_fsck_deps(
@@ -96,42 +97,16 @@ int generator_write_timeouts(const char *dir, const char *what, const char *wher
          * endless device timeouts for devices that show up only after
          * user input, like crypto devices. */
 
-        _cleanup_free_ char *node = NULL, *unit = NULL, *t = NULL;
-        char *start, *timeout;
+        _cleanup_free_ char *node = NULL, *unit = NULL, *timeout = NULL;
         usec_t u;
         int r;
-        size_t len;
-
-        if ((start = mount_test_option(opts, "comment=systemd.device-timeout")))
-                timeout = start + 31;
-        else if ((start = mount_test_option(opts, "x-systemd.device-timeout")))
-                timeout = start + 25;
-        else {
-                if (filtered) {
-                        *filtered = strdup(opts ?: "");
-                        if (!*filtered)
-                                return log_oom();
-                }
-
-                return 0;
-        }
-
-        len = strcspn(timeout, ",;" WHITESPACE);
-        t = strndup(timeout, len);
-        if (!t)
-                return -ENOMEM;
 
-        if (filtered) {
-                char *prefix, *postfix;
+        r = fstab_filter_options(opts, "comment=systemd.device-timeout\0" "x-systemd.device-timeout\0",
+                                 NULL, &timeout, filtered);
+        if (r <= 0)
+                return r;
 
-                prefix = strndupa(opts, start - opts - (start != opts));
-                postfix = timeout + len + (start == opts && timeout[len] != '\0');
-                *filtered = strjoin(prefix, *postfix ? postfix : NULL, NULL);
-                if (!*filtered)
-                        return log_oom();
-        }
-
-        r = parse_sec(t, &u);
+        r = parse_sec(timeout, &u);
         if (r < 0) {
                 log_warning("Failed to parse timeout for %s, ignoring: %s",
                             where, timeout);
@@ -144,7 +119,7 @@ int generator_write_timeouts(const char *dir, const char *what, const char *wher
 
         unit = unit_name_from_path(node, ".device");
         if (!unit)
-                return -ENOMEM;
+                return log_oom();
 
         return write_drop_in_format(dir, unit, 50, "device-timeout",
                                     "# Automatically generated by %s\n\n"
diff --git a/src/shared/util.c b/src/shared/util.c
index 956649e..688aa8b 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -6533,23 +6533,6 @@ uint64_t physical_memory(void) {
         return (uint64_t) mem * (uint64_t) page_size();
 }
 
-char* mount_test_option(const char *haystack, const char *needle) {
-
-        struct mntent me = {
-                .mnt_opts = (char*) haystack
-        };
-
-        assert(needle);
-
-        /* Like glibc's hasmntopt(), but works on a string, not a
-         * struct mntent */
-
-        if (!haystack)
-                return NULL;
-
-        return hasmntopt(&me, needle);
-}
-
 void hexdump(FILE *f, const void *p, size_t s) {
         const uint8_t *b = p;
         unsigned n = 0;
diff --git a/src/shared/util.h b/src/shared/util.h
index 20712c7..6b595d5 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -966,8 +966,6 @@ const char *personality_to_string(unsigned long);
 
 uint64_t physical_memory(void);
 
-char* mount_test_option(const char *haystack, const char *needle);
-
 void hexdump(FILE *f, const void *p, size_t s);
 
 union file_handle_union {
diff --git a/src/test/test-fstab-util.c b/src/test/test-fstab-util.c
new file mode 100644
index 0000000..ddf965d
--- /dev/null
+++ b/src/test/test-fstab-util.c
@@ -0,0 +1,112 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/***
+  This file is part of systemd.
+
+  Copyright 2015 Zbigniew Jędrzejewski-Szmek
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include "fstab-util.h"
+#include "util.h"
+#include "log.h"
+
+/*
+int fstab_filter_options(const char *opts, const char *names,
+                         const char **namefound, char **value, char **filtered);
+*/
+
+static void do_fstab_filter_options(const char *opts,
+                                      const char *remove,
+                                      int r_expected,
+                                      const char *name_expected,
+                                      const char *value_expected,
+                                      const char *filtered_expected) {
+
+        int r;
+        const char *name;
+        _cleanup_free_ char *value, *filtered;
+
+        r = fstab_filter_options(opts, remove, &name, &value, &filtered);
+        log_info("\"%s\" → %d, \"%s\", \"%s\", \"%s\", expected %d, \"%s\", \"%s\", \"%s\"",
+                 opts, r, name, value, filtered,
+                 r_expected, name_expected, value_expected, filtered_expected ?: opts);
+        assert_se(r == r_expected);
+        assert_se(streq_ptr(name, name_expected));
+        assert_se(streq_ptr(value, value_expected));
+        assert_se(streq_ptr(filtered, filtered_expected ?: opts));
+
+        /* also test the malloc-less mode */
+        r = fstab_filter_options(opts, remove, &name, NULL, NULL);
+        log_info("\"%s\" → %d, \"%s\", expected %d, \"%s\"",
+                 opts, r, name,
+                 r_expected, name_expected);
+        assert_se(r == r_expected);
+        assert_se(streq_ptr(name, name_expected));
+}
+
+static void test_fstab_filter_options(void) {
+        do_fstab_filter_options("opt=0", "opt\0x-opt\0", 1, "opt", "0", "");
+        do_fstab_filter_options("opt=0", "x-opt\0opt\0", 1, "opt", "0", "");
+        do_fstab_filter_options("opt", "opt\0x-opt\0", 1, "opt", NULL, "");
+        do_fstab_filter_options("opt", "x-opt\0opt\0", 1, "opt", NULL, "");
+        do_fstab_filter_options("x-opt", "x-opt\0opt\0", 1, "x-opt", NULL, "");
+
+        do_fstab_filter_options("opt=0,other", "opt\0x-opt\0", 1, "opt", "0", "other");
+        do_fstab_filter_options("opt=0,other", "x-opt\0opt\0", 1, "opt", "0", "other");
+        do_fstab_filter_options("opt,other", "opt\0x-opt\0", 1, "opt", NULL, "other");
+        do_fstab_filter_options("opt,other", "x-opt\0opt\0", 1, "opt", NULL, "other");
+        do_fstab_filter_options("x-opt,other", "opt\0x-opt\0", 1, "x-opt", NULL, "other");
+
+        do_fstab_filter_options("opto=0,other", "opt\0x-opt\0", 0, NULL, NULL, NULL);
+        do_fstab_filter_options("opto,other", "opt\0x-opt\0", 0, NULL, NULL, NULL);
+        do_fstab_filter_options("x-opto,other", "opt\0x-opt\0", 0, NULL, NULL, NULL);
+
+        do_fstab_filter_options("first,opt=0", "opt\0x-opt\0", 1, "opt", "0", "first");
+        do_fstab_filter_options("first=1,opt=0", "opt\0x-opt\0", 1, "opt", "0", "first=1");
+        do_fstab_filter_options("first,opt=", "opt\0x-opt\0", 1, "opt", "", "first");
+        do_fstab_filter_options("first=1,opt", "opt\0x-opt\0", 1, "opt", NULL, "first=1");
+        do_fstab_filter_options("first=1,x-opt", "opt\0x-opt\0", 1, "x-opt", NULL, "first=1");
+
+        do_fstab_filter_options("first,opt=0,last=1", "opt\0x-opt\0", 1, "opt", "0", "first,last=1");
+        do_fstab_filter_options("first=1,opt=0,last=2", "x-opt\0opt\0", 1, "opt", "0", "first=1,last=2");
+        do_fstab_filter_options("first,opt,last", "opt\0", 1, "opt", NULL, "first,last");
+        do_fstab_filter_options("first=1,opt,last", "x-opt\0opt\0", 1, "opt", NULL, "first=1,last");
+        do_fstab_filter_options("first=,opt,last", "opt\0noopt\0", 1, "opt", NULL, "first=,last");
+
+        /* check repeated options */
+        do_fstab_filter_options("first,opt=0,noopt=1,last=1", "opt\0noopt\0", 1, "noopt", "1", "first,last=1");
+        do_fstab_filter_options("first=1,opt=0,last=2,opt=1", "opt\0", 1, "opt", "1", "first=1,last=2");
+        do_fstab_filter_options("x-opt=0,x-opt=1", "opt\0x-opt\0", 1, "x-opt", "1", "");
+        do_fstab_filter_options("opt=0,x-opt=1", "opt\0x-opt\0", 1, "x-opt", "1", "");
+
+        /* check that semicolons are not misinterpreted */
+        do_fstab_filter_options("opt=0;", "opt\0", 1, "opt", "0;", "");
+        do_fstab_filter_options("opt;=0", "x-opt\0opt\0noopt\0x-noopt\0", 0, NULL, NULL, NULL);
+        do_fstab_filter_options("opt;", "opt\0x-opt\0", 0, NULL, NULL, NULL);
+
+        /* check that spaces are not misinterpreted */
+        do_fstab_filter_options("opt=0 ", "opt\0", 1, "opt", "0 ", "");
+        do_fstab_filter_options("opt =0", "x-opt\0opt\0noopt\0x-noopt\0", 0, NULL, NULL, NULL);
+        do_fstab_filter_options(" opt ", "opt\0x-opt\0", 0, NULL, NULL, NULL);
+
+        /* check function will NULL args */
+        do_fstab_filter_options(NULL, "opt\0", 0, NULL, NULL, "");
+        do_fstab_filter_options("", "opt\0", 0, NULL, NULL, "");
+}
+
+int main(void) {
+        test_fstab_filter_options();
+}

commit 4b7a19e5b2b6f54bbf67feebef82fdb3ead5e404
Author: Lennart Poettering <lennart at poettering.net>
Date:   Fri Jan 9 01:47:03 2015 +0100

    man: document that 'loginctl activate' only takes a single argument
    
    (cherry picked from commit 3909ba34ec9b2c63d9938b6ba37af54a214fcff3)

diff --git a/man/loginctl.xml b/man/loginctl.xml
index 749db92..6a67371 100644
--- a/man/loginctl.xml
+++ b/man/loginctl.xml
@@ -211,14 +211,13 @@
                         </varlistentry>
 
                         <varlistentry>
-                                <term><command>activate</command> <replaceable>ID</replaceable>...</term>
-
-                                <listitem><para>Activate one or more
-                                sessions. This brings one or more
-                                sessions into the foreground, if
-                                another session is currently in the
-                                foreground on the respective
-                                seat.</para></listitem>
+                                <term><command>activate</command> <replaceable>ID</replaceable></term>
+
+                                <listitem><para>Activate a
+                                session. This brings a session into
+                                the foreground, if another session is
+                                currently in the foreground on the
+                                respective seat.</para></listitem>
                         </varlistentry>
 
                         <varlistentry>

commit 4497e5b3a666b2ec72890f693bf6cde204af03e5
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Fri Jan 9 09:09:59 2015 -0500

    journal: do not check for number of files
    
    Now that we bump rlimit, we do not really know how many files
    we can open. Remove the check.
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1179980
    (cherry picked from commit b914ea8d379b446c4c9fac4ba181771676ef38cd)

diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c
index 32c6976..b2b4032 100644
--- a/src/journal/sd-journal.c
+++ b/src/journal/sd-journal.c
@@ -43,8 +43,6 @@
 #include "replace-var.h"
 #include "fileio.h"
 
-#define JOURNAL_FILES_MAX 1024
-
 #define JOURNAL_FILES_RECHECK_USEC (2 * USEC_PER_SEC)
 
 #define REPLACE_VAR_MAX 256
@@ -1338,11 +1336,6 @@ static int add_any_file(sd_journal *j, const char *path) {
         if (ordered_hashmap_get(j->files, path))
                 return 0;
 
-        if (ordered_hashmap_size(j->files) >= JOURNAL_FILES_MAX) {
-                log_warning("Too many open journal files, not adding %s.", path);
-                return set_put_error(j, -ETOOMANYREFS);
-        }
-
         r = journal_file_open(path, O_RDONLY, 0, false, false, NULL, j->mmap, NULL, &f);
         if (r < 0)
                 return r;

commit 2874ef89b63bd88f40cdd6494dbb25e3c3105599
Author: Ronny Chevalier <chevalier.ronny at gmail.com>
Date:   Fri Jan 9 13:54:19 2015 +0100

    systemctl: add missing output modes to help message
    
    (cherry picked from commit 86d81e502bf7f923e4bb9c30de85f04e3497c839)

diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index af80f1d..251eeb4 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -5712,8 +5712,9 @@ static void systemctl_help(void) {
                "                      or only disable\n"
                "     --root=PATH      Enable unit files in the specified root directory\n"
                "  -n --lines=INTEGER  Number of journal entries to show\n"
-               "  -o --output=STRING  Change journal output mode (short, short-monotonic,\n"
-               "                      verbose, export, json, json-pretty, json-sse, cat)\n"
+               "  -o --output=STRING  Change journal output mode (short, short-iso,\n"
+               "                              short-precise, short-monotonic, verbose,\n"
+               "                              export, json, json-pretty, json-sse, cat)\n"
                "     --plain          Print unit dependencies as a list instead of a tree\n\n"
                "Unit Commands:\n"
                "  list-units [PATTERN...]         List loaded units\n"

commit 25ec79575b1b6f78b632e722edfcd876862ad71f
Author: Ronny Chevalier <chevalier.ronny at gmail.com>
Date:   Fri Jan 9 13:53:23 2015 +0100

    shell-completion: add missing output modes
    
    https://bugs.freedesktop.org/show_bug.cgi?id=88216
    (cherry picked from commit e4e5a85f34db9b18a5ae84a659fcdaf7e494dec1)

diff --git a/shell-completion/bash/journalctl b/shell-completion/bash/journalctl
index 14dcd22..2efa100 100644
--- a/shell-completion/bash/journalctl
+++ b/shell-completion/bash/journalctl
@@ -65,7 +65,7 @@ _journalctl() {
                                 compopt -o filenames
                         ;;
                         --output|-o)
-                                comps='short short-monotonic verbose export json cat'
+                                comps='short short-iso short-precise short-monotonic verbose export json json-pretty json-sse cat'
                         ;;
                         --field|-F)
                                 comps=${__journal_fields[*]}
diff --git a/shell-completion/zsh/_sd_outputmodes b/shell-completion/zsh/_sd_outputmodes
index dae8a5c..2ce84a7 100644
--- a/shell-completion/zsh/_sd_outputmodes
+++ b/shell-completion/zsh/_sd_outputmodes
@@ -1,5 +1,5 @@
 #autoload
 
 local -a _output_opts
-_output_opts=(short short-monotonic verbose export json json-pretty json-see cat)
+_output_opts=(short short-iso short-precise short-monotonic verbose export json json-pretty json-see cat)
 _describe -t output 'output mode' _output_opts || compadd "$@"

commit e588817e5d4228c16972ad3950b67a0f579fcc0f
Author: Lennart Poettering <lennart at poettering.net>
Date:   Thu Jan 8 19:16:44 2015 +0100

    man: remove references to systemadm from systemctl man page
    
    The tool is badly maintained and we shouldn't refence such old cruft.
    
    (cherry picked from commit a03fe1a5d56be86fcc383090e191224590a1ab5d)

diff --git a/man/systemctl.xml b/man/systemctl.xml
index 7d643d7..52fa803 100644
--- a/man/systemctl.xml
+++ b/man/systemctl.xml
@@ -1648,9 +1648,9 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
     <title>See Also</title>
     <para>
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>systemadm</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd.resource-management</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>,

commit 3628c38b5c73d667d38a19c19ab5a1c22535ba17
Author: Dave Reisner <dreisner at archlinux.org>
Date:   Wed Jan 7 21:54:45 2015 -0500

    doc: fix stale references to systemd-verify
    
    This was subsumed into systemd-analyze back in 142c4ecaa98.
    
    (cherry picked from commit ee9c4ff4c89584ecf4e64f330fba627df099f4ad)

diff --git a/man/systemd-analyze.xml b/man/systemd-analyze.xml
index 073e807..ecfc7af 100644
--- a/man/systemd-analyze.xml
+++ b/man/systemd-analyze.xml
@@ -352,7 +352,7 @@ Requires=different.service
 [Service]
 Desription=x
 
-$ systemd-verify ./user.slice
+$ systemd-analyze verify ./user.slice
 [./user.slice:9] Unknown lvalue 'WhatIsThis' in section 'Unit'
 [./user.slice:13] Unknown section 'Service'. Ignoring.
 Error: org.freedesktop.systemd1.LoadFailed:
@@ -376,7 +376,7 @@ ListenStream=100
 ListenStream=100
 Accept=yes
 
-$ systemd-verify ./a.socket ./b.socket
+$ systemd-analyze verify ./a.socket ./b.socket
 Service a.service not loaded, a.socket cannot be started.
 Service b at 0.service not loaded, b.socket cannot be started.
                         </programlisting>
diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
index e20851f..5c5513b 100644
--- a/man/systemd.unit.xml
+++ b/man/systemd.unit.xml
@@ -1560,7 +1560,7 @@
                         <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                         <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                         <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
-                        <citerefentry><refentrytitle>systemd-verify</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+                        <citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
                         <citerefentry project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
                         <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
                         <citerefentry><refentrytitle>uname</refentrytitle><manvolnum>1</manvolnum></citerefentry>

commit 68d0fa134101ce58202a1cf013d034c6fa4e6d38
Author: Tom Gundersen <teg at jklm.no>
Date:   Tue Jan 6 19:12:38 2015 +0100

    path-util: plug leak
    
    (cherry picked from commit a0539d7753d6a3ede87bf5e57d7c40d5bc1dc230)

diff --git a/src/shared/path-util.c b/src/shared/path-util.c
index 0ca2d33..b368eeb 100644
--- a/src/shared/path-util.c
+++ b/src/shared/path-util.c
@@ -515,6 +515,9 @@ fallback:
                 return -errno;
         }
 
+        free(parent);
+        parent = NULL;
+
         r = path_get_parent(t, &parent);
         if (r < 0)
                 return r;

commit 6da53516fe7ff2bddb8c1f36d2347e4c437b8ade
Author: David Herrmann <dh.herrmann at gmail.com>
Date:   Thu Jan 8 16:13:39 2015 +0100

    dbus1-generator: fix array sentinal
    
    Add a {} sentinal entry so the config-iterator can properly iterate all
    array elements. Fixes a segfault in the dbus1-generator.
    
    (cherry picked from commit 34a317e1ccb0053d49383eb5e2f73dec97affc4c)

diff --git a/src/dbus1-generator/dbus1-generator.c b/src/dbus1-generator/dbus1-generator.c
index 3c4522b..af6bb03 100644
--- a/src/dbus1-generator/dbus1-generator.c
+++ b/src/dbus1-generator/dbus1-generator.c
@@ -165,6 +165,7 @@ static int add_dbus(const char *path, const char *fname, const char *type) {
                 { "D-BUS Service", "Exec", config_parse_string, 0, &exec },
                 { "D-BUS Service", "User", config_parse_string, 0, &user },
                 { "D-BUS Service", "SystemdService", config_parse_string, 0, &service },
+                { },
         };
 
         char *p;

commit d366a3148143faf131117e0bfc31851cc1e35aa8
Author: Lennart Poettering <lennart at poettering.net>
Date:   Thu Jan 8 03:17:50 2015 +0100

    journal: bump RLIMIT_NOFILE when journal files to 16K (if possible)
    
    When there are a lot of split out journal files, we might run out of fds
    quicker then we want. Hence: bump RLIMIT_NOFILE to 16K if possible.
    
    Do these even for journalctl. On Fedora the soft RLIMIT_NOFILE is at 1K,
    the hard at 4K by default for normal user processes, this code hence
    bumps this up for users to 4K.
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1179980
    (cherry picked from commit de45d726034f33afdb0a185e62fc61bf10a0acd2)
    
    Conflicts:
    	src/shared/util.h

diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
index 03a3cae..1ade4ed 100644
--- a/src/journal/journalctl.c
+++ b/src/journal/journalctl.c
@@ -1729,6 +1729,11 @@ int main(int argc, char *argv[]) {
 
         signal(SIGWINCH, columns_lines_cache_reset);
 
+        /* Increase max number of open files to 16K if we can, we
+         * might needs this when browsing journal files, which might
+         * be split up into many files. */
+        setrlimit_closest(RLIMIT_NOFILE, &RLIMIT_MAKE_CONST(16384));
+
         if (arg_action == ACTION_NEW_ID128) {
                 r = generate_new_id128();
                 goto finish;
diff --git a/src/shared/util.h b/src/shared/util.h
index cde38a5..20712c7 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -999,3 +999,5 @@ int unquote_many_words(const char **p, ...) _sentinel_;
 int free_and_strdup(char **p, const char *s);
 
 int sethostname_idempotent(const char *s);
+
+#define RLIMIT_MAKE_CONST(lim) ((struct rlimit) { lim, lim })
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index acd9804..af80f1d 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -7103,6 +7103,11 @@ int main(int argc, char*argv[]) {
                 goto finish;
         }
 
+        /* Increase max number of open files to 16K if we can, we
+         * might needs this when browsing journal files, which might
+         * be split up into many files. */
+        setrlimit_closest(RLIMIT_NOFILE, &RLIMIT_MAKE_CONST(16384));
+
         if (!avoid_bus())
                 r = bus_open_transport_systemd(arg_transport, arg_host, arg_scope != UNIT_FILE_SYSTEM, &bus);
 
diff --git a/units/systemd-journal-gatewayd.service.in b/units/systemd-journal-gatewayd.service.in
index 5bd8e4b..987220e 100644
--- a/units/systemd-journal-gatewayd.service.in
+++ b/units/systemd-journal-gatewayd.service.in
@@ -20,5 +20,9 @@ PrivateNetwork=yes
 ProtectSystem=full
 ProtectHome=yes
 
+# If there are many split upjournal files we need a lot of fds to
+# access them all and combine
+LimitNOFILE=16384
+
 [Install]
 Also=systemd-journal-gatewayd.socket
diff --git a/units/systemd-journal-upload.service.in b/units/systemd-journal-upload.service.in
index 359ff10..b2e3c76 100644
--- a/units/systemd-journal-upload.service.in
+++ b/units/systemd-journal-upload.service.in
@@ -17,5 +17,9 @@ PrivateTmp=yes
 PrivateDevices=yes
 WatchdogSec=20min
 
+# If there are many split up journal files we need a lot of fds to
+# access them all and combine
+LimitNOFILE=16384
+
 [Install]
 WantedBy=multi-user.target
diff --git a/units/systemd-journald.service.in b/units/systemd-journald.service.in
index 441d5b1..41bebbe 100644
--- a/units/systemd-journald.service.in
+++ b/units/systemd-journald.service.in
@@ -25,5 +25,7 @@ CapabilityBoundingSet=CAP_SYS_ADMIN CAP_DAC_OVERRIDE CAP_SYS_PTRACE CAP_SYSLOG C
 WatchdogSec=1min
 
 # Increase the default a bit in order to allow many simultaneous
-# services being run since we keep one fd open per service.
+# services being run since we keep one fd open per service. Also, when
+# flushing journal files to disk, we might need a lot of fds when many
+# journal files are combined.
 LimitNOFILE=16384

commit 06a5b99f71c4b160a67d085b6fc106b07ce0bee3
Author: Lennart Poettering <lennart at poettering.net>
Date:   Thu Jan 8 01:59:58 2015 +0100

    udevadm: don't hit an assert when obsolete parameters are passed
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1178051
    (cherry picked from commit 2ac23519d04835e8d8dfbce3d08d9ff76db58a68)

diff --git a/src/udev/udevadm-settle.c b/src/udev/udevadm-settle.c
index ddcf1dd..7d78e6d 100644
--- a/src/udev/udevadm-settle.c
+++ b/src/udev/udevadm-settle.c
@@ -45,12 +45,12 @@ static void help(void) {
 
 static int adm_settle(struct udev *udev, int argc, char *argv[]) {
         static const struct option options[] = {
-                { "seq-start",      required_argument, NULL, '\0' }, /* removed */
-                { "seq-end",        required_argument, NULL, '\0' }, /* removed */
                 { "timeout",        required_argument, NULL, 't' },
                 { "exit-if-exists", required_argument, NULL, 'E' },
-                { "quiet",          no_argument,       NULL, 'q' },  /* removed */
                 { "help",           no_argument,       NULL, 'h' },
+                { "seq-start",      required_argument, NULL, 's' }, /* removed */
+                { "seq-end",        required_argument, NULL, 'e' }, /* removed */
+                { "quiet",          no_argument,       NULL, 'q' }, /* removed */
                 {}
         };
         const char *exists = NULL;
@@ -60,8 +60,9 @@ static int adm_settle(struct udev *udev, int argc, char *argv[]) {
         struct udev_queue *queue;
         int rc = EXIT_FAILURE;
 
-        while ((c = getopt_long(argc, argv, "s:e:t:E:qh", options, NULL)) >= 0) {
+        while ((c = getopt_long(argc, argv, "t:E:hs:e:q", options, NULL)) >= 0) {
                 switch (c) {
+
                 case 't': {
                         int r;
 
@@ -73,14 +74,24 @@ static int adm_settle(struct udev *udev, int argc, char *argv[]) {
                         };
                         break;
                 }
+
                 case 'E':
                         exists = optarg;
                         break;
+
                 case 'h':
                         help();
                         return EXIT_SUCCESS;
+
+                case 's':
+                case 'e':
+                case 'q':
+                        log_info("Option -%c no longer supported.", c);
+                        return EXIT_FAILURE;
+
                 case '?':
                         return EXIT_FAILURE;
+
                 default:
                         assert_not_reached("Unknown argument");
                 }

commit 24f984a1476ee66c90b336cf29ddb03e75273089
Author: Michael Biebl <biebl at debian.org>
Date:   Fri Nov 28 06:04:48 2014 +0100

    sysv-generator: initialize units before use to ensure correct ordering
    
    The original loop called fix_order() on each service immediately after
    loading it, but fix_order() would reference other units which were not
    loaded yet.
    This resulted in bogus and unnecessary orderings based on the static
    start priorities.
    
    Therefore call load_sysv() for every init script when traversing them in
    enumerate_sysv(). This ensures that all units are loaded when
    fix_order() is called.
    
    Bug-Debian: https://bugs.debian.org/771118
    (cherry picked from commit 1ed0c19f81fd13cdf283c6def0168ce122a853a9)

diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
index 9488d76..101dfdd 100644
--- a/src/sysv-generator/sysv-generator.c
+++ b/src/sysv-generator/sysv-generator.c
@@ -760,6 +760,10 @@ static int enumerate_sysv(LookupPaths lp, Hashmap *all_services) {
                         service->name = name;
                         service->path = fpath;
 
+                        r = load_sysv(service);
+                        if (r < 0)
+                                continue;
+
                         r = hashmap_put(all_services, service->name, service);
                         if (r < 0)
                                 return log_oom();
@@ -944,10 +948,6 @@ int main(int argc, char *argv[]) {
         }
 
         HASHMAP_FOREACH(service, all_services, j) {
-                q = load_sysv(service);
-                if (q < 0)
-                        continue;
-
                 q = fix_order(service, all_services);
                 if (q < 0)
                         continue;

commit 5bf11a0f2ed6f9b9898c8a672bf591e9599ac19c
Author: Michael Biebl <biebl at debian.org>
Date:   Mon Jan 5 09:49:44 2015 +0100

    sysv-generator: handle Provides: for non-virtual facility names
    
    The list of provided facility names as specified via Provides: in the
    LSB header was originally implemented by adding those facilities to the
    Names= property via unit_add_name().
    
    In commit 95ed3294c632f5606327149f10cef1eb34422862 the internal SysV
    support was replaced by a generator and support for parsing the Names=
    option had been removed from the unit file parsing in v186.
    As a result, Provides: for non-virtual facility was dropped when
    introducing the sysv-generator.
    
    Since quite a few SysV init scripts still use that functionality (at
    least in distros like Debian which have a large body of SysV init
    scripts), add back support by making those facility names available via
    symlinks to the unit filename to ensure correct orderings between
    SysV init scripts which use those facility names.
    
    Bug-Debian: https://bugs.debian.org/774335
    (cherry picked from commit b7e7184634d573fb73143210962acce205f37f61)

diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
index 1c4d536..9488d76 100644
--- a/src/sysv-generator/sysv-generator.c
+++ b/src/sysv-generator/sysv-generator.c
@@ -112,6 +112,27 @@ static int add_symlink(const char *service, const char *where) {
         return 1;
 }
 
+static int add_alias(const char *service, const char *alias) {
+        _cleanup_free_ char *link = NULL;
+        int r;
+
+        assert(service);
+        assert(alias);
+
+        link = strjoin(arg_dest, "/", alias, NULL);
+        if (!link)
+                return log_oom();
+
+        r = symlink(service, link);
+        if (r < 0) {
+                if (errno == EEXIST)
+                        return 0;
+                return -errno;
+        }
+
+        return 1;
+}
+
 static int generate_unit_file(SysvStub *s) {
         char **p;
         _cleanup_fclose_ FILE *f = NULL;
@@ -462,7 +483,9 @@ static int load_sysv(SysvStub *s) {
                                         if (r == 0)
                                                 continue;
 
-                                        if (unit_name_to_type(m) != UNIT_SERVICE) {
+                                        if (unit_name_to_type(m) == UNIT_SERVICE) {
+                                                r = add_alias(s->name, m);
+                                        } else {
                                                 /* NB: SysV targets
                                                  * which are provided
                                                  * by a service are

commit d76b52b66dc8db04f5df8f87e2ce737d7428f4d4
Author: Lennart Poettering <lennart at poettering.net>
Date:   Tue Jan 6 20:33:46 2015 +0100

    tmpfiles: make gcc shut up
    
    (cherry picked from commit 1e95893a89b87e4ed656910e30c430e583bc8133)

diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
index 02e439e..2904138 100644
--- a/src/tmpfiles/tmpfiles.c
+++ b/src/tmpfiles/tmpfiles.c
@@ -1063,7 +1063,7 @@ static int clean_item(Item *i) {
 }
 
 static int process_item(Item *i) {
-        int r, q, p, s, t = 0;
+        int r, q, p, t = 0;
         _cleanup_free_ char *prefix = NULL;
 
         assert(i);

commit 9db605a4db983e032bff509571c54c8ea3bcea9a
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Tue Jan 6 09:53:12 2015 -0500

    tmpfiles: finish with EXIT_FAILURE if anything failed
    
    Return value is successful only if everything succeeded.
    
    (cherry picked from commit 1db50423ba427565f92c05f3aaeab351860e30bc)

diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
index 1e4675f..02e439e 100644
--- a/src/tmpfiles/tmpfiles.c
+++ b/src/tmpfiles/tmpfiles.c
@@ -1063,7 +1063,7 @@ static int clean_item(Item *i) {
 }
 
 static int process_item(Item *i) {
-        int r, q, p;
+        int r, q, p, s, t = 0;
         _cleanup_free_ char *prefix = NULL;
 
         assert(i);
@@ -1081,21 +1081,23 @@ static int process_item(Item *i) {
                 Item *j;
 
                 j = hashmap_get(items, prefix);
-                if (j)
-                        process_item(j);
+                if (j) {
+                        int s;
+
+                        s = process_item(j);
+                        if (s < 0 && t == 0)
+                                t = s;
+                }
         }
 
         r = arg_create ? create_item(i) : 0;
         q = arg_remove ? remove_item(i) : 0;
         p = arg_clean ? clean_item(i) : 0;
 
-        if (r < 0)
-                return r;
-
-        if (q < 0)
-                return q;
-
-        return p;
+        return t < 0 ? t :
+                r < 0 ? r :
+                q < 0 ? q :
+                p;
 }
 
 static void item_free(Item *i) {
@@ -1648,11 +1650,17 @@ int main(int argc, char *argv[]) {
                 }
         }
 
-        HASHMAP_FOREACH(i, globs, iterator)
-                process_item(i);
+        HASHMAP_FOREACH(i, globs, iterator) {
+                k = process_item(i);
+                if (k < 0 && r == 0)
+                        r = k;
+        }
 
-        HASHMAP_FOREACH(i, items, iterator)
-                process_item(i);
+        HASHMAP_FOREACH(i, items, iterator) {
+                k = process_item(i);
+                if (k < 0 && r == 0)
+                        r = k;
+        }
 
 finish:
         while ((i = hashmap_steal_first(items)))

commit b6a844bde54792d21b1a8d552d3b6073ebb80a32
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Tue Jan 6 00:26:26 2015 -0500

    journal-upload: enable curl debug output conditionally
    
    https://bugs.freedesktop.org/show_bug.cgi?id=86464
    (cherry picked from commit 5dabb1e04e4521abf040e77a8322b70e7acdc7b0)

diff --git a/src/journal-remote/journal-upload.c b/src/journal-remote/journal-upload.c
index 9f13ffd..02d0cb2 100644
--- a/src/journal-remote/journal-upload.c
+++ b/src/journal-remote/journal-upload.c
@@ -243,8 +243,9 @@ int start_upload(Uploader *u,
                 easy_setopt(curl, CURLOPT_HTTPHEADER, u->header,
                             LOG_ERR, return -EXFULL);
 
-                /* enable verbose for easier tracing */
-                easy_setopt(curl, CURLOPT_VERBOSE, 1L, LOG_WARNING, );
+                if (_unlikely_(log_get_max_level() >= LOG_DEBUG))
+                        /* enable verbose for easier tracing */
+                        easy_setopt(curl, CURLOPT_VERBOSE, 1L, LOG_WARNING, );
 
                 easy_setopt(curl, CURLOPT_USERAGENT,
                             "systemd-journal-upload " PACKAGE_STRING,

commit 14d8078ce6454c20c071f2a932899e4e133b92da
Author: Chris Atkinson <cwa at pipeline.com>
Date:   Thu Jan 1 16:35:34 2015 -0500

    man: clarify path escaping and reference systemd-escape
    
    This patch adds more detail to the description of how path escaping
    operates and provides a pointer to the systemd-escape program. Either
    would serve to answer the question raised in the bug report, so
    hopefully this will allow it to be closed.
    
    https://bugs.freedesktop.org/show_bug.cgi?id=87688
    (cherry picked from commit 995084c7b4683190404ec90f8924b3433b5a1a18)

diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
index f1867ae..e20851f 100644
--- a/man/systemd.unit.xml
+++ b/man/systemd.unit.xml
@@ -225,12 +225,17 @@
                 the file system namespace. If this applies, a special
                 way to escape the path name is used, so that the
                 result is usable as part of a filename. Basically,
-                given a path, "/" is replaced by "-", and all
-                unprintable characters and the "-" are replaced by
-                C-style "\x2d" escapes. The root directory "/" is
-                encoded as single dash, while otherwise the initial
-                and ending "/" is removed from all paths during
-                transformation. This escaping is reversible.</para>
+                given a path, "/" is replaced by "-" and all other
+                characters which are not ASCII alphanumerics are
+                replaced by C-style "\x2d" escapes (except that "_"
+                is never replaced and "." is only replaced when it
+                would be the first character in the escaped path).
+                The root directory "/" is encoded as single dash,
+                while otherwise the initial and ending "/" are removed
+                from all paths during transformation. This escaping
+                is reversible. Properly escaped paths can be generated
+                using the <citerefentry><refentrytitle>systemd-escape</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                command.</para>
 
                 <para>Optionally, units may be instantiated from a
                 template file at runtime. This allows creation of

commit 16bf8f4096a15468e612b6cd8f6d3e5fd59ef7da
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Mon Jan 5 19:03:08 2015 -0500

    cgroup: memory limits on / are not supported
    
    (cherry picked from commit 75399049653f2d5e22032da70cf96f20d7b4d9a6)

diff --git a/src/core/cgroup.c b/src/core/cgroup.c
index 5f3d990..37db3d5 100644
--- a/src/core/cgroup.c
+++ b/src/core/cgroup.c
@@ -382,7 +382,7 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha
                 }
         }
 
-        if (mask & CGROUP_MEMORY) {
+        if ((mask & CGROUP_MEMORY) & !is_root) {
                 if (c->memory_limit != (uint64_t) -1) {
                         char buf[DECIMAL_STR_MAX(uint64_t) + 1];
 

commit f11dbe2f409c293a1565cfcebbbb703c73e897b3
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Mon Jan 5 19:03:23 2015 -0500

    cgroup: fix error message
    
    systemd[1]: Failed to set memory.limit_in_bytes on : Invalid argument
    
    (cherry picked from commit 6da139137eb4b0ee68ca4aa4ddfdab02e8a5cf98)

diff --git a/src/core/cgroup.c b/src/core/cgroup.c
index 6b3b954..5f3d990 100644
--- a/src/core/cgroup.c
+++ b/src/core/cgroup.c
@@ -297,6 +297,9 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha
         /* Some cgroup attributes are not support on the root cgroup,
          * hence silently ignore */
         is_root = isempty(path) || path_equal(path, "/");
+        if (is_root)
+                /* Make sure we don't try to display messages with an empty path. */
+                path = "/";
 
         /* We generally ignore errors caused by read-only mounted
          * cgroup trees (assuming we are running in a container then),

commit 97033df7a71b1bc506094ad872a28ed9b3bde0cb
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Thu Jan 1 04:40:41 2015 +0100

    journal: call connect() with dropped privileges
    
    When systemd starts a service, it first opened /run/systemd/journal/stdout
    socket, and only later switched to the right user.group (if they are
    specified). Later on, journald looked at the credentials, and saw
    root.root, because credentials are stored at the time the socket is
    opened. As a result, all messages passed over _TRANSPORT=stdout were
    logged with _UID=0, _GID=0.
    
    Drop real uid and gid temporarily to fix the issue.
    
    (cherry picked from commit 524daa8c3e2bd63ad9dbc24711cdcfb45a65b2db)
    
    Conflicts:
    	src/core/execute.c

diff --git a/src/core/execute.c b/src/core/execute.c
index f45f1c1..ed75035 100644
--- a/src/core/execute.c
+++ b/src/core/execute.c
@@ -217,12 +217,52 @@ static int open_null_as(int flags, int nfd) {
         return r;
 }
 
-static int connect_logger_as(const ExecContext *context, ExecOutput output, const char *ident, const char *unit_id, int nfd) {
-        int fd, r;
+static int connect_journal_socket(int fd, uid_t uid, gid_t gid) {
         union sockaddr_union sa = {
                 .un.sun_family = AF_UNIX,
                 .un.sun_path = "/run/systemd/journal/stdout",
         };
+        uid_t olduid = UID_INVALID;
+        gid_t oldgid = GID_INVALID;
+        int r;
+
+        if (gid != GID_INVALID) {
+                oldgid = getgid();
+
+                r = setegid(gid);
+                if (r < 0)
+                        return -errno;
+        }
+
+        if (uid != UID_INVALID) {
+                olduid = getuid();
+
+                r = seteuid(uid);
+                if (r < 0) {
+                        r = -errno;
+                        goto restore_gid;
+                }
+        }
+
+        r = connect(fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + strlen(sa.un.sun_path));
+        if (r < 0)
+                r = -errno;
+
+        /* If we fail to restore the uid or gid, things will likely
+           fail later on. This should only happen if an LSM interferes. */
+
+        if (uid != UID_INVALID)
+                (void) seteuid(olduid);
+
+ restore_gid:
+        if (gid != GID_INVALID)
+                (void) setegid(oldgid);
+
+        return r;
+}
+
+static int connect_logger_as(const ExecContext *context, ExecOutput output, const char *ident, const char *unit_id, int nfd, uid_t uid, gid_t gid) {
+        int fd, r;
 
         assert(context);
         assert(output < _EXEC_OUTPUT_MAX);
@@ -233,11 +273,9 @@ static int connect_logger_as(const ExecContext *context, ExecOutput output, cons
         if (fd < 0)
                 return -errno;
 
-        r = connect(fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + strlen(sa.un.sun_path));
-        if (r < 0) {
-                safe_close(fd);
-                return -errno;
-        }
+        r = connect_journal_socket(fd, uid, gid);
+        if (r < 0)
+                return r;
 
         if (shutdown(fd, SHUT_RD) < 0) {
                 safe_close(fd);
@@ -356,7 +394,7 @@ static int setup_input(const ExecContext *context, int socket_fd, bool apply_tty
         }
 }
 
-static int setup_output(const ExecContext *context, int fileno, int socket_fd, const char *ident, const char *unit_id, bool apply_tty_stdin) {
+static int setup_output(const ExecContext *context, int fileno, int socket_fd, const char *ident, const char *unit_id, bool apply_tty_stdin, uid_t uid, gid_t gid) {
         ExecOutput o;
         ExecInput i;
         int r;
@@ -423,9 +461,9 @@ static int setup_output(const ExecContext *context, int fileno, int socket_fd, c
         case EXEC_OUTPUT_KMSG_AND_CONSOLE:
         case EXEC_OUTPUT_JOURNAL:
         case EXEC_OUTPUT_JOURNAL_AND_CONSOLE:
-                r = connect_logger_as(context, o, ident, unit_id, fileno);
+                r = connect_logger_as(context, o, ident, unit_id, fileno, uid, gid);
                 if (r < 0) {
-                        log_struct_unit(LOG_CRIT, unit_id,
+                        log_struct_unit(LOG_ERR, unit_id,
                                 "MESSAGE=Failed to connect std%s of %s to the journal socket: %s",
                                 fileno == STDOUT_FILENO ? "out" : "err",
                                 unit_id, strerror(-r),
@@ -1324,6 +1362,15 @@ static int exec_child(ExecCommand *command,
                 }
         }
 
+        if (context->user) {
+                username = context->user;
+                err = get_user_creds(&username, &uid, &gid, &home, &shell);
+                if (err < 0) {
+                        *error = EXIT_USER;
+                        return err;
+                }
+        }
+
         /* If a socket is connected to STDIN/STDOUT/STDERR, we
          * must sure to drop O_NONBLOCK */
         if (socket_fd >= 0)
@@ -1335,13 +1382,13 @@ static int exec_child(ExecCommand *command,
                 return err;
         }
 
-        err = setup_output(context, STDOUT_FILENO, socket_fd, basename(command->path), params->unit_id, params->apply_tty_stdin);
+        err = setup_output(context, STDOUT_FILENO, socket_fd, basename(command->path), params->unit_id, params->apply_tty_stdin, uid, gid);
         if (err < 0) {
                 *error = EXIT_STDOUT;
                 return err;
         }
 
-        err = setup_output(context, STDERR_FILENO, socket_fd, basename(command->path), params->unit_id, params->apply_tty_stdin);
+        err = setup_output(context, STDERR_FILENO, socket_fd, basename(command->path), params->unit_id, params->apply_tty_stdin, uid, gid);
         if (err < 0) {
                 *error = EXIT_STDERR;
                 return err;
@@ -1416,21 +1463,12 @@ static int exec_child(ExecCommand *command,
         if (context->utmp_id)
                 utmp_put_init_process(context->utmp_id, getpid(), getsid(0), context->tty_path);
 
-        if (context->user) {
-                username = context->user;
-                err = get_user_creds(&username, &uid, &gid, &home, &shell);
+        if (context->user && is_terminal_input(context->std_input)) {
+                err = chown_terminal(STDIN_FILENO, uid);
                 if (err < 0) {
-                        *error = EXIT_USER;
+                        *error = EXIT_STDIN;
                         return err;
                 }
-
-                if (is_terminal_input(context->std_input)) {
-                        err = chown_terminal(STDIN_FILENO, uid);
-                        if (err < 0) {
-                                *error = EXIT_STDIN;
-                                return err;
-                        }
-                }
         }
 
 #ifdef ENABLE_KDBUS

commit c1fc0cd8b4660d32c2c5364b82c279e3f3860555
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Thu Jan 15 23:28:36 2015 -0500

    Steal {UID,GID,MODE}_INVALID definitions
    
    Based on commit fed1e721fd0c81e60c77120539f34e16c2585634.

diff --git a/src/shared/macro.h b/src/shared/macro.h
index 9ee332c..abf0dc0 100644
--- a/src/shared/macro.h
+++ b/src/shared/macro.h
@@ -408,4 +408,8 @@ do {                                                                    \
 #endif
 #endif
 
+#define UID_INVALID ((uid_t) -1)
+#define GID_INVALID ((gid_t) -1)
+#define MODE_INVALID ((mode_t) -1)
+
 #include "log.h"

commit 373b065b3359c48f2cb240c511ef7ff0db3d47b7
Author: Michael Biebl <biebl at debian.org>
Date:   Mon Jan 5 14:12:47 2015 +0100

    core: fix typo in log message
    
    (cherry picked from commit 8b173b5e8ccbf946ee88af456792d8e720292d9b)

diff --git a/src/core/main.c b/src/core/main.c
index a9ca34d..912b3ff 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -1123,7 +1123,7 @@ static void test_usr(void) {
         if (dir_is_empty("/usr") <= 0)
                 return;
 
-        log_warning("/usr appears to be on its own filesytem and is not already mounted. This is not a supported setup. "
+        log_warning("/usr appears to be on its own filesystem and is not already mounted. This is not a supported setup. "
                     "Some things will probably break (sometimes even silently) in mysterious ways. "
                     "Consult http://freedesktop.org/wiki/Software/systemd/separate-usr-is-broken for more information.");
 }

commit f2f2d69a27be0790ad57c40173b4a19943c6eece
Author: Lennart Poettering <lennart at poettering.net>
Date:   Tue Dec 30 01:56:42 2014 +0100

    cgroup: downgrade log messages when we cannot write to cgroup trees that are mounted read-only
    
    (cherry picked from commit 714e2e1d56b97dcf2ebae2d0447b48f21e38a600)

diff --git a/src/core/cgroup.c b/src/core/cgroup.c
index b19e442..6b3b954 100644
--- a/src/core/cgroup.c
+++ b/src/core/cgroup.c
@@ -200,7 +200,8 @@ static int whitelist_device(const char *path, const char *node, const char *acc)
 
         r = cg_set_attribute("devices", path, "devices.allow", buf);
         if (r < 0)
-                log_full(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, "Failed to set devices.allow on %s: %s", path, strerror(-r));
+                log_full(IN_SET(r, -ENOENT, -EROFS, -EINVAL) ? LOG_DEBUG : LOG_WARNING,
+                         "Failed to set devices.allow on %s: %s", path, strerror(-r));
 
         return r;
 }
@@ -272,7 +273,8 @@ static int whitelist_major(const char *path, const char *name, char type, const
 
                 r = cg_set_attribute("devices", path, "devices.allow", buf);
                 if (r < 0)
-                        log_full(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, "Failed to set devices.allow on %s: %s", path, strerror(-r));
+                        log_full(IN_SET(r, -ENOENT, -EROFS, -EINVAL) ? LOG_DEBUG : LOG_WARNING,
+                                 "Failed to set devices.allow on %s: %s", path, strerror(-r));
         }
 
         return 0;
@@ -296,6 +298,10 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha
          * hence silently ignore */
         is_root = isempty(path) || path_equal(path, "/");
 
+        /* We generally ignore errors caused by read-only mounted
+         * cgroup trees (assuming we are running in a container then),
+         * and missing cgroups, i.e. EROFS and ENOENT. */
+
         if ((mask & CGROUP_CPU) && !is_root) {
                 char buf[MAX(DECIMAL_STR_MAX(unsigned long), DECIMAL_STR_MAX(usec_t)) + 1];
 
@@ -304,12 +310,14 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha
                         c->cpu_shares != (unsigned long) -1 ? c->cpu_shares : 1024);
                 r = cg_set_attribute("cpu", path, "cpu.shares", buf);
                 if (r < 0)
-                        log_full(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, "Failed to set cpu.shares on %s: %s", path, strerror(-r));
+                        log_full(IN_SET(r, -ENOENT, -EROFS) ? LOG_DEBUG : LOG_WARNING,
+                                 "Failed to set cpu.shares on %s: %s", path, strerror(-r));
 
                 sprintf(buf, USEC_FMT "\n", CGROUP_CPU_QUOTA_PERIOD_USEC);
                 r = cg_set_attribute("cpu", path, "cpu.cfs_period_us", buf);
                 if (r < 0)
-                        log_full(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, "Failed to set cpu.cfs_period_us on %s: %s", path, strerror(-r));
+                        log_full(IN_SET(r, -ENOENT, -EROFS) ? LOG_DEBUG : LOG_WARNING,
+                                 "Failed to set cpu.cfs_period_us on %s: %s", path, strerror(-r));
 
                 if (c->cpu_quota_per_sec_usec != USEC_INFINITY) {
                         sprintf(buf, USEC_FMT "\n", c->cpu_quota_per_sec_usec * CGROUP_CPU_QUOTA_PERIOD_USEC / USEC_PER_SEC);
@@ -317,7 +325,8 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha
                 } else
                         r = cg_set_attribute("cpu", path, "cpu.cfs_quota_us", "-1");
                 if (r < 0)
-                        log_full(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, "Failed to set cpu.cfs_quota_us on %s: %s", path, strerror(-r));
+                        log_full(IN_SET(r, -ENOENT, -EROFS) ? LOG_DEBUG : LOG_WARNING,
+                                 "Failed to set cpu.cfs_quota_us on %s: %s", path, strerror(-r));
         }
 
         if (mask & CGROUP_BLKIO) {
@@ -332,7 +341,8 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha
                                 c->blockio_weight != (unsigned long) -1 ? c->blockio_weight : 1000);
                         r = cg_set_attribute("blkio", path, "blkio.weight", buf);
                         if (r < 0)
-                                log_full(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, "Failed to set blkio.weight on %s: %s", path, strerror(-r));
+                                log_full(IN_SET(r, -ENOENT, -EROFS) ? LOG_DEBUG : LOG_WARNING,
+                                         "Failed to set blkio.weight on %s: %s", path, strerror(-r));
 
                         /* FIXME: no way to reset this list */
                         LIST_FOREACH(device_weights, w, c->blockio_device_weights) {
@@ -345,7 +355,8 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha
                                 sprintf(buf, "%u:%u %lu", major(dev), minor(dev), w->weight);
                                 r = cg_set_attribute("blkio", path, "blkio.weight_device", buf);
                                 if (r < 0)
-                                        log_full(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, "Failed to set blkio.weight_device on %s: %s", path, strerror(-r));
+                                        log_full(IN_SET(r, -ENOENT, -EROFS) ? LOG_DEBUG : LOG_WARNING,
+                                                 "Failed to set blkio.weight_device on %s: %s", path, strerror(-r));
                         }
                 }
 
@@ -363,7 +374,8 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha
                         sprintf(buf, "%u:%u %" PRIu64 "\n", major(dev), minor(dev), b->bandwidth);
                         r = cg_set_attribute("blkio", path, a, buf);
                         if (r < 0)
-                                log_full(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, "Failed to set %s on %s: %s", a, path, strerror(-r));
+                                log_full(IN_SET(r, -ENOENT, -EROFS) ? LOG_DEBUG : LOG_WARNING,
+                                         "Failed to set %s on %s: %s", a, path, strerror(-r));
                 }
         }
 
@@ -377,18 +389,24 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha
                         r = cg_set_attribute("memory", path, "memory.limit_in_bytes", "-1");
 
                 if (r < 0)
-                        log_full(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, "Failed to set memory.limit_in_bytes on %s: %s", path, strerror(-r));
+                        log_full(IN_SET(r, -ENOENT, -EROFS) ? LOG_DEBUG : LOG_WARNING,
+                                 "Failed to set memory.limit_in_bytes on %s: %s", path, strerror(-r));
         }
 
         if ((mask & CGROUP_DEVICE) && !is_root) {
                 CGroupDeviceAllow *a;
 
+                /* Changing the devices list of a populated cgroup
+                 * might result in EINVAL, hence ignore EINVAL
+                 * here. */
+
                 if (c->device_allow || c->device_policy != CGROUP_AUTO)
                         r = cg_set_attribute("devices", path, "devices.deny", "a");
                 else
                         r = cg_set_attribute("devices", path, "devices.allow", "a");
                 if (r < 0)
-                        log_full(r == -ENOENT ? LOG_DEBUG : LOG_WARNING, "Failed to reset devices.list on %s: %s", path, strerror(-r));
+                        log_full(IN_SET(r, -ENOENT, -EROFS, -EINVAL) ? LOG_DEBUG : LOG_WARNING,
+                                 "Failed to reset devices.list on %s: %s", path, strerror(-r));
 
                 if (c->device_policy == CGROUP_CLOSED ||
                     (c->device_policy == CGROUP_AUTO && c->device_allow)) {

commit 1d513552457c318af68cd8a1e6cc25deae63230f
Author: Robert Milasan <rmilasan at suse.com>
Date:   Tue Dec 30 18:58:05 2014 +0100

    accelerometer: drop unused -x option
    
    (cherry picked from commit 7fcf5779b4e5bcfab246a6d5d9c75d6775c20873)

diff --git a/src/udev/accelerometer/accelerometer.c b/src/udev/accelerometer/accelerometer.c
index 4513bc6..18513bf 100644
--- a/src/udev/accelerometer/accelerometer.c
+++ b/src/udev/accelerometer/accelerometer.c
@@ -239,7 +239,7 @@ int main (int argc, char** argv)
         while (1) {
                 int option;
 
-                option = getopt_long(argc, argv, "dxh", options, NULL);
+                option = getopt_long(argc, argv, "dh", options, NULL);
                 if (option == -1)
                         break;
 

commit b121fb135c86af7dab2b0725abb19969fef4674d
Author: Susant Sahani <susant at redhat.com>
Date:   Tue Dec 30 22:11:38 2014 +0530

    man: Fix spelling
    
    (cherry picked from commit 922d948b9f9dc4b90ac70d729d87fe505a58481f)

diff --git a/man/sd_event_add_child.xml b/man/sd_event_add_child.xml
index 012fdb6..f064010 100644
--- a/man/sd_event_add_child.xml
+++ b/man/sd_event_add_child.xml
@@ -100,7 +100,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
     being stopped by a signal), and <constant>WCONTINUED</constant>
     (watch for the child being resumed by a signal). See
     <citerefentry><refentrytitle>waitid</refentrytitle><manvolnum>2</manvolnum></citerefentry>
-    for futher information.</para>
+    for further information.</para>
 
     <para>Only a single handler may be installed for a specific
     child. The handler is enabled
diff --git a/man/sd_event_add_signal.xml b/man/sd_event_add_signal.xml
index 6584268..fa87e42 100644
--- a/man/sd_event_add_signal.xml
+++ b/man/sd_event_add_signal.xml
@@ -95,7 +95,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
     <structname>const struct signalfd_siginfo</structname> containing
     the information about the received signal. See
     <citerefentry><refentrytitle>signalfd</refentrytitle><manvolnum>2</manvolnum></citerefentry>
-    for futher information.</para>
+    for further information.</para>
 
     <para>Only a single handler may be installed for a specific
     signal. The signal will be unblocked, and must be
diff --git a/man/systemctl.xml b/man/systemctl.xml
index 9b44537..7d643d7 100644
--- a/man/systemctl.xml
+++ b/man/systemctl.xml
@@ -173,7 +173,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
           <para>Note that any <varname>After=</varname> dependency is
           automatically mirrored to create a
           <varname>Before=</varname> dependency. Temporal dependencies
-          may be specified explictly, but are also created implicitly
+          may be specified explicitly, but are also created implicitly
           for units which are <varname>WantedBy=</varname> targets
           (see
           <citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry>),

commit b52f7fb181ebb68e4e23e2bf9e970847f6181220
Author: Marcel Holtmann <marcel at holtmann.org>
Date:   Mon Dec 29 20:47:04 2014 +0100

    hwdb: Update database of Bluetooth company identifiers
    
    (cherry picked from commit 5ef378c1c5ba1a29a461e77685765da81163c853)

diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb
index 11ec4da..d3aea5f 100644
--- a/hwdb/20-bluetooth-vendor-product.hwdb
+++ b/hwdb/20-bluetooth-vendor-product.hwdb
@@ -166,7 +166,7 @@ bluetooth:v0035*
  ID_VENDOR_FROM_DATABASE=Eclipse (HQ Espana) S.L.
 
 bluetooth:v0036*
- ID_VENDOR_FROM_DATABASE=Renesas Technology Corp.
+ ID_VENDOR_FROM_DATABASE=Renesas Electronics Corporation
 
 bluetooth:v0037*
  ID_VENDOR_FROM_DATABASE=Mobilian Corporation
@@ -1301,3 +1301,27 @@ bluetooth:v01AE*
 
 bluetooth:v01AF*
  ID_VENDOR_FROM_DATABASE=Sunrise Micro Devices, Inc.
+
+bluetooth:v01B0*
+ ID_VENDOR_FROM_DATABASE=Star Micronics Co., Ltd.
+
+bluetooth:v01B1*
+ ID_VENDOR_FROM_DATABASE=Netizens Sp. z o.o.
+
+bluetooth:v01B2*
+ ID_VENDOR_FROM_DATABASE=Nymi Inc.
+
+bluetooth:v01B3*
+ ID_VENDOR_FROM_DATABASE=Nytec, Inc.
+
+bluetooth:v01B4*
+ ID_VENDOR_FROM_DATABASE=Trineo Sp. z o.o.
+
+bluetooth:v01B5*
+ ID_VENDOR_FROM_DATABASE=Nest Labs Inc.
+
+bluetooth:v01B6*
+ ID_VENDOR_FROM_DATABASE=LM Technologies Ltd
+
+bluetooth:v01B7*
+ ID_VENDOR_FROM_DATABASE=General Electric Company

commit 7a77659e57f987e7b331b083f4c91981e4047985
Author: Stéphane Graber <stgraber at ubuntu.com>
Date:   Sat Dec 27 19:17:39 2014 +0100

    Fix check_loopback()
    
    Add missing htonl() so that check_loopback() actually tests for 127.0.0.1
    instead of 1.0.0.127 on little-endian machines.
    
    (cherry picked from commit 58a489c2b3628f3003d3901537bec8b5e6c1b7bd)

diff --git a/src/core/loopback-setup.c b/src/core/loopback-setup.c
index 6ac1fff..65f1368 100644
--- a/src/core/loopback-setup.c
+++ b/src/core/loopback-setup.c
@@ -64,7 +64,7 @@ static int check_loopback(void) {
                 struct sockaddr_in in;
         } sa = {
                 .in.sin_family = AF_INET,
-                .in.sin_addr.s_addr = INADDR_LOOPBACK,
+                .in.sin_addr.s_addr = htonl(INADDR_LOOPBACK),
         };
 
         /* If we failed to set up the loop back device, check whether

commit 1b525705c0dfb713aaef65ab9f1920e5cfd60d94
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Fri Dec 26 09:02:01 2014 -0500

    journald: always allocate space for object fields
    
    If OBJECT_PID= came as the last field, we would not reallocate the iovec to bigger size,
    and fail the assertion later on in dispatch_message_real().
    
    (cherry picked from commit 92ee6447b1deef7c79962a8121fdf8e58acb3a83)

diff --git a/src/journal/journald-native.c b/src/journal/journald-native.c
index 6d75ba6..655e2dd 100644
--- a/src/journal/journald-native.c
+++ b/src/journal/journald-native.c
@@ -133,7 +133,7 @@ void server_process_native_message(
                 /* A property follows */
 
                 /* n existing properties, 1 new, +1 for _TRANSPORT */
-                if (!GREEDY_REALLOC(iovec, m, n + 2 + N_IOVEC_META_FIELDS + !!object_pid * N_IOVEC_OBJECT_FIELDS)) {
+                if (!GREEDY_REALLOC(iovec, m, n + 2 + N_IOVEC_META_FIELDS + N_IOVEC_OBJECT_FIELDS)) {
                         log_oom();
                         break;
                 }

commit de399a2fd3b6e06dedd17ee9671ed8f175a45797
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Fri Dec 26 08:34:18 2014 -0500

    journald: fix off by one in native transport
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1177184
    (cherry picked from commit 12a717f8347f3daf0ae46a2b71c7d011d9c12fea)

diff --git a/src/journal/journald-native.c b/src/journal/journald-native.c
index a635202..6d75ba6 100644
--- a/src/journal/journald-native.c
+++ b/src/journal/journald-native.c
@@ -132,8 +132,8 @@ void server_process_native_message(
 
                 /* A property follows */
 
-                /* n received properties, +1 for _TRANSPORT */
-                if (!GREEDY_REALLOC(iovec, m, n + 1 + N_IOVEC_META_FIELDS + !!object_pid * N_IOVEC_OBJECT_FIELDS)) {
+                /* n existing properties, 1 new, +1 for _TRANSPORT */
+                if (!GREEDY_REALLOC(iovec, m, n + 2 + N_IOVEC_META_FIELDS + !!object_pid * N_IOVEC_OBJECT_FIELDS)) {
                         log_oom();
                         break;
                 }

commit 9ba7cef373cb1738832787691fb0d68865515822
Author: Manuel Mendez <mmendez534 at gmail.com>
Date:   Thu Dec 25 11:59:08 2014 -0500

    man: typo in sd_watchdog_enabled notes
    
    https://bugs.freedesktop.org/show_bug.cgi?id=87642
    (cherry picked from commit 7275929790d32784895993429f3607562cc1284e)

diff --git a/man/sd_watchdog_enabled.xml b/man/sd_watchdog_enabled.xml
index 462d7c6..297878d 100644
--- a/man/sd_watchdog_enabled.xml
+++ b/man/sd_watchdog_enabled.xml
@@ -129,7 +129,7 @@
                 <varname>$WATCHDOG_PID</varname> and
                 <varname>$WATCHDOG_USEC</varname> environment
                 variable. The call will ignore these variables if
-                <varname>$WATCHDOG_PID</varname> does containe the PID
+                <varname>$WATCHDOG_PID</varname> does not contain the PID
                 of the current process, under the assumption that in
                 that case, the variables were set for a different
                 process further up the process tree.</para>

commit 7911a6dda82ef240d5726eea64767c6d1735a567
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Thu Dec 25 11:12:54 2014 -0500

    man: add a note why %U,%h,%s are mostly useless
    
    The reasons were already given in the description of %U, but the
    are easy to overlook, and it's better to be explicit to avoid
    confusion.
    
    (cherry picked from commit b7a4d8de9273fab20e1e32e4846b6a866884e07a)

diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
index 803eff2..f1867ae 100644
--- a/man/systemd.unit.xml
+++ b/man/systemd.unit.xml
@@ -1524,6 +1524,16 @@
                     </tbody>
                   </tgroup>
                 </table>
+
+		<para>Please note that specifiers
+		<literal>%U</literal>, <literal>%h</literal>,
+		<literal>%s</literal> are mostly useless when systemd
+		is running in system mode.  PID 1 cannot query the
+		user account database for information, so the
+		specifiers only work as shortcuts for things which are
+		already specified in a different way in the unit
+		file. They are fully functional when systemd is
+		running in <option>--user</option> mode.</para>
         </refsect1>
 
         <refsect1>

commit 5fee0309d72c702351a8fae7a4be40cb54459449
Author: Mantas Mikulėnas <grawity at gmail.com>
Date:   Wed Dec 24 14:46:20 2014 +0200

    doc: os-release: mention all shell characters that must be escaped
    
    Since the manpage already talks about shell-compatibility, it should be
    more accurate about what needs to be escaped and how.
    
    (cherry picked from commit 321a3f5133a415ad9c95e15e95e46556c08973aa)

diff --git a/man/os-release.xml b/man/os-release.xml
index b298304..b4cbeba 100644
--- a/man/os-release.xml
+++ b/man/os-release.xml
@@ -68,17 +68,16 @@
                 (this means variable expansion is explicitly not
                 supported), allowing applications to read the file
                 without implementing a shell compatible execution
-                engine. Variable assignment values should be enclosed
-                in double or single quotes if they include spaces,
+                engine. Variable assignment values must be enclosed in
+                double or single quotes if they include spaces,
                 semicolons or other special characters outside of A-Z,
-                a-z, 0-9. All strings should be in UTF-8 format, and
-                non-printable characters should not be used. If double
-                or single quotes or backslashes are to be used within
-                variable assignments, they should be escaped with
-                backslashes, following shell style. It is not
-                supported to concatenate multiple individually quoted
-                strings. Lines beginning with "#" shall be ignored as
-                comments.</para>
+                a-z, 0-9.  Shell special characters ("$", quotes,
+                backslash, backtick) must be escaped with backslashes,
+                following shell style.  All strings should be in UTF-8
+                format, and non-printable characters should not be used.
+                It is not supported to concatenate multiple individually
+                quoted strings. Lines beginning with "#" shall be
+                ignored as comments.</para>
 
                 <para>The file <filename>/etc/os-release</filename>
                 takes precedence over

commit 75bf5737f83ed16e23db32e3f6a68c8a28fc7527
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Thu Dec 18 17:51:38 2014 -0500

    Treat a trailing backslash as an error
    
    Commit a2a5291b3f5 changed the parser to reject unfinished quoted
    strings. Unfortunately it introduced an error where a trailing
    backslash would case an infinite loop. Of course this must fixed, but
    the question is what to to instead. Allowing trailing backslashes and
    treating them as normal characters would be one option, but this seems
    suboptimal. First, there would be inconsistency between handling of
    quoting and of backslashes. Second, a trailing backslash is most
    likely an error, at it seems better to point it out to the user than
    to try to continue.
    
    Updated rules:
    ExecStart=/bin/echo \\ → OK, prints a backslash
    ExecStart=/bin/echo \ → error
    ExecStart=/bin/echo "x → error
    ExecStart=/bin/echo "x"y → error
    
    (cherry picked from commit ba774317ac7d3e67fdb9ed81663264d38859df59)
    
    Conflicts:
    	src/test/test-strv.c

diff --git a/src/shared/util.c b/src/shared/util.c
index 927bca4..956649e 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -418,7 +418,7 @@ int safe_atod(const char *s, double *ret_d) {
 
 static size_t strcspn_escaped(const char *s, const char *reject) {
         bool escaped = false;
-        size_t n;
+        int n;
 
         for (n=0; s[n]; n++) {
                 if (escaped)
@@ -428,6 +428,7 @@ static size_t strcspn_escaped(const char *s, const char *reject) {
                 else if (strchr(reject, s[n]))
                         break;
         }
+
         /* if s ends in \, return index of previous char */
         return n - escaped;
 }
@@ -463,6 +464,11 @@ const char* split(const char **state, size_t *l, const char *separator, bool quo
                 *state = current++ + *l + 2;
         } else if (quoted) {
                 *l = strcspn_escaped(current, separator);
+                if (current[*l] && !strchr(separator, current[*l])) {
+                        /* unfinished escape */
+                        *state = current;
+                        return NULL;
+                }
                 *state = current + *l;
         } else {
                 *l = strcspn(current, separator);
diff --git a/src/test/test-strv.c b/src/test/test-strv.c
index 204a821..c8a7b25 100644
--- a/src/test/test-strv.c
+++ b/src/test/test-strv.c
@@ -446,6 +446,11 @@ int main(int argc, char *argv[]) {
 
         test_invalid_unquote("a  --b='c \"d e\"'");
         test_invalid_unquote("a  --b='c \"d e\" '");
+
+        /* trailing backslashes */
+        test_strv_unquote("  x\\\\", STRV_MAKE("x\\"));
+        test_invalid_unquote("  x\\");
+
         test_invalid_unquote("a  --b='c \"d e\"garbage");
         test_invalid_unquote("'");
         test_invalid_unquote("\"");
diff --git a/src/test/test-util.c b/src/test/test-util.c
index de6a2a0..0fdd7f5 100644
--- a/src/test/test-util.c
+++ b/src/test/test-util.c
@@ -405,28 +405,12 @@ static void test_foreach_word(void) {
                 assert_se(strneq(expected[i++], word, l));
 }
 
-static void test_foreach_word_quoted(void) {
+static void check(const char *test, char** expected, bool trailing) {
         const char *word, *state;
         size_t l;
         int i = 0;
-        const char test[] = "test a b c 'd' e '' '' hhh '' '' \"a b c\"";
-        const char * const expected[] = {
-                "test",
-                "a",
-                "b",
-                "c",
-                "d",
-                "e",
-                "",
-                "",
-                "hhh",
-                "",
-                "",
-                "a b c",
-                NULL
-        };
 
-        printf("<%s>\n", test);
+        printf("<<<%s>>>\n", test);
         FOREACH_WORD_QUOTED(word, l, test, state) {
                 _cleanup_free_ char *t = NULL;
 
@@ -434,7 +418,34 @@ static void test_foreach_word_quoted(void) {
                 assert_se(strneq(expected[i++], word, l));
                 printf("<%s>\n", t);
         }
-        assert_se(isempty(state));
+        printf("<<<%s>>>\n", state);
+        assert(expected[i] == NULL);
+        assert_se(isempty(state) == !trailing);
+}
+
+static void test_foreach_word_quoted(void) {
+        check("test a b c 'd' e '' '' hhh '' '' \"a b c\"",
+              STRV_MAKE("test",
+                        "a",
+                        "b",
+                        "c",
+                        "d",
+                        "e",
+                        "",
+                        "",
+                        "hhh",
+                        "",
+                        "",
+                        "a b c"),
+              false);
+
+        check("test \"xxx",
+              STRV_MAKE("test"),
+              true);
+
+        check("test\\",
+              STRV_MAKE_EMPTY,
+              true);
 }
 
 static void test_default_term_for_tty(void) {

commit e96d192a498d4470a512f8243ad60e3525218662
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Thu Dec 18 17:01:42 2014 -0500

    test-strv: use STRV_MAKE
    
    (cherry picked from commit 30bcc05295944cfc2f3ed9159592130c003e19f5)

diff --git a/src/test/test-strv.c b/src/test/test-strv.c
index bbfe306..204a821 100644
--- a/src/test/test-strv.c
+++ b/src/test/test-strv.c
@@ -159,7 +159,7 @@ static void test_strv_quote_unquote(const char* const *split, const char *quoted
         }
 }
 
-static void test_strv_unquote(const char *quoted, const char **list) {
+static void test_strv_unquote(const char *quoted, char **list) {
         _cleanup_strv_free_ char **s;
         _cleanup_free_ char *j;
         unsigned i = 0;
@@ -431,18 +431,18 @@ int main(int argc, char *argv[]) {
         test_strv_quote_unquote(input_table_quotes, QUOTES_STRING);
         test_strv_quote_unquote(input_table_spaces, SPACES_STRING);
 
-        test_strv_unquote("    foo=bar     \"waldo\"    zzz    ", (const char*[]) { "foo=bar", "waldo", "zzz", NULL });
-        test_strv_unquote("", (const char*[]) { NULL });
-        test_strv_unquote(" ", (const char*[]) { NULL });
-        test_strv_unquote("   ", (const char*[]) { NULL });
-        test_strv_unquote("   x", (const char*[]) { "x", NULL });
-        test_strv_unquote("x   ", (const char*[]) { "x", NULL });
-        test_strv_unquote("  x   ", (const char*[]) { "x", NULL });
-        test_strv_unquote("  \"x\"   ", (const char*[]) { "x", NULL });
-        test_strv_unquote("  'x'   ", (const char*[]) { "x", NULL });
-        test_strv_unquote("  'x\"'   ", (const char*[]) { "x\"", NULL });
-        test_strv_unquote("  \"x'\"   ", (const char*[]) { "x'", NULL });
-        test_strv_unquote("a  '--b=c \"d e\"'", (const char*[]) { "a", "--b=c \"d e\"", NULL });
+        test_strv_unquote("    foo=bar     \"waldo\"    zzz    ", STRV_MAKE("foo=bar", "waldo", "zzz"));
+        test_strv_unquote("", STRV_MAKE_EMPTY);
+        test_strv_unquote(" ", STRV_MAKE_EMPTY);
+        test_strv_unquote("   ", STRV_MAKE_EMPTY);
+        test_strv_unquote("   x", STRV_MAKE("x"));
+        test_strv_unquote("x   ", STRV_MAKE("x"));
+        test_strv_unquote("  x   ", STRV_MAKE("x"));
+        test_strv_unquote("  \"x\"   ", STRV_MAKE("x"));
+        test_strv_unquote("  'x'   ", STRV_MAKE("x"));
+        test_strv_unquote("  'x\"'   ", STRV_MAKE("x\""));
+        test_strv_unquote("  \"x'\"   ", STRV_MAKE("x'"));
+        test_strv_unquote("a  '--b=c \"d e\"'", STRV_MAKE("a", "--b=c \"d e\""));
 
         test_invalid_unquote("a  --b='c \"d e\"'");
         test_invalid_unquote("a  --b='c \"d e\" '");

commit b90371e2ae09344aa372388aabbb02059fef54b8
Author: tomsod-m ya ru <tomsod-m at ya.ru>
Date:   Wed Dec 17 23:01:06 2014 -0500

    load-fragment: properly unescape \;
    
    https://bugs.freedesktop.org/show_bug.cgi?id=87393
    (cherry picked from commit 3851c51ad1dae6a1266896e7e364e424dc82467a)

diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
index e193a67..e31263e 100644
--- a/src/core/load-fragment.c
+++ b/src/core/load-fragment.c
@@ -589,8 +589,10 @@ int config_parse_exec(const char *unit,
                 FOREACH_WORD_QUOTED(word, l, rvalue, state) {
                         if (strneq(word, ";", MAX(l, 1U)))
                                 break;
-                        else if (strneq(word, "\\;", MAX(l, 1U)))
+                        else if (strneq(word, "\\;", MAX(l, 1U))) {
                                 word ++;
+                                l --;
+                        }
 
                         if (honour_argv0 && word == rvalue) {
                                 assert(!path);

commit f0c232bb1c497a8eb99428cfc70eaa4fdcc6c5b0
Author: Umut Tezduyar Lindskog <umut.tezduyar at axis.com>
Date:   Wed Dec 17 19:43:58 2014 -0500

    path: follow symbolic link for parent path (2)
    
    c0e57ba9e22ee937722958d8b912ade2a37f206d fixed the fallback path.
    We should do the same for name_to_handle_at().
    
    (cherry picked from commit b890bf6a81acfc989743ef7a66ba5710aec66411)

diff --git a/src/shared/path-util.c b/src/shared/path-util.c
index e1ab6d2..0ca2d33 100644
--- a/src/shared/path-util.c
+++ b/src/shared/path-util.c
@@ -489,7 +489,7 @@ int path_is_mount_point(const char *t, bool allow_symlink) {
                 return r;
 
         h.handle.handle_bytes = MAX_HANDLE_SZ;
-        r = name_to_handle_at(AT_FDCWD, parent, &h.handle, &mount_id_parent, 0);
+        r = name_to_handle_at(AT_FDCWD, parent, &h.handle, &mount_id_parent, AT_SYMLINK_FOLLOW);
         if (r < 0) {
                 /* The parent can't do name_to_handle_at() but the
                  * directory we are interested in can? If so, it must

commit 98963dfd60e4ae11cd4537e38cb6976da95abc9e
Author: Ken Werner <ken at linux.vnet.ibm.com>
Date:   Tue Dec 16 18:06:41 2014 +0100

    nspawn: fix invocation of the raw clone() system call on s390 and cris
    
    Since the order of the first and second arguments of the raw clone() system
    call is reversed on s390 and cris it needs to be invoked differently.
    
    (cherry picked from commit 60e1651a31c9c0ed1caef1a63f5e3a87156b0b1e)
    
    Conflicts:
    	src/shared/missing.h

diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index 27e533c..ef6cf20 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -3187,9 +3187,9 @@ int main(int argc, char *argv[]) {
                         goto finish;
                 }
 
-                pid = syscall(__NR_clone, SIGCHLD|CLONE_NEWNS|
-                                          (arg_share_system ? 0 : CLONE_NEWIPC|CLONE_NEWPID|CLONE_NEWUTS)|
-                                          (arg_private_network ? CLONE_NEWNET : 0), NULL);
+                pid = raw_clone(SIGCHLD|CLONE_NEWNS|
+                                (arg_share_system ? 0 : CLONE_NEWIPC|CLONE_NEWPID|CLONE_NEWUTS)|
+                                (arg_private_network ? CLONE_NEWNET : 0), NULL);
                 if (pid < 0) {
                         if (errno == EINVAL)
                                 log_error("clone() failed, do you have namespace support enabled in your kernel? (You need UTS, IPC, PID and NET namespacing built in): %m");
diff --git a/src/shared/missing.h b/src/shared/missing.h
index c98d027..f6b78ca 100644
--- a/src/shared/missing.h
+++ b/src/shared/missing.h
@@ -595,3 +595,13 @@ static inline int setns(int fd, int nstype) {
 #ifndef LOOPBACK_IFINDEX
 #define LOOPBACK_IFINDEX 1
 #endif
+
+static inline long raw_clone(unsigned long flags, void *child_stack) {
+#if defined(__s390__) || defined(__CRIS__)
+        /* On s390 and cris the order of the first and second arguments
+         * of the raw clone() system call is reversed. */
+        return syscall(__NR_clone, child_stack, flags);
+#else
+        return syscall(__NR_clone, flags, child_stack);
+#endif
+}

commit 1c06a92987e14e8bf8c07a7fc479ed4542fdb63e
Author: Marc Schmitzer <marc at marc-schmitzer.de>
Date:   Tue Dec 16 22:14:40 2014 -0500

    hwdb: add Lenovo 3000 N200 special key
    
    https://bugs.freedesktop.org/show_bug.cgi?id=87377
    (cherry picked from commit ef686ae230c55124e3efdc7d756fb1931e10aef4)

diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
index 533ad5b..f27eb7e 100644
--- a/hwdb/60-keyboard.hwdb
+++ b/hwdb/60-keyboard.hwdb
@@ -562,6 +562,10 @@ keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*3000*:pvr*
  KEYBOARD_KEY_98=suspend                                # Fn+F12 hibernate
  KEYBOARD_KEY_b4=prog1                                  # Lenovo Care
 
+# "Lenovo Care" Key of the 3000 N200
+keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO:pn0769AP2:pvr3000N200:*
+ KEYBOARD_KEY_b4=prog1
+
 # lenovo-ideapad
 keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*IdeaPad*:pvr*
 keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnS10-*:pvr*

commit 9f9052e9c85a5bbb00c14bf2a22b4bc9e49f9ccf
Author: Umut Tezduyar Lindskog <umut.tezduyar at axis.com>
Date:   Tue Dec 16 21:58:39 2014 +0100

    path: follow symbolic link for parent path
    
    [zj: When we lstat the target path, symlinks above the last component
         will be followed by both stat and lstat. So when we look at the
         parent, we should follow symlinks.]
    
    (cherry picked from commit c0e57ba9e22ee937722958d8b912ade2a37f206d)

diff --git a/src/shared/path-util.c b/src/shared/path-util.c
index acbce97..e1ab6d2 100644
--- a/src/shared/path-util.c
+++ b/src/shared/path-util.c
@@ -519,7 +519,7 @@ fallback:
         if (r < 0)
                 return r;
 
-        r = lstat(parent, &b);
+        r = stat(parent, &b);
         if (r < 0)
                 return -errno;
 

commit 731051b469872b76f9412ee9504e4d2922fca5a3
Author: Tom Gundersen <teg at jklm.no>
Date:   Tue Dec 16 22:24:54 2014 +0100

    shared: path-util - memory leak
    
    (cherry picked from commit 3542eac7f98e74ca106ac6df81b3b3cb158b35be)

diff --git a/src/shared/path-util.c b/src/shared/path-util.c
index be03695..acbce97 100644
--- a/src/shared/path-util.c
+++ b/src/shared/path-util.c
@@ -306,6 +306,7 @@ char **path_strv_resolve(char **l, const char *prefix) {
                         } else {
                                 /* canonicalized path goes outside of
                                  * prefix, keep the original path instead */
+                                free(u);
                                 u = orig;
                                 orig = NULL;
                         }

commit 46ae5b64312b6fd240235aa4cbcfdd1a187069e9
Author: Jan Synacek <jsynacek at redhat.com>
Date:   Mon Dec 15 10:39:00 2014 +0100

    systemctl: fix argument handling when invoked as "shutdown"
    
    (cherry picked from commit 75836b9d2071aab978ee78d7d797126a18a32052)

diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 86b923b..acd9804 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -6387,7 +6387,7 @@ static int shutdown_parse_argv(int argc, char *argv[]) {
         assert(argc >= 0);
         assert(argv);
 
-        while ((c = getopt_long(argc, argv, "HPrhkt:afFc", options, NULL)) >= 0)
+        while ((c = getopt_long(argc, argv, "HPrhkKt:afFc", options, NULL)) >= 0)
                 switch (c) {
 
                 case ARG_HELP:
@@ -6428,6 +6428,8 @@ static int shutdown_parse_argv(int argc, char *argv[]) {
 
                 case 't':
                 case 'a':
+                case 'f':
+                case 'F':
                         /* Compatibility nops */
                         break;
 

commit f60acf162de92bb0b1c3f4c041d89ea6231368c4
Author: Gabriel de Perthuis <g2p.code at gmail.com>
Date:   Sat Dec 13 01:56:56 2014 +0100

    blkid: Warn when rejecting a superblock with a bad csum
    
    Bump libblkid requirement from 2.20 to 2.24.
    util-linux 2.25 is actually required since fdbbad981cc5da8bb4ed7e9b6646e7a114745ec5
    
    (cherry picked from commit d47f6ca5f9b7a0b400d8bdb050151a0284fb4bdb)

diff --git a/README b/README
index 99b66a8..ddc7e8a 100644
--- a/README
+++ b/README
@@ -108,7 +108,7 @@ REQUIREMENTS:
         glibc >= 2.14
         libcap
         libseccomp >= 1.0.0 (optional)
-        libblkid >= 2.20 (from util-linux) (optional)
+        libblkid >= 2.24 (from util-linux) (optional)
         libkmod >= 15 (optional)
         PAM >= 1.1.2 (optional)
         libcryptsetup (optional)
diff --git a/configure.ac b/configure.ac
index cf98c41..fcbb9e5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -417,7 +417,7 @@ AM_CONDITIONAL(HAVE_KMOD, [test "$have_kmod" = "yes"])
 have_blkid=no
 AC_ARG_ENABLE(blkid, AS_HELP_STRING([--disable-blkid], [disable blkid support]))
 if test "x$enable_blkid" != "xno"; then
-        PKG_CHECK_MODULES(BLKID, [ blkid >= 2.20 ],
+        PKG_CHECK_MODULES(BLKID, [ blkid >= 2.24 ],
                 [AC_DEFINE(HAVE_BLKID, 1, [Define if blkid is available]) have_blkid=yes], have_blkid=no)
         if test "x$have_blkid" = xno -a "x$enable_blkid" = xyes; then
                 AC_MSG_ERROR([*** blkid support requested but libraries not found])
diff --git a/src/udev/udev-builtin-blkid.c b/src/udev/udev-builtin-blkid.c
index 810f27d..83bd8c4 100644
--- a/src/udev/udev-builtin-blkid.c
+++ b/src/udev/udev-builtin-blkid.c
@@ -221,6 +221,7 @@ static int builtin_blkid(struct udev_device *dev, int argc, char *argv[], bool t
         blkid_probe pr;
         const char *data;
         const char *name;
+        const char *prtype = NULL;
         int nvals;
         int i;
         int err = 0;
@@ -256,7 +257,8 @@ static int builtin_blkid(struct udev_device *dev, int argc, char *argv[], bool t
         blkid_probe_set_superblocks_flags(pr,
                 BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID |
                 BLKID_SUBLKS_TYPE | BLKID_SUBLKS_SECTYPE |
-                BLKID_SUBLKS_USAGE | BLKID_SUBLKS_VERSION);
+                BLKID_SUBLKS_USAGE | BLKID_SUBLKS_VERSION |
+                BLKID_SUBLKS_BADCSUM);
 
         if (noraid)
                 blkid_probe_filter_superblocks_usage(pr, BLKID_FLTR_NOTIN, BLKID_USAGE_RAID);
@@ -278,6 +280,15 @@ static int builtin_blkid(struct udev_device *dev, int argc, char *argv[], bool t
         err = probe_superblocks(pr);
         if (err < 0)
                 goto out;
+        if (blkid_probe_has_value(pr, "SBBADCSUM")) {
+                if (!blkid_probe_lookup_value(pr, "TYPE", &prtype, NULL))
+                        log_warning("incorrect %s checksum on %s",
+                                    prtype, udev_device_get_devnode(dev));
+                else
+                        log_warning("incorrect checksum on %s",
+                                    udev_device_get_devnode(dev));
+                goto out;
+        }
 
         /* If we are a partition then our parent passed on the root
          * partition UUID to us */

commit e0321c104604d4940fdc40aaa85503573863e781
Author: Lennart Poettering <lennart at poettering.net>
Date:   Fri Dec 12 17:29:12 2014 +0100

    man: fedora 21 has been release, suggest 21 as fedora version in example yum command line
    
    (cherry picked from commit 667993e88eb7519c6674fe9a9e985619817465e0)

diff --git a/man/systemd-nspawn.xml b/man/systemd-nspawn.xml
index b3a2d32..c2fd664 100644
--- a/man/systemd-nspawn.xml
+++ b/man/systemd-nspawn.xml
@@ -698,7 +698,7 @@
                 <example>
                         <title>Boot a minimal Fedora distribution in a container</title>
 
-                        <programlisting># yum -y --releasever=19 --nogpg --installroot=/srv/mycontainer --disablerepo='*' --enablerepo=fedora install systemd passwd yum fedora-release vim-minimal
+                        <programlisting># yum -y --releasever=21 --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

commit 4c5e271089af5331659088e4dfa2b707933adcdf
Author: David Herrmann <dh.herrmann at gmail.com>
Date:   Fri Dec 12 09:52:06 2014 +0100

    journal: fix dangling 'else' ambiguity
    
    Rework the sd-journal iterators to avoid dangling 'else' ambiguity. For a
    detailed explanation, see:
    
        commit bff686e2a981ccd0888cdf1981977d24320f1770
        Author: David Herrmann <dh.herrmann at gmail.com>
        Date:   Fri Dec 12 09:43:54 2014 +0100
    
            hwdb: fix dangling 'else' ambuguity
    
    (cherry picked from commit 8d1c8bd746a6a14dec7470f93f843bcb0699f4b8)

diff --git a/src/systemd/sd-journal.h b/src/systemd/sd-journal.h
index eb24372..00237a2 100644
--- a/src/systemd/sd-journal.h
+++ b/src/systemd/sd-journal.h
@@ -138,13 +138,15 @@ int sd_journal_reliable_fd(sd_journal *j);
 int sd_journal_get_catalog(sd_journal *j, char **text);
 int sd_journal_get_catalog_for_message_id(sd_id128_t id, char **text);
 
+/* the inverse condition avoids ambiguity of danling 'else' after the macro */
 #define SD_JOURNAL_FOREACH(j)                                           \
-        if (sd_journal_seek_head(j) >= 0)                               \
-                while (sd_journal_next(j) > 0)
+        if (sd_journal_seek_head(j) < 0) { }                            \
+        else while (sd_journal_next(j) > 0)
 
+/* the inverse condition avoids ambiguity of danling 'else' after the macro */
 #define SD_JOURNAL_FOREACH_BACKWARDS(j)                                 \
-        if (sd_journal_seek_tail(j) >= 0)                               \
-                while (sd_journal_previous(j) > 0)
+        if (sd_journal_seek_tail(j) < 0) { }                            \
+        else while (sd_journal_previous(j) > 0)
 
 #define SD_JOURNAL_FOREACH_DATA(j, data, l)                             \
         for (sd_journal_restart_data(j); sd_journal_enumerate_data((j), &(data), &(l)) > 0; )

commit ea190cde46a27d492dd091d9506c856673749292
Author: Marcel Holtmann <marcel at holtmann.org>
Date:   Thu Dec 11 22:50:50 2014 +0100

    hwdb: Update database of Bluetooth company identifiers
    
    (cherry picked from commit 3853d4cf8957e58bf8a7faa6262b7b1ab58565b5)

diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb
index 5a4670d..11ec4da 100644
--- a/hwdb/20-bluetooth-vendor-product.hwdb
+++ b/hwdb/20-bluetooth-vendor-product.hwdb
@@ -937,7 +937,7 @@ bluetooth:v0135*
  ID_VENDOR_FROM_DATABASE=Airewear LLC
 
 bluetooth:v0136*
- ID_VENDOR_FROM_DATABASE=ETC sp. z.o.o.
+ ID_VENDOR_FROM_DATABASE=Seed Labs, Inc. (formerly ETC sp. z.o.o.)
 
 bluetooth:v0137*
  ID_VENDOR_FROM_DATABASE=Prestigio Plaza Ltd.
@@ -1277,3 +1277,27 @@ bluetooth:v01A6*
 
 bluetooth:v01A7*
  ID_VENDOR_FROM_DATABASE=ENERGOUS CORPORATION
+
+bluetooth:v01A8*
+ ID_VENDOR_FROM_DATABASE=Taobao
+
+bluetooth:v01A9*
+ ID_VENDOR_FROM_DATABASE=Canon Inc.
+
+bluetooth:v01AA*
+ ID_VENDOR_FROM_DATABASE=Geophysical Technology Inc.
+
+bluetooth:v01AB*
+ ID_VENDOR_FROM_DATABASE=Facebook, Inc.
+
+bluetooth:v01AC*
+ ID_VENDOR_FROM_DATABASE=Nipro Diagnostics, Inc.
+
+bluetooth:v01AD*
+ ID_VENDOR_FROM_DATABASE=FlightSafety International
+
+bluetooth:v01AE*
+ ID_VENDOR_FROM_DATABASE=Earlens Corporation
+
+bluetooth:v01AF*
+ ID_VENDOR_FROM_DATABASE=Sunrise Micro Devices, Inc.

commit fe9c48bab6ba9299a591fc1b22365b0d59e9d9ef
Author: Thomas Hindoe Paaboel Andersen <phomes at gmail.com>
Date:   Wed Dec 10 20:24:18 2014 +0100

    use correct format types
    
    (cherry picked from commit c4ef05484df942b6cc2037d33dd56cd209d1db9b)

diff --git a/src/libsystemd-network/test-dhcp-option.c b/src/libsystemd-network/test-dhcp-option.c
index eac3844..46c8c27 100644
--- a/src/libsystemd-network/test-dhcp-option.c
+++ b/src/libsystemd-network/test-dhcp-option.c
@@ -344,7 +344,7 @@ static void test_option_set(void)
 
         for (i = 0; i < 9; i++) {
                 if (verbose)
-                        printf("%2d: 0x%02x(0x%02x) (options)\n", i, result->options[i],
+                        printf("%2u: 0x%02x(0x%02x) (options)\n", i, result->options[i],
                                options[i]);
                 assert_se(result->options[i] == options[i]);
         }
@@ -363,7 +363,7 @@ static void test_option_set(void)
 
         for (i = 0; i < pos - 8; i++) {
                 if (verbose)
-                        printf("%2d: 0x%02x(0x%02x) (sname)\n", i, result->sname[i],
+                        printf("%2u: 0x%02x(0x%02x) (sname)\n", i, result->sname[i],
                                options[i + 9]);
                 assert_se(result->sname[i] == options[i + 9]);
         }
diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c
index e2afcb8..86b74d4 100644
--- a/src/libudev/libudev-device.c
+++ b/src/libudev/libudev-device.c
@@ -139,7 +139,7 @@ static int udev_device_set_ifindex(struct udev_device *udev_device, int ifindex)
         char num[32];
 
         udev_device->ifindex = ifindex;
-        snprintf(num, sizeof(num), "%u", ifindex);
+        snprintf(num, sizeof(num), "%d", ifindex);
         udev_device_add_property(udev_device, "IFINDEX", num);
         return 0;
 }
diff --git a/src/login/loginctl.c b/src/login/loginctl.c
index fcdf627..2ee1ec9 100644
--- a/src/login/loginctl.c
+++ b/src/login/loginctl.c
@@ -425,7 +425,7 @@ static int print_session_status_info(sd_bus *bus, const char *path, bool *new_li
                 printf("\t    Seat: %s", i.seat);
 
                 if (i.vtnr > 0)
-                        printf("; vc%i", i.vtnr);
+                        printf("; vc%u", i.vtnr);
 
                 printf("\n");
         }
diff --git a/src/udev/cdrom_id/cdrom_id.c b/src/udev/cdrom_id/cdrom_id.c
index 7a4b987..8383cc3 100644
--- a/src/udev/cdrom_id/cdrom_id.c
+++ b/src/udev/cdrom_id/cdrom_id.c
@@ -1074,17 +1074,17 @@ work:
         if (cd_media_state != NULL)
                 printf("ID_CDROM_MEDIA_STATE=%s\n", cd_media_state);
         if (cd_media_session_next > 0)
-                printf("ID_CDROM_MEDIA_SESSION_NEXT=%d\n", cd_media_session_next);
+                printf("ID_CDROM_MEDIA_SESSION_NEXT=%u\n", cd_media_session_next);
         if (cd_media_session_count > 0)
-                printf("ID_CDROM_MEDIA_SESSION_COUNT=%d\n", cd_media_session_count);
+                printf("ID_CDROM_MEDIA_SESSION_COUNT=%u\n", cd_media_session_count);
         if (cd_media_session_count > 1 && cd_media_session_last_offset > 0)
                 printf("ID_CDROM_MEDIA_SESSION_LAST_OFFSET=%llu\n", cd_media_session_last_offset);
         if (cd_media_track_count > 0)
-                printf("ID_CDROM_MEDIA_TRACK_COUNT=%d\n", cd_media_track_count);
+                printf("ID_CDROM_MEDIA_TRACK_COUNT=%u\n", cd_media_track_count);
         if (cd_media_track_count_audio > 0)
-                printf("ID_CDROM_MEDIA_TRACK_COUNT_AUDIO=%d\n", cd_media_track_count_audio);
+                printf("ID_CDROM_MEDIA_TRACK_COUNT_AUDIO=%u\n", cd_media_track_count_audio);
         if (cd_media_track_count_data > 0)
-                printf("ID_CDROM_MEDIA_TRACK_COUNT_DATA=%d\n", cd_media_track_count_data);
+                printf("ID_CDROM_MEDIA_TRACK_COUNT_DATA=%u\n", cd_media_track_count_data);
 exit:
         if (fd >= 0)
                 close(fd);
diff --git a/src/udev/collect/collect.c b/src/udev/collect/collect.c
index 4ecb6b0..1e904a1 100644
--- a/src/udev/collect/collect.c
+++ b/src/udev/collect/collect.c
@@ -153,7 +153,7 @@ static int checkout(int fd)
                         if (!ptr && word < (buf + len)) {
                                 bufsize = bufsize << 1;
                                 if (debug)
-                                        fprintf(stderr, "ID overflow, restarting with size %zi\n", bufsize);
+                                        fprintf(stderr, "ID overflow, restarting with size %zu\n", bufsize);
                                 free(buf);
                                 lseek(fd, 0, SEEK_SET);
                                 goto restart;

commit 510af450975261f3fdeeb5560796cea1004679fe
Author: Lennart Poettering <lennart at poettering.net>
Date:   Thu Dec 11 14:56:33 2014 +0100

    build-sys: fix user unit m4 logic
    
    (cherry picked from commit 1ed09c449185941fe145b66a0ea7be7df6a07058)

diff --git a/Makefile.am b/Makefile.am
index 6d869c1..d88a27e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -5892,7 +5892,7 @@ units/%: units/%.m4
 	$(AM_V_at)$(MKDIR_P) $(dir $@)
 	$(AM_V_M4)$(M4) -P $(M4_DEFINES) -DFOR_SYSTEM=1 < $< > $@
 
-units/user/%: units/%.m4
+units/user/%: units/user/%.m4
 	$(AM_V_at)$(MKDIR_P) $(dir $@)
 	$(AM_V_M4)$(M4) -P $(M4_DEFINES) -DFOR_USER=1 < $< > $@
 

commit 2659ab42022f2e3d154c85adc5b89a6549ca48d3
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Wed Dec 10 17:34:41 2014 -0500

    zsh-completion: remove duplicate function
    
    https://bugs.archlinux.org/task/43069
    (cherry picked from commit 820aced6f6067a6b7c57b7d36e44f64378870cbf)

diff --git a/shell-completion/zsh/_systemctl.in b/shell-completion/zsh/_systemctl.in
index 7eefe53..0ee4856 100644
--- a/shell-completion/zsh/_systemctl.in
+++ b/shell-completion/zsh/_systemctl.in
@@ -141,7 +141,6 @@ _filter_units_by_property() {
   done
 }
 
-_systemctl_all_units() { { __systemctl list-unit-files; __systemctl list-units --all; } | { while read -r a b; do [[ $a =~ @\. ]] || echo -E - " $a"; done; } }
 _systemctl_get_template_names() { __systemctl list-unit-files | { while read -r a b; do  [[ $a =~ @\. ]] && echo -E - " ${a%%@.*}@"; done; } }
 
 

commit 043a7e385b02b0ddf2c8e3eb54ecd96de40ed5a4
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Dec 10 15:46:22 2014 +0100

    man: improve docs for systemd-modules-load.service
    
    (cherry picked from commit 547b25d285fa95cfe96a4afe91864807625603c1)

diff --git a/man/systemd-modules-load.service.xml b/man/systemd-modules-load.service.xml
index 28dd8ec..7b99be6 100644
--- a/man/systemd-modules-load.service.xml
+++ b/man/systemd-modules-load.service.xml
@@ -43,7 +43,7 @@
         <refnamediv>
                 <refname>systemd-modules-load.service</refname>
                 <refname>systemd-modules-load</refname>
-                <refpurpose>Configure kernel modules to load at boot</refpurpose>
+                <refpurpose>Load kernel modules at boot</refpurpose>
         </refnamediv>
 
         <refsynopsisdiv>
@@ -56,7 +56,7 @@
 
                 <para><filename>systemd-modules-load.service</filename>
                 is an early-boot service that loads kernel modules
-                from static configuration.</para>
+                based on static configuration.</para>
 
                 <para>See
                 <citerefentry><refentrytitle>modules-load.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>

commit c00066735ed5381d2dfe166d27f1dfa55a3598fb
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Dec 10 13:23:49 2014 +0100

    virt: when detecting containers and /run/systemd/container cannot be read, check /proc/1/environ
    
    This way, we should be in a slightly better situation if a container is
    booted up with only a shell as PID 1. In that case
    /run/systemd/container will not be populated, and a check for it hence
    be ineffective.
    
    Checking /proc/1/environ doesn't fully fix the problem though, as the
    file is only accessible with privileges. This means if PID 1 is not
    systemd, and if privileges have been dropped the container detection
    will continue to fail.
    
    (cherry picked from commit 536bfdab4cca38916ec8b112a6f80b0c068cc806)

diff --git a/src/shared/virt.c b/src/shared/virt.c
index f9c4e67..f10baab 100644
--- a/src/shared/virt.c
+++ b/src/shared/virt.c
@@ -293,8 +293,26 @@ int detect_container(const char **id) {
 
                 r = read_one_line_file("/run/systemd/container", &m);
                 if (r == -ENOENT) {
-                        r = 0;
-                        goto finish;
+
+                        /* Fallback for cases where PID 1 was not
+                         * systemd (for example, cases where
+                         * init=/bin/sh is used. */
+
+                        r = getenv_for_pid(1, "container", &m);
+                        if (r <= 0) {
+
+                                /* If that didn't work, give up,
+                                 * assume no container manager.
+                                 *
+                                 * Note: This means we still cannot
+                                 * detect containers if init=/bin/sh
+                                 * is passed but privileges dropped,
+                                 * as /proc/1/environ is only readable
+                                 * with privileges. */
+
+                                r = 0;
+                                goto finish;
+                        }
                 }
                 if (r < 0)
                         return r;

commit ac54c4077cd9b09d66f904cfb885453919bbd602
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Tue Dec 9 14:41:24 2014 -0500

    systemctl: fix invalid free when enabling sysv services fails
    
    The error was introduced in v215-343-g60731f32f1 'systemctl: do not
    bother to mutate state on error', by causing strv_free to attempt to
    free a static string. Simplify the whole thing by always keeping the
    array in valid state.
    
    (cherry picked from commit a644abed54bd4a42ebe2c99af5cc621ffbaf6c55)

diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 409693e..86b923b 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -5098,7 +5098,7 @@ static int enable_sysv_units(const char *verb, char **args) {
         int r = 0;
 
 #if defined(HAVE_SYSV_COMPAT) && defined(HAVE_CHKCONFIG)
-        unsigned f = 1, t = 1;
+        unsigned f = 0;
         _cleanup_lookup_paths_free_ LookupPaths paths = {};
 
         if (arg_scope != UNIT_FILE_SYSTEM)
@@ -5117,7 +5117,7 @@ static int enable_sysv_units(const char *verb, char **args) {
                 return r;
 
         r = 0;
-        for (f = 0; args[f]; f++) {
+        while (args[f]) {
                 const char *name;
                 _cleanup_free_ char *p = NULL, *q = NULL, *l = NULL;
                 bool found_native = false, found_sysv;
@@ -5128,7 +5128,7 @@ static int enable_sysv_units(const char *verb, char **args) {
                 pid_t pid;
                 siginfo_t status;
 
-                name = args[f];
+                name = args[f++];
 
                 if (!endswith(name, ".service"))
                         continue;
@@ -5160,9 +5160,6 @@ static int enable_sysv_units(const char *verb, char **args) {
                 if (!found_sysv)
                         continue;
 
-                /* Mark this entry, so that we don't try enabling it as native unit */
-                args[f] = (char*) "";
-
                 log_info("%s is not a native service, redirecting to /sbin/chkconfig.", name);
 
                 if (!isempty(arg_root))
@@ -5212,19 +5209,12 @@ static int enable_sysv_units(const char *verb, char **args) {
                                 return -EINVAL;
                 } else
                         return -EPROTO;
-        }
-
-        /* Drop all SysV units */
-        for (f = 0, t = 0; args[f]; f++) {
 
-                if (isempty(args[f]))
-                        continue;
-
-                args[t++] = args[f];
+                /* Remove this entry, so that we don't try enabling it as native unit */
+                assert(f > 0 && streq(args[f-1], name));
+                assert_se(strv_remove(args + f - 1, name));
         }
 
-        args[t] = NULL;
-
 #endif
         return r;
 }

commit d85259dc76aef2e579a4bfb06ba661060ec4970b
Author: Ronny Chevalier <chevalier.ronny at gmail.com>
Date:   Wed Dec 10 01:33:08 2014 +0100

    catalog: fix typos in the French translation
    
    (cherry picked from commit f4e5c25cd7f8ef8aef07f2915ba3f7462e0cab06)

diff --git a/catalog/systemd.fr.catalog b/catalog/systemd.fr.catalog
index 3524562..e9dfca7 100644
--- a/catalog/systemd.fr.catalog
+++ b/catalog/systemd.fr.catalog
@@ -60,7 +60,7 @@ Defined-By: systemd
 Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
 
 Des messages du noyau ont été manqués car le journal système n'a pas été
-capable de les traiter suffisament vite.
+capable de les traiter suffisamment vite.
 
 -- fc2e22bc6ee647b6b90729ab34a250b1
 Subject: Le processus @COREDUMP_PID@ (@COREDUMP_COMM@) a généré un fichier « core »
@@ -217,7 +217,7 @@ Subject: Le processus @EXECUTABLE@ n'a pas pu être exécuté
 Defined-By: systemd
 Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
 
-Le processus @EXECUTABLE@ n'a pas pu être exécuté, et a donc echoué.
+Le processus @EXECUTABLE@ n'a pas pu être exécuté, et a donc échoué.
 
 Le code d'erreur renvoyé est @ERRNO at .
 

commit 740c9311e5e8eb91ff89ab1c64bc9705a745e3b5
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Dec 10 00:46:33 2014 +0100

    hwdb: update PCI, USB, OUI databases
    
    (cherry picked from commit 8105cefa9543666dcf71bcd65561e4817f909747)

diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb
index 73df96c..4134659 100644
--- a/hwdb/20-OUI.hwdb
+++ b/hwdb/20-OUI.hwdb
@@ -1522,6 +1522,9 @@ OUI:0050C2201*
 OUI:0050C2202*
  ID_OUI_FROM_DATABASE=Audio Riders Oy
 
+OUI:0050C2203*
+ ID_OUI_FROM_DATABASE=Vocality International Ltd
+
 OUI:0050C2204*
  ID_OUI_FROM_DATABASE=Algodue Elettronica srl
 
@@ -2576,7 +2579,7 @@ OUI:0050C2364*
  ID_OUI_FROM_DATABASE=TATTILE SRL
 
 OUI:0050C2365*
- ID_OUI_FROM_DATABASE=Vishay Nobel AB
+ ID_OUI_FROM_DATABASE=VPG
 
 OUI:0050C2366*
  ID_OUI_FROM_DATABASE=Vanguard Technology Corp.
@@ -4181,7 +4184,7 @@ OUI:0050C257B*
  ID_OUI_FROM_DATABASE=ptswitch
 
 OUI:0050C257C*
- ID_OUI_FROM_DATABASE=CYBERSYS
+ ID_OUI_FROM_DATABASE=éolane
 
 OUI:0050C257D*
  ID_OUI_FROM_DATABASE=Sierra Video Systems
@@ -4637,7 +4640,7 @@ OUI:0050C2613*
  ID_OUI_FROM_DATABASE=TATTILE SRL
 
 OUI:0050C2614*
- ID_OUI_FROM_DATABASE=SICOM AS
+ ID_OUI_FROM_DATABASE=Proserv
 
 OUI:0050C2615*
  ID_OUI_FROM_DATABASE=Axis Electronics
@@ -4885,6 +4888,9 @@ OUI:0050C2665*
 OUI:0050C2666*
  ID_OUI_FROM_DATABASE=Xworks NZ Limited
 
+OUI:0050C2667*
+ ID_OUI_FROM_DATABASE=Vocality International Ltd
+
 OUI:0050C2668*
  ID_OUI_FROM_DATABASE=Keith & Koep GmbH
 
@@ -8392,6 +8398,9 @@ OUI:0050C2AF9*
 OUI:0050C2AFA*
  ID_OUI_FROM_DATABASE=Absolute Fire Solutions Inc.
 
+OUI:0050C2AFB*
+ ID_OUI_FROM_DATABASE=Vocality International Ltd
+
 OUI:0050C2AFC*
  ID_OUI_FROM_DATABASE=Odus Technologies SA
 
@@ -10384,6 +10393,9 @@ OUI:0050C2D9C*
 OUI:0050C2D9D*
  ID_OUI_FROM_DATABASE=Mistral Solutions Pvt. Ltd
 
+OUI:0050C2D9E*
+ ID_OUI_FROM_DATABASE=Vocality International
+
 OUI:0050C2D9F*
  ID_OUI_FROM_DATABASE=BitWise Controls
 
@@ -10724,7 +10736,7 @@ OUI:0050C2E10*
  ID_OUI_FROM_DATABASE=Radinetworks Co., Ltd
 
 OUI:0050C2E11*
- ID_OUI_FROM_DATABASE=RF Neulink
+ ID_OUI_FROM_DATABASE=RadioMobile Inc
 
 OUI:0050C2E12*
  ID_OUI_FROM_DATABASE=Kago Electronics BV
@@ -10846,6 +10858,9 @@ OUI:0050C2E38*
 OUI:0050C2E39*
  ID_OUI_FROM_DATABASE=Telemetrics Inc.
 
+OUI:0050C2E3A*
+ ID_OUI_FROM_DATABASE=Vocality International
+
 OUI:0050C2E3B*
  ID_OUI_FROM_DATABASE=Nanosolution Inc.
 
@@ -12860,7 +12875,7 @@ OUI:40D8550DD*
  ID_OUI_FROM_DATABASE=Embed Limited
 
 OUI:40D8550DE*
- ID_OUI_FROM_DATABASE=Vishay Nobel AB
+ ID_OUI_FROM_DATABASE=VPG
 
 OUI:40D8550DF*
  ID_OUI_FROM_DATABASE=Xadi Inc
@@ -13180,6 +13195,9 @@ OUI:40D855149*
 OUI:40D85514A*
  ID_OUI_FROM_DATABASE=GENERAL DYNAMICS C4 SYSTEMS
 
+OUI:40D85514B*
+ ID_OUI_FROM_DATABASE=Vocality International
+
 OUI:40D85514C*
  ID_OUI_FROM_DATABASE=PLT
 
@@ -14162,7 +14180,7 @@ OUI:0000AE*
  ID_OUI_FROM_DATABASE=DASSAULT ELECTRONIQUE
 
 OUI:0000AF*
- ID_OUI_FROM_DATABASE=NUCLEAR DATA INSTRUMENTATION
+ ID_OUI_FROM_DATABASE=Canberra Industries, Inc.
 
 OUI:0000B0*
  ID_OUI_FROM_DATABASE=RND-RAD NETWORK DEVICES
@@ -14228,7 +14246,7 @@ OUI:0000C4*
  ID_OUI_FROM_DATABASE=WATERS DIV. OF MILLIPORE
 
 OUI:0000C5*
- ID_OUI_FROM_DATABASE=FARALLON COMPUTING/NETOPIA
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
 OUI:0000C6*
  ID_OUI_FROM_DATABASE=EON SYSTEMS
@@ -17531,7 +17549,7 @@ OUI:000511*
  ID_OUI_FROM_DATABASE=Complementary Technologies Ltd
 
 OUI:000512*
- ID_OUI_FROM_DATABASE=MeshNetworks, Inc.
+ ID_OUI_FROM_DATABASE=Zebra Technologies Inc
 
 OUI:000513*
  ID_OUI_FROM_DATABASE=VTLinx Multimedia Systems, Inc.
@@ -18443,7 +18461,7 @@ OUI:000643*
  ID_OUI_FROM_DATABASE=SONO Computer Co., Ltd.
 
 OUI:000644*
- ID_OUI_FROM_DATABASE=Neix,Inc
+ ID_OUI_FROM_DATABASE=neix,Inc
 
 OUI:000645*
  ID_OUI_FROM_DATABASE=Meisei Electric Co. Ltd.
@@ -19205,7 +19223,7 @@ OUI:000741*
  ID_OUI_FROM_DATABASE=Sierra Automated Systems
 
 OUI:000742*
- ID_OUI_FROM_DATABASE=Current Technologies, LLC
+ ID_OUI_FROM_DATABASE=Ormazabal
 
 OUI:000743*
  ID_OUI_FROM_DATABASE=Chelsio Communications
@@ -19532,7 +19550,7 @@ OUI:0007AE*
  ID_OUI_FROM_DATABASE=Britestream Networks, Inc.
 
 OUI:0007AF*
- ID_OUI_FROM_DATABASE=N-TRON Corporation
+ ID_OUI_FROM_DATABASE=Red Lion Controls, LP
 
 OUI:0007B0*
  ID_OUI_FROM_DATABASE=Office Details, Inc.
@@ -21986,7 +22004,7 @@ OUI:000AFC*
  ID_OUI_FROM_DATABASE=Core Tec Communications, LLC
 
 OUI:000AFD*
- ID_OUI_FROM_DATABASE=Viking Electronic Services
+ ID_OUI_FROM_DATABASE=Kentec Electronics
 
 OUI:000AFE*
  ID_OUI_FROM_DATABASE=NovaPal Ltd
@@ -24998,7 +25016,7 @@ OUI:000EF3*
  ID_OUI_FROM_DATABASE=Smarthome
 
 OUI:000EF4*
- ID_OUI_FROM_DATABASE=Kasda Digital Technology Co.,Ltd
+ ID_OUI_FROM_DATABASE=Kasda Networks Inc
 
 OUI:000EF5*
  ID_OUI_FROM_DATABASE=iPAC Technology Co., Ltd.
@@ -25643,7 +25661,7 @@ OUI:000FCB*
  ID_OUI_FROM_DATABASE=3Com Ltd
 
 OUI:000FCC*
- ID_OUI_FROM_DATABASE=Netopia, Inc.
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
 OUI:000FCD*
  ID_OUI_FROM_DATABASE=Nortel Networks
@@ -27518,7 +27536,7 @@ OUI:00123C*
  ID_OUI_FROM_DATABASE=Second Rule LLC
 
 OUI:00123D*
- ID_OUI_FROM_DATABASE=GES
+ ID_OUI_FROM_DATABASE=GES Co, Ltd
 
 OUI:00123E*
  ID_OUI_FROM_DATABASE=ERUNE technology Co., Ltd.
@@ -28316,7 +28334,7 @@ OUI:001346*
  ID_OUI_FROM_DATABASE=D-Link Corporation
 
 OUI:001347*
- ID_OUI_FROM_DATABASE=BlueTree Wireless Data Inc.
+ ID_OUI_FROM_DATABASE=Red Lion Controls, LP
 
 OUI:001348*
  ID_OUI_FROM_DATABASE=Artila Electronics Co., Ltd.
@@ -29402,7 +29420,7 @@ OUI:0014B0*
  ID_OUI_FROM_DATABASE=Naeil Community
 
 OUI:0014B1*
- ID_OUI_FROM_DATABASE=Avitec AB
+ ID_OUI_FROM_DATABASE=Axell Wireless Limited
 
 OUI:0014B2*
  ID_OUI_FROM_DATABASE=mCubelogics Corporation
@@ -29975,7 +29993,7 @@ OUI:00156F*
  ID_OUI_FROM_DATABASE=Xiranet Communications GmbH
 
 OUI:001570*
- ID_OUI_FROM_DATABASE=Symbol TechnologiesWholly owned Subsidiary of Motorola
+ ID_OUI_FROM_DATABASE=Zebra Technologies Inc
 
 OUI:001571*
  ID_OUI_FROM_DATABASE=Nolan Systems
@@ -33239,7 +33257,7 @@ OUI:0019B3*
  ID_OUI_FROM_DATABASE=Stanford Research Systems
 
 OUI:0019B4*
- ID_OUI_FROM_DATABASE=VideoCast Ltd.
+ ID_OUI_FROM_DATABASE=Intellio Ltd
 
 OUI:0019B5*
  ID_OUI_FROM_DATABASE=Famar Fueguina S.A.
@@ -40679,7 +40697,7 @@ OUI:002367*
  ID_OUI_FROM_DATABASE=UniControls a.s.
 
 OUI:002368*
- ID_OUI_FROM_DATABASE=Motorola
+ ID_OUI_FROM_DATABASE=Zebra Technologies Inc
 
 OUI:002369*
  ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC
@@ -46496,7 +46514,7 @@ OUI:0060D9*
  ID_OUI_FROM_DATABASE=TRANSYS NETWORKS INC.
 
 OUI:0060DA*
- ID_OUI_FROM_DATABASE=JBM ELECTRONICS CO.
+ ID_OUI_FROM_DATABASE=Red Lion Controls, LP
 
 OUI:0060DB*
  ID_OUI_FROM_DATABASE=NTP ELEKTRONIK A/S
@@ -46639,6 +46657,9 @@ OUI:0070B0*
 OUI:0070B3*
  ID_OUI_FROM_DATABASE=DATA RECALL LTD.
 
+OUI:0071C2*
+ ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
+
 OUI:0071CC*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
@@ -47141,7 +47162,7 @@ OUI:00809E*
  ID_OUI_FROM_DATABASE=DATUS GMBH
 
 OUI:00809F*
- ID_OUI_FROM_DATABASE=ALCATEL BUSINESS SYSTEMS
+ ID_OUI_FROM_DATABASE=Alcatel-Lucent Enterprise
 
 OUI:0080A0*
  ID_OUI_FROM_DATABASE=EDISA HEWLETT PACKARD S/A
@@ -48338,7 +48359,7 @@ OUI:00A01C*
  ID_OUI_FROM_DATABASE=NASCENT NETWORKS CORPORATION
 
 OUI:00A01D*
- ID_OUI_FROM_DATABASE=SIXNET
+ ID_OUI_FROM_DATABASE=Red Lion Controls, LP
 
 OUI:00A01E*
  ID_OUI_FROM_DATABASE=EST CORPORATION
@@ -48989,7 +49010,7 @@ OUI:00A0F7*
  ID_OUI_FROM_DATABASE=V.I COMPUTER CORP.
 
 OUI:00A0F8*
- ID_OUI_FROM_DATABASE=SYMBOL TECHNOLOGIES, INC.
+ ID_OUI_FROM_DATABASE=Zebra Technologies Inc
 
 OUI:00A0F9*
  ID_OUI_FROM_DATABASE=BINTEC COMMUNICATIONS GMBH
@@ -49024,6 +49045,9 @@ OUI:00A2F5*
 OUI:00A2FF*
  ID_OUI_FROM_DATABASE=abatec group AG
 
+OUI:00A509*
+ ID_OUI_FROM_DATABASE=WigWag Inc.
+
 OUI:00AA00*
  ID_OUI_FROM_DATABASE=INTEL CORPORATION
 
@@ -51044,7 +51068,7 @@ OUI:00E049*
  ID_OUI_FROM_DATABASE=MICROWI ELECTRONIC GmbH
 
 OUI:00E04A*
- ID_OUI_FROM_DATABASE=ENHANCED MESSAGING SYSTEMS, INC
+ ID_OUI_FROM_DATABASE=ZX Technologies, Inc
 
 OUI:00E04B*
  ID_OUI_FROM_DATABASE=JUMP INDUSTRIELLE COMPUTERTECHNIK GmbH
@@ -52717,6 +52741,9 @@ OUI:08D09F*
 OUI:08D29A*
  ID_OUI_FROM_DATABASE=Proformatique
 
+OUI:08D34B*
+ ID_OUI_FROM_DATABASE=Techman Electronics (Changshu) Co., Ltd.
+
 OUI:08D40C*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -52807,6 +52834,9 @@ OUI:0C130B*
 OUI:0C1420*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:0C1539*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:0C15C5*
  ID_OUI_FROM_DATABASE=SDTEC Co., Ltd.
 
@@ -52864,6 +52894,9 @@ OUI:0C469D*
 OUI:0C473D*
  ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
 
+OUI:0C4885*
+ ID_OUI_FROM_DATABASE=LG Electronics
+
 OUI:0C4C39*
  ID_OUI_FROM_DATABASE=Mitrastar Technology
 
@@ -53008,6 +53041,9 @@ OUI:0CB319*
 OUI:0CB4EF*
  ID_OUI_FROM_DATABASE=Digience Co.,Ltd.
 
+OUI:0CBC9F*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:0CBD51*
  ID_OUI_FROM_DATABASE=TCT Mobile Limited
 
@@ -53107,6 +53143,9 @@ OUI:0CEEE6*
 OUI:0CEF7C*
  ID_OUI_FROM_DATABASE=AnaCom Inc
 
+OUI:0CEFAF*
+ ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY  - Please see MAM public listing for more information.
+
 OUI:0CF019*
  ID_OUI_FROM_DATABASE=Malgn Technology Co., Ltd.
 
@@ -53122,6 +53161,9 @@ OUI:0CF3EE*
 OUI:0CF405*
  ID_OUI_FROM_DATABASE=Beijing Signalway Technologies Co.,Ltd
 
+OUI:0CF5A4*
+ ID_OUI_FROM_DATABASE=Cisco
+
 OUI:0CF893*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -53263,6 +53305,9 @@ OUI:104780*
 OUI:1048B1*
  ID_OUI_FROM_DATABASE=Beijing Duokan Technology Limited
 
+OUI:104A7D*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:104B46*
  ID_OUI_FROM_DATABASE=Mitsubishi Electric Corporation
 
@@ -53326,6 +53371,9 @@ OUI:10768A*
 OUI:1077B1*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
 
+OUI:107873*
+ ID_OUI_FROM_DATABASE=Shenzhen Jinkeyi Communication Co., Ltd.
+
 OUI:1078CE*
  ID_OUI_FROM_DATABASE=Hanvit SI, Inc.
 
@@ -53374,6 +53422,9 @@ OUI:10A13B*
 OUI:10A5D0*
  ID_OUI_FROM_DATABASE=Murata Manufacturing Co.,Ltd.
 
+OUI:10A659*
+ ID_OUI_FROM_DATABASE=Mobile Create Co.,Ltd.
+
 OUI:10A743*
  ID_OUI_FROM_DATABASE=SK Mtek Limited
 
@@ -53428,6 +53479,9 @@ OUI:10CCDB*
 OUI:10D1DC*
  ID_OUI_FROM_DATABASE=INSTAR Deutschland GmbH
 
+OUI:10D38A*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:10D542*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -53452,6 +53506,9 @@ OUI:10E4AF*
 OUI:10E6AE*
  ID_OUI_FROM_DATABASE=Source Technologies, LLC
 
+OUI:10E878*
+ ID_OUI_FROM_DATABASE=Alcatel-Lucent
+
 OUI:10E8EE*
  ID_OUI_FROM_DATABASE=PhaseSpace
 
@@ -53512,6 +53569,9 @@ OUI:14144B*
 OUI:141A51*
  ID_OUI_FROM_DATABASE=Treetech Sistemas Digitais
 
+OUI:141AA3*
+ ID_OUI_FROM_DATABASE=Motorola Mobility LLC
+
 OUI:141BBD*
  ID_OUI_FROM_DATABASE=Volex Inc.
 
@@ -53524,6 +53584,9 @@ OUI:141FBA*
 OUI:1423D7*
  ID_OUI_FROM_DATABASE=EUTRONIX CO., LTD.
 
+OUI:142971*
+ ID_OUI_FROM_DATABASE=NEMOA ELECTRONICS (HK) CO. LTD
+
 OUI:142BD2*
  ID_OUI_FROM_DATABASE=Armtel Ltd.
 
@@ -53614,6 +53677,9 @@ OUI:146308*
 OUI:146A0B*
  ID_OUI_FROM_DATABASE=Cypress Electronics Limited
 
+OUI:146B72*
+ ID_OUI_FROM_DATABASE=Shenzhen Fortune Ship Technology Co., Ltd.
+
 OUI:147373*
  ID_OUI_FROM_DATABASE=TUBITAK UEKAE
 
@@ -53635,12 +53701,18 @@ OUI:14825B*
 OUI:148692*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:14893E*
+ ID_OUI_FROM_DATABASE=VIXTEL TECHNOLOGIES LIMTED
+
 OUI:1489FD*
  ID_OUI_FROM_DATABASE=Samsung Electronics
 
 OUI:148A70*
  ID_OUI_FROM_DATABASE=ADS GmbH
 
+OUI:148F21*
+ ID_OUI_FROM_DATABASE=Garmin International
+
 OUI:148FC6*
  ID_OUI_FROM_DATABASE=Apple
 
@@ -53863,9 +53935,15 @@ OUI:1836FC*
 OUI:183825*
  ID_OUI_FROM_DATABASE=Wuhan Lingjiu High-tech Co.,Ltd.
 
+OUI:183864*
+ ID_OUI_FROM_DATABASE=CAP-TECH INTERNATIONAL CO., LTD.
+
 OUI:183919*
  ID_OUI_FROM_DATABASE=Unicoi Systems
 
+OUI:183A2D*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:183BD2*
  ID_OUI_FROM_DATABASE=BYD Precision Manufacture Company Ltd.
 
@@ -53905,6 +53983,9 @@ OUI:18550F*
 OUI:185933*
  ID_OUI_FROM_DATABASE=Cisco SPVTG
 
+OUI:185936*
+ ID_OUI_FROM_DATABASE=XIAOMI INC
+
 OUI:185AE8*
  ID_OUI_FROM_DATABASE=Zenotech.Co.,Ltd
 
@@ -53929,6 +54010,9 @@ OUI:186751*
 OUI:1867B0*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
 
+OUI:186882*
+ ID_OUI_FROM_DATABASE=Beward R&D Co., Ltd.
+
 OUI:186D99*
  ID_OUI_FROM_DATABASE=Adanis Inc.
 
@@ -53998,6 +54082,9 @@ OUI:189C5D*
 OUI:189EFC*
  ID_OUI_FROM_DATABASE=Apple
 
+OUI:18A3E8*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Tech.Co.,Ltd.
+
 OUI:18A905*
  ID_OUI_FROM_DATABASE=Hewlett-Packard Company
 
@@ -54028,6 +54115,9 @@ OUI:18AF8F*
 OUI:18AF9F*
  ID_OUI_FROM_DATABASE=DIGITRONIC Automationsanlagen GmbH
 
+OUI:18B169*
+ ID_OUI_FROM_DATABASE=Sonicwall
+
 OUI:18B209*
  ID_OUI_FROM_DATABASE=Torrey Pines Logic, Inc
 
@@ -54049,6 +54139,9 @@ OUI:18C086*
 OUI:18C451*
  ID_OUI_FROM_DATABASE=Tucson Embedded Systems
 
+OUI:18C58A*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:18C8E7*
  ID_OUI_FROM_DATABASE=Shenzhen Hualistone Technology Co.,Ltd
 
@@ -54094,12 +54187,21 @@ OUI:18E80F*
 OUI:18E8DD*
  ID_OUI_FROM_DATABASE=MODULETEK
 
+OUI:18EE69*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:18EF63*
  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
 
+OUI:18F145*
+ ID_OUI_FROM_DATABASE=NetComm Wireless Limited
+
 OUI:18F46A*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
+OUI:18F643*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:18F650*
  ID_OUI_FROM_DATABASE=Multimedia Pacific Limited
 
@@ -54118,6 +54220,9 @@ OUI:18FC9F*
 OUI:18FE34*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
+OUI:18FF0F*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:18FF2E*
  ID_OUI_FROM_DATABASE=Shenzhen Rui Ying Da Technology Co., Ltd
 
@@ -54142,6 +54247,9 @@ OUI:1C129D*
 OUI:1C1448*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:1C14B3*
+ ID_OUI_FROM_DATABASE=Pinyon Technologies
+
 OUI:1C17D3*
  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
 
@@ -54178,6 +54286,9 @@ OUI:1C35F1*
 OUI:1C37BF*
  ID_OUI_FROM_DATABASE=Cloudium Systems Ltd.
 
+OUI:1C3947*
+ ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD.
+
 OUI:1C3A4F*
  ID_OUI_FROM_DATABASE=AccuSpec Electronics, LLC
 
@@ -54283,6 +54394,9 @@ OUI:1C7C45*
 OUI:1C7CC7*
  ID_OUI_FROM_DATABASE=Coriant GmbH
 
+OUI:1C7D22*
+ ID_OUI_FROM_DATABASE=Fuji Xerox Co., Ltd.
+
 OUI:1C7E51*
  ID_OUI_FROM_DATABASE=3bumen.com
 
@@ -54298,6 +54412,9 @@ OUI:1C8464*
 OUI:1C86AD*
  ID_OUI_FROM_DATABASE=MCT CO., LTD.
 
+OUI:1C8E5C*
+ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+
 OUI:1C8E8E*
  ID_OUI_FROM_DATABASE=DB Communication & Systems Co., ltd.
 
@@ -54334,6 +54451,9 @@ OUI:1C9ECB*
 OUI:1CA2B1*
  ID_OUI_FROM_DATABASE=ruwido austria gmbh
 
+OUI:1CA532*
+ ID_OUI_FROM_DATABASE=Shenzhen Gongjin Electronics Co.,Ltd
+
 OUI:1CA770*
  ID_OUI_FROM_DATABASE=SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LT
 
@@ -54385,6 +54505,9 @@ OUI:1CC316*
 OUI:1CC63C*
  ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation
 
+OUI:1CC72D*
+ ID_OUI_FROM_DATABASE=Shenzhen Huapu Digital CO.,Ltd
+
 OUI:1CD40C*
  ID_OUI_FROM_DATABASE=Kriwan Industrie-Elektronik GmbH
 
@@ -54409,6 +54532,9 @@ OUI:1CE62B*
 OUI:1CE6C7*
  ID_OUI_FROM_DATABASE=Cisco
 
+OUI:1CE85D*
+ ID_OUI_FROM_DATABASE=Cisco
+
 OUI:1CEEE8*
  ID_OUI_FROM_DATABASE=Ilshin Elecom
 
@@ -54487,12 +54613,18 @@ OUI:202564*
 OUI:202598*
  ID_OUI_FROM_DATABASE=Teleview
 
+OUI:2028BC*
+ ID_OUI_FROM_DATABASE=Visionscape Co,. Ltd.
+
 OUI:202BC1*
  ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd
 
 OUI:202CB7*
  ID_OUI_FROM_DATABASE=Kong Yue Electronics & Information Industry (Xinhui) Ltd.
 
+OUI:2031EB*
+ ID_OUI_FROM_DATABASE=HDSN
+
 OUI:203706*
  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
 
@@ -54550,6 +54682,9 @@ OUI:205B5E*
 OUI:205CFA*
  ID_OUI_FROM_DATABASE=Yangzhou ChangLian Network Technology Co,ltd.
 
+OUI:206274*
+ ID_OUI_FROM_DATABASE=Microsoft Corporation
+
 OUI:206432*
  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO.,LTD.
 
@@ -54616,6 +54751,9 @@ OUI:209AE9*
 OUI:209BA5*
  ID_OUI_FROM_DATABASE=JIAXING GLEAD Electronics Co.,Ltd
 
+OUI:20A2E4*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:20A2E7*
  ID_OUI_FROM_DATABASE=Lee-Dickens Ltd
 
@@ -54652,6 +54790,9 @@ OUI:20BBC6*
 OUI:20BFDB*
  ID_OUI_FROM_DATABASE=DVL
 
+OUI:20C06D*
+ ID_OUI_FROM_DATABASE=SHENZHEN SPACETEK TECHNOLOGY CO.,LTD
+
 OUI:20C1AF*
  ID_OUI_FROM_DATABASE=i Wit Digital Co., Limited
 
@@ -54754,6 +54895,9 @@ OUI:24050F*
 OUI:240917*
  ID_OUI_FROM_DATABASE=Devlin Electronics Limited
 
+OUI:240995*
+ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+
 OUI:240A11*
  ID_OUI_FROM_DATABASE=TCT Mobile Limited
 
@@ -54784,6 +54928,9 @@ OUI:241A8C*
 OUI:241B13*
  ID_OUI_FROM_DATABASE=Shanghai Nutshell Electronic Co., Ltd.
 
+OUI:241B44*
+ ID_OUI_FROM_DATABASE=Hangzhou Tuners Electronics Co., Ltd
+
 OUI:241F2C*
  ID_OUI_FROM_DATABASE=Calsys, Inc.
 
@@ -54817,6 +54964,12 @@ OUI:24470E*
 OUI:24497B*
  ID_OUI_FROM_DATABASE=Innovative Converged Devices Inc
 
+OUI:244B03*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:244B81*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:244F1D*
  ID_OUI_FROM_DATABASE=iRule LLC
 
@@ -54847,6 +55000,9 @@ OUI:24767D*
 OUI:247703*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:247F3C*
+ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+
 OUI:248000*
  ID_OUI_FROM_DATABASE=Westcontrol AS
 
@@ -54874,6 +55030,9 @@ OUI:249504*
 OUI:2497ED*
  ID_OUI_FROM_DATABASE=Techvision Intelligent Technology Limited
 
+OUI:24A074*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:24A2E1*
  ID_OUI_FROM_DATABASE=Apple, Inc
 
@@ -55126,6 +55285,9 @@ OUI:284FCE*
 OUI:285132*
  ID_OUI_FROM_DATABASE=Shenzhen Prayfly Technology Co.,Ltd
 
+OUI:2852E0*
+ ID_OUI_FROM_DATABASE=Layon international Electronic & Telecom Co.,Ltd
+
 OUI:285767*
  ID_OUI_FROM_DATABASE=Echostar Technologies Corp
 
@@ -55171,6 +55333,9 @@ OUI:287994*
 OUI:288023*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
+OUI:2884FA*
+ ID_OUI_FROM_DATABASE=SHARP Corporation
+
 OUI:28852D*
  ID_OUI_FROM_DATABASE=Touch Networks
 
@@ -55333,6 +55498,9 @@ OUI:28E31F*
 OUI:28E347*
  ID_OUI_FROM_DATABASE=Liteon Technology Corporation
 
+OUI:28E476*
+ ID_OUI_FROM_DATABASE=Pi-Coral
+
 OUI:28E608*
  ID_OUI_FROM_DATABASE=Tokheim
 
@@ -55369,6 +55537,9 @@ OUI:28FC51*
 OUI:28FCF6*
  ID_OUI_FROM_DATABASE=Shenzhen Xin KingBrand enterprises Co.,Ltd
 
+OUI:28FD80*
+ ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY  - Please see MAM public listing for more information.
+
 OUI:2C002C*
  ID_OUI_FROM_DATABASE=UNOWHY
 
@@ -55402,12 +55573,18 @@ OUI:2C1A31*
 OUI:2C1EEA*
  ID_OUI_FROM_DATABASE=AERODEV
 
+OUI:2C1F23*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:2C2172*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
 OUI:2C245F*
  ID_OUI_FROM_DATABASE=Babolat VS
 
+OUI:2C265F*
+ ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY  - Please see MAM public listing for more information.
+
 OUI:2C26C5*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -55591,6 +55768,9 @@ OUI:2C9EFC*
 OUI:2CA157*
  ID_OUI_FROM_DATABASE=acromate, Inc.
 
+OUI:2CA2B4*
+ ID_OUI_FROM_DATABASE=Fortify Technologies, LLC
+
 OUI:2CA30E*
  ID_OUI_FROM_DATABASE=POWER DRAGON DEVELOPMENT LIMITED
 
@@ -55606,6 +55786,9 @@ OUI:2CAB25*
 OUI:2CABA4*
  ID_OUI_FROM_DATABASE=Cisco SPVTG
 
+OUI:2CAD13*
+ ID_OUI_FROM_DATABASE=SHENZHEN ZHILU TECHNOLOGY CO.,LTD
+
 OUI:2CB05D*
  ID_OUI_FROM_DATABASE=NETGEAR
 
@@ -55702,6 +55885,9 @@ OUI:300D2A*
 OUI:300ED5*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind.Co.Ltd
 
+OUI:300EE3*
+ ID_OUI_FROM_DATABASE=Aquantia Corporation
+
 OUI:3010B3*
  ID_OUI_FROM_DATABASE=Liteon Technology Corporation
 
@@ -56044,6 +56230,9 @@ OUI:343111*
 OUI:3431C4*
  ID_OUI_FROM_DATABASE=AVM GmbH
 
+OUI:34363B*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:3438AF*
  ID_OUI_FROM_DATABASE=Inlab Software GmbH
 
@@ -56059,6 +56248,9 @@ OUI:344B3D*
 OUI:344B50*
  ID_OUI_FROM_DATABASE=ZTE Corporation
 
+OUI:344CA4*
+ ID_OUI_FROM_DATABASE=amazipoint technology Ltd.
+
 OUI:344DEA*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -56101,9 +56293,15 @@ OUI:3464A9*
 OUI:34684A*
  ID_OUI_FROM_DATABASE=Teraworks Co., Ltd.
 
+OUI:346895*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
 OUI:346BD3*
  ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
 
+OUI:346C0F*
+ ID_OUI_FROM_DATABASE=Pramod Telecom Pvt. Ltd
+
 OUI:346E8A*
  ID_OUI_FROM_DATABASE=Ecosense
 
@@ -56143,6 +56341,9 @@ OUI:348446*
 OUI:34862A*
  ID_OUI_FROM_DATABASE=Heinz Lackmann GmbH & Co KG
 
+OUI:34873D*
+ ID_OUI_FROM_DATABASE=Quectel Wireless Solution Co.,Ltd.
+
 OUI:34885D*
  ID_OUI_FROM_DATABASE=Logitech Far East
 
@@ -56167,9 +56368,15 @@ OUI:349A0D*
 OUI:349D90*
  ID_OUI_FROM_DATABASE=Heinzmann GmbH & CO. KG
 
+OUI:349E34*
+ ID_OUI_FROM_DATABASE=Evervictory Electronic Co.Ltd
+
 OUI:34A183*
  ID_OUI_FROM_DATABASE=AWare, Inc
 
+OUI:34A395*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:34A3BF*
  ID_OUI_FROM_DATABASE=Terewave. Inc.
 
@@ -56344,6 +56551,9 @@ OUI:34FA40*
 OUI:34FC6F*
  ID_OUI_FROM_DATABASE=ALCEA
 
+OUI:34FCEF*
+ ID_OUI_FROM_DATABASE=LG Electronics
+
 OUI:380197*
  ID_OUI_FROM_DATABASE=Toshiba Samsung Storage Technolgoy Korea Corporation
 
@@ -56353,6 +56563,9 @@ OUI:3806B4*
 OUI:3808FD*
  ID_OUI_FROM_DATABASE=Silca Spa
 
+OUI:3809A4*
+ ID_OUI_FROM_DATABASE=Firefly Integrations
+
 OUI:380A0A*
  ID_OUI_FROM_DATABASE=Sky-City Communication and Electronics Limited Company
 
@@ -56578,6 +56791,9 @@ OUI:38CA97*
 OUI:38D135*
  ID_OUI_FROM_DATABASE=EasyIO Corporation Sdn. Bhd.
 
+OUI:38D82F*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:38DBBB*
  ID_OUI_FROM_DATABASE=Sunbow Telecom Co., Ltd.
 
@@ -56689,6 +56905,9 @@ OUI:3C1915*
 OUI:3C197D*
  ID_OUI_FROM_DATABASE=Ericsson AB
 
+OUI:3C1A0F*
+ ID_OUI_FROM_DATABASE=ClearSky Data
+
 OUI:3C1A57*
  ID_OUI_FROM_DATABASE=Cardiopulmonary Corp
 
@@ -56698,6 +56917,9 @@ OUI:3C1A79*
 OUI:3C1CBE*
  ID_OUI_FROM_DATABASE=JADAK LLC
 
+OUI:3C1E04*
+ ID_OUI_FROM_DATABASE=D-Link International
+
 OUI:3C1E13*
  ID_OUI_FROM_DATABASE=HANGZHOU SUNRISE TECHNOLOGY CO., LTD
 
@@ -56710,6 +56932,9 @@ OUI:3C26D5*
 OUI:3C2763*
  ID_OUI_FROM_DATABASE=SLE quality engineering GmbH & Co. KG
 
+OUI:3C2C94*
+ ID_OUI_FROM_DATABASE=杭州德澜科技有限公司(HangZhou Delan Technology Co.,Ltd)
+
 OUI:3C2DB7*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -56770,6 +56995,9 @@ OUI:3C5A37*
 OUI:3C5AB4*
  ID_OUI_FROM_DATABASE=Google
 
+OUI:3C5EC3*
+ ID_OUI_FROM_DATABASE=Cisco
+
 OUI:3C5F01*
  ID_OUI_FROM_DATABASE=Synerchip Co., Ltd.
 
@@ -56788,6 +57016,9 @@ OUI:3C672C*
 OUI:3C6A7D*
  ID_OUI_FROM_DATABASE=Niigata Power Systems Co., Ltd.
 
+OUI:3C6A9D*
+ ID_OUI_FROM_DATABASE=Dexatek Technology LTD.
+
 OUI:3C6E63*
  ID_OUI_FROM_DATABASE=Mitron OY
 
@@ -56833,6 +57064,12 @@ OUI:3C8AE5*
 OUI:3C8BFE*
  ID_OUI_FROM_DATABASE=Samsung Electronics
 
+OUI:3C8C40*
+ ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
+
+OUI:3C912B*
+ ID_OUI_FROM_DATABASE=Vexata Inc
+
 OUI:3C9157*
  ID_OUI_FROM_DATABASE=Hangzhou Yulong Conmunication Co.,Ltd
 
@@ -56884,6 +57121,9 @@ OUI:3CB15B*
 OUI:3CB17F*
  ID_OUI_FROM_DATABASE=Wattwatchers Pty Ld
 
+OUI:3CB792*
+ ID_OUI_FROM_DATABASE=Hitachi Maxell, Ltd., Optronics Division
+
 OUI:3CB9A6*
  ID_OUI_FROM_DATABASE=Belden Deutschland GmbH
 
@@ -56902,6 +57142,9 @@ OUI:3CC1F6*
 OUI:3CC243*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
+OUI:3CC2E1*
+ ID_OUI_FROM_DATABASE=XINHUA CONTROL ENGINEERING CO.,LTD
+
 OUI:3CC99E*
  ID_OUI_FROM_DATABASE=Huiyang Technology Co., Ltd
 
@@ -56977,6 +57220,9 @@ OUI:3CF808*
 OUI:3CFB96*
  ID_OUI_FROM_DATABASE=Emcraft Systems LLC
 
+OUI:3CFDFE*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:400107*
  ID_OUI_FROM_DATABASE=Arista Corp
 
@@ -57017,7 +57263,7 @@ OUI:4018B1*
  ID_OUI_FROM_DATABASE=Aerohive Networks Inc.
 
 OUI:4018D7*
- ID_OUI_FROM_DATABASE=Wyle Telemetry and Data Systems
+ ID_OUI_FROM_DATABASE=Smartronix, Inc.
 
 OUI:401D59*
  ID_OUI_FROM_DATABASE=Biometric Associates, LP
@@ -57106,6 +57352,9 @@ OUI:406186*
 OUI:40618E*
  ID_OUI_FROM_DATABASE=Stella-Green Co
 
+OUI:4062B6*
+ ID_OUI_FROM_DATABASE=Tele system communication
+
 OUI:40667A*
  ID_OUI_FROM_DATABASE=mediola - connected living AG
 
@@ -57149,7 +57398,7 @@ OUI:408256*
  ID_OUI_FROM_DATABASE=Continental Automotive GmbH
 
 OUI:4083DE*
- ID_OUI_FROM_DATABASE=Motorola
+ ID_OUI_FROM_DATABASE=Zebra Technologies Inc
 
 OUI:408493*
  ID_OUI_FROM_DATABASE=Clavister AB
@@ -57187,6 +57436,9 @@ OUI:409B0D*
 OUI:409FC7*
  ID_OUI_FROM_DATABASE=BAEKCHUN I&C Co., Ltd.
 
+OUI:40A5EF*
+ ID_OUI_FROM_DATABASE=Shenzhen Four Seas Global Link Network Technology Co., Ltd.
+
 OUI:40A6A4*
  ID_OUI_FROM_DATABASE=PassivSystems Ltd
 
@@ -57256,6 +57508,9 @@ OUI:40CBA8*
 OUI:40CD3A*
  ID_OUI_FROM_DATABASE=Z3 Technology
 
+OUI:40D28A*
+ ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+
 OUI:40D32D*
  ID_OUI_FROM_DATABASE=Apple
 
@@ -57367,6 +57622,9 @@ OUI:44334C*
 OUI:44348F*
  ID_OUI_FROM_DATABASE=MXT INDUSTRIAL LTDA
 
+OUI:44356F*
+ ID_OUI_FROM_DATABASE=Neterix
+
 OUI:443719*
  ID_OUI_FROM_DATABASE=2 Save Energy Ltd
 
@@ -57424,6 +57682,9 @@ OUI:445829*
 OUI:44599F*
  ID_OUI_FROM_DATABASE=Criticare Systems, Inc
 
+OUI:445ECD*
+ ID_OUI_FROM_DATABASE=Razer Inc
+
 OUI:445EF3*
  ID_OUI_FROM_DATABASE=Tonalite Holding B.V.
 
@@ -57532,6 +57793,9 @@ OUI:44A6E5*
 OUI:44A7CF*
  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
 
+OUI:44A842*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
 OUI:44A8C2*
  ID_OUI_FROM_DATABASE=SEWOO TECH CO., LTD
 
@@ -57613,6 +57877,9 @@ OUI:44E4D9*
 OUI:44E8A5*
  ID_OUI_FROM_DATABASE=Myreka Technologies Sdn. Bhd.
 
+OUI:44E9DD*
+ ID_OUI_FROM_DATABASE=SAGEMCOM SAS
+
 OUI:44ED57*
  ID_OUI_FROM_DATABASE=Longicorn, inc.
 
@@ -57622,6 +57889,9 @@ OUI:44EE30*
 OUI:44F459*
  ID_OUI_FROM_DATABASE=Samsung Electronics
 
+OUI:44F477*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:44F849*
  ID_OUI_FROM_DATABASE=Union Pacific Railroad
 
@@ -57673,6 +57943,9 @@ OUI:48343D*
 OUI:483D32*
  ID_OUI_FROM_DATABASE=Syscor Controls & Automation
 
+OUI:48437C*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:484487*
  ID_OUI_FROM_DATABASE=Cisco SPVTG
 
@@ -57691,6 +57964,12 @@ OUI:4851B7*
 OUI:485261*
  ID_OUI_FROM_DATABASE=SOREEL
 
+OUI:485415*
+ ID_OUI_FROM_DATABASE=NET RULES TECNOLOGIA EIRELI
+
+OUI:48555F*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Tech.Co.,Ltd.
+
 OUI:4857DD*
  ID_OUI_FROM_DATABASE=Facebook
 
@@ -57739,6 +58018,9 @@ OUI:48746E*
 OUI:488244*
  ID_OUI_FROM_DATABASE=Life Fitness / Div. of Brunswick
 
+OUI:4886E8*
+ ID_OUI_FROM_DATABASE=Microsoft Corporation
+
 OUI:488E42*
  ID_OUI_FROM_DATABASE=DIGALOG GmbH
 
@@ -57766,6 +58048,9 @@ OUI:48A2B7*
 OUI:48A6D2*
  ID_OUI_FROM_DATABASE=GJsun Optical Science and Tech Co.,Ltd.
 
+OUI:48A9D2*
+ ID_OUI_FROM_DATABASE=Wistron Neweb Corp.
+
 OUI:48AA5D*
  ID_OUI_FROM_DATABASE=Store Electronic Systems
 
@@ -57787,6 +58072,9 @@ OUI:48B9C2*
 OUI:48BE2D*
  ID_OUI_FROM_DATABASE=Symanitron
 
+OUI:48C093*
+ ID_OUI_FROM_DATABASE=Xirrus, Inc.
+
 OUI:48C1AC*
  ID_OUI_FROM_DATABASE=PLANTRONICS, INC.
 
@@ -57832,6 +58120,9 @@ OUI:48DF1C*
 OUI:48E1AF*
  ID_OUI_FROM_DATABASE=Vity
 
+OUI:48E9F1*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:48EA63*
  ID_OUI_FROM_DATABASE=Zhejiang Uniview Technologies Co., Ltd.
 
@@ -57844,6 +58135,9 @@ OUI:48ED80*
 OUI:48EE07*
  ID_OUI_FROM_DATABASE=Silver Palm Technologies LLC
 
+OUI:48EE0C*
+ ID_OUI_FROM_DATABASE=D-Link International
+
 OUI:48EE86*
  ID_OUI_FROM_DATABASE=UTStarcom (China) Co.,Ltd
 
@@ -57889,6 +58183,9 @@ OUI:4C07C9*
 OUI:4C09B4*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:4C09D4*
+ ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation
+
 OUI:4C0B3A*
  ID_OUI_FROM_DATABASE=TCT Mobile Limited
 
@@ -58033,6 +58330,9 @@ OUI:4C73A5*
 OUI:4C7403*
  ID_OUI_FROM_DATABASE=Mundo Reader (bq)
 
+OUI:4C7625*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
 OUI:4C774F*
  ID_OUI_FROM_DATABASE=Embedded Wireless Labs
 
@@ -58042,6 +58342,9 @@ OUI:4C7897*
 OUI:4C79BA*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:4C7C5F*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:4C7F62*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
@@ -58087,12 +58390,18 @@ OUI:4C9EE4*
 OUI:4C9EFF*
  ID_OUI_FROM_DATABASE=ZyXEL Communications Corp
 
+OUI:4CA515*
+ ID_OUI_FROM_DATABASE=Baikal Electronics JSC
+
 OUI:4CA56D*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
 OUI:4CA74B*
  ID_OUI_FROM_DATABASE=Alcatel Lucent
 
+OUI:4CA928*
+ ID_OUI_FROM_DATABASE=Insensi
+
 OUI:4CAA16*
  ID_OUI_FROM_DATABASE=AzureWave Technologies (Shanghai) Inc.
 
@@ -58147,6 +58456,9 @@ OUI:4CCBF5*
 OUI:4CCC34*
  ID_OUI_FROM_DATABASE=Motorola Solutions Inc.
 
+OUI:4CD08A*
+ ID_OUI_FROM_DATABASE=HUMAX.CO.,LTD
+
 OUI:4CD637*
  ID_OUI_FROM_DATABASE=Qsono Electronics Co., Ltd
 
@@ -58294,9 +58606,15 @@ OUI:504A6E*
 OUI:504F94*
  ID_OUI_FROM_DATABASE=Loxone Electronics GmbH
 
+OUI:50502A*
+ ID_OUI_FROM_DATABASE=Egardia
+
 OUI:505065*
  ID_OUI_FROM_DATABASE=TAKT Corporation
 
+OUI:505527*
+ ID_OUI_FROM_DATABASE=LG Electronics
+
 OUI:505663*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -58330,6 +58648,9 @@ OUI:506313*
 OUI:506441*
  ID_OUI_FROM_DATABASE=Greenlee
 
+OUI:5065F3*
+ ID_OUI_FROM_DATABASE=Hewlett Packard
+
 OUI:506787*
  ID_OUI_FROM_DATABASE=iTellus
 
@@ -58345,6 +58666,9 @@ OUI:506F9A*
 OUI:5070E5*
  ID_OUI_FROM_DATABASE=He Shan World Fair Electronics Technology Limited
 
+OUI:507224*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:50724D*
  ID_OUI_FROM_DATABASE=BEG Brueck Electronic GmbH
 
@@ -58582,6 +58906,9 @@ OUI:543530*
 OUI:5435DF*
  ID_OUI_FROM_DATABASE=Symeo GmbH
 
+OUI:54369B*
+ ID_OUI_FROM_DATABASE=In one network technology (Beijing) Co., Ltd.
+
 OUI:543968*
  ID_OUI_FROM_DATABASE=Edgewater Networks Inc
 
@@ -58645,6 +58972,9 @@ OUI:54781A*
 OUI:547975*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
+OUI:547C69*
+ ID_OUI_FROM_DATABASE=Cisco
+
 OUI:547F54*
  ID_OUI_FROM_DATABASE=INGENICO
 
@@ -58687,6 +59017,9 @@ OUI:549B12*
 OUI:549D85*
  ID_OUI_FROM_DATABASE=EnerAccess inc
 
+OUI:549F13*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:549F35*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
@@ -58834,6 +59167,9 @@ OUI:581CBD*
 OUI:581D91*
  ID_OUI_FROM_DATABASE=Advanced Mobile Telecom co.,ltd.
 
+OUI:581F28*
+ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+
 OUI:581F67*
  ID_OUI_FROM_DATABASE=Open-m technology limited
 
@@ -58873,6 +59209,9 @@ OUI:58468F*
 OUI:5846E1*
  ID_OUI_FROM_DATABASE=Baxter Healthcare
 
+OUI:584704*
+ ID_OUI_FROM_DATABASE=Shenzhen Webridge Technology Co.,Ltd
+
 OUI:5848C0*
  ID_OUI_FROM_DATABASE=COFLEC
 
@@ -58960,6 +59299,9 @@ OUI:587FC8*
 OUI:5884E4*
  ID_OUI_FROM_DATABASE=IP500 Alliance e.V.
 
+OUI:58856E*
+ ID_OUI_FROM_DATABASE=QSC AG
+
 OUI:58874C*
  ID_OUI_FROM_DATABASE=LITE-ON CLEAN ENERGY TECHNOLOGY CORP.
 
@@ -58993,6 +59335,9 @@ OUI:589835*
 OUI:58986F*
  ID_OUI_FROM_DATABASE=Revolution Display
 
+OUI:589B0B*
+ ID_OUI_FROM_DATABASE=Shineway Technologies, Inc.
+
 OUI:589CFC*
  ID_OUI_FROM_DATABASE=FreeBSD Foundation
 
@@ -59002,6 +59347,9 @@ OUI:58A2B5*
 OUI:58A76F*
  ID_OUI_FROM_DATABASE=iD corporation
 
+OUI:58A839*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:58B035*
  ID_OUI_FROM_DATABASE=Apple
 
@@ -59108,7 +59456,7 @@ OUI:5C0CBB*
  ID_OUI_FROM_DATABASE=CELIZION Inc.
 
 OUI:5C0E8B*
- ID_OUI_FROM_DATABASE=Motorola
+ ID_OUI_FROM_DATABASE=Zebra Technologies Inc
 
 OUI:5C1193*
  ID_OUI_FROM_DATABASE=Seal One AG
@@ -59185,12 +59533,18 @@ OUI:5C36B8*
 OUI:5C38E0*
  ID_OUI_FROM_DATABASE=Shanghai Super Electronics Technology Co.,LTD
 
+OUI:5C3B35*
+ ID_OUI_FROM_DATABASE=Gehirn Inc.
+
 OUI:5C3C27*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
 OUI:5C4058*
  ID_OUI_FROM_DATABASE=Jefferson Audio Video Systems, Inc.
 
+OUI:5C41E7*
+ ID_OUI_FROM_DATABASE=Wiatec International Ltd.
+
 OUI:5C43D2*
  ID_OUI_FROM_DATABASE=HAZEMEYER
 
@@ -59257,9 +59611,15 @@ OUI:5C864A*
 OUI:5C8778*
  ID_OUI_FROM_DATABASE=Cybertelbridge co.,ltd
 
+OUI:5C899A*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD
+
 OUI:5C89D4*
  ID_OUI_FROM_DATABASE=Beijing Banner Electric Co.,Ltd
 
+OUI:5C8A38*
+ ID_OUI_FROM_DATABASE=Hewlett Packard
+
 OUI:5C8D4E*
  ID_OUI_FROM_DATABASE=Apple
 
@@ -59326,6 +59686,9 @@ OUI:5CC9D3*
 OUI:5CCA32*
  ID_OUI_FROM_DATABASE=Theben AG
 
+OUI:5CCCFF*
+ ID_OUI_FROM_DATABASE=Techroutes Network Pvt Ltd
+
 OUI:5CCEAD*
  ID_OUI_FROM_DATABASE=CDYNE Corporation
 
@@ -59398,9 +59761,15 @@ OUI:5CF4AB*
 OUI:5CF50D*
  ID_OUI_FROM_DATABASE=Institute of microelectronic applications
 
+OUI:5CF5DA*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:5CF6DC*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
 
+OUI:5CF7C3*
+ ID_OUI_FROM_DATABASE=SYNTECH (HK) TECHNOLOGY LIMITED
+
 OUI:5CF8A1*
  ID_OUI_FROM_DATABASE=Murata Manufactuaring Co.,Ltd.
 
@@ -59416,6 +59785,9 @@ OUI:5CF9DD*
 OUI:5CF9F0*
  ID_OUI_FROM_DATABASE=Atomos Engineering P/L
 
+OUI:5CFC66*
+ ID_OUI_FROM_DATABASE=Cisco
+
 OUI:5CFF35*
  ID_OUI_FROM_DATABASE=Wistron Corporation
 
@@ -59446,6 +59818,9 @@ OUI:601199*
 OUI:601283*
  ID_OUI_FROM_DATABASE=Soluciones Tecnologicas para la Salud y el Bienestar SA
 
+OUI:60128B*
+ ID_OUI_FROM_DATABASE=CANON INC.
+
 OUI:6015C7*
  ID_OUI_FROM_DATABASE=IdaTech
 
@@ -59536,6 +59911,9 @@ OUI:605464*
 OUI:605718*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:605BB4*
+ ID_OUI_FROM_DATABASE=AzureWave Technologies, Inc.
+
 OUI:60601F*
  ID_OUI_FROM_DATABASE=SZ DJI TECHNOLOGY CO.,LTD
 
@@ -59635,6 +60013,9 @@ OUI:60A8FE*
 OUI:60A9B0*
  ID_OUI_FROM_DATABASE=Merchandising Technologies, Inc
 
+OUI:60AF6D*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:60B185*
  ID_OUI_FROM_DATABASE=ATH system
 
@@ -59707,6 +60088,9 @@ OUI:60D30A*
 OUI:60D819*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
+OUI:60D9A0*
+ ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
+
 OUI:60D9C7*
  ID_OUI_FROM_DATABASE=Apple
 
@@ -59737,6 +60121,9 @@ OUI:60EB69*
 OUI:60F13D*
  ID_OUI_FROM_DATABASE=JABLOCOM s.r.o.
 
+OUI:60F189*
+ ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+
 OUI:60F281*
  ID_OUI_FROM_DATABASE=TRANWO TECHNOLOGY CO., LTD.
 
@@ -59755,6 +60142,9 @@ OUI:60F59C*
 OUI:60F673*
  ID_OUI_FROM_DATABASE=TERUMO CORPORATION
 
+OUI:60F81D*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:60FACD*
  ID_OUI_FROM_DATABASE=Apple
 
@@ -59851,6 +60241,9 @@ OUI:64317E*
 OUI:643409*
  ID_OUI_FROM_DATABASE=BITwave Pte Ltd
 
+OUI:643AB1*
+ ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
+
 OUI:643E8C*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -60010,6 +60403,9 @@ OUI:649968*
 OUI:6499A0*
  ID_OUI_FROM_DATABASE=AG Elektronik AB
 
+OUI:649ABE*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:649B24*
  ID_OUI_FROM_DATABASE=V Technology Co., Ltd.
 
@@ -60169,6 +60565,9 @@ OUI:64F242*
 OUI:64F50E*
  ID_OUI_FROM_DATABASE=Kinion Technology Company Limited
 
+OUI:64F69D*
+ ID_OUI_FROM_DATABASE=Cisco
+
 OUI:64F970*
  ID_OUI_FROM_DATABASE=Kenade Electronics Technology Co.,LTD.
 
@@ -60229,6 +60628,9 @@ OUI:68234B*
 OUI:6828BA*
  ID_OUI_FROM_DATABASE=Dejai
 
+OUI:6828F6*
+ ID_OUI_FROM_DATABASE=Vubiq Networks, Inc.
+
 OUI:682DDC*
  ID_OUI_FROM_DATABASE=Wuhan Changjiang Electro-Communication Equipment CO.,LTD
 
@@ -60238,6 +60640,9 @@ OUI:6836B5*
 OUI:683B1E*
  ID_OUI_FROM_DATABASE=Countwise LTD
 
+OUI:683C7D*
+ ID_OUI_FROM_DATABASE=Magic Intelligence Technology Limited
+
 OUI:683EEC*
  ID_OUI_FROM_DATABASE=ERECA
 
@@ -60280,6 +60685,9 @@ OUI:685E6B*
 OUI:686359*
  ID_OUI_FROM_DATABASE=Advanced Digital Broadcast SA
 
+OUI:68644B*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:68692E*
  ID_OUI_FROM_DATABASE=Zycoo Co.,Ltd
 
@@ -60346,6 +60754,9 @@ OUI:68876B*
 OUI:688AB5*
  ID_OUI_FROM_DATABASE=EDP Servicos
 
+OUI:688F84*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:689234*
  ID_OUI_FROM_DATABASE=Ruckus Wireless
 
@@ -60412,6 +60823,9 @@ OUI:68B6FC*
 OUI:68B8D9*
  ID_OUI_FROM_DATABASE=Act KDE, Inc.
 
+OUI:68B983*
+ ID_OUI_FROM_DATABASE=b-plus GmbH
+
 OUI:68BC0C*
  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
 
@@ -60481,6 +60895,9 @@ OUI:68EFBD*
 OUI:68F06D*
  ID_OUI_FROM_DATABASE=ALONG INDUSTRIAL CO., LIMITED
 
+OUI:68F0BC*
+ ID_OUI_FROM_DATABASE=Shenzhen LiWiFi Technology Co., Ltd
+
 OUI:68F125*
  ID_OUI_FROM_DATABASE=Data Controls Inc.
 
@@ -60547,6 +60964,9 @@ OUI:6C2C06*
 OUI:6C2E33*
  ID_OUI_FROM_DATABASE=Accelink Technologies Co.,Ltd.
 
+OUI:6C2E72*
+ ID_OUI_FROM_DATABASE=B&B EXPORTING LIMITED
+
 OUI:6C2E85*
  ID_OUI_FROM_DATABASE=SAGEMCOM
 
@@ -60697,6 +61117,12 @@ OUI:6CA682*
 OUI:6CA780*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
+OUI:6CA7FA*
+ ID_OUI_FROM_DATABASE=YOUNGBO ENGINEERING INC.
+
+OUI:6CA849*
+ ID_OUI_FROM_DATABASE=Avaya, Inc
+
 OUI:6CA906*
  ID_OUI_FROM_DATABASE=Telefield Ltd
 
@@ -60733,6 +61159,9 @@ OUI:6CB311*
 OUI:6CB350*
  ID_OUI_FROM_DATABASE=Anhui comhigher tech co.,ltd
 
+OUI:6CB56B*
+ ID_OUI_FROM_DATABASE=HUMAX.CO.,LTD
+
 OUI:6CB7F4*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -60751,6 +61180,9 @@ OUI:6CC217*
 OUI:6CC26B*
  ID_OUI_FROM_DATABASE=Apple
 
+OUI:6CCA08*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
 OUI:6CD032*
  ID_OUI_FROM_DATABASE=LG Electronics
 
@@ -60796,6 +61228,9 @@ OUI:6CF373*
 OUI:6CF37F*
  ID_OUI_FROM_DATABASE=Aruba Networks
 
+OUI:6CF5E8*
+ ID_OUI_FROM_DATABASE=Mooredoll Inc.
+
 OUI:6CF97C*
  ID_OUI_FROM_DATABASE=Nanoptix Inc.
 
@@ -60925,6 +61360,9 @@ OUI:704CED*
 OUI:704E01*
  ID_OUI_FROM_DATABASE=KWANGWON TECH CO., LTD.
 
+OUI:704E66*
+ ID_OUI_FROM_DATABASE=SHENZHEN FAST TECHNOLOGIES CO.,LTD
+
 OUI:7052C5*
  ID_OUI_FROM_DATABASE=Avaya, Inc.
 
@@ -61063,6 +61501,9 @@ OUI:709E29*
 OUI:709E86*
  ID_OUI_FROM_DATABASE=X6D Limited
 
+OUI:709F2D*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:70A191*
  ID_OUI_FROM_DATABASE=Trendsetter Medical, LLC
 
@@ -61078,6 +61519,9 @@ OUI:70A8E3*
 OUI:70AAB2*
  ID_OUI_FROM_DATABASE=Research In Motion
 
+OUI:70AD54*
+ ID_OUI_FROM_DATABASE=Malvern Instruments Ltd
+
 OUI:70AF25*
  ID_OUI_FROM_DATABASE=Nishiyama Industry Co.,LTD.
 
@@ -61108,6 +61552,9 @@ OUI:70BAEF*
 OUI:70C6AC*
  ID_OUI_FROM_DATABASE=Bosch Automotive Aftermarket
 
+OUI:70C76F*
+ ID_OUI_FROM_DATABASE=INNO S
+
 OUI:70CA9B*
  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
 
@@ -61129,6 +61576,9 @@ OUI:70D6B6*
 OUI:70D880*
  ID_OUI_FROM_DATABASE=Upos System sp. z o.o.
 
+OUI:70DA9C*
+ ID_OUI_FROM_DATABASE=TECSEN
+
 OUI:70DDA1*
  ID_OUI_FROM_DATABASE=Tellabs
 
@@ -61183,6 +61633,9 @@ OUI:70FF5C*
 OUI:70FF76*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:7403BD*
+ ID_OUI_FROM_DATABASE=Buffalo Inc.
+
 OUI:740ABC*
  ID_OUI_FROM_DATABASE=JSJS Designs (Europe) Limited
 
@@ -61225,6 +61678,9 @@ OUI:742B62*
 OUI:742D0A*
  ID_OUI_FROM_DATABASE=Norfolk Elektronik AG
 
+OUI:742EFC*
+ ID_OUI_FROM_DATABASE=DirectPacket Research, Inc,
+
 OUI:742F68*
  ID_OUI_FROM_DATABASE=Azurewave Technologies, Inc.
 
@@ -61324,6 +61780,9 @@ OUI:747E1A*
 OUI:747E2D*
  ID_OUI_FROM_DATABASE=Beijing Thomson CITIC Digital Technology Co. LTD.
 
+OUI:748114*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:74867A*
  ID_OUI_FROM_DATABASE=Dell Inc
 
@@ -61351,21 +61810,39 @@ OUI:749050*
 OUI:74911A*
  ID_OUI_FROM_DATABASE=Ruckus Wireless
 
+OUI:7491BD*
+ ID_OUI_FROM_DATABASE=Four systems Co.,Ltd.
+
 OUI:7493A4*
  ID_OUI_FROM_DATABASE=Zebra Technologies Corp.
 
 OUI:74943D*
  ID_OUI_FROM_DATABASE=AgJunction
 
+OUI:749637*
+ ID_OUI_FROM_DATABASE=Todaair Electronic Co., Ltd
+
 OUI:749975*
  ID_OUI_FROM_DATABASE=IBM Corporation
 
 OUI:749C52*
  ID_OUI_FROM_DATABASE=Huizhou Desay SV Automotive Co., Ltd.
 
+OUI:749CE3*
+ ID_OUI_FROM_DATABASE=Art2Wave Canada Inc.
+
 OUI:749DDC*
  ID_OUI_FROM_DATABASE=2Wire
 
+OUI:74A02F*
+ ID_OUI_FROM_DATABASE=Cisco
+
+OUI:74A063*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:74A34A*
+ ID_OUI_FROM_DATABASE=ZIMI CORPORATION
+
 OUI:74A4A7*
  ID_OUI_FROM_DATABASE=QRS Music Technologies, Inc.
 
@@ -61396,6 +61873,9 @@ OUI:74BE08*
 OUI:74BFA1*
  ID_OUI_FROM_DATABASE=HYUNTECK
 
+OUI:74C246*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:74C621*
  ID_OUI_FROM_DATABASE=Zhejiang Hite Renewable Energy Co.,LTD
 
@@ -61423,6 +61903,9 @@ OUI:74D435*
 OUI:74D675*
  ID_OUI_FROM_DATABASE=WYMA Tecnologia
 
+OUI:74D6EA*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:74D850*
  ID_OUI_FROM_DATABASE=Evrisko Systems
 
@@ -61444,6 +61927,12 @@ OUI:74E14A*
 OUI:74E1B6*
  ID_OUI_FROM_DATABASE=Apple
 
+OUI:74E277*
+ ID_OUI_FROM_DATABASE=Vizmonet Pte Ltd
+
+OUI:74E28C*
+ ID_OUI_FROM_DATABASE=Microsoft Corporation
+
 OUI:74E2F5*
  ID_OUI_FROM_DATABASE=Apple
 
@@ -61582,6 +62071,9 @@ OUI:783E53*
 OUI:783F15*
  ID_OUI_FROM_DATABASE=EasySYNC Ltd.
 
+OUI:7840E4*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:784405*
  ID_OUI_FROM_DATABASE=FUJITU(HONG KONG) ELECTRONIC Co.,LTD.
 
@@ -61630,6 +62122,9 @@ OUI:785517*
 OUI:785712*
  ID_OUI_FROM_DATABASE=Mobile Integration Workgroup
 
+OUI:7858F3*
+ ID_OUI_FROM_DATABASE=Vachen Co.,Ltd
+
 OUI:78593E*
  ID_OUI_FROM_DATABASE=RAFI GmbH & Co.KG
 
@@ -61654,6 +62149,12 @@ OUI:786A89*
 OUI:786C1C*
  ID_OUI_FROM_DATABASE=Apple
 
+OUI:78719C*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:787E61*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:787F62*
  ID_OUI_FROM_DATABASE=GiK mbH
 
@@ -61720,6 +62221,9 @@ OUI:78A183*
 OUI:78A2A0*
  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
 
+OUI:78A351*
+ ID_OUI_FROM_DATABASE=SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD
+
 OUI:78A3E4*
  ID_OUI_FROM_DATABASE=Apple
 
@@ -61747,6 +62251,9 @@ OUI:78AB60*
 OUI:78ABBB*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
 
+OUI:78ACBF*
+ ID_OUI_FROM_DATABASE=Igneous Systems
+
 OUI:78ACC0*
  ID_OUI_FROM_DATABASE=Hewlett-Packard Company
 
@@ -61858,6 +62365,9 @@ OUI:78E7D1*
 OUI:78E8B6*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:78E980*
+ ID_OUI_FROM_DATABASE=RainUs Co.,Ltd
+
 OUI:78EB14*
  ID_OUI_FROM_DATABASE=SHENZHEN FAST TECHNOLOGIES CO.,LTD
 
@@ -61882,6 +62392,9 @@ OUI:78F7BE*
 OUI:78F7D0*
  ID_OUI_FROM_DATABASE=Silverbrook Research
 
+OUI:78FC14*
+ ID_OUI_FROM_DATABASE=B Communications Pty Ltd
+
 OUI:78FD94*
  ID_OUI_FROM_DATABASE=Apple
 
@@ -61945,6 +62458,9 @@ OUI:7C1A03*
 OUI:7C1AFC*
  ID_OUI_FROM_DATABASE=Dalian Co-Edifice Video Technology Co., Ltd
 
+OUI:7C1DD9*
+ ID_OUI_FROM_DATABASE=XIAOMI IMC
+
 OUI:7C1E52*
  ID_OUI_FROM_DATABASE=Microsoft
 
@@ -61981,6 +62497,9 @@ OUI:7C3920*
 OUI:7C3BD5*
  ID_OUI_FROM_DATABASE=Imago Group
 
+OUI:7C3CB6*
+ ID_OUI_FROM_DATABASE=Shenzhen Homecare Technology Co.,Ltd.
+
 OUI:7C3E9D*
  ID_OUI_FROM_DATABASE=PATECH
 
@@ -62011,9 +62530,15 @@ OUI:7C4CA5*
 OUI:7C4FB5*
  ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation
 
+OUI:7C534A*
+ ID_OUI_FROM_DATABASE=Metamako
+
 OUI:7C55E7*
  ID_OUI_FROM_DATABASE=YSI, Inc.
 
+OUI:7C5CF8*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:7C6097*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -62068,6 +62593,9 @@ OUI:7C72E4*
 OUI:7C7673*
  ID_OUI_FROM_DATABASE=ENMAS GmbH
 
+OUI:7C7A53*
+ ID_OUI_FROM_DATABASE=Phytrex Technology Corp.
+
 OUI:7C7A91*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -62080,6 +62608,9 @@ OUI:7C7D41*
 OUI:7C822D*
  ID_OUI_FROM_DATABASE=Nortec
 
+OUI:7C8274*
+ ID_OUI_FROM_DATABASE=Shenzhen Hikeen Technology CO.,LTD
+
 OUI:7C8306*
  ID_OUI_FROM_DATABASE=Glen Dimplex Nordic as
 
@@ -62158,6 +62689,9 @@ OUI:7CC4EF*
 OUI:7CC537*
  ID_OUI_FROM_DATABASE=Apple
 
+OUI:7CC709*
+ ID_OUI_FROM_DATABASE=Shenzhen RF-LINK Elec&Technology.,Ltd
+
 OUI:7CC8AB*
  ID_OUI_FROM_DATABASE=Acro Associates, Inc.
 
@@ -62401,6 +62935,9 @@ OUI:8065E9*
 OUI:806629*
  ID_OUI_FROM_DATABASE=Prescope Technologies CO.,LTD.
 
+OUI:806AB0*
+ ID_OUI_FROM_DATABASE=Tinno Mobile Technology Corp
+
 OUI:806C1B*
  ID_OUI_FROM_DATABASE=Motorola Mobility LLC
 
@@ -62446,6 +62983,9 @@ OUI:808698*
 OUI:8086F2*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:808917*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD
+
 OUI:808B5C*
  ID_OUI_FROM_DATABASE=Shenzhen Runhuicheng Technology Co., Ltd
 
@@ -62479,11 +63019,14 @@ OUI:809B20*
 OUI:80A1D7*
  ID_OUI_FROM_DATABASE=Shanghai DareGlobal Technologies Co.,Ltd
 
+OUI:80A85D*
+ ID_OUI_FROM_DATABASE=Osterhout Design Group
+
 OUI:80AAA4*
  ID_OUI_FROM_DATABASE=USAG
 
 OUI:80AD67*
- ID_OUI_FROM_DATABASE=Kasda Digital Technology Co.,Ltd
+ ID_OUI_FROM_DATABASE=Kasda Networks Inc
 
 OUI:80B219*
  ID_OUI_FROM_DATABASE=ELEKTRON TECHNOLOGY UK LIMITED
@@ -62536,6 +63079,9 @@ OUI:80CF41*
 OUI:80D019*
  ID_OUI_FROM_DATABASE=Embed, Inc
 
+OUI:80D09B*
+ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+
 OUI:80D18B*
  ID_OUI_FROM_DATABASE=Hangzhou I'converge Technology Co.,Ltd
 
@@ -62566,6 +63112,9 @@ OUI:80EE73*
 OUI:80F25E*
  ID_OUI_FROM_DATABASE=Kyynel
 
+OUI:80F503*
+ ID_OUI_FROM_DATABASE=Pace plc
+
 OUI:80F593*
  ID_OUI_FROM_DATABASE=IRCO Sistemas de Telecomunicación S.A.
 
@@ -62624,7 +63173,7 @@ OUI:842141*
  ID_OUI_FROM_DATABASE=Shenzhen Ginwave Technologies Ltd.
 
 OUI:84248D*
- ID_OUI_FROM_DATABASE=Motorola Solutions Inc
+ ID_OUI_FROM_DATABASE=Zebra Technologies Inc
 
 OUI:84253F*
  ID_OUI_FROM_DATABASE=Silex Technology, Inc
@@ -62698,6 +63247,9 @@ OUI:844823*
 OUI:844915*
  ID_OUI_FROM_DATABASE=vArmour Networks, Inc.
 
+OUI:844BB7*
+ ID_OUI_FROM_DATABASE=Beijing Sankuai Online Technology Co.,Ltd
+
 OUI:844BF5*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
@@ -62722,6 +63274,9 @@ OUI:845C93*
 OUI:845DD7*
  ID_OUI_FROM_DATABASE=Shenzhen Netcom Electronics Co.,Ltd
 
+OUI:8461A0*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
 OUI:846223*
  ID_OUI_FROM_DATABASE=Shenzhen Coship Electronics Co., Ltd.
 
@@ -62740,6 +63295,9 @@ OUI:846EB1*
 OUI:847207*
  ID_OUI_FROM_DATABASE=I&C Technology
 
+OUI:847303*
+ ID_OUI_FROM_DATABASE=Letv Mobile and Intelligent Information Technology (Beijing) Corporation Ltd.
+
 OUI:84742A*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -62758,6 +63316,9 @@ OUI:847A88*
 OUI:847E40*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:84802D*
+ ID_OUI_FROM_DATABASE=Cisco
+
 OUI:8482F4*
  ID_OUI_FROM_DATABASE=Beijing Huasun Unicreate Technology Co., Ltd
 
@@ -62851,6 +63412,9 @@ OUI:84B59C*
 OUI:84C2E4*
  ID_OUI_FROM_DATABASE=Jiangsu Qinheng Co., Ltd.
 
+OUI:84C3E8*
+ ID_OUI_FROM_DATABASE=Vaillant GmbH
+
 OUI:84C727*
  ID_OUI_FROM_DATABASE=Gnodal Ltd
 
@@ -62863,6 +63427,9 @@ OUI:84C8B1*
 OUI:84C9B2*
  ID_OUI_FROM_DATABASE=D-Link International
 
+OUI:84CFBF*
+ ID_OUI_FROM_DATABASE=Fairphone
+
 OUI:84D32A*
  ID_OUI_FROM_DATABASE=IEEE 1905.1
 
@@ -62872,6 +63439,9 @@ OUI:84D9C8*
 OUI:84DB2F*
  ID_OUI_FROM_DATABASE=Sierra Wireless Inc
 
+OUI:84DBAC*
+ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+
 OUI:84DD20*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -62986,6 +63556,9 @@ OUI:88354C*
 OUI:883612*
  ID_OUI_FROM_DATABASE=SRC Computers, LLC
 
+OUI:883B8B*
+ ID_OUI_FROM_DATABASE=Cheering Connection Co. Ltd.
+
 OUI:8841C1*
  ID_OUI_FROM_DATABASE=ORBISAT DA AMAZONIA IND E AEROL SA
 
@@ -63157,6 +63730,9 @@ OUI:88C9D0*
 OUI:88CB87*
  ID_OUI_FROM_DATABASE=Apple
 
+OUI:88CEFA*
+ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+
 OUI:88D7BC*
  ID_OUI_FROM_DATABASE=DEP Company
 
@@ -63175,9 +63751,15 @@ OUI:88E0A0*
 OUI:88E0F3*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
+OUI:88E161*
+ ID_OUI_FROM_DATABASE=Art Beijing Science and Technology Development Co., Ltd.
+
 OUI:88E3AB*
  ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
 
+OUI:88E603*
+ ID_OUI_FROM_DATABASE=Avotek corporation
+
 OUI:88E712*
  ID_OUI_FROM_DATABASE=Whirlpool Corporation
 
@@ -63394,6 +63976,9 @@ OUI:8C7F3B*
 OUI:8C82A8*
  ID_OUI_FROM_DATABASE=Insigma Technology Co.,Ltd
 
+OUI:8C873B*
+ ID_OUI_FROM_DATABASE=Leica Camera AG
+
 OUI:8C89A5*
  ID_OUI_FROM_DATABASE=Micro-Star INT'L CO., LTD
 
@@ -63448,6 +64033,9 @@ OUI:8CBEBE*
 OUI:8CBF9D*
  ID_OUI_FROM_DATABASE=Shanghai Xinyou Information Technology Ltd. Co.
 
+OUI:8CBFA6*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:8CC121*
  ID_OUI_FROM_DATABASE=Panasonic Corporation AVC Networks Company
 
@@ -63529,6 +64117,9 @@ OUI:8CFDF0*
 OUI:90004E*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
+OUI:9000DB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:90013B*
  ID_OUI_FROM_DATABASE=SAGEMCOM
 
@@ -63640,6 +64231,9 @@ OUI:903D6B*
 OUI:903EAB*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:904506*
+ ID_OUI_FROM_DATABASE=Tokyo Boeki Medisys Inc.
+
 OUI:9046B7*
  ID_OUI_FROM_DATABASE=Vadaro Pte Ltd
 
@@ -63754,6 +64348,9 @@ OUI:908C63*
 OUI:908D1D*
  ID_OUI_FROM_DATABASE=GH Technologies
 
+OUI:908D6C*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:908FCF*
  ID_OUI_FROM_DATABASE=UNO System Co., Ltd
 
@@ -63826,6 +64423,9 @@ OUI:90B97D*
 OUI:90C115*
  ID_OUI_FROM_DATABASE=Sony Ericsson Mobile Communications AB
 
+OUI:90C35F*
+ ID_OUI_FROM_DATABASE=Nanjing Jiahao Technology Co., Ltd.
+
 OUI:90C792*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -63877,6 +64477,9 @@ OUI:90E2BA*
 OUI:90E6BA*
  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
 
+OUI:90E7C4*
+ ID_OUI_FROM_DATABASE=HTC Corporation
+
 OUI:90EA60*
  ID_OUI_FROM_DATABASE=SPI Lasers Ltd
 
@@ -63925,6 +64528,9 @@ OUI:940149*
 OUI:9401C2*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:94049C*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:9405B6*
  ID_OUI_FROM_DATABASE=Liling FullRiver Electronics & Technology Ltd
 
@@ -64084,6 +64690,9 @@ OUI:949F3F*
 OUI:949FB4*
  ID_OUI_FROM_DATABASE=ChengDu JiaFaAnTai Technology Co.,Ltd
 
+OUI:94A1A2*
+ ID_OUI_FROM_DATABASE=AMPAK Technology Inc.
+
 OUI:94A7BC*
  ID_OUI_FROM_DATABASE=BodyMedia, Inc.
 
@@ -64162,6 +64771,9 @@ OUI:94CE31*
 OUI:94D019*
  ID_OUI_FROM_DATABASE=Cydle Corp.
 
+OUI:94D417*
+ ID_OUI_FROM_DATABASE=GPI KOREA INC.
+
 OUI:94D60E*
  ID_OUI_FROM_DATABASE=shenzhen yunmao information technologies co., ltd
 
@@ -64201,6 +64813,9 @@ OUI:94E0D0*
 OUI:94E226*
  ID_OUI_FROM_DATABASE=D. ORtiz Consulting, LLC
 
+OUI:94E2FD*
+ ID_OUI_FROM_DATABASE=Boge Kompressoren Otto Boge GmbH & Co. KG
+
 OUI:94E711*
  ID_OUI_FROM_DATABASE=Xirka Dama Persada PT
 
@@ -64216,6 +64831,9 @@ OUI:94EB2C*
 OUI:94EBCD*
  ID_OUI_FROM_DATABASE=Research In Motion Limited
 
+OUI:94F19E*
+ ID_OUI_FROM_DATABASE=HUIZHOU MAORONG INTELLIGENT TECHNOLOGY CO.,LTD
+
 OUI:94F692*
  ID_OUI_FROM_DATABASE=Geminico co.,Ltd.
 
@@ -64258,6 +64876,9 @@ OUI:981094*
 OUI:9816EC*
  ID_OUI_FROM_DATABASE=IC Intracom
 
+OUI:981DFA*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:98208E*
  ID_OUI_FROM_DATABASE=Definium Technologies
 
@@ -64477,6 +65098,9 @@ OUI:98E79A*
 OUI:98EC65*
  ID_OUI_FROM_DATABASE=Cosesy ApS
 
+OUI:98EECB*
+ ID_OUI_FROM_DATABASE=Wistron InfoComm(ZhongShan)Corporation
+
 OUI:98F0AB*
  ID_OUI_FROM_DATABASE=Apple
 
@@ -64486,6 +65110,9 @@ OUI:98F170*
 OUI:98F537*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:98F5A9*
+ ID_OUI_FROM_DATABASE=OHSUNG ELECTRONICS CO.,LTD.
+
 OUI:98F8C1*
  ID_OUI_FROM_DATABASE=IDT Technology Limited
 
@@ -64657,9 +65284,15 @@ OUI:9C65F9*
 OUI:9C6650*
  ID_OUI_FROM_DATABASE=Glodio Technolies Co.,Ltd Tianjin Branch
 
+OUI:9C685B*
+ ID_OUI_FROM_DATABASE=Octonion SA
+
 OUI:9C6ABE*
  ID_OUI_FROM_DATABASE=QEES ApS.
 
+OUI:9C6C15*
+ ID_OUI_FROM_DATABASE=Microsoft Corporation
+
 OUI:9C7514*
  ID_OUI_FROM_DATABASE=Wildix srl
 
@@ -64760,7 +65393,7 @@ OUI:9CC077*
  ID_OUI_FROM_DATABASE=PrintCounts, LLC
 
 OUI:9CC0D2*
- ID_OUI_FROM_DATABASE=Conductix-Wampfler AG
+ ID_OUI_FROM_DATABASE=Conductix-Wampfler GmbH
 
 OUI:9CC172*
  ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
@@ -64783,6 +65416,9 @@ OUI:9CD21E*
 OUI:9CD24B*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:9CD35B*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:9CD36D*
  ID_OUI_FROM_DATABASE=NETGEAR INC.,
 
@@ -64801,6 +65437,9 @@ OUI:9CE10E*
 OUI:9CE1D6*
  ID_OUI_FROM_DATABASE=Junger Audio-Studiotechnik GmbH
 
+OUI:9CE230*
+ ID_OUI_FROM_DATABASE=JULONG CO,.LTD.
+
 OUI:9CE635*
  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
 
@@ -64813,6 +65452,9 @@ OUI:9CE7BD*
 OUI:9CEBE8*
  ID_OUI_FROM_DATABASE=BizLink (Kunshan) Co.,Ltd
 
+OUI:9CF387*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:9CF61A*
  ID_OUI_FROM_DATABASE=UTC Fire and Security
 
@@ -65065,6 +65707,9 @@ OUI:A0A8CD*
 OUI:A0AAFD*
  ID_OUI_FROM_DATABASE=EraThink Technologies Corp.
 
+OUI:A0ADA1*
+ ID_OUI_FROM_DATABASE=JMR Electronics, Inc
+
 OUI:A0B100*
  ID_OUI_FROM_DATABASE=ShenZhen Cando Electronics Co.,Ltd
 
@@ -65086,15 +65731,24 @@ OUI:A0B9ED*
 OUI:A0BAB8*
  ID_OUI_FROM_DATABASE=Pixon Imaging
 
+OUI:A0BB3E*
+ ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY  - Please see MAM public listing for more information.
+
 OUI:A0BF50*
  ID_OUI_FROM_DATABASE=S.C. ADD-PRODUCTION S.R.L.
 
 OUI:A0BFA5*
  ID_OUI_FROM_DATABASE=CORESYS
 
+OUI:A0C2DE*
+ ID_OUI_FROM_DATABASE=Costar Video Systems
+
 OUI:A0C3DE*
  ID_OUI_FROM_DATABASE=Triton Electronic Systems Ltd.
 
+OUI:A0C562*
+ ID_OUI_FROM_DATABASE=Pace plc
+
 OUI:A0C6EC*
  ID_OUI_FROM_DATABASE=ShenZhen ANYK Technology Co.,LTD
 
@@ -65137,6 +65791,9 @@ OUI:A0E295*
 OUI:A0E453*
  ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
 
+OUI:A0E4CB*
+ ID_OUI_FROM_DATABASE=ZyXEL Communications Corporation
+
 OUI:A0E534*
  ID_OUI_FROM_DATABASE=Stratec Biomedical AG
 
@@ -65155,6 +65812,9 @@ OUI:A0EB76*
 OUI:A0EC80*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:A0ECF9*
+ ID_OUI_FROM_DATABASE=Cisco
+
 OUI:A0EDCD*
  ID_OUI_FROM_DATABASE=Apple
 
@@ -65239,6 +65899,9 @@ OUI:A42940*
 OUI:A429B7*
  ID_OUI_FROM_DATABASE=bluesky
 
+OUI:A42B8C*
+ ID_OUI_FROM_DATABASE=Netgear Inc
+
 OUI:A42C08*
  ID_OUI_FROM_DATABASE=Masterwork Automodules
 
@@ -65278,6 +65941,9 @@ OUI:A44E2D*
 OUI:A44E31*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:A44F29*
+ ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY  - Please see MAM public listing for more information.
+
 OUI:A45055*
  ID_OUI_FROM_DATABASE=busware.de
 
@@ -65302,6 +65968,9 @@ OUI:A45D36*
 OUI:A45DA1*
  ID_OUI_FROM_DATABASE=ADB Broadband Italia
 
+OUI:A45E60*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:A46032*
  ID_OUI_FROM_DATABASE=MRV Communications (Networks) LTD
 
@@ -65350,6 +66019,9 @@ OUI:A4856B*
 OUI:A4895B*
  ID_OUI_FROM_DATABASE=ARK INFOSOLUTIONS PVT LTD
 
+OUI:A48CDB*
+ ID_OUI_FROM_DATABASE=Lenovo
+
 OUI:A49005*
  ID_OUI_FROM_DATABASE=CHINA GREATWALL COMPUTER SHENZHEN CO.,LTD
 
@@ -65449,6 +66121,9 @@ OUI:A4C2AB*
 OUI:A4C361*
  ID_OUI_FROM_DATABASE=Apple
 
+OUI:A4C494*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:A4C7DE*
  ID_OUI_FROM_DATABASE=Cambridge Industries(Group) Co.,Ltd.
 
@@ -65611,6 +66286,9 @@ OUI:A8556A*
 OUI:A8574E*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:A85B78*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:A85BB0*
  ID_OUI_FROM_DATABASE=Shenzhen Dehoo Technology Co.,Ltd
 
@@ -65683,6 +66361,9 @@ OUI:A88D7B*
 OUI:A88E24*
  ID_OUI_FROM_DATABASE=Apple
 
+OUI:A89008*
+ ID_OUI_FROM_DATABASE=Beijing Yuecheng Technology Co. Ltd.
+
 OUI:A8922C*
  ID_OUI_FROM_DATABASE=LG Electronics
 
@@ -65707,9 +66388,15 @@ OUI:A8995C*
 OUI:A89B10*
  ID_OUI_FROM_DATABASE=inMotion Ltd.
 
+OUI:A89D21*
+ ID_OUI_FROM_DATABASE=Cisco
+
 OUI:A89DD2*
  ID_OUI_FROM_DATABASE=Shanghai DareGlobal Technologies Co., Ltd
 
+OUI:A89FBA*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:A8A668*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -65773,6 +66460,9 @@ OUI:A8E539*
 OUI:A8EF26*
  ID_OUI_FROM_DATABASE=Tritonwave
 
+OUI:A8F038*
+ ID_OUI_FROM_DATABASE=SHEN ZHEN SHI JIN HUA TAI ELECTRONICS CO.,LTD
+
 OUI:A8F274*
  ID_OUI_FROM_DATABASE=Samsung Electronics
 
@@ -66022,6 +66712,9 @@ OUI:AC9B84*
 OUI:AC9CE4*
  ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
 
+OUI:AC9E17*
+ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+
 OUI:ACA016*
  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
 
@@ -66046,9 +66739,15 @@ OUI:ACA9A0*
 OUI:ACAB8D*
  ID_OUI_FROM_DATABASE=Lyngso Marine A/S
 
+OUI:ACABBF*
+ ID_OUI_FROM_DATABASE=AthenTek Inc.
+
 OUI:ACB313*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:ACB57D*
+ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+
 OUI:ACB74F*
  ID_OUI_FROM_DATABASE=METEL s.r.o.
 
@@ -66073,6 +66772,9 @@ OUI:ACC595*
 OUI:ACC698*
  ID_OUI_FROM_DATABASE=Kohzu Precision Co., Ltd.
 
+OUI:ACC73F*
+ ID_OUI_FROM_DATABASE=VITSMO CO., LTD.
+
 OUI:ACC935*
  ID_OUI_FROM_DATABASE=Ness Corporation
 
@@ -66082,6 +66784,9 @@ OUI:ACCA54*
 OUI:ACCA8E*
  ID_OUI_FROM_DATABASE=ODA Technologies
 
+OUI:ACCAAB*
+ ID_OUI_FROM_DATABASE=Virtual Electric Inc
+
 OUI:ACCABA*
  ID_OUI_FROM_DATABASE=Midokura Co., Ltd.
 
@@ -66100,9 +66805,15 @@ OUI:ACCF23*
 OUI:ACCF5C*
  ID_OUI_FROM_DATABASE=Apple
 
+OUI:ACD074*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:ACD180*
  ID_OUI_FROM_DATABASE=Crexendo Business Solutions, Inc.
 
+OUI:ACD1B8*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
 OUI:ACD364*
  ID_OUI_FROM_DATABASE=ABB SPA, ABB SACE DIV.
 
@@ -66235,6 +66946,9 @@ OUI:B046FC*
 OUI:B0487A*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO., LTD.
 
+OUI:B0495F*
+ ID_OUI_FROM_DATABASE=OMRON HEALTHCARE Co., Ltd.
+
 OUI:B04C05*
  ID_OUI_FROM_DATABASE=Fresenius Medical Care Deutschland GmbH
 
@@ -66400,6 +67114,9 @@ OUI:B0C4E7*
 OUI:B0C554*
  ID_OUI_FROM_DATABASE=D-Link International
 
+OUI:B0C559*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:B0C69A*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
@@ -66439,6 +67156,12 @@ OUI:B0DA00*
 OUI:B0DF3A*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:B0E03C*
+ ID_OUI_FROM_DATABASE=TCT mobile ltd
+
+OUI:B0E2E5*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Tech.Co.,Ltd.
+
 OUI:B0E39D*
  ID_OUI_FROM_DATABASE=CAT SYSTEM CO.,LTD.
 
@@ -66478,6 +67201,9 @@ OUI:B40142*
 OUI:B40418*
  ID_OUI_FROM_DATABASE=Smartchip Integrated Inc.
 
+OUI:B40566*
+ ID_OUI_FROM_DATABASE=SP Best Corporation Co., LTD.
+
 OUI:B407F9*
  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS
 
@@ -66538,6 +67264,9 @@ OUI:B42C92*
 OUI:B42CBE*
  ID_OUI_FROM_DATABASE=Direct Payment Solutions Limited
 
+OUI:B43052*
+ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+
 OUI:B431B8*
  ID_OUI_FROM_DATABASE=Aviwest
 
@@ -66619,6 +67348,9 @@ OUI:B46698*
 OUI:B467E9*
  ID_OUI_FROM_DATABASE=Qingdao GoerTek Technology Co., Ltd.
 
+OUI:B47356*
+ ID_OUI_FROM_DATABASE=Hangzhou Treebear Networking Co., Ltd.
+
 OUI:B4749F*
  ID_OUI_FROM_DATABASE=askey computer corp
 
@@ -66691,6 +67423,9 @@ OUI:B4A82B*
 OUI:B4A95A*
  ID_OUI_FROM_DATABASE=Avaya, Inc
 
+OUI:B4A9FE*
+ ID_OUI_FROM_DATABASE=GHIA Technology (Shenzhen) LTD
+
 OUI:B4AA4D*
  ID_OUI_FROM_DATABASE=Ensequence, Inc.
 
@@ -66698,7 +67433,7 @@ OUI:B4AB2C*
  ID_OUI_FROM_DATABASE=MtM Technology Corporation
 
 OUI:B4AE6F*
- ID_OUI_FROM_DATABASE=Circle Reliance, Inc.
+ ID_OUI_FROM_DATABASE=Circle Reliance, Inc DBA Cranberry Networks
 
 OUI:B4B017*
  ID_OUI_FROM_DATABASE=Avaya, Inc
@@ -66728,7 +67463,7 @@ OUI:B4C44E*
  ID_OUI_FROM_DATABASE=VXL eTech Pvt Ltd
 
 OUI:B4C799*
- ID_OUI_FROM_DATABASE=Motorola Solutions Inc.
+ ID_OUI_FROM_DATABASE=Zebra Technologies Inc
 
 OUI:B4C810*
  ID_OUI_FROM_DATABASE=UMPI Elettronica
@@ -66775,6 +67510,9 @@ OUI:B4EEB4*
 OUI:B4EED4*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:B4EF39*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:B4F0AB*
  ID_OUI_FROM_DATABASE=Apple
 
@@ -66799,6 +67537,9 @@ OUI:B80415*
 OUI:B808CF*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:B8098A*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:B80B9D*
  ID_OUI_FROM_DATABASE=ROPEX Industrie-Elektronik GmbH
 
@@ -66886,9 +67627,15 @@ OUI:B84FD5*
 OUI:B85510*
  ID_OUI_FROM_DATABASE=Zioncom Electronics (Shenzhen) Ltd.
 
+OUI:B856BD*
+ ID_OUI_FROM_DATABASE=ITT LLC
+
 OUI:B85810*
  ID_OUI_FROM_DATABASE=NUMERA, INC.
 
+OUI:B85A73*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:B85AF7*
  ID_OUI_FROM_DATABASE=Ouya, Inc
 
@@ -66973,6 +67720,9 @@ OUI:B88D12*
 OUI:B88E3A*
  ID_OUI_FROM_DATABASE=Infinite Technologies JLT
 
+OUI:B88EC6*
+ ID_OUI_FROM_DATABASE=Stateless Networks
+
 OUI:B88F14*
  ID_OUI_FROM_DATABASE=Analytica GmbH
 
@@ -67132,6 +67882,9 @@ OUI:B8EE65*
 OUI:B8EE79*
  ID_OUI_FROM_DATABASE=YWire Technologies, Inc.
 
+OUI:B8F080*
+ ID_OUI_FROM_DATABASE=SPS, INC.
+
 OUI:B8F317*
  ID_OUI_FROM_DATABASE=iSun Smasher Communications Private Limited
 
@@ -67183,6 +67936,9 @@ OUI:BC125E*
 OUI:BC1401*
  ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
 
+OUI:BC1485*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:BC14EF*
  ID_OUI_FROM_DATABASE=ITON Technology Limited
 
@@ -67267,6 +68023,9 @@ OUI:BC4760*
 OUI:BC4B79*
  ID_OUI_FROM_DATABASE=SensingTek
 
+OUI:BC4CC4*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:BC4DFB*
  ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
 
@@ -67285,9 +68044,15 @@ OUI:BC52B4*
 OUI:BC52B7*
  ID_OUI_FROM_DATABASE=Apple
 
+OUI:BC54F9*
+ ID_OUI_FROM_DATABASE=Drogoo Technology Co., Ltd.
+
 OUI:BC5FF4*
  ID_OUI_FROM_DATABASE=ASRock Incorporation
 
+OUI:BC6010*
+ ID_OUI_FROM_DATABASE=Qingdao Hisense Communications Co.,Ltd
+
 OUI:BC629F*
  ID_OUI_FROM_DATABASE=Telenet Systems P. Ltd.
 
@@ -67312,6 +68077,9 @@ OUI:BC6A29*
 OUI:BC6B4D*
  ID_OUI_FROM_DATABASE=Alcatel-Lucent
 
+OUI:BC6E64*
+ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
+
 OUI:BC6E76*
  ID_OUI_FROM_DATABASE=Green Energy Options Ltd
 
@@ -67402,6 +68170,9 @@ OUI:BCB181*
 OUI:BCB1F3*
  ID_OUI_FROM_DATABASE=Samsung Electronics
 
+OUI:BCB308*
+ ID_OUI_FROM_DATABASE=HONGKONG RAGENTEK COMMUNICATION TECHNOLOGY CO.,LIMITED
+
 OUI:BCB852*
  ID_OUI_FROM_DATABASE=Cybera, Inc.
 
@@ -67441,6 +68212,9 @@ OUI:BCCD45*
 OUI:BCCFCC*
  ID_OUI_FROM_DATABASE=HTC Corporation
 
+OUI:BCD165*
+ ID_OUI_FROM_DATABASE=Cisco SPVTG
+
 OUI:BCD177*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
@@ -67459,12 +68233,18 @@ OUI:BCE09D*
 OUI:BCE59F*
  ID_OUI_FROM_DATABASE=WATERWORLD Technology Co.,LTD
 
+OUI:BCE767*
+ ID_OUI_FROM_DATABASE=Quanzhou  TDX Electronics Co., Ltd
+
 OUI:BCEA2B*
  ID_OUI_FROM_DATABASE=CityCom GmbH
 
 OUI:BCEAFA*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
+OUI:BCEC23*
+ ID_OUI_FROM_DATABASE=SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+
 OUI:BCEE7B*
  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
 
@@ -67501,6 +68281,9 @@ OUI:C0143D*
 OUI:C01885*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
+OUI:C01ADA*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:C01E9B*
  ID_OUI_FROM_DATABASE=Pixavi AS
 
@@ -67525,6 +68308,9 @@ OUI:C02BFC*
 OUI:C02C7A*
  ID_OUI_FROM_DATABASE=Shen Zhen Horn audio Co., Ltd.
 
+OUI:C0335E*
+ ID_OUI_FROM_DATABASE=Microsoft
+
 OUI:C034B4*
  ID_OUI_FROM_DATABASE=Gigastone Corporation
 
@@ -67579,6 +68365,9 @@ OUI:C04A00*
 OUI:C04DF7*
  ID_OUI_FROM_DATABASE=SERELEC
 
+OUI:C05627*
+ ID_OUI_FROM_DATABASE=Belkin International, Inc.
+
 OUI:C056E3*
  ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
 
@@ -67618,6 +68407,9 @@ OUI:C06C0F*
 OUI:C06C6D*
  ID_OUI_FROM_DATABASE=MagneMotion, Inc.
 
+OUI:C07009*
+ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+
 OUI:C07BBC*
  ID_OUI_FROM_DATABASE=Cisco
 
@@ -67708,6 +68500,9 @@ OUI:C0BAE6*
 OUI:C0BD42*
  ID_OUI_FROM_DATABASE=ZPA Smart Energy a.s.
 
+OUI:C0BDD1*
+ ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD.
+
 OUI:C0C1C0*
  ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC
 
@@ -67771,6 +68566,9 @@ OUI:C0F8DA*
 OUI:C0F991*
  ID_OUI_FROM_DATABASE=GME Standard Communications P/L
 
+OUI:C0FFD4*
+ ID_OUI_FROM_DATABASE=Netgear Inc
+
 OUI:C40006*
  ID_OUI_FROM_DATABASE=Lipi Data Systems Ltd.
 
@@ -67855,6 +68653,9 @@ OUI:C42C03*
 OUI:C4346B*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
+OUI:C4366C*
+ ID_OUI_FROM_DATABASE=LG Innotek
+
 OUI:C436DA*
  ID_OUI_FROM_DATABASE=Rusteletech Ltd.
 
@@ -67867,6 +68668,9 @@ OUI:C4393A*
 OUI:C43A9F*
  ID_OUI_FROM_DATABASE=Siconix Inc.
 
+OUI:C43ABE*
+ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
+
 OUI:C43C3C*
  ID_OUI_FROM_DATABASE=CYBELEC SA
 
@@ -67985,7 +68789,7 @@ OUI:C47D4F*
  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
 
 OUI:C47DCC*
- ID_OUI_FROM_DATABASE=Motorola Solutions Inc.
+ ID_OUI_FROM_DATABASE=Zebra Technologies Inc
 
 OUI:C47DFE*
  ID_OUI_FROM_DATABASE=A.N. Solutions GmbH
@@ -68005,9 +68809,15 @@ OUI:C48508*
 OUI:C488E5*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:C48E8F*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
 OUI:C4913A*
  ID_OUI_FROM_DATABASE=Shenzhen Sanland Electronic Co., ltd.
 
+OUI:C4924C*
+ ID_OUI_FROM_DATABASE=KEISOKUKI CENTER CO.,LTD.
+
 OUI:C49300*
  ID_OUI_FROM_DATABASE=8Devices
 
@@ -68125,6 +68935,9 @@ OUI:C802A6*
 OUI:C80718*
  ID_OUI_FROM_DATABASE=TDSi
 
+OUI:C808E9*
+ ID_OUI_FROM_DATABASE=LG Electronics
+
 OUI:C80AA9*
  ID_OUI_FROM_DATABASE=Quanta Computer Inc.
 
@@ -68311,6 +69124,9 @@ OUI:C8A70A*
 OUI:C8A729*
  ID_OUI_FROM_DATABASE=SYStronics Co., Ltd.
 
+OUI:C8A823*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:C8AA21*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -68383,6 +69199,9 @@ OUI:C8D5FE*
 OUI:C8D719*
  ID_OUI_FROM_DATABASE=Cisco Consumer Products, LLC
 
+OUI:C8D779*
+ ID_OUI_FROM_DATABASE=Qingdao Haier Telecom Co.,Ltd
+
 OUI:C8DDC9*
  ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
 
@@ -68890,6 +69709,9 @@ OUI:D05162*
 OUI:D052A8*
  ID_OUI_FROM_DATABASE=Physical Graph Corporation
 
+OUI:D05349*
+ ID_OUI_FROM_DATABASE=Liteon Technology Co., Ltd.
+
 OUI:D0542D*
  ID_OUI_FROM_DATABASE=Cambridge Industries(Group) Co.,Ltd.
 
@@ -68995,6 +69817,9 @@ OUI:D08CB5*
 OUI:D08CFF*
  ID_OUI_FROM_DATABASE=UPWIS AB
 
+OUI:D0929E*
+ ID_OUI_FROM_DATABASE=Microsoft Corporation
+
 OUI:D093F8*
  ID_OUI_FROM_DATABASE=Stonestreet One LLC
 
@@ -69016,6 +69841,12 @@ OUI:D0A0D6*
 OUI:D0A311*
  ID_OUI_FROM_DATABASE=Neuberger Gebäudeautomation GmbH
 
+OUI:D0A5A6*
+ ID_OUI_FROM_DATABASE=Cisco
+
+OUI:D0A637*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:D0AEEC*
  ID_OUI_FROM_DATABASE=Alpha Networks Inc.
 
@@ -69043,6 +69874,9 @@ OUI:D0BD01*
 OUI:D0BE2C*
  ID_OUI_FROM_DATABASE=CNSLink Co., Ltd.
 
+OUI:D0BF9C*
+ ID_OUI_FROM_DATABASE=Hewlett Packard
+
 OUI:D0C1B1*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -69148,6 +69982,12 @@ OUI:D4016D*
 OUI:D4024A*
  ID_OUI_FROM_DATABASE=Delphian Systems LLC
 
+OUI:D40598*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:D40B1A*
+ ID_OUI_FROM_DATABASE=HTC Corporation
+
 OUI:D40BB9*
  ID_OUI_FROM_DATABASE=Solid Semecs bv.
 
@@ -69179,7 +70019,7 @@ OUI:D41E35*
  ID_OUI_FROM_DATABASE=TOHO Electronics INC.
 
 OUI:D41F0C*
- ID_OUI_FROM_DATABASE=TVI Vision Oy
+ ID_OUI_FROM_DATABASE=JAI Oy
 
 OUI:D4206D*
  ID_OUI_FROM_DATABASE=HTC Corporation
@@ -69259,6 +70099,9 @@ OUI:D45297*
 OUI:D453AF*
  ID_OUI_FROM_DATABASE=VIGO System S.A.
 
+OUI:D45556*
+ ID_OUI_FROM_DATABASE=Fiber Mountain Inc.
+
 OUI:D45AB2*
  ID_OUI_FROM_DATABASE=Galleon Systems
 
@@ -69283,6 +70126,9 @@ OUI:D46761*
 OUI:D467E7*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Tech.Co.,Ltd.
 
+OUI:D4684D*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
 OUI:D46867*
  ID_OUI_FROM_DATABASE=Neoventus Design Group
 
@@ -69298,6 +70144,9 @@ OUI:D46CBF*
 OUI:D46CDA*
  ID_OUI_FROM_DATABASE=CSM GmbH
 
+OUI:D46D50*
+ ID_OUI_FROM_DATABASE=Cisco
+
 OUI:D46E5C*
  ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
 
@@ -69613,6 +70462,9 @@ OUI:D850E6*
 OUI:D8543A*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:D855A3*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:D857EF*
  ID_OUI_FROM_DATABASE=Samsung Electronics
 
@@ -69625,6 +70477,9 @@ OUI:D85D4C*
 OUI:D85D84*
  ID_OUI_FROM_DATABASE=CAx soft GmbH
 
+OUI:D85DE2*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
 OUI:D86194*
  ID_OUI_FROM_DATABASE=Objetivos y Sevicios de Valor Añadido
 
@@ -69655,6 +70510,9 @@ OUI:D86CE9*
 OUI:D87157*
  ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
 
+OUI:D87495*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:D87533*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
@@ -69685,9 +70543,15 @@ OUI:D88466*
 OUI:D88A3B*
  ID_OUI_FROM_DATABASE=UNIT-EM
 
+OUI:D88D5C*
+ ID_OUI_FROM_DATABASE=Elentec
+
 OUI:D890E8*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:D89341*
+ ID_OUI_FROM_DATABASE=General Electric Global Research
+
 OUI:D8952F*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -69880,6 +70744,9 @@ OUI:DC05ED*
 OUI:DC07C1*
  ID_OUI_FROM_DATABASE=HangZhou QiYang Technology Co.,Ltd.
 
+OUI:DC0914*
+ ID_OUI_FROM_DATABASE=Talk-A-Phone Co.
+
 OUI:DC0B1A*
  ID_OUI_FROM_DATABASE=ADB Broadband Italia
 
@@ -69976,6 +70843,9 @@ OUI:DC5726*
 OUI:DC5E36*
  ID_OUI_FROM_DATABASE=Paterson Technology
 
+OUI:DC60A1*
+ ID_OUI_FROM_DATABASE=Teledyne DALSA Professional Imaging
+
 OUI:DC647C*
  ID_OUI_FROM_DATABASE=C.R.S. iiMotion GmbH
 
@@ -70099,6 +70969,12 @@ OUI:DCDA4F*
 OUI:DCDECA*
  ID_OUI_FROM_DATABASE=Akyllor
 
+OUI:DCE026*
+ ID_OUI_FROM_DATABASE=Patrol Tag, Inc
+
+OUI:DCE1AD*
+ ID_OUI_FROM_DATABASE=Shenzhen Wintop Photoelectric Technology Co., Ltd
+
 OUI:DCE2AC*
  ID_OUI_FROM_DATABASE=Lumens Digital Optics Inc.
 
@@ -70150,6 +71026,9 @@ OUI:E0143E*
 OUI:E01877*
  ID_OUI_FROM_DATABASE=Fujitsu Limited
 
+OUI:E0191D*
+ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+
 OUI:E01C41*
  ID_OUI_FROM_DATABASE=Aerohive Networks Inc.
 
@@ -70282,9 +71161,15 @@ OUI:E087B1*
 OUI:E0885D*
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc
 
+OUI:E0899D*
+ ID_OUI_FROM_DATABASE=Cisco
+
 OUI:E08A7E*
  ID_OUI_FROM_DATABASE=Exponent
 
+OUI:E08E3C*
+ ID_OUI_FROM_DATABASE=Aztech Electronics Pte Ltd
+
 OUI:E08FEC*
  ID_OUI_FROM_DATABASE=REPOTEC CO., LTD.
 
@@ -70306,6 +71191,9 @@ OUI:E09796*
 OUI:E097F2*
  ID_OUI_FROM_DATABASE=Atomax Inc.
 
+OUI:E09971*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:E09D31*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -70408,6 +71296,9 @@ OUI:E0CF2D*
 OUI:E0D10A*
  ID_OUI_FROM_DATABASE=Katoudenkikougyousyo co ltd
 
+OUI:E0D173*
+ ID_OUI_FROM_DATABASE=Cisco
+
 OUI:E0D1E6*
  ID_OUI_FROM_DATABASE=Aliph dba Jawbone
 
@@ -70474,6 +71365,9 @@ OUI:E0F9BE*
 OUI:E0FAEC*
  ID_OUI_FROM_DATABASE=Platan sp. z o.o. sp. k.
 
+OUI:E0FFF7*
+ ID_OUI_FROM_DATABASE=Softiron Inc.
+
 OUI:E40439*
  ID_OUI_FROM_DATABASE=TomTom Software Ltd
 
@@ -70576,6 +71470,9 @@ OUI:E45614*
 OUI:E457A8*
  ID_OUI_FROM_DATABASE=Stuart Manufacturing, Inc.
 
+OUI:E458E7*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:E45D52*
  ID_OUI_FROM_DATABASE=Avaya, Inc
 
@@ -70588,6 +71485,9 @@ OUI:E467BA*
 OUI:E468A3*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:E4695A*
+ ID_OUI_FROM_DATABASE=Dictum Health, Inc.
+
 OUI:E46C21*
  ID_OUI_FROM_DATABASE=messMa GmbH
 
@@ -70624,6 +71524,9 @@ OUI:E481B3*
 OUI:E48399*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:E48501*
+ ID_OUI_FROM_DATABASE=Geberit International AG
+
 OUI:E48AD5*
  ID_OUI_FROM_DATABASE=RF WINDOW CO., LTD.
 
@@ -70738,9 +71641,15 @@ OUI:E4F7A1*
 OUI:E4F8EF*
  ID_OUI_FROM_DATABASE=Samsung Elec Co.,Ltd
 
+OUI:E4F939*
+ ID_OUI_FROM_DATABASE=Minxon Hotel Technology INC.
+
 OUI:E4FA1D*
  ID_OUI_FROM_DATABASE=PAD Peripheral Advanced Design Inc.
 
+OUI:E4FED9*
+ ID_OUI_FROM_DATABASE=EDMI Europe Ltd
+
 OUI:E4FFDD*
  ID_OUI_FROM_DATABASE=ELECTRON INDIA
 
@@ -70786,6 +71695,9 @@ OUI:E81324*
 OUI:E8150E*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
+OUI:E8162B*
+ ID_OUI_FROM_DATABASE=IDEO Security Co., Ltd.
+
 OUI:E817FC*
  ID_OUI_FROM_DATABASE=NIFTY Corporation
 
@@ -70834,6 +71746,9 @@ OUI:E840F2*
 OUI:E843B6*
  ID_OUI_FROM_DATABASE=QNAP Systems, Inc.
 
+OUI:E8447E*
+ ID_OUI_FROM_DATABASE=Bitdefender SRL
+
 OUI:E8481F*
  ID_OUI_FROM_DATABASE=Advanced Automotive Antennas
 
@@ -70897,6 +71812,9 @@ OUI:E86D6E*
 OUI:E8718D*
  ID_OUI_FROM_DATABASE=Elsys Equipamentos Eletronicos Ltda
 
+OUI:E874E6*
+ ID_OUI_FROM_DATABASE=ADB BROADBAND ITALIA
+
 OUI:E8757F*
  ID_OUI_FROM_DATABASE=FIRS Technologies(Shenzhen) Co., Ltd
 
@@ -70993,6 +71911,9 @@ OUI:E8C229*
 OUI:E8C320*
  ID_OUI_FROM_DATABASE=Austco Communication Systems Pty Ltd
 
+OUI:E8C74F*
+ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+
 OUI:E8CBA1*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
@@ -71149,6 +72070,9 @@ OUI:EC3BF0*
 OUI:EC3C5A*
  ID_OUI_FROM_DATABASE=SHEN ZHEN HENG SHENG HUI DIGITAL TECHNOLOGY CO.,LTD
 
+OUI:EC3C88*
+ ID_OUI_FROM_DATABASE=MCNEX Co.,Ltd.
+
 OUI:EC3E09*
  ID_OUI_FROM_DATABASE=PERFORMANCE DESIGNED PRODUCTS, LLC
 
@@ -71209,6 +72133,9 @@ OUI:EC6C9F*
 OUI:EC71DB*
  ID_OUI_FROM_DATABASE=Shenzhen Baichuan Digital Technology Co., Ltd.
 
+OUI:EC74BA*
+ ID_OUI_FROM_DATABASE=Hirschmann Automation and Control GmbH
+
 OUI:EC7C74*
  ID_OUI_FROM_DATABASE=Justone Technologies Co., Ltd.
 
@@ -71227,6 +72154,9 @@ OUI:EC852F*
 OUI:EC888F*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO., LTD.
 
+OUI:EC8892*
+ ID_OUI_FROM_DATABASE=Motorola Mobility LLC
+
 OUI:EC89F5*
  ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
 
@@ -71269,12 +72199,18 @@ OUI:ECA86B*
 OUI:ECB106*
  ID_OUI_FROM_DATABASE=Acuro Networks, Inc
 
+OUI:ECB1D7*
+ ID_OUI_FROM_DATABASE=Hewlett Packard
+
 OUI:ECB541*
  ID_OUI_FROM_DATABASE=SHINANO E and E Co.Ltd.
 
 OUI:ECB907*
  ID_OUI_FROM_DATABASE=CloudGenix Inc
 
+OUI:ECBAFE*
+ ID_OUI_FROM_DATABASE=GIROPTIC
+
 OUI:ECBBAE*
  ID_OUI_FROM_DATABASE=Digivoice Tecnologia em Eletronica Ltda
 
@@ -71320,6 +72256,9 @@ OUI:ECE09B*
 OUI:ECE1A9*
  ID_OUI_FROM_DATABASE=Cisco
 
+OUI:ECE2FD*
+ ID_OUI_FROM_DATABASE=SKG Electric Group(Thailand) Co., Ltd.
+
 OUI:ECE512*
  ID_OUI_FROM_DATABASE=tado GmbH
 
@@ -71392,6 +72331,9 @@ OUI:F01C13*
 OUI:F01C2D*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
+OUI:F01E34*
+ ID_OUI_FROM_DATABASE=ORICO Technologies Co., Ltd
+
 OUI:F01FAF*
  ID_OUI_FROM_DATABASE=Dell Inc
 
@@ -71407,6 +72349,9 @@ OUI:F02405*
 OUI:F02408*
  ID_OUI_FROM_DATABASE=Talaris (Sweden) AB
 
+OUI:F02475*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:F02572*
  ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
 
@@ -71422,6 +72367,9 @@ OUI:F02765*
 OUI:F02929*
  ID_OUI_FROM_DATABASE=Cisco
 
+OUI:F02A23*
+ ID_OUI_FROM_DATABASE=Creative Next Design
+
 OUI:F02A61*
  ID_OUI_FROM_DATABASE=Waldo Networks, Inc.
 
@@ -71509,6 +72457,9 @@ OUI:F07765*
 OUI:F077D0*
  ID_OUI_FROM_DATABASE=Xcellen
 
+OUI:F07959*
+ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+
 OUI:F07BCB*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
@@ -71554,6 +72505,9 @@ OUI:F0933A*
 OUI:F093C5*
  ID_OUI_FROM_DATABASE=Garland Technology
 
+OUI:F099BF*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:F09CBB*
  ID_OUI_FROM_DATABASE=RaonThink Inc.
 
@@ -71575,6 +72529,9 @@ OUI:F0AD4E*
 OUI:F0AE51*
  ID_OUI_FROM_DATABASE=Xi3 Corp
 
+OUI:F0B052*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
 OUI:F0B479*
  ID_OUI_FROM_DATABASE=Apple
 
@@ -71626,6 +72583,9 @@ OUI:F0DA7C*
 OUI:F0DB30*
  ID_OUI_FROM_DATABASE=Yottabyte
 
+OUI:F0DBE2*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:F0DBF8*
  ID_OUI_FROM_DATABASE=Apple
 
@@ -71701,6 +72661,9 @@ OUI:F0FE6B*
 OUI:F40321*
  ID_OUI_FROM_DATABASE=BeNeXt B.V.
 
+OUI:F4032F*
+ ID_OUI_FROM_DATABASE=Reduxio Systems
+
 OUI:F4044C*
  ID_OUI_FROM_DATABASE=ValenceTech Limited
 
@@ -71755,6 +72718,12 @@ OUI:F42853*
 OUI:F42896*
  ID_OUI_FROM_DATABASE=SPECTO PAINEIS ELETRONICOS LTDA
 
+OUI:F42981*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
+OUI:F42C56*
+ ID_OUI_FROM_DATABASE=SENOR TECH CO LTD
+
 OUI:F436E1*
  ID_OUI_FROM_DATABASE=Abilis Systems SARL
 
@@ -71830,6 +72799,9 @@ OUI:F4600D*
 OUI:F46349*
  ID_OUI_FROM_DATABASE=Diffon Corporation
 
+OUI:F4645D*
+ ID_OUI_FROM_DATABASE=Toshiba
+
 OUI:F46ABC*
  ID_OUI_FROM_DATABASE=Adonit Corp. Ltd.
 
@@ -72013,9 +72985,15 @@ OUI:F4FD2B*
 OUI:F80113*
  ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
 
+OUI:F80278*
+ ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY  - Please see MAM public listing for more information.
+
 OUI:F80332*
  ID_OUI_FROM_DATABASE=Khomp
 
+OUI:F8042E*
+ ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD.
+
 OUI:F8051C*
  ID_OUI_FROM_DATABASE=DRS Imaging and Targeting Solutions
 
@@ -72049,6 +73027,9 @@ OUI:F81547*
 OUI:F81654*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:F81897*
+ ID_OUI_FROM_DATABASE=2Wire
+
 OUI:F81A67*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO., LTD.
 
@@ -72187,6 +73168,9 @@ OUI:F87394*
 OUI:F8769B*
  ID_OUI_FROM_DATABASE=Neopis Co., Ltd.
 
+OUI:F87AEF*
+ ID_OUI_FROM_DATABASE=Rosonix Technology, Inc.
+
 OUI:F87B62*
  ID_OUI_FROM_DATABASE=FASTWEL INTERNATIONAL CO., LTD. Taiwan Branch
 
@@ -72286,9 +73270,15 @@ OUI:F8C091*
 OUI:F8C288*
  ID_OUI_FROM_DATABASE=Cisco
 
+OUI:F8C397*
+ ID_OUI_FROM_DATABASE=NZXT Corp. Ltd.
+
 OUI:F8C678*
  ID_OUI_FROM_DATABASE=Carefusion
 
+OUI:F8C96C*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Tech.Co.,Ltd.
+
 OUI:F8D0AC*
  ID_OUI_FROM_DATABASE=Sony Computer Entertainment Inc.
 
@@ -72416,7 +73406,7 @@ OUI:FC09F6*
  ID_OUI_FROM_DATABASE=GUANGDONG TONZE ELECTRIC CO.,LTD
 
 OUI:FC0A81*
- ID_OUI_FROM_DATABASE=Motorola Solutions Inc.
+ ID_OUI_FROM_DATABASE=Zebra Technologies Inc
 
 OUI:FC0FE6*
  ID_OUI_FROM_DATABASE=Sony Computer Entertainment Inc.
@@ -72484,12 +73474,18 @@ OUI:FC2E2D*
 OUI:FC2F40*
  ID_OUI_FROM_DATABASE=Calxeda, Inc.
 
+OUI:FC3288*
+ ID_OUI_FROM_DATABASE=CELOT Wireless Co., Ltd
+
 OUI:FC3598*
  ID_OUI_FROM_DATABASE=Favite Inc.
 
 OUI:FC35E6*
  ID_OUI_FROM_DATABASE=Visteon corp
 
+OUI:FC3D93*
+ ID_OUI_FROM_DATABASE=LONGCHEER TELECOMMUNICATION LIMITED
+
 OUI:FC3FAB*
  ID_OUI_FROM_DATABASE=Henan Lanxin Technology Co., Ltd
 
@@ -72619,9 +73615,18 @@ OUI:FCAD0F*
 OUI:FCAF6A*
  ID_OUI_FROM_DATABASE=Conemtech AB
 
+OUI:FCAFAC*
+ ID_OUI_FROM_DATABASE=Panasonic System LSI
+
 OUI:FCB0C4*
  ID_OUI_FROM_DATABASE=Shanghai DareGlobal Technologies Co., Ltd
 
+OUI:FCB4E6*
+ ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP.
+
+OUI:FCB698*
+ ID_OUI_FROM_DATABASE=Cambridge Industries(Group) Co.,Ltd.
+
 OUI:FCBBA1*
  ID_OUI_FROM_DATABASE=Shenzhen Minicreate Technology Co.,Ltd
 
@@ -72664,6 +73669,9 @@ OUI:FCDB96*
 OUI:FCDBB3*
  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
 
+OUI:FCDC4A*
+ ID_OUI_FROM_DATABASE=G-Wearables Corp.
+
 OUI:FCDD55*
  ID_OUI_FROM_DATABASE=Shenzhen WeWins wireless Co.,Ltd
 
@@ -72685,6 +73693,9 @@ OUI:FCE557*
 OUI:FCE892*
  ID_OUI_FROM_DATABASE=Hangzhou Lancable Technology Co.,Ltd
 
+OUI:FCE998*
+ ID_OUI_FROM_DATABASE=Apple
+
 OUI:FCEDB9*
  ID_OUI_FROM_DATABASE=Arrayent
 
diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb
index 1b98b1d..df9decc 100644
--- a/hwdb/20-pci-vendor-model.hwdb
+++ b/hwdb/20-pci-vendor-model.hwdb
@@ -689,6 +689,9 @@ pci:v00001000d00000021sv00004C53sd00001310*
 pci:v00001000d0000002F*
  ID_MODEL_FROM_DATABASE=MegaRAID SAS 2208 IOV [Thunderbolt]
 
+pci:v00001000d0000002Fsv00001028sd00001F39*
+ ID_MODEL_FROM_DATABASE=MegaRAID SAS 2208 IOV [Thunderbolt] (SPERC8-e)
+
 pci:v00001000d0000002Fsv00001028sd00001F3E*
  ID_MODEL_FROM_DATABASE=MegaRAID SAS 2208 IOV [Thunderbolt] (SPERC 8)
 
@@ -4238,9 +4241,15 @@ pci:v00001002d00006605*
 pci:v00001002d00006606*
  ID_MODEL_FROM_DATABASE=Mars XTX [Radeon HD 8790M]
 
+pci:v00001002d00006606sv00001028sd00000684*
+ ID_MODEL_FROM_DATABASE=Mars XTX [Radeon HD 8790M] (FirePro W4170M)
+
 pci:v00001002d00006607*
  ID_MODEL_FROM_DATABASE=Mars LE [Radeon HD 8530M / R5 M240]
 
+pci:v00001002d00006608*
+ ID_MODEL_FROM_DATABASE=Oland GL [FirePro W2100]
+
 pci:v00001002d00006610*
  ID_MODEL_FROM_DATABASE=Oland XT [Radeon HD 8670 / R7 250]
 
@@ -5924,6 +5933,9 @@ pci:v00001002d0000679Asv00001002sd00003000*
 pci:v00001002d0000679Asv00001462sd00003000*
  ID_MODEL_FROM_DATABASE=Tahiti PRO [Radeon HD 7950/8950 OEM / R9 280] (Radeon HD 8950 OEM)
 
+pci:v00001002d0000679Asv0000174Bsd0000A003*
+ ID_MODEL_FROM_DATABASE=Tahiti PRO [Radeon HD 7950/8950 OEM / R9 280] (Radeon R9 280)
+
 pci:v00001002d0000679B*
  ID_MODEL_FROM_DATABASE=Malta [Radeon HD 7990]
 
@@ -6077,6 +6089,18 @@ pci:v00001002d00006823*
 pci:v00001002d00006825*
  ID_MODEL_FROM_DATABASE=Heathrow XT [Radeon HD 7870M]
 
+pci:v00001002d00006825sv00001028sd0000053F*
+ ID_MODEL_FROM_DATABASE=Heathrow XT [Radeon HD 7870M] (FirePro M6000)
+
+pci:v00001002d00006825sv00001028sd000005CD*
+ ID_MODEL_FROM_DATABASE=Heathrow XT [Radeon HD 7870M] (FirePro M6000)
+
+pci:v00001002d00006825sv00001028sd000015CD*
+ ID_MODEL_FROM_DATABASE=Heathrow XT [Radeon HD 7870M] (FirePro M6000)
+
+pci:v00001002d00006825sv0000103Csd0000176C*
+ ID_MODEL_FROM_DATABASE=Heathrow XT [Radeon HD 7870M] (FirePro M6000)
+
 pci:v00001002d00006825sv00008086sd00002111*
  ID_MODEL_FROM_DATABASE=Heathrow XT [Radeon HD 7870M] (Chelsea PRO)
 
@@ -6098,6 +6122,9 @@ pci:v00001002d0000682A*
 pci:v00001002d0000682B*
  ID_MODEL_FROM_DATABASE=Venus LE [Radeon HD 8830M]
 
+pci:v00001002d0000682C*
+ ID_MODEL_FROM_DATABASE=Cape Verde GL [FirePro W4100]
+
 pci:v00001002d0000682D*
  ID_MODEL_FROM_DATABASE=Chelsea XT GL [FirePro M4000]
 
@@ -6233,6 +6260,9 @@ pci:v00001002d00006840sv00001028sd000005B9*
 pci:v00001002d00006840sv00001028sd000005BB*
  ID_MODEL_FROM_DATABASE=Thames [Radeon HD 7500M/7600M Series] (Radeon HD 7670M)
 
+pci:v00001002d00006840sv0000103Csd00001789*
+ ID_MODEL_FROM_DATABASE=Thames [Radeon HD 7500M/7600M Series] (FirePro M2000)
+
 pci:v00001002d00006840sv0000103Csd000017F1*
  ID_MODEL_FROM_DATABASE=Thames [Radeon HD 7500M/7600M Series] (Radeon HD 7570M)
 
@@ -7874,6 +7904,15 @@ pci:v00001002d00006900*
 pci:v00001002d00006900sv00001028sd00000640*
  ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265] (Radeon R7 M265)
 
+pci:v00001002d00006900sv0000103Csd00002269*
+ ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265] (Radeon R7 M260)
+
+pci:v00001002d00006900sv0000103Csd000022C8*
+ ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265] (Radeon R7 M260)
+
+pci:v00001002d00006900sv00001179sd0000F903*
+ ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265] (Radeon R7 M260)
+
 pci:v00001002d00006900sv00001179sd0000F934*
  ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265] (Radeon R7 M260)
 
@@ -7887,7 +7926,7 @@ pci:v00001002d00006921*
  ID_MODEL_FROM_DATABASE=Amethyst XT [Radeon R9 M295X]
 
 pci:v00001002d0000692B*
- ID_MODEL_FROM_DATABASE=Tonga XT GL [FirePro W8100]
+ ID_MODEL_FROM_DATABASE=Tonga PRO GL [FirePro W7100]
 
 pci:v00001002d0000692F*
  ID_MODEL_FROM_DATABASE=Tonga XT GL [FirePro W8100]
@@ -8807,6 +8846,9 @@ pci:v00001002d000095C9*
 pci:v00001002d000095CC*
  ID_MODEL_FROM_DATABASE=RV620 GL [FirePro V3700]
 
+pci:v00001002d000095CD*
+ ID_MODEL_FROM_DATABASE=RV620 [FirePro 2450]
+
 pci:v00001002d000095CF*
  ID_MODEL_FROM_DATABASE=RV620 GL [FirePro 2260]
 
@@ -9006,13 +9048,13 @@ pci:v00001002d00009853*
  ID_MODEL_FROM_DATABASE=Mullins [Radeon R2 Graphics]
 
 pci:v00001002d00009854*
- ID_MODEL_FROM_DATABASE=Mullins [Radeon R3 Graphics]
+ ID_MODEL_FROM_DATABASE=Mullins [Radeon R3E Graphics]
 
 pci:v00001002d00009855*
  ID_MODEL_FROM_DATABASE=Mullins [Radeon R6 Graphics]
 
 pci:v00001002d00009856*
- ID_MODEL_FROM_DATABASE=Mullins [Radeon R2 Graphics]
+ ID_MODEL_FROM_DATABASE=Mullins [Radeon R1E/R2E Graphics]
 
 pci:v00001002d00009857*
  ID_MODEL_FROM_DATABASE=Mullins [Radeon APU XX-2200M with R2 Graphics]
@@ -13923,25 +13965,25 @@ pci:v0000103Cd00003239*
  ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers
 
 pci:v0000103Cd00003239sv0000103Csd000021BD*
- ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (Smart Array)
+ ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (P244br)
 
 pci:v0000103Cd00003239sv0000103Csd000021BE*
  ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (Smart Array)
 
 pci:v0000103Cd00003239sv0000103Csd000021BF*
- ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (Smart Array)
+ ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (H240ar)
 
 pci:v0000103Cd00003239sv0000103Csd000021C0*
- ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (Smart Array)
+ ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (P440ar)
 
 pci:v0000103Cd00003239sv0000103Csd000021C1*
  ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (Smart Array)
 
 pci:v0000103Cd00003239sv0000103Csd000021C2*
- ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (Smart Array)
+ ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (P440)
 
 pci:v0000103Cd00003239sv0000103Csd000021C3*
- ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (Smart Array)
+ ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (P441)
 
 pci:v0000103Cd00003239sv0000103Csd000021C4*
  ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (Smart Array)
@@ -13950,13 +13992,13 @@ pci:v0000103Cd00003239sv0000103Csd000021C5*
  ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (Smart Array)
 
 pci:v0000103Cd00003239sv0000103Csd000021C6*
- ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (Smart Array)
+ ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (H244br)
 
 pci:v0000103Cd00003239sv0000103Csd000021C7*
- ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (Smart Array)
+ ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (H240)
 
 pci:v0000103Cd00003239sv0000103Csd000021C8*
- ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (Smart Array)
+ ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (H241)
 
 pci:v0000103Cd00003239sv0000103Csd000021C9*
  ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (Smart Array)
@@ -13965,7 +14007,7 @@ pci:v0000103Cd00003239sv0000103Csd000021CA*
  ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (Smart Array)
 
 pci:v0000103Cd00003239sv0000103Csd000021CB*
- ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (Smart Array)
+ ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (P840)
 
 pci:v0000103Cd00003239sv0000103Csd000021CC*
  ID_MODEL_FROM_DATABASE=Smart Array Gen9 Controllers (Smart Array)
@@ -16868,6 +16910,9 @@ pci:v00001077d00008001*
 pci:v00001077d00008020*
  ID_MODEL_FROM_DATABASE=cLOM8214 1/10GbE Controller
 
+pci:v00001077d00008020sv00001028sd00001F64*
+ ID_MODEL_FROM_DATABASE=cLOM8214 1/10GbE Controller (QMD8262-k 10G DP bNDC KR)
+
 pci:v00001077d00008020sv0000103Csd00003346*
  ID_MODEL_FROM_DATABASE=cLOM8214 1/10GbE Controller (CN1000Q Dual Port Converged Network Adapter)
 
@@ -27659,6 +27704,12 @@ pci:v000010DEd00000BEBsv00001462sd00002322*
 pci:v000010DEd00000BEE*
  ID_MODEL_FROM_DATABASE=GF116 High Definition Audio Controller
 
+pci:v000010DEd00000BF0*
+ ID_MODEL_FROM_DATABASE=Tegra2 PCIe x4 Bridge
+
+pci:v000010DEd00000BF1*
+ ID_MODEL_FROM_DATABASE=Tegra2 PCIe x2 Bridge
+
 pci:v000010DEd00000CA0*
  ID_MODEL_FROM_DATABASE=GT215 [GeForce GT 330]
 
@@ -27938,6 +27989,9 @@ pci:v000010DEd00000E0B*
 pci:v000010DEd00000E0C*
  ID_MODEL_FROM_DATABASE=GF114 HDMI Audio Controller
 
+pci:v000010DEd00000E0F*
+ ID_MODEL_FROM_DATABASE=GK208 HDMI/DP Audio Controller
+
 pci:v000010DEd00000E1A*
  ID_MODEL_FROM_DATABASE=GK110 HDMI Audio
 
@@ -27950,6 +28004,12 @@ pci:v000010DEd00000E1Bsv0000103Csd0000197B*
 pci:v000010DEd00000E1Bsv00001043sd00008428*
  ID_MODEL_FROM_DATABASE=GK107 HDMI Audio Controller (GTX650-DC-1GD5)
 
+pci:v000010DEd00000E1C*
+ ID_MODEL_FROM_DATABASE=Tegra3+ PCIe x4 Bridge
+
+pci:v000010DEd00000E1D*
+ ID_MODEL_FROM_DATABASE=Tegra3+ PCIe x2 Bridge
+
 pci:v000010DEd00000E22*
  ID_MODEL_FROM_DATABASE=GF104 [GeForce GTX 460]
 
@@ -27983,6 +28043,9 @@ pci:v000010DEd00000F01*
 pci:v000010DEd00000F02*
  ID_MODEL_FROM_DATABASE=GF108 [GeForce GT 730]
 
+pci:v000010DEd00000FBB*
+ ID_MODEL_FROM_DATABASE=GM204 High Definition Audio Controller
+
 pci:v000010DEd00000FC0*
  ID_MODEL_FROM_DATABASE=GK107 [GeForce GT 640 OEM]
 
@@ -28242,7 +28305,7 @@ pci:v000010DEd0000102A*
  ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K40t]
 
 pci:v000010DEd0000102D*
- ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K80]
+ ID_MODEL_FROM_DATABASE=GK210GL [Tesla K80]
 
 pci:v000010DEd0000102E*
  ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K40d]
@@ -29552,6 +29615,9 @@ pci:v000010DEd00001286*
 pci:v000010DEd00001287*
  ID_MODEL_FROM_DATABASE=GK208 [GeForce GT 730]
 
+pci:v000010DEd00001288*
+ ID_MODEL_FROM_DATABASE=GK208 [GeForce GT 720]
+
 pci:v000010DEd00001290*
  ID_MODEL_FROM_DATABASE=GK208M [GeForce GT 730M]
 
@@ -29681,6 +29747,30 @@ pci:v000010DEd000013BB*
 pci:v000010DEd000013BD*
  ID_MODEL_FROM_DATABASE=GM107GL [Tesla M40]
 
+pci:v000010DEd000013C0*
+ ID_MODEL_FROM_DATABASE=GM204 [GeForce GTX 980]
+
+pci:v000010DEd000013C0sv00001043sd00008504*
+ ID_MODEL_FROM_DATABASE=GM204 [GeForce GTX 980] (GTX980-4GD5)
+
+pci:v000010DEd000013C1*
+ ID_MODEL_FROM_DATABASE=GM204
+
+pci:v000010DEd000013C2*
+ ID_MODEL_FROM_DATABASE=GM204 [GeForce GTX 970]
+
+pci:v000010DEd000013C3*
+ ID_MODEL_FROM_DATABASE=GM204
+
+pci:v000010DEd000013D7*
+ ID_MODEL_FROM_DATABASE=GM204M [GeForce GTX 980M]
+
+pci:v000010DEd000013D8*
+ ID_MODEL_FROM_DATABASE=GM204M [GeForce GTX 970M]
+
+pci:v000010DEd000013D9*
+ ID_MODEL_FROM_DATABASE=GM204M [GeForce GTX 965M]
+
 pci:v000010DF*
  ID_VENDOR_FROM_DATABASE=Emulex Corporation
 
@@ -30062,6 +30152,9 @@ pci:v000010E8d00008407*
 pci:v000010E8d00008851*
  ID_MODEL_FROM_DATABASE=S5933 on Innes Corp FM Radio Capture card
 
+pci:v000010E8d0000E004*
+ ID_MODEL_FROM_DATABASE=X-Gene PCIe bridge
+
 pci:v000010E9*
  ID_VENDOR_FROM_DATABASE=Alps Electric Co., Ltd.
 
@@ -31049,6 +31142,9 @@ pci:v00001103d00000640*
 pci:v00001103d00000644*
  ID_MODEL_FROM_DATABASE=RocketRAID 644 4 Port SATA-III Controller (eSATA)
 
+pci:v00001103d00000645*
+ ID_MODEL_FROM_DATABASE=RocketRAID 644L 4 Port SATA-III Controller (eSATA)
+
 pci:v00001103d00001720*
  ID_MODEL_FROM_DATABASE=RocketRAID 1720 (2x SATA II RAID Controller)
 
@@ -34622,6 +34718,33 @@ pci:v00001137d00000023*
 pci:v00001137d00000040*
  ID_MODEL_FROM_DATABASE=VIC PCIe Upstream Port
 
+pci:v00001137d00000040sv00001137sd0000004F*
+ ID_MODEL_FROM_DATABASE=VIC PCIe Upstream Port (VIC 1280 Dual 40Gb Mezzanine)
+
+pci:v00001137d00000040sv00001137sd00000084*
+ ID_MODEL_FROM_DATABASE=VIC PCIe Upstream Port (VIC 1240 Dual 40Gb MLOM)
+
+pci:v00001137d00000040sv00001137sd00000085*
+ ID_MODEL_FROM_DATABASE=VIC PCIe Upstream Port (VIC 1225 Dual 10Gb SFP+ PCIe)
+
+pci:v00001137d00000040sv00001137sd000000CD*
+ ID_MODEL_FROM_DATABASE=VIC PCIe Upstream Port (VIC 1285 Dual 40Gb QSFP+ PCIe)
+
+pci:v00001137d00000040sv00001137sd000000CE*
+ ID_MODEL_FROM_DATABASE=VIC PCIe Upstream Port (VIC 1225T Dual 10GBaseT PCIe)
+
+pci:v00001137d00000040sv00001137sd0000012A*
+ ID_MODEL_FROM_DATABASE=VIC PCIe Upstream Port (VIC M4308 Dual 40Gb)
+
+pci:v00001137d00000040sv00001137sd0000012C*
+ ID_MODEL_FROM_DATABASE=VIC PCIe Upstream Port (VIC 1340 Dual 40Gb MLOM)
+
+pci:v00001137d00000040sv00001137sd0000012E*
+ ID_MODEL_FROM_DATABASE=VIC PCIe Upstream Port (VIC 1227 Dual 10Gb SFP+ PCIe)
+
+pci:v00001137d00000040sv00001137sd00000137*
+ ID_MODEL_FROM_DATABASE=VIC PCIe Upstream Port (VIC 1380 Dual 40Gb Mezzanine)
+
 pci:v00001137d00000041*
  ID_MODEL_FROM_DATABASE=VIC PCIe Downstream Port
 
@@ -34640,6 +34763,9 @@ pci:v00001137d00000042sv00001137sd000000CD*
 pci:v00001137d00000042sv00001137sd000000CE*
  ID_MODEL_FROM_DATABASE=VIC Management Controller (VIC 1225T PCIe Management Controller)
 
+pci:v00001137d00000042sv00001137sd0000012E*
+ ID_MODEL_FROM_DATABASE=VIC Management Controller (VIC 1227 PCIe Management Controller)
+
 pci:v00001137d00000043*
  ID_MODEL_FROM_DATABASE=VIC Ethernet NIC
 
@@ -34664,6 +34790,18 @@ pci:v00001137d00000043sv00001137sd000000CD*
 pci:v00001137d00000043sv00001137sd000000CE*
  ID_MODEL_FROM_DATABASE=VIC Ethernet NIC (VIC 1225T PCIe Ethernet NIC)
 
+pci:v00001137d00000043sv00001137sd0000012A*
+ ID_MODEL_FROM_DATABASE=VIC Ethernet NIC (VIC M4308 Ethernet NIC)
+
+pci:v00001137d00000043sv00001137sd0000012C*
+ ID_MODEL_FROM_DATABASE=VIC Ethernet NIC (VIC 1340 MLOM Ethernet NIC)
+
+pci:v00001137d00000043sv00001137sd0000012E*
+ ID_MODEL_FROM_DATABASE=VIC Ethernet NIC (VIC 1227 PCIe Ethernet NIC)
+
+pci:v00001137d00000043sv00001137sd00000137*
+ ID_MODEL_FROM_DATABASE=VIC Ethernet NIC (VIC 1380 Mezzanine Ethernet NIC)
+
 pci:v00001137d00000044*
  ID_MODEL_FROM_DATABASE=VIC Ethernet NIC Dynamic
 
@@ -34688,6 +34826,18 @@ pci:v00001137d00000044sv00001137sd000000CD*
 pci:v00001137d00000044sv00001137sd000000CE*
  ID_MODEL_FROM_DATABASE=VIC Ethernet NIC Dynamic (VIC 1225T PCIe Ethernet NIC Dynamic)
 
+pci:v00001137d00000044sv00001137sd0000012A*
+ ID_MODEL_FROM_DATABASE=VIC Ethernet NIC Dynamic (VIC M4308 Ethernet NIC Dynamic)
+
+pci:v00001137d00000044sv00001137sd0000012C*
+ ID_MODEL_FROM_DATABASE=VIC Ethernet NIC Dynamic (VIC 1340 MLOM Ethernet NIC Dynamic)
+
+pci:v00001137d00000044sv00001137sd0000012E*
+ ID_MODEL_FROM_DATABASE=VIC Ethernet NIC Dynamic (VIC 1227 PCIe Ethernet NIC Dynamic)
+
+pci:v00001137d00000044sv00001137sd00000137*
+ ID_MODEL_FROM_DATABASE=VIC Ethernet NIC Dynamic (VIC 1380 Mezzanine Ethernet NIC Dynamic)
+
 pci:v00001137d00000045*
  ID_MODEL_FROM_DATABASE=VIC FCoE HBA
 
@@ -34712,15 +34862,72 @@ pci:v00001137d00000045sv00001137sd000000CD*
 pci:v00001137d00000045sv00001137sd000000CE*
  ID_MODEL_FROM_DATABASE=VIC FCoE HBA (VIC 1225T PCIe FCoE HBA)
 
+pci:v00001137d00000045sv00001137sd0000012A*
+ ID_MODEL_FROM_DATABASE=VIC FCoE HBA (VIC M4308 FCoE HBA)
+
+pci:v00001137d00000045sv00001137sd0000012C*
+ ID_MODEL_FROM_DATABASE=VIC FCoE HBA (VIC 1340 MLOM FCoE HBA)
+
+pci:v00001137d00000045sv00001137sd0000012E*
+ ID_MODEL_FROM_DATABASE=VIC FCoE HBA (VIC 1227 PCIe FCoE HBA)
+
+pci:v00001137d00000045sv00001137sd00000137*
+ ID_MODEL_FROM_DATABASE=VIC FCoE HBA (VIC 1380 Mezzanine FCoE HBA)
+
+pci:v00001137d00000046*
+ ID_MODEL_FROM_DATABASE=VIC SCSI Controller
+
+pci:v00001137d00000046sv00001137sd0000012A*
+ ID_MODEL_FROM_DATABASE=VIC SCSI Controller (VIC M4308 SCSI Controller)
+
 pci:v00001137d0000004E*
  ID_MODEL_FROM_DATABASE=VIC 82 PCIe Upstream Port
 
 pci:v00001137d00000071*
  ID_MODEL_FROM_DATABASE=VIC SR-IOV VF
 
+pci:v00001137d0000007A*
+ ID_MODEL_FROM_DATABASE=VIC 1300 PCIe Upstream Port
+
+pci:v00001137d0000007Asv00001137sd0000012A*
+ ID_MODEL_FROM_DATABASE=VIC 1300 PCIe Upstream Port (VIC M4308 Dual 40Gb)
+
+pci:v00001137d0000007Asv00001137sd0000012C*
+ ID_MODEL_FROM_DATABASE=VIC 1300 PCIe Upstream Port (VIC 1340 Dual 40Gb MLOM)
+
+pci:v00001137d0000007Asv00001137sd00000137*
+ ID_MODEL_FROM_DATABASE=VIC 1300 PCIe Upstream Port (VIC 1380 Dual 40Gb Mezzanine)
+
 pci:v00001137d000000CF*
  ID_MODEL_FROM_DATABASE=VIC Userspace NIC
 
+pci:v00001137d000000CFsv00001137sd0000004F*
+ ID_MODEL_FROM_DATABASE=VIC Userspace NIC (VIC 1280 Mezzanine Userspace NIC)
+
+pci:v00001137d000000CFsv00001137sd00000084*
+ ID_MODEL_FROM_DATABASE=VIC Userspace NIC (VIC 1240 MLOM Userspace NIC)
+
+pci:v00001137d000000CFsv00001137sd00000085*
+ ID_MODEL_FROM_DATABASE=VIC Userspace NIC (VIC 1225 PCIe Userspace NIC)
+
+pci:v00001137d000000CFsv00001137sd000000CD*
+ ID_MODEL_FROM_DATABASE=VIC Userspace NIC (VIC 1285 PCIe Userspace NIC)
+
+pci:v00001137d000000CFsv00001137sd000000CE*
+ ID_MODEL_FROM_DATABASE=VIC Userspace NIC (VIC 1225T PCIe Userspace NIC)
+
+pci:v00001137d000000CFsv00001137sd0000012A*
+ ID_MODEL_FROM_DATABASE=VIC Userspace NIC (VIC M4308 Userspace NIC)
+
+pci:v00001137d000000CFsv00001137sd0000012C*
+ ID_MODEL_FROM_DATABASE=VIC Userspace NIC (VIC 1340 MLOM Userspace NIC)
+
+pci:v00001137d000000CFsv00001137sd0000012E*
+ ID_MODEL_FROM_DATABASE=VIC Userspace NIC (VIC 1227 PCIe Userspace NIC)
+
+pci:v00001137d000000CFsv00001137sd00000137*
+ ID_MODEL_FROM_DATABASE=VIC Userspace NIC (VIC 1380 Mezzanine Userspace NIC)
+
 pci:v00001138*
  ID_VENDOR_FROM_DATABASE=Ziatech Corporation
 
@@ -37361,6 +37568,9 @@ pci:v000011B0d00000292*
 pci:v000011B0d00000960*
  ID_MODEL_FROM_DATABASE=V96xPBC
 
+pci:v000011B0d0000880A*
+ ID_MODEL_FROM_DATABASE=Deltacast Delta-HD-22
+
 pci:v000011B0d0000C960*
  ID_MODEL_FROM_DATABASE=V96DPC
 
@@ -44654,6 +44864,9 @@ pci:v00001425d00005080*
 pci:v00001425d00005081*
  ID_MODEL_FROM_DATABASE=T540-5081 Unified Wire Ethernet Controller
 
+pci:v00001425d00005082*
+ ID_MODEL_FROM_DATABASE=T504-5082 Unified Wire Ethernet Controller
+
 pci:v00001425d00005083*
  ID_MODEL_FROM_DATABASE=T540-5083 Unified Wire Ethernet Controller
 
@@ -44666,6 +44879,12 @@ pci:v00001425d00005085*
 pci:v00001425d00005086*
  ID_MODEL_FROM_DATABASE=T580-5086 Unified Wire Ethernet Controller
 
+pci:v00001425d00005087*
+ ID_MODEL_FROM_DATABASE=T580-5087 Unified Wire Ethernet Controller
+
+pci:v00001425d00005088*
+ ID_MODEL_FROM_DATABASE=T570-5088 Unified Wire Ethernet Controller
+
 pci:v00001425d00005401*
  ID_MODEL_FROM_DATABASE=T520-CR Unified Wire Ethernet Controller
 
@@ -44735,6 +44954,9 @@ pci:v00001425d00005480*
 pci:v00001425d00005481*
  ID_MODEL_FROM_DATABASE=T540-5081 Unified Wire Ethernet Controller
 
+pci:v00001425d00005482*
+ ID_MODEL_FROM_DATABASE=T504-5082 Unified Wire Ethernet Controller
+
 pci:v00001425d00005483*
  ID_MODEL_FROM_DATABASE=T540-5083 Unified Wire Ethernet Controller
 
@@ -44747,6 +44969,12 @@ pci:v00001425d00005485*
 pci:v00001425d00005486*
  ID_MODEL_FROM_DATABASE=T580-5086 Unified Wire Ethernet Controller
 
+pci:v00001425d00005487*
+ ID_MODEL_FROM_DATABASE=T580-5087 Unified Wire Ethernet Controller
+
+pci:v00001425d00005488*
+ ID_MODEL_FROM_DATABASE=T570-5088 Unified Wire Ethernet Controller
+
 pci:v00001425d00005501*
  ID_MODEL_FROM_DATABASE=T520-CR Unified Wire Storage Controller
 
@@ -44816,6 +45044,9 @@ pci:v00001425d00005580*
 pci:v00001425d00005581*
  ID_MODEL_FROM_DATABASE=T540-5081 Unified Wire Storage Controller
 
+pci:v00001425d00005582*
+ ID_MODEL_FROM_DATABASE=T504-5082 Unified Wire Storage Controller
+
 pci:v00001425d00005583*
  ID_MODEL_FROM_DATABASE=T540-5083 Unified Wire Storage Controller
 
@@ -44828,6 +45059,12 @@ pci:v00001425d00005585*
 pci:v00001425d00005586*
  ID_MODEL_FROM_DATABASE=T580-5086 Unified Wire Storage Controller
 
+pci:v00001425d00005587*
+ ID_MODEL_FROM_DATABASE=T580-5087 Unified Wire Storage Controller
+
+pci:v00001425d00005588*
+ ID_MODEL_FROM_DATABASE=T570-5088 Unified Wire Storage Controller
+
 pci:v00001425d00005601*
  ID_MODEL_FROM_DATABASE=T520-CR Unified Wire Storage Controller
 
@@ -44897,6 +45134,9 @@ pci:v00001425d00005680*
 pci:v00001425d00005681*
  ID_MODEL_FROM_DATABASE=T540-5081 Unified Wire Storage Controller
 
+pci:v00001425d00005682*
+ ID_MODEL_FROM_DATABASE=T504-5082 Unified Wire Storage Controller
+
 pci:v00001425d00005683*
  ID_MODEL_FROM_DATABASE=T540-5083 Unified Wire Storage Controller
 
@@ -44909,6 +45149,12 @@ pci:v00001425d00005685*
 pci:v00001425d00005686*
  ID_MODEL_FROM_DATABASE=T580-5086 Unified Wire Storage Controller
 
+pci:v00001425d00005687*
+ ID_MODEL_FROM_DATABASE=T580-5087 Unified Wire Storage Controller
+
+pci:v00001425d00005688*
+ ID_MODEL_FROM_DATABASE=T570-5088 Unified Wire Storage Controller
+
 pci:v00001425d00005701*
  ID_MODEL_FROM_DATABASE=T520-CR Unified Wire Ethernet Controller
 
@@ -44978,6 +45224,9 @@ pci:v00001425d00005780*
 pci:v00001425d00005781*
  ID_MODEL_FROM_DATABASE=T540-5081 Unified Wire Ethernet Controller
 
+pci:v00001425d00005782*
+ ID_MODEL_FROM_DATABASE=T504-5082 Unified Wire Ethernet Controller
+
 pci:v00001425d00005783*
  ID_MODEL_FROM_DATABASE=T540-5083 Unified Wire Ethernet Controller
 
@@ -44987,6 +45236,15 @@ pci:v00001425d00005784*
 pci:v00001425d00005785*
  ID_MODEL_FROM_DATABASE=T580-5085 Unified Wire Ethernet Controller
 
+pci:v00001425d00005786*
+ ID_MODEL_FROM_DATABASE=T580-5086 Unified Wire Ethernet Controller
+
+pci:v00001425d00005787*
+ ID_MODEL_FROM_DATABASE=T580-5087 Unified Wire Ethernet Controller
+
+pci:v00001425d00005788*
+ ID_MODEL_FROM_DATABASE=T570-5088 Unified Wire Ethernet Controller
+
 pci:v00001425d00005801*
  ID_MODEL_FROM_DATABASE=T520-CR Unified Wire Ethernet Controller [VF]
 
@@ -45056,6 +45314,9 @@ pci:v00001425d00005880*
 pci:v00001425d00005881*
  ID_MODEL_FROM_DATABASE=T540-5081 Unified Wire Ethernet Controller [VF]
 
+pci:v00001425d00005882*
+ ID_MODEL_FROM_DATABASE=T504-5082 Unified Wire Ethernet Controller [VF]
+
 pci:v00001425d00005883*
  ID_MODEL_FROM_DATABASE=T540-5083 Unified Wire Ethernet Controller [VF]
 
@@ -45068,6 +45329,12 @@ pci:v00001425d00005885*
 pci:v00001425d00005886*
  ID_MODEL_FROM_DATABASE=T580-5086 Unified Wire Ethernet Controller [VF]
 
+pci:v00001425d00005887*
+ ID_MODEL_FROM_DATABASE=T580-5087 Unified Wire Ethernet Controller [VF]
+
+pci:v00001425d00005888*
+ ID_MODEL_FROM_DATABASE=T570-5088 Unified Wire Ethernet Controller [VF]
+
 pci:v00001425d0000A000*
  ID_MODEL_FROM_DATABASE=PE10K Unified Wire Ethernet Controller
 
@@ -46457,6 +46724,9 @@ pci:v000014E4d00001656*
 pci:v000014E4d00001657*
  ID_MODEL_FROM_DATABASE=NetXtreme BCM5719 Gigabit Ethernet PCIe
 
+pci:v000014E4d00001657sv0000103Csd0000169D*
+ ID_MODEL_FROM_DATABASE=NetXtreme BCM5719 Gigabit Ethernet PCIe (Ethernet 1Gb 4-port 331FLR Adapter)
+
 pci:v000014E4d00001659*
  ID_MODEL_FROM_DATABASE=NetXtreme BCM5721 Gigabit Ethernet PCI Express
 
@@ -47717,6 +47987,27 @@ pci:v000014E4d000043AA*
 pci:v000014E4d000043B1*
  ID_MODEL_FROM_DATABASE=BCM4352 802.11ac Wireless Network Adapter
 
+pci:v000014E4d000043BA*
+ ID_MODEL_FROM_DATABASE=BCM43602 802.11ac Wireless LAN SoC
+
+pci:v000014E4d000043BB*
+ ID_MODEL_FROM_DATABASE=BCM43602 802.11ac Wireless LAN SoC
+
+pci:v000014E4d000043BC*
+ ID_MODEL_FROM_DATABASE=BCM43602 802.11ac Wireless LAN SoC
+
+pci:v000014E4d000043D3*
+ ID_MODEL_FROM_DATABASE=BCM43567
+
+pci:v000014E4d000043D9*
+ ID_MODEL_FROM_DATABASE=BCM43570
+
+pci:v000014E4d000043DF*
+ ID_MODEL_FROM_DATABASE=BCM4354 802.11ac Wireless LAN SoC
+
+pci:v000014E4d000043EC*
+ ID_MODEL_FROM_DATABASE=BCM4356
+
 pci:v000014E4d00004401*
  ID_MODEL_FROM_DATABASE=BCM4401 100Base-T
 
@@ -48197,6 +48488,9 @@ pci:v000014F1d00001815sv00000E11sd00000022*
 pci:v000014F1d00001815sv00000E11sd00000042*
  ID_MODEL_FROM_DATABASE=HCF 56k Modem (Yogi)
 
+pci:v000014F1d00001830*
+ ID_MODEL_FROM_DATABASE=CX861xx Integrated Host Bridge
+
 pci:v000014F1d00002003*
  ID_MODEL_FROM_DATABASE=HSF 56k Data/Fax Modem
 
@@ -48698,6 +48992,9 @@ pci:v000014F1d00008852sv00000070sd00008010*
 pci:v000014F1d00008852sv0000107Dsd00006F22*
  ID_MODEL_FROM_DATABASE=CX23885 PCI Video and Audio Decoder (WinFast PxTV1200)
 
+pci:v000014F1d00008852sv000013C2sd00003013*
+ ID_MODEL_FROM_DATABASE=CX23885 PCI Video and Audio Decoder (TT-budget CT2-4500 CI)
+
 pci:v000014F1d00008852sv00001461sd0000C039*
  ID_MODEL_FROM_DATABASE=CX23885 PCI Video and Audio Decoder (AVerTV Hybrid Express (A577))
 
@@ -48710,6 +49007,9 @@ pci:v000014F1d00008852sv000018ACsd0000DB78*
 pci:v000014F1d00008852sv00004254sd00009580*
  ID_MODEL_FROM_DATABASE=CX23885 PCI Video and Audio Decoder (T9580)
 
+pci:v000014F1d00008852sv00004254sd0000980C*
+ ID_MODEL_FROM_DATABASE=CX23885 PCI Video and Audio Decoder (T980C)
+
 pci:v000014F1d00008880*
  ID_MODEL_FROM_DATABASE=CX23887/8 PCIe Broadcast Audio and Video Decoder with 3D Comb
 
@@ -49772,12 +50072,24 @@ pci:v000015B3d000001F6*
 pci:v000015B3d000001FF*
  ID_MODEL_FROM_DATABASE=MT27600 Family [Connect-IB Flash Recovery]
 
+pci:v000015B3d00000209*
+ ID_MODEL_FROM_DATABASE=MT27700 Family [ConnectX-4 Flash Recovery]
+
 pci:v000015B3d00001002*
  ID_MODEL_FROM_DATABASE=MT25400 Family [ConnectX-2 Virtual Function]
 
 pci:v000015B3d00001003*
  ID_MODEL_FROM_DATABASE=MT27500 Family [ConnectX-3]
 
+pci:v000015B3d00001003sv0000103Csd00001777*
+ ID_MODEL_FROM_DATABASE=MT27500 Family [ConnectX-3] (InfiniBand FDR/EN 10/40Gb Dual Port 544FLR-QSFP Adapter (Rev Cx))
+
+pci:v000015B3d00001003sv0000103Csd000017C9*
+ ID_MODEL_FROM_DATABASE=MT27500 Family [ConnectX-3] (Infiniband QDR/Ethernet 10Gb 2-port 544i Adapter)
+
+pci:v000015B3d00001003sv0000103Csd000018D6*
+ ID_MODEL_FROM_DATABASE=MT27500 Family [ConnectX-3] (InfiniBand FDR/EN 10/40Gb Dual Port 544QSFP Adapter)
+
 pci:v000015B3d00001004*
  ID_MODEL_FROM_DATABASE=MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
 
@@ -49821,10 +50133,10 @@ pci:v000015B3d00001012*
  ID_MODEL_FROM_DATABASE=MT27600 Family [Connect-IB Virtual Function]
 
 pci:v000015B3d00001013*
- ID_MODEL_FROM_DATABASE=MT27620 Family
+ ID_MODEL_FROM_DATABASE=MT27700 Family [ConnectX-4]
 
 pci:v000015B3d00001014*
- ID_MODEL_FROM_DATABASE=MT27621 Family
+ ID_MODEL_FROM_DATABASE=MT27700 Family [ConnectX-4 Virtual Function]
 
 pci:v000015B3d00001015*
  ID_MODEL_FROM_DATABASE=MT27630 Family
@@ -51200,6 +51512,9 @@ pci:v0000168Cd0000002D*
 pci:v0000168Cd0000002E*
  ID_MODEL_FROM_DATABASE=AR9287 Wireless Network Adapter (PCI-Express)
 
+pci:v0000168Cd0000002Esv0000105Bsd0000E034*
+ ID_MODEL_FROM_DATABASE=AR9287 Wireless Network Adapter (PCI-Express) (T77H167.00)
+
 pci:v0000168Cd00000030*
  ID_MODEL_FROM_DATABASE=AR93xx Wireless Network Adapter
 
@@ -51755,6 +52070,9 @@ pci:v00001760d00000101*
 pci:v00001760d00000102*
  ID_MODEL_FROM_DATABASE=PCD-7104 Digital Input & Output PCI Card
 
+pci:v00001760d00000303*
+ ID_MODEL_FROM_DATABASE=PCD-7006C Digital Input & Output PCI Card
+
 pci:v00001771*
  ID_VENDOR_FROM_DATABASE=InnoVISION Multimedia Ltd.
 
@@ -52415,6 +52733,12 @@ pci:v000017FEd00002220sv00001737sd00000029*
 pci:v000017FF*
  ID_VENDOR_FROM_DATABASE=Benq Corporation
 
+pci:v00001800*
+ ID_VENDOR_FROM_DATABASE=Qualcore Logic Inc.
+
+pci:v00001800d00001100*
+ ID_MODEL_FROM_DATABASE=Nanospeed Trading Gateway
+
 pci:v00001803*
  ID_VENDOR_FROM_DATABASE=ProdaSafe GmbH
 
@@ -52800,11 +53124,14 @@ pci:v0000186Cd00000622*
  ID_MODEL_FROM_DATABASE=AD622 Data Acquisition Device
 
 pci:v0000186Cd00000624*
- ID_MODEL_FROM_DATABASE=MF624 Multifunction I/O Card
+ ID_MODEL_FROM_DATABASE=MF624 Multifunction I/O PCI Card
 
 pci:v0000186Cd00000625*
  ID_MODEL_FROM_DATABASE=MF625 3-phase Motor Driver
 
+pci:v0000186Cd00000634*
+ ID_MODEL_FROM_DATABASE=MF634 Multifunction I/O PCIe Card
+
 pci:v0000186F*
  ID_VENDOR_FROM_DATABASE=WiNRADiO Communications
 
@@ -53618,6 +53945,12 @@ pci:v00001924d00001803*
 pci:v00001924d00001813*
  ID_MODEL_FROM_DATABASE=SFL9021 Virtual Function [Solarstorm]
 
+pci:v00001924d00001903*
+ ID_MODEL_FROM_DATABASE=SFC9120 Virtual Function
+
+pci:v00001924d00001923*
+ ID_MODEL_FROM_DATABASE=SFC9140 Virtual Function
+
 pci:v00001924d00006703*
  ID_MODEL_FROM_DATABASE=SFC4000 rev A iSCSI/Onload [Solarstorm]
 
@@ -53951,6 +54284,30 @@ pci:v00001957d00000408*
 pci:v00001957d00000409*
  ID_MODEL_FROM_DATABASE=P4040
 
+pci:v00001957d00000440*
+ ID_MODEL_FROM_DATABASE=T4240 with security
+
+pci:v00001957d00000441*
+ ID_MODEL_FROM_DATABASE=T4240 without security
+
+pci:v00001957d00000446*
+ ID_MODEL_FROM_DATABASE=T4160 with security
+
+pci:v00001957d00000447*
+ ID_MODEL_FROM_DATABASE=T4160 without security
+
+pci:v00001957d00000830*
+ ID_MODEL_FROM_DATABASE=T2080 with security
+
+pci:v00001957d00000831*
+ ID_MODEL_FROM_DATABASE=T2080 without security
+
+pci:v00001957d00000838*
+ ID_MODEL_FROM_DATABASE=T2081 with security
+
+pci:v00001957d00000839*
+ ID_MODEL_FROM_DATABASE=T2081 without security
+
 pci:v00001957d0000580C*
  ID_MODEL_FROM_DATABASE=MPC5121e
 
@@ -54801,7 +55158,7 @@ pci:v00001AEC*
  ID_VENDOR_FROM_DATABASE=Wolfson Microelectronics
 
 pci:v00001AED*
- ID_VENDOR_FROM_DATABASE=Fusion-io
+ ID_VENDOR_FROM_DATABASE=SanDisk
 
 pci:v00001AEDd00001003*
  ID_MODEL_FROM_DATABASE=ioDimm3 (v1.2)
@@ -55103,6 +55460,9 @@ pci:v00001B55d0000E5F4*
 pci:v00001B55d0000F1C4*
  ID_MODEL_FROM_DATABASE=Dual ASI-RX/TX-CI card
 
+pci:v00001B66*
+ ID_VENDOR_FROM_DATABASE=Deltacast
+
 pci:v00001B6F*
  ID_VENDOR_FROM_DATABASE=Etron Technology, Inc.
 
@@ -55283,6 +55643,12 @@ pci:v00001C44*
 pci:v00001C44d00008000*
  ID_MODEL_FROM_DATABASE=8000 Storage IO Controller
 
+pci:v00001C7E*
+ ID_VENDOR_FROM_DATABASE=TTTech Computertechnik AG
+
+pci:v00001C7Ed00000200*
+ ID_MODEL_FROM_DATABASE=zFAS Debug Port
+
 pci:v00001C7F*
  ID_VENDOR_FROM_DATABASE=Elektrobit Austria GmbH
 
@@ -55304,6 +55670,12 @@ pci:v00001CC5*
 pci:v00001CC5d00000100*
  ID_MODEL_FROM_DATABASE=CAN-PCIe-02
 
+pci:v00001CD2*
+ ID_VENDOR_FROM_DATABASE=SesKion GmbH
+
+pci:v00001CD2d00000301*
+ ID_MODEL_FROM_DATABASE=Simulyzer-RT CompactPCI Serial DIO-1 card
+
 pci:v00001CE4*
  ID_VENDOR_FROM_DATABASE=Exablaze
 
@@ -56972,6 +57344,15 @@ pci:v0000584D*
 pci:v00005851*
  ID_VENDOR_FROM_DATABASE=Exacq Technologies
 
+pci:v00005851d00008008*
+ ID_MODEL_FROM_DATABASE=tDVR8008 8-port video capture card
+
+pci:v00005851d00008016*
+ ID_MODEL_FROM_DATABASE=tDVR8016 16-chan video capture card
+
+pci:v00005851d00008032*
+ ID_MODEL_FROM_DATABASE=tDVR8032 32-chan video capture card
+
 pci:v00005853*
  ID_VENDOR_FROM_DATABASE=XenSource, Inc.
 
@@ -57086,6 +57467,12 @@ pci:v00007063d00005500*
 pci:v00007284*
  ID_VENDOR_FROM_DATABASE=HT OMEGA Inc.
 
+pci:v00007401*
+ ID_VENDOR_FROM_DATABASE=EndRun Technologies
+
+pci:v00007401d0000E100*
+ ID_MODEL_FROM_DATABASE=PTP3100 PCIe PTP Slave Clock
+
 pci:v00007604*
  ID_VENDOR_FROM_DATABASE=O.N. Electronic Co Ltd.
 
@@ -58007,15 +58394,27 @@ pci:v00008086d000008AFsv00008086sd00001017*
 pci:v00008086d000008B1*
  ID_MODEL_FROM_DATABASE=Wireless 7260
 
+pci:v00008086d000008B1sv00008086sd00004020*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
+
+pci:v00008086d000008B1sv00008086sd0000402A*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
+
 pci:v00008086d000008B1sv00008086sd00004060*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
 
 pci:v00008086d000008B1sv00008086sd00004062*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Wireless-N 7260)
 
+pci:v00008086d000008B1sv00008086sd0000406A*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
+
 pci:v00008086d000008B1sv00008086sd00004070*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
 
+pci:v00008086d000008B1sv00008086sd00004072*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
+
 pci:v00008086d000008B1sv00008086sd00004160*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
 
@@ -58025,15 +58424,30 @@ pci:v00008086d000008B1sv00008086sd00004162*
 pci:v00008086d000008B1sv00008086sd00004170*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
 
+pci:v00008086d000008B1sv00008086sd00004420*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
+
 pci:v00008086d000008B1sv00008086sd00004460*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
 
 pci:v00008086d000008B1sv00008086sd00004462*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Wireless-N 7260)
 
+pci:v00008086d000008B1sv00008086sd0000446A*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
+
 pci:v00008086d000008B1sv00008086sd00004470*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
 
+pci:v00008086d000008B1sv00008086sd00004472*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
+
+pci:v00008086d000008B1sv00008086sd00004560*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
+
+pci:v00008086d000008B1sv00008086sd00004570*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
+
 pci:v00008086d000008B1sv00008086sd0000486E*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
 
@@ -58049,18 +58463,45 @@ pci:v00008086d000008B1sv00008086sd00004A6E*
 pci:v00008086d000008B1sv00008086sd00004A70*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
 
+pci:v00008086d000008B1sv00008086sd00004C60*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
+
+pci:v00008086d000008B1sv00008086sd00004C70*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
+
+pci:v00008086d000008B1sv00008086sd00005070*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
+
+pci:v00008086d000008B1sv00008086sd00005072*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
+
+pci:v00008086d000008B1sv00008086sd00005170*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
+
+pci:v00008086d000008B1sv00008086sd00005770*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
+
 pci:v00008086d000008B1sv00008086sd0000C020*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
 
+pci:v00008086d000008B1sv00008086sd0000C02A*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
+
 pci:v00008086d000008B1sv00008086sd0000C060*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
 
 pci:v00008086d000008B1sv00008086sd0000C062*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Wireless-N 7260)
 
+pci:v00008086d000008B1sv00008086sd0000C06A*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
+
 pci:v00008086d000008B1sv00008086sd0000C070*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
 
+pci:v00008086d000008B1sv00008086sd0000C072*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
+
 pci:v00008086d000008B1sv00008086sd0000C160*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
 
@@ -58070,6 +58511,9 @@ pci:v00008086d000008B1sv00008086sd0000C162*
 pci:v00008086d000008B1sv00008086sd0000C170*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
 
+pci:v00008086d000008B1sv00008086sd0000C360*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
+
 pci:v00008086d000008B1sv00008086sd0000C420*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
 
@@ -58082,6 +58526,27 @@ pci:v00008086d000008B1sv00008086sd0000C462*
 pci:v00008086d000008B1sv00008086sd0000C470*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
 
+pci:v00008086d000008B1sv00008086sd0000C472*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
+
+pci:v00008086d000008B1sv00008086sd0000C560*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
+
+pci:v00008086d000008B1sv00008086sd0000C570*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
+
+pci:v00008086d000008B1sv00008086sd0000C760*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
+
+pci:v00008086d000008B1sv00008086sd0000C770*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
+
+pci:v00008086d000008B1sv00008086sd0000CC60*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
+
+pci:v00008086d000008B1sv00008086sd0000CC70*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
+
 pci:v00008086d000008B2*
  ID_MODEL_FROM_DATABASE=Wireless 7260
 
@@ -58094,7 +58559,19 @@ pci:v00008086d000008B2sv00008086sd00004260*
 pci:v00008086d000008B2sv00008086sd00004262*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Wireless-N 7260)
 
+pci:v00008086d000008B2sv00008086sd0000426A*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
+
 pci:v00008086d000008B2sv00008086sd00004270*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Wireless-N 7260)
+
+pci:v00008086d000008B2sv00008086sd00004272*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
+
+pci:v00008086d000008B2sv00008086sd00004360*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
+
+pci:v00008086d000008B2sv00008086sd00004370*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
 
 pci:v00008086d000008B2sv00008086sd0000C220*
@@ -58106,9 +58583,18 @@ pci:v00008086d000008B2sv00008086sd0000C260*
 pci:v00008086d000008B2sv00008086sd0000C262*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Wireless-N 7260)
 
+pci:v00008086d000008B2sv00008086sd0000C26A*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-N 7260)
+
 pci:v00008086d000008B2sv00008086sd0000C270*
  ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
 
+pci:v00008086d000008B2sv00008086sd0000C272*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
+
+pci:v00008086d000008B2sv00008086sd0000C370*
+ ID_MODEL_FROM_DATABASE=Wireless 7260 (Dual Band Wireless-AC 7260)
+
 pci:v00008086d000008B3*
  ID_MODEL_FROM_DATABASE=Wireless 3160
 
@@ -58121,12 +58607,30 @@ pci:v00008086d000008B3sv00008086sd00000062*
 pci:v00008086d000008B3sv00008086sd00000070*
  ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless-AC 3160)
 
+pci:v00008086d000008B3sv00008086sd00000072*
+ ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless-AC 3160)
+
 pci:v00008086d000008B3sv00008086sd00000170*
  ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless-AC 3160)
 
+pci:v00008086d000008B3sv00008086sd00000172*
+ ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless-AC 3160)
+
+pci:v00008086d000008B3sv00008086sd00000260*
+ ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless-N 3160)
+
 pci:v00008086d000008B3sv00008086sd00000470*
  ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless-AC 3160)
 
+pci:v00008086d000008B3sv00008086sd00000472*
+ ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless-AC 3160)
+
+pci:v00008086d000008B3sv00008086sd00001070*
+ ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless-AC 3160)
+
+pci:v00008086d000008B3sv00008086sd00001170*
+ ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless-AC 3160)
+
 pci:v00008086d000008B3sv00008086sd00008060*
  ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless N-3160)
 
@@ -58136,24 +58640,69 @@ pci:v00008086d000008B3sv00008086sd00008062*
 pci:v00008086d000008B3sv00008086sd00008070*
  ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless AC 3160)
 
+pci:v00008086d000008B3sv00008086sd00008072*
+ ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless AC 3160)
+
 pci:v00008086d000008B3sv00008086sd00008170*
  ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless AC 3160)
 
+pci:v00008086d000008B3sv00008086sd00008172*
+ ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless AC 3160)
+
 pci:v00008086d000008B3sv00008086sd00008470*
  ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless AC 3160)
 
+pci:v00008086d000008B3sv00008086sd00008570*
+ ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless AC 3160)
+
 pci:v00008086d000008B4*
  ID_MODEL_FROM_DATABASE=Wireless 3160
 
 pci:v00008086d000008B4sv00008086sd00000270*
  ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless-AC 3160)
 
+pci:v00008086d000008B4sv00008086sd00000272*
+ ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless-AC 3160)
+
+pci:v00008086d000008B4sv00008086sd00000370*
+ ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless-AC 3160)
+
+pci:v00008086d000008B4sv00008086sd00008260*
+ ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless AC 3160)
+
 pci:v00008086d000008B4sv00008086sd00008270*
  ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless AC 3160)
 
+pci:v00008086d000008B4sv00008086sd00008272*
+ ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless AC 3160)
+
+pci:v00008086d000008B4sv00008086sd00008370*
+ ID_MODEL_FROM_DATABASE=Wireless 3160 (Dual Band Wireless AC 3160)
+
 pci:v00008086d000008CF*
  ID_MODEL_FROM_DATABASE=Atom Processor Z2760 Integrated Graphics Controller
 
+pci:v00008086d00000953*
+ ID_MODEL_FROM_DATABASE=PCIe Data Center SSD
+
+pci:v00008086d00000953sv00008086sd00003702*
+ ID_MODEL_FROM_DATABASE=PCIe Data Center SSD (DC P3700 SSD)
+
+pci:v00008086d00000953sv00008086sd00003703*
+ ID_MODEL_FROM_DATABASE=PCIe Data Center SSD (DC P3700 SSD [2.5" SFF])
+
+pci:v00008086d00000953sv00008086sd00003704*
+ ID_MODEL_FROM_DATABASE=PCIe Data Center SSD (DC P3500 SSD [Add-in Card])
+
+pci:v00008086d00000953sv00008086sd00003705*
+ ID_MODEL_FROM_DATABASE=PCIe Data Center SSD (DC P3500 SSD [2.5" SFF])
+
+pci:v00008086d00000953sv00008086sd00003709*
+ ID_MODEL_FROM_DATABASE=PCIe Data Center SSD (DC P3600 SSD [Add-in Card])
+
+pci:v00008086d00000953sv00008086sd0000370A*
+ ID_MODEL_FROM_DATABASE=PCIe Data Center SSD (DC P3600 SSD [2.5" SFF])
+
 pci:v00008086d0000095A*
  ID_MODEL_FROM_DATABASE=Wireless 7265
 
@@ -58187,6 +58736,9 @@ pci:v00008086d0000095Asv00008086sd00005090*
 pci:v00008086d0000095Asv00008086sd00005100*
  ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
 
+pci:v00008086d0000095Asv00008086sd00005102*
+ ID_MODEL_FROM_DATABASE=Wireless 7265 (Wireless-N 7265)
+
 pci:v00008086d0000095Asv00008086sd0000510A*
  ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
 
@@ -58205,15 +58757,27 @@ pci:v00008086d0000095Asv00008086sd00005400*
 pci:v00008086d0000095Asv00008086sd00005410*
  ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
 
+pci:v00008086d0000095Asv00008086sd00005412*
+ ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
+
 pci:v00008086d0000095Asv00008086sd00005420*
  ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-N 7265)
 
 pci:v00008086d0000095Asv00008086sd00005490*
  ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
 
+pci:v00008086d0000095Asv00008086sd00005510*
+ ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
+
 pci:v00008086d0000095Asv00008086sd00005590*
  ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
 
+pci:v00008086d0000095Asv00008086sd00009000*
+ ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
+
+pci:v00008086d0000095Asv00008086sd0000900A*
+ ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
+
 pci:v00008086d0000095Asv00008086sd00009010*
  ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
 
@@ -58232,6 +58796,9 @@ pci:v00008086d0000095Asv00008086sd00009210*
 pci:v00008086d0000095Asv00008086sd00009310*
  ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
 
+pci:v00008086d0000095Asv00008086sd00009400*
+ ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
+
 pci:v00008086d0000095Asv00008086sd00009410*
  ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
 
@@ -58247,18 +58814,27 @@ pci:v00008086d0000095Bsv00008086sd00005200*
 pci:v00008086d0000095Bsv00008086sd00005202*
  ID_MODEL_FROM_DATABASE=Wireless 7265 (Wireless-N 7265)
 
+pci:v00008086d0000095Bsv00008086sd0000520A*
+ ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-N 7265)
+
 pci:v00008086d0000095Bsv00008086sd00005210*
  ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
 
+pci:v00008086d0000095Bsv00008086sd00005212*
+ ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
+
 pci:v00008086d0000095Bsv00008086sd00005290*
  ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
 
 pci:v00008086d0000095Bsv00008086sd00005302*
- ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
+ ID_MODEL_FROM_DATABASE=Wireless 7265 (Wireless-N 7265)
 
 pci:v00008086d0000095Bsv00008086sd00005310*
  ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
 
+pci:v00008086d0000095Bsv00008086sd00009200*
+ ID_MODEL_FROM_DATABASE=Wireless 7265 (Dual Band Wireless-AC 7265)
+
 pci:v00008086d00000960*
  ID_MODEL_FROM_DATABASE=80960RP (i960RP) Microprocessor/Bridge
 
@@ -60170,6 +60746,9 @@ pci:v00008086d000010CE*
 pci:v00008086d000010D3*
  ID_MODEL_FROM_DATABASE=82574L Gigabit Network Connection
 
+pci:v00008086d000010D3sv0000103Csd00001785*
+ ID_MODEL_FROM_DATABASE=82574L Gigabit Network Connection (NC112i 1-port Ethernet Server Adapter)
+
 pci:v00008086d000010D3sv0000103Csd00003250*
  ID_MODEL_FROM_DATABASE=82574L Gigabit Network Connection (NC112T PCI Express single Port Gigabit Server Adapter)
 
@@ -61424,6 +62003,9 @@ pci:v00008086d00001533sv00001093sd00007706*
 pci:v00008086d00001533sv000010A9sd0000802C*
  ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection (UV300 BaseIO single-port GbE)
 
+pci:v00008086d00001533sv000010A9sd0000802D*
+ ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection (UV3000 BaseIO GbE Network)
+
 pci:v00008086d00001533sv000017AAsd00001100*
  ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection (ThinkServer Ethernet Server Adapter)
 
@@ -61541,6 +62123,12 @@ pci:v00008086d00001572*
 pci:v00008086d00001572sv00001028sd00001F99*
  ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet 10G 4P X710/I350 rNDC)
 
+pci:v00008086d00001572sv000017AAsd00000000*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (ThinkServer XL710 AnyFabric)
+
+pci:v00008086d00001572sv000017AAsd00004001*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (ThinkServer XL710-4 AnyFabric)
+
 pci:v00008086d00001572sv00008086sd00000000*
  ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet Converged Network Adapter X710)
 
@@ -61742,6 +62330,63 @@ pci:v00008086d0000163D*
 pci:v00008086d0000163E*
  ID_MODEL_FROM_DATABASE=Broadwell-U Integrated Graphics
 
+pci:v00008086d00001900*
+ ID_MODEL_FROM_DATABASE=Sky Lake Host Bridge/DRAM Registers
+
+pci:v00008086d00001901*
+ ID_MODEL_FROM_DATABASE=Sky Lake PCIe Controller (x16)
+
+pci:v00008086d00001904*
+ ID_MODEL_FROM_DATABASE=Sky Lake Host Bridge/DRAM Registers
+
+pci:v00008086d00001905*
+ ID_MODEL_FROM_DATABASE=Sky Lake PCIe Controller (x8)
+
+pci:v00008086d00001908*
+ ID_MODEL_FROM_DATABASE=Sky Lake Host Bridge/DRAM Registers
+
+pci:v00008086d00001909*
+ ID_MODEL_FROM_DATABASE=Sky Lake PCIe Controller (x4)
+
+pci:v00008086d0000190C*
+ ID_MODEL_FROM_DATABASE=Sky Lake Host Bridge/DRAM Registers
+
+pci:v00008086d0000190F*
+ ID_MODEL_FROM_DATABASE=Sky Lake Host Bridge/DRAM Registers
+
+pci:v00008086d00001910*
+ ID_MODEL_FROM_DATABASE=Sky Lake Host Bridge/DRAM Registers
+
+pci:v00008086d00001911*
+ ID_MODEL_FROM_DATABASE=Sky Lake Gaussian Mixture Model
+
+pci:v00008086d00001912*
+ ID_MODEL_FROM_DATABASE=Sky Lake Integrated Graphics
+
+pci:v00008086d00001916*
+ ID_MODEL_FROM_DATABASE=Sky Lake Integrated Graphics
+
+pci:v00008086d00001918*
+ ID_MODEL_FROM_DATABASE=Sky Lake Host Bridge/DRAM Registers
+
+pci:v00008086d00001919*
+ ID_MODEL_FROM_DATABASE=Sky Lake Imaging Unit
+
+pci:v00008086d0000191E*
+ ID_MODEL_FROM_DATABASE=Sky Lake Integrated Graphics
+
+pci:v00008086d0000191F*
+ ID_MODEL_FROM_DATABASE=Sky Lake Host Bridge/DRAM Registers
+
+pci:v00008086d00001926*
+ ID_MODEL_FROM_DATABASE=Sky Lake Integrated Graphics
+
+pci:v00008086d00001932*
+ ID_MODEL_FROM_DATABASE=Sky Lake Integrated Graphics
+
+pci:v00008086d0000193B*
+ ID_MODEL_FROM_DATABASE=Sky Lake Integrated Graphics
+
 pci:v00008086d00001960*
  ID_MODEL_FROM_DATABASE=80960RP (i960RP) Microprocessor
 
@@ -61907,6 +62552,9 @@ pci:v00008086d00001C03sv00008086sd00007270*
 pci:v00008086d00001C04*
  ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family SATA RAID Controller
 
+pci:v00008086d00001C04sv0000103Csd00003118*
+ ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family SATA RAID Controller (Smart Array B110i SATA RAID Controller)
+
 pci:v00008086d00001C05*
  ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family SATA RAID Controller
 
@@ -62945,6 +63593,114 @@ pci:v00008086d00001F44*
 pci:v00008086d00001F45*
  ID_MODEL_FROM_DATABASE=Ethernet Connection I354 2.5 GbE Backplane
 
+pci:v00008086d00002014*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E Ubox Registers
+
+pci:v00008086d00002015*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E Ubox Registers
+
+pci:v00008086d00002016*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E Ubox Registers
+
+pci:v00008086d00002018*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E M2PCI Registers
+
+pci:v00008086d0000201A*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E Non-Transparent Bridge Registers
+
+pci:v00008086d0000201C*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E Non-Transparent Bridge Registers
+
+pci:v00008086d00002021*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E CBDMA Registers
+
+pci:v00008086d00002024*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E MM/Vt-d Configuration Registers
+
+pci:v00008086d00002030*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E PCI Express Root Port 1A
+
+pci:v00008086d00002031*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E PCI Express Root Port 1B
+
+pci:v00008086d00002032*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E PCI Express Root Port 1C
+
+pci:v00008086d00002033*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E PCI Express Root Port 1D
+
+pci:v00008086d00002035*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E RAS Configuration Registers
+
+pci:v00008086d0000204C*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E M3KTI Registers
+
+pci:v00008086d0000204D*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E M3KTI Registers
+
+pci:v00008086d0000204E*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E M3KTI Registers
+
+pci:v00008086d00002054*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E CHA Registers
+
+pci:v00008086d00002055*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E CHA Registers
+
+pci:v00008086d00002056*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E CHA Registers
+
+pci:v00008086d00002057*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E CHA Registers
+
+pci:v00008086d00002068*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E DDRIO Registers
+
+pci:v00008086d00002069*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E DDRIO Registers
+
+pci:v00008086d0000206A*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E IOxAPIC Configuration Registers
+
+pci:v00008086d0000206E*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E DDRIO Registers
+
+pci:v00008086d0000206F*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E DDRIO Registers
+
+pci:v00008086d00002078*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E PCU Registers
+
+pci:v00008086d0000207A*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E PCU Registers
+
+pci:v00008086d00002080*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E PCU Registers
+
+pci:v00008086d00002081*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E PCU Registers
+
+pci:v00008086d00002082*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E PCU Registers
+
+pci:v00008086d00002083*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E PCU Registers
+
+pci:v00008086d00002084*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E PCU Registers
+
+pci:v00008086d00002085*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E PCU Registers
+
+pci:v00008086d00002086*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E PCU Registers
+
+pci:v00008086d0000208D*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E CHA Registers
+
+pci:v00008086d0000208E*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E CHA Registers
+
 pci:v00008086d00002250*
  ID_MODEL_FROM_DATABASE=Xeon Phi coprocessor 5100 series
 
@@ -67419,16 +68175,16 @@ pci:v00008086d00002821*
  ID_MODEL_FROM_DATABASE=82801HR/HO/HH (ICH8R/DO/DH) 6 port SATA Controller [AHCI mode]
 
 pci:v00008086d00002822*
- ID_MODEL_FROM_DATABASE=82801 SATA Controller [RAID mode]
+ ID_MODEL_FROM_DATABASE=SATA Controller [RAID mode]
 
 pci:v00008086d00002822sv00001028sd0000020D*
- ID_MODEL_FROM_DATABASE=82801 SATA Controller [RAID mode] (Inspiron 530)
+ ID_MODEL_FROM_DATABASE=SATA Controller [RAID mode] (Inspiron 530)
 
 pci:v00008086d00002822sv0000103Csd00002A6F*
- ID_MODEL_FROM_DATABASE=82801 SATA Controller [RAID mode] (Asus IPIBL-LB Motherboard)
+ ID_MODEL_FROM_DATABASE=SATA Controller [RAID mode] (Asus IPIBL-LB Motherboard)
 
 pci:v00008086d00002823*
- ID_MODEL_FROM_DATABASE=Wellsburg sSATA RAID Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset sSATA Controller [RAID mode]
 
 pci:v00008086d00002824*
  ID_MODEL_FROM_DATABASE=82801HB (ICH8) 4 port SATA Controller [AHCI mode]
@@ -67449,7 +68205,7 @@ pci:v00008086d00002826*
  ID_MODEL_FROM_DATABASE=C600/X79 series chipset SATA RAID Controller
 
 pci:v00008086d00002827*
- ID_MODEL_FROM_DATABASE=Wellsburg sSATA RAID Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset sSATA Controller [RAID mode]
 
 pci:v00008086d00002828*
  ID_MODEL_FROM_DATABASE=82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [IDE mode]
@@ -69840,481 +70596,490 @@ pci:v00008086d00002E96*
  ID_MODEL_FROM_DATABASE=4 Series Chipset PT IDER Controller
 
 pci:v00008086d00002F00*
- ID_MODEL_FROM_DATABASE=Haswell-E DMI2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DMI2
 
 pci:v00008086d00002F01*
- ID_MODEL_FROM_DATABASE=Haswell-E PCI Express Root Port 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 PCI Express Root Port 0
 
 pci:v00008086d00002F02*
- ID_MODEL_FROM_DATABASE=Haswell-E PCI Express Root Port 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 PCI Express Root Port 1
 
 pci:v00008086d00002F03*
- ID_MODEL_FROM_DATABASE=Haswell-E PCI Express Root Port 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 PCI Express Root Port 1
 
 pci:v00008086d00002F04*
- ID_MODEL_FROM_DATABASE=Haswell-E PCI Express Root Port 2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 PCI Express Root Port 2
 
 pci:v00008086d00002F05*
- ID_MODEL_FROM_DATABASE=Haswell-E PCI Express Root Port 2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 PCI Express Root Port 2
 
 pci:v00008086d00002F06*
- ID_MODEL_FROM_DATABASE=Haswell-E PCI Express Root Port 2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 PCI Express Root Port 2
 
 pci:v00008086d00002F07*
- ID_MODEL_FROM_DATABASE=Haswell-E PCI Express Root Port 2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 PCI Express Root Port 2
 
 pci:v00008086d00002F08*
- ID_MODEL_FROM_DATABASE=Haswell-E PCI Express Root Port 3
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 PCI Express Root Port 3
 
 pci:v00008086d00002F09*
- ID_MODEL_FROM_DATABASE=Haswell-E PCI Express Root Port 3
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 PCI Express Root Port 3
 
 pci:v00008086d00002F0A*
- ID_MODEL_FROM_DATABASE=Haswell-E PCI Express Root Port 3
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 PCI Express Root Port 3
 
 pci:v00008086d00002F0B*
- ID_MODEL_FROM_DATABASE=Haswell-E PCI Express Root Port 3
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 PCI Express Root Port 3
 
 pci:v00008086d00002F10*
- ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 IIO Debug
 
 pci:v00008086d00002F11*
- ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 IIO Debug
 
 pci:v00008086d00002F12*
- ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 IIO Debug
 
 pci:v00008086d00002F13*
- ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 IIO Debug
 
 pci:v00008086d00002F14*
- ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 IIO Debug
 
 pci:v00008086d00002F15*
- ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 IIO Debug
 
 pci:v00008086d00002F16*
- ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 IIO Debug
 
 pci:v00008086d00002F17*
- ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 IIO Debug
 
 pci:v00008086d00002F18*
- ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 IIO Debug
 
 pci:v00008086d00002F19*
- ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 IIO Debug
 
 pci:v00008086d00002F1A*
- ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 IIO Debug
 
 pci:v00008086d00002F1B*
- ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 IIO Debug
 
 pci:v00008086d00002F1C*
- ID_MODEL_FROM_DATABASE=Haswell-E IIO Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 IIO Debug
 
 pci:v00008086d00002F1D*
- ID_MODEL_FROM_DATABASE=Haswell-E PCIe Ring Interface
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 PCIe Ring Interface
 
 pci:v00008086d00002F1E*
- ID_MODEL_FROM_DATABASE=Haswell-E Scratchpad & Semaphore Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Scratchpad & Semaphore Registers
 
 pci:v00008086d00002F1F*
- ID_MODEL_FROM_DATABASE=Haswell-E Scratchpad & Semaphore Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Scratchpad & Semaphore Registers
 
 pci:v00008086d00002F20*
- ID_MODEL_FROM_DATABASE=Haswell-E DMA Channel 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DMA Channel 0
 
 pci:v00008086d00002F21*
- ID_MODEL_FROM_DATABASE=Haswell-E DMA Channel 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DMA Channel 1
 
 pci:v00008086d00002F22*
- ID_MODEL_FROM_DATABASE=Haswell-E DMA Channel 2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DMA Channel 2
 
 pci:v00008086d00002F23*
- ID_MODEL_FROM_DATABASE=Haswell-E DMA Channel 3
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DMA Channel 3
 
 pci:v00008086d00002F24*
- ID_MODEL_FROM_DATABASE=Haswell-E DMA Channel 4
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DMA Channel 4
 
 pci:v00008086d00002F25*
- ID_MODEL_FROM_DATABASE=Haswell-E DMA Channel 5
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DMA Channel 5
 
 pci:v00008086d00002F26*
- ID_MODEL_FROM_DATABASE=Haswell-E DMA Channel 6
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DMA Channel 6
 
 pci:v00008086d00002F27*
- ID_MODEL_FROM_DATABASE=Haswell-E DMA Channel 7
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DMA Channel 7
 
 pci:v00008086d00002F28*
- ID_MODEL_FROM_DATABASE=Haswell-E Address Map, VTd_Misc, System Management
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Address Map, VTd_Misc, System Management
 
 pci:v00008086d00002F29*
- ID_MODEL_FROM_DATABASE=Haswell-E Hot Plug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Hot Plug
 
 pci:v00008086d00002F2A*
- ID_MODEL_FROM_DATABASE=Haswell-E RAS, Control Status and Global Errors
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 RAS, Control Status and Global Errors
 
 pci:v00008086d00002F2C*
- ID_MODEL_FROM_DATABASE=Haswell-E I/O Apic
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 I/O APIC
 
 pci:v00008086d00002F2E*
- ID_MODEL_FROM_DATABASE=Haswell-E RAID 5/6
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 RAID 5/6
 
 pci:v00008086d00002F2F*
- ID_MODEL_FROM_DATABASE=Haswell-E RAID 5/6
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 RAID 5/6
 
 pci:v00008086d00002F30*
- ID_MODEL_FROM_DATABASE=Haswell-E Home Agent 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Home Agent 0
 
 pci:v00008086d00002F32*
- ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 QPI Link 0
 
 pci:v00008086d00002F33*
- ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 QPI Link 1
 
 pci:v00008086d00002F34*
- ID_MODEL_FROM_DATABASE=Haswell-E PCIe Ring Interface
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 PCIe Ring Interface
 
 pci:v00008086d00002F36*
- ID_MODEL_FROM_DATABASE=Haswell-E R3 QPI Link 0 & 1 Monitoring
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 R3 QPI Link 0 & 1 Monitoring
 
 pci:v00008086d00002F37*
- ID_MODEL_FROM_DATABASE=Haswell-E R3 QPI Link 0 & 1 Monitoring
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 R3 QPI Link 0 & 1 Monitoring
 
 pci:v00008086d00002F38*
- ID_MODEL_FROM_DATABASE=Haswell-E Home Agent 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Home Agent 1
 
 pci:v00008086d00002F39*
- ID_MODEL_FROM_DATABASE=Haswell-E I/O Performance Monitoring
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 I/O Performance Monitoring
 
 pci:v00008086d00002F3A*
- ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 QPI Link 2
 
 pci:v00008086d00002F3E*
- ID_MODEL_FROM_DATABASE=Haswell-E R3 QPI Link 2 Monitoring
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 R3 QPI Link 2 Monitoring
 
 pci:v00008086d00002F3F*
- ID_MODEL_FROM_DATABASE=Haswell-E R3 QPI Link 2 Monitoring
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 R3 QPI Link 2 Monitoring
 
 pci:v00008086d00002F40*
- ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 QPI Link 2
 
 pci:v00008086d00002F41*
- ID_MODEL_FROM_DATABASE=Haswell-E R3 QPI Link 2 Monitoring
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 R3 QPI Link 2 Monitoring
 
 pci:v00008086d00002F43*
- ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 2
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 QPI Link 2
 
 pci:v00008086d00002F45*
- ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 2 Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 QPI Link 2 Debug
 
 pci:v00008086d00002F46*
- ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 2 Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 QPI Link 2 Debug
 
 pci:v00008086d00002F47*
- ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 2 Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 QPI Link 2 Debug
 
 pci:v00008086d00002F60*
- ID_MODEL_FROM_DATABASE=Haswell-E Home Agent 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Home Agent 1
 
 pci:v00008086d00002F68*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 1 Target Address, Thermal & RAS Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 1 Target Address, Thermal & RAS Registers
 
 pci:v00008086d00002F6A*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 1 Channel Target Address Decoder
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder
 
 pci:v00008086d00002F6B*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 1 Channel Target Address Decoder
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder
 
 pci:v00008086d00002F6C*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 1 Channel Target Address Decoder
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder
 
 pci:v00008086d00002F6D*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 1 Channel Target Address Decoder
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder
 
 pci:v00008086d00002F6E*
- ID_MODEL_FROM_DATABASE=Haswell-E DDRIO Channel 2/3 Broadcast
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DDRIO Channel 2/3 Broadcast
 
 pci:v00008086d00002F6F*
- ID_MODEL_FROM_DATABASE=Haswell-E DDRIO Global Broadcast
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DDRIO Global Broadcast
 
 pci:v00008086d00002F70*
- ID_MODEL_FROM_DATABASE=Haswell-E Home Agent 0 Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Home Agent 0 Debug
 
 pci:v00008086d00002F71*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 0 Target Address, Thermal & RAS Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 0 Target Address, Thermal & RAS Registers
 
 pci:v00008086d00002F76*
- ID_MODEL_FROM_DATABASE=Haswell-E E3 QPI Link Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 E3 QPI Link Debug
 
 pci:v00008086d00002F78*
- ID_MODEL_FROM_DATABASE=Haswell-E Home Agent 1 Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Home Agent 1 Debug
 
 pci:v00008086d00002F79*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 1 Target Address, Thermal & RAS Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 1 Target Address, Thermal & RAS Registers
 
 pci:v00008086d00002F7D*
- ID_MODEL_FROM_DATABASE=Haswell-E Scratchpad & Semaphore Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Scratchpad & Semaphore Registers
 
 pci:v00008086d00002F7E*
- ID_MODEL_FROM_DATABASE=Haswell-E E3 QPI Link Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 E3 QPI Link Debug
 
 pci:v00008086d00002F80*
- ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 QPI Link 0
 
 pci:v00008086d00002F81*
- ID_MODEL_FROM_DATABASE=Haswell-E R3 QPI Link 0 & 1 Monitoring
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 R3 QPI Link 0 & 1 Monitoring
 
 pci:v00008086d00002F83*
- ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 QPI Link 0
 
 pci:v00008086d00002F85*
- ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 0 Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 QPI Link 0 Debug
 
 pci:v00008086d00002F86*
- ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 0 Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 QPI Link 0 Debug
 
 pci:v00008086d00002F87*
- ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 0 Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 QPI Link 0 Debug
 
 pci:v00008086d00002F88*
- ID_MODEL_FROM_DATABASE=Haswell-E VCU
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 VCU
 
 pci:v00008086d00002F8A*
- ID_MODEL_FROM_DATABASE=Haswell-E VCU
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 VCU
 
 pci:v00008086d00002F90*
- ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 QPI Link 1
 
 pci:v00008086d00002F93*
- ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 QPI Link 1
 
 pci:v00008086d00002F95*
- ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 1 Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 QPI Link 1 Debug
 
 pci:v00008086d00002F96*
- ID_MODEL_FROM_DATABASE=Haswell-E QPI Link 1 Debug
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 QPI Link 1 Debug
 
 pci:v00008086d00002F98*
- ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Power Control Unit
 
 pci:v00008086d00002F99*
- ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Power Control Unit
 
 pci:v00008086d00002F9A*
- ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Power Control Unit
 
 pci:v00008086d00002F9C*
- ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Power Control Unit
 
 pci:v00008086d00002FA0*
- ID_MODEL_FROM_DATABASE=Haswell-E Home Agent 0
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Home Agent 0
 
 pci:v00008086d00002FA8*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 0 Target Address, Thermal & RAS Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 0 Target Address, Thermal & RAS Registers
 
 pci:v00008086d00002FAA*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 0 Channel Target Address Decoder
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder
 
 pci:v00008086d00002FAB*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 0 Channel Target Address Decoder
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder
 
 pci:v00008086d00002FAC*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 0 Channel Target Address Decoder
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder
 
 pci:v00008086d00002FAD*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 0 Channel Target Address Decoder
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder
 
 pci:v00008086d00002FAE*
- ID_MODEL_FROM_DATABASE=Haswell-E DDRIO Channel 0/1 Broadcast
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DDRIO Channel 0/1 Broadcast
 
 pci:v00008086d00002FAF*
- ID_MODEL_FROM_DATABASE=Haswell-E DDRIO Global Broadcast
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DDRIO Global Broadcast
 
 pci:v00008086d00002FB0*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 0 Channel 0 Thermal Control
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 0 Thermal Control
 
 pci:v00008086d00002FB1*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 0 Channel 1 Thermal Control
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 1 Thermal Control
 
 pci:v00008086d00002FB2*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 0 Channel 0 ERROR Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 0 ERROR Registers
 
 pci:v00008086d00002FB3*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 0 Channel 1 ERROR Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 1 ERROR Registers
 
 pci:v00008086d00002FB4*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 0 Channel 2 Thermal Control
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 2 Thermal Control
 
 pci:v00008086d00002FB5*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 0 Channel 3 Thermal Control
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 3 Thermal Control
 
 pci:v00008086d00002FB6*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 0 Channel 2 ERROR Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 2 ERROR Registers
 
 pci:v00008086d00002FB7*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 0 Channel 3 ERROR Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 3 ERROR Registers
 
 pci:v00008086d00002FB8*
- ID_MODEL_FROM_DATABASE=Haswell-E DDRIO (VMSE) 2 & 3
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3
 
 pci:v00008086d00002FB9*
- ID_MODEL_FROM_DATABASE=Haswell-E DDRIO (VMSE) 2 & 3
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3
 
 pci:v00008086d00002FBA*
- ID_MODEL_FROM_DATABASE=Haswell-E DDRIO (VMSE) 2 & 3
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3
 
 pci:v00008086d00002FBB*
- ID_MODEL_FROM_DATABASE=Haswell-E DDRIO (VMSE) 2 & 3
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3
 
 pci:v00008086d00002FBC*
- ID_MODEL_FROM_DATABASE=Haswell-E DDRIO (VMSE) 0 & 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1
 
 pci:v00008086d00002FBD*
- ID_MODEL_FROM_DATABASE=Haswell-E DDRIO (VMSE) 0 & 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1
 
 pci:v00008086d00002FBE*
- ID_MODEL_FROM_DATABASE=Haswell-E DDRIO (VMSE) 0 & 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1
 
 pci:v00008086d00002FBF*
- ID_MODEL_FROM_DATABASE=Haswell-E DDRIO (VMSE) 0 & 1
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1
 
 pci:v00008086d00002FC0*
- ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Power Control Unit
 
 pci:v00008086d00002FC1*
- ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Power Control Unit
 
 pci:v00008086d00002FC2*
- ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Power Control Unit
 
 pci:v00008086d00002FC3*
- ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Power Control Unit
 
 pci:v00008086d00002FC4*
- ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Power Control Unit
 
 pci:v00008086d00002FC5*
- ID_MODEL_FROM_DATABASE=Haswell-E Power Control Unit
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Power Control Unit
 
 pci:v00008086d00002FD0*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 1 Channel 0 Thermal Control
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 0 Thermal Control
 
 pci:v00008086d00002FD1*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 1 Channel 1 Thermal Control
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 1 Thermal Control
 
 pci:v00008086d00002FD2*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 1 Channel 0 ERROR Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 0 ERROR Registers
 
 pci:v00008086d00002FD3*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 1 Channel 1 ERROR Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 1 ERROR Registers
 
 pci:v00008086d00002FD4*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 1 Channel 2 Thermal Control
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 2 Thermal Control
 
 pci:v00008086d00002FD5*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 1 Channel 3 Thermal Control
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 3 Thermal Control
 
 pci:v00008086d00002FD6*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 1 Channel 2 ERROR Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 2 ERROR Registers
 
 pci:v00008086d00002FD7*
- ID_MODEL_FROM_DATABASE=Haswell-E Integrated Memory Controller 1 Channel 3 ERROR Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 3 ERROR Registers
 
 pci:v00008086d00002FE0*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FE1*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FE2*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FE3*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FE4*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FE5*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FE6*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FE7*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FE8*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FE9*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FEA*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FEB*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FEC*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FED*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FEE*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FEF*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FF0*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FF1*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FF2*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FF3*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FF4*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FF5*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FF6*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FF7*
- ID_MODEL_FROM_DATABASE=Haswell-E Unicast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Unicast Registers
 
 pci:v00008086d00002FF8*
- ID_MODEL_FROM_DATABASE=Haswell-E Buffered Ring Agent
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Buffered Ring Agent
 
 pci:v00008086d00002FF9*
- ID_MODEL_FROM_DATABASE=Haswell-E Buffered Ring Agent
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Buffered Ring Agent
 
 pci:v00008086d00002FFA*
- ID_MODEL_FROM_DATABASE=Haswell-E Buffered Ring Agent
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Buffered Ring Agent
 
 pci:v00008086d00002FFB*
- ID_MODEL_FROM_DATABASE=Haswell-E Buffered Ring Agent
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 Buffered Ring Agent
 
 pci:v00008086d00002FFC*
- ID_MODEL_FROM_DATABASE=Haswell-E System Address Decoder & Broadcast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 System Address Decoder & Broadcast Registers
 
 pci:v00008086d00002FFD*
- ID_MODEL_FROM_DATABASE=Haswell-E System Address Decoder & Broadcast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 System Address Decoder & Broadcast Registers
 
 pci:v00008086d00002FFE*
- ID_MODEL_FROM_DATABASE=Haswell-E System Address Decoder & Broadcast Registers
+ ID_MODEL_FROM_DATABASE=Xeon E5 v3/Core i7 System Address Decoder & Broadcast Registers
+
+pci:v00008086d00003165*
+ ID_MODEL_FROM_DATABASE=Wireless 3165
+
+pci:v00008086d00003165sv00008086sd00004010*
+ ID_MODEL_FROM_DATABASE=Wireless 3165 (Dual Band Wireless AC 3165)
+
+pci:v00008086d00003165sv00008086sd00004210*
+ ID_MODEL_FROM_DATABASE=Wireless 3165 (Dual Band Wireless AC 3165)
 
 pci:v00008086d00003200*
  ID_MODEL_FROM_DATABASE=GD31244 PCI-X SATA HBA
@@ -74049,190 +74814,190 @@ pci:v00008086d00008CC6*
  ID_MODEL_FROM_DATABASE=9 Series Chipset Family H97 Controller
 
 pci:v00008086d00008D00*
- ID_MODEL_FROM_DATABASE=Wellsburg 4-port SATA Controller [IDE mode]
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset 4-port SATA Controller [IDE mode]
 
 pci:v00008086d00008D02*
- ID_MODEL_FROM_DATABASE=Wellsburg 6-Port SATA Controller [AHCI mode]
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset 6-Port SATA Controller [AHCI mode]
 
 pci:v00008086d00008D04*
- ID_MODEL_FROM_DATABASE=Wellsburg SATA Controller [RAID mode]
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset SATA Controller [RAID mode]
 
 pci:v00008086d00008D06*
- ID_MODEL_FROM_DATABASE=Wellsburg SATA Controller [RAID mode]
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset SATA Controller [RAID mode]
 
 pci:v00008086d00008D06sv000017AAsd00001031*
- ID_MODEL_FROM_DATABASE=Wellsburg SATA Controller [RAID mode] (ThinkServer RAID 110i)
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset SATA Controller [RAID mode] (ThinkServer RAID 110i)
 
 pci:v00008086d00008D08*
- ID_MODEL_FROM_DATABASE=Wellsburg 2-port SATA Controller [IDE mode]
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset 2-port SATA Controller [IDE mode]
 
 pci:v00008086d00008D0E*
- ID_MODEL_FROM_DATABASE=Wellsburg SATA Controller [RAID mode]
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset SATA Controller [RAID mode]
 
 pci:v00008086d00008D10*
- ID_MODEL_FROM_DATABASE=Wellsburg PCI Express Root Port #1
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset PCI Express Root Port #1
 
 pci:v00008086d00008D11*
- ID_MODEL_FROM_DATABASE=Wellsburg PCI Express Root Port #1
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset PCI Express Root Port #1
 
 pci:v00008086d00008D12*
- ID_MODEL_FROM_DATABASE=Wellsburg PCI Express Root Port #2
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset PCI Express Root Port #2
 
 pci:v00008086d00008D13*
- ID_MODEL_FROM_DATABASE=Wellsburg PCI Express Root Port #2
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset PCI Express Root Port #2
 
 pci:v00008086d00008D14*
- ID_MODEL_FROM_DATABASE=Wellsburg PCI Express Root Port #3
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset PCI Express Root Port #3
 
 pci:v00008086d00008D15*
- ID_MODEL_FROM_DATABASE=Wellsburg PCI Express Root Port #3
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset PCI Express Root Port #3
 
 pci:v00008086d00008D16*
- ID_MODEL_FROM_DATABASE=Wellsburg PCI Express Root Port #4
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset PCI Express Root Port #4
 
 pci:v00008086d00008D17*
- ID_MODEL_FROM_DATABASE=Wellsburg PCI Express Root Port #4
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset PCI Express Root Port #4
 
 pci:v00008086d00008D18*
- ID_MODEL_FROM_DATABASE=Wellsburg PCI Express Root Port #5
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset PCI Express Root Port #5
 
 pci:v00008086d00008D19*
- ID_MODEL_FROM_DATABASE=Wellsburg PCI Express Root Port #5
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset PCI Express Root Port #5
 
 pci:v00008086d00008D1A*
- ID_MODEL_FROM_DATABASE=Wellsburg PCI Express Root Port #6
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset PCI Express Root Port #6
 
 pci:v00008086d00008D1B*
- ID_MODEL_FROM_DATABASE=Wellsburg PCI Express Root Port #6
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset PCI Express Root Port #6
 
 pci:v00008086d00008D1C*
- ID_MODEL_FROM_DATABASE=Wellsburg PCI Express Root Port #7
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset PCI Express Root Port #7
 
 pci:v00008086d00008D1D*
- ID_MODEL_FROM_DATABASE=Wellsburg PCI Express Root Port #7
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset PCI Express Root Port #7
 
 pci:v00008086d00008D1E*
- ID_MODEL_FROM_DATABASE=Wellsburg PCI Express Root Port #8
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset PCI Express Root Port #8
 
 pci:v00008086d00008D1F*
- ID_MODEL_FROM_DATABASE=Wellsburg PCI Express Root Port #8
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset PCI Express Root Port #8
 
 pci:v00008086d00008D20*
- ID_MODEL_FROM_DATABASE=Wellsburg HD Audio Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset HD Audio Controller
 
 pci:v00008086d00008D21*
- ID_MODEL_FROM_DATABASE=Wellsburg HD Audio Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset HD Audio Controller
 
 pci:v00008086d00008D22*
- ID_MODEL_FROM_DATABASE=Wellsburg SMBus Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset SMBus Controller
 
 pci:v00008086d00008D24*
- ID_MODEL_FROM_DATABASE=Wellsburg Thermal Subsystem
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset Thermal Subsystem
 
 pci:v00008086d00008D26*
- ID_MODEL_FROM_DATABASE=Wellsburg USB Enhanced Host Controller #1
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset USB Enhanced Host Controller #1
 
 pci:v00008086d00008D2D*
- ID_MODEL_FROM_DATABASE=Wellsburg USB Enhanced Host Controller #2
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset USB Enhanced Host Controller #2
 
 pci:v00008086d00008D31*
- ID_MODEL_FROM_DATABASE=Wellsburg USB xHCI Host Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset USB xHCI Host Controller
 
 pci:v00008086d00008D33*
- ID_MODEL_FROM_DATABASE=Wellsburg LAN Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset LAN Controller
 
 pci:v00008086d00008D34*
- ID_MODEL_FROM_DATABASE=Wellsburg NAND Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset NAND Controller
 
 pci:v00008086d00008D3A*
- ID_MODEL_FROM_DATABASE=Wellsburg MEI Controller #1
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset MEI Controller #1
 
 pci:v00008086d00008D3B*
- ID_MODEL_FROM_DATABASE=Wellsburg MEI Controller #2
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset MEI Controller #2
 
 pci:v00008086d00008D3C*
- ID_MODEL_FROM_DATABASE=Wellsburg IDE-r Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset IDE-r Controller
 
 pci:v00008086d00008D3D*
- ID_MODEL_FROM_DATABASE=Wellsburg KT Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset KT Controller
 
 pci:v00008086d00008D40*
- ID_MODEL_FROM_DATABASE=Wellsburg LPC Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset LPC Controller
 
 pci:v00008086d00008D41*
- ID_MODEL_FROM_DATABASE=Wellsburg LPC Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset LPC Controller
 
 pci:v00008086d00008D42*
- ID_MODEL_FROM_DATABASE=Wellsburg LPC Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset LPC Controller
 
 pci:v00008086d00008D43*
- ID_MODEL_FROM_DATABASE=Wellsburg LPC Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset LPC Controller
 
 pci:v00008086d00008D44*
- ID_MODEL_FROM_DATABASE=Wellsburg LPC Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset LPC Controller
 
 pci:v00008086d00008D45*
- ID_MODEL_FROM_DATABASE=Wellsburg LPC Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset LPC Controller
 
 pci:v00008086d00008D46*
- ID_MODEL_FROM_DATABASE=Wellsburg LPC Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset LPC Controller
 
 pci:v00008086d00008D47*
- ID_MODEL_FROM_DATABASE=Wellsburg LPC Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset LPC Controller
 
 pci:v00008086d00008D48*
- ID_MODEL_FROM_DATABASE=Wellsburg LPC Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset LPC Controller
 
 pci:v00008086d00008D49*
- ID_MODEL_FROM_DATABASE=Wellsburg LPC Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset LPC Controller
 
 pci:v00008086d00008D4A*
- ID_MODEL_FROM_DATABASE=Wellsburg LPC Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset LPC Controller
 
 pci:v00008086d00008D4B*
- ID_MODEL_FROM_DATABASE=Wellsburg LPC Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset LPC Controller
 
 pci:v00008086d00008D4C*
- ID_MODEL_FROM_DATABASE=Wellsburg LPC Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset LPC Controller
 
 pci:v00008086d00008D4D*
- ID_MODEL_FROM_DATABASE=Wellsburg LPC Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset LPC Controller
 
 pci:v00008086d00008D4E*
- ID_MODEL_FROM_DATABASE=Wellsburg LPC Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset LPC Controller
 
 pci:v00008086d00008D4F*
- ID_MODEL_FROM_DATABASE=Wellsburg LPC Controller
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset LPC Controller
 
 pci:v00008086d00008D60*
- ID_MODEL_FROM_DATABASE=Wellsburg sSATA Controller [IDE mode]
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset sSATA Controller [IDE mode]
 
 pci:v00008086d00008D62*
- ID_MODEL_FROM_DATABASE=Wellsburg sSATA Controller [AHCI mode]
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset sSATA Controller [AHCI mode]
 
 pci:v00008086d00008D64*
- ID_MODEL_FROM_DATABASE=Wellsburg sSATA Controller [RAID mode]
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset sSATA Controller [RAID mode]
 
 pci:v00008086d00008D66*
- ID_MODEL_FROM_DATABASE=Wellsburg sSATA Controller [RAID mode]
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset sSATA Controller [RAID mode]
 
 pci:v00008086d00008D68*
- ID_MODEL_FROM_DATABASE=Wellsburg sSATA Controller [IDE mode]
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset sSATA Controller [IDE mode]
 
 pci:v00008086d00008D6E*
- ID_MODEL_FROM_DATABASE=Wellsburg sSATA Controller [RAID mode]
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset sSATA Controller [RAID mode]
 
 pci:v00008086d00008D7C*
- ID_MODEL_FROM_DATABASE=Wellsburg SPSR
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset SPSR
 
 pci:v00008086d00008D7D*
- ID_MODEL_FROM_DATABASE=Wellsburg MS SMBus 0
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset MS SMBus 0
 
 pci:v00008086d00008D7E*
- ID_MODEL_FROM_DATABASE=Wellsburg MS SMBus 1
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset MS SMBus 1
 
 pci:v00008086d00008D7F*
- ID_MODEL_FROM_DATABASE=Wellsburg MS SMBus 2
+ ID_MODEL_FROM_DATABASE=C610/X99 series chipset MS SMBus 2
 
 pci:v00008086d00009000*
  ID_MODEL_FROM_DATABASE=IXP2000 Family Network Processor
@@ -74618,6 +75383,249 @@ pci:v00008086d0000A012sv0000144Dsd0000C072*
 pci:v00008086d0000A013*
  ID_MODEL_FROM_DATABASE=Atom Processor D4xx/D5xx/N4xx/N5xx CHAPS counter
 
+pci:v00008086d0000A103*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H SATA Controller [AHCI mode]
+
+pci:v00008086d0000A105*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H SATA Controller [RAID mode]
+
+pci:v00008086d0000A107*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H SATA Controller [RAID mode]
+
+pci:v00008086d0000A10F*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H SATA Controller [RAID mode]
+
+pci:v00008086d0000A110*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Express Root Port #1
+
+pci:v00008086d0000A111*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Express Root Port #2
+
+pci:v00008086d0000A112*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Express Root Port #3
+
+pci:v00008086d0000A113*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Express Root Port #4
+
+pci:v00008086d0000A114*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Express Root Port #5
+
+pci:v00008086d0000A115*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Express Root Port #6
+
+pci:v00008086d0000A116*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Express Root Port #7
+
+pci:v00008086d0000A117*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Express Root Port #8
+
+pci:v00008086d0000A118*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Express Root Port #9
+
+pci:v00008086d0000A119*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Express Root Port #10
+
+pci:v00008086d0000A11A*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Express Root Port #11
+
+pci:v00008086d0000A11B*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Express Root Port #12
+
+pci:v00008086d0000A11C*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Express Root Port #13
+
+pci:v00008086d0000A11D*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Express Root Port #14
+
+pci:v00008086d0000A11E*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Express Root Port #15
+
+pci:v00008086d0000A11F*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Express Root Port #16
+
+pci:v00008086d0000A120*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H P2SB
+
+pci:v00008086d0000A121*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PMC
+
+pci:v00008086d0000A122*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H cAVS
+
+pci:v00008086d0000A123*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H SMBus
+
+pci:v00008086d0000A124*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H SPI Controller
+
+pci:v00008086d0000A125*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H Gigabit Ethernet Controller
+
+pci:v00008086d0000A126*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H Northpeak
+
+pci:v00008086d0000A127*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPSS UART #0
+
+pci:v00008086d0000A128*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPSS UART #1
+
+pci:v00008086d0000A129*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPSS SPI #0
+
+pci:v00008086d0000A12A*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPSS SPI #1
+
+pci:v00008086d0000A12F*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H USB 3.0 xHCI Controller
+
+pci:v00008086d0000A130*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H USB Device Controller (OTG)
+
+pci:v00008086d0000A131*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H Thermal subsystem
+
+pci:v00008086d0000A133*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H Northpeak ACPI Function
+
+pci:v00008086d0000A135*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H Integrated Sensor Hub
+
+pci:v00008086d0000A13A*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H CSME HECI #1
+
+pci:v00008086d0000A13B*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H CSME HECI #2
+
+pci:v00008086d0000A13C*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H CSME IDE Redirection
+
+pci:v00008086d0000A13D*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H KT Redirection
+
+pci:v00008086d0000A13E*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H CSME HECI #3
+
+pci:v00008086d0000A140*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A141*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A142*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A143*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A144*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A145*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A146*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A147*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A148*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A149*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A14A*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A14B*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A14C*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A14D*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A14E*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A14F*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A150*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A151*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A152*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A153*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A154*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A155*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A156*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A157*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A158*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A159*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A15A*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A15B*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A15C*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A15D*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A15E*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A15F*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPC Controller
+
+pci:v00008086d0000A160*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPSS I2C Controller #0
+
+pci:v00008086d0000A161*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPSS I2C Controller #1
+
+pci:v00008086d0000A166*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H LPSS UART Controller #2
+
+pci:v00008086d0000A167*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Root Port #17
+
+pci:v00008086d0000A168*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Root Port #18
+
+pci:v00008086d0000A169*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Root Port #19
+
+pci:v00008086d0000A16A*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H PCI Root Port #20
+
+pci:v00008086d0000A170*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-H HD Audio
+
 pci:v00008086d0000A620*
  ID_MODEL_FROM_DATABASE=6400/6402 Advanced Memory Buffer (AMB)
 
@@ -76163,6 +77171,9 @@ pci:v0000BDBDd0000A11D*
 pci:v0000BDBDd0000A11E*
  ID_MODEL_FROM_DATABASE=DeckLink Optical Fibre
 
+pci:v0000BDBDd0000A120*
+ ID_MODEL_FROM_DATABASE=Decklink Studio 2
+
 pci:v0000BDBDd0000A121*
  ID_MODEL_FROM_DATABASE=DeckLink HD Extreme 3D/3D+
 
@@ -76196,6 +77207,9 @@ pci:v0000BDBDd0000A130*
 pci:v0000BDBDd0000A132*
  ID_MODEL_FROM_DATABASE=UltraStudio 4K
 
+pci:v0000BDBDd0000A138*
+ ID_MODEL_FROM_DATABASE=Decklink SDI 4K
+
 pci:v0000C001*
  ID_VENDOR_FROM_DATABASE=TSI Telsys
 
@@ -76289,6 +77303,9 @@ pci:v0000D161d00001220*
 pci:v0000D161d00001405*
  ID_MODEL_FROM_DATABASE=Wildcard TE405P/TE407P quad-span T1/E1/J1 card 5.0V (u1)
 
+pci:v0000D161d00001410*
+ ID_MODEL_FROM_DATABASE=Wildcard TE410P quad-span T1/E1/J1 card 3.3V (5th Gen)
+
 pci:v0000D161d00001420*
  ID_MODEL_FROM_DATABASE=Wildcard TE420 quad-span T1/E1/J1 card 3.3V (PCI-Express) (5th gen)
 
@@ -76760,9 +77777,21 @@ pci:v0000EACEd00008400*
 pci:v0000EACEd00008500*
  ID_MODEL_FROM_DATABASE=DAG 8.5I Infiniband x4 DDR
 
+pci:v0000EACEd00009200*
+ ID_MODEL_FROM_DATABASE=DAG 9.2SX2 10G Ethernet
+
 pci:v0000EACEd0000920E*
  ID_MODEL_FROM_DATABASE=DAG 9.2X2 10G Ethernet
 
+pci:v0000EACEd0000A120*
+ ID_MODEL_FROM_DATABASE=DAG 10X2-P 10G Ethernet
+
+pci:v0000EACEd0000A12E*
+ ID_MODEL_FROM_DATABASE=DAG 10X2-S 10G Ethernet
+
+pci:v0000EACEd0000A140*
+ ID_MODEL_FROM_DATABASE=DAG 10X4-P 10G Ethernet
+
 pci:v0000EC80*
  ID_VENDOR_FROM_DATABASE=Belkin Corporation
 
@@ -76808,6 +77837,9 @@ pci:v0000F1D0d0000CAFE*
 pci:v0000F1D0d0000CFEE*
  ID_MODEL_FROM_DATABASE=Xena LS/SD-22-DA/SD-DA
 
+pci:v0000F1D0d0000DAFF*
+ ID_MODEL_FROM_DATABASE=KONA LHi
+
 pci:v0000F1D0d0000DCAF*
  ID_MODEL_FROM_DATABASE=Kona HD
 
diff --git a/hwdb/20-usb-vendor-model.hwdb b/hwdb/20-usb-vendor-model.hwdb
index ea1c3e3..9879106 100644
--- a/hwdb/20-usb-vendor-model.hwdb
+++ b/hwdb/20-usb-vendor-model.hwdb
@@ -47,6 +47,12 @@ usb:v0105*
 usb:v0105p145F*
  ID_MODEL_FROM_DATABASE=NW-3100 802.11b/g 54Mbps Wireless Network Adapter [zd1211]
 
+usb:v0127*
+ ID_VENDOR_FROM_DATABASE=IBP
+
+usb:v0127p0002*
+ ID_MODEL_FROM_DATABASE=HDM Interface
+
 usb:v0145*
  ID_VENDOR_FROM_DATABASE=Unknown
 
@@ -500,6 +506,9 @@ usb:v03F0p0217*
 usb:v03F0p0218*
  ID_MODEL_FROM_DATABASE=APOLLO P2500/2600
 
+usb:v03F0p0241*
+ ID_MODEL_FROM_DATABASE=Link-5 micro dongle
+
 usb:v03F0p0304*
  ID_MODEL_FROM_DATABASE=DeskJet 810c/812c
 
@@ -689,6 +698,9 @@ usb:v03F0p0F12*
 usb:v03F0p0F17*
  ID_MODEL_FROM_DATABASE=LaserJet 1150
 
+usb:v03F0p0F2A*
+ ID_MODEL_FROM_DATABASE=LaserJet 400 color M451dn
+
 usb:v03F0p1001*
  ID_MODEL_FROM_DATABASE=Photo Scanner 1000
 
@@ -1079,6 +1091,9 @@ usb:v03F0p2717*
 usb:v03F0p2724*
  ID_MODEL_FROM_DATABASE=Magnetic Stripe Reader IDRA-334133-HP
 
+usb:v03F0p2805*
+ ID_MODEL_FROM_DATABASE=Scanjet G2710
+
 usb:v03F0p2811*
  ID_MODEL_FROM_DATABASE=PSC-2100
 
@@ -1247,6 +1262,9 @@ usb:v03F0p3817*
 usb:v03F0p3902*
  ID_MODEL_FROM_DATABASE=PhotoSmart 130
 
+usb:v03F0p3912*
+ ID_MODEL_FROM_DATABASE=Officejet Pro 8500
+
 usb:v03F0p3A02*
  ID_MODEL_FROM_DATABASE=PhotoSmart 7150
 
@@ -1835,6 +1853,9 @@ usb:v03F0pC002*
 usb:v03F0pC102*
  ID_MODEL_FROM_DATABASE=PhotoSmart 8000 series
 
+usb:v03F0pC111*
+ ID_MODEL_FROM_DATABASE=Deskjet 1510
+
 usb:v03F0pC202*
  ID_MODEL_FROM_DATABASE=PhotoSmart 8200 series
 
@@ -2046,7 +2067,7 @@ usb:v0403*
  ID_VENDOR_FROM_DATABASE=Future Technology Devices International, Ltd
 
 usb:v0403p0000*
- ID_MODEL_FROM_DATABASE=H4SMK 7 Port Hub
+ ID_MODEL_FROM_DATABASE=H4SMK 7 Port Hub / Bricked Counterfeit FT232 Serial (UART) IC
 
 usb:v0403p0232*
  ID_MODEL_FROM_DATABASE=Serial Converter
@@ -2153,6 +2174,9 @@ usb:v0403pA6D0*
 usb:v0403pA951*
  ID_MODEL_FROM_DATABASE=HCP HIT GSM/GPRS modem [Cinterion MC55i]
 
+usb:v0403pA9A0*
+ ID_MODEL_FROM_DATABASE=FT2232D - Dual UART/FIFO IC - FTDI
+
 usb:v0403pABB8*
  ID_MODEL_FROM_DATABASE=Lego Mindstorms NXTCam
 
@@ -2264,6 +2288,30 @@ usb:v0403pD012*
 usb:v0403pD013*
  ID_MODEL_FROM_DATABASE=SCS DRAGON 1
 
+usb:v0403pD388*
+ ID_MODEL_FROM_DATABASE=Xsens converter
+
+usb:v0403pD389*
+ ID_MODEL_FROM_DATABASE=Xsens Wireless Receiver
+
+usb:v0403pD38A*
+ ID_MODEL_FROM_DATABASE=Xsens serial converter
+
+usb:v0403pD38B*
+ ID_MODEL_FROM_DATABASE=Xsens serial converter
+
+usb:v0403pD38C*
+ ID_MODEL_FROM_DATABASE=Xsens Wireless Receiver
+
+usb:v0403pD38D*
+ ID_MODEL_FROM_DATABASE=Xsens Awinda Station
+
+usb:v0403pD38E*
+ ID_MODEL_FROM_DATABASE=Xsens serial converter
+
+usb:v0403pD38F*
+ ID_MODEL_FROM_DATABASE=Xsens serial converter
+
 usb:v0403pD491*
  ID_MODEL_FROM_DATABASE=Zolix Omni 1509 monochromator
 
@@ -2285,6 +2333,9 @@ usb:v0403pD9A9*
 usb:v0403pD9AA*
  ID_MODEL_FROM_DATABASE=Actisense NGT-1 NMEA2000 PC Interface
 
+usb:v0403pDAF4*
+ ID_MODEL_FROM_DATABASE=Qundis Serial Infrared Head
+
 usb:v0403pE0D0*
  ID_MODEL_FROM_DATABASE=Total Phase Aardvark I2C/SPI Host Adapter
 
@@ -2324,6 +2375,9 @@ usb:v0403pE8DC*
 usb:v0403pEA90*
  ID_MODEL_FROM_DATABASE=Eclo 1-Wire Adapter
 
+usb:v0403pECD9*
+ ID_MODEL_FROM_DATABASE=miControl miCan-Stick
+
 usb:v0403pED71*
  ID_MODEL_FROM_DATABASE=HAMEG HO870 Serial Port
 
@@ -4442,6 +4496,9 @@ usb:v0424p4060*
 usb:v0424p4064*
  ID_MODEL_FROM_DATABASE=Ultra Fast Media Reader
 
+usb:v0424p5434*
+ ID_MODEL_FROM_DATABASE=Hub
+
 usb:v0424p7500*
  ID_MODEL_FROM_DATABASE=LAN7500 Ethernet 10/100/1000 Adapter
 
@@ -6131,6 +6188,12 @@ usb:v045Ep02BF*
 usb:v045Ep02C2*
  ID_MODEL_FROM_DATABASE=Kinect for Windows NUI Motor
 
+usb:v045Ep02D1*
+ ID_MODEL_FROM_DATABASE=XBOX One Controller for Windows
+
+usb:v045Ep02D5*
+ ID_MODEL_FROM_DATABASE=Xbox One Digital TV Tuner
+
 usb:v045Ep0400*
  ID_MODEL_FROM_DATABASE=Windows Powered Pocket PC 2002
 
@@ -6530,6 +6593,9 @@ usb:v045Ep0708*
 usb:v045Ep070A*
  ID_MODEL_FROM_DATABASE=Charon Bluetooth Dongle (DFU)
 
+usb:v045Ep070F*
+ ID_MODEL_FROM_DATABASE=LifeChat LX-3000 Headset
+
 usb:v045Ep0710*
  ID_MODEL_FROM_DATABASE=Zune Media Player
 
@@ -6551,6 +6617,9 @@ usb:v045Ep0723*
 usb:v045Ep0724*
  ID_MODEL_FROM_DATABASE=SideWinder Mouse
 
+usb:v045Ep0728*
+ ID_MODEL_FROM_DATABASE=LifeCam VX-5000
+
 usb:v045Ep0730*
  ID_MODEL_FROM_DATABASE=Digital Media Keyboard 3000
 
@@ -6599,6 +6668,9 @@ usb:v045Ep0780*
 usb:v045Ep0797*
  ID_MODEL_FROM_DATABASE=Optical Mouse 200
 
+usb:v045Ep07F8*
+ ID_MODEL_FROM_DATABASE=Wired Keyboard 600 (model 1576)
+
 usb:v045Ep930A*
  ID_MODEL_FROM_DATABASE=ISOUSB.SYS Intel 82930 Isochronous IO Test Board
 
@@ -6968,9 +7040,15 @@ usb:v046Dp0821*
 usb:v046Dp0825*
  ID_MODEL_FROM_DATABASE=Webcam C270
 
+usb:v046Dp0826*
+ ID_MODEL_FROM_DATABASE=HD Webcam C525
+
 usb:v046Dp0828*
  ID_MODEL_FROM_DATABASE=HD Webcam B990
 
+usb:v046Dp082B*
+ ID_MODEL_FROM_DATABASE=Webcam C170
+
 usb:v046Dp082D*
  ID_MODEL_FROM_DATABASE=HD Pro Webcam C920
 
@@ -7292,6 +7370,9 @@ usb:v046Dp0A29*
 usb:v046Dp0A38*
  ID_MODEL_FROM_DATABASE=Headset H340
 
+usb:v046Dp0A44*
+ ID_MODEL_FROM_DATABASE=Wired headset
+
 usb:v046Dp0A4D*
  ID_MODEL_FROM_DATABASE=G430 Surround Sound Gaming Headset
 
@@ -7494,7 +7575,7 @@ usb:v046DpC068*
  ID_MODEL_FROM_DATABASE=G500 Laser Mouse
 
 usb:v046DpC069*
- ID_MODEL_FROM_DATABASE=M500 Laser Mouse
+ ID_MODEL_FROM_DATABASE=M-U0007 [Corded Mouse M500]
 
 usb:v046DpC06A*
  ID_MODEL_FROM_DATABASE=USB Optical Mouse
@@ -7538,8 +7619,11 @@ usb:v046DpC125*
 usb:v046DpC126*
  ID_MODEL_FROM_DATABASE=Harmony Link
 
+usb:v046DpC129*
+ ID_MODEL_FROM_DATABASE=Harmony Hub
+
 usb:v046DpC12B*
- ID_MODEL_FROM_DATABASE=Harmony Touch Remote
+ ID_MODEL_FROM_DATABASE=Harmony Touch/Ultimate Remote
 
 usb:v046DpC201*
  ID_MODEL_FROM_DATABASE=WingMan Extreme Joystick with Throttle
@@ -7658,6 +7742,9 @@ usb:v046DpC248*
 usb:v046DpC24A*
  ID_MODEL_FROM_DATABASE=G600 Gaming Mouse
 
+usb:v046DpC24C*
+ ID_MODEL_FROM_DATABASE=G400s Optical Mouse
+
 usb:v046DpC24D*
  ID_MODEL_FROM_DATABASE=G710 Gaming Keyboard
 
@@ -8039,6 +8126,9 @@ usb:v046Ep5408*
 usb:v046Ep5500*
  ID_MODEL_FROM_DATABASE=Portable Keyboard 86+9 keys (Model 6100C US)
 
+usb:v046Ep5550*
+ ID_MODEL_FROM_DATABASE=5 button optical mouse model M873U
+
 usb:v046Ep5720*
  ID_MODEL_FROM_DATABASE=Smart Card Reader
 
@@ -8471,6 +8561,9 @@ usb:v047Bp1002*
 usb:v047C*
  ID_VENDOR_FROM_DATABASE=Dell Computer Corp.
 
+usb:v047CpFFFF*
+ ID_MODEL_FROM_DATABASE=UPS Tower 500W LV
+
 usb:v047D*
  ID_VENDOR_FROM_DATABASE=Kensington
 
@@ -8765,6 +8858,9 @@ usb:v0480p0014*
 usb:v0480p0100*
  ID_MODEL_FROM_DATABASE=Stor.E Slim USB 3.0
 
+usb:v0480p0200*
+ ID_MODEL_FROM_DATABASE=External Disk
+
 usb:v0480pA006*
  ID_MODEL_FROM_DATABASE=External Disk 1.5TB
 
@@ -8783,6 +8879,9 @@ usb:v0480pB001*
 usb:v0480pD010*
  ID_MODEL_FROM_DATABASE=External Disk 3TB
 
+usb:v0480pD011*
+ ID_MODEL_FROM_DATABASE=Canvio Desk
+
 usb:v0481*
  ID_VENDOR_FROM_DATABASE=Zenith Data Systems
 
@@ -8975,6 +9074,9 @@ usb:v048Dp9009*
 usb:v048Dp9135*
  ID_MODEL_FROM_DATABASE=Zolid Mini DVB-T Stick
 
+usb:v048Dp9306*
+ ID_MODEL_FROM_DATABASE=IT930x DVB stick
+
 usb:v048Dp9503*
  ID_MODEL_FROM_DATABASE=ITE it9503 feature-limited DVB-T transmission chip [ccHDtv]
 
@@ -10115,6 +10217,9 @@ usb:v04A9p1909*
 usb:v04A9p190A*
  ID_MODEL_FROM_DATABASE=CanoScan LiDE 210
 
+usb:v04A9p190D*
+ ID_MODEL_FROM_DATABASE=CanoScan 9000F Mark II
+
 usb:v04A9p2200*
  ID_MODEL_FROM_DATABASE=CanoScan LiDE 25
 
@@ -11252,6 +11357,9 @@ usb:v04A9p3264*
 usb:v04A9p3265*
  ID_MODEL_FROM_DATABASE=Powershot ELPH 130 IS / IXUS 140
 
+usb:v04A9p3266*
+ ID_MODEL_FROM_DATABASE=Powershot ELPH 120 IS / IXUS 135
+
 usb:v04A9p3268*
  ID_MODEL_FROM_DATABASE=PowerShot ELPH 330 HS / IXUS 255 HS
 
@@ -11276,9 +11384,15 @@ usb:v04A9p327F*
 usb:v04A9p3284*
  ID_MODEL_FROM_DATABASE=PowerShot D30
 
+usb:v04A9p3285*
+ ID_MODEL_FROM_DATABASE=PowerShot SX700 HS
+
 usb:v04A9p3286*
  ID_MODEL_FROM_DATABASE=PowerShot SX600 HS
 
+usb:v04A9p3287*
+ ID_MODEL_FROM_DATABASE=PowerShot ELPH 140 IS / IXUS 150
+
 usb:v04A9p3288*
  ID_MODEL_FROM_DATABASE=Powershot ELPH 135 / IXUS 145
 
@@ -11549,6 +11663,9 @@ usb:v04B3p3016*
 usb:v04B3p3018*
  ID_MODEL_FROM_DATABASE=UltraNav Keyboard
 
+usb:v04B3p301A*
+ ID_MODEL_FROM_DATABASE=2-port low-power hub
+
 usb:v04B3p301B*
  ID_MODEL_FROM_DATABASE=SK-8815 Keyboard
 
@@ -11594,6 +11711,9 @@ usb:v04B3p4427*
 usb:v04B3p4482*
  ID_MODEL_FROM_DATABASE=Serial Converter
 
+usb:v04B3p4484*
+ ID_MODEL_FROM_DATABASE=SMSC USB20H04 3-Port Hub [ThinkPad X4 UltraBase, Wistron S Note-3 Media Slice]
+
 usb:v04B3p4485*
  ID_MODEL_FROM_DATABASE=Serial Converter
 
@@ -12683,6 +12803,9 @@ usb:v04CAp1766*
 usb:v04CAp2004*
  ID_MODEL_FROM_DATABASE=Bluetooth 4.0 [Broadcom BCM20702A0]
 
+usb:v04CAp7025*
+ ID_MODEL_FROM_DATABASE=HP HD Webcam
+
 usb:v04CAp9304*
  ID_MODEL_FROM_DATABASE=Hub
 
@@ -13130,6 +13253,12 @@ usb:v04D8p900A*
 usb:v04D8pC001*
  ID_MODEL_FROM_DATABASE=PicoLCD 20x4
 
+usb:v04D8pE11C*
+ ID_MODEL_FROM_DATABASE=TL866CS EEPROM Programmer [MiniPRO]
+
+usb:v04D8pF437*
+ ID_MODEL_FROM_DATABASE=SBE Tech Ultrasonic Anemometer
+
 usb:v04D8pF4B5*
  ID_MODEL_FROM_DATABASE=SmartScope
 
@@ -14312,6 +14441,9 @@ usb:v04E8p6860*
 usb:v04E8p6863*
  ID_MODEL_FROM_DATABASE=GT-I9500 [Galaxy S4] / GT-I9250 [Galaxy Nexus] (network tethering)
 
+usb:v04E8p6864*
+ ID_MODEL_FROM_DATABASE=GT-I9070 (network tethering, USB debugging enabled)
+
 usb:v04E8p6865*
  ID_MODEL_FROM_DATABASE=GT-I9300 Phone [Galaxy S III] (PTP mode)
 
@@ -15308,6 +15440,9 @@ usb:v04F9p0223*
 usb:v04F9p0248*
  ID_MODEL_FROM_DATABASE=DCP-7055 scanner/printer
 
+usb:v04F9p0273*
+ ID_MODEL_FROM_DATABASE=DCP-7057 scanner/printer
+
 usb:v04F9p02B3*
  ID_MODEL_FROM_DATABASE=MFC J4510DW
 
@@ -15494,6 +15629,9 @@ usb:v0502p16E2*
 usb:v0502p16E3*
  ID_MODEL_FROM_DATABASE=n30 Handheld Sync
 
+usb:v0502p2008*
+ ID_MODEL_FROM_DATABASE=Liquid Gallant Duo E350 (preloader)
+
 usb:v0502p3202*
  ID_MODEL_FROM_DATABASE=Liquid
 
@@ -16919,6 +17057,9 @@ usb:v054Cp02D1*
 usb:v054Cp02D2*
  ID_MODEL_FROM_DATABASE=PSP Slim
 
+usb:v054Cp02D8*
+ ID_MODEL_FROM_DATABASE=SBAC-US10 SxS PRO memory card reader/writer
+
 usb:v054Cp02E1*
  ID_MODEL_FROM_DATABASE=FeliCa S330 [PaSoRi]
 
@@ -17462,6 +17603,9 @@ usb:v0566p2801*
 usb:v0566p2802*
  ID_MODEL_FROM_DATABASE=Kbd Hub
 
+usb:v0566p3002*
+ ID_MODEL_FROM_DATABASE=Keyboard
+
 usb:v0566p3004*
  ID_MODEL_FROM_DATABASE=Genius KB-29E
 
@@ -17720,6 +17864,9 @@ usb:v056Ap0307*
 usb:v056Ap0309*
  ID_MODEL_FROM_DATABASE=Cintiq Companion Hybrid 13HD (DTH-A1300) touchscreen
 
+usb:v056Ap030E*
+ ID_MODEL_FROM_DATABASE=Intuos Pen Small (CTL480)
+
 usb:v056Ap0400*
  ID_MODEL_FROM_DATABASE=PenPartner 4x5
 
@@ -17828,6 +17975,9 @@ usb:v0572p0041*
 usb:v0572p0042*
  ID_MODEL_FROM_DATABASE=Webcam Notebook
 
+usb:v0572p0320*
+ ID_MODEL_FROM_DATABASE=DVBSky T330 DVB-T2/C tuner
+
 usb:v0572p1232*
  ID_MODEL_FROM_DATABASE=V.90 modem
 
@@ -17858,12 +18008,27 @@ usb:v0572p2002*
 usb:v0572p262A*
  ID_MODEL_FROM_DATABASE=tm5600 Video & Audio Grabber Capture
 
+usb:v0572p680C*
+ ID_MODEL_FROM_DATABASE=DVBSky T680C DVB-T2/C tuner
+
+usb:v0572p6831*
+ ID_MODEL_FROM_DATABASE=DVBSky S960 DVB-S2 tuner
+
 usb:v0572p8390*
  ID_MODEL_FROM_DATABASE=WinFast PalmTop/Novo TV Video
 
 usb:v0572p8392*
  ID_MODEL_FROM_DATABASE=WinFast PalmTop/Novo TV Video
 
+usb:v0572p960C*
+ ID_MODEL_FROM_DATABASE=DVBSky S960C DVB-S2 tuner
+
+usb:v0572pC686*
+ ID_MODEL_FROM_DATABASE=Geniatech T220A DVB-T2 TV Stick
+
+usb:v0572pC688*
+ ID_MODEL_FROM_DATABASE=Geniatech T230 DVB-T2 TV Stick
+
 usb:v0572pCAFC*
  ID_MODEL_FROM_DATABASE=CX861xx ROM Boot Loader
 
@@ -18902,6 +19067,9 @@ usb:v0584p0008*
 usb:v0584p0220*
  ID_MODEL_FROM_DATABASE=U2SCX SCSI Converter
 
+usb:v0584p0304*
+ ID_MODEL_FROM_DATABASE=U2SCX-LVD (SCSI Converter)
+
 usb:v0584pB000*
  ID_MODEL_FROM_DATABASE=REX-USB60
 
@@ -19622,6 +19790,24 @@ usb:v05A6p0004*
 usb:v05A7*
  ID_VENDOR_FROM_DATABASE=Bose Corp.
 
+usb:v05A7p4000*
+ ID_MODEL_FROM_DATABASE=Bluetooth Headset
+
+usb:v05A7p4001*
+ ID_MODEL_FROM_DATABASE=Bluetooth Headset in DFU mode
+
+usb:v05A7p4002*
+ ID_MODEL_FROM_DATABASE=Bluetooth Headset Series 2
+
+usb:v05A7p4003*
+ ID_MODEL_FROM_DATABASE=Bluetooth Headset Series 2 in DFU mode
+
+usb:v05A7pBC50*
+ ID_MODEL_FROM_DATABASE=SoundLink Wireless Mobile speaker
+
+usb:v05A7pBC51*
+ ID_MODEL_FROM_DATABASE=SoundLink Wireless Mobile speaker in DFU mode
+
 usb:v05A8*
  ID_VENDOR_FROM_DATABASE=Spacetec IMC Corp.
 
@@ -21071,6 +21257,9 @@ usb:v05DAp5003*
 usb:v05DAp5013*
  ID_MODEL_FROM_DATABASE=3200 Scanner
 
+usb:v05DAp6072*
+ ID_MODEL_FROM_DATABASE=XT-3500 A4 HD Scanner
+
 usb:v05DAp80A3*
  ID_MODEL_FROM_DATABASE=ScanMaker V6USL (#2)
 
@@ -21392,6 +21581,9 @@ usb:v05E0p0800*
 usb:v05E0p1200*
  ID_MODEL_FROM_DATABASE=Bar Code Scanner
 
+usb:v05E0p1701*
+ ID_MODEL_FROM_DATABASE=Bar Code Scanner (CDC)
+
 usb:v05E0p1900*
  ID_MODEL_FROM_DATABASE=SNAPI Imaging Device
 
@@ -21758,20 +21950,26 @@ usb:v05F9*
 usb:v05F9p1104*
  ID_MODEL_FROM_DATABASE=Magellan 2200VS
 
+usb:v05F9p1206*
+ ID_MODEL_FROM_DATABASE=Gryphon series (OEM mode)
+
 usb:v05F9p2202*
  ID_MODEL_FROM_DATABASE=Point of Sale Handheld Scanner
 
 usb:v05F9p2206*
- ID_MODEL_FROM_DATABASE=Datalogic Gryphon GFS4170
+ ID_MODEL_FROM_DATABASE=Gryphon series (keyboard emulation mode)
+
+usb:v05F9p220C*
+ ID_MODEL_FROM_DATABASE=Datalogic Gryphon GD4430
 
 usb:v05F9p2601*
- ID_MODEL_FROM_DATABASE=Datalogin Magellan 1000i Barcode Scanner
+ ID_MODEL_FROM_DATABASE=Datalogic Magellan 1000i Barcode Scanner
 
 usb:v05F9p2602*
  ID_MODEL_FROM_DATABASE=Datalogic Magellan 1100i Barcode Scanner
 
 usb:v05F9p4204*
- ID_MODEL_FROM_DATABASE=Datalogic Gryphon GFS4470 Fixed Scanner
+ ID_MODEL_FROM_DATABASE=Gryphon series (RS-232 emulation mode)
 
 usb:v05F9p5204*
  ID_MODEL_FROM_DATABASE=Datalogic Gryphon GFS4170 (config mode)
@@ -21789,7 +21987,10 @@ usb:v05FAp3303*
  ID_MODEL_FROM_DATABASE=Keyboard with PS/2 Mouse Port
 
 usb:v05FC*
- ID_VENDOR_FROM_DATABASE=Harman Multimedia
+ ID_VENDOR_FROM_DATABASE=Harman
+
+usb:v05FCp0001*
+ ID_MODEL_FROM_DATABASE=Soundcraft Si Multi Digital Card
 
 usb:v05FCp7849*
  ID_MODEL_FROM_DATABASE=Harman/Kardon SoundSticks
@@ -21873,7 +22074,7 @@ usb:v0603*
  ID_VENDOR_FROM_DATABASE=Novatek Microelectronics Corp.
 
 usb:v0603p00F1*
- ID_MODEL_FROM_DATABASE=Keyboard
+ ID_MODEL_FROM_DATABASE=Keyboard (Labtec Ultra Flat Keyboard)
 
 usb:v0603p00F2*
  ID_MODEL_FROM_DATABASE=Keyboard (Labtec Ultra Flat Keyboard)
@@ -22142,6 +22343,9 @@ usb:v062Ap0252*
 usb:v062Ap3286*
  ID_MODEL_FROM_DATABASE=Nano Receiver [Sandstrom Laser Mouse SMWLL11]
 
+usb:v062Ap4101*
+ ID_MODEL_FROM_DATABASE=Wireless Keyboard/Mouse
+
 usb:v062Ap6301*
  ID_MODEL_FROM_DATABASE=Trust Wireless Optical Mouse MI-4150K
 
@@ -22272,7 +22476,7 @@ usb:v0644p800E*
  ID_MODEL_FROM_DATABASE=TASCAM US-122L
 
 usb:v0644p801D*
- ID_MODEL_FROM_DATABASE=DR-100
+ ID_MODEL_FROM_DATABASE=TASCAM DR-100
 
 usb:v0644p8021*
  ID_MODEL_FROM_DATABASE=TASCAM US-122mkII
@@ -24032,6 +24236,9 @@ usb:v06C9p0009*
 usb:v06CA*
  ID_VENDOR_FROM_DATABASE=Newer Technology, Inc.
 
+usb:v06CAp2003*
+ ID_MODEL_FROM_DATABASE=uSCSI
+
 usb:v06CB*
  ID_VENDOR_FROM_DATABASE=Synaptics, Inc.
 
@@ -24068,6 +24275,9 @@ usb:v06CBp0010*
 usb:v06CBp0013*
  ID_MODEL_FROM_DATABASE=DisplayPad
 
+usb:v06CBp2970*
+ ID_MODEL_FROM_DATABASE=touchpad
+
 usb:v06CC*
  ID_VENDOR_FROM_DATABASE=Terayon Communication Systems
 
@@ -25034,15 +25244,78 @@ usb:v072Fp0001*
 usb:v072Fp0008*
  ID_MODEL_FROM_DATABASE=ACR 80 Smart Card Reader
 
+usb:v072Fp0100*
+ ID_MODEL_FROM_DATABASE=AET65
+
+usb:v072Fp0101*
+ ID_MODEL_FROM_DATABASE=AET65
+
+usb:v072Fp0102*
+ ID_MODEL_FROM_DATABASE=AET62
+
+usb:v072Fp0103*
+ ID_MODEL_FROM_DATABASE=AET62
+
+usb:v072Fp0901*
+ ID_MODEL_FROM_DATABASE=ACR1281U-C4 (BSI)
+
 usb:v072Fp1000*
  ID_MODEL_FROM_DATABASE=PLDT Drive
 
 usb:v072Fp1001*
  ID_MODEL_FROM_DATABASE=PLDT Drive
 
+usb:v072Fp2011*
+ ID_MODEL_FROM_DATABASE=ACR88U
+
+usb:v072Fp2100*
+ ID_MODEL_FROM_DATABASE=ACR128U
+
 usb:v072Fp2200*
  ID_MODEL_FROM_DATABASE=ACR122U
 
+usb:v072Fp220A*
+ ID_MODEL_FROM_DATABASE=ACR1281U-C5 (BSI)
+
+usb:v072Fp220C*
+ ID_MODEL_FROM_DATABASE=ACR1283 Bootloader
+
+usb:v072Fp220F*
+ ID_MODEL_FROM_DATABASE=ACR1281U-C2 (qPBOC)
+
+usb:v072Fp2211*
+ ID_MODEL_FROM_DATABASE=ACR1261 1S Dual Reader
+
+usb:v072Fp2214*
+ ID_MODEL_FROM_DATABASE=ACR1222 1SAM PICC Reader
+
+usb:v072Fp2215*
+ ID_MODEL_FROM_DATABASE=ACR1281 2S CL Reader
+
+usb:v072Fp221A*
+ ID_MODEL_FROM_DATABASE=ACR1251U-A1
+
+usb:v072Fp221B*
+ ID_MODEL_FROM_DATABASE=ACR1251U-C
+
+usb:v072Fp2224*
+ ID_MODEL_FROM_DATABASE=ACR1281 1S Dual Reader
+
+usb:v072Fp222B*
+ ID_MODEL_FROM_DATABASE=ACR1222U-C8
+
+usb:v072Fp222C*
+ ID_MODEL_FROM_DATABASE=ACR1283L-D2
+
+usb:v072Fp222D*
+ ID_MODEL_FROM_DATABASE=[OEM Reader]
+
+usb:v072Fp222E*
+ ID_MODEL_FROM_DATABASE=ACR123U
+
+usb:v072Fp2242*
+ ID_MODEL_FROM_DATABASE=ACR1251 1S Dual Reader
+
 usb:v072Fp8002*
  ID_MODEL_FROM_DATABASE=AET63 BioTRUSTKey
 
@@ -25052,18 +25325,72 @@ usb:v072Fp8003*
 usb:v072Fp8103*
  ID_MODEL_FROM_DATABASE=ACR120
 
+usb:v072Fp8201*
+ ID_MODEL_FROM_DATABASE=APG8201
+
+usb:v072Fp8900*
+ ID_MODEL_FROM_DATABASE=ACR89U-A1
+
+usb:v072Fp8901*
+ ID_MODEL_FROM_DATABASE=ACR89U-A2
+
+usb:v072Fp8902*
+ ID_MODEL_FROM_DATABASE=ACR89U-A3
+
 usb:v072Fp9000*
  ID_MODEL_FROM_DATABASE=ACR38 AC1038-based Smart Card Reader
 
+usb:v072Fp9006*
+ ID_MODEL_FROM_DATABASE=CryptoMate
+
 usb:v072Fp90CC*
  ID_MODEL_FROM_DATABASE=ACR38 SmartCard Reader
 
+usb:v072Fp90CE*
+ ID_MODEL_FROM_DATABASE=[OEM Reader]
+
 usb:v072Fp90CF*
  ID_MODEL_FROM_DATABASE=ACR38 SAM Smart Card Reader
 
 usb:v072Fp90D0*
  ID_MODEL_FROM_DATABASE=PertoSmart EMV - Card Reader
 
+usb:v072Fp90D2*
+ ID_MODEL_FROM_DATABASE=ACR83U
+
+usb:v072Fp90D8*
+ ID_MODEL_FROM_DATABASE=ACR3801
+
+usb:v072Fp90DB*
+ ID_MODEL_FROM_DATABASE=CryptoMate64
+
+usb:v072FpB000*
+ ID_MODEL_FROM_DATABASE=ACR3901U
+
+usb:v072FpB100*
+ ID_MODEL_FROM_DATABASE=ACR39U
+
+usb:v072FpB101*
+ ID_MODEL_FROM_DATABASE=ACR39K
+
+usb:v072FpB102*
+ ID_MODEL_FROM_DATABASE=ACR39T
+
+usb:v072FpB103*
+ ID_MODEL_FROM_DATABASE=ACR39F
+
+usb:v072FpB104*
+ ID_MODEL_FROM_DATABASE=ACR39U-SAM
+
+usb:v072FpB106*
+ ID_MODEL_FROM_DATABASE=ACOS5T2
+
+usb:v072FpB200*
+ ID_MODEL_FROM_DATABASE=ACOS5T1
+
+usb:v072FpB301*
+ ID_MODEL_FROM_DATABASE=ACR32-A1
+
 usb:v0731*
  ID_VENDOR_FROM_DATABASE=Susteen, Inc.
 
@@ -25598,6 +25925,12 @@ usb:v076Bp5121*
 usb:v076Bp5125*
  ID_MODEL_FROM_DATABASE=CardMan 5125
 
+usb:v076Bp5321*
+ ID_MODEL_FROM_DATABASE=CardMan 5321
+
+usb:v076Bp5340*
+ ID_MODEL_FROM_DATABASE=CardMan 5021 CL
+
 usb:v076Bp6622*
  ID_MODEL_FROM_DATABASE=CardMan 6121
 
@@ -26376,7 +26709,7 @@ usb:v07ABpFCD6*
  ID_MODEL_FROM_DATABASE=Freecom HD Classic
 
 usb:v07ABpFCF6*
- ID_MODEL_FROM_DATABASE=DataBar 512 MB
+ ID_MODEL_FROM_DATABASE=DataBar
 
 usb:v07ABpFCF8*
  ID_MODEL_FROM_DATABASE=Freecom Classic SL Network Drive
@@ -27293,6 +27626,9 @@ usb:v07CFp4107*
 usb:v07CFp4500*
  ID_MODEL_FROM_DATABASE=LV-20 Digital Camera
 
+usb:v07CFp6101*
+ ID_MODEL_FROM_DATABASE=fx-9750gII
+
 usb:v07CFp6801*
  ID_MODEL_FROM_DATABASE=PL-40R
 
@@ -28373,6 +28709,9 @@ usb:v085Ap0023*
 usb:v085Ap0024*
  ID_MODEL_FROM_DATABASE=Parallel Port
 
+usb:v085Ap0026*
+ ID_MODEL_FROM_DATABASE=PortGear SCSI
+
 usb:v085Ap0027*
  ID_MODEL_FROM_DATABASE=1 port to Serial Converter
 
@@ -29894,6 +30233,9 @@ usb:v0922p0020*
 usb:v0922p1001*
  ID_MODEL_FROM_DATABASE=LabelManager PnP
 
+usb:v0922p8004*
+ ID_MODEL_FROM_DATABASE=M25 Digital Postal Scale
+
 usb:v0923*
  ID_VENDOR_FROM_DATABASE=IC Media Corp.
 
@@ -30506,6 +30848,9 @@ usb:v0951p1613*
 usb:v0951p1616*
  ID_MODEL_FROM_DATABASE=DataTraveler Locker 4GB
 
+usb:v0951p161A*
+ ID_MODEL_FROM_DATABASE=Dell HyperVisor internal flash drive
+
 usb:v0951p1621*
  ID_MODEL_FROM_DATABASE=DataTraveler 150 (32GB)
 
@@ -30569,6 +30914,21 @@ usb:v0955pB400*
 usb:v0955pB401*
  ID_MODEL_FROM_DATABASE=SHIELD
 
+usb:v0955pCF05*
+ ID_MODEL_FROM_DATABASE=SHIELD Tablet (debug)
+
+usb:v0955pCF06*
+ ID_MODEL_FROM_DATABASE=SHIELD Tablet
+
+usb:v0955pCF07*
+ ID_MODEL_FROM_DATABASE=SHIELD Tablet
+
+usb:v0955pCF08*
+ ID_MODEL_FROM_DATABASE=SHIELD Tablet
+
+usb:v0955pCF09*
+ ID_MODEL_FROM_DATABASE=SHIELD Tablet
+
 usb:v0956*
  ID_VENDOR_FROM_DATABASE=BSquare Corp.
 
@@ -30599,6 +30959,9 @@ usb:v0957p1745*
 usb:v0957p2918*
  ID_MODEL_FROM_DATABASE=U2702A oscilloscope
 
+usb:v0957pFB18*
+ ID_MODEL_FROM_DATABASE=LC Device
+
 usb:v0958*
  ID_VENDOR_FROM_DATABASE=CompuLink Research, Inc.
 
@@ -30950,6 +31313,12 @@ usb:v09C4p0011*
 usb:v09C5*
  ID_VENDOR_FROM_DATABASE=Memory Corp.
 
+usb:v09CA*
+ ID_VENDOR_FROM_DATABASE=BMC Messsysteme GmbH
+
+usb:v09CAp5544*
+ ID_MODEL_FROM_DATABASE=PIO
+
 usb:v09CC*
  ID_VENDOR_FROM_DATABASE=Workbit Corp.
 
@@ -31247,6 +31616,9 @@ usb:v0A12p000A*
 usb:v0A12p000B*
  ID_MODEL_FROM_DATABASE=Nanosira5-ROM
 
+usb:v0A12p0042*
+ ID_MODEL_FROM_DATABASE=SPI Converter
+
 usb:v0A12p0043*
  ID_MODEL_FROM_DATABASE=Bluetooth Device
 
@@ -31311,7 +31683,7 @@ usb:v0A17p0004*
  ID_MODEL_FROM_DATABASE=Optio 330
 
 usb:v0A17p0006*
- ID_MODEL_FROM_DATABASE=Optio S
+ ID_MODEL_FROM_DATABASE=Optio S / S4
 
 usb:v0A17p0007*
  ID_MODEL_FROM_DATABASE=Optio 550
@@ -31856,6 +32228,9 @@ usb:v0A5Fp0081*
 usb:v0A5Fp008B*
  ID_MODEL_FROM_DATABASE=HC100 wristbands Printer
 
+usb:v0A5Fp008C*
+ ID_MODEL_FROM_DATABASE=ZP 450 Printer
+
 usb:v0A5Fp00D1*
  ID_MODEL_FROM_DATABASE=Zebra GC420d Label Printer
 
@@ -32807,12 +33182,18 @@ usb:v0B05p17A1*
 usb:v0B05p17AB*
  ID_MODEL_FROM_DATABASE=USB-N13 802.11n Network Adapter (rev. B1) [Realtek RTL8192CU]
 
+usb:v0B05p17BA*
+ ID_MODEL_FROM_DATABASE=N10 Nano 802.11n Network Adapter [Realtek RTL8192CU]
+
 usb:v0B05p17C7*
  ID_MODEL_FROM_DATABASE=WL-330NUL
 
 usb:v0B05p17C9*
  ID_MODEL_FROM_DATABASE=USB-AC53 802.11a/b/g/n/ac Wireless Adapter [Broadcom BCM43526]
 
+usb:v0B05p17D1*
+ ID_MODEL_FROM_DATABASE=AC51 802.11a/b/g/n/ac Wireless Adapter [Mediatek MT7610/Ralink RT2870]
+
 usb:v0B05p4C80*
  ID_MODEL_FROM_DATABASE=Transformer Pad TF300TG
 
@@ -32822,6 +33203,12 @@ usb:v0B05p4C90*
 usb:v0B05p4C91*
  ID_MODEL_FROM_DATABASE=Transformer Pad Infinity TF700 (Debug mode)
 
+usb:v0B05p4CA0*
+ ID_MODEL_FROM_DATABASE=Transformer Pad TF701T
+
+usb:v0B05p4CA1*
+ ID_MODEL_FROM_DATABASE=Transformer Pad TF701T (Debug mode)
+
 usb:v0B05p4D00*
  ID_MODEL_FROM_DATABASE=Transformer Prime TF201
 
@@ -33125,6 +33512,9 @@ usb:v0B48p300D*
 usb:v0B48p300E*
  ID_MODEL_FROM_DATABASE=TT-connect C-2400
 
+usb:v0B48p3011*
+ ID_MODEL_FROM_DATABASE=TT-connect S2-4600
+
 usb:v0B48p3012*
  ID_MODEL_FROM_DATABASE=TT-connect CT2-4650 CI
 
@@ -33497,6 +33887,9 @@ usb:v0BB3*
 usb:v0BB4*
  ID_VENDOR_FROM_DATABASE=HTC (High Tech Computer Corp.)
 
+usb:v0BB4p0001*
+ ID_MODEL_FROM_DATABASE=Android Phone via mass storage [Wiko Cink Peax 2]
+
 usb:v0BB4p00CE*
  ID_MODEL_FROM_DATABASE=mmO2 XDA GSM/GPRS Pocket PC
 
@@ -34061,6 +34454,9 @@ usb:v0BB4p0CAE*
 usb:v0BB4p0DEA*
  ID_MODEL_FROM_DATABASE=M7_UL [HTC One]
 
+usb:v0BB4p0F64*
+ ID_MODEL_FROM_DATABASE=Desire 601
+
 usb:v0BB4p0FF8*
  ID_MODEL_FROM_DATABASE=Desire HD (Tethering Mode)
 
@@ -34073,6 +34469,12 @@ usb:v0BB4p0FFE*
 usb:v0BB4p0FFF*
  ID_MODEL_FROM_DATABASE=Android Fastboot Bootloader
 
+usb:v0BB4p2008*
+ ID_MODEL_FROM_DATABASE=Android Phone via MTP [Wiko Cink Peax 2]
+
+usb:v0BB4p200B*
+ ID_MODEL_FROM_DATABASE=Android Phone via PTP [Wiko Cink Peax 2]
+
 usb:v0BB5*
  ID_VENDOR_FROM_DATABASE=Murata Manufacturing Co., Ltd
 
@@ -34130,6 +34532,9 @@ usb:v0BC2p2300*
 usb:v0BC2p2320*
  ID_MODEL_FROM_DATABASE=USB 3.0 bridge [Portable Expansion Drive]
 
+usb:v0BC2p3000*
+ ID_MODEL_FROM_DATABASE=FreeAgent Desktop
+
 usb:v0BC2p3008*
  ID_MODEL_FROM_DATABASE=FreeAgent Desk 1TB
 
@@ -34190,6 +34595,12 @@ usb:v0BC2pAB00*
 usb:v0BC2pAB20*
  ID_MODEL_FROM_DATABASE=Backup Plus Portable Drive
 
+usb:v0BC2pAB21*
+ ID_MODEL_FROM_DATABASE=Backup Plus Slim
+
+usb:v0BC2pAB31*
+ ID_MODEL_FROM_DATABASE=Backup Plus Desktop Drive (5TB)
+
 usb:v0BC3*
  ID_VENDOR_FROM_DATABASE=IPWireless, Inc.
 
@@ -34385,6 +34796,9 @@ usb:v0BDAp2838*
 usb:v0BDAp5730*
  ID_MODEL_FROM_DATABASE=HP 2.0MP High Definition Webcam
 
+usb:v0BDAp5775*
+ ID_MODEL_FROM_DATABASE=HP "Truevision HD" laptop camera
+
 usb:v0BDAp8150*
  ID_MODEL_FROM_DATABASE=RTL8150 Fast Ethernet Adapter
 
@@ -34820,6 +35234,9 @@ usb:v0C2Ep0B61*
 usb:v0C2Ep0B6A*
  ID_MODEL_FROM_DATABASE=Vuquest 3310 Area-Imaging Scanner
 
+usb:v0C2Ep0B81*
+ ID_MODEL_FROM_DATABASE=Barcode scanner Voyager 1400g Series
+
 usb:v0C35*
  ID_VENDOR_FROM_DATABASE=Eagletron, Inc.
 
@@ -37076,6 +37493,9 @@ usb:v0DA4*
 usb:v0DA4p0001*
  ID_MODEL_FROM_DATABASE=Interface
 
+usb:v0DA4p0008*
+ ID_MODEL_FROM_DATABASE=Loop
+
 usb:v0DA7*
  ID_VENDOR_FROM_DATABASE=IOGear, Inc.
 
@@ -37295,6 +37715,9 @@ usb:v0DC4p0042*
 usb:v0DC4p0101*
  ID_MODEL_FROM_DATABASE=Hi-Speed Mass Storage Device
 
+usb:v0DC4p0209*
+ ID_MODEL_FROM_DATABASE=SK-3500 S2
+
 usb:v0DC4p020A*
  ID_MODEL_FROM_DATABASE=Oyen Digital MiniPro 2.5" hard drive enclosure
 
@@ -37691,6 +38114,12 @@ usb:v0E0C*
 usb:v0E0Cp0101*
  ID_MODEL_FROM_DATABASE=LonUSB LonTalk Network Adapter
 
+usb:v0E0D*
+ ID_VENDOR_FROM_DATABASE=PicoQuant GmbH
+
+usb:v0E0Dp0003*
+ ID_MODEL_FROM_DATABASE=PicoHarp 300
+
 usb:v0E0F*
  ID_VENDOR_FROM_DATABASE=VMware, Inc.
 
@@ -38121,7 +38550,7 @@ usb:v0E8Dp0023*
  ID_MODEL_FROM_DATABASE=S103
 
 usb:v0E8Dp1806*
- ID_MODEL_FROM_DATABASE=Samsung SE-208AB Slim Portable DVD Writer
+ ID_MODEL_FROM_DATABASE=Samsung SE-208 Slim Portable DVD Writer
 
 usb:v0E8Dp1836*
  ID_MODEL_FROM_DATABASE=Samsung SE-S084 Super WriteMaster Slim External DVD writer
@@ -38217,7 +38646,7 @@ usb:v0EA0p2153*
  ID_MODEL_FROM_DATABASE=SD Card Reader Key
 
 usb:v0EA0p2168*
- ID_MODEL_FROM_DATABASE=Transcend JetFlash 2.0 / Astone USB Drive
+ ID_MODEL_FROM_DATABASE=Transcend JetFlash 2.0 / Astone USB Drive / Intellegent Stick 2.0
 
 usb:v0EA0p6803*
  ID_MODEL_FROM_DATABASE=OTI-6803 Flash Disk
@@ -39054,7 +39483,7 @@ usb:v0FCEp8004*
  ID_MODEL_FROM_DATABASE=9000 Phone [Mass Storage]
 
 usb:v0FCEpADDE*
- ID_MODEL_FROM_DATABASE=Boot loader
+ ID_MODEL_FROM_DATABASE=C2005 (Xperia M dual) in service mode
 
 usb:v0FCEpD008*
  ID_MODEL_FROM_DATABASE=V800-Vodafone 802SE Phone
@@ -39116,9 +39545,15 @@ usb:v0FCEpD0D4*
 usb:v0FCEpD0E1*
  ID_MODEL_FROM_DATABASE=MD400 Mobile Broadband Modem
 
+usb:v0FCEpD12A*
+ ID_MODEL_FROM_DATABASE=U100i Yari Phone
+
 usb:v0FCEpD12E*
  ID_MODEL_FROM_DATABASE=Xperia X10
 
+usb:v0FCEpD14E*
+ ID_MODEL_FROM_DATABASE=J108i Cedar
+
 usb:v0FCEpE000*
  ID_MODEL_FROM_DATABASE=K810 (PictBridge mode)
 
@@ -39188,6 +39623,9 @@ usb:v0FCEpE166*
 usb:v0FCEpE167*
  ID_MODEL_FROM_DATABASE=XPERIA mini
 
+usb:v0FCEpE19B*
+ ID_MODEL_FROM_DATABASE=C2005 [Xperia M dual] (Mass Storage)
+
 usb:v0FCEpF0FA*
  ID_MODEL_FROM_DATABASE=Liveview micro display MN800 in DFU mode
 
@@ -39269,6 +39707,9 @@ usb:v0FDE*
 usb:v0FDEpCA01*
  ID_MODEL_FROM_DATABASE=WMRS200 weather station
 
+usb:v0FDEpCA05*
+ ID_MODEL_FROM_DATABASE=CM160
+
 usb:v0FE0*
  ID_VENDOR_FROM_DATABASE=Osterhout Design Group
 
@@ -39462,7 +39903,7 @@ usb:v1005p1006*
  ID_MODEL_FROM_DATABASE=MP3 Player
 
 usb:v1005pB113*
- ID_MODEL_FROM_DATABASE=Handy Steno 2.0/HT203
+ ID_MODEL_FROM_DATABASE=Handy Steno/AH123 / Handy Steno 2.0/HT203
 
 usb:v1005pB223*
  ID_MODEL_FROM_DATABASE=CD-RW + 6in1 Card Reader Digital Storage / Converter
@@ -39815,6 +40256,9 @@ usb:v1050p0110*
 usb:v1050p0111*
  ID_MODEL_FROM_DATABASE=Yubikey NEO OTP+CCID
 
+usb:v1050p0112*
+ ID_MODEL_FROM_DATABASE=Yubikey NEO CCID
+
 usb:v1050p0200*
  ID_MODEL_FROM_DATABASE=U2F Gnubby
 
@@ -39854,11 +40298,17 @@ usb:v1058p0400*
 usb:v1058p0500*
  ID_MODEL_FROM_DATABASE=hub
 
+usb:v1058p0701*
+ ID_MODEL_FROM_DATABASE=WD Passport (WDXMS)
+
 usb:v1058p0702*
- ID_MODEL_FROM_DATABASE=Passport External HDD
+ ID_MODEL_FROM_DATABASE=WD Passport (WDXMS)
 
 usb:v1058p0704*
- ID_MODEL_FROM_DATABASE=Passport External HDD
+ ID_MODEL_FROM_DATABASE=My Passport Essential (WDME)
+
+usb:v1058p0705*
+ ID_MODEL_FROM_DATABASE=My Passport Elite (WDML)
 
 usb:v1058p070A*
  ID_MODEL_FROM_DATABASE=My Passport Essential (WDBAAA), My Passport for Mac (WDBAAB), My Passport Essential SE (WDBABM), My Passport SE for Mac (WDBABW)
@@ -39878,6 +40328,9 @@ usb:v1058p071D*
 usb:v1058p0730*
  ID_MODEL_FROM_DATABASE=My Passport Essential (WDBACY)
 
+usb:v1058p0732*
+ ID_MODEL_FROM_DATABASE=My Passport Essential SE (WDBGYS)
+
 usb:v1058p0740*
  ID_MODEL_FROM_DATABASE=My Passport Essential (WDBACY)
 
@@ -39885,14 +40338,20 @@ usb:v1058p0741*
  ID_MODEL_FROM_DATABASE=My Passport Ultra
 
 usb:v1058p0742*
- ID_MODEL_FROM_DATABASE=My Passport Essential SE
+ ID_MODEL_FROM_DATABASE=My Passport Essential SE (WDBGYS)
 
 usb:v1058p0748*
- ID_MODEL_FROM_DATABASE=My Passport (WDBKXH)
+ ID_MODEL_FROM_DATABASE=My Passport (WDBKXH, WDBY8L)
+
+usb:v1058p07A8*
+ ID_MODEL_FROM_DATABASE=My Passport (WDBBEP), My Passport for Mac (WDBLUZ)
 
 usb:v1058p0810*
  ID_MODEL_FROM_DATABASE=My Passport Ultra (WDBZFP)
 
+usb:v1058p0820*
+ ID_MODEL_FROM_DATABASE=My Passport Ultra (WDBMWV, WDBZFP)
+
 usb:v1058p0900*
  ID_MODEL_FROM_DATABASE=MyBook Essential External HDD
 
@@ -39912,7 +40371,7 @@ usb:v1058p1001*
  ID_MODEL_FROM_DATABASE=Elements Desktop (WDE1U)
 
 usb:v1058p1003*
- ID_MODEL_FROM_DATABASE=Elements 1000 GB
+ ID_MODEL_FROM_DATABASE=WD Elements Desktop (WDE1UBK)
 
 usb:v1058p1010*
  ID_MODEL_FROM_DATABASE=Elements Portable (WDBAAR)
@@ -39923,23 +40382,35 @@ usb:v1058p1021*
 usb:v1058p1023*
  ID_MODEL_FROM_DATABASE=Elements SE Portable (WDBABV)
 
+usb:v1058p1042*
+ ID_MODEL_FROM_DATABASE=Elements SE Portable (WDBPCK)
+
 usb:v1058p1048*
  ID_MODEL_FROM_DATABASE=Elements Portable (WDBU6Y)
 
+usb:v1058p107C*
+ ID_MODEL_FROM_DATABASE=Elements Desktop (WDBWLG)
+
 usb:v1058p10A2*
  ID_MODEL_FROM_DATABASE=Elements SE Portable (WDBPCK)
 
 usb:v1058p10A8*
  ID_MODEL_FROM_DATABASE=Elements Portable (WDBUZG)
 
+usb:v1058p10B8*
+ ID_MODEL_FROM_DATABASE=Elements Portable (WDBU6Y, WDBUZG)
+
 usb:v1058p1100*
  ID_MODEL_FROM_DATABASE=My Book Essential Edition 2.0 (WDH1U)
 
+usb:v1058p1102*
+ ID_MODEL_FROM_DATABASE=My Book Home Edition (WDH1CS)
+
 usb:v1058p1103*
  ID_MODEL_FROM_DATABASE=My Book Studio
 
 usb:v1058p1104*
- ID_MODEL_FROM_DATABASE=MyBook Mirror Edition External HDD
+ ID_MODEL_FROM_DATABASE=My Book Mirror Edition (WDH2U)
 
 usb:v1058p1105*
  ID_MODEL_FROM_DATABASE=My Book Studio II
@@ -39962,6 +40433,9 @@ usb:v1058p1130*
 usb:v1058p1140*
  ID_MODEL_FROM_DATABASE=My Book Essential (WDBACW)
 
+usb:v1058p1230*
+ ID_MODEL_FROM_DATABASE=My Book (WDBFJK0030HBK)
+
 usb:v1059*
  ID_VENDOR_FROM_DATABASE=Giesecke & Devrient GmbH
 
@@ -40325,9 +40799,102 @@ usb:v10A9p1102*
 usb:v10A9p1104*
  ID_MODEL_FROM_DATABASE=Sky Vega IM-A650S
 
+usb:v10A9p1105*
+ ID_MODEL_FROM_DATABASE=VEGA Android composite
+
+usb:v10A9p1106*
+ ID_MODEL_FROM_DATABASE=VEGA Android composite
+
+usb:v10A9p1107*
+ ID_MODEL_FROM_DATABASE=VEGA Android composite
+
+usb:v10A9p1108*
+ ID_MODEL_FROM_DATABASE=VEGA Android composite
+
+usb:v10A9p1109*
+ ID_MODEL_FROM_DATABASE=VEGA Android composite
+
 usb:v10A9p6021*
  ID_MODEL_FROM_DATABASE=SIRIUS alpha
 
+usb:v10A9p6031*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p6032*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p6033*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p6034*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p6035*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p6036*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p6037*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p6050*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p6051*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p6052*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p6053*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p6054*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p6055*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p6056*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p6057*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p6058*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p6059*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p6080*
+ ID_MODEL_FROM_DATABASE=MHS291LVW LTE Modem [Verizon Jetpack 4G LTE Mobile Hotspot MHS291L] (Zero CD Mode)
+
+usb:v10A9p6085*
+ ID_MODEL_FROM_DATABASE=MHS291LVW LTE Modem [Verizon Jetpack 4G LTE Mobile Hotspot MHS291L] (Modem Mode)
+
+usb:v10A9p7031*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p7032*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p7033*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p7034*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p7035*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p7036*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
+usb:v10A9p7037*
+ ID_MODEL_FROM_DATABASE=Pantech Android composite
+
 usb:v10AA*
  ID_VENDOR_FROM_DATABASE=Cables To Go
 
@@ -40511,6 +41078,9 @@ usb:v10C4p8897*
 usb:v10C4p8918*
  ID_MODEL_FROM_DATABASE=C8051F38x HDMI Audio Extractor [VSA-HA-DP]
 
+usb:v10C4p8973*
+ ID_MODEL_FROM_DATABASE=C8051F38x HDMI Splitter [UHBX-8X]
+
 usb:v10C4pEA60*
  ID_MODEL_FROM_DATABASE=CP210x UART Bridge / myAVR mySmartUSB light
 
@@ -41514,7 +42084,7 @@ usb:v1241p1122*
  ID_MODEL_FROM_DATABASE=Typhoon Stream Optical Mouse USB+PS/2
 
 usb:v1241p1155*
- ID_MODEL_FROM_DATABASE=PS2/USB Browser Combo Mouse
+ ID_MODEL_FROM_DATABASE=Memorex Optical ScrollPro Mouse SE MX4600
 
 usb:v1241p1166*
  ID_MODEL_FROM_DATABASE=MI-2150 Trust Mouse
@@ -41573,6 +42143,9 @@ usb:v125Fp312A*
 usb:v125Fp312B*
  ID_MODEL_FROM_DATABASE=Superior S102 Pro
 
+usb:v125FpA15A*
+ ID_MODEL_FROM_DATABASE=DashDrive Durable HD710 portable HDD various size
+
 usb:v125FpA22A*
  ID_MODEL_FROM_DATABASE=DashDrive Elite HE720 500GB
 
@@ -41795,6 +42368,9 @@ usb:v1293p2101*
 usb:v1294*
  ID_VENDOR_FROM_DATABASE=RISO KAGAKU CORP.
 
+usb:v1294p1320*
+ ID_MODEL_FROM_DATABASE=Webmail Notifier
+
 usb:v129B*
  ID_VENDOR_FROM_DATABASE=CyberTAN Technology
 
@@ -41843,6 +42419,12 @@ usb:v12BAp0200*
 usb:v12BAp0210*
  ID_MODEL_FROM_DATABASE=Harmonix Drum Kit for PlayStation(R)3
 
+usb:v12BD*
+ ID_VENDOR_FROM_DATABASE=Gembird
+
+usb:v12BDpD012*
+ ID_MODEL_FROM_DATABASE=JPD Shockforce gamepad
+
 usb:v12C4*
  ID_VENDOR_FROM_DATABASE=Autocue Group Ltd
 
@@ -41891,6 +42473,9 @@ usb:v12D1p1038*
 usb:v12D1p1039*
  ID_MODEL_FROM_DATABASE=Ideos (tethering mode)
 
+usb:v12D1p1404*
+ ID_MODEL_FROM_DATABASE=EM770W miniPCI WCDMA Modem
+
 usb:v12D1p1406*
  ID_MODEL_FROM_DATABASE=E1750
 
@@ -42365,6 +42950,24 @@ usb:v1357p0503*
 usb:v1357p0504*
  ID_MODEL_FROM_DATABASE=DEMOJM
 
+usb:v135F*
+ ID_VENDOR_FROM_DATABASE=Control Development Inc.
+
+usb:v135Fp0110*
+ ID_MODEL_FROM_DATABASE=Linear Spectrograph
+
+usb:v135Fp0111*
+ ID_MODEL_FROM_DATABASE=Spectrograph - Renumerated
+
+usb:v135Fp0200*
+ ID_MODEL_FROM_DATABASE=Linear Spectrograph
+
+usb:v135Fp0201*
+ ID_MODEL_FROM_DATABASE=Spectrograph - Renumerated
+
+usb:v135Fp0240*
+ ID_MODEL_FROM_DATABASE=MPP Spectrograph
+
 usb:v1366*
  ID_VENDOR_FROM_DATABASE=SEGGER
 
@@ -42374,6 +42977,12 @@ usb:v1366p0101*
 usb:v136B*
  ID_VENDOR_FROM_DATABASE=STEC
 
+usb:v136E*
+ ID_VENDOR_FROM_DATABASE=Andor Technology Ltd.
+
+usb:v136Ep0014*
+ ID_MODEL_FROM_DATABASE=Zyla 5.5 sCMOS camera
+
 usb:v1370*
  ID_VENDOR_FROM_DATABASE=Swissbit
 
@@ -42455,9 +43064,15 @@ usb:v138Ap0007*
 usb:v138Ap0008*
  ID_MODEL_FROM_DATABASE=VFS300 Fingerprint Reader
 
+usb:v138Ap0010*
+ ID_MODEL_FROM_DATABASE=VFS Fingerprint sensor
+
 usb:v138Ap0011*
  ID_MODEL_FROM_DATABASE=VFS5011 Fingerprint Reader
 
+usb:v138Ap0017*
+ ID_MODEL_FROM_DATABASE=Fingerprint Reader
+
 usb:v138Ap0018*
  ID_MODEL_FROM_DATABASE=Fingerprint scanner
 
@@ -42824,6 +43439,12 @@ usb:v13D3p7020*
 usb:v13D3p7022*
  ID_MODEL_FROM_DATABASE=DTV-DVB UDST7022BDA DVB-S Box(Without HID)
 
+usb:v13D7*
+ ID_VENDOR_FROM_DATABASE=Guidance Software, Inc.
+
+usb:v13D7p0001*
+ ID_MODEL_FROM_DATABASE=T5 PATA forensic bridge
+
 usb:v13DC*
  ID_VENDOR_FROM_DATABASE=ALEREON, INC.
 
@@ -42860,6 +43481,9 @@ usb:v13ECp0006*
 usb:v13EE*
  ID_VENDOR_FROM_DATABASE=MosArt
 
+usb:v13EEp0001*
+ ID_MODEL_FROM_DATABASE=Optical Mouse
+
 usb:v13EEp0003*
  ID_MODEL_FROM_DATABASE=Optical Mouse
 
@@ -42935,6 +43559,9 @@ usb:v13FEp3800*
 usb:v13FEp3E00*
  ID_MODEL_FROM_DATABASE=Flash Drive
 
+usb:v13FEp4100*
+ ID_MODEL_FROM_DATABASE=Flash drive
+
 usb:v13FEp5000*
  ID_MODEL_FROM_DATABASE=USB flash drive (32 GB SHARKOON Accelerate)
 
@@ -43370,6 +43997,9 @@ usb:v148Fp5572*
 usb:v148Fp7601*
  ID_MODEL_FROM_DATABASE=MT7601U Wireless Adapter
 
+usb:v148Fp760B*
+ ID_MODEL_FROM_DATABASE=MT7601U Wireless Adapter
+
 usb:v148Fp9020*
  ID_MODEL_FROM_DATABASE=RT2500USB Wireless Adapter
 
@@ -43394,6 +44024,12 @@ usb:v1493p0019*
 usb:v1493p001A*
  ID_MODEL_FROM_DATABASE=Colibri [Ambit2 S]
 
+usb:v1493p001B*
+ ID_MODEL_FROM_DATABASE=Emu [Ambit3 Peak]
+
+usb:v1493p001C*
+ ID_MODEL_FROM_DATABASE=Finch [Ambit3 Sport]
+
 usb:v1493p001D*
  ID_MODEL_FROM_DATABASE=Greentit [Ambit2 R]
 
@@ -43514,6 +44150,9 @@ usb:v14C8*
 usb:v14CD*
  ID_VENDOR_FROM_DATABASE=Super Top
 
+usb:v14CDp1212*
+ ID_MODEL_FROM_DATABASE=microSD card reader (SY-T18)
+
 usb:v14CDp121C*
  ID_MODEL_FROM_DATABASE=microSD card reader
 
@@ -50036,6 +50675,12 @@ usb:v2770p930B*
 usb:v2770p930C*
  ID_MODEL_FROM_DATABASE=CCD Webcam(PC370R)
 
+usb:v27B8*
+ ID_VENDOR_FROM_DATABASE=ThingM
+
+usb:v27B8p01ED*
+ ID_MODEL_FROM_DATABASE=blink(1)
+
 usb:v2821*
  ID_VENDOR_FROM_DATABASE=ASUSTek Computer Inc.
 
@@ -50054,6 +50699,21 @@ usb:v2899*
 usb:v2899p012C*
  ID_MODEL_FROM_DATABASE=Camera Device
 
+usb:v2931*
+ ID_VENDOR_FROM_DATABASE=Jolla Oy
+
+usb:v2931p0A01*
+ ID_MODEL_FROM_DATABASE=Jolla Phone MTP
+
+usb:v2931p0A02*
+ ID_MODEL_FROM_DATABASE=Jolla Phone Developer
+
+usb:v2931p0A05*
+ ID_MODEL_FROM_DATABASE=Jolla PC connection
+
+usb:v2931p0AFE*
+ ID_MODEL_FROM_DATABASE=Jolla charging only
+
 usb:v2C02*
  ID_VENDOR_FROM_DATABASE=Planex Communications
 

commit 39014e2a1ce033f860bad5917c8359f3ee8b89af
Author: Michal Schmidt <mschmidt at redhat.com>
Date:   Tue Dec 9 20:27:26 2014 +0100

    journal: optimize iteration: skip files that cannot improve current candidate entry
    
    Suppose that while iterating we have already looked into a journal file
    and got a candidate for the next entry. And we are considering to look
    into another journal file because it may contain an entry that is nearer
    to the current location than the candidate.
    
    We should skip the whole journal file if we can tell by looking at its
    header that none of its entries can precede the candidate.
    
    Before:
    $ time ./journalctl --since=2014-06-01 --until=2014-07-01 > /dev/null
    
    real    0m20.518s
    user    0m19.989s
    sys     0m0.328s
    
    After:
    $ time ./journalctl --since=2014-06-01 --until=2014-07-01 > /dev/null
    
    real    0m9.445s
    user    0m9.228s
    sys     0m0.213s
    
    (cherry picked from commit f8b5a3b75fb55f0acb85c21424b3893c822742e9)

diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c
index 2df147c..32c6976 100644
--- a/src/journal/sd-journal.c
+++ b/src/journal/sd-journal.c
@@ -517,6 +517,27 @@ static bool whole_file_precedes_location(JournalFile *f, Location *l, direction_
         return false;
 }
 
+static bool file_may_have_preceding_entry(JournalFile *f, JournalFile *of, uint64_t op, direction_t direction) {
+        Object *o;
+        int r;
+
+        assert(f);
+        assert(of);
+
+        r = journal_file_move_to_object(of, OBJECT_ENTRY, op, &o);
+        if (r < 0)
+                return true;
+
+        if (sd_id128_equal(f->header->seqnum_id, of->header->seqnum_id))
+                return direction == DIRECTION_DOWN ?
+                        le64toh(o->entry.seqnum) >= le64toh(f->header->head_entry_seqnum) :
+                        le64toh(o->entry.seqnum) <= le64toh(f->header->tail_entry_seqnum);
+
+        return direction == DIRECTION_DOWN ?
+                le64toh(o->entry.realtime) >= le64toh(f->header->head_entry_realtime) :
+                le64toh(o->entry.realtime) <= le64toh(f->header->tail_entry_realtime);
+}
+
 _pure_ static int compare_with_location(JournalFile *af, Object *ao, Location *l) {
         uint64_t a;
 
@@ -905,6 +926,9 @@ static int real_journal_next(sd_journal *j, direction_t direction) {
                 if (whole_file_precedes_location(f, &j->current_location, direction))
                         continue;
 
+                if (new_file && !file_may_have_preceding_entry(f, new_file, new_offset, direction))
+                        continue;
+
                 r = next_beyond_location(j, f, direction, &o, &p);
                 if (r < 0) {
                         log_debug("Can't iterate through %s, ignoring: %s", f->path, strerror(-r));

commit 14e4d410b2606ff5f1e1aa5766a0c2a4f8284072
Author: Michal Schmidt <mschmidt at redhat.com>
Date:   Tue Dec 9 20:27:19 2014 +0100

    journal: optimize iteration: skip whole files behind current location
    
    Interleaving of entries from many journal files is expensive. But there
    is room for optimization.
    
    We can skip looking into journal files whose entries all lie before the
    current iterating location. We can tell if that's the case from looking
    at the journal file header. This saves a huge amount of work if one has
    many of mostly not interleaved journal files.
    
    On my workstation with 90 journal files in /var/log/journal/ID/
    totalling 3.4 GB I get these results:
    
    Before:
    $ time ./journalctl --since=2014-06-01 --until=2014-07-01 > /dev/null
    
    real    5m54.258s
    user    2m4.263s
    sys     3m48.965s
    
    After:
    $ time ./journalctl --since=2014-06-01 --until=2014-07-01 > /dev/null
    
    real    0m20.518s
    user    0m19.989s
    sys     0m0.328s
    
    The high "sys" time in the original was caused by putting more stress on
    the mmap-cache than it could handle. With the patch the working set
    now consists of fewer mmap windows and mmap-cache is not thrashing.
    
    (cherry picked from commit b7c88ab8cc7d55a43450bf3dea750f95f2e910d6)

diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c
index cf21c4d..2df147c 100644
--- a/src/journal/sd-journal.c
+++ b/src/journal/sd-journal.c
@@ -497,6 +497,26 @@ static int compare_entry_order(JournalFile *af, Object *_ao,
         return 0;
 }
 
+static bool whole_file_precedes_location(JournalFile *f, Location *l, direction_t direction) {
+        assert(f);
+        assert(l);
+
+        if (l->type != LOCATION_DISCRETE && l->type != LOCATION_SEEK)
+                return false;
+
+        if (l->seqnum_set && sd_id128_equal(l->seqnum_id, f->header->seqnum_id))
+                return direction == DIRECTION_DOWN ?
+                        l->seqnum > le64toh(f->header->tail_entry_seqnum) :
+                        l->seqnum < le64toh(f->header->head_entry_seqnum);
+
+        if (l->realtime_set)
+                return direction == DIRECTION_DOWN ?
+                        l->realtime > le64toh(f->header->tail_entry_realtime) :
+                        l->realtime < le64toh(f->header->head_entry_realtime);
+
+        return false;
+}
+
 _pure_ static int compare_with_location(JournalFile *af, Object *ao, Location *l) {
         uint64_t a;
 
@@ -882,6 +902,9 @@ static int real_journal_next(sd_journal *j, direction_t direction) {
         ORDERED_HASHMAP_FOREACH(f, j->files, i) {
                 bool found;
 
+                if (whole_file_precedes_location(f, &j->current_location, direction))
+                        continue;
+
                 r = next_beyond_location(j, f, direction, &o, &p);
                 if (r < 0) {
                         log_debug("Can't iterate through %s, ignoring: %s", f->path, strerror(-r));

commit 94b9640cc14a71c6df32da4e218c0b3cfb9b8795
Author: WaLyong Cho <walyong.cho at samsung.com>
Date:   Tue Dec 9 21:46:30 2014 +0900

    unit: update unit dropin paths and time when dropin file is written.
    
    If a unit is set property by "systemctl set-property", a new dropin
    file is generated. But the unit's dropin_paths and dropin_mtime are
    not updated. So the unit is shown as need daemon reload.
    Update unit dropin_paths and dropin_mtime also when dropin file is
    written.
    
    (cherry picked from commit adb76a701d870b980f7949bcfece2c1547b4976d)

diff --git a/src/core/unit.c b/src/core/unit.c
index 489ea1e..8bf026f 100644
--- a/src/core/unit.c
+++ b/src/core/unit.c
@@ -3172,7 +3172,7 @@ static int unit_drop_in_file(Unit *u,
 
 int unit_write_drop_in(Unit *u, UnitSetPropertiesMode mode, const char *name, const char *data) {
 
-        _cleanup_free_ char *dir = NULL;
+        _cleanup_free_ char *dir = NULL, *p = NULL, *q = NULL;
         int r;
 
         assert(u);
@@ -3184,7 +3184,24 @@ int unit_write_drop_in(Unit *u, UnitSetPropertiesMode mode, const char *name, co
         if (r < 0)
                 return r;
 
-        return write_drop_in(dir, u->id, 50, name, data);
+        r = write_drop_in(dir, u->id, 50, name, data);
+        if (r < 0)
+                return r;
+
+        r = drop_in_file(dir, u->id, 50, name, &p, &q);
+        if (r < 0)
+                return r;
+
+        r = strv_extend(&u->dropin_paths, q);
+        if (r < 0)
+                return r;
+
+        strv_sort(u->dropin_paths);
+        strv_uniq(u->dropin_paths);
+
+        u->dropin_mtime = now(CLOCK_REALTIME);
+
+        return 0;
 }
 
 int unit_write_drop_in_format(Unit *u, UnitSetPropertiesMode mode, const char *name, const char *format, ...) {

commit 80a3e077864441c3d20a327516c645f04d6b847b
Author: Dan Winship <danw at redhat.com>
Date:   Tue Nov 18 08:59:42 2014 -0500

    libsystemd-network: fix writing of routes in dhcp lease file
    
    inet_ntoa() uses a static buffer, so you can't call it twice in the
    same fprintf() call.
    
    (cherry picked from commit fbf7dcb5886f4077ee0dea618447ab488ff148fc)

diff --git a/src/libsystemd-network/network-internal.c b/src/libsystemd-network/network-internal.c
index 372f3ed..d56ee51 100644
--- a/src/libsystemd-network/network-internal.c
+++ b/src/libsystemd-network/network-internal.c
@@ -392,10 +392,12 @@ void serialize_dhcp_routes(FILE *f, const char *key, struct sd_dhcp_route *route
 
         fprintf(f, "%s=", key);
 
-        for (i = 0; i < size; i++)
-                fprintf(f, "%s/%" PRIu8 ",%s%s", inet_ntoa(routes[i].dst_addr),
-                        routes[i].dst_prefixlen, inet_ntoa(routes[i].gw_addr),
+        for (i = 0; i < size; i++) {
+                fprintf(f, "%s/%" PRIu8, inet_ntoa(routes[i].dst_addr),
+                        routes[i].dst_prefixlen);
+                fprintf(f, ",%s%s", inet_ntoa(routes[i].gw_addr),
                         (i < (size - 1)) ? " ": "");
+        }
 
         fputs("\n", f);
 }

commit 2d1f19f2615f73eba8a95765a982492b385699b7
Author: Wesley Dawson <whd at mozilla.com>
Date:   Sun Nov 30 23:27:00 2014 -0800

    journalctl: respect --after-cursor semantics with --follow in all cases
    
    In the case where no entries have been added to the journal after the specified
    cursor, set need_seek before the main loop to prevent display of the entry at
    said cursor.
    
    (cherry picked from commit 8ee8e53648bf45854d92b60e1e70c17a0cec3c3d)

diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
index 03579fd..03a3cae 100644
--- a/src/journal/journalctl.c
+++ b/src/journal/journalctl.c
@@ -1918,9 +1918,13 @@ int main(int argc, char *argv[]) {
                 else
                         r = sd_journal_previous_skip(j, 1 + !!arg_after_cursor);
 
-                if (arg_after_cursor && r < 2 && !arg_follow)
+                if (arg_after_cursor && r < 2) {
                         /* We couldn't find the next entry after the cursor. */
-                        arg_lines = 0;
+                        if (arg_follow)
+                                need_seek = true;
+                        else
+                                arg_lines = 0;
+                }
 
         } else if (arg_since_set && !arg_reverse) {
                 r = sd_journal_seek_realtime_usec(j, arg_since);

commit b17c418f4b03e70c9fedec61f2d9036d1a48d901
Author: Ross Lagerwall <rosslagerwall at gmail.com>
Date:   Sat Nov 29 15:27:14 2014 +0000

    cgroup: Handle error when destroying cgroup
    
    If a cgroup fails to be destroyed (most likely because there are still
    processes running as part of a service after the main pid exits), don't
    free and remove the cgroup unit from the manager.  This fixes a
    regression introduced by the cgroup rework in v205 where systemd would
    forget about processes still running after the unit becomes inactive.
    (This can happen when the main pid exits and KillMode=process or none).
    
    (cherry picked from commit dab5bf859900c0abdbf78c584e4aed42a19768cd)
    
    Conflicts:
    	src/core/cgroup.c

diff --git a/src/core/cgroup.c b/src/core/cgroup.c
index e604c3c..b19e442 100644
--- a/src/core/cgroup.c
+++ b/src/core/cgroup.c
@@ -781,8 +781,10 @@ void unit_destroy_cgroup(Unit *u) {
                 return;
 
         r = cg_trim_everywhere(u->manager->cgroup_supported, u->cgroup_path, !unit_has_name(u, SPECIAL_ROOT_SLICE));
-        if (r < 0)
+        if (r < 0) {
                 log_debug("Failed to destroy cgroup %s: %s", u->cgroup_path, strerror(-r));
+                return;
+        }
 
         hashmap_remove(u->manager->cgroup_unit, u->cgroup_path);
 

commit 10cd8af600030350485a013b42f99a14af817e89
Author: Michael Marineau <michael.marineau at coreos.com>
Date:   Mon Dec 8 11:05:31 2014 -0800

    fstab-generator: Allow mount.usr without mount.usrflags, honor rw/ro
    
    There is no need to require mount.usrflags. The original implementation
    assumed that a btrfs subvolume would always be needed but that is not
    applicable to systems that do not use btrfs for /usr.
    
    Similar to using rootflags= for the default of mount.usrflags=, append
    the classic 'ro' and 'rw' flags to the mount options.
    
    (cherry picked from commit eb5800026d5a6754514fb8f8a8561b49974fc879)

diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
index eba3009..46c7667 100644
--- a/src/fstab-generator/fstab-generator.c
+++ b/src/fstab-generator/fstab-generator.c
@@ -490,7 +490,7 @@ static int add_usr_mount(void) {
                         return log_oom();
         }
 
-        if (!arg_usr_what || !arg_usr_options)
+        if (!arg_usr_what)
                 return 0;
 
         what = fstab_node_to_udev_node(arg_usr_what);
@@ -499,7 +499,13 @@ static int add_usr_mount(void) {
                 return -1;
         }
 
-        opts = arg_usr_options;
+        if (!arg_usr_options)
+                opts = arg_root_rw > 0 ? "rw" : "ro";
+        else if (!mount_test_option(arg_usr_options, "ro") &&
+                 !mount_test_option(arg_usr_options, "rw"))
+                opts = strappenda(arg_usr_options, ",", arg_root_rw > 0 ? "rw" : "ro");
+        else
+                opts = arg_usr_options;
 
         log_debug("Found entry what=%s where=/sysroot/usr type=%s", what, strna(arg_usr_fstype));
         return add_mount(what,

commit 317f394e34bff53831bd8a7b18f58eb766108a61
Author: Lennart Poettering <lennart at poettering.net>
Date:   Tue Dec 9 02:12:11 2014 +0100

    units: make sure container-getty at .service stops restarting when the pts device it is bound to is gone
    
    We only want to restart the getty as long as the pts device is still
    around. As soon as it is gone, the service should be removed to.
    
    http://lists.freedesktop.org/archives/systemd-devel/2014-December/026048.html
    (cherry picked from commit 68ac53e62fadb87f1b33ccd9bff9c3f7f699c937)

diff --git a/units/container-getty at .service.m4.in b/units/container-getty at .service.m4.in
index 4f7794b..5120466 100644
--- a/units/container-getty at .service.m4.in
+++ b/units/container-getty at .service.m4.in
@@ -14,6 +14,7 @@ After=rc-local.service
 )m4_dnl
 Before=getty.target
 IgnoreOnIsolate=yes
+ConditionPathExists=/dev/pts/%I
 
 [Service]
 ExecStart=-/sbin/agetty --noclear --keep-baud pts/%I 115200,38400,9600 $TERM

commit c3ce6202ec0097f918d2e3e3f036b28c25813385
Author: Olivier Brunel <jjk at jjacky.com>
Date:   Fri Dec 5 16:06:45 2014 +0100

    journal: Fix navigating backwards missing entries
    
    With DIRECTION_UP (i.e. navigating backwards) in generic_array_bisect() when the
    needle was found as the last item in the array, it wasn't actually processed as
    match, resulting in entries being missed.
    
    https://bugs.freedesktop.org/show_bug.cgi?id=86855
    (cherry picked from commit 2173cbf847fc53ca24950e77958c902edecfc207)

diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
index 8a2c0fc..9de3ddd 100644
--- a/src/journal/journal-file.c
+++ b/src/journal/journal-file.c
@@ -1657,7 +1657,7 @@ static int generic_array_bisect(
                         }
                 }
 
-                if (k > n) {
+                if (k >= n) {
                         if (direction == DIRECTION_UP) {
                                 i = n;
                                 subtract_one = true;

commit 438a97630fc20f40725273d485396b52e548ed74
Author: Tom Gundersen <teg at jklm.no>
Date:   Mon Dec 8 18:36:16 2014 +0100

    sd-rtnl: fix bogus warning about dropping 20 bytes from multi-part messages
    
    Nothing was being dropped, we just failed to account for the NLMSG_DONE.
    
    (cherry picked from commit 0e707326fcecd3968efa7dc827123032f1b2cb61)

diff --git a/src/libsystemd/sd-rtnl/rtnl-message.c b/src/libsystemd/sd-rtnl/rtnl-message.c
index b501a52..725bedb 100644
--- a/src/libsystemd/sd-rtnl/rtnl-message.c
+++ b/src/libsystemd/sd-rtnl/rtnl-message.c
@@ -1222,7 +1222,7 @@ int socket_read_message(sd_rtnl *rtnl) {
                 }
         }
 
-        for (new_msg = rtnl->rbuffer; NLMSG_OK(new_msg, len); new_msg = NLMSG_NEXT(new_msg, len)) {
+        for (new_msg = rtnl->rbuffer; NLMSG_OK(new_msg, len) && !done; new_msg = NLMSG_NEXT(new_msg, len)) {
                 _cleanup_rtnl_message_unref_ sd_rtnl_message *m = NULL;
                 const NLType *nl_type;
 
@@ -1237,7 +1237,8 @@ int socket_read_message(sd_rtnl *rtnl) {
                 if (new_msg->nlmsg_type == NLMSG_DONE) {
                         /* finished reading multi-part message */
                         done = true;
-                        break;
+
+                        continue;
                 }
 
                 /* check that we support this message type */

commit 82cf6e4a7bb21a612d5fd8b5776baddcf61be2de
Author: Felipe Sateler <fsateler at gmail.com>
Date:   Fri Dec 5 14:08:38 2014 +0100

    man: fix reference to obsolete command "systemctl dump"
    
    https://bugs.freedesktop.org/show_bug.cgi?id=87020
    (cherry picked from commit 030512b2449921517d04bbd9357c0700cb0b4290)

diff --git a/man/systemd.xml b/man/systemd.xml
index bf7a7a6..736f5b7 100644
--- a/man/systemd.xml
+++ b/man/systemd.xml
@@ -679,7 +679,7 @@
                                 received the systemd manager will log
                                 its complete state in human readable
                                 form. The data logged is the same as
-                                printed by <command>systemctl
+                                printed by <command>systemd-analyze
                                 dump</command>.</para></listitem>
                         </varlistentry>
 

commit 79c7d714b22f004841089be3c9444bbfa57ccef3
Author: Lennart Poettering <lennart at poettering.net>
Date:   Fri Dec 5 00:47:38 2014 +0100

    man: there's actually no "fail" fstab option, but only "nofail"
    
    (cherry picked from commit deb6120920e6341b1c16f5f088ab057358bb8fc4)

diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
index 6d8eae6..8527386 100644
--- a/man/systemd.mount.xml
+++ b/man/systemd.mount.xml
@@ -196,16 +196,13 @@
 
                   <varlistentry>
                     <term><option>nofail</option></term>
-                    <term><option>fail</option></term>
 
                     <listitem><para>With <option>nofail</option> this
                     mount will be only wanted, not required, by
                     <filename>local-fs.target</filename> or
                     <filename>remote-fs.target</filename>. This means
                     that the boot will continue even if this mount
-                    point is not mounted successfully. Option
-                    <option>fail</option> has the opposite meaning and
-                    is the default.</para>
+                    point is not mounted successfully.</para>
                     </listitem>
                   </varlistentry>
 

commit c7a48f669fd6462a6d4918bb7b398b6b371e6719
Author: Marcel Holtmann <marcel at holtmann.org>
Date:   Thu Dec 4 16:07:49 2014 +0100

    hwdb: Update database of Bluetooth company identifiers
    
    (cherry picked from commit 9624f0c1549921f5c1fc49281c624815c30bf38d)

diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb
index 58ca87d..5a4670d 100644
--- a/hwdb/20-bluetooth-vendor-product.hwdb
+++ b/hwdb/20-bluetooth-vendor-product.hwdb
@@ -1223,3 +1223,57 @@ bluetooth:v0194*
 
 bluetooth:v0195*
  ID_VENDOR_FROM_DATABASE=Zuli
+
+bluetooth:v0196*
+ ID_VENDOR_FROM_DATABASE=Paxton Access Ltd
+
+bluetooth:v0197*
+ ID_VENDOR_FROM_DATABASE=WiSilica Inc
+
+bluetooth:v0198*
+ ID_VENDOR_FROM_DATABASE=Vengit Limited
+
+bluetooth:v0199*
+ ID_VENDOR_FROM_DATABASE=SALTO SYSTEMS S.L.
+
+bluetooth:v019A*
+ ID_VENDOR_FROM_DATABASE=T-Engine Forum
+
+bluetooth:v019B*
+ ID_VENDOR_FROM_DATABASE=CUBETECH s.r.o.
+
+bluetooth:v019C*
+ ID_VENDOR_FROM_DATABASE=Cokiya Incorporated
+
+bluetooth:v019D*
+ ID_VENDOR_FROM_DATABASE=CVS Health
+
+bluetooth:v019E*
+ ID_VENDOR_FROM_DATABASE=Ceruus
+
+bluetooth:v019F*
+ ID_VENDOR_FROM_DATABASE=Strainstall Ltd
+
+bluetooth:v01A0*
+ ID_VENDOR_FROM_DATABASE=Channel Enterprises (HK) Ltd.
+
+bluetooth:v01A1*
+ ID_VENDOR_FROM_DATABASE=FIAMM
+
+bluetooth:v01A2*
+ ID_VENDOR_FROM_DATABASE=GIGALANE.CO.,LTD
+
+bluetooth:v01A3*
+ ID_VENDOR_FROM_DATABASE=EROAD
+
+bluetooth:v01A4*
+ ID_VENDOR_FROM_DATABASE=Mine Safety Appliances
+
+bluetooth:v01A5*
+ ID_VENDOR_FROM_DATABASE=Icon Health and Fitness
+
+bluetooth:v01A6*
+ ID_VENDOR_FROM_DATABASE=Asandoo GmbH
+
+bluetooth:v01A7*
+ ID_VENDOR_FROM_DATABASE=ENERGOUS CORPORATION

commit afc1142c0fbbc869d2047ab9f29215849ba8761c
Author: Michal Sekletar <msekleta at redhat.com>
Date:   Wed Nov 12 13:53:27 2014 +0100

    selinux: figure out selinux context applied on exec() before closing all fds
    
    We need original socket_fd around otherwise mac_selinux_get_child_mls_label
    fails with -EINVAL return code. Also don't call setexeccon twice but rather pass
    context value of SELinuxContext option as an extra argument.
    
    (cherry picked from commit 9008e1ac925afcdef7b45042c03fa5444f1c52c2)

diff --git a/src/core/execute.c b/src/core/execute.c
index c41aec2..f45f1c1 100644
--- a/src/core/execute.c
+++ b/src/core/execute.c
@@ -1236,6 +1236,7 @@ static int exec_child(ExecCommand *command,
                       int *error) {
 
         _cleanup_strv_free_ char **our_env = NULL, **pam_env = NULL, **final_env = NULL, **final_argv = NULL;
+        _cleanup_free_ char *mac_selinux_context_net = NULL;
         const char *username = NULL, *home = NULL, *shell = NULL;
         unsigned n_dont_close = 0;
         int dont_close[n_fds + 4];
@@ -1581,6 +1582,16 @@ static int exec_child(ExecCommand *command,
                 }
         }
 
+#ifdef HAVE_SELINUX
+        if (params->apply_permissions && mac_selinux_use() && params->selinux_context_net && socket_fd >= 0) {
+                err = mac_selinux_get_child_mls_label(socket_fd, command->path, context->selinux_context, &mac_selinux_context_net);
+                if (err < 0) {
+                        *error = EXIT_SELINUX_CONTEXT;
+                        return err;
+                }
+        }
+#endif
+
         /* We repeat the fd closing here, to make sure that
          * nothing is leaked from the PAM modules. Note that
          * we are more aggressive this time since socket_fd
@@ -1670,24 +1681,10 @@ static int exec_child(ExecCommand *command,
 
 #ifdef HAVE_SELINUX
                 if (mac_selinux_use()) {
-                        if (context->selinux_context) {
-                                err = setexeccon(context->selinux_context);
-                                if (err < 0 && !context->selinux_context_ignore) {
-                                        *error = EXIT_SELINUX_CONTEXT;
-                                        return err;
-                                }
-                        }
-
-                        if (params->selinux_context_net && socket_fd >= 0) {
-                                _cleanup_free_ char *label = NULL;
-
-                                err = mac_selinux_get_child_mls_label(socket_fd, command->path, &label);
-                                if (err < 0) {
-                                        *error = EXIT_SELINUX_CONTEXT;
-                                        return err;
-                                }
+                        char *exec_context = mac_selinux_context_net ?: context->selinux_context;
 
-                                err = setexeccon(label);
+                        if (exec_context) {
+                                err = setexeccon(exec_context);
                                 if (err < 0) {
                                         *error = EXIT_SELINUX_CONTEXT;
                                         return err;
diff --git a/src/shared/selinux-util.c b/src/shared/selinux-util.c
index 6bd3bf1..a2233e0 100644
--- a/src/shared/selinux-util.c
+++ b/src/shared/selinux-util.c
@@ -233,7 +233,7 @@ int mac_selinux_get_our_label(char **label) {
         return r;
 }
 
-int mac_selinux_get_child_mls_label(int socket_fd, const char *exe, char **label) {
+int mac_selinux_get_child_mls_label(int socket_fd, const char *exe, const char *exec_label, char **label) {
         int r = -EOPNOTSUPP;
 
 #ifdef HAVE_SELINUX
@@ -257,11 +257,7 @@ int mac_selinux_get_child_mls_label(int socket_fd, const char *exe, char **label
         if (r < 0)
                 return -errno;
 
-        r = getexeccon(&fcon);
-        if (r < 0)
-                return -errno;
-
-        if (!fcon) {
+        if (!exec_label) {
                 /* If there is no context set for next exec let's use context
                    of target executable */
                 r = getfilecon(exe, &fcon);
diff --git a/src/shared/selinux-util.h b/src/shared/selinux-util.h
index 7ff8c60..a694441 100644
--- a/src/shared/selinux-util.h
+++ b/src/shared/selinux-util.h
@@ -36,7 +36,7 @@ int mac_selinux_apply(const char *path, const char *label);
 
 int mac_selinux_get_create_label_from_exe(const char *exe, char **label);
 int mac_selinux_get_our_label(char **label);
-int mac_selinux_get_child_mls_label(int socket_fd, const char *exec, char **label);
+int mac_selinux_get_child_mls_label(int socket_fd, const char *exe, const char *exec_label, char **label);
 void mac_selinux_free(char *label);
 
 int mac_selinux_create_file_prepare(const char *path, mode_t mode);

commit 4ca9e1500fb5648570b06e4d912f58b79370984c
Author: Michal Sekletar <msekleta at redhat.com>
Date:   Wed Nov 12 15:19:42 2014 +0100

    units: skip mounting /dev/hugepages if we don't have CAP_SYS_ADMIN
    
    Preparation for allowing systemd to run gracefully in containers lacking
    CAP_SYS_ADMIN.
    
    (cherry picked from commit fe0b9cd3ba25fb5063b6782983dde0a0c9915660)

diff --git a/units/dev-hugepages.mount b/units/dev-hugepages.mount
index d711fae..882adb4 100644
--- a/units/dev-hugepages.mount
+++ b/units/dev-hugepages.mount
@@ -12,6 +12,7 @@ Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
 DefaultDependencies=no
 Before=sysinit.target
 ConditionPathExists=/sys/kernel/mm/hugepages
+ConditionCapability=CAP_SYS_ADMIN
 
 [Mount]
 What=hugetlbfs

commit 421c413c2e8a99f442a26b794f9569b01ff89bb9
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Dec 3 17:52:51 2014 +0100

    nspawn: correct EEXIST check when creating directory to mount /tmp in
    
    https://bugs.freedesktop.org/show_bug.cgi?id=86309
    (cherry picked from commit 04a919394069cf024559f78eb46692a3739641eb)
    
    Conflicts:
    	src/nspawn/nspawn.c

diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index 4e0fbb6..27e533c 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -818,7 +818,7 @@ static int mount_tmpfs(const char *dest) {
                         return log_oom();
 
                 r = mkdir_label(where, 0755);
-                if (r < 0 && errno != EEXIST) {
+                if (r < 0 && r != EEXIST) {
                         log_error("creating mount point for tmpfs %s failed: %s", where, strerror(-r));
 
                         return r;

commit 8a791603cbb74dc799311f48c2722cc5d6b1a42b
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Dec 3 01:59:42 2014 +0100

    libudev: set errno properly in all error conditions of udev_device_new_from_syspath()
    
    (cherry picked from commit 154e6f233af028cf76608d49a3b7ed8de61373d8)

diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c
index 2699374..e2afcb8 100644
--- a/src/libudev/libudev-device.c
+++ b/src/libudev/libudev-device.c
@@ -730,8 +730,13 @@ _public_ struct udev_device *udev_device_new_from_syspath(struct udev *udev, con
                         return NULL;
         } else {
                 /* everything else just needs to be a directory */
-                if (stat(path, &statbuf) != 0 || !S_ISDIR(statbuf.st_mode))
+                if (stat(path, &statbuf) != 0)
                         return NULL;
+
+                if (!S_ISDIR(statbuf.st_mode)) {
+                        errno = EISDIR;
+                        return NULL;
+                }
         }
 
         udev_device = udev_device_new(udev);

commit 233fe6f6ae4138feee8c47f7cffae79e4007980a
Author: Umut Tezduyar Lindskog <umut.tezduyar at axis.com>
Date:   Sun Nov 30 09:32:39 2014 +0100

    man: BusName= is not optional for Type!=bus
    
    http://lists.freedesktop.org/archives/systemd-devel/2014-November/025492.html
    (cherry picked from commit f4e9cdbc6259237b2cb779a16e7c1aca0fd44e58)

diff --git a/man/systemd.service.xml b/man/systemd.service.xml
index 115d169..60abfb9 100644
--- a/man/systemd.service.xml
+++ b/man/systemd.service.xml
@@ -301,9 +301,7 @@
                                 as. This option is mandatory for
                                 services where
                                 <varname>Type=</varname> is set to
-                                <option>dbus</option>, but its use
-                                is otherwise recommended if the process
-                                takes a name on the D-Bus bus.</para>
+                                <option>dbus</option>.</para>
                                 </listitem>
                         </varlistentry>
 

commit ffd2960a66a47c7c3f47c0c0ee6ca46a36c7be37
Author: Chris Atkinson <cwa at pipeline.com>
Date:   Sun Nov 30 22:13:06 2014 -0500

    man: delete ZX as sole compression; "Compress=" as boolean
    
    In man journald.conf, removes reference to XZ as sole form of
    compression. See commit d89c8fdf48c7bad5816b9f2e77e8361721f22517.
    
    In man coredump.conf, clarifies that "Compression=" controls existence,
    not type, of compression.
    
    (cherry picked from commit 442f7f155358a7396a350d3c47ea42e86bee4024)

diff --git a/man/coredump.conf.xml b/man/coredump.conf.xml
index 0c9160e..17c9651 100644
--- a/man/coredump.conf.xml
+++ b/man/coredump.conf.xml
@@ -90,7 +90,7 @@
       <varlistentry>
         <term><varname>Compress=</varname></term>
 
-        <listitem><para>Controls the type of compression for external
+        <listitem><para>Controls compression for external
         storage. Takes a boolean argument, defaults to
         <literal>yes</literal>.</para>
         </listitem>

commit ecbc18c00e5312f0e422a3f5482a5987a7ad0aed
Author: Ross Lagerwall <rosslagerwall at gmail.com>
Date:   Sat Nov 29 11:31:30 2014 +0000

    cgroup-util: Don't send SIGCONT after SIGKILL
    
    (cherry picked from commit dc8962da74c62779d8899a8166f704c30287fff0)

diff --git a/src/shared/cgroup-util.c b/src/shared/cgroup-util.c
index da8e885..3e6629f 100644
--- a/src/shared/cgroup-util.c
+++ b/src/shared/cgroup-util.c
@@ -195,7 +195,7 @@ int cg_kill(const char *controller, const char *path, int sig, bool sigcont, boo
                                 if (ret >= 0 && errno != ESRCH)
                                         ret = -errno;
                         } else {
-                                if (sigcont)
+                                if (sigcont && sig != SIGKILL)
                                         kill(pid, SIGCONT);
 
                                 if (ret == 0)

commit b34aa60fd0b9027bc940fa1f5d3eec76d10bab47
Author: Ronny Chevalier <chevalier.ronny at gmail.com>
Date:   Sun Nov 30 20:28:36 2014 +0100

    man: document that we set both soft and hard limits for Limit directives
    
    See
    http://cgit.freedesktop.org/systemd/systemd/tree/src/core/load-fragment.c#n1100
    
    (cherry picked from commit 6067b34a1f770f845157f15b0c85b2f1140a2351)

diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
index fe4fde8..62a690a 100644
--- a/man/systemd.exec.xml
+++ b/man/systemd.exec.xml
@@ -708,9 +708,9 @@
                                 <term><varname>LimitNICE=</varname></term>
                                 <term><varname>LimitRTPRIO=</varname></term>
                                 <term><varname>LimitRTTIME=</varname></term>
-                                <listitem><para>These settings control
-                                various resource limits for executed
-                                processes. See
+                                <listitem><para>These settings set both
+                                soft and hard limits of various resources for
+                                executed processes. See
                                 <citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</manvolnum></citerefentry>
                                 for details. Use the string
                                 <varname>infinity</varname> to

commit b2f8aff2557dbb48f28dbafe37c34aee6a993020
Author: Ronny Chevalier <chevalier.ronny at gmail.com>
Date:   Sun Nov 30 20:20:59 2014 +0100

    man: fix typos
    
    (cherry picked from commit 536256fc913f20ab09809fac7fdea96577704191)

diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
index 179130e..fe4fde8 100644
--- a/man/systemd.exec.xml
+++ b/man/systemd.exec.xml
@@ -250,7 +250,7 @@
                                 processes. Takes a space-separated
                                 list of CPU indices. This option may
                                 be specified more than once in which
-                                case the specificed CPU affinity masks
+                                case the specified CPU affinity masks
                                 are merged. If the empty string is
                                 assigned, the mask is reset, all
                                 assignments prior to this will have no
@@ -1196,7 +1196,7 @@
                                 process. If set, this will override
                                 the automated domain
                                 transition. However, the policy still
-                                needs to autorize the transition. This
+                                needs to authorize the transition. This
                                 directive is ignored if SELinux is
                                 disabled. If prefixed by
                                 <literal>-</literal>, all errors will
@@ -1492,7 +1492,7 @@
                                 <term><varname>$PATH</varname></term>
 
                                 <listitem><para>Colon-separated list
-                                of directiories to use when launching
+                                of directories to use when launching
                                 executables. Systemd uses a fixed
                                 value of
                                 <filename>/usr/local/sbin</filename>:<filename>/usr/local/bin</filename>:<filename>/usr/sbin</filename>:<filename>/usr/bin</filename>:<filename>/sbin</filename>:<filename>/bin</filename>.

commit a6bd1d811dc9d7ac43b57377f70bf9814b350df0
Author: Ronny Chevalier <chevalier.ronny at gmail.com>
Date:   Sun Nov 30 20:12:13 2014 +0100

    man: document equivalence between Limit directives and ulimit
    
    See https://bugs.freedesktop.org/show_bug.cgi?id=80341
    
    (cherry picked from commit b8825fff7bf153ea9f17c46a40278df2e780829d)

diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
index e9af4ab..179130e 100644
--- a/man/systemd.exec.xml
+++ b/man/systemd.exec.xml
@@ -716,6 +716,87 @@
                                 <varname>infinity</varname> to
                                 configure no limit on a specific
                                 resource.</para></listitem>
+
+                                <table>
+                                        <title>Limit directives and their equivalent with ulimit</title>
+
+                                        <tgroup cols='2'>
+                                                <colspec colname='directive' />
+                                                <colspec colname='equivalent' />
+                                                <thead>
+                                                        <row>
+                                                                <entry>Directive</entry>
+                                                                <entry>ulimit equivalent</entry>
+                                                        </row>
+                                                </thead>
+                                                <tbody>
+                                                        <row>
+                                                                <entry>LimitCPU</entry>
+                                                                <entry>ulimit -t</entry>
+                                                        </row>
+                                                        <row>
+                                                                <entry>LimitFSIZE</entry>
+                                                                <entry>ulimit -f</entry>
+                                                        </row>
+                                                        <row>
+                                                                <entry>LimitDATA</entry>
+                                                                <entry>ulimit -d</entry>
+                                                        </row>
+                                                        <row>
+                                                                <entry>LimitSTACK</entry>
+                                                                <entry>ulimit -s</entry>
+                                                        </row>
+                                                        <row>
+                                                                <entry>LimitCORE</entry>
+                                                                <entry>ulimit -c</entry>
+                                                        </row>
+                                                        <row>
+                                                                <entry>LimitRSS</entry>
+                                                                <entry>ulimit -m</entry>
+                                                        </row>
+                                                        <row>
+                                                                <entry>LimitNOFILE</entry>
+                                                                <entry>ulimit -n</entry>
+                                                        </row>
+                                                        <row>
+                                                                <entry>LimitAS</entry>
+                                                                <entry>ulimit -v</entry>
+                                                        </row>
+                                                        <row>
+                                                                <entry>LimitNPROC</entry>
+                                                                <entry>ulimit -u</entry>
+                                                        </row>
+                                                        <row>
+                                                                <entry>LimitMEMLOCK</entry>
+                                                                <entry>ulimit -l</entry>
+                                                        </row>
+                                                        <row>
+                                                                <entry>LimitLOCKS</entry>
+                                                                <entry>ulimit -x</entry>
+                                                        </row>
+                                                        <row>
+                                                                <entry>LimitSIGPENDING</entry>
+                                                                <entry>ulimit -i</entry>
+                                                        </row>
+                                                        <row>
+                                                                <entry>LimitMSGQUEUE</entry>
+                                                                <entry>ulimit -q</entry>
+                                                        </row>
+                                                        <row>
+                                                                <entry>LimitNICE</entry>
+                                                                <entry>ulimit -e</entry>
+                                                        </row>
+                                                        <row>
+                                                                <entry>LimitRTPRIO</entry>
+                                                                <entry>ulimit -r</entry>
+                                                        </row>
+                                                        <row>
+                                                                <entry>LimitRTTIME</entry>
+                                                                <entry>No equivalent</entry>
+                                                        </row>
+                                                </tbody>
+                                        </tgroup>
+                                </table>
                         </varlistentry>
 
                         <varlistentry>

commit abed503bfebf2ea985cb250da77c84364bb9f1a0
Author: Chris Mayo <aklhfex at gmail.com>
Date:   Sun Nov 30 14:44:25 2014 +0000

    man: fix link to systemd-networkd-wait-online.service in systemd-networkd.service(8)
    
    (cherry picked from commit da80c219d7283ae89d67f8e54addc9db1f2d421f)

diff --git a/man/systemd-networkd.service.xml b/man/systemd-networkd.service.xml
index 0570798..7c20fa4 100644
--- a/man/systemd-networkd.service.xml
+++ b/man/systemd-networkd.service.xml
@@ -95,7 +95,7 @@
                         <citerefentry><refentrytitle>systemd.link</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                         <citerefentry><refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                         <citerefentry><refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                        <citerefentry><refentrytitle>systemd-network-wait-online.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+                        <citerefentry><refentrytitle>systemd-networkd-wait-online.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
                 </para>
         </refsect1>
 

commit 323e5a44dea4198fdfb01380064c755fc0ec200e
Author: Alison Chaiken <alison_chaiken at mentor.com>
Date:   Sun Nov 30 12:14:48 2014 +0100

    delta: Fix broken separator support
    
    systemd-delta man page promises that multiple types of deltas will be
    concatenated if they are listed with a comma as separator.  Replace
    FOREACH_WORD() with FOREACH_WORD_SEPARATOR() to restore the functionality.
    
    (cherry picked from commit d0a2e1c364320b862a6aae099afa106ea59bb84c)

diff --git a/src/delta/delta.c b/src/delta/delta.c
index 9a2f17c..b73609d 100644
--- a/src/delta/delta.c
+++ b/src/delta/delta.c
@@ -487,7 +487,7 @@ static int parse_flags(const char *flag_str, int flags) {
         const char *word, *state;
         size_t l;
 
-        FOREACH_WORD(word, l, flag_str, state) {
+        FOREACH_WORD_SEPARATOR(word, l, flag_str, ",", state) {
                 if (strneq("masked", word, l))
                         flags |= SHOW_MASKED;
                 else if (strneq ("equivalent", word, l))

commit 259513092491da54112757e72c4cfd3d7c1fe9a8
Author: Chris Atkinson <cwa at pipeline.com>
Date:   Fri Nov 28 15:27:56 2014 -0500

    man: update description of default extension for isolate
    
    (cherry picked from commit 507e28d844e335fe9fc84b549577fcce398f3a5d)

diff --git a/man/systemctl.xml b/man/systemctl.xml
index 2dcd44f..9b44537 100644
--- a/man/systemctl.xml
+++ b/man/systemctl.xml
@@ -705,7 +705,9 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
 
           <listitem>
             <para>Start the unit specified on the command line and its
-            dependencies and stop all others.</para>
+            dependencies and stop all others. If a unit name with no
+            extension is given, an extension of
+            <literal>.target</literal> will be assumed.</para>
 
             <para>This is similar to changing the runlevel in a
             traditional init system. The <command>isolate</command>
@@ -1592,9 +1594,9 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
       <programlisting># systemctl start sshd</programlisting> and
       <programlisting># systemctl start sshd.service</programlisting>
       are equivalent, as are
-      <programlisting># systemctl isolate snapshot-11</programlisting>
+      <programlisting># systemctl isolate default</programlisting>
       and
-      <programlisting># systemctl isolate snapshot-11.snapshot</programlisting>
+      <programlisting># systemctl isolate default.target</programlisting>
       Note that (absolute) paths to device nodes are automatically
       converted to device unit names, and other (absolute) paths to
       mount unit names.

commit 4b1505597c1df43a20108fd1f17699ad04c20c4f
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Sat Nov 29 10:28:01 2014 -0500

    delta: diff returns 1 when files differ, ignore this
    
    https://bugs.debian/org/771397
    (cherry picked from commit 820d3acfe924e58965d14b4711d5df31c5db199a)
    
    Conflicts:
    	src/quotacheck/quotacheck.c

diff --git a/src/core/shutdown.c b/src/core/shutdown.c
index 03cfddc..7add89f 100644
--- a/src/core/shutdown.c
+++ b/src/core/shutdown.c
@@ -371,7 +371,7 @@ int main(int argc, char *argv[]) {
                                 execv(args[0], (char * const *) args);
                                 _exit(EXIT_FAILURE);
                         } else
-                                wait_for_terminate_and_warn("kexec", pid);
+                                wait_for_terminate_and_warn("kexec", pid, true);
                 }
 
                 cmd = RB_AUTOBOOT;
diff --git a/src/delta/delta.c b/src/delta/delta.c
index 25c4a0b..9a2f17c 100644
--- a/src/delta/delta.c
+++ b/src/delta/delta.c
@@ -194,7 +194,7 @@ static int found_override(const char *top, const char *bottom) {
                 _exit(1);
         }
 
-        wait_for_terminate_and_warn("diff", pid);
+        wait_for_terminate_and_warn("diff", pid, false);
         putchar('\n');
 
         return k;
diff --git a/src/login/inhibit.c b/src/login/inhibit.c
index 122c69d..e2222ea 100644
--- a/src/login/inhibit.c
+++ b/src/login/inhibit.c
@@ -280,7 +280,7 @@ int main(int argc, char *argv[]) {
                         _exit(EXIT_FAILURE);
                 }
 
-                r = wait_for_terminate_and_warn(argv[optind], pid);
+                r = wait_for_terminate_and_warn(argv[optind], pid, true);
                 return r < 0 ? EXIT_FAILURE : r;
         }
 
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index 712c0ea..4e0fbb6 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -2757,7 +2757,7 @@ static int change_uid_gid(char **_home) {
 
         truncate_nl(line);
 
-        wait_for_terminate_and_warn("getent passwd", pid);
+        wait_for_terminate_and_warn("getent passwd", pid, true);
 
         x = strchr(line, ':');
         if (!x) {
@@ -2841,7 +2841,7 @@ static int change_uid_gid(char **_home) {
 
         truncate_nl(line);
 
-        wait_for_terminate_and_warn("getent initgroups", pid);
+        wait_for_terminate_and_warn("getent initgroups", pid, true);
 
         /* Skip over the username and subsequent separator whitespace */
         x = line;
diff --git a/src/quotacheck/quotacheck.c b/src/quotacheck/quotacheck.c
index ed95b48..a452857 100644
--- a/src/quotacheck/quotacheck.c
+++ b/src/quotacheck/quotacheck.c
@@ -74,6 +74,7 @@ int main(int argc, char *argv[]) {
         };
 
         pid_t pid;
+        int r;
 
         if (argc > 1) {
                 log_error("This program takes no arguments.");
@@ -107,5 +108,7 @@ int main(int argc, char *argv[]) {
                 _exit(1); /* Operational error */
         }
 
-        return wait_for_terminate_and_warn("quotacheck", pid) >= 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+        r = wait_for_terminate_and_warn("quotacheck", pid, true);
+
+        return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
 }
diff --git a/src/shared/util.c b/src/shared/util.c
index 4143f6d..927bca4 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -3599,8 +3599,11 @@ int wait_for_terminate(pid_t pid, siginfo_t *status) {
  *
  * That is, success is indicated by a return value of zero, and an
  * error is indicated by a non-zero value.
+ *
+ * A warning is emitted if the process terminates abnormally,
+ * and also if it returns non-zero unless check_exit_code is true.
  */
-int wait_for_terminate_and_warn(const char *name, pid_t pid) {
+int wait_for_terminate_and_warn(const char *name, pid_t pid, bool check_exit_code) {
         int r;
         siginfo_t status;
 
@@ -3614,14 +3617,13 @@ int wait_for_terminate_and_warn(const char *name, pid_t pid) {
         }
 
         if (status.si_code == CLD_EXITED) {
-                if (status.si_status != 0) {
-                        log_warning("%s failed with error code %i.", name, status.si_status);
-                        return status.si_status;
-                }
-
-                log_debug("%s succeeded.", name);
-                return 0;
+                if (status.si_status != 0)
+                        log_full(check_exit_code ? LOG_WARNING : LOG_DEBUG,
+                                 "%s failed with error code %i.", name, status.si_status);
+                else
+                        log_debug("%s succeeded.", name);
 
+                return status.si_status;
         } else if (status.si_code == CLD_KILLED ||
                    status.si_code == CLD_DUMPED) {
 
@@ -3976,13 +3978,13 @@ void execute_directory(const char *directory, DIR *d, usec_t timeout, char *argv
                         path = hashmap_remove(pids, UINT_TO_PTR(pid));
                         assert(path);
 
-                        wait_for_terminate_and_warn(path, pid);
+                        wait_for_terminate_and_warn(path, pid, true);
                 }
 
                 _exit(EXIT_SUCCESS);
         }
 
-        wait_for_terminate_and_warn(directory, executor_pid);
+        wait_for_terminate_and_warn(directory, executor_pid, true);
 }
 
 int kill_and_sigcont(pid_t pid, int sig) {
diff --git a/src/shared/util.h b/src/shared/util.h
index 3558446..cde38a5 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -505,7 +505,7 @@ char *unquote(const char *s, const char *quotes);
 char *normalize_env_assignment(const char *s);
 
 int wait_for_terminate(pid_t pid, siginfo_t *status);
-int wait_for_terminate_and_warn(const char *name, pid_t pid);
+int wait_for_terminate_and_warn(const char *name, pid_t pid, bool check_exit_code);
 
 noreturn void freeze(void);
 
diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c
index 0db97f8..4f29caa 100644
--- a/src/vconsole/vconsole-setup.c
+++ b/src/vconsole/vconsole-setup.c
@@ -310,7 +310,7 @@ int main(int argc, char **argv) {
         }
 
         if (font_pid > 0)
-                wait_for_terminate_and_warn(KBD_SETFONT, font_pid);
+                wait_for_terminate_and_warn(KBD_SETFONT, font_pid, true);
 
         r = keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid);
         if (r < 0) {
@@ -319,7 +319,7 @@ int main(int argc, char **argv) {
         }
 
         if (keymap_pid > 0)
-                wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid);
+                wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid, true);
 
         /* Only copy the font when we started setfont successfully */
         if (font_copy && font_pid > 0)

commit da312d164e9c1f210640aa75d20be8bbed0427fb
Author: Tom Gundersen <teg at jklm.no>
Date:   Sat Nov 29 11:14:48 2014 +0100

    shared: install - report error if mask symlink can not be marked for removal
    
    (cherry picked from commit 56e73b34ce0b020ef54c0dc2aba16e50d4fea9f5)

diff --git a/src/shared/install.c b/src/shared/install.c
index cab93e8..e60165b 100644
--- a/src/shared/install.c
+++ b/src/shared/install.c
@@ -662,7 +662,7 @@ int unit_file_unmask(
                 goto finish;
 
         STRV_FOREACH(i, files) {
-                char *path;
+                _cleanup_free_ char *path = NULL;
 
                 if (!unit_name_is_valid(*i, TEMPLATE_VALID)) {
                         if (r == 0)
@@ -678,21 +678,16 @@ int unit_file_unmask(
 
                 q = null_or_empty_path(path);
                 if (q > 0) {
-                        if (unlink(path) >= 0) {
-                                mark_symlink_for_removal(&remove_symlinks_to, path);
+                        if (unlink(path) < 0)
+                                q = -errno;
+                        else {
+                                q = mark_symlink_for_removal(&remove_symlinks_to, path);
                                 add_file_change(changes, n_changes, UNIT_FILE_UNLINK, path, NULL);
-
-                                free(path);
-                                continue;
                         }
-
-                        q = -errno;
                 }
 
                 if (q != -ENOENT && r == 0)
                         r = q;
-
-                free(path);
         }
 
 

commit 97bcebda33c649fac859c82ec70ce90e119d8946
Author: Tom Gundersen <teg at jklm.no>
Date:   Sat Nov 29 10:40:21 2014 +0100

    shared: time-dst - ensure nulstr is null terminated
    
    Fixes CID #1237772.
    
    (cherry picked from commit 681f9718ce322da95578e20ed975dfb34e7edd23)

diff --git a/src/shared/time-dst.c b/src/shared/time-dst.c
index 6195b11..926d22b 100644
--- a/src/shared/time-dst.c
+++ b/src/shared/time-dst.c
@@ -244,6 +244,8 @@ read_again:
         if (fread(zone_names, 1, chars, f) != chars)
                 return -EINVAL;
 
+        zone_names[chars] = '\0';
+
         for (i = 0; i < num_isstd; ++i) {
                 int c = getc(f);
                 if (c == EOF)

commit 12dce8292ad9dc0abb80b420e41421ee4e3b44b4
Author: Tom Gundersen <teg at jklm.no>
Date:   Fri Nov 28 21:51:45 2014 +0100

    udev: rules - ignore the lack of trailing newline
    
    Also accept '\r' as newline character.
    
    This dropps warnings of the type:
    
      invalid key/value pair in file /usr/lib/udev/rules.d/40-usb-media-players.rules
      on line 26, starting at character 25 ('')
    
    (cherry picked from commit 9f5ecdb0b11557be41c065f460bb22ab52bb0034)

diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
index 086519a..ba798f4 100644
--- a/src/udev/udev-rules.c
+++ b/src/udev/udev-rules.c
@@ -1067,7 +1067,7 @@ static int add_rule(struct udev_rules *rules, char *line,
 
                         /* If we aren't at the end of the line, this is a parsing error.
                          * Make a best effort to describe where the problem is. */
-                        if (*linepos != '\n') {
+                        if (!strchr(NEWLINE "\0", *linepos)) {
                                 char buf[2] = {*linepos};
                                 _cleanup_free_ char *tmp;
 

commit 4169b5e4ec7353eb2dfc5dd1f437f6f7b44124ce
Author: Tom Gundersen <teg at jklm.no>
Date:   Fri Nov 28 21:46:34 2014 +0100

    udev: rules - print the first invalid character
    
    The current code would print the character following the first invalid
    character.
    
    Given an udev rules-file without a trailing newline we would otherwise print
    garbage:
    
      invalid key/value pair in file /usr/lib/udev/rules.d/40-usb-media-players.rules
      on line 26, starting at character 25 ('m')
    
    This is now changed to print
    
      invalid key/value pair in file /usr/lib/udev/rules.d/40-usb-media-players.rules
      on line 26, starting at character 25 ('')
    
    (still not very good as printing \0 just gives the empty string)
    
    (cherry picked from commit 6501b52d358aa2c7fe28e477f9d5acf0a2991d32)

diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
index ff4066c..086519a 100644
--- a/src/udev/udev-rules.c
+++ b/src/udev/udev-rules.c
@@ -1068,13 +1068,13 @@ static int add_rule(struct udev_rules *rules, char *line,
                         /* If we aren't at the end of the line, this is a parsing error.
                          * Make a best effort to describe where the problem is. */
                         if (*linepos != '\n') {
-                                char buf[2] = {linepos[1]};
+                                char buf[2] = {*linepos};
                                 _cleanup_free_ char *tmp;
 
                                 tmp = cescape(buf);
                                 log_error("invalid key/value pair in file %s on line %u, starting at character %tu ('%s')\n",
                                           filename, lineno, linepos - line + 1, tmp);
-                                if (linepos[1] == '#')
+                                if (*linepos == '#')
                                         log_error("hint: comments can only start at beginning of line");
                         }
                         break;

commit 05fcbfca91910d6b889fce4a70f75d2126bf1d88
Author: Tom Gundersen <teg at jklm.no>
Date:   Fri Nov 28 21:44:31 2014 +0100

    udev: rules - modernise add_rule a bit
    
    (cherry picked from commit 84198c1892cce2cb27d22bfa816da5d43c05add0)

diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
index 3bc25f7..ff4066c 100644
--- a/src/udev/udev-rules.c
+++ b/src/udev/udev-rules.c
@@ -1042,11 +1042,11 @@ static int add_rule(struct udev_rules *rules, char *line,
                     const char *filename, unsigned int filename_off, unsigned int lineno) {
         char *linepos;
         const char *attr;
-        struct rule_tmp rule_tmp;
+        struct rule_tmp rule_tmp = {
+                .rules = rules,
+                .rule.type = TK_RULE,
+        };
 
-        memzero(&rule_tmp, sizeof(struct rule_tmp));
-        rule_tmp.rules = rules;
-        rule_tmp.rule.type = TK_RULE;
         /* the offset in the rule is limited to unsigned short */
         if (filename_off < USHRT_MAX)
                 rule_tmp.rule.rule.filename_off = filename_off;

commit 701afaabe7e9e92e36ed458e08691784c0501901
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Nov 27 15:19:44 2014 +1000

    udevadm hwdb: discard extra leading whitespaces in hwdb
    
    Currently a property in the form of
      FOO=bar
    is stored as " FOO=bar", i.e. the property name contains a leading space.
    That's quite hard to spot.
    
    This patch discards all extra whitespaces but the first one which is required
    by libudev's hwdb_add_property.
    
    [zj: modify the check a bit]
    
    https://bugs.freedesktop.org/show_bug.cgi?id=82311
    (cherry picked from commit 36afca67b67984520c5c9a6ce14af51a68c7c8cf)

diff --git a/src/udev/udevadm-hwdb.c b/src/udev/udevadm-hwdb.c
index 3ca755e..56779e3 100644
--- a/src/udev/udevadm-hwdb.c
+++ b/src/udev/udevadm-hwdb.c
@@ -428,6 +428,10 @@ static int insert_data(struct trie *trie, struct udev_list *match_list,
         value[0] = '\0';
         value++;
 
+        /* libudev requires properties to start with a space */
+        while (isblank(line[0]) && isblank(line[1]))
+                line++;
+
         if (line[0] == '\0' || value[0] == '\0') {
                 log_error("Error, empty key or value '%s' in '%s':", line, filename);
                 return -EINVAL;

commit f4b75dd0e481ed2fe40eb056e0db5c90481c5263
Author: Michal Schmidt <mschmidt at redhat.com>
Date:   Fri Nov 28 19:20:59 2014 +0100

    core: fix return value in error path after sd_event_add_io() failure
    
    sd_event_add_io() does not set errno, it returns negative errno.
    
    Noticed during log_*_errno conversions.
    
    (cherry picked from commit 895b3a7b44fe7ca2f260986be2a877ff56a72718)
    
    Conflicts:
    	src/core/manager.c

diff --git a/src/core/manager.c b/src/core/manager.c
index a48ad63..b893990 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -704,7 +704,7 @@ static int manager_setup_notify(Manager *m) {
                 r = sd_event_add_io(m->event, &m->notify_event_source, m->notify_fd, EPOLLIN, manager_dispatch_notify_fd, m);
                 if (r < 0) {
                         log_error("Failed to allocate notify event source: %s", strerror(-r));
-                        return -errno;
+                        return r;
                 }
 
                 /* Process signals a bit earlier than SIGCHLD, so that we can

commit 6d1f501b82031150dfdc74c186e7f7aed3b431ea
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Fri Nov 28 12:25:09 2014 -0500

    Revert "systemctl: append default suffix only if none present"
    
    This reverts a chunk out of commit 5e03c6e3b517286bbd65b48d88f60e5b83721894
    which was trying to pass NULL to the the '.service' default. Anyway,
    it seems better to be explicit.
    
    (cherry picked from commit e80733be33e52d8ab2f1ae845326d39c600f5612)

diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 70b92db..409693e 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -2700,7 +2700,10 @@ static int expand_names(sd_bus *bus, char **names, const char* suffix, char ***r
         STRV_FOREACH(name, names) {
                 char *t;
 
-                t = unit_name_mangle_with_suffix(*name, MANGLE_GLOB, suffix);
+                if (suffix)
+                        t = unit_name_mangle_with_suffix(*name, MANGLE_GLOB, suffix);
+                else
+                        t = unit_name_mangle(*name, MANGLE_GLOB);
                 if (!t)
                         return log_oom();
 

commit eac249866b560587f6d08555e1625215e295bef0
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Fri Nov 28 11:28:10 2014 -0500

    systemctl: append default suffix only if none present
    
    Simplify unit_name_mangle() and unit_name_mangle_with_suffix() to
    always behave the same, and only append a suffix if there is no
    type suffix. If a user says 'isolate blah.device' it is better to
    return an error that the type cannot be isolated, than to try to
    isolate blah.device.target.
    
    (cherry picked from commit 5e03c6e3b517286bbd65b48d88f60e5b83721894)

diff --git a/src/shared/unit-name.c b/src/shared/unit-name.c
index 6c6d7f4..21b6691 100644
--- a/src/shared/unit-name.c
+++ b/src/shared/unit-name.c
@@ -502,13 +502,18 @@ int unit_name_from_dbus_path(const char *path, char **name) {
 }
 
 /**
- *  Try to turn a string that might not be a unit name into a
- *  sensible unit name.
+ *  Convert a string to a unit name. /dev/blah is converted to dev-blah.device,
+ *  /blah/blah is converted to blah-blah.mount, anything else is left alone,
+ *  except that @suffix is appended if a valid unit suffix is not present.
+ *
+ *  If @allow_globs, globs characters are preserved. Otherwise they are escaped.
  */
-char *unit_name_mangle(const char *name, enum unit_name_mangle allow_globs) {
+char *unit_name_mangle_with_suffix(const char *name, enum unit_name_mangle allow_globs, const char *suffix) {
         char *r, *t;
 
         assert(name);
+        assert(suffix);
+        assert(suffix[0] == '.');
 
         if (is_device_path(name))
                 return unit_name_from_path(name, ".device");
@@ -516,38 +521,13 @@ char *unit_name_mangle(const char *name, enum unit_name_mangle allow_globs) {
         if (path_is_absolute(name))
                 return unit_name_from_path(name, ".mount");
 
-        r = new(char, strlen(name) * 4 + strlen(".service") + 1);
-        if (!r)
-                return NULL;
-
-        t = do_escape_mangle(name, allow_globs, r);
-
-        if (unit_name_to_type(name) < 0)
-                strcpy(t, ".service");
-        else
-                *t = 0;
-
-        return r;
-}
-
-/**
- *  Similar to unit_name_mangle(), but is called when we know
- *  that this is about a specific unit type.
- */
-char *unit_name_mangle_with_suffix(const char *name, enum unit_name_mangle allow_globs, const char *suffix) {
-        char *r, *t;
-
-        assert(name);
-        assert(suffix);
-        assert(suffix[0] == '.');
-
         r = new(char, strlen(name) * 4 + strlen(suffix) + 1);
         if (!r)
                 return NULL;
 
         t = do_escape_mangle(name, allow_globs, r);
 
-        if (!endswith(name, suffix))
+        if (unit_name_to_type(name) < 0)
                 strcpy(t, suffix);
         else
                 *t = 0;
diff --git a/src/shared/unit-name.h b/src/shared/unit-name.h
index daeb56a..6f139cc 100644
--- a/src/shared/unit-name.h
+++ b/src/shared/unit-name.h
@@ -156,8 +156,10 @@ enum unit_name_mangle {
         MANGLE_GLOB,
 };
 
-char *unit_name_mangle(const char *name, enum unit_name_mangle allow_globs);
 char *unit_name_mangle_with_suffix(const char *name, enum unit_name_mangle allow_globs, const char *suffix);
+static inline char *unit_name_mangle(const char *name, enum unit_name_mangle allow_globs) {
+        return unit_name_mangle_with_suffix(name, allow_globs, ".service");
+}
 
 int build_subslice(const char *slice, const char*name, char **subslice);
 
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 409693e..70b92db 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -2700,10 +2700,7 @@ static int expand_names(sd_bus *bus, char **names, const char* suffix, char ***r
         STRV_FOREACH(name, names) {
                 char *t;
 
-                if (suffix)
-                        t = unit_name_mangle_with_suffix(*name, MANGLE_GLOB, suffix);
-                else
-                        t = unit_name_mangle(*name, MANGLE_GLOB);
+                t = unit_name_mangle_with_suffix(*name, MANGLE_GLOB, suffix);
                 if (!t)
                         return log_oom();
 

commit 73257f8e61eb4059cb587722699b609946837c8e
Author: Martin Pitt <martin.pitt at ubuntu.com>
Date:   Fri Nov 28 15:38:05 2014 +0100

    hostnamectl: Exit with zero on success
    
    In show_all_names(), bus_map_all_properties() returns 1 on success which is
    then used as the return code of show_all_names() and eventually main(). Exit
    with zero in main() on all nonnegative results to guard against similar errors.
    
    (cherry picked from commit 5567fafbc9d83a1391f23ecdbe698a3c03929370)

diff --git a/src/hostname/hostnamectl.c b/src/hostname/hostnamectl.c
index e487369..ff4e9c9 100644
--- a/src/hostname/hostnamectl.c
+++ b/src/hostname/hostnamectl.c
@@ -536,5 +536,5 @@ int main(int argc, char *argv[]) {
         r = hostnamectl_main(bus, argc, argv);
 
 finish:
-        return r < 0 ? EXIT_FAILURE : r;
+        return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
 }

commit 5f7252443d3714800dc02e45ab57eefdb1f5fa60
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Thu Nov 27 17:17:09 2014 -0500

    sysv-generator: advertise the man page
    
    (cherry picked from commit aad0a2c80097926757d4385e5f5492082d47f006)

diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
index 6e4cdd6..1c4d536 100644
--- a/src/sysv-generator/sysv-generator.c
+++ b/src/sysv-generator/sysv-generator.c
@@ -151,6 +151,7 @@ static int generate_unit_file(SysvStub *s) {
         fprintf(f,
                 "# Automatically generated by systemd-sysv-generator\n\n"
                 "[Unit]\n"
+                "Documentation=man:systemd-sysv-generator(8)\n"
                 "SourcePath=%s\n"
                 "Description=%s\n",
                 s->path, s->description);

commit c45ae4421172fd4b0f91290a9564f57c8bd69a45
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Thu Nov 27 17:13:12 2014 -0500

    man: add systemd-sysv-generator(8)
    
    In principle SysV stuff is only for compatibility, but we are stuck
    with it for the forseeable future, so documentation might as well
    be provided.
    
    https://bugs.debian.org/771172
    (cherry picked from commit f509443af5974dd6e7a816c4c7f806bfd01d629b)

diff --git a/Makefile-man.am b/Makefile-man.am
index e5d5859..8ee0c92 100644
--- a/Makefile-man.am
+++ b/Makefile-man.am
@@ -1543,6 +1543,15 @@ MANPAGES_ALIAS += \
 
 endif
 
+if HAVE_SYSV_COMPAT
+MANPAGES += \
+	man/systemd-sysv-generator.8
+MANPAGES_ALIAS += \
+	#
+
+
+endif
+
 if HAVE_UTMP
 MANPAGES += \
 	man/runlevel.8 \
@@ -1717,6 +1726,7 @@ EXTRA_DIST += \
 	man/systemd-system-update-generator.xml \
 	man/systemd-system.conf.xml \
 	man/systemd-sysusers.xml \
+	man/systemd-sysv-generator.xml \
 	man/systemd-timedated.service.xml \
 	man/systemd-timesyncd.service.xml \
 	man/systemd-tmpfiles.xml \
diff --git a/man/systemd-sysv-generator.xml b/man/systemd-sysv-generator.xml
new file mode 100644
index 0000000..e619b1b
--- /dev/null
+++ b/man/systemd-sysv-generator.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0"?>
+<!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<!--
+  This file is part of systemd.
+
+  Copyright 2014 Zbigniew Jędrzejewski-Szmek
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+<refentry id="systemd-sysv-generator" conditional="HAVE_SYSV_COMPAT">
+
+  <refentryinfo>
+    <title>systemd-sysv-generator</title>
+    <productname>systemd</productname>
+
+    <authorgroup>
+      <author>
+        <contrib>Documentation</contrib>
+        <firstname>Zbigniew</firstname>
+        <surname>Jędrzejewski-Szmek</surname>
+        <email>zbyszek at in.waw.pl</email>
+      </author>
+    </authorgroup>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>systemd-sysv-generator</refentrytitle>
+    <manvolnum>8</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>systemd-sysv-generator</refname>
+    <refpurpose>Unit generator for SysV init scripts</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <para><filename>/usr/lib/systemd/system-generators/systemd-sysv-generator</filename></para>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><filename>systemd-sysv-generator</filename> is a generator
+    that creates wrapper .service units for
+    <ulink url="https://savannah.nongnu.org/projects/sysvinit">SysV init</ulink>
+    scripts in <filename>/etc/init.d/*</filename> at boot and when
+    configuration of the system manager is reloaded. This will allow
+    <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    to support them similarly to native units.</para>
+
+    <para><ulink url="http://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/iniscrptact.html">LSB headers</ulink>
+    in SysV init scripts are interpreted, and the ordering specified
+    in the header is turned into dependencies between the generated
+    unit and other units. LSB facilities
+    <literal>$remote_fs</literal>, <literal>$network</literal>,
+    <literal>$named</literal>, <literal>$portmap</literal>,
+    <literal>$time</literal> are supported and will be turned into
+    dependencies on specific native systemd targets.  See
+    <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+    for more details.</para>
+
+    <para>SysV runlevels have corresponding systemd targets
+    (<filename>runlevel<replaceable>X</replaceable>.target</filename>).
+    Wrapper unit that is generated will be wanted by those targets
+    which correspond to runlevels for which the script is
+    enabled.</para>
+
+    <para><command>systemd</command> does not supports SysV scripts as
+    part of early boot, so all wrapper units are ordered after
+    <filename>basic.target</filename>.</para>
+
+    <para><filename>systemd-sysv-generator</filename>
+    implements the <ulink
+    url="http://www.freedesktop.org/wiki/Software/systemd/Generators">generator
+    specification</ulink>.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>

commit c5dc55446b9d12cfaa748db98530041dadac68b6
Author: Ivan Shapovalov <intelfx100 at gmail.com>
Date:   Tue Nov 25 21:58:14 2014 +0300

    unit-name: fix escaping logic in unit_name_mangle_with_suffix()
    
    Make screened character set consistent with unit_name_mangle() by splitting off
    the escaping loop into a separate function.
    
    Before this fix, unit names such as `foo at bar.target` would get transformed
    into `foo\x40bar.target` when unit_name_mangle_with_suffix() is used.
    
    https://bugs.freedesktop.org/show_bug.cgi?id=86711
    (cherry picked from commit 0c124f8b2c93d2c7d6eefca3bdc59b28250fc077)

diff --git a/src/shared/unit-name.c b/src/shared/unit-name.c
index 2ef8545..6c6d7f4 100644
--- a/src/shared/unit-name.c
+++ b/src/shared/unit-name.c
@@ -243,6 +243,30 @@ static char *do_escape(const char *f, char *t) {
         return t;
 }
 
+static char *do_escape_mangle(const char *f, enum unit_name_mangle allow_globs, char *t) {
+        const char *valid_chars;
+
+        assert(f);
+        assert(IN_SET(allow_globs, MANGLE_GLOB, MANGLE_NOGLOB));
+        assert(t);
+
+        /* We'll only escape the obvious characters here, to play
+         * safe. */
+
+        valid_chars = allow_globs == MANGLE_GLOB ? "@" VALID_CHARS "[]!-*?" : "@" VALID_CHARS;
+
+        for (; *f; f++) {
+                if (*f == '/')
+                        *(t++) = '-';
+                else if (!strchr(valid_chars, *f))
+                        t = do_escape_char(*f, t);
+                else
+                        *(t++) = *f;
+        }
+
+        return t;
+}
+
 char *unit_name_escape(const char *f) {
         char *r, *t;
 
@@ -482,11 +506,9 @@ int unit_name_from_dbus_path(const char *path, char **name) {
  *  sensible unit name.
  */
 char *unit_name_mangle(const char *name, enum unit_name_mangle allow_globs) {
-        const char *valid_chars, *f;
         char *r, *t;
 
         assert(name);
-        assert(IN_SET(allow_globs, MANGLE_GLOB, MANGLE_NOGLOB));
 
         if (is_device_path(name))
                 return unit_name_from_path(name, ".device");
@@ -494,23 +516,11 @@ char *unit_name_mangle(const char *name, enum unit_name_mangle allow_globs) {
         if (path_is_absolute(name))
                 return unit_name_from_path(name, ".mount");
 
-        /* We'll only escape the obvious characters here, to play
-         * safe. */
-
-        valid_chars = allow_globs == MANGLE_GLOB ? "@" VALID_CHARS "[]!-*?" : "@" VALID_CHARS;
-
         r = new(char, strlen(name) * 4 + strlen(".service") + 1);
         if (!r)
                 return NULL;
 
-        for (f = name, t = r; *f; f++) {
-                if (*f == '/')
-                        *(t++) = '-';
-                else if (!strchr(valid_chars, *f))
-                        t = do_escape_char(*f, t);
-                else
-                        *(t++) = *f;
-        }
+        t = do_escape_mangle(name, allow_globs, r);
 
         if (unit_name_to_type(name) < 0)
                 strcpy(t, ".service");
@@ -526,10 +536,8 @@ char *unit_name_mangle(const char *name, enum unit_name_mangle allow_globs) {
  */
 char *unit_name_mangle_with_suffix(const char *name, enum unit_name_mangle allow_globs, const char *suffix) {
         char *r, *t;
-        const char *f;
 
         assert(name);
-        assert(IN_SET(allow_globs, MANGLE_GLOB, MANGLE_NOGLOB));
         assert(suffix);
         assert(suffix[0] == '.');
 
@@ -537,14 +545,7 @@ char *unit_name_mangle_with_suffix(const char *name, enum unit_name_mangle allow
         if (!r)
                 return NULL;
 
-        for (f = name, t = r; *f; f++) {
-                if (*f == '/')
-                        *(t++) = '-';
-                else if (!strchr(VALID_CHARS, *f))
-                        t = do_escape_char(*f, t);
-                else
-                        *(t++) = *f;
-        }
+        t = do_escape_mangle(name, allow_globs, r);
 
         if (!endswith(name, suffix))
                 strcpy(t, suffix);

commit 0ae29bfc8b5567361a2c6468b45a1e00a7c7ecaf
Author: Andrej Manduch <amanduch at gmail.com>
Date:   Tue Nov 25 20:47:49 2014 +0100

    journalctl: print all possible lines immediately with --follow + --since
    
    When I tryed to run journalctl with --follow and --since arguments it
    behaved very strangely.
    First It prints logs from what I specified in --since argument, then
    printed 10 lines (as is default in --follow) and when app put something
    new in to log journalctl printed everithing from the last printed line.
    
    How to reproduce:
    1. run: journalctl -m --since 14:00 --follow
    Then you'll see 10 lines of logs since 14:00. After that wait until some
    app add something in the journal or just run `systemd-cat echo test`
    2. After that journalctl will print every single line since 14:00 and will
    follow as expected.
    
    As long as --since and --follow will eventually print all relevant
    lines, I seen no reason why not to print them right away and not after
    first new message in journal.
    
    Relevant bugzillas:
            https://bugs.freedesktop.org/show_bug.cgi?id=71546
            https://bugs.freedesktop.org/show_bug.cgi?id=64291
    
    (cherry picked from commit 70af7b8ada43d15edcd16f1f5157c447c388933c)

diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
index f50faf4..03579fd 100644
--- a/src/journal/journalctl.c
+++ b/src/journal/journalctl.c
@@ -682,7 +682,7 @@ static int parse_argv(int argc, char *argv[]) {
                         assert_not_reached("Unhandled option");
                 }
 
-        if (arg_follow && !arg_no_tail && arg_lines == ARG_LINES_DEFAULT)
+        if (arg_follow && !arg_no_tail && !arg_since && arg_lines == ARG_LINES_DEFAULT)
                 arg_lines = 10;
 
         if (!!arg_directory + !!arg_file + !!arg_machine > 1) {

commit 4828bc7a05d3349919a3b0c61def4024569a2253
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Wed Nov 26 10:36:52 2014 -0500

    swap: restore support for nofail
    
    systemd stops adding automatic dependencies on swap.target to swap
    units. If a dependency is required, it has to be added by unit
    configuration. fstab-generator did that already, except that now it is
    modified to create a Requires or Wants type dependency, depending on
    whether nofail is specified in /etc/fstab. This makes .swap units
    obey the nofail/noauto options more or less the same as .mount units.
    
    Documentation is extended to clarify that, and to make
    systemd.mount(5) and system.swap(5) more similar. The gist is not
    changed, because current behaviour actually matches existing
    documentation.
    
    https://bugs.freedesktop.org/show_bug.cgi?id=86488
    (cherry picked from commit 5607d856b8606ba75446a07ab5e9048753e1d7a6)

diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
index ba841c3..6d8eae6 100644
--- a/man/systemd.mount.xml
+++ b/man/systemd.mount.xml
@@ -124,7 +124,7 @@
         </refsect1>
 
         <refsect1>
-                <title><filename>/etc/fstab</filename></title>
+                <title><filename>fstab</filename></title>
 
                 <para>Mount units may either be configured via unit
                 files, or via <filename>/etc/fstab</filename> (see
@@ -142,8 +142,7 @@
                 <para>When reading <filename>/etc/fstab</filename> a
                 few special mount options are understood by systemd
                 which influence how dependencies are created for mount
-                points from <filename>/etc/fstab</filename>. systemd
-                will create a dependency of type
+                points. systemd will create a dependency of type
                 <option>Wants</option> or <option>Requires</option>
                 (see option <option>nofail</option> below), from
                 either <filename>local-fs.target</filename> or
@@ -181,26 +180,13 @@
                   </varlistentry>
 
                   <varlistentry>
-                    <term><option>nofail</option></term>
-                    <term><option>fail</option></term>
-
-                    <listitem><para>With <option>nofail</option> this
-                    mount will be only wanted, not required, by the
-                    <filename>local-fs.target</filename>. This means
-                    that the boot will continue even if this mount
-                    point is not mounted successfully. Option
-                    <option>fail</option> has the opposite meaning and
-                    is the default.</para>
-                    </listitem>
-                  </varlistentry>
-
-                  <varlistentry>
                     <term><option>noauto</option></term>
                     <term><option>auto</option></term>
 
                     <listitem><para>With <option>noauto</option>, this
                     mount will not be added as a dependency for
-                    <filename>local-fs.target</filename>. This means
+                    <filename>local-fs.target</filename> or
+                    <filename>remote-fs.target</filename>. This means
                     that it will not be mounted automatically during
                     boot, unless it is pulled in by some other
                     unit. Option <option>auto</option> has the
@@ -209,6 +195,21 @@
                   </varlistentry>
 
                   <varlistentry>
+                    <term><option>nofail</option></term>
+                    <term><option>fail</option></term>
+
+                    <listitem><para>With <option>nofail</option> this
+                    mount will be only wanted, not required, by
+                    <filename>local-fs.target</filename> or
+                    <filename>remote-fs.target</filename>. This means
+                    that the boot will continue even if this mount
+                    point is not mounted successfully. Option
+                    <option>fail</option> has the opposite meaning and
+                    is the default.</para>
+                    </listitem>
+                  </varlistentry>
+
+                  <varlistentry>
                     <term><option>x-initrd.mount</option></term>
 
                     <listitem><para>An additional filesystem to be
diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml
index 44c16e7..1155758 100644
--- a/man/systemd.swap.xml
+++ b/man/systemd.swap.xml
@@ -117,12 +117,40 @@
                 <filename>/etc/fstab</filename> and a unit file, the
                 configuration in the latter takes precedence.</para>
 
-                <para>Unless the <option>noauto</option> option is set
-                for them all swap units configured in
-                <filename>/etc/fstab</filename> are also added as
-                requirements to <filename>swap.target</filename>, so
-                that they are waited for and activated during
-                boot.</para>
+                <para>When reading <filename>/etc/fstab</filename> a
+                few special options are understood by systemd which
+                influence how dependencies are created for swap
+                units.</para>
+
+                <variablelist class='fstab-options'>
+                  <varlistentry>
+                    <term><option>noauto</option></term>
+                    <term><option>auto</option></term>
+
+                    <listitem><para>With <option>noauto</option> the
+                    swap unit will not be added as a dependency for
+                    <filename>swap.target</filename>. This means that
+                    it will not be activated automatically during
+                    boot, unless it is pulled in by some other
+                    unit. Option <option>auto</option> has the
+                    opposite meaning and is the default.</para>
+                    </listitem>
+                  </varlistentry>
+
+                  <varlistentry>
+                    <term><option>nofail</option></term>
+                    <term><option>fail</option></term>
+
+                    <listitem><para>With <option>nofail</option> the
+                    swap unit will be only wanted, not required by
+                    <filename>swap.target</filename>. This means that
+                    the boot will continue even if this swap device is
+                    not activated successfully. Option
+                    <option>fail</option> has the opposite meaning and
+                    is the default.</para>
+                    </listitem>
+                  </varlistentry>
+                </variablelist>
         </refsect1>
 
         <refsect1>
diff --git a/src/core/swap.c b/src/core/swap.c
index 13e12ad..ecd9675 100644
--- a/src/core/swap.c
+++ b/src/core/swap.c
@@ -209,8 +209,6 @@ static int swap_add_device_links(Swap *s) {
 }
 
 static int swap_add_default_dependencies(Swap *s) {
-        int r;
-
         assert(s);
 
         if (UNIT(s)->manager->running_as != SYSTEMD_SYSTEM)
@@ -219,19 +217,7 @@ static int swap_add_default_dependencies(Swap *s) {
         if (detect_container(NULL) > 0)
                 return 0;
 
-        r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true);
-        if (r < 0)
-                return r;
-
-        if (!s->from_fragment)
-                /* The swap unit can either be for an alternative device name, in which
-                 * case we don't need to add the dependency on swap.target because this unit
-                 * is following a different unit which will have this dependency added,
-                 * or it can be derived from /proc/swaps, in which case it was started
-                 * manually, and should not become a dependency of swap.target. */
-                return 0;
-
-        return unit_add_two_dependencies_by_name_inverse(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SWAP_TARGET, NULL, true);
+        return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true);
 }
 
 static int swap_verify(Swap *s) {
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
index e257c12..eba3009 100644
--- a/src/fstab-generator/fstab-generator.c
+++ b/src/fstab-generator/fstab-generator.c
@@ -74,11 +74,14 @@ static int mount_find_pri(struct mntent *me, int *ret) {
         return 1;
 }
 
-static int add_swap(const char *what, struct mntent *me) {
+static int add_swap(
+                const char *what,
+                struct mntent *me,
+                bool noauto,
+                bool nofail) {
+
         _cleanup_free_ char *name = NULL, *unit = NULL, *lnk = NULL;
         _cleanup_fclose_ FILE *f = NULL;
-
-        bool noauto;
         int r, pri = -1;
 
         assert(what);
@@ -95,8 +98,6 @@ static int add_swap(const char *what, struct mntent *me) {
                 return r;
         }
 
-        noauto = !!hasmntopt(me, "noauto");
-
         name = unit_name_from_path(what, ".swap");
         if (!name)
                 return log_oom();
@@ -143,7 +144,8 @@ static int add_swap(const char *what, struct mntent *me) {
                 return r;
 
         if (!noauto) {
-                lnk = strjoin(arg_dest, "/" SPECIAL_SWAP_TARGET ".wants/", name, NULL);
+                lnk = strjoin(arg_dest, "/" SPECIAL_SWAP_TARGET,
+                              nofail ? ".wants/" : ".requires/", name, NULL);
                 if (!lnk)
                         return log_oom();
 
@@ -357,6 +359,7 @@ static int parse_fstab(bool initrd) {
 
         while ((me = getmntent(f))) {
                 _cleanup_free_ char *where = NULL, *what = NULL;
+                bool noauto, nofail;
                 int k;
 
                 if (initrd && !mount_in_initrd(me))
@@ -378,16 +381,18 @@ static int parse_fstab(bool initrd) {
                 if (is_path(where))
                         path_kill_slashes(where);
 
-                log_debug("Found entry what=%s where=%s type=%s", what, where, me->mnt_type);
+                noauto = !!hasmntopt(me, "noauto");
+                nofail = !!hasmntopt(me, "nofail");
+                log_debug("Found entry what=%s where=%s type=%s nofail=%s noauto=%s",
+                          what, where, me->mnt_type,
+                          yes_no(noauto), yes_no(nofail));
 
                 if (streq(me->mnt_type, "swap"))
-                        k = add_swap(what, me);
+                        k = add_swap(what, me, noauto, nofail);
                 else {
-                        bool noauto, nofail, automount;
+                        bool automount;
                         const char *post;
 
-                        noauto = !!hasmntopt(me, "noauto");
-                        nofail = !!hasmntopt(me, "nofail");
                         automount =
                                   hasmntopt(me, "comment=systemd.automount") ||
                                   hasmntopt(me, "x-systemd.automount");

commit 79b4165b8468d2e753f6ce36ce5589f44be85691
Author: Michal Schmidt <mschmidt at redhat.com>
Date:   Wed Nov 26 16:33:43 2014 +0100

    core: fix assertion failure in checking a transaction with a JOB_NOP
    
    Several functions called from transaction_activate() need to correctly
    handle the case where a JOB_NOP job is being checked against a unit's
    pending job. The assumption that JOB_NOP never merges with other job
    types was correct, but since the job_type_is_*() functions are
    implemented using the merge lookup, they need to special-case JOB_NOP
    to avoid hitting assertion failures.
    
    (cherry picked from commit 7e803f5ecf689216d6fcd8a1d19a442f234bf28b)

diff --git a/src/core/job.c b/src/core/job.c
index eaa4bb1..db44fee 100644
--- a/src/core/job.c
+++ b/src/core/job.c
@@ -352,6 +352,9 @@ bool job_type_is_redundant(JobType a, UnitActiveState b) {
                 return
                         b == UNIT_ACTIVATING;
 
+        case JOB_NOP:
+                return true;
+
         default:
                 assert_not_reached("Invalid job type");
         }
diff --git a/src/core/job.h b/src/core/job.h
index 1e7c61b..ee8e54a 100644
--- a/src/core/job.h
+++ b/src/core/job.h
@@ -49,9 +49,11 @@ enum JobType {
         _JOB_TYPE_MAX_MERGING,
 
         /* JOB_NOP can enter into a transaction, but as it won't pull in
-         * any dependencies, it won't have to merge with anything.
-         * job_install() avoids the problem of merging JOB_NOP too (it's
-         * special-cased, only merges with other JOB_NOPs). */
+         * any dependencies and it uses the special 'nop_job' slot in Unit,
+         * it won't have to merge with anything (except possibly into another
+         * JOB_NOP, previously installed). JOB_NOP is special-cased in
+         * job_type_is_*() functions so that the transaction can be
+         * activated. */
         JOB_NOP = _JOB_TYPE_MAX_MERGING, /* do nothing */
 
         _JOB_TYPE_MAX_IN_TRANSACTION,
@@ -190,11 +192,15 @@ _pure_ static inline bool job_type_is_mergeable(JobType a, JobType b) {
 }
 
 _pure_ static inline bool job_type_is_conflicting(JobType a, JobType b) {
-        return !job_type_is_mergeable(a, b);
+        return a != JOB_NOP && b != JOB_NOP && !job_type_is_mergeable(a, b);
 }
 
 _pure_ static inline bool job_type_is_superset(JobType a, JobType b) {
         /* Checks whether operation a is a "superset" of b in its actions */
+        if (b == JOB_NOP)
+                return true;
+        if (a == JOB_NOP)
+                return false;
         return a == job_type_lookup_merge(a, b);
 }
 

commit e1b6ecea5649bc66926f00a1acc289b2d6e0ebc3
Author: Tom Gundersen <teg at jklm.no>
Date:   Tue Nov 25 22:30:29 2014 +0100

    resolved: fix typo in sd_notify() call
    
    (cherry picked from commit b37d45c9ab5f645502695e47d268af1a54216e0e)

diff --git a/src/resolve/resolved.c b/src/resolve/resolved.c
index 7d258c9..6dd4cad 100644
--- a/src/resolve/resolved.c
+++ b/src/resolve/resolved.c
@@ -108,7 +108,7 @@ int main(int argc, char *argv[]) {
 
 finish:
         sd_notify(false,
-                  "STOPPIN=1\n"
+                  "STOPPING=1\n"
                   "STATUS=Shutting down...");
 
         return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;

commit 920f8f0326fe06aeb7b4ce9cc416479be4589850
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Sun Nov 23 20:01:40 2014 -0500

    gpt-auto-generator: properly ignore value
    
    A negative return code was treated as a true value.
    
    (cherry picked from commit 8086ffacdb1bfec5ec115d24626538bda6cc372e)

diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
index 25d868a..0f14ea1 100644
--- a/src/gpt-auto-generator/gpt-auto-generator.c
+++ b/src/gpt-auto-generator/gpt-auto-generator.c
@@ -681,8 +681,8 @@ static int parse_proc_cmdline_item(const char *key, const char *value) {
                 r = parse_boolean(value);
                 if (r < 0)
                         log_warning("Failed to parse gpt-auto switch %s. Ignoring.", value);
-
-                arg_enabled = r;
+                else
+                        arg_enabled = r;
 
         } else if (streq(key, "root") && value) {
 

commit 82c0579d83e1a4c1795c2304d7f001be334d53ed
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Wed Nov 5 22:39:13 2014 -0500

    manager: only issue overmount warning when the check succeeded
    
    If for any reason the check failed (selinux?), we would still issue
    the warning. Check the return status.
    
    (cherry picked from commit 056edeb9102c5ba455e1a54af70f282b6138ca33)

diff --git a/src/core/mount.c b/src/core/mount.c
index e284357..95d22a6 100644
--- a/src/core/mount.c
+++ b/src/core/mount.c
@@ -812,19 +812,26 @@ fail:
 }
 
 void warn_if_dir_nonempty(const char *unit, const char* where) {
+        int r;
+
         assert(unit);
         assert(where);
 
-        if (dir_is_empty(where) > 0)
+        r = dir_is_empty(where);
+        if (r > 0)
                 return;
-
-        log_struct_unit(LOG_NOTICE,
-                   unit,
-                   "MESSAGE=%s: Directory %s to mount over is not empty, mounting anyway.",
-                   unit, where,
-                   "WHERE=%s", where,
-                   MESSAGE_ID(SD_MESSAGE_OVERMOUNTING),
-                   NULL);
+        else if (r == 0)
+                log_struct_unit(LOG_NOTICE,
+                                unit,
+                                "MESSAGE=%s: Directory %s to mount over is not empty, mounting anyway.",
+                                unit, where,
+                                "WHERE=%s", where,
+                                MESSAGE_ID(SD_MESSAGE_OVERMOUNTING),
+                                NULL);
+        else
+                log_warning_unit(unit,
+                                 "MESSAGE=Failed to check directory %s: %s",
+                                 where, strerror(-r));
 }
 
 static int fail_if_symlink(const char *unit, const char* where) {

commit 16f571dcd3897c4805ba7d2981d16cbae2c4cd28
Author: Lukas Nykryn <lnykryn at redhat.com>
Date:   Thu Nov 20 16:06:18 2014 +0100

    dbus: return non-zero return value in the case that prefix won't match
    
    strv_extend returns 0 in the case of success which means that
    else if (bus_track_deserialize_item(&m->deserialized_subscribed, l) == 0)
            log_warning("Unknown serialization item '%s'", l);
    will be printed when value is added correctly.
    
    (cherry picked from commit f44b9efcec4594eb8f843325ee3079b44fb8f24a)

diff --git a/src/core/dbus.c b/src/core/dbus.c
index 9cb198a..ec1c0d4 100644
--- a/src/core/dbus.c
+++ b/src/core/dbus.c
@@ -1180,7 +1180,7 @@ int bus_track_deserialize_item(char ***l, const char *line) {
 
         e = startswith(line, "subscribed=");
         if (!e)
-                return 0;
+                return -EINVAL;
 
         return strv_extend(l, e);
 }
diff --git a/src/core/manager.c b/src/core/manager.c
index 751e3fb..a48ad63 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -2423,7 +2423,7 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
                                 m->kdbus_fd = fdset_remove(fds, fd);
                         }
 
-                } else if (bus_track_deserialize_item(&m->deserialized_subscribed, l) == 0)
+                } else if (bus_track_deserialize_item(&m->deserialized_subscribed, l) < 0)
                         log_warning("Unknown serialization item '%s'", l);
         }
 

commit 499e2f80d1e4836e1ea65f3c081b18ec188f3bef
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Sun Nov 23 11:07:15 2014 -0500

    man: reword list-dependencies description
    
    The previous version was a bit too vague. It is better
    to simply list all dependency types that are followed.
    
    Previous version also made an emphasis on dependencies introduced by
    configuration.  But this command (or systemd) don't care about this
    distinction between configured and automatically added dependencies at
    all. This distinctionis removed from the main description, and an
    explanatory paragraph is added to remind the user that all
    dependencies are shown, no matter where they come from.
    
    (cherry picked from commit f6375e837670911012ea0bd0de39511334d18021)

diff --git a/man/systemctl.xml b/man/systemctl.xml
index b1d60eb..2dcd44f 100644
--- a/man/systemctl.xml
+++ b/man/systemctl.xml
@@ -151,9 +151,12 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
 
         <listitem>
           <para>Show reverse dependencies between units with
-          <command>list-dependencies</command>, i.e. units with
-          dependencies of type <varname>Wants=</varname> or
-          <varname>Requires=</varname> on the given unit.
+          <command>list-dependencies</command>, i.e. follow
+          dependencies of type <varname>WantedBy=</varname>,
+          <varname>RequiredBy=</varname>,
+          <varname>RequiredByOverrridable=</varname>,
+          <varname>PartOf=</varname>, <varname>BoundBy=</varname>,
+          instead of <varname>Wants=</varname> and similar.
           </para>
         </listitem>
       </varlistentry>
@@ -164,10 +167,20 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
         <listitem>
           <para>With <command>list-dependencies</command>, show the
           units that are ordered before the specified unit. In other
-          words, list the units that are in the <varname>After=</varname>
-          directive of the specified unit, have the specified unit in
-          their <varname>Before=</varname> directive, or are otherwise
-          implicit dependencies of the specified unit.</para>
+          words, recursively list units following the
+          <varname>After=</varname> dependency.</para>
+
+          <para>Note that any <varname>After=</varname> dependency is
+          automatically mirrored to create a
+          <varname>Before=</varname> dependency. Temporal dependencies
+          may be specified explictly, but are also created implicitly
+          for units which are <varname>WantedBy=</varname> targets
+          (see
+          <citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry>),
+          and as a result of other directives (for example
+          <varname>RequiresMountsFor=</varname>). Both explicitly
+          and implicitly introduced dependencies are shown with
+          <command>list-dependencies</command>.</para>
         </listitem>
       </varlistentry>
 
@@ -177,10 +190,8 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
         <listitem>
           <para>With <command>list-dependencies</command>, show the
           units that are ordered after the specified unit. In other
-          words, list the units that are in the <varname>Before=</varname>
-          directive of the specified unit, have the specified unit in
-          their <varname>After=</varname> directive, or otherwise depend
-          on the specified unit.</para>
+          words, recursively list units following the
+          <varname>Before=</varname> dependency.</para>
         </listitem>
       </varlistentry>
 
@@ -848,15 +859,30 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
         </varlistentry>
 
         <varlistentry>
-          <term><command>list-dependencies <replaceable>NAME</replaceable></command></term>
+          <term>
+            <command>list-dependencies</command>
+            <optional><replaceable>NAME</replaceable></optional>
+          </term>
 
           <listitem>
-            <para>Shows required and wanted units of the specified
-            unit. If no unit is specified,
-            <filename>default.target</filename> is implied. Target units
-            are recursively expanded.  When <option>--all</option> is
-            passed, all other units are recursively expanded as
-            well.</para>
+            <para>Shows units required and wanted by the specified
+            unit. This recursively lists units following the
+            <varname>Requires=</varname>,
+            <varname>RequiresOverridable=</varname>,
+            <varname>Requisite=</varname>,
+            <varname>RequisiteOverridable=</varname>,
+            <varname>Wants=</varname>, <varname>BindsTo=</varname>
+            dependencies. If no unit is specified,
+            <filename>default.target</filename> is implied.</para>
+
+            <para>By default, only target units are recursively
+            expanded. When <option>--all</option> is passed, all other
+            units are recursively expanded as well.</para>
+
+            <para>Options <option>--reverse</option>,
+            <option>--after</option>, <option>--before</option>
+            may be used to change what types of dependencies
+            are shown.</para>
           </listitem>
         </varlistentry>
       </variablelist>

commit 18fc235c18e6736e0b406a5381503b0fdfaa9a94
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Sat Nov 22 20:21:56 2014 -0500

    systemctl: show BindsTo/BoundBy in list-dependencies
    
    Suggested-by: Peter Mattern <matternp at arcor.de>
    
    http://lists.freedesktop.org/archives/systemd-devel/2014-November/025437.html
    (cherry picked from commit c469089cf647ac740c7dcf09c463d2907b6d00eb)

diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 207a5e7..409693e 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -1479,11 +1479,13 @@ static int list_dependencies_get_dependencies(sd_bus *bus, const char *name, cha
                                        "RequiresOverridable\0"
                                        "Requisite\0"
                                        "RequisiteOverridable\0"
-                                       "Wants\0",
+                                       "Wants\0"
+                                       "BindsTo\0",
                 [DEPENDENCY_REVERSE] = "RequiredBy\0"
                                        "RequiredByOverridable\0"
                                        "WantedBy\0"
-                                       "PartOf\0",
+                                       "PartOf\0"
+                                       "BoundBy\0",
                 [DEPENDENCY_AFTER]   = "After\0",
                 [DEPENDENCY_BEFORE]  = "Before\0",
         };

commit 19f3560483af65e61e35ef670ad058a459fcb0de
Author: Richard Schütz <rschuetz at uni-koblenz.de>
Date:   Fri Nov 21 21:44:48 2014 +0100

    nspawn: ignore EEXIST when mounting tmpfs
    
    commit 79d80fc1466512d0ca211f4bfcd9de5f2f816a5a introduced a regression that
    prevents mounting a tmpfs if the mount point already exits in the container's
    root file system. This commit fixes the problem by ignoring EEXIST.
    
    (cherry picked from commit 6c2d07020f752547a8a45b6f03546a61a5e1672d)

diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index f332ade..712c0ea 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -818,7 +818,7 @@ static int mount_tmpfs(const char *dest) {
                         return log_oom();
 
                 r = mkdir_label(where, 0755);
-                if (r < 0) {
+                if (r < 0 && errno != EEXIST) {
                         log_error("creating mount point for tmpfs %s failed: %s", where, strerror(-r));
 
                         return r;

commit 4f45221f4ac6fccbc6cab676e69a68c9cb2ae79f
Author: Chris Atkinson <cwa at pipeline.com>
Date:   Sat Nov 22 15:58:47 2014 -0500

    man/logind.conf.xml: make consistent with default logind.conf
    
    https://bugs.freedesktop.org/show_bug.cgi?id=86263
    (cherry picked from commit 6e3157c5e64408c01817ffef05a77c8456bef958)

diff --git a/man/logind.conf.xml b/man/logind.conf.xml
index d245bf4..d37fcba 100644
--- a/man/logind.conf.xml
+++ b/man/logind.conf.xml
@@ -281,17 +281,17 @@
                                 sleep keys and the lid switch are
                                 subject to inhibitor locks. These
                                 settings take boolean arguments. If
-                                <literal>off</literal>, the inhibitor
+                                <literal>no</literal>, the inhibitor
                                 locks taken by applications in order
                                 to block the requested operation are
-                                respected. If <literal>on</literal>,
+                                respected. If <literal>yes</literal>,
                                 the requested operation is executed in
                                 any
                                 case. <varname>PowerKeyIgnoreInhibited=</varname>,
                                 <varname>SuspendKeyIgnoreInhibited=</varname>
                                 and
                                 <varname>HibernateKeyIgnoreInhibited=</varname>
-                                default to <literal>off</literal>.
+                                default to <literal>no</literal>.
                                 <varname>LidSwitchIgnoreInhibited=</varname>
                                 defaults to
                                 <literal>yes</literal>. This means

commit f9837309c5996cc754cbab878f657966a1767978
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Sat Nov 22 18:00:07 2014 -0500

    Do not check for existence of remote binaries
    
    systemd-run would fail when run with -M or -H and an absolute path,
    if this path did not exists locally. Allow it to continue, since we
    don't have a nice way of checking if the binary exists remotely.
    
    The case where -M or -H is used and a local path is unchanged, and we
    still iterate over $PATH to find the binary. We need to convert to an
    absolute path, and we don't have a nice mechanism to check remotely,
    so we assume that the binary will be located in the same place locally
    and remotely.
    
    http://lists.freedesktop.org/archives/systemd-devel/2014-November/025418.html
    (cherry picked from commit b63bd1090bf6ce79b6757c3f8f4172a367854577)

diff --git a/src/run/run.c b/src/run/run.c
index e3b6293..dcefb5c 100644
--- a/src/run/run.c
+++ b/src/run/run.c
@@ -573,9 +573,12 @@ int main(int argc, char* argv[]) {
         if (r <= 0)
                 goto finish;
 
-        r = find_binary(argv[optind], &command);
+        r = find_binary(argv[optind], arg_transport == BUS_TRANSPORT_LOCAL, &command);
         if (r < 0) {
-                log_error("Failed to find executable %s: %s", argv[optind], strerror(-r));
+                log_error("Failed to find executable %s%s: %s",
+                          argv[optind],
+                          arg_transport == BUS_TRANSPORT_LOCAL ? "" : " on local system",
+                          strerror(-r));
                 goto finish;
         }
         argv[optind] = command;
diff --git a/src/shared/path-util.c b/src/shared/path-util.c
index 67566bc..be03695 100644
--- a/src/shared/path-util.c
+++ b/src/shared/path-util.c
@@ -563,11 +563,11 @@ int path_is_os_tree(const char *path) {
         return r >= 0;
 }
 
-int find_binary(const char *name, char **filename) {
+int find_binary(const char *name, bool local, char **filename) {
         assert(name);
 
         if (is_path(name)) {
-                if (access(name, X_OK) < 0)
+                if (local && access(name, X_OK) < 0)
                         return -errno;
 
                 if (filename) {
@@ -657,7 +657,7 @@ int fsck_exists(const char *fstype) {
 
         checker = strappenda("fsck.", fstype);
 
-        r = find_binary(checker, &p);
+        r = find_binary(checker, true, &p);
         if (r < 0)
                 return r;
 
diff --git a/src/shared/path-util.h b/src/shared/path-util.h
index 8d171a5..bd0d324 100644
--- a/src/shared/path-util.h
+++ b/src/shared/path-util.h
@@ -55,7 +55,7 @@ int path_is_mount_point(const char *path, bool allow_symlink);
 int path_is_read_only_fs(const char *path);
 int path_is_os_tree(const char *path);
 
-int find_binary(const char *name, char **filename);
+int find_binary(const char *name, bool local, char **filename);
 
 bool paths_check_timestamp(const char* const* paths, usec_t *paths_ts_usec, bool update);
 
diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c
index 63d64b2..57264de 100644
--- a/src/test/test-path-util.c
+++ b/src/test/test-path-util.c
@@ -85,29 +85,30 @@ static void test_path(void) {
         }
 }
 
-static void test_find_binary(const char *self) {
+static void test_find_binary(const char *self, bool local) {
         char *p;
 
-        assert_se(find_binary("/bin/sh", &p) == 0);
+        assert_se(find_binary("/bin/sh", local, &p) == 0);
         puts(p);
         assert_se(streq(p, "/bin/sh"));
         free(p);
 
-        assert_se(find_binary(self, &p) == 0);
+        assert_se(find_binary(self, local, &p) == 0);
         puts(p);
         assert_se(endswith(p, "/test-path-util"));
         assert_se(path_is_absolute(p));
         free(p);
 
-        assert_se(find_binary("sh", &p) == 0);
+        assert_se(find_binary("sh", local, &p) == 0);
         puts(p);
         assert_se(endswith(p, "/sh"));
         assert_se(path_is_absolute(p));
         free(p);
 
-        assert_se(find_binary("xxxx-xxxx", &p) == -ENOENT);
+        assert_se(find_binary("xxxx-xxxx", local, &p) == -ENOENT);
 
-        assert_se(find_binary("/some/dir/xxxx-xxxx", &p) == -ENOENT);
+        assert_se(find_binary("/some/dir/xxxx-xxxx", local, &p) ==
+                  (local ? -ENOENT : 0));
 }
 
 static void test_prefixes(void) {
@@ -244,7 +245,8 @@ static void test_strv_resolve(void) {
 
 int main(int argc, char **argv) {
         test_path();
-        test_find_binary(argv[0]);
+        test_find_binary(argv[0], true);
+        test_find_binary(argv[0], false);
         test_prefixes();
         test_path_join();
         test_fsck_exists();

commit d9879bc255741c6a03c5509ee339d31029f9cf9f
Author: Lukas Nykryn <lnykryn at redhat.com>
Date:   Fri Nov 21 17:02:15 2014 +0100

    selinux-access: fix broken ternary operator
    
    it seems to be a typo introduced by ebcf1f97de4f6b1580ae55eb56b1a3939fe6b602
    -                _r = selinux_access_check(_b, _m, _u->source_path ?:_u->fragment_path, (permission), &_error); \
    +        ({ Unit *_unit = (unit); selinux_generic_access_check(bus,message, _unit->fragment_path ?: _unit->fragment_path, permission,error); })
    
    (cherry picked from commit 1e648011b20c8126412d3cf2699d575d9ba9e0fe)

diff --git a/src/core/selinux-access.h b/src/core/selinux-access.h
index bccf0d2..dd1e8bb 100644
--- a/src/core/selinux-access.h
+++ b/src/core/selinux-access.h
@@ -40,7 +40,7 @@ int mac_selinux_unit_access_check_strv(char **units, sd_bus_message *message, Ma
 #define mac_selinux_unit_access_check(unit, message, permission, error) \
         ({                                                              \
                 Unit *_unit = (unit);                                   \
-                mac_selinux_generic_access_check((message), _unit->fragment_path ?: _unit->fragment_path, (permission), (error)); \
+                mac_selinux_generic_access_check((message), _unit->source_path ?: _unit->fragment_path, (permission), (error)); \
         })
 
 #else

commit 326f2a73952b73dc45be109b503162da616f230a
Author: Lennart Poettering <lennart at poettering.net>
Date:   Thu Nov 20 20:58:39 2014 +0100

    sd-bus: create clean error when a property Set() call with incorrect signature is passed in
    
    (cherry picked from commit 0ca454d474a13f363dcd5ef8dc97ca158569d3ed)

diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c
index 0ab1119..6c3230a 100644
--- a/src/libsystemd/sd-bus/bus-objects.c
+++ b/src/libsystemd/sd-bus/bus-objects.c
@@ -617,6 +617,9 @@ static int property_get_set_callbacks_run(
                         return r;
 
         } else {
+                const char *signature = NULL;
+                char type = 0;
+
                 if (c->vtable->type != _SD_BUS_VTABLE_WRITABLE_PROPERTY)
                         return sd_bus_reply_method_errorf(m, SD_BUS_ERROR_PROPERTY_READ_ONLY, "Property '%s' is not writable.", c->member);
 
@@ -628,6 +631,13 @@ static int property_get_set_callbacks_run(
 
                 c->last_iteration = bus->iteration_counter;
 
+                r = sd_bus_message_peek_type(m, &type, &signature);
+                if (r < 0)
+                        return r;
+
+                if (type != 'v' || !streq(strempty(signature), strempty(c->vtable->x.property.signature)))
+                        return sd_bus_reply_method_errorf(m, SD_BUS_ERROR_INVALID_ARGS, "Incorrect parameters for property '%s', expected '%s', got '%s'.", c->member, strempty(c->vtable->x.property.signature), strempty(signature));
+
                 r = sd_bus_message_enter_container(m, 'v', c->vtable->x.property.signature);
                 if (r < 0)
                         return r;

commit f1bf35a835cddcb38d73dbb5f9ee50fa148bb0a5
Author: Lennart Poettering <lennart at poettering.net>
Date:   Thu Nov 20 20:58:02 2014 +0100

    build: avoid trailing whitespace in feature string
    
    (cherry picked from commit 609c3029076da1ba423673161e5d0fc82ccca6b6)

diff --git a/src/core/build.h b/src/core/build.h
index d5e5550..24873ab 100644
--- a/src/core/build.h
+++ b/src/core/build.h
@@ -154,4 +154,4 @@
         _BLKID_FEATURE_ " "                                             \
         _ELFUTILS_FEATURE_ " "                                          \
         _KMOD_FEATURE_ " "                                              \
-        _IDN_FEATURE_ " "
+        _IDN_FEATURE_

commit fc6081306564f88c34fe6fd6e03dad7e47d1e66d
Author: Thomas Haller <thaller at redhat.com>
Date:   Wed Nov 19 13:57:08 2014 +0100

    sd-dhcp-lease: fix copy-paste error asserting wrong function argument
    
    (cherry picked from commit 1c6eb4e36bf88015d0bbe8fae417622e6132b864)

diff --git a/src/libsystemd-network/sd-dhcp-lease.c b/src/libsystemd-network/sd-dhcp-lease.c
index 4fb01c0..b7c9a07 100644
--- a/src/libsystemd-network/sd-dhcp-lease.c
+++ b/src/libsystemd-network/sd-dhcp-lease.c
@@ -50,7 +50,7 @@ int sd_dhcp_lease_get_address(sd_dhcp_lease *lease, struct in_addr *addr) {
 
 int sd_dhcp_lease_get_lifetime(sd_dhcp_lease *lease, uint32_t *lifetime) {
         assert_return(lease, -EINVAL);
-        assert_return(lease, -EINVAL);
+        assert_return(lifetime, -EINVAL);
 
         *lifetime = lease->lifetime;
 

commit 304f954c4fb7a0d3a52011b55f53ce890ea853d7
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Nov 19 20:52:23 2014 +0100

    core: watchdog bus properties cannot be both writable and constant
    
    (cherry picked from commit 4c3f1641f13b7687a0dc234d3ae387b7c40494ff)

diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
index c54abd3..1384e8f 100644
--- a/src/core/dbus-manager.c
+++ b/src/core/dbus-manager.c
@@ -1884,8 +1884,8 @@ const sd_bus_vtable bus_manager_vtable[] = {
         SD_BUS_PROPERTY("UnitPath", "as", NULL, offsetof(Manager, lookup_paths.unit_path), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("DefaultStandardOutput", "s", bus_property_get_exec_output, offsetof(Manager, default_std_output), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("DefaultStandardError", "s", bus_property_get_exec_output, offsetof(Manager, default_std_output), SD_BUS_VTABLE_PROPERTY_CONST),
-        SD_BUS_WRITABLE_PROPERTY("RuntimeWatchdogUSec", "t", bus_property_get_usec, property_set_runtime_watchdog, offsetof(Manager, runtime_watchdog), SD_BUS_VTABLE_PROPERTY_CONST),
-        SD_BUS_WRITABLE_PROPERTY("ShutdownWatchdogUSec", "t", bus_property_get_usec, bus_property_set_usec, offsetof(Manager, shutdown_watchdog), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_WRITABLE_PROPERTY("RuntimeWatchdogUSec", "t", bus_property_get_usec, property_set_runtime_watchdog, offsetof(Manager, runtime_watchdog), 0),
+        SD_BUS_WRITABLE_PROPERTY("ShutdownWatchdogUSec", "t", bus_property_get_usec, bus_property_set_usec, offsetof(Manager, shutdown_watchdog), 0),
         SD_BUS_PROPERTY("ControlGroup", "s", NULL, offsetof(Manager, cgroup_root), 0),
         SD_BUS_PROPERTY("SystemState", "s", property_get_system_state, 0, 0),
 

commit 51affe24d576bdbaa9b5f3708dbd0b88adedd8b9
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Nov 19 16:43:03 2014 +0100

    set: make set_consume() actually free the allocated string if the string already is in the set
    
    (cherry picked from commit 575ccc1b6900f1f8e5c32da71f42f4d855659622)
    
    Conflicts:
    	src/shared/hashmap.c

diff --git a/src/shared/set.c b/src/shared/set.c
index 84ab82a..af9cdb5 100644
--- a/src/shared/set.c
+++ b/src/shared/set.c
@@ -54,7 +54,7 @@ int set_consume(Set *s, void *value) {
         int r;
 
         r = set_put(s, value);
-        if (r < 0)
+        if (r <= 0)
                 free(value);
 
         return r;

commit 72dec8120893e76d51e430b4ee5a263e885d0974
Author: Dan Williams <dcbw at redhat.com>
Date:   Tue Nov 4 11:20:43 2014 -0600

    sd-dhcp-client: fix REBOOT state handling
    
    client->secs wasn't getting set in the REBOOT state, causing
    an assertion.  REBOOT should work the same way as INIT, per
    RFC 2131:
    
     secs   2  Filled in by client, seconds elapsed since client
               began address acquisition or renewal process.
    
    REBOOT is necessary because some DHCP servers (eg on
    home routers) do not hand back the same IP address unless the
    'ciaddr' field is filled with that address, which DISCOVER
    cannot do per the RFCs.  This leads to multiple leases
    on machine reboot or DHCP client restart.
    
    (cherry picked from commit d8d74ef06fa0ccf39084a6177e70e4c2297cca57)

diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c
index 1f7f238..9986b52 100644
--- a/src/libsystemd-network/sd-dhcp-client.c
+++ b/src/libsystemd-network/sd-dhcp-client.c
@@ -68,7 +68,6 @@ struct sd_dhcp_client {
         uint32_t mtu;
         uint32_t xid;
         usec_t start_time;
-        uint16_t secs;
         unsigned int attempt;
         usec_t request_sent;
         sd_event_source *timeout_t1;
@@ -321,10 +320,12 @@ static int client_message_init(sd_dhcp_client *client, DHCPPacket **ret,
         _cleanup_free_ DHCPPacket *packet;
         size_t optlen, optoffset, size;
         be16_t max_size;
+        usec_t time_now;
+        uint16_t secs;
         int r;
 
         assert(client);
-        assert(client->secs);
+        assert(client->start_time);
         assert(ret);
         assert(_optlen);
         assert(_optoffset);
@@ -344,7 +345,15 @@ static int client_message_init(sd_dhcp_client *client, DHCPPacket **ret,
 
         /* Although 'secs' field is a SHOULD in RFC 2131, certain DHCP servers
            refuse to issue an DHCP lease if 'secs' is set to zero */
-        packet->dhcp.secs = htobe16(client->secs);
+        r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now);
+        if (r < 0)
+                return r;
+        assert(time_now >= client->start_time);
+
+        /* seconds between sending first and last DISCOVER
+         * must always be strictly positive to deal with broken servers */
+        secs = ((time_now - client->start_time) / USEC_PER_SEC) ? : 1;
+        packet->dhcp.secs = htobe16(secs);
 
         /* RFC2132 section 4.1
            A client that cannot receive unicast IP datagrams until its protocol
@@ -441,24 +450,12 @@ static int dhcp_client_send_raw(sd_dhcp_client *client, DHCPPacket *packet,
 static int client_send_discover(sd_dhcp_client *client) {
         _cleanup_free_ DHCPPacket *discover = NULL;
         size_t optoffset, optlen;
-        usec_t time_now;
         int r;
 
         assert(client);
         assert(client->state == DHCP_STATE_INIT ||
                client->state == DHCP_STATE_SELECTING);
 
-        /* See RFC2131 section 4.4.1 */
-
-        r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now);
-        if (r < 0)
-                return r;
-        assert(time_now >= client->start_time);
-
-        /* seconds between sending first and last DISCOVER
-         * must always be strictly positive to deal with broken servers */
-        client->secs = ((time_now - client->start_time) / USEC_PER_SEC) ? : 1;
-
         r = client_message_init(client, &discover, DHCP_DISCOVER,
                                 &optlen, &optoffset);
         if (r < 0)
@@ -875,10 +872,8 @@ static int client_start(sd_dhcp_client *client) {
         }
         client->fd = r;
 
-        if (client->state == DHCP_STATE_INIT) {
+        if (client->state == DHCP_STATE_INIT || client->state == DHCP_STATE_INIT_REBOOT)
                 client->start_time = now(clock_boottime_or_monotonic());
-                client->secs = 0;
-        }
 
         return client_initialize_events(client, client_receive_message_raw);
 }

commit d08997553cb948774815268af8df482344d755f4
Author: Lennart Poettering <lennart at poettering.net>
Date:   Fri Nov 14 12:55:18 2014 +0100

    man: hostnamectl understands -M too
    
    (cherry picked from commit 34b950a8d8b83b3c101beba479a9ddae8c2ebb93)

diff --git a/man/hostnamectl.xml b/man/hostnamectl.xml
index 128d92f..e598846 100644
--- a/man/hostnamectl.xml
+++ b/man/hostnamectl.xml
@@ -129,6 +129,7 @@
                         </varlistentry>
 
                         <xi:include href="user-system-options.xml" xpointer="host" />
+                        <xi:include href="user-system-options.xml" xpointer="machine" />
 
                         <xi:include href="standard-options.xml" xpointer="help" />
                         <xi:include href="standard-options.xml" xpointer="version" />

commit 01be77928f0e453bc3fdbefb5a8f354dc264af55
Author: Bastien Nocera <hadess at hadess.net>
Date:   Wed Nov 12 23:31:08 2014 +0100

    keymap: Fix special keys on ThinkPad X60/X61 Tablet
    
    KEY_DIRECTION is mapped to XF86RotateWindows, to rotate the display:
    http://cgit.freedesktop.org/xkeyboard-config/commit/symbols/inet?id=ec875f6f9b7c4028e11d32b071989c682e6502bd
    
    And F13 is mapped to XF86Tools, which is closest to the original toolbox
    usage:
    http://cgit.freedesktop.org/xkeyboard-config/tree/symbols/inet?id=7a2c4bed212ebbcc05f3c959aef659ce7dd31fd8#n221
    
    (cherry picked from commit b4c72e52d2109fe7f0ac3440c81ae3e1ce64a143)

diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
index 56a4009..533ad5b 100644
--- a/hwdb/60-keyboard.hwdb
+++ b/hwdb/60-keyboard.hwdb
@@ -585,8 +585,8 @@ keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:pvrThinkPad*X2*Tablet*
 
 # ThinkPad X6 Tablet
 keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnThinkPad*X6*:pvr*
- KEYBOARD_KEY_6c=f21                                    # rotate
- KEYBOARD_KEY_68=screenlock                             # screenlock
+ KEYBOARD_KEY_6c=direction                              # rotate
+ KEYBOARD_KEY_68=f13                                    # toolbox
  KEYBOARD_KEY_6b=esc                                    # escape
  KEYBOARD_KEY_6d=right                                  # right on d-pad
  KEYBOARD_KEY_6e=left                                   # left on d-pad

commit 75f1c0b023cc460fabdbb3f64734ba7bd1febd0e
Author: Bastien Nocera <hadess at hadess.net>
Date:   Wed Nov 12 23:30:46 2014 +0100

    keymap: Add support for IBM ThinkPad X41 Tablet
    
    Scancode taken from:
    http://www.thinkwiki.org/wiki/Tablet_Hardware_Buttons#Linux_Support
    
    William Jon McCann provided the DMI match. IBM seems to have
    swapped the version and model of the system:
            Manufacturer: IBM
            Product Name: 18666TU
            Version: ThinkPad X41 Tablet
    
    (cherry picked from commit 71ed2d38711e345f22e2200bc7bb156aed98972a)

diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
index d2ca965..56a4009 100644
--- a/hwdb/60-keyboard.hwdb
+++ b/hwdb/60-keyboard.hwdb
@@ -594,6 +594,13 @@ keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnThinkPad*X6*:pvr*
  KEYBOARD_KEY_6f=down                                   # down on d-pad
  KEYBOARD_KEY_69=enter                                  # enter on d-pad
 
+# ThinkPad X41 Tablet
+keyboard:dmi:bvn*:bvr*:bd*:svnIBM*:pn18666TU:pvr*
+ KEYBOARD_KEY_6c=direction                              # rotate
+ KEYBOARD_KEY_68=f13                                    # toolbox
+ KEYBOARD_KEY_6b=esc                                    # escape
+ KEYBOARD_KEY_69=enter                                  # enter on d-pad
+
 # IdeaPad
 keyboard:name:Ideapad extra buttons:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*
  KEYBOARD_KEY_42=f23

commit b47ddceb5f479273ed40c454b25167eb857b7008
Author: Lennart Poettering <lennart at poettering.net>
Date:   Wed Nov 12 23:44:21 2014 +0100

    man: fix typo
    
    (cherry picked from commit 174299e35fb8386f7b1d6e57ed42c205dcd92447)

diff --git a/man/sd_bus_open_user.xml b/man/sd_bus_open_user.xml
index 47f8361..76e3ce8 100644
--- a/man/sd_bus_open_user.xml
+++ b/man/sd_bus_open_user.xml
@@ -121,8 +121,8 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
     followed by the <literal>@</literal> symbol, and the hostname.
     </para>
 
-    <para><function>sd_bus_open_system_remote()</function> connects to
-    the system bus in the specified <parameter>machine</parameter>,
+    <para><function>sd_bus_open_system_container()</function> connects
+    to the system bus in the specified <parameter>machine</parameter>,
     where <parameter>machine</parameter> is the name of a container.
     See
     <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>

commit dca6a58907b25f4c140eb3290880fb03a428237b
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Nov 10 20:54:45 2014 +0100

    bus: when dumping string property values escape the chars we use as end-of-line and end-of-item marks
    
    (cherry picked from commit 27e9c5af817147ea1c678769e45e83f2e4b4ae96)

diff --git a/src/libsystemd/sd-bus/bus-util.c b/src/libsystemd/sd-bus/bus-util.c
index 43acf5b..5345526 100644
--- a/src/libsystemd/sd-bus/bus-util.c
+++ b/src/libsystemd/sd-bus/bus-util.c
@@ -640,8 +640,15 @@ int bus_print_property(const char *name, sd_bus_message *property, bool all) {
                 if (r < 0)
                         return r;
 
-                if (all || !isempty(s))
-                        printf("%s=%s\n", name, s);
+                if (all || !isempty(s)) {
+                        _cleanup_free_ char *escaped = NULL;
+
+                        escaped = xescape(s, "\n");
+                        if (!escaped)
+                                return -ENOMEM;
+
+                        printf("%s=%s\n", name, escaped);
+                }
 
                 return 1;
         }
@@ -732,10 +739,16 @@ int bus_print_property(const char *name, sd_bus_message *property, bool all) {
                                 return r;
 
                         while((r = sd_bus_message_read_basic(property, SD_BUS_TYPE_STRING, &str)) > 0) {
+                                _cleanup_free_ char *escaped = NULL;
+
                                 if (first)
                                         printf("%s=", name);
 
-                                printf("%s%s", first ? "" : " ", str);
+                                escaped = xescape(str, "\n ");
+                                if (!escaped)
+                                        return -ENOMEM;
+
+                                printf("%s%s", first ? "" : " ", escaped);
 
                                 first = false;
                         }

commit be8ab46b27ff3208988a732265dcfa333867a214
Author: Mantas Mikulėnas <grawity at gmail.com>
Date:   Fri Nov 7 16:45:53 2014 +0200

    inhibit: allow filtering --list by mode
    
    Usually there are a few delay inhibitors all the time (NetworkManager,
    Telepathy, etc.), but I'm only interested in the block ones.
    
    (cherry picked from commit ca5447c082347d611c52b22a0115d4efe2d2e0e8)

diff --git a/src/login/inhibit.c b/src/login/inhibit.c
index d5ea1d9..122c69d 100644
--- a/src/login/inhibit.c
+++ b/src/login/inhibit.c
@@ -36,7 +36,7 @@
 static const char* arg_what = "idle:sleep:shutdown";
 static const char* arg_who = NULL;
 static const char* arg_why = "Unknown reason";
-static const char* arg_mode = "block";
+static const char* arg_mode = NULL;
 
 static enum {
         ACTION_INHIBIT,
@@ -97,6 +97,9 @@ static int print_inhibitors(sd_bus *bus, sd_bus_error *error) {
         while ((r = sd_bus_message_read(reply, "(ssssuu)", &what, &who, &why, &mode, &uid, &pid)) > 0) {
                 _cleanup_free_ char *comm = NULL, *u = NULL;
 
+                if (arg_mode && !streq(mode, arg_mode))
+                        continue;
+
                 get_process_comm(pid, &comm);
                 u = uid_to_name(uid);
 
@@ -252,6 +255,9 @@ int main(int argc, char *argv[]) {
                 if (!arg_who)
                         arg_who = w = strv_join(argv + optind, " ");
 
+                if (!arg_mode)
+                        arg_mode = "block";
+
                 fd = inhibit(bus, &error);
                 if (fd < 0) {
                         log_error("Failed to inhibit: %s", bus_error_message(&error, -r));

commit ef75cc15821cfb8193ce6d81b268fd7e8407075e
Author: Michal Schmidt <mschmidt at redhat.com>
Date:   Mon Nov 10 14:54:57 2014 +0100

    man: don't refer to undocumented option '--failed'
    
    (cherry picked from commit ed80170d8381cb59d323414838f189cd0d200dad)

diff --git a/man/systemctl.xml b/man/systemctl.xml
index 8a4cff8..b1d60eb 100644
--- a/man/systemctl.xml
+++ b/man/systemctl.xml
@@ -586,7 +586,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
             </para>
 
             <para>See also the options <option>--show-types</option>,
-            <option>--all</option>, and <option>--failed</option>.</para>
+            <option>--all</option>, and <option>--state=</option>.</para>
           </listitem>
         </varlistentry>
 
@@ -600,7 +600,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
             </para>
 
             <para>See also the options <option>--all</option> and
-            <option>--failed</option>.</para>
+            <option>--state=</option>.</para>
           </listitem>
         </varlistentry>
 

commit 4292ae2f599ec57084e1a7cee00fc0c8ac856a03
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Nov 10 14:44:35 2014 +0100

    man: don't document systemctl --failed
    
    This effectively reverts 599b6322f19ec619ddc294d0e7880b669040cf66, which
    in turn partially reverted 4dc5b821ae737914499119e29811fc3346e3d97c.
    
    The --failed switch is not documented on purpose, since it is redundant
    due to --state=failed, which it predates. Due to that it's not
    documented in --help either.
    
    We generally try to avoid redundant interfaces, but if we need to keep
    them for compatibility we do so, however remove them from documentation
    to ensure they are not used in future.
    
    The man page is now changed to include a comment about the fact that
    --failed is not documented on purpose. Also, explicitly mention
    --state=failed as example for --state.
    
    (cherry picked from commit 036359ba8d0aba7db7eac75d10073a849a033fd1)

diff --git a/man/systemctl.xml b/man/systemctl.xml
index ebee2bf..8a4cff8 100644
--- a/man/systemctl.xml
+++ b/man/systemctl.xml
@@ -98,9 +98,10 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
         <term><option>--state=</option></term>
 
         <listitem>
-        <para>The argument should be a comma-separated list of unit LOAD,
-        SUB, or ACTIVE states. When listing units, show only those
-        in specified states.</para>
+        <para>The argument should be a comma-separated list of unit
+        LOAD, SUB, or ACTIVE states. When listing units, show only
+        those in specified states. Use <option>--state=failed</option>
+        to show only failed units.</para>
         </listitem>
       </varlistentry>
 
@@ -321,14 +322,10 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
       <xi:include href="user-system-options.xml" xpointer="user" />
       <xi:include href="user-system-options.xml" xpointer="system" />
 
-      <varlistentry>
-        <term><option>--failed</option></term>
-
-        <listitem>
-          <para>List units in failed state. This is equivalent to
-          <option>--state=failed</option>.</para>
-        </listitem>
-      </varlistentry>
+      <!-- we do not document -failed here, as it has been made
+           redundant by -state=failed, which it predates. To keep
+           things simple we only document the new switch, while
+           keeping the old one around for compatibility only. -->
 
       <varlistentry>
         <term><option>--no-wall</option></term>

commit 335ceb0b2dc61f838577e3dccb81ea95fc3c50fa
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Fri Nov 7 18:11:53 2014 -0500

    man: document --failed
    
    https://bugs.debian.org/767267
    (cherry picked from commit 599b6322f19ec619ddc294d0e7880b669040cf66)

diff --git a/man/systemctl.xml b/man/systemctl.xml
index 7cbaa6c..ebee2bf 100644
--- a/man/systemctl.xml
+++ b/man/systemctl.xml
@@ -322,6 +322,15 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
       <xi:include href="user-system-options.xml" xpointer="system" />
 
       <varlistentry>
+        <term><option>--failed</option></term>
+
+        <listitem>
+          <para>List units in failed state. This is equivalent to
+          <option>--state=failed</option>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>--no-wall</option></term>
 
         <listitem>

commit 995ebb3fe302c8022460909f1e360bb3ebe4ef29
Author: Rami Rosen <ramirose at gmail.com>
Date:   Sat Nov 8 12:59:01 2014 +0200

    network: fix typo
    
    IFLA_IPTUN_LINK -> VETH_INFO_PEER
    
    (cherry picked from commit ed7fb9cb235d2aedb755dcb8a5a5d9cdffba1519)

diff --git a/src/network/networkd-netdev-veth.c b/src/network/networkd-netdev-veth.c
index da09ef9..ca2bb07 100644
--- a/src/network/networkd-netdev-veth.c
+++ b/src/network/networkd-netdev-veth.c
@@ -39,7 +39,7 @@ static int netdev_veth_fill_message_create(NetDev *netdev, Link *link, sd_rtnl_m
         r = sd_rtnl_message_open_container(m, VETH_INFO_PEER);
         if (r < 0) {
                 log_error_netdev(netdev,
-                                 "Could not append IFLA_IPTUN_LINK attribute: %s",
+                                 "Could not append VETH_INFO_PEER attribute: %s",
                                  strerror(-r));
                 return r;
         }

commit 5e0ee52aac53e6d7f94d503e6ee479e0d41119de
Author: Lennart Poettering <lennart at poettering.net>
Date:   Fri Nov 7 16:34:37 2014 +0100

    sysusers: be nice and print a warning if futimens() fails
    
    CID# 1251163
    
    (cherry picked from commit f06863bde5de49a503cb8028e89d4b30790f2cbf)

diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
index c133dc5..5f5b49d 100644
--- a/src/sysusers/sysusers.c
+++ b/src/sysusers/sysusers.c
@@ -241,7 +241,8 @@ static int make_backup(const char *target, const char *x) {
 
         ts[0] = st.st_atim;
         ts[1] = st.st_mtim;
-        futimens(fileno(dst), ts);
+        if (futimens(fileno(dst), ts) < 0)
+                log_warning("Failed to fix access and modification time of %s: %m", backup);
 
         if (rename(temp, backup) < 0)
                 goto fail;

commit ee26013e6cc81e0622458e3d973c0d1d1534c462
Author: Lennart Poettering <lennart at poettering.net>
Date:   Fri Nov 7 16:32:06 2014 +0100

    core: unify how we create the notify and private dbus socket
    
    Use the same robust logic of mkdir + unlink of any existing AF_UNIX
    socket, ignoring the return value, right before bind().
    
    (cherry picked from commit f0e62e89970b8c38eb07a9beebd277ce13a5fcc2)

diff --git a/src/core/dbus.c b/src/core/dbus.c
index 185057b..9cb198a 100644
--- a/src/core/dbus.c
+++ b/src/core/dbus.c
@@ -974,11 +974,10 @@ static int bus_init_private(Manager *m) {
                 left = strpcpy(&p, left, "/systemd/private");
 
                 salen = sizeof(sa.un) - left;
-
-                mkdir_parents_label(sa.un.sun_path, 0755);
         }
 
-        unlink(sa.un.sun_path);
+        (void) mkdir_parents_label(sa.un.sun_path, 0755);
+        (void) unlink(sa.un.sun_path);
 
         fd = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0);
         if (fd < 0) {
diff --git a/src/core/manager.c b/src/core/manager.c
index 31f9ed5..751e3fb 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -679,26 +679,13 @@ static int manager_setup_notify(Manager *m) {
                         return log_oom();
 
                 (void) mkdir_parents_label(m->notify_socket, 0755);
+                (void) unlink(m->notify_socket);
 
                 strncpy(sa.un.sun_path, m->notify_socket, sizeof(sa.un.sun_path)-1);
                 r = bind(fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + strlen(sa.un.sun_path));
                 if (r < 0) {
                         log_error("bind(%s) failed: %m", sa.un.sun_path);
-                        if (errno == EADDRINUSE) {
-                                log_notice("Removing %s socket and trying again.", m->notify_socket);
-                                r = unlink(m->notify_socket);
-                                if (r < 0) {
-                                        log_error("Failed to remove %s: %m", m->notify_socket);
-                                        return -EADDRINUSE;
-                                }
-
-                                r = bind(fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + strlen(sa.un.sun_path));
-                                if (r < 0) {
-                                        log_error("bind(%s) failed: %m", sa.un.sun_path);
-                                        return -errno;
-                                }
-                        } else
-                                return -errno;
+                        return -errno;
                 }
 
                 r = setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &one, sizeof(one));

commit 8d88fbe8abcaabd9a699c421b3bc7c3d25ba6954
Author: Lennart Poettering <lennart at poettering.net>
Date:   Fri Nov 7 02:05:50 2014 +0100

    manager: cast mkdir() result to (void) to make sure coverity is quiet
    
    Also simplify the code a bit by moving mkdir to the common path.
    
    (cherry picked from commit 498e87d6b7ef025fef2e089931f355b5cd3c7dad)

diff --git a/src/core/manager.c b/src/core/manager.c
index 47e23ba..31f9ed5 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -662,11 +662,9 @@ static int manager_setup_notify(Manager *m) {
                         return -errno;
                 }
 
-                if (m->running_as == SYSTEMD_SYSTEM) {
+                if (m->running_as == SYSTEMD_SYSTEM)
                         m->notify_socket = strdup("/run/systemd/notify");
-                        if (!m->notify_socket)
-                                return log_oom();
-                } else {
+                else {
                         const char *e;
 
                         e = getenv("XDG_RUNTIME_DIR");
@@ -676,11 +674,11 @@ static int manager_setup_notify(Manager *m) {
                         }
 
                         m->notify_socket = strappend(e, "/systemd/notify");
-                        if (!m->notify_socket)
-                                return log_oom();
-
-                        mkdir_parents_label(m->notify_socket, 0755);
                 }
+                if (!m->notify_socket)
+                        return log_oom();
+
+                (void) mkdir_parents_label(m->notify_socket, 0755);
 
                 strncpy(sa.un.sun_path, m->notify_socket, sizeof(sa.un.sun_path)-1);
                 r = bind(fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + strlen(sa.un.sun_path));

commit 497f9feaf3a11bd34df9a9acc78a1857f5d57277
Author: Lennart Poettering <lennart at poettering.net>
Date:   Fri Nov 7 16:34:00 2014 +0100

    utf8: when looking at the next unichar, honour the size parameter, in utf8_is_printable_newline()
    
    (cherry picked from commit 144b3d9e093dd9310cd9590bec039dc43a7e2ad6)

diff --git a/src/shared/utf8.c b/src/shared/utf8.c
index 9353559..8702ceb 100644
--- a/src/shared/utf8.c
+++ b/src/shared/utf8.c
@@ -150,10 +150,12 @@ bool utf8_is_printable_newline(const char* str, size_t length, bool newline) {
                 int encoded_len, val;
 
                 encoded_len = utf8_encoded_valid_unichar((const char *) p);
-                val = utf8_encoded_to_unichar((const char*) p);
-
                 if (encoded_len < 0 ||
-                    val < 0 ||
+                    (size_t) encoded_len > length)
+                        return false;
+
+                val = utf8_encoded_to_unichar((const char*) p);
+                if (val < 0 ||
                     is_unicode_control(val) ||
                     (!newline && val == '\n'))
                         return false;

commit 9b5eabf5fc53bbeb385fdd9e651d96f35faa3dfc
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Thu Nov 6 21:37:44 2014 -0500

    man: update bootup(7) for asynchronous timers.target
    
    (cherry picked from commit d82ad85cd935f92d7b8357e4649fc6b55db54e1b)

diff --git a/man/bootup.xml b/man/bootup.xml
index ac6e9f7..0854b6c 100644
--- a/man/bootup.xml
+++ b/man/bootup.xml
@@ -145,7 +145,7 @@
          v                  v                  |                    v              <emphasis>rescue.target</emphasis>
    timers.target      paths.target             |             sockets.target
          |                  |                  |                    |
-         \__________________|_________________ | ___________________/
+         v                  |_________________ | ___________________/
                                               \|/
                                                v
                                          basic.target
@@ -174,6 +174,11 @@
                 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>)
                 or by symlinking <filename>default.target</filename>
                 to them.</para>
+
+                <para><filename>timers.target</filename> is pulled-in
+                by <filename>basic.target</filename> asynchronously.
+                This allows timers units to depend on services which
+                become only available later in boot.</para>
         </refsect1>
 
         <refsect1>

commit 7879d2f09c71f80b07c2b3e4263a84a2730bb825
Author: Michael Chapman <mike at very.puzzling.org>
Date:   Thu Nov 6 19:47:02 2014 +1100

    timer: reenable TIMER_ACTIVE timers when restarted
    
    A timer configured with OnActiveSec will start its associated unit again
    if the timer is stopped, then started. However, if the timer unit is
    restarted -- with "systemctl restart", say -- this does not occur.
    
    This commit ensures that TIMER_ACTIVE timers are re-enabled whenever the
    timer is started, even if that's within a restart job.
    
    (cherry picked from commit 779042e772d2459f7649b34a164902dc456f1bab)

diff --git a/src/core/timer.c b/src/core/timer.c
index a3713e2..5c4e9f9 100644
--- a/src/core/timer.c
+++ b/src/core/timer.c
@@ -521,6 +521,7 @@ fail:
 
 static int timer_start(Unit *u) {
         Timer *t = TIMER(u);
+        TimerValue *v;
 
         assert(t);
         assert(t->state == TIMER_DEAD || t->state == TIMER_FAILED);
@@ -530,6 +531,11 @@ static int timer_start(Unit *u) {
 
         t->last_trigger = DUAL_TIMESTAMP_NULL;
 
+        /* Reenable all timers that depend on unit activation time */
+        LIST_FOREACH(value, v, t->values)
+                if (v->base == TIMER_ACTIVE)
+                        v->disabled = false;
+
         if (t->stamp_path) {
                 struct stat st;
 

commit 5c10861b9ec841727723b31b9bb21fd3f7e9f985
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Sun Nov 2 19:08:06 2014 -0500

    Accept StartTimeout* options for compatibility
    
    Assignments of 0/none are ignored, all others are warned about.

diff --git a/src/core/main.c b/src/core/main.c
index d48604e..a9ca34d 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -623,6 +623,9 @@ static int config_parse_join_controllers(const char *unit,
 }
 
 static int parse_config_file(void) {
+        usec_t start_timeout_usec = 0;
+        FailureAction start_timeout_action = FAILURE_ACTION_NONE;
+        char *start_timeout_reboot_arg = NULL;
 
         const ConfigTableItem items[] = {
                 { "Manager", "LogLevel",                  config_parse_level2,           0, NULL                                   },
@@ -670,6 +673,9 @@ static int parse_config_file(void) {
                 { "Manager", "DefaultCPUAccounting",      config_parse_bool,             0, &arg_default_cpu_accounting            },
                 { "Manager", "DefaultBlockIOAccounting",  config_parse_bool,             0, &arg_default_blockio_accounting        },
                 { "Manager", "DefaultMemoryAccounting",   config_parse_bool,             0, &arg_default_memory_accounting         },
+                { "Manager", "StartTimeoutSec",           config_parse_sec,              0, &start_timeout_usec                    },
+                { "Manager", "StartTimeoutAction",        config_parse_failure_action,   0, &start_timeout_action                  },
+                { "Manager", "StartTimeoutRebootArgument",config_parse_string,           0, &start_timeout_reboot_arg              },
                 {}
         };
 
@@ -681,6 +687,10 @@ static int parse_config_file(void) {
                      config_item_table_lookup, items,
                      false, false, true, NULL);
 
+        if (start_timeout_usec != 0 || start_timeout_action != FAILURE_ACTION_NONE)
+                log_warning("StartTimeoutSec, StartTimeoutAction, StartTimeoutRebootArgument settings have\n"
+                            "been replaced by JobTimeoutSec, JobTimeoutAction, JobTimeoutReboot, ignoring.");
+
         return 0;
 }
 

commit cdb7cc6960a3fcfe91129d4eaf73a0809d26611b
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Fri Jan 16 00:55:53 2015 -0500

    Revert "build-sys: bump version number in preparation for release"
    
    This reverts commit 9a4f7f5ef7a0895962d5c9b9e0bc8579fd792aef.

diff --git a/configure.ac b/configure.ac
index c2f8f7a..cf98c41 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,7 +20,7 @@
 AC_PREREQ([2.64])
 
 AC_INIT([systemd],
-        [217],
+        [216],
         [http://bugs.freedesktop.org/enter_bug.cgi?product=systemd],
         [systemd],
         [http://www.freedesktop.org/wiki/Software/systemd])

commit a59400d10830f01a5eb657d41d992df42cd8952e
Author: Michal Schmidt <mschmidt at redhat.com>
Date:   Thu Nov 6 22:24:13 2014 +0100

    shutdown: fix arguments to /run/initramfs/shutdown
    
    Our initrd interface specifies that the verb is in argv[1].
    This is where systemd passes it to systemd-shutdown, but getopt
    permutes argv[]. This confuses dracut's shutdown script:
      Shutdown called with argument '--log-level'. Rebooting!
    
    getopt can be convinced to not permute argv[] by having '-' as the first
    character of optstring. Let's use it. This requires changing the way
    non-option arguments (in our case, the verb) are processed.
    
    This fixes a bug where the system would reboot instead of powering off.
    
    (cherry picked from commit 4b5d8d0f22ae61ceb45a25391354ba53b43ee992)

diff --git a/src/core/shutdown.c b/src/core/shutdown.c
index 20cf526..03cfddc 100644
--- a/src/core/shutdown.c
+++ b/src/core/shutdown.c
@@ -75,7 +75,9 @@ static int parse_argv(int argc, char *argv[]) {
         assert(argc >= 1);
         assert(argv);
 
-        while ((c = getopt_long(argc, argv, "", options, NULL)) >= 0)
+        /* "-" prevents getopt from permuting argv[] and moving the verb away
+         * from argv[1]. Our interface to initrd promises it'll be there. */
+        while ((c = getopt_long(argc, argv, "-", options, NULL)) >= 0)
                 switch (c) {
 
                 case ARG_LOG_LEVEL:
@@ -113,6 +115,13 @@ static int parse_argv(int argc, char *argv[]) {
 
                         break;
 
+                case '\001':
+                        if (!arg_verb)
+                                arg_verb = optarg;
+                        else
+                                log_error("Excess arguments, ignoring");
+                        break;
+
                 case '?':
                         return -EINVAL;
 
@@ -120,15 +129,11 @@ static int parse_argv(int argc, char *argv[]) {
                         assert_not_reached("Unhandled option code.");
                 }
 
-        if (optind >= argc) {
+        if (!arg_verb) {
                 log_error("Verb argument missing.");
                 return -EINVAL;
         }
 
-        arg_verb = argv[optind];
-
-        if (optind + 1 < argc)
-                log_error("Excess arguments, ignoring");
         return 0;
 }
 

commit dd5e5ef3392a83525d23aa9a523e9d187fb7faaf
Author: Michal Schmidt <mschmidt at redhat.com>
Date:   Thu Nov 6 16:48:11 2014 +0100

    shared: create files even if the SELinux policy has no context for them
    
    The SELinux policy defines no context for some files. E.g.:
      $ matchpathcon /run/lock/subsys /dev/mqueue
      /run/lock/subsys        <<none>>
      /dev/mqueue     <<none>>
    
    We still need to be able to create them.
    In this case selabel_lookup_raw() returns ENOENT. We should then skip
    setfscreatecon(), but still return success.
    It was broken since c34255bdb2 ("label: unify code to make directories,
    symlinks").
    
    (cherry picked from commit 2d58aa4692e9fc47911bff5d064ba3e328c35369)

diff --git a/src/shared/selinux-util.c b/src/shared/selinux-util.c
index 1eddd17..6bd3bf1 100644
--- a/src/shared/selinux-util.c
+++ b/src/shared/selinux-util.c
@@ -332,9 +332,13 @@ int mac_selinux_create_file_prepare(const char *path, mode_t mode) {
                 r = selabel_lookup_raw(label_hnd, &filecon, newpath, mode);
         }
 
-        if (r < 0 && errno != ENOENT)
+        /* No context specified by the policy? Proceed without setting it. */
+        if (r < 0 && errno == ENOENT)
+                return 0;
+
+        if (r < 0)
                 r = -errno;
-        else if (r == 0) {
+        else {
                 r = setfscreatecon(filecon);
                 if (r < 0) {
                         log_enforcing("Failed to set SELinux security context %s for %s: %m", filecon, path);

commit 4ce940e9a436ef9d19bd52bd9c2f7ac24d1c842c
Author: Lennart Poettering <lennart at poettering.net>
Date:   Thu Nov 6 15:20:29 2014 +0100

    systemctl: when invokes as "reboot -f", sync()
    
    We do this in the clean shutdown path in shutdown.c, hence we should do
    is for "reboot -f", too.
    
    (cherry picked from commit 4a3ad39957399c4a30fc472a804e72907ecaa4f9)

diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 8481a9b..207a5e7 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -6948,8 +6948,13 @@ done:
 
 static int halt_now(enum action a) {
 
-/* Make sure C-A-D is handled by the kernel from this
-         * point on... */
+        /* The kernel will automaticall flush ATA disks and suchlike
+         * on reboot(), but the file systems need to be synce'd
+         * explicitly in advance. */
+        sync();
+
+        /* Make sure C-A-D is handled by the kernel from this point
+         * on... */
         reboot(RB_ENABLE_CAD);
 
         switch (a) {

commit c4b4b03e153f8449480977535eb70465b4320b12
Author: Colin Guthrie <colin at mageia.org>
Date:   Wed Nov 5 15:29:41 2014 +0000

    udev hwdb: Change error message regarding missing hwdb.bin back to debug.
    
    When used in an initramfs, it's expected that the hwdb.bin file is
    not present (it makes for a very large initramfs otherwise).
    
    While it's nice to tell the user about this, as it's not strictly
    speaking an error we really shouldn't be so forceful in our
    reporting.
    
    (cherry picked from commit 8232e39e7cf32071e11b3b04839e6c98fbc81d0f)

diff --git a/src/libudev/libudev-hwdb.c b/src/libudev/libudev-hwdb.c
index a1cfc0b..0716072 100644
--- a/src/libudev/libudev-hwdb.c
+++ b/src/libudev/libudev-hwdb.c
@@ -296,7 +296,7 @@ _public_ struct udev_hwdb *udev_hwdb_new(struct udev *udev) {
         }
 
         if (!hwdb->f) {
-                udev_err(udev, "hwdb.bin does not exist, please run udevadm hwdb --update");
+                udev_dbg(udev, "hwdb.bin does not exist, please run udevadm hwdb --update");
                 udev_hwdb_unref(hwdb);
                 return NULL;
         }

commit dc2bcafb431344448b93f92a1f6749c9afb30398
Author: Colin Guthrie <colin at mageia.org>
Date:   Sun Nov 2 13:33:16 2014 +0000

    manager: Ensure user's systemd runtime directory exists.
    
    This mirrors code in dbus.c when creating the private socket and
    avoids error messages like:
    
    systemd[1353]: bind(/run/user/603/systemd/notify) failed: No such file or directory
    systemd[1353]: Failed to fully start up daemon: No such file or directory
    
    (cherry picked from commit 0c3f25e0c1f028d4da9cc5253abf0322230e6835)

diff --git a/src/core/manager.c b/src/core/manager.c
index ff29ae1..47e23ba 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -662,9 +662,11 @@ static int manager_setup_notify(Manager *m) {
                         return -errno;
                 }
 
-                if (m->running_as == SYSTEMD_SYSTEM)
+                if (m->running_as == SYSTEMD_SYSTEM) {
                         m->notify_socket = strdup("/run/systemd/notify");
-                else {
+                        if (!m->notify_socket)
+                                return log_oom();
+                } else {
                         const char *e;
 
                         e = getenv("XDG_RUNTIME_DIR");
@@ -674,9 +676,11 @@ static int manager_setup_notify(Manager *m) {
                         }
 
                         m->notify_socket = strappend(e, "/systemd/notify");
+                        if (!m->notify_socket)
+                                return log_oom();
+
+                        mkdir_parents_label(m->notify_socket, 0755);
                 }
-                if (!m->notify_socket)
-                        return log_oom();
 
                 strncpy(sa.un.sun_path, m->notify_socket, sizeof(sa.un.sun_path)-1);
                 r = bind(fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + strlen(sa.un.sun_path));

commit 67ada875bc0563d97e88f77732359d01ef28a404
Author: Richard W.M. Jones <rjones at redhat.com>
Date:   Tue Nov 4 23:45:15 2014 +0000

    udev: Fix parsing of udev.event-timeout kernel parameter.
    
    (cherry picked from commit f671774f52838d35d78e62ddcb781b5b65b3373f)

diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 2e6c713..193702c 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -994,9 +994,9 @@ static void kernel_cmdline_options(struct udev *udev) {
                         if (r < 0)
                                 log_warning("Invalid udev.exec-delay ignored: %s", opt + 16);
                 } else if (startswith(opt, "udev.event-timeout=")) {
-                        r = safe_atou64(opt + 16, &arg_event_timeout_usec);
+                        r = safe_atou64(opt + 19, &arg_event_timeout_usec);
                         if (r < 0) {
-                                log_warning("Invalid udev.event-timeout ignored: %s", opt + 16);
+                                log_warning("Invalid udev.event-timeout ignored: %s", opt + 19);
                                 break;
                         }
                         arg_event_timeout_usec *= USEC_PER_SEC;

commit a48190c9f9b07f735d14743878955511e66206c4
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Thu Nov 6 16:44:06 2014 -0500

    Revert "missing: remove fanotify"
    
    This reverts commit c7e4a7bece7a5c4484d229dd5e8ff01a5d49c62e.

diff --git a/Makefile.am b/Makefile.am
index 11a3033..6d869c1 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -741,6 +741,7 @@ noinst_LTLIBRARIES += \
 
 libsystemd_shared_la_SOURCES = \
 	src/shared/linux/auto_dev-ioctl.h \
+	src/shared/linux/fanotify.h \
 	src/shared/ioprio.h \
 	src/shared/missing.h \
 	src/shared/initreq.h \
diff --git a/configure.ac b/configure.ac
index e63d3dc..c2f8f7a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -306,6 +306,7 @@ RT_LIBS="$LIBS"
 AC_SUBST(RT_LIBS)
 LIBS="$save_LIBS"
 
+AC_CHECK_FUNCS([fanotify_init fanotify_mark])
 AC_CHECK_FUNCS([memfd_create])
 AC_CHECK_FUNCS([__secure_getenv secure_getenv])
 AC_CHECK_DECLS([gettid, pivot_root, name_to_handle_at, setns, LO_FLAGS_PARTSCAN],
diff --git a/src/shared/linux/fanotify.h b/src/shared/linux/fanotify.h
new file mode 100644
index 0000000..63531a6
--- /dev/null
+++ b/src/shared/linux/fanotify.h
@@ -0,0 +1,98 @@
+#ifndef _LINUX_FANOTIFY_H
+#define _LINUX_FANOTIFY_H
+
+#include <linux/types.h>
+
+/* the following events that user-space can register for */
+#define FAN_ACCESS		0x00000001	/* File was accessed */
+#define FAN_MODIFY		0x00000002	/* File was modified */
+#define FAN_CLOSE_WRITE		0x00000008	/* Unwrittable file closed */
+#define FAN_CLOSE_NOWRITE	0x00000010	/* Writtable file closed */
+#define FAN_OPEN		0x00000020	/* File was opened */
+
+#define FAN_EVENT_ON_CHILD	0x08000000	/* interested in child events */
+
+/* FIXME currently Q's have no limit.... */
+#define FAN_Q_OVERFLOW		0x00004000	/* Event queued overflowed */
+
+#define FAN_OPEN_PERM		0x00010000	/* File open in perm check */
+#define FAN_ACCESS_PERM		0x00020000	/* File accessed in perm check */
+
+/* helper events */
+#define FAN_CLOSE		(FAN_CLOSE_WRITE | FAN_CLOSE_NOWRITE) /* close */
+
+/* flags used for fanotify_init() */
+#define FAN_CLOEXEC		0x00000001
+#define FAN_NONBLOCK		0x00000002
+
+#define FAN_ALL_INIT_FLAGS	(FAN_CLOEXEC | FAN_NONBLOCK)
+
+/* flags used for fanotify_modify_mark() */
+#define FAN_MARK_ADD		0x00000001
+#define FAN_MARK_REMOVE		0x00000002
+#define FAN_MARK_DONT_FOLLOW	0x00000004
+#define FAN_MARK_ONLYDIR	0x00000008
+#define FAN_MARK_MOUNT		0x00000010
+#define FAN_MARK_IGNORED_MASK	0x00000020
+#define FAN_MARK_IGNORED_SURV_MODIFY	0x00000040
+#define FAN_MARK_FLUSH		0x00000080
+
+#define FAN_ALL_MARK_FLAGS	(FAN_MARK_ADD |\
+				 FAN_MARK_REMOVE |\
+				 FAN_MARK_DONT_FOLLOW |\
+				 FAN_MARK_ONLYDIR |\
+				 FAN_MARK_MOUNT |\
+				 FAN_MARK_IGNORED_MASK |\
+				 FAN_MARK_IGNORED_SURV_MODIFY)
+
+/*
+ * All of the events - we build the list by hand so that we can add flags in
+ * the future and not break backward compatibility.  Apps will get only the
+ * events that they originally wanted.  Be sure to add new events here!
+ */
+#define FAN_ALL_EVENTS (FAN_ACCESS |\
+			FAN_MODIFY |\
+			FAN_CLOSE |\
+			FAN_OPEN)
+
+/*
+ * All events which require a permission response from userspace
+ */
+#define FAN_ALL_PERM_EVENTS (FAN_OPEN_PERM |\
+			     FAN_ACCESS_PERM)
+
+#define FAN_ALL_OUTGOING_EVENTS	(FAN_ALL_EVENTS |\
+				 FAN_ALL_PERM_EVENTS |\
+				 FAN_Q_OVERFLOW)
+
+#define FANOTIFY_METADATA_VERSION	2
+
+struct fanotify_event_metadata {
+	__u32 event_len;
+	__u32 vers;
+	__u64 mask;
+	__s32 fd;
+	__s32 pid;
+} __attribute__ ((packed));
+
+struct fanotify_response {
+	__s32 fd;
+	__u32 response;
+} __attribute__ ((packed));
+
+/* Legit userspace responses to a _PERM event */
+#define FAN_ALLOW	0x01
+#define FAN_DENY	0x02
+
+/* Helper functions to deal with fanotify_event_metadata buffers */
+#define FAN_EVENT_METADATA_LEN (sizeof(struct fanotify_event_metadata))
+
+#define FAN_EVENT_NEXT(meta, len) ((len) -= (meta)->event_len, \
+				   (struct fanotify_event_metadata*)(((char *)(meta)) + \
+				   (meta)->event_len))
+
+#define FAN_EVENT_OK(meta, len)	((long)(len) >= (long)FAN_EVENT_METADATA_LEN && \
+				(long)(meta)->event_len >= (long)FAN_EVENT_METADATA_LEN && \
+				(long)(meta)->event_len <= (long)(len))
+
+#endif /* _LINUX_FANOTIFY_H */
diff --git a/src/shared/missing.h b/src/shared/missing.h
index bb4f8f2..c98d027 100644
--- a/src/shared/missing.h
+++ b/src/shared/missing.h
@@ -116,6 +116,12 @@ static inline int pivot_root(const char *new_root, const char *put_old) {
 #endif
 
 #ifdef __x86_64__
+#  ifndef __NR_fanotify_init
+#    define __NR_fanotify_init 300
+#  endif
+#  ifndef __NR_fanotify_mark
+#    define __NR_fanotify_mark 301
+#  endif
 #  ifndef __NR_memfd_create
 #    define __NR_memfd_create 319
 #  endif
@@ -124,16 +130,69 @@ static inline int pivot_root(const char *new_root, const char *put_old) {
 #    define __NR_memfd_create 385
 #  endif
 #elif defined _MIPS_SIM
+#  if _MIPS_SIM == _MIPS_SIM_ABI32
+#    ifndef __NR_fanotify_init
+#      define __NR_fanotify_init 4336
+#    endif
+#    ifndef __NR_fanotify_mark
+#      define __NR_fanotify_mark 4337
+#    endif
+#  elif _MIPS_SIM == _MIPS_SIM_NABI32
+#    ifndef __NR_fanotify_init
+#      define __NR_fanotify_init 6300
+#    endif
+#    ifndef __NR_fanotify_mark
+#      define __NR_fanotify_mark 6301
+#    endif
+#  elif _MIPS_SIM == _MIPS_SIM_ABI64
+#    ifndef __NR_fanotify_init
+#      define __NR_fanotify_init 5295
+#    endif
+#    ifndef __NR_fanotify_mark
+#      define __NR_fanotify_mark 5296
+#    endif
+#  endif
 #  ifndef __NR_memfd_create
 #    warning "__NR_memfd_create not yet defined for MIPS"
 #    define __NR_memfd_create 0xffffffff
 #  endif
 #else
+#  ifndef __NR_fanotify_init
+#    define __NR_fanotify_init 338
+#  endif
+#  ifndef __NR_fanotify_mark
+#    define __NR_fanotify_mark 339
+#  endif
 #  ifndef __NR_memfd_create
 #    define __NR_memfd_create 356
 #  endif
 #endif
 
+#ifndef HAVE_FANOTIFY_INIT
+static inline int fanotify_init(unsigned int flags, unsigned int event_f_flags) {
+        return syscall(__NR_fanotify_init, flags, event_f_flags);
+}
+#endif
+
+#ifndef HAVE_FANOTIFY_MARK
+static inline int fanotify_mark(int fanotify_fd, unsigned int flags, uint64_t mask,
+                                int dfd, const char *pathname) {
+#if defined _MIPS_SIM && _MIPS_SIM == _MIPS_SIM_ABI32 || defined __powerpc__ && !defined __powerpc64__ \
+    || defined __arm__ && !defined __aarch64__
+        union {
+                uint64_t _64;
+                uint32_t _32[2];
+        } _mask;
+        _mask._64 = mask;
+
+        return syscall(__NR_fanotify_mark, fanotify_fd, flags,
+                       _mask._32[0], _mask._32[1], dfd, pathname);
+#else
+        return syscall(__NR_fanotify_mark, fanotify_fd, flags, mask, dfd, pathname);
+#endif
+}
+#endif
+
 #ifndef HAVE_MEMFD_CREATE
 static inline int memfd_create(const char *name, unsigned int flags) {
         return syscall(__NR_memfd_create, name, flags);

commit 25bfe24d32faa1203d74ffb6bfbf732e10426ea3
Author: Michal Schmidt <mschmidt at redhat.com>
Date:   Tue Nov 4 20:28:08 2014 +0100

    units: make systemd-journald.service Type=notify
    
    It already calls sd_notify(), so it looks like an oversight.
    
    Without it, its ordering to systemd-journal-flush.service is
    non-deterministic and the SIGUSR1 from flushing may kill journald before
    it has its signal handlers set up.
    
    https://bugs.freedesktop.org/show_bug.cgi?id=85871
    https://bugzilla.redhat.com/show_bug.cgi?id=1159641
    (cherry picked from commit a87a38c20196a4aeb56b6ba71d688eefd0b21c30)
    
    Conflicts:
    	units/systemd-journald.service.in

diff --git a/units/systemd-journald.service.in b/units/systemd-journald.service.in
index 4de38fa..441d5b1 100644
--- a/units/systemd-journald.service.in
+++ b/units/systemd-journald.service.in
@@ -14,6 +14,7 @@ After=systemd-journald.socket systemd-journald-dev-log.socket syslog.socket
 Before=sysinit.target
 
 [Service]
+Type=notify
 Sockets=systemd-journald.socket systemd-journald-dev-log.socket
 ExecStart=@rootlibexecdir@/systemd-journald
 Restart=always



More information about the systemd-commits mailing list