diff --git a/0001-acpi-fptd-fix-memory-leak-in-acpi_get_boot_usec.patch b/0001-acpi-fptd-fix-memory-leak-in-acpi_get_boot_usec.patch new file mode 100644 index 0000000..663137c --- /dev/null +++ b/0001-acpi-fptd-fix-memory-leak-in-acpi_get_boot_usec.patch @@ -0,0 +1,25 @@ +From 3e4aca291a6ab914e08108acbd5d96600370c20d Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Wed, 2 Oct 2013 13:39:49 +0200 +Subject: [PATCH] acpi-fptd: fix memory leak in acpi_get_boot_usec + +--- + src/shared/acpi-fpdt.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/acpi-fpdt.c b/src/shared/acpi-fpdt.c +index b094f34..a7c83ed 100644 +--- a/src/shared/acpi-fpdt.c ++++ b/src/shared/acpi-fpdt.c +@@ -81,7 +81,7 @@ struct acpi_fpdt_boot { + }; + + int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit) { +- char *buf; ++ _cleanup_free_ char *buf; + struct acpi_table_header *tbl; + size_t l; + struct acpi_fpdt_header *rec; +-- +1.8.4.652.g0d6e0ce + diff --git a/0002-fix-lingering-references-to-var-lib-backlight-random.patch b/0002-fix-lingering-references-to-var-lib-backlight-random.patch new file mode 100644 index 0000000..a41186d --- /dev/null +++ b/0002-fix-lingering-references-to-var-lib-backlight-random.patch @@ -0,0 +1,54 @@ +From 80c0a135afe5d801903ac742c386a5468837175c Mon Sep 17 00:00:00 2001 +From: Dave Reisner +Date: Wed, 2 Oct 2013 07:46:24 -0400 +Subject: [PATCH] fix lingering references to /var/lib/{backlight,random-seed} + +This should have been part of ef5bfcf668e6029faa78534dfe. +--- + man/systemd-backlight@.service.xml | 2 +- + man/systemd-random-seed.service.xml | 2 +- + units/systemd-backlight@.service.in | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/man/systemd-backlight@.service.xml b/man/systemd-backlight@.service.xml +index 2b73625..4318964 100644 +--- a/man/systemd-backlight@.service.xml ++++ b/man/systemd-backlight@.service.xml +@@ -58,7 +58,7 @@ + is a service that restores the display backlight + brightness at early-boot and saves it at shutdown. On + disk, the backlight brightness is stored in +- /var/lib/backlight/. Note that by ++ /var/lib/systemd/backlight/. Note that by + default, only firmware backlight devices are + saved/restored. + +diff --git a/man/systemd-random-seed.service.xml b/man/systemd-random-seed.service.xml +index 8cd14b7..e5cd037 100644 +--- a/man/systemd-random-seed.service.xml ++++ b/man/systemd-random-seed.service.xml +@@ -61,7 +61,7 @@ + for details. Saving/restoring the random seed across + boots increases the amount of available entropy early + at boot. On disk the random seed is stored in +- /var/lib/random-seed. ++ /var/lib/systemd/random-seed. + + + +diff --git a/units/systemd-backlight@.service.in b/units/systemd-backlight@.service.in +index b0e75db..5caa5d5 100644 +--- a/units/systemd-backlight@.service.in ++++ b/units/systemd-backlight@.service.in +@@ -9,7 +9,7 @@ + Description=Load/Save Screen Backlight Brightness of %I + Documentation=man:systemd-backlight@.service(8) + DefaultDependencies=no +-RequiresMountsFor=/var/lib/backlight ++RequiresMountsFor=/var/lib/systemd/backlight + Conflicts=shutdown.target + After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-remount-fs.service + Before=sysinit.target shutdown.target +-- +1.8.4.652.g0d6e0ce + diff --git a/0003-acpi-make-sure-we-never-free-an-uninitialized-pointe.patch b/0003-acpi-make-sure-we-never-free-an-uninitialized-pointe.patch new file mode 100644 index 0000000..77f212b --- /dev/null +++ b/0003-acpi-make-sure-we-never-free-an-uninitialized-pointe.patch @@ -0,0 +1,25 @@ +From 4294dcefec5bd85c17d671612fac3b4b8cd20eac Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 2 Oct 2013 14:03:56 +0200 +Subject: [PATCH] acpi: make sure we never free an uninitialized pointer + +--- + src/shared/acpi-fpdt.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/acpi-fpdt.c b/src/shared/acpi-fpdt.c +index a7c83ed..af58c7c 100644 +--- a/src/shared/acpi-fpdt.c ++++ b/src/shared/acpi-fpdt.c +@@ -81,7 +81,7 @@ struct acpi_fpdt_boot { + }; + + int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit) { +- _cleanup_free_ char *buf; ++ _cleanup_free_ char *buf = NULL; + struct acpi_table_header *tbl; + size_t l; + struct acpi_fpdt_header *rec; +-- +1.8.4.652.g0d6e0ce + diff --git a/0004-systemctl-fix-name-mangling-for-sysv-units.patch b/0004-systemctl-fix-name-mangling-for-sysv-units.patch new file mode 100644 index 0000000..9a8d7cf --- /dev/null +++ b/0004-systemctl-fix-name-mangling-for-sysv-units.patch @@ -0,0 +1,134 @@ +From 5103e16f5e12e1754a2dcfabafb7618eb15ccf98 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=A1clav=20Pavl=C3=ADn?= +Date: Wed, 2 Oct 2013 16:42:42 +0200 +Subject: [PATCH] systemctl: fix name mangling for sysv units + +--- + src/systemctl/systemctl.c | 45 ++++++++++++++++++--------------------------- + 1 file changed, 18 insertions(+), 27 deletions(-) + +diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c +index bb7ada9..d75281f 100644 +--- a/src/systemctl/systemctl.c ++++ b/src/systemctl/systemctl.c +@@ -4218,11 +4218,10 @@ static int set_environment(DBusConnection *bus, char **args) { + return 0; + } + +-static int enable_sysv_units(char **args) { ++static int enable_sysv_units(const char *verb, char **args) { + int r = 0; + + #if defined(HAVE_SYSV_COMPAT) && defined(HAVE_CHKCONFIG) +- const char *verb = args[0]; + unsigned f = 1, t = 1; + LookupPaths paths = {}; + +@@ -4242,7 +4241,7 @@ static int enable_sysv_units(char **args) { + return r; + + r = 0; +- for (f = 1; args[f]; f++) { ++ for (f = 0; args[f]; f++) { + const char *name; + _cleanup_free_ char *p = NULL, *q = NULL; + bool found_native = false, found_sysv; +@@ -4365,7 +4364,7 @@ finish: + lookup_paths_free(&paths); + + /* Drop all SysV units */ +- for (f = 1, t = 1; args[f]; f++) { ++ for (f = 0, t = 0; args[f]; f++) { + + if (isempty(args[f])) + continue; +@@ -4423,16 +4422,16 @@ static int enable_unit(DBusConnection *bus, char **args) { + + dbus_error_init(&error); + +- r = enable_sysv_units(args); +- if (r < 0) +- return r; +- + if (!args[1]) + return 0; + + r = mangle_names(args+1, &mangled_names); + if (r < 0) +- goto finish; ++ return r; ++ ++ r = enable_sysv_units(verb, mangled_names); ++ if (r < 0) ++ return r; + + if (!bus || avoid_bus()) { + if (streq(verb, "enable")) { +@@ -4624,11 +4623,15 @@ static int unit_is_enabled(DBusConnection *bus, char **args) { + _cleanup_dbus_message_unref_ DBusMessage *reply = NULL; + bool enabled; + char **name; +- char *n; ++ _cleanup_strv_free_ char **mangled_names = NULL; + + dbus_error_init(&error); + +- r = enable_sysv_units(args); ++ r = mangle_names(args+1, &mangled_names); ++ if (r < 0) ++ return r; ++ ++ r = enable_sysv_units(args[0], mangled_names); + if (r < 0) + return r; + +@@ -4636,16 +4639,10 @@ static int unit_is_enabled(DBusConnection *bus, char **args) { + + if (!bus || avoid_bus()) { + +- STRV_FOREACH(name, args+1) { ++ STRV_FOREACH(name, mangled_names) { + UnitFileState state; + +- n = unit_name_mangle(*name); +- if (!n) +- return log_oom(); +- +- state = unit_file_get_state(arg_scope, arg_root, n); +- +- free(n); ++ state = unit_file_get_state(arg_scope, arg_root, *name); + + if (state < 0) + return state; +@@ -4660,13 +4657,9 @@ static int unit_is_enabled(DBusConnection *bus, char **args) { + } + + } else { +- STRV_FOREACH(name, args+1) { ++ STRV_FOREACH(name, mangled_names) { + const char *s; + +- n = unit_name_mangle(*name); +- if (!n) +- return log_oom(); +- + r = bus_method_call_with_reply ( + bus, + "org.freedesktop.systemd1", +@@ -4675,11 +4668,9 @@ static int unit_is_enabled(DBusConnection *bus, char **args) { + "GetUnitFileState", + &reply, + NULL, +- DBUS_TYPE_STRING, &n, ++ DBUS_TYPE_STRING, name, + DBUS_TYPE_INVALID); + +- free(n); +- + if (r) + return r; + +-- +1.8.4.652.g0d6e0ce + diff --git a/0005-cryptsetup-fix-OOM-handling-when-parsing-mount-optio.patch b/0005-cryptsetup-fix-OOM-handling-when-parsing-mount-optio.patch new file mode 100644 index 0000000..e7c40bb --- /dev/null +++ b/0005-cryptsetup-fix-OOM-handling-when-parsing-mount-optio.patch @@ -0,0 +1,48 @@ +From 0f1ed3485115fd6bc7217658412ea6d7be511b5a Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 2 Oct 2013 19:36:28 +0200 +Subject: [PATCH] cryptsetup: fix OOM handling when parsing mount options + +--- + src/cryptsetup/cryptsetup.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c +index 22b5eea..769c3e4 100644 +--- a/src/cryptsetup/cryptsetup.c ++++ b/src/cryptsetup/cryptsetup.c +@@ -74,7 +74,7 @@ static int parse_one_option(const char *option) { + + t = strdup(option+7); + if (!t) +- return -ENOMEM; ++ return log_oom(); + + free(opt_cipher); + opt_cipher = t; +@@ -89,9 +89,10 @@ static int parse_one_option(const char *option) { + } else if (startswith(option, "tcrypt-keyfile=")) { + + opt_type = CRYPT_TCRYPT; +- if (path_is_absolute(option+15)) +- opt_tcrypt_keyfiles = strv_append(opt_tcrypt_keyfiles, strdup(option+15)); +- else ++ if (path_is_absolute(option+15)) { ++ if (strv_extend(&opt_tcrypt_keyfiles, option + 15) < 0) ++ return log_oom(); ++ } else + log_error("Key file path '%s' is not absolute. Ignoring.", option+15); + + } else if (startswith(option, "keyfile-size=")) { +@@ -113,7 +114,7 @@ static int parse_one_option(const char *option) { + + t = strdup(option+5); + if (!t) +- return -ENOMEM; ++ return log_oom(); + + free(opt_hash); + opt_hash = t; +-- +1.8.4.652.g0d6e0ce + diff --git a/0006-journald-add-missing-error-check.patch b/0006-journald-add-missing-error-check.patch new file mode 100644 index 0000000..3e50b24 --- /dev/null +++ b/0006-journald-add-missing-error-check.patch @@ -0,0 +1,25 @@ +From 71ff575fffcd22db42de59abbeaf150bcf6ac144 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 2 Oct 2013 19:36:43 +0200 +Subject: [PATCH] journald: add missing error check + +--- + src/journal/journal-file.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c +index 1236403..81c344f 100644 +--- a/src/journal/journal-file.c ++++ b/src/journal/journal-file.c +@@ -907,6 +907,8 @@ static int journal_file_append_field( + + osize = offsetof(Object, field.payload) + size; + r = journal_file_append_object(f, OBJECT_FIELD, osize, &o, &p); ++ if (r < 0) ++ return r; + + o->field.hash = htole64(hash); + memcpy(o->field.payload, field, size); +-- +1.8.4.652.g0d6e0ce + diff --git a/0007-bus-fix-potentially-uninitialized-memory-access.patch b/0007-bus-fix-potentially-uninitialized-memory-access.patch new file mode 100644 index 0000000..aa55ecf --- /dev/null +++ b/0007-bus-fix-potentially-uninitialized-memory-access.patch @@ -0,0 +1,34 @@ +From f20403c231e9c7f5446066f01f2f5245238d978c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 2 Oct 2013 19:37:11 +0200 +Subject: [PATCH] bus: fix potentially uninitialized memory access + +--- + src/libsystemd-bus/bus-internal.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/libsystemd-bus/bus-internal.c b/src/libsystemd-bus/bus-internal.c +index 0e66f3d..cac948e 100644 +--- a/src/libsystemd-bus/bus-internal.c ++++ b/src/libsystemd-bus/bus-internal.c +@@ -63,7 +63,7 @@ bool object_path_is_valid(const char *p) { + + bool interface_name_is_valid(const char *p) { + const char *q; +- bool dot, found_dot; ++ bool dot, found_dot = false; + + if (isempty(p)) + return false; +@@ -103,7 +103,7 @@ bool interface_name_is_valid(const char *p) { + + bool service_name_is_valid(const char *p) { + const char *q; +- bool dot, found_dot, unique; ++ bool dot, found_dot = false, unique; + + if (isempty(p)) + return false; +-- +1.8.4.652.g0d6e0ce + diff --git a/0008-dbus-fix-return-value-of-dispatch_rqueue.patch b/0008-dbus-fix-return-value-of-dispatch_rqueue.patch new file mode 100644 index 0000000..28c2fa3 --- /dev/null +++ b/0008-dbus-fix-return-value-of-dispatch_rqueue.patch @@ -0,0 +1,30 @@ +From 27d066e733e369873328e7bc0b67d91f07687cb0 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 2 Oct 2013 19:37:30 +0200 +Subject: [PATCH] dbus: fix return value of dispatch_rqueue() + +--- + src/libsystemd-bus/sd-bus.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/libsystemd-bus/sd-bus.c b/src/libsystemd-bus/sd-bus.c +index 3f766fb..db0880f 100644 +--- a/src/libsystemd-bus/sd-bus.c ++++ b/src/libsystemd-bus/sd-bus.c +@@ -1215,11 +1215,11 @@ static int dispatch_rqueue(sd_bus *bus, sd_bus_message **m) { + if (r == 0) + return ret; + +- r = 1; ++ ret = 1; + } while (!z); + + *m = z; +- return 1; ++ return ret; + } + + int sd_bus_send(sd_bus *bus, sd_bus_message *m, uint64_t *serial) { +-- +1.8.4.652.g0d6e0ce + diff --git a/0009-modules-load-fix-error-handling.patch b/0009-modules-load-fix-error-handling.patch new file mode 100644 index 0000000..c0447ef --- /dev/null +++ b/0009-modules-load-fix-error-handling.patch @@ -0,0 +1,27 @@ +From 3afab028b6bdeadd32e2c87b6f5a64019945358f Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 2 Oct 2013 19:37:44 +0200 +Subject: [PATCH] modules-load: fix error handling + +--- + src/modules-load/modules-load.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c +index 7b19ee0..49ee420 100644 +--- a/src/modules-load/modules-load.c ++++ b/src/modules-load/modules-load.c +@@ -302,8 +302,8 @@ int main(int argc, char *argv[]) { + + STRV_FOREACH(i, arg_proc_cmdline_modules) { + k = load_module(ctx, *i); +- if (k < 0) +- r = EXIT_FAILURE; ++ if (k < 0 && r == 0) ++ r = k; + } + + r = conf_files_list_nulstr(&files, ".conf", NULL, conf_file_dirs); +-- +1.8.4.652.g0d6e0ce + diff --git a/0010-efi-never-call-qsort-on-potentially-NULL-arrays.patch b/0010-efi-never-call-qsort-on-potentially-NULL-arrays.patch new file mode 100644 index 0000000..ba0827d --- /dev/null +++ b/0010-efi-never-call-qsort-on-potentially-NULL-arrays.patch @@ -0,0 +1,26 @@ +From e0cbed4dbb7c21798b5eecf3d326fb778c4d0be2 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 2 Oct 2013 19:38:09 +0200 +Subject: [PATCH] efi: never call qsort on potentially NULL arrays + +--- + src/shared/efivars.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/shared/efivars.c b/src/shared/efivars.c +index 1d5b6f9..c015b16 100644 +--- a/src/shared/efivars.c ++++ b/src/shared/efivars.c +@@ -384,7 +384,8 @@ int efi_get_boot_options(uint16_t **options) { + list[count ++] = id; + } + +- qsort(list, count, sizeof(uint16_t), cmp_uint16); ++ if (list) ++ qsort(list, count, sizeof(uint16_t), cmp_uint16); + + *options = list; + return count; +-- +1.8.4.652.g0d6e0ce + diff --git a/0011-strv-don-t-access-potentially-NULL-string-arrays.patch b/0011-strv-don-t-access-potentially-NULL-string-arrays.patch new file mode 100644 index 0000000..d70fd49 --- /dev/null +++ b/0011-strv-don-t-access-potentially-NULL-string-arrays.patch @@ -0,0 +1,27 @@ +From b430e6ff0580b962c0b36dd5817dac681c159a58 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 2 Oct 2013 19:38:28 +0200 +Subject: [PATCH] strv: don't access potentially NULL string arrays + +--- + src/shared/env-util.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/shared/env-util.c b/src/shared/env-util.c +index 5e29629..7976881 100644 +--- a/src/shared/env-util.c ++++ b/src/shared/env-util.c +@@ -405,7 +405,9 @@ char **strv_env_clean_log(char **e, const char *message) { + e[k++] = *p; + } + +- e[k] = NULL; ++ if (e) ++ e[k] = NULL; ++ + return e; + } + +-- +1.8.4.652.g0d6e0ce + diff --git a/0012-mkdir-pass-a-proper-function-pointer-to-mkdir_safe_i.patch b/0012-mkdir-pass-a-proper-function-pointer-to-mkdir_safe_i.patch new file mode 100644 index 0000000..136547a --- /dev/null +++ b/0012-mkdir-pass-a-proper-function-pointer-to-mkdir_safe_i.patch @@ -0,0 +1,25 @@ +From 77c2f8448bc13bb796b9b8dbc93c684428ab38c2 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 2 Oct 2013 19:38:52 +0200 +Subject: [PATCH] mkdir: pass a proper function pointer to mkdir_safe_internal + +--- + src/shared/mkdir.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/mkdir.c b/src/shared/mkdir.c +index b7e5c6e..43c6ea6 100644 +--- a/src/shared/mkdir.c ++++ b/src/shared/mkdir.c +@@ -53,7 +53,7 @@ int mkdir_safe_internal(const char *path, mode_t mode, uid_t uid, gid_t gid, mkd + } + + int mkdir_safe(const char *path, mode_t mode, uid_t uid, gid_t gid) { +- return mkdir_safe_internal(path, mode, uid, gid, false); ++ return mkdir_safe_internal(path, mode, uid, gid, mkdir); + } + + static int is_dir(const char* path) { +-- +1.8.4.652.g0d6e0ce + diff --git a/0013-tmpfiles.d-include-setgid-perms-for-run-log-journal.patch b/0013-tmpfiles.d-include-setgid-perms-for-run-log-journal.patch new file mode 100644 index 0000000..c014048 --- /dev/null +++ b/0013-tmpfiles.d-include-setgid-perms-for-run-log-journal.patch @@ -0,0 +1,26 @@ +From 4e1d571d8564b6383ced03316f0d84b96e1299a4 Mon Sep 17 00:00:00 2001 +From: Dave Reisner +Date: Wed, 2 Oct 2013 15:35:16 -0400 +Subject: [PATCH] tmpfiles.d: include setgid perms for /run/log/journal + +4608af4333d0f7f5 set permissions for journal storage on persistent disk +but not the volatile storage. + +ref: https://bugs.archlinux.org/task/37170 +--- + tmpfiles.d/systemd.conf | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/tmpfiles.d/systemd.conf b/tmpfiles.d/systemd.conf +index b630440..a05c657 100644 +--- a/tmpfiles.d/systemd.conf ++++ b/tmpfiles.d/systemd.conf +@@ -26,3 +26,5 @@ F /run/nologin 0644 - - - "System is booting up. See pam_nologin(8)" + + m /var/log/journal 2755 root systemd-journal - - + m /var/log/journal/%m 2755 root systemd-journal - - ++m /run/log/journal 2755 root systemd-journal - - ++m /run/log/journal/%m 2755 root systemd-journal - - +-- +1.8.4.652.g0d6e0ce + diff --git a/0014-execute.c-always-set-SHELL.patch b/0014-execute.c-always-set-SHELL.patch new file mode 100644 index 0000000..3915c20 --- /dev/null +++ b/0014-execute.c-always-set-SHELL.patch @@ -0,0 +1,169 @@ +From 0a1d15d3b802128cc9be10c849c29b76a8fae3ed Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 2 Oct 2013 13:23:10 +0200 +Subject: [PATCH] execute.c: always set $SHELL + +In e6dca81 $SHELL was added to user@.service. Let's +instead provide it to all units which have a user. +--- + TODO | 2 -- + man/systemd.exec.xml | 21 +++++++++++++++++-- + src/core/execute.c | 56 +++++++++++++++++--------------------------------- + units/user@.service.in | 1 - + 4 files changed, 38 insertions(+), 42 deletions(-) + +diff --git a/TODO b/TODO +index 07269f4..425f673 100644 +--- a/TODO ++++ b/TODO +@@ -54,8 +54,6 @@ CGroup Rework Completion: + + Features: + +-* set $SHELL where we set $HOME and $USER when User= is set of a service, drop its manual setting from user@.service +- + * we probably should replace the left-over uses of strv_append() and replace them by strv_push() or strv_extend() + + * move config_parse_path_strv() out of conf-parser.c +diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml +index f50161f..e213ec4 100644 +--- a/man/systemd.exec.xml ++++ b/man/systemd.exec.xml +@@ -1021,10 +1021,13 @@ + + + $USER ++ $LOGNAME + $HOME ++ $SHELL + +- User name and home +- directory. Set for the units which ++ User name (twice), home ++ directory, and the login shell. ++ Set for the units which + have User= set, + which includes user + systemd instances. +@@ -1080,6 +1083,20 @@ + sd_listen_fds3. + + ++ ++ ++ $TERM ++ ++ Terminal type, set ++ only for units connected to a terminal ++ (StandardInput=tty, ++ StandardOutput=tty, ++ or ++ StandardError=tty). ++ See ++ termcap5. ++ ++ + + + Additional variables may be configured by the +diff --git a/src/core/execute.c b/src/core/execute.c +index a53ef48..3979f35 100644 +--- a/src/core/execute.c ++++ b/src/core/execute.c +@@ -1094,7 +1094,7 @@ int exec_spawn(ExecCommand *command, + if (pid == 0) { + int i, err; + sigset_t ss; +- const char *username = NULL, *home = NULL; ++ const char *username = NULL, *home = NULL, *shell = NULL; + uid_t uid = (uid_t) -1; + gid_t gid = (gid_t) -1; + _cleanup_strv_free_ char **our_env = NULL, **pam_env = NULL, +@@ -1277,7 +1277,7 @@ int exec_spawn(ExecCommand *command, + + if (context->user) { + username = context->user; +- err = get_user_creds(&username, &uid, &gid, &home, NULL); ++ err = get_user_creds(&username, &uid, &gid, &home, &shell); + if (err < 0) { + r = EXIT_USER; + goto fail_child; +@@ -1462,46 +1462,28 @@ int exec_spawn(ExecCommand *command, + } + } + +- our_env = new0(char*, 7); +- if (!our_env) { ++ our_env = new(char*, 8); ++ if (!our_env || ++ (n_fds > 0 && ( ++ asprintf(our_env + n_env++, "LISTEN_PID=%lu", (unsigned long) getpid()) < 0 || ++ asprintf(our_env + n_env++, "LISTEN_FDS=%u", n_fds) < 0)) || ++ (home && asprintf(our_env + n_env++, "HOME=%s", home) < 0) || ++ (username && ( ++ asprintf(our_env + n_env++, "LOGNAME=%s", username) < 0 || ++ asprintf(our_env + n_env++, "USER=%s", username) < 0)) || ++ (shell && asprintf(our_env + n_env++, "SHELL=%s", shell) < 0) || ++ ((is_terminal_input(context->std_input) || ++ context->std_output == EXEC_OUTPUT_TTY || ++ context->std_error == EXEC_OUTPUT_TTY) && ( ++ !(our_env[n_env++] = strdup(default_term_for_tty(tty_path(context))))))) { ++ + err = -ENOMEM; + r = EXIT_MEMORY; + goto fail_child; + } + +- if (n_fds > 0) +- if (asprintf(our_env + n_env++, "LISTEN_PID=%lu", (unsigned long) getpid()) < 0 || +- asprintf(our_env + n_env++, "LISTEN_FDS=%u", n_fds) < 0) { +- err = -ENOMEM; +- r = EXIT_MEMORY; +- goto fail_child; +- } +- +- if (home) +- if (asprintf(our_env + n_env++, "HOME=%s", home) < 0) { +- err = -ENOMEM; +- r = EXIT_MEMORY; +- goto fail_child; +- } +- +- if (username) +- if (asprintf(our_env + n_env++, "LOGNAME=%s", username) < 0 || +- asprintf(our_env + n_env++, "USER=%s", username) < 0) { +- err = -ENOMEM; +- r = EXIT_MEMORY; +- goto fail_child; +- } +- +- if (is_terminal_input(context->std_input) || +- context->std_output == EXEC_OUTPUT_TTY || +- context->std_error == EXEC_OUTPUT_TTY) +- if (!(our_env[n_env++] = strdup(default_term_for_tty(tty_path(context))))) { +- err = -ENOMEM; +- r = EXIT_MEMORY; +- goto fail_child; +- } +- +- assert(n_env <= 7); ++ our_env[n_env++] = NULL; ++ assert(n_env <= 8); + + final_env = strv_env_merge(5, + environment, +diff --git a/units/user@.service.in b/units/user@.service.in +index 3718a57..3f8b59d 100644 +--- a/units/user@.service.in ++++ b/units/user@.service.in +@@ -13,7 +13,6 @@ After=systemd-user-sessions.service + User=%I + PAMName=systemd-user + Type=notify +-Environment=SHELL=%s + ExecStart=-@rootlibexecdir@/systemd --user + Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%I/dbus/user_bus_socket + Slice=user-%i.slice +-- +1.8.4.652.g0d6e0ce + diff --git a/0015-man-Improve-the-description-of-parameter-X-in-tmpfil.patch b/0015-man-Improve-the-description-of-parameter-X-in-tmpfil.patch new file mode 100644 index 0000000..7509d7f --- /dev/null +++ b/0015-man-Improve-the-description-of-parameter-X-in-tmpfil.patch @@ -0,0 +1,45 @@ +From f4c2f322509191d38f6e94fac06607d1dd99b4ac Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=A1clav=20Pavl=C3=ADn?= +Date: Thu, 3 Oct 2013 15:47:26 +0200 +Subject: [PATCH] man: Improve the description of parameter X in tmpfiles.d + page + +--- + man/tmpfiles.d.xml | 21 ++++++++++++--------- + 1 file changed, 12 insertions(+), 9 deletions(-) + +diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml +index 9fc4b7c..e8b630d 100644 +--- a/man/tmpfiles.d.xml ++++ b/man/tmpfiles.d.xml +@@ -184,15 +184,18 @@ L /tmp/foobar - - - - /dev/null + + X + Ignore a path +- during cleanup. Use this type +- to prevent path removal as +- controlled with the Age parameter. +- Note that if path is a directory, +- content of a directory is not +- excluded from clean-up, only +- directory itself. Lines of this +- type accept shell-style globs +- in place of normal path ++ during cleaning. Use this type ++ to exclude paths from clean-up ++ as controlled with the Age ++ parameter. Unlike x this ++ parameter will not exclude the ++ content if path is a directory, ++ but only directory itself. ++ Note that lines of this type do ++ not influence the effect of r ++ or R lines. Lines of this type ++ accept shell-style globs in ++ place of normal path + names. + + +-- +1.8.4.652.g0d6e0ce + diff --git a/0016-execute-more-debugging-messages.patch b/0016-execute-more-debugging-messages.patch new file mode 100644 index 0000000..0bfc55a --- /dev/null +++ b/0016-execute-more-debugging-messages.patch @@ -0,0 +1,124 @@ +From 669ac5ee25f166bdf688b06f96e8e8fd3cf9f43c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 28 Aug 2013 08:01:30 -0400 +Subject: [PATCH] execute: more debugging messages + +--- + src/core/execute.c | 35 +++++++++++++++++++++-------------- + src/login/pam-module.c | 3 ++- + 2 files changed, 23 insertions(+), 15 deletions(-) + +diff --git a/src/core/execute.c b/src/core/execute.c +index 3979f35..3f7ca52 100644 +--- a/src/core/execute.c ++++ b/src/core/execute.c +@@ -317,12 +317,12 @@ static int setup_input(const ExecContext *context, int socket_fd, bool apply_tty + case EXEC_INPUT_TTY_FAIL: { + int fd, r; + +- if ((fd = acquire_terminal( +- tty_path(context), +- i == EXEC_INPUT_TTY_FAIL, +- i == EXEC_INPUT_TTY_FORCE, +- false, +- (usec_t) -1)) < 0) ++ fd = acquire_terminal(tty_path(context), ++ i == EXEC_INPUT_TTY_FAIL, ++ i == EXEC_INPUT_TTY_FORCE, ++ false, ++ (usec_t) -1); ++ if (fd < 0) + return fd; + + if (fd != STDIN_FILENO) { +@@ -748,6 +748,7 @@ static int setup_pam( + char **e = NULL; + bool close_session = false; + pid_t pam_pid = 0, parent_pid; ++ int flags = 0; + + assert(name); + assert(user); +@@ -760,6 +761,9 @@ static int setup_pam( + * daemon. We do things this way to ensure that the main PID + * of the daemon is the one we initially fork()ed. */ + ++ if (log_get_max_level() < LOG_PRI(LOG_DEBUG)) ++ flags |= PAM_SILENT; ++ + pam_code = pam_start(name, user, &conv, &handle); + if (pam_code != PAM_SUCCESS) { + handle = NULL; +@@ -772,11 +776,11 @@ static int setup_pam( + goto fail; + } + +- pam_code = pam_acct_mgmt(handle, PAM_SILENT); ++ pam_code = pam_acct_mgmt(handle, flags); + if (pam_code != PAM_SUCCESS) + goto fail; + +- pam_code = pam_open_session(handle, PAM_SILENT); ++ pam_code = pam_open_session(handle, flags); + if (pam_code != PAM_SUCCESS) + goto fail; + +@@ -850,7 +854,7 @@ static int setup_pam( + + /* If our parent died we'll end the session */ + if (getppid() != parent_pid) { +- pam_code = pam_close_session(handle, PAM_DATA_SILENT); ++ pam_code = pam_close_session(handle, flags); + if (pam_code != PAM_SUCCESS) + goto child_finish; + } +@@ -858,7 +862,7 @@ static int setup_pam( + r = 0; + + child_finish: +- pam_end(handle, pam_code | PAM_DATA_SILENT); ++ pam_end(handle, pam_code | flags); + _exit(r); + } + +@@ -880,16 +884,19 @@ static int setup_pam( + return 0; + + fail: +- if (pam_code != PAM_SUCCESS) ++ if (pam_code != PAM_SUCCESS) { ++ log_error("PAM failed: %s", pam_strerror(handle, pam_code)); + err = -EPERM; /* PAM errors do not map to errno */ +- else ++ } else { ++ log_error("PAM failed: %m"); + err = -errno; ++ } + + if (handle) { + if (close_session) +- pam_code = pam_close_session(handle, PAM_DATA_SILENT); ++ pam_code = pam_close_session(handle, flags); + +- pam_end(handle, pam_code | PAM_DATA_SILENT); ++ pam_end(handle, pam_code | flags); + } + + strv_free(e); +diff --git a/src/login/pam-module.c b/src/login/pam-module.c +index 49296b5..973daf7 100644 +--- a/src/login/pam-module.c ++++ b/src/login/pam-module.c +@@ -199,7 +199,8 @@ _public_ PAM_EXTERN int pam_sm_open_session( + + dbus_error_init(&error); + +- /* pam_syslog(handle, LOG_INFO, "pam-systemd initializing"); */ ++ if (debug) ++ pam_syslog(handle, LOG_INFO, "pam-systemd initializing"); + + /* Make this a NOP on non-logind systems */ + if (!logind_running()) +-- +1.8.4.652.g0d6e0ce + diff --git a/0017-gpt-auto-generator-exit-immediately-if-in-container.patch b/0017-gpt-auto-generator-exit-immediately-if-in-container.patch new file mode 100644 index 0000000..c168a2b --- /dev/null +++ b/0017-gpt-auto-generator-exit-immediately-if-in-container.patch @@ -0,0 +1,40 @@ +From d25cc648fed1d6902d07c74afd71458f971ab314 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 3 Oct 2013 22:13:01 -0400 +Subject: [PATCH] gpt-auto-generator: exit immediately if in container + +Otherwise we get an ugly warning when running systemd in +a container. +--- + src/gpt-auto-generator/gpt-auto-generator.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c +index ca54925..d2b4213 100644 +--- a/src/gpt-auto-generator/gpt-auto-generator.c ++++ b/src/gpt-auto-generator/gpt-auto-generator.c +@@ -38,6 +38,7 @@ + #include "libudev.h" + #include "special.h" + #include "unit-name.h" ++#include "virt.h" + + /* TODO: + * +@@ -481,6 +482,13 @@ int main(int argc, char *argv[]) { + umask(0022); + + if (in_initrd()) { ++ log_debug("In initrd, exiting."); ++ r = 0; ++ goto finish; ++ } ++ ++ if (detect_container(NULL) > 0) { ++ log_debug("In a container, exiting."); + r = 0; + goto finish; + } +-- +1.8.4.652.g0d6e0ce + diff --git a/0018-systemd-order-remote-mounts-from-mountinfo-before-re.patch b/0018-systemd-order-remote-mounts-from-mountinfo-before-re.patch new file mode 100644 index 0000000..b094173 --- /dev/null +++ b/0018-systemd-order-remote-mounts-from-mountinfo-before-re.patch @@ -0,0 +1,41 @@ +From 095da7cd7cdb33cd5efe7a53c77862aa677045d5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 3 Oct 2013 22:15:08 -0400 +Subject: [PATCH] systemd: order remote mounts from mountinfo before + remote-fs.target + +Usually the network is stopped before filesystems are umounted. +Ordering network filesystems before remote-fs.target means that their +unmounting will be performed earlier, and can terminate sucessfully. + +https://bugs.freedesktop.org/show_bug.cgi?id=70002 +--- + src/core/mount.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/core/mount.c b/src/core/mount.c +index 3d46557..93bfa99 100644 +--- a/src/core/mount.c ++++ b/src/core/mount.c +@@ -1440,6 +1440,9 @@ static int mount_add_one( + + u = manager_get_unit(m, e); + if (!u) { ++ const char* const target = ++ fstype_is_network(fstype) ? SPECIAL_REMOTE_FS_TARGET : SPECIAL_LOCAL_FS_TARGET; ++ + delete = true; + + u = unit_new(m, sizeof(Mount)); +@@ -1466,7 +1469,7 @@ static int mount_add_one( + goto fail; + } + +- r = unit_add_dependency_by_name(u, UNIT_BEFORE, SPECIAL_LOCAL_FS_TARGET, NULL, true); ++ r = unit_add_dependency_by_name(u, UNIT_BEFORE, target, NULL, true); + if (r < 0) + goto fail; + +-- +1.8.4.652.g0d6e0ce + diff --git a/0019-manager-when-verifying-whether-clients-may-change-en.patch b/0019-manager-when-verifying-whether-clients-may-change-en.patch new file mode 100644 index 0000000..c9adff7 --- /dev/null +++ b/0019-manager-when-verifying-whether-clients-may-change-en.patch @@ -0,0 +1,45 @@ +From 8f84713d297fcba39b65e7409ec114009896c3ff Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 4 Oct 2013 17:01:37 +0200 +Subject: [PATCH] manager: when verifying whether clients may change + environment using selinux check for "reload" rather "reboot" + +This appears to be a copy/paste error. +--- + src/core/dbus-manager.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 676a07f..8f4d017 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -1397,7 +1397,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, + _cleanup_strv_free_ char **l = NULL; + char **e = NULL; + +- SELINUX_ACCESS_CHECK(connection, message, "reboot"); ++ SELINUX_ACCESS_CHECK(connection, message, "reload"); + + r = bus_parse_strv(message, &l); + if (r == -ENOMEM) +@@ -1424,7 +1424,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, + _cleanup_strv_free_ char **l = NULL; + char **e = NULL; + +- SELINUX_ACCESS_CHECK(connection, message, "reboot"); ++ SELINUX_ACCESS_CHECK(connection, message, "reload"); + + r = bus_parse_strv(message, &l); + if (r == -ENOMEM) +@@ -1452,7 +1452,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, + char **f = NULL; + DBusMessageIter iter; + +- SELINUX_ACCESS_CHECK(connection, message, "reboot"); ++ SELINUX_ACCESS_CHECK(connection, message, "reload"); + + if (!dbus_message_iter_init(message, &iter)) + goto oom; +-- +1.8.4.652.g0d6e0ce + diff --git a/0020-logind-fix-bus-introspection-data-for-TakeControl.patch b/0020-logind-fix-bus-introspection-data-for-TakeControl.patch new file mode 100644 index 0000000..7d7f65b --- /dev/null +++ b/0020-logind-fix-bus-introspection-data-for-TakeControl.patch @@ -0,0 +1,25 @@ +From e25723afe5ebc4b05d5330a935bb654904eaf2f0 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 4 Oct 2013 21:16:40 +0200 +Subject: [PATCH] logind: fix bus introspection data for TakeControl() + +--- + src/login/logind-session-dbus.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c +index 5f6bafb..be4e01c 100644 +--- a/src/login/logind-session-dbus.c ++++ b/src/login/logind-session-dbus.c +@@ -41,7 +41,7 @@ + " \n" \ + " \n" \ + " \n" \ +- " \n" \ ++ " \n" \ + " \n" \ + " \n" \ + " \n" \ +-- +1.8.4.652.g0d6e0ce + diff --git a/0021-mount-check-for-NULL-before-reading-pm-what.patch b/0021-mount-check-for-NULL-before-reading-pm-what.patch new file mode 100644 index 0000000..4c3e60e --- /dev/null +++ b/0021-mount-check-for-NULL-before-reading-pm-what.patch @@ -0,0 +1,29 @@ +From 61ccd1762fa0f9a8ec9285a8a7367fc03bcc5982 Mon Sep 17 00:00:00 2001 +From: Dave Reisner +Date: Fri, 4 Oct 2013 18:22:40 -0400 +Subject: [PATCH] mount: check for NULL before reading pm->what + +Since a57f7e2c828b85, a mount unit with garbage in it would cause +systemd to crash on loading it. + +ref: https://bugs.freedesktop.org/show_bug.cgi?id=70148 +--- + src/core/mount.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/mount.c b/src/core/mount.c +index 93bfa99..db055f0 100644 +--- a/src/core/mount.c ++++ b/src/core/mount.c +@@ -182,7 +182,7 @@ static int mount_add_mount_links(Mount *m) { + * for the source path (if this is a bind mount) to be + * available. */ + pm = get_mount_parameters_fragment(m); +- if (pm && path_is_absolute(pm->what)) { ++ if (pm && pm->what && path_is_absolute(pm->what)) { + r = unit_require_mounts_for(UNIT(m), pm->what); + if (r < 0) + return r; +-- +1.8.4.652.g0d6e0ce + diff --git a/0022-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch b/0022-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch new file mode 100644 index 0000000..0eb8435 --- /dev/null +++ b/0022-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch @@ -0,0 +1,181 @@ +From 47c666095e4ed827bbb15b6e58b760dc5dcd97ae Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 5 Oct 2013 13:09:43 -0400 +Subject: [PATCH] core: do not add "what" to RequiresMountsFor for network + mounts + +For cifs mount like //server/share, we would get +RequiresMountsFor=/server/share, which probably isn't +harmful, but quite confusing. + +Unfortunately a bunch of static functions had to be moved +up, but patch is really one line. +--- + src/core/mount.c | 137 ++++++++++++++++++++++++++++--------------------------- + 1 file changed, 70 insertions(+), 67 deletions(-) + +diff --git a/src/core/mount.c b/src/core/mount.c +index db055f0..70cd372 100644 +--- a/src/core/mount.c ++++ b/src/core/mount.c +@@ -59,6 +59,72 @@ static const UnitActiveState state_translation_table[_MOUNT_STATE_MAX] = { + [MOUNT_FAILED] = UNIT_FAILED + }; + ++static 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); ++} ++ ++static bool mount_is_network(MountParameters *p) { ++ assert(p); ++ ++ if (mount_test_option(p->options, "_netdev")) ++ return true; ++ ++ if (p->fstype && fstype_is_network(p->fstype)) ++ return true; ++ ++ return false; ++} ++ ++static bool mount_is_bind(MountParameters *p) { ++ assert(p); ++ ++ if (mount_test_option(p->options, "bind")) ++ 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")) ++ return true; ++ ++ return false; ++} ++ ++static bool mount_is_auto(MountParameters *p) { ++ assert(p); ++ ++ return !mount_test_option(p->options, "noauto"); ++} ++ ++static bool needs_quota(MountParameters *p) { ++ assert(p); ++ ++ if (mount_is_network(p)) ++ return false; ++ ++ 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"); ++} ++ + static void mount_init(Unit *u) { + Mount *m = MOUNT(u); + +@@ -182,7 +248,10 @@ static int mount_add_mount_links(Mount *m) { + * for the source path (if this is a bind mount) to be + * available. */ + pm = get_mount_parameters_fragment(m); +- if (pm && pm->what && path_is_absolute(pm->what)) { ++ if (pm && pm->what && ++ path_is_absolute(pm->what) && ++ !mount_is_network(pm)) { ++ + r = unit_require_mounts_for(UNIT(m), pm->what); + if (r < 0) + return r; +@@ -214,72 +283,6 @@ static int mount_add_mount_links(Mount *m) { + return 0; + } + +-static 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); +-} +- +-static bool mount_is_network(MountParameters *p) { +- assert(p); +- +- if (mount_test_option(p->options, "_netdev")) +- return true; +- +- if (p->fstype && fstype_is_network(p->fstype)) +- return true; +- +- return false; +-} +- +-static bool mount_is_bind(MountParameters *p) { +- assert(p); +- +- if (mount_test_option(p->options, "bind")) +- 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")) +- return true; +- +- return false; +-} +- +-static bool mount_is_auto(MountParameters *p) { +- assert(p); +- +- return !mount_test_option(p->options, "noauto"); +-} +- +-static bool needs_quota(MountParameters *p) { +- assert(p); +- +- if (mount_is_network(p)) +- return false; +- +- 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"); +-} +- + static int mount_add_device_links(Mount *m) { + MountParameters *p; + bool device_wants_mount = false; +-- +1.8.4.652.g0d6e0ce + diff --git a/0023-utf8-fix-utf8_is_printable.patch b/0023-utf8-fix-utf8_is_printable.patch new file mode 100644 index 0000000..a50d77d --- /dev/null +++ b/0023-utf8-fix-utf8_is_printable.patch @@ -0,0 +1,47 @@ +From 5b5f505ab485dd60fb608ffb2eecd755537f039f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 5 Oct 2013 22:47:52 -0400 +Subject: [PATCH] utf8: fix utf8_is_printable + +--- + src/shared/utf8.c | 5 +++-- + src/test/test-utf8.c | 1 + + 2 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/shared/utf8.c b/src/shared/utf8.c +index a8e28ac..31120af 100644 +--- a/src/shared/utf8.c ++++ b/src/shared/utf8.c +@@ -141,14 +141,15 @@ bool utf8_is_printable(const char* str, size_t length) { + + assert(str); + +- for (p = (const uint8_t*) str; length; p++) { ++ for (p = (const uint8_t*) str; length;) { + int encoded_len = utf8_encoded_valid_unichar((const char *)p); +- int32_t val = utf8_encoded_to_unichar((const char*)p); ++ int val = utf8_encoded_to_unichar((const char*)p); + + if (encoded_len < 0 || val < 0 || is_unicode_control(val)) + return false; + + length -= encoded_len; ++ p += encoded_len; + } + + return true; +diff --git a/src/test/test-utf8.c b/src/test/test-utf8.c +index 7bd0db1..f0182ee 100644 +--- a/src/test/test-utf8.c ++++ b/src/test/test-utf8.c +@@ -26,6 +26,7 @@ static void test_utf8_is_printable(void) { + assert_se(utf8_is_printable("ascii is valid\tunicode", 22)); + assert_se(utf8_is_printable("\342\204\242", 3)); + assert_se(!utf8_is_printable("\341\204", 2)); ++ assert_se(utf8_is_printable("ąę", 4)); + } + + static void test_utf8_is_valid(void) { +-- +1.8.4.652.g0d6e0ce + diff --git a/0024-shared-util-fix-off-by-one-error-in-tag_to_udev_node.patch b/0024-shared-util-fix-off-by-one-error-in-tag_to_udev_node.patch new file mode 100644 index 0000000..191e85b --- /dev/null +++ b/0024-shared-util-fix-off-by-one-error-in-tag_to_udev_node.patch @@ -0,0 +1,50 @@ +From c3d2db4dd65bf5127cbddec2edd931399ce5ebce Mon Sep 17 00:00:00 2001 +From: Dave Reisner +Date: Sun, 6 Oct 2013 18:26:23 -0400 +Subject: [PATCH] shared/util: fix off-by-one error in tag_to_udev_node + +Triggered false negatives when encoding a string which needed every +character to be escaped, e.g. "LABEL=/". +--- + src/shared/util.c | 2 +- + src/test/test-device-nodes.c | 4 +++- + 2 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 9be6acf..748f1bb 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -3527,7 +3527,7 @@ static char *tag_to_udev_node(const char *tagvalue, const char *by) { + if (u == NULL) + return NULL; + +- enc_len = strlen(u) * 4; ++ enc_len = strlen(u) * 4 + 1; + t = new(char, enc_len); + if (t == NULL) + return NULL; +diff --git a/src/test/test-device-nodes.c b/src/test/test-device-nodes.c +index 2f3dedb..59ba4be 100644 +--- a/src/test/test-device-nodes.c ++++ b/src/test/test-device-nodes.c +@@ -26,7 +26,7 @@ + + /* helpers for test_encode_devnode_name */ + static char *do_encode_string(const char *in) { +- size_t out_len = strlen(in) * 4; ++ size_t out_len = strlen(in) * 4 + 1; + char *out = malloc(out_len); + + assert_se(out); +@@ -46,6 +46,8 @@ static void test_encode_devnode_name(void) { + assert_se(expect_encoded_as("pinkiepie", "pinkiepie")); + assert_se(expect_encoded_as("valíd\\ųtf8", "valíd\\x5cųtf8")); + assert_se(expect_encoded_as("s/ash/ng", "s\\x2fash\\x2fng")); ++ assert_se(expect_encoded_as("/", "\\x2f")); ++ assert_se(expect_encoded_as("!", "\\x21")); + } + + int main(int argc, char *argv[]) { +-- +1.8.4.652.g0d6e0ce + diff --git a/0025-systemd-serialize-deserialize-forbid_restart-value.patch b/0025-systemd-serialize-deserialize-forbid_restart-value.patch new file mode 100644 index 0000000..4507f7a --- /dev/null +++ b/0025-systemd-serialize-deserialize-forbid_restart-value.patch @@ -0,0 +1,51 @@ +From adb4105cf7f0018d05696f96a1058041037c9243 Mon Sep 17 00:00:00 2001 +From: Sylvia Else +Date: Sun, 6 Oct 2013 23:06:35 -0400 +Subject: [PATCH] systemd: serialize/deserialize forbid_restart value + +The Service type's forbid_restart field was not preserved by +serialization/deserialization, so the fact that the service should not +be restarted after stopping was lost. + +If a systemctl stop foo command has been given, but the foo service +has not yet stopped, and then the systemctl --system daemon-reload was +given, then when the foo service eventually stopped, systemd would +restart it. + +https://bugs.freedesktop.org/show_bug.cgi?id=69800 +--- + src/core/service.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/src/core/service.c b/src/core/service.c +index 6792024..98b1599 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2651,6 +2651,9 @@ static int service_serialize(Unit *u, FILE *f, FDSet *fds) { + if (s->exec_context.var_tmp_dir) + unit_serialize_item(u, f, "var-tmp-dir", s->exec_context.var_tmp_dir); + ++ if (s->forbid_restart) ++ unit_serialize_item(u, f, "forbid_restart", yes_no(s->forbid_restart)); ++ + return 0; + } + +@@ -2787,6 +2790,14 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value, + return log_oom(); + + s->exec_context.var_tmp_dir = t; ++ } else if (streq(key, "forbid_restart")) { ++ int b; ++ ++ b = parse_boolean(value); ++ if (b < 0) ++ log_debug_unit(u->id, "Failed to parse forbid_restart value %s", value); ++ else ++ s->forbid_restart = b; + } else + log_debug_unit(u->id, "Unknown serialization key '%s'", key); + +-- +1.8.4.652.g0d6e0ce + diff --git a/0026-core-unify-the-way-we-denote-serialization-attribute.patch b/0026-core-unify-the-way-we-denote-serialization-attribute.patch new file mode 100644 index 0000000..b02a9f1 --- /dev/null +++ b/0026-core-unify-the-way-we-denote-serialization-attribute.patch @@ -0,0 +1,40 @@ +From 7d1f35a5838363c2d1981fc62f5bbcb43cbdc57c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 9 Oct 2013 00:13:55 +0200 +Subject: [PATCH] core: unify the way we denote serialization attributes + +--- + src/core/service.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/core/service.c b/src/core/service.c +index 98b1599..96ed2d3 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2652,7 +2652,7 @@ static int service_serialize(Unit *u, FILE *f, FDSet *fds) { + unit_serialize_item(u, f, "var-tmp-dir", s->exec_context.var_tmp_dir); + + if (s->forbid_restart) +- unit_serialize_item(u, f, "forbid_restart", yes_no(s->forbid_restart)); ++ unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart)); + + return 0; + } +@@ -2790,12 +2790,12 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value, + return log_oom(); + + s->exec_context.var_tmp_dir = t; +- } else if (streq(key, "forbid_restart")) { ++ } else if (streq(key, "forbid-restart")) { + int b; + + b = parse_boolean(value); + if (b < 0) +- log_debug_unit(u->id, "Failed to parse forbid_restart value %s", value); ++ log_debug_unit(u->id, "Failed to parse forbid-restart value %s", value); + else + s->forbid_restart = b; + } else +-- +1.8.4.652.g0d6e0ce + diff --git a/0027-journald-fix-minor-memory-leak.patch b/0027-journald-fix-minor-memory-leak.patch new file mode 100644 index 0000000..260e634 --- /dev/null +++ b/0027-journald-fix-minor-memory-leak.patch @@ -0,0 +1,25 @@ +From 85f4505eab750835fdfe022012bf7d33123bc940 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 9 Oct 2013 04:03:45 +0200 +Subject: [PATCH] journald: fix minor memory leak + +--- + src/journal/journal-vacuum.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/journal/journal-vacuum.c b/src/journal/journal-vacuum.c +index c73ad8f..8d5effb 100644 +--- a/src/journal/journal-vacuum.c ++++ b/src/journal/journal-vacuum.c +@@ -278,6 +278,8 @@ int journal_directory_vacuum( + } else if (errno != ENOENT) + log_warning("Failed to delete %s/%s: %m", directory, p); + ++ free(p); ++ + continue; + } + +-- +1.8.4.652.g0d6e0ce + diff --git a/0028-keymap-Fix-Samsung-900X-34-C.patch b/0028-keymap-Fix-Samsung-900X-34-C.patch new file mode 100644 index 0000000..433aabb --- /dev/null +++ b/0028-keymap-Fix-Samsung-900X-34-C.patch @@ -0,0 +1,42 @@ +From 6381c0c4adc2d637ad53dd81cfeb73d7b4a2cbcb Mon Sep 17 00:00:00 2001 +From: Martin Pitt +Date: Wed, 9 Oct 2013 16:05:15 +0200 +Subject: [PATCH] keymap: Fix Samsung 900X[34]C + +It appears that it's not really the 900 vs. 940 or the X3 vs X4, but the +A/B/C/D suffix after that which makes the difference between the keymaps. On a +NP900X3C-A04RU you get + + MODALIAS=dmi:bvn*:bvr*:bd*:svnSAMSUNGELECTRONICSCO.,LTD.:pn900X3C/900X3D/900X4C/900X4D:* + +So change the matches to use AB vs. CDG as the differentiator. + +Thanks to Anatoly Markov for reporting and testing! +--- + hwdb/60-keyboard.hwdb | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb +index 20d398f..b497f92 100644 +--- a/hwdb/60-keyboard.hwdb ++++ b/hwdb/60-keyboard.hwdb +@@ -904,6 +904,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*550P*:pvr* + KEYBOARD_KEY_a9=! # Fn Lock - Function lock off + + keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr* ++keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34][CDG]*:pvr* + keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*940X3G*:pvr* + KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings + KEYBOARD_KEY_a0=!mute # Fn+F6 mute +@@ -915,7 +916,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*940X3G*:pvr* + + # Series 9 + keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*90X3A*:pvr* +-keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34]*:pvr* ++keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34][AB]*:pvr* + KEYBOARD_KEY_ce=! # Fn+F8 keyboard backlight up + KEYBOARD_KEY_8d=! # Fn+F7 keyboard backlight down + KEYBOARD_KEY_96=! # Fn+F1 performance mode (?) +-- +1.8.4.652.g0d6e0ce + diff --git a/0029-do-not-accept-garbage-from-acpi-firmware-performance.patch b/0029-do-not-accept-garbage-from-acpi-firmware-performance.patch new file mode 100644 index 0000000..3b64bd3 --- /dev/null +++ b/0029-do-not-accept-garbage-from-acpi-firmware-performance.patch @@ -0,0 +1,33 @@ +From 44d7510b31f3e9331a2c6b5518438697404655c6 Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Thu, 10 Oct 2013 01:38:11 +0200 +Subject: [PATCH] do not accept "garbage" from acpi firmware performance data + (FPDT) + +00000000 46 42 50 54 38 00 00 00 02 00 30 02 00 00 00 00 |FBPT8.....0.....| +00000010 23 45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |#E..............| +00000020 f5 6a 51 00 00 00 00 00 00 00 00 00 00 00 00 00 |.jQ.............| +00000030 00 00 00 00 00 00 00 00 70 74 61 6c 58 00 00 00 |........ptalX...| +--- + src/shared/acpi-fpdt.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/shared/acpi-fpdt.c b/src/shared/acpi-fpdt.c +index af58c7c..75648b4 100644 +--- a/src/shared/acpi-fpdt.c ++++ b/src/shared/acpi-fpdt.c +@@ -146,6 +146,11 @@ int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit) { + if (brec.type != ACPI_FPDT_BOOT_REC) + return -EINVAL; + ++ if (brec.startup_start == 0 || brec.exit_services_exit < brec.startup_start) ++ return -EINVAL; ++ if (brec.exit_services_exit > NSEC_PER_HOUR) ++ return -EINVAL; ++ + if (loader_start) + *loader_start = brec.startup_start / 1000; + if (loader_exit) +-- +1.8.4.652.g0d6e0ce + diff --git a/0030-journald-remove-rotated-file-from-hashmap-when-rotat.patch b/0030-journald-remove-rotated-file-from-hashmap-when-rotat.patch new file mode 100644 index 0000000..53f5ade --- /dev/null +++ b/0030-journald-remove-rotated-file-from-hashmap-when-rotat.patch @@ -0,0 +1,39 @@ +From c9cceff90794d452b16a5dd8d1c53cdb44f4a002 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 9 Oct 2013 22:13:13 -0400 +Subject: [PATCH] journald: remove rotated file from hashmap when rotation + fails + +Before, when the user journal file was rotated, journal_file_rotate +could close the old file and fail to open the new file. In that +case, we would leave the old (deallocated) file in the hashmap. +On subsequent accesses, we could retrieve this stale entry, leading +to a segfault. + +When journal_file_rotate fails with the file pointer set to 0, +old file is certainly gone, and cannot be used anymore. + +https://bugzilla.redhat.com/show_bug.cgi?id=890463 +--- + src/journal/journald-server.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c +index 4f47eb1..e03e413 100644 +--- a/src/journal/journald-server.c ++++ b/src/journal/journald-server.c +@@ -321,8 +321,10 @@ void server_rotate(Server *s) { + if (r < 0) + if (f) + log_error("Failed to rotate %s: %s", f->path, strerror(-r)); +- else ++ else { + log_error("Failed to create user journal: %s", strerror(-r)); ++ hashmap_remove(s->user_journals, k); ++ } + else { + hashmap_replace(s->user_journals, k, f); + server_fix_perms(s, f, PTR_TO_UINT32(k)); +-- +1.8.4.652.g0d6e0ce + diff --git a/0031-login-fix-invalid-free-in-sd_session_get_vt.patch b/0031-login-fix-invalid-free-in-sd_session_get_vt.patch new file mode 100644 index 0000000..cdb2aa0 --- /dev/null +++ b/0031-login-fix-invalid-free-in-sd_session_get_vt.patch @@ -0,0 +1,27 @@ +From a72c398b5af558d231decbbf12c7990dbd38c682 Mon Sep 17 00:00:00 2001 +From: David Herrmann +Date: Thu, 10 Oct 2013 13:09:37 +0200 +Subject: [PATCH] login: fix invalid free() in sd_session_get_vt() + +We need to clear variables markes as _cleanup_free_. Otherwise, our +error-paths might corrupt random memory. +--- + src/login/sd-login.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/login/sd-login.c b/src/login/sd-login.c +index 71d8c29..6c27dfe 100644 +--- a/src/login/sd-login.c ++++ b/src/login/sd-login.c +@@ -350,7 +350,7 @@ _public_ int sd_session_get_tty(const char *session, char **tty) { + } + + _public_ int sd_session_get_vt(const char *session, unsigned *vtnr) { +- _cleanup_free_ char *vtnr_string; ++ _cleanup_free_ char *vtnr_string = NULL; + unsigned u; + int r; + +-- +1.8.4.652.g0d6e0ce + diff --git a/0032-login-make-sd_session_get_vt-actually-work.patch b/0032-login-make-sd_session_get_vt-actually-work.patch new file mode 100644 index 0000000..c2a4317 --- /dev/null +++ b/0032-login-make-sd_session_get_vt-actually-work.patch @@ -0,0 +1,27 @@ +From 88a16dc6bd64267e4a0fbe58f2e8d273c096f1e5 Mon Sep 17 00:00:00 2001 +From: David Herrmann +Date: Thu, 10 Oct 2013 13:11:27 +0200 +Subject: [PATCH] login: make sd_session_get_vt() actually work + +We use VTNR, not VTNr as key. Until now sd_session_get_vt() just returns +an error. +--- + src/login/sd-login.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/login/sd-login.c b/src/login/sd-login.c +index 6c27dfe..7e25041 100644 +--- a/src/login/sd-login.c ++++ b/src/login/sd-login.c +@@ -354,7 +354,7 @@ _public_ int sd_session_get_vt(const char *session, unsigned *vtnr) { + unsigned u; + int r; + +- r = session_get_string(session, "VTNr", &vtnr_string); ++ r = session_get_string(session, "VTNR", &vtnr_string); + if (r < 0) + return r; + +-- +1.8.4.652.g0d6e0ce + diff --git a/0033-udevadm.xml-document-resolve-names-option-for-test.patch b/0033-udevadm.xml-document-resolve-names-option-for-test.patch new file mode 100644 index 0000000..97c7b9a --- /dev/null +++ b/0033-udevadm.xml-document-resolve-names-option-for-test.patch @@ -0,0 +1,34 @@ +From 2ef8bf3f6b44d2860b149ad09cf8aea3a4f1bd42 Mon Sep 17 00:00:00 2001 +From: Dave Reisner +Date: Sun, 13 Oct 2013 17:42:51 -0400 +Subject: [PATCH] udevadm.xml: document --resolve-names option for test + +And remove documentation of the --subsystem flag which doesn't actually +exist. +--- + man/udevadm.xml | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/man/udevadm.xml b/man/udevadm.xml +index d0b257d..b959216 100644 +--- a/man/udevadm.xml ++++ b/man/udevadm.xml +@@ -462,9 +462,13 @@ + + + +- ++ + +- The subsystem string. ++ Specify when udevadm should resolve names of users and groups. ++ When set to early (the default) names will be resolved when the ++ rules are parsed. When set to late names will be resolved for ++ every event. When set to never names will never be resolved and ++ all devices will be owned by root. + + + +-- +1.8.4.652.g0d6e0ce + diff --git a/0034-Never-call-qsort-on-potentially-NULL-arrays.patch b/0034-Never-call-qsort-on-potentially-NULL-arrays.patch new file mode 100644 index 0000000..a12a54a --- /dev/null +++ b/0034-Never-call-qsort-on-potentially-NULL-arrays.patch @@ -0,0 +1,385 @@ +From 88bef035149080be5a83f90d91d5b13cec9749e8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 11 Oct 2013 19:33:13 -0400 +Subject: [PATCH] Never call qsort on potentially NULL arrays + +This extends 62678ded 'efi: never call qsort on potentially +NULL arrays' to all other places where qsort is used and it +is not obvious that the count is non-zero. +--- + src/analyze/systemd-analyze.c | 2 +- + src/cgtop/cgtop.c | 2 +- + src/core/namespace.c | 38 ++++++++++++++++++++------------------ + src/journal/catalog.c | 2 +- + src/journal/journal-file.c | 2 +- + src/journal/journal-vacuum.c | 3 +-- + src/journal/journalctl.c | 2 +- + src/libsystemd-bus/bus-match.c | 2 +- + src/libudev/libudev-enumerate.c | 2 +- + src/nss-myhostname/netlink.c | 3 ++- + src/readahead/readahead-collect.c | 39 ++++++++++++++++++++++----------------- + src/shared/cgroup-show.c | 2 ++ + src/shared/conf-files.c | 2 +- + src/shared/efivars.c | 3 +-- + src/shared/fileio.c | 1 + + src/shared/util.h | 12 ++++++++++++ + src/systemctl/systemctl.c | 10 +++++----- + 17 files changed, 74 insertions(+), 53 deletions(-) + +diff --git a/src/analyze/systemd-analyze.c b/src/analyze/systemd-analyze.c +index 27d063c..a4f15eb 100644 +--- a/src/analyze/systemd-analyze.c ++++ b/src/analyze/systemd-analyze.c +@@ -768,7 +768,7 @@ static int list_dependencies_one(DBusConnection *bus, const char *name, unsigned + if (r < 0) + return r; + +- qsort(deps, strv_length(deps), sizeof (char*), list_dependencies_compare); ++ qsort_safe(deps, strv_length(deps), sizeof (char*), list_dependencies_compare); + + r = acquire_boot_times(bus, &boot); + if (r < 0) +diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c +index cacf705..293a211 100644 +--- a/src/cgtop/cgtop.c ++++ b/src/cgtop/cgtop.c +@@ -461,7 +461,7 @@ static int display(Hashmap *a) { + if (g->n_tasks_valid || g->cpu_valid || g->memory_valid || g->io_valid) + array[n++] = g; + +- qsort(array, n, sizeof(Group*), group_compare); ++ qsort_safe(array, n, sizeof(Group*), group_compare); + + /* Find the longest names in one run */ + for (j = 0; j < n; j++) { +diff --git a/src/core/namespace.c b/src/core/namespace.c +index 16b132b..936f368 100644 +--- a/src/core/namespace.c ++++ b/src/core/namespace.c +@@ -222,7 +222,7 @@ int setup_namespace(char** read_write_dirs, + strv_length(read_only_dirs) + + strv_length(inaccessible_dirs) + + (private_tmp ? 2 : 0); +- BindMount *m, *mounts; ++ BindMount *m, *mounts = NULL; + int r = 0; + + if (!mount_flags) +@@ -231,27 +231,29 @@ int setup_namespace(char** read_write_dirs, + if (unshare(CLONE_NEWNS) < 0) + return -errno; + +- m = mounts = (BindMount *) alloca(n * sizeof(BindMount)); +- if ((r = append_mounts(&m, read_write_dirs, READWRITE)) < 0 || +- (r = append_mounts(&m, read_only_dirs, READONLY)) < 0 || +- (r = append_mounts(&m, inaccessible_dirs, INACCESSIBLE)) < 0) +- return r; ++ if (n) { ++ m = mounts = (BindMount *) alloca(n * sizeof(BindMount)); ++ if ((r = append_mounts(&m, read_write_dirs, READWRITE)) < 0 || ++ (r = append_mounts(&m, read_only_dirs, READONLY)) < 0 || ++ (r = append_mounts(&m, inaccessible_dirs, INACCESSIBLE)) < 0) ++ return r; ++ ++ if (private_tmp) { ++ m->path = "/tmp"; ++ m->mode = PRIVATE_TMP; ++ m++; ++ ++ m->path = "/var/tmp"; ++ m->mode = PRIVATE_VAR_TMP; ++ m++; ++ } + +- if (private_tmp) { +- m->path = "/tmp"; +- m->mode = PRIVATE_TMP; +- m++; ++ assert(mounts + n == m); + +- m->path = "/var/tmp"; +- m->mode = PRIVATE_VAR_TMP; +- m++; ++ qsort(mounts, n, sizeof(BindMount), mount_path_compare); ++ drop_duplicates(mounts, &n); + } + +- assert(mounts + n == m); +- +- qsort(mounts, n, sizeof(BindMount), mount_path_compare); +- drop_duplicates(mounts, &n); +- + /* Remount / as SLAVE so that nothing now mounted in the namespace + shows up in the parent */ + if (mount(NULL, "/", NULL, MS_SLAVE|MS_REC, NULL) < 0) +diff --git a/src/journal/catalog.c b/src/journal/catalog.c +index 7738d24..90ca008 100644 +--- a/src/journal/catalog.c ++++ b/src/journal/catalog.c +@@ -399,7 +399,7 @@ int catalog_update(const char* database, const char* root, const char* const* di + } + + assert(n == hashmap_size(h)); +- qsort(items, n, sizeof(CatalogItem), catalog_compare_func); ++ qsort_safe(items, n, sizeof(CatalogItem), catalog_compare_func); + + r = write_catalog(database, h, sb, items, n); + if (r < 0) +diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c +index 81c344f..425e38a 100644 +--- a/src/journal/journal-file.c ++++ b/src/journal/journal-file.c +@@ -1344,7 +1344,7 @@ int journal_file_append_entry(JournalFile *f, const dual_timestamp *ts, const st + + /* Order by the position on disk, in order to improve seek + * times for rotating media. */ +- qsort(items, n_iovec, sizeof(EntryItem), entry_item_cmp); ++ qsort_safe(items, n_iovec, sizeof(EntryItem), entry_item_cmp); + + r = journal_file_append_entry_internal(f, ts, xor_hash, items, n_iovec, seqnum, ret, offset); + +diff --git a/src/journal/journal-vacuum.c b/src/journal/journal-vacuum.c +index 8d5effb..d4a1c6c 100644 +--- a/src/journal/journal-vacuum.c ++++ b/src/journal/journal-vacuum.c +@@ -299,8 +299,7 @@ int journal_directory_vacuum( + n_list ++; + } + +- if (n_list > 0) +- qsort(list, n_list, sizeof(struct vacuum_info), vacuum_compare); ++ qsort_safe(list, n_list, sizeof(struct vacuum_info), vacuum_compare); + + for (i = 0; i < n_list; i++) { + struct statvfs ss; +diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c +index 9a2d255..0876ee6 100644 +--- a/src/journal/journalctl.c ++++ b/src/journal/journalctl.c +@@ -755,7 +755,7 @@ static int get_relative_boot_id(sd_journal *j, sd_id128_t *boot_id, int relative + sd_journal_flush_matches(j); + } + +- qsort(all_ids, count, sizeof(boot_id_t), boot_id_cmp); ++ qsort_safe(all_ids, count, sizeof(boot_id_t), boot_id_cmp); + + if (sd_id128_equal(*boot_id, SD_ID128_NULL)) { + if (relative > (int) count || relative <= -(int)count) +diff --git a/src/libsystemd-bus/bus-match.c b/src/libsystemd-bus/bus-match.c +index 1411167..916682a 100644 +--- a/src/libsystemd-bus/bus-match.c ++++ b/src/libsystemd-bus/bus-match.c +@@ -768,7 +768,7 @@ int bus_match_parse( + } + + /* Order the whole thing, so that we always generate the same tree */ +- qsort(components, n_components, sizeof(struct bus_match_component), match_component_compare); ++ qsort_safe(components, n_components, sizeof(struct bus_match_component), match_component_compare); + + /* Check for duplicates */ + for (i = 0; i+1 < n_components; i++) +diff --git a/src/libudev/libudev-enumerate.c b/src/libudev/libudev-enumerate.c +index 8146f27..e71d766 100644 +--- a/src/libudev/libudev-enumerate.c ++++ b/src/libudev/libudev-enumerate.c +@@ -276,7 +276,7 @@ _public_ struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enume + size_t move_later_prefix = 0; + + udev_list_cleanup(&udev_enumerate->devices_list); +- qsort(udev_enumerate->devices, udev_enumerate->devices_cur, sizeof(struct syspath), syspath_cmp); ++ qsort_safe(udev_enumerate->devices, udev_enumerate->devices_cur, sizeof(struct syspath), syspath_cmp); + + max = udev_enumerate->devices_cur; + for (i = 0; i < max; i++) { +diff --git a/src/nss-myhostname/netlink.c b/src/nss-myhostname/netlink.c +index b1ef912..47a41f5 100644 +--- a/src/nss-myhostname/netlink.c ++++ b/src/nss-myhostname/netlink.c +@@ -197,7 +197,8 @@ finish: + return r; + } + +- qsort(list, n_list, sizeof(struct address), address_compare); ++ if (n_list) ++ qsort(list, n_list, sizeof(struct address), address_compare); + + *_list = list; + *_n_list = n_list; +diff --git a/src/readahead/readahead-collect.c b/src/readahead/readahead-collect.c +index 32888ad..6b74866 100644 +--- a/src/readahead/readahead-collect.c ++++ b/src/readahead/readahead-collect.c +@@ -536,8 +536,7 @@ done: + HASHMAP_FOREACH_KEY(q, p, files, i) + pack_file(pack, p, on_btrfs); + } else { +- struct item *ordered, *j; +- unsigned k, n; ++ unsigned n; + + /* On rotating media, order things by the block + * numbers */ +@@ -545,25 +544,31 @@ done: + log_debug("Ordering..."); + + n = hashmap_size(files); +- if (!(ordered = new(struct item, n))) { +- r = log_oom(); +- goto finish; +- } +- +- j = ordered; +- HASHMAP_FOREACH_KEY(q, p, files, i) { +- memcpy(j, q, sizeof(struct item)); +- j++; +- } ++ if (n) { ++ _cleanup_free_ struct item *ordered; ++ struct item *j; ++ unsigned k; ++ ++ ordered = new(struct item, n); ++ if (!ordered) { ++ r = log_oom(); ++ goto finish; ++ } + +- assert(ordered + n == j); ++ j = ordered; ++ HASHMAP_FOREACH_KEY(q, p, files, i) { ++ memcpy(j, q, sizeof(struct item)); ++ j++; ++ } + +- qsort(ordered, n, sizeof(struct item), qsort_compare); ++ assert(ordered + n == j); + +- for (k = 0; k < n; k++) +- pack_file(pack, ordered[k].path, on_btrfs); ++ qsort(ordered, n, sizeof(struct item), qsort_compare); + +- free(ordered); ++ for (k = 0; k < n; k++) ++ pack_file(pack, ordered[k].path, on_btrfs); ++ } else ++ log_warning("No pack files"); + } + + log_debug("Finalizing..."); +diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c +index e971f36..cc44ab4 100644 +--- a/src/shared/cgroup-show.c ++++ b/src/shared/cgroup-show.c +@@ -44,6 +44,8 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi + unsigned i, m, pid_width; + pid_t biggest = 0; + ++ assert(n_pids > 0); ++ + /* Filter duplicates */ + m = 0; + for (i = 0; i < n_pids; i++) { +diff --git a/src/shared/conf-files.c b/src/shared/conf-files.c +index 6d99739..ed4070c 100644 +--- a/src/shared/conf-files.c ++++ b/src/shared/conf-files.c +@@ -127,7 +127,7 @@ static int conf_files_list_strv_internal(char ***strv, const char *suffix, const + return -ENOMEM; + } + +- qsort(files, hashmap_size(fh), sizeof(char *), base_cmp); ++ qsort_safe(files, hashmap_size(fh), sizeof(char *), base_cmp); + *strv = files; + + hashmap_free(fh); +diff --git a/src/shared/efivars.c b/src/shared/efivars.c +index c015b16..f3eb6a6 100644 +--- a/src/shared/efivars.c ++++ b/src/shared/efivars.c +@@ -384,8 +384,7 @@ int efi_get_boot_options(uint16_t **options) { + list[count ++] = id; + } + +- if (list) +- qsort(list, count, sizeof(uint16_t), cmp_uint16); ++ qsort_safe(list, count, sizeof(uint16_t), cmp_uint16); + + *options = list; + return count; +diff --git a/src/shared/fileio.c b/src/shared/fileio.c +index 603a1c7..733b320 100644 +--- a/src/shared/fileio.c ++++ b/src/shared/fileio.c +@@ -662,6 +662,7 @@ int get_status_field(const char *filename, const char *pattern, char **field) { + int r; + + assert(filename); ++ assert(pattern); + assert(field); + + r = read_full_file(filename, &status, NULL); +diff --git a/src/shared/util.h b/src/shared/util.h +index 1b845b3..222abe0 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -764,3 +764,15 @@ bool id128_is_valid(const char *s) _pure_; + void parse_user_at_host(char *arg, char **user, char **host); + + int split_pair(const char *s, const char *sep, char **l, char **r); ++ ++/** ++ * Normal qsort requires base to be nonnull. Here were require ++ * that only if nmemb > 0. ++ */ ++static inline void qsort_safe(void *base, size_t nmemb, size_t size, ++ int (*compar)(const void *, const void *)) { ++ if (nmemb) { ++ assert(base); ++ qsort(base, nmemb, size, compar); ++ } ++} +diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c +index d75281f..036828b 100644 +--- a/src/systemctl/systemctl.c ++++ b/src/systemctl/systemctl.c +@@ -471,7 +471,7 @@ static int list_units(DBusConnection *bus, char **args) { + if (r < 0) + return r; + +- qsort(unit_infos, c, sizeof(struct unit_info), compare_unit_info); ++ qsort_safe(unit_infos, c, sizeof(struct unit_info), compare_unit_info); + + output_units_list(unit_infos, c); + +@@ -733,8 +733,8 @@ static int list_sockets(DBusConnection *bus, char **args) { + listen = triggered = NULL; /* avoid cleanup */ + } + +- qsort(socket_infos, cs, sizeof(struct socket_info), +- (__compar_fn_t) socket_info_compare); ++ qsort_safe(socket_infos, cs, sizeof(struct socket_info), ++ (__compar_fn_t) socket_info_compare); + + output_sockets_list(socket_infos, cs); + +@@ -1108,7 +1108,7 @@ static int list_dependencies_one(DBusConnection *bus, const char *name, int leve + if (r < 0) + return r; + +- qsort(deps, strv_length(deps), sizeof (char*), list_dependencies_compare); ++ qsort_safe(deps, strv_length(deps), sizeof (char*), list_dependencies_compare); + + STRV_FOREACH(c, deps) { + if (strv_contains(u, *c)) { +@@ -3532,7 +3532,7 @@ static int show_all(const char* verb, + if (r < 0) + return r; + +- qsort(unit_infos, c, sizeof(struct unit_info), compare_unit_info); ++ qsort_safe(unit_infos, c, sizeof(struct unit_info), compare_unit_info); + + for (u = unit_infos; u < unit_infos + c; u++) { + _cleanup_free_ char *p = NULL; +-- +1.8.4.652.g0d6e0ce + diff --git a/0035-dbus-common-avoid-leak-in-error-path.patch b/0035-dbus-common-avoid-leak-in-error-path.patch new file mode 100644 index 0000000..b7a76a5 --- /dev/null +++ b/0035-dbus-common-avoid-leak-in-error-path.patch @@ -0,0 +1,71 @@ +From 65f2e8e1f7a86e62630fd36e34609dc7fc09b474 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 11 Oct 2013 19:33:20 -0400 +Subject: [PATCH] dbus-common: avoid leak in error path + +src/shared/dbus-common.c:968:33: warning: Potential leak of memory pointed to by 'l' + return -EINVAL; + ^~~~~~ +--- + src/shared/dbus-common.c | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +diff --git a/src/shared/dbus-common.c b/src/shared/dbus-common.c +index c727cae..3ba2d87 100644 +--- a/src/shared/dbus-common.c ++++ b/src/shared/dbus-common.c +@@ -934,7 +934,7 @@ int bus_parse_strv_iter(DBusMessageIter *iter, char ***_l) { + int bus_parse_strv_pairs_iter(DBusMessageIter *iter, char ***_l) { + DBusMessageIter sub, sub2; + unsigned n = 0, i = 0; +- char **l; ++ _cleanup_strv_free_ char **l = NULL; + + assert(iter); + assert(_l); +@@ -953,6 +953,7 @@ int bus_parse_strv_pairs_iter(DBusMessageIter *iter, char ***_l) { + l = new(char*, n*2+1); + if (!l) + return -ENOMEM; ++ l[0] = NULL; /* make sure that l is properly terminated at all times */ + + dbus_message_iter_recurse(iter, &sub); + +@@ -968,26 +969,25 @@ int bus_parse_strv_pairs_iter(DBusMessageIter *iter, char ***_l) { + return -EINVAL; + + l[i] = strdup(a); +- if (!l[i]) { +- strv_free(l); ++ if (!l[i]) + return -ENOMEM; +- } ++ i++; + +- l[++i] = strdup(b); +- if (!l[i]) { +- strv_free(l); ++ l[i] = strdup(b); ++ if (!l[i]) + return -ENOMEM; +- } +- + i++; ++ + dbus_message_iter_next(&sub); + } + + assert(i == n*2); + l[i] = NULL; + +- if (_l) ++ if (_l) { + *_l = l; ++ l = NULL; /* avoid freeing */ ++ } + + return 0; + } +-- +1.8.4.652.g0d6e0ce + diff --git a/0036-drop-ins-check-return-value.patch b/0036-drop-ins-check-return-value.patch new file mode 100644 index 0000000..793697b --- /dev/null +++ b/0036-drop-ins-check-return-value.patch @@ -0,0 +1,29 @@ +From 187ff3e80b8d6b447e584708d88a1858e154a348 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 11 Oct 2013 19:33:36 -0400 +Subject: [PATCH] drop-ins: check return value + +If the function failed, nothing serious would happen +because unlink would probably return EFAULT, but this +would obscure the real error and is a bit sloppy. +--- + src/core/unit.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/core/unit.c b/src/core/unit.c +index 4b97710..1db7d06 100644 +--- a/src/core/unit.c ++++ b/src/core/unit.c +@@ -2908,6 +2908,9 @@ int unit_remove_drop_in(Unit *u, UnitSetPropertiesMode mode, const char *name) { + return 0; + + r = drop_in_file(u, mode, name, &p, &q); ++ if (r < 0) ++ return r; ++ + if (unlink(q) < 0) + r = errno == ENOENT ? 0 : -errno; + else +-- +1.8.4.652.g0d6e0ce + diff --git a/0037-Make-sure-that-we-don-t-dereference-NULL.patch b/0037-Make-sure-that-we-don-t-dereference-NULL.patch new file mode 100644 index 0000000..a5950e4 --- /dev/null +++ b/0037-Make-sure-that-we-don-t-dereference-NULL.patch @@ -0,0 +1,30 @@ +From bb653097a1e0c5c2228cafda144814c42cd05da2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 12 Oct 2013 13:43:07 -0400 +Subject: [PATCH] Make sure that we don't dereference NULL + +The code was actually safe, because b should +never be null, because if rvalue is empty, a different +branch is taken. But we *do* check for NULL in the +loop above, so it's better to also check here for symmetry. +--- + src/core/load-fragment.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c +index 44920d6..f01843d 100644 +--- a/src/core/load-fragment.c ++++ b/src/core/load-fragment.c +@@ -1860,7 +1860,8 @@ int config_parse_documentation(const char *unit, + free(*a); + } + } +- *b = NULL; ++ if (b) ++ *b = NULL; + + return r; + } +-- +1.8.4.652.g0d6e0ce + diff --git a/0038-gitignore-ignore-clang-analyze-output.patch b/0038-gitignore-ignore-clang-analyze-output.patch new file mode 100644 index 0000000..d1a9be3 --- /dev/null +++ b/0038-gitignore-ignore-clang-analyze-output.patch @@ -0,0 +1,24 @@ +From 8d2f7d0ecc3b949f7f15934f3adb73e812866c59 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 12 Oct 2013 19:50:54 -0400 +Subject: [PATCH] gitignore: ignore clang --analyze output + +--- + .gitignore | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/.gitignore b/.gitignore +index 5b38c0b..56e10a6 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -162,6 +162,7 @@ + *.la + *.lo + *.o ++*.plist + *.stamp + *.pyc + __pycache__/ +-- +1.8.4.652.g0d6e0ce + diff --git a/0039-man-add-more-markup-to-udevadm-8.patch b/0039-man-add-more-markup-to-udevadm-8.patch new file mode 100644 index 0000000..cd2b562 --- /dev/null +++ b/0039-man-add-more-markup-to-udevadm-8.patch @@ -0,0 +1,97 @@ +From 83a4e0160b3756222b0c8e8d220c5cc07cc76a40 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 13 Oct 2013 19:43:19 -0400 +Subject: [PATCH] man: add more markup to udevadm(8) + +--- + man/udevadm.xml | 49 +++++++++++++++++++++++++++++++++---------------- + 1 file changed, 33 insertions(+), 16 deletions(-) + +diff --git a/man/udevadm.xml b/man/udevadm.xml +index b959216..a1ffe42 100644 +--- a/man/udevadm.xml ++++ b/man/udevadm.xml +@@ -61,9 +61,10 @@ + + + Description +- udevadm expects a command and command specific options. It +- controls the runtime behavior of udev, requests kernel events, +- manages the event queue, and provides simple debugging mechanisms. ++ udevadm expects a command and command ++ specific options. It controls the runtime behavior of ++ systemd-udevd, requests kernel events, manages ++ the event queue, and provides simple debugging mechanisms. + + + OPTIONS +@@ -97,23 +98,37 @@ + + + +- Query the database for specified type of device data. It needs the +- or to identify the specified +- device. Valid queries are: +- name, symlink, path, +- property, all. ++ Query the database for specified type of device ++ data. It needs the or ++ to identify the specified ++ device. Valid queries are: name, ++ symlink, path, ++ property, ++ all. + + + + + +- The devpath of the device to query. ++ The /sys path of the device to ++ query, e.g. ++ /sys/class/block/sda. ++ Note that this option usually isn't very useful, since ++ udev can guess the type of the ++ argument, so udevadm ++ --devpath=/class/block/sda is equivalent to ++ udevadm /sys/class/block/sda. + + + + + +- The name of the device node or a symlink to query ++ The name of the device node or a symlink to query, ++ e.g. /dev/sda. ++ Note that this option usually isn't very useful, since ++ udev can guess the type of the ++ argument, so udevadm --name=sda is ++ equivalent to udevadm /dev/sda. + + + +@@ -462,13 +477,15 @@ + + + +- ++ + +- Specify when udevadm should resolve names of users and groups. +- When set to early (the default) names will be resolved when the +- rules are parsed. When set to late names will be resolved for +- every event. When set to never names will never be resolved and +- all devices will be owned by root. ++ Specify when udevadm should resolve names of users ++ and groups. When set to early (the ++ default) names will be resolved when the rules are ++ parsed. When set to late names will ++ be resolved for every event. When set to ++ never names will never be resolved ++ and all devices will be owned by root. + + + +-- +1.8.4.652.g0d6e0ce + diff --git a/0040-shared-util-Fix-glob_extend-argument.patch b/0040-shared-util-Fix-glob_extend-argument.patch new file mode 100644 index 0000000..2d30a95 --- /dev/null +++ b/0040-shared-util-Fix-glob_extend-argument.patch @@ -0,0 +1,28 @@ +From 4d2a7145666c91f0ba63dd5c6937b15339b42b0c Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Mon, 14 Oct 2013 08:15:51 +0200 +Subject: [PATCH] shared/util: Fix glob_extend() argument + +glob_extend() would completely fail to work, or return incorrect +data if it wasn't being passed the current getopt "optarg" variable +as it used the global variable, instead of the passed parameters. +--- + src/shared/util.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 748f1bb..6c88040 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -4391,7 +4391,7 @@ int glob_extend(char ***strv, const char *path) { + char **p; + + errno = 0; +- k = glob(optarg, GLOB_NOSORT|GLOB_BRACE, NULL, &g); ++ k = glob(path, GLOB_NOSORT|GLOB_BRACE, NULL, &g); + + if (k == GLOB_NOMATCH) + return -ENOENT; +-- +1.8.4.652.g0d6e0ce + diff --git a/0041-Fix-bad-assert-in-show_pid_array.patch b/0041-Fix-bad-assert-in-show_pid_array.patch new file mode 100644 index 0000000..a1a4398 --- /dev/null +++ b/0041-Fix-bad-assert-in-show_pid_array.patch @@ -0,0 +1,38 @@ +From ce626319c273383a8f8d1a7d9f549f4d487699ea Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 14 Oct 2013 19:15:24 -0400 +Subject: [PATCH] Fix bad assert in show_pid_array + +This function should get the same treatment as other qsort uses +did in 7ff7394 "Never call qsort on potentially NULL arrays". + +Reported-by: Oleksii Shevchuk +--- + src/shared/cgroup-show.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c +index cc44ab4..aa0f017 100644 +--- a/src/shared/cgroup-show.c ++++ b/src/shared/cgroup-show.c +@@ -44,8 +44,6 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi + unsigned i, m, pid_width; + pid_t biggest = 0; + +- assert(n_pids > 0); +- + /* Filter duplicates */ + m = 0; + for (i = 0; i < n_pids; i++) { +@@ -65,7 +63,7 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi + pid_width = DECIMAL_STR_WIDTH(biggest); + + /* And sort */ +- qsort(pids, n_pids, sizeof(pid_t), compare); ++ qsort_safe(pids, n_pids, sizeof(pid_t), compare); + + if(flags & OUTPUT_FULL_WIDTH) + n_columns = 0; +-- +1.8.4.652.g0d6e0ce + diff --git a/0042-build-sys-libudev-get-rid-of-the-needless-selinux-li.patch b/0042-build-sys-libudev-get-rid-of-the-needless-selinux-li.patch new file mode 100644 index 0000000..eb44130 --- /dev/null +++ b/0042-build-sys-libudev-get-rid-of-the-needless-selinux-li.patch @@ -0,0 +1,70 @@ +From 90144377494d06804b55b915e1321a2e85a957fe Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Tue, 15 Oct 2013 02:11:56 +0200 +Subject: [PATCH] build-sys: libudev - get rid of the needless selinux linking + (again) + +--- + Makefile.am | 6 +----- + src/libudev/libudev.pc.in | 1 - + 2 files changed, 1 insertion(+), 6 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 8d9c587..94d3358 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -2141,9 +2141,7 @@ libudev_la_LDFLAGS = \ + + libudev_la_LIBADD = \ + libsystemd-shared.la \ +- libsystemd-label.la \ + libsystemd-daemon-internal.la \ +- $(RT_LIBS) \ + libsystemd-id128-internal.la + + pkgconfiglib_DATA += \ +@@ -2315,7 +2313,6 @@ libudev_core_la_LIBADD = \ + libudev-private.la \ + libsystemd-label.la \ + libsystemd-daemon-internal.la \ +- $(RT_LIBS) \ + libsystemd-shared.la \ + $(BLKID_LIBS) \ + $(KMOD_LIBS) +@@ -2377,6 +2374,7 @@ udevadm_SOURCES = \ + + udevadm_LDADD = \ + libudev-core.la \ ++ libsystemd-label.la \ + libsystemd-shared.la + + # Update hwdb on installation. Do not bother if installing +@@ -2704,7 +2702,6 @@ libsystemd_id128_la_LDFLAGS = \ + + libsystemd_id128_la_LIBADD = \ + libsystemd-shared.la \ +- libsystemd-label.la \ + libsystemd-daemon-internal.la \ + $(RT_LIBS) + +@@ -2956,7 +2953,6 @@ libsystemd_journal_internal_la_CFLAGS = \ + $(AM_CFLAGS) + + libsystemd_journal_internal_la_LIBADD = \ +- libsystemd-label.la \ + libsystemd-audit.la \ + libsystemd-daemon.la \ + libudev.la \ +diff --git a/src/libudev/libudev.pc.in b/src/libudev/libudev.pc.in +index 2b183e9..a0f3f52 100644 +--- a/src/libudev/libudev.pc.in ++++ b/src/libudev/libudev.pc.in +@@ -14,5 +14,4 @@ Name: libudev + Description: Library to access udev device information + Version: @VERSION@ + Libs: -L${libdir} -ludev +-Libs.private: -lrt + Cflags: -I${includedir} +-- +1.8.4.652.g0d6e0ce + diff --git a/0043-build-sys-libsystemd-id128-get-rid-of-the-needless-s.patch b/0043-build-sys-libsystemd-id128-get-rid-of-the-needless-s.patch new file mode 100644 index 0000000..9f44f31 --- /dev/null +++ b/0043-build-sys-libsystemd-id128-get-rid-of-the-needless-s.patch @@ -0,0 +1,43 @@ +From c028fc20a15e274f1bfa0febbc21d5ac5ea84be4 Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Tue, 15 Oct 2013 02:26:37 +0200 +Subject: [PATCH] build-sys: libsystemd-id128 - get rid of the needless selinux + linking (again) + +$ ldd libsystemd-id128.so + linux-vdso.so.1 => (0x00007fffce377000) + libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f4de1fc1000) + librt.so.1 => /lib64/librt.so.1 (0x00007f4de1db9000) + libdl.so.2 => /lib64/libdl.so.2 (0x00007f4de1bb4000) + libc.so.6 => /lib64/libc.so.6 (0x00007f4de17f5000) + /lib64/ld-linux-x86-64.so.2 (0x00007f4de2406000) + libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f4de158f000) + libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4de1371000) + +$ ldd libsystemd-id128.so + linux-vdso.so.1 => (0x00007fff25187000) + libdl.so.2 => /lib64/libdl.so.2 (0x00007f41a3964000) + libc.so.6 => /lib64/libc.so.6 (0x00007f41a35a5000) + /lib64/ld-linux-x86-64.so.2 (0x00007f41a3d89000) +--- + Makefile.am | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 94d3358..5382547 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -2701,9 +2701,7 @@ libsystemd_id128_la_LDFLAGS = \ + -Wl,--version-script=$(top_srcdir)/src/libsystemd-id128/libsystemd-id128.sym + + libsystemd_id128_la_LIBADD = \ +- libsystemd-shared.la \ +- libsystemd-daemon-internal.la \ +- $(RT_LIBS) ++ libsystemd-shared.la + + libsystemd_id128_internal_la_SOURCES = \ + $(libsystemd_id128_la_SOURCES) +-- +1.8.4.652.g0d6e0ce + diff --git a/0044-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch b/0044-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch new file mode 100644 index 0000000..1d9cf23 --- /dev/null +++ b/0044-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch @@ -0,0 +1,34 @@ +From 7bd470024862982a74c3850686c99ccb29989fae Mon Sep 17 00:00:00 2001 +From: Igor Zhbanov +Date: Tue, 15 Oct 2013 14:35:13 +0400 +Subject: [PATCH] Fix for SIGSEGV in systemd-bootchart on short-living + processes + +The function svg_ps_bars() dereferencess NULL pointer in the line + endtime = ps->last->sampledata->sampletime; +because of partially initialized ps_struct (ps->last == NULL). + +If some process terminates between scaning /proc directory in the log_sample() +function and reading additional information from /proc/PID/... files, +the files couldn't be read, the loop will be continued and partially +initialized structure returned. +--- + src/bootchart/store.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/bootchart/store.c b/src/bootchart/store.c +index f8c97c2..7f86cfe 100644 +--- a/src/bootchart/store.c ++++ b/src/bootchart/store.c +@@ -275,7 +275,7 @@ schedstat_next: + pscount++; + + /* mark our first sample */ +- ps->first = ps->sample; ++ ps->first = ps->last = ps->sample; + ps->sample->runtime = atoll(rt); + ps->sample->waittime = atoll(wt); + +-- +1.8.4.652.g0d6e0ce + diff --git a/0045-man-document-the-b-special-boot-option.patch b/0045-man-document-the-b-special-boot-option.patch new file mode 100644 index 0000000..a57abda --- /dev/null +++ b/0045-man-document-the-b-special-boot-option.patch @@ -0,0 +1,37 @@ +From e31ed70d82d55fd8ed17fee4efe010575ed2ab2e Mon Sep 17 00:00:00 2001 +From: Jan Engelhardt +Date: Tue, 15 Oct 2013 08:58:50 +0200 +Subject: [PATCH] man: document the -b special boot option + +--- + man/kernel-command-line.xml | 1 + + man/systemd.xml | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/man/kernel-command-line.xml b/man/kernel-command-line.xml +index cc267a3..abe68e5 100644 +--- a/man/kernel-command-line.xml ++++ b/man/kernel-command-line.xml +@@ -123,6 +123,7 @@ + + + ++ -b + emergency + single + s +diff --git a/man/systemd.xml b/man/systemd.xml +index fe6e331..85c06d3 100644 +--- a/man/systemd.xml ++++ b/man/systemd.xml +@@ -1149,6 +1149,7 @@ + + + ++ -b + emergency + + Boot into emergency +-- +1.8.4.652.g0d6e0ce + diff --git a/0046-logind-allow-unprivileged-session-device-access.patch b/0046-logind-allow-unprivileged-session-device-access.patch new file mode 100644 index 0000000..5e55117 --- /dev/null +++ b/0046-logind-allow-unprivileged-session-device-access.patch @@ -0,0 +1,49 @@ +From 8345f2e25909cc24628d99eee6674e8ab7ebdb20 Mon Sep 17 00:00:00 2001 +From: David Herrmann +Date: Tue, 15 Oct 2013 21:13:39 +0200 +Subject: [PATCH] logind: allow unprivileged session-device access + +The session-device/control API was introduced for unprivileged device +access from within a session. Add the required dbus policy to the default +logind policies. + +Note: logind validates that only root and the user of a session can +use the API. Furthermore, only a single API user gets access at a time. +--- + src/login/org.freedesktop.login1.conf | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +diff --git a/src/login/org.freedesktop.login1.conf b/src/login/org.freedesktop.login1.conf +index 0407609..04e735e 100644 +--- a/src/login/org.freedesktop.login1.conf ++++ b/src/login/org.freedesktop.login1.conf +@@ -148,6 +148,26 @@ + send_interface="org.freedesktop.login1.Session" + send_member="SetIdleHint"/> + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +-- +1.8.4.652.g0d6e0ce + diff --git a/0047-rules-expose-loop-block-devices-to-systemd.patch b/0047-rules-expose-loop-block-devices-to-systemd.patch new file mode 100644 index 0000000..98f1f5c --- /dev/null +++ b/0047-rules-expose-loop-block-devices-to-systemd.patch @@ -0,0 +1,35 @@ +From 0316e2ae1224abc57cffe8ec54326b4b55b0372e Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 16 Oct 2013 02:49:54 +0200 +Subject: [PATCH] rules: expose loop block devices to systemd + +Since the kernel no longer exposes a large number of "dead" loop devices +it is OK to expose them now in systemd, so let's do that. This has the +benefit that mount dependencies on loop devices start to work. +--- + rules/99-systemd.rules.in | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in +index bbb7d0c..3c99475 100644 +--- a/rules/99-systemd.rules.in ++++ b/rules/99-systemd.rules.in +@@ -11,12 +11,12 @@ SUBSYSTEM=="tty", KERNEL=="tty[a-zA-Z]*|hvc*|xvc*|hvsi*", TAG+="systemd" + + KERNEL=="vport*", TAG+="systemd" + +-SUBSYSTEM=="block", KERNEL!="ram*|loop*", TAG+="systemd" +-SUBSYSTEM=="block", KERNEL!="ram*|loop*", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", ENV{SYSTEMD_READY}="0" ++SUBSYSTEM=="block", KERNEL!="ram*", TAG+="systemd" ++SUBSYSTEM=="block", KERNEL!="ram*", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", ENV{SYSTEMD_READY}="0" + + # Ignore encrypted devices with no identified superblock on it, since + # we are probably still calling mke2fs or mkswap on it. +-SUBSYSTEM=="block", KERNEL!="ram*|loop*", ENV{DM_UUID}=="CRYPT-*", ENV{ID_PART_TABLE_TYPE}=="", ENV{ID_FS_USAGE}=="", ENV{SYSTEMD_READY}="0" ++SUBSYSTEM=="block", KERNEL!="ram*", ENV{DM_UUID}=="CRYPT-*", ENV{ID_PART_TABLE_TYPE}=="", ENV{ID_FS_USAGE}=="", ENV{SYSTEMD_READY}="0" + + # Ignore raid devices that are not yet assembled and started + SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="md*", TEST!="md/array_state", ENV{SYSTEMD_READY}="0" +-- +1.8.4.652.g0d6e0ce + diff --git a/0048-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch b/0048-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch new file mode 100644 index 0000000..31f2ff4 --- /dev/null +++ b/0048-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch @@ -0,0 +1,38 @@ +From 6e921d55d1a568bc8d6bf59907e673f7f56b9751 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 16 Oct 2013 02:51:24 +0200 +Subject: [PATCH] rules: don't limit some of the rules to the "add" action + +Devices should show up in systemd regardless whether the user invoked +"udevadm trigger" or not. Before this change some devices might have +suddenly disappeared due issuing that command. + +Conflicts: + rules/99-systemd.rules.in +--- + rules/99-systemd.rules.in | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in +index 3c99475..307f18f 100644 +--- a/rules/99-systemd.rules.in ++++ b/rules/99-systemd.rules.in +@@ -53,12 +53,12 @@ ACTION=="add", SUBSYSTEM=="net", KERNEL!="lo", RUN+="@rootlibexecdir@/systemd-sy + + # Pull in backlight save/restore for all firmware backlight devices + +-ACTION=="add", SUBSYSTEM=="backlight", ATTR{type}=="firmware", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service" ++SUBSYSTEM=="backlight", ATTR{type}=="firmware", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service" + + # Asynchronously mount file systems implemented by these modules as + # soon as they are loaded. + +-SUBSYSTEM=="module", KERNEL=="fuse", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-fs-fuse-connections.mount" +-SUBSYSTEM=="module", KERNEL=="configfs", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-kernel-config.mount" ++SUBSYSTEM=="module", KERNEL=="fuse", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-fs-fuse-connections.mount" ++SUBSYSTEM=="module", KERNEL=="configfs", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-kernel-config.mount" + + LABEL="systemd_end" +-- +1.8.4.652.g0d6e0ce + diff --git a/0049-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch b/0049-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch new file mode 100644 index 0000000..5268809 --- /dev/null +++ b/0049-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch @@ -0,0 +1,37 @@ +From 41d174a74c7c7ebcc5b00fe92ef4647f47551e96 Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Thu, 17 Oct 2013 03:20:46 +0200 +Subject: [PATCH] tmpfiles: log unaccessible FUSE mount points only as debug + message + +--- + src/tmpfiles/tmpfiles.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index 8122d6a..239e56b 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -275,12 +275,15 @@ static int dir_cleanup( + continue; + + if (fstatat(dirfd(d), dent->d_name, &s, AT_SYMLINK_NOFOLLOW) < 0) { ++ if (errno == ENOENT) ++ continue; + +- if (errno != ENOENT) { ++ /* FUSE, NFS mounts, SELinux might return EACCES */ ++ if (errno == EACCES) ++ log_debug("stat(%s/%s) failed: %m", p, dent->d_name); ++ else + log_error("stat(%s/%s) failed: %m", p, dent->d_name); +- r = -errno; +- } +- ++ r = -errno; + continue; + } + +-- +1.8.4.652.g0d6e0ce + diff --git a/0050-hwdb-update.patch b/0050-hwdb-update.patch new file mode 100644 index 0000000..6f17c34 --- /dev/null +++ b/0050-hwdb-update.patch @@ -0,0 +1,1632 @@ +From a697938328b686626abe0b8ac1878954a4705672 Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Sun, 20 Oct 2013 01:12:29 +0200 +Subject: [PATCH] hwdb: update + +--- + hwdb/20-OUI.hwdb | 391 +++++++++++++++++++++++++++++++++++++++++- + hwdb/20-pci-vendor-model.hwdb | 216 ++++++++++++++++++++--- + 2 files changed, 578 insertions(+), 29 deletions(-) + +diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb +index e913b28..5067167 100644 +--- a/hwdb/20-OUI.hwdb ++++ b/hwdb/20-OUI.hwdb +@@ -12278,7 +12278,7 @@ OUI:40D85501B* + ID_OUI_FROM_DATABASE=Audio Enhancement + + OUI:40D85501C* +- ID_OUI_FROM_DATABASE=BERG ++ ID_OUI_FROM_DATABASE=BERG Cloud Limited + + OUI:40D85501D* + ID_OUI_FROM_DATABASE=Scharco Elektronik GmbH +@@ -13324,6 +13324,93 @@ OUI:40D85517B* + OUI:40D85517C* + ID_OUI_FROM_DATABASE=Critical Link + ++OUI:40D85517D* ++ ID_OUI_FROM_DATABASE=Kiwigrid GmbH ++ ++OUI:40D85517E* ++ ID_OUI_FROM_DATABASE=TOKHATEC ++ ++OUI:40D85517F* ++ ID_OUI_FROM_DATABASE=Telvent ++ ++OUI:40D855180* ++ ID_OUI_FROM_DATABASE=BroadSoft Inc ++ ++OUI:40D855181* ++ ID_OUI_FROM_DATABASE=eROCCA ++ ++OUI:40D855182* ++ ID_OUI_FROM_DATABASE=Georg Neumann GmbH ++ ++OUI:40D855183* ++ ID_OUI_FROM_DATABASE=EMAC, Inc. ++ ++OUI:40D855184* ++ ID_OUI_FROM_DATABASE=Satkirit Ltd ++ ++OUI:40D855185* ++ ID_OUI_FROM_DATABASE=Standard Change Makers ++ ++OUI:40D855186* ++ ID_OUI_FROM_DATABASE=KST technology ++ ++OUI:40D855187* ++ ID_OUI_FROM_DATABASE=CDEX Corp. ++ ++OUI:40D855188* ++ ID_OUI_FROM_DATABASE=Array Corporation ++ ++OUI:40D855189* ++ ID_OUI_FROM_DATABASE=Yoozma Corporation ++ ++OUI:40D85518A* ++ ID_OUI_FROM_DATABASE=Aplex Technology Inc. ++ ++OUI:40D85518B* ++ ID_OUI_FROM_DATABASE=Diagnosys Test Systems Ltd ++ ++OUI:40D85518C* ++ ID_OUI_FROM_DATABASE=EOS S.r.l. ++ ++OUI:40D85518D* ++ ID_OUI_FROM_DATABASE=Zoe Medical ++ ++OUI:40D85518E* ++ ID_OUI_FROM_DATABASE=Kerun Visual Technology Co., Ltd.(Shenzhen) ++ ++OUI:40D85518F* ++ ID_OUI_FROM_DATABASE=Beat Sensing co. , ltd. ++ ++OUI:40D855190* ++ ID_OUI_FROM_DATABASE=Spider Tecnologia Ind. e Com Ltda ++ ++OUI:40D855191* ++ ID_OUI_FROM_DATABASE=Soukai Electric ++ ++OUI:40D855192* ++ ID_OUI_FROM_DATABASE=GENERAL DYNAMICS C4 SYSTEMS ++ ++OUI:40D855193* ++ ID_OUI_FROM_DATABASE=FORZA SILICON CORP. ++ ++OUI:40D855194* ++ ID_OUI_FROM_DATABASE=RF Code ++ ++OUI:40D855195* ++ ID_OUI_FROM_DATABASE=TONNA ELECTRONIQUE ++ ++OUI:40D855196* ++ ID_OUI_FROM_DATABASE=Advanced Micro Controls Inc. ++ ++OUI:40D855197* ++ ID_OUI_FROM_DATABASE=Berg Cloud Limited ++ ++OUI:40D855198* ++ ID_OUI_FROM_DATABASE=devboards GmbH ++ ++OUI:40D855199* ++ ID_OUI_FROM_DATABASE=PRESSOL Schmiergeraete GmbH ++ + OUI:000000* + ID_OUI_FROM_DATABASE=XEROX CORPORATION + +@@ -46883,7 +46970,7 @@ OUI:0080B7* + ID_OUI_FROM_DATABASE=STELLAR COMPUTER + + OUI:0080B8* +- ID_OUI_FROM_DATABASE=BUG, INCORPORATED ++ ID_OUI_FROM_DATABASE=B.U.G. MORISEIKI, INCORPORATED + + OUI:0080B9* + ID_OUI_FROM_DATABASE=ARCHE TECHNOLIGIES INC. +@@ -51589,6 +51676,9 @@ OUI:04F7E4* + OUI:04F8C2* + ID_OUI_FROM_DATABASE=Flaircomm Microelectronics, Inc. + ++OUI:04F938* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:04FE31* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -52132,6 +52222,9 @@ OUI:08512E* + OUI:085240* + ID_OUI_FROM_DATABASE=EbV Elektronikbau- und Vertriebs GmbH + ++OUI:085AE0* ++ ID_OUI_FROM_DATABASE=Recovision Technology Co., Ltd. ++ + OUI:085B0E* + ID_OUI_FROM_DATABASE=Fortinet, Inc. + +@@ -52297,6 +52390,9 @@ OUI:08FC52* + OUI:08FC88* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:08FD0E* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:0C0400* + ID_OUI_FROM_DATABASE=Jantar d.o.o. + +@@ -52306,6 +52402,9 @@ OUI:0C0535* + OUI:0C1105* + ID_OUI_FROM_DATABASE=Ringslink (Xiamen) Network Communication Technologies Co., Ltd + ++OUI:0C1262* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:0C130B* + ID_OUI_FROM_DATABASE=Uniqoteq Ltd. + +@@ -52366,6 +52465,9 @@ OUI:0C4DE9* + OUI:0C51F7* + ID_OUI_FROM_DATABASE=CHAUVIN ARNOUX + ++OUI:0C54A5* ++ ID_OUI_FROM_DATABASE=PEGATRON CORPORATION ++ + OUI:0C5521* + ID_OUI_FROM_DATABASE=Axiros GmbH + +@@ -52627,6 +52729,9 @@ OUI:100D7F* + OUI:100E2B* + ID_OUI_FROM_DATABASE=NEC CASIO Mobile Communications + ++OUI:100E7E* ++ ID_OUI_FROM_DATABASE=Juniper networks ++ + OUI:1010B6* + ID_OUI_FROM_DATABASE=McCain Inc + +@@ -53023,6 +53128,9 @@ OUI:149090* + OUI:149448* + ID_OUI_FROM_DATABASE=BLU CASTLE S.A. + ++OUI:1499E2* ++ ID_OUI_FROM_DATABASE=Apple, Inc ++ + OUI:149FE8* + ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd. + +@@ -53095,6 +53203,9 @@ OUI:14EE9D* + OUI:14F0C5* + ID_OUI_FROM_DATABASE=Xtremio Ltd. + ++OUI:14F28E* ++ ID_OUI_FROM_DATABASE=ShenYang ZhongKe-Allwin Technology Co.LTD ++ + OUI:14F42A* + ID_OUI_FROM_DATABASE=Samsung Electronics + +@@ -53257,6 +53368,9 @@ OUI:1867B0* + OUI:186D99* + ID_OUI_FROM_DATABASE=Adanis Inc. + ++OUI:1879A2* ++ ID_OUI_FROM_DATABASE=GMJ ELECTRIC LIMITED ++ + OUI:187A93* + ID_OUI_FROM_DATABASE=AMICCOM Electronics Corporation + +@@ -53440,6 +53554,9 @@ OUI:1C19DE* + OUI:1C1D67* + ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd + ++OUI:1C1D86* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:1C334D* + ID_OUI_FROM_DATABASE=ITS Telecom + +@@ -53803,6 +53920,9 @@ OUI:20858C* + OUI:208984* + ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD + ++OUI:208986* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:20918A* + ID_OUI_FROM_DATABASE=PROFALUX + +@@ -53929,6 +54049,9 @@ OUI:20FEDB* + OUI:2401C7* + ID_OUI_FROM_DATABASE=Cisco + ++OUI:24050F* ++ ID_OUI_FROM_DATABASE=MTN Electronic Co. Ltd ++ + OUI:240917* + ID_OUI_FROM_DATABASE=Devlin Electronics Limited + +@@ -54034,6 +54157,9 @@ OUI:249442* + OUI:249504* + ID_OUI_FROM_DATABASE=SFR + ++OUI:24A2E1* ++ ID_OUI_FROM_DATABASE=Apple, Inc ++ + OUI:24A42C* + ID_OUI_FROM_DATABASE=KOUKAAM a.s. + +@@ -54043,6 +54169,9 @@ OUI:24A43C* + OUI:24A495* + ID_OUI_FROM_DATABASE=Thales Canada Inc. + ++OUI:24A87D* ++ ID_OUI_FROM_DATABASE=Panasonic Automotive Systems Asia Pacific(Thailand)Co.,Ltd. ++ + OUI:24A937* + ID_OUI_FROM_DATABASE=PURE Storage + +@@ -54121,6 +54250,9 @@ OUI:24DBAC* + OUI:24DBAD* + ID_OUI_FROM_DATABASE=ShopperTrak RCT Corporation + ++OUI:24DBED* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:24DEC6* + ID_OUI_FROM_DATABASE=Aruba Networks + +@@ -54130,6 +54262,9 @@ OUI:24E271* + OUI:24E6BA* + ID_OUI_FROM_DATABASE=JSC Zavod im. Kozitsky + ++OUI:24E9B3* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:24EA40* + ID_OUI_FROM_DATABASE=Systeme Helmholz GmbH + +@@ -54547,6 +54682,9 @@ OUI:2C553C* + OUI:2C59E5* + ID_OUI_FROM_DATABASE=Hewlett Packard + ++OUI:2C5A05* ++ ID_OUI_FROM_DATABASE=Nokia Corporation ++ + OUI:2C5AA3* + ID_OUI_FROM_DATABASE=PROMATE ELECTRONIC CO.LTD + +@@ -54940,6 +55078,9 @@ OUI:3407FB* + OUI:340804* + ID_OUI_FROM_DATABASE=D-Link Corporation + ++OUI:3413A8* ++ ID_OUI_FROM_DATABASE=Mediplan Limited ++ + OUI:3413E8* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -55321,6 +55462,9 @@ OUI:386E21* + OUI:3872C0* + ID_OUI_FROM_DATABASE=COMTREND + ++OUI:387B47* ++ ID_OUI_FROM_DATABASE=AKELA, Inc. ++ + OUI:388345* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO., LTD. + +@@ -55390,6 +55534,9 @@ OUI:38C7BA* + OUI:38C85C* + ID_OUI_FROM_DATABASE=Cisco SPVTG + ++OUI:38C9A9* ++ ID_OUI_FROM_DATABASE=SMART High Reliability Solutions, Inc. ++ + OUI:38CA97* + ID_OUI_FROM_DATABASE=Contour Design LLC + +@@ -55459,6 +55606,9 @@ OUI:3C081E* + OUI:3C096D* + ID_OUI_FROM_DATABASE=Powerhouse Dynamics + ++OUI:3C0E23* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:3C0FC1* + ID_OUI_FROM_DATABASE=KBC Networks + +@@ -55507,6 +55657,9 @@ OUI:3C300C* + OUI:3C363D* + ID_OUI_FROM_DATABASE=Nokia Corporation + ++OUI:3C36E4* ++ ID_OUI_FROM_DATABASE=Arris Group, Inc. ++ + OUI:3C3888* + ID_OUI_FROM_DATABASE=ConnectQuest, llc + +@@ -55672,6 +55825,9 @@ OUI:3CD0F8* + OUI:3CD16E* + ID_OUI_FROM_DATABASE=Telepower Communication Co., Ltd + ++OUI:3CD4D6* ++ ID_OUI_FROM_DATABASE=WirelessWERX, Inc ++ + OUI:3CD7DA* + ID_OUI_FROM_DATABASE=SK Mtek microelectronics(shenzhen)limited + +@@ -55771,6 +55927,9 @@ OUI:402CF4* + OUI:403004* + ID_OUI_FROM_DATABASE=Apple + ++OUI:403067* ++ ID_OUI_FROM_DATABASE=Conlog (Pty) Ltd ++ + OUI:40336C* + ID_OUI_FROM_DATABASE=Godrej & Boyce Mfg. co. ltd + +@@ -55918,6 +56077,9 @@ OUI:40B3FC* + OUI:40B4F0* + ID_OUI_FROM_DATABASE=Juniper Networks + ++OUI:40B6B1* ++ ID_OUI_FROM_DATABASE=SUNGSAM CO,.Ltd ++ + OUI:40B7F3* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + +@@ -55972,6 +56134,9 @@ OUI:40ECF8* + OUI:40EF4C* + ID_OUI_FROM_DATABASE=Fihonest communication co.,Ltd + ++OUI:40F02F* ++ ID_OUI_FROM_DATABASE=Liteon Technology Corporation ++ + OUI:40F14C* + ID_OUI_FROM_DATABASE=ISE Europe SPRL + +@@ -56203,6 +56368,12 @@ OUI:44C233* + OUI:44C39B* + ID_OUI_FROM_DATABASE=OOO RUBEZH NPO + ++OUI:44C4A9* ++ ID_OUI_FROM_DATABASE=Opticom Communication, LLC ++ ++OUI:44C56F* ++ ID_OUI_FROM_DATABASE=NGN Easy Satfinder (Tianjin) Electronic Co., Ltd ++ + OUI:44C9A2* + ID_OUI_FROM_DATABASE=Greenwald Industries + +@@ -56362,6 +56533,9 @@ OUI:48B253* + OUI:48B8DE* + ID_OUI_FROM_DATABASE=HOMEWINS TECHNOLOGY CO.,LTD. + ++OUI:48B977* ++ ID_OUI_FROM_DATABASE=PulseOn Oy ++ + OUI:48B9C2* + ID_OUI_FROM_DATABASE=Teletics Inc. + +@@ -56659,9 +56833,15 @@ OUI:4CCC34* + OUI:4CD637* + ID_OUI_FROM_DATABASE=Qsono Electronics Co., Ltd + ++OUI:4CD9C4* ++ ID_OUI_FROM_DATABASE=Magneti Marelli Automotive Electronics (Guangzhou) Co. Ltd ++ + OUI:4CDF3D* + ID_OUI_FROM_DATABASE=TEAM ENGINEERS ADVANCE TECHNOLOGIES INDIA PVT LTD + ++OUI:4CE1BB* ++ ID_OUI_FROM_DATABASE=Zhuhai HiFocus Technology Co., Ltd. ++ + OUI:4CE676* + ID_OUI_FROM_DATABASE=Buffalo Inc. + +@@ -56701,6 +56881,9 @@ OUI:5011EB* + OUI:5017FF* + ID_OUI_FROM_DATABASE=Cisco + ++OUI:501AC5* ++ ID_OUI_FROM_DATABASE=Microsoft ++ + OUI:50206B* + ID_OUI_FROM_DATABASE=Emerson Climate Technologies Transportation Solutions + +@@ -56812,6 +56995,9 @@ OUI:507D02* + OUI:507E5D* + ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation + ++OUI:508569* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD ++ + OUI:5087B8* + ID_OUI_FROM_DATABASE=Nuvyyo Inc + +@@ -56995,6 +57181,9 @@ OUI:5435DF* + OUI:543968* + ID_OUI_FROM_DATABASE=Edgewater Networks Inc + ++OUI:5439DF* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:543D37* + ID_OUI_FROM_DATABASE=Ruckus Wireless + +@@ -57055,6 +57244,9 @@ OUI:5481AD* + OUI:54847B* + ID_OUI_FROM_DATABASE=Digital Devices GmbH + ++OUI:54880E* ++ ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD. ++ + OUI:548922* + ID_OUI_FROM_DATABASE=Zelfy Inc + +@@ -57439,6 +57631,9 @@ OUI:5C2479* + OUI:5C260A* + ID_OUI_FROM_DATABASE=Dell Inc. + ++OUI:5C2AEF* ++ ID_OUI_FROM_DATABASE=Open Access Pty Ltd ++ + OUI:5C3327* + ID_OUI_FROM_DATABASE=Spazio Italia srl + +@@ -57547,6 +57742,9 @@ OUI:5CA39D* + OUI:5CA3EB* + ID_OUI_FROM_DATABASE=Lokel s.r.o. + ++OUI:5CA48A* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:5CAC4C* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + +@@ -58228,6 +58426,9 @@ OUI:64E161* + OUI:64E599* + ID_OUI_FROM_DATABASE=EFM Networks + ++OUI:64E625* ++ ID_OUI_FROM_DATABASE=Woxu Wireless Co., Ltd ++ + OUI:64E682* + ID_OUI_FROM_DATABASE=Apple + +@@ -58318,6 +58519,9 @@ OUI:683EEC* + OUI:684352* + ID_OUI_FROM_DATABASE=Bhuu Limited + ++OUI:684898* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:684B88* + ID_OUI_FROM_DATABASE=Galtronics Telemetry Inc. + +@@ -58573,6 +58777,9 @@ OUI:6C3A84* + OUI:6C3BE5* + ID_OUI_FROM_DATABASE=Hewlett Packard + ++OUI:6C3C53* ++ ID_OUI_FROM_DATABASE=SoundHawk Corp ++ + OUI:6C3E6D* + ID_OUI_FROM_DATABASE=Apple + +@@ -58912,6 +59119,9 @@ OUI:706582* + OUI:70704C* + ID_OUI_FROM_DATABASE=Purple Communications, Inc + ++OUI:7071B3* ++ ID_OUI_FROM_DATABASE=Brain Corporation ++ + OUI:7071BC* + ID_OUI_FROM_DATABASE=PEGATRON CORPORATION + +@@ -58936,6 +59146,9 @@ OUI:7076F0* + OUI:707BE8* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:707C18* ++ ID_OUI_FROM_DATABASE=ADATA Technology Co., Ltd ++ + OUI:707E43* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + +@@ -59128,6 +59341,9 @@ OUI:74372F* + OUI:743889* + ID_OUI_FROM_DATABASE=ANNAX Anzeigesysteme GmbH + ++OUI:743ECB* ++ ID_OUI_FROM_DATABASE=Gentrice tech ++ + OUI:744401* + ID_OUI_FROM_DATABASE=NETGEAR + +@@ -59533,6 +59749,9 @@ OUI:78A6BD* + OUI:78A714* + ID_OUI_FROM_DATABASE=Amphenol + ++OUI:78A873* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:78AB60* + ID_OUI_FROM_DATABASE=ABB Australia + +@@ -59644,6 +59863,9 @@ OUI:78E8B6* + OUI:78EC22* + ID_OUI_FROM_DATABASE=Shanghai Qihui Telecom Technology Co., LTD + ++OUI:78EC74* ++ ID_OUI_FROM_DATABASE=Kyland-USA ++ + OUI:78EF4C* + ID_OUI_FROM_DATABASE=Unetconvergence Co., Ltd. + +@@ -59749,6 +59971,9 @@ OUI:7C3E9D* + OUI:7C438F* + ID_OUI_FROM_DATABASE=E-Band Communications Corp. + ++OUI:7C444C* ++ ID_OUI_FROM_DATABASE=Entertainment Solutions, S.L. ++ + OUI:7C49B9* + ID_OUI_FROM_DATABASE=Plexus Manufacturing Sdn Bhd + +@@ -59911,6 +60136,9 @@ OUI:7CC8D7* + OUI:7CCB0D* + ID_OUI_FROM_DATABASE=Antaira Technologies, LLC + ++OUI:7CCD11* ++ ID_OUI_FROM_DATABASE=MS-Magnet ++ + OUI:7CCD3C* + ID_OUI_FROM_DATABASE=Guangzhou Juzing Technology Co., Ltd + +@@ -60181,6 +60409,9 @@ OUI:80B95C* + OUI:80BAAC* + ID_OUI_FROM_DATABASE=TeleAdapt Ltd + ++OUI:80BAE6* ++ ID_OUI_FROM_DATABASE=Neets ++ + OUI:80BBEB* + ID_OUI_FROM_DATABASE=Satmap Systems Ltd + +@@ -60373,6 +60604,9 @@ OUI:847E40* + OUI:8482F4* + ID_OUI_FROM_DATABASE=Beijing Huasun Unicreate Technology Co., Ltd + ++OUI:848336* ++ ID_OUI_FROM_DATABASE=Newrun ++ + OUI:848371* + ID_OUI_FROM_DATABASE=Avaya, Inc + +@@ -60475,6 +60709,9 @@ OUI:84F64C* + OUI:84FCFE* + ID_OUI_FROM_DATABASE=Apple + ++OUI:84FE9E* ++ ID_OUI_FROM_DATABASE=RTC Industries, Inc. ++ + OUI:880355* + ID_OUI_FROM_DATABASE=Arcadyan Technology Corp. + +@@ -60634,6 +60871,9 @@ OUI:889821* + OUI:889B39* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:889CA6* ++ ID_OUI_FROM_DATABASE=BTB Korea INC ++ + OUI:889FFA* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + +@@ -60664,6 +60904,9 @@ OUI:88BFD5* + OUI:88C36E* + ID_OUI_FROM_DATABASE=Beijing Ereneben lnformation Technology Limited + ++OUI:88C626* ++ ID_OUI_FROM_DATABASE=Logitech - Ultimate Ears ++ + OUI:88C663* + ID_OUI_FROM_DATABASE=Apple + +@@ -60760,6 +61003,9 @@ OUI:8C2F39* + OUI:8C3330* + ID_OUI_FROM_DATABASE=EmFirst Co., Ltd. + ++OUI:8C3AE3* ++ ID_OUI_FROM_DATABASE=LG Electronics ++ + OUI:8C3C07* + ID_OUI_FROM_DATABASE=Skiva Technologies, Inc. + +@@ -60778,6 +61024,9 @@ OUI:8C4B59* + OUI:8C4CDC* + ID_OUI_FROM_DATABASE=PLANEX COMMUNICATIONS INC. + ++OUI:8C4DB9* ++ ID_OUI_FROM_DATABASE=Unmonday Ltd ++ + OUI:8C4DEA* + ID_OUI_FROM_DATABASE=Cerio Corporation + +@@ -60790,6 +61039,9 @@ OUI:8C53F7* + OUI:8C541D* + ID_OUI_FROM_DATABASE=LGE + ++OUI:8C569D* ++ ID_OUI_FROM_DATABASE=Imaging Solutions Group ++ + OUI:8C56C5* + ID_OUI_FROM_DATABASE=Nintendo Co., Ltd. + +@@ -60943,6 +61195,9 @@ OUI:8CDD8D* + OUI:8CDE52* + ID_OUI_FROM_DATABASE=ISSC Technologies Corp. + ++OUI:8CDE99* ++ ID_OUI_FROM_DATABASE=Comlab Inc. ++ + OUI:8CE081* + ID_OUI_FROM_DATABASE=zte corporation + +@@ -61138,6 +61393,9 @@ OUI:907F61* + OUI:908260* + ID_OUI_FROM_DATABASE=IEEE 1904.1 Working Group + ++OUI:90837A* ++ ID_OUI_FROM_DATABASE=General Electric Water & Process Technologies ++ + OUI:90840D* + ID_OUI_FROM_DATABASE=Apple + +@@ -61204,6 +61462,9 @@ OUI:90B21F* + OUI:90B8D0* + ID_OUI_FROM_DATABASE=Joyent, Inc. + ++OUI:90B931* ++ ID_OUI_FROM_DATABASE=Apple, Inc ++ + OUI:90B97D* + ID_OUI_FROM_DATABASE=Johnson Outdoors Marine Electronics d/b/a Minnkota + +@@ -61543,6 +61804,9 @@ OUI:94F720* + OUI:94FAE8* + ID_OUI_FROM_DATABASE=Shenzhen Eycom Technology Co., Ltd + ++OUI:94FBB2* ++ ID_OUI_FROM_DATABASE=Shenzhen Gongjin Electronics Co.,Ltd ++ + OUI:94FD1D* + ID_OUI_FROM_DATABASE=WhereWhen Corp + +@@ -61747,6 +62011,9 @@ OUI:98D6F7* + OUI:98D88C* + ID_OUI_FROM_DATABASE=Nortel Networks + ++OUI:98DA92* ++ ID_OUI_FROM_DATABASE=Vuzix Corporation ++ + OUI:98DCD9* + ID_OUI_FROM_DATABASE=UNITEC Co., Ltd. + +@@ -61780,6 +62047,9 @@ OUI:98FE03* + OUI:98FE94* + ID_OUI_FROM_DATABASE=Apple + ++OUI:98FF6A* ++ ID_OUI_FROM_DATABASE=OTEC(Shanghai)Technology Co.,Ltd. ++ + OUI:98FFD0* + ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd. + +@@ -61849,6 +62119,9 @@ OUI:9C417C* + OUI:9C443D* + ID_OUI_FROM_DATABASE=CHENGDU XUGUANG TECHNOLOGY CO, LTD + ++OUI:9C44A6* ++ ID_OUI_FROM_DATABASE=SwiftTest, Inc. ++ + OUI:9C4563* + ID_OUI_FROM_DATABASE=DIMEP Sistemas + +@@ -61927,6 +62200,9 @@ OUI:9C7BD2* + OUI:9C807D* + ID_OUI_FROM_DATABASE=SYSCABLE Korea Inc. + ++OUI:9C80DF* ++ ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation ++ + OUI:9C8888* + ID_OUI_FROM_DATABASE=Simac Techniek NV + +@@ -62098,6 +62374,9 @@ OUI:A01917* + OUI:A01C05* + ID_OUI_FROM_DATABASE=NIMAX TELECOM CO.,LTD. + ++OUI:A01D48* ++ ID_OUI_FROM_DATABASE=Hewlett Packard ++ + OUI:A02195* + ID_OUI_FROM_DATABASE=Samsung Electronics Digital Imaging + +@@ -62416,6 +62695,9 @@ OUI:A433D1* + OUI:A438FC* + ID_OUI_FROM_DATABASE=Plastic Logic + ++OUI:A43A69* ++ ID_OUI_FROM_DATABASE=Vers Inc ++ + OUI:A4466B* + ID_OUI_FROM_DATABASE=EOC Technology + +@@ -62461,6 +62743,9 @@ OUI:A46706* + OUI:A46E79* + ID_OUI_FROM_DATABASE=DFT System Co.Ltd + ++OUI:A47733* ++ ID_OUI_FROM_DATABASE=Google ++ + OUI:A47760* + ID_OUI_FROM_DATABASE=Nokia Corporation + +@@ -62911,6 +63196,9 @@ OUI:AC20AA* + OUI:AC220B* + ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC. + ++OUI:AC2DA3* ++ ID_OUI_FROM_DATABASE=TXTR GmbH ++ + OUI:AC2FA8* + ID_OUI_FROM_DATABASE=Humannix Co.,Ltd. + +@@ -62986,6 +63274,9 @@ OUI:AC6123* + OUI:AC6706* + ID_OUI_FROM_DATABASE=Ruckus Wireless + ++OUI:AC6BAC* ++ ID_OUI_FROM_DATABASE=Jenny Science AG ++ + OUI:AC6E1A* + ID_OUI_FROM_DATABASE=Shenzhen Gongjin Electronics Co.,Ltd + +@@ -63085,6 +63376,9 @@ OUI:ACBEB6* + OUI:ACC2EC* + ID_OUI_FROM_DATABASE=CLT INT'L IND. CORP. + ++OUI:ACC595* ++ ID_OUI_FROM_DATABASE=Graphite Systems ++ + OUI:ACC698* + ID_OUI_FROM_DATABASE=Kohzu Precision Co., Ltd. + +@@ -63172,6 +63466,9 @@ OUI:ACF7F3* + OUI:ACF97E* + ID_OUI_FROM_DATABASE=ELESYS INC. + ++OUI:ACFDEC* ++ ID_OUI_FROM_DATABASE=Apple, Inc ++ + OUI:B00594* + ID_OUI_FROM_DATABASE=Liteon Technology Corporation + +@@ -63193,6 +63490,9 @@ OUI:B01B7C* + OUI:B01C91* + ID_OUI_FROM_DATABASE=Elim Co + ++OUI:B024F3* ++ ID_OUI_FROM_DATABASE=Progeny Systems ++ + OUI:B0358D* + ID_OUI_FROM_DATABASE=Nokia Corporation + +@@ -63286,6 +63586,9 @@ OUI:B09134* + OUI:B0973A* + ID_OUI_FROM_DATABASE=E-Fuel Corporation + ++OUI:B0989F* ++ ID_OUI_FROM_DATABASE=LG CNS ++ + OUI:B09928* + ID_OUI_FROM_DATABASE=Fujitsu Limited + +@@ -63313,6 +63616,9 @@ OUI:B0AA36* + OUI:B0ACFA* + ID_OUI_FROM_DATABASE=Fujitsu Limited + ++OUI:B0ADAA* ++ ID_OUI_FROM_DATABASE=Avaya, Inc ++ + OUI:B0B2DC* + ID_OUI_FROM_DATABASE=Zyxel Communications Corporation + +@@ -63364,6 +63670,9 @@ OUI:B0D09C* + OUI:B0D2F5* + ID_OUI_FROM_DATABASE=Vello Systems, Inc. + ++OUI:B0D7C5* ++ ID_OUI_FROM_DATABASE=STP KFT ++ + OUI:B0DF3A* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -63466,6 +63775,9 @@ OUI:B43741* + OUI:B439D6* + ID_OUI_FROM_DATABASE=ProCurve Networking by HP + ++OUI:B43A28* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:B43DB2* + ID_OUI_FROM_DATABASE=Degreane Horizon + +@@ -63784,6 +64096,9 @@ OUI:B8782E* + OUI:B8797E* + ID_OUI_FROM_DATABASE=Secure Meters (UK) Limited + ++OUI:B87AC9* ++ ID_OUI_FROM_DATABASE=Siemens Ltd. ++ + OUI:B8871E* + ID_OUI_FROM_DATABASE=Good Mind Industries Co., Ltd. + +@@ -63823,6 +64138,9 @@ OUI:B8975A* + OUI:B898B0* + ID_OUI_FROM_DATABASE=Atlona Inc. + ++OUI:B898F7* ++ ID_OUI_FROM_DATABASE=Gionee Communication Equipment Co,Ltd.ShenZhen ++ + OUI:B89AED* + ID_OUI_FROM_DATABASE=OceanServer Technology, Inc + +@@ -63985,12 +64303,18 @@ OUI:BC125E* + OUI:BC1401* + ID_OUI_FROM_DATABASE=Hitron Technologies. Inc + ++OUI:BC14EF* ++ ID_OUI_FROM_DATABASE=ITON Technology Limited ++ + OUI:BC15A6* + ID_OUI_FROM_DATABASE=Taiwan Jantek Electronics,Ltd. + + OUI:BC1665* + ID_OUI_FROM_DATABASE=Cisco + ++OUI:BC1A67* ++ ID_OUI_FROM_DATABASE=YF Technology Co., Ltd ++ + OUI:BC20A4* + ID_OUI_FROM_DATABASE=Samsung Electronics + +@@ -64021,6 +64345,9 @@ OUI:BC2D98* + OUI:BC305B* + ID_OUI_FROM_DATABASE=Dell Inc. + ++OUI:BC307D* ++ ID_OUI_FROM_DATABASE=Wistron Neweb Corp. ++ + OUI:BC35E5* + ID_OUI_FROM_DATABASE=Hydro Systems Company + +@@ -64207,6 +64534,9 @@ OUI:BCE59F* + OUI:BCEA2B* + ID_OUI_FROM_DATABASE=CityCom GmbH + ++OUI:BCEE7B* ++ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC. ++ + OUI:BCF2AF* + ID_OUI_FROM_DATABASE=devolo AG + +@@ -64324,6 +64654,9 @@ OUI:C0626B* + OUI:C06394* + ID_OUI_FROM_DATABASE=Apple + ++OUI:C064C6* ++ ID_OUI_FROM_DATABASE=Nokia Corporation ++ + OUI:C06599* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -64462,6 +64795,9 @@ OUI:C0E54E* + OUI:C0EAE4* + ID_OUI_FROM_DATABASE=Sonicwall + ++OUI:C0F1C4* ++ ID_OUI_FROM_DATABASE=Pacidal Corporation Ltd. ++ + OUI:C0F8DA* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + +@@ -64642,6 +64978,9 @@ OUI:C47F51* + OUI:C4823F* + ID_OUI_FROM_DATABASE=Fujian Newland Auto-ID Tech. Co,.Ltd. + ++OUI:C4824E* ++ ID_OUI_FROM_DATABASE=Changzhou Uchip Electronics Co., LTD. ++ + OUI:C48508* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -65005,6 +65344,9 @@ OUI:C8F386* + OUI:C8F406* + ID_OUI_FROM_DATABASE=Avaya, Inc + ++OUI:C8F68D* ++ ID_OUI_FROM_DATABASE=S.E.TECHNOLOGIES LIMITED ++ + OUI:C8F704* + ID_OUI_FROM_DATABASE=Building Block Video + +@@ -65143,6 +65485,9 @@ OUI:CC5D57* + OUI:CC60BB* + ID_OUI_FROM_DATABASE=Empower RF Systems + ++OUI:CC65AD* ++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc. ++ + OUI:CC69B0* + ID_OUI_FROM_DATABASE=Global Traffic Technologies, LLC + +@@ -65533,6 +65878,9 @@ OUI:D0DFB2* + OUI:D0DFC7* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:D0E140* ++ ID_OUI_FROM_DATABASE=Apple, Inc ++ + OUI:D0E347* + ID_OUI_FROM_DATABASE=Yoga + +@@ -65716,6 +66064,9 @@ OUI:D479C3* + OUI:D47B75* + ID_OUI_FROM_DATABASE=HARTING Electronics GmbH + ++OUI:D481CA* ++ ID_OUI_FROM_DATABASE=iDevices, LLC ++ + OUI:D4823E* + ID_OUI_FROM_DATABASE=Argosy Technologies, Ltd. + +@@ -65965,6 +66316,9 @@ OUI:D8543A* + OUI:D857EF* + ID_OUI_FROM_DATABASE=Samsung Electronics + ++OUI:D858D7* ++ ID_OUI_FROM_DATABASE=CZ.NIC, z.s.p.o. ++ + OUI:D85D4C* + ID_OUI_FROM_DATABASE=TP-LINK Technologies Co.,Ltd. + +@@ -66004,6 +66358,9 @@ OUI:D878E5* + OUI:D87988* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd. + ++OUI:D87CDD* ++ ID_OUI_FROM_DATABASE=SANIX INCORPORATED ++ + OUI:D88A3B* + ID_OUI_FROM_DATABASE=UNIT-EM + +@@ -66475,6 +66832,9 @@ OUI:E067B3* + OUI:E06995* + ID_OUI_FROM_DATABASE=PEGATRON CORPORATION + ++OUI:E0750A* ++ ID_OUI_FROM_DATABASE=ALPS ERECTORIC CO.,LTD. ++ + OUI:E0757D* + ID_OUI_FROM_DATABASE=Motorola Mobility LLC + +@@ -66577,6 +66937,9 @@ OUI:E0C6B3* + OUI:E0C79D* + ID_OUI_FROM_DATABASE=Texas Instruments + ++OUI:E0C86A* ++ ID_OUI_FROM_DATABASE=SHENZHEN TW-SCIE Co., Ltd ++ + OUI:E0C922* + ID_OUI_FROM_DATABASE=Jireh Energy Tech., Ltd. + +@@ -66661,6 +67024,9 @@ OUI:E0F9BE* + OUI:E0FAEC* + ID_OUI_FROM_DATABASE=Platan sp. z o.o. sp. k. + ++OUI:E40439* ++ ID_OUI_FROM_DATABASE=TomTom Software Ltd ++ + OUI:E4115B* + ID_OUI_FROM_DATABASE=Hewlett Packard + +@@ -66997,6 +67363,9 @@ OUI:E85E53* + OUI:E8611F* + ID_OUI_FROM_DATABASE=Dawning Information Industry Co.,Ltd + ++OUI:E86183* ++ ID_OUI_FROM_DATABASE=Black Diamond Advanced Technology, LLC ++ + OUI:E86CDA* + ID_OUI_FROM_DATABASE=Supercomputers and Neurocomputers Research Center + +@@ -67435,6 +67804,9 @@ OUI:F02408* + OUI:F02572* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + ++OUI:F025B7* ++ ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD. ++ + OUI:F0264C* + ID_OUI_FROM_DATABASE=Dr. Sigrist AG + +@@ -67486,6 +67858,9 @@ OUI:F05DC8* + OUI:F05F5A* + ID_OUI_FROM_DATABASE=Getriebebau NORD GmbH and Co. KG + ++OUI:F06130* ++ ID_OUI_FROM_DATABASE=Advantage Pharmacy Services, LLC ++ + OUI:F0620D* + ID_OUI_FROM_DATABASE=Shenzhen Egreat Tech Corp.,Ltd + +@@ -67681,6 +68056,9 @@ OUI:F40321* + OUI:F4044C* + ID_OUI_FROM_DATABASE=ValenceTech Limited + ++OUI:F4068D* ++ ID_OUI_FROM_DATABASE=devolo AG ++ + OUI:F40B93* + ID_OUI_FROM_DATABASE=Research In Motion + +@@ -68107,6 +68485,9 @@ OUI:F89FB8* + OUI:F8A03D* + ID_OUI_FROM_DATABASE=Dinstar Technologies Co., Ltd. + ++OUI:F8A2B4* ++ ID_OUI_FROM_DATABASE=RHEWA-WAAGENFABRIK August Freudewald GmbH &Co. KG ++ + OUI:F8A45F* + ID_OUI_FROM_DATABASE=Beijing Xiaomi communications co.,ltd + +@@ -68245,6 +68626,9 @@ OUI:FC0647* + OUI:FC0877* + ID_OUI_FROM_DATABASE=Prentke Romich Company + ++OUI:FC09D8* ++ ID_OUI_FROM_DATABASE=ACTEON Group ++ + OUI:FC0A81* + ID_OUI_FROM_DATABASE=Motorola Solutions Inc. + +@@ -68314,6 +68698,9 @@ OUI:FC455F* + OUI:FC48EF* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:FC4B1C* ++ ID_OUI_FROM_DATABASE=INTERSENSOR S.R.L. ++ + OUI:FC4BBC* + ID_OUI_FROM_DATABASE=Sunplus Technology Co., Ltd. + +diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb +index fdb534d..289f81c 100644 +--- a/hwdb/20-pci-vendor-model.hwdb ++++ b/hwdb/20-pci-vendor-model.hwdb +@@ -4158,7 +4158,7 @@ pci:v00001002d00005F57* + ID_MODEL_FROM_DATABASE=R423 [Radeon X800 XT] + + pci:v00001002d00006600* +- ID_MODEL_FROM_DATABASE=Mars [Radeon HD 8670A/8750M] ++ ID_MODEL_FROM_DATABASE=Mars [Radeon HD 8670A/8670M/8750M] + + pci:v00001002d00006601* + ID_MODEL_FROM_DATABASE=Mars [Radeon HD 8730M] +@@ -4169,6 +4169,12 @@ pci:v00001002d00006602* + pci:v00001002d00006603* + ID_MODEL_FROM_DATABASE=Mars + ++pci:v00001002d00006604* ++ ID_MODEL_FROM_DATABASE=Mars [Radeon R7 M265] ++ ++pci:v00001002d00006605* ++ ID_MODEL_FROM_DATABASE=Mars [Radeon R7 M260] ++ + pci:v00001002d00006606* + ID_MODEL_FROM_DATABASE=Mars XTX [Radeon HD 8790M] + +@@ -4176,13 +4182,13 @@ pci:v00001002d00006607* + ID_MODEL_FROM_DATABASE=Mars LE [Radeon HD 8530M] + + pci:v00001002d00006610* +- ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8600 Series] ++ ID_MODEL_FROM_DATABASE=Oland XT [Radeon HD 8670/R7 250] + + pci:v00001002d00006611* + ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8570] + + pci:v00001002d00006613* +- ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8500 Series] ++ ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240] + + pci:v00001002d00006620* + ID_MODEL_FROM_DATABASE=Mars +@@ -4197,10 +4203,10 @@ pci:v00001002d00006631* + ID_MODEL_FROM_DATABASE=Oland + + pci:v00001002d00006640* +- ID_MODEL_FROM_DATABASE=Saturn [Radeon HD 8950] ++ ID_MODEL_FROM_DATABASE=Saturn XT [Radeon HD 8950M] + + pci:v00001002d00006641* +- ID_MODEL_FROM_DATABASE=Saturn PRO ++ ID_MODEL_FROM_DATABASE=Saturn PRO [Radeon HD 8930M] + + pci:v00001002d00006649* + ID_MODEL_FROM_DATABASE=Bonaire +@@ -4236,13 +4242,13 @@ pci:v00001002d0000665Csv00001787sd00002329* + ID_MODEL_FROM_DATABASE=Radeon HD 7790 TurboDuo + + pci:v00001002d0000665D* +- ID_MODEL_FROM_DATABASE=Bonaire ++ ID_MODEL_FROM_DATABASE=Bonaire [Radeon R7 200 Series] + + pci:v00001002d00006660* +- ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A] ++ ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M] + + pci:v00001002d00006663* +- ID_MODEL_FROM_DATABASE=Sun PRO [Radeon HD 8500M Series] ++ ID_MODEL_FROM_DATABASE=Sun PRO [Radeon HD 8570M] + + pci:v00001002d00006664* + ID_MODEL_FROM_DATABASE=Jet XT [Radeon R5 M200 Series] +@@ -4254,7 +4260,7 @@ pci:v00001002d00006667* + ID_MODEL_FROM_DATABASE=Jet ULT [Radeon R5 M200 Series] + + pci:v00001002d0000666F* +- ID_MODEL_FROM_DATABASE=Sun [Radeon HD 8500M] ++ ID_MODEL_FROM_DATABASE=Sun LE [Radeon HD 8550M] + + pci:v00001002d00006670* + ID_MODEL_FROM_DATABASE=Hainan +@@ -5675,6 +5681,15 @@ pci:v00001002d0000678Asv00001002sd0000030C* + pci:v00001002d0000678Asv00001002sd00000310* + ID_MODEL_FROM_DATABASE=FirePro S9000 + ++pci:v00001002d0000678Asv00001002sd00000420* ++ ID_MODEL_FROM_DATABASE=Radeon Sky 700 ++ ++pci:v00001002d0000678Asv00001002sd00000422* ++ ID_MODEL_FROM_DATABASE=Radeon Sky 900 ++ ++pci:v00001002d0000678Asv00001002sd00000B0E* ++ ID_MODEL_FROM_DATABASE=FirePro S10000 Passive ++ + pci:v00001002d0000678Asv00001002sd00000B2A* + ID_MODEL_FROM_DATABASE=FirePro S10000 + +@@ -5691,11 +5706,14 @@ pci:v00001002d00006792* + ID_MODEL_FROM_DATABASE=Tahiti + + pci:v00001002d00006798* +- ID_MODEL_FROM_DATABASE=Tahiti XT [Radeon HD 7970] ++ ID_MODEL_FROM_DATABASE=Tahiti XT [Radeon HD 7970/R9 280X] + + pci:v00001002d00006798sv00001002sd00003000* + ID_MODEL_FROM_DATABASE=Tahiti XT2 [Radeon HD 7970 GHz Edition] + ++pci:v00001002d00006798sv00001002sd00003001* ++ ID_MODEL_FROM_DATABASE=Tahiti XTL [Radeon R9 280X] ++ + pci:v00001002d00006798sv00001002sd00004000* + ID_MODEL_FROM_DATABASE=Radeon HD 8970 OEM + +@@ -5717,6 +5735,12 @@ pci:v00001002d00006798sv00001043sd0000044A* + pci:v00001002d00006798sv00001043sd0000044C* + ID_MODEL_FROM_DATABASE=Tahiti XT2 [Matrix HD 7970 Platinum] + ++pci:v00001002d00006798sv00001043sd00003001* ++ ID_MODEL_FROM_DATABASE=Tahiti XTL [ROG Matrix R9 280X] ++ ++pci:v00001002d00006798sv00001043sd00003006* ++ ID_MODEL_FROM_DATABASE=Tahiti XTL [Radeon R9 280X DirectCU II TOP] ++ + pci:v00001002d00006798sv00001043sd00009999* + ID_MODEL_FROM_DATABASE=ARES II + +@@ -5771,6 +5795,9 @@ pci:v00001002d0000679Bsv00001002sd00000B2A* + pci:v00001002d0000679Bsv00001462sd00008036* + ID_MODEL_FROM_DATABASE=Radeon HD 8990 OEM + ++pci:v00001002d0000679Bsv0000148Csd00008990* ++ ID_MODEL_FROM_DATABASE=Radeon HD 8990 OEM ++ + pci:v00001002d0000679E* + ID_MODEL_FROM_DATABASE=Tahiti LE [Radeon HD 7870 XT] + +@@ -5834,6 +5861,9 @@ pci:v00001002d00006808* + pci:v00001002d00006808sv00001002sd00000310* + ID_MODEL_FROM_DATABASE=FirePro S7000 + ++pci:v00001002d00006808sv00001002sd00000420* ++ ID_MODEL_FROM_DATABASE=Radeon Sky 500 ++ + pci:v00001002d00006809* + ID_MODEL_FROM_DATABASE=Pitcairn LE GL [FirePro W5000] + +@@ -5865,19 +5895,22 @@ pci:v00001002d00006819sv0000174Bsd0000E221* + ID_MODEL_FROM_DATABASE=Radeon HD 7850 2GB GDDR5 DVI-I/DVI-D/HDMI/DP + + pci:v00001002d00006820* +- ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8800M Series] ++ ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M] + + pci:v00001002d00006820sv0000103Csd00001851* + ID_MODEL_FROM_DATABASE=Radeon HD 7750M + + pci:v00001002d00006821* +- ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8800M Series] ++ ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M] ++ ++pci:v00001002d00006821sv00001002sd0000031E* ++ ID_MODEL_FROM_DATABASE=FirePro SX4000 + + pci:v00001002d00006822* + ID_MODEL_FROM_DATABASE=Venus PRO + + pci:v00001002d00006823* +- ID_MODEL_FROM_DATABASE=Venus PRO [Radeon HD 8800M Series] ++ ID_MODEL_FROM_DATABASE=Venus PRO [Radeon HD 8850M] + + pci:v00001002d00006825* + ID_MODEL_FROM_DATABASE=Heathrow XT [Radeon HD 7870M] +@@ -5901,7 +5934,7 @@ pci:v00001002d0000682A* + ID_MODEL_FROM_DATABASE=Venus PRO + + pci:v00001002d0000682B* +- ID_MODEL_FROM_DATABASE=Venus LE [Radeon HD 8800M Series] ++ ID_MODEL_FROM_DATABASE=Venus LE [Radeon HD 8830M] + + pci:v00001002d0000682D* + ID_MODEL_FROM_DATABASE=Chelsea XT GL [FirePro M4000] +@@ -5919,7 +5952,7 @@ pci:v00001002d00006831* + ID_MODEL_FROM_DATABASE=Cape Verde [AMD Radeon HD 7700M Series] + + pci:v00001002d00006835* +- ID_MODEL_FROM_DATABASE=Cape Verde PRX [Radeon R7 200 Series] ++ ID_MODEL_FROM_DATABASE=Cape Verde PRX [Radeon R7 260] + + pci:v00001002d00006837* + ID_MODEL_FROM_DATABASE=Cape Verde LE [Radeon HD 7730/8730] +@@ -16466,6 +16499,12 @@ pci:v00001077d00008031* + pci:v00001077d00008032* + ID_MODEL_FROM_DATABASE=8300 Series 10GbE Converged Network Adapter (iSCSI) + ++pci:v00001077d00008430* ++ ID_MODEL_FROM_DATABASE=ISP8324 1/10GbE Converged Network Controller (NIC VF) ++ ++pci:v00001077d00008431* ++ ID_MODEL_FROM_DATABASE=8300 Series 10GbE Converged Network Adapter (FCoE VF) ++ + pci:v00001077d00008432* + ID_MODEL_FROM_DATABASE=ISP2432M-based 10GbE Converged Network Adapter (CNA) + +@@ -17090,6 +17129,12 @@ pci:v00001093d00002890* + pci:v00001093d000028C0* + ID_MODEL_FROM_DATABASE=PCI-6014 + ++pci:v00001093d000028D0* ++ ID_MODEL_FROM_DATABASE=PCI-5122 ++ ++pci:v00001093d000028E0* ++ ID_MODEL_FROM_DATABASE=PXI-5122 ++ + pci:v00001093d00002A60* + ID_MODEL_FROM_DATABASE=PCI-6023E + +@@ -17174,12 +17219,33 @@ pci:v00001093d000070BF* + pci:v00001093d000070C0* + ID_MODEL_FROM_DATABASE=PCI-6143 + ++pci:v00001093d000070F0* ++ ID_MODEL_FROM_DATABASE=PXI-5922 ++ ++pci:v00001093d000070F1* ++ ID_MODEL_FROM_DATABASE=PCI-5922 ++ + pci:v00001093d000070F2* + ID_MODEL_FROM_DATABASE=PCI-6224 + ++pci:v00001093d00007121* ++ ID_MODEL_FROM_DATABASE=PXI-5122EX ++ ++pci:v00001093d00007122* ++ ID_MODEL_FROM_DATABASE=PCI-5122EX ++ + pci:v00001093d00007144* + ID_MODEL_FROM_DATABASE=PXI-5124 (12-bit 200 MS/s Digitizer) + ++pci:v00001093d00007145* ++ ID_MODEL_FROM_DATABASE=PCI-5124 ++ ++pci:v00001093d0000714C* ++ ID_MODEL_FROM_DATABASE=PXI-5114 ++ ++pci:v00001093d0000714D* ++ ID_MODEL_FROM_DATABASE=PCI-5114 ++ + pci:v00001093d0000716C* + ID_MODEL_FROM_DATABASE=PCI-6225 + +@@ -17195,6 +17261,60 @@ pci:v00001093d000071BC* + pci:v00001093d000071D0* + ID_MODEL_FROM_DATABASE=PXI-6143 + ++pci:v00001093d00007260* ++ ID_MODEL_FROM_DATABASE=PXI-5142 ++ ++pci:v00001093d00007261* ++ ID_MODEL_FROM_DATABASE=PCI-5142 ++ ++pci:v00001093d000072A8* ++ ID_MODEL_FROM_DATABASE=PXI-5152 ++ ++pci:v00001093d000072A9* ++ ID_MODEL_FROM_DATABASE=PCI-5152 ++ ++pci:v00001093d000072AA* ++ ID_MODEL_FROM_DATABASE=PXI-5105 ++ ++pci:v00001093d000072AB* ++ ID_MODEL_FROM_DATABASE=PCI-5105 ++ ++pci:v00001093d0000730F* ++ ID_MODEL_FROM_DATABASE=PXI-5922EX ++ ++pci:v00001093d00007310* ++ ID_MODEL_FROM_DATABASE=PCI-5922EX ++ ++pci:v00001093d00007333* ++ ID_MODEL_FROM_DATABASE=PXI-5900 ++ ++pci:v00001093d00007349* ++ ID_MODEL_FROM_DATABASE=PXI-5154 ++ ++pci:v00001093d0000734A* ++ ID_MODEL_FROM_DATABASE=PCI-5154 ++ ++pci:v00001093d0000737D* ++ ID_MODEL_FROM_DATABASE=PXI-5124EX ++ ++pci:v00001093d000073F0* ++ ID_MODEL_FROM_DATABASE=PXI-5153 ++ ++pci:v00001093d000073F1* ++ ID_MODEL_FROM_DATABASE=PCI-5153 ++ ++pci:v00001093d0000745E* ++ ID_MODEL_FROM_DATABASE=PXI-5153EX ++ ++pci:v00001093d0000745F* ++ ID_MODEL_FROM_DATABASE=PCI-5153EX ++ ++pci:v00001093d00007460* ++ ID_MODEL_FROM_DATABASE=PXI-5154EX ++ ++pci:v00001093d00007461* ++ ID_MODEL_FROM_DATABASE=PCI-5154EX ++ + pci:v00001093d0000B001* + ID_MODEL_FROM_DATABASE=IMAQ-PCI-1408 + +@@ -17226,7 +17346,10 @@ pci:v00001093d0000B091* + ID_MODEL_FROM_DATABASE=IMAQ-PXI-1411 + + pci:v00001093d0000C4C4* +- ID_MODEL_FROM_DATABASE=PXIe-4353 ++ ID_MODEL_FROM_DATABASE=PXIe-4353/5160 ++ ++pci:v00001093d0000C4C4sv00001093sd000076D0* ++ ID_MODEL_FROM_DATABASE=PXIe-5160 + + pci:v00001093d0000C801* + ID_MODEL_FROM_DATABASE=PCI-GPIB +@@ -25557,10 +25680,10 @@ pci:v000010DEd00000FE5* + ID_MODEL_FROM_DATABASE=GK107 [GeForce K340 USM] + + pci:v000010DEd00000FE6* +- ID_MODEL_FROM_DATABASE=GK107 [NVS K1 USM] ++ ID_MODEL_FROM_DATABASE=GK107 [GRID K1 NVS USM] + + pci:v000010DEd00000FE7* +- ID_MODEL_FROM_DATABASE=GK107GL [GRID K1] ++ ID_MODEL_FROM_DATABASE=GK107GL [GRID K100 vGPU] + + pci:v000010DEd00000FE7sv000010DEsd0000101E* + ID_MODEL_FROM_DATABASE=GRID K100 +@@ -25575,13 +25698,13 @@ pci:v000010DEd00000FF2* + ID_MODEL_FROM_DATABASE=GK107GL [GRID K1] + + pci:v000010DEd00000FF5* +- ID_MODEL_FROM_DATABASE=GK107GL [Tesla K1 USM] ++ ID_MODEL_FROM_DATABASE=GK107GL [GRID K1 Tesla USM] + + pci:v000010DEd00000FF6* + ID_MODEL_FROM_DATABASE=GK107GLM [Quadro K1100M] + + pci:v000010DEd00000FF7* +- ID_MODEL_FROM_DATABASE=GK107GL [Quadro K1 USM] ++ ID_MODEL_FROM_DATABASE=GK107GL [GRID K140Q vGPU] + + pci:v000010DEd00000FF7sv000010DEsd00001037* + ID_MODEL_FROM_DATABASE=GRID K140Q +@@ -25652,6 +25775,9 @@ pci:v000010DEd00001021* + pci:v000010DEd00001022* + ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20c] + ++pci:v000010DEd00001024* ++ ID_MODEL_FROM_DATABASE=GK110GL [Tesla K40c] ++ + pci:v000010DEd00001026* + ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20s] + +@@ -26246,6 +26372,9 @@ pci:v000010DEd00001140sv000017AAsd00003983* + pci:v000010DEd00001140sv000017AAsd00005003* + ID_MODEL_FROM_DATABASE=GeForce GT 720M + ++pci:v000010DEd00001140sv000017AAsd00005005* ++ ID_MODEL_FROM_DATABASE=GeForce 705M ++ + pci:v000010DEd00001140sv000017AAsd0000500D* + ID_MODEL_FROM_DATABASE=GeForce GT 620M + +@@ -26334,13 +26463,13 @@ pci:v000010DEd0000118A* + ID_MODEL_FROM_DATABASE=GK104GL [GRID K520] + + pci:v000010DEd0000118B* +- ID_MODEL_FROM_DATABASE=GK104 [GeForce K2 USM] ++ ID_MODEL_FROM_DATABASE=GK104GL [GRID K2 GeForce USM] + + pci:v000010DEd0000118C* +- ID_MODEL_FROM_DATABASE=GK104 [NVS K2 USM] ++ ID_MODEL_FROM_DATABASE=GK104 [GRID K2 NVS USM] + + pci:v000010DEd0000118D* +- ID_MODEL_FROM_DATABASE=GK104GL [GRID K2] ++ ID_MODEL_FROM_DATABASE=GK104GL [GRID K200 vGPU] + + pci:v000010DEd0000118Dsv000010DEsd0000101D* + ID_MODEL_FROM_DATABASE=GRID K200 +@@ -26351,6 +26480,9 @@ pci:v000010DEd0000118E* + pci:v000010DEd0000118F* + ID_MODEL_FROM_DATABASE=GK104GL [Tesla K10] + ++pci:v000010DEd00001193* ++ ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 760 Ti OEM] ++ + pci:v000010DEd0000119D* + ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 775M] + +@@ -26379,7 +26511,7 @@ pci:v000010DEd000011A7* + ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 675MX] + + pci:v000010DEd000011B0* +- ID_MODEL_FROM_DATABASE=GK104GL [Quadro K2 USM] ++ ID_MODEL_FROM_DATABASE=GK104GL [GRID K240Q\K260Q vGPU] + + pci:v000010DEd000011B0sv000010DEsd0000101A* + ID_MODEL_FROM_DATABASE=GRID K240Q +@@ -26388,7 +26520,7 @@ pci:v000010DEd000011B0sv000010DEsd0000101B* + ID_MODEL_FROM_DATABASE=GRID K260Q + + pci:v000010DEd000011B1* +- ID_MODEL_FROM_DATABASE=GK104GL [Tesla K2 USM] ++ ID_MODEL_FROM_DATABASE=GK104GL [GRID K2 Tesla USM] + + pci:v000010DEd000011B6* + ID_MODEL_FROM_DATABASE=GK104GLM [Quadro K3100M] +@@ -32642,6 +32774,9 @@ pci:v00001179d00000618* + pci:v00001179d00000701* + ID_MODEL_FROM_DATABASE=FIR Port Type-O + ++pci:v00001179d00000803* ++ ID_MODEL_FROM_DATABASE=TC6371AF SD Host Controller ++ + pci:v00001179d00000804* + ID_MODEL_FROM_DATABASE=TC6371AF SmartMedia Controller + +@@ -40046,6 +40181,9 @@ pci:v000013F6d00008788sv000014C3sd00001710* + pci:v000013F6d00008788sv000014C3sd00001711* + ID_MODEL_FROM_DATABASE=HiFier Serenade + ++pci:v000013F6d00008788sv000014C3sd00001713* ++ ID_MODEL_FROM_DATABASE=HiFier Serenade III ++ + pci:v000013F6d00008788sv00001A58sd00000910* + ID_MODEL_FROM_DATABASE=Barracuda AC-1 + +@@ -50711,8 +50849,11 @@ pci:v00001A41d00000002* + pci:v00001A41d00000200* + ID_MODEL_FROM_DATABASE=TILE-Gx processor + ++pci:v00001A41d00000201* ++ ID_MODEL_FROM_DATABASE=TILE-Gx Processor Virtual Function ++ + pci:v00001A41d00002000* +- ID_MODEL_FROM_DATABASE=TILE-Gx PCI Express Bridge ++ ID_MODEL_FROM_DATABASE=TILE-Gx PCI Express Root Port + + pci:v00001A4A* + ID_VENDOR_FROM_DATABASE=SLAC National Accelerator Lab PPA-REG +@@ -51353,6 +51494,15 @@ pci:v00001CC5* + pci:v00001CC5d00000100* + ID_MODEL_FROM_DATABASE=CAN-PCIe-02 + ++pci:v00001CE4* ++ ID_VENDOR_FROM_DATABASE=Exablaze ++ ++pci:v00001CE4d00000001* ++ ID_MODEL_FROM_DATABASE=ExaNIC X4 ++ ++pci:v00001CE4d00000002* ++ ID_MODEL_FROM_DATABASE=ExaNIC X2 ++ + pci:v00001D44* + ID_VENDOR_FROM_DATABASE=DPT + +@@ -54131,6 +54281,9 @@ pci:v00008086d000008B4sv00008086sd00000270* + pci:v00008086d000008B4sv00008086sd00008270* + ID_MODEL_FROM_DATABASE=Dual Band Wireless AC 3160 + ++pci:v00008086d000008CF* ++ ID_MODEL_FROM_DATABASE=Atom Processor Z2760 Integrated Graphics Controller ++ + pci:v00008086d00000960* + ID_MODEL_FROM_DATABASE=80960RP (i960RP) Microprocessor/Bridge + +@@ -56369,6 +56522,9 @@ pci:v00008086d000010FBsv0000103Csd0000211B* + pci:v00008086d000010FBsv0000103Csd00002147* + ID_MODEL_FROM_DATABASE=Ethernet 10Gb 1-port 561i Adapter + ++pci:v00008086d000010FBsv0000103Csd00002159* ++ ID_MODEL_FROM_DATABASE=Ethernet 10Gb 2-port 562i Adapter ++ + pci:v00008086d000010FBsv0000108Esd00007B11* + ID_MODEL_FROM_DATABASE=Ethernet Server Adapter X520-2 + +@@ -57290,6 +57446,9 @@ pci:v00008086d00001528sv00001028sd00001F61* + pci:v00008086d00001528sv0000103Csd0000192D* + ID_MODEL_FROM_DATABASE=561FLR-T 2-port 10Gb Ethernet Adapter + ++pci:v00008086d00001528sv0000103Csd00002004* ++ ID_MODEL_FROM_DATABASE=Ethernet 10Gb 2-port 561i Adapter ++ + pci:v00008086d00001528sv0000103Csd0000211A* + ID_MODEL_FROM_DATABASE=Ethernet 10Gb 2-port 561T Adapter + +@@ -57416,6 +57575,9 @@ pci:v00008086d0000155D* + pci:v00008086d0000155Dsv00008086sd00000001* + ID_MODEL_FROM_DATABASE=Ethernet Server Bypass Adapter X520-SR2 + ++pci:v00008086d0000155Dsv00008086sd00000002* ++ ID_MODEL_FROM_DATABASE=Ethernet Server Bypass Adapter X520-LR2 ++ + pci:v00008086d00001560* + ID_MODEL_FROM_DATABASE=Ethernet Controller X540 + +@@ -69747,7 +69909,7 @@ pci:v00009005d00000285sv0000103Csd00003227* + ID_MODEL_FROM_DATABASE=AAR-2610SA + + pci:v00009005d00000285sv0000108Esd00000286* +- ID_MODEL_FROM_DATABASE=STK RAID INT ++ ID_MODEL_FROM_DATABASE=Sun StorageTek SAS RAID HBA, Internal + + pci:v00009005d00000285sv0000108Esd00000287* + ID_MODEL_FROM_DATABASE=STK RAID EXT +-- +1.8.4.652.g0d6e0ce + diff --git a/0051-rules-remove-pointless-MODE-settings.patch b/0051-rules-remove-pointless-MODE-settings.patch new file mode 100644 index 0000000..d82b4ae --- /dev/null +++ b/0051-rules-remove-pointless-MODE-settings.patch @@ -0,0 +1,43 @@ +From 831f4f7266961f481f48da3461b332974c15e9f1 Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Mon, 21 Oct 2013 03:49:03 +0200 +Subject: [PATCH] rules: remove pointless MODE= settings + +Changing the default MODE= for the group accessi, but not specifying +a GROUP= does not provide anything. + +It disables the default logic that the mode switches to 0660 as soon +as a GROUP= is specifed, which make custom rules uneccesarily complicated. + +https://bugs.freedesktop.org/show_bug.cgi?id=70665 +--- + rules/50-udev-default.rules | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/rules/50-udev-default.rules b/rules/50-udev-default.rules +index f764789..679dfdf 100644 +--- a/rules/50-udev-default.rules ++++ b/rules/50-udev-default.rules +@@ -20,9 +20,7 @@ KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP= + + SUBSYSTEM=="mem", KERNEL=="mem|kmem|port", GROUP="kmem", MODE="0640" + +-SUBSYSTEM=="input", KERNEL=="mouse*|mice|event*", MODE="0640" +-SUBSYSTEM=="input", KERNEL=="ts[0-9]*|uinput", MODE="0640" +-SUBSYSTEM=="input", KERNEL=="js[0-9]*", MODE="0644" ++SUBSYSTEM=="input", KERNEL=="js[0-9]*", MODE="0664" + + SUBSYSTEM=="video4linux", GROUP="video" + SUBSYSTEM=="misc", KERNEL=="agpgart", GROUP="video" +@@ -63,7 +61,7 @@ SUBSYSTEM=="raw", KERNEL=="raw[0-9]*", GROUP="disk" + SUBSYSTEM=="aoe", GROUP="disk", MODE="0220" + SUBSYSTEM=="aoe", KERNEL=="err", MODE="0440" + +-KERNEL=="rfkill", MODE="0644" ++KERNEL=="rfkill", MODE="0664" + KERNEL=="tun", MODE="0666", OPTIONS+="static_node=net/tun" + + KERNEL=="fuse", MODE="0666", OPTIONS+="static_node=fuse" +-- +1.8.4.652.g0d6e0ce + diff --git a/0052-analyze-set-white-backgound.patch b/0052-analyze-set-white-backgound.patch new file mode 100644 index 0000000..96652c0 --- /dev/null +++ b/0052-analyze-set-white-backgound.patch @@ -0,0 +1,36 @@ +From 5c56656c5f135dbb6549bd9d662bbb7d238638e2 Mon Sep 17 00:00:00 2001 +From: Thomas Hindoe Paaboel Andersen +Date: Mon, 21 Oct 2013 21:29:23 +0200 +Subject: [PATCH] analyze: set white backgound + +In programs like eog and gimp the transparant background did not +look very good. + +https://bugs.freedesktop.org/show_bug.cgi?id=70720 +--- + src/analyze/systemd-analyze.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/analyze/systemd-analyze.c b/src/analyze/systemd-analyze.c +index a4f15eb..9a69795 100644 +--- a/src/analyze/systemd-analyze.c ++++ b/src/analyze/systemd-analyze.c +@@ -507,6 +507,7 @@ static int analyze_plot(DBusConnection *bus) { + /* style sheet */ + svg("\n \n\n\n"); + ++ svg("\n"); + svg("%s", pretty_times); + svg("%s %s (%s %s) %s", + isempty(osname) ? "Linux" : osname, +-- +1.8.4.652.g0d6e0ce + diff --git a/0053-shell-completion-dump-has-moved-to-systemd-analyze.patch b/0053-shell-completion-dump-has-moved-to-systemd-analyze.patch new file mode 100644 index 0000000..883ce48 --- /dev/null +++ b/0053-shell-completion-dump-has-moved-to-systemd-analyze.patch @@ -0,0 +1,84 @@ +From b8cc2a94ad07cf529258ef0dde4002d8e1166f25 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 21 Oct 2013 18:53:57 -0400 +Subject: [PATCH] shell-completion: dump has moved to systemd-analyze + +Rename NO_OPTION to STANDALONE for consistency with other files. +--- + shell-completion/bash/systemctl | 2 +- + shell-completion/bash/systemd-analyze | 4 ++-- + shell-completion/zsh/_systemctl | 3 +-- + shell-completion/zsh/_systemd-analyze | 1 + + 4 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/shell-completion/bash/systemctl b/shell-completion/bash/systemctl +index e335ee8..eea4b6d 100644 +--- a/shell-completion/bash/systemctl ++++ b/shell-completion/bash/systemctl +@@ -137,7 +137,7 @@ _systemctl () { + [JOBS]='cancel' + [SNAPSHOTS]='delete' + [ENVS]='set-environment unset-environment' +- [STANDALONE]='daemon-reexec daemon-reload default dump ++ [STANDALONE]='daemon-reexec daemon-reload default + emergency exit halt hibernate hybrid-sleep kexec list-jobs + list-sockets list-units list-unit-files poweroff reboot rescue + show-environment suspend get-default' +diff --git a/shell-completion/bash/systemd-analyze b/shell-completion/bash/systemd-analyze +index 5bd6768..b65466b 100644 +--- a/shell-completion/bash/systemd-analyze ++++ b/shell-completion/bash/systemd-analyze +@@ -31,7 +31,7 @@ _systemd_analyze() { + local OPTS='--help --version --system --user --from-pattern --to-pattern --order --require' + + local -A VERBS=( +- [NO_OPTION]='time blame plot' ++ [STANDALONE]='time blame plot dump' + [CRITICAL_CHAIN]='critical-chain' + [DOT]='dot' + [LOG_LEVEL]='set-log-level' +@@ -55,7 +55,7 @@ _systemd_analyze() { + if [[ -z $verb ]]; then + comps=${VERBS[*]} + +- elif __contains_word "$verb" ${VERBS[NO_OPTION]}; then ++ elif __contains_word "$verb" ${VERBS[STANDALONE]}; then + if [[ $cur = -* ]]; then + comps='--help --version --system --user' + fi +diff --git a/shell-completion/zsh/_systemctl b/shell-completion/zsh/_systemctl +index 298e97e..3959cd5 100644 +--- a/shell-completion/zsh/_systemctl ++++ b/shell-completion/zsh/_systemctl +@@ -38,7 +38,6 @@ + "is-enabled:Check whether unit files are enabled" + "list-jobs:List jobs" + "cancel:Cancel all, one, or more jobs" +- "dump:Dump server status" + "snapshot:Create a snapshot" + "delete:Remove one or more snapshots" + "show-environment:Dump environment" +@@ -264,7 +263,7 @@ done + (( $+functions[_systemctl_link] )) || _systemctl_link() { _files } + + # no systemctl completion for: +-# [STANDALONE]='daemon-reexec daemon-reload default dump ++# [STANDALONE]='daemon-reexec daemon-reload default + # emergency exit halt kexec list-jobs list-units + # list-unit-files poweroff reboot rescue show-environment' + # [NAME]='snapshot load' +diff --git a/shell-completion/zsh/_systemd-analyze b/shell-completion/zsh/_systemd-analyze +index 37c60f5..2eda5fe 100644 +--- a/shell-completion/zsh/_systemd-analyze ++++ b/shell-completion/zsh/_systemd-analyze +@@ -15,6 +15,7 @@ _systemd_analyze_command(){ + 'critical-chain:Print a tree of the time critical chain of units' + 'plot:Output SVG graphic showing service initialization' + 'dot:Dump dependency graph (in dot(1) format)' ++ 'dump:Dump server status' + 'set-log-level:Set systemd log threshold' + ) + +-- +1.8.4.652.g0d6e0ce + diff --git a/systemd.spec b/systemd.spec index cb87366..784c85c 100644 --- a/systemd.spec +++ b/systemd.spec @@ -16,7 +16,7 @@ Name: systemd Url: http://www.freedesktop.org/wiki/Software/systemd Version: 208 -Release: 2%{?gitcommit:.git%{gitcommit}}%{?dist} +Release: 3%{?gitcommit:.git%{gitcommit}}%{?dist} # For a breakdown of the licensing, see README License: LGPLv2+ and MIT and GPLv2+ Summary: A System and Service Manager @@ -36,6 +36,60 @@ Source4: listen.conf # Prevent accidental removal of the systemd package Source6: yum-protect-systemd.conf +Patch01: 0001-acpi-fptd-fix-memory-leak-in-acpi_get_boot_usec.patch +Patch02: 0002-fix-lingering-references-to-var-lib-backlight-random.patch +Patch03: 0003-acpi-make-sure-we-never-free-an-uninitialized-pointe.patch +Patch04: 0004-systemctl-fix-name-mangling-for-sysv-units.patch +Patch05: 0005-cryptsetup-fix-OOM-handling-when-parsing-mount-optio.patch +Patch06: 0006-journald-add-missing-error-check.patch +Patch07: 0007-bus-fix-potentially-uninitialized-memory-access.patch +Patch08: 0008-dbus-fix-return-value-of-dispatch_rqueue.patch +Patch09: 0009-modules-load-fix-error-handling.patch +Patch10: 0010-efi-never-call-qsort-on-potentially-NULL-arrays.patch +Patch11: 0011-strv-don-t-access-potentially-NULL-string-arrays.patch +Patch12: 0012-mkdir-pass-a-proper-function-pointer-to-mkdir_safe_i.patch +Patch13: 0013-tmpfiles.d-include-setgid-perms-for-run-log-journal.patch +Patch14: 0014-execute.c-always-set-SHELL.patch +Patch15: 0015-man-Improve-the-description-of-parameter-X-in-tmpfil.patch +Patch16: 0016-execute-more-debugging-messages.patch +Patch17: 0017-gpt-auto-generator-exit-immediately-if-in-container.patch +Patch18: 0018-systemd-order-remote-mounts-from-mountinfo-before-re.patch +Patch19: 0019-manager-when-verifying-whether-clients-may-change-en.patch +Patch20: 0020-logind-fix-bus-introspection-data-for-TakeControl.patch +Patch21: 0021-mount-check-for-NULL-before-reading-pm-what.patch +Patch22: 0022-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch +Patch23: 0023-utf8-fix-utf8_is_printable.patch +Patch24: 0024-shared-util-fix-off-by-one-error-in-tag_to_udev_node.patch +Patch25: 0025-systemd-serialize-deserialize-forbid_restart-value.patch +Patch26: 0026-core-unify-the-way-we-denote-serialization-attribute.patch +Patch27: 0027-journald-fix-minor-memory-leak.patch +Patch28: 0028-keymap-Fix-Samsung-900X-34-C.patch +Patch29: 0029-do-not-accept-garbage-from-acpi-firmware-performance.patch +Patch30: 0030-journald-remove-rotated-file-from-hashmap-when-rotat.patch +Patch31: 0031-login-fix-invalid-free-in-sd_session_get_vt.patch +Patch32: 0032-login-make-sd_session_get_vt-actually-work.patch +Patch33: 0033-udevadm.xml-document-resolve-names-option-for-test.patch +Patch34: 0034-Never-call-qsort-on-potentially-NULL-arrays.patch +Patch35: 0035-dbus-common-avoid-leak-in-error-path.patch +Patch36: 0036-drop-ins-check-return-value.patch +Patch37: 0037-Make-sure-that-we-don-t-dereference-NULL.patch +Patch38: 0038-gitignore-ignore-clang-analyze-output.patch +Patch39: 0039-man-add-more-markup-to-udevadm-8.patch +Patch40: 0040-shared-util-Fix-glob_extend-argument.patch +Patch41: 0041-Fix-bad-assert-in-show_pid_array.patch +Patch42: 0042-build-sys-libudev-get-rid-of-the-needless-selinux-li.patch +Patch43: 0043-build-sys-libsystemd-id128-get-rid-of-the-needless-s.patch +Patch44: 0044-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch +Patch45: 0045-man-document-the-b-special-boot-option.patch +Patch46: 0046-logind-allow-unprivileged-session-device-access.patch +Patch47: 0047-rules-expose-loop-block-devices-to-systemd.patch +Patch48: 0048-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch +Patch49: 0049-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch +Patch50: 0050-hwdb-update.patch +Patch51: 0051-rules-remove-pointless-MODE-settings.patch +Patch52: 0052-analyze-set-white-backgound.patch +Patch53: 0053-shell-completion-dump-has-moved-to-systemd-analyze.patch + # kernel-install patch for grubby, drop if grubby is obsolete Patch1000: kernel-install-grubby.patch @@ -674,6 +728,9 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g %{_datadir}/systemd/gatewayd %changelog +* Mon Oct 21 2013 Lennart Poettering