From 12622292b997bf8f478182cb2ba4e7d8fc6d03e0 Mon Sep 17 00:00:00 2001 From: Zbigniew Jędrzejewski-Szmek Date: Jan 15 2014 00:07:25 +0000 Subject: Backport fixes, documentation, and hwdb changes --- diff --git a/0140-systemd-add-a-start-job-for-all-units-specified-with.patch b/0140-systemd-add-a-start-job-for-all-units-specified-with.patch index ebd344d..269ab55 100644 --- a/0140-systemd-add-a-start-job-for-all-units-specified-with.patch +++ b/0140-systemd-add-a-start-job-for-all-units-specified-with.patch @@ -44,6 +44,3 @@ index 5397bd6..610fe88 100644 } } } --- -1.8.4.2 - diff --git a/0141-core-device-ignore-SYSTEMD_WANTS-in-user-mode.patch b/0141-core-device-ignore-SYSTEMD_WANTS-in-user-mode.patch index b28dbfd..de66012 100644 --- a/0141-core-device-ignore-SYSTEMD_WANTS-in-user-mode.patch +++ b/0141-core-device-ignore-SYSTEMD_WANTS-in-user-mode.patch @@ -23,6 +23,3 @@ index 610fe88..e02c207 100644 char *state, *w; size_t l; --- -1.8.4.2 - diff --git a/0142-Fix-memory-leak-in-stdout-journal-streams.patch b/0142-Fix-memory-leak-in-stdout-journal-streams.patch new file mode 100644 index 0000000..7f86517 --- /dev/null +++ b/0142-Fix-memory-leak-in-stdout-journal-streams.patch @@ -0,0 +1,23 @@ +From 371ce08fb9814a39ca2f984d6040aaf0f6c172e8 Mon Sep 17 00:00:00 2001 +From: Dan McGee +Date: Sun, 8 Dec 2013 14:33:45 -0600 +Subject: [PATCH] Fix memory leak in stdout journal streams + +Just as 'identifier' is strdup-ed and freed, we need to do the same for +unit_id. +--- + src/journal/journald-stream.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c +index 9c4efec..4080622 100644 +--- a/src/journal/journald-stream.c ++++ b/src/journal/journald-stream.c +@@ -339,6 +339,7 @@ void stdout_stream_free(StdoutStream *s) { + #endif + + free(s->identifier); ++ free(s->unit_id); + free(s); + } + diff --git a/0143-man-document-is-enabled-output.patch b/0143-man-document-is-enabled-output.patch new file mode 100644 index 0000000..2f4fdd8 --- /dev/null +++ b/0143-man-document-is-enabled-output.patch @@ -0,0 +1,92 @@ +From 77e9da01ad6383aab4d50a00b705ec96f16cb55e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 8 Dec 2013 18:56:16 -0500 +Subject: [PATCH] man: document 'is-enabled' output + +https://bugzilla.redhat.com/show_bug.cgi?id=953077 +--- + man/systemctl.xml | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++----- + 1 file changed, 59 insertions(+), 5 deletions(-) + +diff --git a/man/systemctl.xml b/man/systemctl.xml +index 166282c..b4bc15d 100644 +--- a/man/systemctl.xml ++++ b/man/systemctl.xml +@@ -437,7 +437,7 @@ systemctl start foo + + + When used with enable, +- disable, is-enabled ++ disable, + (and related commands), make changes only temporarily, so + that they are lost on the next reboot. This will have the + effect that changes are not made in subdirectories of +@@ -885,10 +885,64 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service + + + Checks whether any of the specified unit files are +- enabled (as with enable). Returns an exit +- code of 0 if at least one is enabled, non-zero +- otherwise. Prints the current enable status. To suppress +- this output, use . ++ enabled (as with enable). Returns an ++ exit code of 0 if at least one is enabled, non-zero ++ otherwise. Prints the current enable status (see table). ++ To suppress this output, use . ++ ++ ++ ++ ++ <command>is-enabled</command> output ++ ++ ++ ++ ++ ++ Printed string ++ Meaning ++ Return value ++ ++ ++ ++ ++ enabled ++ Enabled through a symlink in .wants directory (permanently or just in /run) ++ 0 ++ ++ ++ enabled-runtime ++ ++ ++ linked ++ Made available through a symlink to the unit file (permanently or just in /run) ++ 1 ++ ++ ++ linked-runtime ++ ++ ++ masked ++ Disabled entirely (permanently or just in /run) ++ 1 ++ ++ ++ masked-runtime ++ ++ ++ static ++ Unit is not enabled, but has no provisions for enabling in [Install] section ++ 1 ++ ++ ++ disabled ++ Unit is not enabled ++ 1 ++ ++ ++ ++
++ +
+ + diff --git a/0144-hostnamed-avoid-using-NULL-in-error-path.patch b/0144-hostnamed-avoid-using-NULL-in-error-path.patch new file mode 100644 index 0000000..8d62943 --- /dev/null +++ b/0144-hostnamed-avoid-using-NULL-in-error-path.patch @@ -0,0 +1,32 @@ +From d4ae9b53caa77d17528d36610ad70dd2eb1bb54c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 6 Jan 2014 12:16:55 +0000 +Subject: [PATCH] hostnamed: avoid using NULL in error path + +https://bugzilla.redhat.com/show_bug.cgi?id=1047335 +--- + src/hostname/hostnamed.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c +index 6a43aeb..0c24b65 100644 +--- a/src/hostname/hostnamed.c ++++ b/src/hostname/hostnamed.c +@@ -637,7 +637,7 @@ static int connect_bus(DBusConnection **_bus) { + if (!bus) { + log_error("Failed to get system D-Bus connection: %s", bus_error_message(&error)); + r = -ECONNREFUSED; +- goto fail; ++ goto fail2; + } + + dbus_connection_set_exit_on_disconnect(bus, FALSE); +@@ -669,7 +669,7 @@ static int connect_bus(DBusConnection **_bus) { + fail: + dbus_connection_close(bus); + dbus_connection_unref(bus); +- ++fail2: + dbus_error_free(&error); + + return r; diff --git a/0145-logind-use-correct-who-enum-values-with-KillUnit.patch b/0145-logind-use-correct-who-enum-values-with-KillUnit.patch new file mode 100644 index 0000000..0c1d66a --- /dev/null +++ b/0145-logind-use-correct-who-enum-values-with-KillUnit.patch @@ -0,0 +1,31 @@ +From 524147c1ef991edf4432aac51c880b363b4402df Mon Sep 17 00:00:00 2001 +From: Marius Vollmer +Date: Thu, 31 Oct 2013 15:55:07 +0200 +Subject: [PATCH] logind: use correct "who" enum values with KillUnit. + +--- + src/login/logind-dbus.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c +index bb85c7d..583d62e 100644 +--- a/src/login/logind-dbus.c ++++ b/src/login/logind-dbus.c +@@ -2799,7 +2799,7 @@ int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo + assert(manager); + assert(unit); + +- w = who == KILL_LEADER ? "process" : "cgroup"; ++ w = who == KILL_LEADER ? "control" : "all"; + assert_cc(sizeof(signo) == sizeof(int32_t)); + + r = bus_method_call_with_reply( +@@ -2815,7 +2815,7 @@ int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo + DBUS_TYPE_INT32, &signo, + DBUS_TYPE_INVALID); + if (r < 0) { +- log_error("Failed to stop unit %s: %s", unit, bus_error(error, r)); ++ log_error("Failed to kill unit %s: %s", unit, bus_error(error, r)); + return r; + } + diff --git a/0146-Revert-systemd-add-a-start-job-for-all-units-specifi.patch b/0146-Revert-systemd-add-a-start-job-for-all-units-specifi.patch new file mode 100644 index 0000000..bb465d9 --- /dev/null +++ b/0146-Revert-systemd-add-a-start-job-for-all-units-specifi.patch @@ -0,0 +1,49 @@ +From 106c98f6b08d3b9254b419b09bc4ceed1963d7aa Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 14 Jan 2014 17:31:00 -0500 +Subject: [PATCH] Revert "systemd: add a start job for all units specified with + SYSTEMD_WANTS=" + +This reverts commit 043a559ff3732439fc61872a6320ee0a05dd088f. + +This was a mistake, and was reverted upstream. +--- + src/core/device.c | 14 +++----------- + 1 file changed, 3 insertions(+), 11 deletions(-) + +diff --git a/src/core/device.c b/src/core/device.c +index e02c207..f79c206 100644 +--- a/src/core/device.c ++++ b/src/core/device.c +@@ -282,8 +282,7 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p + size_t l; + + FOREACH_WORD_QUOTED(w, l, wants, state) { +- _cleanup_free_ char *e, *n = NULL; +- Unit *other; ++ char *e, *n; + + e = strndup(w, l); + if (!e) { +@@ -295,19 +294,12 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p + r = -ENOMEM; + goto fail; + } ++ free(e); + + r = unit_add_dependency_by_name(u, UNIT_WANTS, n, NULL, true); ++ free(n); + if (r < 0) + goto fail; +- +- other = manager_get_unit(u->manager, n); +- if (!other || !unit_can_start(other)) +- continue; +- +- r = manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, true, NULL, NULL); +- if (r < 0) +- log_warning("Failed to add job %s/%s, ignoring: %s.", +- other->id, job_type_to_string(JOB_START), strerror(-r)); + } + } + } diff --git a/0147-core-do-not-segfault-if-swap-activity-happens-when-p.patch b/0147-core-do-not-segfault-if-swap-activity-happens-when-p.patch new file mode 100644 index 0000000..dd7a6a3 --- /dev/null +++ b/0147-core-do-not-segfault-if-swap-activity-happens-when-p.patch @@ -0,0 +1,87 @@ +From 85a77eea8d7114675602a33d2e067fd7c4ad0624 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 12 Jan 2014 11:38:56 -0500 +Subject: [PATCH] core: do not segfault if swap activity happens when + /proc/swaps is not open + +In https://bugzilla.redhat.com/show_bug.cgi?id=969795 systemd crashes +in swap_dispatch_reload called from manager_loop becuase m->proc_swaps +is NULL. It can legitimately be NULL if something went wrong when +initially enumerating swap devices when starting the manager. This +is probably a sign of significant trouble, but let's do our best +to recover. +--- + src/core/swap.c | 45 +++++++++++++++++++++++++++++---------------- + 1 file changed, 29 insertions(+), 16 deletions(-) + +diff --git a/src/core/swap.c b/src/core/swap.c +index 147f710..f295b65 100644 +--- a/src/core/swap.c ++++ b/src/core/swap.c +@@ -1068,14 +1068,40 @@ static int swap_load_proc_swaps(Manager *m, bool set_flags) { + return r; + } + ++static int open_proc_swaps(Manager *m) { ++ if (!m->proc_swaps) { ++ struct epoll_event ev = { ++ .events = EPOLLPRI, ++ .data.ptr = &m->swap_watch, ++ }; ++ ++ m->proc_swaps = fopen("/proc/swaps", "re"); ++ if (!m->proc_swaps) ++ return (errno == ENOENT) ? 0 : -errno; ++ ++ m->swap_watch.type = WATCH_SWAP; ++ m->swap_watch.fd = fileno(m->proc_swaps); ++ ++ if (epoll_ctl(m->epoll_fd, EPOLL_CTL_ADD, m->swap_watch.fd, &ev) < 0) ++ return -errno; ++ } ++ ++ return 0; ++} ++ + int swap_dispatch_reload(Manager *m) { + /* This function should go as soon as the kernel properly notifies us */ ++ int r; + + if (_likely_(!m->request_reload)) + return 0; + + m->request_reload = false; + ++ r = open_proc_swaps(m); ++ if (r < 0) ++ return r; ++ + return swap_fd_event(m, EPOLLPRI); + } + +@@ -1225,22 +1251,9 @@ static int swap_enumerate(Manager *m) { + int r; + assert(m); + +- if (!m->proc_swaps) { +- struct epoll_event ev = { +- .events = EPOLLPRI, +- .data.ptr = &m->swap_watch, +- }; +- +- m->proc_swaps = fopen("/proc/swaps", "re"); +- if (!m->proc_swaps) +- return (errno == ENOENT) ? 0 : -errno; +- +- m->swap_watch.type = WATCH_SWAP; +- m->swap_watch.fd = fileno(m->proc_swaps); +- +- if (epoll_ctl(m->epoll_fd, EPOLL_CTL_ADD, m->swap_watch.fd, &ev) < 0) +- return -errno; +- } ++ r = open_proc_swaps(m); ++ if (r < 0) ++ return r; + + r = swap_load_proc_swaps(m, false); + if (r < 0) diff --git a/0148-kernel-install-add-h-help.patch b/0148-kernel-install-add-h-help.patch new file mode 100644 index 0000000..fae104a --- /dev/null +++ b/0148-kernel-install-add-h-help.patch @@ -0,0 +1,69 @@ +From cb5fd30c9ca64024335129d393c15a9586433ca2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 8 Dec 2013 07:46:46 -0500 +Subject: [PATCH] kernel-install: add -h/--help + +--- + src/kernel-install/kernel-install | 21 ++++++++++++++------- + 1 file changed, 14 insertions(+), 7 deletions(-) + +diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install +index 9d3e75d..f5ff362 100644 +--- a/src/kernel-install/kernel-install ++++ b/src/kernel-install/kernel-install +@@ -21,9 +21,9 @@ + + usage() + { +- echo "Usage:" >&2 +- echo " $0 add " >&2 +- echo " $0 remove " >&2 ++ echo "Usage:" ++ echo " $0 add KERNEL-VERSION KERNEL-IMAGE" ++ echo " $0 remove KERNEL-VERSION KERNEL-IMAGE" + } + + dropindirs_sort() +@@ -54,6 +54,13 @@ dropindirs_sort() + + export LC_COLLATE=C + ++for i in "$@"; do ++ if [ "$i" == "--help" -o "$i" == "-h" ]; then ++ usage ++ exit 0 ++ fi ++done ++ + if [[ "${0##*/}" == 'installkernel' ]]; then + COMMAND='add' + else +@@ -75,7 +82,7 @@ if ! [[ $MACHINE_ID ]]; then + fi + + if [[ ! $COMMAND ]] || [[ ! $KERNEL_VERSION ]]; then +- usage ++ echo "Not enough arguments" >&2 + exit 1 + fi + +@@ -90,8 +97,8 @@ readarray -t PLUGINS < <( + + case $COMMAND in + add) +- if [[ ! $KERNEL_IMAGE ]]; then +- usage ++ if [[ ! "$KERNEL_IMAGE" ]]; then ++ echo "Command 'add' requires an argument" >&2 + exit 1 + fi + +@@ -121,7 +128,7 @@ case $COMMAND in + ;; + + *) +- usage ++ echo "Unknown command '$COMMAND'" >&2 + exit 1 + ;; + esac diff --git a/0149-kernel-install-fix-help-output.patch b/0149-kernel-install-fix-help-output.patch new file mode 100644 index 0000000..2ed9d61 --- /dev/null +++ b/0149-kernel-install-fix-help-output.patch @@ -0,0 +1,25 @@ +From 245b830c77bfbac0346bd1df3fa5d6b81d77014a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?S=C3=A9bastien=20Luttringer?= +Date: Thu, 5 Dec 2013 02:55:05 +0100 +Subject: [PATCH] kernel-install: fix help output + +Kernel install doesn't need the second argument on his command line when +removing. +This is correctly documented in the man page. +--- + src/kernel-install/kernel-install | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install +index f5ff362..3ae1d77 100644 +--- a/src/kernel-install/kernel-install ++++ b/src/kernel-install/kernel-install +@@ -23,7 +23,7 @@ usage() + { + echo "Usage:" + echo " $0 add KERNEL-VERSION KERNEL-IMAGE" +- echo " $0 remove KERNEL-VERSION KERNEL-IMAGE" ++ echo " $0 remove KERNEL-VERSION" + } + + dropindirs_sort() diff --git a/0150-man-improve-wording-and-comma-usage-in-systemd.journ.patch b/0150-man-improve-wording-and-comma-usage-in-systemd.journ.patch new file mode 100644 index 0000000..69eb561 --- /dev/null +++ b/0150-man-improve-wording-and-comma-usage-in-systemd.journ.patch @@ -0,0 +1,67 @@ +From 07e7e0378c3f2b73e56e886f7a4b59068dbbbc55 Mon Sep 17 00:00:00 2001 +From: "Jason St. John" +Date: Tue, 10 Dec 2013 00:10:03 -0500 +Subject: [PATCH] man: improve wording and comma usage in + systemd.journal-fields(7) + +Improve wording under "Description" and "_KERNEL_DEVICE=" +--- + man/systemd.journal-fields.xml | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/man/systemd.journal-fields.xml b/man/systemd.journal-fields.xml +index 8a15598..bb89ed5 100644 +--- a/man/systemd.journal-fields.xml ++++ b/man/systemd.journal-fields.xml +@@ -51,14 +51,14 @@ + Description + + Entries in the journal resemble an environment +- block in their syntax, however with fields that can ++ block in their syntax but with fields that can + include binary data. Primarily, fields are formatted + UTF-8 text strings, and binary formatting is used only + where formatting as UTF-8 text strings makes little + sense. New fields may freely be defined by + applications, but a few fields have special + meaning. All fields with special meanings are +- optional. In some cases fields may appear more than ++ optional. In some cases, fields may appear more than + once per entry. + + +@@ -176,7 +176,7 @@ + _UID= + _GID= + +- The process, user and ++ The process, user, and + group ID of the process the + journal entry originates from + formatted as a decimal +@@ -190,7 +190,7 @@ + _CMDLINE= + + The name, the executable +- path and the command line of ++ path, and the command line of + the process the journal entry + originates from. + +@@ -389,12 +389,12 @@ + the major and minor of the + device node, separated by : + and prefixed by b. Similar +- for character devices, but ++ for character devices but + prefixed by c. For network +- devices the interface index, ++ devices, this is the interface index + prefixed by n. For all other +- devices + followed by the +- subsystem name, followed by ++ devices, this is the subsystem name ++ prefixed by +, followed by + :, followed by the kernel + device name. + diff --git a/0151-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch b/0151-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch new file mode 100644 index 0000000..6dceeae --- /dev/null +++ b/0151-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch @@ -0,0 +1,84 @@ +From 26dcf06766bc1fc533d301831838e9e302315134 Mon Sep 17 00:00:00 2001 +From: Adam Williamson +Date: Mon, 9 Dec 2013 21:58:34 -0800 +Subject: [PATCH] drop several entries from kbd-model-map whose kbd layouts do + not exist + +kbd-model-map was generated from system-config-keyboard's keyboard_models.py. +Several of the kbd layouts referred in that file do not exist and, so far as I +can tell, never did. I believe these entries existed simply to provide the xkb +configuration information for those layouts, and there never were matching kbd +entries; the kbd names were entirely notional, to satisfy the need for some +entry or other in that field. + +For systemd, the only function of kbd-model-map is to 'match' kbd and xkb +configurations, so it does not make any sense to maintain entries for cases +where only one or the other exists in this context. +--- + src/locale/kbd-model-map | 12 ------------ + 1 file changed, 12 deletions(-) + +diff --git a/src/locale/kbd-model-map b/src/locale/kbd-model-map +index 1fe9bca..78c7887 100644 +--- a/src/locale/kbd-model-map ++++ b/src/locale/kbd-model-map +@@ -4,22 +4,18 @@ sg ch pc105 de_nodeadkeys terminate:ctrl_alt_bksp + nl nl pc105 - terminate:ctrl_alt_bksp + mk-utf mk,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll + trq tr pc105 - terminate:ctrl_alt_bksp +-guj in,us pc105 guj terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll + uk gb pc105 - terminate:ctrl_alt_bksp + is-latin1 is pc105 - terminate:ctrl_alt_bksp + de de pc105 - terminate:ctrl_alt_bksp +-gur gur,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll + la-latin1 latam pc105 - terminate:ctrl_alt_bksp + us us pc105+inet - terminate:ctrl_alt_bksp + ko kr pc105 - terminate:ctrl_alt_bksp + ro-std ro pc105 std terminate:ctrl_alt_bksp + de-latin1 de pc105 - terminate:ctrl_alt_bksp +-tml-inscript in,us pc105 tam terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll + slovene si pc105 - terminate:ctrl_alt_bksp + hu101 hu pc105 qwerty terminate:ctrl_alt_bksp + jp106 jp jp106 - terminate:ctrl_alt_bksp + croat hr pc105 - terminate:ctrl_alt_bksp +-ben-probhat in,us pc105 ben_probhat terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll + fi-latin1 fi pc105 - terminate:ctrl_alt_bksp + it2 it pc105 - terminate:ctrl_alt_bksp + hu hu pc105 - terminate:ctrl_alt_bksp +@@ -29,7 +25,6 @@ fr_CH ch pc105 fr terminate:ctrl_alt_bksp + dk-latin1 dk pc105 - terminate:ctrl_alt_bksp + fr fr pc105 - terminate:ctrl_alt_bksp + it it pc105 - terminate:ctrl_alt_bksp +-tml-uni in,us pc105 tam_TAB terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll + ua-utf ua,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll + fr-latin1 fr pc105 - terminate:ctrl_alt_bksp + sg-latin1 ch pc105 de_nodeadkeys terminate:ctrl_alt_bksp +@@ -39,16 +34,12 @@ fr-pc fr pc105 - terminate:ctrl_alt_bksp + bg_pho-utf8 bg,us pc105 ,phonetic terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll + it-ibm it pc105 - terminate:ctrl_alt_bksp + cz-us-qwertz cz,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll +-ar-digits ara,us pc105 digits terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll + br-abnt2 br abnt2 - terminate:ctrl_alt_bksp + ro ro pc105 - terminate:ctrl_alt_bksp + us-acentos us pc105 intl terminate:ctrl_alt_bksp + pt-latin1 pt pc105 - terminate:ctrl_alt_bksp + ro-std-cedilla ro pc105 std_cedilla terminate:ctrl_alt_bksp + tj tj pc105 - terminate:ctrl_alt_bksp +-ar-qwerty ara,us pc105 qwerty terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll +-ar-azerty-digits ara,us pc105 azerty_digits terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll +-ben in,us pc105 ben terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll + de-latin1-nodeadkeys de pc105 nodeadkeys terminate:ctrl_alt_bksp + no no pc105 - terminate:ctrl_alt_bksp + bg_bds-utf8 bg,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll +@@ -60,11 +51,8 @@ pl2 pl pc105 - terminate:ctrl_alt_bksp + es es pc105 - terminate:ctrl_alt_bksp + ro-cedilla ro pc105 cedilla terminate:ctrl_alt_bksp + ie ie pc105 - terminate:ctrl_alt_bksp +-ar-azerty ara,us pc105 azerty terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll +-ar-qwerty-digits ara,us pc105 qwerty_digits terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll + et ee pc105 - terminate:ctrl_alt_bksp + sk-qwerty sk pc105 - terminate:ctrl_alt_bksp,qwerty +-dev dev,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll + fr-latin9 fr pc105 latin9 terminate:ctrl_alt_bksp + fr_CH-latin1 ch pc105 fr terminate:ctrl_alt_bksp + cf ca pc105 - terminate:ctrl_alt_bksp diff --git a/0152-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch b/0152-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch new file mode 100644 index 0000000..b64a443 --- /dev/null +++ b/0152-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch @@ -0,0 +1,22 @@ +From bc0cbe40cbfde7e8194f6f4b9b17e7102efa35c7 Mon Sep 17 00:00:00 2001 +From: Adam Williamson +Date: Mon, 9 Dec 2013 22:02:25 -0800 +Subject: [PATCH] correct name of Tajik kbd layout in kbd-model-map + +--- + src/locale/kbd-model-map | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/locale/kbd-model-map b/src/locale/kbd-model-map +index 78c7887..322c0a9 100644 +--- a/src/locale/kbd-model-map ++++ b/src/locale/kbd-model-map +@@ -39,7 +39,7 @@ ro ro pc105 - terminate:ctrl_alt_bksp + us-acentos us pc105 intl terminate:ctrl_alt_bksp + pt-latin1 pt pc105 - terminate:ctrl_alt_bksp + ro-std-cedilla ro pc105 std_cedilla terminate:ctrl_alt_bksp +-tj tj pc105 - terminate:ctrl_alt_bksp ++tj_alt-UTF8 tj pc105 - terminate:ctrl_alt_bksp + de-latin1-nodeadkeys de pc105 nodeadkeys terminate:ctrl_alt_bksp + no no pc105 - terminate:ctrl_alt_bksp + bg_bds-utf8 bg,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll diff --git a/0153-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/0153-hwdb-Update-database-of-Bluetooth-company-identifier.patch new file mode 100644 index 0000000..15b0ddc --- /dev/null +++ b/0153-hwdb-Update-database-of-Bluetooth-company-identifier.patch @@ -0,0 +1,35 @@ +From 4ee475e4786ac69b74a75fd668f0bb8e07bdde2d Mon Sep 17 00:00:00 2001 +From: Marcel Holtmann +Date: Tue, 10 Dec 2013 03:17:39 -0800 +Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers + +--- + hwdb/20-bluetooth-vendor-product.hwdb | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb +index dcc25bb..6f8301f 100644 +--- a/hwdb/20-bluetooth-vendor-product.hwdb ++++ b/hwdb/20-bluetooth-vendor-product.hwdb +@@ -821,3 +821,21 @@ bluetooth:v010F* + + bluetooth:v0110* + ID_VENDOR_FROM_DATABASE=Nippon Seiki Co., Ltd. ++ ++bluetooth:v0111* ++ ID_VENDOR_FROM_DATABASE=Steelseries ApS ++ ++bluetooth:v0112* ++ ID_VENDOR_FROM_DATABASE=vyzybl Inc. ++ ++bluetooth:v0113* ++ ID_VENDOR_FROM_DATABASE=Openbrain Technologies, Co., Ltd. ++ ++bluetooth:v0114* ++ ID_VENDOR_FROM_DATABASE=Xensr ++ ++bluetooth:v0115* ++ ID_VENDOR_FROM_DATABASE=e.solutions ++ ++bluetooth:v0116* ++ ID_VENDOR_FROM_DATABASE=1OAK Technologies diff --git a/0154-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch b/0154-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch new file mode 100644 index 0000000..9c35091 --- /dev/null +++ b/0154-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch @@ -0,0 +1,33 @@ +From d8b3047ccb52c2b55683f2fe12f0674f63d746cb Mon Sep 17 00:00:00 2001 +From: Dan McGee +Date: Sun, 8 Dec 2013 13:27:05 -0600 +Subject: [PATCH] Ensure unit is journaled for short-lived or oneshot processes + +In the time it takes to process incoming log messages, the process we +are logging details for may exit. This means the cgroup data is no +longer available from '/proc'. Unfortunately, the way the code was +structured before, we never log _SYSTEMD_UNIT if we don't have this +cgroup information. + +Add an else if case that allows the passed in unit_id to be logged even +if we couldn't capture cgroup information. This ensures a command like +`journalctl -u run-XXX` will return all log messages from a oneshot +process. +--- + src/journal/journald-server.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c +index a0a8e9c..1fcb3d5 100644 +--- a/src/journal/journald-server.c ++++ b/src/journal/journald-server.c +@@ -626,6 +626,9 @@ static void dispatch_message_real( + } + + free(c); ++ } else if (unit_id) { ++ x = strappenda("_SYSTEMD_UNIT=", unit_id); ++ IOVEC_SET_STRING(iovec[n++], x); + } + + #ifdef HAVE_SELINUX diff --git a/0155-libudev-hwdb-use-libudev-not-systemd-logging.patch b/0155-libudev-hwdb-use-libudev-not-systemd-logging.patch new file mode 100644 index 0000000..e4f88c0 --- /dev/null +++ b/0155-libudev-hwdb-use-libudev-not-systemd-logging.patch @@ -0,0 +1,62 @@ +From 4c5b792c88c81d0595a1273804d2cd405140f81d Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Tue, 10 Dec 2013 16:36:45 +0100 +Subject: [PATCH] libudev: hwdb - use libudev not systemd logging + +--- + src/libudev/libudev-hwdb.c | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +diff --git a/src/libudev/libudev-hwdb.c b/src/libudev/libudev-hwdb.c +index de1cb83..ba43b9f 100644 +--- a/src/libudev/libudev-hwdb.c ++++ b/src/libudev/libudev-hwdb.c +@@ -277,38 +277,38 @@ _public_ struct udev_hwdb *udev_hwdb_new(struct udev *udev) { + + hwdb->f = fopen("/etc/udev/hwdb.bin", "re"); + if (!hwdb->f) { +- log_debug("error reading /etc/udev/hwdb.bin: %m"); ++ udev_dbg(udev, "error reading /etc/udev/hwdb.bin: %m"); + udev_hwdb_unref(hwdb); + return NULL; + } + + if (fstat(fileno(hwdb->f), &hwdb->st) < 0 || + (size_t)hwdb->st.st_size < offsetof(struct trie_header_f, strings_len) + 8) { +- log_debug("error reading /etc/udev/hwdb.bin: %m"); ++ udev_dbg(udev, "error reading /etc/udev/hwdb.bin: %m"); + udev_hwdb_unref(hwdb); + return NULL; + } + + hwdb->map = mmap(0, hwdb->st.st_size, PROT_READ, MAP_SHARED, fileno(hwdb->f), 0); + if (hwdb->map == MAP_FAILED) { +- log_debug("error mapping /etc/udev/hwdb.bin: %m"); ++ udev_dbg(udev, "error mapping /etc/udev/hwdb.bin: %m"); + udev_hwdb_unref(hwdb); + return NULL; + } + + if (memcmp(hwdb->map, sig, sizeof(hwdb->head->signature)) != 0 || + (size_t)hwdb->st.st_size != le64toh(hwdb->head->file_size)) { +- log_debug("error recognizing the format of /etc/udev/hwdb.bin"); ++ udev_dbg(udev, "error recognizing the format of /etc/udev/hwdb.bin"); + udev_hwdb_unref(hwdb); + return NULL; + } + +- log_debug("=== trie on-disk ===\n"); +- log_debug("tool version: %"PRIu64, le64toh(hwdb->head->tool_version)); +- log_debug("file size: %8llu bytes\n", (unsigned long long) hwdb->st.st_size); +- log_debug("header size %8"PRIu64" bytes\n", le64toh(hwdb->head->header_size)); +- log_debug("strings %8"PRIu64" bytes\n", le64toh(hwdb->head->strings_len)); +- log_debug("nodes %8"PRIu64" bytes\n", le64toh(hwdb->head->nodes_len)); ++ udev_dbg(udev, "=== trie on-disk ===\n"); ++ udev_dbg(udev, "tool version: %"PRIu64, le64toh(hwdb->head->tool_version)); ++ udev_dbg(udev, "file size: %8llu bytes\n", (unsigned long long) hwdb->st.st_size); ++ udev_dbg(udev, "header size %8"PRIu64" bytes\n", le64toh(hwdb->head->header_size)); ++ udev_dbg(udev, "strings %8"PRIu64" bytes\n", le64toh(hwdb->head->strings_len)); ++ udev_dbg(udev, "nodes %8"PRIu64" bytes\n", le64toh(hwdb->head->nodes_len)); + return hwdb; + } + diff --git a/0156-core-manager-remove-infinite-loop.patch b/0156-core-manager-remove-infinite-loop.patch new file mode 100644 index 0000000..53e8f4c --- /dev/null +++ b/0156-core-manager-remove-infinite-loop.patch @@ -0,0 +1,25 @@ +From 906a89f8e60c9a39610afd7edbc41f79a3c711e7 Mon Sep 17 00:00:00 2001 +From: Shawn Landden +Date: Tue, 10 Dec 2013 09:28:26 -0800 +Subject: [PATCH] core/manager: remove infinite loop + +--- + src/core/manager.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/src/core/manager.c b/src/core/manager.c +index 944c196..a34a3c6 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -2285,10 +2285,8 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) { + } + + finish: +- if (ferror(f)) { ++ if (ferror(f)) + r = -EIO; +- goto finish; +- } + + assert(m->n_reloading > 0); + m->n_reloading --; diff --git a/0157-util-check-for-overflow-in-greedy_realloc.patch b/0157-util-check-for-overflow-in-greedy_realloc.patch new file mode 100644 index 0000000..9cdcc40 --- /dev/null +++ b/0157-util-check-for-overflow-in-greedy_realloc.patch @@ -0,0 +1,34 @@ +From b7b1af75b9f76f3bff35369b0c1666890c586144 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 10 Dec 2013 18:53:03 +0000 +Subject: [PATCH] util: check for overflow in greedy_realloc() + +Conflicts: + src/shared/util.c +--- + src/shared/util.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 1510c5e..02bae90 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -5832,10 +5832,18 @@ void* greedy_realloc(void **p, size_t *allocated, size_t need) { + size_t a; + void *q; + ++ assert(p); ++ assert(allocated); ++ + if (*allocated >= need) + return *p; + + a = MAX(64u, need * 2); ++ ++ /* check for overflows */ ++ if (a < need) ++ return NULL; ++ + q = realloc(*p, a); + if (!q) + return NULL; diff --git a/0158-journald-use-a-bit-more-cleanup-magic.patch b/0158-journald-use-a-bit-more-cleanup-magic.patch new file mode 100644 index 0000000..2338479 --- /dev/null +++ b/0158-journald-use-a-bit-more-cleanup-magic.patch @@ -0,0 +1,35 @@ +From ce69ab385535d23bec04018941b0cda19d2d4855 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 10 Dec 2013 19:51:47 +0000 +Subject: [PATCH] journald: use a bit more cleanup magic! + +--- + src/journal/journald-stream.c | 8 +------- + 1 file changed, 1 insertion(+), 7 deletions(-) + +diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c +index 4080622..771a2bd 100644 +--- a/src/journal/journald-stream.c ++++ b/src/journal/journald-stream.c +@@ -75,7 +75,7 @@ struct StdoutStream { + + static int stdout_stream_log(StdoutStream *s, const char *p) { + struct iovec iovec[N_IOVEC_META_FIELDS + 5]; +- char *message = NULL, *syslog_priority = NULL, *syslog_facility = NULL, *syslog_identifier = NULL; ++ _cleanup_free_ char *message = NULL, *syslog_priority = NULL, *syslog_facility = NULL, *syslog_identifier = NULL; + unsigned n = 0; + int priority; + char *label = NULL; +@@ -128,12 +128,6 @@ static int stdout_stream_log(StdoutStream *s, const char *p) { + #endif + + server_dispatch_message(s->server, iovec, n, ELEMENTSOF(iovec), &s->ucred, NULL, label, label_len, s->unit_id, priority, 0); +- +- free(message); +- free(syslog_priority); +- free(syslog_facility); +- free(syslog_identifier); +- + return 0; + } + diff --git a/0159-journald-malloc-less-when-streaming-messages.patch b/0159-journald-malloc-less-when-streaming-messages.patch new file mode 100644 index 0000000..362b36d --- /dev/null +++ b/0159-journald-malloc-less-when-streaming-messages.patch @@ -0,0 +1,110 @@ +From feaaf9358a0bd619ef77dca732aa08e21f5c1a56 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 10 Dec 2013 06:17:01 -0500 +Subject: [PATCH] journald: malloc less when streaming messages + +--- + src/journal/journald-stream.c | 23 ++++++++++++----------- + src/journal/journald-syslog.c | 4 ++-- + src/journal/journald-syslog.h | 2 +- + 3 files changed, 15 insertions(+), 14 deletions(-) + +diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c +index 771a2bd..aae381b 100644 +--- a/src/journal/journald-stream.c ++++ b/src/journal/journald-stream.c +@@ -75,9 +75,11 @@ struct StdoutStream { + + static int stdout_stream_log(StdoutStream *s, const char *p) { + struct iovec iovec[N_IOVEC_META_FIELDS + 5]; +- _cleanup_free_ char *message = NULL, *syslog_priority = NULL, *syslog_facility = NULL, *syslog_identifier = NULL; +- unsigned n = 0; + int priority; ++ char syslog_priority[] = "PRIORITY=\0"; ++ char syslog_facility[sizeof("SYSLOG_FACILITY=") + DECIMAL_STR_MAX(priority)]; ++ _cleanup_free_ char *message = NULL, *syslog_identifier = NULL; ++ unsigned n = 0; + char *label = NULL; + size_t label_len = 0; + +@@ -90,7 +92,7 @@ static int stdout_stream_log(StdoutStream *s, const char *p) { + priority = s->priority; + + if (s->level_prefix) +- syslog_parse_priority((char**) &p, &priority, false); ++ syslog_parse_priority(&p, &priority, false); + + if (s->forward_to_syslog || s->server->forward_to_syslog) + server_forward_syslog(s->server, syslog_fixup_facility(priority), s->identifier, p, &s->ucred, NULL); +@@ -103,12 +105,13 @@ static int stdout_stream_log(StdoutStream *s, const char *p) { + + IOVEC_SET_STRING(iovec[n++], "_TRANSPORT=stdout"); + +- if (asprintf(&syslog_priority, "PRIORITY=%i", priority & LOG_PRIMASK) >= 0) +- IOVEC_SET_STRING(iovec[n++], syslog_priority); ++ syslog_priority[strlen("PRIORITY=")] = '0' + LOG_PRI(priority); ++ IOVEC_SET_STRING(iovec[n++], syslog_priority); + +- if (priority & LOG_FACMASK) +- if (asprintf(&syslog_facility, "SYSLOG_FACILITY=%i", LOG_FAC(priority)) >= 0) +- IOVEC_SET_STRING(iovec[n++], syslog_facility); ++ if (priority & LOG_FACMASK) { ++ snprintf(syslog_facility, sizeof(syslog_facility), "SYSLOG_FACILITY=%i", LOG_FAC(priority)); ++ IOVEC_SET_STRING(iovec[n++], syslog_facility); ++ } + + if (s->identifier) { + syslog_identifier = strappend("SYSLOG_IDENTIFIER=", s->identifier); +@@ -408,7 +411,7 @@ fail: + + int server_open_stdout_socket(Server *s) { + int r; +- struct epoll_event ev; ++ struct epoll_event ev = { .events = EPOLLIN }; + + assert(s); + +@@ -441,8 +444,6 @@ int server_open_stdout_socket(Server *s) { + } else + fd_nonblock(s->stdout_fd, 1); + +- zero(ev); +- ev.events = EPOLLIN; + ev.data.fd = s->stdout_fd; + if (epoll_ctl(s->epoll_fd, EPOLL_CTL_ADD, s->stdout_fd, &ev) < 0) { + log_error("Failed to add stdout server fd to epoll object: %m"); +diff --git a/src/journal/journald-syslog.c b/src/journal/journald-syslog.c +index c2770a5..5d9b665 100644 +--- a/src/journal/journald-syslog.c ++++ b/src/journal/journald-syslog.c +@@ -236,7 +236,7 @@ size_t syslog_parse_identifier(const char **buf, char **identifier, char **pid) + return e; + } + +-void syslog_parse_priority(char **p, int *priority, bool with_facility) { ++void syslog_parse_priority(const char **p, int *priority, bool with_facility) { + int a = 0, b = 0, c = 0; + int k; + +@@ -365,7 +365,7 @@ void server_process_syslog_message( + assert(buf); + + orig = buf; +- syslog_parse_priority((char**) &buf, &priority, true); ++ syslog_parse_priority(&buf, &priority, true); + + if (s->forward_to_syslog) + forward_syslog_raw(s, priority, orig, ucred, tv); +diff --git a/src/journal/journald-syslog.h b/src/journal/journald-syslog.h +index 8ccdb77..057ea79 100644 +--- a/src/journal/journald-syslog.h ++++ b/src/journal/journald-syslog.h +@@ -25,7 +25,7 @@ + + int syslog_fixup_facility(int priority) _const_; + +-void syslog_parse_priority(char **p, int *priority, bool with_facility); ++void syslog_parse_priority(const char **p, int *priority, bool with_facility); + size_t syslog_parse_identifier(const char **buf, char **identifier, char **pid); + + void server_forward_syslog(Server *s, int priority, const char *identifier, const char *message, struct ucred *ucred, struct timeval *tv); diff --git a/0160-activate-clean-up-inherited-descriptors.patch b/0160-activate-clean-up-inherited-descriptors.patch new file mode 100644 index 0000000..8776646 --- /dev/null +++ b/0160-activate-clean-up-inherited-descriptors.patch @@ -0,0 +1,77 @@ +From 9b618fb2369046434ced28fe1420d8d5c75cd46e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 10 Dec 2013 21:52:11 -0500 +Subject: [PATCH] activate: clean up inherited descriptors + +> [simon@troela server]$ /usr/lib/systemd/systemd-activate -l 9000 main.js +> Assertion 'fd == 3 + count' failed at src/activate/activate.c:115, +> function open_sockets(). Aborting. +> Aborted (core dumped) + +> after a bit debuging i found the problem: +> slim appears to leak an fd into all of its children: +> stat /proc/14004/fd/3 (14004 is the pid a random process in my session) +> File: '/proc/14004/fd/3' -> '/var/log/slim.log' + +systemd-activate should be robust against the shell (or anything else) leaking +descriptors. Now everything except stdin/stdout/stderr and received sockets +will be closed. +--- + src/activate/activate.c | 23 +++++++++++++++++++---- + 1 file changed, 19 insertions(+), 4 deletions(-) + +diff --git a/src/activate/activate.c b/src/activate/activate.c +index a9461bc..6aa8b9f 100644 +--- a/src/activate/activate.c ++++ b/src/activate/activate.c +@@ -137,6 +137,17 @@ static int open_sockets(int *epoll_fd, bool accept) { + count ++; + } + ++ /* Close logging and all other descriptors */ ++ if (arg_listen) { ++ int except[3 + n]; ++ ++ for (fd = 0; fd < SD_LISTEN_FDS_START + n; fd++) ++ except[fd] = fd; ++ ++ log_close(); ++ close_all_fds(except, 3 + n); ++ } ++ + /** Note: we leak some fd's on error here. I doesn't matter + * much, since the program will exit immediately anyway, but + * would be a pain to fix. +@@ -147,6 +158,7 @@ static int open_sockets(int *epoll_fd, bool accept) { + + fd = make_socket_fd(*address, SOCK_STREAM | (arg_accept*SOCK_CLOEXEC)); + if (fd < 0) { ++ log_open(); + log_error("Failed to open '%s': %s", *address, strerror(-fd)); + return fd; + } +@@ -154,6 +166,9 @@ static int open_sockets(int *epoll_fd, bool accept) { + count ++; + } + ++ if (arg_listen) ++ log_open(); ++ + *epoll_fd = epoll_create1(EPOLL_CLOEXEC); + if (*epoll_fd < 0) { + log_error("Failed to create epoll object: %m"); +@@ -298,10 +313,10 @@ static void sigchld_hdl(int sig, siginfo_t *t, void *data) { + + static int install_chld_handler(void) { + int r; +- struct sigaction act; +- zero(act); +- act.sa_flags = SA_SIGINFO; +- act.sa_sigaction = sigchld_hdl; ++ struct sigaction act = { ++ .sa_flags = SA_SIGINFO, ++ .sa_sigaction = sigchld_hdl, ++ }; + + r = sigaction(SIGCHLD, &act, 0); + if (r < 0) diff --git a/0161-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch b/0161-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch new file mode 100644 index 0000000..297de17 --- /dev/null +++ b/0161-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch @@ -0,0 +1,95 @@ +From bb9c2f82137bb6d1a352341eb81ed2a0ac96d4cb Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 11 Dec 2013 18:38:51 +0100 +Subject: [PATCH] man: explain in more detail how SYSTEMD_READY= influences + SYSTEMD_WANTS= in udev rules + +https://bugzilla.redhat.com/show_bug.cgi?id=1026860 +--- + man/systemd.device.xml | 45 +++++++++++++++++++++++++++++++-------------- + 1 file changed, 31 insertions(+), 14 deletions(-) + +diff --git a/man/systemd.device.xml b/man/systemd.device.xml +index 96ebe89..002b647 100644 +--- a/man/systemd.device.xml ++++ b/man/systemd.device.xml +@@ -70,12 +70,15 @@ + since no device-specific options may be + configured. + +- systemd will automatically create dynamic device +- units for all kernel devices that are marked with the +- "systemd" udev tag (by default all block and network +- devices, and a few others). This may be used to define +- dependencies between devices and other +- units. ++ systemd will dynamically create device units for ++ all kernel devices that are marked with the "systemd" ++ udev tag (by default all block and network devices, ++ and a few others). This may be used to define ++ dependencies between devices and other units. To tag a ++ udev device use TAG+="systemd" in ++ the udev rules file, see ++ udev7 ++ for details. + + Device units are named after the + /sys and +@@ -93,7 +96,7 @@ + + The settings of device units may either be + configured via unit files, or directly from the udev +- database (which is recommended). The following udev ++ database (which is recommended). The following udev device + properties are understood by systemd: + + +@@ -101,16 +104,26 @@ + SYSTEMD_WANTS= + Adds dependencies of + type Wants from +- this unit to all listed units. This ++ the device unit to all listed units. This + may be used to activate arbitrary +- units, when a specific device becomes ++ units when a specific device becomes + available. Note that this and the + other tags are not taken into account + unless the device is tagged with the + systemd string in + the udev database, because otherwise + the device is not exposed as systemd +- unit. ++ unit (see above). Note that systemd ++ will only act on ++ Wants dependencies ++ when a device first becomes active, it ++ will not act on them if they are added ++ to devices that are already ++ active. Use ++ SYSTEMD_READY= (see ++ below) to influence on which udev ++ event to trigger the device ++ dependencies. + + + +@@ -135,10 +148,14 @@ + device disappears from the udev + tree. This option is useful to support + devices that initially show up in an +- uninitialized state in the tree, and for +- which a changed event is generated the +- moment they are fully set +- up. ++ uninitialized state in the tree, and ++ for which a changed ++ event is generated the moment they are ++ fully set up. Note that ++ SYSTEMD_WANTS= (see ++ above) is not acted on as long as ++ SYSTEMD_READY=0 is ++ set for a device. + + + diff --git a/0162-units-don-t-run-readahead-done-timers-in-containers.patch b/0162-units-don-t-run-readahead-done-timers-in-containers.patch new file mode 100644 index 0000000..ac5f405 --- /dev/null +++ b/0162-units-don-t-run-readahead-done-timers-in-containers.patch @@ -0,0 +1,36 @@ +From 3fa582ff9d4bea413a7a0e301b7dbca6b33382b0 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 11 Dec 2013 23:31:34 +0100 +Subject: [PATCH] units: don't run readahead done timers in containers + +We don't run the collector in the container either, hence we don't need +to stop it either. +--- + units/systemd-readahead-done.service.in | 1 + + units/systemd-readahead-done.timer | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/units/systemd-readahead-done.service.in b/units/systemd-readahead-done.service.in +index c3b2ac5..e0d9579 100644 +--- a/units/systemd-readahead-done.service.in ++++ b/units/systemd-readahead-done.service.in +@@ -12,6 +12,7 @@ DefaultDependencies=no + Conflicts=shutdown.target + After=default.target + Before=shutdown.target ++ConditionVirtualization=no + + [Service] + Type=oneshot +diff --git a/units/systemd-readahead-done.timer b/units/systemd-readahead-done.timer +index 41bfb2b..a9f6278 100644 +--- a/units/systemd-readahead-done.timer ++++ b/units/systemd-readahead-done.timer +@@ -12,6 +12,7 @@ DefaultDependencies=no + Conflicts=shutdown.target + After=default.target + Before=shutdown.target ++ConditionVirtualization=no + + [Timer] + OnActiveSec=30s diff --git a/0163-test-fileio-replace-mktemp-with-mkstemp-to-avoid-war.patch b/0163-test-fileio-replace-mktemp-with-mkstemp-to-avoid-war.patch new file mode 100644 index 0000000..db7b9d7 --- /dev/null +++ b/0163-test-fileio-replace-mktemp-with-mkstemp-to-avoid-war.patch @@ -0,0 +1,37 @@ +From 622dfd7a6553cc27b6f75653481dd8808f717c49 Mon Sep 17 00:00:00 2001 +From: Thomas Hindoe Paaboel Andersen +Date: Thu, 12 Dec 2013 00:06:30 +0100 +Subject: [PATCH] test-fileio: replace mktemp with mkstemp to avoid warnings + +This is a fairly useless thing to do but it makes the compilers +and analyzers shut up about the use of mktemp. +--- + src/test/test-fileio.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c +index 06f3e28..b005f3b 100644 +--- a/src/test/test-fileio.c ++++ b/src/test/test-fileio.c +@@ -41,7 +41,9 @@ static void test_parse_env_file(void) { + char **i; + unsigned k; + +- assert_se(mktemp(p)); ++ fd = mkstemp(p); ++ assert_se(fd >= 0); ++ close(fd); + + fd = mkostemp(t, O_CLOEXEC); + assert_se(fd >= 0); +@@ -152,7 +154,9 @@ static void test_parse_multiline_env_file(void) { + _cleanup_strv_free_ char **a = NULL, **b = NULL; + char **i; + +- assert_se(mktemp(p)); ++ fd = mkstemp(p); ++ assert_se(fd >= 0); ++ close(fd); + + fd = mkostemp(t, O_CLOEXEC); + assert_se(fd >= 0); diff --git a/0164-journal-pipe-journalctl-help-output-into-a-pager.patch b/0164-journal-pipe-journalctl-help-output-into-a-pager.patch new file mode 100644 index 0000000..8e0c0ca --- /dev/null +++ b/0164-journal-pipe-journalctl-help-output-into-a-pager.patch @@ -0,0 +1,45 @@ +From 59f2f4cfd399275c3da061212fc25636ee72367f Mon Sep 17 00:00:00 2001 +From: Djalal Harouni +Date: Thu, 12 Dec 2013 00:22:48 +0100 +Subject: [PATCH] journal: pipe journalctl help output into a pager + +journalctl help output might run off the screen, so be consistent +as other systemd tools do and pipe it into a pager. +--- + src/journal/journalctl.c | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c +index a5c4779..71e28b0 100644 +--- a/src/journal/journalctl.c ++++ b/src/journal/journalctl.c +@@ -114,8 +114,18 @@ typedef struct boot_id_t { + uint64_t last; + } boot_id_t; + ++static void pager_open_if_enabled(void) { ++ ++ if (arg_no_pager) ++ return; ++ ++ pager_open(arg_pager_end); ++} ++ + static int help(void) { + ++ pager_open_if_enabled(); ++ + printf("%s [OPTIONS...] [MATCHES...]\n\n" + "Query the journal.\n\n" + "Flags:\n" +@@ -1635,8 +1645,8 @@ int main(int argc, char *argv[]) { + return EXIT_FAILURE; + } + +- if (!arg_no_pager && !arg_follow) +- pager_open(arg_pager_end); ++ if (!arg_follow) ++ pager_open_if_enabled(); + + if (!arg_quiet) { + usec_t start, end; diff --git a/0165-nspawn-complain-and-continue-if-machine-has-same-id.patch b/0165-nspawn-complain-and-continue-if-machine-has-same-id.patch new file mode 100644 index 0000000..7597fe9 --- /dev/null +++ b/0165-nspawn-complain-and-continue-if-machine-has-same-id.patch @@ -0,0 +1,63 @@ +From bedb539662380d6a120db1e8dbb63b55d2ecac2c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 11 Dec 2013 22:00:33 -0500 +Subject: [PATCH] nspawn: complain and continue if machine has same id + +If --link-journal=host or --link-journal=guest is used, this totally +cannot work and we exit with an error. If however --link-journal=auto +or --link-journal=no is used, just display a warning. + +Having the same machine id can happen if booting from the same +filesystem as the host. Since other things mostly function correctly, +let's allow that. + +https://bugs.freedesktop.org/show_bug.cgi?id=68369 +--- + src/nspawn/nspawn.c | 23 +++++++++++++++++++---- + 1 file changed, 19 insertions(+), 4 deletions(-) + +diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c +index 7346253..618f9c3 100644 +--- a/src/nspawn/nspawn.c ++++ b/src/nspawn/nspawn.c +@@ -811,14 +811,11 @@ static int setup_hostname(void) { + } + + static int setup_journal(const char *directory) { +- sd_id128_t machine_id; ++ sd_id128_t machine_id, this_id; + _cleanup_free_ char *p = NULL, *b = NULL, *q = NULL, *d = NULL; + char *id; + int r; + +- if (arg_link_journal == LINK_NO) +- return 0; +- + p = strappend(directory, "/etc/machine-id"); + if (!p) + return log_oom(); +@@ -842,6 +839,24 @@ static int setup_journal(const char *directory) { + return r; + } + ++ r = sd_id128_get_machine(&this_id); ++ if (r < 0) { ++ log_error("Failed to retrieve machine ID: %s", strerror(-r)); ++ return r; ++ } ++ ++ if (sd_id128_equal(machine_id, this_id)) { ++ log_full(arg_link_journal == LINK_AUTO ? LOG_WARNING : LOG_ERR, ++ "Host and machine ids are equal (%s): refusing to link journals", id); ++ if (arg_link_journal == LINK_AUTO) ++ return 0; ++ return ++ -EEXIST; ++ } ++ ++ if (arg_link_journal == LINK_NO) ++ return 0; ++ + free(p); + p = strappend("/var/log/journal/", id); + q = strjoin(directory, "/var/log/journal/", id, NULL); diff --git a/0166-man-beef-up-ExecStart-description.patch b/0166-man-beef-up-ExecStart-description.patch new file mode 100644 index 0000000..6c1fb82 --- /dev/null +++ b/0166-man-beef-up-ExecStart-description.patch @@ -0,0 +1,150 @@ +From a6ba849c002fc991a290d2792573a9145f02aaf6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 14 Dec 2013 17:21:55 -0500 +Subject: [PATCH] man: beef up ExecStart description + +We have lots of questions from people who assume that shell syntax works +here, so let's be very explicit what is allowed and what is not. A few +examples should also help. + +http://bugs.debian.org/732156 +--- + man/systemd.service.xml | 97 ++++++++++++++++++++++++++++++++++++++++--------- + 1 file changed, 80 insertions(+), 17 deletions(-) + +diff --git a/man/systemd.service.xml b/man/systemd.service.xml +index 3f31c11..ca297ba 100644 +--- a/man/systemd.service.xml ++++ b/man/systemd.service.xml +@@ -305,9 +305,10 @@ + ExecStart= + Commands with their + arguments that are executed when this +- service is started. The first +- argument must be an absolute path +- name. ++ service is started. For each of the ++ specified commands, the first argument ++ must be an absolute and literal path ++ to an executable. + + When Type is + not , only one +@@ -332,6 +333,35 @@ + prior assignments of this option will + have no effect. + ++ Each command line is split on ++ whitespace, with the first item being ++ the command to execute, and the ++ subsequent items being the arguments. ++ Double quotes ("...") and single ++ quotes ('...') may be used, in which ++ case everything until the next ++ matching quote becomes part of the ++ same argument. Quotes themselves are ++ removed after parsing. In addition, a ++ trailing backslash ++ (\) may be used to ++ merge lines. This syntax is intended ++ to be very similar to shell syntax, ++ but only the meta-characters and ++ expansions described in the following ++ paragraphs are understood. ++ Specifically, redirection using ++ <, ++ <<, ++ >, and ++ >>, pipes ++ using |, and ++ running programs in the background ++ using & ++ and other elements of shell ++ syntax are not supported. ++ ++ + If more than one command is + specified, the commands are invoked + one by one sequentially in the order +@@ -350,10 +380,11 @@ + The command line accepts + % specifiers as + described in +- systemd.unit5. Note +- that the first argument of the command +- line (i.e. the program to execute) may +- not include specifiers. ++ systemd.unit5. ++ Note that the first argument of the ++ command line (i.e. the program to ++ execute) may not include ++ specifiers. + + Basic environment variable + substitution is supported. Use +@@ -372,9 +403,7 @@ + more arguments. To pass literal dollar sign + use $$. Note that the first + argument (i.e. the program to execute) +- may not be a variable, since it must +- be a literal and absolute path +- name. ++ may not be a variable. + + Optionally, if the absolute file + name is prefixed with +@@ -402,13 +431,47 @@ + ExecStart=/bin/sh -c 'dmesg | tac' + + +- For services run by a user +- instance of systemd the special +- environment variable +- $MANAGERPID is set +- to the PID of the systemd +- instance. +- ++ Only select environment variables ++ are set for executed commands. See ++ systemd.exec5. ++ ++ ++ Example: ++ ExecStart=/bin/echo one ; /bin/echo "two two" ++ ++ This will execute ++ /bin/echo two ++ times, each time with one argument, ++ one and ++ two two, ++ respectively. Since two commands are ++ specified ++ Type=oneshot must ++ be used. ++ ++ Example: ++ ExecStart=/bin/echo / >/dev/null & \; \ ++/bin/ls ++ ++ This will execute ++ /bin/echo with five ++ arguments: /, ++ >/dev/null, ++ &, ++ ;, and ++ /bin/ls. ++ ++ Example: ++ Environment="ONE=one" 'TWO=two two' ++ExecStart=/bin/echo $ONE $TWO ${TWO} ++ ++ This will execute ++ /bin/echo with four ++ arguments: one, ++ two, ++ two, and ++ two two. ++ + + + diff --git a/0167-man-remove-advice-to-avoid-setting-the-same-var-more.patch b/0167-man-remove-advice-to-avoid-setting-the-same-var-more.patch new file mode 100644 index 0000000..b1943b1 --- /dev/null +++ b/0167-man-remove-advice-to-avoid-setting-the-same-var-more.patch @@ -0,0 +1,53 @@ +From 7c6c28dca3b75b7d0c2d067752ed917b113d90d2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 14 Dec 2013 17:30:25 -0500 +Subject: [PATCH] man: remove advice to avoid setting the same var more than + once + +So far the compatibility with .desktop settings hasn't been imporant +at all, and we do not want people to write convoluted unit +files. +--- + man/systemd.service.xml | 6 +----- + man/systemd.unit.xml | 11 +++++++++++ + 2 files changed, 12 insertions(+), 5 deletions(-) + +diff --git a/man/systemd.service.xml b/man/systemd.service.xml +index ca297ba..8f9137c 100644 +--- a/man/systemd.service.xml ++++ b/man/systemd.service.xml +@@ -321,11 +321,7 @@ + (these semicolons must be passed as + separate words). Alternatively, this + directive may be specified more than +- once with the same effect. However, +- the latter syntax is not recommended +- for compatibility with parsers +- suitable for XDG +- .desktop files. ++ once with the same effect. + Lone semicolons may be escaped as + \;. If the empty + string is assigned to this option, the +diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml +index 029392c..77127ff 100644 +--- a/man/systemd.unit.xml ++++ b/man/systemd.unit.xml +@@ -120,6 +120,17 @@ + systemd.scope5. + + ++ Various settings are allowed to be specified ++ more than once, in which case the interpretation ++ depends on the setting. Often, multiple settings form ++ a list, and setting to an empty value "resets", which ++ means that previous assignments are ignored. When this ++ is allowed, it is mentioned in the description of the ++ setting. Note that using multiple assignments to the ++ same value makes the unit file incompatible with ++ parsers for the XDG .desktop file ++ format. ++ + Unit files are loaded from a set of paths + determined during compilation, described in the next section. + diff --git a/0168-systemctl-add-the-plain-option-to-the-help-message.patch b/0168-systemctl-add-the-plain-option-to-the-help-message.patch new file mode 100644 index 0000000..ec04f72 --- /dev/null +++ b/0168-systemctl-add-the-plain-option-to-the-help-message.patch @@ -0,0 +1,23 @@ +From c818ae0c9288afac78a1761de3bd65007448558a Mon Sep 17 00:00:00 2001 +From: Djalal Harouni +Date: Sun, 15 Dec 2013 00:05:38 +0100 +Subject: [PATCH] systemctl: add the --plain option to the help message + +--- + src/systemctl/systemctl.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c +index db584b2..bc9808a 100644 +--- a/src/systemctl/systemctl.c ++++ b/src/systemctl/systemctl.c +@@ -4748,7 +4748,8 @@ static int systemctl_help(void) { + " --root=PATH Enable unit files in the specified root directory\n" + " -n --lines=INTEGER Number of journal entries to show\n" + " -o --output=STRING Change journal output mode (short, short-monotonic,\n" +- " verbose, export, json, json-pretty, json-sse, cat)\n\n" ++ " verbose, export, json, json-pretty, json-sse, cat)\n" ++ " --plain Print unit dependencies as a list instead of a tree\n\n" + "Unit Commands:\n" + " list-units List loaded units\n" + " list-sockets List loaded sockets ordered by address\n" diff --git a/0169-Fix-a-few-resource-leaks-in-error-paths.patch b/0169-Fix-a-few-resource-leaks-in-error-paths.patch new file mode 100644 index 0000000..fc01bb9 --- /dev/null +++ b/0169-Fix-a-few-resource-leaks-in-error-paths.patch @@ -0,0 +1,67 @@ +From 010d6c4909ed75c247ff91a555c7942f9c2ce1c5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 15 Dec 2013 16:25:04 -0500 +Subject: [PATCH] Fix a few resource leaks in error paths + +https://bugzilla.redhat.com/show_bug.cgi?id=1043304 + +Conflicts: + src/libsystemd-bus/bus-objects.c + src/udev/net/link-config.c +--- + src/sleep/sleep.c | 15 +++++++-------- + 1 file changed, 7 insertions(+), 8 deletions(-) + +diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c +index a56ab89..f96987f 100644 +--- a/src/sleep/sleep.c ++++ b/src/sleep/sleep.c +@@ -57,15 +57,14 @@ static int write_mode(char **modes) { + return r; + } + +-static int write_state(FILE *f0, char **states) { +- FILE _cleanup_fclose_ *f = f0; ++static int write_state(FILE **f, char **states) { + char **state; + int r = 0; + + STRV_FOREACH(state, states) { + int k; + +- k = write_string_to_file(f, *state); ++ k = write_string_to_file(*f, *state); + if (k == 0) + return 0; + log_debug("Failed to write '%s' to /sys/power/state: %s", +@@ -73,9 +72,9 @@ static int write_state(FILE *f0, char **states) { + if (r == 0) + r = k; + +- fclose(f); +- f = fopen("/sys/power/state", "we"); +- if (!f) { ++ fclose(*f); ++ *f = fopen("/sys/power/state", "we"); ++ if (!*f) { + log_error("Failed to open /sys/power/state: %m"); + return -errno; + } +@@ -87,7 +86,7 @@ static int write_state(FILE *f0, char **states) { + static int execute(char **modes, char **states) { + char* arguments[4]; + int r; +- FILE *f; ++ _cleanup_fclose_ FILE *f = NULL; + const char* note = strappenda("SLEEP=", arg_verb); + + /* This file is opened first, so that if we hit an error, +@@ -115,7 +114,7 @@ static int execute(char **modes, char **states) { + note, + NULL); + +- r = write_state(f, states); ++ r = write_state(&f, states); + if (r < 0) + return r; + diff --git a/0170-Fix-a-few-signed-unsigned-format-string-issues.patch b/0170-Fix-a-few-signed-unsigned-format-string-issues.patch new file mode 100644 index 0000000..085e455 --- /dev/null +++ b/0170-Fix-a-few-signed-unsigned-format-string-issues.patch @@ -0,0 +1,81 @@ +From dca7710c31218a2292c8e3987d1e906b27bed4e9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 15 Dec 2013 16:26:27 -0500 +Subject: [PATCH] Fix a few signed/unsigned format string issues + +Since numbers involved are all small, behaviour was correct already. + +https://bugzilla.redhat.com/show_bug.cgi?id=1043304 +--- + src/shared/time-util.c | 2 +- + src/udev/udev-builtin-net_id.c | 21 +++++++-------------- + 2 files changed, 8 insertions(+), 15 deletions(-) + +diff --git a/src/shared/time-util.c b/src/shared/time-util.c +index 81d4ede..d31401b 100644 +--- a/src/shared/time-util.c ++++ b/src/shared/time-util.c +@@ -382,7 +382,7 @@ void dual_timestamp_deserialize(const char *value, dual_timestamp *t) { + assert(value); + assert(t); + +- if (sscanf(value, "%lli %llu", &a, &b) != 2) ++ if (sscanf(value, "%llu %llu", &a, &b) != 2) + log_debug("Failed to parse finish timestamp value %s", value); + else { + t->realtime = a; +diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c +index 9ae8f08..9bc1946 100644 +--- a/src/udev/udev-builtin-net_id.c ++++ b/src/udev/udev-builtin-net_id.c +@@ -166,23 +166,17 @@ out: + + static int dev_pci_slot(struct udev_device *dev, struct netnames *names) { + struct udev *udev = udev_device_get_udev(names->pcidev); +- unsigned int domain; +- unsigned int bus; +- unsigned int slot; +- unsigned int func; +- unsigned int dev_id = 0; ++ unsigned domain, bus, slot, func, dev_id = 0; + size_t l; + char *s; + const char *attr; + struct udev_device *pci = NULL; +- char slots[256]; +- DIR *dir; ++ char slots[256], str[256]; ++ _cleanup_closedir_ DIR *dir = NULL; + struct dirent *dent; +- char str[256]; +- int hotplug_slot = 0; +- int err = 0; ++ int hotplug_slot = 0, err = 0; + +- if (sscanf(udev_device_get_sysname(names->pcidev), "%x:%x:%x.%d", &domain, &bus, &slot, &func) != 4) ++ if (sscanf(udev_device_get_sysname(names->pcidev), "%x:%x:%x.%u", &domain, &bus, &slot, &func) != 4) + return -ENOENT; + + /* kernel provided multi-device index */ +@@ -239,7 +233,6 @@ static int dev_pci_slot(struct udev_device *dev, struct netnames *names) { + if (hotplug_slot > 0) + break; + } +- closedir(dir); + + if (hotplug_slot > 0) { + s = names->pci_slot; +@@ -341,11 +334,11 @@ static int names_bcma(struct udev_device *dev, struct netnames *names) { + return -ENOENT; + + /* bus num:core num */ +- if (sscanf(udev_device_get_sysname(bcmadev), "bcma%*d:%d", &core) != 1) ++ if (sscanf(udev_device_get_sysname(bcmadev), "bcma%*u:%u", &core) != 1) + return -EINVAL; + /* suppress the common core == 0 */ + if (core > 0) +- snprintf(names->bcma_core, sizeof(names->bcma_core), "b%d", core); ++ snprintf(names->bcma_core, sizeof(names->bcma_core), "b%u", core); + + names->type = NET_BCMA; + return 0; diff --git a/0171-util-try-harder-to-increase-the-send-recv-buffers-of.patch b/0171-util-try-harder-to-increase-the-send-recv-buffers-of.patch new file mode 100644 index 0000000..361253f --- /dev/null +++ b/0171-util-try-harder-to-increase-the-send-recv-buffers-of.patch @@ -0,0 +1,60 @@ +From 4a0ab3a8fd59d38dabb9a7096939d8d8e8adc62f Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 16 Dec 2013 17:04:36 +0100 +Subject: [PATCH] util: try harder to increase the send/recv buffers of sockets + +If we have the priviliges we will try SO_SNDBUFFORCE/SO_RCVBUFFORCE and +only fall back to SO_SNDBUF/SO_RCVBUF if that fails. +--- + src/shared/util.c | 25 ++++++++++++------------- + 1 file changed, 12 insertions(+), 13 deletions(-) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 02bae90..8824b9b 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -4928,15 +4928,15 @@ int fd_inc_sndbuf(int fd, size_t n) { + socklen_t l = sizeof(value); + + r = getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &value, &l); +- if (r >= 0 && +- l == sizeof(value) && +- (size_t) value >= n*2) ++ if (r >= 0 && l == sizeof(value) && (size_t) value >= n*2) + return 0; + ++ /* If we have the privileges we will ignore the kernel limit. */ ++ + value = (int) n; +- r = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &value, sizeof(value)); +- if (r < 0) +- return -errno; ++ if (setsockopt(fd, SOL_SOCKET, SO_SNDBUFFORCE, &value, sizeof(value)) < 0) ++ if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &value, sizeof(value)) < 0) ++ return -errno; + + return 1; + } +@@ -4946,16 +4946,15 @@ int fd_inc_rcvbuf(int fd, size_t n) { + socklen_t l = sizeof(value); + + r = getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &value, &l); +- if (r >= 0 && +- l == sizeof(value) && +- (size_t) value >= n*2) ++ if (r >= 0 && l == sizeof(value) && (size_t) value >= n*2) + return 0; + +- value = (int) n; +- r = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &value, sizeof(value)); +- if (r < 0) +- return -errno; ++ /* If we have the privileges we will ignore the kernel limit. */ + ++ value = (int) n; ++ if (setsockopt(fd, SOL_SOCKET, SO_RCVBUFFORCE, &value, sizeof(value)) < 0) ++ if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &value, sizeof(value)) < 0) ++ return -errno; + return 1; + } + diff --git a/0172-execute-also-set-SO_SNDBUF-when-spawning-a-service-w.patch b/0172-execute-also-set-SO_SNDBUF-when-spawning-a-service-w.patch new file mode 100644 index 0000000..82de044 --- /dev/null +++ b/0172-execute-also-set-SO_SNDBUF-when-spawning-a-service-w.patch @@ -0,0 +1,32 @@ +From 8d872d28194f58da2311ca88072084458dc2eb15 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 16 Dec 2013 20:00:09 +0100 +Subject: [PATCH] execute: also set SO_SNDBUF when spawning a service with + stdout/stderr connected to journald + +--- + src/core/execute.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/core/execute.c b/src/core/execute.c +index 58be72a..9b85379 100644 +--- a/src/core/execute.c ++++ b/src/core/execute.c +@@ -75,6 +75,8 @@ + /* This assumes there is a 'tty' group */ + #define TTY_MODE 0620 + ++#define SNDBUF_SIZE (8*1024*1024) ++ + static int shift_fds(int fds[], unsigned n_fds) { + int start, restart_from; + +@@ -232,6 +234,8 @@ static int connect_logger_as(const ExecContext *context, ExecOutput output, cons + return -errno; + } + ++ fd_inc_sndbuf(fd, SNDBUF_SIZE); ++ + dprintf(fd, + "%s\n" + "%s\n" diff --git a/0173-journal-file-protect-against-alloca-0.patch b/0173-journal-file-protect-against-alloca-0.patch new file mode 100644 index 0000000..953373e --- /dev/null +++ b/0173-journal-file-protect-against-alloca-0.patch @@ -0,0 +1,23 @@ +From a25fd0d4bd3cf652e55c24e7dc873fe530fa111a Mon Sep 17 00:00:00 2001 +From: Thomas Hindoe Paaboel Andersen +Date: Mon, 16 Dec 2013 23:35:30 +0100 +Subject: [PATCH] journal-file: protect against alloca(0) + +--- + src/journal/journal-file.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c +index 090cf97..8ea258b 100644 +--- a/src/journal/journal-file.c ++++ b/src/journal/journal-file.c +@@ -2737,7 +2737,8 @@ int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint6 + ts.realtime = le64toh(o->entry.realtime); + + n = journal_file_entry_n_items(o); +- items = alloca(sizeof(EntryItem) * n); ++ /* alloca() can't take 0, hence let's allocate at least one */ ++ items = alloca(sizeof(EntryItem) * MAX(1u, n)); + + for (i = 0; i < n; i++) { + uint64_t l, h; diff --git a/0174-man-describe-journalctl-show-cursor.patch b/0174-man-describe-journalctl-show-cursor.patch new file mode 100644 index 0000000..e36e5b6 --- /dev/null +++ b/0174-man-describe-journalctl-show-cursor.patch @@ -0,0 +1,42 @@ +From 2d46a006393fe823e119a14794a931bd9bc25f74 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 16 Dec 2013 23:40:00 -0500 +Subject: [PATCH] man: describe journalctl --show-cursor + +--- + man/journalctl.xml | 22 +++++++++++++++++----- + 1 file changed, 17 insertions(+), 5 deletions(-) + +diff --git a/man/journalctl.xml b/man/journalctl.xml +index c0cc96d..d936933 100644 +--- a/man/journalctl.xml ++++ b/man/journalctl.xml +@@ -576,11 +576,23 @@ + + + +- Start showing entries from the +- location in the journal +- after the location +- specified by the this cursor. +- ++ Start showing entries ++ from the location in the journal ++ after the ++ location specified by the this cursor. ++ The cursor is shown when the ++ option ++ is used. ++ ++ ++ ++ ++ ++ The cursor is shown after the last ++ entry after two dashes: ++ -- cursor: s=0639... ++ The format of this the cursor is private ++ and subject ot change. + + + diff --git a/0175-journal-fix-against-theoretical-undefined-behavior.patch b/0175-journal-fix-against-theoretical-undefined-behavior.patch new file mode 100644 index 0000000..d2825e4 --- /dev/null +++ b/0175-journal-fix-against-theoretical-undefined-behavior.patch @@ -0,0 +1,39 @@ +From 9e32b8f531a1e15f85cce97bea931c43a9db7798 Mon Sep 17 00:00:00 2001 +From: Shawn Landden +Date: Mon, 16 Dec 2013 15:41:00 -0800 +Subject: [PATCH] journal: fix against (theoretical) undefined behavior + +While all the libc implementations I know return NULL when memchr's size +parameter is 0, without accessing any memory, passing NULL to memchr is +still invalid: + +C11 7.24.1p2: Where an argument declared as "size_t n" specifies the length +of the array for a function, n can have the value zero on a call to that +function. Unless explicitly stated otherwise in the description of a +particular function in this subclause, pointer arguments on such a call +shall still have valid values, as described in 7.1.4. On such a call, a +function that locates a character finds no occurrence, a function that +compares two character sequences returns zero, and a function that copies +characters copies zero characters. + +see http://llvm.org/bugs/show_bug.cgi?id=18247 +--- + src/journal/journal-file.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c +index 8ea258b..71ef092 100644 +--- a/src/journal/journal-file.c ++++ b/src/journal/journal-file.c +@@ -1010,7 +1010,10 @@ static int journal_file_append_data( + if (r < 0) + return r; + +- eq = memchr(data, '=', size); ++ if (!data) ++ eq = NULL; ++ else ++ eq = memchr(data, '=', size); + if (eq && eq > data) { + uint64_t fp; + Object *fo; diff --git a/0176-journald-downgrade-warning-message-when-dev-kmsg-doe.patch b/0176-journald-downgrade-warning-message-when-dev-kmsg-doe.patch new file mode 100644 index 0000000..6936e38 --- /dev/null +++ b/0176-journald-downgrade-warning-message-when-dev-kmsg-doe.patch @@ -0,0 +1,24 @@ +From 602fa0f30e4770b1f45e005a7ed9417065b0d640 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 17 Dec 2013 19:56:06 +0100 +Subject: [PATCH] journald: downgrade warning message when /dev/kmsg does not + exist + +--- + src/journal/journald-kmsg.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/journal/journald-kmsg.c b/src/journal/journald-kmsg.c +index 21649d0..9895808 100644 +--- a/src/journal/journald-kmsg.c ++++ b/src/journal/journald-kmsg.c +@@ -382,7 +382,8 @@ int server_open_dev_kmsg(Server *s) { + + s->dev_kmsg_fd = open("/dev/kmsg", O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY); + if (s->dev_kmsg_fd < 0) { +- log_warning("Failed to open /dev/kmsg, ignoring: %m"); ++ log_full(errno == ENOENT ? LOG_DEBUG : LOG_WARNING, ++ "Failed to open /dev/kmsg, ignoring: %m"); + return 0; + } + diff --git a/0177-journal-file.c-remove-redundant-assignment-of-variab.patch b/0177-journal-file.c-remove-redundant-assignment-of-variab.patch new file mode 100644 index 0000000..e5baa81 --- /dev/null +++ b/0177-journal-file.c-remove-redundant-assignment-of-variab.patch @@ -0,0 +1,24 @@ +From 029cd4a129832bcc750206deb05695da350efe77 Mon Sep 17 00:00:00 2001 +From: Thomas Hindoe Paaboel Andersen +Date: Tue, 17 Dec 2013 20:15:45 +0100 +Subject: [PATCH] journal-file.c: remove redundant assignment of variable + +we also do 'last_index = (uint64_t) -1;' at the end of the while +loop so there is no reason to also do it here. +--- + src/journal/journal-file.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c +index 71ef092..5ef6a2a 100644 +--- a/src/journal/journal-file.c ++++ b/src/journal/journal-file.c +@@ -1628,8 +1628,6 @@ static int generic_array_bisect( + else + left = y + 1; + } +- +- last_index = (uint64_t) -1; + } + + for (;;) { diff --git a/0178-login-Don-t-stop-a-running-user-manager-from-garbage.patch b/0178-login-Don-t-stop-a-running-user-manager-from-garbage.patch new file mode 100644 index 0000000..4523e80 --- /dev/null +++ b/0178-login-Don-t-stop-a-running-user-manager-from-garbage.patch @@ -0,0 +1,33 @@ +From 0fa446efab8593abc726a7c2438549098db4cc70 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Thomas=20B=C3=A4chler?= +Date: Sun, 15 Dec 2013 12:06:37 +0100 +Subject: [PATCH] login: Don't stop a running user manager from + garbage-collecting the user. + +With the current logic, a user will never be garbage-collected, since its +manager will always be around. Change the logic such that a user is +garbage-collected when it has no sessions and linger is disabled. + +Conflicts: + src/login/logind-user.c +--- + src/login/logind-user.c | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/src/login/logind-user.c b/src/login/logind-user.c +index adbe638..e2fce5c 100644 +--- a/src/login/logind-user.c ++++ b/src/login/logind-user.c +@@ -629,12 +629,6 @@ int user_check_gc(User *u, bool drop_not_started) { + if (u->slice_job || u->service_job) + return 1; + +- if (u->slice && manager_unit_is_active(u->manager, u->slice) != 0) +- return 1; +- +- if (u->service && manager_unit_is_active(u->manager, u->service) != 0) +- return 1; +- + return 0; + } + diff --git a/0179-libudev-devices-received-from-udev-are-always-initia.patch b/0179-libudev-devices-received-from-udev-are-always-initia.patch new file mode 100644 index 0000000..492bb25 --- /dev/null +++ b/0179-libudev-devices-received-from-udev-are-always-initia.patch @@ -0,0 +1,157 @@ +From 0e075f4d98a653cc0b468fc786fcd869075a75e1 Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Wed, 18 Dec 2013 16:49:19 +0100 +Subject: [PATCH] libudev: devices received from udev are always initialized + +Conflicts: + TODO +--- + src/libudev/libudev-device.c | 2 ++ + src/libudev/libudev-monitor.c | 62 +++++++++++++++++++++---------------------- + 2 files changed, 33 insertions(+), 31 deletions(-) + +diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c +index 161181a..b6c4e24 100644 +--- a/src/libudev/libudev-device.c ++++ b/src/libudev/libudev-device.c +@@ -536,6 +536,8 @@ int udev_device_read_db(struct udev_device *udev_device, const char *dbfile) + udev_dbg(udev_device->udev, "no db file to read %s: %m\n", dbfile); + return -1; + } ++ ++ /* devices with a database entry are initialized */ + udev_device->is_initialized = true; + + while (fgets(line, sizeof(line), f)) { +diff --git a/src/libudev/libudev-monitor.c b/src/libudev/libudev-monitor.c +index 0212792..ff89e14 100644 +--- a/src/libudev/libudev-monitor.c ++++ b/src/libudev/libudev-monitor.c +@@ -324,9 +324,6 @@ _public_ int udev_monitor_enable_receiving(struct udev_monitor *udev_monitor) + int err = 0; + const int on = 1; + +- if (udev_monitor->snl.nl.nl_family == 0) +- return -EINVAL; +- + udev_monitor_filter_update(udev_monitor); + + if (!udev_monitor->bound) { +@@ -524,7 +521,6 @@ _public_ struct udev_device *udev_monitor_receive_device(struct udev_monitor *ud + char buf[8192]; + ssize_t buflen; + ssize_t bufpos; +- struct udev_monitor_netlink_header *nlh; + + retry: + if (udev_monitor == NULL) +@@ -536,11 +532,8 @@ retry: + smsg.msg_iovlen = 1; + smsg.msg_control = cred_msg; + smsg.msg_controllen = sizeof(cred_msg); +- +- if (udev_monitor->snl.nl.nl_family != 0) { +- smsg.msg_name = &snl; +- smsg.msg_namelen = sizeof(snl); +- } ++ smsg.msg_name = &snl; ++ smsg.msg_namelen = sizeof(snl); + + buflen = recvmsg(udev_monitor->sock, &smsg, 0); + if (buflen < 0) { +@@ -554,20 +547,18 @@ retry: + return NULL; + } + +- if (udev_monitor->snl.nl.nl_family != 0) { +- if (snl.nl.nl_groups == 0) { +- /* unicast message, check if we trust the sender */ +- if (udev_monitor->snl_trusted_sender.nl.nl_pid == 0 || +- snl.nl.nl_pid != udev_monitor->snl_trusted_sender.nl.nl_pid) { +- udev_dbg(udev_monitor->udev, "unicast netlink message ignored\n"); +- return NULL; +- } +- } else if (snl.nl.nl_groups == UDEV_MONITOR_KERNEL) { +- if (snl.nl.nl_pid > 0) { +- udev_dbg(udev_monitor->udev, "multicast kernel netlink message from pid %d ignored\n", +- snl.nl.nl_pid); +- return NULL; +- } ++ if (snl.nl.nl_groups == 0) { ++ /* unicast message, check if we trust the sender */ ++ if (udev_monitor->snl_trusted_sender.nl.nl_pid == 0 || ++ snl.nl.nl_pid != udev_monitor->snl_trusted_sender.nl.nl_pid) { ++ udev_dbg(udev_monitor->udev, "unicast netlink message ignored\n"); ++ return NULL; ++ } ++ } else if (snl.nl.nl_groups == UDEV_MONITOR_KERNEL) { ++ if (snl.nl.nl_pid > 0) { ++ udev_dbg(udev_monitor->udev, "multicast kernel netlink message from pid %d ignored\n", ++ snl.nl.nl_pid); ++ return NULL; + } + } + +@@ -583,35 +574,47 @@ retry: + return NULL; + } + ++ udev_device = udev_device_new(udev_monitor->udev); ++ if (udev_device == NULL) ++ return NULL; ++ + if (memcmp(buf, "libudev", 8) == 0) { ++ struct udev_monitor_netlink_header *nlh; ++ + /* udev message needs proper version magic */ + nlh = (struct udev_monitor_netlink_header *) buf; + if (nlh->magic != htonl(UDEV_MONITOR_MAGIC)) { + udev_err(udev_monitor->udev, "unrecognized message signature (%x != %x)\n", +- nlh->magic, htonl(UDEV_MONITOR_MAGIC)); ++ nlh->magic, htonl(UDEV_MONITOR_MAGIC)); ++ udev_device_unref(udev_device); + return NULL; + } +- if (nlh->properties_off+32 > (size_t)buflen) ++ if (nlh->properties_off+32 > (size_t)buflen) { ++ udev_device_unref(udev_device); + return NULL; ++ } ++ + bufpos = nlh->properties_off; ++ ++ /* devices received from udev are always initialized */ ++ udev_device_set_is_initialized(udev_device); + } else { + /* kernel message with header */ + bufpos = strlen(buf) + 1; + if ((size_t)bufpos < sizeof("a@/d") || bufpos >= buflen) { + udev_dbg(udev_monitor->udev, "invalid message length\n"); ++ udev_device_unref(udev_device); + return NULL; + } + + /* check message header */ + if (strstr(buf, "@/") == NULL) { + udev_dbg(udev_monitor->udev, "unrecognized message header\n"); ++ udev_device_unref(udev_device); + return NULL; + } + } + +- udev_device = udev_device_new(udev_monitor->udev); +- if (udev_device == NULL) +- return NULL; + udev_device_set_info_loaded(udev_device); + + while (bufpos < buflen) { +@@ -664,9 +667,6 @@ int udev_monitor_send_device(struct udev_monitor *udev_monitor, + struct udev_list_entry *list_entry; + uint64_t tag_bloom_bits; + +- if (udev_monitor->snl.nl.nl_family == 0) +- return -EINVAL; +- + blen = udev_device_get_properties_monitor_buf(udev_device, &buf); + if (blen < 32) + return -EINVAL; diff --git a/0180-log-don-t-reopen-dev-console-each-time-we-call-log_o.patch b/0180-log-don-t-reopen-dev-console-each-time-we-call-log_o.patch new file mode 100644 index 0000000..ea04f74 --- /dev/null +++ b/0180-log-don-t-reopen-dev-console-each-time-we-call-log_o.patch @@ -0,0 +1,49 @@ +From df5013c79d99848730abe4585dd93f77409a95c0 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 18 Dec 2013 05:07:34 +0100 +Subject: [PATCH] log: don't reopen /dev/console each time we call log_open() + +Instead, force reopen it only if we really really have to. +--- + src/core/main.c | 1 + + src/core/shutdown.c | 1 + + src/shared/log.c | 2 -- + 3 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/core/main.c b/src/core/main.c +index 58c3a9e..935762f 100644 +--- a/src/core/main.c ++++ b/src/core/main.c +@@ -1347,6 +1347,7 @@ int main(int argc, char *argv[]) { + /* Running inside a container, as PID 1 */ + arg_running_as = SYSTEMD_SYSTEM; + log_set_target(LOG_TARGET_CONSOLE); ++ log_close_console(); /* force reopen of /dev/console */ + log_open(); + + /* For the later on, see above... */ +diff --git a/src/core/shutdown.c b/src/core/shutdown.c +index ea02b60..5e0f3ce 100644 +--- a/src/core/shutdown.c ++++ b/src/core/shutdown.c +@@ -155,6 +155,7 @@ int main(int argc, char *argv[]) { + + log_parse_environment(); + log_set_target(LOG_TARGET_CONSOLE); /* syslog will die if not gone yet */ ++ log_close_console(); /* force reopen of /dev/console */ + log_open(); + + umask(0022); +diff --git a/src/shared/log.c b/src/shared/log.c +index 8f4995a..bd918fb 100644 +--- a/src/shared/log.c ++++ b/src/shared/log.c +@@ -272,8 +272,6 @@ int log_open(void) { + log_close_journal(); + log_close_syslog(); + +- /* Get the real /dev/console if we are PID=1, hence reopen */ +- log_close_console(); + return log_open_console(); + } + diff --git a/0181-log-when-we-log-to-dev-console-and-got-disconnected-.patch b/0181-log-when-we-log-to-dev-console-and-got-disconnected-.patch new file mode 100644 index 0000000..643807f --- /dev/null +++ b/0181-log-when-we-log-to-dev-console-and-got-disconnected-.patch @@ -0,0 +1,42 @@ +From 21804157ff0e60508fd128310505381f7b3ec2b0 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 18 Dec 2013 16:49:15 +0100 +Subject: [PATCH] log: when we log to /dev/console and got disconnected (maybe + due to vhangup) reconnect + +--- + src/shared/log.c | 21 +++++++++++++++++++-- + 1 file changed, 19 insertions(+), 2 deletions(-) + +diff --git a/src/shared/log.c b/src/shared/log.c +index bd918fb..de770ca 100644 +--- a/src/shared/log.c ++++ b/src/shared/log.c +@@ -335,8 +335,25 @@ static int write_to_console( + IOVEC_SET_STRING(iovec[n++], ANSI_HIGHLIGHT_OFF); + IOVEC_SET_STRING(iovec[n++], "\n"); + +- if (writev(console_fd, iovec, n) < 0) +- return -errno; ++ if (writev(console_fd, iovec, n) < 0) { ++ ++ if (errno == EIO && getpid() == 1) { ++ ++ /* If somebody tried to kick us from our ++ * console tty (via vhangup() or suchlike), ++ * try to reconnect */ ++ ++ log_close_console(); ++ log_open_console(); ++ ++ if (console_fd < 0) ++ return 0; ++ ++ if (writev(console_fd, iovec, n) < 0) ++ return -errno; ++ } else ++ return -errno; ++ } + + return 1; + } diff --git a/0182-loginctl-when-showing-device-tree-of-seats-with-no-d.patch b/0182-loginctl-when-showing-device-tree-of-seats-with-no-d.patch new file mode 100644 index 0000000..68ec5ce --- /dev/null +++ b/0182-loginctl-when-showing-device-tree-of-seats-with-no-d.patch @@ -0,0 +1,23 @@ +From d34a6029e4a59c75d9826e0aa57e548a86b08bba Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 18 Dec 2013 17:16:33 +0100 +Subject: [PATCH] loginctl: when showing device tree of seats with no devices + show something useful + +--- + src/login/sysfs-show.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/login/sysfs-show.c b/src/login/sysfs-show.c +index f7d11dd..cb12ebf 100644 +--- a/src/login/sysfs-show.c ++++ b/src/login/sysfs-show.c +@@ -181,6 +181,8 @@ int show_sysfs(const char *seat, const char *prefix, unsigned n_columns) { + first = udev_enumerate_get_list_entry(e); + if (first) + show_sysfs_one(udev, seat, &first, "/", prefix, n_columns); ++ else ++ printf("%s%s%s\n", prefix, draw_special_char(DRAW_TREE_RIGHT), "(none)"); + + return r; + } diff --git a/0183-man-be-more-explicit-about-option-arguments-that-tak.patch b/0183-man-be-more-explicit-about-option-arguments-that-tak.patch new file mode 100644 index 0000000..f930ed0 --- /dev/null +++ b/0183-man-be-more-explicit-about-option-arguments-that-tak.patch @@ -0,0 +1,52 @@ +From 6bd96f28f8d67cb5cb77057e60badb4550ae35f3 Mon Sep 17 00:00:00 2001 +From: "Jason St. John" +Date: Tue, 17 Dec 2013 18:48:43 -0500 +Subject: [PATCH] man: be more explicit about option arguments that take + 128-bit IDs in journalctl(1) + +It may not be immediately obvious to the reader what "ID128" is, so replace the +example option argument "ID128" with "128-bit-ID". +--- + man/journalctl.xml | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/man/journalctl.xml b/man/journalctl.xml +index d936933..dced90f 100644 +--- a/man/journalctl.xml ++++ b/man/journalctl.xml +@@ -725,7 +725,7 @@ + + + + + List the contents of +@@ -734,7 +734,7 @@ + description strings. + + If any +- ID128s are ++ 128-bit-IDs are + specified, only those entries are shown. + + +@@ -742,7 +742,7 @@ + + + + + Show the contents of +@@ -753,7 +753,7 @@ + files. + + If any +- ID128s are ++ 128-bit-IDs are + specified, only those entries are shown. + + diff --git a/0184-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch b/0184-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch new file mode 100644 index 0000000..9e08719 --- /dev/null +++ b/0184-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch @@ -0,0 +1,59 @@ +From 1f3128aec84ea40d54423386384ad28a789cb381 Mon Sep 17 00:00:00 2001 +From: "Jason St. John" +Date: Tue, 17 Dec 2013 19:40:02 -0500 +Subject: [PATCH] man: add DOI for refereed article on Forward Secure Sealing + to journald.conf(5) + +In journalctl(1), be more explicit about the reference to "Seal=" in +journald.conf(5) and what information can be found there. +--- + man/journalctl.xml | 8 ++++++-- + man/journald.conf.xml | 10 +++++----- + 2 files changed, 11 insertions(+), 7 deletions(-) + +diff --git a/man/journalctl.xml b/man/journalctl.xml +index dced90f..d75c758 100644 +--- a/man/journalctl.xml ++++ b/man/journalctl.xml +@@ -781,10 +781,14 @@ + sealing key is stored in the journal + data directory and shall remain on the + host. The verification key should be +- stored externally. Also see the ++ stored externally. Refer to the + option in + journald.conf5 +- for details. ++ for information on Forward Secure ++ Sealing and for a link to a refereed ++ scholarly paper detailing the ++ cryptographic theory it is based on. ++ + + + +diff --git a/man/journald.conf.xml b/man/journald.conf.xml +index 7aa2e78..8e642a3 100644 +--- a/man/journald.conf.xml ++++ b/man/journald.conf.xml +@@ -130,15 +130,15 @@ + by + journalctl1's + +- command), forward secure sealing (FSS) ++ command), Forward Secure Sealing (FSS) + for all persistent journal files is + enabled. FSS is based on Seekable + Sequential Key Generators by +- G. A. Marson and B. Poettering and +- may be used to protect journal files +- from unnoticed +- alteration. ++ G. A. Marson and B. Poettering ++ (doi:10.1007/978-3-642-40203-6_7) ++ and may be used to protect journal files ++ from unnoticed alteration. + + + diff --git a/0185-journalctl-zsh-completion-fix-several-issues-in-help.patch b/0185-journalctl-zsh-completion-fix-several-issues-in-help.patch new file mode 100644 index 0000000..4a8b38f --- /dev/null +++ b/0185-journalctl-zsh-completion-fix-several-issues-in-help.patch @@ -0,0 +1,132 @@ +From 643f82598b69d3b3002294a456a459cceb075cd3 Mon Sep 17 00:00:00 2001 +From: "Jason St. John" +Date: Tue, 17 Dec 2013 21:36:27 -0500 +Subject: [PATCH] journalctl,zsh-completion: fix several issues in --help + message text + +-- fix grammar and reword some descriptions for clarity +-- add a useful description of what --follow does +-- fix the description for --after-cursor +-- properly introduce the FSS acronym for "Forward Secure Sealing" in +both sections +-- clarify the --disk-usage command + +[zj: perform similar changes to zsh completions] + +squash! journalctl: fix several issues in --help message text + +Conflicts: + src/journal/journalctl.c +--- + shell-completion/zsh/_journalctl | 14 +++++++------- + src/journal/journalctl.c | 34 +++++++++++++++++----------------- + 2 files changed, 24 insertions(+), 24 deletions(-) + +diff --git a/shell-completion/zsh/_journalctl b/shell-completion/zsh/_journalctl +index 29ff3e3..8c3dbb0 100644 +--- a/shell-completion/zsh/_journalctl ++++ b/shell-completion/zsh/_journalctl +@@ -71,14 +71,14 @@ _arguments -s \ + {-m,--merge}'[Show entries from all available journals]' \ + {-b+,--boot=}'[Show data only from the specified boot or offset]:boot id or offset:_journal_boots' \ + '--list-boots[List boots ordered by time]' \ +- {-k,--dmesg}'[Show only kernel messages, Implies -b]' \ ++ {-k,--dmesg}'[Show only kernel messages from the current boot]' \ + {-u+,--unit=}'[Show data only from the specified unit]:units:_journal_fields _SYSTEMD_UNIT' \ + '--user-unit=[Show data only from the specified user session unit]:units:_journal_fields USER_UNIT' \ + {-p+,--priority=}'[Show only messages within the specified priority range]:priority:_journal_fields PRIORITY' \ +- {-c+,--cursor=}'[Start showing entries from specified cursor]:cursors:_journal_fields __CURSORS' \ +- '--after-cursor=[Start showing entries from the location in the journal after the cursor]:cursors:_journal_fields __CURSORS' \ +- '--since=[Start showing entries newer or of the specified date]:YYYY-MM-DD HH\:MM\:SS' \ +- '--until=[Stop showing entries older or of the specified date]:YYYY-MM-DD HH\:MM\:SS' \ ++ {-c+,--cursor=}'[Start showing entries from the specified cursor]:cursors:_journal_fields __CURSORS' \ ++ '--after-cursor=[Start showing entries from after the specified cursor]:cursors:_journal_fields __CURSORS' \ ++ '--since=[Start showing entries on or newer than the specified date]:YYYY-MM-DD HH\:MM\:SS' \ ++ '--until=[Stop showing entries on or older than the specified date]:YYYY-MM-DD HH\:MM\:SS' \ + {-F,--field=}'[List all values a certain field takes]:Fields:_list_fields' \ + '--system[Show system and kernel messages]' \ + '--user[Show messages from user services]' \ +@@ -91,8 +91,8 @@ _arguments -s \ + '--list-catalog[List messages in catalog]' \ + '--dump-catalog[Dump messages in catalog]' \ + '--update-catalog[Update binary catalog database]' \ +- '--setup-keys[Generate new FSS key pair]' \ +- '--force[Force recreation of FSS keys]' \ ++ '--setup-keys[Generate a new FSS key pair]' \ ++ '--force[Force recreation of the FSS keys]' \ + '--interval=[Time interval for changing the FSS sealing key]:time interval' \ + '--verify[Verify journal file consistency]' \ + '--verify-key=[Specify FSS verification key]:FSS key' \ +diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c +index 71e28b0..1d66792 100644 +--- a/src/journal/journalctl.c ++++ b/src/journal/journalctl.c +@@ -130,30 +130,30 @@ static int help(void) { + "Query the journal.\n\n" + "Flags:\n" + " --system Show only the system journal\n" +- " --user Show only the user journal for current user\n" +- " --since=DATE Start showing entries newer or of the specified date\n" +- " --until=DATE Stop showing entries older or of the specified date\n" +- " -c --cursor=CURSOR Start showing entries from specified cursor\n" +- " --after-cursor=CURSOR Start showing entries from specified cursor\n" ++ " --user Show only the user journal for the current user\n" ++ " --since=DATE Start showing entries on or newer than the specified date\n" ++ " --until=DATE Stop showing entries on or older than the specified date\n" ++ " -c --cursor=CURSOR Start showing entries from the specified cursor\n" ++ " --after-cursor=CURSOR Start showing entries from after the specified cursor\n" + " --show-cursor Print the cursor after all the entries\n" +- " -b --boot[=ID] Show data only from ID or current boot if unspecified\n" ++ " -b --boot[=ID] Show data only from ID or, if unspecified, the current boot\n" + " --list-boots Show terse information about recorded boots\n" +- " -k --dmesg Show kernel message log from current boot\n" ++ " -k --dmesg Show kernel message log from the current boot\n" + " -u --unit=UNIT Show data only from the specified unit\n" + " --user-unit=UNIT Show data only from the specified user session unit\n" + " -p --priority=RANGE Show only messages within the specified priority range\n" + " -e --pager-end Immediately jump to end of the journal in the pager\n" +- " -f --follow Follow journal\n" ++ " -f --follow Follow the journal\n" + " -n --lines[=INTEGER] Number of journal entries to show\n" + " --no-tail Show all lines, even in follow mode\n" + " -r --reverse Show the newest entries first\n" + " -o --output=STRING Change journal output mode (short, short-iso,\n" +- " short-precise, short-monotonic, verbose,\n" +- " export, json, json-pretty, json-sse, cat)\n" ++ " short-precise, short-monotonic, verbose,\n" ++ " export, json, json-pretty, json-sse, cat)\n" + " -x --catalog Add message explanations where available\n" + " -l --full Do not ellipsize fields\n" + " -a --all Show all fields, including long and unprintable\n" +- " -q --quiet Don't show privilege warning\n" ++ " -q --quiet Do not show privilege warning\n" + " --no-pager Do not pipe output into a pager\n" + " -m --merge Show entries from all available journals\n" + " -D --directory=PATH Show journal files from directory\n" +@@ -162,20 +162,20 @@ static int help(void) { + #ifdef HAVE_GCRYPT + " --interval=TIME Time interval for changing the FSS sealing key\n" + " --verify-key=KEY Specify FSS verification key\n" +- " --force Force overriding new FSS key pair with --setup-keys\n" ++ " --force Force overriding of the FSS key pair with --setup-keys\n" + #endif + "\nCommands:\n" +- " -h --help Show this help\n" ++ " -h --help Show this help text\n" + " --version Show package version\n" +- " --new-id128 Generate a new 128 Bit ID\n" ++ " --new-id128 Generate a new 128-bit ID\n" + " --header Show journal header information\n" +- " --disk-usage Show total disk usage\n" +- " -F --field=FIELD List all values a certain field takes\n" ++ " --disk-usage Show total disk usage of all journal files\n" ++ " -F --field=FIELD List all values that a specified field takes\n" + " --list-catalog Show message IDs of all entries in the message catalog\n" + " --dump-catalog Show entries in the message catalog\n" + " --update-catalog Update the message catalog database\n" + #ifdef HAVE_GCRYPT +- " --setup-keys Generate new FSS key pair\n" ++ " --setup-keys Generate a new FSS key pair\n" + " --verify Verify journal file consistency\n" + #endif + , program_invocation_short_name); diff --git a/0186-keymap-Refactor-Acer-tables.patch b/0186-keymap-Refactor-Acer-tables.patch new file mode 100644 index 0000000..424f2b1 --- /dev/null +++ b/0186-keymap-Refactor-Acer-tables.patch @@ -0,0 +1,145 @@ +From 7bf8a20c2f52a3684deef37098f7a73a873da93c Mon Sep 17 00:00:00 2001 +From: Martin Pitt +Date: Thu, 19 Dec 2013 08:33:32 +0100 +Subject: [PATCH] keymap: Refactor Acer tables + +Move common keys into generic Acer table, and factorize the model specific +exceptions. +--- + hwdb/60-keyboard.hwdb | 101 ++++++++++++++++++-------------------------------- + 1 file changed, 36 insertions(+), 65 deletions(-) + +diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb +index d4d948d..ab9e569 100644 +--- a/hwdb/60-keyboard.hwdb ++++ b/hwdb/60-keyboard.hwdb +@@ -46,52 +46,7 @@ + # Acer + ########################################## + +-# Acer platform kernel driver +-keyboard:name:Acer WMI hotkeys:dmi:bvn*:bvr*:bd*:svn*:pnAcer*:pvr* +- KEYBOARD_KEY_82=f21 +- +-# Aspire 5720 +-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*5720*:pvr* +-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnZG8*:pvr* +- KEYBOARD_KEY_84=bluetooth # sent when bluetooth module missing, and key pressed +- KEYBOARD_KEY_92=media # Acer arcade +- KEYBOARD_KEY_d4=bluetooth # Bluetooth on +- KEYBOARD_KEY_d9=bluetooth # Bluetooth off +- KEYBOARD_KEY_f4=prog3 # e-key +- +-# Aspire 5920g +-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*5920G:* +- KEYBOARD_KEY_8a=media +- KEYBOARD_KEY_92=media +- KEYBOARD_KEY_a6=setup +- KEYBOARD_KEY_b2=www +- KEYBOARD_KEY_d9=bluetooth # (toggle) on-to-off +- +-# Aspire 6920 +-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*6920:* +- KEYBOARD_KEY_d9=bluetooth # (toggle) on-to-off +- KEYBOARD_KEY_92=media +- KEYBOARD_KEY_9e=back +- KEYBOARD_KEY_83=rewind +- KEYBOARD_KEY_89=fastforward +- +-# Aspire 8930 +-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*8930:* +- KEYBOARD_KEY_ca=prog3 # key 'HOLD' on CineDash Media Console +- KEYBOARD_KEY_83=rewind +- KEYBOARD_KEY_89=fastforward +- KEYBOARD_KEY_92=media # key 'ARCADE' on CineDash Media Console +- KEYBOARD_KEY_9e=back +- +-# Travelmate C300 +-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*C3[01]0*:pvr* +- KEYBOARD_KEY_67=f24 # FIXME: rotate screen +- KEYBOARD_KEY_68=up +- KEYBOARD_KEY_69=down +- KEYBOARD_KEY_6b=fn +- KEYBOARD_KEY_6c=screenlock # FIXME: lock tablet device/buttons +- +-# ++# common keys + keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn* + keyboard:dmi:bvn*:bvr*:bd*:svnGateway*:pnA0A1*:pvr* + keyboard:dmi:bvn*:bvr*:bd*:svneMachines:pneMachines*E725:pvr* +@@ -99,6 +54,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svneMachines:pneMachines*E725:pvr* + KEYBOARD_KEY_a6=setup # Fn+F2 Acer eSettings + KEYBOARD_KEY_a7=battery # Fn+F3 Power Management + KEYBOARD_KEY_a9=switchvideomode # Fn+F5 ++ KEYBOARD_KEY_b2=www + KEYBOARD_KEY_b3=euro + KEYBOARD_KEY_b4=dollar + KEYBOARD_KEY_ce=brightnessup # Fn+Right +@@ -118,33 +74,48 @@ keyboard:dmi:bvn*:bvr*:bd*:svneMachines:pneMachines*E725:pvr* + KEYBOARD_KEY_f8=fn + KEYBOARD_KEY_f9=prog1 # Launch NTI shadow + +-# ++# Acer platform kernel driver ++keyboard:name:Acer WMI hotkeys:dmi:bvn*:bvr*:bd*:svn*:pnAcer*:pvr* ++ KEYBOARD_KEY_82=f21 # Touchpad toggle ++ ++# Aspire models ++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*:pvr* ++ KEYBOARD_KEY_84=bluetooth # sent when bluetooth module missing, and key pressed ++ KEYBOARD_KEY_d9=bluetooth # Bluetooth off ++ KEYBOARD_KEY_92=media # Acer arcade ++ ++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*5720*:pvr* ++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnZG8*:pvr* ++ KEYBOARD_KEY_f4=prog3 # e-key ++ ++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*5920G:* ++ KEYBOARD_KEY_8a=media ++ KEYBOARD_KEY_a6=setup ++ ++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*6920:* ++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*8930:* ++ KEYBOARD_KEY_ca=prog3 # key 'HOLD' on CineDash Media Console ++ KEYBOARD_KEY_83=rewind ++ KEYBOARD_KEY_89=fastforward ++ KEYBOARD_KEY_9e=back ++ ++# Travelmate C300 ++keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*C3[01]0*:pvr* ++ KEYBOARD_KEY_67=f24 # FIXME: rotate screen ++ KEYBOARD_KEY_68=up ++ KEYBOARD_KEY_69=down ++ KEYBOARD_KEY_6b=fn ++ KEYBOARD_KEY_6c=screenlock # FIXME: lock tablet device/buttons ++ ++# on some models this isn't brightnessup + keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5210*:pvr* + keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5220*:pvr* + keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5610*:pvr* + keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5620*:pvr* + keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5720*:pvr* +- KEYBOARD_KEY_ee=screenlock +- +-# +-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*6292*:pvr* +-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*8471*:pvr* + keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*4720*:pvr* +-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*7720*:pvr* +-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*1810T*:pvr* +-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAO751h:* +-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAO531h:* +- KEYBOARD_KEY_d9=bluetooth +- +-# +-keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*4720*:pvr* +- KEYBOARD_KEY_b2=www +- KEYBOARD_KEY_ee=screenlock +- +-# + keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*6593:* + keyboard:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*1640:* +- KEYBOARD_KEY_b2=www + KEYBOARD_KEY_ee=screenlock + + ########################################################### diff --git a/0187-logging-reduce-send-timeout-to-something-more-sensib.patch b/0187-logging-reduce-send-timeout-to-something-more-sensib.patch new file mode 100644 index 0000000..4c7c234 --- /dev/null +++ b/0187-logging-reduce-send-timeout-to-something-more-sensib.patch @@ -0,0 +1,49 @@ +From f1a638c065df3432bb69cc664b5425b96de13325 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 14 Dec 2013 11:54:26 -0500 +Subject: [PATCH] logging: reduce send timeout to something more sensible + +For a user, the timeout of 1 min per message seems equivalent to a hang. +If journald cannot process a message from PID1 for 10 ms then something +is significantly wrong. It's better to lose the message and continue. +--- + src/shared/log.c | 5 ++++- + src/shared/time-util.c | 7 +++---- + 2 files changed, 7 insertions(+), 5 deletions(-) + +diff --git a/src/shared/log.c b/src/shared/log.c +index de770ca..2267764 100644 +--- a/src/shared/log.c ++++ b/src/shared/log.c +@@ -126,7 +126,10 @@ static int create_log_socket(int type) { + /* We need a blocking fd here since we'd otherwise lose + messages way too early. However, let's not hang forever in the + unlikely case of a deadlock. */ +- timeval_store(&tv, 1*USEC_PER_MINUTE); ++ if (getpid() == 1) ++ timeval_store(&tv, 10 * USEC_PER_MSEC); ++ else ++ timeval_store(&tv, 10 * USEC_PER_SEC); + setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)); + + return fd; +diff --git a/src/shared/time-util.c b/src/shared/time-util.c +index d31401b..505b280 100644 +--- a/src/shared/time-util.c ++++ b/src/shared/time-util.c +@@ -141,12 +141,11 @@ struct timeval *timeval_store(struct timeval *tv, usec_t u) { + if (u == (usec_t) -1) { + tv->tv_sec = (time_t) -1; + tv->tv_usec = (suseconds_t) -1; +- return tv; ++ } else { ++ tv->tv_sec = (time_t) (u / USEC_PER_SEC); ++ tv->tv_usec = (suseconds_t) (u % USEC_PER_SEC); + } + +- tv->tv_sec = (time_t) (u / USEC_PER_SEC); +- tv->tv_usec = (suseconds_t) (u % USEC_PER_SEC); +- + return tv; + } + diff --git a/0188-DEFAULT_PATH_SPLIT_USR-macro.patch b/0188-DEFAULT_PATH_SPLIT_USR-macro.patch new file mode 100644 index 0000000..60d290f --- /dev/null +++ b/0188-DEFAULT_PATH_SPLIT_USR-macro.patch @@ -0,0 +1,43 @@ +From e02f70c30b2ad98e5547faebd1304d5273eb0fe6 Mon Sep 17 00:00:00 2001 +From: Shawn Landden +Date: Fri, 20 Dec 2013 15:35:38 -0800 +Subject: [PATCH] DEFAULT_PATH_SPLIT_USR macro + +--- + src/nspawn/nspawn.c | 2 +- + src/shared/path-util.h | 7 +++++-- + 2 files changed, 6 insertions(+), 3 deletions(-) + +diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c +index 618f9c3..cafc306 100644 +--- a/src/nspawn/nspawn.c ++++ b/src/nspawn/nspawn.c +@@ -1227,7 +1227,7 @@ int main(int argc, char *argv[]) { + gid_t gid = (gid_t) -1; + unsigned n_env = 2; + const char *envp[] = { +- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", ++ "PATH=" DEFAULT_PATH_SPLIT_USR, + "container=systemd-nspawn", /* LXC sets container=lxc, so follow the scheme here */ + NULL, /* TERM */ + NULL, /* HOME */ +diff --git a/src/shared/path-util.h b/src/shared/path-util.h +index 0a42de7..1e58e1b 100644 +--- a/src/shared/path-util.h ++++ b/src/shared/path-util.h +@@ -25,10 +25,13 @@ + + #include "macro.h" + ++#define DEFAULT_PATH_NORMAL "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin" ++#define DEFAULT_PATH_SPLIT_USR DEFAULT_PATH_NORMAL ":/sbin:/bin" ++ + #ifdef HAVE_SPLIT_USR +-# define DEFAULT_PATH "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ++# define DEFAULT_PATH DEFAULT_PATH_SPLIT_USR + #else +-# define DEFAULT_PATH "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin" ++# define DEFAULT_PATH DEFAULT_PATH_NORMAL + #endif + + bool is_path(const char *p) _pure_; diff --git a/0189-fstab-generator-Do-not-try-to-fsck-non-devices.patch b/0189-fstab-generator-Do-not-try-to-fsck-non-devices.patch new file mode 100644 index 0000000..7bb4534 --- /dev/null +++ b/0189-fstab-generator-Do-not-try-to-fsck-non-devices.patch @@ -0,0 +1,28 @@ +From 67ab7e43a7c5623af367193817f5b562d635b0aa Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Thomas=20B=C3=A4chler?= +Date: Sat, 21 Dec 2013 11:22:37 +0100 +Subject: [PATCH] fstab-generator: Do not try to fsck non-devices + +This fixes a regression introduced in 64e70e4 where the mount fails +when fstab is misconfigured with fs_passno > 0 on a virtual file +system like nfs, and the type is specified as "auto". +--- + src/fstab-generator/fstab-generator.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c +index 4137796..8c4c61c 100644 +--- a/src/fstab-generator/fstab-generator.c ++++ b/src/fstab-generator/fstab-generator.c +@@ -153,6 +153,11 @@ static int add_fsck(FILE *f, const char *what, const char *where, const char *ty + if (passno == 0) + return 0; + ++ if (!is_device_path(what)) { ++ log_warning("Checking was requested for \"%s\", but it is not a device.", what); ++ return 0; ++ } ++ + if (type && !streq(type, "auto")) { + int r; + const char *checker; diff --git a/0190-logind-remove-dead-variable.patch b/0190-logind-remove-dead-variable.patch new file mode 100644 index 0000000..59b0a63 --- /dev/null +++ b/0190-logind-remove-dead-variable.patch @@ -0,0 +1,37 @@ +From 45e44dd49cafc1befdc1fb6d948071520335964a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 19 Dec 2013 14:16:46 -0500 +Subject: [PATCH] logind: remove dead variable + +Noticed-by: Jan Alexander Steffens +--- + src/login/logind-user.c | 3 --- + src/login/logind-user.h | 1 - + 2 files changed, 4 deletions(-) + +diff --git a/src/login/logind-user.c b/src/login/logind-user.c +index e2fce5c..b87311c 100644 +--- a/src/login/logind-user.c ++++ b/src/login/logind-user.c +@@ -648,9 +648,6 @@ UserState user_get_state(User *u) { + + assert(u); + +- if (u->closing) +- return USER_CLOSING; +- + if (u->slice_job || u->service_job) + return USER_OPENING; + +diff --git a/src/login/logind-user.h b/src/login/logind-user.h +index b9171d3..a36f456 100644 +--- a/src/login/logind-user.h ++++ b/src/login/logind-user.h +@@ -61,7 +61,6 @@ struct User { + + bool in_gc_queue:1; + bool started:1; +- bool closing:1; + + LIST_HEAD(Session, sessions); + LIST_FIELDS(User, gc_queue); diff --git a/0191-hwdb-update.patch b/0191-hwdb-update.patch new file mode 100644 index 0000000..7359702 --- /dev/null +++ b/0191-hwdb-update.patch @@ -0,0 +1,4917 @@ +From 59f89c783a3dd29bc024be457dfd7ad664d55358 Mon Sep 17 00:00:00 2001 +From: Marcel Holtmann +Date: Sun, 22 Dec 2013 11:32:11 -0800 +Subject: [PATCH] hwdb: update + +Conflicts: + hwdb/20-sdio-vendor-model.hwdb +--- + hwdb/20-OUI.hwdb | 1174 ++++++++++++++++++++++++++++++++++++++++- + hwdb/20-pci-vendor-model.hwdb | 689 ++++++++++++++++++++++-- + hwdb/20-usb-vendor-model.hwdb | 112 +++- + 3 files changed, 1922 insertions(+), 53 deletions(-) + +diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb +index 5067167..92b96ae 100644 +--- a/hwdb/20-OUI.hwdb ++++ b/hwdb/20-OUI.hwdb +@@ -13411,6 +13411,222 @@ OUI:40D855198* + OUI:40D855199* + ID_OUI_FROM_DATABASE=PRESSOL Schmiergeraete GmbH + ++OUI:40D85519A* ++ ID_OUI_FROM_DATABASE=Rohde&Schwarz Topex SA ++ ++OUI:40D85519B* ++ ID_OUI_FROM_DATABASE=Northern Star Technologies ++ ++OUI:40D85519C* ++ ID_OUI_FROM_DATABASE=Parris Service Corporation ++ ++OUI:40D85519D* ++ ID_OUI_FROM_DATABASE=EMAC, Inc. ++ ++OUI:40D85519E* ++ ID_OUI_FROM_DATABASE=Thirdwayv Inc. ++ ++OUI:40D85519F* ++ ID_OUI_FROM_DATABASE=Patria Aviation Oy ++ ++OUI:40D8551A0* ++ ID_OUI_FROM_DATABASE=Futaba Corporation ++ ++OUI:40D8551A1* ++ ID_OUI_FROM_DATABASE=KRONOTECH SRL ++ ++OUI:40D8551A2* ++ ID_OUI_FROM_DATABASE=HIPODROMO DE AGUA CALIENTE, S.A. DE C.V. ++ ++OUI:40D8551A3* ++ ID_OUI_FROM_DATABASE=Noritake Itron Corporation ++ ++OUI:40D8551A4* ++ ID_OUI_FROM_DATABASE=cibite AG ++ ++OUI:40D8551A5* ++ ID_OUI_FROM_DATABASE=DemoPad ++ ++OUI:40D8551A6* ++ ID_OUI_FROM_DATABASE=RB-LINK Wireless ++ ++OUI:40D8551A7* ++ ID_OUI_FROM_DATABASE=ENTEC Electric & Electronic CO., LTD ++ ++OUI:40D8551A8* ++ ID_OUI_FROM_DATABASE=Multiobrabotka ++ ++OUI:40D8551A9* ++ ID_OUI_FROM_DATABASE=Lubino s.r.o. ++ ++OUI:40D8551AA* ++ ID_OUI_FROM_DATABASE=Broachlink Technology Co.,Limited ++ ++OUI:40D8551AB* ++ ID_OUI_FROM_DATABASE=Rosslare Enterprises Limited ++ ++OUI:40D8551AC* ++ ID_OUI_FROM_DATABASE=ELAN SYSTEMS ++ ++OUI:40D8551AD* ++ ID_OUI_FROM_DATABASE=WICHER DIGITAL TECHNIK ++ ++OUI:40D8551AE* ++ ID_OUI_FROM_DATABASE=Autonomous Solutions, Inc ++ ++OUI:40D8551AF* ++ ID_OUI_FROM_DATABASE=Vigitron Inc. ++ ++OUI:40D8551B0* ++ ID_OUI_FROM_DATABASE=Shin-ei Electronic Measuring Co.,Ltd. ++ ++OUI:40D8551B1* ++ ID_OUI_FROM_DATABASE=Logos 01 S.r.l. ++ ++OUI:40D8551B2* ++ ID_OUI_FROM_DATABASE=AGE A. Gilg Elektronik ++ ++OUI:40D8551B3* ++ ID_OUI_FROM_DATABASE=BETTINI SRL ++ ++OUI:40D8551B4* ++ ID_OUI_FROM_DATABASE=Inforce Computing Inc. ++ ++OUI:40D8551B5* ++ ID_OUI_FROM_DATABASE=A+EC Klein Ingenieurbuero ++ ++OUI:40D8551B6* ++ ID_OUI_FROM_DATABASE=Magic Systems ++ ++OUI:40D8551B7* ++ ID_OUI_FROM_DATABASE=TEWS Elektronik GmbH & Co. KG ++ ++OUI:40D8551B8* ++ ID_OUI_FROM_DATABASE=Orion Systems, Inc ++ ++OUI:40D8551B9* ++ ID_OUI_FROM_DATABASE=Beking Industrieele automatisering ++ ++OUI:40D8551BA* ++ ID_OUI_FROM_DATABASE=Creative Lighting And Sound Systems Pty Ltd ++ ++OUI:40D8551BB* ++ ID_OUI_FROM_DATABASE=Micromega Dynamics SA ++ ++OUI:40D8551BC* ++ ID_OUI_FROM_DATABASE=KbDevice,Inc. ++ ++OUI:40D8551BD* ++ ID_OUI_FROM_DATABASE=HORIBA ABX ++ ++OUI:40D8551BE* ++ ID_OUI_FROM_DATABASE=PEEK TRAFFIC ++ ++OUI:40D8551BF* ++ ID_OUI_FROM_DATABASE=shanghai mingding information tech co.Ltd ++ ++OUI:40D8551C0* ++ ID_OUI_FROM_DATABASE=NPB Automation AB ++ ++OUI:40D8551C1* ++ ID_OUI_FROM_DATABASE=Triamec Motion AG ++ ++OUI:40D8551C2* ++ ID_OUI_FROM_DATABASE=Digital Display Systems ++ ++OUI:40D8551C3* ++ ID_OUI_FROM_DATABASE=Cornfed Systems LLC ++ ++OUI:40D8551C4* ++ ID_OUI_FROM_DATABASE=QED Advanced Systems Limited ++ ++OUI:40D8551C6* ++ ID_OUI_FROM_DATABASE=Device Solutions Ltd ++ ++OUI:40D8551C7* ++ ID_OUI_FROM_DATABASE=Wexiödisk AB ++ ++OUI:40D8551C8* ++ ID_OUI_FROM_DATABASE=Sensata Technologies ++ ++OUI:40D8551C9* ++ ID_OUI_FROM_DATABASE=Andy-L Ltd. ++ ++OUI:40D8551CA* ++ ID_OUI_FROM_DATABASE=Rigel Engineering ++ ++OUI:40D8551CB* ++ ID_OUI_FROM_DATABASE=MG S.r.l. ++ ++OUI:40D8551CD* ++ ID_OUI_FROM_DATABASE=YXLON International A/S ++ ++OUI:40D8551CE* ++ ID_OUI_FROM_DATABASE=Peter Huber ++ ++OUI:40D8551CF* ++ ID_OUI_FROM_DATABASE=Omnik New Energy Co., Ltd ++ ++OUI:40D8551D0* ++ ID_OUI_FROM_DATABASE=Webeasy BV ++ ++OUI:40D8551D1* ++ ID_OUI_FROM_DATABASE=Founder Broadband Network Service Co.,Ltd. ++ ++OUI:40D8551D2* ++ ID_OUI_FROM_DATABASE=InventLab s.c. ++ ++OUI:40D8551D3* ++ ID_OUI_FROM_DATABASE=Kaluga Teletypes Manufacturing Plant ++ ++OUI:40D8551D4* ++ ID_OUI_FROM_DATABASE=Prisma Engineering srl ++ ++OUI:40D8551D5* ++ ID_OUI_FROM_DATABASE=FST21 Ltd. ++ ++OUI:40D8551D6* ++ ID_OUI_FROM_DATABASE=EMS Computers Pty Ltd ++ ++OUI:40D8551D7* ++ ID_OUI_FROM_DATABASE=Wheatstone Corporation ++ ++OUI:40D8551D8* ++ ID_OUI_FROM_DATABASE=Owl Computing Technologies, Inc. ++ ++OUI:40D8551D9* ++ ID_OUI_FROM_DATABASE=Commercial Wireless Systems International LLC. ++ ++OUI:40D8551DA* ++ ID_OUI_FROM_DATABASE=Energy Technology and Control Ltd. ++ ++OUI:40D8551DB* ++ ID_OUI_FROM_DATABASE=NIPPON TECHNO LAB.,INC, ++ ++OUI:40D8551DC* ++ ID_OUI_FROM_DATABASE=Aplex Technology Inc. ++ ++OUI:40D8551DD* ++ ID_OUI_FROM_DATABASE=BaOpt Benelux bv ++ ++OUI:40D8551DE* ++ ID_OUI_FROM_DATABASE=Vidisys GmbH ++ ++OUI:40D8551DF* ++ ID_OUI_FROM_DATABASE=Chengdu Meihuan Technology Co.,Ltd ++ ++OUI:40D8551E0* ++ ID_OUI_FROM_DATABASE=Embedded Technology Corporation ++ ++OUI:40D8551E1* ++ ID_OUI_FROM_DATABASE=AD QUALITE ++ ++OUI:40D8551E2* ++ ID_OUI_FROM_DATABASE=ELNEC s.r.o. ++ ++OUI:40D8551E3* ++ ID_OUI_FROM_DATABASE=Mega Electronics Ltd ++ + OUI:000000* + ID_OUI_FROM_DATABASE=XEROX CORPORATION + +@@ -13664,7 +13880,7 @@ OUI:000053* + ID_OUI_FROM_DATABASE=COMPUCORP + + OUI:000054* +- ID_OUI_FROM_DATABASE=MODICON, INC. ++ ID_OUI_FROM_DATABASE=Schnieder Electric + + OUI:000055* + ID_OUI_FROM_DATABASE=COMMISSARIAT A L`ENERGIE ATOM. +@@ -13694,7 +13910,7 @@ OUI:00005D* + ID_OUI_FROM_DATABASE=CS TELECOM + + OUI:00005E* +- ID_OUI_FROM_DATABASE=USC INFORMATION SCIENCES INST ++ ID_OUI_FROM_DATABASE=ICANN, IANA Department + + OUI:00005F* + ID_OUI_FROM_DATABASE=SUMITOMO ELECTRIC IND., LTD. +@@ -17957,7 +18173,7 @@ OUI:0005ED* + ID_OUI_FROM_DATABASE=Technikum Joanneum GmbH + + OUI:0005EE* +- ID_OUI_FROM_DATABASE=BEWATOR Group ++ ID_OUI_FROM_DATABASE=Siemens AB, Infrastructure & Cities, Building Technologies Division, IC BT SSP SP BA PR + + OUI:0005EF* + ID_OUI_FROM_DATABASE=ADOIR Digital Technology +@@ -19412,7 +19628,7 @@ OUI:0007D2* + ID_OUI_FROM_DATABASE=Logopak Systeme GmbH & Co. KG + + OUI:0007D3* +- ID_OUI_FROM_DATABASE=Stork Prints B.V. ++ ID_OUI_FROM_DATABASE=SPGPrints B.V. + + OUI:0007D4* + ID_OUI_FROM_DATABASE=Zhejiang Yutong Network Communication Co Ltd. +@@ -19613,7 +19829,7 @@ OUI:000815* + ID_OUI_FROM_DATABASE=CATS Co., Ltd. + + OUI:000816* +- ID_OUI_FROM_DATABASE=Bluetags A/S ++ ID_OUI_FROM_DATABASE=Bluelon ApS + + OUI:000817* + ID_OUI_FROM_DATABASE=EmergeCore Networks LLC +@@ -29819,7 +30035,7 @@ OUI:001587* + ID_OUI_FROM_DATABASE=Takenaka Seisakusho Co.,Ltd + + OUI:001588* +- ID_OUI_FROM_DATABASE=Balda Solution Malaysia Sdn Bhd ++ ID_OUI_FROM_DATABASE=Salutica Allied Solutions Sdn Bhd + + OUI:001589* + ID_OUI_FROM_DATABASE=D-MAX Technology Co.,Ltd +@@ -33935,7 +34151,7 @@ OUI:001AE7* + ID_OUI_FROM_DATABASE=Aztek Networks, Inc. + + OUI:001AE8* +- ID_OUI_FROM_DATABASE=Siemens Enterprise Communications GmbH & Co. KG ++ ID_OUI_FROM_DATABASE=Unify GmbH and Co KG + + OUI:001AE9* + ID_OUI_FROM_DATABASE=Nintendo Co., Ltd. +@@ -36926,7 +37142,7 @@ OUI:001ECC* + ID_OUI_FROM_DATABASE=2Wire, Inc. + + OUI:001ECD* +- ID_OUI_FROM_DATABASE=2Wire, Inc. ++ ID_OUI_FROM_DATABASE=KYLAND Technology Co. LTD + + OUI:001ECE* + ID_OUI_FROM_DATABASE=2Wire, Inc. +@@ -40337,7 +40553,7 @@ OUI:002340* + ID_OUI_FROM_DATABASE=MiX Telematics + + OUI:002341* +- ID_OUI_FROM_DATABASE=Siemens AG, Infrastructure & Cities Sector, Building Technologies Division ++ ID_OUI_FROM_DATABASE=Siemens AB, Infrastructure & Cities, Building Technologies Division, IC BT SSP SP BA PR + + OUI:002342* + ID_OUI_FROM_DATABASE=Coffee Equipment Company +@@ -42200,7 +42416,7 @@ OUI:0025B8* + ID_OUI_FROM_DATABASE=Agile Communications, Inc. + + OUI:0025B9* +- ID_OUI_FROM_DATABASE=Agilink Systems Corp. ++ ID_OUI_FROM_DATABASE=Cypress Solutions Inc + + OUI:0025BA* + ID_OUI_FROM_DATABASE=Alcatel-Lucent IPD +@@ -44405,7 +44621,7 @@ OUI:004065* + ID_OUI_FROM_DATABASE=GTE SPACENET + + OUI:004066* +- ID_OUI_FROM_DATABASE=HITACHI CABLE, LTD. ++ ID_OUI_FROM_DATABASE=Hitachi Metals, Ltd. + + OUI:004067* + ID_OUI_FROM_DATABASE=OMNIBYTE CORPORATION +@@ -46100,7 +46316,7 @@ OUI:0060A3* + ID_OUI_FROM_DATABASE=CONTINUUM TECHNOLOGY CORP. + + OUI:0060A4* +- ID_OUI_FROM_DATABASE=GRINAKER SYSTEM TECHNOLOGIES ++ ID_OUI_FROM_DATABASE=GEW Technologies (PTY)Ltd + + OUI:0060A5* + ID_OUI_FROM_DATABASE=PERFORMANCE TELECOM CORP. +@@ -46904,7 +47120,7 @@ OUI:0080A1* + ID_OUI_FROM_DATABASE=MICROTEST, INC. + + OUI:0080A2* +- ID_OUI_FROM_DATABASE=Tattile SRL ++ ID_OUI_FROM_DATABASE=CREATIVE ELECTRONIC SYSTEMS + + OUI:0080A3* + ID_OUI_FROM_DATABASE=Lantronix +@@ -47188,6 +47404,9 @@ OUI:0080FF* + OUI:008865* + ID_OUI_FROM_DATABASE=Apple + ++OUI:008B43* ++ ID_OUI_FROM_DATABASE=RFTECH ++ + OUI:008C10* + ID_OUI_FROM_DATABASE=Black Box Corp. + +@@ -47980,6 +48199,9 @@ OUI:0091D6* + OUI:0091FA* + ID_OUI_FROM_DATABASE=Synapse Product Development + ++OUI:0092FA* ++ ID_OUI_FROM_DATABASE=SHENZHEN WISKY TECHNOLOGY CO.,LTD ++ + OUI:009363* + ID_OUI_FROM_DATABASE=Uni-Link Technology Co., Ltd. + +@@ -51340,6 +51562,9 @@ OUI:00E8AB* + OUI:00EB2D* + ID_OUI_FROM_DATABASE=Sony Mobile Communications AB + ++OUI:00EEBD* ++ ID_OUI_FROM_DATABASE=HTC Corporation ++ + OUI:00F051* + ID_OUI_FROM_DATABASE=KWB Gmbh + +@@ -51481,6 +51706,9 @@ OUI:044BFF* + OUI:044CEF* + ID_OUI_FROM_DATABASE=Fujian Sanao Technology Co.,Ltd + ++OUI:044E06* ++ ID_OUI_FROM_DATABASE=Ericsson AB ++ + OUI:044F8B* + ID_OUI_FROM_DATABASE=Adapteva, Inc. + +@@ -51628,6 +51856,9 @@ OUI:04DAD2* + OUI:04DB56* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:04DB8A* ++ ID_OUI_FROM_DATABASE=Suntech International Ltd. ++ + OUI:04DD4C* + ID_OUI_FROM_DATABASE=Velocytech + +@@ -51664,6 +51895,9 @@ OUI:04EE91* + OUI:04F021* + ID_OUI_FROM_DATABASE=Compex Systems Pte Ltd + ++OUI:04F13E* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:04F17D* + ID_OUI_FROM_DATABASE=Tarana Wireless + +@@ -52117,6 +52351,12 @@ OUI:08008F* + OUI:080090* + ID_OUI_FROM_DATABASE=SONOMA SYSTEMS + ++OUI:080371* ++ ID_OUI_FROM_DATABASE=KRG CORPORATE ++ ++OUI:0805CD* ++ ID_OUI_FROM_DATABASE=DongGuang EnMai Electronic Product Co.Ltd. ++ + OUI:0808C2* + ID_OUI_FROM_DATABASE=Samsung Electronics + +@@ -52204,12 +52444,21 @@ OUI:083E0C* + OUI:083E8E* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind.Co.Ltd + ++OUI:083F3E* ++ ID_OUI_FROM_DATABASE=WSH GmbH ++ ++OUI:083F76* ++ ID_OUI_FROM_DATABASE=Intellian Technologies, Inc. ++ + OUI:084027* + ID_OUI_FROM_DATABASE=Gridstore Inc. + + OUI:08482C* + ID_OUI_FROM_DATABASE=Raycore Taiwan Co., LTD. + ++OUI:084929* ++ ID_OUI_FROM_DATABASE=CYBATI ++ + OUI:084E1C* + ID_OUI_FROM_DATABASE=H2A Systems, LLC + +@@ -52222,6 +52471,9 @@ OUI:08512E* + OUI:085240* + ID_OUI_FROM_DATABASE=EbV Elektronikbau- und Vertriebs GmbH + ++OUI:085700* ++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. ++ + OUI:085AE0* + ID_OUI_FROM_DATABASE=Recovision Technology Co., Ltd. + +@@ -52240,6 +52492,9 @@ OUI:0868D0* + OUI:0868EA* + ID_OUI_FROM_DATABASE=EITO ELECTRONICS CO., LTD. + ++OUI:086DF2* ++ ID_OUI_FROM_DATABASE=Shenzhen MIMOWAVE Technology Co.,Ltd ++ + OUI:087045* + ID_OUI_FROM_DATABASE=Apple + +@@ -52450,6 +52705,9 @@ OUI:0C3956* + OUI:0C3C65* + ID_OUI_FROM_DATABASE=Dome Imaging Inc + ++OUI:0C3E9F* ++ ID_OUI_FROM_DATABASE=Apple, Inc ++ + OUI:0C469D* + ID_OUI_FROM_DATABASE=MS Sedco + +@@ -52462,6 +52720,9 @@ OUI:0C4C39* + OUI:0C4DE9* + ID_OUI_FROM_DATABASE=Apple + ++OUI:0C4F5A* ++ ID_OUI_FROM_DATABASE=ASA-RT s.r.l. ++ + OUI:0C51F7* + ID_OUI_FROM_DATABASE=CHAUVIN ARNOUX + +@@ -52597,6 +52858,9 @@ OUI:0CC0C0* + OUI:0CC3A7* + ID_OUI_FROM_DATABASE=Meritec + ++OUI:0CC47A* ++ ID_OUI_FROM_DATABASE=Super Micro Computer, Inc. ++ + OUI:0CC47E* + ID_OUI_FROM_DATABASE=EUCAST Co., Ltd. + +@@ -52657,6 +52921,9 @@ OUI:0CDDEF* + OUI:0CDFA4* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:0CE0E4* ++ ID_OUI_FROM_DATABASE=Plantronics, Inc ++ + OUI:0CE5D3* + ID_OUI_FROM_DATABASE=DH electronics GmbH + +@@ -52765,6 +53032,9 @@ OUI:101F74* + OUI:102279* + ID_OUI_FROM_DATABASE=ZeroDesktop, Inc. + ++OUI:1027BE* ++ ID_OUI_FROM_DATABASE=TVIP ++ + OUI:102831* + ID_OUI_FROM_DATABASE=Morion Inc. + +@@ -52954,6 +53224,12 @@ OUI:10D542* + OUI:10DDB1* + ID_OUI_FROM_DATABASE=Apple + ++OUI:10DDF4* ++ ID_OUI_FROM_DATABASE=Maxway Electronics CO.,LTD ++ ++OUI:10DEE4* ++ ID_OUI_FROM_DATABASE=automationNEXT GmbH ++ + OUI:10E2D5* + ID_OUI_FROM_DATABASE=Qi Hardware Inc. + +@@ -53155,6 +53431,12 @@ OUI:14B1C8* + OUI:14B73D* + ID_OUI_FROM_DATABASE=ARCHEAN Technologies + ++OUI:14B968* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ ++OUI:14C089* ++ ID_OUI_FROM_DATABASE=DUNE HD LTD ++ + OUI:14C21D* + ID_OUI_FROM_DATABASE=Sabtech Industries + +@@ -53275,6 +53557,9 @@ OUI:182012* + OUI:182032* + ID_OUI_FROM_DATABASE=Apple + ++OUI:1820A6* ++ ID_OUI_FROM_DATABASE=Sage Co., Ltd. ++ + OUI:182666* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -53386,6 +53671,9 @@ OUI:1880CE* + OUI:1880F5* + ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd + ++OUI:188331* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:188410* + ID_OUI_FROM_DATABASE=CoreTrust Inc. + +@@ -53401,6 +53689,9 @@ OUI:188796* + OUI:188857* + ID_OUI_FROM_DATABASE=Beijing Jinhong Xi-Dian Information Technology Corp. + ++OUI:1889DF* ++ ID_OUI_FROM_DATABASE=CerebrEX Inc. ++ + OUI:188ED5* + ID_OUI_FROM_DATABASE=TP Vision Belgium N.V. - innovation site Brugge + +@@ -53491,6 +53782,9 @@ OUI:18E288* + OUI:18E2C2* + ID_OUI_FROM_DATABASE=Samsung Electronics + ++OUI:18E728* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:18E7F4* + ID_OUI_FROM_DATABASE=Apple + +@@ -53521,6 +53815,9 @@ OUI:18FC9F* + OUI:18FE34* + ID_OUI_FROM_DATABASE=Espressif Inc. + ++OUI:18FF2E* ++ ID_OUI_FROM_DATABASE=Shenzhen Rui Ying Da Technology Co., Ltd ++ + OUI:1C0656* + ID_OUI_FROM_DATABASE=IDY Corporation + +@@ -53551,6 +53848,9 @@ OUI:1C184A* + OUI:1C19DE* + ID_OUI_FROM_DATABASE=eyevis GmbH + ++OUI:1C1B68* ++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc. ++ + OUI:1C1D67* + ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd + +@@ -53707,6 +54007,9 @@ OUI:1CA770* + OUI:1CAA07* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + ++OUI:1CAB01* ++ ID_OUI_FROM_DATABASE=Innovolt ++ + OUI:1CABA7* + ID_OUI_FROM_DATABASE=Apple + +@@ -53770,6 +54073,9 @@ OUI:1CE62B* + OUI:1CE6C7* + ID_OUI_FROM_DATABASE=Cisco + ++OUI:1CEEE8* ++ ID_OUI_FROM_DATABASE=Ilshin Elecom ++ + OUI:1CF061* + ID_OUI_FROM_DATABASE=SCAPS GmbH + +@@ -53779,6 +54085,9 @@ OUI:1CF5E7* + OUI:1CFA68* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + ++OUI:1CFCBB* ++ ID_OUI_FROM_DATABASE=Realfiction ApS ++ + OUI:1CFEA7* + ID_OUI_FROM_DATABASE=IDentytech Solutins Ltd. + +@@ -53794,12 +54103,21 @@ OUI:200505* + OUI:2005E8* + ID_OUI_FROM_DATABASE=OOO InProMedia + ++OUI:2008ED* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:200A5E* + ID_OUI_FROM_DATABASE=Xiangshan Giant Eagle Technology Developing co.,LTD + + OUI:200BC7* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:200CC8* ++ ID_OUI_FROM_DATABASE=NETGEAR INC., ++ ++OUI:200E95* ++ ID_OUI_FROM_DATABASE=IEC – TC9 WG43 ++ + OUI:20107A* + ID_OUI_FROM_DATABASE=Gemtek Technology Co., Ltd. + +@@ -53917,6 +54235,9 @@ OUI:207D74* + OUI:20858C* + ID_OUI_FROM_DATABASE=Assa + ++OUI:2087AC* ++ ID_OUI_FROM_DATABASE=AES motomation ++ + OUI:208984* + ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD + +@@ -54022,6 +54343,9 @@ OUI:20E564* + OUI:20E791* + ID_OUI_FROM_DATABASE=Siemens Healthcare Diagnostics, Inc + ++OUI:20EAC7* ++ ID_OUI_FROM_DATABASE=SHENZHEN RIOPINE ELECTRONICS CO., LTD ++ + OUI:20EEC6* + ID_OUI_FROM_DATABASE=Elefirst Science & Tech Co ., ltd + +@@ -54070,6 +54394,9 @@ OUI:241064* + OUI:241125* + ID_OUI_FROM_DATABASE=Hutek Co., Ltd. + ++OUI:241148* ++ ID_OUI_FROM_DATABASE=Entropix, LLC ++ + OUI:2411D0* + ID_OUI_FROM_DATABASE=Chongqing Ehs Science and Technology Development Co.,Ltd. + +@@ -54085,6 +54412,9 @@ OUI:241F2C* + OUI:2421AB* + ID_OUI_FROM_DATABASE=Sony Ericsson Mobile Communications + ++OUI:242642* ++ ID_OUI_FROM_DATABASE=SHARP Corporation. ++ + OUI:242FFA* + ID_OUI_FROM_DATABASE=Toshiba Global Commerce Solutions + +@@ -54328,6 +54658,9 @@ OUI:281878* + OUI:2818FD* + ID_OUI_FROM_DATABASE=Aditya Infotech Ltd. + ++OUI:282246* ++ ID_OUI_FROM_DATABASE=Beijing Sinoix Communication Co., LTD ++ + OUI:2826A6* + ID_OUI_FROM_DATABASE=PBR electronics GmbH + +@@ -54397,6 +54730,12 @@ OUI:286046* + OUI:286094* + ID_OUI_FROM_DATABASE=CAPELEC + ++OUI:286336* ++ ID_OUI_FROM_DATABASE=Siemens AG - Industrial Automation - EWA ++ ++OUI:28656B* ++ ID_OUI_FROM_DATABASE=Keystone Microtech Corporation ++ + OUI:286AB8* + ID_OUI_FROM_DATABASE=Apple + +@@ -54451,6 +54790,9 @@ OUI:28987B* + OUI:289A4B* + ID_OUI_FROM_DATABASE=SteelSeries ApS + ++OUI:289AFA* ++ ID_OUI_FROM_DATABASE=TCT Mobile Limited ++ + OUI:289EDF* + ID_OUI_FROM_DATABASE=Danfoss Turbocor Compressors, Inc + +@@ -54487,6 +54829,9 @@ OUI:28BA18* + OUI:28BAB5* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:28BB59* ++ ID_OUI_FROM_DATABASE=RNET Technologies, Inc. ++ + OUI:28BE9B* + ID_OUI_FROM_DATABASE=Technicolor USA Inc. + +@@ -54502,6 +54847,9 @@ OUI:28C68E* + OUI:28C718* + ID_OUI_FROM_DATABASE=Altierre + ++OUI:28C825* ++ ID_OUI_FROM_DATABASE=DellKing Industrial Co., Ltd ++ + OUI:28C914* + ID_OUI_FROM_DATABASE=Taimag Corporation + +@@ -54547,6 +54895,9 @@ OUI:28D997* + OUI:28DB81* + ID_OUI_FROM_DATABASE=Shanghai Guao Electronic Technology Co., Ltd + ++OUI:28DEF6* ++ ID_OUI_FROM_DATABASE=bioMerieux Inc. ++ + OUI:28E02C* + ID_OUI_FROM_DATABASE=Apple + +@@ -54598,6 +54949,9 @@ OUI:2C00F7* + OUI:2C0623* + ID_OUI_FROM_DATABASE=Win Leader Inc. + ++OUI:2C073C* ++ ID_OUI_FROM_DATABASE=DEVLINE LIMITED ++ + OUI:2C10C1* + ID_OUI_FROM_DATABASE=Nintendo Co., Ltd. + +@@ -54655,6 +55009,9 @@ OUI:2C3A28* + OUI:2C3BFD* + ID_OUI_FROM_DATABASE=Netstor Technology Co., Ltd. + ++OUI:2C3ECF* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:2C3F38* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + +@@ -54673,6 +55030,9 @@ OUI:2C441B* + OUI:2C44FD* + ID_OUI_FROM_DATABASE=Hewlett Packard + ++OUI:2C534A* ++ ID_OUI_FROM_DATABASE=Shenzhen Winyao Electronic Limited ++ + OUI:2C542D* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + +@@ -54748,6 +55108,9 @@ OUI:2C922C* + OUI:2C9464* + ID_OUI_FROM_DATABASE=Cincoze Co., Ltd. + ++OUI:2C957F* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:2C9717* + ID_OUI_FROM_DATABASE=I.C.Y. B.V. + +@@ -55009,6 +55372,9 @@ OUI:3092F6* + OUI:309BAD* + ID_OUI_FROM_DATABASE=BBK Electronics Corp., Ltd., + ++OUI:30A8DB* ++ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB ++ + OUI:30AABD* + ID_OUI_FROM_DATABASE=Shanghai Reallytek Information Technology Co.,Ltd + +@@ -55024,6 +55390,12 @@ OUI:30B216* + OUI:30B3A2* + ID_OUI_FROM_DATABASE=Shenzhen Heguang Measurement & Control Technology Co.,Ltd + ++OUI:30B5C2* ++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. ++ ++OUI:30C750* ++ ID_OUI_FROM_DATABASE=MIC Technology Group ++ + OUI:30C82A* + ID_OUI_FROM_DATABASE=Wi-Next s.r.l. + +@@ -55060,6 +55432,9 @@ OUI:30F31D* + OUI:30F33A* + ID_OUI_FROM_DATABASE=+plugg srl + ++OUI:30F42F* ++ ID_OUI_FROM_DATABASE=ESP ++ + OUI:30F70D* + ID_OUI_FROM_DATABASE=Cisco Systems + +@@ -55087,6 +55462,9 @@ OUI:3413E8* + OUI:34159E* + ID_OUI_FROM_DATABASE=Apple + ++OUI:3417EB* ++ ID_OUI_FROM_DATABASE=Dell Inc PCBA Test ++ + OUI:341A4C* + ID_OUI_FROM_DATABASE=SHENZHEN WEIBU ELECTRONICS CO.,LTD. + +@@ -55117,6 +55495,9 @@ OUI:343111* + OUI:3440B5* + ID_OUI_FROM_DATABASE=IBM + ++OUI:34466F* ++ ID_OUI_FROM_DATABASE=HiTEM Engineering ++ + OUI:344B3D* + ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Tech.Co.,Ltd. + +@@ -55126,6 +55507,9 @@ OUI:344B50* + OUI:344F3F* + ID_OUI_FROM_DATABASE=IO-Power Technology Co., Ltd. + ++OUI:344F5C* ++ ID_OUI_FROM_DATABASE=R&M AG ++ + OUI:344F69* + ID_OUI_FROM_DATABASE=EKINOPS SAS + +@@ -55318,6 +55702,12 @@ OUI:34D7B4* + OUI:34DBFD* + ID_OUI_FROM_DATABASE=Cisco + ++OUI:34DE1A* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ ++OUI:34DE34* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:34DF2A* + ID_OUI_FROM_DATABASE=Fujikon Industrial Co.,Limited + +@@ -55456,6 +55846,9 @@ OUI:386793* + OUI:386BBB* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + ++OUI:386C9B* ++ ID_OUI_FROM_DATABASE=Ivy Biomedical ++ + OUI:386E21* + ID_OUI_FROM_DATABASE=Wasion Group Ltd. + +@@ -55576,9 +55969,15 @@ OUI:38ECE4* + OUI:38EE9D* + ID_OUI_FROM_DATABASE=Anedo Ltd. + ++OUI:38F098* ++ ID_OUI_FROM_DATABASE=Vapor Stone Rail Systems ++ + OUI:38F597* + ID_OUI_FROM_DATABASE=home2net GmbH + ++OUI:38F708* ++ ID_OUI_FROM_DATABASE=National Resource Management, Inc. ++ + OUI:38F8B7* + ID_OUI_FROM_DATABASE=V2COM PARTICIPACOES S.A. + +@@ -55603,9 +56002,15 @@ OUI:3C0771* + OUI:3C081E* + ID_OUI_FROM_DATABASE=Beijing Yupont Electric Power Technology Co.,Ltd + ++OUI:3C08F6* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:3C096D* + ID_OUI_FROM_DATABASE=Powerhouse Dynamics + ++OUI:3C0C48* ++ ID_OUI_FROM_DATABASE=Servergy, Inc. ++ + OUI:3C0E23* + ID_OUI_FROM_DATABASE=Cisco + +@@ -55639,6 +56044,9 @@ OUI:3C1A79* + OUI:3C1CBE* + ID_OUI_FROM_DATABASE=JADAK LLC + ++OUI:3C25D7* ++ ID_OUI_FROM_DATABASE=Nokia Corporation ++ + OUI:3C26D5* + ID_OUI_FROM_DATABASE=Sotera Wireless + +@@ -55744,6 +56152,9 @@ OUI:3C83B5* + OUI:3C86A8* + ID_OUI_FROM_DATABASE=Sangshin elecom .co,, LTD + ++OUI:3C89A6* ++ ID_OUI_FROM_DATABASE=KAPELSE ++ + OUI:3C8AB0* + ID_OUI_FROM_DATABASE=Juniper Networks + +@@ -55837,6 +56248,9 @@ OUI:3CD92B* + OUI:3CDF1E* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + ++OUI:3CDFBD* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:3CE072* + ID_OUI_FROM_DATABASE=Apple + +@@ -55870,6 +56284,9 @@ OUI:3CF748* + OUI:3CFB96* + ID_OUI_FROM_DATABASE=Emcraft Systems LLC + ++OUI:400107* ++ ID_OUI_FROM_DATABASE=Arista Corp ++ + OUI:4001C6* + ID_OUI_FROM_DATABASE=3COM EUROPE LTD + +@@ -55948,6 +56365,9 @@ OUI:40406B* + OUI:404A03* + ID_OUI_FROM_DATABASE=ZyXEL Communications Corporation + ++OUI:404A18* ++ ID_OUI_FROM_DATABASE=Addrek Smart Solutions ++ + OUI:404D8E* + ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd + +@@ -56011,6 +56431,9 @@ OUI:407074* + OUI:407496* + ID_OUI_FROM_DATABASE=aFUN TECHNOLOGY INC. + ++OUI:407875* ++ ID_OUI_FROM_DATABASE=IMBEL - Industria de Material Belico do Brasil ++ + OUI:407A80* + ID_OUI_FROM_DATABASE=Nokia Corporation + +@@ -56059,6 +56482,9 @@ OUI:40A6A4* + OUI:40A6D9* + ID_OUI_FROM_DATABASE=Apple + ++OUI:40A8F0* ++ ID_OUI_FROM_DATABASE=Hewlett Packard ++ + OUI:40AC8D* + ID_OUI_FROM_DATABASE=Data Management, Inc. + +@@ -56164,6 +56590,9 @@ OUI:4403A7* + OUI:440CFD* + ID_OUI_FROM_DATABASE=NetMan Co., Ltd. + ++OUI:4411C2* ++ ID_OUI_FROM_DATABASE=Telegartner Karl Gartner GmbH ++ + OUI:441319* + ID_OUI_FROM_DATABASE=WKK TECHNOLOGY LTD. + +@@ -56182,6 +56611,9 @@ OUI:4423AA* + OUI:4425BB* + ID_OUI_FROM_DATABASE=Bamboo Entertainment Corporation + ++OUI:442938* ++ ID_OUI_FROM_DATABASE=NietZsche enterprise Co.Ltd. ++ + OUI:442A60* + ID_OUI_FROM_DATABASE=Apple + +@@ -56230,6 +56662,9 @@ OUI:443D21* + OUI:443EB2* + ID_OUI_FROM_DATABASE=DEOTRON Co., LTD. + ++OUI:444891* ++ ID_OUI_FROM_DATABASE=HDMI Licensing, LLC ++ + OUI:444A65* + ID_OUI_FROM_DATABASE=Silverflare Ltd. + +@@ -56287,6 +56722,9 @@ OUI:446D57* + OUI:44700B* + ID_OUI_FROM_DATABASE=IFFU + ++OUI:447098* ++ ID_OUI_FROM_DATABASE=MING HONG TECHNOLOGY (SHEN ZHEN) LIMITED ++ + OUI:447BC4* + ID_OUI_FROM_DATABASE=DualShine Technology(SZ)Co.,Ltd + +@@ -56296,6 +56734,9 @@ OUI:447C7F* + OUI:447DA5* + ID_OUI_FROM_DATABASE=VTION INFORMATION TECHNOLOGY (FUJIAN) CO.,LTD + ++OUI:447E76* ++ ID_OUI_FROM_DATABASE=Trek Technology (S) Pte Ltd ++ + OUI:447E95* + ID_OUI_FROM_DATABASE=Alpha and Omega, Inc + +@@ -56365,6 +56806,9 @@ OUI:44C15C* + OUI:44C233* + ID_OUI_FROM_DATABASE=Guangzhou Comet Technology Development Co.Ltd + ++OUI:44C306* ++ ID_OUI_FROM_DATABASE=SIFROM Inc. ++ + OUI:44C39B* + ID_OUI_FROM_DATABASE=OOO RUBEZH NPO + +@@ -56443,6 +56887,9 @@ OUI:4813F3* + OUI:48174C* + ID_OUI_FROM_DATABASE=MicroPower technologies + ++OUI:481842* ++ ID_OUI_FROM_DATABASE=Shanghai Winaas Co. Equipment Co. Ltd. ++ + OUI:481BD2* + ID_OUI_FROM_DATABASE=Intron Scientific co., ltd. + +@@ -56458,6 +56905,9 @@ OUI:4833DD* + OUI:48343D* + ID_OUI_FROM_DATABASE=IEP GmbH + ++OUI:483D32* ++ ID_OUI_FROM_DATABASE=Syscor Controls & Automation ++ + OUI:484487* + ID_OUI_FROM_DATABASE=Cisco SPVTG + +@@ -56476,6 +56926,9 @@ OUI:485261* + OUI:485A3F* + ID_OUI_FROM_DATABASE=WISOL + ++OUI:485AB6* ++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. ++ + OUI:485B39* + ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC. + +@@ -56500,6 +56953,9 @@ OUI:486FD2* + OUI:487119* + ID_OUI_FROM_DATABASE=SGB GROUP LTD. + ++OUI:48746E* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:488E42* + ID_OUI_FROM_DATABASE=DIGALOG GmbH + +@@ -56530,6 +56986,9 @@ OUI:48AA5D* + OUI:48B253* + ID_OUI_FROM_DATABASE=Marketaxess Corporation + ++OUI:48B5A7* ++ ID_OUI_FROM_DATABASE=Glory Horse Industries Ltd. ++ + OUI:48B8DE* + ID_OUI_FROM_DATABASE=HOMEWINS TECHNOLOGY CO.,LTD. + +@@ -56554,6 +57013,9 @@ OUI:48C8B6* + OUI:48CB6E* + ID_OUI_FROM_DATABASE=Cello Electronics (UK) Ltd + ++OUI:48D0CF* ++ ID_OUI_FROM_DATABASE=Universal Electronics, Inc. ++ + OUI:48D224* + ID_OUI_FROM_DATABASE=Liteon Technology Corporation + +@@ -56584,6 +57046,12 @@ OUI:48EB30* + OUI:48ED80* + ID_OUI_FROM_DATABASE=daesung eltec + ++OUI:48EE07* ++ ID_OUI_FROM_DATABASE=Silver Palm Technologies LLC ++ ++OUI:48EE86* ++ ID_OUI_FROM_DATABASE=UTStarcom (China) Co.,Ltd ++ + OUI:48F230* + ID_OUI_FROM_DATABASE=Ubizcore Co.,LTD + +@@ -56605,6 +57073,9 @@ OUI:48F925* + OUI:48FCB8* + ID_OUI_FROM_DATABASE=Woodstream Corporation + ++OUI:48FEEA* ++ ID_OUI_FROM_DATABASE=HOMA B.V. ++ + OUI:4C0082* + ID_OUI_FROM_DATABASE=Cisco + +@@ -56626,6 +57097,9 @@ OUI:4C09B4* + OUI:4C0B3A* + ID_OUI_FROM_DATABASE=TCT Mobile Limited + ++OUI:4C0DEE* ++ ID_OUI_FROM_DATABASE=JABIL CIRCUIT (SHANGHAI) LTD. ++ + OUI:4C0F6E* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + +@@ -56746,6 +57220,9 @@ OUI:4C7897* + OUI:4C79BA* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:4C7F62* ++ ID_OUI_FROM_DATABASE=Nokia Corporation ++ + OUI:4C804F* + ID_OUI_FROM_DATABASE=Armstrong Monitoring Corp + +@@ -56755,6 +57232,9 @@ OUI:4C8093* + OUI:4C82CF* + ID_OUI_FROM_DATABASE=Echostar Technologies + ++OUI:4C8B30* ++ ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc ++ + OUI:4C8B55* + ID_OUI_FROM_DATABASE=Grupo Digicon + +@@ -56779,6 +57259,9 @@ OUI:4C9E80* + OUI:4C9EE4* + ID_OUI_FROM_DATABASE=Hanyang Navicom Co.,Ltd. + ++OUI:4CA56D* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:4CA74B* + ID_OUI_FROM_DATABASE=Alcatel Lucent + +@@ -56833,6 +57316,9 @@ OUI:4CCC34* + OUI:4CD637* + ID_OUI_FROM_DATABASE=Qsono Electronics Co., Ltd + ++OUI:4CD7B6* ++ ID_OUI_FROM_DATABASE=Helmer Scientific ++ + OUI:4CD9C4* + ID_OUI_FROM_DATABASE=Magneti Marelli Automotive Electronics (Guangzhou) Co. Ltd + +@@ -56854,6 +57340,9 @@ OUI:4CEDDE* + OUI:4CF02E* + ID_OUI_FROM_DATABASE=Vifa Denmark A/S + ++OUI:4CF45B* ++ ID_OUI_FROM_DATABASE=Blue Clover Devices ++ + OUI:4CF737* + ID_OUI_FROM_DATABASE=SamJi Electronics Co., Ltd + +@@ -56884,6 +57373,9 @@ OUI:5017FF* + OUI:501AC5* + ID_OUI_FROM_DATABASE=Microsoft + ++OUI:501CBF* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:50206B* + ID_OUI_FROM_DATABASE=Emerson Climate Technologies Transportation Solutions + +@@ -56950,6 +57442,9 @@ OUI:504F94* + OUI:505663* + ID_OUI_FROM_DATABASE=Texas Instruments + ++OUI:5056A8* ++ ID_OUI_FROM_DATABASE=Jolla Ltd ++ + OUI:5057A8* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + +@@ -56959,6 +57454,9 @@ OUI:505AC6* + OUI:506028* + ID_OUI_FROM_DATABASE=Xirrus Inc. + ++OUI:506184* ++ ID_OUI_FROM_DATABASE=Avaya, Inc ++ + OUI:5061D6* + ID_OUI_FROM_DATABASE=Indu-Sol GmbH + +@@ -57025,6 +57523,9 @@ OUI:509871* + OUI:509F27* + ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd + ++OUI:50A054* ++ ID_OUI_FROM_DATABASE=Actineon ++ + OUI:50A0BF* + ID_OUI_FROM_DATABASE=Alba Fiber Systems Inc. + +@@ -57046,6 +57547,9 @@ OUI:50ABBF* + OUI:50AF73* + ID_OUI_FROM_DATABASE=Shenzhen Bitland Information Technology Co., Ltd. + ++OUI:50B695* ++ ID_OUI_FROM_DATABASE=Micropoint Biotechnologies,Inc. ++ + OUI:50B7C3* + ID_OUI_FROM_DATABASE=Samsung Electronics CO., LTD + +@@ -57163,6 +57667,9 @@ OUI:5422F8* + OUI:542696* + ID_OUI_FROM_DATABASE=Apple + ++OUI:54271E* ++ ID_OUI_FROM_DATABASE=AzureWave Technonloies, Inc. ++ + OUI:542A9C* + ID_OUI_FROM_DATABASE=LSY Defense, LLC. + +@@ -57175,6 +57682,9 @@ OUI:542F89* + OUI:543131* + ID_OUI_FROM_DATABASE=Raster Vision Ltd + ++OUI:543530* ++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. ++ + OUI:5435DF* + ID_OUI_FROM_DATABASE=Symeo GmbH + +@@ -57214,6 +57724,9 @@ OUI:545FA9* + OUI:5461EA* + ID_OUI_FROM_DATABASE=Zaplox AB + ++OUI:54724F* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:547398* + ID_OUI_FROM_DATABASE=Toyo Electronics Corporation + +@@ -57274,6 +57787,9 @@ OUI:549D85* + OUI:54A04F* + ID_OUI_FROM_DATABASE=t-mac Technologies Ltd + ++OUI:54A31B* ++ ID_OUI_FROM_DATABASE=Shenzhen Linkworld Technology Co,.LTD ++ + OUI:54A51B* + ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd + +@@ -57286,6 +57802,9 @@ OUI:54A619* + OUI:54A9D4* + ID_OUI_FROM_DATABASE=Minibar Systems + ++OUI:54AE27* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:54B620* + ID_OUI_FROM_DATABASE=SUHDOL E&C Co.Ltd. + +@@ -57295,9 +57814,15 @@ OUI:54BEF7* + OUI:54CDA7* + ID_OUI_FROM_DATABASE=Fujian Shenzhou Electronic Co.,Ltd + ++OUI:54CDEE* ++ ID_OUI_FROM_DATABASE=ShenZhen Apexis Electronic Co.,Ltd ++ + OUI:54D0ED* + ID_OUI_FROM_DATABASE=AXIM Communications + ++OUI:54D163* ++ ID_OUI_FROM_DATABASE=MAX-TECH,INC ++ + OUI:54D1B0* + ID_OUI_FROM_DATABASE=Universal Laser Systems, Inc + +@@ -57310,6 +57835,9 @@ OUI:54DF63* + OUI:54E032* + ID_OUI_FROM_DATABASE=Juniper Networks + ++OUI:54E2E0* ++ ID_OUI_FROM_DATABASE=Pace plc ++ + OUI:54E3B0* + ID_OUI_FROM_DATABASE=JVL Industri Elektronik + +@@ -57337,6 +57865,9 @@ OUI:54FB58* + OUI:54FDBF* + ID_OUI_FROM_DATABASE=Scheidt & Bachmann GmbH + ++OUI:580528* ++ ID_OUI_FROM_DATABASE=LABRIS NETWORKS ++ + OUI:580556* + ID_OUI_FROM_DATABASE=Elettronica GF S.r.L. + +@@ -57346,6 +57877,9 @@ OUI:5808FA* + OUI:5809E5* + ID_OUI_FROM_DATABASE=Kivic Inc. + ++OUI:580A20* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:581243* + ID_OUI_FROM_DATABASE=AcSiP Technology Corp. + +@@ -57394,6 +57928,9 @@ OUI:5846E1* + OUI:5848C0* + ID_OUI_FROM_DATABASE=COFLEC + ++OUI:58493B* ++ ID_OUI_FROM_DATABASE=Palo Alto Networks ++ + OUI:5849BA* + ID_OUI_FROM_DATABASE=Chitai Electronic Corp. + +@@ -57406,6 +57943,9 @@ OUI:584CEE* + OUI:585076* + ID_OUI_FROM_DATABASE=Linear Equipamentos Eletronicos SA + ++OUI:5850AB* ++ ID_OUI_FROM_DATABASE=TLS Corporation ++ + OUI:5850E6* + ID_OUI_FROM_DATABASE=Best Buy Corporation + +@@ -57493,6 +58033,9 @@ OUI:589835* + OUI:58986F* + ID_OUI_FROM_DATABASE=Revolution Display + ++OUI:589CFC* ++ ID_OUI_FROM_DATABASE=FreeBSD Foundation ++ + OUI:58A2B5* + ID_OUI_FROM_DATABASE=LG Electronics + +@@ -57628,6 +58171,9 @@ OUI:5C22C4* + OUI:5C2479* + ID_OUI_FROM_DATABASE=Baltech AG + ++OUI:5C254C* ++ ID_OUI_FROM_DATABASE=Avire Global Pte Ltd ++ + OUI:5C260A* + ID_OUI_FROM_DATABASE=Dell Inc. + +@@ -57757,6 +58303,9 @@ OUI:5CBD9E* + OUI:5CC213* + ID_OUI_FROM_DATABASE=Fr. Sauter AG + ++OUI:5CC5D4* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:5CC6D0* + ID_OUI_FROM_DATABASE=Skyworth Digital technology(shenzhen)co.ltd. + +@@ -57808,6 +58357,9 @@ OUI:5CE286* + OUI:5CE2F4* + ID_OUI_FROM_DATABASE=AcSiP Technology Corp. + ++OUI:5CE7BF* ++ ID_OUI_FROM_DATABASE=New Singularity International Technical Development Co.,Ltd ++ + OUI:5CE8EB* + ID_OUI_FROM_DATABASE=Samsung Electronics + +@@ -57826,6 +58378,9 @@ OUI:5CF370* + OUI:5CF3FC* + ID_OUI_FROM_DATABASE=IBM Corp + ++OUI:5CF50D* ++ ID_OUI_FROM_DATABASE=Institute of microelectronic applications ++ + OUI:5CF6DC* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD + +@@ -57847,6 +58402,9 @@ OUI:5CFFFF* + OUI:6002B4* + ID_OUI_FROM_DATABASE=Wistron NeWeb Corp. + ++OUI:600308* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:600347* + ID_OUI_FROM_DATABASE=Billion Electric Co. Ltd. + +@@ -57874,6 +58432,9 @@ OUI:601D0F* + OUI:601E02* + ID_OUI_FROM_DATABASE=EltexAlatau + ++OUI:602103* ++ ID_OUI_FROM_DATABASE=STCUBE.INC ++ + OUI:6021C0* + ID_OUI_FROM_DATABASE=Murata Manufactuaring Co.,Ltd. + +@@ -58117,12 +58678,18 @@ OUI:60FB42* + OUI:60FE1E* + ID_OUI_FROM_DATABASE=China Palms Telecom.Ltd + ++OUI:60FE20* ++ ID_OUI_FROM_DATABASE=2 Wire ++ + OUI:60FEC5* + ID_OUI_FROM_DATABASE=Apple + + OUI:60FEF9* + ID_OUI_FROM_DATABASE=Thomas & Betts + ++OUI:60FFDD* ++ ID_OUI_FROM_DATABASE=C.E. ELECTRONICS, INC ++ + OUI:6400F1* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + +@@ -58228,6 +58795,9 @@ OUI:645563* + OUI:64557F* + ID_OUI_FROM_DATABASE=NSFOCUS Information Technology Co., Ltd. + ++OUI:6455B1* ++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc. ++ + OUI:645601* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD + +@@ -58363,6 +58933,9 @@ OUI:64AE88* + OUI:64B310* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:64B370* ++ ID_OUI_FROM_DATABASE=PowerComm Solutons LLC ++ + OUI:64B64A* + ID_OUI_FROM_DATABASE=ViVOtech, Inc. + +@@ -58435,12 +59008,18 @@ OUI:64E682* + OUI:64E84F* + ID_OUI_FROM_DATABASE=Serialway Communication Technology Co. Ltd + ++OUI:64E892* ++ ID_OUI_FROM_DATABASE=Morio Denki Co., Ltd. ++ + OUI:64E8E6* + ID_OUI_FROM_DATABASE=global moisture management system + + OUI:64E950* + ID_OUI_FROM_DATABASE=Cisco + ++OUI:64EB8C* ++ ID_OUI_FROM_DATABASE=Seiko Epson Corporation ++ + OUI:64ED57* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + +@@ -58570,6 +59149,9 @@ OUI:687251* + OUI:68764F* + ID_OUI_FROM_DATABASE=Sony Mobile Communications AB + ++OUI:687848* ++ ID_OUI_FROM_DATABASE=Westunitis Co., Ltd. ++ + OUI:68784C* + ID_OUI_FROM_DATABASE=Nortel Networks + +@@ -58594,6 +59176,9 @@ OUI:688470* + OUI:688540* + ID_OUI_FROM_DATABASE=IGI Mobile, Inc. + ++OUI:68856A* ++ ID_OUI_FROM_DATABASE=OuterLink Corporation ++ + OUI:6886A7* + ID_OUI_FROM_DATABASE=Cisco + +@@ -58684,6 +59269,9 @@ OUI:68CE4E* + OUI:68D1FD* + ID_OUI_FROM_DATABASE=Shenzhen Trimax Technology Co.,Ltd + ++OUI:68D247* ++ ID_OUI_FROM_DATABASE=Portalis LC ++ + OUI:68D925* + ID_OUI_FROM_DATABASE=ProSys Development Services + +@@ -58732,6 +59320,9 @@ OUI:68FCB3* + OUI:6C0460* + ID_OUI_FROM_DATABASE=RBH Access Technologies Inc. + ++OUI:6C09D6* ++ ID_OUI_FROM_DATABASE=Digiquest Electronics LTD ++ + OUI:6C0E0D* + ID_OUI_FROM_DATABASE=Sony Ericsson Mobile Communications AB + +@@ -58816,12 +59407,18 @@ OUI:6C5D63* + OUI:6C5E7A* + ID_OUI_FROM_DATABASE=Ubiquitous Internet Telecom Co., Ltd + ++OUI:6C5F1C* ++ ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd. ++ + OUI:6C6126* + ID_OUI_FROM_DATABASE=Rinicom Holdings + + OUI:6C626D* + ID_OUI_FROM_DATABASE=Micro-Star INT'L CO., LTD + ++OUI:6C641A* ++ ID_OUI_FROM_DATABASE=Penguin Computing ++ + OUI:6C6F18* + ID_OUI_FROM_DATABASE=Stereotaxis, Inc. + +@@ -58864,6 +59461,9 @@ OUI:6C92BF* + OUI:6C98EB* + ID_OUI_FROM_DATABASE=Xyne GmbH + ++OUI:6C9989* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:6C9AC9* + ID_OUI_FROM_DATABASE=Valentine Research, Inc. + +@@ -59023,6 +59623,9 @@ OUI:702559* + OUI:702B1D* + ID_OUI_FROM_DATABASE=E-Domus International Limited + ++OUI:702C1F* ++ ID_OUI_FROM_DATABASE=Wisol ++ + OUI:702F4B* + ID_OUI_FROM_DATABASE=PolyVision Inc. + +@@ -59071,6 +59674,9 @@ OUI:704AE4* + OUI:704CED* + ID_OUI_FROM_DATABASE=TMRG, Inc. + ++OUI:704E01* ++ ID_OUI_FROM_DATABASE=KWANGWON TECH CO., LTD. ++ + OUI:7052C5* + ID_OUI_FROM_DATABASE=Avaya, Inc. + +@@ -59389,9 +59995,15 @@ OUI:746630* + OUI:746A89* + ID_OUI_FROM_DATABASE=Rezolt Corporation + ++OUI:746A8F* ++ ID_OUI_FROM_DATABASE=VS Vision Systems GmbH ++ + OUI:746B82* + ID_OUI_FROM_DATABASE=MOVEK + ++OUI:746F3D* ++ ID_OUI_FROM_DATABASE=Contec GmbH ++ + OUI:7472F2* + ID_OUI_FROM_DATABASE=Chipsip Technology Co., Ltd. + +@@ -59413,6 +60025,9 @@ OUI:747E2D* + OUI:74867A* + ID_OUI_FROM_DATABASE=Dell Inc PCBA Test + ++OUI:74882A* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:74888B* + ID_OUI_FROM_DATABASE=ADB Broadband Italia + +@@ -59422,6 +60037,9 @@ OUI:748E08* + OUI:748EF8* + ID_OUI_FROM_DATABASE=Brocade Communications Systems, Inc. + ++OUI:748F1B* ++ ID_OUI_FROM_DATABASE=MasterImage 3D ++ + OUI:749050* + ID_OUI_FROM_DATABASE=Renesas Electronics Corporation + +@@ -59437,6 +60055,9 @@ OUI:74943D* + OUI:749975* + ID_OUI_FROM_DATABASE=IBM Corporation + ++OUI:749C52* ++ ID_OUI_FROM_DATABASE=Huizhou Desay SV Automotive Co., Ltd. ++ + OUI:749DDC* + ID_OUI_FROM_DATABASE=2Wire + +@@ -59467,6 +60088,9 @@ OUI:74BE08* + OUI:74BFA1* + ID_OUI_FROM_DATABASE=HYUNTECK + ++OUI:74C621* ++ ID_OUI_FROM_DATABASE=Zhejiang Hite Renewable Energy Co.,LTD ++ + OUI:74C99A* + ID_OUI_FROM_DATABASE=Ericsson AB + +@@ -59605,6 +60229,9 @@ OUI:78303B* + OUI:7830E1* + ID_OUI_FROM_DATABASE=UltraClenz, LLC + ++OUI:7831C1* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:78324F* + ID_OUI_FROM_DATABASE=Millennium Group, Inc. + +@@ -59614,6 +60241,9 @@ OUI:783CE3* + OUI:783D5B* + ID_OUI_FROM_DATABASE=TELNET Redes Inteligentes S.A. + ++OUI:783E53* ++ ID_OUI_FROM_DATABASE=BSkyB Ltd ++ + OUI:783F15* + ID_OUI_FROM_DATABASE=EasySYNC Ltd. + +@@ -59638,6 +60268,9 @@ OUI:78491D* + OUI:784B08* + ID_OUI_FROM_DATABASE=f.robotics acquisitions ltd + ++OUI:784B87* ++ ID_OUI_FROM_DATABASE=Murata Manufacturing Co.,Ltd. ++ + OUI:78510C* + ID_OUI_FROM_DATABASE=LiveU Ltd. + +@@ -59674,6 +60307,9 @@ OUI:78617C* + OUI:7866AE* + ID_OUI_FROM_DATABASE=ZTEC Instruments, Inc. + ++OUI:786A89* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:786C1C* + ID_OUI_FROM_DATABASE=Apple + +@@ -59737,6 +60373,9 @@ OUI:78A2A0* + OUI:78A3E4* + ID_OUI_FROM_DATABASE=Apple + ++OUI:78A504* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:78A5DD* + ID_OUI_FROM_DATABASE=Shenzhen Smarteye Digital Electronics Co., Ltd + +@@ -59830,6 +60469,9 @@ OUI:78D5B5* + OUI:78D6F0* + ID_OUI_FROM_DATABASE=Samsung Electro Mechanics + ++OUI:78D752* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:78D99F* + ID_OUI_FROM_DATABASE=NuCom HK Ltd. + +@@ -59887,6 +60529,9 @@ OUI:78FE3D* + OUI:78FE41* + ID_OUI_FROM_DATABASE=Socus networks + ++OUI:78FEE2* ++ ID_OUI_FROM_DATABASE=Shanghai Diveo Technology Co., Ltd ++ + OUI:78FF57* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -59929,6 +60574,9 @@ OUI:7C1476* + OUI:7C160D* + ID_OUI_FROM_DATABASE=Saia-Burgess Controls AG + ++OUI:7C1A03* ++ ID_OUI_FROM_DATABASE=8Locations Co., Ltd. ++ + OUI:7C1AFC* + ID_OUI_FROM_DATABASE=Dalian Co-Edifice Video Technology Co., Ltd + +@@ -60058,6 +60706,9 @@ OUI:7C822D* + OUI:7C8306* + ID_OUI_FROM_DATABASE=Glen Dimplex Nordic as + ++OUI:7C8D91* ++ ID_OUI_FROM_DATABASE=Shanghai Hongzhuo Information Technology co.,LTD ++ + OUI:7C8EE4* + ID_OUI_FROM_DATABASE=Texas Instruments + +@@ -60172,6 +60823,9 @@ OUI:7CDD90* + OUI:7CE044* + ID_OUI_FROM_DATABASE=NEON Inc + ++OUI:7CE1FF* ++ ID_OUI_FROM_DATABASE=Computer Performance, Inc. DBA Digital Loggers, Inc. ++ + OUI:7CE56B* + ID_OUI_FROM_DATABASE=ESEN Optoelectronics Technology Co.,Ltd. + +@@ -60214,6 +60868,9 @@ OUI:80000B* + OUI:800010* + ID_OUI_FROM_DATABASE=ATT BELL LABORATORIES + ++OUI:80006E* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:8005DF* + ID_OUI_FROM_DATABASE=Montage Technology Group Limited + +@@ -60307,9 +60964,15 @@ OUI:805719* + OUI:8058C5* + ID_OUI_FROM_DATABASE=NovaTec Kommunikationstechnik GmbH + ++OUI:8059FD* ++ ID_OUI_FROM_DATABASE=Noviga ++ + OUI:806007* + ID_OUI_FROM_DATABASE=RIM + ++OUI:80618F* ++ ID_OUI_FROM_DATABASE=Shenzhen sangfei consumer communications co.,ltd ++ + OUI:806459* + ID_OUI_FROM_DATABASE=Nimbus Inc. + +@@ -60448,6 +61111,9 @@ OUI:80D733* + OUI:80DB31* + ID_OUI_FROM_DATABASE=Power Quotient International Co., Ltd. + ++OUI:80EA96* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:80EE73* + ID_OUI_FROM_DATABASE=Shuttle Inc. + +@@ -60481,6 +61147,9 @@ OUI:840F45* + OUI:841715* + ID_OUI_FROM_DATABASE=GP Electronics (HK) Ltd. + ++OUI:841766* ++ ID_OUI_FROM_DATABASE=Weifang GoerTek Electronics Co., Ltd ++ + OUI:841888* + ID_OUI_FROM_DATABASE=Juniper Networks + +@@ -60502,9 +61171,15 @@ OUI:84248D* + OUI:84253F* + ID_OUI_FROM_DATABASE=Silex Technology, Inc + ++OUI:8425A4* ++ ID_OUI_FROM_DATABASE=Tariox Limited ++ + OUI:8425DB* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:842615* ++ ID_OUI_FROM_DATABASE=ADB Broadband Italia ++ + OUI:84262B* + ID_OUI_FROM_DATABASE=Alcatel-Lucent + +@@ -60586,6 +61261,9 @@ OUI:846AED* + OUI:846EB1* + ID_OUI_FROM_DATABASE=Park Assist LLC + ++OUI:847207* ++ ID_OUI_FROM_DATABASE=I&C Technology ++ + OUI:84742A* + ID_OUI_FROM_DATABASE=zte corporation + +@@ -60610,12 +61288,18 @@ OUI:848336* + OUI:848371* + ID_OUI_FROM_DATABASE=Avaya, Inc + ++OUI:848433* ++ ID_OUI_FROM_DATABASE=Paradox Engineering SA ++ + OUI:848506* + ID_OUI_FROM_DATABASE=Apple + + OUI:848D84* + ID_OUI_FROM_DATABASE=Rajant Corporation + ++OUI:848E0C* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:848E96* + ID_OUI_FROM_DATABASE=Embertec Pty Ltd + +@@ -60838,6 +61522,9 @@ OUI:888717* + OUI:8887DD* + ID_OUI_FROM_DATABASE=DarbeeVision Inc. + ++OUI:888914* ++ ID_OUI_FROM_DATABASE=All Components Incorporated ++ + OUI:888964* + ID_OUI_FROM_DATABASE=GSI Electronics Inc. + +@@ -60853,6 +61540,9 @@ OUI:889166* + OUI:8891DD* + ID_OUI_FROM_DATABASE=Racktivity + ++OUI:889471* ++ ID_OUI_FROM_DATABASE=Brocade Communications Systems, Inc. ++ + OUI:8894F9* + ID_OUI_FROM_DATABASE=Gemicom Technology, Inc. + +@@ -60883,6 +61573,9 @@ OUI:88A3CC* + OUI:88A5BD* + ID_OUI_FROM_DATABASE=QPCOM INC. + ++OUI:88A73C* ++ ID_OUI_FROM_DATABASE=Ragentek Technology Group ++ + OUI:88ACC1* + ID_OUI_FROM_DATABASE=Generiton Co., Ltd. + +@@ -60916,6 +61609,9 @@ OUI:88CB87* + OUI:88D7BC* + ID_OUI_FROM_DATABASE=DEP Company + ++OUI:88D962* ++ ID_OUI_FROM_DATABASE=Canopus Systems US LLC ++ + OUI:88DC96* + ID_OUI_FROM_DATABASE=SENAO Networks, Inc. + +@@ -60928,12 +61624,18 @@ OUI:88E0A0* + OUI:88E0F3* + ID_OUI_FROM_DATABASE=Juniper Networks + ++OUI:88E3AB* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:88E712* + ID_OUI_FROM_DATABASE=Whirlpool Corporation + + OUI:88E7A6* + ID_OUI_FROM_DATABASE=iKnowledge Integration Corp. + ++OUI:88E8F8* ++ ID_OUI_FROM_DATABASE=YONG TAI ELECTRONIC (DONGGUAN) LTD. ++ + OUI:88E917* + ID_OUI_FROM_DATABASE=Tamaggo + +@@ -60949,6 +61651,9 @@ OUI:88F488* + OUI:88F490* + ID_OUI_FROM_DATABASE=Jetmobile Pte Ltd + ++OUI:88F7C7* ++ ID_OUI_FROM_DATABASE=Technicolor USA Inc. ++ + OUI:88FD15* + ID_OUI_FROM_DATABASE=LINEEYE CO., LTD + +@@ -60994,6 +61699,9 @@ OUI:8C271D* + OUI:8C278A* + ID_OUI_FROM_DATABASE=Vocollect Inc + ++OUI:8C2937* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:8C2DAA* + ID_OUI_FROM_DATABASE=Apple + +@@ -61012,6 +61720,9 @@ OUI:8C3C07* + OUI:8C3C4A* + ID_OUI_FROM_DATABASE=NAKAYO TELECOMMUNICATIONS,INC. + ++OUI:8C41F2* ++ ID_OUI_FROM_DATABASE=RDA Technologies Ltd. ++ + OUI:8C4435* + ID_OUI_FROM_DATABASE=Shanghai BroadMobi Communication Technology Co., Ltd. + +@@ -61099,6 +61810,9 @@ OUI:8C7716* + OUI:8C7B9D* + ID_OUI_FROM_DATABASE=Apple + ++OUI:8C7C92* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:8C7CB5* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + +@@ -61153,6 +61867,9 @@ OUI:8CB82C* + OUI:8CB864* + ID_OUI_FROM_DATABASE=AcSiP Technology Corp. + ++OUI:8CBEBE* ++ ID_OUI_FROM_DATABASE=Xiaomi Technology Co.,Ltd ++ + OUI:8CC121* + ID_OUI_FROM_DATABASE=Panasonic Corporation AVC Networks Company + +@@ -61285,6 +62002,9 @@ OUI:902B34* + OUI:902E87* + ID_OUI_FROM_DATABASE=LabJack + ++OUI:9031CD* ++ ID_OUI_FROM_DATABASE=Onyx Healthcare Inc. ++ + OUI:90342B* + ID_OUI_FROM_DATABASE=Gatekeeper Systems, Inc. + +@@ -61324,6 +62044,9 @@ OUI:9049FA* + OUI:904CE5* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + ++OUI:904E2B* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:90507B* + ID_OUI_FROM_DATABASE=Advanced PANMOBIL Systems GmbH & Co. KG + +@@ -61426,6 +62149,9 @@ OUI:9092B4* + OUI:9094E4* + ID_OUI_FROM_DATABASE=D-Link International + ++OUI:909864* ++ ID_OUI_FROM_DATABASE=Impex-Sat GmbH&Co KG ++ + OUI:909916* + ID_OUI_FROM_DATABASE=ELVEES NeoTek OJSC + +@@ -61501,6 +62227,12 @@ OUI:90D92C* + OUI:90DA4E* + ID_OUI_FROM_DATABASE=AVANU + ++OUI:90DB46* ++ ID_OUI_FROM_DATABASE=E-LEAD ELECTRONIC CO., LTD ++ ++OUI:90DFB7* ++ ID_OUI_FROM_DATABASE=s.m.s smart microwave sensors GmbH ++ + OUI:90E0F0* + ID_OUI_FROM_DATABASE=Harman International + +@@ -61513,6 +62245,12 @@ OUI:90E6BA* + OUI:90EA60* + ID_OUI_FROM_DATABASE=SPI Lasers Ltd + ++OUI:90F1AA* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD ++ ++OUI:90F1B0* ++ ID_OUI_FROM_DATABASE=Hangzhou Anheng Info&Tech CO.,LTD ++ + OUI:90F278* + ID_OUI_FROM_DATABASE=Radius Gateway + +@@ -61624,6 +62362,9 @@ OUI:945047* + OUI:945103* + ID_OUI_FROM_DATABASE=Samsung Electronics + ++OUI:9451BF* ++ ID_OUI_FROM_DATABASE=Hyundai ESG ++ + OUI:94592D* + ID_OUI_FROM_DATABASE=EKE Building Technology Systems Ltd + +@@ -61681,6 +62422,9 @@ OUI:949BFD* + OUI:949C55* + ID_OUI_FROM_DATABASE=Alta Data Technologies + ++OUI:949F3F* ++ ID_OUI_FROM_DATABASE=Optek Digital Technology company limited ++ + OUI:949FB4* + ID_OUI_FROM_DATABASE=ChengDu JiaFaAnTai Technology Co.,Ltd + +@@ -61711,6 +62455,9 @@ OUI:94BA56* + OUI:94BF1E* + ID_OUI_FROM_DATABASE=eflow Inc. / Smart Device Planning and Development Division + ++OUI:94C014* ++ ID_OUI_FROM_DATABASE=Sorter Sp. j. Konrad Grzeszczyk MichaA, Ziomek ++ + OUI:94C150* + ID_OUI_FROM_DATABASE=2Wire Inc + +@@ -61939,6 +62686,9 @@ OUI:9873C4* + OUI:9876B6* + ID_OUI_FROM_DATABASE=Adafruit + ++OUI:987770* ++ ID_OUI_FROM_DATABASE=Pep Digital Technology (Guangzhou) Co., Ltd ++ + OUI:988217* + ID_OUI_FROM_DATABASE=Disruptive Ltd + +@@ -61990,6 +62740,9 @@ OUI:98BC57* + OUI:98BC99* + ID_OUI_FROM_DATABASE=Edeltech Co.,Ltd. + ++OUI:98C0EB* ++ ID_OUI_FROM_DATABASE=Global Regency Ltd ++ + OUI:98C845* + ID_OUI_FROM_DATABASE=PacketAccess + +@@ -62026,6 +62779,9 @@ OUI:98E79A* + OUI:98EC65* + ID_OUI_FROM_DATABASE=Cosesy ApS + ++OUI:98F0AB* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:98F537* + ID_OUI_FROM_DATABASE=zte corporation + +@@ -62113,6 +62869,9 @@ OUI:9C31B6* + OUI:9C3AAF* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:9C3EAA* ++ ID_OUI_FROM_DATABASE=EnvyLogic Co.,Ltd. ++ + OUI:9C417C* + ID_OUI_FROM_DATABASE=Hame Technology Co., Limited + +@@ -62179,6 +62938,12 @@ OUI:9C611D* + OUI:9C645E* + ID_OUI_FROM_DATABASE=Harman Consumer Group + ++OUI:9C65B0* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ ++OUI:9C65F9* ++ ID_OUI_FROM_DATABASE=AcSiP Technology Corp. ++ + OUI:9C6650* + ID_OUI_FROM_DATABASE=Glodio Technolies Co.,Ltd Tianjin Branch + +@@ -62203,6 +62968,9 @@ OUI:9C807D* + OUI:9C80DF* + ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation + ++OUI:9C86DA* ++ ID_OUI_FROM_DATABASE=Phoenix Geophysics Ltd. ++ + OUI:9C8888* + ID_OUI_FROM_DATABASE=Simac Techniek NV + +@@ -62272,6 +63040,9 @@ OUI:9CB793* + OUI:9CBB98* + ID_OUI_FROM_DATABASE=Shen Zhen RND Electronic Co.,LTD + ++OUI:9CBD9D* ++ ID_OUI_FROM_DATABASE=SkyDisk, Inc. ++ + OUI:9CC077* + ID_OUI_FROM_DATABASE=PrintCounts, LLC + +@@ -62332,6 +63103,9 @@ OUI:9CF8DB* + OUI:9CF938* + ID_OUI_FROM_DATABASE=AREVA NP GmbH + ++OUI:9CFBF1* ++ ID_OUI_FROM_DATABASE=MESOMATIC GmbH & Co.KG ++ + OUI:9CFFBE* + ID_OUI_FROM_DATABASE=OTSL Inc. + +@@ -62449,6 +63223,9 @@ OUI:A05DE7* + OUI:A05E6B* + ID_OUI_FROM_DATABASE=MELPER Co., Ltd. + ++OUI:A06518* ++ ID_OUI_FROM_DATABASE=VNPT TECHNOLOGY ++ + OUI:A067BE* + ID_OUI_FROM_DATABASE=Sicon s.r.l. + +@@ -62479,6 +63256,9 @@ OUI:A073FC* + OUI:A07591* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:A07771* ++ ID_OUI_FROM_DATABASE=Vialis BV ++ + OUI:A078BA* + ID_OUI_FROM_DATABASE=Pantech Co., Ltd. + +@@ -62500,6 +63280,9 @@ OUI:A08869* + OUI:A088B4* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:A089E4* ++ ID_OUI_FROM_DATABASE=Skyworth Digital Technology(Shenzhen) Co.,Ltd ++ + OUI:A08A87* + ID_OUI_FROM_DATABASE=HuiZhou KaiYue Electronic Co.,Ltd + +@@ -62599,6 +63382,9 @@ OUI:A0E25A* + OUI:A0E295* + ID_OUI_FROM_DATABASE=DAT System Co.,Ltd + ++OUI:A0E453* ++ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB ++ + OUI:A0E534* + ID_OUI_FROM_DATABASE=Stratec Biomedical AG + +@@ -62635,6 +63421,9 @@ OUI:A0F419* + OUI:A0F450* + ID_OUI_FROM_DATABASE=HTC Corporation + ++OUI:A0F459* ++ ID_OUI_FROM_DATABASE=FN-LINK TECHNOLOGY LIMITED ++ + OUI:A0FE91* + ID_OUI_FROM_DATABASE=AVAT Automation GmbH + +@@ -62740,6 +63529,9 @@ OUI:A45D36* + OUI:A46706* + ID_OUI_FROM_DATABASE=Apple + ++OUI:A46CC1* ++ ID_OUI_FROM_DATABASE=LTi REEnergy GmbH ++ + OUI:A46E79* + ID_OUI_FROM_DATABASE=DFT System Co.Ltd + +@@ -62785,6 +63577,9 @@ OUI:A49947* + OUI:A49981* + ID_OUI_FROM_DATABASE=FuJian Elite Power Tech CO.,LTD. + ++OUI:A49A58* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:A49B13* + ID_OUI_FROM_DATABASE=Burroughs Payment Systems, Inc. + +@@ -62836,6 +63631,9 @@ OUI:A4B980* + OUI:A4BADB* + ID_OUI_FROM_DATABASE=Dell Inc. + ++OUI:A4BBAF* ++ ID_OUI_FROM_DATABASE=Lime Instruments ++ + OUI:A4BE61* + ID_OUI_FROM_DATABASE=EutroVision System, Inc. + +@@ -62941,6 +63739,9 @@ OUI:A80180* + OUI:A80600* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:A80C0D* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:A8154D* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + +@@ -62959,6 +63760,9 @@ OUI:A81FAF* + OUI:A82066* + ID_OUI_FROM_DATABASE=Apple + ++OUI:A824EB* ++ ID_OUI_FROM_DATABASE=ZAO NPO Introtest ++ + OUI:A826D9* + ID_OUI_FROM_DATABASE=HTC Corporation + +@@ -62992,6 +63796,9 @@ OUI:A854B2* + OUI:A8556A* + ID_OUI_FROM_DATABASE=Pocketnet Technology Inc. + ++OUI:A8574E* ++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. ++ + OUI:A85BB0* + ID_OUI_FROM_DATABASE=Shenzhen Dehoo Technology Co.,Ltd + +@@ -63034,6 +63841,9 @@ OUI:A87B39* + OUI:A87E33* + ID_OUI_FROM_DATABASE=Nokia Danmark A/S + ++OUI:A881F1* ++ ID_OUI_FROM_DATABASE=BMEYE B.V. ++ + OUI:A886DD* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -63085,12 +63895,18 @@ OUI:A8B0AE* + OUI:A8B1D4* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + ++OUI:A8B9B3* ++ ID_OUI_FROM_DATABASE=ESSYS ++ + OUI:A8BBCF* + ID_OUI_FROM_DATABASE=Apple + + OUI:A8BD1A* + ID_OUI_FROM_DATABASE=Honey Bee (Hong Kong) Limited + ++OUI:A8BD3A* ++ ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD ++ + OUI:A8C222* + ID_OUI_FROM_DATABASE=TM-Research Inc. + +@@ -63157,6 +63973,9 @@ OUI:AA0004* + OUI:AC0142* + ID_OUI_FROM_DATABASE=Uriel Technologies SIA + ++OUI:AC02CA* ++ ID_OUI_FROM_DATABASE=HI Solutions, Inc. ++ + OUI:AC02CF* + ID_OUI_FROM_DATABASE=RW Tecnologia Industria e Comercio Ltda + +@@ -63208,6 +64027,9 @@ OUI:AC319D* + OUI:AC34CB* + ID_OUI_FROM_DATABASE=Shanhai GBCOM Communication Technology Co. Ltd + ++OUI:AC3613* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:AC3C0B* + ID_OUI_FROM_DATABASE=Apple + +@@ -63406,6 +64228,9 @@ OUI:ACCE8F* + OUI:ACCF23* + ID_OUI_FROM_DATABASE=Hi-flying electronics technology Co.,Ltd + ++OUI:ACCF5C* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:ACD180* + ID_OUI_FROM_DATABASE=Crexendo Business Solutions, Inc. + +@@ -63421,6 +64246,9 @@ OUI:ACD9D6* + OUI:ACDBDA* + ID_OUI_FROM_DATABASE=Shenzhen Geniatech Inc, Ltd + ++OUI:ACE069* ++ ID_OUI_FROM_DATABASE=ISAAC Instruments ++ + OUI:ACE215* + ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd + +@@ -63493,6 +64321,9 @@ OUI:B01C91* + OUI:B024F3* + ID_OUI_FROM_DATABASE=Progeny Systems + ++OUI:B03495* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:B0358D* + ID_OUI_FROM_DATABASE=Nokia Corporation + +@@ -63523,6 +64354,9 @@ OUI:B050BC* + OUI:B0518E* + ID_OUI_FROM_DATABASE=Holl technology CO.Ltd. + ++OUI:B05706* ++ ID_OUI_FROM_DATABASE=Vallox Oy ++ + OUI:B058C4* + ID_OUI_FROM_DATABASE=Broadcast Microwave Services, Inc + +@@ -63538,6 +64372,12 @@ OUI:B06563* + OUI:B065BD* + ID_OUI_FROM_DATABASE=Apple + ++OUI:B068B6* ++ ID_OUI_FROM_DATABASE=Hangzhou OYE Technology Co. Ltd ++ ++OUI:B06971* ++ ID_OUI_FROM_DATABASE=DEI Sales, Inc. ++ + OUI:B06CBF* + ID_OUI_FROM_DATABASE=3ality Digital Systems GmbH + +@@ -63568,6 +64408,9 @@ OUI:B0808C* + OUI:B081D8* + ID_OUI_FROM_DATABASE=I-sys Corp + ++OUI:B0869E* ++ ID_OUI_FROM_DATABASE=Chloride S.r.L ++ + OUI:B08807* + ID_OUI_FROM_DATABASE=Strata Worldwide + +@@ -63643,6 +64486,9 @@ OUI:B0BF99* + OUI:B0C4E7* + ID_OUI_FROM_DATABASE=Samsung Electronics + ++OUI:B0C554* ++ ID_OUI_FROM_DATABASE=D-Link International ++ + OUI:B0C69A* + ID_OUI_FROM_DATABASE=Juniper Networks + +@@ -63673,6 +64519,9 @@ OUI:B0D2F5* + OUI:B0D7C5* + ID_OUI_FROM_DATABASE=STP KFT + ++OUI:B0DA00* ++ ID_OUI_FROM_DATABASE=CERA ELECTRONIQUE ++ + OUI:B0DF3A* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -63694,6 +64543,9 @@ OUI:B0E97E* + OUI:B0EC71* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:B0EC8F* ++ ID_OUI_FROM_DATABASE=GMX SAS ++ + OUI:B0EE45* + ID_OUI_FROM_DATABASE=AzureWave Technologies, Inc. + +@@ -63736,6 +64588,9 @@ OUI:B41489* + OUI:B41513* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:B418D1* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:B41DEF* + ID_OUI_FROM_DATABASE=Internet Laboratories, Inc. + +@@ -63754,6 +64609,9 @@ OUI:B428F1* + OUI:B42A39* + ID_OUI_FROM_DATABASE=ORBIT MERRET, spol. s r. o. + ++OUI:B42C92* ++ ID_OUI_FROM_DATABASE=Zhejiang Weirong Electronic Co., Ltd ++ + OUI:B42CBE* + ID_OUI_FROM_DATABASE=Direct Payment Solutions Limited + +@@ -63787,6 +64645,9 @@ OUI:B43E3B* + OUI:B4417A* + ID_OUI_FROM_DATABASE=ShenZhen Gongjin Electronics Co.,Ltd + ++OUI:B4430D* ++ ID_OUI_FROM_DATABASE=Broadlink Pty Ltd ++ + OUI:B44CC2* + ID_OUI_FROM_DATABASE=NR ELECTRIC CO., LTD + +@@ -63847,6 +64708,9 @@ OUI:B482C5* + OUI:B482FE* + ID_OUI_FROM_DATABASE=Askey Computer Corp + ++OUI:B48547* ++ ID_OUI_FROM_DATABASE=Amptown System Company GmbH ++ + OUI:B48910* + ID_OUI_FROM_DATABASE=Coster T.E. S.P.A. + +@@ -63856,6 +64720,9 @@ OUI:B4944E* + OUI:B49842* + ID_OUI_FROM_DATABASE=zte corporation + ++OUI:B4994C* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:B499BA* + ID_OUI_FROM_DATABASE=Hewlett-Packard Company + +@@ -63875,7 +64742,7 @@ OUI:B4A5A9* + ID_OUI_FROM_DATABASE=MODI GmbH + + OUI:B4A82B* +- ID_OUI_FROM_DATABASE=Histar ++ ID_OUI_FROM_DATABASE=Histar Digital Electronics Co., Ltd. + + OUI:B4A95A* + ID_OUI_FROM_DATABASE=Avaya, Inc +@@ -63895,6 +64762,9 @@ OUI:B4B362* + OUI:B4B52F* + ID_OUI_FROM_DATABASE=Hewlett Packard + ++OUI:B4B542* ++ ID_OUI_FROM_DATABASE=Hubbell Power Systems, Inc. ++ + OUI:B4B5AF* + ID_OUI_FROM_DATABASE=Minsung Electronics + +@@ -64021,6 +64891,9 @@ OUI:B830A8* + OUI:B836D8* + ID_OUI_FROM_DATABASE=Videoswitch + ++OUI:B83861* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:B838CA* + ID_OUI_FROM_DATABASE=Kyokko Tsushin System CO.,LTD + +@@ -64036,6 +64909,9 @@ OUI:B83E59* + OUI:B8415F* + ID_OUI_FROM_DATABASE=ASP AG + ++OUI:B843E4* ++ ID_OUI_FROM_DATABASE=Vlatacom ++ + OUI:B847C6* + ID_OUI_FROM_DATABASE=SanJet Technology Corp. + +@@ -64075,6 +64951,9 @@ OUI:B8653B* + OUI:B86B23* + ID_OUI_FROM_DATABASE=Toshiba + ++OUI:B86CE8* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:B870F4* + ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD. + +@@ -64543,6 +65422,9 @@ OUI:BCF2AF* + OUI:BCF5AC* + ID_OUI_FROM_DATABASE=LG Electronics + ++OUI:BCF61C* ++ ID_OUI_FROM_DATABASE=Geomodeling Wuxi Technology Co. Ltd. ++ + OUI:BCF685* + ID_OUI_FROM_DATABASE=D-Link International + +@@ -64762,6 +65644,9 @@ OUI:C0C3B6* + OUI:C0C520* + ID_OUI_FROM_DATABASE=Ruckus Wireless + ++OUI:C0C569* ++ ID_OUI_FROM_DATABASE=SHANGHAI LYNUC CNC TECHNOLOGY CO.,LTD ++ + OUI:C0C687* + ID_OUI_FROM_DATABASE=Cisco SPVTG + +@@ -64798,6 +65683,9 @@ OUI:C0EAE4* + OUI:C0F1C4* + ID_OUI_FROM_DATABASE=Pacidal Corporation Ltd. + ++OUI:C0F79D* ++ ID_OUI_FROM_DATABASE=Powercode ++ + OUI:C0F8DA* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + +@@ -64816,18 +65704,27 @@ OUI:C401B1* + OUI:C40415* + ID_OUI_FROM_DATABASE=NETGEAR INC., + ++OUI:C40528* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:C40938* + ID_OUI_FROM_DATABASE=Fujian Star-net Communication Co., Ltd + + OUI:C40ACB* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + ++OUI:C40E45* ++ ID_OUI_FROM_DATABASE=ACK Networks,Inc. ++ + OUI:C40F09* + ID_OUI_FROM_DATABASE=Hermes electronic GmbH + + OUI:C4108A* + ID_OUI_FROM_DATABASE=Ruckus Wireless + ++OUI:C4143C* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:C416FA* + ID_OUI_FROM_DATABASE=Prysm Inc + +@@ -64858,6 +65755,9 @@ OUI:C42628* + OUI:C42795* + ID_OUI_FROM_DATABASE=Technicolor USA Inc. + ++OUI:C4291D* ++ ID_OUI_FROM_DATABASE=KLEMSAN ELEKTRIK ELEKTRONIK SAN.VE TIC.AS. ++ + OUI:C42C03* + ID_OUI_FROM_DATABASE=Apple + +@@ -64900,9 +65800,15 @@ OUI:C44AD0* + OUI:C44B44* + ID_OUI_FROM_DATABASE=Omniprint Inc. + ++OUI:C44E1F* ++ ID_OUI_FROM_DATABASE=BlueN ++ + OUI:C44EAC* + ID_OUI_FROM_DATABASE=Shenzhen Shiningworth Technology Co., Ltd. + ++OUI:C45006* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:C45444* + ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC. + +@@ -65002,6 +65908,9 @@ OUI:C495A2* + OUI:C49805* + ID_OUI_FROM_DATABASE=Minieum Networks, Inc + ++OUI:C4A81D* ++ ID_OUI_FROM_DATABASE=D-Link International ++ + OUI:C4AAA1* + ID_OUI_FROM_DATABASE=SUMMIT DEVELOPMENT, spol.s r.o. + +@@ -65014,12 +65923,18 @@ OUI:C4B512* + OUI:C4BA99* + ID_OUI_FROM_DATABASE=I+ME Actia Informatik und Mikro-Elektronik GmbH + ++OUI:C4C0AE* ++ ID_OUI_FROM_DATABASE=MIDORI ELECTRONIC CO., LTD. ++ + OUI:C4C19F* + ID_OUI_FROM_DATABASE=National Oilwell Varco Instrumentation, Monitoring, and Optimization (NOV IMO) + + OUI:C4C755* + ID_OUI_FROM_DATABASE=Beijing HuaqinWorld Technology Co.,Ltd + ++OUI:C4C919* ++ ID_OUI_FROM_DATABASE=Energy Imports Ltd ++ + OUI:C4CAD9* + ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited + +@@ -65050,6 +65965,9 @@ OUI:C4E7BE* + OUI:C4E92F* + ID_OUI_FROM_DATABASE=AB Sciex + ++OUI:C4E984* ++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. ++ + OUI:C4EBE3* + ID_OUI_FROM_DATABASE=RRCN SAS + +@@ -65092,6 +66010,9 @@ OUI:C80E95* + OUI:C81479* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:C816BD* ++ ID_OUI_FROM_DATABASE=HISENSE ELECTRIC CO.,LTD. ++ + OUI:C819F7* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -65302,6 +66223,9 @@ OUI:C8D2C1* + OUI:C8D3A3* + ID_OUI_FROM_DATABASE=D-Link International + ++OUI:C8D429* ++ ID_OUI_FROM_DATABASE=Muehlbauer AG ++ + OUI:C8D5FE* + ID_OUI_FROM_DATABASE=Shenzhen Zowee Technology Co., Ltd + +@@ -65428,6 +66352,9 @@ OUI:CC34D7* + OUI:CC3540* + ID_OUI_FROM_DATABASE=Technicolor USA Inc. + ++OUI:CC398C* ++ ID_OUI_FROM_DATABASE=Shiningtek ++ + OUI:CC3A61* + ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD. + +@@ -65527,6 +66454,12 @@ OUI:CC7D37* + OUI:CC7EE7* + ID_OUI_FROM_DATABASE=Panasonic AVC Networks Company + ++OUI:CC856C* ++ ID_OUI_FROM_DATABASE=SHENZHEN MDK DIGITAL TECHNOLOGY CO.,LTD ++ ++OUI:CC89FD* ++ ID_OUI_FROM_DATABASE=Nokia Corporation ++ + OUI:CC8CE3* + ID_OUI_FROM_DATABASE=Texas Instruments + +@@ -65539,18 +66472,27 @@ OUI:CC912B* + OUI:CC944A* + ID_OUI_FROM_DATABASE=Pfeiffer Vacuum GmbH + ++OUI:CC95D7* ++ ID_OUI_FROM_DATABASE=VIZIO, Inc ++ + OUI:CC96A0* + ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd + + OUI:CC9E00* + ID_OUI_FROM_DATABASE=Nintendo Co., Ltd. + ++OUI:CC9F35* ++ ID_OUI_FROM_DATABASE=Transbit Sp. z o.o. ++ + OUI:CCA374* + ID_OUI_FROM_DATABASE=Guangdong Guanglian Electronic Technology Co.Ltd + + OUI:CCA462* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + ++OUI:CCA614* ++ ID_OUI_FROM_DATABASE=AIFA TECHNOLOGY CORP. ++ + OUI:CCAF78* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + +@@ -65650,6 +66592,9 @@ OUI:CCF954* + OUI:CCF9E8* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:CCFA00* ++ ID_OUI_FROM_DATABASE=LG Electronics ++ + OUI:CCFB65* + ID_OUI_FROM_DATABASE=Nintendo Co., Ltd. + +@@ -65731,6 +66676,9 @@ OUI:D0574C* + OUI:D05785* + ID_OUI_FROM_DATABASE=Pantech Co., Ltd. + ++OUI:D057A1* ++ ID_OUI_FROM_DATABASE=Werma Signaltechnik GmbH & Co. KG ++ + OUI:D05875* + ID_OUI_FROM_DATABASE=Active Control Technology Inc. + +@@ -65743,6 +66691,9 @@ OUI:D05A0F* + OUI:D05FCE* + ID_OUI_FROM_DATABASE=Hitachi Data Systems + ++OUI:D0634D* ++ ID_OUI_FROM_DATABASE=Meiko Maschinenbau GmbH & Co. KG ++ + OUI:D063B4* + ID_OUI_FROM_DATABASE=SolidRun Ltd. + +@@ -65755,6 +66706,9 @@ OUI:D067E5* + OUI:D0699E* + ID_OUI_FROM_DATABASE=LUMINEX Lighting Control Equipment + ++OUI:D069D0* ++ ID_OUI_FROM_DATABASE=Verto Medical Solutions, LLC ++ + OUI:D0737F* + ID_OUI_FROM_DATABASE=Mini-Circuits + +@@ -65767,12 +66721,18 @@ OUI:D073D5* + OUI:D075BE* + ID_OUI_FROM_DATABASE=Reno A&E + ++OUI:D07AB5* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:D07DE5* + ID_OUI_FROM_DATABASE=Forward Pay Systems, Inc. + + OUI:D07E28* + ID_OUI_FROM_DATABASE=Hewlett Packard + ++OUI:D07E35* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:D08999* + ID_OUI_FROM_DATABASE=APCON, Inc. + +@@ -65797,6 +66757,9 @@ OUI:D095C7* + OUI:D09B05* + ID_OUI_FROM_DATABASE=Emtronix + ++OUI:D09C30* ++ ID_OUI_FROM_DATABASE=Foster Electric Company, Limited ++ + OUI:D09D0A* + ID_OUI_FROM_DATABASE=LINKCOM + +@@ -65824,6 +66787,9 @@ OUI:D0B53D* + OUI:D0BB80* + ID_OUI_FROM_DATABASE=SHL Telemedicine International Ltd. + ++OUI:D0BD01* ++ ID_OUI_FROM_DATABASE=DS International ++ + OUI:D0BE2C* + ID_OUI_FROM_DATABASE=CNSLink Co., Ltd. + +@@ -65965,6 +66931,9 @@ OUI:D4206D* + OUI:D4223F* + ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd. + ++OUI:D4224E* ++ ID_OUI_FROM_DATABASE=Alcatel Lucent ++ + OUI:D42751* + ID_OUI_FROM_DATABASE=Infopia Co., Ltd + +@@ -65977,6 +66946,12 @@ OUI:D429EA* + OUI:D42C3D* + ID_OUI_FROM_DATABASE=Sky Light Digital Limited + ++OUI:D42F23* ++ ID_OUI_FROM_DATABASE=Akenori PTE Ltd ++ ++OUI:D4319D* ++ ID_OUI_FROM_DATABASE=Sinwatec ++ + OUI:D43A65* + ID_OUI_FROM_DATABASE=IGRS Engineering Lab Ltd. + +@@ -66241,6 +67216,9 @@ OUI:D809C3* + OUI:D80DE3* + ID_OUI_FROM_DATABASE=FXI TECHNOLOGIES AS + ++OUI:D8150D* ++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. ++ + OUI:D8160A* + ID_OUI_FROM_DATABASE=Nippon Electro-Sensory Devices + +@@ -66277,6 +67255,9 @@ OUI:D82916* + OUI:D82986* + ID_OUI_FROM_DATABASE=Best Wish Technology LTD + ++OUI:D82A15* ++ ID_OUI_FROM_DATABASE=Leitner SpA ++ + OUI:D82A7E* + ID_OUI_FROM_DATABASE=Nokia Corporation + +@@ -66325,9 +67306,15 @@ OUI:D85D4C* + OUI:D85D84* + ID_OUI_FROM_DATABASE=CAx soft GmbH + ++OUI:D86194* ++ ID_OUI_FROM_DATABASE=Objetivos y Sevicios de Valor Añadido ++ + OUI:D862DB* + ID_OUI_FROM_DATABASE=Eno Inc. + ++OUI:D86595* ++ ID_OUI_FROM_DATABASE=Toy's Myth Inc. ++ + OUI:D866C6* + ID_OUI_FROM_DATABASE=Shenzhen Daystar Technology Co.,ltd + +@@ -66361,6 +67348,9 @@ OUI:D87988* + OUI:D87CDD* + ID_OUI_FROM_DATABASE=SANIX INCORPORATED + ++OUI:D881CE* ++ ID_OUI_FROM_DATABASE=AHN INC. ++ + OUI:D88A3B* + ID_OUI_FROM_DATABASE=UNIT-EM + +@@ -66418,6 +67408,9 @@ OUI:D8B377* + OUI:D8B6C1* + ID_OUI_FROM_DATABASE=NetworkAccountant, Inc. + ++OUI:D8B6D6* ++ ID_OUI_FROM_DATABASE=Blu Tether Limited ++ + OUI:D8B8F6* + ID_OUI_FROM_DATABASE=Nantworks + +@@ -66466,6 +67459,12 @@ OUI:D8DA52* + OUI:D8DCE9* + ID_OUI_FROM_DATABASE=Kunshan Erlab ductless filtration system Co.,Ltd + ++OUI:D8DD5F* ++ ID_OUI_FROM_DATABASE=BALMUDA Inc. ++ ++OUI:D8DDFD* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:D8DF0D* + ID_OUI_FROM_DATABASE=beroNet GmbH + +@@ -66484,9 +67483,15 @@ OUI:D8E952* + OUI:D8EB97* + ID_OUI_FROM_DATABASE=TRENDnet, Inc. + ++OUI:D8EE78* ++ ID_OUI_FROM_DATABASE=Moog Protokraft ++ + OUI:D8F0F2* + ID_OUI_FROM_DATABASE=Zeebo Inc + ++OUI:D8FC93* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:D8FE8F* + ID_OUI_FROM_DATABASE=IDFone Co., Ltd. + +@@ -66499,6 +67504,9 @@ OUI:DC0265* + OUI:DC028E* + ID_OUI_FROM_DATABASE=zte corporation + ++OUI:DC052F* ++ ID_OUI_FROM_DATABASE=National Products Inc. ++ + OUI:DC0575* + ID_OUI_FROM_DATABASE=SIEMENS ENERGY AUTOMATION + +@@ -66619,6 +67627,9 @@ OUI:DC86D8* + OUI:DC9B1E* + ID_OUI_FROM_DATABASE=Intercom, Inc. + ++OUI:DC9B9C* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:DC9C52* + ID_OUI_FROM_DATABASE=Sapphire Technology Limited. + +@@ -66670,6 +67681,9 @@ OUI:DCC101* + OUI:DCC422* + ID_OUI_FROM_DATABASE=Systembase Limited + ++OUI:DCC793* ++ ID_OUI_FROM_DATABASE=Nokia Corporation ++ + OUI:DCCBA8* + ID_OUI_FROM_DATABASE=Explora Technologies Inc + +@@ -66703,6 +67717,9 @@ OUI:DCDECA* + OUI:DCE2AC* + ID_OUI_FROM_DATABASE=Lumens Digital Optics Inc. + ++OUI:DCE578* ++ ID_OUI_FROM_DATABASE=Experimental Factory of Scientific Engineering and Special Design Department ++ + OUI:DCE71C* + ID_OUI_FROM_DATABASE=AUG Elektronik GmbH + +@@ -66781,6 +67798,9 @@ OUI:E03005* + OUI:E031D0* + ID_OUI_FROM_DATABASE=SZ Telstar CO., LTD + ++OUI:E036E3* ++ ID_OUI_FROM_DATABASE=Stage One International Co., Ltd. ++ + OUI:E039D7* + ID_OUI_FROM_DATABASE=Plexxi, Inc. + +@@ -66793,6 +67813,9 @@ OUI:E03E4A* + OUI:E03E7D* + ID_OUI_FROM_DATABASE=data-complex GmbH + ++OUI:E03F49* ++ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC. ++ + OUI:E0469A* + ID_OUI_FROM_DATABASE=NETGEAR + +@@ -66841,6 +67864,9 @@ OUI:E0757D* + OUI:E07C62* + ID_OUI_FROM_DATABASE=Whistle Labs, Inc. + ++OUI:E07F53* ++ ID_OUI_FROM_DATABASE=TECHBOARD SRL ++ + OUI:E07F88* + ID_OUI_FROM_DATABASE=EVIDENCE Network SIA + +@@ -66967,6 +67993,9 @@ OUI:E0D10A* + OUI:E0D1E6* + ID_OUI_FROM_DATABASE=Aliph dba Jawbone + ++OUI:E0D31A* ++ ID_OUI_FROM_DATABASE=EQUES Technology Co., Limited ++ + OUI:E0D7BA* + ID_OUI_FROM_DATABASE=Texas Instruments + +@@ -66979,6 +68008,9 @@ OUI:E0DADC* + OUI:E0DB55* + ID_OUI_FROM_DATABASE=Dell Inc + ++OUI:E0DB88* ++ ID_OUI_FROM_DATABASE=Open Standard Digital-IF Interface for SATCOM Systems ++ + OUI:E0DCA0* + ID_OUI_FROM_DATABASE=Siemens Electrical Apparatus Ltd., Suzhou Chengdu Branch + +@@ -67030,6 +68062,9 @@ OUI:E40439* + OUI:E4115B* + ID_OUI_FROM_DATABASE=Hewlett Packard + ++OUI:E4121D* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:E41289* + ID_OUI_FROM_DATABASE=topsystem Systemhaus GmbH + +@@ -67093,6 +68128,9 @@ OUI:E446BD* + OUI:E448C7* + ID_OUI_FROM_DATABASE=Cisco SPVTG + ++OUI:E44C6C* ++ ID_OUI_FROM_DATABASE=Shenzhen Guo Wei Electronic Co,. Ltd. ++ + OUI:E44E18* + ID_OUI_FROM_DATABASE=Gardasoft VisionLimited + +@@ -67144,6 +68182,9 @@ OUI:E47CF9* + OUI:E47D5A* + ID_OUI_FROM_DATABASE=Beijing Hanbang Technology Corp. + ++OUI:E48184* ++ ID_OUI_FROM_DATABASE=Alcatel-Lucent ++ + OUI:E481B3* + ID_OUI_FROM_DATABASE=Shenzhen ACT Industrial Co.,Ltd. + +@@ -67267,6 +68308,9 @@ OUI:E8056D* + OUI:E80688* + ID_OUI_FROM_DATABASE=Apple + ++OUI:E8088B* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:E80B13* + ID_OUI_FROM_DATABASE=Akib Systems Taiwan, INC + +@@ -67285,6 +68329,9 @@ OUI:E81132* + OUI:E81324* + ID_OUI_FROM_DATABASE=GuangZhou Bonsoninfo System CO.,LTD + ++OUI:E817FC* ++ ID_OUI_FROM_DATABASE=NIFTY Corporation ++ + OUI:E82877* + ID_OUI_FROM_DATABASE=TMY Co., Ltd. + +@@ -67363,6 +68410,9 @@ OUI:E85E53* + OUI:E8611F* + ID_OUI_FROM_DATABASE=Dawning Information Industry Co.,Ltd + ++OUI:E8617E* ++ ID_OUI_FROM_DATABASE=Liteon Technology Corporation ++ + OUI:E86183* + ID_OUI_FROM_DATABASE=Black Diamond Advanced Technology, LLC + +@@ -67438,6 +68488,9 @@ OUI:E8A4C1* + OUI:E8ABFA* + ID_OUI_FROM_DATABASE=Shenzhen Reecam Tech.Ltd. + ++OUI:E8B1FC* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:E8B4AE* + ID_OUI_FROM_DATABASE=Shenzhen C&D Electronics Co.,Ltd + +@@ -67519,6 +68572,9 @@ OUI:E8E776* + OUI:E8E875* + ID_OUI_FROM_DATABASE=iS5 Communications Inc. + ++OUI:E8EA6A* ++ ID_OUI_FROM_DATABASE=StarTech.com ++ + OUI:E8EADA* + ID_OUI_FROM_DATABASE=Denkovi Assembly Electroncs LTD + +@@ -67534,6 +68590,9 @@ OUI:E8F226* + OUI:E8F928* + ID_OUI_FROM_DATABASE=RFTECH SRL + ++OUI:E8FC60* ++ ID_OUI_FROM_DATABASE=ELCOM Innovations Private Limited ++ + OUI:EC0ED6* + ID_OUI_FROM_DATABASE=ITECH INSTRUMENTS SAS + +@@ -67756,6 +68815,12 @@ OUI:ECF236* + OUI:ECF35B* + ID_OUI_FROM_DATABASE=Nokia Corporation + ++OUI:ECF4BB* ++ ID_OUI_FROM_DATABASE=Dell Inc PCBA Test ++ ++OUI:ECF72B* ++ ID_OUI_FROM_DATABASE=HD DIGITAL TECH CO., LTD. ++ + OUI:ECFAAA* + ID_OUI_FROM_DATABASE=The IMS Company + +@@ -67783,6 +68848,9 @@ OUI:F008F1* + OUI:F013C3* + ID_OUI_FROM_DATABASE=SHENZHEN FENDA TECHNOLOGY CO., LTD + ++OUI:F015A0* ++ ID_OUI_FROM_DATABASE=KyungDong One Co., Ltd. ++ + OUI:F01C13* + ID_OUI_FROM_DATABASE=LG Electronics + +@@ -67822,12 +68890,21 @@ OUI:F02A61* + OUI:F02FD8* + ID_OUI_FROM_DATABASE=Bi2-Vision + ++OUI:F0321A* ++ ID_OUI_FROM_DATABASE=Mita-Teknik A/S ++ + OUI:F037A1* + ID_OUI_FROM_DATABASE=Huike Electronics (SHENZHEN) CO., LTD. + ++OUI:F03A4B* ++ ID_OUI_FROM_DATABASE=Bloombase, Inc. ++ + OUI:F03A55* + ID_OUI_FROM_DATABASE=Omega Elektronik AS + ++OUI:F03FF8* ++ ID_OUI_FROM_DATABASE=R L Drake ++ + OUI:F04335* + ID_OUI_FROM_DATABASE=DVN(Shanghai)Ltd. + +@@ -67900,12 +68977,18 @@ OUI:F07F0C* + OUI:F081AF* + ID_OUI_FROM_DATABASE=IRZ AUTOMATION TECHNOLOGIES LTD + ++OUI:F08261* ++ ID_OUI_FROM_DATABASE=SAGEMCOM ++ + OUI:F0842F* + ID_OUI_FROM_DATABASE=ADB Broadband Italia + + OUI:F084C9* + ID_OUI_FROM_DATABASE=zte corporation + ++OUI:F08A28* ++ ID_OUI_FROM_DATABASE=JIANGSU HENGSION ELECTRONIC S and T CO.,LTD ++ + OUI:F08BFE* + ID_OUI_FROM_DATABASE=COSTEL.,CO.LTD + +@@ -67990,6 +69073,9 @@ OUI:F0DA7C* + OUI:F0DB30* + ID_OUI_FROM_DATABASE=Yottabyte + ++OUI:F0DBF8* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:F0DCE2* + ID_OUI_FROM_DATABASE=Apple + +@@ -68029,6 +69115,9 @@ OUI:F0F260* + OUI:F0F5AE* + ID_OUI_FROM_DATABASE=Adaptrum Inc. + ++OUI:F0F61C* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:F0F644* + ID_OUI_FROM_DATABASE=Whitesky Science & Technology Co.,Ltd. + +@@ -68089,6 +69178,9 @@ OUI:F42896* + OUI:F436E1* + ID_OUI_FROM_DATABASE=Abilis Systems SARL + ++OUI:F437B7* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:F43814* + ID_OUI_FROM_DATABASE=Shanghai Howell Electronic Co.,Ltd + +@@ -68191,6 +69283,9 @@ OUI:F48771* + OUI:F48E09* + ID_OUI_FROM_DATABASE=Nokia Corporation + ++OUI:F490CA* ++ ID_OUI_FROM_DATABASE=Tensorcom ++ + OUI:F490EA* + ID_OUI_FROM_DATABASE=Deciso B.V. + +@@ -68221,9 +69316,15 @@ OUI:F4B164* + OUI:F4B381* + ID_OUI_FROM_DATABASE=WindowMaster A/S + ++OUI:F4B52F* ++ ID_OUI_FROM_DATABASE=Juniper networks ++ + OUI:F4B549* + ID_OUI_FROM_DATABASE=Yeastar Technology Co., Ltd. + ++OUI:F4B6E5* ++ ID_OUI_FROM_DATABASE=TerraSem Co.,Ltd ++ + OUI:F4B72A* + ID_OUI_FROM_DATABASE=TIME INTERCONNECT LTD + +@@ -68251,6 +69352,9 @@ OUI:F4CD90* + OUI:F4CE46* + ID_OUI_FROM_DATABASE=Hewlett-Packard Company + ++OUI:F4CFE2* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:F4D9FB* + ID_OUI_FROM_DATABASE=Samsung Electronics CO., LTD + +@@ -68260,6 +69364,9 @@ OUI:F4DC4D* + OUI:F4DCDA* + ID_OUI_FROM_DATABASE=Zhuhai Jiahe Communication Technology Co., limited + ++OUI:F4DCF9* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:F4E142* + ID_OUI_FROM_DATABASE=Delta Elektronika BV + +@@ -68413,6 +69520,9 @@ OUI:F8572E* + OUI:F85BC9* + ID_OUI_FROM_DATABASE=M-Cube Spa + ++OUI:F85C45* ++ ID_OUI_FROM_DATABASE=IC Nexus Co. Ltd. ++ + OUI:F85F2A* + ID_OUI_FROM_DATABASE=Nokia Corporation + +@@ -68494,6 +69604,9 @@ OUI:F8A45F* + OUI:F8A963* + ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD. + ++OUI:F8A9D0* ++ ID_OUI_FROM_DATABASE=LG Electronics ++ + OUI:F8A9DE* + ID_OUI_FROM_DATABASE=PUISSANCE PLUS + +@@ -68566,6 +69679,9 @@ OUI:F8DC7A* + OUI:F8DFA8* + ID_OUI_FROM_DATABASE=ZTE Corporation + ++OUI:F8E079* ++ ID_OUI_FROM_DATABASE=Motorola Mobility LLC ++ + OUI:F8E4FB* + ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc + +@@ -68581,6 +69697,9 @@ OUI:F8EA0A* + OUI:F8EDA5* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + ++OUI:F8F005* ++ ID_OUI_FROM_DATABASE=Newport Media Inc. ++ + OUI:F8F014* + ID_OUI_FROM_DATABASE=RackWare Inc. + +@@ -68623,12 +69742,18 @@ OUI:FC01CD* + OUI:FC0647* + ID_OUI_FROM_DATABASE=Cortland Research, LLC + ++OUI:FC07A0* ++ ID_OUI_FROM_DATABASE=LRE Medical GmbH ++ + OUI:FC0877* + ID_OUI_FROM_DATABASE=Prentke Romich Company + + OUI:FC09D8* + ID_OUI_FROM_DATABASE=ACTEON Group + ++OUI:FC09F6* ++ ID_OUI_FROM_DATABASE=GUANGDONG TONZE ELECTRIC CO.,LTD ++ + OUI:FC0A81* + ID_OUI_FROM_DATABASE=Motorola Solutions Inc. + +@@ -68641,6 +69766,15 @@ OUI:FC10BD* + OUI:FC1186* + ID_OUI_FROM_DATABASE=Logic3 plc + ++OUI:FC1349* ++ ID_OUI_FROM_DATABASE=Global Apps Corp. ++ ++OUI:FC15B4* ++ ID_OUI_FROM_DATABASE=Hewlett Packard ++ ++OUI:FC1607* ++ ID_OUI_FROM_DATABASE=Taian Technology(Wuxi) Co.,Ltd. ++ + OUI:FC1794* + ID_OUI_FROM_DATABASE=InterCreative Co., Ltd + +@@ -68668,6 +69802,9 @@ OUI:FC229C* + OUI:FC253F* + ID_OUI_FROM_DATABASE=Apple + ++OUI:FC27A2* ++ ID_OUI_FROM_DATABASE=TRANS ELECTRIC CO., LTD. ++ + OUI:FC2A54* + ID_OUI_FROM_DATABASE=Connected Data, Inc. + +@@ -68761,6 +69898,9 @@ OUI:FC8E7E* + OUI:FC8FC4* + ID_OUI_FROM_DATABASE=Intelligent Technology Inc. + ++OUI:FC923B* ++ ID_OUI_FROM_DATABASE=Nokia Corporation ++ + OUI:FC946C* + ID_OUI_FROM_DATABASE=UBIVELOX + +@@ -68791,6 +69931,9 @@ OUI:FCAF6A* + OUI:FCB0C4* + ID_OUI_FROM_DATABASE=Shanghai DareGlobal Technologies Co., Ltd + ++OUI:FCBBA1* ++ ID_OUI_FROM_DATABASE=Shenzhen Minicreate Technology Co.,Ltd ++ + OUI:FCC23D* + ID_OUI_FROM_DATABASE=Atmel Corporation + +@@ -68851,6 +69994,9 @@ OUI:FCF528* + OUI:FCF8AE* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:FCF8B7* ++ ID_OUI_FROM_DATABASE=TRONTEQ Electronic ++ + OUI:FCFAF7* + ID_OUI_FROM_DATABASE=Shanghai Baud Data Communication Co.,Ltd. + +diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb +index 289f81c..6142dc8 100644 +--- a/hwdb/20-pci-vendor-model.hwdb ++++ b/hwdb/20-pci-vendor-model.hwdb +@@ -917,6 +917,9 @@ pci:v00001000d0000005Bsv00001028sd00001F37* + pci:v00001000d0000005Bsv00001028sd00001F38* + ID_MODEL_FROM_DATABASE=PERC H710 Mini (for monolithics) + ++pci:v00001000d0000005Bsv00008086sd00003510* ++ ID_MODEL_FROM_DATABASE=RMS25PB080 RAID Controller ++ + pci:v00001000d0000005Bsv00008086sd00003513* + ID_MODEL_FROM_DATABASE=RMS25CB080 RAID Controller + +@@ -4203,7 +4206,7 @@ pci:v00001002d00006631* + ID_MODEL_FROM_DATABASE=Oland + + pci:v00001002d00006640* +- ID_MODEL_FROM_DATABASE=Saturn XT [Radeon HD 8950M] ++ ID_MODEL_FROM_DATABASE=Saturn XT [FirePro M6100] + + pci:v00001002d00006641* + ID_MODEL_FROM_DATABASE=Saturn PRO [Radeon HD 8930M] +@@ -4248,7 +4251,10 @@ pci:v00001002d00006660* + ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M] + + pci:v00001002d00006663* +- ID_MODEL_FROM_DATABASE=Sun PRO [Radeon HD 8570M] ++ ID_MODEL_FROM_DATABASE=Sun PRO [Radeon HD 8570A/8570M] ++ ++pci:v00001002d00006663sv00001025sd00000846* ++ ID_MODEL_FROM_DATABASE=Radeon HD 8570A + + pci:v00001002d00006664* + ID_MODEL_FROM_DATABASE=Jet XT [Radeon R5 M200 Series] +@@ -4904,12 +4910,18 @@ pci:v00001002d00006758sv0000174Bsd00007670* + pci:v00001002d00006758sv0000174Bsd0000E181* + ID_MODEL_FROM_DATABASE=Radeon HD 6670 + ++pci:v00001002d00006758sv00001787sd00002309* ++ ID_MODEL_FROM_DATABASE=Radeon HD 6670 ++ + pci:v00001002d00006759* +- ID_MODEL_FROM_DATABASE=Turks PRO [Radeon HD 6570/7570] ++ ID_MODEL_FROM_DATABASE=Turks PRO [Radeon HD 6570/7570/8550] + + pci:v00001002d00006759sv0000103Csd00003130* + ID_MODEL_FROM_DATABASE=Radeon HD 6570 + ++pci:v00001002d00006759sv00001043sd00000403* ++ ID_MODEL_FROM_DATABASE=Radeon HD 6570 ++ + pci:v00001002d00006759sv00001462sd00002500* + ID_MODEL_FROM_DATABASE=Radeon HD 6570 + +@@ -4925,6 +4937,9 @@ pci:v00001002d00006759sv00001642sd00003A67* + pci:v00001002d00006759sv00001682sd00003280* + ID_MODEL_FROM_DATABASE=Radeon HD 7570 + ++pci:v00001002d00006759sv00001682sd00003530* ++ ID_MODEL_FROM_DATABASE=Radeon HD 8550 ++ + pci:v00001002d00006759sv0000174Bsd00007570* + ID_MODEL_FROM_DATABASE=Radeon HD 7570 + +@@ -5585,6 +5600,9 @@ pci:v00001002d00006779sv0000103Csd00002128* + pci:v00001002d00006779sv0000103Csd00002AEE* + ID_MODEL_FROM_DATABASE=Radeon HD 7450A + ++pci:v00001002d00006779sv00001462sd00002125* ++ ID_MODEL_FROM_DATABASE=Radeon HD 6450 ++ + pci:v00001002d00006779sv00001462sd00002346* + ID_MODEL_FROM_DATABASE=Radeon HD 7450 + +@@ -5813,6 +5831,15 @@ pci:v00001002d000067A1* + pci:v00001002d000067A2* + ID_MODEL_FROM_DATABASE=Hawaii GL + ++pci:v00001002d000067A8* ++ ID_MODEL_FROM_DATABASE=Hawaii ++ ++pci:v00001002d000067A9* ++ ID_MODEL_FROM_DATABASE=Hawaii ++ ++pci:v00001002d000067AA* ++ ID_MODEL_FROM_DATABASE=Hawaii ++ + pci:v00001002d000067B0* + ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] + +@@ -5907,7 +5934,7 @@ pci:v00001002d00006821sv00001002sd0000031E* + ID_MODEL_FROM_DATABASE=FirePro SX4000 + + pci:v00001002d00006822* +- ID_MODEL_FROM_DATABASE=Venus PRO ++ ID_MODEL_FROM_DATABASE=Venus PRO [Radeon E8860] + + pci:v00001002d00006823* + ID_MODEL_FROM_DATABASE=Venus PRO [Radeon HD 8850M] +@@ -7463,6 +7490,9 @@ pci:v00001002d000068F9sv0000103Csd00002AAE* + pci:v00001002d000068F9sv0000103Csd00003580* + ID_MODEL_FROM_DATABASE=Radeon HD 5450 + ++pci:v00001002d000068F9sv00001043sd00000386* ++ ID_MODEL_FROM_DATABASE=Radeon HD 5450 ++ + pci:v00001002d000068F9sv00001043sd000003C2* + ID_MODEL_FROM_DATABASE=EAH5450 SILENT/DI/512MD2 (LP) + +@@ -8834,9 +8864,18 @@ pci:v00001002d00009901* + pci:v00001002d00009902* + ID_MODEL_FROM_DATABASE=Trinity HDMI Audio Controller + ++pci:v00001002d00009902sv0000103Csd0000194E* ++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook ++ + pci:v00001002d00009903* + ID_MODEL_FROM_DATABASE=Trinity [Radeon HD 7640G] + ++pci:v00001002d00009903sv0000103Csd0000194E* ++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook ++ ++pci:v00001002d00009903sv0000103Csd00001952* ++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook ++ + pci:v00001002d00009904* + ID_MODEL_FROM_DATABASE=Trinity [Radeon HD 7560D] + +@@ -10964,6 +11003,9 @@ pci:v00001022d00007801* + pci:v00001022d00007801sv0000103Csd0000168B* + ID_MODEL_FROM_DATABASE=ProBook 4535s Notebook + ++pci:v00001022d00007801sv0000103Csd0000194E* ++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook ++ + pci:v00001022d00007802* + ID_MODEL_FROM_DATABASE=FCH SATA Controller [RAID mode] + +@@ -10982,27 +11024,45 @@ pci:v00001022d00007806* + pci:v00001022d00007807* + ID_MODEL_FROM_DATABASE=FCH USB OHCI Controller + ++pci:v00001022d00007807sv0000103Csd0000194E* ++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook ++ + pci:v00001022d00007808* + ID_MODEL_FROM_DATABASE=FCH USB EHCI Controller + ++pci:v00001022d00007808sv0000103Csd0000194E* ++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook ++ + pci:v00001022d00007809* + ID_MODEL_FROM_DATABASE=FCH USB OHCI Controller + ++pci:v00001022d00007809sv0000103Csd0000194E* ++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook ++ + pci:v00001022d0000780B* + ID_MODEL_FROM_DATABASE=FCH SMBus Controller + ++pci:v00001022d0000780Bsv0000103Csd0000194E* ++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook ++ + pci:v00001022d0000780C* + ID_MODEL_FROM_DATABASE=FCH IDE Controller + + pci:v00001022d0000780D* + ID_MODEL_FROM_DATABASE=FCH Azalia Controller + ++pci:v00001022d0000780Dsv0000103Csd0000194E* ++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook ++ + pci:v00001022d0000780Dsv00001043sd00008444* + ID_MODEL_FROM_DATABASE=F2A85-M Series + + pci:v00001022d0000780E* + ID_MODEL_FROM_DATABASE=FCH LPC Bridge + ++pci:v00001022d0000780Esv0000103Csd0000194E* ++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook ++ + pci:v00001022d0000780F* + ID_MODEL_FROM_DATABASE=FCH PCI Bridge + +@@ -11015,11 +11075,41 @@ pci:v00001022d00007813* + pci:v00001022d00007814* + ID_MODEL_FROM_DATABASE=FCH USB XHCI Controller + ++pci:v00001022d00007814sv0000103Csd0000194E* ++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook ++ + pci:v00001022d00007900* +- ID_MODEL_FROM_DATABASE=CZ SATA Controller [IDE mode] ++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [IDE mode] ++ ++pci:v00001022d00007901* ++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [AHCI mode] ++ ++pci:v00001022d00007902* ++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [RAID mode] ++ ++pci:v00001022d00007903* ++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [RAID mode] ++ ++pci:v00001022d00007904* ++ ID_MODEL_FROM_DATABASE=FCH SATA Controller [AHCI mode] ++ ++pci:v00001022d00007906* ++ ID_MODEL_FROM_DATABASE=FCH SD Flash Controller ++ ++pci:v00001022d00007908* ++ ID_MODEL_FROM_DATABASE=FCH USB EHCI Controller + + pci:v00001022d0000790B* +- ID_MODEL_FROM_DATABASE=CZ SMBus Controller ++ ID_MODEL_FROM_DATABASE=FCH SMBus Controller ++ ++pci:v00001022d0000790E* ++ ID_MODEL_FROM_DATABASE=FCH LPC Bridge ++ ++pci:v00001022d0000790F* ++ ID_MODEL_FROM_DATABASE=FCH PCI Bridge ++ ++pci:v00001022d00007914* ++ ID_MODEL_FROM_DATABASE=FCH USB XHCI Controller + + pci:v00001022d00009600* + ID_MODEL_FROM_DATABASE=RS780 Host Bridge +@@ -23672,6 +23762,21 @@ pci:v000010DEd000005E6* + pci:v000010DEd000005E7* + ID_MODEL_FROM_DATABASE=GT200GL [Tesla C1060 / M1060] + ++pci:v000010DEd000005E7sv000010DEsd00000595* ++ ID_MODEL_FROM_DATABASE=Tesla T10 Processor ++ ++pci:v000010DEd000005E7sv000010DEsd0000068F* ++ ID_MODEL_FROM_DATABASE=Tesla T10 Processor ++ ++pci:v000010DEd000005E7sv000010DEsd00000697* ++ ID_MODEL_FROM_DATABASE=Tesla M1060 ++ ++pci:v000010DEd000005E7sv000010DEsd00000714* ++ ID_MODEL_FROM_DATABASE=Tesla M1060 ++ ++pci:v000010DEd000005E7sv000010DEsd00000743* ++ ID_MODEL_FROM_DATABASE=Tesla M1060 ++ + pci:v000010DEd000005EA* + ID_MODEL_FROM_DATABASE=GT200 [GeForce GTX 260] + +@@ -23732,6 +23837,9 @@ pci:v000010DEd00000608* + pci:v000010DEd00000609* + ID_MODEL_FROM_DATABASE=G92M [GeForce 8800M GTS] + ++pci:v000010DEd00000609sv0000106Bsd000000A7* ++ ID_MODEL_FROM_DATABASE=GeForce 8800 GS ++ + pci:v000010DEd0000060A* + ID_MODEL_FROM_DATABASE=G92M [GeForce GTX 280M] + +@@ -23864,6 +23972,9 @@ pci:v000010DEd0000062D* + pci:v000010DEd0000062E* + ID_MODEL_FROM_DATABASE=G94 [GeForce 9600 GT] + ++pci:v000010DEd0000062Esv0000106Bsd00000605* ++ ID_MODEL_FROM_DATABASE=GeForce GT 130 ++ + pci:v000010DEd0000062F* + ID_MODEL_FROM_DATABASE=G94 [GeForce 9800 S] + +@@ -23921,6 +24032,9 @@ pci:v000010DEd00000648* + pci:v000010DEd00000649* + ID_MODEL_FROM_DATABASE=G96M [GeForce 9600M GT] + ++pci:v000010DEd00000649sv00001043sd0000202D* ++ ID_MODEL_FROM_DATABASE=GeForce GT 220M ++ + pci:v000010DEd0000064A* + ID_MODEL_FROM_DATABASE=G96M [GeForce 9700M GT] + +@@ -23942,12 +24056,21 @@ pci:v000010DEd00000651* + pci:v000010DEd00000652* + ID_MODEL_FROM_DATABASE=G96M [GeForce GT 130M] + ++pci:v000010DEd00000652sv0000152Dsd00000850* ++ ID_MODEL_FROM_DATABASE=GeForce GT 240M LE ++ + pci:v000010DEd00000653* + ID_MODEL_FROM_DATABASE=G96M [GeForce GT 120M] + + pci:v000010DEd00000654* + ID_MODEL_FROM_DATABASE=G96M [GeForce GT 220M] + ++pci:v000010DEd00000654sv00001043sd000014A2* ++ ID_MODEL_FROM_DATABASE=GeForce GT 320M ++ ++pci:v000010DEd00000654sv00001043sd000014D2* ++ ID_MODEL_FROM_DATABASE=GeForce GT 320M ++ + pci:v000010DEd00000655* + ID_MODEL_FROM_DATABASE=G96 [GeForce GT 120] + +@@ -24098,6 +24221,9 @@ pci:v000010DEd000006E7* + pci:v000010DEd000006E8* + ID_MODEL_FROM_DATABASE=G98M [GeForce 9200M GS] + ++pci:v000010DEd000006E8sv0000103Csd0000360B* ++ ID_MODEL_FROM_DATABASE=GeForce 9200M GE ++ + pci:v000010DEd000006E9* + ID_MODEL_FROM_DATABASE=G98M [GeForce 9300M GS] + +@@ -24596,6 +24722,9 @@ pci:v000010DEd000007FEsv00001019sd0000297A* + pci:v000010DEd000007FEsv00001AFAsd00007150* + ID_MODEL_FROM_DATABASE=JW-IN7150-HD + ++pci:v000010DEd00000840* ++ ID_MODEL_FROM_DATABASE=C77 [GeForce 8200M] ++ + pci:v000010DEd00000844* + ID_MODEL_FROM_DATABASE=C77 [GeForce 9100M G] + +@@ -24665,6 +24794,9 @@ pci:v000010DEd00000865* + pci:v000010DEd00000866* + ID_MODEL_FROM_DATABASE=C79 [GeForce 9400M G] + ++pci:v000010DEd00000866sv0000106Bsd000000B1* ++ ID_MODEL_FROM_DATABASE=GeForce 9400M ++ + pci:v000010DEd00000867* + ID_MODEL_FROM_DATABASE=C79 [GeForce 9400] + +@@ -24746,6 +24878,9 @@ pci:v000010DEd0000087E* + pci:v000010DEd0000087F* + ID_MODEL_FROM_DATABASE=ION LE VGA + ++pci:v000010DEd000008A0* ++ ID_MODEL_FROM_DATABASE=MCP89 [GeForce 320M] ++ + pci:v000010DEd000008A2* + ID_MODEL_FROM_DATABASE=MCP89 [GeForce 320M] + +@@ -24755,6 +24890,9 @@ pci:v000010DEd000008A3* + pci:v000010DEd000008A4* + ID_MODEL_FROM_DATABASE=MCP89 [GeForce 320M] + ++pci:v000010DEd000008A5* ++ ID_MODEL_FROM_DATABASE=MCP89 [GeForce 320M] ++ + pci:v000010DEd00000A20* + ID_MODEL_FROM_DATABASE=GT216 [GeForce GT 220] + +@@ -24875,6 +25013,9 @@ pci:v000010DEd00000A73* + pci:v000010DEd00000A74* + ID_MODEL_FROM_DATABASE=GT218M [GeForce G210M] + ++pci:v000010DEd00000A74sv00001B0Asd0000903A* ++ ID_MODEL_FROM_DATABASE=GeForce G210 ++ + pci:v000010DEd00000A75* + ID_MODEL_FROM_DATABASE=GT218M [GeForce 310M] + +@@ -24986,6 +25127,9 @@ pci:v000010DEd00000A7Asv00001462sd0000AC82* + pci:v000010DEd00000A7Asv00001462sd0000AE33* + ID_MODEL_FROM_DATABASE=GeForce 405 + ++pci:v000010DEd00000A7Asv00001642sd00003980* ++ ID_MODEL_FROM_DATABASE=GeForce 405 ++ + pci:v000010DEd00000A7Asv000017AAsd00003950* + ID_MODEL_FROM_DATABASE=GeForce 405M + +@@ -24995,6 +25139,9 @@ pci:v000010DEd00000A7Asv000017AAsd0000397D* + pci:v000010DEd00000A7Asv00001B0Asd00002091* + ID_MODEL_FROM_DATABASE=GeForce 315M + ++pci:v000010DEd00000A7Asv00001B0Asd000090B4* ++ ID_MODEL_FROM_DATABASE=GeForce 405 ++ + pci:v000010DEd00000A7Asv00001BFDsd00000003* + ID_MODEL_FROM_DATABASE=GeForce 405 + +@@ -25266,7 +25413,7 @@ pci:v000010DEd00000AD8* + ID_MODEL_FROM_DATABASE=MCP78S [GeForce 8200] SATA Controller (RAID mode) + + pci:v000010DEd00000BE2* +- ID_MODEL_FROM_DATABASE=High Definition Audio Controller ++ ID_MODEL_FROM_DATABASE=GT216 HDMI Audio Controller + + pci:v000010DEd00000BE2sv00001043sd00008311* + ID_MODEL_FROM_DATABASE=ENGT220/DI/1GD3(LP)/V2 +@@ -25460,12 +25607,42 @@ pci:v000010DEd00000DE4* + pci:v000010DEd00000DE5* + ID_MODEL_FROM_DATABASE=GF108 [GeForce GT 530] + ++pci:v000010DEd00000DE7* ++ ID_MODEL_FROM_DATABASE=GF108 [GeForce GT 610] ++ + pci:v000010DEd00000DE8* + ID_MODEL_FROM_DATABASE=GF108M [GeForce GT 620M] + + pci:v000010DEd00000DE9* + ID_MODEL_FROM_DATABASE=GF108M [GeForce GT 630M] + ++pci:v000010DEd00000DE9sv00001025sd00000692* ++ ID_MODEL_FROM_DATABASE=GeForce GT 620M ++ ++pci:v000010DEd00000DE9sv00001025sd00000725* ++ ID_MODEL_FROM_DATABASE=GeForce GT 620M ++ ++pci:v000010DEd00000DE9sv00001025sd00000728* ++ ID_MODEL_FROM_DATABASE=GeForce GT 620M ++ ++pci:v000010DEd00000DE9sv00001025sd0000072B* ++ ID_MODEL_FROM_DATABASE=GeForce GT 620M ++ ++pci:v000010DEd00000DE9sv00001025sd0000072E* ++ ID_MODEL_FROM_DATABASE=GeForce GT 620M ++ ++pci:v000010DEd00000DE9sv00001025sd00000753* ++ ID_MODEL_FROM_DATABASE=GeForce GT 620M ++ ++pci:v000010DEd00000DE9sv00001025sd00000754* ++ ID_MODEL_FROM_DATABASE=GeForce GT 620M ++ ++pci:v000010DEd00000DE9sv000017AAsd00003977* ++ ID_MODEL_FROM_DATABASE=GeForce GT 640M LE ++ ++pci:v000010DEd00000DE9sv00001B0Asd00002210* ++ ID_MODEL_FROM_DATABASE=GeForce GT 635M ++ + pci:v000010DEd00000DEA* + ID_MODEL_FROM_DATABASE=GF108M [GeForce 610M] + +@@ -25514,6 +25691,12 @@ pci:v000010DEd00000DF3* + pci:v000010DEd00000DF4* + ID_MODEL_FROM_DATABASE=GF108M [GeForce GT 540M] + ++pci:v000010DEd00000DF4sv0000152Dsd00000952* ++ ID_MODEL_FROM_DATABASE=GeForce GT 630M ++ ++pci:v000010DEd00000DF4sv0000152Dsd00000953* ++ ID_MODEL_FROM_DATABASE=GeForce GT 630M ++ + pci:v000010DEd00000DF5* + ID_MODEL_FROM_DATABASE=GF108M [GeForce GT 525M] + +@@ -25610,6 +25793,9 @@ pci:v000010DEd00000FC6sv00001043sd00008428* + pci:v000010DEd00000FCD* + ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 755M] + ++pci:v000010DEd00000FCE* ++ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 640M LE] ++ + pci:v000010DEd00000FD1* + ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 650M] + +@@ -25667,6 +25853,9 @@ pci:v000010DEd00000FE0* + pci:v000010DEd00000FE1* + ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 730M] + ++pci:v000010DEd00000FE2* ++ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 745M] ++ + pci:v000010DEd00000FE3* + ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 745M] + +@@ -25688,6 +25877,12 @@ pci:v000010DEd00000FE7* + pci:v000010DEd00000FE7sv000010DEsd0000101E* + ID_MODEL_FROM_DATABASE=GRID K100 + ++pci:v000010DEd00000FE9* ++ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 750M Mac Edition] ++ ++pci:v000010DEd00000FEA* ++ ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 755M Mac Edition] ++ + pci:v000010DEd00000FEF* + ID_MODEL_FROM_DATABASE=GK107GL [GRID K340] + +@@ -25739,6 +25934,15 @@ pci:v000010DEd00001003* + pci:v000010DEd00001004* + ID_MODEL_FROM_DATABASE=GK110 [GeForce GTX 780] + ++pci:v000010DEd00001004sv00003842sd00000784* ++ ID_MODEL_FROM_DATABASE=GK110B [GeForce GTX 780 SC w/ ACX Cooler] ++ ++pci:v000010DEd00001004sv00003842sd00001784* ++ ID_MODEL_FROM_DATABASE=GK110B [GeForce GTX 780 Dual FTW w/ ACX Cooler] ++ ++pci:v000010DEd00001004sv00003842sd00001788* ++ ID_MODEL_FROM_DATABASE=GK110B [GeForce GTX 780 Dual Classified w/ ACX Cooler] ++ + pci:v000010DEd00001005* + ID_MODEL_FROM_DATABASE=GK110 [GeForce GTX Titan] + +@@ -25763,6 +25967,9 @@ pci:v000010DEd00001005sv00003842sd00002794* + pci:v000010DEd00001005sv00003842sd00002795* + ID_MODEL_FROM_DATABASE=GeForce GTX Titan SC Hydro Copper Signature + ++pci:v000010DEd0000100A* ++ ID_MODEL_FROM_DATABASE=GK110B [GeForce GTX 780 Ti] ++ + pci:v000010DEd0000101F* + ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20] + +@@ -25775,15 +25982,24 @@ pci:v000010DEd00001021* + pci:v000010DEd00001022* + ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20c] + ++pci:v000010DEd00001023* ++ ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K40m] ++ + pci:v000010DEd00001024* +- ID_MODEL_FROM_DATABASE=GK110GL [Tesla K40c] ++ ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K40c] + + pci:v000010DEd00001026* + ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20s] + ++pci:v000010DEd00001027* ++ ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K40st] ++ + pci:v000010DEd00001028* + ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20m] + ++pci:v000010DEd00001029* ++ ID_MODEL_FROM_DATABASE=GK110BGL [Tesla K40s] ++ + pci:v000010DEd0000103A* + ID_MODEL_FROM_DATABASE=GK110GL [Quadro K6000] + +@@ -25832,6 +26048,12 @@ pci:v000010DEd00001057* + pci:v000010DEd00001058* + ID_MODEL_FROM_DATABASE=GF119M [GeForce 610M] + ++pci:v000010DEd00001058sv0000103Csd00002AED* ++ ID_MODEL_FROM_DATABASE=GeForce 610 ++ ++pci:v000010DEd00001058sv0000103Csd00002AF1* ++ ID_MODEL_FROM_DATABASE=GeForce 610 ++ + pci:v000010DEd00001058sv00001043sd000010AC* + ID_MODEL_FROM_DATABASE=GeForce GT 610M + +@@ -25841,6 +26063,9 @@ pci:v000010DEd00001058sv00001043sd000010BC* + pci:v000010DEd00001058sv00001043sd00001652* + ID_MODEL_FROM_DATABASE=GeForce GT 610M + ++pci:v000010DEd00001059* ++ ID_MODEL_FROM_DATABASE=GF119M [GeForce 610M] ++ + pci:v000010DEd0000105A* + ID_MODEL_FROM_DATABASE=GF119M [GeForce 610M] + +@@ -25904,6 +26129,12 @@ pci:v000010DEd00001091sv000010DEsd0000088E* + pci:v000010DEd00001091sv000010DEsd00000891* + ID_MODEL_FROM_DATABASE=Tesla X2090 + ++pci:v000010DEd00001091sv000010DEsd00000974* ++ ID_MODEL_FROM_DATABASE=Tesla X2090 ++ ++pci:v000010DEd00001091sv000010DEsd0000098D* ++ ID_MODEL_FROM_DATABASE=Tesla X2090 ++ + pci:v000010DEd00001094* + ID_MODEL_FROM_DATABASE=GF110GL [Tesla M2075] + +@@ -25941,7 +26172,7 @@ pci:v000010DEd000010D8* + ID_MODEL_FROM_DATABASE=GT218 [NVS 300] + + pci:v000010DEd00001140* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M / GT 620M/625M/630M/720M] ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] + + pci:v000010DEd00001140sv00001025sd00000600* + ID_MODEL_FROM_DATABASE=GeForce GT 620M +@@ -26081,6 +26312,9 @@ pci:v000010DEd00001140sv00001028sd00000554* + pci:v000010DEd00001140sv00001028sd00000557* + ID_MODEL_FROM_DATABASE=GeForce GT 620M + ++pci:v000010DEd00001140sv00001028sd00000562* ++ ID_MODEL_FROM_DATABASE=GeForce GT 625M ++ + pci:v000010DEd00001140sv00001028sd00000565* + ID_MODEL_FROM_DATABASE=GeForce GT 630M + +@@ -26111,6 +26345,12 @@ pci:v000010DEd00001140sv00001028sd000005B3* + pci:v000010DEd00001140sv00001028sd000005DA* + ID_MODEL_FROM_DATABASE=GeForce GT 630M + ++pci:v000010DEd00001140sv00001028sd000005DE* ++ ID_MODEL_FROM_DATABASE=GeForce GT 720M ++ ++pci:v000010DEd00001140sv00001028sd000005E0* ++ ID_MODEL_FROM_DATABASE=GeForce GT 720M ++ + pci:v000010DEd00001140sv00001028sd000005E8* + ID_MODEL_FROM_DATABASE=GeForce GT 630M + +@@ -26156,6 +26396,9 @@ pci:v000010DEd00001140sv00001043sd0000126D* + pci:v000010DEd00001140sv00001043sd0000131D* + ID_MODEL_FROM_DATABASE=GeForce GT 720M + ++pci:v000010DEd00001140sv00001043sd000013FD* ++ ID_MODEL_FROM_DATABASE=GeForce GT 720M ++ + pci:v000010DEd00001140sv00001043sd000014C7* + ID_MODEL_FROM_DATABASE=GeForce GT 720M + +@@ -26189,6 +26432,9 @@ pci:v000010DEd00001140sv00001043sd0000224A* + pci:v000010DEd00001140sv00001043sd00008595* + ID_MODEL_FROM_DATABASE=GeForce GT 720M + ++pci:v000010DEd00001140sv00001072sd0000152D* ++ ID_MODEL_FROM_DATABASE=GeForce GT 720M ++ + pci:v000010DEd00001140sv000010CFsd000017F5* + ID_MODEL_FROM_DATABASE=GeForce GT 720M + +@@ -26291,6 +26537,9 @@ pci:v000010DEd00001140sv0000144Dsd0000C709* + pci:v000010DEd00001140sv0000144Dsd0000C711* + ID_MODEL_FROM_DATABASE=GeForce 710M + ++pci:v000010DEd00001140sv0000144Dsd0000C736* ++ ID_MODEL_FROM_DATABASE=GeForce 710M ++ + pci:v000010DEd00001140sv00001462sd000010B8* + ID_MODEL_FROM_DATABASE=GeForce GT 710M + +@@ -26303,6 +26552,9 @@ pci:v000010DEd00001140sv00001462sd0000AA33* + pci:v000010DEd00001140sv00001462sd0000AAA2* + ID_MODEL_FROM_DATABASE=GeForce GT 720M + ++pci:v000010DEd00001140sv00001462sd0000AAA3* ++ ID_MODEL_FROM_DATABASE=GeForce 820M ++ + pci:v000010DEd00001140sv00001462sd0000AE71* + ID_MODEL_FROM_DATABASE=GeForce GT 720M + +@@ -26315,15 +26567,30 @@ pci:v000010DEd00001140sv0000152Dsd00000982* + pci:v000010DEd00001140sv0000152Dsd00000983* + ID_MODEL_FROM_DATABASE=GeForce GT 630M + ++pci:v000010DEd00001140sv0000152Dsd00001012* ++ ID_MODEL_FROM_DATABASE=GeForce 710M ++ + pci:v000010DEd00001140sv0000152Dsd00001030* + ID_MODEL_FROM_DATABASE=GeForce GT 630M + + pci:v000010DEd00001140sv0000152Dsd00001055* + ID_MODEL_FROM_DATABASE=GeForce 710M + ++pci:v000010DEd00001140sv0000152Dsd00001067* ++ ID_MODEL_FROM_DATABASE=GeForce GT 720M ++ ++pci:v000010DEd00001140sv0000152Dsd00001072* ++ ID_MODEL_FROM_DATABASE=GeForce GT 720M ++ + pci:v000010DEd00001140sv000017AAsd00002200* + ID_MODEL_FROM_DATABASE=NVS 5200M + ++pci:v000010DEd00001140sv000017AAsd00002213* ++ ID_MODEL_FROM_DATABASE=GeForce GT 720M ++ ++pci:v000010DEd00001140sv000017AAsd00002220* ++ ID_MODEL_FROM_DATABASE=GeForce GT 720M ++ + pci:v000010DEd00001140sv000017AAsd00003656* + ID_MODEL_FROM_DATABASE=GeForce GT 620M + +@@ -26369,6 +26636,9 @@ pci:v000010DEd00001140sv000017AAsd00003977* + pci:v000010DEd00001140sv000017AAsd00003983* + ID_MODEL_FROM_DATABASE=GeForce 610M + ++pci:v000010DEd00001140sv000017AAsd00005001* ++ ID_MODEL_FROM_DATABASE=GeForce 610M ++ + pci:v000010DEd00001140sv000017AAsd00005003* + ID_MODEL_FROM_DATABASE=GeForce GT 720M + +@@ -26414,18 +26684,33 @@ pci:v000010DEd00001140sv000017AAsd0000502E* + pci:v000010DEd00001140sv000017AAsd0000502F* + ID_MODEL_FROM_DATABASE=GeForce GT 720M + ++pci:v000010DEd00001140sv000017AAsd0000503E* ++ ID_MODEL_FROM_DATABASE=GeForce 710M ++ ++pci:v000010DEd00001140sv000017AAsd0000503F* ++ ID_MODEL_FROM_DATABASE=GeForce 820M ++ + pci:v000010DEd00001140sv00001854sd00000177* + ID_MODEL_FROM_DATABASE=GeForce 710M + + pci:v000010DEd00001140sv00001854sd00000180* + ID_MODEL_FROM_DATABASE=GeForce 710M + ++pci:v000010DEd00001140sv00001854sd00000190* ++ ID_MODEL_FROM_DATABASE=GeForce GT 720M ++ ++pci:v000010DEd00001140sv00001854sd00000192* ++ ID_MODEL_FROM_DATABASE=GeForce GT 720M ++ + pci:v000010DEd00001140sv00001B0Asd000020DD* + ID_MODEL_FROM_DATABASE=GeForce GT 620M + + pci:v000010DEd00001140sv00001B0Asd000020DF* + ID_MODEL_FROM_DATABASE=GeForce GT 620M + ++pci:v000010DEd00001140sv00001B0Asd00002202* ++ ID_MODEL_FROM_DATABASE=GeForce GT 720M ++ + pci:v000010DEd00001180* + ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 680] + +@@ -26484,10 +26769,10 @@ pci:v000010DEd00001193* + ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 760 Ti OEM] + + pci:v000010DEd0000119D* +- ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 775M] ++ ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 775M Mac Edition] + + pci:v000010DEd0000119E* +- ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 780M] ++ ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 780M Mac Edition] + + pci:v000010DEd0000119F* + ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 780M] +@@ -27210,32 +27495,23 @@ pci:v000010EC* + ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd. + + pci:v000010ECd00000139* +- ID_MODEL_FROM_DATABASE=Zonet Zen3200 +- +-pci:v000010ECd00000880* +- ID_MODEL_FROM_DATABASE=Realtek 880 High Definition Audio +- +-pci:v000010ECd00000883* +- ID_MODEL_FROM_DATABASE=Realtek 883 High Definition Audio +- +-pci:v000010ECd00000885* +- ID_MODEL_FROM_DATABASE=Realtek 885 High Definition Audio +- +-pci:v000010ECd00000888* +- ID_MODEL_FROM_DATABASE=Realtek 888 High Definition Audio +- +-pci:v000010ECd00000892* +- ID_MODEL_FROM_DATABASE=Realtek 892 High Definition Audio ++ ID_MODEL_FROM_DATABASE=RTL-8139/8139C/8139C+ Ethernet Controller + + pci:v000010ECd00005209* + ID_MODEL_FROM_DATABASE=RTS5209 PCI Express Card Reader + ++pci:v000010ECd00005227* ++ ID_MODEL_FROM_DATABASE=RTS5227 PCI Express Card Reader ++ + pci:v000010ECd00005229* + ID_MODEL_FROM_DATABASE=RTS5229 PCI Express Card Reader + + pci:v000010ECd00005229sv00001025sd00000813* + ID_MODEL_FROM_DATABASE=Aspire R7-571 + ++pci:v000010ECd00005229sv0000103Csd0000194E* ++ ID_MODEL_FROM_DATABASE=ProBook 455 G1 Notebook ++ + pci:v000010ECd00005288* + ID_MODEL_FROM_DATABASE=Barossa PCI Express Card Reader + +@@ -27449,6 +27725,9 @@ pci:v000010ECd00008168* + pci:v000010ECd00008168sv00001019sd00008168* + ID_MODEL_FROM_DATABASE=RTL8111/8168 PCI Express Gigabit Ethernet controller + ++pci:v000010ECd00008168sv00001028sd00000283* ++ ID_MODEL_FROM_DATABASE=Vostro 220 ++ + pci:v000010ECd00008168sv00001028sd000004B2* + ID_MODEL_FROM_DATABASE=Vostro 3350 + +@@ -27458,6 +27737,9 @@ pci:v000010ECd00008168sv00001028sd000004DA* + pci:v000010ECd00008168sv0000103Csd00001611* + ID_MODEL_FROM_DATABASE=Pavilion DM1Z-3000 + ++pci:v000010ECd00008168sv0000103Csd00001950* ++ ID_MODEL_FROM_DATABASE=ProBook 450/455 ++ + pci:v000010ECd00008168sv00001043sd000011F5* + ID_MODEL_FROM_DATABASE=A6J-Q008 + +@@ -27617,6 +27899,9 @@ pci:v000010ECd00008199sv00001462sd00006894* + pci:v000010ECd00008723* + ID_MODEL_FROM_DATABASE=RTL8723AE PCIe Wireless Network Adapter + ++pci:v000010ECd0000B723* ++ ID_MODEL_FROM_DATABASE=RTL8723BE PCIe Wireless Network Adapter ++ + pci:v000010ED* + ID_VENDOR_FROM_DATABASE=Ascii Corporation + +@@ -31562,6 +31847,15 @@ pci:v00001137d00000042* + pci:v00001137d00000042sv00001137sd00000047* + ID_MODEL_FROM_DATABASE=VIC P81E PCIe Management Controller + ++pci:v00001137d00000042sv00001137sd00000085* ++ ID_MODEL_FROM_DATABASE=VIC 1225 PCIe Management Controller ++ ++pci:v00001137d00000042sv00001137sd000000CD* ++ ID_MODEL_FROM_DATABASE=VIC 1285 PCIe Management Controller ++ ++pci:v00001137d00000042sv00001137sd000000CE* ++ ID_MODEL_FROM_DATABASE=VIC 1225T PCIe Management Controller ++ + pci:v00001137d00000043* + ID_MODEL_FROM_DATABASE=VIC Ethernet NIC + +@@ -31580,6 +31874,12 @@ pci:v00001137d00000043sv00001137sd00000084* + pci:v00001137d00000043sv00001137sd00000085* + ID_MODEL_FROM_DATABASE=VIC 1225 PCIe Ethernet NIC + ++pci:v00001137d00000043sv00001137sd000000CD* ++ ID_MODEL_FROM_DATABASE=VIC 1285 PCIe Ethernet NIC ++ ++pci:v00001137d00000043sv00001137sd000000CE* ++ ID_MODEL_FROM_DATABASE=VIC 1225T PCIe Ethernet NIC ++ + pci:v00001137d00000044* + ID_MODEL_FROM_DATABASE=VIC Ethernet NIC Dynamic + +@@ -31598,6 +31898,12 @@ pci:v00001137d00000044sv00001137sd00000084* + pci:v00001137d00000044sv00001137sd00000085* + ID_MODEL_FROM_DATABASE=VIC 1225 PCIe Ethernet NIC Dynamic + ++pci:v00001137d00000044sv00001137sd000000CD* ++ ID_MODEL_FROM_DATABASE=VIC 1285 PCIe Ethernet NIC Dynamic ++ ++pci:v00001137d00000044sv00001137sd000000CE* ++ ID_MODEL_FROM_DATABASE=VIC 1225T PCIe Ethernet NIC Dynamic ++ + pci:v00001137d00000045* + ID_MODEL_FROM_DATABASE=VIC FCoE HBA + +@@ -31610,18 +31916,24 @@ pci:v00001137d00000045sv00001137sd00000048* + pci:v00001137d00000045sv00001137sd0000004F* + ID_MODEL_FROM_DATABASE=VIC 1280 Mezzanine FCoE HBA + ++pci:v00001137d00000045sv00001137sd00000084* ++ ID_MODEL_FROM_DATABASE=VIC 1240 MLOM FCoE HBA ++ ++pci:v00001137d00000045sv00001137sd00000085* ++ ID_MODEL_FROM_DATABASE=VIC 1225 PCIe FCoE HBA ++ ++pci:v00001137d00000045sv00001137sd000000CD* ++ ID_MODEL_FROM_DATABASE=VIC 1285 PCIe FCoE HBA ++ ++pci:v00001137d00000045sv00001137sd000000CE* ++ ID_MODEL_FROM_DATABASE=VIC 1225T PCIe FCoE HBA ++ + pci:v00001137d0000004E* + ID_MODEL_FROM_DATABASE=VIC 82 PCIe Upstream Port + + pci:v00001137d00000071* + ID_MODEL_FROM_DATABASE=VIC SR-IOV VF + +-pci:v00001137d00000084* +- ID_MODEL_FROM_DATABASE=VIC 1240 MLOM FCoE HBA +- +-pci:v00001137d00000085* +- ID_MODEL_FROM_DATABASE=VIC 1225 PCIe FCOE HBA +- + pci:v00001137d000000CF* + ID_MODEL_FROM_DATABASE=VIC Userspace NIC + +@@ -35087,6 +35399,15 @@ pci:v000011F8d00007384* + pci:v000011F8d00008000* + ID_MODEL_FROM_DATABASE=PM8000 [SPC - SAS Protocol Controller] + ++pci:v000011F8d00008032* ++ ID_MODEL_FROM_DATABASE=ATTO Celerity FC8xEN ++ ++pci:v000011F8d00008032sv0000117Csd0000003B* ++ ID_MODEL_FROM_DATABASE=Celerity FC-82EN Fibre Channel Adapter ++ ++pci:v000011F8d00008032sv0000117Csd0000003C* ++ ID_MODEL_FROM_DATABASE=Celerity FC-84EN Fibre Channel Adapter ++ + pci:v000011F9* + ID_VENDOR_FROM_DATABASE=I-Cube Inc + +@@ -42029,6 +42350,24 @@ pci:v0000144C* + pci:v0000144D* + ID_VENDOR_FROM_DATABASE=Samsung Electronics Co Ltd + ++pci:v0000144Dd00001600* ++ ID_MODEL_FROM_DATABASE=Apple PCIe SSD ++ ++pci:v0000144Dd0000A800* ++ ID_MODEL_FROM_DATABASE=XP941 PCIe SSD ++ ++pci:v0000144Dd0000A820* ++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller 171X ++ ++pci:v0000144Dd0000A820sv00001028sd00001F95* ++ ID_MODEL_FROM_DATABASE=Express Flash NVMe XS1715 SSD 400GB ++ ++pci:v0000144Dd0000A820sv00001028sd00001F96* ++ ID_MODEL_FROM_DATABASE=Express Flash NVMe XS1715 SSD 800GB ++ ++pci:v0000144Dd0000A820sv00001028sd00001F97* ++ ID_MODEL_FROM_DATABASE=Express Flash NVMe XS1715 SSD 1600GB ++ + pci:v0000144E* + ID_VENDOR_FROM_DATABASE=OLITEC + +@@ -42527,6 +42866,9 @@ pci:v000014C2* + pci:v000014C3* + ID_VENDOR_FROM_DATABASE=MEDIATEK Corp. + ++pci:v000014C3d00007630* ++ ID_MODEL_FROM_DATABASE=MT7630e 802.11bgn Wireless Network Adapter ++ + pci:v000014C4* + ID_VENDOR_FROM_DATABASE=IWASAKI Information Systems Co Ltd + +@@ -46334,6 +46676,9 @@ pci:v000015ADd000007B0* + pci:v000015ADd000007C0* + ID_MODEL_FROM_DATABASE=PVSCSI SCSI Controller + ++pci:v000015ADd000007E0* ++ ID_MODEL_FROM_DATABASE=SATA AHCI controller ++ + pci:v000015ADd00000801* + ID_MODEL_FROM_DATABASE=Virtual Machine Interface + +@@ -46623,11 +46968,17 @@ pci:v000015BCd00000103* + ID_MODEL_FROM_DATABASE=QX4 PCI Express quad 4-gigabit Fibre Channel controller + + pci:v000015BCd00000105* +- ID_MODEL_FROM_DATABASE=Celerity FC-42XS Fibre Channel Adapter ++ ID_MODEL_FROM_DATABASE=Celerity FC-44XS/FC-42XS/FC-41XS/FC-44ES/FC-42ES/FC-41ES + + pci:v000015BCd00000105sv0000117Csd00000022* + ID_MODEL_FROM_DATABASE=Celerity FC-42XS Fibre Channel Adapter + ++pci:v000015BCd00000105sv0000117Csd00000025* ++ ID_MODEL_FROM_DATABASE=Celerity FC-44ES Fibre Channel Adapter ++ ++pci:v000015BCd00000105sv0000117Csd00000026* ++ ID_MODEL_FROM_DATABASE=Celerity FC-42ES Fibre Channel Adapter ++ + pci:v000015BCd00001100* + ID_MODEL_FROM_DATABASE=E8001-66442 PCI Express CIC + +@@ -48215,6 +48566,9 @@ pci:v0000170C* + pci:v00001719* + ID_VENDOR_FROM_DATABASE=EZChip Technologies + ++pci:v00001719d00001000* ++ ID_MODEL_FROM_DATABASE=NPA Access Network Processor Family ++ + pci:v00001725* + ID_VENDOR_FROM_DATABASE=Vitesse Semiconductor + +@@ -49040,9 +49394,15 @@ pci:v00001814d00003092* + pci:v00001814d00003290* + ID_MODEL_FROM_DATABASE=RT3290 Wireless 802.11n 1T/1R PCIe + ++pci:v00001814d00003290sv0000103Csd000018EC* ++ ID_MODEL_FROM_DATABASE=Ralink RT3290LE 802.11bgn 1x1 Wi-Fi and Bluetooth 4.0 Combo Adapter ++ + pci:v00001814d00003298* + ID_MODEL_FROM_DATABASE=RT3290 Bluetooth + ++pci:v00001814d00003298sv0000103Csd000018EC* ++ ID_MODEL_FROM_DATABASE=Ralink RT3290LE 802.11bgn 1x1 Wi-Fi and Bluetooth 4.0 Combo Adapter ++ + pci:v00001814d00003592* + ID_MODEL_FROM_DATABASE=RT3592 Wireless 802.11abgn 2T/2R PCIe + +@@ -51299,6 +51659,9 @@ pci:v00001B4Bd00009172* + pci:v00001B4Bd0000917A* + ID_MODEL_FROM_DATABASE=88SE9172 SATA III 6Gb/s RAID Controller + ++pci:v00001B4Bd00009183* ++ ID_MODEL_FROM_DATABASE=88SS9183 PCIe SSD Controller ++ + pci:v00001B4Bd00009192* + ID_MODEL_FROM_DATABASE=88SE9172 SATA III 6Gb/s RAID Controller + +@@ -51455,9 +51818,27 @@ pci:v00001C1Cd00000001* + pci:v00001C2C* + ID_VENDOR_FROM_DATABASE=Fiberblaze + ++pci:v00001C2Cd0000000A* ++ ID_MODEL_FROM_DATABASE=Capture ++ ++pci:v00001C2Cd0000000F* ++ ID_MODEL_FROM_DATABASE=SmartNIC ++ ++pci:v00001C2Cd000000A0* ++ ID_MODEL_FROM_DATABASE=FBC4G Capture 4x1Gb ++ ++pci:v00001C2Cd000000A1* ++ ID_MODEL_FROM_DATABASE=FBC4XG Capture 4x10Gb ++ ++pci:v00001C2Cd000000A2* ++ ID_MODEL_FROM_DATABASE=FBC8XG Capture 8x10Gb ++ + pci:v00001C32* + ID_VENDOR_FROM_DATABASE=Highland Technology, Inc. + ++pci:v00001C33* ++ ID_VENDOR_FROM_DATABASE=Daktronics, Inc ++ + pci:v00001C3B* + ID_VENDOR_FROM_DATABASE=Accensus, LLC + +@@ -51503,6 +51884,9 @@ pci:v00001CE4d00000001* + pci:v00001CE4d00000002* + ID_MODEL_FROM_DATABASE=ExaNIC X2 + ++pci:v00001CF7* ++ ID_VENDOR_FROM_DATABASE=Subspace Dynamics ++ + pci:v00001D44* + ID_VENDOR_FROM_DATABASE=DPT + +@@ -54284,6 +54668,81 @@ pci:v00008086d000008B4sv00008086sd00008270* + pci:v00008086d000008CF* + ID_MODEL_FROM_DATABASE=Atom Processor Z2760 Integrated Graphics Controller + ++pci:v00008086d0000095A* ++ ID_MODEL_FROM_DATABASE=Wireless 7265 ++ ++pci:v00008086d0000095Asv00008086sd00001010* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ ++pci:v00008086d0000095Asv00008086sd00005000* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265 ++ ++pci:v00008086d0000095Asv00008086sd00005002* ++ ID_MODEL_FROM_DATABASE=Wireless-N 7265 ++ ++pci:v00008086d0000095Asv00008086sd00005010* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ ++pci:v00008086d0000095Asv00008086sd00005020* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265 ++ ++pci:v00008086d0000095Asv00008086sd0000502A* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265 ++ ++pci:v00008086d0000095Asv00008086sd00005090* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ ++pci:v00008086d0000095Asv00008086sd00005110* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ ++pci:v00008086d0000095Asv00008086sd00005400* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ ++pci:v00008086d0000095Asv00008086sd00005410* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ ++pci:v00008086d0000095Asv00008086sd00005420* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265 ++ ++pci:v00008086d0000095Asv00008086sd00005490* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ ++pci:v00008086d0000095Asv00008086sd00009010* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ ++pci:v00008086d0000095Asv00008086sd00009210* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ ++pci:v00008086d0000095Asv00008086sd00009410* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ ++pci:v00008086d0000095B* ++ ID_MODEL_FROM_DATABASE=Wireless 7265 ++ ++pci:v00008086d0000095Bsv00008086sd0000500A* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ ++pci:v00008086d0000095Bsv00008086sd00005012* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ ++pci:v00008086d0000095Bsv00008086sd00005200* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265 ++ ++pci:v00008086d0000095Bsv00008086sd00005202* ++ ID_MODEL_FROM_DATABASE=Wireless-N 7265 ++ ++pci:v00008086d0000095Bsv00008086sd00005210* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ ++pci:v00008086d0000095Bsv00008086sd00005290* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ ++pci:v00008086d0000095Bsv00008086sd00005302* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ ++pci:v00008086d0000095Bsv00008086sd00005310* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ + pci:v00008086d00000960* + ID_MODEL_FROM_DATABASE=80960RP (i960RP) Microprocessor/Bridge + +@@ -54299,6 +54758,9 @@ pci:v00008086d00000A04* + pci:v00008086d00000A06* + ID_MODEL_FROM_DATABASE=Haswell-ULT Integrated Graphics Controller + ++pci:v00008086d00000A0C* ++ ID_MODEL_FROM_DATABASE=Haswell-ULT HD Audio Controller ++ + pci:v00008086d00000A16* + ID_MODEL_FROM_DATABASE=Haswell-ULT Integrated Graphics Controller + +@@ -57332,6 +57794,12 @@ pci:v00008086d00001521sv00001028sd00001F62* + pci:v00008086d00001521sv0000103Csd000017D1* + ID_MODEL_FROM_DATABASE=Ethernet 1Gb 4-port 366FLR Adapter + ++pci:v00008086d00001521sv0000103Csd00002003* ++ ID_MODEL_FROM_DATABASE=Ethernet 1Gb 2-port 367i Adapter ++ ++pci:v00008086d00001521sv0000103Csd00002226* ++ ID_MODEL_FROM_DATABASE=Ethernet 1Gb 1-port 364i Adapter ++ + pci:v00008086d00001521sv0000103Csd0000337F* + ID_MODEL_FROM_DATABASE=Ethernet 1Gb 2-port 361i Adapter + +@@ -57407,6 +57875,9 @@ pci:v00008086d00001523sv0000103Csd00001784* + pci:v00008086d00001523sv0000103Csd000018D1* + ID_MODEL_FROM_DATABASE=Ethernet 1Gb 2-port 361FLB Adapter + ++pci:v00008086d00001523sv0000103Csd00001989* ++ ID_MODEL_FROM_DATABASE=Ethernet 1Gb 2-port 363i Adapter ++ + pci:v00008086d00001523sv0000103Csd0000339F* + ID_MODEL_FROM_DATABASE=Ethernet 1Gb 4-port 366M Adapter + +@@ -57584,6 +58055,9 @@ pci:v00008086d00001560* + pci:v00008086d0000157B* + ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection + ++pci:v00008086d0000157C* ++ ID_MODEL_FROM_DATABASE=I210 Gigabit Backplane Connection ++ + pci:v00008086d000015A0* + ID_MODEL_FROM_DATABASE=Ethernet Connection (2) I218-LM + +@@ -58448,6 +58922,9 @@ pci:v00008086d00001E2Dsv00001849sd00001E2D* + pci:v00008086d00001E31* + ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family USB xHCI Host Controller + ++pci:v00008086d00001E31sv0000103Csd000017AB* ++ ID_MODEL_FROM_DATABASE=ProBook 6570b ++ + pci:v00008086d00001E31sv00001043sd00001477* + ID_MODEL_FROM_DATABASE=N56VZ + +@@ -58748,7 +59225,7 @@ pci:v00008086d00001F3F* + pci:v00008086d00001F40* + ID_MODEL_FROM_DATABASE=Ethernet Connection I354 1.0 GbE Backplane + +-pci:v00008086d00001F40sv00001028sd000010F1* ++pci:v00008086d00001F40sv00001028sd000005F1* + ID_MODEL_FROM_DATABASE=Ethernet Connection I354 1.0 GbE Backplane + + pci:v00008086d00001F41* +@@ -65144,6 +65621,9 @@ pci:v00008086d00002E17* + pci:v00008086d00002E20* + ID_MODEL_FROM_DATABASE=4 Series Chipset DRAM Controller + ++pci:v00008086d00002E20sv00001028sd00000283* ++ ID_MODEL_FROM_DATABASE=Dell Vostro 220 ++ + pci:v00008086d00002E20sv00001043sd000082D3* + ID_MODEL_FROM_DATABASE=P5Q Deluxe Motherboard + +@@ -67689,7 +68169,7 @@ pci:v00008086d00004227* + ID_MODEL_FROM_DATABASE=PRO/Wireless 3945ABG [Golan] Network Connection + + pci:v00008086d00004227sv00008086sd00001011* +- ID_MODEL_FROM_DATABASE=ThinkPad R60e/X60s ++ ID_MODEL_FROM_DATABASE=ThinkPad T60/R60e/X60s + + pci:v00008086d00004227sv00008086sd00001014* + ID_MODEL_FROM_DATABASE=PRO/Wireless 3945BG Network Connection +@@ -69155,6 +69635,111 @@ pci:v00008086d00009C65* + pci:v00008086d00009C66* + ID_MODEL_FROM_DATABASE=Lynx Point-LP SPI Controller #1 + ++pci:v00008086d00009C83* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SATA Controller [AHCI Mode] ++ ++pci:v00008086d00009C85* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SATA Controller [RAID Mode] ++ ++pci:v00008086d00009C87* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SATA Controller [RAID Mode] ++ ++pci:v00008086d00009C8F* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SATA Controller [RAID Mode] ++ ++pci:v00008086d00009C90* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #1 ++ ++pci:v00008086d00009C92* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #2 ++ ++pci:v00008086d00009C94* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #3 ++ ++pci:v00008086d00009C96* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #4 ++ ++pci:v00008086d00009C98* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #5 ++ ++pci:v00008086d00009C9A* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP PCI Express Root Port #6 ++ ++pci:v00008086d00009CA0* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP High Definition Audio Controller ++ ++pci:v00008086d00009CA2* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP SMBus Controller ++ ++pci:v00008086d00009CA4* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Thermal Management Controller ++ ++pci:v00008086d00009CA6* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP USB EHCI Controller ++ ++pci:v00008086d00009CB1* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP USB xHCI Controller ++ ++pci:v00008086d00009CB5* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Secure Digital IO Controller ++ ++pci:v00008086d00009CB6* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Smart Sound Technology Controller ++ ++pci:v00008086d00009CBA* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP MEI Controller #1 ++ ++pci:v00008086d00009CBB* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP MEI Controller #2 ++ ++pci:v00008086d00009CBC* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP IDE-r Controller ++ ++pci:v00008086d00009CBD* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP KT Controller ++ ++pci:v00008086d00009CC1* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller ++ ++pci:v00008086d00009CC2* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller ++ ++pci:v00008086d00009CC3* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller ++ ++pci:v00008086d00009CC5* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller ++ ++pci:v00008086d00009CC6* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller ++ ++pci:v00008086d00009CC7* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller ++ ++pci:v00008086d00009CC9* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP LPC Controller ++ ++pci:v00008086d00009CE0* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO DMA Controller ++ ++pci:v00008086d00009CE1* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO I2C Controller #0 ++ ++pci:v00008086d00009CE2* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO I2C Controller #1 ++ ++pci:v00008086d00009CE3* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO UART Controller #0 ++ ++pci:v00008086d00009CE4* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO UART Controller #1 ++ ++pci:v00008086d00009CE5* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO GSPI Controller #0 ++ ++pci:v00008086d00009CE6* ++ ID_MODEL_FROM_DATABASE=Wildcat Point-LP Serial IO GSPI Controller #1 ++ + pci:v00008086d0000A000* + ID_MODEL_FROM_DATABASE=Atom Processor D4xx/D5xx/N4xx/N5xx DMI Bridge + +@@ -70691,6 +71276,24 @@ pci:v0000BDBDd0000A11E* + pci:v0000BDBDd0000A121* + ID_MODEL_FROM_DATABASE=DeckLink HD Extreme 3D/3D+ + ++pci:v0000BDBDd0000A124* ++ ID_MODEL_FROM_DATABASE=Intensity Extreme ++ ++pci:v0000BDBDd0000A126* ++ ID_MODEL_FROM_DATABASE=Intensity Shuttle ++ ++pci:v0000BDBDd0000A127* ++ ID_MODEL_FROM_DATABASE=UltraStudio Express ++ ++pci:v0000BDBDd0000A129* ++ ID_MODEL_FROM_DATABASE=UltraStudio Mini Monitor ++ ++pci:v0000BDBDd0000A12A* ++ ID_MODEL_FROM_DATABASE=UltraStudio Mini Recorder ++ ++pci:v0000BDBDd0000A12D* ++ ID_MODEL_FROM_DATABASE=UltraStudio 4K ++ + pci:v0000BDBDd0000A12E* + ID_MODEL_FROM_DATABASE=DeckLink 4K Extreme + +@@ -70700,6 +71303,9 @@ pci:v0000BDBDd0000A12F* + pci:v0000BDBDd0000A130* + ID_MODEL_FROM_DATABASE=DeckLink Mini Recorder + ++pci:v0000BDBDd0000A132* ++ ID_MODEL_FROM_DATABASE=UltraStudio 4K ++ + pci:v0000C001* + ID_VENDOR_FROM_DATABASE=TSI Telsys + +@@ -70860,7 +71466,7 @@ pci:v0000DCBA* + ID_VENDOR_FROM_DATABASE=Dynamic Engineering + + pci:v0000DCBAd00000046* +- ID_MODEL_FROM_DATABASE=PCIeAlteraCycloneIV ++ ID_MODEL_FROM_DATABASE=PCIe Altera Cyclone IV + + pci:v0000DCBAd00000047* + ID_MODEL_FROM_DATABASE=VPX-RCB +@@ -70868,6 +71474,15 @@ pci:v0000DCBAd00000047* + pci:v0000DCBAd00000048* + ID_MODEL_FROM_DATABASE=PMC-Biserial-III-BAE9 + ++pci:v0000DCBAd0000004E* ++ ID_MODEL_FROM_DATABASE=PC104p-Biserial-III-NVY5 ++ ++pci:v0000DCBAd0000004F* ++ ID_MODEL_FROM_DATABASE=PC104p-Biserial-III-NVY6 ++ ++pci:v0000DCBAd00000052* ++ ID_MODEL_FROM_DATABASE=PCIeBiSerialDb37 BA22 LVDS IO ++ + pci:v0000DD01* + ID_VENDOR_FROM_DATABASE=Digital Devices GmbH + +diff --git a/hwdb/20-usb-vendor-model.hwdb b/hwdb/20-usb-vendor-model.hwdb +index da8385e..6663820 100644 +--- a/hwdb/20-usb-vendor-model.hwdb ++++ b/hwdb/20-usb-vendor-model.hwdb +@@ -53,6 +53,12 @@ usb:v017C* + usb:v017Cp145F* + ID_MODEL_FROM_DATABASE=Trust Deskset + ++usb:v0200* ++ ID_VENDOR_FROM_DATABASE=TP-Link ++ ++usb:v0200p0201* ++ ID_MODEL_FROM_DATABASE=MA180 UMTS Modem ++ + usb:v0204* + ID_VENDOR_FROM_DATABASE=Chipsbank Microelectronics Co., Ltd + +@@ -515,6 +521,12 @@ usb:v03F0p0417* + usb:v03F0p0423* + ID_MODEL_FROM_DATABASE=HS-COMBO Cardreader + ++usb:v03F0p042A* ++ ID_MODEL_FROM_DATABASE=LaserJet M1132 MFP ++ ++usb:v03F0p0441* ++ ID_MODEL_FROM_DATABASE=HP Prime Calculator ++ + usb:v03F0p0504* + ID_MODEL_FROM_DATABASE=DeskJet 885c + +@@ -957,7 +969,7 @@ usb:v03F0p2317* + ID_MODEL_FROM_DATABASE=LaserJet 4350 + + usb:v03F0p231D* +- ID_MODEL_FROM_DATABASE=4 GB Flash Drive ++ ID_MODEL_FROM_DATABASE=Broadcom 2070 Bluetooth Combo + + usb:v03F0p2402* + ID_MODEL_FROM_DATABASE=PhotoSmart 7700 series +@@ -1214,6 +1226,9 @@ usb:v03F0p3B17* + usb:v03F0p3C02* + ID_MODEL_FROM_DATABASE=PhotoSmart 7350 + ++usb:v03F0p3C05* ++ ID_MODEL_FROM_DATABASE=Scanjet Professional 1000 Mobile Scanner ++ + usb:v03F0p3C11* + ID_MODEL_FROM_DATABASE=PSC 1358 + +@@ -2018,6 +2033,9 @@ usb:v0403p8040* + usb:v0403p8070* + ID_MODEL_FROM_DATABASE=7 Port Hub + ++usb:v0403p8140* ++ ID_MODEL_FROM_DATABASE=Vehicle Explorer Interface ++ + usb:v0403p8210* + ID_MODEL_FROM_DATABASE=MGTimer - MGCC (Vic) Timing System + +@@ -2036,6 +2054,12 @@ usb:v0403p8A28* + usb:v0403p8A98* + ID_MODEL_FROM_DATABASE=TIAO Multi-Protocol Adapter + ++usb:v0403p9133* ++ ID_MODEL_FROM_DATABASE=CallerID ++ ++usb:v0403p9135* ++ ID_MODEL_FROM_DATABASE=Rotary Pub alarm ++ + usb:v0403p9E90* + ID_MODEL_FROM_DATABASE=Marvell OpenRD Base/Client + +@@ -2978,6 +3002,9 @@ usb:v040Ap6005* + usb:v040B* + ID_VENDOR_FROM_DATABASE=Weltrend Semiconductor + ++usb:v040Bp0A68* ++ ID_MODEL_FROM_DATABASE=Func MS-3 gaming mouse [WT6573F MCU] ++ + usb:v040Bp6510* + ID_MODEL_FROM_DATABASE=Weltrend Bar Code Reader + +@@ -3662,6 +3689,9 @@ usb:v041Ep4057* + usb:v041Ep4058* + ID_MODEL_FROM_DATABASE=Live! Cam Optia AF + ++usb:v041Ep405F* ++ ID_MODEL_FROM_DATABASE=WebCam Vista (VF0330) ++ + usb:v041Ep4061* + ID_MODEL_FROM_DATABASE=Live! Cam Notebook Pro [VF0400] + +@@ -5255,6 +5285,9 @@ usb:v0457p0162* + usb:v0457p0163* + ID_MODEL_FROM_DATABASE=802.11 Wireless LAN Adapter + ++usb:v0457p0817* ++ ID_MODEL_FROM_DATABASE=SiS-184-ASUS-4352.17 touch panel ++ + usb:v0457p5401* + ID_MODEL_FROM_DATABASE=Wireless Adapter RO80211GS-USB + +@@ -5531,6 +5564,9 @@ usb:v0458p7079* + usb:v0458p707F* + ID_MODEL_FROM_DATABASE=TVGo DVB-T03 [RTL2832] + ++usb:v0458p7088* ++ ID_MODEL_FROM_DATABASE=WideCam 1050 ++ + usb:v0459* + ID_VENDOR_FROM_DATABASE=Adobe Systems, Inc. + +@@ -6401,6 +6437,9 @@ usb:v045Ep0772* + usb:v045Ep0779* + ID_MODEL_FROM_DATABASE=LifeCam HD-3000 + ++usb:v045Ep0797* ++ ID_MODEL_FROM_DATABASE=Optical Mouse 200 ++ + usb:v045Ep930A* + ID_MODEL_FROM_DATABASE=ISOUSB.SYS Intel 82930 Isochronous IO Test Board + +@@ -6624,7 +6663,7 @@ usb:v046A* + ID_VENDOR_FROM_DATABASE=Cherry GmbH + + usb:v046Ap0001* +- ID_MODEL_FROM_DATABASE=My3000 Keyboard ++ ID_MODEL_FROM_DATABASE=Keyboard + + usb:v046Ap0003* + ID_MODEL_FROM_DATABASE=My3000 Hub +@@ -8504,6 +8543,9 @@ usb:v0480pA006* + usb:v0480pA007* + ID_MODEL_FROM_DATABASE=External Disk USB 3.0 + ++usb:v0480pD010* ++ ID_MODEL_FROM_DATABASE=External Disk 3TB ++ + usb:v0481* + ID_VENDOR_FROM_DATABASE=Zenith Data Systems + +@@ -8597,6 +8639,9 @@ usb:v0483p5001* + usb:v0483p5710* + ID_MODEL_FROM_DATABASE=Joystick in FS Mode + ++usb:v0483p5720* ++ ID_MODEL_FROM_DATABASE=STM microSD Flash Device ++ + usb:v0483p5721* + ID_MODEL_FROM_DATABASE=Hantek DDS-3X25 Arbitrary Waveform Generator + +@@ -8693,6 +8738,12 @@ usb:v048Dp9009* + usb:v048Dp9135* + ID_MODEL_FROM_DATABASE=Zolid Mini DVB-T Stick + ++usb:v048Dp9503* ++ ID_MODEL_FROM_DATABASE=ITE it9503 feature-limited DVB-T transmission chip [ccHDtv] ++ ++usb:v048Dp9507* ++ ID_MODEL_FROM_DATABASE=ITE it9507 full featured DVB-T transmission chip [ccHDtv] ++ + usb:v048F* + ID_VENDOR_FROM_DATABASE=Eicon Tech. + +@@ -10937,9 +10988,21 @@ usb:v04A9p3260* + usb:v04A9p3264* + ID_MODEL_FROM_DATABASE=PowerShot A1400 + ++usb:v04A9p3265* ++ ID_MODEL_FROM_DATABASE=Powershot ELPH 130 IS / IXUS 140 ++ + usb:v04A9p3268* + ID_MODEL_FROM_DATABASE=PowerShot ELPH 330 HS / IXUS 255 HS + ++usb:v04A9p3271* ++ ID_MODEL_FROM_DATABASE=PowerShot A2500 ++ ++usb:v04A9p3276* ++ ID_MODEL_FROM_DATABASE=PowerShot SX170 IS ++ ++usb:v04A9p327D* ++ ID_MODEL_FROM_DATABASE=Powershot ELPH 115 IS / IXUS 132 ++ + usb:v04AA* + ID_VENDOR_FROM_DATABASE=DaeWoo Telecom, Ltd + +@@ -11162,6 +11225,9 @@ usb:v04B0p0425* + usb:v04B0p0428* + ID_MODEL_FROM_DATABASE=D7000 + ++usb:v04B0p0429* ++ ID_MODEL_FROM_DATABASE=D5100 ++ + usb:v04B0p042A* + ID_MODEL_FROM_DATABASE=D800 (ptp) + +@@ -12806,6 +12872,9 @@ usb:v04D9p1503* + usb:v04D9p1603* + ID_MODEL_FROM_DATABASE=Keyboard + ++usb:v04D9p1702* ++ ID_MODEL_FROM_DATABASE=Keyboard LKS02 ++ + usb:v04D9p2013* + ID_MODEL_FROM_DATABASE=Keyboard [Das Keyboard] + +@@ -12821,6 +12890,9 @@ usb:v04D9p2519* + usb:v04D9p2832* + ID_MODEL_FROM_DATABASE=1channel Telephone line recorder + ++usb:v04D9p2834* ++ ID_MODEL_FROM_DATABASE=HT82A834R Audio MCU ++ + usb:v04D9pA055* + ID_MODEL_FROM_DATABASE=Keyboard + +@@ -14252,6 +14324,9 @@ usb:v04F2pB354* + usb:v04F3* + ID_VENDOR_FROM_DATABASE=Elan Microelectronics Corp. + ++usb:v04F3p000A* ++ ID_MODEL_FROM_DATABASE=Touchscreen ++ + usb:v04F3p0103* + ID_MODEL_FROM_DATABASE=ActiveJet K-2024 Multimedia Keyboard + +@@ -15302,6 +15377,12 @@ usb:v050Dp1102* + usb:v050Dp1103* + ID_MODEL_FROM_DATABASE=F9L1103 N750 DB 802.11abgn 2x3:3 [Ralink RT3573] + ++usb:v050Dp1106* ++ ID_MODEL_FROM_DATABASE=F9L1106v1 802.11a/b/g/n/ac Wireless Adapter [Broadcom BCM43526] ++ ++usb:v050Dp1109* ++ ID_MODEL_FROM_DATABASE=F9L1109v1 802.11a/b/g/n/ac Wireless Adapter [Realtek RTL8812AU] ++ + usb:v050Dp11F2* + ID_MODEL_FROM_DATABASE=ISY Wireless Micro Adapter IWL 2000 [RTL8188CUS] + +@@ -16514,6 +16595,9 @@ usb:v054Cp0485* + usb:v054Cp04CB* + ID_MODEL_FROM_DATABASE=WALKMAN NWZ-E354 + ++usb:v054Cp06BB* ++ ID_MODEL_FROM_DATABASE=WALKMAN NWZ-F805 ++ + usb:v054Cp1000* + ID_MODEL_FROM_DATABASE=Wireless Buzz! Receiver + +@@ -47582,6 +47666,15 @@ usb:v2101* + usb:v2101p0201* + ID_MODEL_FROM_DATABASE=SIIG 4-to-2 Printer Switch + ++usb:v2149* ++ ID_VENDOR_FROM_DATABASE=Advanced Silicon S.A. ++ ++usb:v2149p211B* ++ ID_MODEL_FROM_DATABASE=Touchscreen Controller ++ ++usb:v2149p2703* ++ ID_MODEL_FROM_DATABASE=TS58xxA/TC56xxA [CoolTouch] ++ + usb:v2162* + ID_VENDOR_FROM_DATABASE=Creative (?) + +@@ -47636,6 +47729,21 @@ usb:v2227* + usb:v2227p3105* + ID_MODEL_FROM_DATABASE=SKYDATA SKD-U100 + ++usb:v2232* ++ ID_VENDOR_FROM_DATABASE=Silicon Motion ++ ++usb:v2232p1005* ++ ID_MODEL_FROM_DATABASE=WebCam SCB-0385N ++ ++usb:v2232p1028* ++ ID_MODEL_FROM_DATABASE=WebCam SC-03FFL11939N ++ ++usb:v2232p1029* ++ ID_MODEL_FROM_DATABASE=WebCam SC-13HDL11939N ++ ++usb:v2232p1037* ++ ID_MODEL_FROM_DATABASE=WebCam SC-03FFM12339N ++ + usb:v2233* + ID_VENDOR_FROM_DATABASE=RadioShack Corporation + diff --git a/0192-delta-replace-readdir_r-with-readdir.patch b/0192-delta-replace-readdir_r-with-readdir.patch new file mode 100644 index 0000000..0ebc7d7 --- /dev/null +++ b/0192-delta-replace-readdir_r-with-readdir.patch @@ -0,0 +1,31 @@ +From 3c0667a5ed5bc7043499f176d68f77dea6bae944 Mon Sep 17 00:00:00 2001 +From: Florian Weimer +Date: Thu, 19 Dec 2013 11:16:12 +0100 +Subject: [PATCH] delta: replace readdir_r with readdir + +--- + src/delta/delta.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/delta/delta.c b/src/delta/delta.c +index b3272d9..fd024fc 100644 +--- a/src/delta/delta.c ++++ b/src/delta/delta.c +@@ -280,13 +280,13 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch + + for (;;) { + struct dirent *de; +- union dirent_storage buf; + int k; + char *p; + +- k = readdir_r(d, &buf.de, &de); +- if (k != 0) +- return -k; ++ errno = 0; ++ de = readdir(d); ++ if (!de && errno != 0) ++ return -errno; + + if (!de) + break; diff --git a/0193-delta-fix-delta-for-drop-ins.patch b/0193-delta-fix-delta-for-drop-ins.patch new file mode 100644 index 0000000..94b5a5d --- /dev/null +++ b/0193-delta-fix-delta-for-drop-ins.patch @@ -0,0 +1,375 @@ +From e0902bd55deee738f3d6e33b8744364ef922caa2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 22 Dec 2013 19:45:02 -0500 +Subject: [PATCH] delta: fix delta for drop-ins + +Also, fix highlighting, add more debug statements, make const tables +static and global, run path_kill_slashes only at entry. + +Conflicts: + src/delta/delta.c +--- + src/delta/delta.c | 174 +++++++++++++++++++++++++----------------------------- + 1 file changed, 79 insertions(+), 95 deletions(-) + +diff --git a/src/delta/delta.c b/src/delta/delta.c +index fd024fc..e97f2e9 100644 +--- a/src/delta/delta.c ++++ b/src/delta/delta.c +@@ -33,6 +33,34 @@ + #include "build.h" + #include "strv.h" + ++static const char prefixes[] = ++ "/etc\0" ++ "/run\0" ++ "/usr/local/lib\0" ++ "/usr/local/share\0" ++ "/usr/lib\0" ++ "/usr/share\0" ++#ifdef HAVE_SPLIT_USR ++ "/lib\0" ++#endif ++ ; ++ ++static const char suffixes[] = ++ "sysctl.d\0" ++ "tmpfiles.d\0" ++ "modules-load.d\0" ++ "binfmt.d\0" ++ "systemd/system\0" ++ "systemd/user\0" ++ "systemd/system-preset\0" ++ "systemd/user-preset\0" ++ "udev/rules.d\0" ++ "modprobe.d\0"; ++ ++static const char have_dropins[] = ++ "systemd/system\0" ++ "systemd/user\0"; ++ + static bool arg_no_pager = false; + static int arg_diff = -1; + +@@ -48,6 +76,14 @@ static enum { + (SHOW_MASKED | SHOW_EQUIVALENT | SHOW_REDIRECTED | SHOW_OVERRIDDEN | SHOW_EXTENDED) + } arg_flags = 0; + ++static void pager_open_if_enabled(void) { ++ ++ if (arg_no_pager) ++ return; ++ ++ pager_open(false); ++} ++ + static int equivalent(const char *a, const char *b) { + _cleanup_free_ char *x = NULL, *y = NULL; + +@@ -76,7 +112,7 @@ static int notify_override_equivalent(const char *top, const char *bottom) { + return 0; + + printf("%s%s%s %s → %s\n", +- ansi_highlight_green(), "[EQUIVALENT]", ansi_highlight(), top, bottom); ++ ansi_highlight_green(), "[EQUIVALENT]", ansi_highlight_off(), top, bottom); + return 1; + } + +@@ -160,24 +196,26 @@ static int found_override(const char *top, const char *bottom) { + } + + static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const char *toppath, const char *drop) { +- _cleanup_free_ char *conf = NULL; ++ _cleanup_free_ char *unit = NULL; + _cleanup_free_ char *path = NULL; + _cleanup_strv_free_ char **list = NULL; + char **file; + char *c; + int r; + ++ assert(!endswith(drop, "/")); ++ + path = strjoin(toppath, "/", drop, NULL); + if (!path) + return -ENOMEM; + +- path_kill_slashes(path); ++ log_debug("Looking at %s", path); + +- conf = strdup(drop); +- if (!conf) ++ unit = strdup(drop); ++ if (!unit) + return -ENOMEM; + +- c = strrchr(conf, '.'); ++ c = strrchr(unit, '.'); + if (!c) + return -EINVAL; + *c = 0; +@@ -200,35 +238,21 @@ static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const + p = strjoin(path, "/", *file, NULL); + if (!p) + return -ENOMEM; ++ d = p + strlen(toppath) + 1; + +- path_kill_slashes(p); +- +- d = strrchr(p, '/'); +- if (!d || d == p) { +- free(p); +- return -EINVAL; +- } +- d--; +- d = strrchr(p, '/'); +- +- if (!d || d == p) { +- free(p); +- return -EINVAL; +- } +- ++ log_debug("Adding at top: %s → %s", d, p); + k = hashmap_put(top, d, p); + if (k >= 0) { + p = strdup(p); + if (!p) + return -ENOMEM; +- d = strrchr(p, '/'); +- d--; +- d = strrchr(p, '/'); ++ d = p + strlen(toppath) + 1; + } else if (k != -EEXIST) { + free(p); + return k; + } + ++ log_debug("Adding at bottom: %s → %s", d, p); + free(hashmap_remove(bottom, d)); + k = hashmap_put(bottom, d, p); + if (k < 0) { +@@ -236,14 +260,14 @@ static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const + return k; + } + +- h = hashmap_get(drops, conf); ++ h = hashmap_get(drops, unit); + if (!h) { + h = hashmap_new(string_hash_func, string_compare_func); + if (!h) + return -ENOMEM; +- hashmap_put(drops, conf, h); +- conf = strdup(conf); +- if (!conf) ++ hashmap_put(drops, unit, h); ++ unit = strdup(unit); ++ if (!unit) + return -ENOMEM; + } + +@@ -251,7 +275,8 @@ static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const + if (!p) + return -ENOMEM; + +- k = hashmap_put(h, path_get_file_name(p), p); ++ log_debug("Adding to drops: %s → %s → %s", unit, basename(p), p); ++ k = hashmap_put(h, basename(p), p); + if (k < 0) { + free(p); + if (k != -EEXIST) +@@ -269,12 +294,14 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch + assert(drops); + assert(path); + ++ log_debug("Looking at %s", path); ++ + d = opendir(path); + if (!d) { + if (errno == ENOENT) + return 0; + +- log_error("Failed to enumerate %s: %m", path); ++ log_error("Failed to open %s: %m", path); + return -errno; + } + +@@ -285,11 +312,8 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch + + errno = 0; + de = readdir(d); +- if (!de && errno != 0) +- return -errno; +- + if (!de) +- break; ++ return -errno; + + if (dropins && de->d_type == DT_DIR && endswith(de->d_name, ".d")) + enumerate_dir_d(top, bottom, drops, path, de->d_name); +@@ -301,9 +325,8 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch + if (!p) + return -ENOMEM; + +- path_kill_slashes(p); +- +- k = hashmap_put(top, path_get_file_name(p), p); ++ log_debug("Adding at top: %s → %s", basename(p), p); ++ k = hashmap_put(top, basename(p), p); + if (k >= 0) { + p = strdup(p); + if (!p) +@@ -313,44 +336,37 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch + return k; + } + +- free(hashmap_remove(bottom, path_get_file_name(p))); +- k = hashmap_put(bottom, path_get_file_name(p), p); ++ log_debug("Adding at bottom: %s → %s", basename(p), p); ++ free(hashmap_remove(bottom, basename(p))); ++ k = hashmap_put(bottom, basename(p), p); + if (k < 0) { + free(p); + return k; + } + } +- +- return 0; + } + +-static int process_suffix(const char *prefixes, const char *suffix, bool dropins) { ++static int process_suffix(const char *suffix) { + const char *p; + char *f; +- Hashmap *top, *bottom=NULL, *drops=NULL; ++ Hashmap *top, *bottom, *drops; + Hashmap *h; + char *key; + int r = 0, k; + Iterator i, j; + int n_found = 0; ++ bool dropins; + +- assert(prefixes); + assert(suffix); ++ assert(!startswith(suffix, "/")); ++ assert(!strstr(suffix, "//")); + +- top = hashmap_new(string_hash_func, string_compare_func); +- if (!top) { +- r = -ENOMEM; +- goto finish; +- } ++ dropins = nulstr_contains(have_dropins, suffix); + ++ top = hashmap_new(string_hash_func, string_compare_func); + bottom = hashmap_new(string_hash_func, string_compare_func); +- if (!bottom) { +- r = -ENOMEM; +- goto finish; +- } +- + drops = hashmap_new(string_hash_func, string_compare_func); +- if (!drops) { ++ if (!top || !bottom || !drops) { + r = -ENOMEM; + goto finish; + } +@@ -365,10 +381,8 @@ static int process_suffix(const char *prefixes, const char *suffix, bool dropins + } + + k = enumerate_dir(top, bottom, drops, t, dropins); +- if (k < 0) ++ if (r == 0) + r = k; +- +- log_debug("Looking at %s", t); + } + + HASHMAP_FOREACH_KEY(f, key, top, i) { +@@ -409,21 +423,20 @@ finish: + return r < 0 ? r : n_found; + } + +-static int process_suffix_chop(const char *prefixes, const char *suffix, const char *have_dropins) { ++static int process_suffix_chop(const char *suffix) { + const char *p; + +- assert(prefixes); + assert(suffix); + + if (!path_is_absolute(suffix)) +- return process_suffix(prefixes, suffix, nulstr_contains(have_dropins, suffix)); ++ return process_suffix(suffix); + + /* Strip prefix from the suffix */ + NULSTR_FOREACH(p, prefixes) { + if (startswith(suffix, p)) { + suffix += strlen(p); + suffix += strspn(suffix, "/"); +- return process_suffix(prefixes, suffix, nulstr_contains(have_dropins, suffix)); ++ return process_suffix(suffix); + } + } + +@@ -548,35 +561,6 @@ static int parse_argv(int argc, char *argv[]) { + } + + int main(int argc, char *argv[]) { +- +- const char prefixes[] = +- "/etc\0" +- "/run\0" +- "/usr/local/lib\0" +- "/usr/local/share\0" +- "/usr/lib\0" +- "/usr/share\0" +-#ifdef HAVE_SPLIT_USR +- "/lib\0" +-#endif +- ; +- +- const char suffixes[] = +- "sysctl.d\0" +- "tmpfiles.d\0" +- "modules-load.d\0" +- "binfmt.d\0" +- "systemd/system\0" +- "systemd/user\0" +- "systemd/system-preset\0" +- "systemd/user-preset\0" +- "udev/rules.d\0" +- "modprobe.d\0"; +- +- const char have_dropins[] = +- "systemd/system\0" +- "systemd/user\0"; +- + int r = 0, k; + int n_found = 0; + +@@ -595,14 +579,14 @@ int main(int argc, char *argv[]) { + else if (arg_diff) + arg_flags |= SHOW_OVERRIDDEN; + +- if (!arg_no_pager) +- pager_open(false); ++ pager_open_if_enabled(); + + if (optind < argc) { + int i; + + for (i = optind; i < argc; i++) { +- k = process_suffix_chop(prefixes, argv[i], have_dropins); ++ path_kill_slashes(argv[i]); ++ k = process_suffix_chop(argv[i]); + if (k < 0) + r = k; + else +@@ -613,7 +597,7 @@ int main(int argc, char *argv[]) { + const char *n; + + NULSTR_FOREACH(n, suffixes) { +- k = process_suffix(prefixes, n, nulstr_contains(have_dropins, n)); ++ k = process_suffix(n); + if (k < 0) + r = k; + else diff --git a/0194-delta-if-prefix-is-specified-only-show-overrides-the.patch b/0194-delta-if-prefix-is-specified-only-show-overrides-the.patch new file mode 100644 index 0000000..23026ab --- /dev/null +++ b/0194-delta-if-prefix-is-specified-only-show-overrides-the.patch @@ -0,0 +1,251 @@ +From 31ce1352b687551d62d3b7d4dc1276b2dff1d65a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 22 Dec 2013 22:53:23 -0500 +Subject: [PATCH] delta: if prefix is specified, only show overrides there + +systemd-delta /run/systemd/system will show all unit overrides +in /run, etc. +--- + man/systemd-delta.xml | 80 +++++++++++++++++++++++++++++++++++++++++---------- + src/delta/delta.c | 71 ++++++++++++++++++++++++++++----------------- + 2 files changed, 109 insertions(+), 42 deletions(-) + +diff --git a/man/systemd-delta.xml b/man/systemd-delta.xml +index 413ebd8..4d3ab78 100644 +--- a/man/systemd-delta.xml ++++ b/man/systemd-delta.xml +@@ -49,7 +49,9 @@ + + + +- systemd-delta OPTIONS SUFFIX ++ systemd-delta ++ OPTIONS ++ PREFIX/SUFFIX|SUFFIX + + + +@@ -57,18 +59,46 @@ + Description + + systemd-delta may be used to +- identify and compare configuration files in +- /etc that override default +- counterparts in /usr. The command +- line argument can be one or more name of a subdirectories of +- /etc or +- /usr/lib to compare, such as +- tmpfiles.d, sysctl.d or +- systemd/system. +- +- When no argument is specified a number of +- well-known subdirectories are searched for overridden +- files. ++ identify and compare configuration files that override ++ other configuration files. Files in ++ /etc have highest priority, files ++ in /run have the second highest ++ priority, ..., files in /lib have ++ lowest priority. Files in a directory with higher ++ priority override files with the same name in ++ directories of lower priority. In addition, certain ++ configuration files can have .d ++ directories which contain "drop-in" files with ++ configuration snippets which augment the main ++ configuration file. "Drop-in" files can be overriden ++ in the same way by placing files with the same name in ++ a directory of higher priority (except that in case of ++ "drop-in" files, both the "drop-in" file name and the ++ name of the containing directory, which corresponds to ++ the name of the main configuration file, must match). ++ For a fuller explanation, see ++ systemd.unit5. ++ ++ ++ The command line argument will be split into a ++ prefix and a suffix. Either is optional. The prefix ++ must be one of the directories containing ++ configuration files (/etc, ++ /run, ++ /usr/lib, ...). If it is given, ++ only overriding files contained in this directory will ++ be shown. Otherwise, all overriding files will be ++ shown. The suffix must be a name of a subdirectory ++ containing configuration files like ++ tmpfiles.d, ++ sysctl.d or ++ systemd/system. If it is given, ++ only configuration files in this subdirectory (across ++ all configuration paths) will be analyzed. Otherwise, ++ all configuration files will be analyzed. If the ++ commandline argument is not given at all, all ++ configuration files will be analyzed. See below for ++ some examples. + + + +@@ -168,9 +198,28 @@ + + + +- + + ++ ++ Examples ++ ++ To see all local configuration: ++ systemd-delta ++ ++ ++ To see all runtime configuration: ++ systemd-delta /run ++ ++ ++ To see all system unit configuration changes: ++ systemd-delta systemd/system ++ ++ ++ To see all runtime "drop-in" changes for system units: ++ systemd-delta --type=extended /run/systemd/system ++ ++ ++ + + Exit status + +@@ -181,7 +230,8 @@ + + See Also + +- systemd1 ++ systemd1, ++ systemd.unit5 + + + +diff --git a/src/delta/delta.c b/src/delta/delta.c +index e97f2e9..ae658f9 100644 +--- a/src/delta/delta.c ++++ b/src/delta/delta.c +@@ -4,6 +4,7 @@ + This file is part of systemd. + + Copyright 2012 Lennart Poettering ++ Copyright 2013 Zbigniew Jędrzejewski-Szmek + + systemd is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published by +@@ -346,7 +347,7 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch + } + } + +-static int process_suffix(const char *suffix) { ++static int process_suffix(const char *suffix, const char *onlyprefix) { + const char *p; + char *f; + Hashmap *top, *bottom, *drops; +@@ -391,20 +392,23 @@ static int process_suffix(const char *suffix) { + o = hashmap_get(bottom, key); + assert(o); + +- if (path_equal(o, f)) +- notify_override_unchanged(f); +- else { +- k = found_override(f, o); +- if (k < 0) +- r = k; +- else +- n_found += k; ++ if (!onlyprefix || startswith(o, onlyprefix)) { ++ if (path_equal(o, f)) { ++ notify_override_unchanged(f); ++ } else { ++ k = found_override(f, o); ++ if (k < 0) ++ r = k; ++ else ++ n_found += k; ++ } + } + + h = hashmap_get(drops, key); + if (h) + HASHMAP_FOREACH(o, h, j) +- n_found += notify_override_extended(f, o); ++ if (!onlyprefix || startswith(o, onlyprefix)) ++ n_found += notify_override_extended(f, o); + } + + finish: +@@ -423,24 +427,41 @@ finish: + return r < 0 ? r : n_found; + } + +-static int process_suffix_chop(const char *suffix) { ++static int process_suffixes(const char *onlyprefix) { ++ const char *n; ++ int n_found = 0, r; ++ ++ NULSTR_FOREACH(n, suffixes) { ++ r = process_suffix(n, onlyprefix); ++ if (r < 0) ++ return r; ++ else ++ n_found += r; ++ } ++ return n_found; ++} ++ ++static int process_suffix_chop(const char *arg) { + const char *p; + +- assert(suffix); ++ assert(arg); + +- if (!path_is_absolute(suffix)) +- return process_suffix(suffix); ++ if (!path_is_absolute(arg)) ++ return process_suffix(arg, NULL); + + /* Strip prefix from the suffix */ + NULSTR_FOREACH(p, prefixes) { +- if (startswith(suffix, p)) { +- suffix += strlen(p); ++ const char *suffix = startswith(arg, p); ++ if (suffix) { + suffix += strspn(suffix, "/"); +- return process_suffix(suffix); ++ if (*suffix) ++ return process_suffix(suffix, NULL); ++ else ++ return process_suffixes(arg); + } + } + +- log_error("Invalid suffix specification %s.", suffix); ++ log_error("Invalid suffix specification %s.", arg); + return -EINVAL; + } + +@@ -594,15 +615,11 @@ int main(int argc, char *argv[]) { + } + + } else { +- const char *n; +- +- NULSTR_FOREACH(n, suffixes) { +- k = process_suffix(n); +- if (k < 0) +- r = k; +- else +- n_found += k; +- } ++ k = process_suffixes(NULL); ++ if (k < 0) ++ r = k; ++ else ++ n_found += k; + } + + if (r >= 0) diff --git a/0195-log-log_error-and-friends-add-a-newline-after-each-l.patch b/0195-log-log_error-and-friends-add-a-newline-after-each-l.patch new file mode 100644 index 0000000..e89402c --- /dev/null +++ b/0195-log-log_error-and-friends-add-a-newline-after-each-l.patch @@ -0,0 +1,1520 @@ +From 316d1c573345d8d13a289ce38cbe2fd683a75d98 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 24 Dec 2013 16:39:37 +0100 +Subject: [PATCH] log: log_error() and friends add a newline after each line + anyway, so avoid including it in the log strings + +Conflicts: + src/bus-driverd/bus-driverd.c + src/bus-proxyd/bus-proxyd.c + src/shared/path-util.c + src/udev/net/link-config.c + src/udev/scsi_id/scsi_id.c + src/udev/scsi_id/scsi_serial.c + src/udev/udev-builtin-keyboard.c + src/udev/udev-event.c + src/udev/udev-rules.c + src/udev/udevadm-monitor.c + src/udev/udevadm-trigger.c + src/udev/udevd.c +--- + src/binfmt/binfmt.c | 2 +- + src/bootchart/bootchart.c | 4 +- + src/journal/coredumpctl.c | 2 +- + src/journal/journal-authenticate.c | 2 +- + src/modules-load/modules-load.c | 4 +- + src/sysctl/sysctl.c | 2 +- + src/test/test-udev.c | 8 +- + src/tmpfiles/tmpfiles.c | 4 +- + src/udev/accelerometer/accelerometer.c | 2 +- + src/udev/ata_id/ata_id.c | 6 +- + src/udev/cdrom_id/cdrom_id.c | 160 ++++++++++++++++----------------- + src/udev/udev-builtin-blkid.c | 2 +- + src/udev/udev-builtin-firmware.c | 10 +-- + src/udev/udev-builtin-input_id.c | 14 +-- + src/udev/udev-builtin-kmod.c | 18 ++-- + src/udev/udev-builtin-usb_id.c | 22 ++--- + src/udev/udev-ctrl.c | 22 ++--- + src/udev/udev-node.c | 32 +++---- + src/udev/udev-watch.c | 10 +-- + src/udev/udevadm-hwdb.c | 42 ++++----- + src/udev/udevadm-settle.c | 16 ++-- + src/udev/udevadm-test.c | 4 +- + src/udev/udevadm.c | 2 +- + 23 files changed, 195 insertions(+), 195 deletions(-) + +diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c +index 5a42b3d..7ed1ae7 100644 +--- a/src/binfmt/binfmt.c ++++ b/src/binfmt/binfmt.c +@@ -94,7 +94,7 @@ static int apply_file(const char *path, bool ignore_enoent) { + return r; + } + +- log_debug("apply: %s\n", path); ++ log_debug("apply: %s", path); + for (;;) { + char l[LINE_MAX], *p; + int k; +diff --git a/src/bootchart/bootchart.c b/src/bootchart/bootchart.c +index 14ccd3e..9f99c1f 100644 +--- a/src/bootchart/bootchart.c ++++ b/src/bootchart/bootchart.c +@@ -262,12 +262,12 @@ static void do_journal_append(char *file) + + f = open(file, O_RDONLY); + if (f < 0) { +- log_error("Failed to read bootchart data: %m\n"); ++ log_error("Failed to read bootchart data: %m"); + return; + } + n = loop_read(f, p + 10, BOOTCHART_MAX, false); + if (n < 0) { +- log_error("Failed to read bootchart data: %s\n", strerror(-n)); ++ log_error("Failed to read bootchart data: %s", strerror(-n)); + close(f); + return; + } +diff --git a/src/journal/coredumpctl.c b/src/journal/coredumpctl.c +index 75c96cc..560a91b 100644 +--- a/src/journal/coredumpctl.c ++++ b/src/journal/coredumpctl.c +@@ -417,7 +417,7 @@ static int dump_core(sd_journal* j) { + + r = sd_journal_previous(j); + if (r >= 0) +- log_warning("More than one entry matches, ignoring rest.\n"); ++ log_warning("More than one entry matches, ignoring rest."); + + return 0; + } +diff --git a/src/journal/journal-authenticate.c b/src/journal/journal-authenticate.c +index bd7100a..f416b79 100644 +--- a/src/journal/journal-authenticate.c ++++ b/src/journal/journal-authenticate.c +@@ -60,7 +60,7 @@ int journal_file_append_tag(JournalFile *f) { + o->tag.seqnum = htole64(journal_file_tag_seqnum(f)); + o->tag.epoch = htole64(FSPRG_GetEpoch(f->fsprg_state)); + +- log_debug("Writing tag %"PRIu64" for epoch %"PRIu64"\n", ++ log_debug("Writing tag %"PRIu64" for epoch %"PRIu64"", + le64toh(o->tag.seqnum), + FSPRG_GetEpoch(f->fsprg_state)); + +diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c +index 49ee420..9789398 100644 +--- a/src/modules-load/modules-load.c ++++ b/src/modules-load/modules-load.c +@@ -122,7 +122,7 @@ static int load_module(struct kmod_ctx *ctx, const char *m) { + struct kmod_list *itr, *modlist = NULL; + int r = 0; + +- log_debug("load: %s\n", m); ++ log_debug("load: %s", m); + + r = kmod_module_new_from_lookup(ctx, m, &modlist); + if (r < 0) { +@@ -190,7 +190,7 @@ static int apply_file(struct kmod_ctx *ctx, const char *path, bool ignore_enoent + return r; + } + +- log_debug("apply: %s\n", path); ++ log_debug("apply: %s", path); + for (;;) { + char line[LINE_MAX], *l; + int k; +diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c +index b5670db..8fb0eb6 100644 +--- a/src/sysctl/sysctl.c ++++ b/src/sysctl/sysctl.c +@@ -132,7 +132,7 @@ static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno + return r; + } + +- log_debug("parse: %s\n", path); ++ log_debug("parse: %s", path); + while (!feof(f)) { + char l[LINE_MAX], *p, *value, *new_value, *property, *existing; + void *v; +diff --git a/src/test/test-udev.c b/src/test/test-udev.c +index 17825f1..676669b 100644 +--- a/src/test/test-udev.c ++++ b/src/test/test-udev.c +@@ -101,20 +101,20 @@ int main(int argc, char *argv[]) + if (udev == NULL) + return EXIT_FAILURE; + +- log_debug("version %s\n", VERSION); ++ log_debug("version %s", VERSION); + label_init("/dev"); + + sigprocmask(SIG_SETMASK, NULL, &sigmask_orig); + + action = argv[1]; + if (action == NULL) { +- log_error("action missing\n"); ++ log_error("action missing"); + goto out; + } + + devpath = argv[2]; + if (devpath == NULL) { +- log_error("devpath missing\n"); ++ log_error("devpath missing"); + goto out; + } + +@@ -123,7 +123,7 @@ int main(int argc, char *argv[]) + strscpyl(syspath, sizeof(syspath), "/sys", devpath, NULL); + dev = udev_device_new_from_syspath(udev, syspath); + if (dev == NULL) { +- log_debug("unknown device '%s'\n", devpath); ++ log_debug("unknown device '%s'", devpath); + goto out; + } + +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index e23847b..00f74c2 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -359,7 +359,7 @@ static int dir_cleanup( + continue; + + if (i->type != IGNORE_DIRECTORY_PATH || !streq(dent->d_name, p)) { +- log_debug("rmdir '%s'\n", sub_path); ++ log_debug("rmdir '%s'", sub_path); + + if (unlinkat(dirfd(d), dent->d_name, AT_REMOVEDIR) < 0) { + if (errno != ENOENT && errno != ENOTEMPTY) { +@@ -407,7 +407,7 @@ static int dir_cleanup( + if (age >= cutoff) + continue; + +- log_debug("unlink '%s'\n", sub_path); ++ log_debug("unlink '%s'", sub_path); + + if (unlinkat(dirfd(d), dent->d_name, 0) < 0) { + if (errno != ENOENT) { +diff --git a/src/udev/accelerometer/accelerometer.c b/src/udev/accelerometer/accelerometer.c +index e611b48..9610d7c 100644 +--- a/src/udev/accelerometer/accelerometer.c ++++ b/src/udev/accelerometer/accelerometer.c +@@ -334,7 +334,7 @@ int main (int argc, char** argv) + return 0; + } + +- log_debug("opening accelerometer device %s\n", devnode); ++ log_debug("opening accelerometer device %s", devnode); + test_orientation(udev, dev, devnode); + free(devnode); + log_close(); +diff --git a/src/udev/ata_id/ata_id.c b/src/udev/ata_id/ata_id.c +index d375d43..5e55f8d 100644 +--- a/src/udev/ata_id/ata_id.c ++++ b/src/udev/ata_id/ata_id.c +@@ -462,14 +462,14 @@ int main(int argc, char *argv[]) + + node = argv[optind]; + if (node == NULL) { +- log_error("no node specified\n"); ++ log_error("no node specified"); + rc = 1; + goto exit; + } + + fd = open(node, O_RDONLY|O_NONBLOCK); + if (fd < 0) { +- log_error("unable to open '%s'\n", node); ++ log_error("unable to open '%s'", node); + rc = 1; + goto exit; + } +@@ -501,7 +501,7 @@ int main(int argc, char *argv[]) + } else { + /* If this fails, then try HDIO_GET_IDENTITY */ + if (ioctl(fd, HDIO_GET_IDENTITY, &id) != 0) { +- log_debug("HDIO_GET_IDENTITY failed for '%s': %m\n", node); ++ log_debug("HDIO_GET_IDENTITY failed for '%s': %m", node); + rc = 2; + goto close; + } +diff --git a/src/udev/cdrom_id/cdrom_id.c b/src/udev/cdrom_id/cdrom_id.c +index 1ad0459..1fc0dfa 100644 +--- a/src/udev/cdrom_id/cdrom_id.c ++++ b/src/udev/cdrom_id/cdrom_id.c +@@ -137,10 +137,10 @@ static bool is_mounted(const char *device) + static void info_scsi_cmd_err(struct udev *udev, const char *cmd, int err) + { + if (err == -1) { +- log_debug("%s failed\n", cmd); ++ log_debug("%s failed", cmd); + return; + } +- log_debug("%s failed with SK=%Xh/ASC=%02Xh/ACQ=%02Xh\n", cmd, SK(err), ASC(err), ASCQ(err)); ++ log_debug("%s failed with SK=%Xh/ASC=%02Xh/ACQ=%02Xh", cmd, SK(err), ASC(err), ASCQ(err)); + } + + struct scsi_cmd { +@@ -205,11 +205,11 @@ static int media_lock(struct udev *udev, int fd, bool lock) + /* disable the kernel's lock logic */ + err = ioctl(fd, CDROM_CLEAR_OPTIONS, CDO_LOCK); + if (err < 0) +- log_debug("CDROM_CLEAR_OPTIONS, CDO_LOCK failed\n"); ++ log_debug("CDROM_CLEAR_OPTIONS, CDO_LOCK failed"); + + err = ioctl(fd, CDROM_LOCKDOOR, lock ? 1 : 0); + if (err < 0) +- log_debug("CDROM_LOCKDOOR failed\n"); ++ log_debug("CDROM_LOCKDOOR failed"); + + return err; + } +@@ -237,7 +237,7 @@ static int cd_capability_compat(struct udev *udev, int fd) + + capability = ioctl(fd, CDROM_GET_CAPABILITY, NULL); + if (capability < 0) { +- log_debug("CDROM_GET_CAPABILITY failed\n"); ++ log_debug("CDROM_GET_CAPABILITY failed"); + return -1; + } + +@@ -261,7 +261,7 @@ static int cd_capability_compat(struct udev *udev, int fd) + static int cd_media_compat(struct udev *udev, int fd) + { + if (ioctl(fd, CDROM_DRIVE_STATUS, CDSL_CURRENT) != CDS_DISC_OK) { +- log_debug("CDROM_DRIVE_STATUS != CDS_DISC_OK\n"); ++ log_debug("CDROM_DRIVE_STATUS != CDS_DISC_OK"); + return -1; + } + cd_media = 1; +@@ -285,11 +285,11 @@ static int cd_inquiry(struct udev *udev, int fd) + } + + if ((inq[0] & 0x1F) != 5) { +- log_debug("not an MMC unit\n"); ++ log_debug("not an MMC unit"); + return -1; + } + +- log_debug("INQUIRY: [%.8s][%.16s][%.4s]\n", inq + 8, inq + 16, inq + 32); ++ log_debug("INQUIRY: [%.8s][%.16s][%.4s]", inq + 8, inq + 16, inq + 32); + return 0; + } + +@@ -299,105 +299,105 @@ static void feature_profile_media(struct udev *udev, int cur_profile) + case 0x03: + case 0x04: + case 0x05: +- log_debug("profile 0x%02x \n", cur_profile); ++ log_debug("profile 0x%02x ", cur_profile); + cd_media = 1; + cd_media_mo = 1; + break; + case 0x08: +- log_debug("profile 0x%02x media_cd_rom\n", cur_profile); ++ log_debug("profile 0x%02x media_cd_rom", cur_profile); + cd_media = 1; + cd_media_cd_rom = 1; + break; + case 0x09: +- log_debug("profile 0x%02x media_cd_r\n", cur_profile); ++ log_debug("profile 0x%02x media_cd_r", cur_profile); + cd_media = 1; + cd_media_cd_r = 1; + break; + case 0x0a: +- log_debug("profile 0x%02x media_cd_rw\n", cur_profile); ++ log_debug("profile 0x%02x media_cd_rw", cur_profile); + cd_media = 1; + cd_media_cd_rw = 1; + break; + case 0x10: +- log_debug("profile 0x%02x media_dvd_ro\n", cur_profile); ++ log_debug("profile 0x%02x media_dvd_ro", cur_profile); + cd_media = 1; + cd_media_dvd_rom = 1; + break; + case 0x11: +- log_debug("profile 0x%02x media_dvd_r\n", cur_profile); ++ log_debug("profile 0x%02x media_dvd_r", cur_profile); + cd_media = 1; + cd_media_dvd_r = 1; + break; + case 0x12: +- log_debug("profile 0x%02x media_dvd_ram\n", cur_profile); ++ log_debug("profile 0x%02x media_dvd_ram", cur_profile); + cd_media = 1; + cd_media_dvd_ram = 1; + break; + case 0x13: +- log_debug("profile 0x%02x media_dvd_rw_ro\n", cur_profile); ++ log_debug("profile 0x%02x media_dvd_rw_ro", cur_profile); + cd_media = 1; + cd_media_dvd_rw = 1; + cd_media_dvd_rw_ro = 1; + break; + case 0x14: +- log_debug("profile 0x%02x media_dvd_rw_seq\n", cur_profile); ++ log_debug("profile 0x%02x media_dvd_rw_seq", cur_profile); + cd_media = 1; + cd_media_dvd_rw = 1; + cd_media_dvd_rw_seq = 1; + break; + case 0x1B: +- log_debug("profile 0x%02x media_dvd_plus_r\n", cur_profile); ++ log_debug("profile 0x%02x media_dvd_plus_r", cur_profile); + cd_media = 1; + cd_media_dvd_plus_r = 1; + break; + case 0x1A: +- log_debug("profile 0x%02x media_dvd_plus_rw\n", cur_profile); ++ log_debug("profile 0x%02x media_dvd_plus_rw", cur_profile); + cd_media = 1; + cd_media_dvd_plus_rw = 1; + break; + case 0x2A: +- log_debug("profile 0x%02x media_dvd_plus_rw_dl\n", cur_profile); ++ log_debug("profile 0x%02x media_dvd_plus_rw_dl", cur_profile); + cd_media = 1; + cd_media_dvd_plus_rw_dl = 1; + break; + case 0x2B: +- log_debug("profile 0x%02x media_dvd_plus_r_dl\n", cur_profile); ++ log_debug("profile 0x%02x media_dvd_plus_r_dl", cur_profile); + cd_media = 1; + cd_media_dvd_plus_r_dl = 1; + break; + case 0x40: +- log_debug("profile 0x%02x media_bd\n", cur_profile); ++ log_debug("profile 0x%02x media_bd", cur_profile); + cd_media = 1; + cd_media_bd = 1; + break; + case 0x41: + case 0x42: +- log_debug("profile 0x%02x media_bd_r\n", cur_profile); ++ log_debug("profile 0x%02x media_bd_r", cur_profile); + cd_media = 1; + cd_media_bd_r = 1; + break; + case 0x43: +- log_debug("profile 0x%02x media_bd_re\n", cur_profile); ++ log_debug("profile 0x%02x media_bd_re", cur_profile); + cd_media = 1; + cd_media_bd_re = 1; + break; + case 0x50: +- log_debug("profile 0x%02x media_hddvd\n", cur_profile); ++ log_debug("profile 0x%02x media_hddvd", cur_profile); + cd_media = 1; + cd_media_hddvd = 1; + break; + case 0x51: +- log_debug("profile 0x%02x media_hddvd_r\n", cur_profile); ++ log_debug("profile 0x%02x media_hddvd_r", cur_profile); + cd_media = 1; + cd_media_hddvd_r = 1; + break; + case 0x52: +- log_debug("profile 0x%02x media_hddvd_rw\n", cur_profile); ++ log_debug("profile 0x%02x media_hddvd_rw", cur_profile); + cd_media = 1; + cd_media_hddvd_rw = 1; + break; + default: +- log_debug("profile 0x%02x \n", cur_profile); ++ log_debug("profile 0x%02x ", cur_profile); + break; + } + } +@@ -414,77 +414,77 @@ static int feature_profiles(struct udev *udev, const unsigned char *profiles, si + case 0x03: + case 0x04: + case 0x05: +- log_debug("profile 0x%02x mo\n", profile); ++ log_debug("profile 0x%02x mo", profile); + cd_mo = 1; + break; + case 0x08: +- log_debug("profile 0x%02x cd_rom\n", profile); ++ log_debug("profile 0x%02x cd_rom", profile); + cd_cd_rom = 1; + break; + case 0x09: +- log_debug("profile 0x%02x cd_r\n", profile); ++ log_debug("profile 0x%02x cd_r", profile); + cd_cd_r = 1; + break; + case 0x0A: +- log_debug("profile 0x%02x cd_rw\n", profile); ++ log_debug("profile 0x%02x cd_rw", profile); + cd_cd_rw = 1; + break; + case 0x10: +- log_debug("profile 0x%02x dvd_rom\n", profile); ++ log_debug("profile 0x%02x dvd_rom", profile); + cd_dvd_rom = 1; + break; + case 0x12: +- log_debug("profile 0x%02x dvd_ram\n", profile); ++ log_debug("profile 0x%02x dvd_ram", profile); + cd_dvd_ram = 1; + break; + case 0x13: + case 0x14: +- log_debug("profile 0x%02x dvd_rw\n", profile); ++ log_debug("profile 0x%02x dvd_rw", profile); + cd_dvd_rw = 1; + break; + case 0x1B: +- log_debug("profile 0x%02x dvd_plus_r\n", profile); ++ log_debug("profile 0x%02x dvd_plus_r", profile); + cd_dvd_plus_r = 1; + break; + case 0x1A: +- log_debug("profile 0x%02x dvd_plus_rw\n", profile); ++ log_debug("profile 0x%02x dvd_plus_rw", profile); + cd_dvd_plus_rw = 1; + break; + case 0x2A: +- log_debug("profile 0x%02x dvd_plus_rw_dl\n", profile); ++ log_debug("profile 0x%02x dvd_plus_rw_dl", profile); + cd_dvd_plus_rw_dl = 1; + break; + case 0x2B: +- log_debug("profile 0x%02x dvd_plus_r_dl\n", profile); ++ log_debug("profile 0x%02x dvd_plus_r_dl", profile); + cd_dvd_plus_r_dl = 1; + break; + case 0x40: + cd_bd = 1; +- log_debug("profile 0x%02x bd\n", profile); ++ log_debug("profile 0x%02x bd", profile); + break; + case 0x41: + case 0x42: + cd_bd_r = 1; +- log_debug("profile 0x%02x bd_r\n", profile); ++ log_debug("profile 0x%02x bd_r", profile); + break; + case 0x43: + cd_bd_re = 1; +- log_debug("profile 0x%02x bd_re\n", profile); ++ log_debug("profile 0x%02x bd_re", profile); + break; + case 0x50: + cd_hddvd = 1; +- log_debug("profile 0x%02x hddvd\n", profile); ++ log_debug("profile 0x%02x hddvd", profile); + break; + case 0x51: + cd_hddvd_r = 1; +- log_debug("profile 0x%02x hddvd_r\n", profile); ++ log_debug("profile 0x%02x hddvd_r", profile); + break; + case 0x52: + cd_hddvd_rw = 1; +- log_debug("profile 0x%02x hddvd_rw\n", profile); ++ log_debug("profile 0x%02x hddvd_rw", profile); + break; + default: +- log_debug("profile 0x%02x \n", profile); ++ log_debug("profile 0x%02x ", profile); + break; + } + } +@@ -507,13 +507,13 @@ static int cd_profiles_old_mmc(struct udev *udev, int fd) + if ((err != 0)) { + info_scsi_cmd_err(udev, "READ DISC INFORMATION", err); + if (cd_media == 1) { +- log_debug("no current profile, but disc is present; assuming CD-ROM\n"); ++ log_debug("no current profile, but disc is present; assuming CD-ROM"); + cd_media_cd_rom = 1; + cd_media_track_count = 1; + cd_media_track_count_data = 1; + return 0; + } else { +- log_debug("no current profile, assuming no media\n"); ++ log_debug("no current profile, assuming no media"); + return -1; + } + }; +@@ -522,13 +522,13 @@ static int cd_profiles_old_mmc(struct udev *udev, int fd) + + if (header[2] & 16) { + cd_media_cd_rw = 1; +- log_debug("profile 0x0a media_cd_rw\n"); ++ log_debug("profile 0x0a media_cd_rw"); + } else if ((header[2] & 3) < 2 && cd_cd_r) { + cd_media_cd_r = 1; +- log_debug("profile 0x09 media_cd_r\n"); ++ log_debug("profile 0x09 media_cd_r"); + } else { + cd_media_cd_rom = 1; +- log_debug("profile 0x08 media_cd_rom\n"); ++ log_debug("profile 0x08 media_cd_rom"); + } + return 0; + } +@@ -556,8 +556,8 @@ static int cd_profiles(struct udev *udev, int fd) + info_scsi_cmd_err(udev, "GET CONFIGURATION", err); + /* handle pre-MMC2 drives which do not support GET CONFIGURATION */ + if (SK(err) == 0x5 && ASC(err) == 0x20) { +- log_debug("drive is pre-MMC2 and does not support 46h get configuration command\n"); +- log_debug("trying to work around the problem\n"); ++ log_debug("drive is pre-MMC2 and does not support 46h get configuration command"); ++ log_debug("trying to work around the problem"); + ret = cd_profiles_old_mmc(udev, fd); + } + goto out; +@@ -565,18 +565,18 @@ static int cd_profiles(struct udev *udev, int fd) + + cur_profile = features[6] << 8 | features[7]; + if (cur_profile > 0) { +- log_debug("current profile 0x%02x\n", cur_profile); ++ log_debug("current profile 0x%02x", cur_profile); + feature_profile_media (udev, cur_profile); + ret = 0; /* we have media */ + } else { +- log_debug("no current profile, assuming no media\n"); ++ log_debug("no current profile, assuming no media"); + } + + len = features[0] << 24 | features[1] << 16 | features[2] << 8 | features[3]; +- log_debug("GET CONFIGURATION: size of features buffer 0x%04x\n", len); ++ log_debug("GET CONFIGURATION: size of features buffer 0x%04x", len); + + if (len > sizeof(features)) { +- log_debug("can not get features in a single query, truncating\n"); ++ log_debug("can not get features in a single query, truncating"); + len = sizeof(features); + } else if (len <= 8) { + len = sizeof(features); +@@ -596,10 +596,10 @@ static int cd_profiles(struct udev *udev, int fd) + + /* parse the length once more, in case the drive decided to have other features suddenly :) */ + len = features[0] << 24 | features[1] << 16 | features[2] << 8 | features[3]; +- log_debug("GET CONFIGURATION: size of features buffer 0x%04x\n", len); ++ log_debug("GET CONFIGURATION: size of features buffer 0x%04x", len); + + if (len > sizeof(features)) { +- log_debug("can not get features in a single query, truncating\n"); ++ log_debug("can not get features in a single query, truncating"); + len = sizeof(features); + } + +@@ -611,11 +611,11 @@ static int cd_profiles(struct udev *udev, int fd) + + switch (feature) { + case 0x00: +- log_debug("GET CONFIGURATION: feature 'profiles', with %i entries\n", features[i+3] / 4); ++ log_debug("GET CONFIGURATION: feature 'profiles', with %i entries", features[i+3] / 4); + feature_profiles(udev, &features[i]+4, features[i+3]); + break; + default: +- log_debug("GET CONFIGURATION: feature 0x%04x , with 0x%02x bytes\n", feature, features[i+3]); ++ log_debug("GET CONFIGURATION: feature 0x%04x , with 0x%02x bytes", feature, features[i+3]); + break; + } + } +@@ -646,8 +646,8 @@ static int cd_media_info(struct udev *udev, int fd) + }; + + cd_media = 1; +- log_debug("disk type %02x\n", header[8]); +- log_debug("hardware reported media status: %s\n", media_status[header[2] & 3]); ++ log_debug("disk type %02x", header[8]); ++ log_debug("hardware reported media status: %s", media_status[header[2] & 3]); + + /* exclude plain CDROM, some fake cdroms return 0 for "blank" media here */ + if (!cd_media_cd_rom) +@@ -685,7 +685,7 @@ static int cd_media_info(struct udev *udev, int fd) + } + if (dvdstruct[4] & 0x02) { + cd_media_state = media_status[2]; +- log_debug("write-protected DVD-RAM media inserted\n"); ++ log_debug("write-protected DVD-RAM media inserted"); + goto determined; + } + +@@ -702,13 +702,13 @@ static int cd_media_info(struct udev *udev, int fd) + + len = format[3]; + if (len & 7 || len < 16) { +- log_debug("invalid format capacities length\n"); ++ log_debug("invalid format capacities length"); + return -1; + } + + switch(format[8] & 3) { + case 1: +- log_debug("unformatted DVD-RAM media inserted\n"); ++ log_debug("unformatted DVD-RAM media inserted"); + /* This means that last format was interrupted + * or failed, blank dvd-ram discs are factory + * formatted. Take no action here as it takes +@@ -717,12 +717,12 @@ static int cd_media_info(struct udev *udev, int fd) + goto determined; + + case 2: +- log_debug("formatted DVD-RAM media inserted\n"); ++ log_debug("formatted DVD-RAM media inserted"); + break; + + case 3: + cd_media = 0; //return no media +- log_debug("format capacities returned no media\n"); ++ log_debug("format capacities returned no media"); + return -1; + } + } +@@ -758,9 +758,9 @@ static int cd_media_info(struct udev *udev, int fd) + + if (!result) { + cd_media_state = media_status[0]; +- log_debug("no data in blocks 0 or 16, assuming blank\n"); ++ log_debug("no data in blocks 0 or 16, assuming blank"); + } else { +- log_debug("data in blocks 0 or 16, assuming complete\n"); ++ log_debug("data in blocks 0 or 16, assuming complete"); + } + } + +@@ -796,7 +796,7 @@ static int cd_media_toc(struct udev *udev, int fd) + } + + len = (header[0] << 8 | header[1]) + 2; +- log_debug("READ TOC: len: %d, start track: %d, end track: %d\n", len, header[2], header[3]); ++ log_debug("READ TOC: len: %d, start track: %d, end track: %d", len, header[2], header[3]); + if (len > sizeof(toc)) + return -1; + if (len < 2) +@@ -830,7 +830,7 @@ static int cd_media_toc(struct udev *udev, int fd) + is_data_track = (p[1] & 0x04) != 0; + + block = p[4] << 24 | p[5] << 16 | p[6] << 8 | p[7]; +- log_debug("track=%u info=0x%x(%s) start_block=%u\n", ++ log_debug("track=%u info=0x%x(%s) start_block=%u", + p[2], p[1] & 0x0f, is_data_track ? "data":"audio", block); + + if (is_data_track) +@@ -850,7 +850,7 @@ static int cd_media_toc(struct udev *udev, int fd) + return -1; + } + len = header[4+4] << 24 | header[4+5] << 16 | header[4+6] << 8 | header[4+7]; +- log_debug("last track %u starts at block %u\n", header[4+2], len); ++ log_debug("last track %u starts at block %u", header[4+2], len); + cd_media_session_last_offset = (unsigned long long int)len * 2048; + return 0; + } +@@ -919,7 +919,7 @@ int main(int argc, char *argv[]) + + node = argv[optind]; + if (!node) { +- log_error("no device\n"); ++ log_error("no device"); + fprintf(stderr, "no device\n"); + rc = 1; + goto exit; +@@ -937,12 +937,12 @@ int main(int argc, char *argv[]) + nanosleep(&duration, NULL); + } + if (fd < 0) { +- log_debug("unable to open '%s'\n", node); ++ log_debug("unable to open '%s'", node); + fprintf(stderr, "unable to open '%s'\n", node); + rc = 1; + goto exit; + } +- log_debug("probing: '%s'\n", node); ++ log_debug("probing: '%s'", node); + + /* same data as original cdrom_id */ + if (cd_capability_compat(udev, fd) < 0) { +@@ -973,19 +973,19 @@ int main(int argc, char *argv[]) + work: + /* lock the media, so we enable eject button events */ + if (lock && cd_media) { +- log_debug("PREVENT_ALLOW_MEDIUM_REMOVAL (lock)\n"); ++ log_debug("PREVENT_ALLOW_MEDIUM_REMOVAL (lock)"); + media_lock(udev, fd, true); + } + + if (unlock && cd_media) { +- log_debug("PREVENT_ALLOW_MEDIUM_REMOVAL (unlock)\n"); ++ log_debug("PREVENT_ALLOW_MEDIUM_REMOVAL (unlock)"); + media_lock(udev, fd, false); + } + + if (eject) { +- log_debug("PREVENT_ALLOW_MEDIUM_REMOVAL (unlock)\n"); ++ log_debug("PREVENT_ALLOW_MEDIUM_REMOVAL (unlock)"); + media_lock(udev, fd, false); +- log_debug("START_STOP_UNIT (eject)\n"); ++ log_debug("START_STOP_UNIT (eject)"); + media_eject(udev, fd); + } + +diff --git a/src/udev/udev-builtin-blkid.c b/src/udev/udev-builtin-blkid.c +index b48dccc..c806bd6 100644 +--- a/src/udev/udev-builtin-blkid.c ++++ b/src/udev/udev-builtin-blkid.c +@@ -190,7 +190,7 @@ static int builtin_blkid(struct udev_device *dev, int argc, char *argv[], bool t + if (err < 0) + goto out; + +- log_debug("probe %s %sraid offset=%llu\n", ++ log_debug("probe %s %sraid offset=%llu", + udev_device_get_devnode(dev), + noraid ? "no" : "", (unsigned long long) offset); + +diff --git a/src/udev/udev-builtin-firmware.c b/src/udev/udev-builtin-firmware.c +index b80940b..8cfeed6 100644 +--- a/src/udev/udev-builtin-firmware.c ++++ b/src/udev/udev-builtin-firmware.c +@@ -33,7 +33,7 @@ static bool set_loading(struct udev *udev, char *loadpath, const char *state) + + ldfile = fopen(loadpath, "we"); + if (ldfile == NULL) { +- log_error("error: can not open '%s'\n", loadpath); ++ log_error("error: can not open '%s'", loadpath); + return false; + }; + fprintf(ldfile, "%s\n", state); +@@ -53,7 +53,7 @@ static bool copy_firmware(struct udev *udev, const char *source, const char *tar + return false; + } + +- log_debug("writing '%s' (%zi) to '%s'\n", source, size, target); ++ log_debug("writing '%s' (%zi) to '%s'", source, size, target); + + fsource = fopen(source, "re"); + if (fsource == NULL) +@@ -90,7 +90,7 @@ static int builtin_firmware(struct udev_device *dev, int argc, char *argv[], boo + + firmware = udev_device_get_property_value(dev, "FIRMWARE"); + if (firmware == NULL) { +- log_error("firmware parameter missing\n\n"); ++ log_error("firmware parameter missing"); + rc = EXIT_FAILURE; + goto exit; + } +@@ -112,7 +112,7 @@ static int builtin_firmware(struct udev_device *dev, int argc, char *argv[], boo + strscpyl(loadpath, sizeof(loadpath), udev_device_get_syspath(dev), "/loading", NULL); + + if (fwfile == NULL) { +- log_debug("did not find firmware file '%s'\n", firmware); ++ log_debug("did not find firmware file '%s'", firmware); + rc = EXIT_FAILURE; + /* + * Do not cancel the request in the initrd, the real root might have +@@ -136,7 +136,7 @@ static int builtin_firmware(struct udev_device *dev, int argc, char *argv[], boo + + strscpyl(datapath, sizeof(datapath), udev_device_get_syspath(dev), "/data", NULL); + if (!copy_firmware(udev, fwpath, datapath, statbuf.st_size)) { +- log_error("error sending firmware '%s' to device\n", firmware); ++ log_error("error sending firmware '%s' to device", firmware); + set_loading(udev, loadpath, "-1"); + rc = EXIT_FAILURE; + goto exit; +diff --git a/src/udev/udev-builtin-input_id.c b/src/udev/udev-builtin-input_id.c +index 445b602..4691fc0 100644 +--- a/src/udev/udev-builtin-input_id.c ++++ b/src/udev/udev-builtin-input_id.c +@@ -57,7 +57,7 @@ static void get_cap_mask(struct udev_device *dev, + unsigned long val; + + snprintf(text, sizeof(text), "%s", udev_device_get_sysattr_value(pdev, attr)); +- log_debug("%s raw kernel attribute: %s\n", attr, text); ++ log_debug("%s raw kernel attribute: %s", attr, text); + + memset (bitmask, 0, bitmask_size); + i = 0; +@@ -66,7 +66,7 @@ static void get_cap_mask(struct udev_device *dev, + if (i < bitmask_size/sizeof(unsigned long)) + bitmask[i] = val; + else +- log_debug("ignoring %s block %lX which is larger than maximum size\n", attr, val); ++ log_debug("ignoring %s block %lX which is larger than maximum size", attr, val); + *word = '\0'; + ++i; + } +@@ -74,12 +74,12 @@ static void get_cap_mask(struct udev_device *dev, + if (i < bitmask_size / sizeof(unsigned long)) + bitmask[i] = val; + else +- log_debug("ignoring %s block %lX which is larger than maximum size\n", attr, val); ++ log_debug("ignoring %s block %lX which is larger than maximum size", attr, val); + + if (test) { + /* printf pattern with the right unsigned long number of hex chars */ + snprintf(text, sizeof(text), " bit %%4u: %%0%zilX\n", 2 * sizeof(unsigned long)); +- log_debug("%s decoded bit map:\n", attr); ++ log_debug("%s decoded bit map:", attr); + val = bitmask_size / sizeof (unsigned long); + /* skip over leading zeros */ + while (bitmask[val-1] == 0 && val > 0) +@@ -151,7 +151,7 @@ static void test_key (struct udev_device *dev, + + /* do we have any KEY_* capability? */ + if (!test_bit (EV_KEY, bitmask_ev)) { +- log_debug("test_key: no EV_KEY capability\n"); ++ log_debug("test_key: no EV_KEY capability"); + return; + } + +@@ -159,13 +159,13 @@ static void test_key (struct udev_device *dev, + found = 0; + for (i = 0; i < BTN_MISC/BITS_PER_LONG; ++i) { + found |= bitmask_key[i]; +- log_debug("test_key: checking bit block %lu for any keys; found=%i\n", (unsigned long)i*BITS_PER_LONG, found > 0); ++ log_debug("test_key: checking bit block %lu for any keys; found=%i", (unsigned long)i*BITS_PER_LONG, found > 0); + } + /* If there are no keys in the lower block, check the higher block */ + if (!found) { + for (i = KEY_OK; i < BTN_TRIGGER_HAPPY; ++i) { + if (test_bit (i, bitmask_key)) { +- log_debug("test_key: Found key %x in high block\n", i); ++ log_debug("test_key: Found key %x in high block", i); + found = 1; + break; + } +diff --git a/src/udev/udev-builtin-kmod.c b/src/udev/udev-builtin-kmod.c +index fc28121..097f881 100644 +--- a/src/udev/udev-builtin-kmod.c ++++ b/src/udev/udev-builtin-kmod.c +@@ -44,18 +44,18 @@ static int load_module(struct udev *udev, const char *alias) + return err; + + if (list == NULL) +- log_debug("no module matches '%s'\n", alias); ++ log_debug("no module matches '%s'", alias); + + kmod_list_foreach(l, list) { + struct kmod_module *mod = kmod_module_get_module(l); + + err = kmod_module_probe_insert_module(mod, KMOD_PROBE_APPLY_BLACKLIST, NULL, NULL, NULL, NULL); + if (err == KMOD_PROBE_APPLY_BLACKLIST) +- log_debug("module '%s' is blacklisted\n", kmod_module_get_name(mod)); ++ log_debug("module '%s' is blacklisted", kmod_module_get_name(mod)); + else if (err == 0) +- log_debug("inserted '%s'\n", kmod_module_get_name(mod)); ++ log_debug("inserted '%s'", kmod_module_get_name(mod)); + else +- log_debug("failed to insert '%s'\n", kmod_module_get_name(mod)); ++ log_debug("failed to insert '%s'", kmod_module_get_name(mod)); + + kmod_module_unref(mod); + } +@@ -79,12 +79,12 @@ static int builtin_kmod(struct udev_device *dev, int argc, char *argv[], bool te + return 0; + + if (argc < 3 || !streq(argv[1], "load")) { +- log_error("expect: %s load \n", argv[0]); ++ log_error("expect: %s load ", argv[0]); + return EXIT_FAILURE; + } + + for (i = 2; argv[i]; i++) { +- log_debug("execute '%s' '%s'\n", argv[1], argv[i]); ++ log_debug("execute '%s' '%s'", argv[1], argv[i]); + load_module(udev, argv[i]); + } + +@@ -101,7 +101,7 @@ static int builtin_kmod_init(struct udev *udev) + if (!ctx) + return -ENOMEM; + +- log_debug("load module index\n"); ++ log_debug("load module index"); + kmod_set_log_fn(ctx, udev_kmod_log, udev); + kmod_load_resources(ctx); + return 0; +@@ -110,14 +110,14 @@ static int builtin_kmod_init(struct udev *udev) + /* called on udev shutdown and reload request */ + static void builtin_kmod_exit(struct udev *udev) + { +- log_debug("unload module index\n"); ++ log_debug("unload module index"); + ctx = kmod_unref(ctx); + } + + /* called every couple of seconds during event activity; 'true' if config has changed */ + static bool builtin_kmod_validate(struct udev *udev) + { +- log_debug("validate module index\n"); ++ log_debug("validate module index"); + if (!ctx) + return false; + return (kmod_validate_resources(ctx) != KMOD_RESOURCES_OK); +diff --git a/src/udev/udev-builtin-usb_id.c b/src/udev/udev-builtin-usb_id.c +index 3e2f43e..1b9f824 100644 +--- a/src/udev/udev-builtin-usb_id.c ++++ b/src/udev/udev-builtin-usb_id.c +@@ -275,7 +275,7 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool + /* usb interface directory */ + dev_interface = udev_device_get_parent_with_subsystem_devtype(dev, "usb", "usb_interface"); + if (dev_interface == NULL) { +- log_debug("unable to access usb_interface device of '%s'\n", ++ log_debug("unable to access usb_interface device of '%s'", + udev_device_get_syspath(dev)); + return EXIT_FAILURE; + } +@@ -285,7 +285,7 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool + + if_class = udev_device_get_sysattr_value(dev_interface, "bInterfaceClass"); + if (!if_class) { +- log_debug("%s: cannot get bInterfaceClass attribute\n", ++ log_debug("%s: cannot get bInterfaceClass attribute", + udev_device_get_sysname(dev)); + return EXIT_FAILURE; + } +@@ -300,13 +300,13 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool + set_usb_iftype(type_str, if_class_num, sizeof(type_str)-1); + } + +- log_debug("%s: if_class %d protocol %d\n", ++ log_debug("%s: if_class %d protocol %d", + udev_device_get_syspath(dev_interface), if_class_num, protocol); + + /* usb device directory */ + dev_usb = udev_device_get_parent_with_subsystem_devtype(dev_interface, "usb", "usb_device"); + if (!dev_usb) { +- log_debug("unable to find parent 'usb' device of '%s'\n", ++ log_debug("unable to find parent 'usb' device of '%s'", + udev_device_get_syspath(dev)); + return EXIT_FAILURE; + } +@@ -323,19 +323,19 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool + /* get scsi device */ + dev_scsi = udev_device_get_parent_with_subsystem_devtype(dev, "scsi", "scsi_device"); + if (dev_scsi == NULL) { +- log_debug("unable to find parent 'scsi' device of '%s'\n", ++ log_debug("unable to find parent 'scsi' device of '%s'", + udev_device_get_syspath(dev)); + goto fallback; + } + if (sscanf(udev_device_get_sysname(dev_scsi), "%d:%d:%d:%d", &host, &bus, &target, &lun) != 4) { +- log_debug("invalid scsi device '%s'\n", udev_device_get_sysname(dev_scsi)); ++ log_debug("invalid scsi device '%s'", udev_device_get_sysname(dev_scsi)); + goto fallback; + } + + /* Generic SPC-2 device */ + scsi_vendor = udev_device_get_sysattr_value(dev_scsi, "vendor"); + if (!scsi_vendor) { +- log_debug("%s: cannot get SCSI vendor attribute\n", ++ log_debug("%s: cannot get SCSI vendor attribute", + udev_device_get_sysname(dev_scsi)); + goto fallback; + } +@@ -345,7 +345,7 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool + + scsi_model = udev_device_get_sysattr_value(dev_scsi, "model"); + if (!scsi_model) { +- log_debug("%s: cannot get SCSI model attribute\n", ++ log_debug("%s: cannot get SCSI model attribute", + udev_device_get_sysname(dev_scsi)); + goto fallback; + } +@@ -355,7 +355,7 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool + + scsi_type = udev_device_get_sysattr_value(dev_scsi, "type"); + if (!scsi_type) { +- log_debug("%s: cannot get SCSI type attribute\n", ++ log_debug("%s: cannot get SCSI type attribute", + udev_device_get_sysname(dev_scsi)); + goto fallback; + } +@@ -363,7 +363,7 @@ static int builtin_usb_id(struct udev_device *dev, int argc, char *argv[], bool + + scsi_rev = udev_device_get_sysattr_value(dev_scsi, "rev"); + if (!scsi_rev) { +- log_debug("%s: cannot get SCSI revision attribute\n", ++ log_debug("%s: cannot get SCSI revision attribute", + udev_device_get_sysname(dev_scsi)); + goto fallback; + } +@@ -389,7 +389,7 @@ fallback: + if (!usb_vendor) + usb_vendor = vendor_id; + if (!usb_vendor) { +- log_debug("No USB vendor information available\n"); ++ log_debug("No USB vendor information available"); + return EXIT_FAILURE; + } + udev_util_encode_string(usb_vendor, vendor_str_enc, sizeof(vendor_str_enc)); +diff --git a/src/udev/udev-ctrl.c b/src/udev/udev-ctrl.c +index e60da90..1898685 100644 +--- a/src/udev/udev-ctrl.c ++++ b/src/udev/udev-ctrl.c +@@ -84,7 +84,7 @@ struct udev_ctrl *udev_ctrl_new_from_fd(struct udev *udev, int fd) + if (fd < 0) { + uctrl->sock = socket(AF_LOCAL, SOCK_SEQPACKET|SOCK_NONBLOCK|SOCK_CLOEXEC, 0); + if (uctrl->sock < 0) { +- log_error("error getting socket: %m\n"); ++ log_error("error getting socket: %m"); + udev_ctrl_unref(uctrl); + return NULL; + } +@@ -118,14 +118,14 @@ int udev_ctrl_enable_receiving(struct udev_ctrl *uctrl) + + if (err < 0) { + err = -errno; +- log_error("bind failed: %m\n"); ++ log_error("bind failed: %m"); + return err; + } + + err = listen(uctrl->sock, 0); + if (err < 0) { + err = -errno; +- log_error("listen failed: %m\n"); ++ log_error("listen failed: %m"); + return err; + } + +@@ -193,7 +193,7 @@ struct udev_ctrl_connection *udev_ctrl_get_connection(struct udev_ctrl *uctrl) + conn->sock = accept4(uctrl->sock, NULL, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK); + if (conn->sock < 0) { + if (errno != EINTR) +- log_error("unable to receive ctrl connection: %m\n"); ++ log_error("unable to receive ctrl connection: %m"); + goto err; + } + +@@ -204,7 +204,7 @@ struct udev_ctrl_connection *udev_ctrl_get_connection(struct udev_ctrl *uctrl) + goto err; + } + if (ucred.uid > 0) { +- log_error("sender uid=%i, message ignored\n", ucred.uid); ++ log_error("sender uid=%i, message ignored", ucred.uid); + goto err; + } + +@@ -367,11 +367,11 @@ struct udev_ctrl_msg *udev_ctrl_receive_msg(struct udev_ctrl_connection *conn) + continue; + goto err; + } else if (r == 0) { +- log_error("timeout waiting for ctrl message\n"); ++ log_error("timeout waiting for ctrl message"); + goto err; + } else { + if (!(pfd[0].revents & POLLIN)) { +- log_error("ctrl connection error: %m\n"); ++ log_error("ctrl connection error: %m"); + goto err; + } + } +@@ -388,24 +388,24 @@ struct udev_ctrl_msg *udev_ctrl_receive_msg(struct udev_ctrl_connection *conn) + smsg.msg_controllen = sizeof(cred_msg); + size = recvmsg(conn->sock, &smsg, 0); + if (size < 0) { +- log_error("unable to receive ctrl message: %m\n"); ++ log_error("unable to receive ctrl message: %m"); + goto err; + } + cmsg = CMSG_FIRSTHDR(&smsg); + cred = (struct ucred *) CMSG_DATA(cmsg); + + if (cmsg == NULL || cmsg->cmsg_type != SCM_CREDENTIALS) { +- log_error("no sender credentials received, message ignored\n"); ++ log_error("no sender credentials received, message ignored"); + goto err; + } + + if (cred->uid != 0) { +- log_error("sender uid=%i, message ignored\n", cred->uid); ++ log_error("sender uid=%i, message ignored", cred->uid); + goto err; + } + + if (uctrl_msg->ctrl_msg_wire.magic != UDEV_CTRL_MAGIC) { +- log_error("message magic 0x%08x doesn't match, ignore it\n", uctrl_msg->ctrl_msg_wire.magic); ++ log_error("message magic 0x%08x doesn't match, ignore it", uctrl_msg->ctrl_msg_wire.magic); + goto err; + } + +diff --git a/src/udev/udev-node.c b/src/udev/udev-node.c +index 1148a15..ca3d781 100644 +--- a/src/udev/udev-node.c ++++ b/src/udev/udev-node.c +@@ -65,7 +65,7 @@ static int node_symlink(struct udev_device *dev, const char *node, const char *s + /* preserve link with correct target, do not replace node of other device */ + if (lstat(slink, &stats) == 0) { + if (S_ISBLK(stats.st_mode) || S_ISCHR(stats.st_mode)) { +- log_error("conflicting device node '%s' found, link to '%s' will not be created\n", slink, node); ++ log_error("conflicting device node '%s' found, link to '%s' will not be created", slink, node); + goto exit; + } else if (S_ISLNK(stats.st_mode)) { + char buf[UTIL_PATH_SIZE]; +@@ -75,7 +75,7 @@ static int node_symlink(struct udev_device *dev, const char *node, const char *s + if (len > 0 && len < (int)sizeof(buf)) { + buf[len] = '\0'; + if (streq(target, buf)) { +- log_debug("preserve already existing symlink '%s' to '%s'\n", slink, target); ++ log_debug("preserve already existing symlink '%s' to '%s'", slink, target); + label_fix(slink, true, false); + utimensat(AT_FDCWD, slink, NULL, AT_SYMLINK_NOFOLLOW); + goto exit; +@@ -83,7 +83,7 @@ static int node_symlink(struct udev_device *dev, const char *node, const char *s + } + } + } else { +- log_debug("creating symlink '%s' to '%s'\n", slink, target); ++ log_debug("creating symlink '%s' to '%s'", slink, target); + do { + err = mkdir_parents_label(slink, 0755); + if (err != 0 && err != -ENOENT) +@@ -98,7 +98,7 @@ static int node_symlink(struct udev_device *dev, const char *node, const char *s + goto exit; + } + +- log_debug("atomically replace '%s'\n", slink); ++ log_debug("atomically replace '%s'", slink); + strscpyl(slink_tmp, sizeof(slink_tmp), slink, ".tmp-", udev_device_get_id_filename(dev), NULL); + unlink(slink_tmp); + do { +@@ -112,12 +112,12 @@ static int node_symlink(struct udev_device *dev, const char *node, const char *s + label_context_clear(); + } while (err == -ENOENT); + if (err != 0) { +- log_error("symlink '%s' '%s' failed: %m\n", target, slink_tmp); ++ log_error("symlink '%s' '%s' failed: %m", target, slink_tmp); + goto exit; + } + err = rename(slink_tmp, slink); + if (err != 0) { +- log_error("rename '%s' '%s' failed: %m\n", slink_tmp, slink); ++ log_error("rename '%s' '%s' failed: %m", slink_tmp, slink); + unlink(slink_tmp); + } + exit: +@@ -151,7 +151,7 @@ static const char *link_find_prioritized(struct udev_device *dev, bool add, cons + if (dent->d_name[0] == '.') + continue; + +- log_debug("found '%s' claiming '%s'\n", dent->d_name, stackdir); ++ log_debug("found '%s' claiming '%s'", dent->d_name, stackdir); + + /* did we find ourself? */ + if (streq(dent->d_name, udev_device_get_id_filename(dev))) +@@ -164,7 +164,7 @@ static const char *link_find_prioritized(struct udev_device *dev, bool add, cons + devnode = udev_device_get_devnode(dev_db); + if (devnode != NULL) { + if (target == NULL || udev_device_get_devlink_priority(dev_db) > priority) { +- log_debug("'%s' claims priority %i for '%s'\n", ++ log_debug("'%s' claims priority %i for '%s'", + udev_device_get_syspath(dev_db), udev_device_get_devlink_priority(dev_db), stackdir); + priority = udev_device_get_devlink_priority(dev_db); + strscpy(buf, bufsize, devnode); +@@ -197,11 +197,11 @@ static void link_update(struct udev_device *dev, const char *slink, bool add) + + target = link_find_prioritized(dev, add, dirname, buf, sizeof(buf)); + if (target == NULL) { +- log_debug("no reference left, remove '%s'\n", slink); ++ log_debug("no reference left, remove '%s'", slink); + if (unlink(slink) == 0) + util_delete_path(udev, slink); + } else { +- log_debug("creating link '%s' to '%s'\n", slink, target); ++ log_debug("creating link '%s' to '%s'", slink, target); + node_symlink(dev, target, slink); + } + +@@ -246,7 +246,7 @@ void udev_node_update_old_links(struct udev_device *dev, struct udev_device *dev + if (found) + continue; + +- log_debug("update old name, '%s' no longer belonging to '%s'\n", ++ log_debug("update old name, '%s' no longer belonging to '%s'", + name, udev_device_get_devpath(dev)); + link_update(dev, name, false); + } +@@ -266,24 +266,24 @@ static int node_permissions_apply(struct udev_device *dev, bool apply, mode_t mo + + if (lstat(devnode, &stats) != 0) { + err = -errno; +- log_debug("can not stat() node '%s' (%m)\n", devnode); ++ log_debug("can not stat() node '%s' (%m)", devnode); + goto out; + } + + if (((stats.st_mode & S_IFMT) != (mode & S_IFMT)) || (stats.st_rdev != devnum)) { + err = -EEXIST; +- log_debug("found node '%s' with non-matching devnum %s, skip handling\n", ++ log_debug("found node '%s' with non-matching devnum %s, skip handling", + udev_device_get_devnode(dev), udev_device_get_id_filename(dev)); + goto out; + } + + if (apply) { + if ((stats.st_mode & 0777) != (mode & 0777) || stats.st_uid != uid || stats.st_gid != gid) { +- log_debug("set permissions %s, %#o, uid=%u, gid=%u\n", devnode, mode, uid, gid); ++ log_debug("set permissions %s, %#o, uid=%u, gid=%u", devnode, mode, uid, gid); + chmod(devnode, mode); + chown(devnode, uid, gid); + } else { +- log_debug("preserve permissions %s, %#o, uid=%u, gid=%u\n", devnode, mode, uid, gid); ++ log_debug("preserve permissions %s, %#o, uid=%u, gid=%u", devnode, mode, uid, gid); + } + label_fix(devnode, true, false); + } +@@ -299,7 +299,7 @@ void udev_node_add(struct udev_device *dev, bool apply, mode_t mode, uid_t uid, + char filename[UTIL_PATH_SIZE]; + struct udev_list_entry *list_entry; + +- log_debug("handling device node '%s', devnum=%s, mode=%#o, uid=%d, gid=%d\n", ++ log_debug("handling device node '%s', devnum=%s, mode=%#o, uid=%d, gid=%d", + udev_device_get_devnode(dev), udev_device_get_id_filename(dev), mode, uid, gid); + + if (node_permissions_apply(dev, apply, mode, uid, gid) < 0) +diff --git a/src/udev/udev-watch.c b/src/udev/udev-watch.c +index 9b694c6..cbe0c37 100644 +--- a/src/udev/udev-watch.c ++++ b/src/udev/udev-watch.c +@@ -40,7 +40,7 @@ int udev_watch_init(struct udev *udev) + { + inotify_fd = inotify_init1(IN_CLOEXEC); + if (inotify_fd < 0) +- log_error("inotify_init failed: %m\n"); ++ log_error("inotify_init failed: %m"); + return inotify_fd; + } + +@@ -79,7 +79,7 @@ void udev_watch_restore(struct udev *udev) + if (dev == NULL) + goto unlink; + +- log_debug("restoring old watch on '%s'\n", udev_device_get_devnode(dev)); ++ log_debug("restoring old watch on '%s'", udev_device_get_devnode(dev)); + udev_watch_begin(udev, dev); + udev_device_unref(dev); + unlink: +@@ -103,10 +103,10 @@ void udev_watch_begin(struct udev *udev, struct udev_device *dev) + if (inotify_fd < 0) + return; + +- log_debug("adding watch on '%s'\n", udev_device_get_devnode(dev)); ++ log_debug("adding watch on '%s'", udev_device_get_devnode(dev)); + wd = inotify_add_watch(inotify_fd, udev_device_get_devnode(dev), IN_CLOSE_WRITE); + if (wd < 0) { +- log_error("inotify_add_watch(%d, %s, %o) failed: %m\n", ++ log_error("inotify_add_watch(%d, %s, %o) failed: %m", + inotify_fd, udev_device_get_devnode(dev), IN_CLOSE_WRITE); + return; + } +@@ -133,7 +133,7 @@ void udev_watch_end(struct udev *udev, struct udev_device *dev) + if (wd < 0) + return; + +- log_debug("removing watch on '%s'\n", udev_device_get_devnode(dev)); ++ log_debug("removing watch on '%s'", udev_device_get_devnode(dev)); + inotify_rm_watch(inotify_fd, wd); + + snprintf(filename, sizeof(filename), "/run/udev/watch/%d", wd); +diff --git a/src/udev/udevadm-hwdb.c b/src/udev/udevadm-hwdb.c +index d9dc73b..fe56758 100644 +--- a/src/udev/udevadm-hwdb.c ++++ b/src/udev/udevadm-hwdb.c +@@ -389,17 +389,17 @@ static int trie_store(struct trie *trie, const char *filename) { + goto out; + } + +- log_debug("=== trie on-disk ===\n"); +- log_debug("size: %8llu bytes\n", (unsigned long long)size); +- log_debug("header: %8zu bytes\n", sizeof(struct trie_header_f)); +- log_debug("nodes: %8llu bytes (%8llu)\n", ++ log_debug("=== trie on-disk ==="); ++ log_debug("size: %8llu bytes", (unsigned long long)size); ++ log_debug("header: %8zu bytes", sizeof(struct trie_header_f)); ++ log_debug("nodes: %8llu bytes (%8llu)", + (unsigned long long)t.nodes_count * sizeof(struct trie_node_f), (unsigned long long)t.nodes_count); +- log_debug("child pointers: %8llu bytes (%8llu)\n", ++ log_debug("child pointers: %8llu bytes (%8llu)", + (unsigned long long)t.children_count * sizeof(struct trie_child_entry_f), (unsigned long long)t.children_count); +- log_debug("value pointers: %8llu bytes (%8llu)\n", ++ log_debug("value pointers: %8llu bytes (%8llu)", + (unsigned long long)t.values_count * sizeof(struct trie_value_entry_f), (unsigned long long)t.values_count); +- log_debug("string store: %8llu bytes\n", (unsigned long long)trie->strings->len); +- log_debug("strings start: %8llu\n", (unsigned long long) t.strings_off); ++ log_debug("string store: %8llu bytes", (unsigned long long)trie->strings->len); ++ log_debug("strings start: %8llu", (unsigned long long) t.strings_off); + out: + free(filename_tmp); + return err; +@@ -412,7 +412,7 @@ static int insert_data(struct trie *trie, struct udev_list *match_list, + + value = strchr(line, '='); + if (!value) { +- log_error("Error, key/value pair expected but got '%s' in '%s':\n", line, filename); ++ log_error("Error, key/value pair expected but got '%s' in '%s':", line, filename); + return -EINVAL; + } + +@@ -420,7 +420,7 @@ static int insert_data(struct trie *trie, struct udev_list *match_list, + value++; + + if (line[0] == '\0' || value[0] == '\0') { +- log_error("Error, empty key or value '%s' in '%s':\n", line, filename); ++ log_error("Error, empty key or value '%s' in '%s':", line, filename); + return -EINVAL; + } + +@@ -471,7 +471,7 @@ static int import_file(struct udev *udev, struct trie *trie, const char *filenam + break; + + if (line[0] == ' ') { +- log_error("Error, MATCH expected but got '%s' in '%s':\n", line, filename); ++ log_error("Error, MATCH expected but got '%s' in '%s':", line, filename); + break; + } + +@@ -482,7 +482,7 @@ static int import_file(struct udev *udev, struct trie *trie, const char *filenam + + case HW_MATCH: + if (len == 0) { +- log_error("Error, DATA expected but got empty line in '%s':\n", filename); ++ log_error("Error, DATA expected but got empty line in '%s':", filename); + state = HW_NONE; + udev_list_cleanup(&match_list); + break; +@@ -508,7 +508,7 @@ static int import_file(struct udev *udev, struct trie *trie, const char *filenam + } + + if (line[0] != ' ') { +- log_error("Error, DATA expected but got '%s' in '%s':\n", line, filename); ++ log_error("Error, DATA expected but got '%s' in '%s':", line, filename); + state = HW_NONE; + udev_list_cleanup(&match_list); + break; +@@ -602,7 +602,7 @@ static int adm_hwdb(struct udev *udev, int argc, char *argv[]) { + + err = conf_files_list_strv(&files, ".hwdb", root, conf_file_dirs); + if (err < 0) { +- log_error("failed to enumerate hwdb files: %s\n", strerror(-err)); ++ log_error("failed to enumerate hwdb files: %s", strerror(-err)); + rc = EXIT_FAILURE; + goto out; + } +@@ -614,18 +614,18 @@ static int adm_hwdb(struct udev *udev, int argc, char *argv[]) { + + strbuf_complete(trie->strings); + +- log_debug("=== trie in-memory ===\n"); +- log_debug("nodes: %8zu bytes (%8zu)\n", ++ log_debug("=== trie in-memory ==="); ++ log_debug("nodes: %8zu bytes (%8zu)", + trie->nodes_count * sizeof(struct trie_node), trie->nodes_count); +- log_debug("children arrays: %8zu bytes (%8zu)\n", ++ log_debug("children arrays: %8zu bytes (%8zu)", + trie->children_count * sizeof(struct trie_child_entry), trie->children_count); +- log_debug("values arrays: %8zu bytes (%8zu)\n", ++ log_debug("values arrays: %8zu bytes (%8zu)", + trie->values_count * sizeof(struct trie_value_entry), trie->values_count); +- log_debug("strings: %8zu bytes\n", ++ log_debug("strings: %8zu bytes", + trie->strings->len); +- log_debug("strings incoming: %8zu bytes (%8zu)\n", ++ log_debug("strings incoming: %8zu bytes (%8zu)", + trie->strings->in_len, trie->strings->in_count); +- log_debug("strings dedup'ed: %8zu bytes (%8zu)\n", ++ log_debug("strings dedup'ed: %8zu bytes (%8zu)", + trie->strings->dedup_len, trie->strings->dedup_count); + + if (asprintf(&hwdb_bin, "%s/etc/udev/hwdb.bin", root) < 0) { +diff --git a/src/udev/udevadm-settle.c b/src/udev/udevadm-settle.c +index c4fc4ee..a131e3f 100644 +--- a/src/udev/udevadm-settle.c ++++ b/src/udev/udevadm-settle.c +@@ -113,20 +113,20 @@ static int adm_settle(struct udev *udev, int argc, char *argv[]) + end = udev_queue_get_kernel_seqnum(udev_queue); + + if (start > end) { +- log_error("seq-start larger than seq-end, ignoring\n"); ++ log_error("seq-start larger than seq-end, ignoring"); + start = 0; + end = 0; + } + + if (start > kernel_seq || end > kernel_seq) { +- log_error("seq-start or seq-end larger than current kernel value, ignoring\n"); ++ log_error("seq-start or seq-end larger than current kernel value, ignoring"); + start = 0; + end = 0; + } +- log_debug("start=%llu end=%llu current=%llu\n", (unsigned long long)start, (unsigned long long)end, kernel_seq); ++ log_debug("start=%llu end=%llu current=%llu", (unsigned long long)start, (unsigned long long)end, kernel_seq); + } else { + if (end > 0) { +- log_error("seq-end needs seq-start parameter, ignoring\n"); ++ log_error("seq-end needs seq-start parameter, ignoring"); + end = 0; + } + } +@@ -138,7 +138,7 @@ static int adm_settle(struct udev *udev, int argc, char *argv[]) + uctrl = udev_ctrl_new(udev); + if (uctrl != NULL) { + if (udev_ctrl_send_ping(uctrl, timeout) < 0) { +- log_debug("no connection to daemon\n"); ++ log_debug("no connection to daemon"); + udev_ctrl_unref(uctrl); + rc = EXIT_SUCCESS; + goto out; +@@ -150,10 +150,10 @@ static int adm_settle(struct udev *udev, int argc, char *argv[]) + pfd[0].events = POLLIN; + pfd[0].fd = inotify_init1(IN_CLOEXEC); + if (pfd[0].fd < 0) { +- log_error("inotify_init failed: %m\n"); ++ log_error("inotify_init failed: %m"); + } else { + if (inotify_add_watch(pfd[0].fd, "/run/udev" , IN_MOVED_TO) < 0) { +- log_error("watching /run/udev failed\n"); ++ log_error("watching /run/udev failed"); + close(pfd[0].fd); + pfd[0].fd = -1; + } +@@ -206,7 +206,7 @@ static int adm_settle(struct udev *udev, int argc, char *argv[]) + struct udev_list_entry *list_entry; + + if (!quiet && udev_queue_get_queued_list_entry(udev_queue) != NULL) { +- log_debug("timeout waiting for udev queue\n"); ++ log_debug("timeout waiting for udev queue"); + printf("\nudevadm settle - timeout of %i seconds reached, the event queue contains:\n", timeout); + udev_list_entry_foreach(list_entry, udev_queue_get_queued_list_entry(udev_queue)) + printf(" %s (%s)\n", +diff --git a/src/udev/udevadm-test.c b/src/udev/udevadm-test.c +index df1409b..3aa3274 100644 +--- a/src/udev/udevadm-test.c ++++ b/src/udev/udevadm-test.c +@@ -52,7 +52,7 @@ static int adm_test(struct udev *udev, int argc, char *argv[]) + {} + }; + +- log_debug("version %s\n", VERSION); ++ log_debug("version %s", VERSION); + + for (;;) { + int option; +@@ -74,7 +74,7 @@ static int adm_test(struct udev *udev, int argc, char *argv[]) + resolve_names = -1; + } else { + fprintf(stderr, "resolve-names must be early, late or never\n"); +- log_error("resolve-names must be early, late or never\n"); ++ log_error("resolve-names must be early, late or never"); + exit(EXIT_FAILURE); + } + break; +diff --git a/src/udev/udevadm.c b/src/udev/udevadm.c +index e14b3ca..dbca369 100644 +--- a/src/udev/udevadm.c ++++ b/src/udev/udevadm.c +@@ -79,7 +79,7 @@ static int run_command(struct udev *udev, const struct udevadm_cmd *cmd, int arg + { + if (cmd->debug) + log_set_max_level(LOG_DEBUG); +- log_debug("calling: %s\n", cmd->name); ++ log_debug("calling: %s", cmd->name); + return cmd->cmd(udev, argc, argv); + } + diff --git a/0196-man-units-tmpfiles.d-5-cleanup.patch b/0196-man-units-tmpfiles.d-5-cleanup.patch new file mode 100644 index 0000000..fd8eb7b --- /dev/null +++ b/0196-man-units-tmpfiles.d-5-cleanup.patch @@ -0,0 +1,401 @@ +From 6972095a2b6eb919b622a89d11e0dc823ed60efb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 24 Dec 2013 10:21:45 -0500 +Subject: [PATCH] man,units: tmpfiles.d(5) cleanup + +Condition for /lib (necessary for split /usr) was missing from the unit. + +Some changes which were done in tmpfiles.d(5) were not carried over to +systemd-tmpfiles(1). + +Also use markup where possible. + +Conflicts: + man/tmpfiles.d.xml +--- + man/systemd-tmpfiles.xml | 53 ++++++---- + man/tmpfiles.d.xml | 168 +++++++++++++++++++------------- + units/systemd-tmpfiles-setup.service.in | 1 + + 3 files changed, 134 insertions(+), 88 deletions(-) + +diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml +index ba727e1..91c0372 100644 +--- a/man/systemd-tmpfiles.xml ++++ b/man/systemd-tmpfiles.xml +@@ -54,7 +54,9 @@ + + + +- systemd-tmpfiles OPTIONS CONFIGURATION FILE ++ systemd-tmpfiles ++ OPTIONS ++ CONFIGFILE + + + systemd-tmpfiles-setup.service +@@ -67,22 +69,20 @@ + Description + + systemd-tmpfiles creates, +- deletes and cleans up volatile and temporary files and ++ deletes, and cleans up volatile and temporary files and + directories, based on the configuration file format and +- location specified in +- tmpfiles.d +- 5 +- . ++ location specified in ++ tmpfiles.d5. ++ + + If invoked with no arguments, it applies all + directives from all configuration files. If one or + more filenames are passed on the command line, only + the directives in these files are applied. If only + the basename of a configuration file is specified, +- all configuration directories as specified in +- tmpfiles.d +- 5 +- are searched for a matching file. ++ all configuration directories as specified in ++ tmpfiles.d5 ++ are searched for a matching file. + + + +@@ -94,12 +94,25 @@ + + + +- If this option is passed, all +- files and directories marked with f, +- F, d, D in the configuration files are +- created. Files and directories marked with z, +- Z have their ownership, access mode and security +- labels set. ++ If this option is ++ passed, all files and directories ++ marked with f, ++ F, ++ w, ++ d, ++ D, ++ p, ++ L, ++ c, ++ b, ++ m in the ++ configuration files are created or ++ written to. Files and directories ++ marked with z, ++ Z, ++ m have their ++ ownership, access mode and security ++ labels set. + + + +@@ -113,9 +126,11 @@ + + + If this option is +- passed, all files and directories marked +- with r, R in the configuration files +- are removed. ++ passed, all files and directories ++ marked with r, ++ R in the ++ configuration files are ++ removed. + + + +diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml +index e8b630d..a00637b 100644 +--- a/man/tmpfiles.d.xml ++++ b/man/tmpfiles.d.xml +@@ -67,23 +67,32 @@ + Configuration Format + + Each configuration file shall be named in the +- style of <package>.conf. +- Files in /etc/ override files +- with the same name in /usr/lib/ +- and /run/. Files in +- /run/ override files with the same +- name in /usr/lib/. Packages ++ style of ++ package.conf ++ or ++ package-part.conf. ++ The second variant should be used when it is desirable ++ to make it easy to override just this part of ++ configuration. ++ ++ Files in /etc/tmpfiles.d ++ override files with the same name in ++ /usr/lib/tmpfiles.d and ++ /run/tmpfiles.d. Files in ++ /run/tmpfiles.d override files ++ with the same name in ++ /usr/lib/tmpfiles.d. Packages + should install their configuration files in +- /usr/lib/. Files in +- /etc/ are reserved for the local +- administrator, who may use this logic to override the +- configuration files installed by vendor packages. All +- configuration files are sorted by their filename in +- lexicographic order, regardless in which of the +- directories they reside. If multiple files specify the +- same path, the entry in the file with the lexicographically +- earliest name will be applied, all all other conflicting +- entries logged as errors. ++ /usr/lib/tmpfiles.d. Files in ++ /etc/tmpfiles.d are reserved for ++ the local administrator, who may use this logic to ++ override the configuration files installed by vendor ++ packages. All configuration files are sorted by their ++ filename in lexicographic order, regardless in which ++ of the directories they reside. If multiple files ++ specify the same path, the entry in the file with the ++ lexicographically earliest name will be applied, all ++ all other conflicting entries logged as errors. + + If the administrator wants to disable a + configuration file supplied by the vendor, the +@@ -93,10 +102,10 @@ + same filename. + + The configuration format is one line per path +- containing action, path, mode, ownership, age and argument ++ containing type, path, mode, ownership, age, and argument + fields: + +- Type Path Mode UID GID Age Argument ++ #Type Path Mode UID GID Age Argument + d /run/user 0755 root root 10d - + L /tmp/foobar - - - - /dev/null + +@@ -109,12 +118,12 @@ L /tmp/foobar - - - - /dev/null + + + f +- Create a file if it does not exist yet (optionally writing a short string into it, if the argument parameter is passed) ++ Create a file if it does not exist yet. If the argument parameter is given, it will be written to the file. + + + + F +- Create or truncate a file (optionally writing a short string into it, if the argument parameter is passed) ++ Create or truncate a file. If the argument parameter is given, it will be written to the file. + + + +@@ -127,32 +136,32 @@ L /tmp/foobar - - - - /dev/null + + + d +- Create a directory if it does not exist yet ++ Create a directory if it does not exist yet. + + + + D +- Create or empty a directory ++ Create or empty a directory. + + + + p +- Create a named pipe (FIFO) if it does not exist yet ++ Create a named pipe (FIFO) if it does not exist yet. + + + + L +- Create a symlink if it does not exist yet ++ Create a symlink if it does not exist yet. + + + + c +- Create a character device node if it does not exist yet ++ Create a character device node if it does not exist yet. + + + + b +- Create a block device node if it does not exist yet ++ Create a block device node if it does not exist yet. + + + +@@ -174,11 +183,12 @@ L /tmp/foobar - - - - /dev/null + as controlled with the Age + parameter. Note that lines of + this type do not influence the +- effect of r or R lines. Lines +- of this type accept ++ effect of r ++ or R lines. ++ Lines of this type accept + shell-style globs in place of +- normal path +- names. ++ normal path names. ++ + + + +@@ -187,28 +197,31 @@ L /tmp/foobar - - - - /dev/null + during cleaning. Use this type + to exclude paths from clean-up + as controlled with the Age +- parameter. Unlike x this ++ 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. ++ 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. ++ + + + + r + Remove a file +- or directory if it +- exists. This may not be used +- to remove non-empty +- directories, use R for +- that. Lines of this type +- accept shell-style globs in +- place of normal path ++ or directory if it exists. ++ This may not be used to remove ++ non-empty directories, use ++ R for that. ++ Lines of this type accept ++ shell-style globs in place of ++ normal path + names. + + +@@ -308,11 +321,14 @@ L /tmp/foobar - - - - /dev/null + The file access mode to use when + creating this file or directory. If omitted or + when set to -, the default is used: 0755 for +- directories, 0644 for all other file +- objects. For z, Z lines, if omitted or when set +- to -, the file access mode will not be +- modified. This parameter is ignored for x, r, +- R, L lines. ++ directories, 0644 for all other file objects. ++ For z, Z ++ lines, if omitted or when set to ++ -, the file access mode ++ will not be modified. This parameter is ++ ignored for x, ++ r, R, ++ L lines. + + + +@@ -321,10 +337,15 @@ L /tmp/foobar - - - - /dev/null + The user and group to use for this file + or directory. This may either be a numeric + user/group ID or a user or group name. If +- omitted or when set to -, the default 0 (root) +- is used. For z, Z lines, when omitted or when set to -, +- the file ownership will not be modified. +- These parameters are ignored for x, r, R, L lines. ++ omitted or when set to -, ++ the default 0 (root) is used. For ++ z, Z ++ lines, when omitted or when set to -, the file ++ ownership will not be modified. These ++ parameters are ignored for ++ x, r, ++ R, L ++ lines. + + + +@@ -357,28 +378,37 @@ L /tmp/foobar - - - - /dev/null + When the age is set to zero, the files are cleaned + unconditionally. + +- The age field only applies to lines starting with +- d, D and x. If omitted or set to -, no automatic clean-up +- is done. ++ The age field only applies to lines ++ starting with d, ++ D, and ++ x. If omitted or set to ++ -, no automatic clean-up is ++ done. + + If the age field starts with a tilde +- character (~), the clean-up is only applied to +- files and directories one level inside the +- directory specified, but not the files and +- directories immediately inside it. ++ character ~, the clean-up ++ is only applied to files and directories one ++ level inside the directory specified, but not ++ the files and directories immediately inside ++ it. + + + + Argument + +- For L lines determines the destination +- path of the symlink. For c, b determines the ++ For L lines ++ determines the destination path of the ++ symlink. For c, ++ b determines the + major/minor of the device node, with major and +- minor formatted as integers, separated by :, +- e.g. "1:3". For f, F, w may be used to specify +- a short string that is written to the file, +- suffixed by a newline. Ignored for all other +- lines. ++ minor formatted as integers, separated by ++ :, e.g. ++ 1:3. For ++ f, F, ++ and w may be used to ++ specify a short string that is written to the ++ file, suffixed by a newline. Ignored for all ++ other lines. + + + +diff --git a/units/systemd-tmpfiles-setup.service.in b/units/systemd-tmpfiles-setup.service.in +index 6f98063..3405e28 100644 +--- a/units/systemd-tmpfiles-setup.service.in ++++ b/units/systemd-tmpfiles-setup.service.in +@@ -14,6 +14,7 @@ Conflicts=shutdown.target + After=systemd-readahead-collect.service systemd-readahead-replay.service local-fs.target + Before=sysinit.target shutdown.target + ConditionDirectoryNotEmpty=|/usr/lib/tmpfiles.d ++ConditionDirectoryNotEmpty=|/lib/tmpfiles.d + ConditionDirectoryNotEmpty=|/usr/local/lib/tmpfiles.d + ConditionDirectoryNotEmpty=|/etc/tmpfiles.d + ConditionDirectoryNotEmpty=|/run/tmpfiles.d diff --git a/0197-tmpfiles-introduce-the-concept-of-unsafe-operations.patch b/0197-tmpfiles-introduce-the-concept-of-unsafe-operations.patch new file mode 100644 index 0000000..bfe7f21 --- /dev/null +++ b/0197-tmpfiles-introduce-the-concept-of-unsafe-operations.patch @@ -0,0 +1,281 @@ +From 66b1ee20b814b02cd0fb73fec4a2a9b11defc607 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 20 Dec 2013 20:25:39 -0500 +Subject: [PATCH] tmpfiles: introduce the concept of unsafe operations + +Various operations done by systemd-tmpfiles may only be safely done at +boot (e.g. removal of X lockfiles in /tmp, creation of /run/nologin). +Other operations may be done at any point in time (e.g. setting the +ownership on /{run,var}/log/journal). This distinction is largely +orthogonal to the type of operation. + +A new switch --unsafe is added, and operations which should only be +executed during bootup are marked with an exclamation mark in the +configuration files. systemd-tmpfiles.service is modified to use this +switch, and guards are added so it is hard to re-start it by mistake. + +If we install a new version of systemd, we actually want to enforce +some changes to tmpfiles configuration immediately. This should now be +possible to do safely, so distribution packages can be modified to +execute the "safe" subset at package installation time. + +/run/nologin creation is split out into a separate service, to make it +easy to override. + +https://bugzilla.redhat.com/show_bug.cgi?id=1043212 +https://bugzilla.redhat.com/show_bug.cgi?id=1045849 +--- + Makefile.am | 1 + + man/systemd-tmpfiles.xml | 6 ++++++ + man/tmpfiles.d.xml | 25 +++++++++++++++++++++++++ + src/tmpfiles/tmpfiles.c | 22 +++++++++++++++++++--- + tmpfiles.d/legacy.conf | 6 +++--- + tmpfiles.d/systemd-nologin.conf | 11 +++++++++++ + tmpfiles.d/systemd.conf | 4 +--- + tmpfiles.d/x11.conf | 2 +- + units/systemd-tmpfiles-setup.service.in | 6 ++++-- + 9 files changed, 71 insertions(+), 12 deletions(-) + create mode 100644 tmpfiles.d/systemd-nologin.conf + +diff --git a/Makefile.am b/Makefile.am +index 16a5c3c..6233a7f 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -1599,6 +1599,7 @@ nodist_systemunit_DATA += \ + + dist_tmpfiles_DATA = \ + tmpfiles.d/systemd.conf \ ++ tmpfiles.d/systemd-nologin.conf \ + tmpfiles.d/tmp.conf \ + tmpfiles.d/x11.conf + +diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml +index 91c0372..495247e 100644 +--- a/man/systemd-tmpfiles.xml ++++ b/man/systemd-tmpfiles.xml +@@ -133,6 +133,12 @@ + removed. + + ++ ++ Also execute lines ++ with an exclamation mark. ++ ++ ++ + + Only apply rules that + apply to paths with the specified +diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml +index a00637b..39aa68d 100644 +--- a/man/tmpfiles.d.xml ++++ b/man/tmpfiles.d.xml +@@ -113,6 +113,9 @@ L /tmp/foobar - - - - /dev/null + + Type + ++ The type consists of a single letter and ++ optionally an exclamation mark. ++ + The following line types are understood: + + +@@ -262,6 +265,28 @@ L /tmp/foobar - - - - /dev/null + names. + + ++ ++ If the exclamation mark is used, this ++ line is only safe of execute during boot, and ++ can break a running system. Lines without the ++ exclamation mark are presumed to be safe to ++ execute at any time, e.g. on package upgrades. ++ systemd-tmpfiles will ++ execute line with an exclamation mark only if ++ option is given. ++ ++ ++ For example: ++ ++# Make sure these are created by default so that nobody else can ++d /tmp/.X11-unix 1777 root root 10d ++ ++# Unlink the X11 lock files ++r! /tmp/.X[0-9]*-lock ++ ++ The second line in contrast to the first one ++ would break a running system, and will only be ++ executed with . + + + +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index 00f74c2..30a8a55 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -106,6 +106,7 @@ static Set *unix_sockets = NULL; + static bool arg_create = false; + static bool arg_clean = false; + static bool arg_remove = false; ++static bool arg_unsafe = false; + + static char **include_prefixes = NULL; + static char **exclude_prefixes = NULL; +@@ -1073,7 +1074,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { + _cleanup_item_free_ Item *i = NULL; + Item *existing; + _cleanup_free_ char +- *mode = NULL, *user = NULL, *group = NULL, *age = NULL, *path = NULL; ++ *action = NULL, *mode = NULL, *user = NULL, *group = NULL, *age = NULL, *path = NULL; + char type; + Hashmap *h; + int r, n = -1; +@@ -1083,8 +1084,8 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { + assert(buffer); + + r = sscanf(buffer, +- "%c %ms %ms %ms %ms %ms %n", +- &type, ++ "%ms %ms %ms %ms %ms %ms %n", ++ &action, + &path, + &mode, + &user, +@@ -1096,6 +1097,14 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { + return -EIO; + } + ++ if (strlen(action) > 2 || (strlen(action) > 1 && action[1] != '!')) { ++ log_error("[%s:%u] Unknown modifier '%s'", fname, line, action); ++ return -EINVAL; ++ } else if (strlen(action) > 1 && !arg_unsafe) ++ return 0; ++ ++ type = action[0]; ++ + i = new0(Item, 1); + if (!i) + return log_oom(); +@@ -1266,6 +1275,7 @@ static int help(void) { + " --create Create marked files/directories\n" + " --clean Clean up marked directories\n" + " --remove Remove marked files/directories\n" ++ " --unsafe Execute actions only safe at boot\n" + " --prefix=PATH Only apply rules that apply to paths with the specified prefix\n" + " --exclude-prefix=PATH Ignore rules that apply to paths with the specified prefix\n", + program_invocation_short_name); +@@ -1279,6 +1289,7 @@ static int parse_argv(int argc, char *argv[]) { + ARG_CREATE, + ARG_CLEAN, + ARG_REMOVE, ++ ARG_UNSAFE, + ARG_PREFIX, + ARG_EXCLUDE_PREFIX, + }; +@@ -1288,6 +1299,7 @@ static int parse_argv(int argc, char *argv[]) { + { "create", no_argument, NULL, ARG_CREATE }, + { "clean", no_argument, NULL, ARG_CLEAN }, + { "remove", no_argument, NULL, ARG_REMOVE }, ++ { "unsafe", no_argument, NULL, ARG_UNSAFE }, + { "prefix", required_argument, NULL, ARG_PREFIX }, + { "exclude-prefix", required_argument, NULL, ARG_EXCLUDE_PREFIX }, + { NULL, 0, NULL, 0 } +@@ -1318,6 +1330,10 @@ static int parse_argv(int argc, char *argv[]) { + arg_remove = true; + break; + ++ case ARG_UNSAFE: ++ arg_unsafe = true; ++ break; ++ + case ARG_PREFIX: + if (strv_extend(&include_prefixes, optarg) < 0) + return log_oom(); +diff --git a/tmpfiles.d/legacy.conf b/tmpfiles.d/legacy.conf +index 3fff347..a165687 100644 +--- a/tmpfiles.d/legacy.conf ++++ b/tmpfiles.d/legacy.conf +@@ -29,6 +29,6 @@ d /run/lock/lockdev 0775 root lock - + # kernel command line options 'fsck.mode=force', 'fsck.mode=skip' and + # 'quotacheck.mode=force' + +-r /forcefsck +-r /fastboot +-r /forcequotacheck ++r! /forcefsck ++r! /fastboot ++r! /forcequotacheck +diff --git a/tmpfiles.d/systemd-nologin.conf b/tmpfiles.d/systemd-nologin.conf +new file mode 100644 +index 0000000..d61232b +--- /dev/null ++++ b/tmpfiles.d/systemd-nologin.conf +@@ -0,0 +1,11 @@ ++# This file is part of systemd. ++# ++# systemd is free software; you can redistribute it and/or modify it ++# under the terms of the GNU Lesser General Public License as published by ++# the Free Software Foundation; either version 2.1 of the License, or ++# (at your option) any later version. ++ ++# See tmpfiles.d(5) and systemd-forbid-user-logins.service(5). ++# This file has special suffix so it is not run by mistake. ++ ++F! /run/nologin 0644 - - - "System is booting up. See pam_nologin(8)" +diff --git a/tmpfiles.d/systemd.conf b/tmpfiles.d/systemd.conf +index a05c657..7c6d6b9 100644 +--- a/tmpfiles.d/systemd.conf ++++ b/tmpfiles.d/systemd.conf +@@ -8,7 +8,7 @@ + # See tmpfiles.d(5) for details + + d /run/user 0755 root root ~10d +-F /run/utmp 0664 root utmp - ++F! /run/utmp 0664 root utmp - + + f /var/log/wtmp 0664 root utmp - + f /var/log/btmp 0600 root utmp - +@@ -22,8 +22,6 @@ d /run/systemd/users 0755 root root - + d /run/systemd/machines 0755 root root - + d /run/systemd/shutdown 0755 root root - + +-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 - - +diff --git a/tmpfiles.d/x11.conf b/tmpfiles.d/x11.conf +index ece6a5c..4c96a54 100644 +--- a/tmpfiles.d/x11.conf ++++ b/tmpfiles.d/x11.conf +@@ -15,4 +15,4 @@ d /tmp/.font-unix 1777 root root 10d + d /tmp/.Test-unix 1777 root root 10d + + # Unlink the X11 lock files +-r /tmp/.X[0-9]*-lock ++r! /tmp/.X[0-9]*-lock +diff --git a/units/systemd-tmpfiles-setup.service.in b/units/systemd-tmpfiles-setup.service.in +index 3405e28..c2dcae0 100644 +--- a/units/systemd-tmpfiles-setup.service.in ++++ b/units/systemd-tmpfiles-setup.service.in +@@ -6,7 +6,7 @@ + # (at your option) any later version. + + [Unit] +-Description=Recreate Volatile Files and Directories ++Description=Create Volatile Files and Directories + Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8) + DefaultDependencies=no + Wants=local-fs.target +@@ -18,8 +18,10 @@ ConditionDirectoryNotEmpty=|/lib/tmpfiles.d + ConditionDirectoryNotEmpty=|/usr/local/lib/tmpfiles.d + ConditionDirectoryNotEmpty=|/etc/tmpfiles.d + ConditionDirectoryNotEmpty=|/run/tmpfiles.d ++RefuseManualStart=yes ++RefuseManualStop=yes + + [Service] + Type=oneshot + RemainAfterExit=yes +-ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --exclude-prefix=/dev ++ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --unsafe --exclude-prefix=/dev diff --git a/0198-sleep-config-fix-useless-check-for-swapfile-type.patch b/0198-sleep-config-fix-useless-check-for-swapfile-type.patch new file mode 100644 index 0000000..2871866 --- /dev/null +++ b/0198-sleep-config-fix-useless-check-for-swapfile-type.patch @@ -0,0 +1,43 @@ +From 5e86ba530ae6f7a4c9aec4069b0b8481003094c6 Mon Sep 17 00:00:00 2001 +From: Dave Reisner +Date: Tue, 24 Dec 2013 16:42:06 -0500 +Subject: [PATCH] sleep-config: fix useless check for swapfile type + +Since 0c6f1f4ea49 the check was useless, because the kernel will +ever only write "partition" or "file" there. + +OTOH, it is possible that "\\040(deleted)" (escaped " (deleted)") +will be added for removed files. This should not happen, so add +a warning to detect those cases. +--- + src/shared/sleep-config.c | 10 +++------- + 1 file changed, 3 insertions(+), 7 deletions(-) + +diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c +index 2bb0493..d76e3ad 100644 +--- a/src/shared/sleep-config.c ++++ b/src/shared/sleep-config.c +@@ -183,7 +183,7 @@ static int hibernation_partition_size(size_t *size, size_t *used) { + (void) fscanf(f, "%*s %*s %*s %*s %*s\n"); + + for (i = 1;; i++) { +- _cleanup_free_ char *dev = NULL, *d = NULL, *type = NULL; ++ _cleanup_free_ char *dev = NULL, *type = NULL; + size_t size_field, used_field; + int k; + +@@ -202,12 +202,8 @@ static int hibernation_partition_size(size_t *size, size_t *used) { + continue; + } + +- d = cunescape(dev); +- if (!d) +- return -ENOMEM; +- +- if (!streq(type, "partition") && !streq(type, "file")) { +- log_debug("Partition %s has type %s, ignoring.", d, type); ++ if (streq(type, "partition") && endswith(dev, "\\040(deleted)")) { ++ log_warning("Ignoring deleted swapfile '%s'.", dev); + continue; + } + diff --git a/0199-journalctl-make-sure-b-foobar-cannot-be-misunderstoo.patch b/0199-journalctl-make-sure-b-foobar-cannot-be-misunderstoo.patch new file mode 100644 index 0000000..08ec28f --- /dev/null +++ b/0199-journalctl-make-sure-b-foobar-cannot-be-misunderstoo.patch @@ -0,0 +1,178 @@ +From 2c3dd6140293fb09b4c78b5db2dbcad35ee7d002 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 26 Dec 2013 01:52:01 +0100 +Subject: [PATCH] journalctl: make sure -b --foobar cannot be misunderstood as + --boot=--foobar + +Conflicts: + src/journal/journalctl.c + src/systemd/sd-bus.h +--- + src/journal/journalctl.c | 111 +++++++++++++++++++++++++---------------------- + 1 file changed, 60 insertions(+), 51 deletions(-) + +diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c +index 1d66792..ccd96b2 100644 +--- a/src/journal/journalctl.c ++++ b/src/journal/journalctl.c +@@ -72,7 +72,8 @@ static bool arg_no_tail = false; + static bool arg_quiet = false; + static bool arg_merge = false; + static bool arg_boot = false; +-static char *arg_boot_descriptor = NULL; ++static sd_id128_t arg_boot_id = {}; ++static int arg_boot_offset = 0; + static bool arg_dmesg = false; + static const char *arg_cursor = NULL; + static const char *arg_after_cursor = NULL; +@@ -122,6 +123,41 @@ static void pager_open_if_enabled(void) { + pager_open(arg_pager_end); + } + ++static int parse_boot_descriptor(const char *x, sd_id128_t *boot_id, int *offset) { ++ sd_id128_t id = SD_ID128_NULL; ++ int off = 0, r; ++ ++ if (strlen(x) >= 32) { ++ char *t; ++ ++ t = strndupa(x, 32); ++ r = sd_id128_from_string(t, &id); ++ if (r >= 0) ++ x += 32; ++ ++ if (*x != '-' && *x != '+' && *x != 0) ++ return -EINVAL; ++ ++ if (*x != 0) { ++ r = safe_atoi(x, &off); ++ if (r < 0) ++ return r; ++ } ++ } else { ++ r = safe_atoi(x, &off); ++ if (r < 0) ++ return r; ++ } ++ ++ if (boot_id) ++ *boot_id = id; ++ ++ if (offset) ++ *offset = off; ++ ++ return 0; ++} ++ + static int help(void) { + + pager_open_if_enabled(); +@@ -365,16 +401,23 @@ static int parse_argv(int argc, char *argv[]) { + case 'b': + arg_boot = true; + +- if (optarg) +- arg_boot_descriptor = optarg; +- else if (optind < argc) { +- int boot; ++ if (optarg) { ++ r = parse_boot_descriptor(optarg, &arg_boot_id, &arg_boot_offset); ++ if (r < 0) { ++ log_error("Failed to parse boot descriptor '%s'", optarg); ++ return -EINVAL; ++ } ++ } else { ++ ++ /* Hmm, no argument? Maybe the next ++ * word on the command line is ++ * supposed to be the argument? Let's ++ * see if there is one and is parsable ++ * as a boot descriptor... */ + +- if (argv[optind][0] != '-' || +- safe_atoi(argv[optind], &boot) >= 0) { +- arg_boot_descriptor = argv[optind]; ++ if (optind < argc && ++ parse_boot_descriptor(argv[optind], &arg_boot_id, &arg_boot_offset) >= 0) + optind++; +- } + } + + break; +@@ -809,9 +852,6 @@ static int get_relative_boot_id(sd_journal *j, sd_id128_t *boot_id, int relative + assert(j); + assert(boot_id); + +- if (relative == 0 && !sd_id128_equal(*boot_id, SD_ID128_NULL)) +- return 0; +- + r = sd_journal_query_unique(j, "_BOOT_ID"); + if (r < 0) + return r; +@@ -878,58 +918,27 @@ static int get_relative_boot_id(sd_journal *j, sd_id128_t *boot_id, int relative + + static int add_boot(sd_journal *j) { + char match[9+32+1] = "_BOOT_ID="; +- char *offset; +- sd_id128_t boot_id = SD_ID128_NULL; +- int r, relative = 0; ++ int r; + + assert(j); + + if (!arg_boot) + return 0; + +- if (!arg_boot_descriptor) ++ if (arg_boot_offset == 0 && sd_id128_equal(arg_boot_id, SD_ID128_NULL)) + return add_match_this_boot(j); + +- if (strlen(arg_boot_descriptor) >= 32) { +- char tmp = arg_boot_descriptor[32]; +- arg_boot_descriptor[32] = '\0'; +- r = sd_id128_from_string(arg_boot_descriptor, &boot_id); +- arg_boot_descriptor[32] = tmp; +- +- if (r < 0) { +- log_error("Failed to parse boot ID '%.32s': %s", +- arg_boot_descriptor, strerror(-r)); +- return r; +- } +- +- offset = arg_boot_descriptor + 32; +- +- if (*offset && *offset != '-' && *offset != '+') { +- log_error("Relative boot ID offset must start with a '+' or a '-', found '%s' ", offset); +- return -EINVAL; +- } +- } else +- offset = arg_boot_descriptor; +- +- if (*offset) { +- r = safe_atoi(offset, &relative); +- if (r < 0) { +- log_error("Failed to parse relative boot ID number '%s'", offset); +- return -EINVAL; +- } +- } +- +- r = get_relative_boot_id(j, &boot_id, relative); ++ r = get_relative_boot_id(j, &arg_boot_id, arg_boot_offset); + if (r < 0) { +- if (sd_id128_equal(boot_id, SD_ID128_NULL)) +- log_error("Failed to look up boot %+d: %s", relative, strerror(-r)); ++ if (sd_id128_equal(arg_boot_id, SD_ID128_NULL)) ++ log_error("Failed to look up boot %+i: %s", arg_boot_offset, strerror(-r)); + else +- log_error("Failed to look up boot ID "SD_ID128_FORMAT_STR"%+d: %s", +- SD_ID128_FORMAT_VAL(boot_id), relative, strerror(-r)); ++ log_error("Failed to look up boot ID "SD_ID128_FORMAT_STR"%+i: %s", ++ SD_ID128_FORMAT_VAL(arg_boot_id), arg_boot_offset, strerror(-r)); + return r; + } + +- sd_id128_to_string(boot_id, match + 9); ++ sd_id128_to_string(arg_boot_id, match + 9); + + r = sd_journal_add_match(j, match, sizeof(match) - 1); + if (r < 0) { diff --git a/0200-man-resolve-word-omissions.patch b/0200-man-resolve-word-omissions.patch new file mode 100644 index 0000000..8528eef --- /dev/null +++ b/0200-man-resolve-word-omissions.patch @@ -0,0 +1,725 @@ +From 424e80301de3b39d8641a49a7755af6dc3d6b4e8 Mon Sep 17 00:00:00 2001 +From: Jan Engelhardt +Date: Thu, 26 Dec 2013 02:47:43 +0100 +Subject: [PATCH] man: resolve word omissions + +This is a recurring submission and includes corrections to: +word omissions and word class choice. + +Conflicts: + man/sd_bus_message_get_cookie.xml + man/sd_bus_request_name.xml + man/sd_watchdog_enabled.xml + man/systemd-getty-generator.xml +--- + man/binfmt.d.xml | 4 ++-- + man/journald.conf.xml | 2 +- + man/loginctl.xml | 2 +- + man/sd-daemon.xml | 2 +- + man/sd-journal.xml | 2 +- + man/sd-login.xml | 4 ++-- + man/sd_booted.xml | 2 +- + man/sd_get_seats.xml | 8 ++++---- + man/sd_id128_get_machine.xml | 2 +- + man/sd_id128_randomize.xml | 2 +- + man/sd_id128_to_string.xml | 2 +- + man/sd_is_fifo.xml | 2 +- + man/sd_journal_add_match.xml | 2 +- + man/sd_journal_get_catalog.xml | 2 +- + man/sd_journal_get_cursor.xml | 2 +- + man/sd_journal_get_cutoff_realtime_usec.xml | 2 +- + man/sd_journal_get_data.xml | 2 +- + man/sd_journal_get_fd.xml | 2 +- + man/sd_journal_get_realtime_usec.xml | 2 +- + man/sd_journal_get_usage.xml | 2 +- + man/sd_journal_next.xml | 6 +++--- + man/sd_journal_print.xml | 2 +- + man/sd_journal_query_unique.xml | 2 +- + man/sd_journal_seek_head.xml | 4 ++-- + man/sd_journal_stream_fd.xml | 2 +- + man/sd_listen_fds.xml | 4 ++-- + man/sd_login_monitor_new.xml | 2 +- + man/sd_notify.xml | 4 ++-- + man/sd_pid_get_session.xml | 2 +- + man/sd_seat_get_active.xml | 2 +- + man/sd_session_is_active.xml | 2 +- + man/sd_uid_get_state.xml | 4 ++-- + man/sysctl.d.xml | 4 ++-- + man/systemctl.xml | 4 ++-- + man/systemd-getty-generator.xml | 8 ++++---- + man/systemd-halt.service.xml | 2 +- + man/systemd-machine-id-setup.xml | 2 +- + man/systemd.preset.xml | 4 ++-- + man/systemd.service.xml | 2 +- + man/systemd.socket.xml | 4 ++-- + man/systemd.unit.xml | 4 ++-- + man/tmpfiles.d.xml | 4 ++-- + 42 files changed, 62 insertions(+), 62 deletions(-) + +diff --git a/man/binfmt.d.xml b/man/binfmt.d.xml +index 94f97e0..6f8668b 100644 +--- a/man/binfmt.d.xml ++++ b/man/binfmt.d.xml +@@ -88,8 +88,8 @@ + administrator, who may use this logic to override the + configuration files installed from vendor + packages. All files are sorted by their filename in +- lexicographic order, regardless in which of the +- directories they reside. If multiple files specify ++ lexicographic order, regardless of which of the ++ directories they reside in. If multiple files specify + the same binary type name, the entry in the file with + the lexicographically latest name will be applied. + +diff --git a/man/journald.conf.xml b/man/journald.conf.xml +index 8e642a3..b362c5d 100644 +--- a/man/journald.conf.xml ++++ b/man/journald.conf.xml +@@ -155,7 +155,7 @@ + into the system journal. If + uid, any user ID + will get his own journal files +- regardless whether it belongs to a ++ regardless of whether it belongs to a + system service or refers to a real + logged in user. If + none, journal files +diff --git a/man/loginctl.xml b/man/loginctl.xml +index 1b54ff7..133d6cf 100644 +--- a/man/loginctl.xml ++++ b/man/loginctl.xml +@@ -109,7 +109,7 @@ + + When showing + session/user/seat properties, show all +- properties regardless whether they are ++ properties regardless of whether they are + set or not. + + +diff --git a/man/sd-daemon.xml b/man/sd-daemon.xml +index 6e804e1..84c1afa 100644 +--- a/man/sd-daemon.xml ++++ b/man/sd-daemon.xml +@@ -144,7 +144,7 @@ + These APIs are implemented in the reference + implementation's sd-daemon.c and + sd-daemon.h files. These +- interfaces are available as shared library, which can ++ interfaces are available as a shared library, which can + be compiled and linked to with the + libsystemd-daemon pkg-config1 + file. Alternatively, applications consuming these APIs +diff --git a/man/sd-journal.xml b/man/sd-journal.xml +index 6d39611..832d584 100644 +--- a/man/sd-journal.xml ++++ b/man/sd-journal.xml +@@ -98,7 +98,7 @@ + + Notes + +- These APIs are implemented as shared library, ++ These APIs are implemented as a shared library, + which can be compiled and linked to with the + libsystemd-journal pkg-config1 + file. +diff --git a/man/sd-login.xml b/man/sd-login.xml +index 251b35b..1d47b29 100644 +--- a/man/sd-login.xml ++++ b/man/sd-login.xml +@@ -99,7 +99,7 @@ + caller with the libc + free3 + call after use, including the strings referenced +- therein. Similar, individual strings returned need to ++ therein. Similarly, individual strings returned need to + be freed, as well. + + As a special exception, instead of an empty +@@ -120,7 +120,7 @@ + + Notes + +- These APIs are implemented as shared library, ++ These APIs are implemented as a shared library, + which can be compiled and linked to with the + libsystemd-login pkg-config1 + file. +diff --git a/man/sd_booted.xml b/man/sd_booted.xml +index 64c0cd9..6f8cc95 100644 +--- a/man/sd_booted.xml ++++ b/man/sd_booted.xml +@@ -100,7 +100,7 @@ + in the reference implementation's + sd-daemon.c and + sd-daemon.h files. These +- interfaces are available as shared library, which can ++ interfaces are available as a shared library, which can + be compiled and linked to with the + libsystemd-daemon pkg-config1 + file. Alternatively, applications consuming these APIs +diff --git a/man/sd_get_seats.xml b/man/sd_get_seats.xml +index 8254b7c..1e55af3 100644 +--- a/man/sd_get_seats.xml ++++ b/man/sd_get_seats.xml +@@ -90,13 +90,13 @@ + NULL may be returned and should be considered + equivalent to an empty array. + +- Similar, sd_get_sessions() may ++ Similarly, sd_get_sessions() may + be used to determine all current login sessions. + +- Similar, sd_get_uids() may ++ Similarly, sd_get_uids() may + be used to determine all Unix users who currently have login sessions. + +- Similar, ++ Similarly, + sd_get_machine_names() may be + used to determine all current virtual machines and + containers on the system. +@@ -122,7 +122,7 @@ + sd_get_sessions(), + sd_get_uids() and + sd_get_machine_names() interfaces +- are available as shared library, which can be compiled ++ are available as a shared library, which can be compiled + and linked to with the + libsystemd-login pkg-config1 + file. +diff --git a/man/sd_id128_get_machine.xml b/man/sd_id128_get_machine.xml +index 6bee7ad..084fda2 100644 +--- a/man/sd_id128_get_machine.xml ++++ b/man/sd_id128_get_machine.xml +@@ -116,7 +116,7 @@ + + The sd_id128_get_machine() + and sd_id128_get_boot() +- interfaces are available as shared library, which can ++ interfaces are available as a shared library, which can + be compiled and linked to with the + libsystemd-id128 pkg-config1 + file. +diff --git a/man/sd_id128_randomize.xml b/man/sd_id128_randomize.xml +index 0b95803..100de16 100644 +--- a/man/sd_id128_randomize.xml ++++ b/man/sd_id128_randomize.xml +@@ -95,7 +95,7 @@ + Notes + + The sd_id128_randomize() interface +- is available as shared library, which can be compiled ++ is available as a shared library, which can be compiled + and linked to with the + libsystemd-id128 pkg-config1 + file. +diff --git a/man/sd_id128_to_string.xml b/man/sd_id128_to_string.xml +index 71cf82a..eae2915 100644 +--- a/man/sd_id128_to_string.xml ++++ b/man/sd_id128_to_string.xml +@@ -118,7 +118,7 @@ + + The sd_id128_to_string() + and sd_id128_from_string() interfaces are +- available as shared library, which can be compiled and ++ available as a shared library, which can be compiled and + linked to with the libsystemd-id128 pkg-config1 + file. + +diff --git a/man/sd_is_fifo.xml b/man/sd_is_fifo.xml +index 4d9cd79..5e79453 100644 +--- a/man/sd_is_fifo.xml ++++ b/man/sd_is_fifo.xml +@@ -208,7 +208,7 @@ + related functions are implemented in the reference + implementation's sd-daemon.c and + sd-daemon.h files. These +- interfaces are available as shared library, which can ++ interfaces are available as a shared library, which can + be compiled and linked to with the + libsystemd-daemon pkg-config1 + file. Alternatively, applications consuming these APIs +diff --git a/man/sd_journal_add_match.xml b/man/sd_journal_add_match.xml +index b6c7b06..6568234 100644 +--- a/man/sd_journal_add_match.xml ++++ b/man/sd_journal_add_match.xml +@@ -174,7 +174,7 @@ + sd_journal_add_disjunction(), + sd_journal_add_conjunction() and + sd_journal_flush_matches() +- interfaces are available as shared library, which can ++ interfaces are available as a shared library, which can + be compiled and linked to with the + libsystemd-journal pkg-config1 + file. +diff --git a/man/sd_journal_get_catalog.xml b/man/sd_journal_get_catalog.xml +index 4a7e0a1..ecd329f 100644 +--- a/man/sd_journal_get_catalog.xml ++++ b/man/sd_journal_get_catalog.xml +@@ -118,7 +118,7 @@ + + The sd_journal_get_catalog() and + sd_journal_get_catalog_for_message_id() +- interfaces are available as shared library, which can ++ interfaces are available as a shared library, which can + be compiled and linked to with the + libsystemd-journal pkg-config1 + file. +diff --git a/man/sd_journal_get_cursor.xml b/man/sd_journal_get_cursor.xml +index 4cee7d5..046c154 100644 +--- a/man/sd_journal_get_cursor.xml ++++ b/man/sd_journal_get_cursor.xml +@@ -130,7 +130,7 @@ + + The sd_journal_get_cursor() + and sd_journal_test_cursor() +- interfaces are available as shared library, which can ++ interfaces are available as a shared library, which can + be compiled and linked to with the + libsystemd-journal pkg-config1 + file. +diff --git a/man/sd_journal_get_cutoff_realtime_usec.xml b/man/sd_journal_get_cutoff_realtime_usec.xml +index 9bf8220..287c1c5 100644 +--- a/man/sd_journal_get_cutoff_realtime_usec.xml ++++ b/man/sd_journal_get_cutoff_realtime_usec.xml +@@ -122,7 +122,7 @@ + sd_journal_get_cutoff_realtime_usec() + and + sd_journal_get_cutoff_monotonic_usec() +- interfaces are available as shared library, which can ++ interfaces are available as a shared library, which can + be compiled and linked to with the + libsystemd-journal pkg-config1 + file. +diff --git a/man/sd_journal_get_data.xml b/man/sd_journal_get_data.xml +index 0e1111e..6ed52b5 100644 +--- a/man/sd_journal_get_data.xml ++++ b/man/sd_journal_get_data.xml +@@ -203,7 +203,7 @@ + sd_journal_set_data_threshold() + and + sd_journal_get_data_threshold() +- interfaces are available as shared library, which can ++ interfaces are available as a shared library, which can + be compiled and linked to with the + libsystemd-journal pkg-config1 + file. +diff --git a/man/sd_journal_get_fd.xml b/man/sd_journal_get_fd.xml +index 764f716..4b36f97 100644 +--- a/man/sd_journal_get_fd.xml ++++ b/man/sd_journal_get_fd.xml +@@ -253,7 +253,7 @@ else { + sd_journal_reliable_fd(), + sd_journal_process() and + sd_journal_wait() interfaces are +- available as shared library, which can be compiled and ++ available as a shared library, which can be compiled and + linked to with the + libsystemd-journal pkg-config1 + file. +diff --git a/man/sd_journal_get_realtime_usec.xml b/man/sd_journal_get_realtime_usec.xml +index 8870c29..bf1aa50 100644 +--- a/man/sd_journal_get_realtime_usec.xml ++++ b/man/sd_journal_get_realtime_usec.xml +@@ -122,7 +122,7 @@ + sd_journal_get_realtime_usec() + and + sd_journal_get_monotonic_usec() +- interfaces are available as shared library, which can ++ interfaces are available as a shared library, which can + be compiled and linked to with the + libsystemd-journal pkg-config1 + file. +diff --git a/man/sd_journal_get_usage.xml b/man/sd_journal_get_usage.xml +index 180d8b2..08d8640 100644 +--- a/man/sd_journal_get_usage.xml ++++ b/man/sd_journal_get_usage.xml +@@ -84,7 +84,7 @@ + Notes + + The sd_journal_get_usage() +- interface is available as shared library, which can be ++ interface is available as a shared library, which can be + compiled and linked to with the + libsystemd-journal pkg-config1 + file. +diff --git a/man/sd_journal_next.xml b/man/sd_journal_next.xml +index 6e437d1..1409b0d 100644 +--- a/man/sd_journal_next.xml ++++ b/man/sd_journal_next.xml +@@ -102,7 +102,7 @@ + functions such as + sd_journal_get_data3. + +- Similar, sd_journal_previous() sets ++ Similarly, sd_journal_previous() sets + the read pointer back one entry. + + sd_journal_next_skip() and +@@ -129,7 +129,7 @@ + sd_journal_seek_head3 + and sd_journal_next() in order to + make iterating through the journal easier. See below +- for an example. Similar, ++ for an example. Similarly, + SD_JOURNAL_FOREACH_BACKWARDS() + may be used for iterating the journal in reverse + order. +@@ -156,7 +156,7 @@ + The sd_journal_next(), sd_journal_previous(), + sd_journal_next_skip() and + sd_journal_previous_skip() interfaces are +- available as shared library, which can be compiled and ++ available as a shared library, which can be compiled and + linked to with the + libsystemd-journal pkg-config1 + file. +diff --git a/man/sd_journal_print.xml b/man/sd_journal_print.xml +index e61a648..a716cc3 100644 +--- a/man/sd_journal_print.xml ++++ b/man/sd_journal_print.xml +@@ -227,7 +227,7 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid( + sd_journal_printv(), + sd_journal_send() and + sd_journal_sendv() interfaces +- are available as shared library, which can be compiled ++ are available as a shared library, which can be compiled + and linked to with the + libsystemd-journal pkg-config1 + file. +diff --git a/man/sd_journal_query_unique.xml b/man/sd_journal_query_unique.xml +index f5d9d2b..f0b9204 100644 +--- a/man/sd_journal_query_unique.xml ++++ b/man/sd_journal_query_unique.xml +@@ -156,7 +156,7 @@ + The sd_journal_query_unique(), + sd_journal_enumerate_unique() and + sd_journal_restart_unique() +- interfaces are available as shared library, which can ++ interfaces are available as a shared library, which can + be compiled and linked to with the + libsystemd-journal pkg-config1 + file. +diff --git a/man/sd_journal_seek_head.xml b/man/sd_journal_seek_head.xml +index 03de30a..939f0b1 100644 +--- a/man/sd_journal_seek_head.xml ++++ b/man/sd_journal_seek_head.xml +@@ -94,7 +94,7 @@ + seeks to the beginning of the journal, i.e. the oldest + available entry. + +- Similar, ++ Similarly, + sd_journal_seek_tail() may be + used to seek to the end of the journal, i.e. the most + recent available entry. +@@ -156,7 +156,7 @@ + sd_journal_seek_monotonic_usec(), + sd_journal_seek_realtime_usec(), + and sd_journal_seek_cursor() +- interfaces are available as shared library, which can ++ interfaces are available as a shared library, which can + be compiled and linked to with the + libsystemd-journal pkg-config1 + file. +diff --git a/man/sd_journal_stream_fd.xml b/man/sd_journal_stream_fd.xml +index 4bd0abc..a8dc8fd 100644 +--- a/man/sd_journal_stream_fd.xml ++++ b/man/sd_journal_stream_fd.xml +@@ -112,7 +112,7 @@ + Notes + + The sd_journal_stream_fd() +- interface is available as shared library, which can ++ interface is available as a shared library, which can + be compiled and linked to with the + libsystemd-journal pkg-config1 + file. +diff --git a/man/sd_listen_fds.xml b/man/sd_listen_fds.xml +index 240300d..aaabdbf 100644 +--- a/man/sd_listen_fds.xml ++++ b/man/sd_listen_fds.xml +@@ -73,7 +73,7 @@ + parameter is non-zero, + sd_listen_fds() will unset the + $LISTEN_FDS/$LISTEN_PID +- environment variables before returning (regardless ++ environment variables before returning (regardless of + whether the function call itself succeeded or + not). Further calls to + sd_listen_fds() will then fail, +@@ -149,7 +149,7 @@ + implemented in the reference implementation's + sd-daemon.c and + sd-daemon.h files. These +- interfaces are available as shared library, which can ++ interfaces are available as a shared library, which can + be compiled and linked to with the + libsystemd-daemon pkg-config1 + file. Alternatively, applications consuming these APIs +diff --git a/man/sd_login_monitor_new.xml b/man/sd_login_monitor_new.xml +index 909a3d9..f439d3e 100644 +--- a/man/sd_login_monitor_new.xml ++++ b/man/sd_login_monitor_new.xml +@@ -224,7 +224,7 @@ else { + sd_login_monitor_get_fd(), + sd_login_monitor_get_events() and + sd_login_monitor_get_timeout() +- interfaces are available as shared library, which can ++ interfaces are available as a shared library, which can + be compiled and linked to with the + libsystemd-login pkg-config1 + file. +diff --git a/man/sd_notify.xml b/man/sd_notify.xml +index 55965ff..e078140 100644 +--- a/man/sd_notify.xml ++++ b/man/sd_notify.xml +@@ -79,7 +79,7 @@ + If the unset_environment + parameter is non-zero, sd_notify() + will unset the $NOTIFY_SOCKET +- environment variable before returning (regardless ++ environment variable before returning (regardless of + whether the function call itself succeeded or + not). Further calls to + sd_notify() will then fail, but +@@ -236,7 +236,7 @@ + the reference implementation's + sd-daemon.c and + sd-daemon.h files. These +- interfaces are available as shared library, which can ++ interfaces are available as a shared library, which can + be compiled and linked to with the + libsystemd-daemon pkg-config1 + file. Alternatively, applications consuming these APIs +diff --git a/man/sd_pid_get_session.xml b/man/sd_pid_get_session.xml +index e5c7709..ff5905b 100644 +--- a/man/sd_pid_get_session.xml ++++ b/man/sd_pid_get_session.xml +@@ -186,7 +186,7 @@ + sd_pid_get_owner_uid(), + sd_pid_get_machine_name() and + sd_pid_get_slice() interfaces are +- available as shared library, which can be compiled and ++ available as a shared library, which can be compiled and + linked to with the + libsystemd-login pkg-config1 + file. +diff --git a/man/sd_seat_get_active.xml b/man/sd_seat_get_active.xml +index cd87696..23d582d 100644 +--- a/man/sd_seat_get_active.xml ++++ b/man/sd_seat_get_active.xml +@@ -164,7 +164,7 @@ + sd_seat_can_multi_session(), + sd_seat_can_tty() and + sd_seat_can_grapical() interfaces +- are available as shared library, which can be compiled ++ are available as a shared library, which can be compiled + and linked to with the + libsystemd-login pkg-config1 + file. +diff --git a/man/sd_session_is_active.xml b/man/sd_session_is_active.xml +index 293ce71..06891f7 100644 +--- a/man/sd_session_is_active.xml ++++ b/man/sd_session_is_active.xml +@@ -252,7 +252,7 @@ + sd_session_get_class(), + sd_session_get_display() and + sd_session_get_tty() +- interfaces are available as shared library, which can ++ interfaces are available as a shared library, which can + be compiled and linked to with the + libsystemd-login pkg-config1 + file. +diff --git a/man/sd_uid_get_state.xml b/man/sd_uid_get_state.xml +index d4d23f4..0faa765 100644 +--- a/man/sd_uid_get_state.xml ++++ b/man/sd_uid_get_state.xml +@@ -139,7 +139,7 @@ + be returned and should be considered equivalent to an + empty array. + +- Similar, sd_uid_get_seats() ++ Similarly, sd_uid_get_seats() + may be used to determine the list of seats on which + the user currently has sessions. Similar semantics + apply, however note that the user may have +@@ -171,7 +171,7 @@ + sd_uid_is_on_seat(), + sd_uid_get_sessions(), and + sd_uid_get_seats() interfaces are +- available as shared library, which can be compiled and ++ available as a shared library, which can be compiled and + linked to with the libsystemd-login pkg-config1 + file. + +diff --git a/man/sysctl.d.xml b/man/sysctl.d.xml +index 854864c..5544283 100644 +--- a/man/sysctl.d.xml ++++ b/man/sysctl.d.xml +@@ -89,8 +89,8 @@ + administrator, who may use this logic to override the + configuration files installed by vendor packages. All + configuration files are sorted by their filename in +- lexicographic order, regardless in which of the +- directories they reside. If multiple files specify the ++ lexicographic order, regardless of which of the ++ directories they reside in. If multiple files specify the + same variable name, the entry in the file with the + lexicographically latest name will be applied. It is + recommended to prefix all filenames with a two-digit +diff --git a/man/systemctl.xml b/man/systemctl.xml +index b4bc15d..61deb19 100644 +--- a/man/systemctl.xml ++++ b/man/systemctl.xml +@@ -250,7 +250,7 @@ systemctl start foo + sleep state. Any user may take these locks and privileged + users may override these locks. If any locks are taken, + shutdown and sleep state requests will normally fail +- (regardless if privileged or not) and a list of active locks ++ (regardless of whether privileged or not) and a list of active locks + is printed. However, if + is specified, the locks are ignored and not printed, and the + operation attempted anyway, possibly requiring additional +@@ -445,7 +445,7 @@ systemctl start foo + with identical immediate effects, however, since the latter + is lost on reboot, the changes are lost too. + +- Similar, when used with ++ Similarly, when used with + set-property, make changes only + temporarily, so that they are lost on the next + reboot. +diff --git a/man/systemd-getty-generator.xml b/man/systemd-getty-generator.xml +index da88e72..b1993ae 100644 +--- a/man/systemd-getty-generator.xml ++++ b/man/systemd-getty-generator.xml +@@ -61,10 +61,10 @@ + subsystem. It will also instantiate + serial-getty@.service instances + for virtualizer consoles, if execution in a +- virtualized environment is detected. This should +- ensure that the user is shown a login prompt at the +- right place, regardless in which environment the +- system is started. For example, it is sufficient to ++ virtualized environment is detected. This ++ should ensure that the user is shown a login prompt at ++ the right place, regardless of which environment the ++ system is started in. For example, it is sufficient to + redirect the kernel console with a kernel command line + argument such as console= to get + both kernel messages and a getty prompt on a serial +diff --git a/man/systemd-halt.service.xml b/man/systemd-halt.service.xml +index 90b443f..99457aa 100644 +--- a/man/systemd-halt.service.xml ++++ b/man/systemd-halt.service.xml +@@ -65,7 +65,7 @@ + systemd-halt.service is a + system service that is pulled in by + halt.target and is responsible +- for the actual system halt. Similar, ++ for the actual system halt. Similarly, + systemd-poweroff.service is + pulled in by poweroff.target, + systemd-reboot.service by +diff --git a/man/systemd-machine-id-setup.xml b/man/systemd-machine-id-setup.xml +index fef76bc..bc38d55 100644 +--- a/man/systemd-machine-id-setup.xml ++++ b/man/systemd-machine-id-setup.xml +@@ -80,7 +80,7 @@ + UUID passed is sufficiently unique and is different + for every booted instanced of the VM. + +- Similar, if run inside a Linux container ++ Similarly, if run inside a Linux container + environment and a UUID is set for the container this + is used to initialize the machine ID. For details see + the documentation of the always, the service +- will be restarted regardless whether ++ will be restarted regardless of whether + it exited cleanly or not, got + terminated abnormally by a signal or + hit a timeout. +diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml +index 1c78562..ac3127d 100644 +--- a/man/systemd.socket.xml ++++ b/man/systemd.socket.xml +@@ -213,7 +213,7 @@ + traffic on any of the sockets will + trigger service activation, and all + listed sockets will be passed to the +- service, regardless whether there is ++ service, regardless of whether there is + incoming traffic on them or not. If + the empty string is assigned to any of + these options, the list of addresses +@@ -225,7 +225,7 @@ + it is often desirable to listen on it + before the interface it is configured + on is up and running, and even +- regardless whether it will be up and ++ regardless of whether it will be up and + running ever at all. To deal with this + it is recommended to set the + FreeBind= option +diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml +index 77127ff..b70c5e9 100644 +--- a/man/systemd.unit.xml ++++ b/man/systemd.unit.xml +@@ -634,7 +634,7 @@ + dependency on another unit is shut + down while the latter is started up, + the shut down is ordered before the +- start-up regardless whether the ++ start-up regardless of whether the + ordering dependency is actually of + type After= or + Before=. If two +@@ -938,7 +938,7 @@ + exists, is a regular file and marked + executable. + +- Similar, ++ Similarly, + ConditionKernelCommandLine= + may be used to check whether a + specific kernel command line option is +diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml +index 39aa68d..ed88751 100644 +--- a/man/tmpfiles.d.xml ++++ b/man/tmpfiles.d.xml +@@ -88,8 +88,8 @@ + the local administrator, who may use this logic to + override the configuration files installed by vendor + packages. All configuration files are sorted by their +- filename in lexicographic order, regardless in which +- of the directories they reside. If multiple files ++ filename in lexicographic order, regardless of which ++ of the directories they reside in. If multiple files + specify the same path, the entry in the file with the + lexicographically earliest name will be applied, all + all other conflicting entries logged as errors. diff --git a/0201-man-improvements-to-comma-placement.patch b/0201-man-improvements-to-comma-placement.patch new file mode 100644 index 0000000..b1a9674 --- /dev/null +++ b/0201-man-improvements-to-comma-placement.patch @@ -0,0 +1,507 @@ +From 4a1155c88d295e81037fd8a48b585a00fbf43cbc Mon Sep 17 00:00:00 2001 +From: Jan Engelhardt +Date: Thu, 26 Dec 2013 02:47:44 +0100 +Subject: [PATCH] man: improvements to comma placement + +This is a recurring submission and includes corrections to: +comma placement. + +Conflicts: + man/sd_bus_message_get_cookie.xml + man/sd_bus_request_name.xml + man/sd_session_is_active.xml + man/sd_watchdog_enabled.xml + man/systemctl.xml + man/systemd.exec.xml + man/systemd.timer.xml + man/systemd.unit.xml +--- + man/halt.xml | 2 +- + man/hostnamectl.xml | 2 +- + man/sd-daemon.xml | 4 ++-- + man/sd-readahead.xml | 2 +- + man/sd_booted.xml | 2 +- + man/sd_get_seats.xml | 2 +- + man/sd_is_fifo.xml | 2 +- + man/sd_listen_fds.xml | 2 +- + man/sd_login_monitor_new.xml | 6 +++--- + man/sd_notify.xml | 2 +- + man/sd_readahead.xml | 2 +- + man/sd_seat_get_active.xml | 4 ++-- + man/sd_uid_get_state.xml | 4 ++-- + man/shutdown.xml | 2 +- + man/systemd-analyze.xml | 2 +- + man/systemd-ask-password.xml | 2 +- + man/systemd-cat.xml | 2 +- + man/systemd-cgls.xml | 2 +- + man/systemd-cgtop.xml | 2 +- + man/systemd-coredumpctl.xml | 2 +- + man/systemd-delta.xml | 2 +- + man/systemd-machine-id-setup.xml | 2 +- + man/systemd-notify.xml | 2 +- + man/systemd-tmpfiles.xml | 2 +- + man/systemd-tty-ask-password-agent.xml | 2 +- + man/systemd.device.xml | 2 +- + man/systemd.mount.xml | 2 +- + man/systemd.service.xml | 2 +- + man/systemd.special.xml | 2 +- + man/systemd.swap.xml | 2 +- + man/systemd.xml | 2 +- + man/telinit.xml | 2 +- + man/timedatectl.xml | 2 +- + 33 files changed, 38 insertions(+), 38 deletions(-) + +diff --git a/man/halt.xml b/man/halt.xml +index 2a13d3c..f54a864 100644 +--- a/man/halt.xml ++++ b/man/halt.xml +@@ -148,7 +148,7 @@ + + Exit status + +- On success 0 is returned, a non-zero failure ++ On success, 0 is returned, a non-zero failure + code otherwise. + + +diff --git a/man/hostnamectl.xml b/man/hostnamectl.xml +index b39fb55..a0776f5 100644 +--- a/man/hostnamectl.xml ++++ b/man/hostnamectl.xml +@@ -255,7 +255,7 @@ + + Exit status + +- On success 0 is returned, a non-zero failure ++ On success, 0 is returned, a non-zero failure + code otherwise. + + +diff --git a/man/sd-daemon.xml b/man/sd-daemon.xml +index 84c1afa..b48eac9 100644 +--- a/man/sd-daemon.xml ++++ b/man/sd-daemon.xml +@@ -83,7 +83,7 @@ + sd_booted3, + sd_is_fifo3 + for more information about the functions +- implemented. In addition to these functions a couple ++ implemented. In addition to these functions, a couple + of logging prefixes are defined as macros: + + #define SD_EMERG "<0>" /* system is unusable */ +@@ -135,7 +135,7 @@ + implementation. See the respective function man pages + for details. + +- In addition, for details about the algorithms ++ In addition, for details about the algorithms, + check the liberally licensed reference implementation + sources: + +diff --git a/man/sd-readahead.xml b/man/sd-readahead.xml +index f8a0a0b..bcc46b2 100644 +--- a/man/sd-readahead.xml ++++ b/man/sd-readahead.xml +@@ -83,7 +83,7 @@ + reference implementation. See the respective function + man pages for details. + +- In addition, for details about the algorithms ++ In addition, for details about the algorithms, + check the liberally licensed reference implementation + sources: + +diff --git a/man/sd_booted.xml b/man/sd_booted.xml +index 6f8cc95..1e38d2a 100644 +--- a/man/sd_booted.xml ++++ b/man/sd_booted.xml +@@ -106,7 +106,7 @@ + file. Alternatively, applications consuming these APIs + may copy the implementation into their source + tree. For more details about the reference +- implementation see ++ implementation, see + sd-daemon3. + + If the reference implementation is used as +diff --git a/man/sd_get_seats.xml b/man/sd_get_seats.xml +index 1e55af3..f0e7655 100644 +--- a/man/sd_get_seats.xml ++++ b/man/sd_get_seats.xml +@@ -107,7 +107,7 @@ + + Return Value + +- On success sd_get_seats(), ++ On success, sd_get_seats(), + sd_get_sessions(), + sd_get_uids() and + sd_get_machine_names() return the +diff --git a/man/sd_is_fifo.xml b/man/sd_is_fifo.xml +index 5e79453..4bb2236 100644 +--- a/man/sd_is_fifo.xml ++++ b/man/sd_is_fifo.xml +@@ -214,7 +214,7 @@ + file. Alternatively, applications consuming these APIs + may copy the implementation into their source + tree. For more details about the reference +- implementation see ++ implementation, see + sd-daemon3. + + These functions continue to work as described, +diff --git a/man/sd_listen_fds.xml b/man/sd_listen_fds.xml +index aaabdbf..6a9e082 100644 +--- a/man/sd_listen_fds.xml ++++ b/man/sd_listen_fds.xml +@@ -155,7 +155,7 @@ + file. Alternatively, applications consuming these APIs + may copy the implementation into their source + tree. For more details about the reference +- implementation see ++ implementation, see + sd-daemon3. + + If the reference implementation is used as +diff --git a/man/sd_login_monitor_new.xml b/man/sd_login_monitor_new.xml +index f439d3e..14ff241 100644 +--- a/man/sd_login_monitor_new.xml ++++ b/man/sd_login_monitor_new.xml +@@ -198,13 +198,13 @@ else { + + Return Value + +- On success ++ On success, + sd_login_monitor_new(), + sd_login_monitor_flush() and + sd_login_monitor_get_timeout() +- return 0 or a positive integer. On success ++ return 0 or a positive integer. On success, + sd_login_monitor_get_fd() returns +- a Unix file descriptor. On success ++ a Unix file descriptor. On success, + sd_login_monitor_get_events() + returns a combination of POLLIN, + POLLOUT and suchlike. On failure, +diff --git a/man/sd_notify.xml b/man/sd_notify.xml +index e078140..aae27a8 100644 +--- a/man/sd_notify.xml ++++ b/man/sd_notify.xml +@@ -241,7 +241,7 @@ + libsystemd-daemon pkg-config1 + file. Alternatively, applications consuming these APIs + may copy the implementation into their source tree. For +- more details about the reference implementation see ++ more details about the reference implementation, see + sd-daemon3. + + If the reference implementation is used as +diff --git a/man/sd_readahead.xml b/man/sd_readahead.xml +index bb01bcf..9827299 100644 +--- a/man/sd_readahead.xml ++++ b/man/sd_readahead.xml +@@ -139,7 +139,7 @@ + sd-readahead.h files. It is + recommended that applications consuming this API copy + the implementation into their source tree. For more +- details about the reference implementation see ++ details about the reference implementation, see + sd-readahead3 + + If -DDISABLE_SYSTEMD is set during compilation, +diff --git a/man/sd_seat_get_active.xml b/man/sd_seat_get_active.xml +index 23d582d..c64ba13 100644 +--- a/man/sd_seat_get_active.xml ++++ b/man/sd_seat_get_active.xml +@@ -143,9 +143,9 @@ + + Return Value + +- On success ++ On success, + sd_seat_get_active() +- returns 0 or a positive integer. On success ++ returns 0 or a positive integer. On success, + sd_seat_get_sessions() returns + the number of entries in the session identifier + array. If the test succeeds, +diff --git a/man/sd_uid_get_state.xml b/man/sd_uid_get_state.xml +index 0faa765..30b254c 100644 +--- a/man/sd_uid_get_state.xml ++++ b/man/sd_uid_get_state.xml +@@ -152,11 +152,11 @@ + + Return Value + +- On success ++ On success, + sd_uid_get_state() returns 0 or a + positive integer. If the test succeeds, + sd_uid_is_on_seat() returns a +- positive integer, if it fails ++ positive integer; if it fails, + 0. sd_uid_get_sessions() and + sd_uid_get_seats() return the + number of entries in the returned arrays. On failure, +diff --git a/man/shutdown.xml b/man/shutdown.xml +index 795fb66..27e7e87 100644 +--- a/man/shutdown.xml ++++ b/man/shutdown.xml +@@ -164,7 +164,7 @@ + + Exit status + +- On success 0 is returned, a non-zero failure ++ On success, 0 is returned, a non-zero failure + code otherwise. + + +diff --git a/man/systemd-analyze.xml b/man/systemd-analyze.xml +index aefbfc8..b7753f9 100644 +--- a/man/systemd-analyze.xml ++++ b/man/systemd-analyze.xml +@@ -270,7 +270,7 @@ + + Exit status + +- On success 0 is returned, a non-zero failure ++ On success, 0 is returned, a non-zero failure + code otherwise. + + +diff --git a/man/systemd-ask-password.xml b/man/systemd-ask-password.xml +index 8af328d..79902cb 100644 +--- a/man/systemd-ask-password.xml ++++ b/man/systemd-ask-password.xml +@@ -167,7 +167,7 @@ + + Exit status + +- On success 0 is returned, a non-zero failure ++ On success, 0 is returned, a non-zero failure + code otherwise. + + +diff --git a/man/systemd-cat.xml b/man/systemd-cat.xml +index ffb1dfd..ba7a2cf 100644 +--- a/man/systemd-cat.xml ++++ b/man/systemd-cat.xml +@@ -158,7 +158,7 @@ + + Exit status + +- On success 0 is returned, a non-zero failure ++ On success, 0 is returned, a non-zero failure + code otherwise. + + +diff --git a/man/systemd-cgls.xml b/man/systemd-cgls.xml +index 432706b..152b883 100644 +--- a/man/systemd-cgls.xml ++++ b/man/systemd-cgls.xml +@@ -145,7 +145,7 @@ + + Exit status + +- On success 0 is returned, a non-zero failure ++ On success, 0 is returned, a non-zero failure + code otherwise. + + +diff --git a/man/systemd-cgtop.xml b/man/systemd-cgtop.xml +index 7faedfb..0e1f7c5 100644 +--- a/man/systemd-cgtop.xml ++++ b/man/systemd-cgtop.xml +@@ -264,7 +264,7 @@ + + Exit status + +- On success 0 is returned, a non-zero failure ++ On success, 0 is returned, a non-zero failure + code otherwise. + + +diff --git a/man/systemd-coredumpctl.xml b/man/systemd-coredumpctl.xml +index 9ccb67d..67f75d1 100644 +--- a/man/systemd-coredumpctl.xml ++++ b/man/systemd-coredumpctl.xml +@@ -200,7 +200,7 @@ + + + Exit status +- On success 0 is returned, a non-zero failure ++ On success, 0 is returned, a non-zero failure + code otherwise. Not finding any matching coredumps is treated + as failure. + +diff --git a/man/systemd-delta.xml b/man/systemd-delta.xml +index 4d3ab78..ebaa349 100644 +--- a/man/systemd-delta.xml ++++ b/man/systemd-delta.xml +@@ -223,7 +223,7 @@ + + Exit status + +- On success 0 is returned, a non-zero failure ++ On success, 0 is returned, a non-zero failure + code otherwise. + + +diff --git a/man/systemd-machine-id-setup.xml b/man/systemd-machine-id-setup.xml +index bc38d55..7b3aa7e 100644 +--- a/man/systemd-machine-id-setup.xml ++++ b/man/systemd-machine-id-setup.xml +@@ -116,7 +116,7 @@ + + Exit status + +- On success 0 is returned, a non-zero failure ++ On success, 0 is returned, a non-zero failure + code otherwise. + + +diff --git a/man/systemd-notify.xml b/man/systemd-notify.xml +index a769346..e14977d 100644 +--- a/man/systemd-notify.xml ++++ b/man/systemd-notify.xml +@@ -172,7 +172,7 @@ + + Exit status + +- On success 0 is returned, a non-zero failure ++ On success, 0 is returned, a non-zero failure + code otherwise. + + +diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml +index 495247e..c678031 100644 +--- a/man/systemd-tmpfiles.xml ++++ b/man/systemd-tmpfiles.xml +@@ -178,7 +178,7 @@ + + Exit status + +- On success 0 is returned, a non-zero failure ++ On success, 0 is returned, a non-zero failure + code otherwise. + + +diff --git a/man/systemd-tty-ask-password-agent.xml b/man/systemd-tty-ask-password-agent.xml +index 31a18ba..cb5fb43 100644 +--- a/man/systemd-tty-ask-password-agent.xml ++++ b/man/systemd-tty-ask-password-agent.xml +@@ -148,7 +148,7 @@ + + Exit status + +- On success 0 is returned, a non-zero failure ++ On success, 0 is returned, a non-zero failure + code otherwise. + + +diff --git a/man/systemd.device.xml b/man/systemd.device.xml +index 002b647..586473c 100644 +--- a/man/systemd.device.xml ++++ b/man/systemd.device.xml +@@ -75,7 +75,7 @@ + udev tag (by default all block and network devices, + and a few others). This may be used to define + dependencies between devices and other units. To tag a +- udev device use TAG+="systemd" in ++ udev device, use TAG+="systemd" in + the udev rules file, see + udev7 + for details. +diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml +index df5a79e..6f9f70c 100644 +--- a/man/systemd.mount.xml ++++ b/man/systemd.mount.xml +@@ -94,7 +94,7 @@ + in a unit file + home-lennart.mount. For details + about the escaping logic used to convert a file system +- path to a unit name see ++ path to a unit name, see + systemd.unit5. + + Optionally, a mount unit may be accompanied by +diff --git a/man/systemd.service.xml b/man/systemd.service.xml +index 80a935d..e869f95 100644 +--- a/man/systemd.service.xml ++++ b/man/systemd.service.xml +@@ -441,7 +441,7 @@ + one and + two two, + respectively. Since two commands are +- specified ++ specified, + Type=oneshot must + be used. + +diff --git a/man/systemd.special.xml b/man/systemd.special.xml +index 863a029..76bb5cd 100644 +--- a/man/systemd.special.xml ++++ b/man/systemd.special.xml +@@ -996,7 +996,7 @@ + smartcard.target, + sound.target. + +- In addition the following special unit is ++ In addition, the following special unit is + understood only when systemd runs as service instance: + + +diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml +index 13f6c84..5e8b25f 100644 +--- a/man/systemd.swap.xml ++++ b/man/systemd.swap.xml +@@ -85,7 +85,7 @@ + /dev/sda5 must be configured in a + unit file dev-sda5.swap. For + details about the escaping logic used to convert a +- file system path to a unit name see ++ file system path to a unit name, see + systemd.unit5. + + All swap units automatically get the appropriate +diff --git a/man/systemd.xml b/man/systemd.xml +index 85c06d3..23a0c26 100644 +--- a/man/systemd.xml ++++ b/man/systemd.xml +@@ -494,7 +494,7 @@ + /proc. + + For more information about the concepts and +- ideas behind systemd please refer to the Original + Design Document. + +diff --git a/man/telinit.xml b/man/telinit.xml +index bb80939..b20a60a 100644 +--- a/man/telinit.xml ++++ b/man/telinit.xml +@@ -171,7 +171,7 @@ + + Exit status + +- On success 0 is returned, a non-zero failure ++ On success, 0 is returned, a non-zero failure + code otherwise. + + +diff --git a/man/timedatectl.xml b/man/timedatectl.xml +index be0ad3f..f4975ce 100644 +--- a/man/timedatectl.xml ++++ b/man/timedatectl.xml +@@ -222,7 +222,7 @@ + + Exit status + +- On success 0 is returned, a non-zero failure ++ On success, 0 is returned, a non-zero failure + code otherwise. + + diff --git a/0202-man-grammar-and-wording-improvements.patch b/0202-man-grammar-and-wording-improvements.patch new file mode 100644 index 0000000..f40a0a9 --- /dev/null +++ b/0202-man-grammar-and-wording-improvements.patch @@ -0,0 +1,79 @@ +From cae52ffc976561b6c847a38e3ea9d9a9ce2c1513 Mon Sep 17 00:00:00 2001 +From: Jan Engelhardt +Date: Thu, 26 Dec 2013 02:47:45 +0100 +Subject: [PATCH] man: grammar and wording improvements + +This is a recurring submission and includes corrections to: +- missing words, preposition choice. +- change of /lib to /usr/lib, because that is what most distros are + using as the system-wide location for systemd/udev files. + +Conflicts: + man/journalctl.xml + man/sd_bus_message_get_cookie.xml + man/sd_bus_request_name.xml + man/systemctl.xml + man/systemd-networkd.service.xml + man/systemd.device.xml + man/systemd.exec.xml + man/systemd.timer.xml + man/udev.xml +--- + man/daemon.xml | 2 +- + man/sd_is_fifo.xml | 2 +- + man/systemd.service.xml | 2 +- + man/systemd.unit.xml | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/man/daemon.xml b/man/daemon.xml +index 7790420..1fe4546 100644 +--- a/man/daemon.xml ++++ b/man/daemon.xml +@@ -408,7 +408,7 @@ + description files. + + In systemd, if the developer or +- administrator wants to make sure a service or ++ administrator wants to make sure that a service or + other unit is activated automatically on boot, + it is recommended to place a symlink to the + unit file in the .wants/ +diff --git a/man/sd_is_fifo.xml b/man/sd_is_fifo.xml +index 4bb2236..58cd1c9 100644 +--- a/man/sd_is_fifo.xml ++++ b/man/sd_is_fifo.xml +@@ -165,7 +165,7 @@ + called to check whether the specified file descriptor + refers to a special file. If the + path parameter is not +- NULL, it is checked whether file ++ NULL, it is checked whether the file + descriptor is bound to the specified file + name. Special files in this context are character + device nodes and files in /proc +diff --git a/man/systemd.service.xml b/man/systemd.service.xml +index e869f95..e3a370f 100644 +--- a/man/systemd.service.xml ++++ b/man/systemd.service.xml +@@ -427,7 +427,7 @@ + ExecStart=/bin/sh -c 'dmesg | tac' + + +- Only select environment variables ++ Only select environment variables that + are set for executed commands. See + systemd.exec5. + +diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml +index b70c5e9..f6b4b24 100644 +--- a/man/systemd.unit.xml ++++ b/man/systemd.unit.xml +@@ -548,7 +548,7 @@ + of units. When systemd stops or restarts + the units listed here, the action is + propagated to this unit. +- Note that this is a one way dependency — ++ Note that this is a one-way dependency — + changes to this unit do not affect the + listed units. + diff --git a/0203-man-document-fail-nofail-auto-noauto.patch b/0203-man-document-fail-nofail-auto-noauto.patch new file mode 100644 index 0000000..104ec34 --- /dev/null +++ b/0203-man-document-fail-nofail-auto-noauto.patch @@ -0,0 +1,130 @@ +From 6566f27fc123e1b2fd14e5177dcb21c6b3598d5d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 25 Dec 2013 23:20:57 -0500 +Subject: [PATCH] man: document fail/nofail, auto/noauto + +Also s/filesystem/file system/ in a few places. + +Conflicts: + TODO + man/systemd-fsck@.service.xml + man/systemd-fstab-generator.xml +--- + man/systemd-fsck@.service.xml | 5 ++++- + man/systemd-fstab-generator.xml | 6 ++++++ + man/systemd-halt.service.xml | 2 +- + man/systemd.mount.xml | 20 +++++++++++++++++++- + man/systemd.unit.xml | 2 +- + man/udevadm.xml | 2 +- + 6 files changed, 32 insertions(+), 5 deletions(-) + +diff --git a/man/systemd-fsck@.service.xml b/man/systemd-fsck@.service.xml +index e934352..c653dc5 100644 +--- a/man/systemd-fsck@.service.xml ++++ b/man/systemd-fsck@.service.xml +@@ -62,7 +62,10 @@ + system + check. systemd-fsck-root.service is + responsible for file system checks on the root +- file system. ++ file system. The root file system check is performed ++ before the other file systems. Either service is enabled ++ at boot if passno in /etc/fstab for ++ the file system is set to a value greater than zero. + + systemd-fsck will + forward file system checking progress to the +diff --git a/man/systemd-fstab-generator.xml b/man/systemd-fstab-generator.xml +index 9ca16c7..e3cf5d2 100644 +--- a/man/systemd-fstab-generator.xml ++++ b/man/systemd-fstab-generator.xml +@@ -61,6 +61,12 @@ + reloaded. This will instantiate mount and swap units + as necessary. + ++ The passno field is treated ++ like a simple boolean, and the ordering information is ++ discarded. However, if the root file system is ++ checked, it is checked before all the other ++ file systems. ++ + See + systemd.mount5 + and +diff --git a/man/systemd-halt.service.xml b/man/systemd-halt.service.xml +index 99457aa..bec2e36 100644 +--- a/man/systemd-halt.service.xml ++++ b/man/systemd-halt.service.xml +@@ -86,7 +86,7 @@ + It is necessary to have this code in a separate binary + because otherwise rebooting after an upgrade might be broken — + the running PID 1 could still depend on libraries which are not +- available any more, thus keeping the filesystem busy, which ++ available any more, thus keeping the file system busy, which + then cannot be re-mounted read-only. + + Immediately before executing the actual system +diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml +index 6f9f70c..cadf950 100644 +--- a/man/systemd.mount.xml ++++ b/man/systemd.mount.xml +@@ -132,7 +132,10 @@ + for details). Mounts listed in + /etc/fstab will be converted into + native units dynamically at boot and when the +- configuration of the system manager is reloaded. See ++ configuration of the system manager is reloaded. In ++ general, configuring mount points through ++ /etc/fstab is the preferred ++ approach. See + systemd-fstab-generator8 + for details about the conversion. + +@@ -159,6 +162,21 @@ + s, min, + h, ms. + ++ If is given, this mount ++ will be only wanted, not required, by the ++ local-fs.target. This means that ++ the boot will continue even if this mount point is not ++ mounted successfully. Option has ++ the opposite meaning and is the default. ++ ++ If is given, this mount ++ will not be added as a dependency for ++ local-fs.target. This means that ++ it will not be mounted automatically during boot, ++ unless it is pulled in by some other unit. Option ++ has the opposite meaning and is ++ the default. ++ + If a mount point is configured in both + /etc/fstab and a unit file that + is stored below /usr, the former +diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml +index f6b4b24..4704352 100644 +--- a/man/systemd.unit.xml ++++ b/man/systemd.unit.xml +@@ -232,7 +232,7 @@ + multiple units from a single configuration file. If + systemd looks for a unit configuration file, it will + first search for the literal unit name in the +- filesystem. If that yields no success and the unit ++ file system. If that yields no success and the unit + name contains an @ character, systemd will look for a + unit template that shares the same name but with the + instance string (i.e. the part between the @ character +diff --git a/man/udevadm.xml b/man/udevadm.xml +index a1ffe42..ca3713f 100644 +--- a/man/udevadm.xml ++++ b/man/udevadm.xml +@@ -461,7 +461,7 @@ + + + +- Alternative root path in the filesystem for reading and writing files. ++ Alternative root path in the file system for reading and writing files. + + + diff --git a/0204-man-fix-description-of-is-enabled-returned-value.patch b/0204-man-fix-description-of-is-enabled-returned-value.patch new file mode 100644 index 0000000..0686560 --- /dev/null +++ b/0204-man-fix-description-of-is-enabled-returned-value.patch @@ -0,0 +1,22 @@ +From 8debc611398abf60d16e73982c9d56b5ea957e15 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 24 Dec 2013 22:57:15 -0500 +Subject: [PATCH] man: fix description of is-enabled returned value + +--- + man/systemctl.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/systemctl.xml b/man/systemctl.xml +index 61deb19..25b03d8 100644 +--- a/man/systemctl.xml ++++ b/man/systemctl.xml +@@ -932,7 +932,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service + + static + Unit is not enabled, but has no provisions for enabling in [Install] section +- 1 ++ 0 + + + disabled diff --git a/0205-man-fix-Type-reference.patch b/0205-man-fix-Type-reference.patch new file mode 100644 index 0000000..7bc3030 --- /dev/null +++ b/0205-man-fix-Type-reference.patch @@ -0,0 +1,23 @@ +From c32611c5388de404cf4b169fa3d757c2603e597d Mon Sep 17 00:00:00 2001 +From: Marcos Felipe Rasia de Mello +Date: Thu, 26 Dec 2013 17:47:57 -0200 +Subject: [PATCH] man: fix Type= reference + +Simple man page fix attached. +--- + man/systemd.service.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/systemd.service.xml b/man/systemd.service.xml +index e3a370f..898c19d 100644 +--- a/man/systemd.service.xml ++++ b/man/systemd.service.xml +@@ -139,7 +139,7 @@ + + If set to + (the default +- value if BusName= ++ value if Type= + is not specified), it is expected that + the process configured with + ExecStart= is the diff --git a/0206-man-fix-Type-reference-v2.patch b/0206-man-fix-Type-reference-v2.patch new file mode 100644 index 0000000..694a0f3 --- /dev/null +++ b/0206-man-fix-Type-reference-v2.patch @@ -0,0 +1,37 @@ +From 73868c5b0a59438256d8abd4157ff915a7dc1f37 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 27 Dec 2013 01:18:39 -0500 +Subject: [PATCH] man: fix Type= reference v2 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +grawity: + + It looks like the old version _was_ correct – the default value will + be "Type=dbus" if the service has a BusName set. + + Suggested change: "if neither Type= nor BusName= is specified" +--- + man/systemd.service.xml | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/man/systemd.service.xml b/man/systemd.service.xml +index 898c19d..71bcfb4 100644 +--- a/man/systemd.service.xml ++++ b/man/systemd.service.xml +@@ -139,9 +139,11 @@ + + If set to + (the default +- value if Type= +- is not specified), it is expected that +- the process configured with ++ value if neither ++ Type= nor ++ BusName= are ++ specified), it is expected that the ++ process configured with + ExecStart= is the + main process of the service. In this + mode, if the process offers diff --git a/0207-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/0207-hwdb-Update-database-of-Bluetooth-company-identifier.patch new file mode 100644 index 0000000..c013152 --- /dev/null +++ b/0207-hwdb-Update-database-of-Bluetooth-company-identifier.patch @@ -0,0 +1,38 @@ +From d38baf3d9088a2d206a6b622fb7f609dc115bd6a Mon Sep 17 00:00:00 2001 +From: Marcel Holtmann +Date: Fri, 27 Dec 2013 09:35:20 -0800 +Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers + +--- + hwdb/20-bluetooth-vendor-product.hwdb | 14 +++++++++++++- + 1 file changed, 13 insertions(+), 1 deletion(-) + +diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb +index 6f8301f..192b715 100644 +--- a/hwdb/20-bluetooth-vendor-product.hwdb ++++ b/hwdb/20-bluetooth-vendor-product.hwdb +@@ -427,7 +427,7 @@ bluetooth:v008B* + ID_VENDOR_FROM_DATABASE=Topcorn Positioning Systems, LLC + + bluetooth:v008C* +- ID_VENDOR_FROM_DATABASE=Qualcomm Labs, Inc. ++ ID_VENDOR_FROM_DATABASE=Qualcomm Retail Solutions, Inc. (formerly Qualcomm Labs, Inc.) + + bluetooth:v008D* + ID_VENDOR_FROM_DATABASE=Zscan Software +@@ -839,3 +839,15 @@ bluetooth:v0115* + + bluetooth:v0116* + ID_VENDOR_FROM_DATABASE=1OAK Technologies ++ ++bluetooth:v0117* ++ ID_VENDOR_FROM_DATABASE=Wimoto Technologies Inc ++ ++bluetooth:v0118* ++ ID_VENDOR_FROM_DATABASE=Radius Networks, Inc. ++ ++bluetooth:v0119* ++ ID_VENDOR_FROM_DATABASE=Wize Technology Co., Ltd. ++ ++bluetooth:v011A* ++ ID_VENDOR_FROM_DATABASE=Qualcomm Labs, Inc. diff --git a/0208-man-add-a-note-about-propagating-signals.patch b/0208-man-add-a-note-about-propagating-signals.patch new file mode 100644 index 0000000..687f5a7 --- /dev/null +++ b/0208-man-add-a-note-about-propagating-signals.patch @@ -0,0 +1,61 @@ +From 16142c7f1f24c58af1388608f1efb382a094bcb5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 27 Dec 2013 15:27:24 -0500 +Subject: [PATCH] man: add a note about propagating signals + +--- + man/systemd.service.xml | 39 +++++++++++++++++++++++++-------------- + 1 file changed, 25 insertions(+), 14 deletions(-) + +diff --git a/man/systemd.service.xml b/man/systemd.service.xml +index 71bcfb4..af3e0f2 100644 +--- a/man/systemd.service.xml ++++ b/man/systemd.service.xml +@@ -734,22 +734,33 @@ ExecStart=/bin/echo $ONE $TWO ${TWO} + considered successful termination, in + addition to the normal successful exit + code 0 and the signals SIGHUP, SIGINT, +- SIGTERM and SIGPIPE. Exit status ++ SIGTERM, and SIGPIPE. Exit status + definitions can either be numeric exit + codes or termination signal names, +- separated by spaces. Example: +- SuccessExitStatus=1 2 8 +- SIGKILL, ensures that exit +- codes 1, 2, 8 and the termination +- signal SIGKILL are considered clean +- service terminations. This option may +- appear more than once in which case +- the list of successful exit statuses +- is merged. If the empty string is +- assigned to this option, the list is +- reset, all prior assignments of this +- option will have no +- effect. ++ separated by spaces. For example: ++ SuccessExitStatus=1 2 8 SIGKILL ++ ensures that exit codes 1, 2, 8 and ++ the termination signal ++ SIGKILL are ++ considered clean service terminations. ++ ++ ++ Note that if a process has a ++ signal handler installed and exits by ++ calling ++ _exit2 ++ in response to a signal, the ++ information about the signal is lost. ++ Programs should instead perform cleanup and kill themselves with the same signal instead. See ++ Proper handling of SIGINT/SIGQUIT — How to be a proper program. ++ ++ This option may appear more than once ++ in which case the list of successful ++ exit statuses is merged. If the empty ++ string is assigned to this option, the ++ list is reset, all prior assignments ++ of this option will have no ++ effect. + + + diff --git a/0209-man-include-autoconf-snippet-in-daemon-7.patch b/0209-man-include-autoconf-snippet-in-daemon-7.patch new file mode 100644 index 0000000..1a74456 --- /dev/null +++ b/0209-man-include-autoconf-snippet-in-daemon-7.patch @@ -0,0 +1,41 @@ +From cc5b9c30f5e8312ee8905f7882da7ab79fef571c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= +Date: Fri, 27 Dec 2013 23:44:27 -0500 +Subject: [PATCH] man: include autoconf snippet in daemon(7) + +https://bugs.freedesktop.org/show_bug.cgi?id=40446 +--- + man/daemon.xml | 20 ++++++++++++++------ + 1 file changed, 14 insertions(+), 6 deletions(-) + +diff --git a/man/daemon.xml b/man/daemon.xml +index 1fe4546..105826a 100644 +--- a/man/daemon.xml ++++ b/man/daemon.xml +@@ -765,12 +765,20 @@ + + PKG_PROG_PKG_CONFIG + AC_ARG_WITH([systemdsystemunitdir], +- AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]), +- [], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)]) +-if test "x$with_systemdsystemunitdir" != xno; then +- AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir]) +-fi +-AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ]) ++ AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),, ++ [with_systemdsystemunitdir=auto]) ++AS_IF([test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"], [ ++ def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd) ++ ++ AS_IF([test "x$def_systemdsystemunitdir" = "x"], ++ [AS_IF([test "x$with_systemdsystemunitdir" = "xyes"], ++ [AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])]) ++ with_systemdsystemunitdir=no], ++ [with_systemdsystemunitdir=$def_systemdsystemunitdir])]) ++AS_IF([test "x$with_systemdsystemunitdir" != "xno"], ++ [AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])]) ++AM_CONDITIONAL(HAVE_SYSTEMD, [test "x$with_systemdsystemunitdir" != "xno"]) ++ + + This snippet allows automatic + installation of the unit files on systemd diff --git a/0210-systemd-python-fix-setting-of-exception-codes.patch b/0210-systemd-python-fix-setting-of-exception-codes.patch new file mode 100644 index 0000000..82d0980 --- /dev/null +++ b/0210-systemd-python-fix-setting-of-exception-codes.patch @@ -0,0 +1,325 @@ +From 2a683cff7e7ac4f94ce545a0907d5b5b883c2a36 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 29 Dec 2013 23:39:28 -0500 +Subject: [PATCH] systemd-python: fix setting of exception codes + +The return value of 0 would be treated as failure by mistake, +resulting in " SystemError: error return without exception set". +The way that set_error() is used is changed to be the same +everywhere. +--- + src/python-systemd/_daemon.c | 14 +++++----- + src/python-systemd/_reader.c | 63 ++++++++++++++++++++------------------------ + 2 files changed, 35 insertions(+), 42 deletions(-) + +diff --git a/src/python-systemd/_daemon.c b/src/python-systemd/_daemon.c +index f0ab16f..c6db69f 100644 +--- a/src/python-systemd/_daemon.c ++++ b/src/python-systemd/_daemon.c +@@ -88,7 +88,7 @@ static PyObject* notify(PyObject *self, PyObject *args, PyObject *keywds) { + #endif + + r = sd_notify(unset, msg); +- if (set_error(r, NULL, NULL)) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + + return PyBool_FromLong(r); +@@ -123,7 +123,7 @@ static PyObject* listen_fds(PyObject *self, PyObject *args, PyObject *keywds) { + #endif + + r = sd_listen_fds(unset); +- if (set_error(r, NULL, NULL)) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + + return long_FromLong(r); +@@ -151,7 +151,7 @@ static PyObject* is_fifo(PyObject *self, PyObject *args) { + #endif + + r = sd_is_fifo(fd, path); +- if (set_error(r, path, NULL)) ++ if (set_error(r, path, NULL) < 0) + return NULL; + + return PyBool_FromLong(r); +@@ -179,7 +179,7 @@ static PyObject* is_mq(PyObject *self, PyObject *args) { + #endif + + r = sd_is_mq(fd, path); +- if (set_error(r, path, NULL)) ++ if (set_error(r, path, NULL) < 0) + return NULL; + + return PyBool_FromLong(r); +@@ -203,7 +203,7 @@ static PyObject* is_socket(PyObject *self, PyObject *args) { + return NULL; + + r = sd_is_socket(fd, family, type, listening); +- if (set_error(r, NULL, NULL)) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + + return PyBool_FromLong(r); +@@ -230,7 +230,7 @@ static PyObject* is_socket_inet(PyObject *self, PyObject *args) { + } + + r = sd_is_socket_inet(fd, family, type, listening, (uint16_t) port); +- if (set_error(r, NULL, NULL)) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + + return PyBool_FromLong(r); +@@ -265,7 +265,7 @@ static PyObject* is_socket_unix(PyObject *self, PyObject *args) { + #endif + + r = sd_is_socket_unix(fd, type, listening, path, length); +- if (set_error(r, path, NULL)) ++ if (set_error(r, path, NULL) < 0) + return NULL; + + return PyBool_FromLong(r); +diff --git a/src/python-systemd/_reader.c b/src/python-systemd/_reader.c +index bc5db19..0c88926 100644 +--- a/src/python-systemd/_reader.c ++++ b/src/python-systemd/_reader.c +@@ -206,8 +206,7 @@ PyDoc_STRVAR(Reader_reliable_fd__doc__, + static PyObject* Reader_reliable_fd(Reader *self, PyObject *args) + { + int r = sd_journal_reliable_fd(self->j); +- set_error(r, NULL, NULL); +- if (r < 0) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + return PyBool_FromLong(r); + } +@@ -221,8 +220,7 @@ PyDoc_STRVAR(Reader_get_events__doc__, + static PyObject* Reader_get_events(Reader *self, PyObject *args) + { + int r = sd_journal_get_events(self->j); +- set_error(r, NULL, NULL); +- if (r < 0) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + return long_FromLong(r); + } +@@ -242,8 +240,7 @@ static PyObject* Reader_get_timeout(Reader *self, PyObject *args) + uint64_t t; + + r = sd_journal_get_timeout(self->j, &t); +- set_error(r, NULL, NULL); +- if (r < 0) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + + if (t == (uint64_t) -1) +@@ -265,8 +262,7 @@ static PyObject* Reader_get_timeout_ms(Reader *self, PyObject *args) + uint64_t t; + + r = sd_journal_get_timeout(self->j, &t); +- set_error(r, NULL, NULL); +- if (r < 0) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + + return absolute_timeout(t); +@@ -304,7 +300,7 @@ static PyObject* Reader_get_usage(Reader *self, PyObject *args) + uint64_t bytes; + + r = sd_journal_get_usage(self->j, &bytes); +- if (set_error(r, NULL, NULL)) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + + assert_cc(sizeof(unsigned long long) == sizeof(bytes)); +@@ -366,8 +362,7 @@ static PyObject* Reader_next(Reader *self, PyObject *args) + assert_not_reached("should not be here"); + Py_END_ALLOW_THREADS + +- set_error(r, NULL, NULL); +- if (r < 0) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + return PyBool_FromLong(r); + } +@@ -445,7 +440,8 @@ static PyObject* Reader_get(Reader *self, PyObject *args) + if (r == -ENOENT) { + PyErr_SetString(PyExc_KeyError, field); + return NULL; +- } else if (set_error(r, NULL, "field name is not valid")) ++ } ++ if (set_error(r, NULL, "field name is not valid") < 0) + return NULL; + + r = extract(msg, msg_len, NULL, &value); +@@ -530,7 +526,7 @@ static PyObject* Reader_get_realtime(Reader *self, PyObject *args) + assert(!args); + + r = sd_journal_get_realtime_usec(self->j, ×tamp); +- if (set_error(r, NULL, NULL)) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + + assert_cc(sizeof(unsigned long long) == sizeof(timestamp)); +@@ -555,7 +551,7 @@ static PyObject* Reader_get_monotonic(Reader *self, PyObject *args) + assert(!args); + + r = sd_journal_get_monotonic_usec(self->j, ×tamp, &id); +- if (set_error(r, NULL, NULL)) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + + assert_cc(sizeof(unsigned long long) == sizeof(timestamp)); +@@ -598,8 +594,7 @@ static PyObject* Reader_add_match(Reader *self, PyObject *args, PyObject *keywds + return NULL; + + r = sd_journal_add_match(self->j, match, match_len); +- set_error(r, NULL, "Invalid match"); +- if (r < 0) ++ if (set_error(r, NULL, "Invalid match") < 0) + return NULL; + + Py_RETURN_NONE; +@@ -616,8 +611,7 @@ static PyObject* Reader_add_disjunction(Reader *self, PyObject *args) + { + int r; + r = sd_journal_add_disjunction(self->j); +- set_error(r, NULL, NULL); +- if (r < 0) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + Py_RETURN_NONE; + } +@@ -633,8 +627,7 @@ static PyObject* Reader_add_conjunction(Reader *self, PyObject *args) + { + int r; + r = sd_journal_add_conjunction(self->j); +- set_error(r, NULL, NULL); +- if (r < 0) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + Py_RETURN_NONE; + } +@@ -661,7 +654,7 @@ static PyObject* Reader_seek_head(Reader *self, PyObject *args) + Py_BEGIN_ALLOW_THREADS + r = sd_journal_seek_head(self->j); + Py_END_ALLOW_THREADS +- if (set_error(r, NULL, NULL)) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + Py_RETURN_NONE; + } +@@ -678,7 +671,7 @@ static PyObject* Reader_seek_tail(Reader *self, PyObject *args) + Py_BEGIN_ALLOW_THREADS + r = sd_journal_seek_tail(self->j); + Py_END_ALLOW_THREADS +- if (set_error(r, NULL, NULL)) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + Py_RETURN_NONE; + } +@@ -699,7 +692,7 @@ static PyObject* Reader_seek_realtime(Reader *self, PyObject *args) + Py_BEGIN_ALLOW_THREADS + r = sd_journal_seek_realtime_usec(self->j, timestamp); + Py_END_ALLOW_THREADS +- if (set_error(r, NULL, NULL)) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + Py_RETURN_NONE; + } +@@ -723,20 +716,20 @@ static PyObject* Reader_seek_monotonic(Reader *self, PyObject *args) + + if (bootid) { + r = sd_id128_from_string(bootid, &id); +- if (set_error(r, NULL, "Invalid bootid")) ++ if (set_error(r, NULL, "Invalid bootid") < 0) + return NULL; + } else { + Py_BEGIN_ALLOW_THREADS + r = sd_id128_get_boot(&id); + Py_END_ALLOW_THREADS +- if (set_error(r, NULL, NULL)) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + } + + Py_BEGIN_ALLOW_THREADS + r = sd_journal_seek_monotonic_usec(self->j, id, timestamp); + Py_END_ALLOW_THREADS +- if (set_error(r, NULL, NULL)) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + + Py_RETURN_NONE; +@@ -809,7 +802,7 @@ static PyObject* Reader_seek_cursor(Reader *self, PyObject *args) + Py_BEGIN_ALLOW_THREADS + r = sd_journal_seek_cursor(self->j, cursor); + Py_END_ALLOW_THREADS +- if (set_error(r, NULL, "Invalid cursor")) ++ if (set_error(r, NULL, "Invalid cursor") < 0) + return NULL; + Py_RETURN_NONE; + } +@@ -828,7 +821,7 @@ static PyObject* Reader_get_cursor(Reader *self, PyObject *args) + assert(!args); + + r = sd_journal_get_cursor(self->j, &cursor); +- if (set_error(r, NULL, NULL)) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + + return unicode_FromString(cursor); +@@ -851,8 +844,7 @@ static PyObject* Reader_test_cursor(Reader *self, PyObject *args) + return NULL; + + r = sd_journal_test_cursor(self->j, cursor); +- set_error(r, NULL, NULL); +- if (r < 0) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + + return PyBool_FromLong(r); +@@ -876,7 +868,7 @@ static PyObject* Reader_query_unique(Reader *self, PyObject *args) + Py_BEGIN_ALLOW_THREADS + r = sd_journal_query_unique(self->j, query); + Py_END_ALLOW_THREADS +- if (set_error(r, NULL, "Invalid field name")) ++ if (set_error(r, NULL, "Invalid field name") < 0) + return NULL; + + value_set = PySet_New(0); +@@ -930,7 +922,8 @@ static PyObject* Reader_get_catalog(Reader *self, PyObject *args) + else + set_error(r, NULL, NULL); + return NULL; +- } else if (set_error(r, NULL, NULL)) ++ } ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + + return unicode_FromString(msg); +@@ -955,13 +948,13 @@ static PyObject* get_catalog(PyObject *self, PyObject *args) + return NULL; + + r = sd_id128_from_string(id_, &id); +- if (set_error(r, NULL, "Invalid id128")) ++ if (set_error(r, NULL, "Invalid id128") < 0) + return NULL; + + Py_BEGIN_ALLOW_THREADS + r = sd_journal_get_catalog_for_message_id(id, &msg); + Py_END_ALLOW_THREADS +- if (set_error(r, NULL, NULL)) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + + return unicode_FromString(msg); +@@ -979,7 +972,7 @@ static PyObject* Reader_get_data_threshold(Reader *self, void *closure) + int r; + + r = sd_journal_get_data_threshold(self->j, &cvalue); +- if (set_error(r, NULL, NULL)) ++ if (set_error(r, NULL, NULL) < 0) + return NULL; + + return long_FromSize_t(cvalue); diff --git a/0211-systemd-python-fix-listen_fds-under-Python-2.patch b/0211-systemd-python-fix-listen_fds-under-Python-2.patch new file mode 100644 index 0000000..fb0e675 --- /dev/null +++ b/0211-systemd-python-fix-listen_fds-under-Python-2.patch @@ -0,0 +1,22 @@ +From 353a5553a38d002a69a4fbafabf1e9ab50ff32c2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 30 Dec 2013 00:01:00 -0500 +Subject: [PATCH] systemd-python: fix listen_fds under Python 2 + +--- + src/python-systemd/_daemon.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/python-systemd/_daemon.c b/src/python-systemd/_daemon.c +index c6db69f..3982e85 100644 +--- a/src/python-systemd/_daemon.c ++++ b/src/python-systemd/_daemon.c +@@ -114,7 +114,7 @@ static PyObject* listen_fds(PyObject *self, PyObject *args, PyObject *keywds) { + #else + PyObject *obj = NULL; + if (!PyArg_ParseTupleAndKeywords(args, keywds, "|O:_listen_fds", +- (char**) kwlist, &unset, &obj)) ++ (char**) kwlist, &obj)) + return NULL; + if (obj != NULL) + unset = PyObject_IsTrue(obj); diff --git a/0212-man-expand-on-some-more-subtle-points-in-systemd.soc.patch b/0212-man-expand-on-some-more-subtle-points-in-systemd.soc.patch new file mode 100644 index 0000000..a08fc4b --- /dev/null +++ b/0212-man-expand-on-some-more-subtle-points-in-systemd.soc.patch @@ -0,0 +1,120 @@ +From 204a710b647527c35cee26962bbd324e6cebc822 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 30 Dec 2013 00:11:30 -0500 +Subject: [PATCH] man: expand on some more subtle points in systemd.socket(5) + +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=727708#1694 +--- + man/systemd.socket.xml | 67 ++++++++++++++++++++++++++++++++++++-------------- + 1 file changed, 49 insertions(+), 18 deletions(-) + +diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml +index ac3127d..570a6fb 100644 +--- a/man/systemd.socket.xml ++++ b/man/systemd.socket.xml +@@ -85,21 +85,26 @@ + processes of the socket. + + For each socket file a matching service file +- (see ++ must exist, describing the service to start on ++ incoming traffic on the socket (see + systemd.service5 +- for details) must exist, describing the service to +- start on incoming traffic on the socket. Depending on +- the setting of (see below), +- this must either be named like the socket unit, but +- with the suffix replaced; or it must be a template +- file named the same way. Example: a socket file ++ for more information about .service files). The name ++ of the .service unit is by default the same as the ++ name of the .socket unit, but can be altered with ++ option described below. ++ Depending on the setting of ++ option described below, this .service unit must either ++ be named like the .socket unit, but with the suffix ++ replaced, unless overridden with ++ ; or it must be a template ++ unit named the same way. Example: a socket file + foo.socket needs a matching + service foo.service if + is set. If +- is set, a service template +- file foo@.service must exist from +- which services are instantiated for each incoming +- connection. ++ is set, a service ++ template file foo@.service must ++ exist from which services are instantiated for each ++ incoming connection. + + Unless DefaultDependencies= + is set to , socket units will +@@ -116,9 +121,21 @@ + boot or late system shutdown should disable this + option. + ++ Socket units will have a ++ Before= dependency on the service ++ which they trigger added implicitly. No implicit ++ WantedBy= or ++ RequiredBy= dependency from the ++ socket to the service is added. This means that the ++ service may be started without the socket, in which ++ case it must be able to open sockets by itself. To ++ prevent this, an explicit Requires= ++ dependency may be added. ++ + Socket units may be used to implement on-demand + starting of services, as well as parallelized starting +- of services. ++ of services. See the blog stories linked at the end ++ for introduction. + + Note that the daemon software configured for + socket activation with socket units needs to be able +@@ -221,12 +238,23 @@ + of any of these options will have no + effect. + ++ It is also possible to have more ++ than one socket unit for the same ++ service when using ++ Service=, and the ++ service will receive all the sockets ++ configured in all the socket units. ++ Sockets configured in one unit are ++ passed in the order of configuration, ++ but no ordering between socket units ++ is specified. ++ + If an IP address is used here, + it is often desirable to listen on it + before the interface it is configured + on is up and running, and even + regardless of whether it will be up and +- running ever at all. To deal with this ++ running at any point. To deal with this + it is recommended to set the + FreeBind= option + described below. +@@ -687,11 +715,14 @@ + Service= + Specifies the service + unit name to activate on incoming +- traffic. This defaults to the service +- that bears the same name as the socket +- (ignoring the different suffixes). In +- most cases it should not be necessary +- to use this option. ++ traffic. This setting is only allowed ++ for sockets with ++ Accept=no. It ++ defaults to the service that bears the ++ same name as the socket (with the ++ suffix replaced). In most cases it ++ should not be necessary to use this ++ option. + + + diff --git a/0213-tmpfiles-rename-unsafe-to-boot.patch b/0213-tmpfiles-rename-unsafe-to-boot.patch new file mode 100644 index 0000000..aec129c --- /dev/null +++ b/0213-tmpfiles-rename-unsafe-to-boot.patch @@ -0,0 +1,119 @@ +From 3d2c847396cf348ef1ee55f5d4211045a6202efc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 30 Dec 2013 13:00:38 -0500 +Subject: [PATCH] tmpfiles: rename --unsafe to --boot + +As suggested by Kay, it is better to describe what is done, +not what might happen. +--- + man/systemd-tmpfiles.xml | 2 +- + man/tmpfiles.d.xml | 4 ++-- + src/tmpfiles/tmpfiles.c | 14 +++++++------- + units/systemd-tmpfiles-setup.service.in | 2 +- + 4 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml +index c678031..64f9cf9 100644 +--- a/man/systemd-tmpfiles.xml ++++ b/man/systemd-tmpfiles.xml +@@ -133,7 +133,7 @@ + removed. + + +- ++ + Also execute lines + with an exclamation mark. + +diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml +index ed88751..8267ffc 100644 +--- a/man/tmpfiles.d.xml ++++ b/man/tmpfiles.d.xml +@@ -273,7 +273,7 @@ L /tmp/foobar - - - - /dev/null + execute at any time, e.g. on package upgrades. + systemd-tmpfiles will + execute line with an exclamation mark only if +- option is given. ++ option is given. + + + For example: +@@ -286,7 +286,7 @@ r! /tmp/.X[0-9]*-lock + + The second line in contrast to the first one + would break a running system, and will only be +- executed with . ++ executed with . + + + +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index 30a8a55..4dd1638 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -106,7 +106,7 @@ static Set *unix_sockets = NULL; + static bool arg_create = false; + static bool arg_clean = false; + static bool arg_remove = false; +-static bool arg_unsafe = false; ++static bool arg_boot = false; + + static char **include_prefixes = NULL; + static char **exclude_prefixes = NULL; +@@ -1100,7 +1100,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { + if (strlen(action) > 2 || (strlen(action) > 1 && action[1] != '!')) { + log_error("[%s:%u] Unknown modifier '%s'", fname, line, action); + return -EINVAL; +- } else if (strlen(action) > 1 && !arg_unsafe) ++ } else if (strlen(action) > 1 && !arg_boot) + return 0; + + type = action[0]; +@@ -1275,7 +1275,7 @@ static int help(void) { + " --create Create marked files/directories\n" + " --clean Clean up marked directories\n" + " --remove Remove marked files/directories\n" +- " --unsafe Execute actions only safe at boot\n" ++ " --boot Execute actions only safe at boot\n" + " --prefix=PATH Only apply rules that apply to paths with the specified prefix\n" + " --exclude-prefix=PATH Ignore rules that apply to paths with the specified prefix\n", + program_invocation_short_name); +@@ -1289,7 +1289,7 @@ static int parse_argv(int argc, char *argv[]) { + ARG_CREATE, + ARG_CLEAN, + ARG_REMOVE, +- ARG_UNSAFE, ++ ARG_BOOT, + ARG_PREFIX, + ARG_EXCLUDE_PREFIX, + }; +@@ -1299,7 +1299,7 @@ static int parse_argv(int argc, char *argv[]) { + { "create", no_argument, NULL, ARG_CREATE }, + { "clean", no_argument, NULL, ARG_CLEAN }, + { "remove", no_argument, NULL, ARG_REMOVE }, +- { "unsafe", no_argument, NULL, ARG_UNSAFE }, ++ { "boot", no_argument, NULL, ARG_BOOT }, + { "prefix", required_argument, NULL, ARG_PREFIX }, + { "exclude-prefix", required_argument, NULL, ARG_EXCLUDE_PREFIX }, + { NULL, 0, NULL, 0 } +@@ -1330,8 +1330,8 @@ static int parse_argv(int argc, char *argv[]) { + arg_remove = true; + break; + +- case ARG_UNSAFE: +- arg_unsafe = true; ++ case ARG_BOOT: ++ arg_boot = true; + break; + + case ARG_PREFIX: +diff --git a/units/systemd-tmpfiles-setup.service.in b/units/systemd-tmpfiles-setup.service.in +index c2dcae0..01043b7 100644 +--- a/units/systemd-tmpfiles-setup.service.in ++++ b/units/systemd-tmpfiles-setup.service.in +@@ -24,4 +24,4 @@ RefuseManualStop=yes + [Service] + Type=oneshot + RemainAfterExit=yes +-ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --unsafe --exclude-prefix=/dev ++ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev diff --git a/0214-sleep-config-Dereference-pointer-before-check-for-NU.patch b/0214-sleep-config-Dereference-pointer-before-check-for-NU.patch new file mode 100644 index 0000000..5bbb976 --- /dev/null +++ b/0214-sleep-config-Dereference-pointer-before-check-for-NU.patch @@ -0,0 +1,47 @@ +From ba087745bca7eea8f62cc529c3e6c5eaf6bf2904 Mon Sep 17 00:00:00 2001 +From: Stefan Beller +Date: Mon, 30 Dec 2013 17:43:52 +0100 +Subject: [PATCH] sleep-config: Dereference pointer before check for NULL + +This fixes a bug pointed out by http://css.csail.mit.edu/stack/ +(Optimization-unstable code) +It is a similar fix as f146f5e159 (2013-12-30, core: +Forgot to dereference pointer when checking for NULL) + +To explain this bug consider the following similar, but simpler code: + if (!p) + free(*p) + +Assume the if condition evaluates to true, then we will access *p, +which means the compiler can assume p is a valid pointer, so it could +dereference p and use the value *p. +Assuming p as a valid pointer, !p will be false. +But initally we assumed the condition evaluates to true. + +By this reasoning the optimizing compiler can deduce, we have dead code. +("The if will never be taken, as *p must be valid, because otherwise +accessing *p inside the if would segfault") + +This led to an error message of the static code checker, so I checked the +code in question. + +As we access *modes and *states before the check in the changed line of +this patch, I assume the line to be wrong and we actually wanted to check +for *modes and *states being both non null. +--- + src/shared/sleep-config.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c +index d76e3ad..b2a0787 100644 +--- a/src/shared/sleep-config.c ++++ b/src/shared/sleep-config.c +@@ -94,7 +94,7 @@ int parse_sleep_config(const char *verb, char ***modes, char ***states) { + } else + assert_not_reached("what verb"); + +- if (!modes || !states) { ++ if (!*modes || !*states) { + strv_free(*modes); + strv_free(*states); + return log_oom(); diff --git a/0215-sleep-config-fix-double-free.patch b/0215-sleep-config-fix-double-free.patch new file mode 100644 index 0000000..be26e91 --- /dev/null +++ b/0215-sleep-config-fix-double-free.patch @@ -0,0 +1,99 @@ +From e8d2aa2c8d3533a2dc6f0db5ed22453a16bcf1ee Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 31 Dec 2013 11:23:58 -0500 +Subject: [PATCH] sleep-config: fix double free + +Before 34a3baa4d 'sleep-config: Dereference pointer before check for NULL' +oom conditions would not be detected properly. After that commit, a double +free was performed. + +Rework the whole function to be easier to understand, and also replace +strv_split_nulstr with strv_new, since we know the strings anyway. +--- + src/shared/sleep-config.c | 38 ++++++++++++++++++++------------------ + 1 file changed, 20 insertions(+), 18 deletions(-) + +diff --git a/src/shared/sleep-config.c b/src/shared/sleep-config.c +index b2a0787..70a0896 100644 +--- a/src/shared/sleep-config.c ++++ b/src/shared/sleep-config.c +@@ -28,11 +28,14 @@ + #include "strv.h" + #include "util.h" + +-int parse_sleep_config(const char *verb, char ***modes, char ***states) { ++#define USE(x, y) do{ (x) = (y); (y) = NULL; } while(0) ++ ++int parse_sleep_config(const char *verb, char ***_modes, char ***_states) { + _cleanup_strv_free_ char + **suspend_mode = NULL, **suspend_state = NULL, + **hibernate_mode = NULL, **hibernate_state = NULL, + **hybrid_mode = NULL, **hybrid_state = NULL; ++ char **modes, **states; + + const ConfigTableItem items[] = { + { "Sleep", "SuspendMode", config_parse_strv, 0, &suspend_mode }, +@@ -59,47 +62,46 @@ int parse_sleep_config(const char *verb, char ***modes, char ***states) { + + if (streq(verb, "suspend")) { + /* empty by default */ +- *modes = suspend_mode; ++ USE(modes, suspend_mode); + + if (suspend_state) +- *states = suspend_state; ++ USE(states, suspend_state); + else +- *states = strv_split_nulstr("mem\0standby\0freeze\0"); ++ states = strv_new("mem", "standby", "freeze", NULL); + +- suspend_mode = suspend_state = NULL; + } else if (streq(verb, "hibernate")) { + if (hibernate_mode) +- *modes = hibernate_mode; ++ USE(modes, hibernate_mode); + else +- *modes = strv_split_nulstr("platform\0shutdown\0"); ++ modes = strv_new("platform", "shutdown", NULL); + + if (hibernate_state) +- *states = hibernate_state; ++ USE(states, hibernate_state); + else +- *states = strv_split_nulstr("disk\0"); ++ states = strv_new("disk", NULL); + +- hibernate_mode = hibernate_state = NULL; + } else if (streq(verb, "hybrid-sleep")) { + if (hybrid_mode) +- *modes = hybrid_mode; ++ USE(modes, hybrid_mode); + else +- *modes = strv_split_nulstr("suspend\0platform\0shutdown\0"); ++ modes = strv_new("suspend", "platform", "shutdown", NULL); + + if (hybrid_state) +- *states = hybrid_state; ++ USE(states, hybrid_state); + else +- *states = strv_split_nulstr("disk\0"); ++ states = strv_new("disk", NULL); + +- hybrid_mode = hybrid_state = NULL; + } else + assert_not_reached("what verb"); + +- if (!*modes || !*states) { +- strv_free(*modes); +- strv_free(*states); ++ if ((!modes && !streq(verb, "suspend")) || !states) { ++ strv_free(modes); ++ strv_free(states); + return log_oom(); + } + ++ *_modes = modes; ++ *_states = states; + return 0; + } + diff --git a/0216-rules-drivers-do-not-reset-RUN-list.patch b/0216-rules-drivers-do-not-reset-RUN-list.patch new file mode 100644 index 0000000..1c9eb58 --- /dev/null +++ b/0216-rules-drivers-do-not-reset-RUN-list.patch @@ -0,0 +1,33 @@ +From eb882aa36d9c700b7b5469df3f2bf43092d5c68b Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Fri, 3 Jan 2014 01:32:03 +0100 +Subject: [PATCH] rules: drivers - do not reset RUN list + +--- + rules/80-drivers.rules | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/rules/80-drivers.rules b/rules/80-drivers.rules +index 0b22d73..8551f47 100644 +--- a/rules/80-drivers.rules ++++ b/rules/80-drivers.rules +@@ -2,12 +2,12 @@ + + ACTION=="remove", GOTO="drivers_end" + +-ENV{MODALIAS}=="?*", RUN{builtin}="kmod load $env{MODALIAS}" +-SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN{builtin}="kmod load tifm_sd" +-SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", RUN{builtin}="kmod load tifm_ms" +-SUBSYSTEM=="memstick", RUN{builtin}="kmod load ms_block mspro_block" +-SUBSYSTEM=="i2o", RUN{builtin}="kmod load i2o_block" +-SUBSYSTEM=="module", KERNEL=="parport_pc", RUN{builtin}="kmod load ppdev" +-KERNEL=="mtd*ro", ENV{MTD_FTL}=="smartmedia", RUN{builtin}="kmod load sm_ftl" ++ENV{MODALIAS}=="?*", RUN{builtin}+="kmod load $env{MODALIAS}" ++SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN{builtin}+="kmod load tifm_sd" ++SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", RUN{builtin}+="kmod load tifm_ms" ++SUBSYSTEM=="memstick", RUN{builtin}+="kmod load ms_block mspro_block" ++SUBSYSTEM=="i2o", RUN{builtin}+="kmod load i2o_block" ++SUBSYSTEM=="module", KERNEL=="parport_pc", RUN{builtin}+="kmod load ppdev" ++KERNEL=="mtd*ro", ENV{MTD_FTL}=="smartmedia", RUN{builtin}+="kmod load sm_ftl" + + LABEL="drivers_end" diff --git a/0217-core-manager-print-info-about-interesting-signals.patch b/0217-core-manager-print-info-about-interesting-signals.patch new file mode 100644 index 0000000..3cad48c --- /dev/null +++ b/0217-core-manager-print-info-about-interesting-signals.patch @@ -0,0 +1,45 @@ +From 0e09a7e4c14e6b1d31a9a56b80d02b52c9583ab1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 27 Dec 2013 22:12:38 -0500 +Subject: [PATCH] core/manager: print info about interesting signals + +Information about signals which are not routinely received by systemd +are printed at info level. This should make it easier to see what is +happening in the system. +--- + src/core/manager.c | 18 ++++++++++++------ + 1 file changed, 12 insertions(+), 6 deletions(-) + +diff --git a/src/core/manager.c b/src/core/manager.c +index a34a3c6..69ad4b5 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -1435,16 +1435,22 @@ static int manager_process_signal_fd(Manager *m) { + } + + if (sfsi.ssi_pid > 0) { +- char *p = NULL; ++ _cleanup_free_ char *p = NULL; + + get_process_comm(sfsi.ssi_pid, &p); + +- log_debug("Received SIG%s from PID %lu (%s).", +- signal_to_string(sfsi.ssi_signo), +- (unsigned long) sfsi.ssi_pid, strna(p)); +- free(p); ++ log_full(sfsi.ssi_signo == SIGCHLD || ++ (sfsi.ssi_signo == SIGTERM && m->running_as == SYSTEMD_USER) ++ ? LOG_DEBUG : LOG_INFO, ++ "Received SIG%s from PID %lu (%s).", ++ signal_to_string(sfsi.ssi_signo), ++ (unsigned long) sfsi.ssi_pid, strna(p)); + } else +- log_debug("Received SIG%s.", signal_to_string(sfsi.ssi_signo)); ++ log_full(sfsi.ssi_signo == SIGCHLD || ++ (sfsi.ssi_signo == SIGTERM && m->running_as == SYSTEMD_USER) ++ ? LOG_DEBUG : LOG_INFO, ++ "Received SIG%s.", ++ signal_to_string(sfsi.ssi_signo)); + + switch (sfsi.ssi_signo) { + diff --git a/0218-core-service-check-if-mainpid-matches-only-if-it-is-.patch b/0218-core-service-check-if-mainpid-matches-only-if-it-is-.patch new file mode 100644 index 0000000..707ce3e --- /dev/null +++ b/0218-core-service-check-if-mainpid-matches-only-if-it-is-.patch @@ -0,0 +1,26 @@ +From d4466e04783415eee7eec269104e60ab1f6b4b50 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 30 Dec 2013 11:21:56 -0500 +Subject: [PATCH] core/service: check if mainpid matches only if it is set + +https://bugzilla.redhat.com/show_bug.cgi?id=1047304 + +Conflicts: + src/core/service.c +--- + src/core/service.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/service.c b/src/core/service.c +index 62ae8f0..f0acda1 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -3400,7 +3400,7 @@ static void service_notify_message(Unit *u, pid_t pid, char **tags) { + return; + } + +- if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) { ++ if (s->notify_access == NOTIFY_MAIN && s->main_pid != 0 && pid != s->main_pid) { + log_warning_unit(u->id, + "%s: Got notification message from PID %lu, but reception only permitted for PID %lu", + u->id, (unsigned long) pid, (unsigned long) s->main_pid); diff --git a/0219-man-typo-fix.patch b/0219-man-typo-fix.patch new file mode 100644 index 0000000..6a1759b --- /dev/null +++ b/0219-man-typo-fix.patch @@ -0,0 +1,22 @@ +From dfb3a987b160406fb4cf6cc3935cf54571d7c373 Mon Sep 17 00:00:00 2001 +From: Thomas Hindoe Paaboel Andersen +Date: Sat, 4 Jan 2014 23:21:13 +0100 +Subject: [PATCH] man: typo fix + +--- + man/systemd.time.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/systemd.time.xml b/man/systemd.time.xml +index f438fa5..a837f23 100644 +--- a/man/systemd.time.xml ++++ b/man/systemd.time.xml +@@ -222,7 +222,7 @@ + In the date and time specifications, any + component may be specified as * in + which case any value will match. Alternatively, each +- component can be specified as list of values separated ++ component can be specified as a list of values separated + by commas. Values may also be suffixed with + / and a repetition value, which + indicates that the value and all values plus multiples diff --git a/0220-swap-remove-if-else-with-the-same-data-path.patch b/0220-swap-remove-if-else-with-the-same-data-path.patch new file mode 100644 index 0000000..fc12f02 --- /dev/null +++ b/0220-swap-remove-if-else-with-the-same-data-path.patch @@ -0,0 +1,29 @@ +From d61f36a7ef07c252b49cc8015fe37b69bffb1a35 Mon Sep 17 00:00:00 2001 +From: Stefan Beller +Date: Fri, 3 Jan 2014 20:33:20 +0100 +Subject: [PATCH] swap: remove if/else with the same data path + +This was introduced in e1770af812 (2012-02-03, swap: replace failure +boolean by result enum). + +This just removes unneeded lines of code, no functional change. +--- + src/core/swap.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/src/core/swap.c b/src/core/swap.c +index f295b65..727bb95 100644 +--- a/src/core/swap.c ++++ b/src/core/swap.c +@@ -959,10 +959,7 @@ static void swap_sigchld_event(Unit *u, pid_t pid, int code, int status) { + case SWAP_DEACTIVATING_SIGKILL: + case SWAP_DEACTIVATING_SIGTERM: + +- if (f == SWAP_SUCCESS) +- swap_enter_dead(s, f); +- else +- swap_enter_dead(s, f); ++ swap_enter_dead(s, f); + break; + + default: diff --git a/0221-hwdb-update.patch b/0221-hwdb-update.patch new file mode 100644 index 0000000..2c7a3c1 --- /dev/null +++ b/0221-hwdb-update.patch @@ -0,0 +1,769 @@ +From 3c8008b94726f3812ac28f4a33db61635323ee6a Mon Sep 17 00:00:00 2001 +From: Marcel Holtmann +Date: Sun, 5 Jan 2014 00:44:34 -0800 +Subject: [PATCH] hwdb: update + +Conflicts: + hwdb/20-sdio-vendor-model.hwdb +--- + hwdb/20-OUI.hwdb | 97 +++++++++++++++++++++++++- + hwdb/20-pci-vendor-model.hwdb | 154 ++++++++++++++++++++++++++++++++++++++---- + hwdb/20-usb-vendor-model.hwdb | 6 ++ + 3 files changed, 241 insertions(+), 16 deletions(-) + +diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb +index 92b96ae..a51a00a 100644 +--- a/hwdb/20-OUI.hwdb ++++ b/hwdb/20-OUI.hwdb +@@ -13627,6 +13627,12 @@ OUI:40D8551E2* + OUI:40D8551E3* + ID_OUI_FROM_DATABASE=Mega Electronics Ltd + ++OUI:40D8551E4* ++ ID_OUI_FROM_DATABASE=STEK Ltd ++ ++OUI:40D855EE6* ++ ID_OUI_FROM_DATABASE=Narinet, Inc. ++ + OUI:000000* + ID_OUI_FROM_DATABASE=XEROX CORPORATION + +@@ -35222,7 +35228,7 @@ OUI:001C4C* + ID_OUI_FROM_DATABASE=Petrotest Instruments + + OUI:001C4D* +- ID_OUI_FROM_DATABASE=Zeemote Technology Inc. (part of Aplix). ++ ID_OUI_FROM_DATABASE=Aplix IP Holdings Corporation + + OUI:001C4E* + ID_OUI_FROM_DATABASE=TASA International Limited +@@ -52606,6 +52612,9 @@ OUI:08D42B* + OUI:08D5C0* + ID_OUI_FROM_DATABASE=Seers Technology Co., Ltd + ++OUI:08D833* ++ ID_OUI_FROM_DATABASE=Shenzhen RF Technology Co,.Ltd ++ + OUI:08E5DA* + ID_OUI_FROM_DATABASE=NANJING FUJITSU COMPUTER PRODUCTS CO.,LTD. + +@@ -53308,6 +53317,9 @@ OUI:1423D7* + OUI:142BD2* + ID_OUI_FROM_DATABASE=Armtel Ltd. + ++OUI:142D27* ++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. ++ + OUI:142D8B* + ID_OUI_FROM_DATABASE=Incipio Technologies, Inc + +@@ -53761,6 +53773,9 @@ OUI:18C451* + OUI:18C8E7* + ID_OUI_FROM_DATABASE=Shenzhen Hualistone Technology Co.,Ltd + ++OUI:18CC23* ++ ID_OUI_FROM_DATABASE=Philio Technology Corporation ++ + OUI:18D071* + ID_OUI_FROM_DATABASE=DASAN SMC, Inc. + +@@ -54688,6 +54703,9 @@ OUI:2838CF* + OUI:2839E7* + ID_OUI_FROM_DATABASE=Preceno Technology Pte.Ltd. + ++OUI:283B96* ++ ID_OUI_FROM_DATABASE=Cool Control LTD ++ + OUI:283CE4* + ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd + +@@ -54907,6 +54925,9 @@ OUI:28E14C* + OUI:28E297* + ID_OUI_FROM_DATABASE=Shanghai InfoTM Microelectronics Co.,Ltd. + ++OUI:28E347* ++ ID_OUI_FROM_DATABASE=Liteon Technology Corporation ++ + OUI:28E608* + ID_OUI_FROM_DATABASE=Tokheim + +@@ -55717,6 +55738,9 @@ OUI:34E0CF* + OUI:34E0D7* + ID_OUI_FROM_DATABASE=DONGGUAN QISHENG ELECTRONICS INDUSTRIAL CO., LTD + ++OUI:34E2FD* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:34EF44* + ID_OUI_FROM_DATABASE=2Wire + +@@ -56023,6 +56047,9 @@ OUI:3C1040* + OUI:3C106F* + ID_OUI_FROM_DATABASE=ALBAHITH TECHNOLOGIES + ++OUI:3C15C2* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:3C15EA* + ID_OUI_FROM_DATABASE=TESCOM CO., LTD. + +@@ -56227,6 +56254,9 @@ OUI:3CC99E* + OUI:3CCA87* + ID_OUI_FROM_DATABASE=Iders Incorporated + ++OUI:3CCD93* ++ ID_OUI_FROM_DATABASE=LG ELECTRONICS INC ++ + OUI:3CCE73* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + +@@ -56408,7 +56438,7 @@ OUI:40667A* + ID_OUI_FROM_DATABASE=mediola - connected living AG + + OUI:406826* +- ID_OUI_FROM_DATABASE=Thales Optronics Limited ++ ID_OUI_FROM_DATABASE=Thales UK Limited + + OUI:406AAB* + ID_OUI_FROM_DATABASE=RIM +@@ -57436,6 +57466,9 @@ OUI:5048EB* + OUI:504A5E* + ID_OUI_FROM_DATABASE=Masimo Corporation + ++OUI:504A6E* ++ ID_OUI_FROM_DATABASE=NETGEAR INC., ++ + OUI:504F94* + ID_OUI_FROM_DATABASE=Loxone Electronics GmbH + +@@ -58480,6 +58513,9 @@ OUI:6045BD* + OUI:604616* + ID_OUI_FROM_DATABASE=XIAMEN VANN INTELLIGENT CO., LTD + ++OUI:6047D4* ++ ID_OUI_FROM_DATABASE=FORICS Electronic Technology Co., Ltd. ++ + OUI:604A1C* + ID_OUI_FROM_DATABASE=SUYIN Corporation + +@@ -58630,6 +58666,9 @@ OUI:60D30A* + OUI:60D819* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + ++OUI:60D9C7* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:60DA23* + ID_OUI_FROM_DATABASE=Estech Co.,Ltd + +@@ -58849,6 +58888,9 @@ OUI:6473E2* + OUI:647657* + ID_OUI_FROM_DATABASE=Innovative Security Designs + ++OUI:6476BA* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:647791* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -58882,6 +58924,9 @@ OUI:6487D7* + OUI:6488FF* + ID_OUI_FROM_DATABASE=Sichuan Changhong Electric Ltd. + ++OUI:648D9E* ++ ID_OUI_FROM_DATABASE=IVT Electronic Co.,Ltd ++ + OUI:64995D* + ID_OUI_FROM_DATABASE=LGE + +@@ -59161,6 +59206,9 @@ OUI:687924* + OUI:6879ED* + ID_OUI_FROM_DATABASE=SHARP Corporation + ++OUI:687CC8* ++ ID_OUI_FROM_DATABASE=Measurement Systems S. de R.L. ++ + OUI:687CD5* + ID_OUI_FROM_DATABASE=Y Soft Corporation, a.s. + +@@ -59425,6 +59473,9 @@ OUI:6C6F18* + OUI:6C7039* + ID_OUI_FROM_DATABASE=Novar GmbH + ++OUI:6C709F* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:6C71D9* + ID_OUI_FROM_DATABASE=AzureWave Technologies, Inc + +@@ -59779,6 +59830,9 @@ OUI:708B78* + OUI:708D09* + ID_OUI_FROM_DATABASE=Nokia Corporation + ++OUI:709383* ++ ID_OUI_FROM_DATABASE=Intelligent Optical Network High Tech CO.,LTD. ++ + OUI:7093F8* + ID_OUI_FROM_DATABASE=Space Monkey, Inc. + +@@ -60166,6 +60220,9 @@ OUI:74F612* + OUI:74F726* + ID_OUI_FROM_DATABASE=Neuron Robotics + ++OUI:74F85D* ++ ID_OUI_FROM_DATABASE=Berkeley Nucleonics Corp ++ + OUI:74FDA0* + ID_OUI_FROM_DATABASE=Compupal (Group) Corporation + +@@ -60862,6 +60919,9 @@ OUI:7CFADF* + OUI:7CFE28* + ID_OUI_FROM_DATABASE=Salutron Inc. + ++OUI:7CFF62* ++ ID_OUI_FROM_DATABASE=Huizhou Super Electron Technology Co.,Ltd. ++ + OUI:80000B* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -61105,6 +61165,9 @@ OUI:80D019* + OUI:80D18B* + ID_OUI_FROM_DATABASE=Hangzhou I'converge Technology Co.,Ltd + ++OUI:80D433* ++ ID_OUI_FROM_DATABASE=LzLabs GmbH ++ + OUI:80D733* + ID_OUI_FROM_DATABASE=QSR Automations, Inc. + +@@ -61336,6 +61399,9 @@ OUI:84ACA4* + OUI:84AF1F* + ID_OUI_FROM_DATABASE=Beat System Service Co,. Ltd. + ++OUI:84B59C* ++ ID_OUI_FROM_DATABASE=Juniper networks ++ + OUI:84C2E4* + ID_OUI_FROM_DATABASE=Jiangsu Qinheng Co., Ltd. + +@@ -61402,6 +61468,9 @@ OUI:880355* + OUI:880905* + ID_OUI_FROM_DATABASE=MTMCommunications + ++OUI:880FB6* ++ ID_OUI_FROM_DATABASE=Jabil Circuits India Pvt Ltd,-EHTP unit ++ + OUI:881036* + ID_OUI_FROM_DATABASE=Panodic(ShenZhen) Electronics Limted + +@@ -62605,6 +62674,9 @@ OUI:983000* + OUI:983071* + ID_OUI_FROM_DATABASE=DAIKYUNG VASCOM + ++OUI:98349D* ++ ID_OUI_FROM_DATABASE=Krauss Maffei Technologies GmbH ++ + OUI:983571* + ID_OUI_FROM_DATABASE=Sub10 Systems Ltd + +@@ -63061,6 +63133,9 @@ OUI:9CCAD9* + OUI:9CCD82* + ID_OUI_FROM_DATABASE=CHENG UEI PRECISION INDUSTRY CO.,LTD + ++OUI:9CD21E* ++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. ++ + OUI:9CD24B* + ID_OUI_FROM_DATABASE=zte corporation + +@@ -63358,6 +63433,9 @@ OUI:A0CEC8* + OUI:A0CF5B* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + ++OUI:A0D12A* ++ ID_OUI_FROM_DATABASE=AXPRO Technology Inc. ++ + OUI:A0D3C1* + ID_OUI_FROM_DATABASE=Hewlett Packard + +@@ -64366,6 +64444,9 @@ OUI:B05B1F* + OUI:B05CE5* + ID_OUI_FROM_DATABASE=Nokia Corporation + ++OUI:B061C7* ++ ID_OUI_FROM_DATABASE=Ericsson-LG Enterprise ++ + OUI:B06563* + ID_OUI_FROM_DATABASE=Shanghai Railway Communication Factory + +@@ -64684,6 +64765,9 @@ OUI:B46293* + OUI:B462AD* + ID_OUI_FROM_DATABASE=raytest GmbH + ++OUI:B46698* ++ ID_OUI_FROM_DATABASE=Zealabs srl ++ + OUI:B467E9* + ID_OUI_FROM_DATABASE=Qingdao GoerTek Technology Co., Ltd. + +@@ -65590,6 +65674,9 @@ OUI:C098E5* + OUI:C09C92* + ID_OUI_FROM_DATABASE=COBY + ++OUI:C09D26* ++ ID_OUI_FROM_DATABASE=Topicon HK Lmd. ++ + OUI:C09F42* + ID_OUI_FROM_DATABASE=Apple + +@@ -65833,6 +65920,9 @@ OUI:C45DD8* + OUI:C46044* + ID_OUI_FROM_DATABASE=Everex Electronics Limited + ++OUI:C4626B* ++ ID_OUI_FROM_DATABASE=ZPT Vigantice ++ + OUI:C462EA* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -68605,6 +68695,9 @@ OUI:EC14F6* + OUI:EC172F* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO., LTD. + ++OUI:EC1766* ++ ID_OUI_FROM_DATABASE=Research Centre Module ++ + OUI:EC1A59* + ID_OUI_FROM_DATABASE=Belkin International Inc. + +diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb +index 6142dc8..7f833e3 100644 +--- a/hwdb/20-pci-vendor-model.hwdb ++++ b/hwdb/20-pci-vendor-model.hwdb +@@ -4166,6 +4166,9 @@ pci:v00001002d00006600* + pci:v00001002d00006601* + ID_MODEL_FROM_DATABASE=Mars [Radeon HD 8730M] + ++pci:v00001002d00006601sv0000103Csd00002100* ++ ID_MODEL_FROM_DATABASE=FirePro M4100 ++ + pci:v00001002d00006602* + ID_MODEL_FROM_DATABASE=Mars + +@@ -4185,10 +4188,22 @@ pci:v00001002d00006607* + ID_MODEL_FROM_DATABASE=Mars LE [Radeon HD 8530M] + + pci:v00001002d00006610* +- ID_MODEL_FROM_DATABASE=Oland XT [Radeon HD 8670/R7 250] ++ ID_MODEL_FROM_DATABASE=Oland XT [Radeon HD 8670 / R7 250] + + pci:v00001002d00006611* +- ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8570] ++ ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8570 / R7 240 OEM] ++ ++pci:v00001002d00006611sv00001028sd0000210B* ++ ID_MODEL_FROM_DATABASE=Radeon R5 240 OEM ++ ++pci:v00001002d00006611sv0000174Bsd00004248* ++ ID_MODEL_FROM_DATABASE=Radeon R7 240 OEM ++ ++pci:v00001002d00006611sv0000174Bsd0000A240* ++ ID_MODEL_FROM_DATABASE=Radeon R7 240 OEM ++ ++pci:v00001002d00006611sv00001B0Asd000090D3* ++ ID_MODEL_FROM_DATABASE=Radeon R7 240 OEM + + pci:v00001002d00006613* + ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240] +@@ -4224,7 +4239,7 @@ pci:v00001002d00006658* + ID_MODEL_FROM_DATABASE=Bonaire XTX [Radeon R7 260X] + + pci:v00001002d0000665C* +- ID_MODEL_FROM_DATABASE=Bonaire XT [Radeon HD 7790/8770] ++ ID_MODEL_FROM_DATABASE=Bonaire XT [Radeon HD 7790/8770 / R9 260 OEM] + + pci:v00001002d0000665Csv00001043sd00000452* + ID_MODEL_FROM_DATABASE=Radeon HD 7790 DirectCU II OC +@@ -4235,6 +4250,12 @@ pci:v00001002d0000665Csv00001462sd00002930* + pci:v00001002d0000665Csv00001462sd00002932* + ID_MODEL_FROM_DATABASE=Radeon HD 8770 + ++pci:v00001002d0000665Csv00001462sd00002934* ++ ID_MODEL_FROM_DATABASE=Radeon R9 260 OEM ++ ++pci:v00001002d0000665Csv0000148Csd00009260* ++ ID_MODEL_FROM_DATABASE=Radeon R9 260 OEM ++ + pci:v00001002d0000665Csv00001682sd00003310* + ID_MODEL_FROM_DATABASE=Radeon HD 7790 Black Edition 2 GB + +@@ -4817,9 +4838,21 @@ pci:v00001002d00006742sv0000148Csd00006570* + pci:v00001002d00006742sv00001682sd00006570* + ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570] + ++pci:v00001002d00006742sv0000174Bsd00005570* ++ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 5570] ++ + pci:v00001002d00006742sv0000174Bsd00006570* + ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570] + ++pci:v00001002d00006742sv0000174Bsd00007570* ++ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 7570] ++ ++pci:v00001002d00006742sv0000174Bsd00008510* ++ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 8510] ++ ++pci:v00001002d00006742sv0000174Bsd00008570* ++ ID_MODEL_FROM_DATABASE=Turks [Radeon HD 8570] ++ + pci:v00001002d00006742sv00001787sd00006570* + ID_MODEL_FROM_DATABASE=Turks [Radeon HD 6570] + +@@ -5541,13 +5574,13 @@ pci:v00001002d00006770sv000017AAsd00003658* + ID_MODEL_FROM_DATABASE=Radeon HD 7470A + + pci:v00001002d00006771* +- ID_MODEL_FROM_DATABASE=Caicos XTX [Radeon HD 8490] ++ ID_MODEL_FROM_DATABASE=Caicos XTX [Radeon HD 8490 / R5 235X OEM] + + pci:v00001002d00006772* + ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 7450A] + + pci:v00001002d00006778* +- ID_MODEL_FROM_DATABASE=Caicos XT [Radeon HD 7470/8470] ++ ID_MODEL_FROM_DATABASE=Caicos XT [Radeon HD 7470/8470 / R5 235 OEM] + + pci:v00001002d00006778sv00001019sd00000024* + ID_MODEL_FROM_DATABASE=Radeon HD 7470 +@@ -5580,7 +5613,7 @@ pci:v00001002d00006778sv0000174Bsd0000E145* + ID_MODEL_FROM_DATABASE=Radeon HD 7470 + + pci:v00001002d00006779* +- ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 6450/7450/8450] ++ ID_MODEL_FROM_DATABASE=Caicos [Radeon HD 6450/7450/8450 / R5 230 OEM] + + pci:v00001002d00006779sv00001019sd00000016* + ID_MODEL_FROM_DATABASE=Radeon HD 6450 +@@ -5979,7 +6012,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 260] ++ ID_MODEL_FROM_DATABASE=Cape Verde PRX [Radeon R9 255 OEM] + + pci:v00001002d00006837* + ID_MODEL_FROM_DATABASE=Cape Verde LE [Radeon HD 7730/8730] +@@ -8967,7 +9000,7 @@ pci:v00001002d0000999C* + ID_MODEL_FROM_DATABASE=Richland + + pci:v00001002d0000999D* +- ID_MODEL_FROM_DATABASE=Richland ++ ID_MODEL_FROM_DATABASE=Richland [Radeon HD 8550D] + + pci:v00001002d000099A0* + ID_MODEL_FROM_DATABASE=Trinity [Radeon HD 7520G] +@@ -17663,6 +17696,9 @@ pci:v0000109Ed0000036Esv00001461sd00000761* + pci:v0000109Ed0000036Esv00001461sd00000771* + ID_MODEL_FROM_DATABASE=AverMedia AVerTV DVB-T 771 + ++pci:v0000109Ed0000036Esv00001464sd0000AA00* ++ ID_MODEL_FROM_DATABASE=iTuner Spectra8 ++ + pci:v0000109Ed0000036Esv000014F1sd00000001* + ID_MODEL_FROM_DATABASE=Bt878 Mediastream Controller NTSC + +@@ -27503,6 +27539,9 @@ pci:v000010ECd00005209* + pci:v000010ECd00005227* + ID_MODEL_FROM_DATABASE=RTS5227 PCI Express Card Reader + ++pci:v000010ECd00005227sv000017AAsd0000220E* ++ ID_MODEL_FROM_DATABASE=ThinkPad T440p ++ + pci:v000010ECd00005229* + ID_MODEL_FROM_DATABASE=RTS5229 PCI Express Card Reader + +@@ -48170,9 +48209,18 @@ pci:v0000168Cd00000033* + pci:v0000168Cd00000034* + ID_MODEL_FROM_DATABASE=AR9462 Wireless Network Adapter + ++pci:v0000168Cd00000034sv00001A56sd00002003* ++ ID_MODEL_FROM_DATABASE=Killer Wireless-N 1202 Half-size Mini PCIe Card ++ + pci:v0000168Cd00000036* + ID_MODEL_FROM_DATABASE=QCA9565 / AR9565 Wireless Network Adapter + ++pci:v0000168Cd00000037* ++ ID_MODEL_FROM_DATABASE=AR9485 Wireless Network Adapter ++ ++pci:v0000168Cd00000037sv00001A3Bsd00002100* ++ ID_MODEL_FROM_DATABASE=AW-NB100H 802.11n Wireless Mini PCIe Card ++ + pci:v0000168Cd0000003C* + ID_MODEL_FROM_DATABASE=QCA988x 802.11ac Wireless Network Adapter + +@@ -48191,6 +48239,9 @@ pci:v0000168Cd00009013* + pci:v0000168Cd0000FF19* + ID_MODEL_FROM_DATABASE=AR5006X Wireless Network Adapter + ++pci:v0000168Cd0000FF1B* ++ ID_MODEL_FROM_DATABASE=AR2425 Wireless Network Adapter [AR5007EG 802.11bg] ++ + pci:v0000168Cd0000FF1C* + ID_MODEL_FROM_DATABASE=AR5008 Wireless Network Adapter + +@@ -49406,6 +49457,9 @@ pci:v00001814d00003298sv0000103Csd000018EC* + pci:v00001814d00003592* + ID_MODEL_FROM_DATABASE=RT3592 Wireless 802.11abgn 2T/2R PCIe + ++pci:v00001814d0000359F* ++ ID_MODEL_FROM_DATABASE=RT3592 PCIe Wireless Network Adapter ++ + pci:v00001814d00005360* + ID_MODEL_FROM_DATABASE=RT5360 Wireless 802.11n 1T/1R + +@@ -49421,6 +49475,9 @@ pci:v00001814d00005390* + pci:v00001814d00005390sv0000103Csd00001636* + ID_MODEL_FROM_DATABASE=U98Z077.00 Half-size Mini PCIe Card + ++pci:v00001814d00005392* ++ ID_MODEL_FROM_DATABASE=RT5392 PCIe Wireless Network Adapter ++ + pci:v00001814d0000539F* + ID_MODEL_FROM_DATABASE=RT5390 [802.11 b/g/n 1T1R G-band PCI Express Single Chip] + +@@ -50585,6 +50642,12 @@ pci:v00001957d00000087* + pci:v00001957d000000B4* + ID_MODEL_FROM_DATABASE=MPC8315E + ++pci:v00001957d000000B6* ++ ID_MODEL_FROM_DATABASE=MPC8314E ++ ++pci:v00001957d000000B6sv00001A56sd00001101* ++ ID_MODEL_FROM_DATABASE=Killer Xeno Pro Gigabit Ethernet Controller ++ + pci:v00001957d000000C2* + ID_MODEL_FROM_DATABASE=MPC8379E + +@@ -50669,6 +50732,12 @@ pci:v00001957d00007011* + pci:v00001957d00007018* + ID_MODEL_FROM_DATABASE=MPC8610 + ++pci:v00001957d0000C006* ++ ID_MODEL_FROM_DATABASE=MPC8308 ++ ++pci:v00001957d0000C006sv00001A56sd00001201* ++ ID_MODEL_FROM_DATABASE=Killer E2100 Gigabit Ethernet Controller ++ + pci:v00001958* + ID_VENDOR_FROM_DATABASE=Faster Technology, LLC. + +@@ -54164,6 +54233,9 @@ pci:v00008086d00000412* + pci:v00008086d00000416* + ID_MODEL_FROM_DATABASE=4th Gen Core Processor Integrated Graphics Controller + ++pci:v00008086d00000416sv000017AAsd0000220E* ++ ID_MODEL_FROM_DATABASE=ThinkPad T440p ++ + pci:v00008086d0000041A* + ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3 Processor Integrated Graphics Controller + +@@ -54680,9 +54752,15 @@ pci:v00008086d0000095Asv00008086sd00005000* + pci:v00008086d0000095Asv00008086sd00005002* + ID_MODEL_FROM_DATABASE=Wireless-N 7265 + ++pci:v00008086d0000095Asv00008086sd0000500A* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ + pci:v00008086d0000095Asv00008086sd00005010* + ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 + ++pci:v00008086d0000095Asv00008086sd00005012* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ + pci:v00008086d0000095Asv00008086sd00005020* + ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265 + +@@ -54695,6 +54773,9 @@ pci:v00008086d0000095Asv00008086sd00005090* + pci:v00008086d0000095Asv00008086sd00005110* + ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 + ++pci:v00008086d0000095Asv00008086sd00005190* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ + pci:v00008086d0000095Asv00008086sd00005400* + ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 + +@@ -54707,24 +54788,30 @@ pci:v00008086d0000095Asv00008086sd00005420* + pci:v00008086d0000095Asv00008086sd00005490* + ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 + ++pci:v00008086d0000095Asv00008086sd00005590* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 ++ + pci:v00008086d0000095Asv00008086sd00009010* + ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 + +-pci:v00008086d0000095Asv00008086sd00009210* ++pci:v00008086d0000095Asv00008086sd00009110* + ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 + +-pci:v00008086d0000095Asv00008086sd00009410* ++pci:v00008086d0000095Asv00008086sd00009210* + ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 + +-pci:v00008086d0000095B* +- ID_MODEL_FROM_DATABASE=Wireless 7265 ++pci:v00008086d0000095Asv00008086sd00009310* ++ ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 + +-pci:v00008086d0000095Bsv00008086sd0000500A* ++pci:v00008086d0000095Asv00008086sd00009410* + ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 + +-pci:v00008086d0000095Bsv00008086sd00005012* ++pci:v00008086d0000095Asv00008086sd00009510* + ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 7265 + ++pci:v00008086d0000095B* ++ ID_MODEL_FROM_DATABASE=Wireless 7265 ++ + pci:v00008086d0000095Bsv00008086sd00005200* + ID_MODEL_FROM_DATABASE=Dual Band Wireless-N 7265 + +@@ -54860,6 +54947,9 @@ pci:v00008086d00000C01* + pci:v00008086d00000C04* + ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor DRAM Controller + ++pci:v00008086d00000C04sv000017AAsd0000220E* ++ ID_MODEL_FROM_DATABASE=ThinkPad T440p ++ + pci:v00008086d00000C05* + ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor PCI Express x8 Controller + +@@ -54872,6 +54962,9 @@ pci:v00008086d00000C09* + pci:v00008086d00000C0C* + ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller + ++pci:v00008086d00000C0Csv000017AAsd0000220E* ++ ID_MODEL_FROM_DATABASE=ThinkPad T440p ++ + pci:v00008086d00000C46* + ID_MODEL_FROM_DATABASE=Atom Processor S1200 PCI Express Root Port 1 + +@@ -57986,6 +58079,9 @@ pci:v00008086d00001539* + pci:v00008086d0000153A* + ID_MODEL_FROM_DATABASE=Ethernet Connection I217-LM + ++pci:v00008086d0000153Asv000017AAsd0000220E* ++ ID_MODEL_FROM_DATABASE=ThinkPad T440p ++ + pci:v00008086d0000153B* + ID_MODEL_FROM_DATABASE=Ethernet Connection I217-V + +@@ -69035,6 +69131,9 @@ pci:v00008086d00008C02* + pci:v00008086d00008C03* + ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode] + ++pci:v00008086d00008C03sv000017AAsd0000220E* ++ ID_MODEL_FROM_DATABASE=ThinkPad T440p ++ + pci:v00008086d00008C04* + ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family SATA Controller 1 [RAID mode] + +@@ -69062,12 +69161,18 @@ pci:v00008086d00008C0F* + pci:v00008086d00008C10* + ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #1 + ++pci:v00008086d00008C10sv000017AAsd0000220E* ++ ID_MODEL_FROM_DATABASE=ThinkPad T440p ++ + pci:v00008086d00008C11* + ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #1 + + pci:v00008086d00008C12* + ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #2 + ++pci:v00008086d00008C12sv000017AAsd0000220E* ++ ID_MODEL_FROM_DATABASE=ThinkPad T440p ++ + pci:v00008086d00008C13* + ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #2 + +@@ -69110,12 +69215,18 @@ pci:v00008086d00008C1F* + pci:v00008086d00008C20* + ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset High Definition Audio Controller + ++pci:v00008086d00008C20sv000017AAsd0000220E* ++ ID_MODEL_FROM_DATABASE=ThinkPad T440p ++ + pci:v00008086d00008C21* + ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset High Definition Audio Controller + + pci:v00008086d00008C22* + ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family SMBus Controller + ++pci:v00008086d00008C22sv000017AAsd0000220E* ++ ID_MODEL_FROM_DATABASE=ThinkPad T440p ++ + pci:v00008086d00008C23* + ID_MODEL_FROM_DATABASE=8 Series Chipset Family CHAP Counters + +@@ -69125,12 +69236,21 @@ pci:v00008086d00008C24* + pci:v00008086d00008C26* + ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB EHCI #1 + ++pci:v00008086d00008C26sv000017AAsd0000220E* ++ ID_MODEL_FROM_DATABASE=ThinkPad T440p ++ + pci:v00008086d00008C2D* + ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB EHCI #2 + ++pci:v00008086d00008C2Dsv000017AAsd0000220E* ++ ID_MODEL_FROM_DATABASE=ThinkPad T440p ++ + pci:v00008086d00008C31* + ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB xHCI + ++pci:v00008086d00008C31sv000017AAsd0000220E* ++ ID_MODEL_FROM_DATABASE=ThinkPad T440p ++ + pci:v00008086d00008C33* + ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LAN Controller + +@@ -69140,6 +69260,9 @@ pci:v00008086d00008C34* + pci:v00008086d00008C3A* + ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family MEI Controller #1 + ++pci:v00008086d00008C3Asv000017AAsd0000220E* ++ ID_MODEL_FROM_DATABASE=ThinkPad T440p ++ + pci:v00008086d00008C3B* + ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family MEI Controller #2 + +@@ -69197,6 +69320,9 @@ pci:v00008086d00008C4E* + pci:v00008086d00008C4F* + ID_MODEL_FROM_DATABASE=QM87 Express LPC Controller + ++pci:v00008086d00008C4Fsv000017AAsd0000220E* ++ ID_MODEL_FROM_DATABASE=ThinkPad T440p ++ + pci:v00008086d00008C50* + ID_MODEL_FROM_DATABASE=B85 Express LPC Controller + +diff --git a/hwdb/20-usb-vendor-model.hwdb b/hwdb/20-usb-vendor-model.hwdb +index 6663820..60dbcd2 100644 +--- a/hwdb/20-usb-vendor-model.hwdb ++++ b/hwdb/20-usb-vendor-model.hwdb +@@ -46055,6 +46055,12 @@ usb:v1B5A* + usb:v1B65* + ID_VENDOR_FROM_DATABASE=The Hong Kong Standards and Testing Centre Ltd. + ++usb:v1B71* ++ ID_VENDOR_FROM_DATABASE=Fushicai ++ ++usb:v1B71p3002* ++ ID_MODEL_FROM_DATABASE=USBTV007 Video Grabber [EasyCAP] ++ + usb:v1B72* + ID_VENDOR_FROM_DATABASE=ATERGI TECHNOLOGY CO., LTD. + diff --git a/0222-journal-Add-missing-byte-order-conversions.patch b/0222-journal-Add-missing-byte-order-conversions.patch new file mode 100644 index 0000000..8493e83 --- /dev/null +++ b/0222-journal-Add-missing-byte-order-conversions.patch @@ -0,0 +1,58 @@ +From 43539d6b60ef0db3e98d00bef0024614c8c1807a Mon Sep 17 00:00:00 2001 +From: George McCollister +Date: Tue, 31 Dec 2013 14:37:32 -0600 +Subject: [PATCH] journal: Add missing byte order conversions + +Convert entry_array.items[0] to host byte order prior to passing it to +chain_cache_put(). + +[zj: also use le64toh in journal-verify.c] + +https://bugs.freedesktop.org/show_bug.cgi?id=73194 +--- + src/journal/journal-file.c | 4 ++-- + src/journal/journal-verify.c | 6 +++--- + 2 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c +index 5ef6a2a..ba65464 100644 +--- a/src/journal/journal-file.c ++++ b/src/journal/journal-file.c +@@ -1452,7 +1452,7 @@ static int generic_array_get( + + found: + /* Let's cache this item for the next invocation */ +- chain_cache_put(f->chain_cache, ci, first, a, o->entry_array.items[0], t, i); ++ chain_cache_put(f->chain_cache, ci, first, a, le64toh(o->entry_array.items[0]), t, i); + + r = journal_file_move_to_object(f, OBJECT_ENTRY, p, &o); + if (r < 0) +@@ -1685,7 +1685,7 @@ found: + return 0; + + /* Let's cache this item for the next invocation */ +- chain_cache_put(f->chain_cache, ci, first, a, array->entry_array.items[0], t, subtract_one ? (i > 0 ? i-1 : (uint64_t) -1) : i); ++ chain_cache_put(f->chain_cache, ci, first, a, le64toh(array->entry_array.items[0]), t, subtract_one ? (i > 0 ? i-1 : (uint64_t) -1) : i); + + if (subtract_one && i == 0) + p = last_p; +diff --git a/src/journal/journal-verify.c b/src/journal/journal-verify.c +index 3405811..82b0f0a 100644 +--- a/src/journal/journal-verify.c ++++ b/src/journal/journal-verify.c +@@ -249,12 +249,12 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o + } + + for (i = 0; i < journal_file_entry_array_n_items(o); i++) +- if (o->entry_array.items[i] != 0 && +- !VALID64(o->entry_array.items[i])) { ++ if (le64toh(o->entry_array.items[i]) != 0 && ++ !VALID64(le64toh(o->entry_array.items[i]))) { + log_error(OFSfmt": invalid object entry array item (%"PRIu64"/%"PRIu64"): "OFSfmt, + offset, + i, journal_file_entry_array_n_items(o), +- o->entry_array.items[i]); ++ le64toh(o->entry_array.items[i])); + return -EBADMSG; + } + diff --git a/0223-hwdb-change-key-mappings-for-Samsung-90X3A.patch b/0223-hwdb-change-key-mappings-for-Samsung-90X3A.patch new file mode 100644 index 0000000..511c442 --- /dev/null +++ b/0223-hwdb-change-key-mappings-for-Samsung-90X3A.patch @@ -0,0 +1,39 @@ +From c47bbfc9af040f1b0fce2edced4136ee921d9e70 Mon Sep 17 00:00:00 2001 +From: Raudi +Date: Mon, 6 Jan 2014 19:44:08 -0500 +Subject: [PATCH] hwdb: change key mappings for Samsung 90X3A + +The Key codes didn't match with the described key. Also the key +identifier strings were missing. I hope I chose appropriate ones. + +https://bugs.freedesktop.org/show_bug.cgi?id=70296 +--- + hwdb/60-keyboard.hwdb | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb +index ab9e569..644cb94 100644 +--- a/hwdb/60-keyboard.hwdb ++++ b/hwdb/60-keyboard.hwdb +@@ -886,7 +886,6 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*940X3G*:pvr* + KEYBOARD_KEY_b3=!prog3 # Fn+F11 fan/cooling mode changer + + # 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][AB]*:pvr* + KEYBOARD_KEY_ce=! # Fn+F8 keyboard backlight up + KEYBOARD_KEY_8d=! # Fn+F7 keyboard backlight down +@@ -894,6 +893,13 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34][AB]*:pvr + KEYBOARD_KEY_97=! # Fn+F12 Wi-Fi toggle + KEYBOARD_KEY_d5=! # Fn+F6 battery life extender + ++keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*90X3A*:pvr* ++ KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings ++ KEYBOARD_KEY_8d=!prog3 # Fn+F6 performance mode ++ KEYBOARD_KEY_97=!kbdillumdown # Fn+F7 keyboard backlight down ++ KEYBOARD_KEY_96=!kbdillumup # Fn+F8 keyboard backlight up ++ KEYBOARD_KEY_d5=!wlan # Fn+F12 Wi-Fi toggle ++ + # SQ1US + keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pnSQ1US:pvr* + KEYBOARD_KEY_d4=menu diff --git a/0224-hwdb-add-Samsung-700G.patch b/0224-hwdb-add-Samsung-700G.patch new file mode 100644 index 0000000..41cb167 --- /dev/null +++ b/0224-hwdb-add-Samsung-700G.patch @@ -0,0 +1,22 @@ +From 8e48fd6cc5e12bb1662970dc7a7d306550a9a079 Mon Sep 17 00:00:00 2001 +From: Dmitry Pisklov +Date: Mon, 6 Jan 2014 20:06:59 -0500 +Subject: [PATCH] hwdb: add Samsung 700G + +https://bugs.freedesktop.org/show_bug.cgi?id=72311 +--- + hwdb/60-keyboard.hwdb | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb +index 644cb94..ccfc734 100644 +--- a/hwdb/60-keyboard.hwdb ++++ b/hwdb/60-keyboard.hwdb +@@ -875,6 +875,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*700G*: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 diff --git a/0225-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch b/0225-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch new file mode 100644 index 0000000..0f668a2 --- /dev/null +++ b/0225-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch @@ -0,0 +1,28 @@ +From 1bfc778f2c82180873407f2da8a8c3335ae37b07 Mon Sep 17 00:00:00 2001 +From: Dmitry Pisklov +Date: Mon, 6 Jan 2014 20:08:21 -0500 +Subject: [PATCH] hwdb: remove duplicate entry for Samsung 700Z + +keyboardbrightnessup/down are not even real keys. + +https://bugs.freedesktop.org/show_bug.cgi?id=72311 +--- + hwdb/60-keyboard.hwdb | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb +index ccfc734..cf3d1fb 100644 +--- a/hwdb/60-keyboard.hwdb ++++ b/hwdb/60-keyboard.hwdb +@@ -918,11 +918,6 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*SX20S*:pvr* + KEYBOARD_KEY_77=f22 # Touchpad on + KEYBOARD_KEY_79=f23 # Touchpad off + +-keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr* +- KEYBOARD_KEY_ba=ejectcd +- KEYBOARD_KEY_96=keyboardbrightnessup +- KEYBOARD_KEY_97=keyboardbrightnessdown +- + keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700T*:pvr* + KEYBOARD_KEY_ad=leftmeta + diff --git a/0226-hwdb-fix-match-for-Thinkpad-X201-tablet.patch b/0226-hwdb-fix-match-for-Thinkpad-X201-tablet.patch new file mode 100644 index 0000000..ac9269d --- /dev/null +++ b/0226-hwdb-fix-match-for-Thinkpad-X201-tablet.patch @@ -0,0 +1,22 @@ +From 0ec2b82ee4f1bb1fdbf3293cfe10e59240d5c533 Mon Sep 17 00:00:00 2001 +From: AppleBloom +Date: Mon, 6 Jan 2014 20:51:47 -0500 +Subject: [PATCH] hwdb: fix match for Thinkpad X201 tablet + +https://bugs.freedesktop.org/show_bug.cgi?id=71929 +--- + hwdb/60-keyboard.hwdb | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb +index cf3d1fb..d253724 100644 +--- a/hwdb/60-keyboard.hwdb ++++ b/hwdb/60-keyboard.hwdb +@@ -524,6 +524,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnS10-*:pvr* + + # Thinkpad X200_Tablet + keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnThinkPad*X2*Tablet*:pvr* ++keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:pvrThinkPad*X2*Tablet* + KEYBOARD_KEY_5d=menu + KEYBOARD_KEY_63=fn + KEYBOARD_KEY_66=screenlock diff --git a/0227-keymap-Recognize-different-Toshiba-Satellite-capital.patch b/0227-keymap-Recognize-different-Toshiba-Satellite-capital.patch new file mode 100644 index 0000000..3486097 --- /dev/null +++ b/0227-keymap-Recognize-different-Toshiba-Satellite-capital.patch @@ -0,0 +1,26 @@ +From 5ed0efb00ec5cf103debcb4fc5f38398c59cc619 Mon Sep 17 00:00:00 2001 +From: Martin Pitt +Date: Tue, 7 Jan 2014 09:40:01 +0100 +Subject: [PATCH] keymap: Recognize different Toshiba Satellite capitalizations + +https://launchpad.net/bugs/665918 +--- + hwdb/60-keyboard.hwdb | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb +index d253724..84a061f 100644 +--- a/hwdb/60-keyboard.hwdb ++++ b/hwdb/60-keyboard.hwdb +@@ -1056,9 +1056,9 @@ keyboard:dmi:bvn*:bvr*:bd*:svnFOXCONN:pnQBOOK:* + keyboard:dmi:bvn*:bvr*:bd*:svnMTC:pn*:pvrA0:* + keyboard:dmi:bvn*:bvr*:bd*:svnMio*Technology:pnN890:* + keyboard:dmi:bvn*:bvr*:bd*:svnPEGATRON*CORP.:pnSpring*Peak:* +-keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSatellite*[uU]30[05]*:pvr* ++keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSatellite*[uU][35]0[05]*:pvr* ++keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSATELLITE*[uU][35]0[05]*:pvr* + keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSatellite*Pro*[uU]300*:pvr* +-keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA:pnSATELLITE*[uU]500*:pvr* + keyboard:dmi:bvn*:bvr*:bd*:svnViooo*Corporation:pnPT17:* + keyboard:dmi:bvn*:bvr*:bd*:svnHANNspree:pnSN10E100:* + keyboard:dmi:bvn*:bvr*:bd*:svnGIGABYTE:pni1520M:* diff --git a/0228-sleep.c-fix-typo.patch b/0228-sleep.c-fix-typo.patch new file mode 100644 index 0000000..0ad123a --- /dev/null +++ b/0228-sleep.c-fix-typo.patch @@ -0,0 +1,22 @@ +From b1f114caf2e2b0913e4122847c7fa2b182b86771 Mon Sep 17 00:00:00 2001 +From: Michele Curti +Date: Tue, 7 Jan 2014 17:51:41 +0100 +Subject: [PATCH] sleep.c: fix typo + +--- + src/sleep/sleep.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c +index f96987f..c228cb6 100644 +--- a/src/sleep/sleep.c ++++ b/src/sleep/sleep.c +@@ -90,7 +90,7 @@ static int execute(char **modes, char **states) { + const char* note = strappenda("SLEEP=", arg_verb); + + /* This file is opened first, so that if we hit an error, +- * we can abort before modyfing any state. */ ++ * we can abort before modifying any state. */ + f = fopen("/sys/power/state", "we"); + if (!f) { + log_error("Failed to open /sys/power/state: %m"); diff --git a/0229-delta-ensure-that-d_type-will-be-set-on-every-fs.patch b/0229-delta-ensure-that-d_type-will-be-set-on-every-fs.patch new file mode 100644 index 0000000..d005b76 --- /dev/null +++ b/0229-delta-ensure-that-d_type-will-be-set-on-every-fs.patch @@ -0,0 +1,22 @@ +From 35fbb83e322dfe14771d0c84b623b423a38b1200 Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Thu, 9 Jan 2014 16:43:00 +0100 +Subject: [PATCH] delta: ensure that d_type will be set on every fs + +--- + src/delta/delta.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/delta/delta.c b/src/delta/delta.c +index ae658f9..a8dd57e 100644 +--- a/src/delta/delta.c ++++ b/src/delta/delta.c +@@ -316,6 +316,8 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch + if (!de) + return -errno; + ++ dirent_ensure_type(d, de); ++ + if (dropins && de->d_type == DT_DIR && endswith(de->d_name, ".d")) + enumerate_dir_d(top, bottom, drops, path, de->d_name); + diff --git a/0230-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch b/0230-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch new file mode 100644 index 0000000..6e7cb46 --- /dev/null +++ b/0230-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch @@ -0,0 +1,33 @@ +From 3bef88018c93e77d50d3206e84f6fa2fe8c2fb99 Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Thu, 9 Jan 2014 18:00:50 +0100 +Subject: [PATCH] tmpfiles: don't allow label_fix to print ENOENT when we want + to ignore it + +--- + src/tmpfiles/tmpfiles.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index 4dd1638..5e49cc8 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -435,8 +435,6 @@ finish: + } + + static int item_set_perms_full(Item *i, const char *path, bool ignore_enoent) { +- int r; +- + /* not using i->path directly because it may be a glob */ + if (i->mode_set) + if (chmod(path, i->mode) < 0) { +@@ -457,8 +455,7 @@ static int item_set_perms_full(Item *i, const char *path, bool ignore_enoent) { + } + } + +- r = label_fix(path, false, false); +- return r == -ENOENT && ignore_enoent ? 0 : r; ++ return label_fix(path, ignore_enoent, false); + } + + static int item_set_perms(Item *i, const char *path) { diff --git a/0231-man-mention-which-variables-will-be-expanded-in-Exec.patch b/0231-man-mention-which-variables-will-be-expanded-in-Exec.patch new file mode 100644 index 0000000..a491004 --- /dev/null +++ b/0231-man-mention-which-variables-will-be-expanded-in-Exec.patch @@ -0,0 +1,86 @@ +From 4f4e72a317126e9d41db675ddae27a0942cd23bf Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 9 Jan 2014 22:23:32 -0500 +Subject: [PATCH] man: mention which variables will be expanded in ExecStart + +Conflicts: + man/systemd.service.xml +--- + man/systemd.exec.xml | 6 ++++-- + man/systemd.service.xml | 35 +++++++++++++++++++++++------------ + 2 files changed, 27 insertions(+), 14 deletions(-) + +diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml +index e213ec4..c8414d4 100644 +--- a/man/systemd.exec.xml ++++ b/man/systemd.exec.xml +@@ -295,9 +295,11 @@ + for the assignment. + + Example: +- Environment="VAR1=word1 word2" VAR2=word3 "VAR3=word 5 6" ++ Environment="VAR1=word1 word2" VAR2=word3 "VAR3=$word 5 6" + gives three variables VAR1, +- VAR2, VAR3. ++ VAR2, VAR3 ++ with the values word1 word2, ++ word3, $word 5 6. + + + +diff --git a/man/systemd.service.xml b/man/systemd.service.xml +index af3e0f2..4fb21ba 100644 +--- a/man/systemd.service.xml ++++ b/man/systemd.service.xml +@@ -392,16 +392,32 @@ + replaced by the value of the + environment variable including all + whitespace it contains, resulting in a +- single argument. Use ++ single argument. Use + $FOO as a separate + word on the command line, in which + case it will be replaced by the value +- of the environment variable split up +- at whitespace, resulting in zero or +- more arguments. To pass literal dollar sign +- use $$. Note that the first +- argument (i.e. the program to execute) +- may not be a variable. ++ of the environment variable split at ++ whitespace, resulting in zero or more ++ arguments. To pass a literal dollar ++ sign, use $$. ++ Variables whose value is not known at ++ expansion time are treated as empty ++ strings. Note that the first argument ++ (i.e. the program to execute) may not ++ be a variable. ++ ++ Variables to be used in this ++ fashion may be defined through ++ Environment= and ++ EnvironmentFile=. ++ In addition, variables listed in ++ section "Environment variables in ++ spawned processes" in ++ systemd.exec5 ++ which are considered "static ++ configuration" may used (this includes ++ e.g. $USER, but not ++ $TERM). + + Optionally, if the absolute file + name is prefixed with +@@ -429,11 +445,6 @@ + ExecStart=/bin/sh -c 'dmesg | tac' + + +- Only select environment variables that +- are set for executed commands. See +- systemd.exec5. +- +- + Example: + ExecStart=/bin/echo one ; /bin/echo "two two" + diff --git a/0232-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch b/0232-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch new file mode 100644 index 0000000..a9f69ab --- /dev/null +++ b/0232-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch @@ -0,0 +1,28 @@ +From 0fb47635e6db4d27b821388274c0c83d612fc0bb Mon Sep 17 00:00:00 2001 +From: Unai Uribarri +Date: Sat, 11 Jan 2014 09:19:41 -0500 +Subject: [PATCH] hwdb: Add support for Toshiba Satellite P75-A7200 keyboard + +--- + hwdb/60-keyboard.hwdb | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb +index 84a061f..e3d1f02 100644 +--- a/hwdb/60-keyboard.hwdb ++++ b/hwdb/60-keyboard.hwdb +@@ -1012,6 +1012,14 @@ keyboard:name:Toshiba*input*device:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSATELLITEU940 + KEYBOARD_KEY_13e=switchvideomode + KEYBOARD_KEY_13f=f21 # Touchpad toggle + ++# Satellite P75-A7200 ++keyboard:name:Toshiba*input*device:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSatellite*P75-A:pvr* ++ KEYBOARD_KEY_13c=brightnessdown ++ KEYBOARD_KEY_13d=brightnessup ++ KEYBOARD_KEY_13e=switchvideomode ++ KEYBOARD_KEY_13f=touchpad_toggle ++ KEYBOARD_KEY_9e=wlan ++ + ########################################################### + # VIA + ########################################################### diff --git a/0233-journal-fix-access-to-munmapped-memory-in-sd_journal.patch b/0233-journal-fix-access-to-munmapped-memory-in-sd_journal.patch new file mode 100644 index 0000000..4b23ffe --- /dev/null +++ b/0233-journal-fix-access-to-munmapped-memory-in-sd_journal.patch @@ -0,0 +1,321 @@ +From 9b9103a07cc32fa76be4c71fcd9a93b5d946edd4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 28 Dec 2013 19:33:23 -0500 +Subject: [PATCH] journal: fix access to munmapped memory in + sd_journal_enumerate_unique + +sd_j_e_u needs to keep a reference to an object while comparing it +with possibly duplicate objects in other files. Because the size of +mmap cache is limited, with enough files and object to compare to, +at some point the object being compared would be munmapped, resulting +in a segmentation fault. + +Fix this issue by turning keep_always into a reference count that can +be increased and decreased. Other callers which set keep_always=true +are unmodified: their references are never released but are ignored +when the whole file is closed, which happens at some point. keep_always +is increased in sd_j_e_u and later on released. +--- + src/journal/journal-file.c | 5 +--- + src/journal/journal-file.h | 24 +++++++++++++++++++ + src/journal/journal-verify.c | 4 ---- + src/journal/mmap-cache.c | 57 +++++++++++++++++++++++++++++++++++--------- + src/journal/mmap-cache.h | 18 +++++++++++++- + src/journal/sd-journal.c | 18 +++++++++++--- + 6 files changed, 103 insertions(+), 23 deletions(-) + +diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c +index ba65464..4d9787a 100644 +--- a/src/journal/journal-file.c ++++ b/src/journal/journal-file.c +@@ -419,7 +419,6 @@ int journal_file_move_to_object(JournalFile *f, int type, uint64_t offset, Objec + void *t; + Object *o; + uint64_t s; +- unsigned context; + + assert(f); + assert(ret); +@@ -428,10 +427,8 @@ int journal_file_move_to_object(JournalFile *f, int type, uint64_t offset, Objec + if (!VALID64(offset)) + return -EFAULT; + +- /* One context for each type, plus one catch-all for the rest */ +- context = type > 0 && type < _OBJECT_TYPE_MAX ? type : 0; + +- r = journal_file_move_to(f, context, false, offset, sizeof(ObjectHeader), &t); ++ r = journal_file_move_to(f, type_to_context(type), false, offset, sizeof(ObjectHeader), &t); + if (r < 0) + return r; + +diff --git a/src/journal/journal-file.h b/src/journal/journal-file.h +index 50bdb67..0bd23f7 100644 +--- a/src/journal/journal-file.h ++++ b/src/journal/journal-file.h +@@ -128,6 +128,10 @@ int journal_file_open_reliably( + #define ALIGN64(x) (((x) + 7ULL) & ~7ULL) + #define VALID64(x) (((x) & 7ULL) == 0ULL) + ++/* Use six characters to cover the offsets common in smallish journal ++ * files without adding too many zeros. */ ++#define OFSfmt "%06"PRIx64 ++ + static inline bool VALID_REALTIME(uint64_t u) { + /* This considers timestamps until the year 3112 valid. That should be plenty room... */ + return u > 0 && u < (1ULL << 55); +@@ -197,3 +201,23 @@ int journal_file_get_cutoff_realtime_usec(JournalFile *f, usec_t *from, usec_t * + int journal_file_get_cutoff_monotonic_usec(JournalFile *f, sd_id128_t boot, usec_t *from, usec_t *to); + + bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec); ++ ++ ++static unsigned type_to_context(int type) { ++ /* One context for each type, plus one catch-all for the rest */ ++ return type > 0 && type < _OBJECT_TYPE_MAX ? type : 0; ++} ++ ++static inline int journal_file_object_keep(JournalFile *f, Object *o, uint64_t offset) { ++ unsigned context = type_to_context(o->object.type); ++ ++ return mmap_cache_get(f->mmap, f->fd, f->prot, context, true, ++ offset, o->object.size, &f->last_stat, NULL); ++} ++ ++static inline int journal_file_object_release(JournalFile *f, Object *o, uint64_t offset) { ++ unsigned context = type_to_context(o->object.type); ++ ++ return mmap_cache_release(f->mmap, f->fd, f->prot, context, ++ offset, o->object.size); ++} +diff --git a/src/journal/journal-verify.c b/src/journal/journal-verify.c +index 82b0f0a..f2422ff 100644 +--- a/src/journal/journal-verify.c ++++ b/src/journal/journal-verify.c +@@ -34,10 +34,6 @@ + #include "compress.h" + #include "fsprg.h" + +-/* Use six characters to cover the offsets common in smallish journal +- * files without adding to many zeros. */ +-#define OFSfmt "%06"PRIx64 +- + static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o) { + uint64_t i; + +diff --git a/src/journal/mmap-cache.c b/src/journal/mmap-cache.c +index 42a8a7d..24b2bb8 100644 +--- a/src/journal/mmap-cache.c ++++ b/src/journal/mmap-cache.c +@@ -38,7 +38,7 @@ typedef struct FileDescriptor FileDescriptor; + struct Window { + MMapCache *cache; + +- bool keep_always; ++ unsigned keep_always; + bool in_unused; + + int prot; +@@ -185,7 +185,7 @@ static void context_detach_window(Context *c) { + c->window = NULL; + LIST_REMOVE(Context, by_window, w->contexts, c); + +- if (!w->contexts && !w->keep_always) { ++ if (!w->contexts && w->keep_always == 0) { + /* Not used anymore? */ + LIST_PREPEND(Window, unused, c->cache->unused, w); + if (!c->cache->last_unused) +@@ -360,7 +360,6 @@ static int try_context( + assert(m->n_ref > 0); + assert(fd >= 0); + assert(size > 0); +- assert(ret); + + c = hashmap_get(m->contexts, UINT_TO_PTR(context+1)); + if (!c) +@@ -378,9 +377,10 @@ static int try_context( + return 0; + } + +- c->window->keep_always = c->window->keep_always || keep_always; ++ c->window->keep_always += keep_always; + +- *ret = (uint8_t*) c->window->ptr + (offset - c->window->offset); ++ if (ret) ++ *ret = (uint8_t*) c->window->ptr + (offset - c->window->offset); + return 1; + } + +@@ -402,7 +402,6 @@ static int find_mmap( + assert(m->n_ref > 0); + assert(fd >= 0); + assert(size > 0); +- assert(ret); + + f = hashmap_get(m->fds, INT_TO_PTR(fd + 1)); + if (!f) +@@ -422,9 +421,10 @@ static int find_mmap( + return -ENOMEM; + + context_attach_window(c, w); +- w->keep_always = w->keep_always || keep_always; ++ w->keep_always += keep_always; + +- *ret = (uint8_t*) w->ptr + (offset - w->offset); ++ if (ret) ++ *ret = (uint8_t*) w->ptr + (offset - w->offset); + return 1; + } + +@@ -450,7 +450,6 @@ static int add_mmap( + assert(m->n_ref > 0); + assert(fd >= 0); + assert(size > 0); +- assert(ret); + + woffset = offset & ~((uint64_t) page_size() - 1ULL); + wsize = size + (offset - woffset); +@@ -520,7 +519,8 @@ static int add_mmap( + c->window = w; + LIST_PREPEND(Context, by_window, w->contexts, c); + +- *ret = (uint8_t*) w->ptr + (offset - w->offset); ++ if (ret) ++ *ret = (uint8_t*) w->ptr + (offset - w->offset); + return 1; + } + +@@ -541,7 +541,6 @@ int mmap_cache_get( + assert(m->n_ref > 0); + assert(fd >= 0); + assert(size > 0); +- assert(ret); + + /* Check whether the current context is the right one already */ + r = try_context(m, fd, prot, context, keep_always, offset, size, ret); +@@ -563,6 +562,42 @@ int mmap_cache_get( + return add_mmap(m, fd, prot, context, keep_always, offset, size, st, ret); + } + ++int mmap_cache_release( ++ MMapCache *m, ++ int fd, ++ int prot, ++ unsigned context, ++ uint64_t offset, ++ size_t size) { ++ ++ FileDescriptor *f; ++ Window *w; ++ ++ assert(m); ++ assert(m->n_ref > 0); ++ assert(fd >= 0); ++ assert(size > 0); ++ ++ f = hashmap_get(m->fds, INT_TO_PTR(fd + 1)); ++ if (!f) ++ return -EBADF; ++ ++ assert(f->fd == fd); ++ ++ LIST_FOREACH(by_fd, w, f->windows) ++ if (window_matches(w, fd, prot, offset, size)) ++ break; ++ ++ if (!w) ++ return -ENOENT; ++ ++ if (w->keep_always == 0) ++ return -ENOLCK; ++ ++ w->keep_always -= 1; ++ return 0; ++} ++ + void mmap_cache_close_fd(MMapCache *m, int fd) { + FileDescriptor *f; + +diff --git a/src/journal/mmap-cache.h b/src/journal/mmap-cache.h +index 912336d..647555a 100644 +--- a/src/journal/mmap-cache.h ++++ b/src/journal/mmap-cache.h +@@ -31,7 +31,23 @@ MMapCache* mmap_cache_new(void); + MMapCache* mmap_cache_ref(MMapCache *m); + MMapCache* mmap_cache_unref(MMapCache *m); + +-int mmap_cache_get(MMapCache *m, int fd, int prot, unsigned context, bool keep_always, uint64_t offset, size_t size, struct stat *st, void **ret); ++int mmap_cache_get( ++ MMapCache *m, ++ int fd, ++ int prot, ++ unsigned context, ++ bool keep_always, ++ uint64_t offset, ++ size_t size, ++ struct stat *st, ++ void **ret); ++int mmap_cache_release( ++ MMapCache *m, ++ int fd, ++ int prot, ++ unsigned context, ++ uint64_t offset, ++ size_t size); + void mmap_cache_close_fd(MMapCache *m, int fd); + void mmap_cache_close_context(MMapCache *m, unsigned context); + +diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c +index 52abbe9..46c3feb 100644 +--- a/src/journal/sd-journal.c ++++ b/src/journal/sd-journal.c +@@ -2508,9 +2508,7 @@ _public_ int sd_journal_query_unique(sd_journal *j, const char *field) { + } + + _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_t *l) { +- Object *o; + size_t k; +- int r; + + if (!j) + return -EINVAL; +@@ -2535,9 +2533,11 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_ + for (;;) { + JournalFile *of; + Iterator i; ++ Object *o; + const void *odata; + size_t ol; + bool found; ++ int r; + + /* Proceed to next data object in the field's linked list */ + if (j->unique_offset == 0) { +@@ -2574,8 +2574,16 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_ + return r; + + /* Let's do the type check by hand, since we used 0 context above. */ +- if (o->object.type != OBJECT_DATA) ++ if (o->object.type != OBJECT_DATA) { ++ log_error("%s:offset " OFSfmt ": object has type %d, expected %d", ++ j->unique_file->path, j->unique_offset, ++ o->object.type, OBJECT_DATA); + return -EBADMSG; ++ } ++ ++ r = journal_file_object_keep(j->unique_file, o, j->unique_offset); ++ if (r < 0) ++ return r; + + r = return_data(j, j->unique_file, o, &odata, &ol); + if (r < 0) +@@ -2609,6 +2617,10 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_ + if (found) + continue; + ++ r = journal_file_object_release(j->unique_file, o, j->unique_offset); ++ if (r < 0) ++ return r; ++ + r = return_data(j, j->unique_file, o, data, l); + if (r < 0) + return r; diff --git a/0234-gpt-auto-generator-skip-nonexistent-devices.patch b/0234-gpt-auto-generator-skip-nonexistent-devices.patch new file mode 100644 index 0000000..1735610 --- /dev/null +++ b/0234-gpt-auto-generator-skip-nonexistent-devices.patch @@ -0,0 +1,32 @@ +From 182a32427b50aed5812833e3ecb8a6078160a501 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C5=81ukasz=20Stelmach?= +Date: Tue, 7 Jan 2014 15:00:22 +0100 +Subject: [PATCH] gpt-auto-generator: skip nonexistent devices + +The devices we work with have eMMC chips for storage. The chips +provide four "hardware" partitions. The first is /dev/mmcblk0, it +takes almost whole space and holds a GPT with several real partitions +(/dev/mmcblk0p?). Then there are three block devices (mmcblk0boot0, +mmcblk0boot1, rpmb) that are part of the same hardware as mmcblk0 that +are presented by the kernel as children of the latter. That relationship +makes gpt-auto-generator try to peek them but since they are not GPT +partitions blkid_do_safeprobe() returns -2 making verify_gpt_parition() +function return -ENODEV. +--- + src/gpt-auto-generator/gpt-auto-generator.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c +index 25440e7..0e8e959 100644 +--- a/src/gpt-auto-generator/gpt-auto-generator.c ++++ b/src/gpt-auto-generator/gpt-auto-generator.c +@@ -298,6 +298,9 @@ static int enumerate_partitions(struct udev *udev, dev_t dev) { + + r = verify_gpt_partition(node, &type_id, &nr, &fstype); + if (r < 0) { ++ /* skip child devices which are not detected properly */ ++ if (r == -ENODEV) ++ continue; + log_error("Failed to verify GPT partition %s: %s", + node, strerror(-r)); + return r; diff --git a/0235-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch b/0235-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch new file mode 100644 index 0000000..90dcbbb --- /dev/null +++ b/0235-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch @@ -0,0 +1,38 @@ +From 15ef380be7e38898fe2aef4ae3aa6fb0ce804564 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 11 Jan 2014 16:45:29 -0500 +Subject: [PATCH] gpt-auto-generator: use EBADSLT code when unable to detect + partition type + +ENODEV suggests that something is missing, which is be misleading +here. +--- + src/gpt-auto-generator/gpt-auto-generator.c | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c +index 0e8e959..d7c09f0 100644 +--- a/src/gpt-auto-generator/gpt-auto-generator.c ++++ b/src/gpt-auto-generator/gpt-auto-generator.c +@@ -74,10 +74,8 @@ static int verify_gpt_partition(const char *node, sd_id128_t *type, unsigned *nr + + errno = 0; + r = blkid_do_safeprobe(b); +- if (r == -2) +- return -ENODEV; +- else if (r == 1) +- return -ENODEV; ++ if (r == -2 || r == 1) /* no result or uncertain */ ++ return -EBADSLT; + else if (r != 0) + return errno ? -errno : -EIO; + +@@ -299,7 +297,7 @@ static int enumerate_partitions(struct udev *udev, dev_t dev) { + r = verify_gpt_partition(node, &type_id, &nr, &fstype); + if (r < 0) { + /* skip child devices which are not detected properly */ +- if (r == -ENODEV) ++ if (r == -EBADSLT) + continue; + log_error("Failed to verify GPT partition %s: %s", + node, strerror(-r)); diff --git a/0236-journald-do-not-free-space-when-disk-space-runs-low.patch b/0236-journald-do-not-free-space-when-disk-space-runs-low.patch new file mode 100644 index 0000000..53a0bda --- /dev/null +++ b/0236-journald-do-not-free-space-when-disk-space-runs-low.patch @@ -0,0 +1,265 @@ +From 96dc1b72f3fb5d344538984121e11e5804905145 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 13 Nov 2013 00:42:22 -0500 +Subject: [PATCH] journald: do not free space when disk space runs low + +Before, journald would remove journal files until both MaxUse= and +KeepFree= settings would be satisfied. The first one depends (if set +automatically) on the size of the file system and is constant. But +the second one depends on current use of the file system, and a spike +in disk usage would cause journald to delete journal files, trying to +reach usage which would leave 15% of the disk free. This behaviour is +surprising for the user who doesn't expect his logs to be purged when +disk usage goes above 85%, which on a large disk could be some +gigabytes from being full. In addition attempting to keep 15% free +provides an attack vector where filling the disk sufficiently disposes +of almost all logs. + +Instead, obey KeepFree= only as a limit on adding additional files. +When replacing old files with new, ignore KeepFree=. This means that +if journal disk usage reached some high point that at some later point +start to violate the KeepFree= constraint, journald will not add files +to go above this point, but it will stay (slightly) below it. When +journald is restarted, it forgets the previous maximum usage value, +and sets the limit based on the current usage, so if disk remains to +be filled, journald might use one journal-file-size less on each +restart, if restarts happen just after rotation. This seems like a +reasonable compromise between implementation complexity and robustness. +--- + man/journald.conf.xml | 39 +++++++++++++++++++++++---------- + src/journal/journal-file.h | 1 + + src/journal/journal-vacuum.c | 6 ++--- + src/journal/journal-vacuum.h | 2 +- + src/journal/journald-server.c | 22 ++++++++++++++----- + src/journal/test-journal-interleaving.c | 4 ++-- + src/journal/test-journal.c | 4 ++-- + src/shared/macro.h | 7 ++++++ + 8 files changed, 58 insertions(+), 27 deletions(-) + +diff --git a/man/journald.conf.xml b/man/journald.conf.xml +index b362c5d..e0796e1 100644 +--- a/man/journald.conf.xml ++++ b/man/journald.conf.xml +@@ -250,20 +250,35 @@ + SystemMaxUse= + and RuntimeMaxUse= + control how much disk space the +- journal may use up at +- maximum. Defaults to 10% of the size +- of the respective file +- system. SystemKeepFree= +- and ++ journal may use up at maximum. ++ SystemKeepFree= and + RuntimeKeepFree= + control how much disk space +- systemd-journald shall always leave +- free for other uses. Defaults to 15% +- of the size of the respective file +- system. systemd-journald will respect +- both limits, i.e. use the smaller of +- the two values. +- SystemMaxFileSize= ++ systemd-journald shall leave free for ++ other uses. ++ systemd-journald ++ will respect both limits and use the ++ smaller of the two values. ++ ++ The first pair defaults to 10% ++ and the second to 15% of the size of ++ the respective file system. If the ++ file system is nearly full and either ++ SystemKeepFree= or ++ RuntimeKeepFree= is ++ violated when systemd-journald is ++ started, the value will be raised to ++ percentage that is actually free. This ++ means that if before there was enough ++ free space and journal files were ++ created, and subsequently something ++ else causes the file system to fill ++ up, journald will stop using more ++ space, but it'll will not removing ++ existing files to go reduce footprint ++ either. ++ ++ SystemMaxFileSize= + and + RuntimeMaxFileSize= + control how large individual journal +diff --git a/src/journal/journal-file.h b/src/journal/journal-file.h +index 0bd23f7..2e06b57 100644 +--- a/src/journal/journal-file.h ++++ b/src/journal/journal-file.h +@@ -37,6 +37,7 @@ + + typedef struct JournalMetrics { + uint64_t max_use; ++ uint64_t use; + uint64_t max_size; + uint64_t min_size; + uint64_t keep_free; +diff --git a/src/journal/journal-vacuum.c b/src/journal/journal-vacuum.c +index d4a1c6c..8b07f65 100644 +--- a/src/journal/journal-vacuum.c ++++ b/src/journal/journal-vacuum.c +@@ -150,7 +150,6 @@ static int journal_file_empty(int dir_fd, const char *name) { + int journal_directory_vacuum( + const char *directory, + uint64_t max_use, +- uint64_t min_free, + usec_t max_retention_usec, + usec_t *oldest_usec) { + +@@ -164,7 +163,7 @@ int journal_directory_vacuum( + + assert(directory); + +- if (max_use <= 0 && min_free <= 0 && max_retention_usec <= 0) ++ if (max_use <= 0 && max_retention_usec <= 0) + return 0; + + if (max_retention_usec > 0) { +@@ -310,8 +309,7 @@ int journal_directory_vacuum( + } + + if ((max_retention_usec <= 0 || list[i].realtime >= retention_limit) && +- (max_use <= 0 || sum <= max_use) && +- (min_free <= 0 || (uint64_t) ss.f_bavail * (uint64_t) ss.f_bsize >= min_free)) ++ (max_use <= 0 || sum <= max_use)) + break; + + if (unlinkat(dirfd(d), list[i].filename, 0) >= 0) { +diff --git a/src/journal/journal-vacuum.h b/src/journal/journal-vacuum.h +index f5e3e52..bc30c3a 100644 +--- a/src/journal/journal-vacuum.h ++++ b/src/journal/journal-vacuum.h +@@ -23,4 +23,4 @@ + + #include + +-int journal_directory_vacuum(const char *directory, uint64_t max_use, uint64_t min_free, usec_t max_retention_usec, usec_t *oldest_usec); ++int journal_directory_vacuum(const char *directory, uint64_t max_use, usec_t max_retention_usec, usec_t *oldest_usec); +diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c +index 1fcb3d5..cd2cfe9 100644 +--- a/src/journal/journald-server.c ++++ b/src/journal/journald-server.c +@@ -158,9 +158,18 @@ static uint64_t available_space(Server *s, bool verbose) { + } + + ss_avail = ss.f_bsize * ss.f_bavail; +- avail = ss_avail > m->keep_free ? ss_avail - m->keep_free : 0; + +- s->cached_available_space = MIN(m->max_use, avail) > sum ? MIN(m->max_use, avail) - sum : 0; ++ /* If we reached a high mark, we will always allow this much ++ * again, unless usage goes above max_use. This watermark ++ * value is cached so that we don't give up space on pressure, ++ * but hover below the maximum usage. */ ++ ++ if (m->use < sum) ++ m->use = sum; ++ ++ avail = LESS_BY(ss_avail, m->keep_free); ++ ++ s->cached_available_space = LESS_BY(MIN(m->max_use, avail), sum); + s->cached_available_space_timestamp = ts; + + if (verbose) { +@@ -168,13 +177,14 @@ static uint64_t available_space(Server *s, bool verbose) { + fb4[FORMAT_BYTES_MAX], fb5[FORMAT_BYTES_MAX]; + + server_driver_message(s, SD_MESSAGE_JOURNAL_USAGE, +- "%s journal is using %s (max %s, leaving %s of free %s, current limit %s).", ++ "%s journal is using %s (max allowed %s, " ++ "trying to leave %s free of %s available → current limit %s).", + s->system_journal ? "Permanent" : "Runtime", + format_bytes(fb1, sizeof(fb1), sum), + format_bytes(fb2, sizeof(fb2), m->max_use), + format_bytes(fb3, sizeof(fb3), m->keep_free), + format_bytes(fb4, sizeof(fb4), ss_avail), +- format_bytes(fb5, sizeof(fb5), MIN(m->max_use, avail))); ++ format_bytes(fb5, sizeof(fb5), s->cached_available_space + sum)); + } + + return s->cached_available_space; +@@ -378,7 +388,7 @@ void server_vacuum(Server *s) { + if (s->system_journal) { + char *p = strappenda("/var/log/journal/", ids); + +- r = journal_directory_vacuum(p, s->system_metrics.max_use, s->system_metrics.keep_free, s->max_retention_usec, &s->oldest_file_usec); ++ r = journal_directory_vacuum(p, s->system_metrics.max_use, s->max_retention_usec, &s->oldest_file_usec); + if (r < 0 && r != -ENOENT) + log_error("Failed to vacuum %s: %s", p, strerror(-r)); + } +@@ -386,7 +396,7 @@ void server_vacuum(Server *s) { + if (s->runtime_journal) { + char *p = strappenda("/run/log/journal/", ids); + +- r = journal_directory_vacuum(p, s->runtime_metrics.max_use, s->runtime_metrics.keep_free, s->max_retention_usec, &s->oldest_file_usec); ++ r = journal_directory_vacuum(p, s->runtime_metrics.max_use, s->max_retention_usec, &s->oldest_file_usec); + if (r < 0 && r != -ENOENT) + log_error("Failed to vacuum %s: %s", p, strerror(-r)); + } +diff --git a/src/journal/test-journal-interleaving.c b/src/journal/test-journal-interleaving.c +index 1a058ea..974fa3b 100644 +--- a/src/journal/test-journal-interleaving.c ++++ b/src/journal/test-journal-interleaving.c +@@ -194,7 +194,7 @@ static void test_skip(void (*setup)(void)) + if (arg_keep) + log_info("Not removing %s", t); + else { +- journal_directory_vacuum(".", 3000000, 0, 0, NULL); ++ journal_directory_vacuum(".", 3000000, 0, NULL); + + assert_se(rm_rf_dangerous(t, false, true, false) >= 0); + } +@@ -279,7 +279,7 @@ static void test_sequence_numbers(void) { + if (arg_keep) + log_info("Not removing %s", t); + else { +- journal_directory_vacuum(".", 3000000, 0, 0, NULL); ++ journal_directory_vacuum(".", 3000000, 0, NULL); + + assert_se(rm_rf_dangerous(t, false, true, false) >= 0); + } +diff --git a/src/journal/test-journal.c b/src/journal/test-journal.c +index 190c426..3b8778d 100644 +--- a/src/journal/test-journal.c ++++ b/src/journal/test-journal.c +@@ -126,7 +126,7 @@ static void test_non_empty(void) { + if (arg_keep) + log_info("Not removing %s", t); + else { +- journal_directory_vacuum(".", 3000000, 0, 0, NULL); ++ journal_directory_vacuum(".", 3000000, 0, NULL); + + assert_se(rm_rf_dangerous(t, false, true, false) >= 0); + } +@@ -165,7 +165,7 @@ static void test_empty(void) { + if (arg_keep) + log_info("Not removing %s", t); + else { +- journal_directory_vacuum(".", 3000000, 0, 0, NULL); ++ journal_directory_vacuum(".", 3000000, 0, NULL); + + assert_se(rm_rf_dangerous(t, false, true, false) >= 0); + } +diff --git a/src/shared/macro.h b/src/shared/macro.h +index d4f92b6..bc5b3c1 100644 +--- a/src/shared/macro.h ++++ b/src/shared/macro.h +@@ -114,6 +114,13 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) { + _a < _b ? _a : _b; \ + }) + ++#define LESS_BY(A,B) \ ++ __extension__ ({ \ ++ typeof(A) _A = (A); \ ++ typeof(B) _B = (B); \ ++ _A > _B ? _A - _B : 0; \ ++ }) ++ + #ifndef CLAMP + #define CLAMP(x, low, high) \ + __extension__ ({ \ diff --git a/0237-man-add-busctl-1.patch b/0237-man-add-busctl-1.patch new file mode 100644 index 0000000..208c839 --- /dev/null +++ b/0237-man-add-busctl-1.patch @@ -0,0 +1,239 @@ +From 7cfdb4b03c310e9bb55609a98eb70356e4c50148 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 11 Jan 2014 23:44:34 -0500 +Subject: [PATCH] man: add busctl(1) + +Conflicts: + Makefile-man.am + TODO + man/systemd-bus-proxyd.xml +--- + Makefile-man.am | 1 + + man/busctl.xml | 206 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 207 insertions(+) + create mode 100644 man/busctl.xml + +diff --git a/Makefile-man.am b/Makefile-man.am +index 3f626e8..9c3cb35 100644 +--- a/Makefile-man.am ++++ b/Makefile-man.am +@@ -3,6 +3,7 @@ + + MANPAGES += \ + man/bootup.7 \ ++ man/busctl.1 \ + man/daemon.7 \ + man/halt.8 \ + man/hostname.5 \ +diff --git a/man/busctl.xml b/man/busctl.xml +new file mode 100644 +index 0000000..0c5f05a +--- /dev/null ++++ b/man/busctl.xml +@@ -0,0 +1,206 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ busctl ++ systemd ++ ++ ++ ++ A monkey with a typewriter ++ Zbigniew ++ Jędrzejewski-Szmek ++ zbyszek@in.waw.pl ++ ++ ++ ++ ++ ++ busctl ++ 1 ++ ++ ++ ++ busctl ++ Introspect the bus ++ ++ ++ ++ ++ busctl ++ OPTIONS ++ COMMAND ++ NAME ++ ++ ++ ++ ++ Description ++ ++ busctl may be used to ++ introspect and monitor the D-Bus bus. ++ ++ ++ ++ Options ++ ++ The following options are understood: ++ ++ ++ ++ ++ ++ ++ Print a short help text and exit. ++ ++ ++ ++ ++ ++ ++ ++ Print a short version string and exit. ++ ++ ++ ++ ++ ++ ++ ++ Do not pipe output into a pager. ++ ++ ++ ++ ++ ++ ++ ++ Talk to the systemd system manager (the ++ default). ++ ++ ++ ++ ++ ++ ++ ++ Talk to the systemd manager of the calling ++ user. ++ ++ ++ ++ ++ ++ ++ Connect to the bus specified by ++ ADDRESS instead of using suitable ++ defaults for either the system or user bus (see ++ and ++ options). ++ ++ ++ ++ ++ ++ When showing the list of endpoints, show a ++ column containing the names of containers they belong to. ++ See ++ systemd-machined.service8. ++ ++ ++ ++ ++ ++ ++ When showing the list of endpoints, show ++ only "unique" names (of the form ++ :number.number). ++ ++ ++ ++ ++ ++ ++ The opposite of — ++ only "well-known" names will be shown. ++ ++ ++ ++ ++ ++ When showing the list of endpoints, show ++ only endpoints which haven't actually been activated yet, ++ but may be started automatically if accessed. ++ ++ ++ ++ ++ ++ ++ When showing messages being exchanged, show only the ++ subset matching MATCH. ++ ++ ++ ++ ++ ++ ++ Commands ++ ++ The following commands are understood: ++ ++ ++ ++ list ++ ++ Show endpoints attached to the bus. This is ++ the default if no command is specified. ++ ++ ++ ++ monitor NAME ++ ++ Dump messages being exchanged. If ++ NAME is specified, show messages ++ to or from this endpoint. Otherwsise, show all messages on the ++ bus. ++ ++ ++ ++ ++ ++ See Also ++ ++ ++ dbus-daemon1, ++ D-Bus, ++ kdbus, ++ sd-bus3, ++ systemd1, ++ systemd-bus-proxyd8, ++ machinectl1 ++ ++ ++ diff --git a/0238-journalctl-flip-to-full-by-default.patch b/0238-journalctl-flip-to-full-by-default.patch new file mode 100644 index 0000000..28f1a29 --- /dev/null +++ b/0238-journalctl-flip-to-full-by-default.patch @@ -0,0 +1,107 @@ +From 25bebb7cc2b1b0d4ffc9ed02c348ae96b49c4572 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 6 Oct 2013 21:55:18 -0400 +Subject: [PATCH] journalctl: flip to --full by default + +We already shew lines in full when using a pager or not on a +tty. The commit disables ellipsization in the sole remaining case, +namely when --follow is used. + +This has been a popular request for a long time, and indeed, full +output seems much more useful. Old behaviour can still be requested by +using --no-full. Old options retain their behaviour for compatiblity, +but aren't advertised as much. This change applies only to jornalctl, +not to systemctl, when ellipsization is useful to keep the layout. + +https://bugzilla.redhat.com/show_bug.cgi?id=984758 +--- + man/journalctl.xml | 15 ++++++++++++--- + src/journal/journalctl.c | 12 +++++++++--- + 2 files changed, 21 insertions(+), 6 deletions(-) + +diff --git a/man/journalctl.xml b/man/journalctl.xml +index d75c758..d1e841a 100644 +--- a/man/journalctl.xml ++++ b/man/journalctl.xml +@@ -152,11 +152,20 @@ + + + +- ++ + ++ ++ ++ Ellipsize fields when ++ they don't fit in available columns. ++ The default is to show full fields, ++ allowing them to wrap or be truncated ++ by the pager if one is used. + +- Show all (printable) fields in +- full. ++ Old options ++ / ++ not useful anymore, except to undo ++ . + + + +diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c +index ccd96b2..1b5bdd3 100644 +--- a/src/journal/journalctl.c ++++ b/src/journal/journalctl.c +@@ -64,7 +64,7 @@ + static OutputMode arg_output = OUTPUT_SHORT; + static bool arg_pager_end = false; + static bool arg_follow = false; +-static bool arg_full = false; ++static bool arg_full = true; + static bool arg_all = false; + static bool arg_no_pager = false; + static int arg_lines = -1; +@@ -187,7 +187,7 @@ static int help(void) { + " short-precise, short-monotonic, verbose,\n" + " export, json, json-pretty, json-sse, cat)\n" + " -x --catalog Add message explanations where available\n" +- " -l --full Do not ellipsize fields\n" ++ " --no-full Ellipsize fields\n" + " -a --all Show all fields, including long and unprintable\n" + " -q --quiet Do not show privilege warning\n" + " --no-pager Do not pipe output into a pager\n" +@@ -224,6 +224,7 @@ static int parse_argv(int argc, char *argv[]) { + enum { + ARG_VERSION = 0x100, + ARG_NO_PAGER, ++ ARG_NO_FULL, + ARG_NO_TAIL, + ARG_NEW_ID128, + ARG_LIST_BOOTS, +@@ -258,6 +259,7 @@ static int parse_argv(int argc, char *argv[]) { + { "output", required_argument, NULL, 'o' }, + { "all", no_argument, NULL, 'a' }, + { "full", no_argument, NULL, 'l' }, ++ { "no-full", no_argument, NULL, ARG_NO_FULL }, + { "lines", optional_argument, NULL, 'n' }, + { "no-tail", no_argument, NULL, ARG_NO_TAIL }, + { "new-id128", no_argument, NULL, ARG_NEW_ID128 }, +@@ -349,6 +351,10 @@ static int parse_argv(int argc, char *argv[]) { + arg_full = true; + break; + ++ case ARG_NO_FULL: ++ arg_full = false; ++ break; ++ + case 'a': + arg_all = true; + break; +@@ -1736,7 +1742,7 @@ int main(int argc, char *argv[]) { + + flags = + arg_all * OUTPUT_SHOW_ALL | +- (arg_full || !on_tty() || pager_have()) * OUTPUT_FULL_WIDTH | ++ arg_full * OUTPUT_FULL_WIDTH | + on_tty() * OUTPUT_COLOR | + arg_catalog * OUTPUT_CATALOG; + diff --git a/kernel-install-grubby.patch b/kernel-install-grubby.patch index 717c484..481859d 100644 --- a/kernel-install-grubby.patch +++ b/kernel-install-grubby.patch @@ -1,6 +1,6 @@ -From dd33348393551411885397ff7d88a3a908eeb018 Mon Sep 17 00:00:00 2001 +From 0fe97bc02e3108efdb844feb1b367a89ba995d83 Mon Sep 17 00:00:00 2001 From: Harald Hoyer -Date: Wed, 13 Mar 2013 07:57:53 +0100 +Date: Tue, 14 Jan 2014 17:48:08 -0500 Subject: [PATCH] kernel-install: add fedora specific callouts to new-kernel-pkg @@ -9,7 +9,7 @@ Subject: [PATCH] kernel-install: add fedora specific callouts to 1 file changed, 21 insertions(+) diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install -index fb2ee57..31e988a 100644 +index 3ae1d77..3a2ac56 100644 --- a/src/kernel-install/kernel-install +++ b/src/kernel-install/kernel-install @@ -19,6 +19,27 @@ @@ -39,7 +39,4 @@ index fb2ee57..31e988a 100644 + usage() { - echo "Usage:" >&2 --- -1.8.3.1 - + echo "Usage:" diff --git a/systemd.spec b/systemd.spec index 1622435..8585104 100644 --- a/systemd.spec +++ b/systemd.spec @@ -16,7 +16,7 @@ Name: systemd Url: http://www.freedesktop.org/wiki/Software/systemd Version: 208 -Release: 9%{?gitcommit:.git%{gitcommit}}%{?dist} +Release: 11%{?gitcommit:.git%{gitcommit}}%{?dist} # For a breakdown of the licensing, see README License: LGPLv2+ and MIT and GPLv2+ Summary: A System and Service Manager @@ -178,6 +178,103 @@ Patch138: 0138-systemd-treat-reload-failure-as-failure.patch Patch139: 0139-journal-fail-silently-in-sd_j_sendv-if-journal-is-un.patch Patch140: 0140-systemd-add-a-start-job-for-all-units-specified-with.patch Patch141: 0141-core-device-ignore-SYSTEMD_WANTS-in-user-mode.patch +Patch142: 0142-Fix-memory-leak-in-stdout-journal-streams.patch +Patch143: 0143-man-document-is-enabled-output.patch +Patch144: 0144-hostnamed-avoid-using-NULL-in-error-path.patch +Patch145: 0145-logind-use-correct-who-enum-values-with-KillUnit.patch +Patch146: 0146-Revert-systemd-add-a-start-job-for-all-units-specifi.patch +Patch147: 0147-core-do-not-segfault-if-swap-activity-happens-when-p.patch +Patch148: 0148-kernel-install-add-h-help.patch +Patch149: 0149-kernel-install-fix-help-output.patch +Patch150: 0150-man-improve-wording-and-comma-usage-in-systemd.journ.patch +Patch151: 0151-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch +Patch152: 0152-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch +Patch153: 0153-hwdb-Update-database-of-Bluetooth-company-identifier.patch +Patch154: 0154-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch +Patch155: 0155-libudev-hwdb-use-libudev-not-systemd-logging.patch +Patch156: 0156-core-manager-remove-infinite-loop.patch +Patch157: 0157-util-check-for-overflow-in-greedy_realloc.patch +Patch158: 0158-journald-use-a-bit-more-cleanup-magic.patch +Patch159: 0159-journald-malloc-less-when-streaming-messages.patch +Patch160: 0160-activate-clean-up-inherited-descriptors.patch +Patch161: 0161-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch +Patch162: 0162-units-don-t-run-readahead-done-timers-in-containers.patch +Patch163: 0163-test-fileio-replace-mktemp-with-mkstemp-to-avoid-war.patch +Patch164: 0164-journal-pipe-journalctl-help-output-into-a-pager.patch +Patch165: 0165-nspawn-complain-and-continue-if-machine-has-same-id.patch +Patch166: 0166-man-beef-up-ExecStart-description.patch +Patch167: 0167-man-remove-advice-to-avoid-setting-the-same-var-more.patch +Patch168: 0168-systemctl-add-the-plain-option-to-the-help-message.patch +Patch169: 0169-Fix-a-few-resource-leaks-in-error-paths.patch +Patch170: 0170-Fix-a-few-signed-unsigned-format-string-issues.patch +Patch171: 0171-util-try-harder-to-increase-the-send-recv-buffers-of.patch +Patch172: 0172-execute-also-set-SO_SNDBUF-when-spawning-a-service-w.patch +Patch173: 0173-journal-file-protect-against-alloca-0.patch +Patch174: 0174-man-describe-journalctl-show-cursor.patch +Patch175: 0175-journal-fix-against-theoretical-undefined-behavior.patch +Patch176: 0176-journald-downgrade-warning-message-when-dev-kmsg-doe.patch +Patch177: 0177-journal-file.c-remove-redundant-assignment-of-variab.patch +Patch178: 0178-login-Don-t-stop-a-running-user-manager-from-garbage.patch +Patch179: 0179-libudev-devices-received-from-udev-are-always-initia.patch +Patch180: 0180-log-don-t-reopen-dev-console-each-time-we-call-log_o.patch +Patch181: 0181-log-when-we-log-to-dev-console-and-got-disconnected-.patch +Patch182: 0182-loginctl-when-showing-device-tree-of-seats-with-no-d.patch +Patch183: 0183-man-be-more-explicit-about-option-arguments-that-tak.patch +Patch184: 0184-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch +Patch185: 0185-journalctl-zsh-completion-fix-several-issues-in-help.patch +Patch186: 0186-keymap-Refactor-Acer-tables.patch +Patch187: 0187-logging-reduce-send-timeout-to-something-more-sensib.patch +Patch188: 0188-DEFAULT_PATH_SPLIT_USR-macro.patch +Patch189: 0189-fstab-generator-Do-not-try-to-fsck-non-devices.patch +Patch190: 0190-logind-remove-dead-variable.patch +Patch191: 0191-hwdb-update.patch +Patch192: 0192-delta-replace-readdir_r-with-readdir.patch +Patch193: 0193-delta-fix-delta-for-drop-ins.patch +Patch194: 0194-delta-if-prefix-is-specified-only-show-overrides-the.patch +Patch195: 0195-log-log_error-and-friends-add-a-newline-after-each-l.patch +Patch196: 0196-man-units-tmpfiles.d-5-cleanup.patch +Patch197: 0197-tmpfiles-introduce-the-concept-of-unsafe-operations.patch +Patch198: 0198-sleep-config-fix-useless-check-for-swapfile-type.patch +Patch199: 0199-journalctl-make-sure-b-foobar-cannot-be-misunderstoo.patch +Patch200: 0200-man-resolve-word-omissions.patch +Patch201: 0201-man-improvements-to-comma-placement.patch +Patch202: 0202-man-grammar-and-wording-improvements.patch +Patch203: 0203-man-document-fail-nofail-auto-noauto.patch +Patch204: 0204-man-fix-description-of-is-enabled-returned-value.patch +Patch205: 0205-man-fix-Type-reference.patch +Patch206: 0206-man-fix-Type-reference-v2.patch +Patch207: 0207-hwdb-Update-database-of-Bluetooth-company-identifier.patch +Patch208: 0208-man-add-a-note-about-propagating-signals.patch +Patch209: 0209-man-include-autoconf-snippet-in-daemon-7.patch +Patch210: 0210-systemd-python-fix-setting-of-exception-codes.patch +Patch211: 0211-systemd-python-fix-listen_fds-under-Python-2.patch +Patch212: 0212-man-expand-on-some-more-subtle-points-in-systemd.soc.patch +Patch213: 0213-tmpfiles-rename-unsafe-to-boot.patch +Patch214: 0214-sleep-config-Dereference-pointer-before-check-for-NU.patch +Patch215: 0215-sleep-config-fix-double-free.patch +Patch216: 0216-rules-drivers-do-not-reset-RUN-list.patch +Patch217: 0217-core-manager-print-info-about-interesting-signals.patch +Patch218: 0218-core-service-check-if-mainpid-matches-only-if-it-is-.patch +Patch219: 0219-man-typo-fix.patch +Patch220: 0220-swap-remove-if-else-with-the-same-data-path.patch +Patch221: 0221-hwdb-update.patch +Patch222: 0222-journal-Add-missing-byte-order-conversions.patch +Patch223: 0223-hwdb-change-key-mappings-for-Samsung-90X3A.patch +Patch224: 0224-hwdb-add-Samsung-700G.patch +Patch225: 0225-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch +Patch226: 0226-hwdb-fix-match-for-Thinkpad-X201-tablet.patch +Patch227: 0227-keymap-Recognize-different-Toshiba-Satellite-capital.patch +Patch228: 0228-sleep.c-fix-typo.patch +Patch229: 0229-delta-ensure-that-d_type-will-be-set-on-every-fs.patch +Patch230: 0230-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch +Patch231: 0231-man-mention-which-variables-will-be-expanded-in-Exec.patch +Patch232: 0232-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch +Patch233: 0233-journal-fix-access-to-munmapped-memory-in-sd_journal.patch +Patch234: 0234-gpt-auto-generator-skip-nonexistent-devices.patch +Patch235: 0235-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch +Patch236: 0236-journald-do-not-free-space-when-disk-space-runs-low.patch +Patch237: 0237-man-add-busctl-1.patch +Patch238: 0238-journalctl-flip-to-full-by-default.patch # kernel-install patch for grubby, drop if grubby is obsolete Patch1000: kernel-install-grubby.patch @@ -704,6 +801,7 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g %{_prefix}/lib/systemd/system-generators/systemd-efi-boot-generator %{_prefix}/lib/systemd/system-generators/systemd-gpt-auto-generator %{_prefix}/lib/tmpfiles.d/systemd.conf +%{_prefix}/lib/tmpfiles.d/systemd-nologin.conf %{_prefix}/lib/tmpfiles.d/x11.conf %{_prefix}/lib/tmpfiles.d/legacy.conf %{_prefix}/lib/tmpfiles.d/tmp.conf @@ -827,6 +925,12 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g %{_datadir}/systemd/gatewayd %changelog +* Tue Dec 03 2013 Zbigniew Jędrzejewski-Szmek - 208-11 +- Backport a few fixes, relevant documentation updates, and HWDB changes + (#1051797, #1051768, #1047335, #1047304, #1047186, #1045849, #1043304, + #1043212, #1039351, #1031325, #1023820, #1017509, #953077) +- Flip journalctl to --full by default (#984758) + * Tue Dec 03 2013 Zbigniew Jędrzejewski-Szmek - 208-9 - Apply two patches for #1026860