From 1ff63606a64d814f37c4956854107e049a684754 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Nov 19 2015 15:38:59 +0000 Subject: import systemd-219-19.el7 --- diff --git a/.gitignore b/.gitignore index 5434520..c7cdfa3 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/systemd-208.tar.xz +SOURCES/systemd-219.tar.xz diff --git a/.systemd.metadata b/.systemd.metadata index ddc02ad..188314b 100644 --- a/.systemd.metadata +++ b/.systemd.metadata @@ -1 +1 @@ -e1a4e213d5d1e3498bca851347f2f07fdb9b4e1f SOURCES/systemd-208.tar.xz +307d1c3e48b3bca1039cb66df2d7def074efe2ef SOURCES/systemd-219.tar.xz diff --git a/SOURCES/0001-kernel-install-add-fedora-specific-callouts-to-new-k.patch b/SOURCES/0001-kernel-install-add-fedora-specific-callouts-to-new-k.patch new file mode 100644 index 0000000..8c46c98 --- /dev/null +++ b/SOURCES/0001-kernel-install-add-fedora-specific-callouts-to-new-k.patch @@ -0,0 +1,60 @@ +From 139d2c57d86203e421b17a4b6ec168c49fcb9893 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 14 Jan 2014 17:48:08 -0500 +Subject: [PATCH] kernel-install: add fedora specific callouts to + new-kernel-pkg + +--- + src/kernel-install/kernel-install | 36 ++++++++++++++++++++++++++++++++++++ + 1 file changed, 36 insertions(+) + mode change 100644 => 100755 src/kernel-install/kernel-install + +diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install +old mode 100644 +new mode 100755 +index 3ae1d77..f1c74de +--- a/src/kernel-install/kernel-install ++++ b/src/kernel-install/kernel-install +@@ -71,6 +71,42 @@ fi + KERNEL_VERSION="$1" + KERNEL_IMAGE="$2" + ++if [[ -x /sbin/new-kernel-pkg ]]; then ++ KERNEL_DIR="${KERNEL_IMAGE%/*}" ++ if [[ "${KERNEL_DIR}" != "/boot" ]]; then ++ for i in \ ++ "$KERNEL_IMAGE" \ ++ "$KERNEL_DIR/.${KERNEL_IMAGE##*/}.hmac" \ ++ "$KERNEL_DIR"/System.map \ ++ "$KERNEL_DIR"/config \ ++ "$KERNEL_DIR"/zImage.stub \ ++ "$KERNEL_DIR"/dtb \ ++ ; do ++ [[ -e "$i" ]] || continue ++ cp -a "$i" "/boot/${i##*/}-${KERNEL_VERSION}" ++ done ++ fi ++ ++ [[ "$KERNEL_VERSION" == *\+* ]] && flavor=-"${KERNEL_VERSION##*+}" ++ case "$COMMAND" in ++ add) ++ /sbin/new-kernel-pkg --package "kernel${flavor}" --install "$KERNEL_VERSION" || exit $? ++ /sbin/new-kernel-pkg --package "kernel${flavor}" --mkinitrd --dracut --depmod --update "$KERNEL_VERSION" || exit $? ++ /sbin/new-kernel-pkg --package "kernel${flavor}" --rpmposttrans "$KERNEL_VERSION" || exit $? ++ ;; ++ remove) ++ /sbin/new-kernel-pkg --package "kernel${flavor+-$flavor}" --rminitrd --rmmoddep --remove "$KERNEL_VERSION" || exit $? ++ ;; ++ *) ++ ;; ++ esac ++ ++ # exit, if we can't find a boot loader spec conforming setup ++ if ! [[ -d /boot/loader/entries || -L /boot/loader/entries ]]; then ++ exit 0 ++ fi ++fi ++ + if [[ -f /etc/machine-id ]]; then + read MACHINE_ID < /etc/machine-id + fi diff --git a/SOURCES/0001-units-add-Install-section-to-tmp.mount.patch b/SOURCES/0001-units-add-Install-section-to-tmp.mount.patch deleted file mode 100644 index 3bf21ee..0000000 --- a/SOURCES/0001-units-add-Install-section-to-tmp.mount.patch +++ /dev/null @@ -1,23 +0,0 @@ -From b4aeab33ff172b608930daf77a6f7af47bf2fdc9 Mon Sep 17 00:00:00 2001 -From: Michal Schmidt -Date: Fri, 15 Feb 2013 09:07:57 +0100 -Subject: [PATCH] units: add [Install] section to tmp.mount - -Change-Id: I2e6d129de00a9afaf7558006c886866f64394c29 -Related: #908253 ---- - units/tmp.mount | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/units/tmp.mount b/units/tmp.mount -index 99a3ba3..9e4803a 100644 ---- a/units/tmp.mount -+++ b/units/tmp.mount -@@ -18,3 +18,7 @@ What=tmpfs - Where=/tmp - Type=tmpfs - Options=mode=1777,strictatime -+ -+# Make 'systemctl enable tmp.mount' work: -+[Install] -+WantedBy=local-fs.target diff --git a/SOURCES/0002-Revert-fsck-re-enable-fsck-l.patch b/SOURCES/0002-Revert-fsck-re-enable-fsck-l.patch new file mode 100644 index 0000000..75da631 --- /dev/null +++ b/SOURCES/0002-Revert-fsck-re-enable-fsck-l.patch @@ -0,0 +1,55 @@ +From 42026958cced6fe111bbaccad04d24d8ca3d6c55 Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Fri, 14 Nov 2014 17:07:57 +0100 +Subject: [PATCH] Revert "fsck: re-enable fsck -l" + +This reverts commit 48d3e8d07f2978f001cc85b2dddb7f8ec9d07006. + +(We have older util-linux in rhel7)) + +Conflicts: + README +--- + README | 3 ++- + src/fsck/fsck.c | 13 +++++++++---- + 2 files changed, 11 insertions(+), 5 deletions(-) + +diff --git a/README b/README +index c722092..5f5783a 100644 +--- a/README ++++ b/README +@@ -135,7 +135,8 @@ REQUIREMENTS: + During runtime, you need the following additional + dependencies: + +- util-linux >= v2.25 required ++ util-linux >= v2.19 (requires fsck -l, agetty -s), ++ v2.21 required for tests in test/ + dbus >= 1.4.0 (strictly speaking optional, but recommended) + dracut (optional) + PolicyKit (optional) +diff --git a/src/fsck/fsck.c b/src/fsck/fsck.c +index 78ceeb6..d897680 100644 +--- a/src/fsck/fsck.c ++++ b/src/fsck/fsck.c +@@ -323,11 +323,16 @@ int main(int argc, char *argv[]) { + cmdline[i++] = "-T"; + + /* +- * Since util-linux v2.25 fsck uses /run/fsck/.lock files. +- * The previous versions use flock for the device and conflict with +- * udevd, see https://bugs.freedesktop.org/show_bug.cgi?id=79576#c5 ++ * Disable locking which conflict with udev's event ++ * ownershipi, until util-linux moves the flock ++ * synchronization file which prevents multiple fsck running ++ * on the same rotationg media, from the disk device ++ * node to a privately owned regular file. ++ * ++ * https://bugs.freedesktop.org/show_bug.cgi?id=79576#c5 ++ * ++ * cmdline[i++] = "-l"; + */ +- cmdline[i++] = "-l"; + + if (!root_directory) + cmdline[i++] = "-M"; diff --git a/SOURCES/0002-man-explain-NAME-in-systemctl-man-page.patch b/SOURCES/0002-man-explain-NAME-in-systemctl-man-page.patch deleted file mode 100644 index 04990de..0000000 --- a/SOURCES/0002-man-explain-NAME-in-systemctl-man-page.patch +++ /dev/null @@ -1,33 +0,0 @@ -From bc7d6c8e11a22d29b14b6070117f261961eadb23 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=A1clav=20Pavl=C3=ADn?= -Date: Thu, 31 Oct 2013 14:36:41 +0100 -Subject: [PATCH] man: explain NAME in systemctl man page - ---- - man/systemctl.xml | 13 +++++++++++++ - 1 file changed, 13 insertions(+) - -diff --git a/man/systemctl.xml b/man/systemctl.xml -index e789d4b..166282c 100644 ---- a/man/systemctl.xml -+++ b/man/systemctl.xml -@@ -63,6 +63,19 @@ along with systemd; If not, see . - introspect and control the state of the - systemd1 - system and service manager. -+ -+ For Unit Commands the NAME represents full name of unit. -+ -+systemctl start foo.service -+ -+ For Unit File Commands the NAME represents full name of the unit file, or absolute path to the unit file. -+ -+systemctl start /path/to/foo.service -+ -+ While working with services/service files, systemctl is able to append .service suffix when it is missing. -+ -+systemctl start foo -+ - - - diff --git a/SOURCES/0003-fix-lingering-references-to-var-lib-backlight-random.patch b/SOURCES/0003-fix-lingering-references-to-var-lib-backlight-random.patch deleted file mode 100644 index 2705795..0000000 --- a/SOURCES/0003-fix-lingering-references-to-var-lib-backlight-random.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 635ba7207a9afa3fa1b0c4e804c6823d71c04d1c Mon Sep 17 00:00:00 2001 -From: Dave Reisner -Date: Wed, 2 Oct 2013 07:46:24 -0400 -Subject: [PATCH] fix lingering references to /var/lib/{backlight,random-seed} - -This should have been part of ef5bfcf668e6029faa78534dfe. ---- - man/systemd-backlight@.service.xml | 2 +- - man/systemd-random-seed.service.xml | 2 +- - units/systemd-backlight@.service.in | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/man/systemd-backlight@.service.xml b/man/systemd-backlight@.service.xml -index 2b73625..4318964 100644 ---- a/man/systemd-backlight@.service.xml -+++ b/man/systemd-backlight@.service.xml -@@ -58,7 +58,7 @@ - is a service that restores the display backlight - brightness at early-boot and saves it at shutdown. On - disk, the backlight brightness is stored in -- /var/lib/backlight/. Note that by -+ /var/lib/systemd/backlight/. Note that by - default, only firmware backlight devices are - saved/restored. - -diff --git a/man/systemd-random-seed.service.xml b/man/systemd-random-seed.service.xml -index 8cd14b7..e5cd037 100644 ---- a/man/systemd-random-seed.service.xml -+++ b/man/systemd-random-seed.service.xml -@@ -61,7 +61,7 @@ - for details. Saving/restoring the random seed across - boots increases the amount of available entropy early - at boot. On disk the random seed is stored in -- /var/lib/random-seed. -+ /var/lib/systemd/random-seed. - - - -diff --git a/units/systemd-backlight@.service.in b/units/systemd-backlight@.service.in -index b0e75db..5caa5d5 100644 ---- a/units/systemd-backlight@.service.in -+++ b/units/systemd-backlight@.service.in -@@ -9,7 +9,7 @@ - Description=Load/Save Screen Backlight Brightness of %I - Documentation=man:systemd-backlight@.service(8) - DefaultDependencies=no --RequiresMountsFor=/var/lib/backlight -+RequiresMountsFor=/var/lib/systemd/backlight - Conflicts=shutdown.target - After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-remount-fs.service - Before=sysinit.target shutdown.target diff --git a/SOURCES/0003-sysctl-bring-back-etc-sysctl.conf.patch b/SOURCES/0003-sysctl-bring-back-etc-sysctl.conf.patch new file mode 100644 index 0000000..ba1d738 --- /dev/null +++ b/SOURCES/0003-sysctl-bring-back-etc-sysctl.conf.patch @@ -0,0 +1,25 @@ +From d2deeea1d5aa1d13139b9e9f70c6655abb589530 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Mon, 11 Nov 2013 11:17:57 +0100 +Subject: [PATCH] sysctl: bring back /etc/sysctl.conf + +Read /etc/sysctl.conf as the last file, overwriting everything. +--- + src/sysctl/sysctl.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c +index 275a5b7..d007c93 100644 +--- a/src/sysctl/sysctl.c ++++ b/src/sysctl/sysctl.c +@@ -320,6 +320,10 @@ int main(int argc, char *argv[]) { + if (k < 0 && r == 0) + r = k; + } ++ ++ k = parse_file(sysctl_options, "/etc/sysctl.conf", true); ++ if (k < 0 && r == 0) ++ r = k; + } + + k = apply_all(sysctl_options); diff --git a/SOURCES/0004-cryptsetup-fix-OOM-handling-when-parsing-mount-optio.patch b/SOURCES/0004-cryptsetup-fix-OOM-handling-when-parsing-mount-optio.patch deleted file mode 100644 index 828744c..0000000 --- a/SOURCES/0004-cryptsetup-fix-OOM-handling-when-parsing-mount-optio.patch +++ /dev/null @@ -1,45 +0,0 @@ -From cfb20c251cb79820ddf7507f9f4a54cc3f18b121 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 2 Oct 2013 19:36:28 +0200 -Subject: [PATCH] cryptsetup: fix OOM handling when parsing mount options - ---- - src/cryptsetup/cryptsetup.c | 11 ++++++----- - 1 file changed, 6 insertions(+), 5 deletions(-) - -diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c -index 22b5eea..769c3e4 100644 ---- a/src/cryptsetup/cryptsetup.c -+++ b/src/cryptsetup/cryptsetup.c -@@ -74,7 +74,7 @@ static int parse_one_option(const char *option) { - - t = strdup(option+7); - if (!t) -- return -ENOMEM; -+ return log_oom(); - - free(opt_cipher); - opt_cipher = t; -@@ -89,9 +89,10 @@ static int parse_one_option(const char *option) { - } else if (startswith(option, "tcrypt-keyfile=")) { - - opt_type = CRYPT_TCRYPT; -- if (path_is_absolute(option+15)) -- opt_tcrypt_keyfiles = strv_append(opt_tcrypt_keyfiles, strdup(option+15)); -- else -+ if (path_is_absolute(option+15)) { -+ if (strv_extend(&opt_tcrypt_keyfiles, option + 15) < 0) -+ return log_oom(); -+ } else - log_error("Key file path '%s' is not absolute. Ignoring.", option+15); - - } else if (startswith(option, "keyfile-size=")) { -@@ -113,7 +114,7 @@ static int parse_one_option(const char *option) { - - t = strdup(option+5); - if (!t) -- return -ENOMEM; -+ return log_oom(); - - free(opt_hash); - opt_hash = t; diff --git a/SOURCES/0004-remove-user-.service.patch b/SOURCES/0004-remove-user-.service.patch new file mode 100644 index 0000000..747c0da --- /dev/null +++ b/SOURCES/0004-remove-user-.service.patch @@ -0,0 +1,88 @@ +From cd37b8d217cc240074f8ff77f1986551f6c8834a Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Fri, 14 Nov 2014 17:32:10 +0100 +Subject: [PATCH] remove user@.service + +Conflicts: + Makefile.am +--- + Makefile.am | 2 -- + src/login/logind-user.c | 38 -------------------------------------- + 2 files changed, 40 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index bf04d31..75459f7 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -535,7 +535,6 @@ nodist_systemunit_DATA = \ + units/systemd-sysctl.service \ + units/emergency.service \ + units/rescue.service \ +- units/user@.service \ + units/systemd-suspend.service \ + units/systemd-halt.service \ + units/systemd-poweroff.service \ +@@ -597,7 +596,6 @@ EXTRA_DIST += \ + units/systemd-fsck@.service.in \ + units/systemd-fsck-root.service.in \ + units/systemd-machine-id-commit.service.in \ +- units/user@.service.m4.in \ + units/debug-shell.service.in \ + units/systemd-suspend.service.in \ + units/quotaon.service.in \ +diff --git a/src/login/logind-user.c b/src/login/logind-user.c +index f4c4490..97eb4fe 100644 +--- a/src/login/logind-user.c ++++ b/src/login/logind-user.c +@@ -399,39 +399,6 @@ static int user_start_slice(User *u) { + return 0; + } + +-static int user_start_service(User *u) { +- _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; +- char *job; +- int r; +- +- assert(u); +- +- if (!u->service) { +- char lu[DECIMAL_STR_MAX(uid_t) + 1], *service; +- sprintf(lu, UID_FMT, u->uid); +- +- service = unit_name_build("user", lu, ".service"); +- if (!service) +- return log_oom(); +- +- r = manager_start_unit(u->manager, service, &error, &job); +- if (r < 0) { +- log_error("Failed to start user service: %s", bus_error_message(&error, r)); +- free(service); +- } else { +- u->service = service; +- +- free(u->service_job); +- u->service_job = job; +- } +- } +- +- if (u->service) +- hashmap_put(u->manager->user_units, u->service, u); +- +- return 0; +-} +- + int user_start(User *u) { + int r; + +@@ -452,11 +419,6 @@ int user_start(User *u) { + if (r < 0) + return r; + +- /* Spawn user systemd */ +- r = user_start_service(u); +- if (r < 0) +- return r; +- + if (!dual_timestamp_is_set(&u->timestamp)) + dual_timestamp_get(&u->timestamp); + diff --git a/SOURCES/0005-journald-add-missing-error-check.patch b/SOURCES/0005-journald-add-missing-error-check.patch deleted file mode 100644 index 8d7c1d6..0000000 --- a/SOURCES/0005-journald-add-missing-error-check.patch +++ /dev/null @@ -1,22 +0,0 @@ -From dc74e25f66f2aa56b6c6fa2fd51fd1ee02a4b770 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 2 Oct 2013 19:36:43 +0200 -Subject: [PATCH] journald: add missing error check - ---- - src/journal/journal-file.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c -index 1236403..81c344f 100644 ---- a/src/journal/journal-file.c -+++ b/src/journal/journal-file.c -@@ -907,6 +907,8 @@ static int journal_file_append_field( - - osize = offsetof(Object, field.payload) + size; - r = journal_file_append_object(f, OBJECT_FIELD, osize, &o, &p); -+ if (r < 0) -+ return r; - - o->field.hash = htole64(hash); - memcpy(o->field.payload, field, size); diff --git a/SOURCES/0005-logind-session-save-stopping-flag.patch b/SOURCES/0005-logind-session-save-stopping-flag.patch new file mode 100644 index 0000000..8932e2b --- /dev/null +++ b/SOURCES/0005-logind-session-save-stopping-flag.patch @@ -0,0 +1,63 @@ +From 932ae09a155ef463d99d4b4e7cf04aafbcd78a19 Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Wed, 2 Apr 2014 14:41:26 +0200 +Subject: [PATCH] logind-session: save stopping flag + +Conflicts: + src/login/logind-session.c +--- + src/login/logind-session.c | 17 +++++++++++++---- + 1 file changed, 13 insertions(+), 4 deletions(-) + +diff --git a/src/login/logind-session.c b/src/login/logind-session.c +index a02a537..d2e7b40 100644 +--- a/src/login/logind-session.c ++++ b/src/login/logind-session.c +@@ -181,12 +181,14 @@ int session_save(Session *s) { + "USER=%s\n" + "ACTIVE=%i\n" + "STATE=%s\n" +- "REMOTE=%i\n", +- s->user->uid, ++ "REMOTE=%i\n" ++ "STOPPING=%i\n", ++ (unsigned long) s->user->uid, + s->user->name, + session_is_active(s), + session_state_to_string(session_get_state(s)), +- s->remote); ++ s->remote, ++ s->stopping); + + if (s->type >= 0) + fprintf(f, "TYPE=%s\n", session_type_to_string(s->type)); +@@ -309,7 +311,8 @@ int session_load(Session *s) { + *uid = NULL, + *realtime = NULL, + *monotonic = NULL, +- *controller = NULL; ++ *controller = NULL, ++ *stopping = NULL; + + int k, r; + +@@ -337,6 +340,7 @@ int session_load(Session *s) { + "REALTIME", &realtime, + "MONOTONIC", &monotonic, + "CONTROLLER", &controller, ++ "STOPPING", &stopping, + NULL); + + if (r < 0) +@@ -453,6 +457,11 @@ int session_load(Session *s) { + session_restore_vt(s); + } + ++ if (stopping) { ++ k = parse_boolean(stopping); ++ if (k >= 0) ++ s->stopping = k; ++ } + return r; + } + diff --git a/SOURCES/0006-bus-fix-potentially-uninitialized-memory-access.patch b/SOURCES/0006-bus-fix-potentially-uninitialized-memory-access.patch deleted file mode 100644 index c7ac468..0000000 --- a/SOURCES/0006-bus-fix-potentially-uninitialized-memory-access.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 4b3825ff691103634adc77a4d3ffc7128923fae7 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 2 Oct 2013 19:37:11 +0200 -Subject: [PATCH] bus: fix potentially uninitialized memory access - ---- - src/libsystemd-bus/bus-internal.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/libsystemd-bus/bus-internal.c b/src/libsystemd-bus/bus-internal.c -index 0e66f3d..cac948e 100644 ---- a/src/libsystemd-bus/bus-internal.c -+++ b/src/libsystemd-bus/bus-internal.c -@@ -63,7 +63,7 @@ bool object_path_is_valid(const char *p) { - - bool interface_name_is_valid(const char *p) { - const char *q; -- bool dot, found_dot; -+ bool dot, found_dot = false; - - if (isempty(p)) - return false; -@@ -103,7 +103,7 @@ bool interface_name_is_valid(const char *p) { - - bool service_name_is_valid(const char *p) { - const char *q; -- bool dot, found_dot, unique; -+ bool dot, found_dot = false, unique; - - if (isempty(p)) - return false; diff --git a/SOURCES/0006-man-mention-System-Administrator-s-Guide-in-systemct.patch b/SOURCES/0006-man-mention-System-Administrator-s-Guide-in-systemct.patch new file mode 100644 index 0000000..22b18a8 --- /dev/null +++ b/SOURCES/0006-man-mention-System-Administrator-s-Guide-in-systemct.patch @@ -0,0 +1,33 @@ +From d4582346f47064de24470b5f92e418966004925f Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Thu, 28 Aug 2014 15:12:10 +0200 +Subject: [PATCH] man: mention System Administrator's Guide in systemctl + manpage + +Resolves: #978948 +--- + man/systemctl.xml | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/man/systemctl.xml b/man/systemctl.xml +index 338c1d3..6f30474 100644 +--- a/man/systemctl.xml ++++ b/man/systemctl.xml +@@ -1714,6 +1714,17 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service + + + ++ Examples ++ ++ For examples how to use systemctl in comparsion ++ with old service and chkconfig command please see: ++ ++ Managing System Services ++ ++ ++ ++ ++ + See Also + + systemd1, diff --git a/SOURCES/0007-dbus-fix-return-value-of-dispatch_rqueue.patch b/SOURCES/0007-dbus-fix-return-value-of-dispatch_rqueue.patch deleted file mode 100644 index a1d278c..0000000 --- a/SOURCES/0007-dbus-fix-return-value-of-dispatch_rqueue.patch +++ /dev/null @@ -1,27 +0,0 @@ -From b8e064bd25ccd701a8249a9c9b59049f8c055b93 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 2 Oct 2013 19:37:30 +0200 -Subject: [PATCH] dbus: fix return value of dispatch_rqueue() - ---- - src/libsystemd-bus/sd-bus.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/libsystemd-bus/sd-bus.c b/src/libsystemd-bus/sd-bus.c -index 3f766fb..db0880f 100644 ---- a/src/libsystemd-bus/sd-bus.c -+++ b/src/libsystemd-bus/sd-bus.c -@@ -1215,11 +1215,11 @@ static int dispatch_rqueue(sd_bus *bus, sd_bus_message **m) { - if (r == 0) - return ret; - -- r = 1; -+ ret = 1; - } while (!z); - - *m = z; -- return 1; -+ return ret; - } - - int sd_bus_send(sd_bus *bus, sd_bus_message *m, uint64_t *serial) { diff --git a/SOURCES/0007-rules-automatically-online-hot-added-CPUs.patch b/SOURCES/0007-rules-automatically-online-hot-added-CPUs.patch new file mode 100644 index 0000000..260bb40 --- /dev/null +++ b/SOURCES/0007-rules-automatically-online-hot-added-CPUs.patch @@ -0,0 +1,40 @@ +From cb0c7e5445624b7bc67fc4c10a91d5cf3dd6ce6f Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Mon, 22 Sep 2014 07:41:06 +0200 +Subject: [PATCH] rules: automatically online hot-added CPUs + +RHEL-only patch + +Resolves: #968811 + +Conflicts: + Makefile.am +--- + Makefile.am | 3 ++- + rules/40-redhat.rules | 3 +++ + 2 files changed, 5 insertions(+), 1 deletion(-) + create mode 100644 rules/40-redhat.rules + +diff --git a/Makefile.am b/Makefile.am +index 75459f7..a734e9c 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -3564,7 +3564,8 @@ dist_udevrules_DATA += \ + rules/75-tty-description.rules \ + rules/78-sound-card.rules \ + rules/80-net-setup-link.rules \ +- rules/95-udev-late.rules ++ rules/95-udev-late.rules \ ++ rules/40-redhat.rules + + nodist_udevrules_DATA += \ + rules/99-systemd.rules +diff --git a/rules/40-redhat.rules b/rules/40-redhat.rules +new file mode 100644 +index 0000000..2b494e5 +--- /dev/null ++++ b/rules/40-redhat.rules +@@ -0,0 +1,3 @@ ++# do not edit this file, it will be overwritten on update ++ ++SUBSYSTEM=="cpu", ACTION=="add", TEST=="online", ATTR{online}=="0", ATTR{online}="1" diff --git a/SOURCES/0008-Revert-remove-references-of-readahead.patch b/SOURCES/0008-Revert-remove-references-of-readahead.patch new file mode 100644 index 0000000..65eee62 --- /dev/null +++ b/SOURCES/0008-Revert-remove-references-of-readahead.patch @@ -0,0 +1,54 @@ +From 1b83fbe90a241c6d5c4ab0dc8a3f97215fb277bf Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Wed, 19 Nov 2014 12:14:00 +0100 +Subject: [PATCH] Revert "remove references of readahead" + +This reverts commit 3b71c18d3e3906f8606c66bea98b327684394e61. +--- + .gitignore | 1 + + README | 1 + + TODO | 7 +++++++ + 3 files changed, 9 insertions(+) + +diff --git a/.gitignore b/.gitignore +index e8a4085..0360f7c 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -107,6 +107,7 @@ + /systemd-quotacheck + /systemd-random-seed + /systemd-rc-local-generator ++/systemd-readahead + /systemd-remount-api-vfs + /systemd-remount-fs + /systemd-reply-password +diff --git a/README b/README +index 5f5783a..287d05c 100644 +--- a/README ++++ b/README +@@ -30,6 +30,7 @@ AUTHOR: + + LICENSE: + LGPLv2.1+ for all code ++ - except sd-readahead.[ch] which is MIT + - except src/shared/MurmurHash2.c which is Public Domain + - except src/shared/siphash24.c which is CC0 Public Domain + - except src/journal/lookup3.c which is Public Domain +diff --git a/TODO b/TODO +index 255a4f2..90b2c4b 100644 +--- a/TODO ++++ b/TODO +@@ -786,6 +786,13 @@ Features: + + * and a dbus call to generate target from current state + ++* readahead: ++ - drop /.readahead on bigger upgrades with yum ++ - move readahead files into /var (look for them with .path units?) ++ - readahead: use BTRFS_IOC_DEFRAG_RANGE instead of BTRFS_IOC_DEFRAG ioctl, with START_IO ++ - readahead: when bumping /sys readahead variable save mtime and compare later to detect changes ++ - readahead: make use of EXT4_IOC_MOVE_EXT, as used by http://e4rat.sourceforge.net/ ++ + * GC unreferenced jobs (such as .device jobs) + + * write blog stories about: diff --git a/SOURCES/0008-modules-load-fix-error-handling.patch b/SOURCES/0008-modules-load-fix-error-handling.patch deleted file mode 100644 index f5347c3..0000000 --- a/SOURCES/0008-modules-load-fix-error-handling.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 15010ca4aa6627c7bcfe8106fa45c4408443d5f2 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 2 Oct 2013 19:37:44 +0200 -Subject: [PATCH] modules-load: fix error handling - ---- - src/modules-load/modules-load.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c -index 7b19ee0..49ee420 100644 ---- a/src/modules-load/modules-load.c -+++ b/src/modules-load/modules-load.c -@@ -302,8 +302,8 @@ int main(int argc, char *argv[]) { - - STRV_FOREACH(i, arg_proc_cmdline_modules) { - k = load_module(ctx, *i); -- if (k < 0) -- r = EXIT_FAILURE; -+ if (k < 0 && r == 0) -+ r = k; - } - - r = conf_files_list_nulstr(&files, ".conf", NULL, conf_file_dirs); diff --git a/SOURCES/0009-Revert-missing-remove-fanotify.patch b/SOURCES/0009-Revert-missing-remove-fanotify.patch new file mode 100644 index 0000000..30901ad --- /dev/null +++ b/SOURCES/0009-Revert-missing-remove-fanotify.patch @@ -0,0 +1,220 @@ +From 66d06bd0a577ddb2461e8d1e5c8c2fbf6845227d Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Wed, 19 Nov 2014 12:14:13 +0100 +Subject: [PATCH] Revert "missing: remove fanotify" + +This reverts commit c7e4a7bece7a5c4484d229dd5e8ff01a5d49c62e. + +Conflicts: + src/shared/missing.h +--- + Makefile.am | 1 + + configure.ac | 1 + + src/shared/linux/fanotify.h | 98 +++++++++++++++++++++++++++++++++++++++++++++ + src/shared/missing.h | 64 +++++++++++++++++++++++++++++ + 4 files changed, 164 insertions(+) + create mode 100644 src/shared/linux/fanotify.h + +diff --git a/Makefile.am b/Makefile.am +index a734e9c..70e4fbc 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -749,6 +749,7 @@ libsystemd_shared_la_SOURCES = \ + src/shared/capability.c \ + src/shared/capability.h \ + src/shared/linux/auto_dev-ioctl.h \ ++ src/shared/linux/fanotify.h \ + src/shared/ioprio.h \ + src/shared/missing.h \ + src/shared/initreq.h \ +diff --git a/configure.ac b/configure.ac +index 97a29d6..3f50887 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -310,6 +310,7 @@ RT_LIBS="$LIBS" + AC_SUBST(RT_LIBS) + LIBS="$save_LIBS" + ++AC_CHECK_FUNCS([fanotify_init fanotify_mark]) + AC_CHECK_FUNCS([memfd_create]) + AC_CHECK_FUNCS([__secure_getenv secure_getenv]) + AC_CHECK_DECLS([gettid, pivot_root, name_to_handle_at, setns, getrandom, renameat2, kcmp, LO_FLAGS_PARTSCAN], +diff --git a/src/shared/linux/fanotify.h b/src/shared/linux/fanotify.h +new file mode 100644 +index 0000000..5cc1a7e +--- /dev/null ++++ b/src/shared/linux/fanotify.h +@@ -0,0 +1,98 @@ ++#ifndef _LINUX_FANOTIFY_H ++#define _LINUX_FANOTIFY_H ++ ++#include ++ ++/* the following events that user-space can register for */ ++#define FAN_ACCESS 0x00000001 /* File was accessed */ ++#define FAN_MODIFY 0x00000002 /* File was modified */ ++#define FAN_CLOSE_WRITE 0x00000008 /* Unwrittable file closed */ ++#define FAN_CLOSE_NOWRITE 0x00000010 /* Writtable file closed */ ++#define FAN_OPEN 0x00000020 /* File was opened */ ++ ++#define FAN_EVENT_ON_CHILD 0x08000000 /* interested in child events */ ++ ++/* FIXME currently Q's have no limit.... */ ++#define FAN_Q_OVERFLOW 0x00004000 /* Event queued overflowed */ ++ ++#define FAN_OPEN_PERM 0x00010000 /* File open in perm check */ ++#define FAN_ACCESS_PERM 0x00020000 /* File accessed in perm check */ ++ ++/* helper events */ ++#define FAN_CLOSE (FAN_CLOSE_WRITE | FAN_CLOSE_NOWRITE) /* close */ ++ ++/* flags used for fanotify_init() */ ++#define FAN_CLOEXEC 0x00000001 ++#define FAN_NONBLOCK 0x00000002 ++ ++#define FAN_ALL_INIT_FLAGS (FAN_CLOEXEC | FAN_NONBLOCK) ++ ++/* flags used for fanotify_modify_mark() */ ++#define FAN_MARK_ADD 0x00000001 ++#define FAN_MARK_REMOVE 0x00000002 ++#define FAN_MARK_DONT_FOLLOW 0x00000004 ++#define FAN_MARK_ONLYDIR 0x00000008 ++#define FAN_MARK_MOUNT 0x00000010 ++#define FAN_MARK_IGNORED_MASK 0x00000020 ++#define FAN_MARK_IGNORED_SURV_MODIFY 0x00000040 ++#define FAN_MARK_FLUSH 0x00000080 ++ ++#define FAN_ALL_MARK_FLAGS (FAN_MARK_ADD |\ ++ FAN_MARK_REMOVE |\ ++ FAN_MARK_DONT_FOLLOW |\ ++ FAN_MARK_ONLYDIR |\ ++ FAN_MARK_MOUNT |\ ++ FAN_MARK_IGNORED_MASK |\ ++ FAN_MARK_IGNORED_SURV_MODIFY) ++ ++/* ++ * All of the events - we build the list by hand so that we can add flags in ++ * the future and not break backward compatibility. Apps will get only the ++ * events that they originally wanted. Be sure to add new events here! ++ */ ++#define FAN_ALL_EVENTS (FAN_ACCESS |\ ++ FAN_MODIFY |\ ++ FAN_CLOSE |\ ++ FAN_OPEN) ++ ++/* ++ * All events which require a permission response from userspace ++ */ ++#define FAN_ALL_PERM_EVENTS (FAN_OPEN_PERM |\ ++ FAN_ACCESS_PERM) ++ ++#define FAN_ALL_OUTGOING_EVENTS (FAN_ALL_EVENTS |\ ++ FAN_ALL_PERM_EVENTS |\ ++ FAN_Q_OVERFLOW) ++ ++#define FANOTIFY_METADATA_VERSION 2 ++ ++struct fanotify_event_metadata { ++ __u32 event_len; ++ __u32 vers; ++ __u64 mask; ++ __s32 fd; ++ __s32 pid; ++} __attribute__ ((packed)); ++ ++struct fanotify_response { ++ __s32 fd; ++ __u32 response; ++} __attribute__ ((packed)); ++ ++/* Legit userspace responses to a _PERM event */ ++#define FAN_ALLOW 0x01 ++#define FAN_DENY 0x02 ++ ++/* Helper functions to deal with fanotify_event_metadata buffers */ ++#define FAN_EVENT_METADATA_LEN (sizeof(struct fanotify_event_metadata)) ++ ++#define FAN_EVENT_NEXT(meta, len) ((len) -= (meta)->event_len, \ ++ (struct fanotify_event_metadata*)(((char *)(meta)) + \ ++ (meta)->event_len)) ++ ++#define FAN_EVENT_OK(meta, len) ((long)(len) >= (long)FAN_EVENT_METADATA_LEN && \ ++ (long)(meta)->event_len >= (long)FAN_EVENT_METADATA_LEN && \ ++ (long)(meta)->event_len <= (long)(len)) ++ ++#endif /* _LINUX_FANOTIFY_H */ +diff --git a/src/shared/missing.h b/src/shared/missing.h +index b33a70c..06a5576 100644 +--- a/src/shared/missing.h ++++ b/src/shared/missing.h +@@ -156,6 +156,70 @@ static inline int pivot_root(const char *new_root, const char *put_old) { + # endif + #endif + ++#ifdef __x86_64__ ++# ifndef __NR_fanotify_init ++# define __NR_fanotify_init 300 ++# endif ++# ifndef __NR_fanotify_mark ++# define __NR_fanotify_mark 301 ++# endif ++#elif defined _MIPS_SIM ++# if _MIPS_SIM == _MIPS_SIM_ABI32 ++# ifndef __NR_fanotify_init ++# define __NR_fanotify_init 4336 ++# endif ++# ifndef __NR_fanotify_mark ++# define __NR_fanotify_mark 4337 ++# endif ++# elif _MIPS_SIM == _MIPS_SIM_NABI32 ++# ifndef __NR_fanotify_init ++# define __NR_fanotify_init 6300 ++# endif ++# ifndef __NR_fanotify_mark ++# define __NR_fanotify_mark 6301 ++# endif ++# elif _MIPS_SIM == _MIPS_SIM_ABI64 ++# ifndef __NR_fanotify_init ++# define __NR_fanotify_init 5295 ++# endif ++# ifndef __NR_fanotify_mark ++# define __NR_fanotify_mark 5296 ++# endif ++# endif ++#else ++# ifndef __NR_fanotify_init ++# define __NR_fanotify_init 338 ++# endif ++# ifndef __NR_fanotify_mark ++# define __NR_fanotify_mark 339 ++# endif ++#endif ++ ++#ifndef HAVE_FANOTIFY_INIT ++static inline int fanotify_init(unsigned int flags, unsigned int event_f_flags) { ++ return syscall(__NR_fanotify_init, flags, event_f_flags); ++} ++#endif ++ ++#ifndef HAVE_FANOTIFY_MARK ++static inline int fanotify_mark(int fanotify_fd, unsigned int flags, uint64_t mask, ++ int dfd, const char *pathname) { ++#if defined _MIPS_SIM && _MIPS_SIM == _MIPS_SIM_ABI32 || defined __powerpc__ && !defined __powerpc64__ \ ++ || defined __arm__ && !defined __aarch64__ ++ union { ++ uint64_t _64; ++ uint32_t _32[2]; ++ } _mask; ++ _mask._64 = mask; ++ ++ return syscall(__NR_fanotify_mark, fanotify_fd, flags, ++ _mask._32[0], _mask._32[1], dfd, pathname); ++#else ++ return syscall(__NR_fanotify_mark, fanotify_fd, flags, mask, dfd, pathname); ++#endif ++} ++#endif ++ + #ifndef HAVE_MEMFD_CREATE + static inline int memfd_create(const char *name, unsigned int flags) { + return syscall(__NR_memfd_create, name, flags); diff --git a/SOURCES/0009-efi-never-call-qsort-on-potentially-NULL-arrays.patch b/SOURCES/0009-efi-never-call-qsort-on-potentially-NULL-arrays.patch deleted file mode 100644 index 8cfb22b..0000000 --- a/SOURCES/0009-efi-never-call-qsort-on-potentially-NULL-arrays.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 650948f16d92ce6b55e01ff2c24ea00766d38474 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 2 Oct 2013 19:38:09 +0200 -Subject: [PATCH] efi: never call qsort on potentially NULL arrays - ---- - src/shared/efivars.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/shared/efivars.c b/src/shared/efivars.c -index 1d5b6f9..c015b16 100644 ---- a/src/shared/efivars.c -+++ b/src/shared/efivars.c -@@ -384,7 +384,8 @@ int efi_get_boot_options(uint16_t **options) { - list[count ++] = id; - } - -- qsort(list, count, sizeof(uint16_t), cmp_uint16); -+ if (list) -+ qsort(list, count, sizeof(uint16_t), cmp_uint16); - - *options = list; - return count; diff --git a/SOURCES/0010-Revert-readahead-wipe-out-readahead.patch b/SOURCES/0010-Revert-readahead-wipe-out-readahead.patch new file mode 100644 index 0000000..fdf30a8 --- /dev/null +++ b/SOURCES/0010-Revert-readahead-wipe-out-readahead.patch @@ -0,0 +1,3376 @@ +From fff80c5a2aba519d1c58a1bfc7c0fa96b1e4c30c Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Wed, 19 Nov 2014 12:17:19 +0100 +Subject: [PATCH] Revert "readahead: wipe out readahead" + +This reverts commit d6bc8348d5be8576a475ac8ced2b0146e60fb71f. + +Conflicts: + units/systemd-firstboot.service.in + +Conflicts: + man/sd-daemon.xml + man/sd-login.xml + man/systemd-notify.xml + src/notify/notify.c +--- + Makefile-man.am | 31 ++ + Makefile.am | 54 +- + configure.ac | 9 + + man/sd-daemon.xml | 1 + + man/sd-login.xml | 1 + + man/sd-readahead.xml | 117 +++++ + man/sd_readahead.xml | 178 +++++++ + man/systemd-notify.xml | 11 + + man/systemd-readahead-replay.service.xml | 203 ++++++++ + po/POTFILES.skip | 1 + + shell-completion/zsh/_systemd | 3 +- + src/cryptsetup/cryptsetup-generator.c | 2 +- + src/gpt-auto-generator/gpt-auto-generator.c | 1 + + src/notify/notify.c | 20 +- + src/readahead/Makefile | 1 + + src/readahead/readahead-analyze.c | 146 ++++++ + src/readahead/readahead-collect.c | 650 ++++++++++++++++++++++++ + src/readahead/readahead-common.c | 398 +++++++++++++++ + src/readahead/readahead-common.h | 61 +++ + src/readahead/readahead-replay.c | 281 ++++++++++ + src/readahead/readahead.c | 163 ++++++ + src/readahead/sd-readahead.c | 89 ++++ + src/readahead/test-ssd.c | 41 ++ + src/systemd/sd-readahead.h | 73 +++ + system-preset/90-systemd.preset | 1 + + units/.gitignore | 3 + + units/ldconfig.service | 2 +- + units/quotaon.service.in | 2 +- + units/system-update.target | 2 +- + units/systemd-backlight@.service.in | 2 +- + units/systemd-binfmt.service.in | 2 +- + units/systemd-firstboot.service.in | 2 +- + units/systemd-fsck-root.service.in | 1 + + units/systemd-fsck@.service.in | 2 +- + units/systemd-hwdb-update.service.in | 2 +- + units/systemd-journal-catalog-update.service.in | 2 +- + units/systemd-modules-load.service.in | 1 + + units/systemd-quotacheck.service.in | 2 +- + units/systemd-random-seed.service.in | 2 +- + units/systemd-readahead-collect.service.in | 28 + + units/systemd-readahead-done.service.in | 22 + + units/systemd-readahead-done.timer | 22 + + units/systemd-readahead-drop.service | 19 + + units/systemd-readahead-replay.service.in | 26 + + units/systemd-remount-fs.service.in | 2 +- + units/systemd-rfkill@.service.in | 2 +- + units/systemd-sysctl.service.in | 1 + + units/systemd-sysusers.service.in | 2 +- + units/systemd-tmpfiles-clean.service.in | 2 +- + units/systemd-tmpfiles-setup-dev.service.in | 2 +- + units/systemd-tmpfiles-setup.service.in | 2 +- + units/systemd-update-done.service.in | 2 +- + units/systemd-update-utmp.service.in | 2 +- + units/systemd-vconsole-setup.service.in | 1 + + 54 files changed, 2675 insertions(+), 23 deletions(-) + create mode 100644 man/sd-readahead.xml + create mode 100644 man/sd_readahead.xml + create mode 100644 man/systemd-readahead-replay.service.xml + create mode 120000 src/readahead/Makefile + create mode 100644 src/readahead/readahead-analyze.c + create mode 100644 src/readahead/readahead-collect.c + create mode 100644 src/readahead/readahead-common.c + create mode 100644 src/readahead/readahead-common.h + create mode 100644 src/readahead/readahead-replay.c + create mode 100644 src/readahead/readahead.c + create mode 100644 src/readahead/sd-readahead.c + create mode 100644 src/readahead/test-ssd.c + create mode 100644 src/systemd/sd-readahead.h + create mode 100644 units/systemd-readahead-collect.service.in + create mode 100644 units/systemd-readahead-done.service.in + create mode 100644 units/systemd-readahead-done.timer + create mode 100644 units/systemd-readahead-drop.service + create mode 100644 units/systemd-readahead-replay.service.in + +diff --git a/Makefile-man.am b/Makefile-man.am +index d0fb9aa..ac6f69a 100644 +--- a/Makefile-man.am ++++ b/Makefile-man.am +@@ -1234,6 +1234,34 @@ man/systemd-random-seed.html: man/systemd-random-seed.service.html + + endif + ++if ENABLE_READAHEAD ++MANPAGES += \ ++ man/sd-readahead.3 \ ++ man/sd_readahead.3 \ ++ man/systemd-readahead-replay.service.8 ++MANPAGES_ALIAS += \ ++ man/systemd-readahead-collect.service.8 \ ++ man/systemd-readahead-done.service.8 \ ++ man/systemd-readahead-done.timer.8 \ ++ man/systemd-readahead.8 ++man/systemd-readahead-collect.service.8: man/systemd-readahead-replay.service.8 ++man/systemd-readahead-done.service.8: man/systemd-readahead-replay.service.8 ++man/systemd-readahead-done.timer.8: man/systemd-readahead-replay.service.8 ++man/systemd-readahead.8: man/systemd-readahead-replay.service.8 ++man/systemd-readahead-collect.service.html: man/systemd-readahead-replay.service.html ++ $(html-alias) ++ ++man/systemd-readahead-done.service.html: man/systemd-readahead-replay.service.html ++ $(html-alias) ++ ++man/systemd-readahead-done.timer.html: man/systemd-readahead-replay.service.html ++ $(html-alias) ++ ++man/systemd-readahead.html: man/systemd-readahead-replay.service.html ++ $(html-alias) ++ ++endif ++ + if ENABLE_RESOLVED + MANPAGES += \ + man/resolved.conf.5 \ +@@ -1660,6 +1688,7 @@ EXTRA_DIST += \ + man/sd-id128.xml \ + man/sd-journal.xml \ + man/sd-login.xml \ ++ man/sd-readahead.xml \ + man/sd_booted.xml \ + man/sd_bus_creds_get_pid.xml \ + man/sd_bus_creds_new_from_pid.xml \ +@@ -1707,6 +1736,7 @@ EXTRA_DIST += \ + man/sd_machine_get_class.xml \ + man/sd_notify.xml \ + man/sd_pid_get_session.xml \ ++ man/sd_readahead.xml \ + man/sd_seat_get_active.xml \ + man/sd_session_is_active.xml \ + man/sd_uid_get_state.xml \ +@@ -1766,6 +1796,7 @@ EXTRA_DIST += \ + man/systemd-path.xml \ + man/systemd-quotacheck.service.xml \ + man/systemd-random-seed.service.xml \ ++ man/systemd-readahead-replay.service.xml \ + man/systemd-remount-fs.service.xml \ + man/systemd-resolved.service.xml \ + man/systemd-rfkill@.service.xml \ +diff --git a/Makefile.am b/Makefile.am +index 70e4fbc..b0e4b5a 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -2603,7 +2603,8 @@ systemctl_LDADD = \ + + # ------------------------------------------------------------------------------ + systemd_notify_SOURCES = \ +- src/notify/notify.c ++ src/notify/notify.c \ ++ src/readahead/sd-readahead.c + + systemd_notify_LDADD = \ + libsystemd-internal.la \ +@@ -4736,6 +4737,57 @@ EXTRA_DIST += \ + units/systemd-vconsole-setup.service.in + + # ------------------------------------------------------------------------------ ++if ENABLE_READAHEAD ++systemd_readahead_SOURCES = \ ++ src/readahead/readahead.c \ ++ src/readahead/readahead-collect.c \ ++ src/readahead/readahead-replay.c \ ++ src/readahead/readahead-analyze.c \ ++ src/readahead/readahead-common.c \ ++ src/readahead/readahead-common.h ++ ++systemd_readahead_LDADD = \ ++ libsystemd-internal.la \ ++ libudev-internal.la \ ++ libsystemd-shared.la ++ ++dist_doc_DATA += \ ++ src/readahead/sd-readahead.c \ ++ src/systemd/sd-readahead.h ++ ++rootlibexec_PROGRAMS += \ ++ systemd-readahead ++ ++dist_systemunit_DATA += \ ++ units/systemd-readahead-drop.service \ ++ units/systemd-readahead-done.timer ++ ++nodist_systemunit_DATA += \ ++ units/systemd-readahead-collect.service \ ++ units/systemd-readahead-replay.service \ ++ units/systemd-readahead-done.service ++ ++manual_tests += \ ++ test-ssd ++ ++test_ssd_SOURCES = \ ++ src/readahead/test-ssd.c \ ++ src/readahead/readahead-common.c \ ++ src/readahead/readahead-common.h ++ ++test_ssd_LDADD = \ ++ libsystemd-internal.la \ ++ libudev-internal.la \ ++ libsystemd-shared.la ++ ++endif ++ ++EXTRA_DIST += \ ++ units/systemd-readahead-collect.service.in \ ++ units/systemd-readahead-replay.service.in \ ++ units/systemd-readahead-done.service.in ++ ++# ------------------------------------------------------------------------------ + if ENABLE_BOOTCHART + systemd_bootchart_SOURCES = \ + src/bootchart/bootchart.c \ +diff --git a/configure.ac b/configure.ac +index 3f50887..f701bcf 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -931,6 +931,14 @@ fi + AM_CONDITIONAL(ENABLE_VCONSOLE, [test "$have_vconsole" = "yes"]) + + # ------------------------------------------------------------------------------ ++have_readahead=no ++AC_ARG_ENABLE(readahead, AS_HELP_STRING([--disable-readahead], [disable readahead tools])) ++if test "x$enable_readahead" != "xno"; then ++ have_readahead=yes ++fi ++AM_CONDITIONAL(ENABLE_READAHEAD, [test "$have_readahead" = "yes"]) ++ ++# ------------------------------------------------------------------------------ + have_bootchart=no + AC_ARG_ENABLE(bootchart, AS_HELP_STRING([--disable-bootchart], [disable bootchart tool])) + if test "x$enable_bootchart" != "xno"; then +@@ -1474,6 +1482,7 @@ AC_MSG_RESULT([ + ELFUTILS: ${have_elfutils} + binfmt: ${have_binfmt} + vconsole: ${have_vconsole} ++ readahead: ${have_readahead} + bootchart: ${have_bootchart} + quotacheck: ${have_quotacheck} + tmpfiles: ${have_tmpfiles} +diff --git a/man/sd-daemon.xml b/man/sd-daemon.xml +index b7ba363..b12abe2 100644 +--- a/man/sd-daemon.xml ++++ b/man/sd-daemon.xml +@@ -137,6 +137,7 @@ + systemd.service5, + systemd.socket5, + fprintf3, ++ sd-readahead3, + pkg-config1 + + +diff --git a/man/sd-login.xml b/man/sd-login.xml +index 328f711..abcdb99 100644 +--- a/man/sd-login.xml ++++ b/man/sd-login.xml +@@ -128,6 +128,7 @@ + sd_get_seats3, + sd_login_monitor_new3, + sd-daemon3, ++ sd-readahead3, + pkg-config1 + + +diff --git a/man/sd-readahead.xml b/man/sd-readahead.xml +new file mode 100644 +index 0000000..bcc46b2 +--- /dev/null ++++ b/man/sd-readahead.xml +@@ -0,0 +1,117 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ sd-readahead ++ systemd ++ ++ ++ ++ Developer ++ Lennart ++ Poettering ++ lennart@poettering.net ++ ++ ++ ++ ++ ++ sd-readahead ++ 3 ++ ++ ++ ++ sd-readahead ++ Reference implementation of APIs for ++ controlling boot-time read-ahead ++ ++ ++ ++ ++ #include "sd-readahead.h" ++ ++ ++ ++ ++ Description ++ ++ sd-readahead.c and ++ sd-readahead.h provide a ++ reference implementation for APIs for controlling boot-time ++ read-ahead, as implemented by the read-ahead subsystem ++ of the ++ systemd1 ++ init system. ++ ++ See ++ sd_readahead3 ++ for more information about the function ++ implemented. ++ ++ ++ ++ Notes ++ ++ This interface is provided by the reference ++ implementation of APIs for controlling boot-time ++ read-ahead and distributed with the systemd ++ package. The algorithms it implements are simple, and ++ can easily be reimplemented in daemons if it is ++ important to support this interface without using the ++ reference implementation. See the respective function ++ man pages for details. ++ ++ In addition, for details about the algorithms, ++ check the liberally licensed reference implementation ++ sources: ++ ++ and ++ ++ These APIs are implemented in the reference ++ implementation's drop-in ++ sd-readahead.c and ++ sd-readahead.h files. It is ++ recommended that applications consuming these APIs copy ++ the implementation into their source tree, either ++ verbatim or in excerpts. These interfaces are ++ currently not available in a dynamic library. ++ ++ The functions provided by this interface become ++ NOPs when -DDISABLE_SYSTEMD is set during ++ compilation. In addition, if ++ sd-readhead.c is compiled on ++ non-Linux systems it becomes NOPs. ++ ++ ++ ++ See Also ++ ++ systemd1, ++ sd_readahead3, ++ sd-daemon3 ++ ++ ++ ++ +diff --git a/man/sd_readahead.xml b/man/sd_readahead.xml +new file mode 100644 +index 0000000..9827299 +--- /dev/null ++++ b/man/sd_readahead.xml +@@ -0,0 +1,178 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ sd_readahead ++ systemd ++ ++ ++ ++ Developer ++ Lennart ++ Poettering ++ lennart@poettering.net ++ ++ ++ ++ ++ ++ sd_readahead ++ 3 ++ ++ ++ ++ sd_readahead ++ Control ongoing disk boot-time read-ahead operations ++ ++ ++ ++ ++ #include "sd-readahead.h" ++ ++ ++ int sd_readahead ++ const char *action ++ ++ ++ ++ ++ ++ Description ++ sd_readahead() may be ++ called by programs involved with early boot-up to ++ control ongoing boot-time disk read-ahead operations. It may be ++ used to terminate read-ahead operations in case an ++ uncommon disk access pattern is to be expected and ++ hence read-ahead replay or collection is unlikely to ++ have the desired speed-up effect on the current or ++ future boot-ups. ++ ++ The action should be one ++ of the following strings: ++ ++ ++ ++ cancel ++ ++ Terminates read-ahead ++ data collection, and drops all ++ read-ahead data collected during this ++ boot-up. ++ ++ ++ ++ done ++ ++ Terminates read-ahead ++ data collection, but keeps all ++ read-ahead data collected during this ++ boot-up around for use during ++ subsequent boot-ups. ++ ++ ++ ++ noreplay ++ ++ Terminates read-ahead ++ replay. ++ ++ ++ ++ ++ ++ ++ ++ Return Value ++ ++ On failure, these calls return a negative ++ errno-style error code. It is generally recommended to ++ ignore the return value of this call. ++ ++ ++ ++ Notes ++ ++ This function is provided by the reference ++ implementation of APIs for controlling boot-time ++ read-ahead and distributed with the systemd ++ package. The algorithm it implements is simple, and ++ can easily be reimplemented in daemons if it is ++ important to support this interface without using the ++ reference implementation. ++ ++ Internally, this function creates a file in ++ /run/systemd/readahead/ which is ++ then used as flag file to notify the read-ahead ++ subsystem. ++ ++ For details about the algorithm check the ++ liberally licensed reference implementation sources: ++ ++ and ++ ++ sd_readahead() is ++ implemented in the reference implementation's drop-in ++ sd-readahead.c and ++ 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 ++ sd-readahead3 ++ ++ If -DDISABLE_SYSTEMD is set during compilation, ++ this function will always return 0 and otherwise ++ become a NOP. ++ ++ ++ ++ Examples ++ ++ ++ Cancelling all read-ahead operations ++ ++ During boots where SELinux has to ++ relabel the file system hierarchy, it will ++ create a large amount of disk accesses that ++ are not necessary during normal boots. Hence ++ it is a good idea to disable both read-ahead replay and read-ahead collection. ++ ++ ++ sd_readahead("cancel"); ++sd_readahead("noreplay"); ++ ++ ++ ++ ++ ++ See Also ++ ++ systemd1, ++ sd-readahead3, ++ daemon7 ++ ++ ++ ++ +diff --git a/man/systemd-notify.xml b/man/systemd-notify.xml +index 06d5ae5..46ede1a 100644 +--- a/man/systemd-notify.xml ++++ b/man/systemd-notify.xml +@@ -127,6 +127,17 @@ + sd_booted3. + + ++ ++ ++ ++ Controls disk ++ read-ahead operations. The argument ++ must be a string, and either "cancel", ++ "done" or "noreplay". For details ++ about the semantics of this option see ++ sd_readahead3. ++ ++ + + + +diff --git a/man/systemd-readahead-replay.service.xml b/man/systemd-readahead-replay.service.xml +new file mode 100644 +index 0000000..669fe78 +--- /dev/null ++++ b/man/systemd-readahead-replay.service.xml +@@ -0,0 +1,203 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ systemd-readahead-replay.service ++ systemd ++ ++ ++ ++ Developer ++ Lennart ++ Poettering ++ lennart@poettering.net ++ ++ ++ ++ ++ ++ systemd-readahead-replay.service ++ 8 ++ ++ ++ ++ systemd-readahead-replay.service ++ systemd-readahead-collect.service ++ systemd-readahead-done.service ++ systemd-readahead-done.timer ++ systemd-readahead ++ Disk read ahead logic ++ ++ ++ ++ systemd-readahead-replay.service ++ systemd-readahead-collect.service ++ systemd-readahead-done.service ++ systemd-readahead-done.timer ++ ++ /usr/lib/systemd/systemd-readahead/systemd-readahead ++ OPTIONS ++ COMMAND ++ DIRECTORY | FILE ++ ++ ++ ++ ++ Description ++ ++ systemd-readahead-collect.service ++ is a service that collects disk usage patterns at boot ++ time. systemd-readahead-replay.service ++ is a service that replays this access data collected ++ at the subsequent boot. Since disks tend to be ++ magnitudes slower than RAM, this is intended to improve ++ boot speeds by pre-loading early at boot all data on ++ disk that is known to be read for the complete boot ++ process. ++ ++ systemd-readahead-done.service ++ is executed a short while after boot completed and signals ++ systemd-readahead-collect.service ++ to end data collection. On this signal, this service ++ will then sort the collected disk accesses and store ++ information about them in ++ /.readahead. ++ ++ Normally, both ++ systemd-readahead-collect.service ++ and ++ systemd-readahead-replay.service ++ are activated at boot so that access patterns from the ++ preceding boot are replayed and new data collected ++ for the subsequent boot. However, on read-only media ++ where the collected data cannot be stored, it might ++ be a good idea to disable ++ systemd-readahead-collect.service. ++ ++ On rotating media, when replaying disk accesses ++ at early boot, ++ systemd-readahead-replay.service ++ will order read requests by their location on disk. On ++ non-rotating media, they will be ordered by their ++ original access timestamp. If the file system supports ++ it, ++ systemd-readahead-collect.service ++ will also defragment and rearrange files on disk to ++ optimize subsequent boot times. ++ ++ ++ ++ Options ++ ++ systemd-readahead understands ++ the following options: ++ ++ ++ ++ ++ ++ Maximum number of ++ files to read ahead. Only valid ++ for thes collect ++ command. ++ ++ ++ ++ ++ ++ Maximum size of files ++ in bytes to read ahead. Only valid ++ for the collect ++ and replay ++ commands. ++ ++ ++ ++ ++ ++ Maximum time in microseconds ++ to spend collecting data. Only valid ++ for the collect ++ command. ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Commands ++ ++ The following commands are understood by ++ systemd-readahead: ++ ++ collect ++ [DIRECTORY] ++ ++ Collect read-ahead data on ++ early boot. When terminating, it will ++ write out a pack file to the indicated ++ directory containing the read-ahead ++ data. ++ ++ ++ ++ ++ replay ++ [DIRECTORY] ++ ++ Perform read-ahead on the ++ specified directory tree. ++ ++ ++ ++ ++ analyze ++ [FILE] ++ ++ Dumps the content of the ++ read-ahead pack file to the ++ terminal. For each file, the ++ output lists approximately how ++ much will be read ahead by ++ the replay ++ command. ++ ++ ++ ++ ++ ++ ++ ++ See Also ++ ++ systemd1 ++ ++ ++ ++ +diff --git a/po/POTFILES.skip b/po/POTFILES.skip +index 51254ec..b552029 100644 +--- a/po/POTFILES.skip ++++ b/po/POTFILES.skip +@@ -17,5 +17,6 @@ src/hostname/hostnamed.c + src/locale/localed.c + src/core/org.freedesktop.systemd1.policy.in + src/timedate/timedated.c ++units/systemd-readahead-done.service.in + units/user@.service.in + units/debug-shell.service.in +diff --git a/shell-completion/zsh/_systemd b/shell-completion/zsh/_systemd +index 58b1c7b..06f03bd 100644 +--- a/shell-completion/zsh/_systemd ++++ b/shell-completion/zsh/_systemd +@@ -63,7 +63,8 @@ case "$service" in + '--ready[Inform the init system about service start-up completion.]' \ + '--pid=[Inform the init system about the main PID of the daemon]' \ + '--status=[Send a free-form status string for the daemon to the init systemd]' \ +- '--booted[Returns 0 if the system was booted up with systemd]' ++ '--booted[Returns 0 if the system was booted up with systemd]' \ ++ '--readahead=[Controls disk read-ahead operations]:arguments:(cancel done noreply)' + ;; + systemd-tty-ask-password-agent) + _arguments \ +diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c +index 05061c0..dfbca87 100644 +--- a/src/cryptsetup/cryptsetup-generator.c ++++ b/src/cryptsetup/cryptsetup-generator.c +@@ -111,7 +111,7 @@ static int create_disk( + "Conflicts=umount.target\n" + "BindsTo=dev-mapper-%i.device\n" + "IgnoreOnIsolate=true\n" +- "After=cryptsetup-pre.target\n", ++ "After=systemd-readahead-collect.service systemd-readahead-replay.service cryptsetup-pre.target\n", + f); + + if (!nofail) +diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c +index 5c58b58..7d5a6c6 100644 +--- a/src/gpt-auto-generator/gpt-auto-generator.c ++++ b/src/gpt-auto-generator/gpt-auto-generator.c +@@ -133,6 +133,7 @@ static int add_cryptsetup(const char *id, const char *what, bool rw, char **devi + "Before=umount.target cryptsetup.target\n" + "After=%s\n" + "IgnoreOnIsolate=true\n" ++ "After=systemd-readahead-collect.service systemd-readahead-replay.service\n\n" + "[Service]\n" + "Type=oneshot\n" + "RemainAfterExit=yes\n" +diff --git a/src/notify/notify.c b/src/notify/notify.c +index f98075d..e4a128b 100644 +--- a/src/notify/notify.c ++++ b/src/notify/notify.c +@@ -31,6 +31,7 @@ + #include "strv.h" + #include "util.h" + #include "log.h" ++#include "sd-readahead.h" + #include "build.h" + #include "env-util.h" + +@@ -38,6 +39,7 @@ static bool arg_ready = false; + static pid_t arg_pid = 0; + static const char *arg_status = NULL; + static bool arg_booted = false; ++static const char *arg_readahead = NULL; + + static void help(void) { + printf("%s [OPTIONS...] [VARIABLE=VALUE...]\n\n" +@@ -48,6 +50,7 @@ static void help(void) { + " --pid[=PID] Set main pid of daemon\n" + " --status=TEXT Set status text\n" + " --booted Check if the system was booted up with systemd\n", ++ " --readahead=ACTION Controls read-ahead operations\n", + program_invocation_short_name); + } + +@@ -59,6 +62,7 @@ static int parse_argv(int argc, char *argv[]) { + ARG_PID, + ARG_STATUS, + ARG_BOOTED, ++ ARG_READAHEAD + }; + + static const struct option options[] = { +@@ -68,6 +72,7 @@ static int parse_argv(int argc, char *argv[]) { + { "pid", optional_argument, NULL, ARG_PID }, + { "status", required_argument, NULL, ARG_STATUS }, + { "booted", no_argument, NULL, ARG_BOOTED }, ++ { "readahead", required_argument, NULL, ARG_READAHEAD }, + {} + }; + +@@ -113,6 +118,10 @@ static int parse_argv(int argc, char *argv[]) { + arg_booted = true; + break; + ++ case ARG_READAHEAD: ++ arg_readahead = optarg; ++ break; ++ + case '?': + return -EINVAL; + +@@ -125,7 +134,8 @@ static int parse_argv(int argc, char *argv[]) { + !arg_ready && + !arg_status && + !arg_pid && +- !arg_booted) { ++ !arg_booted && ++ !arg_readahead) { + help(); + return -EINVAL; + } +@@ -150,6 +160,14 @@ int main(int argc, char* argv[]) { + if (arg_booted) + return sd_booted() <= 0; + ++ if (arg_readahead) { ++ r = sd_readahead(arg_readahead); ++ if (r < 0) { ++ log_error("Failed to issue read-ahead control command: %s", strerror(-r)); ++ goto finish; ++ } ++ } ++ + if (arg_ready) + our_env[i++] = (char*) "READY=1"; + +diff --git a/src/readahead/Makefile b/src/readahead/Makefile +new file mode 120000 +index 0000000..d0b0e8e +--- /dev/null ++++ b/src/readahead/Makefile +@@ -0,0 +1 @@ ++../Makefile +\ No newline at end of file +diff --git a/src/readahead/readahead-analyze.c b/src/readahead/readahead-analyze.c +new file mode 100644 +index 0000000..76db3cb +--- /dev/null ++++ b/src/readahead/readahead-analyze.c +@@ -0,0 +1,146 @@ ++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ ++ ++/*** ++ This file is part of systemd. ++ ++ Copyright 2012 Auke Kok ++ ++ systemd is free software; you can redistribute it and/or modify it ++ under the terms of the GNU Lesser General Public License as published by ++ the Free Software Foundation; either version 2.1 of the License, or ++ (at your option) any later version. ++ ++ systemd is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with systemd; If not, see . ++***/ ++ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "readahead-common.h" ++ ++int main_analyze(const char *pack_path) { ++ char line[LINE_MAX]; ++ _cleanup_fclose_ FILE *pack = NULL; ++ int a; ++ int missing = 0; ++ size_t tsize = 0; ++ ++ if (!pack_path) ++ pack_path = "/.readahead"; ++ ++ pack = fopen(pack_path, "re"); ++ if (!pack) { ++ log_error("Pack file missing."); ++ goto fail; ++ } ++ ++ if (!fgets(line, sizeof(line), pack)) { ++ log_error("Pack file corrupt."); ++ goto fail; ++ } ++ ++ char_array_0(line); ++ ++ if (!endswith(line, READAHEAD_PACK_FILE_VERSION)) { ++ log_error("Pack file version incompatible with this parser."); ++ goto fail; ++ } ++ ++ if ((a = getc(pack)) == EOF) { ++ log_error("Pack file corrupt."); ++ goto fail; ++ } ++ ++ fputs(" pct sections size: path\n" ++ " === ======== ====: ====\n", stdout); ++ ++ for (;;) { ++ char path[PATH_MAX]; ++ struct stat st; ++ uint64_t inode; ++ int pages = 0; ++ int sections = 0; ++ ++ if (!fgets(path, sizeof(path), pack)) ++ break; /* done */ ++ ++ path[strlen(path)-1] = 0; ++ ++ if (fread(&inode, sizeof(inode), 1, pack) != 1) { ++ log_error("Pack file corrupt."); ++ goto fail; ++ } ++ ++ for (;;) { ++ uint32_t b, c; ++ ++ if (fread(&b, sizeof(b), 1, pack) != 1 || ++ fread(&c, sizeof(c), 1, pack) != 1) { ++ log_error("Pack file corrupt."); ++ goto fail; ++ } ++ if ((b == 0) && (c == 0)) ++ break; ++ ++ /* Uncomment this to get all the chunks separately ++ printf(" %d: %d %d\n", sections, b, c); ++ */ ++ ++ pages += (c - b); ++ sections++; ++ } ++ ++ if (stat(path, &st) == 0) { ++ off_t size; ++ ++ if (sections == 0) ++ size = st.st_size; ++ else ++ size = pages * page_size(); ++ ++ tsize += size; ++ ++ printf(" %4jd%% (%2d) %12jd: %s\n", ++ (intmax_t) (sections && st.st_size ? size * 100 / st.st_size : 100), ++ sections ? sections : 1, ++ (intmax_t) size, ++ path); ++ } else { ++ printf(" %4dp (%2d) %12s: %s (MISSING)\n", ++ sections ? pages : -1, ++ sections ? sections : 1, ++ "???", ++ path); ++ missing++; ++ } ++ ++ } ++ ++ printf("\nHOST: %s" ++ "TYPE: %c\n" ++ "MISSING: %d\n" ++ "TOTAL: %zu\n", ++ line, ++ a, ++ missing, ++ tsize); ++ ++ return EXIT_SUCCESS; ++ ++fail: ++ return EXIT_FAILURE; ++} +diff --git a/src/readahead/readahead-collect.c b/src/readahead/readahead-collect.c +new file mode 100644 +index 0000000..822a803 +--- /dev/null ++++ b/src/readahead/readahead-collect.c +@@ -0,0 +1,650 @@ ++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ ++ ++/*** ++ This file is part of systemd. ++ ++ Copyright 2010 Lennart Poettering ++ ++ systemd is free software; you can redistribute it and/or modify it ++ under the terms of the GNU Lesser General Public License as published by ++ the Free Software Foundation; either version 2.1 of the License, or ++ (at your option) any later version. ++ ++ systemd is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with systemd; If not, see . ++***/ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#ifdef HAVE_LINUX_BTRFS_H ++#include ++#endif ++ ++#ifdef HAVE_FANOTIFY_INIT ++#include ++#endif ++ ++#include "systemd/sd-daemon.h" ++ ++#include "missing.h" ++#include "util.h" ++#include "set.h" ++#include "ioprio.h" ++#include "readahead-common.h" ++#include "virt.h" ++ ++/* fixme: ++ * ++ * - detect ssd on btrfs/lvm... ++ * - read ahead directories ++ * - gzip? ++ * - remount rw? ++ * - handle files where nothing is in mincore ++ * - does ioprio_set work with fadvise()? ++ */ ++ ++static ReadaheadShared *shared = NULL; ++static usec_t starttime; ++ ++/* Avoid collisions with the NULL pointer */ ++#define SECTOR_TO_PTR(s) ULONG_TO_PTR((s)+1) ++#define PTR_TO_SECTOR(p) (PTR_TO_ULONG(p)-1) ++ ++static int btrfs_defrag(int fd) { ++ struct btrfs_ioctl_vol_args data = { .fd = fd }; ++ ++ return ioctl(fd, BTRFS_IOC_DEFRAG, &data); ++} ++ ++static int pack_file(FILE *pack, const char *fn, bool on_btrfs) { ++ struct stat st; ++ void *start = MAP_FAILED; ++ uint8_t *vec; ++ uint32_t b, c; ++ uint64_t inode; ++ size_t l, pages; ++ bool mapped; ++ int r = 0, fd = -1, k; ++ ++ assert(pack); ++ assert(fn); ++ ++ fd = open(fn, O_RDONLY|O_CLOEXEC|O_NOATIME|O_NOCTTY|O_NOFOLLOW); ++ if (fd < 0) { ++ ++ if (errno == ENOENT) ++ return 0; ++ ++ if (errno == EPERM || errno == EACCES) ++ return 0; ++ ++ log_warning("open(%s) failed: %m", fn); ++ r = -errno; ++ goto finish; ++ } ++ ++ k = file_verify(fd, fn, arg_file_size_max, &st); ++ if (k <= 0) { ++ r = k; ++ goto finish; ++ } ++ ++ if (on_btrfs) ++ btrfs_defrag(fd); ++ ++ l = PAGE_ALIGN(st.st_size); ++ start = mmap(NULL, l, PROT_READ, MAP_SHARED, fd, 0); ++ if (start == MAP_FAILED) { ++ log_warning("mmap(%s) failed: %m", fn); ++ r = -errno; ++ goto finish; ++ } ++ ++ pages = l / page_size(); ++ vec = alloca0(pages); ++ if (mincore(start, l, vec) < 0) { ++ log_warning("mincore(%s) failed: %m", fn); ++ r = -errno; ++ goto finish; ++ } ++ ++ fputs(fn, pack); ++ fputc('\n', pack); ++ ++ /* Store the inode, so that we notice when the file is deleted */ ++ inode = (uint64_t) st.st_ino; ++ fwrite(&inode, sizeof(inode), 1, pack); ++ ++ mapped = false; ++ for (c = 0; c < pages; c++) { ++ bool new_mapped = !!(vec[c] & 1); ++ ++ if (!mapped && new_mapped) ++ b = c; ++ else if (mapped && !new_mapped) { ++ fwrite(&b, sizeof(b), 1, pack); ++ fwrite(&c, sizeof(c), 1, pack); ++ ++ log_debug("%s: page %u to %u", fn, b, c); ++ } ++ ++ mapped = new_mapped; ++ } ++ ++ /* We don't write any range data if we should read the entire file */ ++ if (mapped && b > 0) { ++ fwrite(&b, sizeof(b), 1, pack); ++ fwrite(&c, sizeof(c), 1, pack); ++ ++ log_debug("%s: page %u to %u", fn, b, c); ++ } ++ ++ /* End marker */ ++ b = 0; ++ fwrite(&b, sizeof(b), 1, pack); ++ fwrite(&b, sizeof(b), 1, pack); ++ ++finish: ++ if (start != MAP_FAILED) ++ munmap(start, l); ++ ++ safe_close(fd); ++ ++ return r; ++} ++ ++static unsigned long fd_first_block(int fd) { ++ struct { ++ struct fiemap fiemap; ++ struct fiemap_extent extent; ++ } data = { ++ .fiemap.fm_length = ~0ULL, ++ .fiemap.fm_extent_count = 1, ++ }; ++ ++ if (ioctl(fd, FS_IOC_FIEMAP, &data) < 0) ++ return 0; ++ ++ if (data.fiemap.fm_mapped_extents <= 0) ++ return 0; ++ ++ if (data.fiemap.fm_extents[0].fe_flags & FIEMAP_EXTENT_UNKNOWN) ++ return 0; ++ ++ return (unsigned long) data.fiemap.fm_extents[0].fe_physical; ++} ++ ++struct item { ++ const char *path; ++ unsigned long block; ++ unsigned long bin; ++}; ++ ++static int qsort_compare(const void *a, const void *b) { ++ const struct item *i, *j; ++ ++ i = a; ++ j = b; ++ ++ /* sort by bin first */ ++ if (i->bin < j->bin) ++ return -1; ++ if (i->bin > j->bin) ++ return 1; ++ ++ /* then sort by sector */ ++ if (i->block < j->block) ++ return -1; ++ if (i->block > j->block) ++ return 1; ++ ++ return strcmp(i->path, j->path); ++} ++ ++static int collect(const char *root) { ++ enum { ++ FD_FANOTIFY, /* Get the actual fs events */ ++ FD_SIGNAL, ++ FD_INOTIFY, /* We get notifications to quit early via this fd */ ++ _FD_MAX ++ }; ++ struct pollfd pollfd[_FD_MAX] = {}; ++ int fanotify_fd = -1, signal_fd = -1, inotify_fd = -1, r = 0; ++ pid_t my_pid; ++ Hashmap *files = NULL; ++ Iterator i; ++ char *p, *q; ++ sigset_t mask; ++ FILE *pack = NULL; ++ char *pack_fn_new = NULL, *pack_fn = NULL; ++ bool on_ssd, on_btrfs; ++ struct statfs sfs; ++ usec_t not_after; ++ uint64_t previous_block_readahead; ++ bool previous_block_readahead_set = false; ++ ++ assert(root); ++ ++ if (asprintf(&pack_fn, "%s/.readahead", root) < 0) { ++ r = log_oom(); ++ goto finish; ++ } ++ ++ starttime = now(CLOCK_MONOTONIC); ++ ++ /* If there's no pack file yet we lower the kernel readahead ++ * so that mincore() is accurate. If there is a pack file ++ * already we assume it is accurate enough so that kernel ++ * readahead is never triggered. */ ++ previous_block_readahead_set = ++ access(pack_fn, F_OK) < 0 && ++ block_get_readahead(root, &previous_block_readahead) >= 0 && ++ block_set_readahead(root, 8*1024) >= 0; ++ ++ if (ioprio_set(IOPRIO_WHO_PROCESS, getpid(), IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0)) < 0) ++ log_warning("Failed to set IDLE IO priority class: %m"); ++ ++ assert_se(sigemptyset(&mask) == 0); ++ sigset_add_many(&mask, SIGINT, SIGTERM, -1); ++ assert_se(sigprocmask(SIG_SETMASK, &mask, NULL) == 0); ++ ++ if ((signal_fd = signalfd(-1, &mask, SFD_NONBLOCK|SFD_CLOEXEC)) < 0) { ++ log_error("signalfd(): %m"); ++ r = -errno; ++ goto finish; ++ } ++ ++ files = hashmap_new(&string_hash_ops); ++ if (!files) { ++ log_error("Failed to allocate set."); ++ r = -ENOMEM; ++ goto finish; ++ } ++ ++ fanotify_fd = fanotify_init(FAN_CLOEXEC|FAN_NONBLOCK, O_RDONLY|O_LARGEFILE|O_CLOEXEC|O_NOATIME); ++ if (fanotify_fd < 0) { ++ log_error("Failed to create fanotify object: %m"); ++ r = -errno; ++ goto finish; ++ } ++ ++ if (fanotify_mark(fanotify_fd, FAN_MARK_ADD|FAN_MARK_MOUNT, FAN_OPEN, AT_FDCWD, root) < 0) { ++ log_error("Failed to mark %s: %m", root); ++ r = -errno; ++ goto finish; ++ } ++ ++ inotify_fd = open_inotify(); ++ if (inotify_fd < 0) { ++ r = inotify_fd; ++ goto finish; ++ } ++ ++ not_after = now(CLOCK_MONOTONIC) + arg_timeout; ++ ++ my_pid = getpid(); ++ ++ pollfd[FD_FANOTIFY].fd = fanotify_fd; ++ pollfd[FD_FANOTIFY].events = POLLIN; ++ pollfd[FD_SIGNAL].fd = signal_fd; ++ pollfd[FD_SIGNAL].events = POLLIN; ++ pollfd[FD_INOTIFY].fd = inotify_fd; ++ pollfd[FD_INOTIFY].events = POLLIN; ++ ++ sd_notify(0, ++ "READY=1\n" ++ "STATUS=Collecting readahead data"); ++ ++ log_debug("Collecting..."); ++ ++ if (access("/run/systemd/readahead/cancel", F_OK) >= 0) { ++ log_debug("Collection canceled"); ++ r = -ECANCELED; ++ goto finish; ++ } ++ ++ if (access("/run/systemd/readahead/done", F_OK) >= 0) { ++ log_debug("Got termination request"); ++ goto done; ++ } ++ ++ for (;;) { ++ union { ++ struct fanotify_event_metadata metadata; ++ char buffer[4096]; ++ } data; ++ ssize_t n; ++ struct fanotify_event_metadata *m; ++ usec_t t; ++ int h; ++ ++ if (hashmap_size(files) > arg_files_max) { ++ log_debug("Reached maximum number of read ahead files, ending collection."); ++ break; ++ } ++ ++ t = now(CLOCK_MONOTONIC); ++ if (t >= not_after) { ++ log_debug("Reached maximum collection time, ending collection."); ++ break; ++ } ++ ++ if ((h = poll(pollfd, _FD_MAX, (int) ((not_after - t) / USEC_PER_MSEC))) < 0) { ++ ++ if (errno == EINTR) ++ continue; ++ ++ log_error("poll(): %m"); ++ r = -errno; ++ goto finish; ++ } ++ ++ if (h == 0) { ++ log_debug("Reached maximum collection time, ending collection."); ++ break; ++ } ++ ++ if (pollfd[FD_SIGNAL].revents) { ++ log_debug("Got signal."); ++ break; ++ } ++ ++ if (pollfd[FD_INOTIFY].revents) { ++ uint8_t inotify_buffer[sizeof(struct inotify_event) + FILENAME_MAX]; ++ struct inotify_event *e; ++ ++ if ((n = read(inotify_fd, &inotify_buffer, sizeof(inotify_buffer))) < 0) { ++ if (errno == EINTR || errno == EAGAIN) ++ continue; ++ ++ log_error("Failed to read inotify event: %m"); ++ r = -errno; ++ goto finish; ++ } ++ ++ e = (struct inotify_event*) inotify_buffer; ++ while (n > 0) { ++ size_t step; ++ ++ if ((e->mask & IN_CREATE) && streq(e->name, "cancel")) { ++ log_debug("Collection canceled"); ++ r = -ECANCELED; ++ goto finish; ++ } ++ ++ if ((e->mask & IN_CREATE) && streq(e->name, "done")) { ++ log_debug("Got termination request"); ++ goto done; ++ } ++ ++ step = sizeof(struct inotify_event) + e->len; ++ assert(step <= (size_t) n); ++ ++ e = (struct inotify_event*) ((uint8_t*) e + step); ++ n -= step; ++ } ++ } ++ ++ n = read(fanotify_fd, &data, sizeof(data)); ++ if (n < 0) { ++ ++ if (errno == EINTR || errno == EAGAIN) ++ continue; ++ ++ /* fanotify sometimes returns EACCES on read() ++ * where it shouldn't. For now let's just ++ * ignore it here (which is safe), but ++ * eventually this should be ++ * dropped when the kernel is fixed. ++ * ++ * https://bugzilla.redhat.com/show_bug.cgi?id=707577 */ ++ if (errno == EACCES) ++ continue; ++ ++ log_error("Failed to read event: %m"); ++ r = -errno; ++ goto finish; ++ } ++ ++ for (m = &data.metadata; FAN_EVENT_OK(m, n); m = FAN_EVENT_NEXT(m, n)) { ++ char fn[sizeof("/proc/self/fd/") + DECIMAL_STR_MAX(int)]; ++ int k; ++ ++ if (m->fd < 0) ++ goto next_iteration; ++ ++ if (m->pid == my_pid) ++ goto next_iteration; ++ ++ __sync_synchronize(); ++ if (m->pid == shared->replay) ++ goto next_iteration; ++ ++ snprintf(fn, sizeof(fn), "/proc/self/fd/%i", m->fd); ++ k = readlink_malloc(fn, &p); ++ if (k >= 0) { ++ if (startswith(p, "/tmp") || ++ endswith(p, " (deleted)") || ++ hashmap_get(files, p)) ++ /* Not interesting, or ++ * already read */ ++ free(p); ++ else { ++ unsigned long ul; ++ usec_t entrytime; ++ struct item *entry; ++ ++ entry = new0(struct item, 1); ++ if (!entry) { ++ r = log_oom(); ++ goto finish; ++ } ++ ++ ul = fd_first_block(m->fd); ++ ++ entrytime = now(CLOCK_MONOTONIC); ++ ++ entry->block = ul; ++ entry->path = strdup(p); ++ if (!entry->path) { ++ free(entry); ++ r = log_oom(); ++ goto finish; ++ } ++ entry->bin = (entrytime - starttime) / 2000000; ++ ++ k = hashmap_put(files, p, entry); ++ if (k < 0) { ++ log_warning("hashmap_put() failed: %s", strerror(-k)); ++ free(p); ++ } ++ } ++ ++ } else ++ log_warning("readlink(%s) failed: %s", fn, strerror(-k)); ++ ++ next_iteration: ++ safe_close(m->fd); ++ } ++ } ++ ++done: ++ fanotify_fd = safe_close(fanotify_fd); ++ ++ log_debug("Writing Pack File..."); ++ ++ on_ssd = fs_on_ssd(root) > 0; ++ log_debug("On SSD: %s", yes_no(on_ssd)); ++ ++ on_btrfs = statfs(root, &sfs) >= 0 && F_TYPE_EQUAL(sfs.f_type, BTRFS_SUPER_MAGIC); ++ log_debug("On btrfs: %s", yes_no(on_btrfs)); ++ ++ if (asprintf(&pack_fn_new, "%s/.readahead.new", root) < 0) { ++ r = log_oom(); ++ goto finish; ++ } ++ ++ pack = fopen(pack_fn_new, "we"); ++ if (!pack) { ++ log_error("Failed to open pack file: %m"); ++ r = -errno; ++ goto finish; ++ } ++ ++ fputs(CANONICAL_HOST READAHEAD_PACK_FILE_VERSION, pack); ++ putc(on_ssd ? 'S' : 'R', pack); ++ ++ if (on_ssd || on_btrfs) { ++ ++ /* On SSD or on btrfs, just write things out in the ++ * order the files were accessed. */ ++ ++ HASHMAP_FOREACH_KEY(q, p, files, i) ++ pack_file(pack, p, on_btrfs); ++ } else { ++ unsigned n; ++ ++ /* On rotating media, order things by the block ++ * numbers */ ++ ++ log_debug("Ordering..."); ++ ++ n = hashmap_size(files); ++ if (n) { ++ _cleanup_free_ struct item *ordered; ++ struct item *j; ++ unsigned k; ++ ++ ordered = new(struct item, n); ++ if (!ordered) { ++ r = log_oom(); ++ goto finish; ++ } ++ ++ j = ordered; ++ HASHMAP_FOREACH_KEY(q, p, files, i) { ++ memcpy(j, q, sizeof(struct item)); ++ j++; ++ } ++ ++ assert(ordered + n == j); ++ ++ qsort(ordered, n, sizeof(struct item), qsort_compare); ++ ++ for (k = 0; k < n; k++) ++ pack_file(pack, ordered[k].path, on_btrfs); ++ } else ++ log_warning("No pack files"); ++ } ++ ++ log_debug("Finalizing..."); ++ ++ fflush(pack); ++ ++ if (ferror(pack)) { ++ log_error("Failed to write pack file."); ++ r = -EIO; ++ goto finish; ++ } ++ ++ if (rename(pack_fn_new, pack_fn) < 0) { ++ log_error("Failed to rename readahead file: %m"); ++ r = -errno; ++ goto finish; ++ } ++ ++ fclose(pack); ++ pack = NULL; ++ ++ log_debug("Done."); ++ ++finish: ++ safe_close(fanotify_fd); ++ safe_close(signal_fd); ++ safe_close(inotify_fd); ++ ++ if (pack) { ++ fclose(pack); ++ unlink(pack_fn_new); ++ } ++ free(pack_fn_new); ++ free(pack_fn); ++ ++ while ((p = hashmap_steal_first_key(files))) ++ free(p); ++ ++ hashmap_free(files); ++ ++ if (previous_block_readahead_set) { ++ uint64_t bytes; ++ ++ /* Restore the original kernel readahead setting if we ++ * changed it, and nobody has overwritten it since ++ * yet. */ ++ if (block_get_readahead(root, &bytes) >= 0 && bytes == 8*1024) ++ block_set_readahead(root, previous_block_readahead); ++ } ++ ++ return r; ++} ++ ++int main_collect(const char *root) { ++ ++ if (!root) ++ root = "/"; ++ ++ /* Skip this step on read-only media. Note that we check the ++ * underlying block device here, not he read-only flag of the ++ * file system on top, since that one is most likely mounted ++ * read-only anyway at boot, even if the underlying block ++ * device is theoretically writable. */ ++ if (fs_on_read_only(root) > 0) { ++ log_info("Disabling readahead collector due to read-only media."); ++ return EXIT_SUCCESS; ++ } ++ ++ if (!enough_ram()) { ++ log_info("Disabling readahead collector due to low memory."); ++ return EXIT_SUCCESS; ++ } ++ ++ shared = shared_get(); ++ if (!shared) ++ return EXIT_FAILURE; ++ ++ shared->collect = getpid(); ++ __sync_synchronize(); ++ ++ if (collect(root) < 0) ++ return EXIT_FAILURE; ++ ++ return EXIT_SUCCESS; ++} +diff --git a/src/readahead/readahead-common.c b/src/readahead/readahead-common.c +new file mode 100644 +index 0000000..3ca48a7 +--- /dev/null ++++ b/src/readahead/readahead-common.c +@@ -0,0 +1,398 @@ ++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ ++ ++/*** ++ This file is part of systemd. ++ ++ Copyright 2010 Lennart Poettering ++ ++ systemd is free software; you can redistribute it and/or modify it ++ under the terms of the GNU Lesser General Public License as published by ++ the Free Software Foundation; either version 2.1 of the License, or ++ (at your option) any later version. ++ ++ systemd is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with systemd; If not, see . ++***/ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "log.h" ++#include "readahead-common.h" ++#include "util.h" ++#include "missing.h" ++#include "fileio.h" ++#include "libudev.h" ++#include "udev-util.h" ++ ++int file_verify(int fd, const char *fn, off_t file_size_max, struct stat *st) { ++ assert(fd >= 0); ++ assert(fn); ++ assert(st); ++ ++ if (fstat(fd, st) < 0) { ++ log_warning("fstat(%s) failed: %m", fn); ++ return -errno; ++ } ++ ++ if (!S_ISREG(st->st_mode)) { ++ log_debug("Not preloading special file %s", fn); ++ return 0; ++ } ++ ++ if (st->st_size <= 0 || st->st_size > file_size_max) { ++ assert_cc(sizeof(st->st_size) == 8); ++ log_debug("Not preloading file %s with size out of bounds %"PRIu64, ++ fn, st->st_size); ++ return 0; ++ } ++ ++ return 1; ++} ++ ++int fs_on_ssd(const char *p) { ++ struct stat st; ++ _cleanup_udev_unref_ struct udev *udev = NULL; ++ _cleanup_udev_device_unref_ struct udev_device *udev_device = NULL; ++ struct udev_device *look_at = NULL; ++ const char *devtype, *rotational, *model, *id; ++ int r; ++ ++ assert(p); ++ ++ if (stat(p, &st) < 0) ++ return -errno; ++ ++ if (major(st.st_dev) == 0) { ++ _cleanup_fclose_ FILE *f = NULL; ++ int mount_id; ++ union file_handle_union h = { .handle.handle_bytes = MAX_HANDLE_SZ, }; ++ ++ /* Might be btrfs, which exposes "ssd" as mount flag if it is on ssd. ++ * ++ * We first determine the mount ID here, if we can, ++ * and then lookup the mount ID in mountinfo to find ++ * the mount options. */ ++ ++ r = name_to_handle_at(AT_FDCWD, p, &h.handle, &mount_id, AT_SYMLINK_FOLLOW); ++ if (r < 0) ++ return false; ++ ++ f = fopen("/proc/self/mountinfo", "re"); ++ if (!f) ++ return false; ++ ++ for (;;) { ++ char line[LINE_MAX], *e; ++ _cleanup_free_ char *opts = NULL; ++ int mid; ++ ++ if (!fgets(line, sizeof(line), f)) ++ return false; ++ ++ truncate_nl(line); ++ ++ if (sscanf(line, "%i", &mid) != 1) ++ continue; ++ ++ if (mid != mount_id) ++ continue; ++ ++ e = strstr(line, " - "); ++ if (!e) ++ continue; ++ ++ if (sscanf(e+3, "%*s %*s %ms", &opts) != 1) ++ continue; ++ ++ if (streq(opts, "ssd") || startswith(opts, "ssd,") || endswith(opts, ",ssd") || strstr(opts, ",ssd,")) ++ return true; ++ } ++ ++ return false; ++ } ++ ++ udev = udev_new(); ++ if (!udev) ++ return -ENOMEM; ++ ++ udev_device = udev_device_new_from_devnum(udev, 'b', st.st_dev); ++ if (!udev_device) ++ return false; ++ ++ devtype = udev_device_get_property_value(udev_device, "DEVTYPE"); ++ if (devtype && streq(devtype, "partition")) ++ look_at = udev_device_get_parent(udev_device); ++ else ++ look_at = udev_device; ++ ++ if (!look_at) ++ return false; ++ ++ /* First, try high-level property */ ++ id = udev_device_get_property_value(look_at, "ID_SSD"); ++ if (id) ++ return streq(id, "1"); ++ ++ /* Second, try kernel attribute */ ++ rotational = udev_device_get_sysattr_value(look_at, "queue/rotational"); ++ if (rotational) ++ return streq(rotational, "0"); ++ ++ /* Finally, fallback to heuristics */ ++ look_at = udev_device_get_parent(look_at); ++ if (!look_at) ++ return false; ++ ++ model = udev_device_get_sysattr_value(look_at, "model"); ++ if (model) ++ return !!strstr(model, "SSD"); ++ ++ return false; ++} ++ ++int fs_on_read_only(const char *p) { ++ struct stat st; ++ _cleanup_udev_unref_ struct udev *udev = NULL; ++ _cleanup_udev_device_unref_ struct udev_device *udev_device = NULL; ++ const char *read_only; ++ ++ assert(p); ++ ++ if (stat(p, &st) < 0) ++ return -errno; ++ ++ if (major(st.st_dev) == 0) ++ return false; ++ ++ udev = udev_new(); ++ if (!udev) ++ return -ENOMEM; ++ ++ udev_device = udev_device_new_from_devnum(udev, 'b', st.st_dev); ++ if (!udev_device) ++ return false; ++ ++ read_only = udev_device_get_sysattr_value(udev_device, "ro"); ++ if (read_only) ++ return streq(read_only, "1"); ++ ++ return false; ++} ++ ++bool enough_ram(void) { ++ struct sysinfo si; ++ ++ assert_se(sysinfo(&si) >= 0); ++ ++ /* Enable readahead only with at least 128MB memory */ ++ return si.totalram > 127 * 1024*1024 / si.mem_unit; ++} ++ ++static void mkdirs(void) { ++ if (mkdir("/run/systemd", 0755) && errno != EEXIST) ++ log_warning("Failed to create /run/systemd: %m"); ++ if (mkdir("/run/systemd/readahead", 0755) && errno != EEXIST) ++ log_warning("Failed to create /run/systemd: %m"); ++} ++ ++int open_inotify(void) { ++ int fd; ++ ++ fd = inotify_init1(IN_CLOEXEC|IN_NONBLOCK); ++ if (fd < 0) { ++ log_error("Failed to create inotify handle: %m"); ++ return -errno; ++ } ++ ++ mkdirs(); ++ ++ if (inotify_add_watch(fd, "/run/systemd/readahead", IN_CREATE) < 0) { ++ log_error("Failed to watch /run/systemd/readahead: %m"); ++ safe_close(fd); ++ return -errno; ++ } ++ ++ return fd; ++} ++ ++ReadaheadShared *shared_get(void) { ++ _cleanup_close_ int fd = -1; ++ ReadaheadShared *m = NULL; ++ ++ mkdirs(); ++ ++ fd = open("/run/systemd/readahead/shared", O_CREAT|O_RDWR|O_CLOEXEC, 0644); ++ if (fd < 0) { ++ log_error("Failed to create shared memory segment: %m"); ++ return NULL; ++ } ++ ++ if (ftruncate(fd, sizeof(ReadaheadShared)) < 0) { ++ log_error("Failed to truncate shared memory segment: %m"); ++ return NULL; ++ } ++ ++ m = mmap(NULL, sizeof(ReadaheadShared), PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0); ++ if (m == MAP_FAILED) { ++ log_error("Failed to mmap shared memory segment: %m"); ++ return NULL; ++ } ++ ++ return m; ++} ++ ++/* We use 20K instead of the more human digestable 16K here. Why? ++ Simply so that it is more unlikely that users end up picking this ++ value too so that we can recognize better whether the user changed ++ the value while we had it temporarily bumped. */ ++#define BUMP_REQUEST_NR (20*1024u) ++ ++int block_bump_request_nr(const char *p) { ++ struct stat st; ++ uint64_t u; ++ char *ap = NULL, *line = NULL; ++ int r; ++ dev_t d; ++ ++ assert(p); ++ ++ if (stat(p, &st) < 0) ++ return -errno; ++ ++ if (major(st.st_dev) == 0) ++ return 0; ++ ++ d = st.st_dev; ++ block_get_whole_disk(d, &d); ++ ++ if (asprintf(&ap, "/sys/dev/block/%u:%u/queue/nr_requests", major(d), minor(d)) < 0) { ++ r= -ENOMEM; ++ goto finish; ++ } ++ ++ r = read_one_line_file(ap, &line); ++ if (r < 0) { ++ if (r == -ENOENT) ++ r = 0; ++ goto finish; ++ } ++ ++ r = safe_atou64(line, &u); ++ if (r >= 0 && u >= BUMP_REQUEST_NR) { ++ r = 0; ++ goto finish; ++ } ++ ++ free(line); ++ line = NULL; ++ ++ if (asprintf(&line, "%u", BUMP_REQUEST_NR) < 0) { ++ r = -ENOMEM; ++ goto finish; ++ } ++ ++ r = write_string_file(ap, line); ++ if (r < 0) ++ goto finish; ++ ++ log_info("Bumped block_nr parameter of %u:%u to %u. This is a temporary hack and should be removed one day.", major(d), minor(d), BUMP_REQUEST_NR); ++ r = 1; ++ ++finish: ++ free(ap); ++ free(line); ++ ++ return r; ++} ++ ++int block_get_readahead(const char *p, uint64_t *bytes) { ++ struct stat st; ++ char *ap = NULL, *line = NULL; ++ int r; ++ dev_t d; ++ uint64_t u; ++ ++ assert(p); ++ assert(bytes); ++ ++ if (stat(p, &st) < 0) ++ return -errno; ++ ++ if (major(st.st_dev) == 0) ++ return 0; ++ ++ d = st.st_dev; ++ block_get_whole_disk(d, &d); ++ ++ if (asprintf(&ap, "/sys/dev/block/%u:%u/bdi/read_ahead_kb", major(d), minor(d)) < 0) { ++ r = -ENOMEM; ++ goto finish; ++ } ++ ++ r = read_one_line_file(ap, &line); ++ if (r < 0) ++ goto finish; ++ ++ r = safe_atou64(line, &u); ++ if (r < 0) ++ goto finish; ++ ++ *bytes = u * 1024ULL; ++ ++finish: ++ free(ap); ++ free(line); ++ ++ return r; ++} ++ ++int block_set_readahead(const char *p, uint64_t bytes) { ++ struct stat st; ++ char *ap = NULL, *line = NULL; ++ int r; ++ dev_t d; ++ ++ assert(p); ++ assert(bytes); ++ ++ if (stat(p, &st) < 0) ++ return -errno; ++ ++ if (major(st.st_dev) == 0) ++ return 0; ++ ++ d = st.st_dev; ++ block_get_whole_disk(d, &d); ++ ++ if (asprintf(&ap, "/sys/dev/block/%u:%u/bdi/read_ahead_kb", major(d), minor(d)) < 0) { ++ r = -ENOMEM; ++ goto finish; ++ } ++ ++ if (asprintf(&line, "%llu", bytes / 1024ULL) < 0) { ++ r = -ENOMEM; ++ goto finish; ++ } ++ ++ r = write_string_file(ap, line); ++ if (r < 0) ++ goto finish; ++ ++finish: ++ free(ap); ++ free(line); ++ ++ return r; ++} +diff --git a/src/readahead/readahead-common.h b/src/readahead/readahead-common.h +new file mode 100644 +index 0000000..b34f3aa +--- /dev/null ++++ b/src/readahead/readahead-common.h +@@ -0,0 +1,61 @@ ++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ ++ ++#pragma once ++ ++/*** ++ This file is part of systemd. ++ ++ Copyright 2010 Lennart Poettering ++ ++ systemd is free software; you can redistribute it and/or modify it ++ under the terms of the GNU Lesser General Public License as published by ++ the Free Software Foundation; either version 2.1 of the License, or ++ (at your option) any later version. ++ ++ systemd is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with systemd; If not, see . ++***/ ++ ++#include ++#include ++ ++#include "macro.h" ++#include "util.h" ++ ++#define READAHEAD_FILE_SIZE_MAX (10*1024*1024) ++ ++#define READAHEAD_PACK_FILE_VERSION ";VERSION=2\n" ++ ++extern unsigned arg_files_max; ++extern off_t arg_file_size_max; ++extern usec_t arg_timeout; ++ ++int file_verify(int fd, const char *fn, off_t file_size_max, struct stat *st); ++ ++int fs_on_ssd(const char *p); ++int fs_on_read_only(const char *p); ++ ++bool enough_ram(void); ++ ++int open_inotify(void); ++ ++typedef struct ReadaheadShared { ++ pid_t collect; ++ pid_t replay; ++} _packed_ ReadaheadShared; ++ ++ReadaheadShared *shared_get(void); ++ ++int block_bump_request_nr(const char *p); ++ ++int block_get_readahead(const char *p, uint64_t *bytes); ++int block_set_readahead(const char *p, uint64_t bytes); ++ ++int main_collect(const char *root); ++int main_replay(const char *root); ++int main_analyze(const char *pack_path); +diff --git a/src/readahead/readahead-replay.c b/src/readahead/readahead-replay.c +new file mode 100644 +index 0000000..f81e0fe +--- /dev/null ++++ b/src/readahead/readahead-replay.c +@@ -0,0 +1,281 @@ ++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ ++ ++/*** ++ This file is part of systemd. ++ ++ Copyright 2010 Lennart Poettering ++ ++ systemd is free software; you can redistribute it and/or modify it ++ under the terms of the GNU Lesser General Public License as published by ++ the Free Software Foundation; either version 2.1 of the License, or ++ (at your option) any later version. ++ ++ systemd is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with systemd; If not, see . ++***/ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "systemd/sd-daemon.h" ++ ++#include "missing.h" ++#include "util.h" ++#include "set.h" ++#include "ioprio.h" ++#include "readahead-common.h" ++#include "virt.h" ++ ++static ReadaheadShared *shared = NULL; ++ ++static int unpack_file(FILE *pack) { ++ _cleanup_close_ int fd = -1; ++ char fn[PATH_MAX]; ++ bool any = false; ++ struct stat st; ++ uint64_t inode; ++ ++ assert(pack); ++ ++ if (!fgets(fn, sizeof(fn), pack)) ++ return 0; ++ ++ char_array_0(fn); ++ truncate_nl(fn); ++ ++ fd = open(fn, O_RDONLY|O_CLOEXEC|O_NOATIME|O_NOCTTY|O_NOFOLLOW); ++ if (fd < 0) { ++ if (errno != ENOENT && errno != EPERM && errno != EACCES && errno != ELOOP) ++ log_warning("open(%s) failed: %m", fn); ++ ++ } else if (file_verify(fd, fn, arg_file_size_max, &st) <= 0) ++ fd = safe_close(fd); ++ ++ if (fread(&inode, sizeof(inode), 1, pack) != 1) { ++ log_error("Premature end of pack file."); ++ return -EIO; ++ } ++ ++ if (fd >= 0) { ++ /* If the inode changed the file got deleted, so just ++ * ignore this entry */ ++ if (st.st_ino != (uint64_t) inode) ++ fd = safe_close(fd); ++ } ++ ++ for (;;) { ++ uint32_t b, c; ++ ++ if (fread(&b, sizeof(b), 1, pack) != 1 || ++ fread(&c, sizeof(c), 1, pack) != 1) { ++ log_error("Premature end of pack file."); ++ return -EIO; ++ } ++ ++ if (b == 0 && c == 0) ++ break; ++ ++ if (c <= b) { ++ log_error("Invalid pack file."); ++ return -EIO; ++ } ++ ++ log_debug("%s: page %u to %u", fn, b, c); ++ ++ any = true; ++ ++ if (fd >= 0) { ++ if (posix_fadvise(fd, b * page_size(), (c - b) * page_size(), POSIX_FADV_WILLNEED) < 0) { ++ log_warning("posix_fadvise() failed: %m"); ++ return -errno; ++ } ++ } ++ } ++ ++ if (!any && fd >= 0) { ++ /* if no range is encoded in the pack file this is ++ * intended to mean that the whole file shall be ++ * read */ ++ ++ if (posix_fadvise(fd, 0, st.st_size, POSIX_FADV_WILLNEED) < 0) { ++ log_warning("posix_fadvise() failed: %m"); ++ return -errno; ++ } ++ } ++ ++ return 0; ++} ++ ++static int replay(const char *root) { ++ _cleanup_close_ int inotify_fd = -1; ++ _cleanup_free_ char *pack_fn = NULL; ++ _cleanup_fclose_ FILE *pack = NULL; ++ bool on_ssd, ready = false; ++ char line[LINE_MAX]; ++ int prio, c; ++ ++ assert(root); ++ ++ block_bump_request_nr(root); ++ ++ if (asprintf(&pack_fn, "%s/.readahead", root) < 0) ++ return log_oom(); ++ ++ pack = fopen(pack_fn, "re"); ++ if (!pack) { ++ if (errno == ENOENT) { ++ log_debug("No pack file found."); ++ return 0; ++ } ++ ++ log_error("Failed to open pack file: %m"); ++ return -errno; ++ } ++ ++ posix_fadvise(fileno(pack), 0, 0, POSIX_FADV_WILLNEED); ++ ++ inotify_fd = open_inotify(); ++ if (inotify_fd < 0) ++ return inotify_fd; ++ ++ if (!fgets(line, sizeof(line), pack)) { ++ log_error("Premature end of pack file."); ++ return -EIO; ++ } ++ ++ char_array_0(line); ++ ++ if (!streq(line, CANONICAL_HOST READAHEAD_PACK_FILE_VERSION)) { ++ log_debug("Pack file host or version type mismatch."); ++ goto done; ++ } ++ ++ c = getc(pack); ++ if (c == EOF) { ++ log_debug("Premature end of pack file."); ++ return -EIO; ++ } ++ ++ /* We do not retest SSD here, so that we can start replaying ++ * before udev is up.*/ ++ on_ssd = c == 'S'; ++ log_debug("On SSD: %s", yes_no(on_ssd)); ++ ++ if (on_ssd) ++ prio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0); ++ else ++ /* We are not using RT here, since we'd starve IO that ++ we didn't record (which is for example blkid, since ++ its disk accesses go directly to the block device and ++ are thus not visible in fallocate) to death. However, ++ we do ask for an IO prio that is slightly higher than ++ the default (which is BE. 4) */ ++ prio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 2); ++ ++ if (ioprio_set(IOPRIO_WHO_PROCESS, getpid(), prio) < 0) ++ log_warning("Failed to set IDLE IO priority class: %m"); ++ ++ sd_notify(0, "STATUS=Replaying readahead data"); ++ ++ log_debug("Replaying..."); ++ ++ if (access("/run/systemd/readahead/noreplay", F_OK) >= 0) { ++ log_debug("Got termination request"); ++ goto done; ++ } ++ ++ while (!feof(pack) && !ferror(pack)) { ++ uint8_t inotify_buffer[sizeof(struct inotify_event) + FILENAME_MAX]; ++ int k; ++ ssize_t n; ++ ++ n = read(inotify_fd, &inotify_buffer, sizeof(inotify_buffer)); ++ if (n < 0) { ++ if (errno != EINTR && errno != EAGAIN) { ++ log_error("Failed to read inotify event: %m"); ++ return -errno; ++ } ++ } else { ++ struct inotify_event *e = (struct inotify_event*) inotify_buffer; ++ ++ while (n > 0) { ++ size_t step; ++ ++ if ((e->mask & IN_CREATE) && streq(e->name, "noreplay")) { ++ log_debug("Got termination request"); ++ goto done; ++ } ++ ++ step = sizeof(struct inotify_event) + e->len; ++ assert(step <= (size_t) n); ++ ++ e = (struct inotify_event*) ((uint8_t*) e + step); ++ n -= step; ++ } ++ } ++ ++ k = unpack_file(pack); ++ if (k < 0) ++ return k; ++ ++ if (!ready) { ++ /* We delay the ready notification until we ++ * queued at least one read */ ++ sd_notify(0, "READY=1"); ++ ready = true; ++ } ++ } ++ ++done: ++ if (ferror(pack)) { ++ log_error("Failed to read pack file."); ++ return -EIO; ++ } ++ ++ if (!ready) ++ sd_notify(0, "READY=1"); ++ ++ log_debug("Done."); ++ return 0; ++} ++ ++int main_replay(const char *root) { ++ ++ if (!root) ++ root = "/"; ++ ++ if (!enough_ram()) { ++ log_info("Disabling readahead replay due to low memory."); ++ return EXIT_SUCCESS; ++ } ++ ++ shared = shared_get(); ++ if (!shared) ++ return EXIT_FAILURE; ++ ++ shared->replay = getpid(); ++ __sync_synchronize(); ++ ++ if (replay(root) < 0) ++ return EXIT_FAILURE; ++ ++ return EXIT_SUCCESS; ++} +diff --git a/src/readahead/readahead.c b/src/readahead/readahead.c +new file mode 100644 +index 0000000..35176e9 +--- /dev/null ++++ b/src/readahead/readahead.c +@@ -0,0 +1,163 @@ ++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ ++ ++/*** ++ This file is part of systemd. ++ ++ Copyright 2012 Lennart Poettering ++ ++ systemd is free software; you can redistribute it and/or modify it ++ under the terms of the GNU Lesser General Public License as published by ++ the Free Software Foundation; either version 2.1 of the License, or ++ (at your option) any later version. ++ ++ systemd is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with systemd; If not, see . ++***/ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "util.h" ++#include "def.h" ++#include "build.h" ++#include "readahead-common.h" ++ ++unsigned arg_files_max = 16*1024; ++off_t arg_file_size_max = READAHEAD_FILE_SIZE_MAX; ++usec_t arg_timeout = 2*USEC_PER_MINUTE; ++ ++static void help(void) { ++ printf("%1$s [OPTIONS...] collect [DIRECTORY]\n\n" ++ "Collect read-ahead data on early boot.\n\n" ++ " -h --help Show this help\n" ++ " --version Show package version\n" ++ " --files-max=INT Maximum number of files to read ahead\n" ++ " --file-size-max=BYTES Maximum size of files to read ahead\n" ++ " --timeout=USEC Maximum time to spend collecting data\n" ++ "\n\n" ++ "%1$s [OPTIONS...] replay [DIRECTORY]\n\n" ++ "Replay collected read-ahead data on early boot.\n\n" ++ " -h --help Show this help\n" ++ " --version Show package version\n" ++ " --file-size-max=BYTES Maximum size of files to read ahead\n" ++ "\n\n" ++ "%1$s [OPTIONS...] analyze [PACK-FILE]\n\n" ++ "Analyze collected read-ahead data.\n\n" ++ " -h --help Show this help\n" ++ " --version Show package version\n", ++ program_invocation_short_name); ++} ++ ++static int parse_argv(int argc, char *argv[]) { ++ ++ enum { ++ ARG_VERSION = 0x100, ++ ARG_FILES_MAX, ++ ARG_FILE_SIZE_MAX, ++ ARG_TIMEOUT ++ }; ++ ++ static const struct option options[] = { ++ { "help", no_argument, NULL, 'h' }, ++ { "version", no_argument, NULL, ARG_VERSION }, ++ { "files-max", required_argument, NULL, ARG_FILES_MAX }, ++ { "file-size-max", required_argument, NULL, ARG_FILE_SIZE_MAX }, ++ { "timeout", required_argument, NULL, ARG_TIMEOUT }, ++ {} ++ }; ++ ++ int c; ++ ++ assert(argc >= 0); ++ assert(argv); ++ ++ while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) ++ ++ switch (c) { ++ ++ case 'h': ++ help(); ++ return 0; ++ ++ case ARG_VERSION: ++ puts(PACKAGE_STRING); ++ puts(SYSTEMD_FEATURES); ++ return 0; ++ ++ case ARG_FILES_MAX: ++ if (safe_atou(optarg, &arg_files_max) < 0 || arg_files_max <= 0) { ++ log_error("Failed to parse maximum number of files %s.", optarg); ++ return -EINVAL; ++ } ++ break; ++ ++ case ARG_FILE_SIZE_MAX: { ++ unsigned long long ull; ++ ++ if (safe_atollu(optarg, &ull) < 0 || ull <= 0) { ++ log_error("Failed to parse maximum file size %s.", optarg); ++ return -EINVAL; ++ } ++ ++ arg_file_size_max = (off_t) ull; ++ break; ++ } ++ ++ case ARG_TIMEOUT: ++ if (parse_sec(optarg, &arg_timeout) < 0 || arg_timeout <= 0) { ++ log_error("Failed to parse timeout %s.", optarg); ++ return -EINVAL; ++ } ++ ++ break; ++ ++ case '?': ++ return -EINVAL; ++ ++ default: ++ assert_not_reached("Unhandled option"); ++ } ++ ++ if (optind != argc-1 && ++ optind != argc-2) { ++ log_error("%s: wrong number of arguments.", ++ program_invocation_short_name); ++ return -EINVAL; ++ } ++ ++ return 1; ++} ++ ++int main(int argc, char *argv[]) { ++ int r; ++ ++ log_set_target(LOG_TARGET_SAFE); ++ log_parse_environment(); ++ log_open(); ++ ++ umask(0022); ++ ++ r = parse_argv(argc, argv); ++ if (r <= 0) ++ return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; ++ ++ if (streq(argv[optind], "collect")) ++ return main_collect(argv[optind+1]); ++ else if (streq(argv[optind], "replay")) ++ return main_replay(argv[optind+1]); ++ else if (streq(argv[optind], "analyze")) ++ return main_analyze(argv[optind+1]); ++ ++ log_error("Unknown verb %s.", argv[optind]); ++ return EXIT_FAILURE; ++} +diff --git a/src/readahead/sd-readahead.c b/src/readahead/sd-readahead.c +new file mode 100644 +index 0000000..675d82c +--- /dev/null ++++ b/src/readahead/sd-readahead.c +@@ -0,0 +1,89 @@ ++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ ++ ++/*** ++ Copyright 2010 Lennart Poettering ++ ++ Permission is hereby granted, free of charge, to any person ++ obtaining a copy of this software and associated documentation files ++ (the "Software"), to deal in the Software without restriction, ++ including without limitation the rights to use, copy, modify, merge, ++ publish, distribute, sublicense, and/or sell copies of the Software, ++ and to permit persons to whom the Software is furnished to do so, ++ subject to the following conditions: ++ ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. ++ ++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS ++ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ++ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ++ SOFTWARE. ++***/ ++ ++#ifndef _GNU_SOURCE ++# define _GNU_SOURCE ++#endif ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "sd-readahead.h" ++ ++#if (__GNUC__ >= 4) ++# ifdef SD_EXPORT_SYMBOLS ++/* Export symbols */ ++# define _sd_export_ __attribute__ ((visibility("default"))) ++# else ++/* Don't export the symbols */ ++# define _sd_export_ __attribute__ ((visibility("hidden"))) ++# endif ++#else ++# define _sd_export_ ++#endif ++ ++static int touch(const char *path) { ++ ++#if !defined(DISABLE_SYSTEMD) && defined(__linux__) ++ int fd; ++ ++ mkdir("/run/systemd", 0755); ++ mkdir("/run/systemd/readahead", 0755); ++ ++ fd = open(path, O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY, 0666); ++ if (fd < 0) ++ return -errno; ++ ++ for (;;) { ++ if (close(fd) >= 0) ++ break; ++ ++ if (errno != EINTR) ++ return -errno; ++ } ++ ++#endif ++ return 0; ++} ++ ++_sd_export_ int sd_readahead(const char *action) { ++ ++ if (!action) ++ return -EINVAL; ++ ++ if (strcmp(action, "cancel") == 0) ++ return touch("/run/systemd/readahead/cancel"); ++ else if (strcmp(action, "done") == 0) ++ return touch("/run/systemd/readahead/done"); ++ else if (strcmp(action, "noreplay") == 0) ++ return touch("/run/systemd/readahead/noreplay"); ++ ++ return -EINVAL; ++} +diff --git a/src/readahead/test-ssd.c b/src/readahead/test-ssd.c +new file mode 100644 +index 0000000..808faf3 +--- /dev/null ++++ b/src/readahead/test-ssd.c +@@ -0,0 +1,41 @@ ++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ ++ ++/*** ++ This file is part of systemd. ++ ++ Copyright 2014 Zbigniew Jędrzejewski-Szmek ++ ++ systemd is free software; you can redistribute it and/or modify it ++ under the terms of the GNU Lesser General Public License as published by ++ the Free Software Foundation; either version 2.1 of the License, or ++ (at your option) any later version. ++ ++ systemd is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with systemd; If not, see . ++***/ ++ ++#include "readahead-common.h" ++ ++int main(int argc, char *argv[]) { ++ int i; ++ ++ for (i = 1; i < argc; i++) { ++ char *name = argv[i]; ++ int r; ++ ++ r = fs_on_ssd(name); ++ if (r < 0) { ++ log_error("%s: %s", name, strerror(-r)); ++ return EXIT_FAILURE; ++ } ++ ++ log_info("%s: %s", name, r ? "SSD" : "---"); ++ } ++ ++ return EXIT_SUCCESS; ++} +diff --git a/src/systemd/sd-readahead.h b/src/systemd/sd-readahead.h +new file mode 100644 +index 0000000..bb30f9a +--- /dev/null ++++ b/src/systemd/sd-readahead.h +@@ -0,0 +1,73 @@ ++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ ++ ++#ifndef foosdreadaheadhfoo ++#define foosdreadaheadhfoo ++ ++/*** ++ Copyright 2010 Lennart Poettering ++ ++ Permission is hereby granted, free of charge, to any person ++ obtaining a copy of this software and associated documentation files ++ (the "Software"), to deal in the Software without restriction, ++ including without limitation the rights to use, copy, modify, merge, ++ publish, distribute, sublicense, and/or sell copies of the Software, ++ and to permit persons to whom the Software is furnished to do so, ++ subject to the following conditions: ++ ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. ++ ++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS ++ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ++ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ++ SOFTWARE. ++***/ ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* ++ Reference implementation of a few boot read-ahead-related ++ interfaces. These interfaces are trivial to implement. To simplify ++ porting, we provide this reference implementation. Applications are ++ welcome to reimplement the algorithms described here if they do not ++ want to include these two source files. ++ ++ You may compile this with -DDISABLE_SYSTEMD to disable systemd ++ support. This makes all calls NOPs. ++ ++ Because this is drop-in code, we don't want any of our symbols to be ++ exported in any case. Hence, we declare hidden visibility for all of ++ them. ++ ++ You may find an up-to-date version of these source files online: ++ ++ http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-readahead.h ++ http://cgit.freedesktop.org/systemd/systemd/plain/src/readahead/sd-readahead.c ++ ++ This should compile on non-Linux systems too, but all functions ++ will become NOPs. ++ ++ See sd-readahead(3) for more information. ++*/ ++ ++/* ++ Controls on-going disk read-ahead operations during boot-up. The argument ++ must be one of the following strings: "cancel", "done", or "noreplay". ++ ++ cancel = terminate read-ahead data collection, and drop collected information ++ done = terminate read-ahead data collection, and keep collected information ++ noreplay = terminate read-ahead replay ++*/ ++int sd_readahead(const char *action); ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif +diff --git a/system-preset/90-systemd.preset b/system-preset/90-systemd.preset +index ee1b864..24963f0 100644 +--- a/system-preset/90-systemd.preset ++++ b/system-preset/90-systemd.preset +@@ -12,6 +12,7 @@ enable remote-fs.target + enable machines.target + + enable getty@.service ++enable systemd-readahead-* + enable systemd-timesyncd.service + enable systemd-networkd.service + enable systemd-resolved.service +diff --git a/units/.gitignore b/units/.gitignore +index 6fdb629..638a7ab 100644 +--- a/units/.gitignore ++++ b/units/.gitignore +@@ -52,6 +52,9 @@ + /systemd-poweroff.service + /systemd-quotacheck.service + /systemd-random-seed.service ++/systemd-readahead-collect.service ++/systemd-readahead-done.service ++/systemd-readahead-replay.service + /systemd-reboot.service + /systemd-remount-fs.service + /systemd-resolved.service +diff --git a/units/ldconfig.service b/units/ldconfig.service +index f9691e2..43c145b 100644 +--- a/units/ldconfig.service ++++ b/units/ldconfig.service +@@ -10,7 +10,7 @@ Description=Rebuild Dynamic Linker Cache + Documentation=man:ldconfig(8) + DefaultDependencies=no + Conflicts=shutdown.target +-After=systemd-remount-fs.service ++After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-remount-fs.service + Before=sysinit.target shutdown.target systemd-update-done.service + ConditionNeedsUpdate=/etc + +diff --git a/units/quotaon.service.in b/units/quotaon.service.in +index 7d59a40..49a50a7 100644 +--- a/units/quotaon.service.in ++++ b/units/quotaon.service.in +@@ -9,7 +9,7 @@ + Description=Enable File System Quotas + Documentation=man:quotaon(8) + DefaultDependencies=no +-After=systemd-quotacheck.service ++After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-quotacheck.service + Before=local-fs.target shutdown.target + ConditionPathExists=@QUOTAON@ + +diff --git a/units/system-update.target b/units/system-update.target +index 48d46fc..d0f847f 100644 +--- a/units/system-update.target ++++ b/units/system-update.target +@@ -10,7 +10,7 @@ Description=System Update + Documentation=http://freedesktop.org/wiki/Software/systemd/SystemUpdates + Documentation=man:systemd.special(7) man:systemd-system-update-generator(8) + Requires=sysinit.target +-Conflicts=shutdown.target ++Conflicts=shutdown.target systemd-readahead-collect.service systemd-readahead-replay.service + After=sysinit.target + Before=shutdown.target + AllowIsolate=yes +diff --git a/units/systemd-backlight@.service.in b/units/systemd-backlight@.service.in +index 5e6706c..b146e30 100644 +--- a/units/systemd-backlight@.service.in ++++ b/units/systemd-backlight@.service.in +@@ -11,7 +11,7 @@ Documentation=man:systemd-backlight@.service(8) + DefaultDependencies=no + RequiresMountsFor=/var/lib/systemd/backlight + Conflicts=shutdown.target +-After=systemd-remount-fs.service ++After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-remount-fs.service + Before=sysinit.target shutdown.target + + [Service] +diff --git a/units/systemd-binfmt.service.in b/units/systemd-binfmt.service.in +index 34a5d52..02dfe77 100644 +--- a/units/systemd-binfmt.service.in ++++ b/units/systemd-binfmt.service.in +@@ -11,7 +11,7 @@ Documentation=man:systemd-binfmt.service(8) man:binfmt.d(5) + Documentation=https://www.kernel.org/doc/Documentation/binfmt_misc.txt + DefaultDependencies=no + Conflicts=shutdown.target +-After=proc-sys-fs-binfmt_misc.automount ++After=systemd-readahead-collect.service systemd-readahead-replay.service proc-sys-fs-binfmt_misc.automount + Before=sysinit.target shutdown.target + ConditionPathIsReadWrite=/proc/sys/ + ConditionDirectoryNotEmpty=|/lib/binfmt.d +diff --git a/units/systemd-firstboot.service.in b/units/systemd-firstboot.service.in +index 405c6f3..89fa7e1 100644 +--- a/units/systemd-firstboot.service.in ++++ b/units/systemd-firstboot.service.in +@@ -10,7 +10,7 @@ Description=First Boot Wizard + Documentation=man:systemd-firstboot(1) + DefaultDependencies=no + Conflicts=shutdown.target +-After=systemd-remount-fs.service ++After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-remount-fs.service + Before=systemd-sysusers.service sysinit.target shutdown.target + ConditionPathIsReadWrite=/etc + ConditionFirstBoot=yes +diff --git a/units/systemd-fsck-root.service.in b/units/systemd-fsck-root.service.in +index 6d76578..26cce51 100644 +--- a/units/systemd-fsck-root.service.in ++++ b/units/systemd-fsck-root.service.in +@@ -9,6 +9,7 @@ + Description=File System Check on Root Device + Documentation=man:systemd-fsck-root.service(8) + DefaultDependencies=no ++After=systemd-readahead-collect.service systemd-readahead-replay.service + Before=local-fs.target shutdown.target + ConditionPathIsReadWrite=!/ + +diff --git a/units/systemd-fsck@.service.in b/units/systemd-fsck@.service.in +index 857e625..d2cda6a 100644 +--- a/units/systemd-fsck@.service.in ++++ b/units/systemd-fsck@.service.in +@@ -10,7 +10,7 @@ Description=File System Check on %f + Documentation=man:systemd-fsck@.service(8) + DefaultDependencies=no + BindsTo=%i.device +-After=%i.device systemd-fsck-root.service local-fs-pre.target ++After=systemd-readahead-collect.service systemd-readahead-replay.service %i.device systemd-fsck-root.service local-fs-pre.target + Before=shutdown.target + + [Service] +diff --git a/units/systemd-hwdb-update.service.in b/units/systemd-hwdb-update.service.in +index 791528e..4bed482 100644 +--- a/units/systemd-hwdb-update.service.in ++++ b/units/systemd-hwdb-update.service.in +@@ -10,7 +10,7 @@ Description=Rebuild Hardware Database + Documentation=man:hwdb(7) man:systemd-hwdb(8) + DefaultDependencies=no + Conflicts=shutdown.target +-After=systemd-remount-fs.service ++After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-remount-fs.service + Before=sysinit.target shutdown.target systemd-update-done.service + ConditionNeedsUpdate=/etc + ConditionPathExists=|!@udevlibexecdir@/hwdb.bin +diff --git a/units/systemd-journal-catalog-update.service.in b/units/systemd-journal-catalog-update.service.in +index 6370dd4..5b85889 100644 +--- a/units/systemd-journal-catalog-update.service.in ++++ b/units/systemd-journal-catalog-update.service.in +@@ -10,7 +10,7 @@ Description=Rebuild Journal Catalog + Documentation=man:systemd-journald.service(8) man:journald.conf(5) + DefaultDependencies=no + Conflicts=shutdown.target +-After=local-fs.target ++After=systemd-readahead-collect.service systemd-readahead-replay.service local-fs.target + Before=sysinit.target shutdown.target systemd-update-done.service + ConditionNeedsUpdate=/etc + +diff --git a/units/systemd-modules-load.service.in b/units/systemd-modules-load.service.in +index 040a0fe..32deb52 100644 +--- a/units/systemd-modules-load.service.in ++++ b/units/systemd-modules-load.service.in +@@ -10,6 +10,7 @@ Description=Load Kernel Modules + Documentation=man:systemd-modules-load.service(8) man:modules-load.d(5) + DefaultDependencies=no + Conflicts=shutdown.target ++After=systemd-readahead-collect.service systemd-readahead-replay.service + Before=sysinit.target shutdown.target + ConditionCapability=CAP_SYS_MODULE + ConditionDirectoryNotEmpty=|/lib/modules-load.d +diff --git a/units/systemd-quotacheck.service.in b/units/systemd-quotacheck.service.in +index 5cb9bc3..f726ea1 100644 +--- a/units/systemd-quotacheck.service.in ++++ b/units/systemd-quotacheck.service.in +@@ -9,7 +9,7 @@ + Description=File System Quota Check + Documentation=man:systemd-quotacheck.service(8) + DefaultDependencies=no +-After=systemd-remount-fs.service ++After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-remount-fs.service + Before=local-fs.target shutdown.target + ConditionPathExists=@QUOTACHECK@ + +diff --git a/units/systemd-random-seed.service.in b/units/systemd-random-seed.service.in +index b55844b..1879b2f 100644 +--- a/units/systemd-random-seed.service.in ++++ b/units/systemd-random-seed.service.in +@@ -11,7 +11,7 @@ Documentation=man:systemd-random-seed.service(8) man:random(4) + DefaultDependencies=no + RequiresMountsFor=@RANDOM_SEED@ + Conflicts=shutdown.target +-After=systemd-remount-fs.service ++After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-remount-fs.service + Before=sysinit.target shutdown.target + + [Service] +diff --git a/units/systemd-readahead-collect.service.in b/units/systemd-readahead-collect.service.in +new file mode 100644 +index 0000000..d4b8e67 +--- /dev/null ++++ b/units/systemd-readahead-collect.service.in +@@ -0,0 +1,28 @@ ++# This file is part of systemd. ++# ++# systemd is free software; you can redistribute it and/or modify it ++# under the terms of the GNU Lesser General Public License as published by ++# the Free Software Foundation; either version 2.1 of the License, or ++# (at your option) any later version. ++ ++[Unit] ++Description=Collect Read-Ahead Data ++Documentation=man:systemd-readahead-replay.service(8) ++DefaultDependencies=no ++Wants=systemd-readahead-done.timer ++Conflicts=shutdown.target ++Before=sysinit.target shutdown.target ++ConditionPathExists=!/run/systemd/readahead/cancel ++ConditionPathExists=!/run/systemd/readahead/done ++ConditionVirtualization=no ++ ++[Service] ++Type=notify ++ExecStart=@rootlibexecdir@/systemd-readahead collect ++RemainAfterExit=yes ++StandardOutput=null ++OOMScoreAdjust=1000 ++ ++[Install] ++WantedBy=default.target ++Also=systemd-readahead-drop.service +diff --git a/units/systemd-readahead-done.service.in b/units/systemd-readahead-done.service.in +new file mode 100644 +index 0000000..e0d9579 +--- /dev/null ++++ b/units/systemd-readahead-done.service.in +@@ -0,0 +1,22 @@ ++# This file is part of systemd. ++# ++# systemd is free software; you can redistribute it and/or modify it ++# under the terms of the GNU Lesser General Public License as published by ++# the Free Software Foundation; either version 2.1 of the License, or ++# (at your option) any later version. ++ ++[Unit] ++Description=Stop Read-Ahead Data Collection ++Documentation=man:systemd-readahead-replay.service(8) ++DefaultDependencies=no ++Conflicts=shutdown.target ++After=default.target ++Before=shutdown.target ++ConditionVirtualization=no ++ ++[Service] ++Type=oneshot ++ExecStart=@SYSTEMD_NOTIFY@ --readahead=done ++ ++[Install] ++Also=systemd-readahead-collect.service +diff --git a/units/systemd-readahead-done.timer b/units/systemd-readahead-done.timer +new file mode 100644 +index 0000000..c58e096 +--- /dev/null ++++ b/units/systemd-readahead-done.timer +@@ -0,0 +1,22 @@ ++# This file is part of systemd. ++# ++# systemd is free software; you can redistribute it and/or modify it ++# under the terms of the GNU Lesser General Public License as published by ++# the Free Software Foundation; either version 2.1 of the License, or ++# (at your option) any later version. ++ ++[Unit] ++Description=Stop Read-Ahead Data Collection 10s After Completed Startup ++Documentation=man:systemd-readahead-replay.service(8) ++DefaultDependencies=no ++Conflicts=shutdown.target ++After=default.target ++Before=shutdown.target ++ConditionVirtualization=no ++ ++[Timer] ++OnActiveSec=30s ++AccuracySec=1s ++ ++[Install] ++Also=systemd-readahead-collect.service +diff --git a/units/systemd-readahead-drop.service b/units/systemd-readahead-drop.service +new file mode 100644 +index 0000000..d9d12bc +--- /dev/null ++++ b/units/systemd-readahead-drop.service +@@ -0,0 +1,19 @@ ++# This file is part of systemd. ++# ++# systemd is free software; you can redistribute it and/or modify it ++# under the terms of the GNU Lesser General Public License as published by ++# the Free Software Foundation; either version 2.1 of the License, or ++# (at your option) any later version. ++ ++[Unit] ++Description=Drop Read-Ahead Data ++Documentation=man:systemd-readahead-replay.service(8) ++ConditionPathExists=/.readahead ++ ++[Service] ++Type=oneshot ++ExecStart=/bin/rm -f /.readahead ++ ++[Install] ++WantedBy=system-update.target ++Also=systemd-readahead-collect.service +diff --git a/units/systemd-readahead-replay.service.in b/units/systemd-readahead-replay.service.in +new file mode 100644 +index 0000000..c64a533 +--- /dev/null ++++ b/units/systemd-readahead-replay.service.in +@@ -0,0 +1,26 @@ ++# This file is part of systemd. ++# ++# systemd is free software; you can redistribute it and/or modify it ++# under the terms of the GNU Lesser General Public License as published by ++# the Free Software Foundation; either version 2.1 of the License, or ++# (at your option) any later version. ++ ++[Unit] ++Description=Replay Read-Ahead Data ++Documentation=man:systemd-readahead-replay.service(8) ++DefaultDependencies=no ++Conflicts=shutdown.target ++Before=sysinit.target shutdown.target ++ConditionPathExists=!/run/systemd/readahead/noreplay ++ConditionPathExists=/.readahead ++ConditionVirtualization=no ++ ++[Service] ++Type=notify ++ExecStart=@rootlibexecdir@/systemd-readahead replay ++RemainAfterExit=yes ++StandardOutput=null ++OOMScoreAdjust=1000 ++ ++[Install] ++WantedBy=default.target +diff --git a/units/systemd-remount-fs.service.in b/units/systemd-remount-fs.service.in +index 8d9daac..70e1a86 100644 +--- a/units/systemd-remount-fs.service.in ++++ b/units/systemd-remount-fs.service.in +@@ -11,7 +11,7 @@ Documentation=man:systemd-remount-fs.service(8) + Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems + DefaultDependencies=no + Conflicts=shutdown.target +-After=systemd-fsck-root.service ++After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-fsck-root.service + Before=local-fs-pre.target local-fs.target shutdown.target + Wants=local-fs-pre.target + ConditionPathExists=/etc/fstab +diff --git a/units/systemd-rfkill@.service.in b/units/systemd-rfkill@.service.in +index b48efe5..0d2757d 100644 +--- a/units/systemd-rfkill@.service.in ++++ b/units/systemd-rfkill@.service.in +@@ -12,7 +12,7 @@ DefaultDependencies=no + BindsTo=sys-subsystem-rfkill-devices-%i.device + RequiresMountsFor=/var/lib/systemd/rfkill + Conflicts=shutdown.target +-After=systemd-remount-fs.service ++After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-remount-fs.service + Before=sysinit.target shutdown.target + + [Service] +diff --git a/units/systemd-sysctl.service.in b/units/systemd-sysctl.service.in +index fa72085..ade9dc3 100644 +--- a/units/systemd-sysctl.service.in ++++ b/units/systemd-sysctl.service.in +@@ -10,6 +10,7 @@ Description=Apply Kernel Variables + Documentation=man:systemd-sysctl.service(8) man:sysctl.d(5) + DefaultDependencies=no + Conflicts=shutdown.target ++After=systemd-readahead-collect.service systemd-readahead-replay.service + After=systemd-modules-load.service + Before=sysinit.target shutdown.target + ConditionPathIsReadWrite=/proc/sys/ +diff --git a/units/systemd-sysusers.service.in b/units/systemd-sysusers.service.in +index ffd6d77..69fea11 100644 +--- a/units/systemd-sysusers.service.in ++++ b/units/systemd-sysusers.service.in +@@ -10,7 +10,7 @@ Description=Create System Users + Documentation=man:sysusers.d(5) man:systemd-sysusers.service(8) + DefaultDependencies=no + Conflicts=shutdown.target +-After=systemd-remount-fs.service ++After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-remount-fs.service + Before=sysinit.target shutdown.target systemd-update-done.service + ConditionNeedsUpdate=/etc + +diff --git a/units/systemd-tmpfiles-clean.service.in b/units/systemd-tmpfiles-clean.service.in +index 133c8c9..31b2378 100644 +--- a/units/systemd-tmpfiles-clean.service.in ++++ b/units/systemd-tmpfiles-clean.service.in +@@ -10,7 +10,7 @@ Description=Cleanup of Temporary Directories + Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8) + DefaultDependencies=no + Conflicts=shutdown.target +-After=local-fs.target time-sync.target ++After=systemd-readahead-collect.service systemd-readahead-replay.service local-fs.target time-sync.target + Before=shutdown.target + + [Service] +diff --git a/units/systemd-tmpfiles-setup-dev.service.in b/units/systemd-tmpfiles-setup-dev.service.in +index 0123a03..0b66c53 100644 +--- a/units/systemd-tmpfiles-setup-dev.service.in ++++ b/units/systemd-tmpfiles-setup-dev.service.in +@@ -10,7 +10,7 @@ Description=Create Static Device Nodes in /dev + Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8) + DefaultDependencies=no + Conflicts=shutdown.target +-After=systemd-sysusers.service ++After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-sysusers.service + Before=sysinit.target local-fs-pre.target systemd-udevd.service shutdown.target + ConditionCapability=CAP_SYS_MODULE + +diff --git a/units/systemd-tmpfiles-setup.service.in b/units/systemd-tmpfiles-setup.service.in +index e895cda..72ab083 100644 +--- a/units/systemd-tmpfiles-setup.service.in ++++ b/units/systemd-tmpfiles-setup.service.in +@@ -10,7 +10,7 @@ Description=Create Volatile Files and Directories + Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8) + DefaultDependencies=no + Conflicts=shutdown.target +-After=local-fs.target systemd-sysusers.service ++After=systemd-readahead-collect.service systemd-readahead-replay.service local-fs.target systemd-sysusers.service + Before=sysinit.target shutdown.target + RefuseManualStop=yes + +diff --git a/units/systemd-update-done.service.in b/units/systemd-update-done.service.in +index ec7d906..7031bff 100644 +--- a/units/systemd-update-done.service.in ++++ b/units/systemd-update-done.service.in +@@ -10,7 +10,7 @@ Description=Update is Completed + Documentation=man:systemd-update-done.service(8) + DefaultDependencies=no + Conflicts=shutdown.target +-After=local-fs.target ++After=systemd-readahead-collect.service systemd-readahead-replay.service local-fs.target + Before=sysinit.target shutdown.target + ConditionNeedsUpdate=|/etc + ConditionNeedsUpdate=|/var +diff --git a/units/systemd-update-utmp.service.in b/units/systemd-update-utmp.service.in +index 163eccd..da7dda7 100644 +--- a/units/systemd-update-utmp.service.in ++++ b/units/systemd-update-utmp.service.in +@@ -11,7 +11,7 @@ Documentation=man:systemd-update-utmp.service(8) man:utmp(5) + DefaultDependencies=no + RequiresMountsFor=/var/log/wtmp + Conflicts=shutdown.target +-After=systemd-remount-fs.service systemd-tmpfiles-setup.service auditd.service ++After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-remount-fs.service systemd-tmpfiles-setup.service auditd.service + Before=sysinit.target shutdown.target + + [Service] +diff --git a/units/systemd-vconsole-setup.service.in b/units/systemd-vconsole-setup.service.in +index 6160361..18faa63 100644 +--- a/units/systemd-vconsole-setup.service.in ++++ b/units/systemd-vconsole-setup.service.in +@@ -10,6 +10,7 @@ Description=Setup Virtual Console + Documentation=man:systemd-vconsole-setup.service(8) man:vconsole.conf(5) + DefaultDependencies=no + Conflicts=shutdown.target ++After=systemd-readahead-collect.service systemd-readahead-replay.service + Before=sysinit.target shutdown.target + ConditionPathExists=/dev/tty0 + diff --git a/SOURCES/0010-strv-don-t-access-potentially-NULL-string-arrays.patch b/SOURCES/0010-strv-don-t-access-potentially-NULL-string-arrays.patch deleted file mode 100644 index 9fbb5d7..0000000 --- a/SOURCES/0010-strv-don-t-access-potentially-NULL-string-arrays.patch +++ /dev/null @@ -1,24 +0,0 @@ -From c6d39712453c53e8c859d6682f65d8129afc35a3 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 2 Oct 2013 19:38:28 +0200 -Subject: [PATCH] strv: don't access potentially NULL string arrays - ---- - src/shared/env-util.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/src/shared/env-util.c b/src/shared/env-util.c -index 5e29629..7976881 100644 ---- a/src/shared/env-util.c -+++ b/src/shared/env-util.c -@@ -405,7 +405,9 @@ char **strv_env_clean_log(char **e, const char *message) { - e[k++] = *p; - } - -- e[k] = NULL; -+ if (e) -+ e[k] = NULL; -+ - return e; - } - diff --git a/SOURCES/0011-mkdir-pass-a-proper-function-pointer-to-mkdir_safe_i.patch b/SOURCES/0011-mkdir-pass-a-proper-function-pointer-to-mkdir_safe_i.patch deleted file mode 100644 index 13d08bf..0000000 --- a/SOURCES/0011-mkdir-pass-a-proper-function-pointer-to-mkdir_safe_i.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 510cc2c4bc293002629547e1f5826d7a0ad92101 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 2 Oct 2013 19:38:52 +0200 -Subject: [PATCH] mkdir: pass a proper function pointer to mkdir_safe_internal - ---- - src/shared/mkdir.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/shared/mkdir.c b/src/shared/mkdir.c -index b7e5c6e..43c6ea6 100644 ---- a/src/shared/mkdir.c -+++ b/src/shared/mkdir.c -@@ -53,7 +53,7 @@ int mkdir_safe_internal(const char *path, mode_t mode, uid_t uid, gid_t gid, mkd - } - - int mkdir_safe(const char *path, mode_t mode, uid_t uid, gid_t gid) { -- return mkdir_safe_internal(path, mode, uid, gid, false); -+ return mkdir_safe_internal(path, mode, uid, gid, mkdir); - } - - static int is_dir(const char* path) { diff --git a/SOURCES/0011-rules-add-rule-for-naming-Dell-iDRAC-USB-Virtual-NIC.patch b/SOURCES/0011-rules-add-rule-for-naming-Dell-iDRAC-USB-Virtual-NIC.patch new file mode 100644 index 0000000..282fef7 --- /dev/null +++ b/SOURCES/0011-rules-add-rule-for-naming-Dell-iDRAC-USB-Virtual-NIC.patch @@ -0,0 +1,41 @@ +From 2411be37e26457c5e6734dbf08feb4b8375c13a2 Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Mon, 22 Sep 2014 07:53:52 +0200 +Subject: [PATCH] rules: add rule for naming Dell iDRAC USB Virtual NIC as + 'idrac' + +RHEL-only patch + +Resolves: #1054477 +--- + Makefile.am | 3 ++- + rules/73-idrac.rules | 6 ++++++ + 2 files changed, 8 insertions(+), 1 deletion(-) + create mode 100644 rules/73-idrac.rules + +diff --git a/Makefile.am b/Makefile.am +index b0e4b5a..9e64d6f 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -3567,7 +3567,8 @@ dist_udevrules_DATA += \ + rules/78-sound-card.rules \ + rules/80-net-setup-link.rules \ + rules/95-udev-late.rules \ +- rules/40-redhat.rules ++ rules/40-redhat.rules \ ++ rules/73-idrac.rules + + nodist_udevrules_DATA += \ + rules/99-systemd.rules +diff --git a/rules/73-idrac.rules b/rules/73-idrac.rules +new file mode 100644 +index 0000000..d67fc42 +--- /dev/null ++++ b/rules/73-idrac.rules +@@ -0,0 +1,6 @@ ++# do not edit this file, it will be overwritten on update ++ ++# On Dell PowerEdge systems, the iDRAC7 and later support a USB Virtual NIC ++# with terminates in the iDRAC. Help identify this with 'idrac' ++ ++ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", ATTRS{idVendor}=="413c", ATTRS{idProduct}=="a102", NAME="idrac" diff --git a/SOURCES/0012-tmpfiles.d-include-setgid-perms-for-run-log-journal.patch b/SOURCES/0012-tmpfiles.d-include-setgid-perms-for-run-log-journal.patch deleted file mode 100644 index 40c9afd..0000000 --- a/SOURCES/0012-tmpfiles.d-include-setgid-perms-for-run-log-journal.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 4092dd8187d9ff8d42d7f05b4a95816b575f67ff Mon Sep 17 00:00:00 2001 -From: Dave Reisner -Date: Wed, 2 Oct 2013 15:35:16 -0400 -Subject: [PATCH] tmpfiles.d: include setgid perms for /run/log/journal - -4608af4333d0f7f5 set permissions for journal storage on persistent disk -but not the volatile storage. - -ref: https://bugs.archlinux.org/task/37170 ---- - tmpfiles.d/systemd.conf | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/tmpfiles.d/systemd.conf b/tmpfiles.d/systemd.conf -index b630440..a05c657 100644 ---- a/tmpfiles.d/systemd.conf -+++ b/tmpfiles.d/systemd.conf -@@ -26,3 +26,5 @@ F /run/nologin 0644 - - - "System is booting up. See pam_nologin(8)" - - m /var/log/journal 2755 root systemd-journal - - - m /var/log/journal/%m 2755 root systemd-journal - - -+m /run/log/journal 2755 root systemd-journal - - -+m /run/log/journal/%m 2755 root systemd-journal - - diff --git a/SOURCES/0012-udev-net_id-correctly-name-netdevs-based-on-dev_port.patch b/SOURCES/0012-udev-net_id-correctly-name-netdevs-based-on-dev_port.patch new file mode 100644 index 0000000..049618d --- /dev/null +++ b/SOURCES/0012-udev-net_id-correctly-name-netdevs-based-on-dev_port.patch @@ -0,0 +1,91 @@ +From 74b66951fcd54e6ab51023f60cc021fe355be1a8 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Sat, 25 Oct 2014 17:10:11 +0200 +Subject: [PATCH] udev: net_id - correctly name netdevs based on dev_port when + set + +Upstream, dev_id was replaced by dev_port, and the same happened for some kernel +drivers. This logic is not in the RHEL7 kernel, except for one new driver which +uses dev_port, but never used dev_id in the past. + +To give proper names to these devices, fall back to using dev_port when dev_id +is not set. This does not affect any existing drivers. + +(rhel only) + +Resolves: #1155996 + +Conflicts: + src/udev/udev-builtin-net_id.c + +Conflicts: + src/udev/udev-builtin-net_id.c +--- + src/udev/udev-builtin-net_id.c | 26 ++++++++++++++++---------- + 1 file changed, 16 insertions(+), 10 deletions(-) + +diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c +index 37ff1b8..99caa0a 100644 +--- a/src/udev/udev-builtin-net_id.c ++++ b/src/udev/udev-builtin-net_id.c +@@ -38,7 +38,7 @@ + * o -- on-board device index number + * s[f][d] -- hotplug slot index number + * x -- MAC address +- * [P]ps[f][d] ++ * [P]ps[f][d/] + * -- PCI geographical location + * [P]ps[f][u][..][c][i] + * -- USB port number chain +@@ -169,7 +169,7 @@ static bool is_pci_multifunction(struct udev_device *dev) { + + static int dev_pci_slot(struct udev_device *dev, struct netnames *names) { + struct udev *udev = udev_device_get_udev(names->pcidev); +- unsigned domain, bus, slot, func, dev_port = 0; ++ unsigned domain, bus, slot, func, dev_id = 0; + size_t l; + char *s; + const char *attr; +@@ -183,9 +183,15 @@ static int dev_pci_slot(struct udev_device *dev, struct netnames *names) { + return -ENOENT; + + /* kernel provided multi-device index */ +- attr = udev_device_get_sysattr_value(dev, "dev_port"); +- if (attr) +- dev_port = strtol(attr, NULL, 10); ++ attr = udev_device_get_sysattr_value(dev, "dev_id"); ++ if (attr) { ++ dev_id = strtol(attr, NULL, 16); ++ if (dev_id == 0) { ++ attr = udev_device_get_sysattr_value(dev, "dev_port"); ++ if (attr) ++ dev_id = strtol(attr, NULL, 16); ++ } ++ } + + /* compose a name based on the raw kernel's PCI bus, slot numbers */ + s = names->pci_path; +@@ -194,9 +200,9 @@ static int dev_pci_slot(struct udev_device *dev, struct netnames *names) { + l = strpcpyf(&s, l, "P%u", domain); + l = strpcpyf(&s, l, "p%us%u", bus, slot); + if (func > 0 || is_pci_multifunction(names->pcidev)) +- l = strpcpyf(&s, l, "f%u", func); +- if (dev_port > 0) +- l = strpcpyf(&s, l, "d%u", dev_port); ++ l = strpcpyf(&s, l, "f%d", func); ++ if (dev_id > 0) ++ l = strpcpyf(&s, l, "d%d", dev_id); + if (l == 0) + names->pci_path[0] = '\0'; + +@@ -245,8 +251,8 @@ static int dev_pci_slot(struct udev_device *dev, struct netnames *names) { + l = strpcpyf(&s, l, "s%d", hotplug_slot); + if (func > 0 || is_pci_multifunction(names->pcidev)) + l = strpcpyf(&s, l, "f%d", func); +- if (dev_port > 0) +- l = strpcpyf(&s, l, "d%d", dev_port); ++ if (dev_id > 0) ++ l = strpcpyf(&s, l, "d%d", dev_id); + if (l == 0) + names->pci_path[0] = '\0'; + } diff --git a/SOURCES/0013-Revert-blkid-Warn-when-rejecting-a-superblock-with-a.patch b/SOURCES/0013-Revert-blkid-Warn-when-rejecting-a-superblock-with-a.patch new file mode 100644 index 0000000..a3ef95c --- /dev/null +++ b/SOURCES/0013-Revert-blkid-Warn-when-rejecting-a-superblock-with-a.patch @@ -0,0 +1,77 @@ +From f1faa24b260222e70d38492e5e3f126700dbd9f8 Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Wed, 4 Mar 2015 16:10:36 +0100 +Subject: [PATCH] Revert "blkid: Warn when rejecting a superblock with a bad + csum" + +This reverts commit d47f6ca5f9b7a0b400d8bdb050151a0284fb4bdb. +--- + README | 2 +- + configure.ac | 2 +- + src/udev/udev-builtin-blkid.c | 13 +------------ + 3 files changed, 3 insertions(+), 14 deletions(-) + +diff --git a/README b/README +index 287d05c..ac2a81c 100644 +--- a/README ++++ b/README +@@ -115,7 +115,7 @@ REQUIREMENTS: + libcap + libmount >= 2.20 (from util-linux) + libseccomp >= 1.0.0 (optional) +- libblkid >= 2.24 (from util-linux) (optional) ++ libblkid >= 2.20 (from util-linux) (optional) + libkmod >= 15 (optional) + PAM >= 1.1.2 (optional) + libcryptsetup (optional) +diff --git a/configure.ac b/configure.ac +index f701bcf..9c25c3c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -437,7 +437,7 @@ AM_CONDITIONAL(HAVE_XKBCOMMON, [test "$have_xkbcommon" = "yes"]) + have_blkid=no + AC_ARG_ENABLE(blkid, AS_HELP_STRING([--disable-blkid], [disable blkid support])) + if test "x$enable_blkid" != "xno"; then +- PKG_CHECK_MODULES(BLKID, [ blkid >= 2.24 ], ++ PKG_CHECK_MODULES(BLKID, [ blkid >= 2.20 ], + [AC_DEFINE(HAVE_BLKID, 1, [Define if blkid is available]) have_blkid=yes], have_blkid=no) + if test "x$have_blkid" = xno -a "x$enable_blkid" = xyes; then + AC_MSG_ERROR([*** blkid support requested but libraries not found]) +diff --git a/src/udev/udev-builtin-blkid.c b/src/udev/udev-builtin-blkid.c +index 03e3dc2..8999583 100644 +--- a/src/udev/udev-builtin-blkid.c ++++ b/src/udev/udev-builtin-blkid.c +@@ -221,7 +221,6 @@ static int builtin_blkid(struct udev_device *dev, int argc, char *argv[], bool t + blkid_probe pr; + const char *data; + const char *name; +- const char *prtype = NULL; + int nvals; + int i; + int err = 0; +@@ -257,8 +256,7 @@ static int builtin_blkid(struct udev_device *dev, int argc, char *argv[], bool t + blkid_probe_set_superblocks_flags(pr, + BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID | + BLKID_SUBLKS_TYPE | BLKID_SUBLKS_SECTYPE | +- BLKID_SUBLKS_USAGE | BLKID_SUBLKS_VERSION | +- BLKID_SUBLKS_BADCSUM); ++ BLKID_SUBLKS_USAGE | BLKID_SUBLKS_VERSION); + + if (noraid) + blkid_probe_filter_superblocks_usage(pr, BLKID_FLTR_NOTIN, BLKID_USAGE_RAID); +@@ -280,15 +278,6 @@ static int builtin_blkid(struct udev_device *dev, int argc, char *argv[], bool t + err = probe_superblocks(pr); + if (err < 0) + goto out; +- if (blkid_probe_has_value(pr, "SBBADCSUM")) { +- if (!blkid_probe_lookup_value(pr, "TYPE", &prtype, NULL)) +- log_warning("incorrect %s checksum on %s", +- prtype, udev_device_get_devnode(dev)); +- else +- log_warning("incorrect checksum on %s", +- udev_device_get_devnode(dev)); +- goto out; +- } + + /* If we are a partition then our parent passed on the root + * partition UUID to us */ diff --git a/SOURCES/0013-gpt-auto-generator-exit-immediately-if-in-container.patch b/SOURCES/0013-gpt-auto-generator-exit-immediately-if-in-container.patch deleted file mode 100644 index fe6a546..0000000 --- a/SOURCES/0013-gpt-auto-generator-exit-immediately-if-in-container.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 650b4c3e4e004acfe7c201fd8a3e9d9c87824593 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Thu, 3 Oct 2013 22:13:01 -0400 -Subject: [PATCH] gpt-auto-generator: exit immediately if in container - -Otherwise we get an ugly warning when running systemd in -a container. ---- - src/gpt-auto-generator/gpt-auto-generator.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c -index ca54925..d2b4213 100644 ---- a/src/gpt-auto-generator/gpt-auto-generator.c -+++ b/src/gpt-auto-generator/gpt-auto-generator.c -@@ -38,6 +38,7 @@ - #include "libudev.h" - #include "special.h" - #include "unit-name.h" -+#include "virt.h" - - /* TODO: - * -@@ -481,6 +482,13 @@ int main(int argc, char *argv[]) { - umask(0022); - - if (in_initrd()) { -+ log_debug("In initrd, exiting."); -+ r = 0; -+ goto finish; -+ } -+ -+ if (detect_container(NULL) > 0) { -+ log_debug("In a container, exiting."); - r = 0; - goto finish; - } diff --git a/SOURCES/0014-journald-audit-exit-gracefully-in-the-case-we-can-t-.patch b/SOURCES/0014-journald-audit-exit-gracefully-in-the-case-we-can-t-.patch new file mode 100644 index 0000000..5f2abb1 --- /dev/null +++ b/SOURCES/0014-journald-audit-exit-gracefully-in-the-case-we-can-t-.patch @@ -0,0 +1,27 @@ +From 9b5e05005e534fc7fb6dc56c94e3296bb17fe122 Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Fri, 6 Mar 2015 12:41:20 +0100 +Subject: [PATCH] journald-audit: exit gracefully in the case we can't join + audit multicast group + +--- + src/journal/journald-audit.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/journal/journald-audit.c b/src/journal/journald-audit.c +index c2f1545..151097a 100644 +--- a/src/journal/journald-audit.c ++++ b/src/journal/journald-audit.c +@@ -529,8 +529,10 @@ int server_open_audit(Server *s) { + } + + r = bind(s->audit_fd, &sa.sa, sizeof(sa.nl)); +- if (r < 0) +- return log_error_errno(errno, "Failed to join audit multicast group: %m"); ++ if (r < 0) { ++ log_warning_errno(errno, "Failed to join audit multicast group, ignoring: %m"); ++ return 0; ++ } + } else + fd_nonblock(s->audit_fd, 1); + diff --git a/SOURCES/0014-systemd-order-remote-mounts-from-mountinfo-before-re.patch b/SOURCES/0014-systemd-order-remote-mounts-from-mountinfo-before-re.patch deleted file mode 100644 index e89d7f2..0000000 --- a/SOURCES/0014-systemd-order-remote-mounts-from-mountinfo-before-re.patch +++ /dev/null @@ -1,38 +0,0 @@ -From d41259fcb7dac4f1bb02dbc743d5372827d3c01a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Thu, 3 Oct 2013 22:15:08 -0400 -Subject: [PATCH] systemd: order remote mounts from mountinfo before - remote-fs.target - -Usually the network is stopped before filesystems are umounted. -Ordering network filesystems before remote-fs.target means that their -unmounting will be performed earlier, and can terminate sucessfully. - -https://bugs.freedesktop.org/show_bug.cgi?id=70002 ---- - src/core/mount.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/src/core/mount.c b/src/core/mount.c -index 3d46557..93bfa99 100644 ---- a/src/core/mount.c -+++ b/src/core/mount.c -@@ -1440,6 +1440,9 @@ static int mount_add_one( - - u = manager_get_unit(m, e); - if (!u) { -+ const char* const target = -+ fstype_is_network(fstype) ? SPECIAL_REMOTE_FS_TARGET : SPECIAL_LOCAL_FS_TARGET; -+ - delete = true; - - u = unit_new(m, sizeof(Mount)); -@@ -1466,7 +1469,7 @@ static int mount_add_one( - goto fail; - } - -- r = unit_add_dependency_by_name(u, UNIT_BEFORE, SPECIAL_LOCAL_FS_TARGET, NULL, true); -+ r = unit_add_dependency_by_name(u, UNIT_BEFORE, target, NULL, true); - if (r < 0) - goto fail; - diff --git a/SOURCES/0015-fedora-disable-resolv.conf-symlink.patch b/SOURCES/0015-fedora-disable-resolv.conf-symlink.patch new file mode 100644 index 0000000..e7dd7af --- /dev/null +++ b/SOURCES/0015-fedora-disable-resolv.conf-symlink.patch @@ -0,0 +1,24 @@ +From 634aa6447d365af61b6cd78651eb80c32da966dc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 3 Oct 2014 21:34:14 -0400 +Subject: [PATCH] fedora: disable resolv.conf symlink + +Conflicts: + tmpfiles.d/etc.conf.m4 +--- + tmpfiles.d/etc.conf.m4 | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/tmpfiles.d/etc.conf.m4 b/tmpfiles.d/etc.conf.m4 +index 9b0e080..125d6e0 100644 +--- a/tmpfiles.d/etc.conf.m4 ++++ b/tmpfiles.d/etc.conf.m4 +@@ -10,8 +10,5 @@ + L /etc/os-release - - - - ../usr/lib/os-release + L /etc/localtime - - - - ../usr/share/zoneinfo/UTC + L+ /etc/mtab - - - - ../proc/self/mounts +-m4_ifdef(`ENABLE_RESOLVED', +-L /etc/resolv.conf - - - - ../run/systemd/resolve/resolv.conf +-)m4_dnl + C /etc/nsswitch.conf - - - - + C /etc/pam.d - - - - diff --git a/SOURCES/0015-manager-when-verifying-whether-clients-may-change-en.patch b/SOURCES/0015-manager-when-verifying-whether-clients-may-change-en.patch deleted file mode 100644 index 20a77f3..0000000 --- a/SOURCES/0015-manager-when-verifying-whether-clients-may-change-en.patch +++ /dev/null @@ -1,42 +0,0 @@ -From f4d7751752e7d2d2393078daef342e54368468d7 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 4 Oct 2013 17:01:37 +0200 -Subject: [PATCH] manager: when verifying whether clients may change - environment using selinux check for "reload" rather "reboot" - -This appears to be a copy/paste error. ---- - src/core/dbus-manager.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c -index 676a07f..8f4d017 100644 ---- a/src/core/dbus-manager.c -+++ b/src/core/dbus-manager.c -@@ -1397,7 +1397,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, - _cleanup_strv_free_ char **l = NULL; - char **e = NULL; - -- SELINUX_ACCESS_CHECK(connection, message, "reboot"); -+ SELINUX_ACCESS_CHECK(connection, message, "reload"); - - r = bus_parse_strv(message, &l); - if (r == -ENOMEM) -@@ -1424,7 +1424,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, - _cleanup_strv_free_ char **l = NULL; - char **e = NULL; - -- SELINUX_ACCESS_CHECK(connection, message, "reboot"); -+ SELINUX_ACCESS_CHECK(connection, message, "reload"); - - r = bus_parse_strv(message, &l); - if (r == -ENOMEM) -@@ -1452,7 +1452,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, - char **f = NULL; - DBusMessageIter iter; - -- SELINUX_ACCESS_CHECK(connection, message, "reboot"); -+ SELINUX_ACCESS_CHECK(connection, message, "reload"); - - if (!dbus_message_iter_init(message, &iter)) - goto oom; diff --git a/SOURCES/0016-Revert-timedated-manage-systemd-timesyncd-directly-i.patch b/SOURCES/0016-Revert-timedated-manage-systemd-timesyncd-directly-i.patch new file mode 100644 index 0000000..d63e8ed --- /dev/null +++ b/SOURCES/0016-Revert-timedated-manage-systemd-timesyncd-directly-i.patch @@ -0,0 +1,358 @@ +From 1a3dd33f98312421e0f3d654e8f5d56554557a8c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 3 Oct 2014 21:34:14 -0400 +Subject: [PATCH] Revert "timedated: manage systemd-timesyncd directly instead + of lists of alternatives" + +This reverts commit b72ddf0f4f552dd53d6404b6ddbc9f17d02b8e12. + +Conflicts: + Makefile.am + NEWS + src/timedate/timedated.c +--- + Makefile.am | 9 ++ + src/timedate/timedated.c | 252 ++++++++++++++++++++++++++++++----------------- + 2 files changed, 170 insertions(+), 91 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 9e64d6f..bf65b24 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -111,6 +111,7 @@ catalogdir=$(prefix)/lib/systemd/catalog + kernelinstalldir = $(prefix)/lib/kernel/install.d + factory_etcdir = $(prefix)/share/factory/etc + factory_pamdir = $(prefix)/share/factory/etc/pam.d ++ntpunitsdir=$(prefix)/lib/systemd/ntp-units.d + + # And these are the special ones for / + rootprefix=@rootprefix@ +@@ -5101,6 +5102,10 @@ dist_systemunit_DATA_busnames += \ + polkitpolicy_files += \ + src/timedate/org.freedesktop.timedate1.policy + ++INSTALL_DIRS += \ ++ $(prefix)/lib/systemd/ntp-units.d \ ++ $(sysconfdir)/systemd/ntp-units.d ++ + SYSTEM_UNIT_ALIASES += \ + systemd-timedated.service dbus-org.freedesktop.timedate1.service + +@@ -5177,6 +5182,10 @@ EXTRA_DIST += \ + + CLEANFILES += \ + src/timesync/timesyncd.conf ++ ++dist_ntpunits_DATA = \ ++ src/timesync/90-systemd.list ++ + endif + + # ------------------------------------------------------------------------------ +diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c +index 753c3d1..66097ef 100644 +--- a/src/timedate/timedated.c ++++ b/src/timedate/timedated.c +@@ -186,141 +186,211 @@ static int context_write_data_local_rtc(Context *c) { + return write_string_file_atomic_label("/etc/adjtime", w); + } + ++static char** get_ntp_services(void) { ++ _cleanup_strv_free_ char **r = NULL, **files = NULL; ++ char **i; ++ int k; ++ ++ k = conf_files_list(&files, ".list", NULL, ++ "/etc/systemd/ntp-units.d", ++ "/run/systemd/ntp-units.d", ++ "/usr/local/lib/systemd/ntp-units.d", ++ "/usr/lib/systemd/ntp-units.d", ++ NULL); ++ if (k < 0) ++ return NULL; ++ ++ STRV_FOREACH(i, files) { ++ _cleanup_fclose_ FILE *f; ++ ++ f = fopen(*i, "re"); ++ if (!f) ++ continue; ++ ++ for (;;) { ++ char line[PATH_MAX], *l; ++ ++ if (!fgets(line, sizeof(line), f)) { ++ if (ferror(f)) ++ log_error("Failed to read NTP unit file: %m"); ++ ++ break; ++ } ++ ++ l = strstrip(line); ++ if (l[0] == 0 || l[0] == '#') ++ continue; ++ ++ if (strv_extend(&r, l) < 0) { ++ log_oom(); ++ return NULL; ++ } ++ } ++ } ++ ++ i = r; ++ r = NULL; /* avoid cleanup */ ++ ++ return strv_uniq(i); ++} ++ + static int context_read_ntp(Context *c, sd_bus *bus) { +- _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; +- sd_bus_message *reply = NULL; +- const char *s; ++ _cleanup_strv_free_ char **l; ++ char **i; + int r; + + assert(c); + assert(bus); + +- r = sd_bus_call_method( +- bus, +- "org.freedesktop.systemd1", +- "/org/freedesktop/systemd1", +- "org.freedesktop.systemd1.Manager", +- "GetUnitFileState", +- &error, +- &reply, +- "s", +- "systemd-timesyncd.service"); ++ l = get_ntp_services(); ++ STRV_FOREACH(i, l) { ++ _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; ++ sd_bus_message *reply = NULL; ++ const char *s; + +- if (r < 0) { +- if (sd_bus_error_has_name(&error, SD_BUS_ERROR_FILE_NOT_FOUND) || +- sd_bus_error_has_name(&error, "org.freedesktop.systemd1.LoadFailed") || +- sd_bus_error_has_name(&error, "org.freedesktop.systemd1.NoSuchUnit")) +- return 0; ++ r = sd_bus_call_method( ++ bus, ++ "org.freedesktop.systemd1", ++ "/org/freedesktop/systemd1", ++ "org.freedesktop.systemd1.Manager", ++ "GetUnitFileState", ++ &error, ++ &reply, ++ "s", ++ *i); + +- return r; +- } ++ if (r < 0) { ++ /* This implementation does not exist. Try the next one. */ ++ if (sd_bus_error_has_name(&error, SD_BUS_ERROR_FILE_NOT_FOUND)) ++ continue; + +- r = sd_bus_message_read(reply, "s", &s); +- if (r < 0) +- return r; ++ return r; ++ } ++ ++ r = sd_bus_message_read(reply, "s", &s); ++ if (r < 0) ++ return r; + +- c->can_ntp = true; +- c->use_ntp = STR_IN_SET(s, "enabled", "enabled-runtime"); ++ c->can_ntp = true; ++ c->use_ntp = STR_IN_SET(s, "enabled", "enabled-runtime"); ++ ++ return 0; ++ } + + return 0; + } + + static int context_start_ntp(Context *c, sd_bus *bus, sd_bus_error *error) { ++ _cleanup_strv_free_ char **l = NULL; ++ char **i; + int r; + + assert(c); + assert(bus); + assert(error); + +- if (c->use_ntp) +- r = sd_bus_call_method( +- bus, +- "org.freedesktop.systemd1", +- "/org/freedesktop/systemd1", +- "org.freedesktop.systemd1.Manager", +- "StartUnit", +- error, +- NULL, +- "ss", +- "systemd-timesyncd.service", +- "replace"); +- else +- r = sd_bus_call_method( +- bus, +- "org.freedesktop.systemd1", +- "/org/freedesktop/systemd1", +- "org.freedesktop.systemd1.Manager", +- "StopUnit", +- error, +- NULL, +- "ss", +- "systemd-timesyncd.service", +- "replace"); ++ l = get_ntp_services(); ++ STRV_FOREACH(i, l) { ++ ++ if (c->use_ntp) ++ r = sd_bus_call_method( ++ bus, ++ "org.freedesktop.systemd1", ++ "/org/freedesktop/systemd1", ++ "org.freedesktop.systemd1.Manager", ++ "StartUnit", ++ error, ++ NULL, ++ "ss", *i, "replace"); ++ else ++ r = sd_bus_call_method( ++ bus, ++ "org.freedesktop.systemd1", ++ "/org/freedesktop/systemd1", ++ "org.freedesktop.systemd1.Manager", ++ "StopUnit", ++ error, ++ NULL, ++ "ss", *i, "replace"); ++ ++ if (r < 0) { ++ if (sd_bus_error_has_name(error, SD_BUS_ERROR_FILE_NOT_FOUND) || ++ sd_bus_error_has_name(error, "org.freedesktop.systemd1.LoadFailed") || ++ sd_bus_error_has_name(error, "org.freedesktop.systemd1.NoSuchUnit")) { ++ /* This implementation does not exist. Try the next one. */ ++ sd_bus_error_free(error); ++ continue; ++ } + +- if (r < 0) { +- if (sd_bus_error_has_name(error, SD_BUS_ERROR_FILE_NOT_FOUND) || +- sd_bus_error_has_name(error, "org.freedesktop.systemd1.LoadFailed") || +- sd_bus_error_has_name(error, "org.freedesktop.systemd1.NoSuchUnit")) +- return sd_bus_error_set_const(error, "org.freedesktop.timedate1.NoNTPSupport", "NTP not supported."); ++ return r; ++ } + +- return r; ++ return 1; + } + +- return 0; ++ sd_bus_error_set_const(error, "org.freedesktop.timedate1.NoNTPSupport", "NTP not supported."); ++ return -ENOTSUP; + } + + static int context_enable_ntp(Context*c, sd_bus *bus, sd_bus_error *error) { ++ _cleanup_strv_free_ char **l = NULL; ++ char **i; + int r; + + assert(c); + assert(bus); + assert(error); + +- if (c->use_ntp) +- r = sd_bus_call_method( +- bus, +- "org.freedesktop.systemd1", +- "/org/freedesktop/systemd1", +- "org.freedesktop.systemd1.Manager", +- "EnableUnitFiles", +- error, +- NULL, +- "asbb", 1, +- "systemd-timesyncd.service", +- false, true); +- else ++ l = get_ntp_services(); ++ STRV_FOREACH(i, l) { ++ if (c->use_ntp) ++ r = sd_bus_call_method( ++ bus, ++ "org.freedesktop.systemd1", ++ "/org/freedesktop/systemd1", ++ "org.freedesktop.systemd1.Manager", ++ "EnableUnitFiles", ++ error, ++ NULL, ++ "asbb", 1, *i, false, true); ++ else ++ r = sd_bus_call_method( ++ bus, ++ "org.freedesktop.systemd1", ++ "/org/freedesktop/systemd1", ++ "org.freedesktop.systemd1.Manager", ++ "DisableUnitFiles", ++ error, ++ NULL, ++ "asb", 1, *i, false); ++ ++ if (r < 0) { ++ if (sd_bus_error_has_name(error, SD_BUS_ERROR_FILE_NOT_FOUND)) { ++ /* This implementation does not exist. Try the next one. */ ++ sd_bus_error_free(error); ++ continue; ++ } ++ ++ return r; ++ } ++ + r = sd_bus_call_method( + bus, + "org.freedesktop.systemd1", + "/org/freedesktop/systemd1", + "org.freedesktop.systemd1.Manager", +- "DisableUnitFiles", ++ "Reload", + error, + NULL, +- "asb", 1, +- "systemd-timesyncd.service", +- false); +- +- if (r < 0) { +- if (sd_bus_error_has_name(error, SD_BUS_ERROR_FILE_NOT_FOUND)) +- return sd_bus_error_set_const(error, "org.freedesktop.timedate1.NoNTPSupport", "NTP not supported."); ++ NULL); ++ if (r < 0) ++ return r; + +- return r; ++ return 1; + } + +- r = sd_bus_call_method( +- bus, +- "org.freedesktop.systemd1", +- "/org/freedesktop/systemd1", +- "org.freedesktop.systemd1.Manager", +- "Reload", +- error, +- NULL, +- NULL); +- if (r < 0) +- return r; +- +- return 0; ++ sd_bus_error_set_const(error, "org.freedesktop.timedate1.NoNTPSupport", "NTP not supported."); ++ return -ENOTSUP; + } + + static int property_get_rtc_time( diff --git a/SOURCES/0016-mount-check-for-NULL-before-reading-pm-what.patch b/SOURCES/0016-mount-check-for-NULL-before-reading-pm-what.patch deleted file mode 100644 index 1722a3d..0000000 --- a/SOURCES/0016-mount-check-for-NULL-before-reading-pm-what.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 172b60ee7366d5e46b240386824682e4c051ad9e Mon Sep 17 00:00:00 2001 -From: Dave Reisner -Date: Fri, 4 Oct 2013 18:22:40 -0400 -Subject: [PATCH] mount: check for NULL before reading pm->what - -Since a57f7e2c828b85, a mount unit with garbage in it would cause -systemd to crash on loading it. - -ref: https://bugs.freedesktop.org/show_bug.cgi?id=70148 ---- - src/core/mount.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/core/mount.c b/src/core/mount.c -index 93bfa99..db055f0 100644 ---- a/src/core/mount.c -+++ b/src/core/mount.c -@@ -182,7 +182,7 @@ static int mount_add_mount_links(Mount *m) { - * for the source path (if this is a bind mount) to be - * available. */ - pm = get_mount_parameters_fragment(m); -- if (pm && path_is_absolute(pm->what)) { -+ if (pm && pm->what && path_is_absolute(pm->what)) { - r = unit_require_mounts_for(UNIT(m), pm->what); - if (r < 0) - return r; diff --git a/SOURCES/0017-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch b/SOURCES/0017-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch deleted file mode 100644 index 80c2c54..0000000 --- a/SOURCES/0017-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch +++ /dev/null @@ -1,178 +0,0 @@ -From 980112adcce965de6808390330750aaf11c165ab Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Sat, 5 Oct 2013 13:09:43 -0400 -Subject: [PATCH] core: do not add "what" to RequiresMountsFor for network - mounts - -For cifs mount like //server/share, we would get -RequiresMountsFor=/server/share, which probably isn't -harmful, but quite confusing. - -Unfortunately a bunch of static functions had to be moved -up, but patch is really one line. ---- - src/core/mount.c | 137 ++++++++++++++++++++++++++++--------------------------- - 1 file changed, 70 insertions(+), 67 deletions(-) - -diff --git a/src/core/mount.c b/src/core/mount.c -index db055f0..70cd372 100644 ---- a/src/core/mount.c -+++ b/src/core/mount.c -@@ -59,6 +59,72 @@ static const UnitActiveState state_translation_table[_MOUNT_STATE_MAX] = { - [MOUNT_FAILED] = UNIT_FAILED - }; - -+static char* mount_test_option(const char *haystack, const char *needle) { -+ struct mntent me = { .mnt_opts = (char*) haystack }; -+ -+ assert(needle); -+ -+ /* Like glibc's hasmntopt(), but works on a string, not a -+ * struct mntent */ -+ -+ if (!haystack) -+ return NULL; -+ -+ return hasmntopt(&me, needle); -+} -+ -+static bool mount_is_network(MountParameters *p) { -+ assert(p); -+ -+ if (mount_test_option(p->options, "_netdev")) -+ return true; -+ -+ if (p->fstype && fstype_is_network(p->fstype)) -+ return true; -+ -+ return false; -+} -+ -+static bool mount_is_bind(MountParameters *p) { -+ assert(p); -+ -+ if (mount_test_option(p->options, "bind")) -+ return true; -+ -+ if (p->fstype && streq(p->fstype, "bind")) -+ return true; -+ -+ if (mount_test_option(p->options, "rbind")) -+ return true; -+ -+ if (p->fstype && streq(p->fstype, "rbind")) -+ return true; -+ -+ return false; -+} -+ -+static bool mount_is_auto(MountParameters *p) { -+ assert(p); -+ -+ return !mount_test_option(p->options, "noauto"); -+} -+ -+static bool needs_quota(MountParameters *p) { -+ assert(p); -+ -+ if (mount_is_network(p)) -+ return false; -+ -+ if (mount_is_bind(p)) -+ return false; -+ -+ return mount_test_option(p->options, "usrquota") || -+ mount_test_option(p->options, "grpquota") || -+ mount_test_option(p->options, "quota") || -+ mount_test_option(p->options, "usrjquota") || -+ mount_test_option(p->options, "grpjquota"); -+} -+ - static void mount_init(Unit *u) { - Mount *m = MOUNT(u); - -@@ -182,7 +248,10 @@ static int mount_add_mount_links(Mount *m) { - * for the source path (if this is a bind mount) to be - * available. */ - pm = get_mount_parameters_fragment(m); -- if (pm && pm->what && path_is_absolute(pm->what)) { -+ if (pm && pm->what && -+ path_is_absolute(pm->what) && -+ !mount_is_network(pm)) { -+ - r = unit_require_mounts_for(UNIT(m), pm->what); - if (r < 0) - return r; -@@ -214,72 +283,6 @@ static int mount_add_mount_links(Mount *m) { - return 0; - } - --static char* mount_test_option(const char *haystack, const char *needle) { -- struct mntent me = { .mnt_opts = (char*) haystack }; -- -- assert(needle); -- -- /* Like glibc's hasmntopt(), but works on a string, not a -- * struct mntent */ -- -- if (!haystack) -- return NULL; -- -- return hasmntopt(&me, needle); --} -- --static bool mount_is_network(MountParameters *p) { -- assert(p); -- -- if (mount_test_option(p->options, "_netdev")) -- return true; -- -- if (p->fstype && fstype_is_network(p->fstype)) -- return true; -- -- return false; --} -- --static bool mount_is_bind(MountParameters *p) { -- assert(p); -- -- if (mount_test_option(p->options, "bind")) -- return true; -- -- if (p->fstype && streq(p->fstype, "bind")) -- return true; -- -- if (mount_test_option(p->options, "rbind")) -- return true; -- -- if (p->fstype && streq(p->fstype, "rbind")) -- return true; -- -- return false; --} -- --static bool mount_is_auto(MountParameters *p) { -- assert(p); -- -- return !mount_test_option(p->options, "noauto"); --} -- --static bool needs_quota(MountParameters *p) { -- assert(p); -- -- if (mount_is_network(p)) -- return false; -- -- if (mount_is_bind(p)) -- return false; -- -- return mount_test_option(p->options, "usrquota") || -- mount_test_option(p->options, "grpquota") || -- mount_test_option(p->options, "quota") || -- mount_test_option(p->options, "usrjquota") || -- mount_test_option(p->options, "grpjquota"); --} -- - static int mount_add_device_links(Mount *m) { - MountParameters *p; - bool device_wants_mount = false; diff --git a/SOURCES/0017-journal-remote-fix-certificate-status-memory-leak.patch b/SOURCES/0017-journal-remote-fix-certificate-status-memory-leak.patch new file mode 100644 index 0000000..39b39a4 --- /dev/null +++ b/SOURCES/0017-journal-remote-fix-certificate-status-memory-leak.patch @@ -0,0 +1,28 @@ +From fb1115e5738b798bb99e5a699838395ca463e29d Mon Sep 17 00:00:00 2001 +From: Michal Schmidt +Date: Tue, 17 Feb 2015 10:33:01 +0100 +Subject: [PATCH] journal-remote: fix certificate status memory leak + +The output of gnutls_certificate_verification_status_print() needs to be +freed. + +Noticed this while staring at verify_cert_authorized() to see what could +possibly confuse gcc5 on armv7hl to segfault during compilation. + +(cherry picked from commit 9c3cf9693ac5c0a332ba376f99e6adea28b1bb0d) +--- + src/journal-remote/microhttpd-util.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/journal-remote/microhttpd-util.c b/src/journal-remote/microhttpd-util.c +index 34d9337..de9c6ab 100644 +--- a/src/journal-remote/microhttpd-util.c ++++ b/src/journal-remote/microhttpd-util.c +@@ -179,6 +179,7 @@ static int verify_cert_authorized(gnutls_session_t session) { + return log_error_errno(r, "gnutls_certificate_verification_status_print failed: %m"); + + log_info("Certificate status: %s", out.data); ++ gnutls_free(out.data); + + return status == 0 ? 0 : -EPERM; + } diff --git a/SOURCES/0018-journal-remote-fix-client_cert-memory-leak.patch b/SOURCES/0018-journal-remote-fix-client_cert-memory-leak.patch new file mode 100644 index 0000000..533343a --- /dev/null +++ b/SOURCES/0018-journal-remote-fix-client_cert-memory-leak.patch @@ -0,0 +1,32 @@ +From 0488761858a3bfbf06a25fbf3bc0e28fdfc28234 Mon Sep 17 00:00:00 2001 +From: Michal Schmidt +Date: Tue, 17 Feb 2015 10:36:57 +0100 +Subject: [PATCH] journal-remote: fix client_cert memory leak + +Found by Valgrind while testing the previous memory leak fix. + +(cherry picked from commit 32c3d7144cf9a5c8c03761d7f198142ca0f5f7b8) +--- + src/journal-remote/microhttpd-util.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/src/journal-remote/microhttpd-util.c b/src/journal-remote/microhttpd-util.c +index de9c6ab..a95fff1 100644 +--- a/src/journal-remote/microhttpd-util.c ++++ b/src/journal-remote/microhttpd-util.c +@@ -239,10 +239,14 @@ static int get_auth_dn(gnutls_x509_crt_t client_cert, char **buf) { + return 0; + } + ++static inline void gnutls_x509_crt_deinitp(gnutls_x509_crt_t *p) { ++ gnutls_x509_crt_deinit(*p); ++} ++ + int check_permissions(struct MHD_Connection *connection, int *code, char **hostname) { + const union MHD_ConnectionInfo *ci; + gnutls_session_t session; +- gnutls_x509_crt_t client_cert; ++ _cleanup_(gnutls_x509_crt_deinitp) gnutls_x509_crt_t client_cert = NULL; + _cleanup_free_ char *buf = NULL; + int r; + diff --git a/SOURCES/0018-systemd-serialize-deserialize-forbid_restart-value.patch b/SOURCES/0018-systemd-serialize-deserialize-forbid_restart-value.patch deleted file mode 100644 index b0eceb8..0000000 --- a/SOURCES/0018-systemd-serialize-deserialize-forbid_restart-value.patch +++ /dev/null @@ -1,48 +0,0 @@ -From d5a7089608ccde2302b185ec367165c8b5623a12 Mon Sep 17 00:00:00 2001 -From: Sylvia Else -Date: Sun, 6 Oct 2013 23:06:35 -0400 -Subject: [PATCH] systemd: serialize/deserialize forbid_restart value - -The Service type's forbid_restart field was not preserved by -serialization/deserialization, so the fact that the service should not -be restarted after stopping was lost. - -If a systemctl stop foo command has been given, but the foo service -has not yet stopped, and then the systemctl --system daemon-reload was -given, then when the foo service eventually stopped, systemd would -restart it. - -https://bugs.freedesktop.org/show_bug.cgi?id=69800 ---- - src/core/service.c | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/src/core/service.c b/src/core/service.c -index 6792024..98b1599 100644 ---- a/src/core/service.c -+++ b/src/core/service.c -@@ -2651,6 +2651,9 @@ static int service_serialize(Unit *u, FILE *f, FDSet *fds) { - if (s->exec_context.var_tmp_dir) - unit_serialize_item(u, f, "var-tmp-dir", s->exec_context.var_tmp_dir); - -+ if (s->forbid_restart) -+ unit_serialize_item(u, f, "forbid_restart", yes_no(s->forbid_restart)); -+ - return 0; - } - -@@ -2787,6 +2790,14 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value, - return log_oom(); - - s->exec_context.var_tmp_dir = t; -+ } else if (streq(key, "forbid_restart")) { -+ int b; -+ -+ b = parse_boolean(value); -+ if (b < 0) -+ log_debug_unit(u->id, "Failed to parse forbid_restart value %s", value); -+ else -+ s->forbid_restart = b; - } else - log_debug_unit(u->id, "Unknown serialization key '%s'", key); - diff --git a/SOURCES/0019-core-unify-the-way-we-denote-serialization-attribute.patch b/SOURCES/0019-core-unify-the-way-we-denote-serialization-attribute.patch deleted file mode 100644 index 5624168..0000000 --- a/SOURCES/0019-core-unify-the-way-we-denote-serialization-attribute.patch +++ /dev/null @@ -1,37 +0,0 @@ -From e409d591e0d9ae65d351cf32ae7cb79def50f009 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 9 Oct 2013 00:13:55 +0200 -Subject: [PATCH] core: unify the way we denote serialization attributes - ---- - src/core/service.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/core/service.c b/src/core/service.c -index 98b1599..96ed2d3 100644 ---- a/src/core/service.c -+++ b/src/core/service.c -@@ -2652,7 +2652,7 @@ static int service_serialize(Unit *u, FILE *f, FDSet *fds) { - unit_serialize_item(u, f, "var-tmp-dir", s->exec_context.var_tmp_dir); - - if (s->forbid_restart) -- unit_serialize_item(u, f, "forbid_restart", yes_no(s->forbid_restart)); -+ unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart)); - - return 0; - } -@@ -2790,12 +2790,12 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value, - return log_oom(); - - s->exec_context.var_tmp_dir = t; -- } else if (streq(key, "forbid_restart")) { -+ } else if (streq(key, "forbid-restart")) { - int b; - - b = parse_boolean(value); - if (b < 0) -- log_debug_unit(u->id, "Failed to parse forbid_restart value %s", value); -+ log_debug_unit(u->id, "Failed to parse forbid-restart value %s", value); - else - s->forbid_restart = b; - } else diff --git a/SOURCES/0019-tmpfiles-Fix-parse_acl-error-message.patch b/SOURCES/0019-tmpfiles-Fix-parse_acl-error-message.patch new file mode 100644 index 0000000..ae6e963 --- /dev/null +++ b/SOURCES/0019-tmpfiles-Fix-parse_acl-error-message.patch @@ -0,0 +1,25 @@ +From 3d9f88326fefe4bf8f5ed4b1210c6b563a3eecff Mon Sep 17 00:00:00 2001 +From: Martin Pitt +Date: Tue, 17 Feb 2015 12:47:51 +0100 +Subject: [PATCH] tmpfiles: Fix parse_acl error message + +parse_acl() returns the error instead of setting errno. + +(cherry picked from commit 484adfd914504cd7e95867cea20ca7af71b888f2) +--- + src/tmpfiles/tmpfiles.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index c948d4d..88ba7e4 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -689,7 +689,7 @@ static int get_acls_from_arg(Item *item) { + * afterwards, so the mask can be added now if necessary. */ + r = parse_acl(item->argument, &item->acl_access, &item->acl_default, !item->force); + if (r < 0) +- log_warning_errno(errno, "Failed to parse ACL \"%s\": %m. Ignoring", ++ log_warning_errno(r, "Failed to parse ACL \"%s\": %m. Ignoring", + item->argument); + #else + log_warning_errno(ENOSYS, "ACLs are not supported. Ignoring"); diff --git a/SOURCES/0020-journald-fix-minor-memory-leak.patch b/SOURCES/0020-journald-fix-minor-memory-leak.patch deleted file mode 100644 index b8f3e4d..0000000 --- a/SOURCES/0020-journald-fix-minor-memory-leak.patch +++ /dev/null @@ -1,22 +0,0 @@ -From dac4b2528173c73473b0bf6a147e47170fd344d6 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 9 Oct 2013 04:03:45 +0200 -Subject: [PATCH] journald: fix minor memory leak - ---- - src/journal/journal-vacuum.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/journal/journal-vacuum.c b/src/journal/journal-vacuum.c -index c73ad8f..8d5effb 100644 ---- a/src/journal/journal-vacuum.c -+++ b/src/journal/journal-vacuum.c -@@ -278,6 +278,8 @@ int journal_directory_vacuum( - } else if (errno != ENOENT) - log_warning("Failed to delete %s/%s: %m", directory, p); - -+ free(p); -+ - continue; - } - diff --git a/SOURCES/0020-test-utf8-fix-utf16-tests-on-BE-machines.patch b/SOURCES/0020-test-utf8-fix-utf16-tests-on-BE-machines.patch new file mode 100644 index 0000000..5523542 --- /dev/null +++ b/SOURCES/0020-test-utf8-fix-utf16-tests-on-BE-machines.patch @@ -0,0 +1,23 @@ +From c49cced2ef923522398695531363de2eb3940273 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Wed, 18 Feb 2015 14:33:50 +0100 +Subject: [PATCH] test: utf8 - fix utf16 tests on BE machines + +(cherry picked from commit 502184de0f95d3a124d4d4c77ae7a88747a0fac2) +--- + src/test/test-utf8.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/test/test-utf8.c b/src/test/test-utf8.c +index befa385..346f852 100644 +--- a/src/test/test-utf8.c ++++ b/src/test/test-utf8.c +@@ -95,7 +95,7 @@ static void test_utf8_escaping_printable(void) { + + static void test_utf16_to_utf8(void) { + char *a = NULL; +- const uint16_t utf16[] = { 'a', 0xd800, 'b', 0xdc00, 'c', 0xd801, 0xdc37 }; ++ const uint16_t utf16[] = { htole16('a'), htole16(0xd800), htole16('b'), htole16(0xdc00), htole16('c'), htole16(0xd801), htole16(0xdc37) }; + const char utf8[] = { 'a', 'b', 'c', 0xf0, 0x90, 0x90, 0xb7, 0 }; + + a = utf16_to_utf8(utf16, 14); diff --git a/SOURCES/0021-journald-remove-rotated-file-from-hashmap-when-rotat.patch b/SOURCES/0021-journald-remove-rotated-file-from-hashmap-when-rotat.patch deleted file mode 100644 index bf5accf..0000000 --- a/SOURCES/0021-journald-remove-rotated-file-from-hashmap-when-rotat.patch +++ /dev/null @@ -1,36 +0,0 @@ -From c10d51e51388a133d1e0a656f9f69c3d2ca79f09 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Wed, 9 Oct 2013 22:13:13 -0400 -Subject: [PATCH] journald: remove rotated file from hashmap when rotation - fails - -Before, when the user journal file was rotated, journal_file_rotate -could close the old file and fail to open the new file. In that -case, we would leave the old (deallocated) file in the hashmap. -On subsequent accesses, we could retrieve this stale entry, leading -to a segfault. - -When journal_file_rotate fails with the file pointer set to 0, -old file is certainly gone, and cannot be used anymore. - -https://bugzilla.redhat.com/show_bug.cgi?id=890463 ---- - src/journal/journald-server.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c -index 4f47eb1..e03e413 100644 ---- a/src/journal/journald-server.c -+++ b/src/journal/journald-server.c -@@ -321,8 +321,10 @@ void server_rotate(Server *s) { - if (r < 0) - if (f) - log_error("Failed to rotate %s: %s", f->path, strerror(-r)); -- else -+ else { - log_error("Failed to create user journal: %s", strerror(-r)); -+ hashmap_remove(s->user_journals, k); -+ } - else { - hashmap_replace(s->user_journals, k, f); - server_fix_perms(s, f, PTR_TO_UINT32(k)); diff --git a/SOURCES/0021-tmpfiles-avoid-creating-duplicate-acl-entries.patch b/SOURCES/0021-tmpfiles-avoid-creating-duplicate-acl-entries.patch new file mode 100644 index 0000000..988bd03 --- /dev/null +++ b/SOURCES/0021-tmpfiles-avoid-creating-duplicate-acl-entries.patch @@ -0,0 +1,128 @@ +From c7d4f7a5a6cef5a46f905141e2ac27da3c96d2b7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 23 Feb 2015 23:19:54 -0500 +Subject: [PATCH] tmpfiles: avoid creating duplicate acl entries + +https://bugs.freedesktop.org/show_bug.cgi?id=89202 +https://bugs.debian.org/778656 + +Status quo ante can be restored with: + getfacl -p /var/log/journal/`cat /etc/machine-id`|grep -v '^#'|sort -u|sudo setfacl --set-file=- /var/log/journal/`cat /etc/machine-id` + +(cherry picked from commit 1c73f3bc29111a00738569c9d40a989b161a0624) +--- + src/shared/acl-util.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++++-- + src/shared/acl-util.h | 4 +++ + 2 files changed, 81 insertions(+), 2 deletions(-) + +diff --git a/src/shared/acl-util.c b/src/shared/acl-util.c +index a4ff1ab..cbe09d7 100644 +--- a/src/shared/acl-util.c ++++ b/src/shared/acl-util.c +@@ -282,6 +282,77 @@ int parse_acl(char *text, acl_t *acl_access, acl_t *acl_default, bool want_mask) + return 0; + } + ++static int acl_entry_equal(acl_entry_t a, acl_entry_t b) { ++ acl_tag_t tag_a, tag_b; ++ ++ if (acl_get_tag_type(a, &tag_a) < 0) ++ return -errno; ++ ++ if (acl_get_tag_type(b, &tag_b) < 0) ++ return -errno; ++ ++ if (tag_a != tag_b) ++ return false; ++ ++ switch (tag_a) { ++ case ACL_USER_OBJ: ++ case ACL_GROUP_OBJ: ++ case ACL_MASK: ++ case ACL_OTHER: ++ /* can have only one of those */ ++ return true; ++ case ACL_USER: { ++ _cleanup_(acl_free_uid_tpp) uid_t *uid_a, *uid_b; ++ ++ uid_a = acl_get_qualifier(a); ++ if (!uid_a) ++ return -errno; ++ ++ uid_b = acl_get_qualifier(b); ++ if (!uid_b) ++ return -errno; ++ ++ return *uid_a == *uid_b; ++ } ++ case ACL_GROUP: { ++ _cleanup_(acl_free_gid_tpp) gid_t *gid_a, *gid_b; ++ ++ gid_a = acl_get_qualifier(a); ++ if (!gid_a) ++ return -errno; ++ ++ gid_b = acl_get_qualifier(b); ++ if (!gid_b) ++ return -errno; ++ ++ return *gid_a == *gid_b; ++ } ++ default: ++ assert_not_reached("Unknown acl tag type"); ++ } ++} ++ ++static int find_acl_entry(acl_t acl, acl_entry_t entry, acl_entry_t *out) { ++ acl_entry_t i; ++ int r; ++ ++ for (r = acl_get_entry(acl, ACL_FIRST_ENTRY, &i); ++ r > 0; ++ r = acl_get_entry(acl, ACL_NEXT_ENTRY, &i)) { ++ ++ r = acl_entry_equal(i, entry); ++ if (r < 0) ++ return r; ++ if (r > 0) { ++ *out = i; ++ return 1; ++ } ++ } ++ if (r < 0) ++ return -errno; ++ return 0; ++} ++ + int acls_for_file(const char *path, acl_type_t type, acl_t new, acl_t *acl) { + _cleanup_(acl_freep) acl_t old; + acl_entry_t i; +@@ -297,8 +368,12 @@ int acls_for_file(const char *path, acl_type_t type, acl_t new, acl_t *acl) { + + acl_entry_t j; + +- if (acl_create_entry(&old, &j) < 0) +- return -errno; ++ r = find_acl_entry(old, i, &j); ++ if (r < 0) ++ return r; ++ if (r == 0) ++ if (acl_create_entry(&old, &j) < 0) ++ return -errno; + + if (acl_copy_entry(j, i) < 0) + return -errno; +diff --git a/src/shared/acl-util.h b/src/shared/acl-util.h +index 90e88ff..fdb9006 100644 +--- a/src/shared/acl-util.h ++++ b/src/shared/acl-util.h +@@ -41,5 +41,9 @@ int acls_for_file(const char *path, acl_type_t type, acl_t new, acl_t *acl); + DEFINE_TRIVIAL_CLEANUP_FUNC(acl_t, acl_free); + #define acl_free_charp acl_free + DEFINE_TRIVIAL_CLEANUP_FUNC(char*, acl_free_charp); ++#define acl_free_uid_tp acl_free ++DEFINE_TRIVIAL_CLEANUP_FUNC(uid_t*, acl_free_uid_tp); ++#define acl_free_gid_tp acl_free ++DEFINE_TRIVIAL_CLEANUP_FUNC(gid_t*, acl_free_gid_tp); + + #endif diff --git a/SOURCES/0022-shared-time-util-fix-gcc5-warning.patch b/SOURCES/0022-shared-time-util-fix-gcc5-warning.patch new file mode 100644 index 0000000..04ddfbe --- /dev/null +++ b/SOURCES/0022-shared-time-util-fix-gcc5-warning.patch @@ -0,0 +1,29 @@ +From 15bfa13aa624e1f2a15571ad5278acec643c0489 Mon Sep 17 00:00:00 2001 +From: Daniel Mack +Date: Tue, 24 Feb 2015 13:26:09 +0100 +Subject: [PATCH] shared/time-util: fix gcc5 warning + + CC src/shared/libsystemd_shared_la-time-util.lo +src/shared/time-util.c: In function 'parse_nsec': +src/shared/time-util.c:789:25: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses] + if (!*s != 0) + ^ + +(cherry picked from commit 8e8933ca0f06bae19cb6db601e83b33f8ac80f2a) +--- + src/shared/time-util.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/time-util.c b/src/shared/time-util.c +index 947ac1f..1c36c57 100644 +--- a/src/shared/time-util.c ++++ b/src/shared/time-util.c +@@ -786,7 +786,7 @@ int parse_nsec(const char *t, nsec_t *nsec) { + s = startswith(p, "infinity"); + if (s) { + s += strspn(s, WHITESPACE); +- if (!*s != 0) ++ if (*s != 0) + return -EINVAL; + + *nsec = NSEC_INFINITY; diff --git a/SOURCES/0022-udevadm.xml-document-resolve-names-option-for-test.patch b/SOURCES/0022-udevadm.xml-document-resolve-names-option-for-test.patch deleted file mode 100644 index 213de85..0000000 --- a/SOURCES/0022-udevadm.xml-document-resolve-names-option-for-test.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 46ae516340261691a08f64439dfd7aafa43b7467 Mon Sep 17 00:00:00 2001 -From: Dave Reisner -Date: Sun, 13 Oct 2013 17:42:51 -0400 -Subject: [PATCH] udevadm.xml: document --resolve-names option for test - -And remove documentation of the --subsystem flag which doesn't actually -exist. ---- - man/udevadm.xml | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/man/udevadm.xml b/man/udevadm.xml -index d0b257d..b959216 100644 ---- a/man/udevadm.xml -+++ b/man/udevadm.xml -@@ -462,9 +462,13 @@ - - - -- -+ - -- The subsystem string. -+ Specify when udevadm should resolve names of users and groups. -+ When set to early (the default) names will be resolved when the -+ rules are parsed. When set to late names will be resolved for -+ every event. When set to never names will never be resolved and -+ all devices will be owned by root. - - - diff --git a/SOURCES/0023-dbus-common-avoid-leak-in-error-path.patch b/SOURCES/0023-dbus-common-avoid-leak-in-error-path.patch deleted file mode 100644 index 04290cb..0000000 --- a/SOURCES/0023-dbus-common-avoid-leak-in-error-path.patch +++ /dev/null @@ -1,68 +0,0 @@ -From 10725a4ee35e5d1d97c2f9bc72010c5c0210cd6b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Fri, 11 Oct 2013 19:33:20 -0400 -Subject: [PATCH] dbus-common: avoid leak in error path - -src/shared/dbus-common.c:968:33: warning: Potential leak of memory pointed to by 'l' - return -EINVAL; - ^~~~~~ ---- - src/shared/dbus-common.c | 20 ++++++++++---------- - 1 file changed, 10 insertions(+), 10 deletions(-) - -diff --git a/src/shared/dbus-common.c b/src/shared/dbus-common.c -index c727cae..3ba2d87 100644 ---- a/src/shared/dbus-common.c -+++ b/src/shared/dbus-common.c -@@ -934,7 +934,7 @@ int bus_parse_strv_iter(DBusMessageIter *iter, char ***_l) { - int bus_parse_strv_pairs_iter(DBusMessageIter *iter, char ***_l) { - DBusMessageIter sub, sub2; - unsigned n = 0, i = 0; -- char **l; -+ _cleanup_strv_free_ char **l = NULL; - - assert(iter); - assert(_l); -@@ -953,6 +953,7 @@ int bus_parse_strv_pairs_iter(DBusMessageIter *iter, char ***_l) { - l = new(char*, n*2+1); - if (!l) - return -ENOMEM; -+ l[0] = NULL; /* make sure that l is properly terminated at all times */ - - dbus_message_iter_recurse(iter, &sub); - -@@ -968,26 +969,25 @@ int bus_parse_strv_pairs_iter(DBusMessageIter *iter, char ***_l) { - return -EINVAL; - - l[i] = strdup(a); -- if (!l[i]) { -- strv_free(l); -+ if (!l[i]) - return -ENOMEM; -- } -+ i++; - -- l[++i] = strdup(b); -- if (!l[i]) { -- strv_free(l); -+ l[i] = strdup(b); -+ if (!l[i]) - return -ENOMEM; -- } -- - i++; -+ - dbus_message_iter_next(&sub); - } - - assert(i == n*2); - l[i] = NULL; - -- if (_l) -+ if (_l) { - *_l = l; -+ l = NULL; /* avoid freeing */ -+ } - - return 0; - } diff --git a/SOURCES/0023-test-time-test-infinity-parsing-in-nanoseconds.patch b/SOURCES/0023-test-time-test-infinity-parsing-in-nanoseconds.patch new file mode 100644 index 0000000..9919dc0 --- /dev/null +++ b/SOURCES/0023-test-time-test-infinity-parsing-in-nanoseconds.patch @@ -0,0 +1,33 @@ +From 33d01e64bc4e286e4eb772de8b3781686c2d3a3a Mon Sep 17 00:00:00 2001 +From: Daniel Mack +Date: Tue, 24 Feb 2015 13:27:10 +0100 +Subject: [PATCH] test-time: test "infinity" parsing in nanoseconds + +(cherry picked from commit fdd30a1530810b659345c565e97beef06b7af2fd) +--- + src/test/test-time.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/test/test-time.c b/src/test/test-time.c +index 8cfc4cc..3840fff 100644 +--- a/src/test/test-time.c ++++ b/src/test/test-time.c +@@ -78,12 +78,18 @@ static void test_parse_nsec(void) { + assert_se(u == 2); + assert_se(parse_nsec(".7", &u) >= 0); + assert_se(u == 0); ++ assert_se(parse_nsec("infinity", &u) >= 0); ++ assert_se(u == NSEC_INFINITY); ++ assert_se(parse_nsec(" infinity ", &u) >= 0); ++ assert_se(u == NSEC_INFINITY); + + assert_se(parse_nsec(" xyz ", &u) < 0); + assert_se(parse_nsec("", &u) < 0); + assert_se(parse_nsec(" . ", &u) < 0); + assert_se(parse_nsec(" 5. ", &u) < 0); + assert_se(parse_nsec(".s ", &u) < 0); ++ assert_se(parse_nsec(" infinity .7", &u) < 0); ++ assert_se(parse_nsec(".3 infinity", &u) < 0); + } + + static void test_format_timespan_one(usec_t x, usec_t accuracy) { diff --git a/SOURCES/0024-bootchart-fix-default-init-path.patch b/SOURCES/0024-bootchart-fix-default-init-path.patch new file mode 100644 index 0000000..a315485 --- /dev/null +++ b/SOURCES/0024-bootchart-fix-default-init-path.patch @@ -0,0 +1,41 @@ +From 685ddafd9e3c5f548e02e38633f366ff453f918b Mon Sep 17 00:00:00 2001 +From: Martin Pitt +Date: Tue, 24 Feb 2015 14:30:10 +0100 +Subject: [PATCH] bootchart: fix default init path + +Commit 6e1bf7ab99 used the wrong directory; we need rootlibexecdir, not +rootlibdir, as the latter is something like /lib/x86_64-linux-gnu/ on +multi-arch systems. + +https://launchpad.net/bugs/1423867 +(cherry picked from commit a804d849b3c2199bc25d1d4e65fc119fa4d7d0e2) +--- + Makefile.am | 1 + + src/bootchart/bootchart.c | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index bf65b24..2e6455f 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -199,6 +199,7 @@ AM_CPPFLAGS = \ + -DKEXEC=\"$(KEXEC)\" \ + -DLIBDIR=\"$(libdir)\" \ + -DROOTLIBDIR=\"$(rootlibdir)\" \ ++ -DROOTLIBEXECDIR=\"$(rootlibexecdir)\" \ + -DTEST_DIR=\"$(abs_top_srcdir)/test\" \ + -I $(top_srcdir)/src \ + -I $(top_builddir)/src/shared \ +diff --git a/src/bootchart/bootchart.c b/src/bootchart/bootchart.c +index 64a384b..175be68 100644 +--- a/src/bootchart/bootchart.c ++++ b/src/bootchart/bootchart.c +@@ -76,7 +76,7 @@ int sysfd=-1; + #define DEFAULT_HZ 25.0 + #define DEFAULT_SCALE_X 100.0 /* 100px = 1sec */ + #define DEFAULT_SCALE_Y 20.0 /* 16px = 1 process bar */ +-#define DEFAULT_INIT ROOTLIBDIR "/systemd/systemd" ++#define DEFAULT_INIT ROOTLIBEXECDIR "/systemd" + #define DEFAULT_OUTPUT "/run/log" + + /* graph defaults */ diff --git a/SOURCES/0024-drop-ins-check-return-value.patch b/SOURCES/0024-drop-ins-check-return-value.patch deleted file mode 100644 index 60dcd24..0000000 --- a/SOURCES/0024-drop-ins-check-return-value.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 0b344626698e0c42a7da558783d70207f8aed05e Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Fri, 11 Oct 2013 19:33:36 -0400 -Subject: [PATCH] drop-ins: check return value - -If the function failed, nothing serious would happen -because unlink would probably return EFAULT, but this -would obscure the real error and is a bit sloppy. ---- - src/core/unit.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/src/core/unit.c b/src/core/unit.c -index 4b97710..1db7d06 100644 ---- a/src/core/unit.c -+++ b/src/core/unit.c -@@ -2908,6 +2908,9 @@ int unit_remove_drop_in(Unit *u, UnitSetPropertiesMode mode, const char *name) { - return 0; - - r = drop_in_file(u, mode, name, &p, &q); -+ if (r < 0) -+ return r; -+ - if (unlink(q) < 0) - r = errno == ENOENT ? 0 : -errno; - else diff --git a/SOURCES/0025-shared-util-Fix-glob_extend-argument.patch b/SOURCES/0025-shared-util-Fix-glob_extend-argument.patch deleted file mode 100644 index de46ffc..0000000 --- a/SOURCES/0025-shared-util-Fix-glob_extend-argument.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 18f14dc669bfda1131e31f9818eabd962bda631d Mon Sep 17 00:00:00 2001 -From: Bastien Nocera -Date: Mon, 14 Oct 2013 08:15:51 +0200 -Subject: [PATCH] shared/util: Fix glob_extend() argument - -glob_extend() would completely fail to work, or return incorrect -data if it wasn't being passed the current getopt "optarg" variable -as it used the global variable, instead of the passed parameters. ---- - src/shared/util.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/shared/util.c b/src/shared/util.c -index 9be6acf..48adc83 100644 ---- a/src/shared/util.c -+++ b/src/shared/util.c -@@ -4391,7 +4391,7 @@ int glob_extend(char ***strv, const char *path) { - char **p; - - errno = 0; -- k = glob(optarg, GLOB_NOSORT|GLOB_BRACE, NULL, &g); -+ k = glob(path, GLOB_NOSORT|GLOB_BRACE, NULL, &g); - - if (k == GLOB_NOMATCH) - return -ENOENT; diff --git a/SOURCES/0025-systemctl-bump-NOFILE-only-for-systemctl_main.patch b/SOURCES/0025-systemctl-bump-NOFILE-only-for-systemctl_main.patch new file mode 100644 index 0000000..a6593dc --- /dev/null +++ b/SOURCES/0025-systemctl-bump-NOFILE-only-for-systemctl_main.patch @@ -0,0 +1,41 @@ +From 4581f8d1cde9b6fac4320e5cdf5234c96bbd60ae Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 24 Feb 2015 10:10:04 -0500 +Subject: [PATCH] systemctl: bump NOFILE only for systemctl_main + +It is not necessary when running as telinit, etc. + +https://bugzilla.redhat.com/show_bug.cgi?id=1184712 +(cherry picked from commit 95d383ee47db488f182048cfd6846f2e6b859f2b) +--- + src/systemctl/systemctl.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c +index 21cb898..6b93ec8 100644 +--- a/src/systemctl/systemctl.c ++++ b/src/systemctl/systemctl.c +@@ -7204,6 +7204,11 @@ found: + } + } + ++ /* Increase max number of open files to 16K if we can, we ++ * might needs this when browsing journal files, which might ++ * be split up into many files. */ ++ setrlimit_closest(RLIMIT_NOFILE, &RLIMIT_MAKE_CONST(16384)); ++ + return verb->dispatch(bus, argv + optind); + } + +@@ -7453,11 +7458,6 @@ int main(int argc, char*argv[]) { + goto finish; + } + +- /* Increase max number of open files to 16K if we can, we +- * might needs this when browsing journal files, which might +- * be split up into many files. */ +- setrlimit_closest(RLIMIT_NOFILE, &RLIMIT_MAKE_CONST(16384)); +- + if (!avoid_bus()) + r = bus_open_transport_systemd(arg_transport, arg_host, arg_scope != UNIT_FILE_SYSTEM, &bus); + diff --git a/SOURCES/0026-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch b/SOURCES/0026-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch deleted file mode 100644 index 91939da..0000000 --- a/SOURCES/0026-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 63d689541fd7e70e83de425986182ee488e14a0f Mon Sep 17 00:00:00 2001 -From: Igor Zhbanov -Date: Tue, 15 Oct 2013 14:35:13 +0400 -Subject: [PATCH] Fix for SIGSEGV in systemd-bootchart on short-living - processes - -The function svg_ps_bars() dereferencess NULL pointer in the line - endtime = ps->last->sampledata->sampletime; -because of partially initialized ps_struct (ps->last == NULL). - -If some process terminates between scaning /proc directory in the log_sample() -function and reading additional information from /proc/PID/... files, -the files couldn't be read, the loop will be continued and partially -initialized structure returned. ---- - src/bootchart/store.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/bootchart/store.c b/src/bootchart/store.c -index f8c97c2..7f86cfe 100644 ---- a/src/bootchart/store.c -+++ b/src/bootchart/store.c -@@ -275,7 +275,7 @@ schedstat_next: - pscount++; - - /* mark our first sample */ -- ps->first = ps->sample; -+ ps->first = ps->last = ps->sample; - ps->sample->runtime = atoll(rt); - ps->sample->waittime = atoll(wt); - diff --git a/SOURCES/0026-acl-util-avoid-freeing-uninitialized-pointer.patch b/SOURCES/0026-acl-util-avoid-freeing-uninitialized-pointer.patch new file mode 100644 index 0000000..f7c692a --- /dev/null +++ b/SOURCES/0026-acl-util-avoid-freeing-uninitialized-pointer.patch @@ -0,0 +1,34 @@ +From 86592a27154d8da0e695304a75ae1458c574c962 Mon Sep 17 00:00:00 2001 +From: Thomas Hindoe Paaboel Andersen +Date: Tue, 24 Feb 2015 20:40:07 +0100 +Subject: [PATCH] acl-util: avoid freeing uninitialized pointer + +CID#1271344/1271345 + +(cherry picked from commit 76dcbc4992e895a377aad26f8c4a0dcd71002396) +--- + src/shared/acl-util.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/shared/acl-util.c b/src/shared/acl-util.c +index cbe09d7..e67e9ac 100644 +--- a/src/shared/acl-util.c ++++ b/src/shared/acl-util.c +@@ -302,7 +302,7 @@ static int acl_entry_equal(acl_entry_t a, acl_entry_t b) { + /* can have only one of those */ + return true; + case ACL_USER: { +- _cleanup_(acl_free_uid_tpp) uid_t *uid_a, *uid_b; ++ _cleanup_(acl_free_uid_tpp) uid_t *uid_a = NULL, *uid_b = NULL; + + uid_a = acl_get_qualifier(a); + if (!uid_a) +@@ -315,7 +315,7 @@ static int acl_entry_equal(acl_entry_t a, acl_entry_t b) { + return *uid_a == *uid_b; + } + case ACL_GROUP: { +- _cleanup_(acl_free_gid_tpp) gid_t *gid_a, *gid_b; ++ _cleanup_(acl_free_gid_tpp) gid_t *gid_a = NULL, *gid_b = NULL; + + gid_a = acl_get_qualifier(a); + if (!gid_a) diff --git a/SOURCES/0027-bootchart-svg-fix-checking-of-list-end.patch b/SOURCES/0027-bootchart-svg-fix-checking-of-list-end.patch new file mode 100644 index 0000000..61bbddb --- /dev/null +++ b/SOURCES/0027-bootchart-svg-fix-checking-of-list-end.patch @@ -0,0 +1,25 @@ +From 93ac68f5225bc0cf63ead3a3212539586d1fffb7 Mon Sep 17 00:00:00 2001 +From: Aaro Koskinen +Date: Tue, 24 Feb 2015 18:32:31 +0200 +Subject: [PATCH] bootchart: svg: fix checking of list end + +If we have less samples than expected, systemd-bootchart will crash. + +(cherry picked from commit c1682f17a0c966988e865c649e565dae41abf32d) +--- + src/bootchart/svg.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/bootchart/svg.c b/src/bootchart/svg.c +index e111fa9..144177c 100644 +--- a/src/bootchart/svg.c ++++ b/src/bootchart/svg.c +@@ -1170,7 +1170,7 @@ static void svg_ps_bars(void) { + + ps->sample = ps->sample->next; + sample_hz = ps->sample; +- for (ii=0;((ii<(int)arg_hz/2)&&(ps->sample->next));ii++) ++ for (ii=0;((ii<(int)arg_hz/2)&&(sample_hz->next));ii++) + sample_hz = sample_hz->next; + + /* subtract bootchart cpu utilization from total */ diff --git a/SOURCES/0027-man-document-the-b-special-boot-option.patch b/SOURCES/0027-man-document-the-b-special-boot-option.patch deleted file mode 100644 index e036fe1..0000000 --- a/SOURCES/0027-man-document-the-b-special-boot-option.patch +++ /dev/null @@ -1,34 +0,0 @@ -From fb31ccf54084efe2264c0960feb5ed2edb5256b3 Mon Sep 17 00:00:00 2001 -From: Jan Engelhardt -Date: Tue, 15 Oct 2013 08:58:50 +0200 -Subject: [PATCH] man: document the -b special boot option - ---- - man/kernel-command-line.xml | 1 + - man/systemd.xml | 1 + - 2 files changed, 2 insertions(+) - -diff --git a/man/kernel-command-line.xml b/man/kernel-command-line.xml -index cc267a3..abe68e5 100644 ---- a/man/kernel-command-line.xml -+++ b/man/kernel-command-line.xml -@@ -123,6 +123,7 @@ - - - -+ -b - emergency - single - s -diff --git a/man/systemd.xml b/man/systemd.xml -index fe6e331..85c06d3 100644 ---- a/man/systemd.xml -+++ b/man/systemd.xml -@@ -1149,6 +1149,7 @@ - - - -+ -b - emergency - - Boot into emergency diff --git a/SOURCES/0028-systemd-add-getrandom-syscall-numbers-for-MIPS.patch b/SOURCES/0028-systemd-add-getrandom-syscall-numbers-for-MIPS.patch new file mode 100644 index 0000000..329deb4 --- /dev/null +++ b/SOURCES/0028-systemd-add-getrandom-syscall-numbers-for-MIPS.patch @@ -0,0 +1,35 @@ +From 32213f2f1d98bf851a570ecc35c018001e5d5ac4 Mon Sep 17 00:00:00 2001 +From: Aaro Koskinen +Date: Mon, 23 Feb 2015 16:01:31 +0200 +Subject: [PATCH] systemd: add getrandom syscall numbers for MIPS + +Add getrandom syscall numbers for MIPS. Based on Linux 3.17 kernel +(commit 42944521af97a3b25516f15f3149aec3779656dc, "MIPS: Wire up new +syscalls getrandom and memfd_create"). + +(cherry picked from commit 3bec6d4690d2a7f08dc27b8221299c1db94978c4) +--- + src/shared/missing.h | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/src/shared/missing.h b/src/shared/missing.h +index 06a5576..8cb0b2c 100644 +--- a/src/shared/missing.h ++++ b/src/shared/missing.h +@@ -243,6 +243,16 @@ static inline int memfd_create(const char *name, unsigned int flags) { + # define __NR_getrandom 349 + # elif defined(__powerpc__) + # define __NR_getrandom 359 ++# elif defined _MIPS_SIM ++# if _MIPS_SIM == _MIPS_SIM_ABI32 ++# define __NR_getrandom 4353 ++# endif ++# if _MIPS_SIM == _MIPS_SIM_NABI32 ++# define __NR_getrandom 6317 ++# endif ++# if _MIPS_SIM == _MIPS_SIM_ABI64 ++# define __NR_getrandom 5313 ++# endif + # else + # warning "__NR_getrandom unknown for your architecture" + # define __NR_getrandom 0xffffffff diff --git a/SOURCES/0028-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch b/SOURCES/0028-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch deleted file mode 100644 index b382add..0000000 --- a/SOURCES/0028-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 710be393ae8d15a274f376677aa68c27cd107356 Mon Sep 17 00:00:00 2001 -From: Kay Sievers -Date: Thu, 17 Oct 2013 03:20:46 +0200 -Subject: [PATCH] tmpfiles: log unaccessible FUSE mount points only as debug - message - ---- - src/tmpfiles/tmpfiles.c | 11 +++++++---- - 1 file changed, 7 insertions(+), 4 deletions(-) - -diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c -index 8122d6a..239e56b 100644 ---- a/src/tmpfiles/tmpfiles.c -+++ b/src/tmpfiles/tmpfiles.c -@@ -275,12 +275,15 @@ static int dir_cleanup( - continue; - - if (fstatat(dirfd(d), dent->d_name, &s, AT_SYMLINK_NOFOLLOW) < 0) { -+ if (errno == ENOENT) -+ continue; - -- if (errno != ENOENT) { -+ /* FUSE, NFS mounts, SELinux might return EACCES */ -+ if (errno == EACCES) -+ log_debug("stat(%s/%s) failed: %m", p, dent->d_name); -+ else - log_error("stat(%s/%s) failed: %m", p, dent->d_name); -- r = -errno; -- } -- -+ r = -errno; - continue; - } - diff --git a/SOURCES/0029-shared-util-fix-off-by-one-error-in-tag_to_udev_node.patch b/SOURCES/0029-shared-util-fix-off-by-one-error-in-tag_to_udev_node.patch deleted file mode 100644 index 4ab2711..0000000 --- a/SOURCES/0029-shared-util-fix-off-by-one-error-in-tag_to_udev_node.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 2f7ce3bd875000149a0868b0652d40406c534f8b Mon Sep 17 00:00:00 2001 -From: Dave Reisner -Date: Sun, 6 Oct 2013 18:26:23 -0400 -Subject: [PATCH] shared/util: fix off-by-one error in tag_to_udev_node - -Triggered false negatives when encoding a string which needed every -character to be escaped, e.g. "LABEL=/". ---- - src/shared/util.c | 2 +- - src/test/test-device-nodes.c | 4 +++- - 2 files changed, 4 insertions(+), 2 deletions(-) - -diff --git a/src/shared/util.c b/src/shared/util.c -index 48adc83..6c88040 100644 ---- a/src/shared/util.c -+++ b/src/shared/util.c -@@ -3527,7 +3527,7 @@ static char *tag_to_udev_node(const char *tagvalue, const char *by) { - if (u == NULL) - return NULL; - -- enc_len = strlen(u) * 4; -+ enc_len = strlen(u) * 4 + 1; - t = new(char, enc_len); - if (t == NULL) - return NULL; -diff --git a/src/test/test-device-nodes.c b/src/test/test-device-nodes.c -index 2f3dedb..59ba4be 100644 ---- a/src/test/test-device-nodes.c -+++ b/src/test/test-device-nodes.c -@@ -26,7 +26,7 @@ - - /* helpers for test_encode_devnode_name */ - static char *do_encode_string(const char *in) { -- size_t out_len = strlen(in) * 4; -+ size_t out_len = strlen(in) * 4 + 1; - char *out = malloc(out_len); - - assert_se(out); -@@ -46,6 +46,8 @@ static void test_encode_devnode_name(void) { - assert_se(expect_encoded_as("pinkiepie", "pinkiepie")); - assert_se(expect_encoded_as("valíd\\ųtf8", "valíd\\x5cųtf8")); - assert_se(expect_encoded_as("s/ash/ng", "s\\x2fash\\x2fng")); -+ assert_se(expect_encoded_as("/", "\\x2f")); -+ assert_se(expect_encoded_as("!", "\\x21")); - } - - int main(int argc, char *argv[]) { diff --git a/SOURCES/0029-unit-use-weaker-dependencies-between-mount-and-devic.patch b/SOURCES/0029-unit-use-weaker-dependencies-between-mount-and-devic.patch new file mode 100644 index 0000000..8da6b65 --- /dev/null +++ b/SOURCES/0029-unit-use-weaker-dependencies-between-mount-and-devic.patch @@ -0,0 +1,30 @@ +From 1c0e8e9ce84cd74a20a60b98ab3a39d75d05b45f Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 25 Feb 2015 22:05:14 +0100 +Subject: [PATCH] unit: use weaker dependencies between mount and device units + in --user mode + +When running in user mode unmounting of mount units when a device +vanishes is unlikely to work, and even if it would work is already done +by PID 1 anyway. HEnce, when creating implicit dependencies between +mount units and their backing devices, created a Wants= type dependency +in --user mode, but leave a BindsTo= dependency in --system mode. + +(cherry picked from commit 5bd4b173605142c7be493aa4d958ebaef21f421d) +--- + src/core/unit.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/unit.c b/src/core/unit.c +index ee8e607..9f1e55e 100644 +--- a/src/core/unit.c ++++ b/src/core/unit.c +@@ -2845,7 +2845,7 @@ int unit_add_node_link(Unit *u, const char *what, bool wants) { + if (r < 0) + return r; + +- r = unit_add_two_dependencies(u, UNIT_AFTER, UNIT_BINDS_TO, device, true); ++ r = unit_add_two_dependencies(u, UNIT_AFTER, u->manager->running_as == SYSTEMD_SYSTEM ? UNIT_BINDS_TO : UNIT_WANTS, device, true); + if (r < 0) + return r; + diff --git a/SOURCES/0030-Configurable-Timeouts-Restarts-default-values.patch b/SOURCES/0030-Configurable-Timeouts-Restarts-default-values.patch deleted file mode 100644 index 01bebfb..0000000 --- a/SOURCES/0030-Configurable-Timeouts-Restarts-default-values.patch +++ /dev/null @@ -1,293 +0,0 @@ -From cd1c485f2fc5b23c7cdccb0dd852c7228fc79868 Mon Sep 17 00:00:00 2001 -From: Oleksii Shevchuk -Date: Mon, 4 Nov 2013 18:47:43 +0200 -Subject: [PATCH] Configurable Timeouts/Restarts default values - -https://bugs.freedesktop.org/show_bug.cgi?id=71132 - -Patch adds DefaultTimeoutStartSec, DefaultTimeoutStopSec, DefaultRestartSec -configuration options to manager configuration file. ---- - man/systemd-system.conf.xml | 24 +++++++++++++++++++++++- - man/systemd.mount.xml | 4 ++-- - man/systemd.service.xml | 6 ++++-- - man/systemd.socket.xml | 4 ++-- - man/systemd.swap.xml | 4 ++-- - src/core/device.c | 2 +- - src/core/main.c | 9 +++++++++ - src/core/manager.h | 3 +++ - src/core/mount.c | 2 +- - src/core/scope.c | 2 +- - src/core/service.c | 6 +++--- - src/core/socket.c | 2 +- - src/core/swap.c | 2 +- - src/core/system.conf | 3 +++ - src/core/user.conf | 3 +++ - 15 files changed, 59 insertions(+), 17 deletions(-) - -diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml -index e8cf8a9..c1f2648 100644 ---- a/man/systemd-system.conf.xml -+++ b/man/systemd-system.conf.xml -@@ -61,7 +61,6 @@ - otherwise user.conf. These - configuration files contain a few settings controlling - basic manager operations. -- - - - -@@ -95,6 +94,29 @@ - - - -+ DefaultTimeoutStartSec= -+ DefaultTimeoutStopSec= -+ DefaultRestartSec= -+ -+ Configures the default -+ time-outs for starting and stopping of -+ units, as well as the default time to -+ sleep between automatic restarts of a -+ units, as configured per-unit in -+ TimeoutStartSec=, -+ TimeoutStopSec= and -+ RestartSec= (for -+ service units see -+ systemd.service5 -+ for details on the per-unit -+ settings). For non-service units -+ DefaultTimeoutStartSec= -+ sets the default -+ TimeoutSec= value. -+ -+ -+ -+ - CPUAffinity= - - Configures the initial -diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml -index 48af1ca..71a5736 100644 ---- a/man/systemd.mount.xml -+++ b/man/systemd.mount.xml -@@ -260,8 +260,8 @@ - Takes a unit-less value in seconds, or - a time span value such as "5min - 20s". Pass 0 to disable the timeout -- logic. Defaults to -- 90s. -+ logic. Default value is setted up in manager configuration -+ file via DefaultTimeoutStart=. - - - -diff --git a/man/systemd.service.xml b/man/systemd.service.xml -index 5e1ddf7..df04048 100644 ---- a/man/systemd.service.xml -+++ b/man/systemd.service.xml -@@ -524,7 +524,8 @@ - Takes a unit-less value in seconds, or a - time span value such as "5min - 20s". Pass 0 to disable the timeout -- logic. Defaults to 90s, except when -+ logic. Defaults to TimeoutStartSec= in -+ manager configuration file, except when - Type=oneshot is - used in which case the timeout - is disabled by default. -@@ -545,7 +546,8 @@ - Takes a unit-less value in seconds, or a - time span value such as "5min - 20s". Pass 0 to disable the timeout -- logic. Defaults to 90s. -+ logic. Defaults to TimeoutStartSec= in -+ manager configuration file. - - - -diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml -index 8c88d9f..1c78562 100644 ---- a/man/systemd.socket.xml -+++ b/man/systemd.socket.xml -@@ -679,8 +679,8 @@ - Takes a unit-less value in seconds, or - a time span value such as "5min - 20s". Pass 0 to disable the timeout -- logic. Defaults to -- 90s. -+ logic. Defaults to TimeoutStartSec= in -+ manager configuration file. - - - -diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml -index 813ae6c..13f6c84 100644 ---- a/man/systemd.swap.xml -+++ b/man/systemd.swap.xml -@@ -186,8 +186,8 @@ - Takes a unit-less value in seconds, or - a time span value such as "5min - 20s". Pass 0 to disable the timeout -- logic. Defaults to -- 90s. -+ logic. Defaults to TimeoutStartSec= in -+ manager configuration file. - - - -diff --git a/src/core/device.c b/src/core/device.c -index 9fca82a..5397bd6 100644 ---- a/src/core/device.c -+++ b/src/core/device.c -@@ -70,7 +70,7 @@ static void device_init(Unit *u) { - * indefinitely for plugged in devices, something which cannot - * happen for the other units since their operations time out - * anyway. */ -- UNIT(d)->job_timeout = DEFAULT_TIMEOUT_USEC; -+ UNIT(d)->job_timeout = u->manager->default_timeout_start_usec; - - UNIT(d)->ignore_on_isolate = true; - UNIT(d)->ignore_on_snapshot = true; -diff --git a/src/core/main.c b/src/core/main.c -index fe291f8..937994c 100644 ---- a/src/core/main.c -+++ b/src/core/main.c -@@ -90,6 +90,9 @@ static bool arg_switched_root = false; - static char ***arg_join_controllers = NULL; - static ExecOutput arg_default_std_output = EXEC_OUTPUT_JOURNAL; - static ExecOutput arg_default_std_error = EXEC_OUTPUT_INHERIT; -+static usec_t arg_default_restart_usec = DEFAULT_RESTART_USEC; -+static usec_t arg_default_timeout_start_usec = DEFAULT_TIMEOUT_USEC; -+static usec_t arg_default_timeout_stop_usec = DEFAULT_TIMEOUT_USEC; - static usec_t arg_runtime_watchdog = 0; - static usec_t arg_shutdown_watchdog = 10 * USEC_PER_MINUTE; - static char **arg_default_environment = NULL; -@@ -636,6 +639,9 @@ static int parse_config_file(void) { - { "Manager", "CPUAffinity", config_parse_cpu_affinity2, 0, NULL }, - { "Manager", "DefaultStandardOutput", config_parse_output, 0, &arg_default_std_output }, - { "Manager", "DefaultStandardError", config_parse_output, 0, &arg_default_std_error }, -+ { "Manager", "DefaultTimeoutStartSec", config_parse_sec, 0, &arg_default_timeout_start_usec }, -+ { "Manager", "DefaultTimeoutStopSec", config_parse_sec, 0, &arg_default_timeout_stop_usec }, -+ { "Manager", "DefaultRestartSec", config_parse_sec, 0, &arg_default_restart_usec }, - { "Manager", "JoinControllers", config_parse_join_controllers, 0, &arg_join_controllers }, - { "Manager", "RuntimeWatchdogSec", config_parse_sec, 0, &arg_runtime_watchdog }, - { "Manager", "ShutdownWatchdogSec", config_parse_sec, 0, &arg_shutdown_watchdog }, -@@ -1542,6 +1548,9 @@ int main(int argc, char *argv[]) { - m->confirm_spawn = arg_confirm_spawn; - m->default_std_output = arg_default_std_output; - m->default_std_error = arg_default_std_error; -+ m->default_restart_usec = arg_default_restart_usec; -+ m->default_timeout_start_usec = arg_default_timeout_start_usec; -+ m->default_timeout_stop_usec = arg_default_timeout_stop_usec; - m->runtime_watchdog = arg_runtime_watchdog; - m->shutdown_watchdog = arg_shutdown_watchdog; - m->userspace_timestamp = userspace_timestamp; -diff --git a/src/core/manager.h b/src/core/manager.h -index a3049b5..e74c609 100644 ---- a/src/core/manager.h -+++ b/src/core/manager.h -@@ -230,6 +230,9 @@ struct Manager { - - ExecOutput default_std_output, default_std_error; - -+ usec_t default_restart_usec, default_timeout_start_usec, -+ default_timeout_stop_usec; -+ - struct rlimit *rlimit[RLIMIT_NLIMITS]; - - /* non-zero if we are reloading or reexecuting, */ -diff --git a/src/core/mount.c b/src/core/mount.c -index 70cd372..c0445a6 100644 ---- a/src/core/mount.c -+++ b/src/core/mount.c -@@ -131,7 +131,7 @@ static void mount_init(Unit *u) { - assert(u); - assert(u->load_state == UNIT_STUB); - -- m->timeout_usec = DEFAULT_TIMEOUT_USEC; -+ m->timeout_usec = u->manager->default_timeout_start_usec; - m->directory_mode = 0755; - - exec_context_init(&m->exec_context); -diff --git a/src/core/scope.c b/src/core/scope.c -index 50e5dba..41da3b9 100644 ---- a/src/core/scope.c -+++ b/src/core/scope.c -@@ -46,7 +46,7 @@ static void scope_init(Unit *u) { - assert(u); - assert(u->load_state == UNIT_STUB); - -- s->timeout_stop_usec = DEFAULT_TIMEOUT_USEC; -+ s->timeout_stop_usec = u->manager->default_timeout_stop_usec; - - watch_init(&s->timer_watch); - -diff --git a/src/core/service.c b/src/core/service.c -index 96ed2d3..e81aa1f 100644 ---- a/src/core/service.c -+++ b/src/core/service.c -@@ -124,9 +124,9 @@ static void service_init(Unit *u) { - assert(u); - assert(u->load_state == UNIT_STUB); - -- s->timeout_start_usec = DEFAULT_TIMEOUT_USEC; -- s->timeout_stop_usec = DEFAULT_TIMEOUT_USEC; -- s->restart_usec = DEFAULT_RESTART_USEC; -+ s->timeout_start_usec = u->manager->default_timeout_start_usec; -+ s->timeout_stop_usec = u->manager->default_timeout_stop_usec; -+ s->restart_usec = u->manager->default_restart_usec; - s->type = _SERVICE_TYPE_INVALID; - - watch_init(&s->watchdog_watch); -diff --git a/src/core/socket.c b/src/core/socket.c -index 6c0ac1a..d368f7e 100644 ---- a/src/core/socket.c -+++ b/src/core/socket.c -@@ -73,7 +73,7 @@ static void socket_init(Unit *u) { - assert(u->load_state == UNIT_STUB); - - s->backlog = SOMAXCONN; -- s->timeout_usec = DEFAULT_TIMEOUT_USEC; -+ s->timeout_usec = u->manager->default_timeout_start_usec; - s->directory_mode = 0755; - s->socket_mode = 0666; - -diff --git a/src/core/swap.c b/src/core/swap.c -index a68ab7c..147f710 100644 ---- a/src/core/swap.c -+++ b/src/core/swap.c -@@ -86,7 +86,7 @@ static void swap_init(Unit *u) { - assert(s); - assert(UNIT(s)->load_state == UNIT_STUB); - -- s->timeout_usec = DEFAULT_TIMEOUT_USEC; -+ s->timeout_usec = u->manager->default_timeout_start_usec; - - exec_context_init(&s->exec_context); - s->exec_context.std_output = u->manager->default_std_output; -diff --git a/src/core/system.conf b/src/core/system.conf -index 7b03c87..3c6cc03 100644 ---- a/src/core/system.conf -+++ b/src/core/system.conf -@@ -24,6 +24,9 @@ - #ShutdownWatchdogSec=10min - #CapabilityBoundingSet= - #TimerSlackNSec= -+#DefaultTimeoutStartSec=90s -+#DefaultTimeoutStopSec=90s -+#DefaultRestartSec=100ms - #DefaultEnvironment= - #DefaultLimitCPU= - #DefaultLimitFSIZE= -diff --git a/src/core/user.conf b/src/core/user.conf -index 4a0129a..b030701 100644 ---- a/src/core/user.conf -+++ b/src/core/user.conf -@@ -14,3 +14,6 @@ - #LogLocation=no - #DefaultStandardOutput=inherit - #DefaultStandardError=inherit -+#DefaultTimeoutStartSec=90s -+#DefaultTimeoutStopSec=90s -+#DefaultRestartSec=100ms diff --git a/SOURCES/0030-unit-When-stopping-due-to-BindsTo-log-which-unit-cau.patch b/SOURCES/0030-unit-When-stopping-due-to-BindsTo-log-which-unit-cau.patch new file mode 100644 index 0000000..3fed40f --- /dev/null +++ b/SOURCES/0030-unit-When-stopping-due-to-BindsTo-log-which-unit-cau.patch @@ -0,0 +1,39 @@ +From 95216d7246fe5e8ac404cc9d432072eb59f2af04 Mon Sep 17 00:00:00 2001 +From: Colin Walters +Date: Tue, 17 Feb 2015 13:47:34 -0500 +Subject: [PATCH] unit: When stopping due to BindsTo=, log which unit caused it + +I'm trying to track down a relatively recent change in systemd +which broke OSTree; see https://bugzilla.gnome.org/show_bug.cgi?id=743891 + +Systemd started to stop sysroot.mount, and this patch should help +me debug why at least. + +While we're here, "break" on the first unit we find that will +deactivate, as there's no point in further iteration. + +(cherry picked from commit 98f738b62047229af4a929d7996e2ab04253b02c) +--- + src/core/unit.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/core/unit.c b/src/core/unit.c +index 9f1e55e..563f6fe 100644 +--- a/src/core/unit.c ++++ b/src/core/unit.c +@@ -1648,12 +1648,14 @@ static void unit_check_binds_to(Unit *u) { + continue; + + stop = true; ++ break; + } + + if (!stop) + return; + +- log_unit_info(u->id, "Unit %s is bound to inactive unit. Stopping, too.", u->id); ++ assert(other); ++ log_unit_info(u->id, "Unit %s is bound to inactive unit %s. Stopping, too.", u->id, other->id); + + /* A unit we need to run is gone. Sniff. Let's stop this. */ + manager_add_job(u->manager, JOB_STOP, u, JOB_FAIL, true, NULL, NULL); diff --git a/SOURCES/0031-manager-configurable-StartLimit-default-values.patch b/SOURCES/0031-manager-configurable-StartLimit-default-values.patch deleted file mode 100644 index af95ca1..0000000 --- a/SOURCES/0031-manager-configurable-StartLimit-default-values.patch +++ /dev/null @@ -1,161 +0,0 @@ -From 409dbe76d743448629167f4412f290bba1aae11e Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Fri, 8 Nov 2013 16:01:22 +0100 -Subject: [PATCH] manager: configurable StartLimit default values - -https://bugzilla.redhat.com/show_bug.cgi?id=821723 ---- - man/systemd-system.conf.xml | 13 +++++++++++++ - man/systemd.service.xml | 9 ++++++--- - src/core/main.c | 6 ++++++ - src/core/manager.h | 3 +++ - src/core/service.c | 4 +++- - src/core/system.conf | 2 ++ - src/core/user.conf | 2 ++ - src/shared/def.h | 3 +++ - 8 files changed, 38 insertions(+), 4 deletions(-) - -diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml -index c1f2648..9a1a99f 100644 ---- a/man/systemd-system.conf.xml -+++ b/man/systemd-system.conf.xml -@@ -115,6 +115,19 @@ - TimeoutSec= value. - - -+ -+ DefaultStartLimitInterval= -+ DefaultStartLimitBurst= -+ -+ Configure the default start rate -+ limiting, as configured per-service by -+ StartLimitInterval= and -+ StartLimitBurst=. See -+ systemd.service5 -+ for details on the per-service -+ settings). -+ -+ - - - CPUAffinity= -diff --git a/man/systemd.service.xml b/man/systemd.service.xml -index df04048..3f31c11 100644 ---- a/man/systemd.service.xml -+++ b/man/systemd.service.xml -@@ -863,12 +863,15 @@ - these two options, this rate limiting - may be modified. Use - StartLimitInterval= -- to configure the checking interval -- (defaults to 10s, set to 0 to disable -+ to configure the checking interval (defaults to -+ DefaultStartLimitInterval= in -+ manager configuration file, set to 0 to disable - any kind of rate limiting). Use - StartLimitBurst= to - configure how many starts per interval -- are allowed (defaults to 5). These -+ are allowed (defaults to -+ DefaultStartLimitBurst= in -+ manager configuration file). These - configuration options are particularly - useful in conjunction with - Restart=, however -diff --git a/src/core/main.c b/src/core/main.c -index 937994c..00fd394 100644 ---- a/src/core/main.c -+++ b/src/core/main.c -@@ -93,6 +93,8 @@ static ExecOutput arg_default_std_error = EXEC_OUTPUT_INHERIT; - static usec_t arg_default_restart_usec = DEFAULT_RESTART_USEC; - static usec_t arg_default_timeout_start_usec = DEFAULT_TIMEOUT_USEC; - static usec_t arg_default_timeout_stop_usec = DEFAULT_TIMEOUT_USEC; -+static usec_t arg_default_start_limit_interval = DEFAULT_START_LIMIT_INTERVAL; -+static unsigned arg_default_start_limit_burst = DEFAULT_START_LIMIT_BURST; - static usec_t arg_runtime_watchdog = 0; - static usec_t arg_shutdown_watchdog = 10 * USEC_PER_MINUTE; - static char **arg_default_environment = NULL; -@@ -642,6 +644,8 @@ static int parse_config_file(void) { - { "Manager", "DefaultTimeoutStartSec", config_parse_sec, 0, &arg_default_timeout_start_usec }, - { "Manager", "DefaultTimeoutStopSec", config_parse_sec, 0, &arg_default_timeout_stop_usec }, - { "Manager", "DefaultRestartSec", config_parse_sec, 0, &arg_default_restart_usec }, -+ { "Manager", "DefaultStartLimitInterval", config_parse_sec, 0, &arg_default_start_limit_interval }, -+ { "Manager", "DefaultStartLimitBurst", config_parse_unsigned, 0, &arg_default_start_limit_burst }, - { "Manager", "JoinControllers", config_parse_join_controllers, 0, &arg_join_controllers }, - { "Manager", "RuntimeWatchdogSec", config_parse_sec, 0, &arg_runtime_watchdog }, - { "Manager", "ShutdownWatchdogSec", config_parse_sec, 0, &arg_shutdown_watchdog }, -@@ -1551,6 +1555,8 @@ int main(int argc, char *argv[]) { - m->default_restart_usec = arg_default_restart_usec; - m->default_timeout_start_usec = arg_default_timeout_start_usec; - m->default_timeout_stop_usec = arg_default_timeout_stop_usec; -+ m->default_start_limit_interval = arg_default_start_limit_interval; -+ m->default_start_limit_burst = arg_default_start_limit_burst; - m->runtime_watchdog = arg_runtime_watchdog; - m->shutdown_watchdog = arg_shutdown_watchdog; - m->userspace_timestamp = userspace_timestamp; -diff --git a/src/core/manager.h b/src/core/manager.h -index e74c609..ee42c5e 100644 ---- a/src/core/manager.h -+++ b/src/core/manager.h -@@ -233,6 +233,9 @@ struct Manager { - usec_t default_restart_usec, default_timeout_start_usec, - default_timeout_stop_usec; - -+ usec_t default_start_limit_interval; -+ unsigned default_start_limit_burst; -+ - struct rlimit *rlimit[RLIMIT_NLIMITS]; - - /* non-zero if we are reloading or reexecuting, */ -diff --git a/src/core/service.c b/src/core/service.c -index e81aa1f..5662180 100644 ---- a/src/core/service.c -+++ b/src/core/service.c -@@ -143,7 +143,9 @@ static void service_init(Unit *u) { - kill_context_init(&s->kill_context); - cgroup_context_init(&s->cgroup_context); - -- RATELIMIT_INIT(s->start_limit, 10*USEC_PER_SEC, 5); -+ RATELIMIT_INIT(s->start_limit, -+ u->manager->default_start_limit_interval, -+ u->manager->default_start_limit_burst); - - s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID; - } -diff --git a/src/core/system.conf b/src/core/system.conf -index 3c6cc03..38bbca5 100644 ---- a/src/core/system.conf -+++ b/src/core/system.conf -@@ -27,6 +27,8 @@ - #DefaultTimeoutStartSec=90s - #DefaultTimeoutStopSec=90s - #DefaultRestartSec=100ms -+#DefaultStartLimitInterval=10s -+#DefaultStartLimitBurst=5 - #DefaultEnvironment= - #DefaultLimitCPU= - #DefaultLimitFSIZE= -diff --git a/src/core/user.conf b/src/core/user.conf -index b030701..923ca66 100644 ---- a/src/core/user.conf -+++ b/src/core/user.conf -@@ -17,3 +17,5 @@ - #DefaultTimeoutStartSec=90s - #DefaultTimeoutStopSec=90s - #DefaultRestartSec=100ms -+#DefaultStartLimitInterval=10s -+#DefaultStartLimitBurst=5 -diff --git a/src/shared/def.h b/src/shared/def.h -index edd0bcf..e4ef735 100644 ---- a/src/shared/def.h -+++ b/src/shared/def.h -@@ -27,6 +27,9 @@ - #define DEFAULT_RESTART_USEC (100*USEC_PER_MSEC) - #define DEFAULT_CONFIRM_USEC (30*USEC_PER_SEC) - -+#define DEFAULT_START_LIMIT_INTERVAL (10*USEC_PER_SEC) -+#define DEFAULT_START_LIMIT_BURST 5 -+ - #define DEFAULT_EXIT_USEC (5*USEC_PER_MINUTE) - - #define SYSTEMD_CGROUP_CONTROLLER "name=systemd" diff --git a/SOURCES/0031-sysctl-downgrade-message-about-sysctl-overrides-to-d.patch b/SOURCES/0031-sysctl-downgrade-message-about-sysctl-overrides-to-d.patch new file mode 100644 index 0000000..9bf46d7 --- /dev/null +++ b/SOURCES/0031-sysctl-downgrade-message-about-sysctl-overrides-to-d.patch @@ -0,0 +1,26 @@ +From 24e82cb7aa809bb8d50f40957cfed51dc48e0d72 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 26 Feb 2015 19:00:11 -0500 +Subject: [PATCH] sysctl: downgrade message about sysctl overrides to debug + +Printing it at info level was tedious. We don't do that for any other +overrides. + +(cherry picked from commit 7933e4266f8124e3fca71f67757abd44155fa1cb) +--- + src/sysctl/sysctl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c +index d007c93..b6945ed 100644 +--- a/src/sysctl/sysctl.c ++++ b/src/sysctl/sysctl.c +@@ -176,7 +176,7 @@ found: + if (streq(value, existing)) + continue; + +- log_info("Overwriting earlier assignment of %s in file '%s'.", p, path); ++ log_debug("Overwriting earlier assignment of %s in file '%s'.", p, path); + free(hashmap_remove(sysctl_options, p)); + free(v); + } diff --git a/SOURCES/0032-sysctl-add-some-hints-how-to-override-settings.patch b/SOURCES/0032-sysctl-add-some-hints-how-to-override-settings.patch new file mode 100644 index 0000000..78d7c74 --- /dev/null +++ b/SOURCES/0032-sysctl-add-some-hints-how-to-override-settings.patch @@ -0,0 +1,36 @@ +From 66d069acb953ed8f2bfc6d76561d594520b5c67b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 26 Feb 2015 19:05:51 -0500 +Subject: [PATCH] sysctl: add some hints how to override settings + +Also a link to decent documentation for sysrq keys. It is surprising +hard to find. + +https://lists.fedoraproject.org/pipermail/devel/2015-February/208412.html +(cherry picked from commit 16b65d7f463e91f6299dfa7b83d4b5fbeb109d1c) +--- + sysctl.d/50-default.conf | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/sysctl.d/50-default.conf b/sysctl.d/50-default.conf +index f189233..def151b 100644 +--- a/sysctl.d/50-default.conf ++++ b/sysctl.d/50-default.conf +@@ -5,9 +5,16 @@ + # the Free Software Foundation; either version 2.1 of the License, or + # (at your option) any later version. + +-# See sysctl.d(5) and core(5) for for details. ++# See sysctl.d(5) and core(5) for for documentation. ++ ++# To override settings in this file, create a local file in /etc ++# (e.g. /etc/sysctl.d/90-override.conf), and put any assignments ++# there. + + # System Request functionality of the kernel (SYNC) ++# ++# Use kernel.sysrq = 1 to allow all keys. ++# See http://fedoraproject.org/wiki/QA/Sysrq for a list of values and keys. + kernel.sysrq = 16 + + # Append the PID to the core filename diff --git a/SOURCES/0032-sysctl-bring-back-etc-sysctl.conf.patch b/SOURCES/0032-sysctl-bring-back-etc-sysctl.conf.patch deleted file mode 100644 index 6142ed8..0000000 --- a/SOURCES/0032-sysctl-bring-back-etc-sysctl.conf.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 9944a5e77f0ad03742a1582cd51cc5ebbdd487ed Mon Sep 17 00:00:00 2001 -From: Harald Hoyer -Date: Mon, 11 Nov 2013 11:17:57 +0100 -Subject: [PATCH] sysctl: bring back /etc/sysctl.conf - -Read /etc/sysctl.conf as the last file, overwriting everything. ---- - src/sysctl/sysctl.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c -index b5670db..878c923 100644 ---- a/src/sysctl/sysctl.c -+++ b/src/sysctl/sysctl.c -@@ -311,6 +311,10 @@ int main(int argc, char *argv[]) { - if (k < 0 && r == 0) - r = k; - } -+ -+ k = parse_file(sysctl_options, "/etc/sysctl.conf", true); -+ if (k < 0 && r == 0) -+ r = k; - } - - k = apply_all(sysctl_options); diff --git a/SOURCES/0033-core-rework-device-state-logic.patch b/SOURCES/0033-core-rework-device-state-logic.patch new file mode 100644 index 0000000..4c470dc --- /dev/null +++ b/SOURCES/0033-core-rework-device-state-logic.patch @@ -0,0 +1,909 @@ +From 30ced6a8c742e1c798fff439b28a9800ca43f3e7 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 27 Feb 2015 21:55:08 +0100 +Subject: [PATCH] core: rework device state logic + +This change introduces a new state "tentative" for device units. Device +units are considered "plugged" when udev announced them, "dead" when +they are not available in the kernel, and "tentative" when they are +referenced in /proc/self/mountinfo or /proc/swaps but not (yet) +announced via udev. + +This should fix a race when device nodes (like loop devices) are created +and immediately mounted. Previously, systemd might end up seeing the +mount unit before the device, and would thus pull down the mount because +its BindTo dependency on the device would not be fulfilled. + +(cherry picked from commit 628c89cc68ab96fce2de7ebba5933725d147aecc) +--- + src/core/device.c | 368 +++++++++++++++++++++++++++++++++--------------------- + src/core/device.h | 14 ++- + src/core/mount.c | 46 ++++--- + src/core/swap.c | 32 +++-- + src/core/swap.h | 4 +- + src/core/unit.c | 1 - + 6 files changed, 285 insertions(+), 180 deletions(-) + +diff --git a/src/core/device.c b/src/core/device.c +index d3deac3..75b9a46 100644 +--- a/src/core/device.c ++++ b/src/core/device.c +@@ -36,7 +36,8 @@ + + static const UnitActiveState state_translation_table[_DEVICE_STATE_MAX] = { + [DEVICE_DEAD] = UNIT_INACTIVE, +- [DEVICE_PLUGGED] = UNIT_ACTIVE ++ [DEVICE_TENTATIVE] = UNIT_ACTIVATING, ++ [DEVICE_PLUGGED] = UNIT_ACTIVE, + }; + + static int device_dispatch_io(sd_event_source *source, int fd, uint32_t revents, void *userdata); +@@ -65,6 +66,41 @@ static void device_unset_sysfs(Device *d) { + d->sysfs = NULL; + } + ++static int device_set_sysfs(Device *d, const char *sysfs) { ++ Device *first; ++ char *copy; ++ int r; ++ ++ assert(d); ++ ++ if (streq_ptr(d->sysfs, sysfs)) ++ return 0; ++ ++ r = hashmap_ensure_allocated(&UNIT(d)->manager->devices_by_sysfs, &string_hash_ops); ++ if (r < 0) ++ return r; ++ ++ copy = strdup(sysfs); ++ if (!copy) ++ return -ENOMEM; ++ ++ device_unset_sysfs(d); ++ ++ first = hashmap_get(UNIT(d)->manager->devices_by_sysfs, sysfs); ++ LIST_PREPEND(same_sysfs, first, d); ++ ++ r = hashmap_replace(UNIT(d)->manager->devices_by_sysfs, copy, first); ++ if (r < 0) { ++ LIST_REMOVE(same_sysfs, first, d); ++ free(copy); ++ return r; ++ } ++ ++ d->sysfs = copy; ++ ++ return 0; ++} ++ + static void device_init(Unit *u) { + Device *d = DEVICE(u); + +@@ -112,8 +148,13 @@ static int device_coldplug(Unit *u) { + assert(d); + assert(d->state == DEVICE_DEAD); + +- if (d->sysfs) ++ if (d->found & DEVICE_FOUND_UDEV) ++ /* If udev says the device is around, it's around */ + device_set_state(d, DEVICE_PLUGGED); ++ else if (d->found != DEVICE_NOT_FOUND) ++ /* If a device is found in /proc/self/mountinfo or ++ * /proc/swaps, it's "tentatively" around. */ ++ device_set_state(d, DEVICE_TENTATIVE); + + return 0; + } +@@ -142,49 +183,9 @@ _pure_ static const char *device_sub_state_to_string(Unit *u) { + return device_state_to_string(DEVICE(u)->state); + } + +-static int device_add_escaped_name(Unit *u, const char *dn) { +- _cleanup_free_ char *e = NULL; +- int r; +- +- assert(u); +- assert(dn); +- assert(dn[0] == '/'); +- +- e = unit_name_from_path(dn, ".device"); +- if (!e) +- return -ENOMEM; +- +- r = unit_add_name(u, e); +- if (r < 0 && r != -EEXIST) +- return r; +- +- return 0; +-} +- +-static int device_find_escape_name(Manager *m, const char *dn, Unit **_u) { +- _cleanup_free_ char *e = NULL; +- Unit *u; +- +- assert(m); +- assert(dn); +- assert(dn[0] == '/'); +- assert(_u); +- +- e = unit_name_from_path(dn, ".device"); +- if (!e) +- return -ENOMEM; +- +- u = manager_get_unit(m, e); +- if (u) { +- *_u = u; +- return 1; +- } +- +- return 0; +-} +- +-static int device_make_description(Unit *u, struct udev_device *dev, const char *path) { ++static int device_update_description(Unit *u, struct udev_device *dev, const char *path) { + const char *model; ++ int r; + + assert(u); + assert(dev); +@@ -209,13 +210,16 @@ static int device_make_description(Unit *u, struct udev_device *dev, const char + + j = strjoin(model, " ", label, NULL); + if (j) +- return unit_set_description(u, j); +- } ++ r = unit_set_description(u, j); ++ } else ++ r = unit_set_description(u, model); ++ } else ++ r = unit_set_description(u, path); + +- return unit_set_description(u, model); +- } ++ if (r < 0) ++ log_unit_error_errno(u->id, r, "Failed to set device description: %m"); + +- return unit_set_description(u, path); ++ return r; + } + + static int device_add_udev_wants(Unit *u, struct udev_device *dev) { +@@ -242,20 +246,20 @@ static int device_add_udev_wants(Unit *u, struct udev_device *dev) { + + n = unit_name_mangle(e, MANGLE_NOGLOB); + if (!n) +- return -ENOMEM; ++ return log_oom(); + + r = unit_add_dependency_by_name(u, UNIT_WANTS, n, NULL, true); + if (r < 0) +- return r; ++ return log_unit_error_errno(u->id, r, "Failed to add wants dependency: %m"); + } + if (!isempty(state)) +- log_unit_warning(u->id, "Property %s on %s has trailing garbage, ignoring.", +- property, strna(udev_device_get_syspath(dev))); ++ log_unit_warning(u->id, "Property %s on %s has trailing garbage, ignoring.", property, strna(udev_device_get_syspath(dev))); + + return 0; + } + +-static int device_update_unit(Manager *m, struct udev_device *dev, const char *path, bool main) { ++static int device_setup_unit(Manager *m, struct udev_device *dev, const char *path, bool main) { ++ _cleanup_free_ char *e = NULL; + const char *sysfs; + Unit *u = NULL; + bool delete; +@@ -269,12 +273,18 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p + if (!sysfs) + return 0; + +- r = device_find_escape_name(m, path, &u); +- if (r < 0) +- return r; ++ e = unit_name_from_path(path, ".device"); ++ if (!e) ++ return log_oom(); ++ ++ u = manager_get_unit(m, e); + +- if (u && DEVICE(u)->sysfs && !path_equal(DEVICE(u)->sysfs, sysfs)) ++ if (u && ++ DEVICE(u)->sysfs && ++ !path_equal(DEVICE(u)->sysfs, sysfs)) { ++ log_unit_error(u->id, "Device %s appeared twice with different sysfs paths %s and %s", e, DEVICE(u)->sysfs, sysfs); + return -EEXIST; ++ } + + if (!u) { + delete = true; +@@ -283,7 +293,7 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p + if (!u) + return log_oom(); + +- r = device_add_escaped_name(u, path); ++ r = unit_add_name(u, e); + if (r < 0) + goto fail; + +@@ -295,37 +305,16 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p + * actually been seen yet ->sysfs will not be + * initialized. Hence initialize it if necessary. */ + +- if (!DEVICE(u)->sysfs) { +- Device *first; +- +- DEVICE(u)->sysfs = strdup(sysfs); +- if (!DEVICE(u)->sysfs) { +- r = -ENOMEM; +- goto fail; +- } +- +- r = hashmap_ensure_allocated(&m->devices_by_sysfs, &string_hash_ops); +- if (r < 0) +- goto fail; +- +- first = hashmap_get(m->devices_by_sysfs, sysfs); +- LIST_PREPEND(same_sysfs, first, DEVICE(u)); +- +- r = hashmap_replace(m->devices_by_sysfs, DEVICE(u)->sysfs, first); +- if (r < 0) +- goto fail; +- } +- +- device_make_description(u, dev, path); ++ r = device_set_sysfs(DEVICE(u), sysfs); ++ if (r < 0) ++ goto fail; + +- if (main) { +- /* The additional systemd udev properties we only +- * interpret for the main object */ ++ (void) device_update_description(u, dev, path); + +- r = device_add_udev_wants(u, dev); +- if (r < 0) +- goto fail; +- } ++ /* The additional systemd udev properties we only interpret ++ * for the main object */ ++ if (main) ++ (void) device_add_udev_wants(u, dev); + + /* Note that this won't dispatch the load queue, the caller + * has to do that if needed and appropriate */ +@@ -334,7 +323,7 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p + return 0; + + fail: +- log_warning_errno(r, "Failed to load device unit: %m"); ++ log_unit_warning_errno(u->id, r, "Failed to set up device unit: %m"); + + if (delete && u) + unit_free(u); +@@ -342,7 +331,7 @@ fail: + return r; + } + +-static int device_process_new_device(Manager *m, struct udev_device *dev) { ++static int device_process_new(Manager *m, struct udev_device *dev) { + const char *sysfs, *dn, *alias; + struct udev_list_entry *item = NULL, *first = NULL; + int r; +@@ -354,14 +343,14 @@ static int device_process_new_device(Manager *m, struct udev_device *dev) { + return 0; + + /* Add the main unit named after the sysfs path */ +- r = device_update_unit(m, dev, sysfs, true); ++ r = device_setup_unit(m, dev, sysfs, true); + if (r < 0) + return r; + + /* Add an additional unit for the device node */ + dn = udev_device_get_devnode(dev); + if (dn) +- device_update_unit(m, dev, dn, false); ++ (void) device_setup_unit(m, dev, dn, false); + + /* Add additional units for all symlinks */ + first = udev_device_get_devlinks_list_entry(dev); +@@ -388,7 +377,7 @@ static int device_process_new_device(Manager *m, struct udev_device *dev) { + st.st_rdev != udev_device_get_devnum(dev)) + continue; + +- device_update_unit(m, dev, p, false); ++ (void) device_setup_unit(m, dev, p, false); + } + + /* Add additional units for all explicitly configured +@@ -405,7 +394,7 @@ static int device_process_new_device(Manager *m, struct udev_device *dev) { + e[l] = 0; + + if (path_is_absolute(e)) +- device_update_unit(m, dev, e, false); ++ (void) device_setup_unit(m, dev, e, false); + else + log_warning("SYSTEMD_ALIAS for %s is not an absolute path, ignoring: %s", sysfs, e); + } +@@ -416,39 +405,62 @@ static int device_process_new_device(Manager *m, struct udev_device *dev) { + return 0; + } + +-static void device_set_path_plugged(Manager *m, struct udev_device *dev) { +- const char *sysfs; ++static void device_update_found_one(Device *d, bool add, DeviceFound found, bool now) { ++ DeviceFound n; ++ ++ assert(d); ++ ++ n = add ? (d->found | found) : (d->found & ~found); ++ if (n == d->found) ++ return; ++ ++ d->found = n; ++ ++ if (now) { ++ if (d->found & DEVICE_FOUND_UDEV) ++ device_set_state(d, DEVICE_PLUGGED); ++ else if (d->found != DEVICE_NOT_FOUND) ++ device_set_state(d, DEVICE_TENTATIVE); ++ else ++ device_set_state(d, DEVICE_DEAD); ++ } ++} ++ ++static int device_update_found_by_sysfs(Manager *m, const char *sysfs, bool add, DeviceFound found, bool now) { + Device *d, *l; + + assert(m); +- assert(dev); ++ assert(sysfs); + +- sysfs = udev_device_get_syspath(dev); +- if (!sysfs) +- return; ++ if (found == DEVICE_NOT_FOUND) ++ return 0; + + l = hashmap_get(m->devices_by_sysfs, sysfs); + LIST_FOREACH(same_sysfs, d, l) +- device_set_state(d, DEVICE_PLUGGED); ++ device_update_found_one(d, add, found, now); ++ ++ return 0; + } + +-static int device_process_removed_device(Manager *m, struct udev_device *dev) { +- const char *sysfs; +- Device *d; ++static int device_update_found_by_name(Manager *m, const char *path, bool add, DeviceFound found, bool now) { ++ _cleanup_free_ char *e = NULL; ++ Unit *u; + + assert(m); +- assert(dev); ++ assert(path); + +- sysfs = udev_device_get_syspath(dev); +- if (!sysfs) +- return -ENOMEM; ++ if (found == DEVICE_NOT_FOUND) ++ return 0; + +- /* Remove all units of this sysfs path */ +- while ((d = hashmap_get(m->devices_by_sysfs, sysfs))) { +- device_unset_sysfs(d); +- device_set_state(d, DEVICE_DEAD); +- } ++ e = unit_name_from_path(path, ".device"); ++ if (!e) ++ return log_oom(); + ++ u = manager_get_unit(m, e); ++ if (!u) ++ return 0; ++ ++ device_update_found_one(DEVICE(u), add, found, now); + return 0; + } + +@@ -464,22 +476,6 @@ static bool device_is_ready(struct udev_device *dev) { + return parse_boolean(ready) != 0; + } + +-static int device_process_new_path(Manager *m, const char *path) { +- _cleanup_udev_device_unref_ struct udev_device *dev = NULL; +- +- assert(m); +- assert(path); +- +- dev = udev_device_new_from_syspath(m->udev, path); +- if (!dev) +- return log_oom(); +- +- if (!device_is_ready(dev)) +- return 0; +- +- return device_process_new_device(m, dev); +-} +- + static Unit *device_following(Unit *u) { + Device *d = DEVICE(u); + Device *other, *first = NULL; +@@ -606,12 +602,31 @@ static int device_enumerate(Manager *m) { + goto fail; + + first = udev_enumerate_get_list_entry(e); +- udev_list_entry_foreach(item, first) +- device_process_new_path(m, udev_list_entry_get_name(item)); ++ udev_list_entry_foreach(item, first) { ++ _cleanup_udev_device_unref_ struct udev_device *dev = NULL; ++ const char *sysfs; ++ ++ sysfs = udev_list_entry_get_name(item); ++ ++ dev = udev_device_new_from_syspath(m->udev, sysfs); ++ if (!dev) { ++ log_oom(); ++ continue; ++ } ++ ++ if (!device_is_ready(dev)) ++ continue; ++ ++ (void) device_process_new(m, dev); ++ ++ device_update_found_by_sysfs(m, sysfs, true, DEVICE_FOUND_UDEV, false); ++ } + + return 0; + + fail: ++ log_error_errno(r, "Failed to enumerate devices: %m"); ++ + device_shutdown(m); + return r; + } +@@ -619,7 +634,7 @@ fail: + static int device_dispatch_io(sd_event_source *source, int fd, uint32_t revents, void *userdata) { + _cleanup_udev_device_unref_ struct udev_device *dev = NULL; + Manager *m = userdata; +- const char *action; ++ const char *action, *sysfs; + int r; + + assert(m); +@@ -641,33 +656,47 @@ static int device_dispatch_io(sd_event_source *source, int fd, uint32_t revents, + if (!dev) + return 0; + ++ sysfs = udev_device_get_syspath(dev); ++ if (!sysfs) { ++ log_error("Failed to get udev sys path."); ++ return 0; ++ } ++ + action = udev_device_get_action(dev); + if (!action) { + log_error("Failed to get udev action string."); + return 0; + } + +- if (streq(action, "remove") || !device_is_ready(dev)) { +- r = device_process_removed_device(m, dev); +- if (r < 0) +- log_error_errno(r, "Failed to process device remove event: %m"); +- +- r = swap_process_removed_device(m, dev); ++ if (streq(action, "remove")) { ++ r = swap_process_device_remove(m, dev); + if (r < 0) + log_error_errno(r, "Failed to process swap device remove event: %m"); + +- } else { +- r = device_process_new_device(m, dev); +- if (r < 0) +- log_error_errno(r, "Failed to process device new event: %m"); ++ /* If we get notified that a device was removed by ++ * udev, then it's completely gone, hence unset all ++ * found bits */ ++ device_update_found_by_sysfs(m, sysfs, false, DEVICE_FOUND_UDEV|DEVICE_FOUND_MOUNT|DEVICE_FOUND_SWAP, true); + +- r = swap_process_new_device(m, dev); ++ } else if (device_is_ready(dev)) { ++ ++ (void) device_process_new(m, dev); ++ ++ r = swap_process_device_new(m, dev); + if (r < 0) + log_error_errno(r, "Failed to process swap device new event: %m"); + + manager_dispatch_load_queue(m); + +- device_set_path_plugged(m, dev); ++ /* The device is found now, set the udev found bit */ ++ device_update_found_by_sysfs(m, sysfs, true, DEVICE_FOUND_UDEV, true); ++ ++ } else { ++ /* The device is nominally around, but not ready for ++ * us. Hence unset the udev bit, but leave the rest ++ * around. */ ++ ++ device_update_found_by_sysfs(m, sysfs, false, DEVICE_FOUND_UDEV, true); + } + + return 0; +@@ -686,9 +715,58 @@ static bool device_supported(Manager *m) { + return read_only <= 0; + } + ++int device_found_node(Manager *m, const char *node, bool add, DeviceFound found, bool now) { ++ _cleanup_udev_device_unref_ struct udev_device *dev = NULL; ++ struct stat st; ++ ++ assert(m); ++ assert(node); ++ ++ /* This is called whenever we find a device referenced in ++ * /proc/swaps or /proc/self/mounts. Such a device might be ++ * mounted/enabled at a time where udev has not finished ++ * probing it yet, and we thus haven't learned about it ++ * yet. In this case we will set the device unit to ++ * "tentative" state. */ ++ ++ if (add) { ++ if (!path_startswith(node, "/dev")) ++ return 0; ++ ++ if (stat(node, &st) < 0) { ++ if (errno == ENOENT) ++ return 0; ++ ++ return log_error_errno(errno, "Failed to stat device node file %s: %m", node); ++ } ++ ++ if (!S_ISBLK(st.st_mode) && !S_ISCHR(st.st_mode)) ++ return 0; ++ ++ dev = udev_device_new_from_devnum(m->udev, S_ISBLK(st.st_mode) ? 'b' : 'c', st.st_rdev); ++ if (!dev) { ++ if (errno == ENOENT) ++ return 0; ++ ++ return log_oom(); ++ } ++ ++ /* If the device is known in the kernel and newly ++ * appeared, then we'll create a device unit for it, ++ * under the name referenced in /proc/swaps or ++ * /proc/self/mountinfo. */ ++ ++ (void) device_setup_unit(m, dev, node, false); ++ } ++ ++ /* Update the device unit's state, should it exist */ ++ return device_update_found_by_name(m, node, add, found, now); ++} ++ + static const char* const device_state_table[_DEVICE_STATE_MAX] = { + [DEVICE_DEAD] = "dead", +- [DEVICE_PLUGGED] = "plugged" ++ [DEVICE_TENTATIVE] = "tentative", ++ [DEVICE_PLUGGED] = "plugged", + }; + + DEFINE_STRING_TABLE_LOOKUP(device_state, DeviceState); +diff --git a/src/core/device.h b/src/core/device.h +index bb7ae07..0609b20 100644 +--- a/src/core/device.h ++++ b/src/core/device.h +@@ -29,20 +29,28 @@ typedef struct Device Device; + * simplifies the state engine greatly */ + typedef enum DeviceState { + DEVICE_DEAD, +- DEVICE_PLUGGED, ++ DEVICE_TENTATIVE, /* mounted or swapped, but not (yet) announced by udev */ ++ DEVICE_PLUGGED, /* announced by udev */ + _DEVICE_STATE_MAX, + _DEVICE_STATE_INVALID = -1 + } DeviceState; + ++typedef enum DeviceFound { ++ DEVICE_NOT_FOUND = 0, ++ DEVICE_FOUND_UDEV = 1, ++ DEVICE_FOUND_MOUNT = 2, ++ DEVICE_FOUND_SWAP = 4, ++} DeviceFound; ++ + struct Device { + Unit meta; + + char *sysfs; ++ DeviceFound found; + + /* In order to be able to distinguish dependencies on + different device nodes we might end up creating multiple + devices for the same sysfs path. We chain them up here. */ +- + LIST_FIELDS(struct Device, same_sysfs); + + DeviceState state; +@@ -52,3 +60,5 @@ extern const UnitVTable device_vtable; + + const char* device_state_to_string(DeviceState i) _const_; + DeviceState device_state_from_string(const char *s) _pure_; ++ ++int device_found_node(Manager *m, const char *node, bool add, DeviceFound found, bool now); +diff --git a/src/core/mount.c b/src/core/mount.c +index f3977e6..c971330 100644 +--- a/src/core/mount.c ++++ b/src/core/mount.c +@@ -1391,7 +1391,7 @@ static int mount_dispatch_timer(sd_event_source *source, usec_t usec, void *user + return 0; + } + +-static int mount_add_one( ++static int mount_setup_unit( + Manager *m, + const char *what, + const char *where, +@@ -1434,7 +1434,7 @@ static int mount_add_one( + + u = unit_new(m, sizeof(Mount)); + if (!u) +- return -ENOMEM; ++ return log_oom(); + + r = unit_add_name(u, e); + if (r < 0) +@@ -1547,6 +1547,8 @@ static int mount_add_one( + return 0; + + fail: ++ log_warning_errno(r, "Failed to set up mount unit: %m"); ++ + if (delete && u) + unit_free(u); + +@@ -1554,33 +1556,36 @@ fail: + } + + static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) { +- _cleanup_(mnt_free_tablep) struct libmnt_table *tb = NULL; +- _cleanup_(mnt_free_iterp) struct libmnt_iter *itr = NULL; +- struct libmnt_fs *fs; ++ _cleanup_(mnt_free_tablep) struct libmnt_table *t = NULL; ++ _cleanup_(mnt_free_iterp) struct libmnt_iter *i = NULL; + int r = 0; + + assert(m); + +- tb = mnt_new_table(); +- itr = mnt_new_iter(MNT_ITER_FORWARD); +- if (!tb || !itr) ++ t = mnt_new_table(); ++ if (!t) + return log_oom(); + +- r = mnt_table_parse_mtab(tb, NULL); ++ i = mnt_new_iter(MNT_ITER_FORWARD); ++ if (!i) ++ return log_oom(); ++ ++ r = mnt_table_parse_mtab(t, NULL); + if (r < 0) +- return r; ++ return log_error_errno(r, "Failed to parse /proc/self/mountinfo: %m"); + + r = 0; + for (;;) { + const char *device, *path, *options, *fstype; + _cleanup_free_ const char *d = NULL, *p = NULL; ++ struct libmnt_fs *fs; + int k; + +- k = mnt_table_next_fs(tb, itr, &fs); ++ k = mnt_table_next_fs(t, i, &fs); + if (k == 1) + break; +- else if (k < 0) +- return log_error_errno(k, "Failed to get next entry from /etc/fstab: %m"); ++ if (k < 0) ++ return log_error_errno(k, "Failed to get next entry from /proc/self/mountinfo: %m"); + + device = mnt_fs_get_source(fs); + path = mnt_fs_get_target(fs); +@@ -1588,11 +1593,16 @@ static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) { + fstype = mnt_fs_get_fstype(fs); + + d = cunescape(device); ++ if (!d) ++ return log_oom(); ++ + p = cunescape(path); +- if (!d || !p) ++ if (!p) + return log_oom(); + +- k = mount_add_one(m, d, p, options, fstype, set_flags); ++ (void) device_found_node(m, d, true, DEVICE_FOUND_MOUNT, set_flags); ++ ++ k = mount_setup_unit(m, d, p, options, fstype, set_flags); + if (r == 0 && k < 0) + r = k; + } +@@ -1736,8 +1746,6 @@ static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents, + + r = mount_load_proc_self_mountinfo(m, true); + if (r < 0) { +- log_error_errno(r, "Failed to reread /proc/self/mountinfo: %m"); +- + /* Reset flags, just in case, for later calls */ + LIST_FOREACH(units_by_type, u, m->units_by_type[UNIT_MOUNT]) { + Mount *mount = MOUNT(u); +@@ -1770,6 +1778,10 @@ static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents, + break; + } + ++ if (mount->parameters_proc_self_mountinfo.what) ++ (void) device_found_node(m, mount->parameters_proc_self_mountinfo.what, false, DEVICE_FOUND_MOUNT, true); ++ ++ + } else if (mount->just_mounted || mount->just_changed) { + + /* New or changed mount entry */ +diff --git a/src/core/swap.c b/src/core/swap.c +index 6997921..5c19af5 100644 +--- a/src/core/swap.c ++++ b/src/core/swap.c +@@ -338,7 +338,7 @@ static int swap_load(Unit *u) { + return swap_verify(s); + } + +-static int swap_add_one( ++static int swap_setup_unit( + Manager *m, + const char *what, + const char *what_proc_swaps, +@@ -363,8 +363,10 @@ static int swap_add_one( + + if (u && + SWAP(u)->from_proc_swaps && +- !path_equal(SWAP(u)->parameters_proc_swaps.what, what_proc_swaps)) ++ !path_equal(SWAP(u)->parameters_proc_swaps.what, what_proc_swaps)) { ++ log_error("Swap %s appeared twice with different device paths %s and %s", e, SWAP(u)->parameters_proc_swaps.what, what_proc_swaps); + return -EEXIST; ++ } + + if (!u) { + delete = true; +@@ -379,7 +381,7 @@ static int swap_add_one( + + SWAP(u)->what = strdup(what); + if (!SWAP(u)->what) { +- r = log_oom(); ++ r = -ENOMEM; + goto fail; + } + +@@ -407,7 +409,6 @@ static int swap_add_one( + p->priority = priority; + + unit_add_to_dbus_queue(u); +- + return 0; + + fail: +@@ -419,7 +420,7 @@ fail: + return r; + } + +-static int swap_process_new_swap(Manager *m, const char *device, int prio, bool set_flags) { ++static int swap_process_new(Manager *m, const char *device, int prio, bool set_flags) { + _cleanup_udev_device_unref_ struct udev_device *d = NULL; + struct udev_list_entry *item = NULL, *first = NULL; + const char *dn; +@@ -428,7 +429,7 @@ static int swap_process_new_swap(Manager *m, const char *device, int prio, bool + + assert(m); + +- r = swap_add_one(m, device, device, prio, set_flags); ++ r = swap_setup_unit(m, device, device, prio, set_flags); + if (r < 0) + return r; + +@@ -444,7 +445,7 @@ static int swap_process_new_swap(Manager *m, const char *device, int prio, bool + /* Add the main device node */ + dn = udev_device_get_devnode(d); + if (dn && !streq(dn, device)) +- swap_add_one(m, dn, device, prio, set_flags); ++ swap_setup_unit(m, dn, device, prio, set_flags); + + /* Add additional units for all symlinks */ + first = udev_device_get_devlinks_list_entry(d); +@@ -465,7 +466,7 @@ static int swap_process_new_swap(Manager *m, const char *device, int prio, bool + st.st_rdev != udev_device_get_devnum(d)) + continue; + +- swap_add_one(m, p, device, prio, set_flags); ++ swap_setup_unit(m, p, device, prio, set_flags); + } + + return r; +@@ -1091,15 +1092,17 @@ static int swap_load_proc_swaps(Manager *m, bool set_flags) { + if (k == EOF) + break; + +- log_warning("Failed to parse /proc/swaps:%u", i); ++ log_warning("Failed to parse /proc/swaps:%u.", i); + continue; + } + + d = cunescape(dev); + if (!d) +- return -ENOMEM; ++ return log_oom(); ++ ++ device_found_node(m, d, true, DEVICE_FOUND_SWAP, set_flags); + +- k = swap_process_new_swap(m, d, prio, set_flags); ++ k = swap_process_new(m, d, prio, set_flags); + if (k < 0) + r = k; + } +@@ -1151,6 +1154,9 @@ static int swap_dispatch_io(sd_event_source *source, int fd, uint32_t revents, v + break; + } + ++ if (swap->what) ++ device_found_node(m, swap->what, false, DEVICE_FOUND_SWAP, true); ++ + } else if (swap->just_activated) { + + /* New swap entry */ +@@ -1298,7 +1304,7 @@ fail: + return r; + } + +-int swap_process_new_device(Manager *m, struct udev_device *dev) { ++int swap_process_device_new(Manager *m, struct udev_device *dev) { + struct udev_list_entry *item = NULL, *first = NULL; + _cleanup_free_ char *e = NULL; + const char *dn; +@@ -1341,7 +1347,7 @@ int swap_process_new_device(Manager *m, struct udev_device *dev) { + return r; + } + +-int swap_process_removed_device(Manager *m, struct udev_device *dev) { ++int swap_process_device_remove(Manager *m, struct udev_device *dev) { + const char *dn; + int r = 0; + Swap *s; +diff --git a/src/core/swap.h b/src/core/swap.h +index 73e64d8..914a2db 100644 +--- a/src/core/swap.h ++++ b/src/core/swap.h +@@ -116,8 +116,8 @@ struct Swap { + + extern const UnitVTable swap_vtable; + +-int swap_process_new_device(Manager *m, struct udev_device *dev); +-int swap_process_removed_device(Manager *m, struct udev_device *dev); ++int swap_process_device_new(Manager *m, struct udev_device *dev); ++int swap_process_device_remove(Manager *m, struct udev_device *dev); + + const char* swap_state_to_string(SwapState i) _const_; + SwapState swap_state_from_string(const char *s) _pure_; +diff --git a/src/core/unit.c b/src/core/unit.c +index 563f6fe..a6558ee 100644 +--- a/src/core/unit.c ++++ b/src/core/unit.c +@@ -2843,7 +2843,6 @@ int unit_add_node_link(Unit *u, const char *what, bool wants) { + return -ENOMEM; + + r = manager_load_unit(u->manager, e, NULL, NULL, &device); +- + if (r < 0) + return r; + diff --git a/SOURCES/0033-systemd-treat-reload-failure-as-failure.patch b/SOURCES/0033-systemd-treat-reload-failure-as-failure.patch deleted file mode 100644 index c8409cb..0000000 --- a/SOURCES/0033-systemd-treat-reload-failure-as-failure.patch +++ /dev/null @@ -1,90 +0,0 @@ -From b659126834756a4476a5b020bcece486be1edb85 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Mon, 2 Dec 2013 21:52:51 -0500 -Subject: [PATCH] systemd: treat reload failure as failure - -systemctl reload "suceeded" on stopped units, but it is documented -to fail in this case. - -https://bugzilla.redhat.com/show_bug.cgi?id=1036845 ---- - src/core/job.c | 11 +++++++---- - src/core/job.h | 3 ++- - src/core/unit.c | 5 ++++- - 3 files changed, 13 insertions(+), 6 deletions(-) - -diff --git a/src/core/job.c b/src/core/job.c -index bf1d956..5ea9803 100644 ---- a/src/core/job.c -+++ b/src/core/job.c -@@ -528,7 +528,7 @@ int job_run_and_invalidate(Job *j) { - else if (t == UNIT_ACTIVATING) - r = -EAGAIN; - else -- r = -ENOEXEC; -+ r = -EBADR; - break; - } - -@@ -557,8 +557,10 @@ int job_run_and_invalidate(Job *j) { - if (j) { - if (r == -EALREADY) - r = job_finish_and_invalidate(j, JOB_DONE, true); -- else if (r == -ENOEXEC) -+ else if (r == -EBADR) - r = job_finish_and_invalidate(j, JOB_SKIPPED, true); -+ else if (r == -ENOEXEC) -+ r = job_finish_and_invalidate(j, JOB_INVALID, true); - else if (r == -EAGAIN) { - j->state = JOB_WAITING; - m->n_running_jobs--; -@@ -784,7 +786,7 @@ int job_finish_and_invalidate(Job *j, JobResult result, bool recursive) { - goto finish; - } - -- if (result == JOB_FAILED) -+ if (result == JOB_FAILED || result == JOB_INVALID) - j->manager->n_failed_jobs ++; - - job_uninstall(j); -@@ -1140,7 +1142,8 @@ static const char* const job_result_table[_JOB_RESULT_MAX] = { - [JOB_TIMEOUT] = "timeout", - [JOB_FAILED] = "failed", - [JOB_DEPENDENCY] = "dependency", -- [JOB_SKIPPED] = "skipped" -+ [JOB_SKIPPED] = "skipped", -+ [JOB_INVALID] = "invalid", - }; - - DEFINE_STRING_TABLE_LOOKUP(job_result, JobResult); -diff --git a/src/core/job.h b/src/core/job.h -index d90bc96..4237529 100644 ---- a/src/core/job.h -+++ b/src/core/job.h -@@ -97,7 +97,8 @@ enum JobResult { - JOB_TIMEOUT, /* JobTimeout elapsed */ - JOB_FAILED, /* Job failed */ - JOB_DEPENDENCY, /* A required dependency job did not result in JOB_DONE */ -- JOB_SKIPPED, /* JOB_RELOAD of inactive unit; negative result of JOB_VERIFY_ACTIVE */ -+ JOB_SKIPPED, /* Negative result of JOB_VERIFY_ACTIVE */ -+ JOB_INVALID, /* JOB_RELOAD of inactive unit */ - _JOB_RESULT_MAX, - _JOB_RESULT_INVALID = -1 - }; -diff --git a/src/core/unit.c b/src/core/unit.c -index 1db7d06..0f57b06 100644 ---- a/src/core/unit.c -+++ b/src/core/unit.c -@@ -1239,8 +1239,11 @@ int unit_reload(Unit *u) { - if (state == UNIT_RELOADING) - return -EALREADY; - -- if (state != UNIT_ACTIVE) -+ if (state != UNIT_ACTIVE) { -+ log_warning_unit(u->id, "Unit %s cannot be reloaded because it is inactive.", -+ u->id); - return -ENOEXEC; -+ } - - if ((following = unit_following(u))) { - log_debug_unit(u->id, "Redirecting reload request from %s to %s.", diff --git a/SOURCES/0034-core-fix-return-value-on-OOM.patch b/SOURCES/0034-core-fix-return-value-on-OOM.patch new file mode 100644 index 0000000..52fa25d --- /dev/null +++ b/SOURCES/0034-core-fix-return-value-on-OOM.patch @@ -0,0 +1,23 @@ +From 8cbaef2f9e08dc14e827445de76072e31aa6cce7 Mon Sep 17 00:00:00 2001 +From: Thomas Hindoe Paaboel Andersen +Date: Sat, 28 Feb 2015 23:39:55 +0100 +Subject: [PATCH] core: fix return value on OOM + +(cherry picked from commit c43b2132f37264600cc26e07c8d85dfdd6c969f0) +--- + src/core/device.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/core/device.c b/src/core/device.c +index 75b9a46..1cc103c 100644 +--- a/src/core/device.c ++++ b/src/core/device.c +@@ -211,6 +211,8 @@ static int device_update_description(Unit *u, struct udev_device *dev, const cha + j = strjoin(model, " ", label, NULL); + if (j) + r = unit_set_description(u, j); ++ else ++ r = -ENOMEM; + } else + r = unit_set_description(u, model); + } else diff --git a/SOURCES/0034-journal-when-appending-to-journal-file-allocate-larg.patch b/SOURCES/0034-journal-when-appending-to-journal-file-allocate-larg.patch deleted file mode 100644 index c860f88..0000000 --- a/SOURCES/0034-journal-when-appending-to-journal-file-allocate-larg.patch +++ /dev/null @@ -1,135 +0,0 @@ -From eb38fb593b201a97620555c0aca83ff487a50748 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 26 Nov 2013 18:39:42 +0100 -Subject: [PATCH] journal: when appending to journal file, allocate larger - blocks at once - -Conflicts: - src/journal/journal-file.c ---- - src/journal/journal-file.c | 51 +++++++++++++++++++++++----------------------- - 1 file changed, 26 insertions(+), 25 deletions(-) - -diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c -index 81c344f..4062a83 100644 ---- a/src/journal/journal-file.c -+++ b/src/journal/journal-file.c -@@ -68,6 +68,9 @@ - /* How many entries to keep in the entry array chain cache at max */ - #define CHAIN_CACHE_MAX 20 - -+/* How much to increase the journal file size at once each time we allocate something new. */ -+#define FILE_SIZE_INCREASE (8ULL*1024ULL*1024ULL) /* 8MB */ -+ - int journal_file_set_online(JournalFile *f) { - assert(f); - -@@ -218,8 +221,7 @@ static int journal_file_refresh_header(JournalFile *f) { - journal_file_set_online(f); - - /* Sync the online state to disk */ -- msync(f->header, PAGE_ALIGN(sizeof(Header)), MS_SYNC); -- fdatasync(f->fd); -+ fsync(f->fd); - - return 0; - } -@@ -313,7 +315,7 @@ static int journal_file_verify_header(JournalFile *f) { - } - - static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) { -- uint64_t old_size, new_size; -+ uint64_t old_size, new_size, file_size; - int r; - - assert(f); -@@ -333,12 +335,10 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) - if (new_size <= old_size) - return 0; - -- if (f->metrics.max_size > 0 && -- new_size > f->metrics.max_size) -+ if (f->metrics.max_size > 0 && new_size > f->metrics.max_size) - return -E2BIG; - -- if (new_size > f->metrics.min_size && -- f->metrics.keep_free > 0) { -+ if (new_size > f->metrics.min_size && f->metrics.keep_free > 0) { - struct statvfs svfs; - - if (fstatvfs(f->fd, &svfs) >= 0) { -@@ -363,8 +363,16 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) - if (r != 0) - return -r; - -- if (fstat(f->fd, &f->last_stat) < 0) -- return -errno; -+ /* Increase the file size a bit further than this, so that we -+ * we can create larger memory maps to cache */ -+ file_size = ((new_size+FILE_SIZE_INCREASE-1) / FILE_SIZE_INCREASE) * FILE_SIZE_INCREASE; -+ if (file_size > (uint64_t) f->last_stat.st_size) { -+ if (file_size > new_size) -+ ftruncate(f->fd, file_size); -+ -+ if (fstat(f->fd, &f->last_stat) < 0) -+ return -errno; -+ } - - f->header->arena_size = htole64(new_size - le64toh(f->header->header_size)); - -@@ -1344,7 +1352,7 @@ int journal_file_append_entry(JournalFile *f, const dual_timestamp *ts, const st - - /* Order by the position on disk, in order to improve seek - * times for rotating media. */ -- qsort(items, n_iovec, sizeof(EntryItem), entry_item_cmp); -+ qsort_safe(items, n_iovec, sizeof(EntryItem), entry_item_cmp); - - r = journal_file_append_entry_internal(f, ts, xor_hash, items, n_iovec, seqnum, ret, offset); - -@@ -2551,7 +2559,7 @@ fail: - } - - int journal_file_rotate(JournalFile **f, bool compress, bool seal) { -- char *p; -+ _cleanup_free_ char *p = NULL; - size_t l; - JournalFile *old_file, *new_file = NULL; - int r; -@@ -2568,22 +2576,15 @@ int journal_file_rotate(JournalFile **f, bool compress, bool seal) { - return -EINVAL; - - l = strlen(old_file->path); -- -- p = new(char, l + 1 + 32 + 1 + 16 + 1 + 16 + 1); -- if (!p) -+ r = asprintf(&p, "%.*s@" SD_ID128_FORMAT_STR "-%016"PRIx64"-%016"PRIx64".journal", -+ (int) l - 8, old_file->path, -+ SD_ID128_FORMAT_VAL(old_file->header->seqnum_id), -+ le64toh((*f)->header->head_entry_seqnum), -+ le64toh((*f)->header->head_entry_realtime)); -+ if (r < 0) - return -ENOMEM; - -- memcpy(p, old_file->path, l - 8); -- p[l-8] = '@'; -- sd_id128_to_string(old_file->header->seqnum_id, p + l - 8 + 1); -- snprintf(p + l - 8 + 1 + 32, 1 + 16 + 1 + 16 + 8 + 1, -- "-%016"PRIx64"-%016"PRIx64".journal", -- le64toh((*f)->header->head_entry_seqnum), -- le64toh((*f)->header->head_entry_realtime)); -- - r = rename(old_file->path, p); -- free(p); -- - if (r < 0) - return -errno; - -@@ -2634,7 +2635,7 @@ int journal_file_open_reliably( - - l = strlen(fname); - if (asprintf(&p, "%.*s@%016llx-%016llx.journal~", -- (int) (l-8), fname, -+ (int) l - 8, fname, - (unsigned long long) now(CLOCK_REALTIME), - random_ull()) < 0) - return -ENOMEM; diff --git a/SOURCES/0035-journal-optimize-bisection-logic-a-bit-by-caching-th.patch b/SOURCES/0035-journal-optimize-bisection-logic-a-bit-by-caching-th.patch deleted file mode 100644 index 68d5cf7..0000000 --- a/SOURCES/0035-journal-optimize-bisection-logic-a-bit-by-caching-th.patch +++ /dev/null @@ -1,244 +0,0 @@ -From 563bf9e9305aa88ad403a81c0c91418b7846f465 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 26 Nov 2013 20:37:53 +0100 -Subject: [PATCH] journal: optimize bisection logic a bit by caching the last - position - -This way we can do a quick restart limiting a bit how wildly we need to -jump around during the bisection process. ---- - src/journal/journal-file.c | 134 +++++++++++++++++++++++++++++++++------------ - 1 file changed, 99 insertions(+), 35 deletions(-) - -diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c -index 4062a83..7adb1b5 100644 ---- a/src/journal/journal-file.c -+++ b/src/journal/journal-file.c -@@ -1366,6 +1366,7 @@ typedef struct ChainCacheItem { - uint64_t array; /* the cached array */ - uint64_t begin; /* the first item in the cached array */ - uint64_t total; /* the total number of items in all arrays before this one in the chain */ -+ uint64_t last_index; /* the last index we looked at, to optimize locality when bisecting */ - } ChainCacheItem; - - static void chain_cache_put( -@@ -1374,7 +1375,8 @@ static void chain_cache_put( - uint64_t first, - uint64_t array, - uint64_t begin, -- uint64_t total) { -+ uint64_t total, -+ uint64_t last_index) { - - if (!ci) { - /* If the chain item to cache for this chain is the -@@ -1402,12 +1404,14 @@ static void chain_cache_put( - ci->array = array; - ci->begin = begin; - ci->total = total; -+ ci->last_index = last_index; - } - --static int generic_array_get(JournalFile *f, -- uint64_t first, -- uint64_t i, -- Object **ret, uint64_t *offset) { -+static int generic_array_get( -+ JournalFile *f, -+ uint64_t first, -+ uint64_t i, -+ Object **ret, uint64_t *offset) { - - Object *o; - uint64_t p = 0, a, t = 0; -@@ -1448,7 +1452,7 @@ static int generic_array_get(JournalFile *f, - - 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); -+ chain_cache_put(f->chain_cache, ci, first, a, o->entry_array.items[0], t, i); - - r = journal_file_move_to_object(f, OBJECT_ENTRY, p, &o); - if (r < 0) -@@ -1463,11 +1467,12 @@ found: - return 1; - } - --static int generic_array_get_plus_one(JournalFile *f, -- uint64_t extra, -- uint64_t first, -- uint64_t i, -- Object **ret, uint64_t *offset) { -+static int generic_array_get_plus_one( -+ JournalFile *f, -+ uint64_t extra, -+ uint64_t first, -+ uint64_t i, -+ Object **ret, uint64_t *offset) { - - Object *o; - -@@ -1498,17 +1503,18 @@ enum { - TEST_RIGHT - }; - --static int generic_array_bisect(JournalFile *f, -- uint64_t first, -- uint64_t n, -- uint64_t needle, -- int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle), -- direction_t direction, -- Object **ret, -- uint64_t *offset, -- uint64_t *idx) { -- -- uint64_t a, p, t = 0, i = 0, last_p = 0; -+static int generic_array_bisect( -+ JournalFile *f, -+ uint64_t first, -+ uint64_t n, -+ uint64_t needle, -+ int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle), -+ direction_t direction, -+ Object **ret, -+ uint64_t *offset, -+ uint64_t *idx) { -+ -+ uint64_t a, p, t = 0, i = 0, last_p = 0, last_index = (uint64_t) -1; - bool subtract_one = false; - Object *o, *array = NULL; - int r; -@@ -1533,7 +1539,7 @@ static int generic_array_bisect(JournalFile *f, - return r; - - if (r == TEST_LEFT) { -- /* OK, what we are looking for is right of th -+ /* OK, what we are looking for is right of the - * begin of this EntryArray, so let's jump - * straight to previously cached array in the - * chain */ -@@ -1541,6 +1547,7 @@ static int generic_array_bisect(JournalFile *f, - a = ci->array; - n -= ci->total; - t = ci->total; -+ last_index = ci->last_index; - } - } - -@@ -1571,6 +1578,60 @@ static int generic_array_bisect(JournalFile *f, - if (r == TEST_RIGHT) { - left = 0; - right -= 1; -+ -+ if (last_index != (uint64_t) -1) { -+ assert(last_index <= right); -+ -+ /* If we cached the last index we -+ * looked at, let's try to not to jump -+ * too wildly around and see if we can -+ * limit the range to look at early to -+ * the immediate neighbors of the last -+ * index we looked at. */ -+ -+ if (last_index > 0) { -+ uint64_t x = last_index - 1; -+ -+ p = le64toh(array->entry_array.items[x]); -+ if (p <= 0) -+ return -EBADMSG; -+ -+ r = test_object(f, p, needle); -+ if (r < 0) -+ return r; -+ -+ if (r == TEST_FOUND) -+ r = direction == DIRECTION_DOWN ? TEST_RIGHT : TEST_LEFT; -+ -+ if (r == TEST_RIGHT) -+ right = x; -+ else -+ left = x + 1; -+ } -+ -+ if (last_index < right) { -+ uint64_t y = last_index + 1; -+ -+ p = le64toh(array->entry_array.items[y]); -+ if (p <= 0) -+ return -EBADMSG; -+ -+ r = test_object(f, p, needle); -+ if (r < 0) -+ return r; -+ -+ if (r == TEST_FOUND) -+ r = direction == DIRECTION_DOWN ? TEST_RIGHT : TEST_LEFT; -+ -+ if (r == TEST_RIGHT) -+ right = y; -+ else -+ left = y + 1; -+ } -+ -+ last_index = (uint64_t) -1; -+ } -+ - for (;;) { - if (left == right) { - if (direction == DIRECTION_UP) -@@ -1581,8 +1642,8 @@ static int generic_array_bisect(JournalFile *f, - } - - assert(left < right); -- - i = (left + right) / 2; -+ - p = le64toh(array->entry_array.items[i]); - if (p <= 0) - return -EBADMSG; -@@ -1615,6 +1676,7 @@ static int generic_array_bisect(JournalFile *f, - - n -= k; - t += k; -+ last_index = (uint64_t) -1; - a = le64toh(array->entry_array.next_entry_array_offset); - } - -@@ -1625,7 +1687,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); -+ chain_cache_put(f->chain_cache, ci, first, a, array->entry_array.items[0], t, i + (subtract_one ? -1 : 0)); - - if (subtract_one && i == 0) - p = last_p; -@@ -1650,16 +1712,18 @@ found: - return 1; - } - --static int generic_array_bisect_plus_one(JournalFile *f, -- uint64_t extra, -- uint64_t first, -- uint64_t n, -- uint64_t needle, -- int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle), -- direction_t direction, -- Object **ret, -- uint64_t *offset, -- uint64_t *idx) { -+ -+static int generic_array_bisect_plus_one( -+ JournalFile *f, -+ uint64_t extra, -+ uint64_t first, -+ uint64_t n, -+ uint64_t needle, -+ int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle), -+ direction_t direction, -+ Object **ret, -+ uint64_t *offset, -+ uint64_t *idx) { - - int r; - bool step_back = false; diff --git a/SOURCES/0035-machined-use-x-machine-unix-prefix-for-the-container.patch b/SOURCES/0035-machined-use-x-machine-unix-prefix-for-the-container.patch new file mode 100644 index 0000000..c83a81f --- /dev/null +++ b/SOURCES/0035-machined-use-x-machine-unix-prefix-for-the-container.patch @@ -0,0 +1,30 @@ +From e02e6845a4c4abe7d79df4305810703af5e6ec21 Mon Sep 17 00:00:00 2001 +From: Benjamin Franzke +Date: Thu, 19 Feb 2015 20:47:28 +0100 +Subject: [PATCH] machined: use x-machine-unix prefix for the container bus on + dbus1 + +This fixes "machinectl login" on systems configured with --disable-kdbus. + +The error was: +machinectl login foo +Failed to get machine PTY: Input/output error + +(cherry picked from commit f2273101c21bc59a390379e182e53cd4f07a7e71) +--- + src/machine/machine-dbus.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c +index b46f0a8..b0f0f66 100644 +--- a/src/machine/machine-dbus.c ++++ b/src/machine/machine-dbus.c +@@ -477,7 +477,7 @@ int bus_machine_method_open_login(sd_bus *bus, sd_bus_message *message, void *us + #ifdef ENABLE_KDBUS + asprintf(&container_bus->address, "x-machine-kernel:pid=" PID_FMT ";x-machine-unix:pid=" PID_FMT, m->leader, m->leader); + #else +- asprintf(&container_bus->address, "x-machine-kernel:pid=" PID_FMT, m->leader); ++ asprintf(&container_bus->address, "x-machine-unix:pid=" PID_FMT, m->leader); + #endif + if (!container_bus->address) + return -ENOMEM; diff --git a/SOURCES/0036-journal-fix-iteration-when-we-go-backwards-from-the-.patch b/SOURCES/0036-journal-fix-iteration-when-we-go-backwards-from-the-.patch deleted file mode 100644 index 3b68302..0000000 --- a/SOURCES/0036-journal-fix-iteration-when-we-go-backwards-from-the-.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 5284c03b3bc881c4b79b1afb32284dd86ab836f5 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 27 Nov 2013 00:58:39 +0100 -Subject: [PATCH] journal: fix iteration when we go backwards from the - beginning of an array chain element - ---- - src/journal/journal-file.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c -index 7adb1b5..53dd0c3 100644 ---- a/src/journal/journal-file.c -+++ b/src/journal/journal-file.c -@@ -1687,7 +1687,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, i + (subtract_one ? -1 : 0)); -+ 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); - - if (subtract_one && i == 0) - p = last_p; diff --git a/SOURCES/0036-shared-AFS-is-also-a-network-filesystem.patch b/SOURCES/0036-shared-AFS-is-also-a-network-filesystem.patch new file mode 100644 index 0000000..164e6e3 --- /dev/null +++ b/SOURCES/0036-shared-AFS-is-also-a-network-filesystem.patch @@ -0,0 +1,22 @@ +From 46392c1d8f433ee44fc5bacb085879779a662468 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Cristian=20Rodr=C3=ADguez?= +Date: Fri, 20 Feb 2015 15:35:11 -0300 +Subject: [PATCH] shared: AFS is also a network filesystem + +(cherry picked from commit ba89821c104d959082aad6f3f0e05a8afd575023) +--- + src/shared/util.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/shared/util.c b/src/shared/util.c +index ba035ca..f24b5b4 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -1689,6 +1689,7 @@ bool chars_intersect(const char *a, const char *b) { + + bool fstype_is_network(const char *fstype) { + static const char table[] = ++ "afs\0" + "cifs\0" + "smbfs\0" + "sshfs\0" diff --git a/SOURCES/0037-core-downgrade-unit-type-not-supported-message.patch b/SOURCES/0037-core-downgrade-unit-type-not-supported-message.patch new file mode 100644 index 0000000..f03205a --- /dev/null +++ b/SOURCES/0037-core-downgrade-unit-type-not-supported-message.patch @@ -0,0 +1,28 @@ +From 0b78cbf29f02adc3cc490bf2b4e9365057ed7d7b Mon Sep 17 00:00:00 2001 +From: Umut Tezduyar Lindskog +Date: Fri, 20 Feb 2015 10:53:28 +0100 +Subject: [PATCH] core: downgrade unit type not supported message + +Otherwise every daemon reload prints out warnings like: + +systemd[1]: Unit type .busname is not supported on this system. +systemd[1]: Unit type .swap is not supported on this system. + +(cherry picked from commit 03afec3c9aa849ba13161c253b129b834298fd40) +--- + src/core/manager.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/manager.c b/src/core/manager.c +index 4775219..bc9b7ec 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -961,7 +961,7 @@ int manager_enumerate(Manager *m) { + int q; + + if (unit_vtable[c]->supported && !unit_vtable[c]->supported(m)) { +- log_info("Unit type .%s is not supported on this system.", unit_type_to_string(c)); ++ log_debug("Unit type .%s is not supported on this system.", unit_type_to_string(c)); + continue; + } + diff --git a/SOURCES/0037-journal-allow-journal_file_copy_entry-to-work-on-non.patch b/SOURCES/0037-journal-allow-journal_file_copy_entry-to-work-on-non.patch deleted file mode 100644 index e62849e..0000000 --- a/SOURCES/0037-journal-allow-journal_file_copy_entry-to-work-on-non.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 0badfa6266d2b5116a14fe2eebcf55f6a072332b Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 27 Nov 2013 00:59:07 +0100 -Subject: [PATCH] journal: allow journal_file_copy_entry() to work on non-local - files - ---- - src/journal/journal-file.c | 4 ---- - 1 file changed, 4 deletions(-) - -diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c -index 53dd0c3..94e3921 100644 ---- a/src/journal/journal-file.c -+++ b/src/journal/journal-file.c -@@ -2732,10 +2732,6 @@ int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint6 - ts.monotonic = le64toh(o->entry.monotonic); - ts.realtime = le64toh(o->entry.realtime); - -- if (to->tail_entry_monotonic_valid && -- ts.monotonic < le64toh(to->header->tail_entry_monotonic)) -- return -EINVAL; -- - n = journal_file_entry_n_items(o); - items = alloca(sizeof(EntryItem) * n); - diff --git a/SOURCES/0038-journal-remote-fix-saving-of-binary-fields.patch b/SOURCES/0038-journal-remote-fix-saving-of-binary-fields.patch new file mode 100644 index 0000000..2b08bec --- /dev/null +++ b/SOURCES/0038-journal-remote-fix-saving-of-binary-fields.patch @@ -0,0 +1,94 @@ +From 608259be892c532d0afaeb81de3a5ee578d7658a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 2 Mar 2015 10:34:51 -0500 +Subject: [PATCH] journal-remote: fix saving of binary fields + +Binary fields were not processed properly, and resulting journal files +were non-conforming, resulting in an error ("Invalid field.") when reading. + +https://bugs.freedesktop.org/show_bug.cgi?id=89391 +(cherry picked from commit 09d801a82a46df518dd752e40bf13ac404daa2ce) +--- + src/journal-remote/journal-remote-parse.c | 31 ++++++++++++++++++------------- + src/journal-remote/journal-remote-parse.h | 4 +++- + 2 files changed, 21 insertions(+), 14 deletions(-) + +diff --git a/src/journal-remote/journal-remote-parse.c b/src/journal-remote/journal-remote-parse.c +index d9dea8d..afded7e 100644 +--- a/src/journal-remote/journal-remote-parse.c ++++ b/src/journal-remote/journal-remote-parse.c +@@ -344,22 +344,25 @@ int process_data(RemoteSource *source) { + LLLLLLLL0011223344...\n + */ + sep = memchr(line, '=', n); +- if (sep) ++ if (sep) { + /* chomp newline */ + n--; +- else ++ ++ r = iovw_put(&source->iovw, line, n); ++ if (r < 0) ++ return r; ++ } else { + /* replace \n with = */ + line[n-1] = '='; +- log_trace("Received: %.*s", (int) n, line); + +- r = iovw_put(&source->iovw, line, n); +- if (r < 0) { +- log_error("Failed to put line in iovect"); +- return r; ++ source->field_len = n; ++ source->state = STATE_DATA_START; ++ ++ /* we cannot put the field in iovec until we have all data */ + } + +- if (!sep) +- source->state = STATE_DATA_START; ++ log_trace("Received: %.*s (%s)", (int) n, line, sep ? "text" : "binary"); ++ + return 0; /* continue */ + } + +@@ -382,6 +385,7 @@ int process_data(RemoteSource *source) { + + case STATE_DATA: { + void *data; ++ char *field; + + assert(source->data_size > 0); + +@@ -396,11 +400,12 @@ int process_data(RemoteSource *source) { + + assert(data); + +- r = iovw_put(&source->iovw, data, source->data_size); +- if (r < 0) { +- log_error("failed to put binary buffer in iovect"); ++ field = (char*) data - sizeof(uint64_t) - source->field_len; ++ memmove(field + sizeof(uint64_t), field, source->field_len); ++ ++ r = iovw_put(&source->iovw, field + sizeof(uint64_t), source->field_len + source->data_size); ++ if (r < 0) + return r; +- } + + source->state = STATE_DATA_FINISH; + +diff --git a/src/journal-remote/journal-remote-parse.h b/src/journal-remote/journal-remote-parse.h +index 8499f4e..22db550 100644 +--- a/src/journal-remote/journal-remote-parse.h ++++ b/src/journal-remote/journal-remote-parse.h +@@ -42,7 +42,9 @@ typedef struct RemoteSource { + size_t offset; /* offset to the beginning of live data in the buffer */ + size_t scanned; /* number of bytes since the beginning of data without a newline */ + size_t filled; /* total number of bytes in the buffer */ +- size_t data_size; /* size of the binary data chunk being processed */ ++ ++ size_t field_len; /* used for binary fields: the field name length */ ++ size_t data_size; /* and the size of the binary data chunk being processed */ + + struct iovec_wrapper iovw; + diff --git a/SOURCES/0038-journal-simplify-pre-allocation-logic.patch b/SOURCES/0038-journal-simplify-pre-allocation-logic.patch deleted file mode 100644 index f0b319d..0000000 --- a/SOURCES/0038-journal-simplify-pre-allocation-logic.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 2d9a810729f9c209cab7aa6bf50ec5f749ebff82 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 27 Nov 2013 01:44:52 +0100 -Subject: [PATCH] journal: simplify pre-allocation logic - -let's just do a single fallocate() as far as possible, and don't -distuingish between allocated space and file size. - -This way we can save a syscall for each append, which makes quite some -benefits. ---- - src/journal/journal-file.c | 19 ++++++++----------- - 1 file changed, 8 insertions(+), 11 deletions(-) - -diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c -index 94e3921..962cdd6 100644 ---- a/src/journal/journal-file.c -+++ b/src/journal/journal-file.c -@@ -315,7 +315,7 @@ static int journal_file_verify_header(JournalFile *f) { - } - - static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) { -- uint64_t old_size, new_size, file_size; -+ uint64_t old_size, new_size; - int r; - - assert(f); -@@ -356,6 +356,11 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) - } - } - -+ /* Increase by larger blocks at once */ -+ new_size = ((new_size+FILE_SIZE_INCREASE-1) / FILE_SIZE_INCREASE) * FILE_SIZE_INCREASE; -+ if (f->metrics.max_size > 0 && new_size > f->metrics.max_size) -+ new_size = f->metrics.max_size; -+ - /* Note that the glibc fallocate() fallback is very - inefficient, hence we try to minimize the allocation area - as we can. */ -@@ -363,16 +368,8 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) - if (r != 0) - return -r; - -- /* Increase the file size a bit further than this, so that we -- * we can create larger memory maps to cache */ -- file_size = ((new_size+FILE_SIZE_INCREASE-1) / FILE_SIZE_INCREASE) * FILE_SIZE_INCREASE; -- if (file_size > (uint64_t) f->last_stat.st_size) { -- if (file_size > new_size) -- ftruncate(f->fd, file_size); -- -- if (fstat(f->fd, &f->last_stat) < 0) -- return -errno; -- } -+ if (fstat(f->fd, &f->last_stat) < 0) -+ return -errno; - - f->header->arena_size = htole64(new_size - le64toh(f->header->header_size)); - diff --git a/SOURCES/0039-journal-fix-Inappropriate-ioctl-for-device-on-ext4.patch b/SOURCES/0039-journal-fix-Inappropriate-ioctl-for-device-on-ext4.patch new file mode 100644 index 0000000..9963a54 --- /dev/null +++ b/SOURCES/0039-journal-fix-Inappropriate-ioctl-for-device-on-ext4.patch @@ -0,0 +1,34 @@ +From b3df4af4258e3285704f9622b9655084439c6f5e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Cristian=20Rodr=C3=ADguez?= +Date: Sun, 1 Mar 2015 21:13:10 -0300 +Subject: [PATCH] journal: fix Inappropriate ioctl for device on ext4 + +Logs constantly show + +systemd-journald[395]: Failed to set file attributes: Inappropriate ioctl for device + +This is because ext4 does not support FS_NOCOW_FL. + +[zj: fold into one conditional as suggested on the ML and + fix (preexisting) r/errno confusion in error message.] + +(cherry picked from commit 65eae3b76243d2dfd869f8c43b787575f7b4b994) +--- + src/journal/journal-file.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c +index 2845e05..0f28718 100644 +--- a/src/journal/journal-file.c ++++ b/src/journal/journal-file.c +@@ -2611,8 +2611,8 @@ int journal_file_open( + * shouldn't be too bad, given that we do our own + * checksumming). */ + r = chattr_fd(f->fd, true, FS_NOCOW_FL); +- if (r < 0) +- log_warning_errno(errno, "Failed to set file attributes: %m"); ++ if (r < 0 && r != -ENOTTY) ++ log_warning_errno(r, "Failed to set file attributes: %m"); + + /* Let's attach the creation time to the journal file, + * so that the vacuuming code knows the age of this diff --git a/SOURCES/0039-journald-mention-how-long-we-needed-to-flush-to-var-.patch b/SOURCES/0039-journald-mention-how-long-we-needed-to-flush-to-var-.patch deleted file mode 100644 index cc56f08..0000000 --- a/SOURCES/0039-journald-mention-how-long-we-needed-to-flush-to-var-.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 29323cff9feac15e1871a10e727690ac0ed1007d Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 27 Nov 2013 01:54:25 +0100 -Subject: [PATCH] journald: mention how long we needed to flush to /var in the - logs - ---- - src/journal/journald-server.c | 11 ++++++++++- - 1 file changed, 10 insertions(+), 1 deletion(-) - -diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c -index e03e413..a0a8e9c 100644 ---- a/src/journal/journald-server.c -+++ b/src/journal/journald-server.c -@@ -968,9 +968,12 @@ static int system_journal_open(Server *s) { - } - - int server_flush_to_var(Server *s) { -- int r; - sd_id128_t machine; - sd_journal *j = NULL; -+ char ts[FORMAT_TIMESPAN_MAX]; -+ usec_t start; -+ unsigned n = 0; -+ int r; - - assert(s); - -@@ -988,6 +991,8 @@ int server_flush_to_var(Server *s) { - - log_debug("Flushing to /var..."); - -+ start = now(CLOCK_MONOTONIC); -+ - r = sd_id128_get_machine(&machine); - if (r < 0) - return r; -@@ -1007,6 +1012,8 @@ int server_flush_to_var(Server *s) { - f = j->current_file; - assert(f && f->current_offset > 0); - -+ n++; -+ - r = journal_file_move_to_object(f, OBJECT_ENTRY, f->current_offset, &o); - if (r < 0) { - log_error("Can't read entry: %s", strerror(-r)); -@@ -1050,6 +1057,8 @@ finish: - - sd_journal_close(j); - -+ server_driver_message(s, SD_ID128_NULL, "Time spent on flushing to /var is %s for %u entries.", format_timespan(ts, sizeof(ts), now(CLOCK_MONOTONIC) - start, 0), n); -+ - return r; - } - diff --git a/SOURCES/0040-Never-call-qsort-on-potentially-NULL-arrays.patch b/SOURCES/0040-Never-call-qsort-on-potentially-NULL-arrays.patch deleted file mode 100644 index bd6b097..0000000 --- a/SOURCES/0040-Never-call-qsort-on-potentially-NULL-arrays.patch +++ /dev/null @@ -1,368 +0,0 @@ -From 43406f091aaa58ed23250a9967f46ad9cfa0b007 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Fri, 11 Oct 2013 19:33:13 -0400 -Subject: [PATCH] Never call qsort on potentially NULL arrays - -This extends 62678ded 'efi: never call qsort on potentially -NULL arrays' to all other places where qsort is used and it -is not obvious that the count is non-zero. ---- - src/analyze/systemd-analyze.c | 2 +- - src/cgtop/cgtop.c | 2 +- - src/core/namespace.c | 38 ++++++++++++++++++++------------------ - src/journal/catalog.c | 2 +- - src/journal/journal-vacuum.c | 3 +-- - src/journal/journalctl.c | 2 +- - src/libsystemd-bus/bus-match.c | 2 +- - src/libudev/libudev-enumerate.c | 2 +- - src/nss-myhostname/netlink.c | 3 ++- - src/readahead/readahead-collect.c | 39 ++++++++++++++++++++++----------------- - src/shared/cgroup-show.c | 2 ++ - src/shared/conf-files.c | 2 +- - src/shared/efivars.c | 3 +-- - src/shared/fileio.c | 1 + - src/shared/util.h | 12 ++++++++++++ - src/systemctl/systemctl.c | 10 +++++----- - 16 files changed, 73 insertions(+), 52 deletions(-) - -diff --git a/src/analyze/systemd-analyze.c b/src/analyze/systemd-analyze.c -index 27d063c..a4f15eb 100644 ---- a/src/analyze/systemd-analyze.c -+++ b/src/analyze/systemd-analyze.c -@@ -768,7 +768,7 @@ static int list_dependencies_one(DBusConnection *bus, const char *name, unsigned - if (r < 0) - return r; - -- qsort(deps, strv_length(deps), sizeof (char*), list_dependencies_compare); -+ qsort_safe(deps, strv_length(deps), sizeof (char*), list_dependencies_compare); - - r = acquire_boot_times(bus, &boot); - if (r < 0) -diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c -index cacf705..293a211 100644 ---- a/src/cgtop/cgtop.c -+++ b/src/cgtop/cgtop.c -@@ -461,7 +461,7 @@ static int display(Hashmap *a) { - if (g->n_tasks_valid || g->cpu_valid || g->memory_valid || g->io_valid) - array[n++] = g; - -- qsort(array, n, sizeof(Group*), group_compare); -+ qsort_safe(array, n, sizeof(Group*), group_compare); - - /* Find the longest names in one run */ - for (j = 0; j < n; j++) { -diff --git a/src/core/namespace.c b/src/core/namespace.c -index 16b132b..936f368 100644 ---- a/src/core/namespace.c -+++ b/src/core/namespace.c -@@ -222,7 +222,7 @@ int setup_namespace(char** read_write_dirs, - strv_length(read_only_dirs) + - strv_length(inaccessible_dirs) + - (private_tmp ? 2 : 0); -- BindMount *m, *mounts; -+ BindMount *m, *mounts = NULL; - int r = 0; - - if (!mount_flags) -@@ -231,27 +231,29 @@ int setup_namespace(char** read_write_dirs, - if (unshare(CLONE_NEWNS) < 0) - return -errno; - -- m = mounts = (BindMount *) alloca(n * sizeof(BindMount)); -- if ((r = append_mounts(&m, read_write_dirs, READWRITE)) < 0 || -- (r = append_mounts(&m, read_only_dirs, READONLY)) < 0 || -- (r = append_mounts(&m, inaccessible_dirs, INACCESSIBLE)) < 0) -- return r; -+ if (n) { -+ m = mounts = (BindMount *) alloca(n * sizeof(BindMount)); -+ if ((r = append_mounts(&m, read_write_dirs, READWRITE)) < 0 || -+ (r = append_mounts(&m, read_only_dirs, READONLY)) < 0 || -+ (r = append_mounts(&m, inaccessible_dirs, INACCESSIBLE)) < 0) -+ return r; -+ -+ if (private_tmp) { -+ m->path = "/tmp"; -+ m->mode = PRIVATE_TMP; -+ m++; -+ -+ m->path = "/var/tmp"; -+ m->mode = PRIVATE_VAR_TMP; -+ m++; -+ } - -- if (private_tmp) { -- m->path = "/tmp"; -- m->mode = PRIVATE_TMP; -- m++; -+ assert(mounts + n == m); - -- m->path = "/var/tmp"; -- m->mode = PRIVATE_VAR_TMP; -- m++; -+ qsort(mounts, n, sizeof(BindMount), mount_path_compare); -+ drop_duplicates(mounts, &n); - } - -- assert(mounts + n == m); -- -- qsort(mounts, n, sizeof(BindMount), mount_path_compare); -- drop_duplicates(mounts, &n); -- - /* Remount / as SLAVE so that nothing now mounted in the namespace - shows up in the parent */ - if (mount(NULL, "/", NULL, MS_SLAVE|MS_REC, NULL) < 0) -diff --git a/src/journal/catalog.c b/src/journal/catalog.c -index 7738d24..90ca008 100644 ---- a/src/journal/catalog.c -+++ b/src/journal/catalog.c -@@ -399,7 +399,7 @@ int catalog_update(const char* database, const char* root, const char* const* di - } - - assert(n == hashmap_size(h)); -- qsort(items, n, sizeof(CatalogItem), catalog_compare_func); -+ qsort_safe(items, n, sizeof(CatalogItem), catalog_compare_func); - - r = write_catalog(database, h, sb, items, n); - if (r < 0) -diff --git a/src/journal/journal-vacuum.c b/src/journal/journal-vacuum.c -index 8d5effb..d4a1c6c 100644 ---- a/src/journal/journal-vacuum.c -+++ b/src/journal/journal-vacuum.c -@@ -299,8 +299,7 @@ int journal_directory_vacuum( - n_list ++; - } - -- if (n_list > 0) -- qsort(list, n_list, sizeof(struct vacuum_info), vacuum_compare); -+ qsort_safe(list, n_list, sizeof(struct vacuum_info), vacuum_compare); - - for (i = 0; i < n_list; i++) { - struct statvfs ss; -diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c -index 9a2d255..0876ee6 100644 ---- a/src/journal/journalctl.c -+++ b/src/journal/journalctl.c -@@ -755,7 +755,7 @@ static int get_relative_boot_id(sd_journal *j, sd_id128_t *boot_id, int relative - sd_journal_flush_matches(j); - } - -- qsort(all_ids, count, sizeof(boot_id_t), boot_id_cmp); -+ qsort_safe(all_ids, count, sizeof(boot_id_t), boot_id_cmp); - - if (sd_id128_equal(*boot_id, SD_ID128_NULL)) { - if (relative > (int) count || relative <= -(int)count) -diff --git a/src/libsystemd-bus/bus-match.c b/src/libsystemd-bus/bus-match.c -index 1411167..916682a 100644 ---- a/src/libsystemd-bus/bus-match.c -+++ b/src/libsystemd-bus/bus-match.c -@@ -768,7 +768,7 @@ int bus_match_parse( - } - - /* Order the whole thing, so that we always generate the same tree */ -- qsort(components, n_components, sizeof(struct bus_match_component), match_component_compare); -+ qsort_safe(components, n_components, sizeof(struct bus_match_component), match_component_compare); - - /* Check for duplicates */ - for (i = 0; i+1 < n_components; i++) -diff --git a/src/libudev/libudev-enumerate.c b/src/libudev/libudev-enumerate.c -index 8146f27..e71d766 100644 ---- a/src/libudev/libudev-enumerate.c -+++ b/src/libudev/libudev-enumerate.c -@@ -276,7 +276,7 @@ _public_ struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enume - size_t move_later_prefix = 0; - - udev_list_cleanup(&udev_enumerate->devices_list); -- qsort(udev_enumerate->devices, udev_enumerate->devices_cur, sizeof(struct syspath), syspath_cmp); -+ qsort_safe(udev_enumerate->devices, udev_enumerate->devices_cur, sizeof(struct syspath), syspath_cmp); - - max = udev_enumerate->devices_cur; - for (i = 0; i < max; i++) { -diff --git a/src/nss-myhostname/netlink.c b/src/nss-myhostname/netlink.c -index b1ef912..47a41f5 100644 ---- a/src/nss-myhostname/netlink.c -+++ b/src/nss-myhostname/netlink.c -@@ -197,7 +197,8 @@ finish: - return r; - } - -- qsort(list, n_list, sizeof(struct address), address_compare); -+ if (n_list) -+ qsort(list, n_list, sizeof(struct address), address_compare); - - *_list = list; - *_n_list = n_list; -diff --git a/src/readahead/readahead-collect.c b/src/readahead/readahead-collect.c -index 32888ad..6b74866 100644 ---- a/src/readahead/readahead-collect.c -+++ b/src/readahead/readahead-collect.c -@@ -536,8 +536,7 @@ done: - HASHMAP_FOREACH_KEY(q, p, files, i) - pack_file(pack, p, on_btrfs); - } else { -- struct item *ordered, *j; -- unsigned k, n; -+ unsigned n; - - /* On rotating media, order things by the block - * numbers */ -@@ -545,25 +544,31 @@ done: - log_debug("Ordering..."); - - n = hashmap_size(files); -- if (!(ordered = new(struct item, n))) { -- r = log_oom(); -- goto finish; -- } -- -- j = ordered; -- HASHMAP_FOREACH_KEY(q, p, files, i) { -- memcpy(j, q, sizeof(struct item)); -- j++; -- } -+ if (n) { -+ _cleanup_free_ struct item *ordered; -+ struct item *j; -+ unsigned k; -+ -+ ordered = new(struct item, n); -+ if (!ordered) { -+ r = log_oom(); -+ goto finish; -+ } - -- assert(ordered + n == j); -+ j = ordered; -+ HASHMAP_FOREACH_KEY(q, p, files, i) { -+ memcpy(j, q, sizeof(struct item)); -+ j++; -+ } - -- qsort(ordered, n, sizeof(struct item), qsort_compare); -+ assert(ordered + n == j); - -- for (k = 0; k < n; k++) -- pack_file(pack, ordered[k].path, on_btrfs); -+ qsort(ordered, n, sizeof(struct item), qsort_compare); - -- free(ordered); -+ for (k = 0; k < n; k++) -+ pack_file(pack, ordered[k].path, on_btrfs); -+ } else -+ log_warning("No pack files"); - } - - log_debug("Finalizing..."); -diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c -index e971f36..cc44ab4 100644 ---- a/src/shared/cgroup-show.c -+++ b/src/shared/cgroup-show.c -@@ -44,6 +44,8 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi - unsigned i, m, pid_width; - pid_t biggest = 0; - -+ assert(n_pids > 0); -+ - /* Filter duplicates */ - m = 0; - for (i = 0; i < n_pids; i++) { -diff --git a/src/shared/conf-files.c b/src/shared/conf-files.c -index 6d99739..ed4070c 100644 ---- a/src/shared/conf-files.c -+++ b/src/shared/conf-files.c -@@ -127,7 +127,7 @@ static int conf_files_list_strv_internal(char ***strv, const char *suffix, const - return -ENOMEM; - } - -- qsort(files, hashmap_size(fh), sizeof(char *), base_cmp); -+ qsort_safe(files, hashmap_size(fh), sizeof(char *), base_cmp); - *strv = files; - - hashmap_free(fh); -diff --git a/src/shared/efivars.c b/src/shared/efivars.c -index c015b16..f3eb6a6 100644 ---- a/src/shared/efivars.c -+++ b/src/shared/efivars.c -@@ -384,8 +384,7 @@ int efi_get_boot_options(uint16_t **options) { - list[count ++] = id; - } - -- if (list) -- qsort(list, count, sizeof(uint16_t), cmp_uint16); -+ qsort_safe(list, count, sizeof(uint16_t), cmp_uint16); - - *options = list; - return count; -diff --git a/src/shared/fileio.c b/src/shared/fileio.c -index 603a1c7..733b320 100644 ---- a/src/shared/fileio.c -+++ b/src/shared/fileio.c -@@ -662,6 +662,7 @@ int get_status_field(const char *filename, const char *pattern, char **field) { - int r; - - assert(filename); -+ assert(pattern); - assert(field); - - r = read_full_file(filename, &status, NULL); -diff --git a/src/shared/util.h b/src/shared/util.h -index 1b845b3..222abe0 100644 ---- a/src/shared/util.h -+++ b/src/shared/util.h -@@ -764,3 +764,15 @@ bool id128_is_valid(const char *s) _pure_; - void parse_user_at_host(char *arg, char **user, char **host); - - int split_pair(const char *s, const char *sep, char **l, char **r); -+ -+/** -+ * Normal qsort requires base to be nonnull. Here were require -+ * that only if nmemb > 0. -+ */ -+static inline void qsort_safe(void *base, size_t nmemb, size_t size, -+ int (*compar)(const void *, const void *)) { -+ if (nmemb) { -+ assert(base); -+ qsort(base, nmemb, size, compar); -+ } -+} -diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c -index bb7ada9..0d1a487 100644 ---- a/src/systemctl/systemctl.c -+++ b/src/systemctl/systemctl.c -@@ -471,7 +471,7 @@ static int list_units(DBusConnection *bus, char **args) { - if (r < 0) - return r; - -- qsort(unit_infos, c, sizeof(struct unit_info), compare_unit_info); -+ qsort_safe(unit_infos, c, sizeof(struct unit_info), compare_unit_info); - - output_units_list(unit_infos, c); - -@@ -733,8 +733,8 @@ static int list_sockets(DBusConnection *bus, char **args) { - listen = triggered = NULL; /* avoid cleanup */ - } - -- qsort(socket_infos, cs, sizeof(struct socket_info), -- (__compar_fn_t) socket_info_compare); -+ qsort_safe(socket_infos, cs, sizeof(struct socket_info), -+ (__compar_fn_t) socket_info_compare); - - output_sockets_list(socket_infos, cs); - -@@ -1108,7 +1108,7 @@ static int list_dependencies_one(DBusConnection *bus, const char *name, int leve - if (r < 0) - return r; - -- qsort(deps, strv_length(deps), sizeof (char*), list_dependencies_compare); -+ qsort_safe(deps, strv_length(deps), sizeof (char*), list_dependencies_compare); - - STRV_FOREACH(c, deps) { - if (strv_contains(u, *c)) { -@@ -3532,7 +3532,7 @@ static int show_all(const char* verb, - if (r < 0) - return r; - -- qsort(unit_infos, c, sizeof(struct unit_info), compare_unit_info); -+ qsort_safe(unit_infos, c, sizeof(struct unit_info), compare_unit_info); - - for (u = unit_infos; u < unit_infos + c; u++) { - _cleanup_free_ char *p = NULL; diff --git a/SOURCES/0040-sd-daemon-replace-VLA-with-alloca-to-make-llvm-happy.patch b/SOURCES/0040-sd-daemon-replace-VLA-with-alloca-to-make-llvm-happy.patch new file mode 100644 index 0000000..6361b1b --- /dev/null +++ b/SOURCES/0040-sd-daemon-replace-VLA-with-alloca-to-make-llvm-happy.patch @@ -0,0 +1,49 @@ +From 529c94b47f886f99796cff0f5827d6c2ebdcea19 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 2 Mar 2015 20:55:38 +0100 +Subject: [PATCH] sd-daemon: replace VLA with alloca(), to make llvm happy + +https://bugs.freedesktop.org/show_bug.cgi?id=89379 +(cherry picked from commit d4a144fadf89bca681724c6c9a65b4a165fa0f90) +--- + src/libsystemd/sd-daemon/sd-daemon.c | 12 +++++------- + 1 file changed, 5 insertions(+), 7 deletions(-) + +diff --git a/src/libsystemd/sd-daemon/sd-daemon.c b/src/libsystemd/sd-daemon/sd-daemon.c +index 028c2a7..22a3a53 100644 +--- a/src/libsystemd/sd-daemon/sd-daemon.c ++++ b/src/libsystemd/sd-daemon/sd-daemon.c +@@ -352,11 +352,7 @@ _public_ int sd_pid_notify_with_fds(pid_t pid, int unset_environment, const char + .msg_iovlen = 1, + .msg_name = &sockaddr, + }; +- union { +- struct cmsghdr cmsghdr; +- uint8_t buf[CMSG_SPACE(sizeof(struct ucred)) + +- CMSG_SPACE(sizeof(int) * n_fds)]; +- } control; ++ struct cmsghdr *control; + _cleanup_close_ int fd = -1; + struct cmsghdr *cmsg = NULL; + const char *e; +@@ -400,8 +396,10 @@ _public_ int sd_pid_notify_with_fds(pid_t pid, int unset_environment, const char + if (msghdr.msg_namelen > sizeof(struct sockaddr_un)) + msghdr.msg_namelen = sizeof(struct sockaddr_un); + ++ control = alloca(CMSG_SPACE(sizeof(struct ucred)) + CMSG_SPACE(sizeof(int) * n_fds)); ++ + if (n_fds > 0) { +- msghdr.msg_control = &control; ++ msghdr.msg_control = control; + msghdr.msg_controllen = CMSG_LEN(sizeof(int) * n_fds); + + cmsg = CMSG_FIRSTHDR(&msghdr); +@@ -418,7 +416,7 @@ _public_ int sd_pid_notify_with_fds(pid_t pid, int unset_environment, const char + try_without_ucred = true; + controllen_without_ucred = msghdr.msg_controllen; + +- msghdr.msg_control = &control; ++ msghdr.msg_control = control; + msghdr.msg_controllen += CMSG_LEN(sizeof(struct ucred)); + + if (cmsg) diff --git a/SOURCES/0041-localed-match-converted-keymaps-before-legacy.patch b/SOURCES/0041-localed-match-converted-keymaps-before-legacy.patch deleted file mode 100644 index 6274b97..0000000 --- a/SOURCES/0041-localed-match-converted-keymaps-before-legacy.patch +++ /dev/null @@ -1,324 +0,0 @@ -From 354d8234f177bca65eddf1451b180772cdbf7611 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Mon, 18 Nov 2013 13:42:57 -0500 -Subject: [PATCH] localed: match converted keymaps before legacy - -Before, X11 keymap fr-pc105-oss would be converted to fr, -even though fr-oss exists. Now, if -/usr/lib/kbd/keymaps/xkb/[-].map[.gz] exists, -[-] will be used as the console keymap, -falling back to the legacy mappings otherwise. - -% sudo localectl set-x11-keymap pl pc105 -% localectl - System Locale: LANG=en_US.UTF-8 - VC Keymap: pl (was pl2 before) - X11 Layout: pl - X11 Model: pc105 -% sudo localectl set-x11-keymap fr pc105 oss -% localectl - System Locale: LANG=en_US.UTF-8 - VC Keymap: fr-oss (was fr before) - X11 Layout: fr - X11 Model: pc105 - X11 Variant: oss -% sudo localectl set-x11-keymap fr pc105 -% localectl - System Locale: LANG=en_US.UTF-8 - VC Keymap: fr - X11 Layout: fr - X11 Model: pc105 -% sudo localectl set-x11-keymap gb -% localectl - System Locale: LANG=en_US.UTF-8 - VC Keymap: gb (was uk before) - X11 Layout: gb - -Conflicts: - src/locale/localed.c - src/shared/def.h ---- - src/locale/localectl.c | 8 +-- - src/locale/localed.c | 189 ++++++++++++++++++++++++++++--------------------- - src/shared/def.h | 13 ++++ - 3 files changed, 126 insertions(+), 84 deletions(-) - -diff --git a/src/locale/localectl.c b/src/locale/localectl.c -index 8259c0a..d3c6152 100644 ---- a/src/locale/localectl.c -+++ b/src/locale/localectl.c -@@ -38,6 +38,7 @@ - #include "set.h" - #include "path-util.h" - #include "utf8.h" -+#include "def.h" - - static bool arg_no_pager = false; - static enum transport { -@@ -533,15 +534,14 @@ static int nftw_cb( - - static int list_vconsole_keymaps(DBusConnection *bus, char **args, unsigned n) { - _cleanup_strv_free_ char **l = NULL; -+ const char *dir; - - keymaps = set_new(string_hash_func, string_compare_func); - if (!keymaps) - return log_oom(); - -- nftw("/usr/share/keymaps/", nftw_cb, 20, FTW_MOUNT|FTW_PHYS); -- nftw("/usr/share/kbd/keymaps/", nftw_cb, 20, FTW_MOUNT|FTW_PHYS); -- nftw("/usr/lib/kbd/keymaps/", nftw_cb, 20, FTW_MOUNT|FTW_PHYS); -- nftw("/lib/kbd/keymaps/", nftw_cb, 20, FTW_MOUNT|FTW_PHYS); -+ NULSTR_FOREACH(dir, KBD_KEYMAP_DIRS) -+ nftw(dir, nftw_cb, 20, FTW_MOUNT|FTW_PHYS); - - l = set_get_strv(keymaps); - if (!l) { -diff --git a/src/locale/localed.c b/src/locale/localed.c -index e160c04..b9b98f4 100644 ---- a/src/locale/localed.c -+++ b/src/locale/localed.c -@@ -792,105 +792,135 @@ static int convert_vconsole_to_x11(DBusConnection *connection) { - return 0; - } - --static int convert_x11_to_vconsole(DBusConnection *connection) { -- bool modified = false; -+static int find_converted_keymap(char **new_keymap) { -+ const char *dir; -+ _cleanup_free_ char *n; -+ -+ if (state.x11_variant) -+ n = strjoin(state.x11_layout, "-", state.x11_variant, NULL); -+ else -+ n = strdup(state.x11_layout); -+ if (!n) -+ return -ENOMEM; - -- assert(connection); -+ NULSTR_FOREACH(dir, KBD_KEYMAP_DIRS) { -+ _cleanup_free_ char *p = NULL, *pz = NULL; - -- if (isempty(state.x11_layout)) { -+ p = strjoin(dir, "xkb/", n, ".map", NULL); -+ pz = strjoin(dir, "xkb/", n, ".map.gz", NULL); -+ if (!p || !pz) -+ return -ENOMEM; - -- modified = -- !isempty(state.vc_keymap) || -- !isempty(state.vc_keymap_toggle); -+ if (access(p, F_OK) == 0 || access(pz, F_OK) == 0) { -+ *new_keymap = n; -+ n = NULL; -+ return 1; -+ } -+ } - -- free_data_x11(); -- } else { -- FILE *f; -- unsigned n = 0; -- unsigned best_matching = 0; -- char *new_keymap = NULL; -+ return 0; -+} - -- f = fopen(SYSTEMD_KBD_MODEL_MAP, "re"); -- if (!f) -- return -errno; -+static int find_legacy_keymap(char **new_keymap) { -+ _cleanup_fclose_ FILE *f; -+ unsigned n = 0; -+ unsigned best_matching = 0; - -- for (;;) { -- char **a; -- unsigned matching = 0; -- int r; - -- r = read_next_mapping(f, &n, &a); -- if (r < 0) { -- fclose(f); -- return r; -- } -+ f = fopen(SYSTEMD_KBD_MODEL_MAP, "re"); -+ if (!f) -+ return -errno; - -- if (r == 0) -- break; -+ for (;;) { -+ _cleanup_strv_free_ char **a = NULL; -+ unsigned matching = 0; -+ int r; - -- /* Determine how well matching this entry is */ -- if (streq_ptr(state.x11_layout, a[1])) -- /* If we got an exact match, this is best */ -- matching = 10; -- else { -- size_t x; -- -- x = strcspn(state.x11_layout, ","); -- -- /* We have multiple X layouts, look -- * for an entry that matches our key -- * with the everything but the first -- * layout stripped off. */ -- if (x > 0 && -- strlen(a[1]) == x && -- strneq(state.x11_layout, a[1], x)) -- matching = 5; -- else { -- size_t w; -- -- /* If that didn't work, strip -- * off the other layouts from -- * the entry, too */ -- -- w = strcspn(a[1], ","); -- -- if (x > 0 && x == w && -- memcmp(state.x11_layout, a[1], x) == 0) -- matching = 1; -- } -+ r = read_next_mapping(f, &n, &a); -+ if (r < 0) -+ return r; -+ if (r == 0) -+ break; -+ -+ /* Determine how well matching this entry is */ -+ if (streq_ptr(state.x11_layout, a[1])) -+ /* If we got an exact match, this is best */ -+ matching = 10; -+ else { -+ size_t x; -+ -+ x = strcspn(state.x11_layout, ","); -+ -+ /* We have multiple X layouts, look for an -+ * entry that matches our key with everything -+ * but the first layout stripped off. */ -+ if (x > 0 && -+ strlen(a[1]) == x && -+ strneq(state.x11_layout, a[1], x)) -+ matching = 5; -+ else { -+ size_t w; -+ -+ /* If that didn't work, strip off the -+ * other layouts from the entry, too */ -+ w = strcspn(a[1], ","); -+ -+ if (x > 0 && x == w && -+ memcmp(state.x11_layout, a[1], x) == 0) -+ matching = 1; - } -+ } -+ -+ if (matching > 0 && -+ streq_ptr(state.x11_model, a[2])) { -+ matching++; - -- if (matching > 0 && -- streq_ptr(state.x11_model, a[2])) { -+ if (streq_ptr(state.x11_variant, a[3])) { - matching++; - -- if (streq_ptr(state.x11_variant, a[3])) { -+ if (streq_ptr(state.x11_options, a[4])) - matching++; -- -- if (streq_ptr(state.x11_options, a[4])) -- matching++; -- } - } -+ } - -- /* The best matching entry so far, then let's -- * save that */ -- if (matching > best_matching) { -- best_matching = matching; -+ /* The best matching entry so far, then let's save that */ -+ if (matching > best_matching) { -+ best_matching = matching; - -- free(new_keymap); -- new_keymap = strdup(a[0]); -+ free(*new_keymap); -+ *new_keymap = strdup(a[0]); -+ if (!*new_keymap) -+ return -ENOMEM; -+ } -+ } - -- if (!new_keymap) { -- strv_free(a); -- fclose(f); -- return -ENOMEM; -- } -- } -+ return 0; -+} - -- strv_free(a); -- } -+static int convert_x11_to_vconsole(DBusConnection *connection) { -+ bool modified = false; -+ int r; - -- fclose(f); -+ assert(connection); -+ -+ if (isempty(state.x11_layout)) { -+ -+ modified = -+ !isempty(state.vc_keymap) || -+ !isempty(state.vc_keymap_toggle); -+ -+ free_data_x11(); -+ } else { -+ char *new_keymap = NULL; -+ -+ r = find_converted_keymap(&new_keymap); -+ if (r < 0) -+ return r; -+ else if (r == 0) { -+ r = find_legacy_keymap(&new_keymap); -+ if (r < 0) -+ return r; -+ } - - if (!streq_ptr(state.vc_keymap, new_keymap)) { - free(state.vc_keymap); -@@ -907,7 +937,6 @@ static int convert_x11_to_vconsole(DBusConnection *connection) { - if (modified) { - dbus_bool_t b; - DBusMessage *changed; -- int r; - - r = write_data_vconsole(); - if (r < 0) -diff --git a/src/shared/def.h b/src/shared/def.h -index e4ef735..58c834c 100644 ---- a/src/shared/def.h -+++ b/src/shared/def.h -@@ -41,3 +41,16 @@ - #define LOWERCASE_LETTERS "abcdefghijklmnopqrstuvwxyz" - #define UPPERCASE_LETTERS "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - #define LETTERS LOWERCASE_LETTERS UPPERCASE_LETTERS -+ -+#ifdef HAVE_SPLIT_USR -+#define KBD_KEYMAP_DIRS \ -+ "/usr/share/keymaps/\0" \ -+ "/usr/share/kbd/keymaps/\0" \ -+ "/usr/lib/kbd/keymaps/\0" \ -+ "/lib/kbd/keymaps/\0" -+#else -+#define KBD_KEYMAP_DIRS \ -+ "/usr/share/keymaps/\0" \ -+ "/usr/share/kbd/keymaps/\0" \ -+ "/usr/lib/kbd/keymaps/\0" -+#endif diff --git a/SOURCES/0041-tmpfiles-quietly-ignore-ACLs-on-unsupported-filesyst.patch b/SOURCES/0041-tmpfiles-quietly-ignore-ACLs-on-unsupported-filesyst.patch new file mode 100644 index 0000000..c0b94d6 --- /dev/null +++ b/SOURCES/0041-tmpfiles-quietly-ignore-ACLs-on-unsupported-filesyst.patch @@ -0,0 +1,80 @@ +From 6ad61c838992d17f5faa94faa8f17967083a4226 Mon Sep 17 00:00:00 2001 +From: Hans-Peter Deifel +Date: Tue, 3 Mar 2015 00:35:08 +0100 +Subject: [PATCH] tmpfiles: quietly ignore ACLs on unsupported filesystems + +A warning is printed if ACLs cannot be retrieved for any reason other +than -ENOSYS. For -ENOSYS, debug log is printed. + +(cherry picked from commit d873e8778c92014c02a9122852758b436fa95c0e) +--- + src/tmpfiles/tmpfiles.c | 36 ++++++++++++++++++++---------------- + 1 file changed, 20 insertions(+), 16 deletions(-) + +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index 88ba7e4..187997e 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -704,6 +704,9 @@ static int path_set_acl(const char *path, acl_type_t type, acl_t acl, bool modif + int r; + _cleanup_(acl_free_charpp) char *t = NULL; + ++ /* Returns 0 for success, positive error if already warned, ++ * negative error otherwise. */ ++ + if (modify) { + r = acls_for_file(path, type, acl, &dup); + if (r < 0) +@@ -731,35 +734,36 @@ static int path_set_acl(const char *path, acl_type_t type, acl_t acl, bool modif + + r = acl_set_file(path, type, dup); + if (r < 0) +- return log_error_errno(-errno, +- "Setting %s ACL \"%s\" on %s failed: %m", +- type == ACL_TYPE_ACCESS ? "access" : "default", +- strna(t), path); ++ return -log_error_errno(errno, ++ "Setting %s ACL \"%s\" on %s failed: %m", ++ type == ACL_TYPE_ACCESS ? "access" : "default", ++ strna(t), path); ++ + return 0; + } + #endif + + static int path_set_acls(Item *item, const char *path) { ++ int r = 0; + #ifdef HAVE_ACL +- int r; +- + assert(item); + assert(path); + +- if (item->acl_access) { ++ if (item->acl_access) + r = path_set_acl(path, ACL_TYPE_ACCESS, item->acl_access, item->force); +- if (r < 0) +- return r; +- } + +- if (item->acl_default) { ++ if (r == 0 && item->acl_default) + r = path_set_acl(path, ACL_TYPE_DEFAULT, item->acl_default, item->force); +- if (r < 0) +- return r; +- } +-#endif + +- return 0; ++ if (r > 0) ++ return -r; /* already warned */ ++ else if (r == -ENOTSUP) { ++ log_debug_errno(r, "ACLs not supported by file system at %s", path); ++ return 0; ++ } else if (r < 0) ++ log_error_errno(r, "ACL operation on \"%s\" failed: %m", path); ++#endif ++ return r; + } + + static int write_one_file(Item *i, const char *path) { diff --git a/SOURCES/0042-core-socket-fix-SO_REUSEPORT.patch b/SOURCES/0042-core-socket-fix-SO_REUSEPORT.patch deleted file mode 100644 index 2f8c231..0000000 --- a/SOURCES/0042-core-socket-fix-SO_REUSEPORT.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 9dda034962ef7d339f07e5cdeae87f34db970431 Mon Sep 17 00:00:00 2001 -From: Shawn Landden -Date: Sat, 16 Nov 2013 13:18:13 -0800 -Subject: [PATCH] core/socket: fix SO_REUSEPORT - ---- - src/core/load-fragment-gperf.gperf.m4 | 1 + - src/core/socket.c | 2 +- - 2 files changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4 -index 31fb7bc..d65bcc1 100644 ---- a/src/core/load-fragment-gperf.gperf.m4 -+++ b/src/core/load-fragment-gperf.gperf.m4 -@@ -211,6 +211,7 @@ Socket.Broadcast, config_parse_bool, 0, - Socket.PassCredentials, config_parse_bool, 0, offsetof(Socket, pass_cred) - Socket.PassSecurity, config_parse_bool, 0, offsetof(Socket, pass_sec) - Socket.TCPCongestion, config_parse_string, 0, offsetof(Socket, tcp_congestion) -+Socket.ReusePort, config_parse_bool, 0, offsetof(Socket, reuseport) - Socket.MessageQueueMaxMessages, config_parse_long, 0, offsetof(Socket, mq_maxmsg) - Socket.MessageQueueMessageSize, config_parse_long, 0, offsetof(Socket, mq_msgsize) - Socket.Service, config_parse_socket_service, 0, 0 -diff --git a/src/core/socket.c b/src/core/socket.c -index d368f7e..e673f38 100644 ---- a/src/core/socket.c -+++ b/src/core/socket.c -@@ -770,7 +770,7 @@ static void socket_apply_socket_options(Socket *s, int fd) { - - if (s->reuseport) { - int b = s->reuseport; -- if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &b, sizeof(b))) -+ if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &b, sizeof(b)) < 0) - log_warning_unit(UNIT(s)->id, "SO_REUSEPORT failed: %m"); - } - diff --git a/SOURCES/0042-shared-util-assume-ac-when-sys-class-power_supply-is.patch b/SOURCES/0042-shared-util-assume-ac-when-sys-class-power_supply-is.patch new file mode 100644 index 0000000..d290e83 --- /dev/null +++ b/SOURCES/0042-shared-util-assume-ac-when-sys-class-power_supply-is.patch @@ -0,0 +1,27 @@ +From a2911c593e9d69a2aa01d89d876e313f90e7db17 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 3 Mar 2015 19:07:28 -0500 +Subject: [PATCH] shared/util: assume ac when /sys/class/power_supply is + missing + +On s390 (at least) /sys/class/power_supply is not present. We should +treat this like if this directory was empty, and not an error. + +(cherry picked from commit 6d89003462484c8656b698e07b9cf0a337e3818e) +--- + src/shared/util.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/util.c b/src/shared/util.c +index f24b5b4..8548723 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -5994,7 +5994,7 @@ int on_ac_power(void) { + + d = opendir("/sys/class/power_supply"); + if (!d) +- return -errno; ++ return errno == ENOENT ? true : -errno; + + for (;;) { + struct dirent *de; diff --git a/SOURCES/0043-activate-fix-crash-when-s-is-passed.patch b/SOURCES/0043-activate-fix-crash-when-s-is-passed.patch deleted file mode 100644 index b4519f7..0000000 --- a/SOURCES/0043-activate-fix-crash-when-s-is-passed.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 6a4da7d980bf91207d07e2a7b1c4d1d2fe59e3e8 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Mantas=20Mikul=C4=97nas?= -Date: Wed, 13 Nov 2013 13:36:16 +0200 -Subject: [PATCH] activate: fix crash when -s is passed - -getopt_long() was told to accept -s which was never implemented. ---- - src/activate/activate.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/activate/activate.c b/src/activate/activate.c -index 83d25b1..535b330 100644 ---- a/src/activate/activate.c -+++ b/src/activate/activate.c -@@ -344,7 +344,7 @@ static int parse_argv(int argc, char *argv[]) { - assert(argc >= 0); - assert(argv); - -- while ((c = getopt_long(argc, argv, "+hl:saE:", options, NULL)) >= 0) -+ while ((c = getopt_long(argc, argv, "+hl:aE:", options, NULL)) >= 0) - switch(c) { - case 'h': - help(); diff --git a/SOURCES/0043-import-remove-unused-variable.patch b/SOURCES/0043-import-remove-unused-variable.patch new file mode 100644 index 0000000..35e4fbc --- /dev/null +++ b/SOURCES/0043-import-remove-unused-variable.patch @@ -0,0 +1,22 @@ +From 2bbdb63f7e5f125e1259b0fcfcea8226c5ae4e58 Mon Sep 17 00:00:00 2001 +From: Thomas Hindoe Paaboel Andersen +Date: Tue, 17 Feb 2015 20:06:13 +0100 +Subject: [PATCH] import: remove unused variable + +(cherry picked from commit b89c454b37a23433f8fd6ad7b93f5a6190930aa4) +--- + src/import/import-tar.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/import/import-tar.c b/src/import/import-tar.c +index 999aa8a..493252a 100644 +--- a/src/import/import-tar.c ++++ b/src/import/import-tar.c +@@ -301,7 +301,6 @@ finish: + } + + static int tar_import_job_on_open_disk(ImportJob *j) { +- _cleanup_close_pair_ int pipefd[2] = { -1 , -1 }; + TarImport *i; + int r; + diff --git a/SOURCES/0044-hwdb-fix-ThinkPad-X-Tablet-special-keys.patch b/SOURCES/0044-hwdb-fix-ThinkPad-X-Tablet-special-keys.patch new file mode 100644 index 0000000..ffa17cd --- /dev/null +++ b/SOURCES/0044-hwdb-fix-ThinkPad-X-Tablet-special-keys.patch @@ -0,0 +1,44 @@ +From 61d5dff976f33ec7189eae58641c49088e166479 Mon Sep 17 00:00:00 2001 +From: Lubomir Rintel +Date: Wed, 18 Feb 2015 21:02:01 +0100 +Subject: [PATCH] hwdb: fix ThinkPad X* Tablet special keys + +ThinkPad tablet firmware has DMI product name and version reversed: + +Handle 0x0001, DMI type 1, 27 bytes +System Information + Manufacturer: LENOVO + Product Name: 7762AS1 + Version: ThinkPad X61 Tablet + Serial Number: LKZCDH2 + UUID: 6ADBC681-4FC9-11CB-844F-B47CB9210BE2 + Wake-up Type: Power Switch + SKU Number: Not Specified + Family: ThinkPad X61 Tablet + +(cherry picked from commit 39addb81b660dd7af7d21be941d8de6497abbdbf) +--- + hwdb/60-keyboard.hwdb | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb +index 1b7d871..2cb9769 100644 +--- a/hwdb/60-keyboard.hwdb ++++ b/hwdb/60-keyboard.hwdb +@@ -586,7 +586,6 @@ keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnS10-*:pvr* + KEYBOARD_KEY_f3=f21 + + # 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 +@@ -596,7 +595,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:pvrThinkPad*X2*Tablet* + KEYBOARD_KEY_6c=direction # rotate screen + + # ThinkPad X6 Tablet +-keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pnThinkPad*X6*:pvr* ++keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:pvrThinkPad*X6*Tablet* + KEYBOARD_KEY_6c=direction # rotate + KEYBOARD_KEY_68=leftmeta # toolbox + KEYBOARD_KEY_6b=esc # escape diff --git a/SOURCES/0044-systemd-python-fix-booted-and-add-two-functions-to-d.patch b/SOURCES/0044-systemd-python-fix-booted-and-add-two-functions-to-d.patch deleted file mode 100644 index 25d5952..0000000 --- a/SOURCES/0044-systemd-python-fix-booted-and-add-two-functions-to-d.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 27b42c85817e4ebf03c60492f2bf187931450b51 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Mon, 11 Nov 2013 19:53:59 -0500 -Subject: [PATCH] systemd-python: fix booted() and add two functions to docs - -For some reason sphinx doesn't want to show inherited C functions. ---- - src/python-systemd/_daemon.c | 2 +- - src/python-systemd/docs/daemon.rst | 2 ++ - 2 files changed, 3 insertions(+), 1 deletion(-) - -diff --git a/src/python-systemd/_daemon.c b/src/python-systemd/_daemon.c -index 6b84fb8..f0ab16f 100644 ---- a/src/python-systemd/_daemon.c -+++ b/src/python-systemd/_daemon.c -@@ -51,7 +51,7 @@ static PyObject* booted(PyObject *self, PyObject *args) { - assert(args == NULL); - - r = sd_booted(); -- if (set_error(r, NULL, NULL)) -+ if (set_error(r, NULL, NULL) < 0) - return NULL; - - return PyBool_FromLong(r); -diff --git a/src/python-systemd/docs/daemon.rst b/src/python-systemd/docs/daemon.rst -index 72280ca..0ad11ed 100644 ---- a/src/python-systemd/docs/daemon.rst -+++ b/src/python-systemd/docs/daemon.rst -@@ -14,3 +14,5 @@ - .. autofunction:: _is_socket_unix - .. autofunction:: _is_socket_inet - .. autofunction:: _is_mq -+ .. autofunction:: notify -+ .. autofunction:: booted diff --git a/SOURCES/0045-man-add-newlines-to-the-pull-raw-example-in-machinec.patch b/SOURCES/0045-man-add-newlines-to-the-pull-raw-example-in-machinec.patch new file mode 100644 index 0000000..886bc89 --- /dev/null +++ b/SOURCES/0045-man-add-newlines-to-the-pull-raw-example-in-machinec.patch @@ -0,0 +1,34 @@ +From e411ef694a09d001cdb97e139af6884b01be4aba Mon Sep 17 00:00:00 2001 +From: Benjamin Franzke +Date: Thu, 19 Feb 2015 13:10:18 +0100 +Subject: [PATCH] man: add newlines to the pull-raw example in machinectl(1) + +They were removed in commit 798d3a52 ("Reindent man pages to 2ch"). + +(cherry picked from commit ac92ced5bb41def1d90f871d6c8cfec2b03c0c7d) +--- + man/machinectl.xml | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +diff --git a/man/machinectl.xml b/man/machinectl.xml +index 9b07af4..640cb8b 100644 +--- a/man/machinectl.xml ++++ b/man/machinectl.xml +@@ -715,11 +715,12 @@ + Download a Fedora image, set a root password in it, start + it as service + +- # machinectl pull-raw --verify=no +- http://ftp.halifax.rwth-aachen.de/fedora/linux/releases/21/Cloud/Images/x86_64/Fedora-Cloud-Base-20141203-21.x86_64.raw.xz +- # systemd-nspawn -M Fedora-Cloud-Base-20141203-21 # passwd # +- exit # machinectl start Fedora-Cloud-Base-20141203-21 # +- machinectl login Fedora-Cloud-Base-20141203-21 ++ # machinectl pull-raw --verify=no http://ftp.halifax.rwth-aachen.de/fedora/linux/releases/21/Cloud/Images/x86_64/Fedora-Cloud-Base-20141203-21.x86_64.raw.xz ++# systemd-nspawn -M Fedora-Cloud-Base-20141203-21 ++# passwd ++# exit ++# machinectl start Fedora-Cloud-Base-20141203-21 ++# machinectl login Fedora-Cloud-Base-20141203-21 + + This downloads the specified .raw + image with verification disabled. Then a shell is opened in it diff --git a/SOURCES/0045-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch b/SOURCES/0045-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch deleted file mode 100644 index bcd7ad4..0000000 --- a/SOURCES/0045-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 4003ebeac4b10481f32b5b1fdd65fcc905a4b9a7 Mon Sep 17 00:00:00 2001 -From: Thomas Hindoe Paaboel Andersen -Date: Sat, 30 Nov 2013 23:45:31 +0100 -Subject: [PATCH] util.c: check if return value from ttyname_r is > 0 instead - of != 0 - -We must return a negative error code from getttyname_malloc but -that would not be the case if ttyname_r returned a negative value. - -ttyname_r should only return EBADF, ENOTTY, or ERANGE so it should -be safe to change. ---- - src/shared/util.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/shared/util.c b/src/shared/util.c -index 6c88040..f602625 100644 ---- a/src/shared/util.c -+++ b/src/shared/util.c -@@ -2561,7 +2561,7 @@ int getttyname_malloc(int fd, char **r) { - assert(r); - - k = ttyname_r(fd, path, sizeof(path)); -- if (k != 0) -+ if (k > 0) - return -k; - - char_array_0(path); diff --git a/SOURCES/0046-activate-mention-E-in-the-help-text.patch b/SOURCES/0046-activate-mention-E-in-the-help-text.patch deleted file mode 100644 index a839f65..0000000 --- a/SOURCES/0046-activate-mention-E-in-the-help-text.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 75095af78beb53ce399f50b004b4bf9a4de9ab60 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Mantas=20Mikul=C4=97nas?= -Date: Wed, 13 Nov 2013 13:36:17 +0200 -Subject: [PATCH] activate: mention -E in the help text - ---- - src/activate/activate.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/activate/activate.c b/src/activate/activate.c -index 535b330..a9461bc 100644 ---- a/src/activate/activate.c -+++ b/src/activate/activate.c -@@ -316,6 +316,8 @@ static int help(void) { - " -l --listen=ADDR Listen for raw connections at ADDR\n" - " -a --accept Spawn separate child for each connection\n" - " -h --help Show this help and exit\n" -+ " -E --environment=NAME[=VALUE]\n" -+ " Pass an environment variable to children\n" - " --version Print version string and exit\n" - "\n" - "Note: file descriptors from sd_listen_fds() will be passed through.\n" diff --git a/SOURCES/0046-core-shared-in-deserializing-match-same-files-reache.patch b/SOURCES/0046-core-shared-in-deserializing-match-same-files-reache.patch new file mode 100644 index 0000000..c5923f4 --- /dev/null +++ b/SOURCES/0046-core-shared-in-deserializing-match-same-files-reache.patch @@ -0,0 +1,133 @@ +From 5d66d4942090a971de8df2c3de9ce143a208eb37 Mon Sep 17 00:00:00 2001 +From: Michal Schmidt +Date: Thu, 19 Feb 2015 23:12:38 +0100 +Subject: [PATCH] core, shared: in deserializing, match same files reached via + different paths + +When dbus.socket is updated like this: +-ListenStream=/var/run/dbus/system_bus_socket ++ListenStream=/run/dbus/system_bus_socket +... and daemon-reload is performed, bad things happen. +During deserialization systemd does not recognize that the two paths +refer to the same named socket and replaces the socket file with a new +one. As a result, applications hang when they try talking to dbus. + +Fix this by finding a match not only when the path names are equal, but +also when they point to the same inode. +In socket_address_equal() it is necessary to move the address size +comparison into the abstract sockets branch. For path name sockets the +comparison must not be done and for other families it is redundant +(their sizes are constant and checked by socket_address_verify()). + +FIFOs and special files can also have multiple pathnames, so compare the +inodes for them as well. Note that previously the pathname checks used +streq_ptr(), but the paths cannot be NULL. + +Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1186018 +(cherry picked from commit c78e47a61fa8d9a21fece01c83e4c26ce0938d27) +--- + src/core/socket.c | 6 +++--- + src/shared/path-util.c | 4 ++++ + src/shared/path-util.h | 1 + + src/shared/socket-util.c | 10 ++++------ + 4 files changed, 12 insertions(+), 9 deletions(-) + +diff --git a/src/core/socket.c b/src/core/socket.c +index 48c43a2..88aae48 100644 +--- a/src/core/socket.c ++++ b/src/core/socket.c +@@ -2100,7 +2100,7 @@ static int socket_deserialize_item(Unit *u, const char *key, const char *value, + + LIST_FOREACH(port, p, s->ports) + if (p->type == SOCKET_FIFO && +- streq_ptr(p->path, value+skip)) ++ path_equal_or_files_same(p->path, value+skip)) + break; + + if (p) { +@@ -2119,7 +2119,7 @@ static int socket_deserialize_item(Unit *u, const char *key, const char *value, + + LIST_FOREACH(port, p, s->ports) + if (p->type == SOCKET_SPECIAL && +- streq_ptr(p->path, value+skip)) ++ path_equal_or_files_same(p->path, value+skip)) + break; + + if (p) { +@@ -2138,7 +2138,7 @@ static int socket_deserialize_item(Unit *u, const char *key, const char *value, + + LIST_FOREACH(port, p, s->ports) + if (p->type == SOCKET_MQUEUE && +- streq_ptr(p->path, value+skip)) ++ streq(p->path, value+skip)) + break; + + if (p) { +diff --git a/src/shared/path-util.c b/src/shared/path-util.c +index b9db7f1..70bc1ca 100644 +--- a/src/shared/path-util.c ++++ b/src/shared/path-util.c +@@ -436,6 +436,10 @@ bool path_equal(const char *a, const char *b) { + } + } + ++bool path_equal_or_files_same(const char *a, const char *b) { ++ return path_equal(a, b) || files_same(a, b) > 0; ++} ++ + char* path_join(const char *root, const char *path, const char *rest) { + assert(path); + +diff --git a/src/shared/path-util.h b/src/shared/path-util.h +index bd0d324..bcf116e 100644 +--- a/src/shared/path-util.h ++++ b/src/shared/path-util.h +@@ -45,6 +45,7 @@ int path_make_relative(const char *from_dir, const char *to_path, char **_r); + char* path_kill_slashes(char *path); + char* path_startswith(const char *path, const char *prefix) _pure_; + bool path_equal(const char *a, const char *b) _pure_; ++bool path_equal_or_files_same(const char *a, const char *b); + char* path_join(const char *root, const char *path, const char *rest); + + char** path_strv_make_absolute_cwd(char **l); +diff --git a/src/shared/socket-util.c b/src/shared/socket-util.c +index c6f6487..c278d6f 100644 +--- a/src/shared/socket-util.c ++++ b/src/shared/socket-util.c +@@ -325,9 +325,6 @@ bool socket_address_equal(const SocketAddress *a, const SocketAddress *b) { + if (a->type != b->type) + return false; + +- if (a->size != b->size) +- return false; +- + if (socket_address_family(a) != socket_address_family(b)) + return false; + +@@ -352,14 +349,16 @@ bool socket_address_equal(const SocketAddress *a, const SocketAddress *b) { + break; + + case AF_UNIX: +- + if ((a->sockaddr.un.sun_path[0] == 0) != (b->sockaddr.un.sun_path[0] == 0)) + return false; + + if (a->sockaddr.un.sun_path[0]) { +- if (!strneq(a->sockaddr.un.sun_path, b->sockaddr.un.sun_path, sizeof(a->sockaddr.un.sun_path))) ++ if (!path_equal_or_files_same(a->sockaddr.un.sun_path, b->sockaddr.un.sun_path)) + return false; + } else { ++ if (a->size != b->size) ++ return false; ++ + if (memcmp(a->sockaddr.un.sun_path, b->sockaddr.un.sun_path, a->size) != 0) + return false; + } +@@ -367,7 +366,6 @@ bool socket_address_equal(const SocketAddress *a, const SocketAddress *b) { + break; + + case AF_NETLINK: +- + if (a->protocol != b->protocol) + return false; + diff --git a/SOURCES/0047-docs-remove-unneeded-the-s-in-gudev-docs.patch b/SOURCES/0047-docs-remove-unneeded-the-s-in-gudev-docs.patch deleted file mode 100644 index f811a9b..0000000 --- a/SOURCES/0047-docs-remove-unneeded-the-s-in-gudev-docs.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 9d175ba1edccb9e7e1d9d2994c3c074f43ea2539 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Sat, 30 Nov 2013 20:27:54 -0500 -Subject: [PATCH] docs: remove unneeded the's in gudev docs - -https://bugs.freedesktop.org/show_bug.cgi?id=72164 ---- - src/libudev/libudev-device.c | 10 ++++------ - 1 file changed, 4 insertions(+), 6 deletions(-) - -diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c -index a644904..161181a 100644 ---- a/src/libudev/libudev-device.c -+++ b/src/libudev/libudev-device.c -@@ -980,9 +980,8 @@ static struct udev_device *device_new_from_parent(struct udev_device *udev_devic - * Find the next parent device, and fill in information from the sys - * device and the udev database entry. - * -- * The returned the device is not referenced. It is attached to the -- * child device, and will be cleaned up when the child device -- * is cleaned up. -+ * Returned device is not referenced. It is attached to the child -+ * device, and will be cleaned up when the child device is cleaned up. - * - * It is not necessarily just the upper level directory, empty or not - * recognized sys directories are ignored. -@@ -1016,9 +1015,8 @@ _public_ struct udev_device *udev_device_get_parent(struct udev_device *udev_dev - * If devtype is #NULL, only subsystem is checked, and any devtype will - * match. - * -- * The returned the device is not referenced. It is attached to the -- * child device, and will be cleaned up when the child device -- * is cleaned up. -+ * Returned device is not referenced. It is attached to the child -+ * device, and will be cleaned up when the child device is cleaned up. - * - * It can be called as many times as needed, without caring about - * references. diff --git a/SOURCES/0047-shared-use-SocketAddress-in-socket_address_matches_f.patch b/SOURCES/0047-shared-use-SocketAddress-in-socket_address_matches_f.patch new file mode 100644 index 0000000..e176028 --- /dev/null +++ b/SOURCES/0047-shared-use-SocketAddress-in-socket_address_matches_f.patch @@ -0,0 +1,83 @@ +From 73cbcbaf7e04d42816ada8ee44b5fbc6b7f0bdb4 Mon Sep 17 00:00:00 2001 +From: Michal Schmidt +Date: Fri, 20 Feb 2015 02:04:05 +0100 +Subject: [PATCH] shared: use SocketAddress in socket_address_matches_fd() + +Cleanup. No behavior change. + +(cherry picked from commit dbafedacba3ee77098e932222ae7840e7b4040fc) +--- + src/shared/socket-util.c | 36 ++++++++++++++++++------------------ + 1 file changed, 18 insertions(+), 18 deletions(-) + +diff --git a/src/shared/socket-util.c b/src/shared/socket-util.c +index c278d6f..c31f60e 100644 +--- a/src/shared/socket-util.c ++++ b/src/shared/socket-util.c +@@ -435,48 +435,48 @@ bool socket_ipv6_is_supported(void) { + } + + bool socket_address_matches_fd(const SocketAddress *a, int fd) { +- union sockaddr_union sa; +- socklen_t salen = sizeof(sa), solen; +- int protocol, type; ++ SocketAddress b; ++ socklen_t solen; + + assert(a); + assert(fd >= 0); + +- if (getsockname(fd, &sa.sa, &salen) < 0) ++ b.size = sizeof(b.sockaddr); ++ if (getsockname(fd, &b.sockaddr.sa, &b.size) < 0) + return false; + +- if (sa.sa.sa_family != a->sockaddr.sa.sa_family) ++ if (b.sockaddr.sa.sa_family != a->sockaddr.sa.sa_family) + return false; + +- solen = sizeof(type); +- if (getsockopt(fd, SOL_SOCKET, SO_TYPE, &type, &solen) < 0) ++ solen = sizeof(b.type); ++ if (getsockopt(fd, SOL_SOCKET, SO_TYPE, &b.type, &solen) < 0) + return false; + +- if (type != a->type) ++ if (b.type != a->type) + return false; + + if (a->protocol != 0) { +- solen = sizeof(protocol); +- if (getsockopt(fd, SOL_SOCKET, SO_PROTOCOL, &protocol, &solen) < 0) ++ solen = sizeof(b.protocol); ++ if (getsockopt(fd, SOL_SOCKET, SO_PROTOCOL, &b.protocol, &solen) < 0) + return false; + +- if (protocol != a->protocol) ++ if (b.protocol != a->protocol) + return false; + } + +- switch (sa.sa.sa_family) { ++ switch (b.sockaddr.sa.sa_family) { + + case AF_INET: +- return sa.in.sin_port == a->sockaddr.in.sin_port && +- sa.in.sin_addr.s_addr == a->sockaddr.in.sin_addr.s_addr; ++ return b.sockaddr.in.sin_port == a->sockaddr.in.sin_port && ++ b.sockaddr.in.sin_addr.s_addr == a->sockaddr.in.sin_addr.s_addr; + + case AF_INET6: +- return sa.in6.sin6_port == a->sockaddr.in6.sin6_port && +- memcmp(&sa.in6.sin6_addr, &a->sockaddr.in6.sin6_addr, sizeof(struct in6_addr)) == 0; ++ return b.sockaddr.in6.sin6_port == a->sockaddr.in6.sin6_port && ++ memcmp(&b.sockaddr.in6.sin6_addr, &a->sockaddr.in6.sin6_addr, sizeof(struct in6_addr)) == 0; + + case AF_UNIX: +- return salen == a->size && +- memcmp(sa.un.sun_path, a->sockaddr.un.sun_path, salen - offsetof(struct sockaddr_un, sun_path)) == 0; ++ return b.sockaddr.size == a->size && ++ memcmp(b.sockaddr.un.sun_path, a->sockaddr.un.sun_path, b.size - offsetof(struct sockaddr_un, sun_path)) == 0; + + } + diff --git a/SOURCES/0048-man-explicitly-say-when-multiple-units-can-be-specif.patch b/SOURCES/0048-man-explicitly-say-when-multiple-units-can-be-specif.patch deleted file mode 100644 index 3d29fe8..0000000 --- a/SOURCES/0048-man-explicitly-say-when-multiple-units-can-be-specif.patch +++ /dev/null @@ -1,235 +0,0 @@ -From 521519ead8bb49d2c94aed90982ffcd6d5e34e92 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Sat, 30 Nov 2013 21:23:01 -0500 -Subject: [PATCH] man: explicitly say when multiple units can be specified - -itistoday> how do you specify multiple dependencies in a unit file? i've been - googling and can't find this basic thing :-\ -itistoday> do you use a comma, or use multiple After= statements? ---- - man/systemd.unit.xml | 128 ++++++++++++++++++++++++++++----------------------- - 1 file changed, 70 insertions(+), 58 deletions(-) - -diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml -index 5c8b8e8..029392c 100644 ---- a/man/systemd.unit.xml -+++ b/man/systemd.unit.xml -@@ -410,10 +410,12 @@ - of the other units gets deactivated or - its activation fails, this unit will - be deactivated. This option may be -- specified more than once, in which -- case requirement dependencies for all -- listed names are created. Note that -- requirement dependencies do not -+ specified more than once or multiple -+ space-separated units may be specified -+ in one option in which case -+ requirement dependencies for all -+ listed names will be created. Note -+ that requirement dependencies do not - influence the order in which services - are started or stopped. This has to be - configured independently with the -@@ -476,22 +478,23 @@ - RequisiteOverridable= - - Similar to -- Requires= -- and RequiresOverridable=, respectively. However, -- if a unit listed here is not started -- already it will not be started and the -- transaction fails -- immediately. -+ Requires= and -+ RequiresOverridable=, -+ respectively. However, if the units -+ listed here are not started already -+ they will not be started and the -+ transaction will fail immediately. -+ - - - - Wants= - - A weaker version of -- Requires=. A unit -+ Requires=. Units - listed in this option will be started - if the configuring unit is. However, -- if the listed unit fails to start up -+ if the listed units fail to start - or cannot be added to the transaction - this has no impact on the validity of - the transaction as a whole. This is -@@ -501,8 +504,8 @@ - - Note that dependencies of this - type may also be configured outside of -- the unit configuration file by -- adding a symlink to a -+ the unit configuration file by adding -+ symlinks to a - .wants/ directory - accompanying the unit file. For - details see above. -@@ -534,7 +537,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. - -@@ -543,12 +546,12 @@ - - Conflicts= - -- Configures negative -+ A space-separated list -+ of unit names. Configures negative - requirement dependencies. If a unit -- has a -- Conflicts= setting -- on another unit, starting the former -- will stop the latter and vice -+ has a Conflicts= -+ setting on another unit, starting the -+ former will stop the latter and vice - versa. Note that this setting is - independent of and orthogonal to the - After= and -@@ -575,7 +578,8 @@ - Before= - After= - -- Configures ordering -+ A space-separated list -+ of unit names. Configures ordering - dependencies between units. If a unit - foo.service - contains a setting -@@ -624,18 +628,18 @@ - type After= or - Before=. If two - units have no ordering dependencies -- between them, they are shut down -- or started up simultaneously, and -- no ordering takes -+ between them, they are shut down or -+ started up simultaneously, and no -+ ordering takes - place. - - - - OnFailure= - -- Lists one or more -- units that are activated when this -- unit enters the -+ A space-separated list -+ of one or more units that are -+ activated when this unit enters the - failed - state. - -@@ -644,16 +648,17 @@ - PropagatesReloadTo= - ReloadPropagatedFrom= - -- Lists one or more -- units where reload requests on the -- unit will be propagated to/on the -- other unit will be propagated -- from. Issuing a reload request on a -- unit will automatically also enqueue a -- reload request on all units that the -- reload request shall be propagated to -- via these two -- settings. -+ A space-separated list -+ of one or more units where reload -+ requests on this unit will be -+ propagated to, or reload requests on -+ the other unit will be propagated to -+ this unit, respectively. Issuing a -+ reload request on a unit will -+ automatically also enqueue a reload -+ request on all units that the reload -+ request shall be propagated to via -+ these two settings. - - - -@@ -1089,32 +1094,34 @@ - - Alias= - -- Additional names this -- unit shall be installed under. The -- names listed here must have the same -- suffix (i.e. type) as the unit file -- name. This option may be specified -- more than once, in which case all -- listed names are used. At installation -- time, -- systemctl enable -- will create symlinks from these names -- to the unit filename. -+ A space-seperated list -+ of additional names this unit shall be -+ installed under. The names listed here -+ must have the same suffix (i.e. type) -+ as the unit file name. This option may -+ be specified more than once, in which -+ case all listed names are used. At -+ installation time, systemctl -+ enable will create symlinks -+ from these names to the unit -+ filename. - - - - WantedBy= - RequiredBy= - -- A symbolic link is -- created in the -- .wants/ or -- .requires/ directory -- of the listed unit when this unit is -- activated by systemctl -- enable. This has the effect -- that a dependency of type -- Wants= or -+ This option may be -+ used more than once, or a -+ space-separated list of unit names may -+ be given. A symbolic link is created -+ in the .wants/ or -+ .requires/ -+ directory of each of the listed units -+ when this unit is installed by -+ systemctl enable. -+ This has the effect that a dependency -+ of type Wants= or - Requires= is added - from the listed unit to the current - unit. The primary result is that the -@@ -1160,7 +1167,12 @@ - and systemctl - disable will automatically - install/uninstall units listed in this option as -- well. -+ well. -+ -+ This option may be used more -+ than once, or a space-separated list -+ of unit names may be -+ given. - - - diff --git a/SOURCES/0048-shared-avoid-semi-duplicating-socket_address_equal.patch b/SOURCES/0048-shared-avoid-semi-duplicating-socket_address_equal.patch new file mode 100644 index 0000000..ae3495b --- /dev/null +++ b/SOURCES/0048-shared-avoid-semi-duplicating-socket_address_equal.patch @@ -0,0 +1,42 @@ +From ea81ddfdc0eadfb62e28ed998d33c5e1d3b3abab Mon Sep 17 00:00:00 2001 +From: Michal Schmidt +Date: Fri, 20 Feb 2015 02:13:03 +0100 +Subject: [PATCH] shared: avoid semi-duplicating socket_address_equal() + +Just call socket_address_equal() from socket_address_matches_fd() +instead of implementing similar comparing of addresses. + +(cherry picked from commit 02233928a502e46fc125118dba7234ba3e48dc15) +--- + src/shared/socket-util.c | 18 +----------------- + 1 file changed, 1 insertion(+), 17 deletions(-) + +diff --git a/src/shared/socket-util.c b/src/shared/socket-util.c +index c31f60e..deecce8 100644 +--- a/src/shared/socket-util.c ++++ b/src/shared/socket-util.c +@@ -464,23 +464,7 @@ bool socket_address_matches_fd(const SocketAddress *a, int fd) { + return false; + } + +- switch (b.sockaddr.sa.sa_family) { +- +- case AF_INET: +- return b.sockaddr.in.sin_port == a->sockaddr.in.sin_port && +- b.sockaddr.in.sin_addr.s_addr == a->sockaddr.in.sin_addr.s_addr; +- +- case AF_INET6: +- return b.sockaddr.in6.sin6_port == a->sockaddr.in6.sin6_port && +- memcmp(&b.sockaddr.in6.sin6_addr, &a->sockaddr.in6.sin6_addr, sizeof(struct in6_addr)) == 0; +- +- case AF_UNIX: +- return b.sockaddr.size == a->size && +- memcmp(b.sockaddr.un.sun_path, a->sockaddr.un.sun_path, b.size - offsetof(struct sockaddr_un, sun_path)) == 0; +- +- } +- +- return false; ++ return socket_address_equal(a, &b); + } + + int sockaddr_pretty(const struct sockaddr *_sa, socklen_t salen, bool translate_ipv6, char **ret) { diff --git a/SOURCES/0049-shared-handle-unnamed-sockets-in-socket_address_equa.patch b/SOURCES/0049-shared-handle-unnamed-sockets-in-socket_address_equa.patch new file mode 100644 index 0000000..24ca761 --- /dev/null +++ b/SOURCES/0049-shared-handle-unnamed-sockets-in-socket_address_equa.patch @@ -0,0 +1,29 @@ +From 394185c013c15e47ffa1bdc5948ac6010c329728 Mon Sep 17 00:00:00 2001 +From: Michal Schmidt +Date: Fri, 20 Feb 2015 02:25:16 +0100 +Subject: [PATCH] shared: handle unnamed sockets in socket_address_equal() + +Make sure we don't inspect sun_path of unnamed sockets. +Since we cannot know if two unnamed sockets' adresses refer to the same +socket, just return false. + +(cherry picked from commit 710708a54ccc48e168ad7d4cd401645ef9e2eb14) +--- + src/shared/socket-util.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/shared/socket-util.c b/src/shared/socket-util.c +index deecce8..a4e26b1 100644 +--- a/src/shared/socket-util.c ++++ b/src/shared/socket-util.c +@@ -349,6 +349,10 @@ bool socket_address_equal(const SocketAddress *a, const SocketAddress *b) { + break; + + case AF_UNIX: ++ if (a->size <= offsetof(struct sockaddr_un, sun_path) || ++ b->size <= offsetof(struct sockaddr_un, sun_path)) ++ return false; ++ + if ((a->sockaddr.un.sun_path[0] == 0) != (b->sockaddr.un.sun_path[0] == 0)) + return false; + diff --git a/SOURCES/0049-util-fix-handling-of-trailing-whitespace-in-split_qu.patch b/SOURCES/0049-util-fix-handling-of-trailing-whitespace-in-split_qu.patch deleted file mode 100644 index e7fc500..0000000 --- a/SOURCES/0049-util-fix-handling-of-trailing-whitespace-in-split_qu.patch +++ /dev/null @@ -1,122 +0,0 @@ -From 996e958ecde418244f6aca999b5b1edaeeeb009b Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 27 Nov 2013 22:37:52 +0100 -Subject: [PATCH] util: fix handling of trailing whitespace in split_quoted() - -Inspired by a patch by Lukas Nykryn. - -Conflicts: - src/test/test-strv.c ---- - src/shared/util.c | 24 +++++++++++++++--------- - src/test/test-strv.c | 26 ++++++++++++++++++++++++++ - 2 files changed, 41 insertions(+), 9 deletions(-) - -diff --git a/src/shared/util.c b/src/shared/util.c -index f602625..b1a4006 100644 ---- a/src/shared/util.c -+++ b/src/shared/util.c -@@ -370,17 +370,21 @@ char *split(const char *c, size_t *l, const char *separator, char **state) { - /* Split a string into words, but consider strings enclosed in '' and - * "" as words even if they include spaces. */ - char *split_quoted(const char *c, size_t *l, char **state) { -- char *current, *e; -+ const char *current, *e; - bool escaped = false; - -- current = *state ? *state : (char*) c; -+ assert(c); -+ assert(l); -+ assert(state); - -- if (!*current || *c == 0) -- return NULL; -+ current = *state ? *state : c; - - current += strspn(current, WHITESPACE); - -- if (*current == '\'') { -+ if (*current == 0) -+ return NULL; -+ -+ else if (*current == '\'') { - current ++; - - for (e = current; *e; e++) { -@@ -393,7 +397,8 @@ char *split_quoted(const char *c, size_t *l, char **state) { - } - - *l = e-current; -- *state = *e == 0 ? e : e+1; -+ *state = (char*) (*e == 0 ? e : e+1); -+ - } else if (*current == '\"') { - current ++; - -@@ -407,7 +412,8 @@ char *split_quoted(const char *c, size_t *l, char **state) { - } - - *l = e-current; -- *state = *e == 0 ? e : e+1; -+ *state = (char*) (*e == 0 ? e : e+1); -+ - } else { - for (e = current; *e; e++) { - if (escaped) -@@ -418,10 +424,10 @@ char *split_quoted(const char *c, size_t *l, char **state) { - break; - } - *l = e-current; -- *state = e; -+ *state = (char*) e; - } - -- return (char*) current; -+ return current; - } - - int get_parent_of_pid(pid_t pid, pid_t *_ppid) { -diff --git a/src/test/test-strv.c b/src/test/test-strv.c -index c3d536d..ed26ad1 100644 ---- a/src/test/test-strv.c -+++ b/src/test/test-strv.c -@@ -156,6 +156,20 @@ static void test_strv_quote_unquote(const char* const *split, const char *quoted - } - } - -+static void test_strv_quote_unquote2(const char *quoted, const char ** list) { -+ _cleanup_strv_free_ char **s; -+ unsigned i = 0; -+ char **t; -+ -+ s = strv_split_quoted(quoted); -+ assert_se(s); -+ -+ STRV_FOREACH(t, s) -+ assert_se(streq(list[i++], *t)); -+ -+ assert_se(list[i] == NULL); -+} -+ - static void test_strv_split_nulstr(void) { - _cleanup_strv_free_ char **l = NULL; - const char nulstr[] = "str0\0str1\0str2\0str3\0"; -@@ -309,6 +323,18 @@ int main(int argc, char *argv[]) { - test_strv_quote_unquote(input_table_quotes, QUOTES_STRING); - test_strv_quote_unquote(input_table_spaces, SPACES_STRING); - -+ test_strv_quote_unquote2(" foo=bar \"waldo\" zzz ", (const char*[]) { "foo=bar", "waldo", "zzz", NULL }); -+ test_strv_quote_unquote2("", (const char*[]) { NULL }); -+ test_strv_quote_unquote2(" ", (const char*[]) { NULL }); -+ test_strv_quote_unquote2(" ", (const char*[]) { NULL }); -+ test_strv_quote_unquote2(" x", (const char*[]) { "x", NULL }); -+ test_strv_quote_unquote2("x ", (const char*[]) { "x", NULL }); -+ test_strv_quote_unquote2(" x ", (const char*[]) { "x", NULL }); -+ test_strv_quote_unquote2(" \"x\" ", (const char*[]) { "x", NULL }); -+ test_strv_quote_unquote2(" \'x\' ", (const char*[]) { "x", NULL }); -+ test_strv_quote_unquote2(" \'x\"\' ", (const char*[]) { "x\"", NULL }); -+ test_strv_quote_unquote2(" \"x\'\" ", (const char*[]) { "x\'", NULL }); -+ - test_strv_split_nulstr(); - test_strv_parse_nulstr(); - test_strv_overlap(); diff --git a/SOURCES/0050-man-Improve-the-description-of-parameter-X-in-tmpfil.patch b/SOURCES/0050-man-Improve-the-description-of-parameter-X-in-tmpfil.patch deleted file mode 100644 index c6d99c6..0000000 --- a/SOURCES/0050-man-Improve-the-description-of-parameter-X-in-tmpfil.patch +++ /dev/null @@ -1,42 +0,0 @@ -From fb8be2cd82a3e00fdbe506e163fdf599e0bd5bd2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=A1clav=20Pavl=C3=ADn?= -Date: Thu, 3 Oct 2013 15:47:26 +0200 -Subject: [PATCH] man: Improve the description of parameter X in tmpfiles.d - page - ---- - man/tmpfiles.d.xml | 21 ++++++++++++--------- - 1 file changed, 12 insertions(+), 9 deletions(-) - -diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml -index 9fc4b7c..e8b630d 100644 ---- a/man/tmpfiles.d.xml -+++ b/man/tmpfiles.d.xml -@@ -184,15 +184,18 @@ L /tmp/foobar - - - - /dev/null - - X - Ignore a path -- during cleanup. Use this type -- to prevent path removal as -- controlled with the Age parameter. -- Note that if path is a directory, -- content of a directory is not -- excluded from clean-up, only -- directory itself. Lines of this -- type accept shell-style globs -- in place of normal path -+ during cleaning. Use this type -+ to exclude paths from clean-up -+ as controlled with the Age -+ parameter. Unlike x this -+ parameter will not exclude the -+ content if path is a directory, -+ but only directory itself. -+ Note that lines of this type do -+ not influence the effect of r -+ or R lines. Lines of this type -+ accept shell-style globs in -+ place of normal path - names. - - diff --git a/SOURCES/0050-man-make-bootup-graph-consistent.patch b/SOURCES/0050-man-make-bootup-graph-consistent.patch new file mode 100644 index 0000000..619887d --- /dev/null +++ b/SOURCES/0050-man-make-bootup-graph-consistent.patch @@ -0,0 +1,23 @@ +From d65ce525915a604d31cda80b5d7a8d639fb5cbb9 Mon Sep 17 00:00:00 2001 +From: Chris Morin +Date: Wed, 4 Feb 2015 14:54:34 -0500 +Subject: [PATCH] man: make bootup graph consistent + +(cherry picked from commit b44787bd437f4051660272b37bd6f75392f17931) +--- + man/bootup.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/bootup.xml b/man/bootup.xml +index d97d550..b92057a 100644 +--- a/man/bootup.xml ++++ b/man/bootup.xml +@@ -134,7 +134,7 @@ + v v | v rescue.target + timers.target paths.target | sockets.target + | | | | +- v |_________________ | ___________________/ ++ v \_________________ | ___________________/ + \|/ + v + basic.target diff --git a/SOURCES/0051-coredumpctl-in-case-of-error-free-pattern-after-prin.patch b/SOURCES/0051-coredumpctl-in-case-of-error-free-pattern-after-prin.patch deleted file mode 100644 index ec5fa69..0000000 --- a/SOURCES/0051-coredumpctl-in-case-of-error-free-pattern-after-prin.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 70a0ba4546c69646ef7b220fb5e753416443d5b2 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Tue, 14 Jan 2014 15:40:16 +0100 -Subject: [PATCH] coredumpctl: in case of error free pattern after print - ---- - src/journal/coredumpctl.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/journal/coredumpctl.c b/src/journal/coredumpctl.c -index 75c96cc..356d03d 100644 ---- a/src/journal/coredumpctl.c -+++ b/src/journal/coredumpctl.c -@@ -126,10 +126,11 @@ static int add_match(Set *set, const char *match) { - goto fail; - - log_debug("Adding pattern: %s", pattern); -- r = set_consume(set, pattern); -+ r = set_put(set, pattern); - if (r < 0) { - log_error("Failed to add pattern '%s': %s", - pattern, strerror(-r)); -+ free(pattern); - goto fail; - } - diff --git a/SOURCES/0051-nspawn-fix-whitespace-and-typo-in-partition-table-bl.patch b/SOURCES/0051-nspawn-fix-whitespace-and-typo-in-partition-table-bl.patch new file mode 100644 index 0000000..4f45b9e --- /dev/null +++ b/SOURCES/0051-nspawn-fix-whitespace-and-typo-in-partition-table-bl.patch @@ -0,0 +1,23 @@ +From 3af8c723aebecb5d220fdb5b1fb80a097c366db1 Mon Sep 17 00:00:00 2001 +From: Jan Synacek +Date: Mon, 23 Feb 2015 15:22:40 +0100 +Subject: [PATCH] nspawn: fix whitespace and typo in partition table blurb + +(cherry picked from commit 4aab5d0cbd979b2cccb88534f118bceaa86466d8) +--- + src/nspawn/nspawn.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c +index fb67251..7724df9 100644 +--- a/src/nspawn/nspawn.c ++++ b/src/nspawn/nspawn.c +@@ -2676,7 +2676,7 @@ static int setup_image(char **device_path, int *loop_nr) { + + #define PARTITION_TABLE_BLURB \ + "Note that the disk image needs to either contain only a single MBR partition of\n" \ +- "type 0x83 that is marked bootable, or a sinlge GPT partition of type" \ ++ "type 0x83 that is marked bootable, or a single GPT partition of type " \ + "0FC63DAF-8483-4772-8E79-3D69D8477DE4 or follow\n" \ + " http://www.freedesktop.org/wiki/Specifications/DiscoverablePartitionsSpec/\n" \ + "to be bootable with systemd-nspawn." diff --git a/SOURCES/0052-man-explain-time-units-in-tmpfiles.patch b/SOURCES/0052-man-explain-time-units-in-tmpfiles.patch new file mode 100644 index 0000000..67e2eb8 --- /dev/null +++ b/SOURCES/0052-man-explain-time-units-in-tmpfiles.patch @@ -0,0 +1,53 @@ +From 6995221c988db99faa5de5ed948466e1982d9d9d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 23 Feb 2015 18:59:17 -0500 +Subject: [PATCH] man: explain time units in tmpfiles + +https://bugzilla.redhat.com/show_bug.cgi?id=1195294 +(cherry picked from commit 00c53f4283ca41878a84b370840a84760b00d46e) +--- + man/tmpfiles.d.xml | 29 ++++++++++++++--------------- + 1 file changed, 14 insertions(+), 15 deletions(-) + +diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml +index 8815bf9..4bd0fcf 100644 +--- a/man/tmpfiles.d.xml ++++ b/man/tmpfiles.d.xml +@@ -443,23 +443,22 @@ + delete when cleaning. If a file or directory is older than the + current time minus the age field, it is deleted. The field + format is a series of integers each followed by one of the +- following postfixes for the respective time units: +- +- +- +- s +- min +- h +- d +- w +- ms +- m +- us +- ++ following postfixes for the respective time units: ++ s, ++ m or min, ++ h, ++ d, ++ w, ++ ms, ++ us, ++ respectively meaning seconds, minutes, hours, days, weeks, ++ milliseconds, and microseconds. Full names of the time units can ++ be used too. ++ + + If multiple integers and units are specified, the time +- values are summed up. If an integer is given without a unit, +- s is assumed. ++ values are summed. If an integer is given without a unit, ++ s is assumed. + + + When the age is set to zero, the files are cleaned diff --git a/SOURCES/0052-udev-net_id-Introduce-predictable-network-names-for-.patch b/SOURCES/0052-udev-net_id-Introduce-predictable-network-names-for-.patch deleted file mode 100644 index 463d571..0000000 --- a/SOURCES/0052-udev-net_id-Introduce-predictable-network-names-for-.patch +++ /dev/null @@ -1,142 +0,0 @@ -From 08f8572347ca597147ab761d425e4480885e1995 Mon Sep 17 00:00:00 2001 -From: Hendrik Brueckner -Date: Thu, 9 Jan 2014 11:28:12 +0100 -Subject: [PATCH] udev/net_id: Introduce predictable network names for Linux on - System z - -Use the bus-ID to create predicatable devices names for network interfaces -on Linux on System z instances. The bus-ID identifies a device in the s390 -channel subsystem. - -Network interfaces of device type Ethernet are named as: - enccw0.0.1234 (13 characters) -up to - enccwff.7.ffff (14 characters) - -CTC network devices of device type SLIP, use a different prefix as follows: - slccw0.0.1234 (13 characters) - -See also Red Hat Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=870859 -[tomegun: typical problem of netdevs switching names between reboots.] - -Conflicts: - src/udev/udev-builtin-net_id.c ---- - src/udev/udev-builtin-net_id.c | 64 ++++++++++++++++++++++++++++++++++++++++-- - 1 file changed, 62 insertions(+), 2 deletions(-) - -diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c -index 9ae8f08..d9de46d 100644 ---- a/src/udev/udev-builtin-net_id.c -+++ b/src/udev/udev-builtin-net_id.c -@@ -28,6 +28,7 @@ - * - * Two character prefixes based on the type of interface: - * en -- ethernet -+ * sl -- serial line IP (slip) - * wl -- wlan - * ww -- wwan - * -@@ -101,6 +102,7 @@ enum netname_type{ - NET_PCI, - NET_USB, - NET_BCMA, -+ NET_CCWGROUP, - }; - - struct netnames { -@@ -118,6 +120,8 @@ struct netnames { - char usb_ports[IFNAMSIZ]; - - char bcma_core[IFNAMSIZ]; -+ -+ char ccw_core[IFNAMSIZ]; - }; - - /* retrieve on-board index number and label from firmware */ -@@ -351,6 +355,44 @@ static int names_bcma(struct udev_device *dev, struct netnames *names) { - return 0; - } - -+static int names_ccw(struct udev_device *dev, struct netnames *names) { -+ struct udev_device *cdev; -+ const char *bus_id; -+ size_t bus_id_len; -+ int rc; -+ -+ /* Retrieve the associated CCW device */ -+ cdev = udev_device_get_parent(dev); -+ if (!cdev) -+ return -ENOENT; -+ -+ /* Network devices are always grouped CCW devices */ -+ if (!streq_ptr("ccwgroup", udev_device_get_subsystem(cdev))) -+ return -ENOENT; -+ -+ /* Retrieve bus-ID of the grouped CCW device. The bus-ID uniquely -+ * identifies the network device on the Linux on System z channel -+ * subsystem. Note that the bus-ID contains lowercase characters. -+ */ -+ bus_id = udev_device_get_sysname(cdev); -+ if (!bus_id) -+ return -ENOENT; -+ -+ /* Check the length of the bus-ID. Rely on that the kernel provides -+ * a correct bus-ID; alternatively, improve this check and parse and -+ * verify each bus-ID part... -+ */ -+ bus_id_len = strlen(bus_id); -+ if (!bus_id_len || bus_id_len < 8 || bus_id_len > 9) -+ return -EINVAL; -+ -+ /* Store the CCW bus-ID for use as network device name */ -+ rc = snprintf(names->ccw_core, sizeof(names->ccw_core), "ccw%s", bus_id); -+ if (rc >= 0 && rc < (int)sizeof(names->ccw_core)) -+ names->type = NET_CCWGROUP; -+ return 0; -+} -+ - static int names_mac(struct udev_device *dev, struct netnames *names) { - const char *s; - unsigned int i; -@@ -409,13 +451,21 @@ static int builtin_net_id(struct udev_device *dev, int argc, char *argv[], bool - struct netnames names = {}; - int err; - -- /* handle only ARPHRD_ETHER devices */ -+ /* handle only ARPHRD_ETHER and ARPHRD_SLIP devices */ - s = udev_device_get_sysattr_value(dev, "type"); - if (!s) - return EXIT_FAILURE; - i = strtoul(s, NULL, 0); -- if (i != 1) -+ switch (i) { -+ case 1: /* ARPHRD_ETHER */ -+ prefix = "en"; -+ break; -+ case 256: /* ARPHRD_SLIP */ -+ prefix = "sl"; -+ break; -+ default: - return 0; -+ } - - /* skip stacked devices, like VLANs, ... */ - s = udev_device_get_sysattr_value(dev, "ifindex"); -@@ -447,6 +497,16 @@ static int builtin_net_id(struct udev_device *dev, int argc, char *argv[], bool - ieee_oui(dev, &names, test); - } - -+ /* get path names for Linux on System z network devices */ -+ err = names_ccw(dev, &names); -+ if (err >= 0 && names.type == NET_CCWGROUP) { -+ char str[IFNAMSIZ]; -+ -+ if (snprintf(str, sizeof(str), "%s%s", prefix, names.ccw_core) < (int)sizeof(str)) -+ udev_builtin_add_property(dev, test, "ID_NET_NAME_PATH", str); -+ goto out; -+ } -+ - /* get PCI based path names, we compose only PCI based paths */ - err = names_pci(dev, &names); - if (err < 0) diff --git a/SOURCES/0053-systemctl-check-validity-of-PID-we-received.patch b/SOURCES/0053-systemctl-check-validity-of-PID-we-received.patch new file mode 100644 index 0000000..24222fb --- /dev/null +++ b/SOURCES/0053-systemctl-check-validity-of-PID-we-received.patch @@ -0,0 +1,33 @@ +From 3b573e5c39f452f98084b3d36486369882455b72 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 7 Feb 2015 11:16:04 -0500 +Subject: [PATCH] systemctl: check validity of PID we received + +(cherry picked from commit d028e01814a405e83c400c60545785d35dba2a17) +--- + src/systemctl/systemctl.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c +index 6b93ec8..3da4d3d 100644 +--- a/src/systemctl/systemctl.c ++++ b/src/systemctl/systemctl.c +@@ -2881,6 +2881,9 @@ static int check_inhibitors(sd_bus *bus, enum action a) { + if (!sv) + return log_oom(); + ++ if ((pid_t) pid < 0) ++ return log_error_errno(ERANGE, "Bad PID %"PRIu32": %m", pid); ++ + if (!strv_contains(sv, + a == ACTION_HALT || + a == ACTION_POWEROFF || +@@ -2892,7 +2895,7 @@ static int check_inhibitors(sd_bus *bus, enum action a) { + user = uid_to_name(uid); + + log_warning("Operation inhibited by \"%s\" (PID "PID_FMT" \"%s\", user %s), reason is \"%s\".", +- who, pid, strna(comm), strna(user), why); ++ who, (pid_t) pid, strna(comm), strna(user), why); + + c++; + } diff --git a/SOURCES/0053-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch b/SOURCES/0053-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch deleted file mode 100644 index ecb2e74..0000000 --- a/SOURCES/0053-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 5d27397f97e26c9b1e9f01f041c2e68cbfb41eb3 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 239e56b..9a397af 100644 ---- a/src/tmpfiles/tmpfiles.c -+++ b/src/tmpfiles/tmpfiles.c -@@ -434,8 +434,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) { -@@ -456,8 +454,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/SOURCES/0054-delta-ensure-that-d_type-will-be-set-on-every-fs.patch b/SOURCES/0054-delta-ensure-that-d_type-will-be-set-on-every-fs.patch deleted file mode 100644 index ee073d0..0000000 --- a/SOURCES/0054-delta-ensure-that-d_type-will-be-set-on-every-fs.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 8d48fb915cbfa1b4ad594b597f2567d682bfc635 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 b3272d9..193642d 100644 ---- a/src/delta/delta.c -+++ b/src/delta/delta.c -@@ -291,6 +291,8 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch - if (!de) - break; - -+ 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/SOURCES/0054-systemctl-support-auditd.service-better.patch b/SOURCES/0054-systemctl-support-auditd.service-better.patch new file mode 100644 index 0000000..acac2ef --- /dev/null +++ b/SOURCES/0054-systemctl-support-auditd.service-better.patch @@ -0,0 +1,85 @@ +From 98d1fe84e1eac91563bff326539465cd34e971c0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 7 Feb 2015 11:35:37 -0500 +Subject: [PATCH] systemctl: support auditd.service better + +We would print the filename header before trying to open the file. But since +the header was printed to stdout, and the error to stderr, the error would appear +on the terminal before the header. It is cleaner to open the file first, then +and only then print the header. + +Also exit on first error. We shouldn't report success if we were unable to open +a file. + +(cherry picked from commit 8527b07be1c5211b50a1a6496585952857a25c73) +--- + src/systemctl/systemctl.c | 46 +++++++++++++++++++++++----------------------- + 1 file changed, 23 insertions(+), 23 deletions(-) + +diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c +index 3da4d3d..4ec0cff 100644 +--- a/src/systemctl/systemctl.c ++++ b/src/systemctl/systemctl.c +@@ -4555,6 +4555,23 @@ static int init_home_and_lookup_paths(char **user_home, char **user_runtime, Loo + return 0; + } + ++static int cat_file(const char *filename, bool newline) { ++ _cleanup_close_ int fd; ++ ++ fd = open(filename, O_RDONLY|O_CLOEXEC|O_NOCTTY); ++ if (fd < 0) ++ return -errno; ++ ++ printf("%s%s# %s%s\n", ++ newline ? "\n" : "", ++ ansi_highlight_blue(), ++ filename, ++ ansi_highlight_off()); ++ fflush(stdout); ++ ++ return copy_bytes(fd, STDOUT_FILENO, (off_t) -1, false); ++} ++ + static int cat(sd_bus *bus, char **args) { + _cleanup_free_ char *user_home = NULL; + _cleanup_free_ char *user_runtime = NULL; +@@ -4600,32 +4617,15 @@ static int cat(sd_bus *bus, char **args) { + puts(""); + + if (fragment_path) { +- printf("%s# %s%s\n", +- ansi_highlight_blue(), +- fragment_path, +- ansi_highlight_off()); +- fflush(stdout); +- +- r = copy_file_fd(fragment_path, STDOUT_FILENO, false); +- if (r < 0) { +- log_warning_errno(r, "Failed to cat %s: %m", fragment_path); +- continue; +- } ++ r = cat_file(fragment_path, false); ++ if (r < 0) ++ return log_warning_errno(r, "Failed to cat %s: %m", fragment_path); + } + + STRV_FOREACH(path, dropin_paths) { +- printf("%s%s# %s%s\n", +- isempty(fragment_path) && path == dropin_paths ? "" : "\n", +- ansi_highlight_blue(), +- *path, +- ansi_highlight_off()); +- fflush(stdout); +- +- r = copy_file_fd(*path, STDOUT_FILENO, false); +- if (r < 0) { +- log_warning_errno(r, "Failed to cat %s: %m", *path); +- continue; +- } ++ r = cat_file(*path, path == dropin_paths); ++ if (r < 0) ++ return log_warning_errno(r, "Failed to cat %s: %m", *path); + } + } + diff --git a/SOURCES/0055-shared-unit-name-fix-gcc5-warning.patch b/SOURCES/0055-shared-unit-name-fix-gcc5-warning.patch new file mode 100644 index 0000000..b29d183 --- /dev/null +++ b/SOURCES/0055-shared-unit-name-fix-gcc5-warning.patch @@ -0,0 +1,31 @@ +From 10cfa6f617fdc2b9d85823163b4445f5ae9058c5 Mon Sep 17 00:00:00 2001 +From: Daniel Mack +Date: Tue, 24 Feb 2015 16:18:43 +0100 +Subject: [PATCH] shared/unit-name: fix gcc5 warning + +Fix the following gcc5 warning: + + CC src/shared/libsystemd_shared_la-unit-name.lo +src/shared/unit-name.c: In function 'unit_name_is_valid': +src/shared/unit-name.c:102:34: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses] + if (!template_ok == TEMPLATE_VALID && at+1 == e) + ^ + +(cherry picked from commit f9bf3e260c480f7b660bec3f78a13f52a46ec34d) +--- + src/shared/unit-name.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/unit-name.c b/src/shared/unit-name.c +index 21b6691..f728af4 100644 +--- a/src/shared/unit-name.c ++++ b/src/shared/unit-name.c +@@ -100,7 +100,7 @@ bool unit_name_is_valid(const char *n, enum template_valid template_ok) { + if (at == n) + return false; + +- if (!template_ok == TEMPLATE_VALID && at+1 == e) ++ if (template_ok != TEMPLATE_VALID && at+1 == e) + return false; + } + diff --git a/SOURCES/0055-shell-completion-dump-has-moved-to-systemd-analyze.patch b/SOURCES/0055-shell-completion-dump-has-moved-to-systemd-analyze.patch deleted file mode 100644 index 041deda..0000000 --- a/SOURCES/0055-shell-completion-dump-has-moved-to-systemd-analyze.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 544af839ed7dd06d20fb4efd201dd93dc0e98a15 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Mon, 21 Oct 2013 18:53:57 -0400 -Subject: [PATCH] shell-completion: dump has moved to systemd-analyze - -Rename NO_OPTION to STANDALONE for consistency with other files. ---- - shell-completion/bash/systemctl | 2 +- - shell-completion/bash/systemd-analyze | 4 ++-- - shell-completion/zsh/_systemctl | 3 +-- - shell-completion/zsh/_systemd-analyze | 1 + - 4 files changed, 5 insertions(+), 5 deletions(-) - -diff --git a/shell-completion/bash/systemctl b/shell-completion/bash/systemctl -index e335ee8..eea4b6d 100644 ---- a/shell-completion/bash/systemctl -+++ b/shell-completion/bash/systemctl -@@ -137,7 +137,7 @@ _systemctl () { - [JOBS]='cancel' - [SNAPSHOTS]='delete' - [ENVS]='set-environment unset-environment' -- [STANDALONE]='daemon-reexec daemon-reload default dump -+ [STANDALONE]='daemon-reexec daemon-reload default - emergency exit halt hibernate hybrid-sleep kexec list-jobs - list-sockets list-units list-unit-files poweroff reboot rescue - show-environment suspend get-default' -diff --git a/shell-completion/bash/systemd-analyze b/shell-completion/bash/systemd-analyze -index 5bd6768..b65466b 100644 ---- a/shell-completion/bash/systemd-analyze -+++ b/shell-completion/bash/systemd-analyze -@@ -31,7 +31,7 @@ _systemd_analyze() { - local OPTS='--help --version --system --user --from-pattern --to-pattern --order --require' - - local -A VERBS=( -- [NO_OPTION]='time blame plot' -+ [STANDALONE]='time blame plot dump' - [CRITICAL_CHAIN]='critical-chain' - [DOT]='dot' - [LOG_LEVEL]='set-log-level' -@@ -55,7 +55,7 @@ _systemd_analyze() { - if [[ -z $verb ]]; then - comps=${VERBS[*]} - -- elif __contains_word "$verb" ${VERBS[NO_OPTION]}; then -+ elif __contains_word "$verb" ${VERBS[STANDALONE]}; then - if [[ $cur = -* ]]; then - comps='--help --version --system --user' - fi -diff --git a/shell-completion/zsh/_systemctl b/shell-completion/zsh/_systemctl -index 298e97e..3959cd5 100644 ---- a/shell-completion/zsh/_systemctl -+++ b/shell-completion/zsh/_systemctl -@@ -38,7 +38,6 @@ - "is-enabled:Check whether unit files are enabled" - "list-jobs:List jobs" - "cancel:Cancel all, one, or more jobs" -- "dump:Dump server status" - "snapshot:Create a snapshot" - "delete:Remove one or more snapshots" - "show-environment:Dump environment" -@@ -264,7 +263,7 @@ done - (( $+functions[_systemctl_link] )) || _systemctl_link() { _files } - - # no systemctl completion for: --# [STANDALONE]='daemon-reexec daemon-reload default dump -+# [STANDALONE]='daemon-reexec daemon-reload default - # emergency exit halt kexec list-jobs list-units - # list-unit-files poweroff reboot rescue show-environment' - # [NAME]='snapshot load' -diff --git a/shell-completion/zsh/_systemd-analyze b/shell-completion/zsh/_systemd-analyze -index 37c60f5..2eda5fe 100644 ---- a/shell-completion/zsh/_systemd-analyze -+++ b/shell-completion/zsh/_systemd-analyze -@@ -15,6 +15,7 @@ _systemd_analyze_command(){ - 'critical-chain:Print a tree of the time critical chain of units' - 'plot:Output SVG graphic showing service initialization' - 'dot:Dump dependency graph (in dot(1) format)' -+ 'dump:Dump server status' - 'set-log-level:Set systemd log threshold' - ) - diff --git a/SOURCES/0056-shell-completion-remove-load-from-systemctl.patch b/SOURCES/0056-shell-completion-remove-load-from-systemctl.patch deleted file mode 100644 index 7227e58..0000000 --- a/SOURCES/0056-shell-completion-remove-load-from-systemctl.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 9e658a10c1de26c8b4a18a7e55440bb8bd819f20 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Wed, 15 Jan 2014 15:31:07 +0100 -Subject: [PATCH] shell-completion: remove load from systemctl - -Conflicts: - shell-completion/bash/systemctl ---- - shell-completion/bash/systemctl | 2 +- - shell-completion/zsh/_systemctl | 3 +-- - 2 files changed, 2 insertions(+), 3 deletions(-) - -diff --git a/shell-completion/bash/systemctl b/shell-completion/bash/systemctl -index eea4b6d..84149e3 100644 ---- a/shell-completion/bash/systemctl -+++ b/shell-completion/bash/systemctl -@@ -141,7 +141,7 @@ _systemctl () { - emergency exit halt hibernate hybrid-sleep kexec list-jobs - list-sockets list-units list-unit-files poweroff reboot rescue - show-environment suspend get-default' -- [NAME]='snapshot load' -+ [NAME]='snapshot' - [FILE]='link' - [TARGETS]='set-default' - ) -diff --git a/shell-completion/zsh/_systemctl b/shell-completion/zsh/_systemctl -index 3959cd5..6d98cb6 100644 ---- a/shell-completion/zsh/_systemctl -+++ b/shell-completion/zsh/_systemctl -@@ -24,7 +24,6 @@ - "status:Show runtime status of one or more units" - "show:Show properties of one or more units/jobs or the manager" - "reset-failed:Reset failed state for all, one, or more units" -- "load:Load one or more units" - "list-unit-files:List installed unit files" - "enable:Enable one or more unit files" - "disable:Disable one or more unit files" -@@ -266,7 +265,7 @@ done - # [STANDALONE]='daemon-reexec daemon-reload default - # emergency exit halt kexec list-jobs list-units - # list-unit-files poweroff reboot rescue show-environment' --# [NAME]='snapshot load' -+# [NAME]='snapshot' - - _systemctl_caching_policy() - { diff --git a/SOURCES/0056-test-hashmap-fix-gcc5-warning.patch b/SOURCES/0056-test-hashmap-fix-gcc5-warning.patch new file mode 100644 index 0000000..f60caba --- /dev/null +++ b/SOURCES/0056-test-hashmap-fix-gcc5-warning.patch @@ -0,0 +1,32 @@ +From a4409b8ae6b80acffc9a4f89df2d06c498b8c8f9 Mon Sep 17 00:00:00 2001 +From: Daniel Mack +Date: Tue, 24 Feb 2015 16:24:14 +0100 +Subject: [PATCH] test-hashmap: fix gcc5 warning +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +gcc5 spits out a warning about test-hashmap.c: + + CC src/test/test-hashmap.o +src/test/test-hashmap.c: In function ‘test_string_compare_func’: +src/test/test-hashmap.c:76:79: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses] + +(cherry picked from commit 4b3eff61640672bf0b19cb8cdd88ce5e84dcda1c) +--- + src/test/test-hashmap.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/test/test-hashmap.c b/src/test/test-hashmap.c +index 6900da9..351563b 100644 +--- a/src/test/test-hashmap.c ++++ b/src/test/test-hashmap.c +@@ -75,7 +75,7 @@ static void test_trivial_compare_func(void) { + } + + static void test_string_compare_func(void) { +- assert_se(!string_compare_func("fred", "wilma") == 0); ++ assert_se(string_compare_func("fred", "wilma") != 0); + assert_se(string_compare_func("fred", "fred") == 0); + } + diff --git a/SOURCES/0057-Fix-SELinux-check-for-transient-units.-1008864.patch b/SOURCES/0057-Fix-SELinux-check-for-transient-units.-1008864.patch deleted file mode 100644 index e456505..0000000 --- a/SOURCES/0057-Fix-SELinux-check-for-transient-units.-1008864.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 96bb682b6fa33faaff5c3db7506e9864fe5c09dc Mon Sep 17 00:00:00 2001 -From: Dan Walsh -Date: Thu, 16 Jan 2014 12:59:10 +0100 -Subject: [PATCH] Fix SELinux check for transient units. (#1008864) - -SELinux does not have a path to check for a snapshot servic creation. -This ends up giving us a bogus check. - -On snapshot creation we should check if the remote process type, has the ability to start a service with the type that systemd is running with. ---- - src/core/dbus-manager.c | 6 +++--- - src/core/selinux-access.c | 9 +++++---- - src/core/selinux-access.h | 13 +++++++++++++ - 3 files changed, 21 insertions(+), 7 deletions(-) - -diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c -index 8f4d017..7be5d13 100644 ---- a/src/core/dbus-manager.c -+++ b/src/core/dbus-manager.c -@@ -1102,7 +1102,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, - dbus_bool_t cleanup; - Snapshot *s; - -- SELINUX_ACCESS_CHECK(connection, message, "start"); -+ SELINUX_RUNTIME_UNIT_ACCESS_CHECK(connection, message, "start"); - - if (!dbus_message_get_args( - message, -@@ -1155,7 +1155,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, - return bus_send_error_reply(connection, message, &error, -ENOENT); - } - -- SELINUX_UNIT_ACCESS_CHECK(u, connection, message, "stop"); -+ SELINUX_RUNTIME_UNIT_ACCESS_CHECK(connection, message, "stop"); - snapshot_remove(SNAPSHOT(u)); - - reply = dbus_message_new_method_return(message); -@@ -1765,7 +1765,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, - if (r < 0) - return bus_send_error_reply(connection, message, &error, r); - -- SELINUX_UNIT_ACCESS_CHECK(u, connection, message, "start"); -+ SELINUX_RUNTIME_UNIT_ACCESS_CHECK(connection, message, "start"); - - if (u->load_state != UNIT_NOT_FOUND || set_size(u->dependencies[UNIT_REFERENCED_BY]) > 0) { - dbus_set_error(&error, BUS_ERROR_UNIT_EXISTS, "Unit %s already exists.", name); -diff --git a/src/core/selinux-access.c b/src/core/selinux-access.c -index 0a3ee18..5d85b26 100644 ---- a/src/core/selinux-access.c -+++ b/src/core/selinux-access.c -@@ -374,8 +374,9 @@ int selinux_access_check( - goto finish; - } - -- if (path) { -- tclass = "service"; -+ -+ tclass = "service"; -+ if (path && !strneq(path,"system", strlen("system"))) { - /* get the file context of the unit file */ - r = getfilecon(path, &fcon); - if (r < 0) { -@@ -384,9 +385,9 @@ int selinux_access_check( - log_error("Failed to get security context on %s: %m",path); - goto finish; - } -- - } else { -- tclass = "system"; -+ if (path) -+ tclass = "system"; - r = getcon(&fcon); - if (r < 0) { - dbus_set_error(error, DBUS_ERROR_ACCESS_DENIED, "Failed to get current context."); -diff --git a/src/core/selinux-access.h b/src/core/selinux-access.h -index 2d7ac64..92acd69 100644 ---- a/src/core/selinux-access.h -+++ b/src/core/selinux-access.h -@@ -36,6 +36,18 @@ int selinux_access_check(DBusConnection *connection, DBusMessage *message, const - DBusConnection *_c = (connection); \ - DBusMessage *_m = (message); \ - dbus_error_init(&_error); \ -+ _r = selinux_access_check(_c, _m, "system", (permission), &_error); \ -+ if (_r < 0) \ -+ return bus_send_error_reply(_c, _m, &_error, _r); \ -+ } while (false) -+ -+#define SELINUX_RUNTIME_UNIT_ACCESS_CHECK(connection, message, permission) \ -+ do { \ -+ DBusError _error; \ -+ int _r; \ -+ DBusConnection *_c = (connection); \ -+ DBusMessage *_m = (message); \ -+ dbus_error_init(&_error); \ - _r = selinux_access_check(_c, _m, NULL, (permission), &_error); \ - if (_r < 0) \ - return bus_send_error_reply(_c, _m, &_error, _r); \ -@@ -57,6 +69,7 @@ int selinux_access_check(DBusConnection *connection, DBusMessage *message, const - #else - - #define SELINUX_ACCESS_CHECK(connection, message, permission) do { } while (false) -+#define SELINUX_RUNTIME_UNIT_ACCESS_CHECK(connection, message, permission) do { } while (false) - #define SELINUX_UNIT_ACCESS_CHECK(unit, connection, message, permission) do { } while (false) - - #endif diff --git a/SOURCES/0057-shared-fix-wrong-assertion-in-barrier_set_role.patch b/SOURCES/0057-shared-fix-wrong-assertion-in-barrier_set_role.patch new file mode 100644 index 0000000..227f539 --- /dev/null +++ b/SOURCES/0057-shared-fix-wrong-assertion-in-barrier_set_role.patch @@ -0,0 +1,29 @@ +From 5acd5e264d53cf293ac5d2e57371690120fb7119 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Cristian=20Rodr=C3=ADguez?= +Date: Fri, 20 Feb 2015 15:14:56 -0300 +Subject: [PATCH] shared: fix wrong assertion in barrier_set_role() + + assert(b->pipe[0] >= 0 && b->pipe[0] >= 0); + +Test the same condition twice, pretty sure we mean + + assert(b->pipe[0] >= 0 && b->pipe[1] >= 0); + +(cherry picked from commit 3f7f1fad7621f584d9ce024abb313ecbc9bd0e62) +--- + src/shared/barrier.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/barrier.c b/src/shared/barrier.c +index f65363a..b7dca75 100644 +--- a/src/shared/barrier.c ++++ b/src/shared/barrier.c +@@ -178,7 +178,7 @@ void barrier_set_role(Barrier *b, unsigned int role) { + assert(b); + assert(role == BARRIER_PARENT || role == BARRIER_CHILD); + /* make sure this is only called once */ +- assert(b->pipe[1] >= 0 && b->pipe[1] >= 0); ++ assert(b->pipe[0] >= 0 && b->pipe[1] >= 0); + + if (role == BARRIER_PARENT) + b->pipe[1] = safe_close(b->pipe[1]); diff --git a/SOURCES/0058-acpi-fptd-fix-memory-leak-in-acpi_get_boot_usec.patch b/SOURCES/0058-acpi-fptd-fix-memory-leak-in-acpi_get_boot_usec.patch deleted file mode 100644 index 2d0a17d..0000000 --- a/SOURCES/0058-acpi-fptd-fix-memory-leak-in-acpi_get_boot_usec.patch +++ /dev/null @@ -1,22 +0,0 @@ -From eaa9e2f4c332d7cf8ee4bc9e377edb2043031e85 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Wed, 2 Oct 2013 13:39:49 +0200 -Subject: [PATCH] acpi-fptd: fix memory leak in acpi_get_boot_usec - ---- - src/shared/acpi-fpdt.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/shared/acpi-fpdt.c b/src/shared/acpi-fpdt.c -index b094f34..a7c83ed 100644 ---- a/src/shared/acpi-fpdt.c -+++ b/src/shared/acpi-fpdt.c -@@ -81,7 +81,7 @@ struct acpi_fpdt_boot { - }; - - int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit) { -- char *buf; -+ _cleanup_free_ char *buf; - struct acpi_table_header *tbl; - size_t l; - struct acpi_fpdt_header *rec; diff --git a/SOURCES/0058-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/SOURCES/0058-hwdb-Update-database-of-Bluetooth-company-identifier.patch new file mode 100644 index 0000000..3868550 --- /dev/null +++ b/SOURCES/0058-hwdb-Update-database-of-Bluetooth-company-identifier.patch @@ -0,0 +1,60 @@ +From 7958951ba84f870c624b4d2ab452b12c844bde20 Mon Sep 17 00:00:00 2001 +From: Marcel Holtmann +Date: Wed, 25 Feb 2015 07:27:49 +0100 +Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers + +(cherry picked from commit 3cabeab1197d3e45f16f514f5a396e0fb311e867) +--- + hwdb/20-bluetooth-vendor-product.hwdb | 42 +++++++++++++++++++++++++++++++++++ + 1 file changed, 42 insertions(+) + +diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb +index fb789fd..4fd951a 100644 +--- a/hwdb/20-bluetooth-vendor-product.hwdb ++++ b/hwdb/20-bluetooth-vendor-product.hwdb +@@ -1430,3 +1430,45 @@ bluetooth:v01D9* + + bluetooth:v01DA* + ID_VENDOR_FROM_DATABASE=Logitech International SA ++ ++bluetooth:v01DB* ++ ID_VENDOR_FROM_DATABASE=Innblue Consulting ++ ++bluetooth:v01DC* ++ ID_VENDOR_FROM_DATABASE=iParking Ltd. ++ ++bluetooth:v01DD* ++ ID_VENDOR_FROM_DATABASE=Koninklijke Philips Electronics N.V. ++ ++bluetooth:v01DE* ++ ID_VENDOR_FROM_DATABASE=Minelab Electronics Pty Limited ++ ++bluetooth:v01DF* ++ ID_VENDOR_FROM_DATABASE=Bison Group Ltd. ++ ++bluetooth:v01E0* ++ ID_VENDOR_FROM_DATABASE=Widex A/S ++ ++bluetooth:v01E1* ++ ID_VENDOR_FROM_DATABASE=Jolla Ltd ++ ++bluetooth:v01E2* ++ ID_VENDOR_FROM_DATABASE=Lectronix, Inc. ++ ++bluetooth:v01E3* ++ ID_VENDOR_FROM_DATABASE=Caterpillar Inc ++ ++bluetooth:v01E4* ++ ID_VENDOR_FROM_DATABASE=Freedom Innovations ++ ++bluetooth:v01E5* ++ ID_VENDOR_FROM_DATABASE=Dynamic Devices Ltd ++ ++bluetooth:v01E6* ++ ID_VENDOR_FROM_DATABASE=Technology Solutions (UK) Ltd ++ ++bluetooth:v01E7* ++ ID_VENDOR_FROM_DATABASE=IPS Group Inc. ++ ++bluetooth:v01E8* ++ ID_VENDOR_FROM_DATABASE=STIR diff --git a/SOURCES/0059-acpi-make-sure-we-never-free-an-uninitialized-pointe.patch b/SOURCES/0059-acpi-make-sure-we-never-free-an-uninitialized-pointe.patch deleted file mode 100644 index ec6e9d9..0000000 --- a/SOURCES/0059-acpi-make-sure-we-never-free-an-uninitialized-pointe.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 9257a03a02a35f12e6d410dd16bf003c9bae742e Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 2 Oct 2013 14:03:56 +0200 -Subject: [PATCH] acpi: make sure we never free an uninitialized pointer - ---- - src/shared/acpi-fpdt.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/shared/acpi-fpdt.c b/src/shared/acpi-fpdt.c -index a7c83ed..af58c7c 100644 ---- a/src/shared/acpi-fpdt.c -+++ b/src/shared/acpi-fpdt.c -@@ -81,7 +81,7 @@ struct acpi_fpdt_boot { - }; - - int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit) { -- _cleanup_free_ char *buf; -+ _cleanup_free_ char *buf = NULL; - struct acpi_table_header *tbl; - size_t l; - struct acpi_fpdt_header *rec; diff --git a/SOURCES/0059-journal-make-skipping-of-exhausted-journal-files-eff.patch b/SOURCES/0059-journal-make-skipping-of-exhausted-journal-files-eff.patch new file mode 100644 index 0000000..160a925 --- /dev/null +++ b/SOURCES/0059-journal-make-skipping-of-exhausted-journal-files-eff.patch @@ -0,0 +1,114 @@ +From 0ad01db952718d3437fa8f077a065d17efe5279b Mon Sep 17 00:00:00 2001 +From: Michal Schmidt +Date: Tue, 24 Feb 2015 19:45:17 +0100 +Subject: [PATCH] journal: make skipping of exhausted journal files effective + again + +Commit 668c965af "journal: skipping of exhausted journal files is bad if +direction changed" fixed a correctness issue, but it also significantly +limited the cases where the optimization that skips exhausted journal +files could apply. +As a result, some journalctl queries are much slower in v219 than in v218. +(e.g. queries where a "--since" cutoff should have quickly eliminated +older journal files from consideration, but didn't.) + +If already in the initial iteration find_location_with_matches() finds +no entry, the journal file's location is not updated. This is fine, +except that: + - We must update at least f->last_direction. The optimization relies on + it. Let's separate that from journal_file_save_location() and update + it immediately after the direction checks. + - The optimization was conditional on "f->current_offset > 0", but it + would always be 0 in this scenario. This check is unnecessary for the + optimization. + +(cherry picked from commit 950c07d421c04e5aae99973479f4f13131fb45e1) +--- + src/journal/journal-file.c | 3 +-- + src/journal/journal-file.h | 2 +- + src/journal/sd-journal.c | 24 +++++++++++++++--------- + 3 files changed, 17 insertions(+), 12 deletions(-) + +diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c +index 0f28718..24c49b9 100644 +--- a/src/journal/journal-file.c ++++ b/src/journal/journal-file.c +@@ -2014,8 +2014,7 @@ void journal_file_reset_location(JournalFile *f) { + f->current_xor_hash = 0; + } + +-void journal_file_save_location(JournalFile *f, direction_t direction, Object *o, uint64_t offset) { +- f->last_direction = direction; ++void journal_file_save_location(JournalFile *f, Object *o, uint64_t offset) { + f->location_type = LOCATION_SEEK; + f->current_offset = offset; + f->current_seqnum = le64toh(o->entry.seqnum); +diff --git a/src/journal/journal-file.h b/src/journal/journal-file.h +index 2526e14..403c8f7 100644 +--- a/src/journal/journal-file.h ++++ b/src/journal/journal-file.h +@@ -199,7 +199,7 @@ int journal_file_find_field_object(JournalFile *f, const void *field, uint64_t s + int journal_file_find_field_object_with_hash(JournalFile *f, const void *field, uint64_t size, uint64_t hash, Object **ret, uint64_t *offset); + + void journal_file_reset_location(JournalFile *f); +-void journal_file_save_location(JournalFile *f, direction_t direction, Object *o, uint64_t offset); ++void journal_file_save_location(JournalFile *f, Object *o, uint64_t offset); + int journal_file_compare_locations(JournalFile *af, JournalFile *bf); + int journal_file_next_entry(JournalFile *f, uint64_t p, direction_t direction, Object **ret, uint64_t *offset); + +diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c +index 94891cd..9b57e59 100644 +--- a/src/journal/sd-journal.c ++++ b/src/journal/sd-journal.c +@@ -723,13 +723,17 @@ static int next_beyond_location(sd_journal *j, JournalFile *f, direction_t direc + assert(j); + assert(f); + +- if (f->last_direction == direction && f->current_offset > 0) { +- /* If we hit EOF before, recheck if any new entries arrived. */ +- n_entries = le64toh(f->header->n_entries); +- if (f->location_type == LOCATION_TAIL && n_entries == f->last_n_entries) +- return 0; +- f->last_n_entries = n_entries; ++ n_entries = le64toh(f->header->n_entries); ++ ++ /* If we hit EOF before, we don't need to look into this file again ++ * unless direction changed or new entries appeared. */ ++ if (f->last_direction == direction && f->location_type == LOCATION_TAIL && ++ n_entries == f->last_n_entries) ++ return 0; + ++ f->last_n_entries = n_entries; ++ ++ if (f->last_direction == direction && f->current_offset > 0) { + /* LOCATION_SEEK here means we did the work in a previous + * iteration and the current location already points to a + * candidate entry. */ +@@ -738,14 +742,16 @@ static int next_beyond_location(sd_journal *j, JournalFile *f, direction_t direc + if (r <= 0) + return r; + +- journal_file_save_location(f, direction, c, cp); ++ journal_file_save_location(f, c, cp); + } + } else { ++ f->last_direction = direction; ++ + r = find_location_with_matches(j, f, direction, &c, &cp); + if (r <= 0) + return r; + +- journal_file_save_location(f, direction, c, cp); ++ journal_file_save_location(f, c, cp); + } + + /* OK, we found the spot, now let's advance until an entry +@@ -773,7 +779,7 @@ static int next_beyond_location(sd_journal *j, JournalFile *f, direction_t direc + if (r <= 0) + return r; + +- journal_file_save_location(f, direction, c, cp); ++ journal_file_save_location(f, c, cp); + } + } + diff --git a/SOURCES/0060-shared-condition-fix-gcc5-warning.patch b/SOURCES/0060-shared-condition-fix-gcc5-warning.patch new file mode 100644 index 0000000..c697235 --- /dev/null +++ b/SOURCES/0060-shared-condition-fix-gcc5-warning.patch @@ -0,0 +1,42 @@ +From 2ee0903b0a00dd4a13af8a26ee5fb435c9895568 Mon Sep 17 00:00:00 2001 +From: Daniel Mack +Date: Fri, 27 Feb 2015 20:05:26 +0100 +Subject: [PATCH] shared/condition: fix gcc5 warning +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fixes the warning below. + +src/shared/condition.c: In function ‘condition_new’: +src/shared/condition.c:47:27: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses] + assert(!parameter == (type == CONDITION_NULL)); + ^ +src/shared/macro.h:42:44: note: in definition of macro ‘_unlikely_’ + #define _unlikely_(x) (__builtin_expect(!!(x),0)) + ^ +src/shared/macro.h:226:22: note: in expansion of macro ‘assert_se’ + #define assert(expr) assert_se(expr) + ^ +src/shared/condition.c:47:9: note: in expansion of macro ‘assert’ + assert(!parameter == (type == CONDITION_NULL)); + ^ + +(cherry picked from commit 8a9c6071cb7467170010f0287672c987981bdf9c) +--- + src/shared/condition.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/condition.c b/src/shared/condition.c +index da7560f..796cc52 100644 +--- a/src/shared/condition.c ++++ b/src/shared/condition.c +@@ -46,7 +46,7 @@ Condition* condition_new(ConditionType type, const char *parameter, bool trigger + + assert(type >= 0); + assert(type < _CONDITION_TYPE_MAX); +- assert(!parameter == (type == CONDITION_NULL)); ++ assert((!parameter) == (type == CONDITION_NULL)); + + c = new0(Condition, 1); + if (!c) diff --git a/SOURCES/0060-systemctl-fix-name-mangling-for-sysv-units.patch b/SOURCES/0060-systemctl-fix-name-mangling-for-sysv-units.patch deleted file mode 100644 index 2e8df3b..0000000 --- a/SOURCES/0060-systemctl-fix-name-mangling-for-sysv-units.patch +++ /dev/null @@ -1,131 +0,0 @@ -From f4cad2f52718b386ab8c233d6d702e808acfb844 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=A1clav=20Pavl=C3=ADn?= -Date: Wed, 2 Oct 2013 16:42:42 +0200 -Subject: [PATCH] systemctl: fix name mangling for sysv units - ---- - src/systemctl/systemctl.c | 45 ++++++++++++++++++--------------------------- - 1 file changed, 18 insertions(+), 27 deletions(-) - -diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c -index 0d1a487..036828b 100644 ---- a/src/systemctl/systemctl.c -+++ b/src/systemctl/systemctl.c -@@ -4218,11 +4218,10 @@ static int set_environment(DBusConnection *bus, char **args) { - return 0; - } - --static int enable_sysv_units(char **args) { -+static int enable_sysv_units(const char *verb, char **args) { - int r = 0; - - #if defined(HAVE_SYSV_COMPAT) && defined(HAVE_CHKCONFIG) -- const char *verb = args[0]; - unsigned f = 1, t = 1; - LookupPaths paths = {}; - -@@ -4242,7 +4241,7 @@ static int enable_sysv_units(char **args) { - return r; - - r = 0; -- for (f = 1; args[f]; f++) { -+ for (f = 0; args[f]; f++) { - const char *name; - _cleanup_free_ char *p = NULL, *q = NULL; - bool found_native = false, found_sysv; -@@ -4365,7 +4364,7 @@ finish: - lookup_paths_free(&paths); - - /* Drop all SysV units */ -- for (f = 1, t = 1; args[f]; f++) { -+ for (f = 0, t = 0; args[f]; f++) { - - if (isempty(args[f])) - continue; -@@ -4423,16 +4422,16 @@ static int enable_unit(DBusConnection *bus, char **args) { - - dbus_error_init(&error); - -- r = enable_sysv_units(args); -- if (r < 0) -- return r; -- - if (!args[1]) - return 0; - - r = mangle_names(args+1, &mangled_names); - if (r < 0) -- goto finish; -+ return r; -+ -+ r = enable_sysv_units(verb, mangled_names); -+ if (r < 0) -+ return r; - - if (!bus || avoid_bus()) { - if (streq(verb, "enable")) { -@@ -4624,11 +4623,15 @@ static int unit_is_enabled(DBusConnection *bus, char **args) { - _cleanup_dbus_message_unref_ DBusMessage *reply = NULL; - bool enabled; - char **name; -- char *n; -+ _cleanup_strv_free_ char **mangled_names = NULL; - - dbus_error_init(&error); - -- r = enable_sysv_units(args); -+ r = mangle_names(args+1, &mangled_names); -+ if (r < 0) -+ return r; -+ -+ r = enable_sysv_units(args[0], mangled_names); - if (r < 0) - return r; - -@@ -4636,16 +4639,10 @@ static int unit_is_enabled(DBusConnection *bus, char **args) { - - if (!bus || avoid_bus()) { - -- STRV_FOREACH(name, args+1) { -+ STRV_FOREACH(name, mangled_names) { - UnitFileState state; - -- n = unit_name_mangle(*name); -- if (!n) -- return log_oom(); -- -- state = unit_file_get_state(arg_scope, arg_root, n); -- -- free(n); -+ state = unit_file_get_state(arg_scope, arg_root, *name); - - if (state < 0) - return state; -@@ -4660,13 +4657,9 @@ static int unit_is_enabled(DBusConnection *bus, char **args) { - } - - } else { -- STRV_FOREACH(name, args+1) { -+ STRV_FOREACH(name, mangled_names) { - const char *s; - -- n = unit_name_mangle(*name); -- if (!n) -- return log_oom(); -- - r = bus_method_call_with_reply ( - bus, - "org.freedesktop.systemd1", -@@ -4675,11 +4668,9 @@ static int unit_is_enabled(DBusConnection *bus, char **args) { - "GetUnitFileState", - &reply, - NULL, -- DBUS_TYPE_STRING, &n, -+ DBUS_TYPE_STRING, name, - DBUS_TYPE_INVALID); - -- free(n); -- - if (r) - return r; - diff --git a/SOURCES/0061-execute-more-debugging-messages.patch b/SOURCES/0061-execute-more-debugging-messages.patch deleted file mode 100644 index 5093eea..0000000 --- a/SOURCES/0061-execute-more-debugging-messages.patch +++ /dev/null @@ -1,121 +0,0 @@ -From a454e9c726630fe4811a1c93b2d88b0e77b3094f Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Wed, 28 Aug 2013 08:01:30 -0400 -Subject: [PATCH] execute: more debugging messages - ---- - src/core/execute.c | 35 +++++++++++++++++++++-------------- - src/login/pam-module.c | 3 ++- - 2 files changed, 23 insertions(+), 15 deletions(-) - -diff --git a/src/core/execute.c b/src/core/execute.c -index a53ef48..981b9e4 100644 ---- a/src/core/execute.c -+++ b/src/core/execute.c -@@ -317,12 +317,12 @@ static int setup_input(const ExecContext *context, int socket_fd, bool apply_tty - case EXEC_INPUT_TTY_FAIL: { - int fd, r; - -- if ((fd = acquire_terminal( -- tty_path(context), -- i == EXEC_INPUT_TTY_FAIL, -- i == EXEC_INPUT_TTY_FORCE, -- false, -- (usec_t) -1)) < 0) -+ fd = acquire_terminal(tty_path(context), -+ i == EXEC_INPUT_TTY_FAIL, -+ i == EXEC_INPUT_TTY_FORCE, -+ false, -+ (usec_t) -1); -+ if (fd < 0) - return fd; - - if (fd != STDIN_FILENO) { -@@ -748,6 +748,7 @@ static int setup_pam( - char **e = NULL; - bool close_session = false; - pid_t pam_pid = 0, parent_pid; -+ int flags = 0; - - assert(name); - assert(user); -@@ -760,6 +761,9 @@ static int setup_pam( - * daemon. We do things this way to ensure that the main PID - * of the daemon is the one we initially fork()ed. */ - -+ if (log_get_max_level() < LOG_PRI(LOG_DEBUG)) -+ flags |= PAM_SILENT; -+ - pam_code = pam_start(name, user, &conv, &handle); - if (pam_code != PAM_SUCCESS) { - handle = NULL; -@@ -772,11 +776,11 @@ static int setup_pam( - goto fail; - } - -- pam_code = pam_acct_mgmt(handle, PAM_SILENT); -+ pam_code = pam_acct_mgmt(handle, flags); - if (pam_code != PAM_SUCCESS) - goto fail; - -- pam_code = pam_open_session(handle, PAM_SILENT); -+ pam_code = pam_open_session(handle, flags); - if (pam_code != PAM_SUCCESS) - goto fail; - -@@ -850,7 +854,7 @@ static int setup_pam( - - /* If our parent died we'll end the session */ - if (getppid() != parent_pid) { -- pam_code = pam_close_session(handle, PAM_DATA_SILENT); -+ pam_code = pam_close_session(handle, flags); - if (pam_code != PAM_SUCCESS) - goto child_finish; - } -@@ -858,7 +862,7 @@ static int setup_pam( - r = 0; - - child_finish: -- pam_end(handle, pam_code | PAM_DATA_SILENT); -+ pam_end(handle, pam_code | flags); - _exit(r); - } - -@@ -880,16 +884,19 @@ static int setup_pam( - return 0; - - fail: -- if (pam_code != PAM_SUCCESS) -+ if (pam_code != PAM_SUCCESS) { -+ log_error("PAM failed: %s", pam_strerror(handle, pam_code)); - err = -EPERM; /* PAM errors do not map to errno */ -- else -+ } else { -+ log_error("PAM failed: %m"); - err = -errno; -+ } - - if (handle) { - if (close_session) -- pam_code = pam_close_session(handle, PAM_DATA_SILENT); -+ pam_code = pam_close_session(handle, flags); - -- pam_end(handle, pam_code | PAM_DATA_SILENT); -+ pam_end(handle, pam_code | flags); - } - - strv_free(e); -diff --git a/src/login/pam-module.c b/src/login/pam-module.c -index 49296b5..973daf7 100644 ---- a/src/login/pam-module.c -+++ b/src/login/pam-module.c -@@ -199,7 +199,8 @@ _public_ PAM_EXTERN int pam_sm_open_session( - - dbus_error_init(&error); - -- /* pam_syslog(handle, LOG_INFO, "pam-systemd initializing"); */ -+ if (debug) -+ pam_syslog(handle, LOG_INFO, "pam-systemd initializing"); - - /* Make this a NOP on non-logind systems */ - if (!logind_running()) diff --git a/SOURCES/0061-man-correct-description-of-systemd-user-sessions.patch b/SOURCES/0061-man-correct-description-of-systemd-user-sessions.patch new file mode 100644 index 0000000..248ce01 --- /dev/null +++ b/SOURCES/0061-man-correct-description-of-systemd-user-sessions.patch @@ -0,0 +1,34 @@ +From 3104b6659b1405d25cdb5cad68e2bb2c9f8b5980 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 27 Feb 2015 17:26:42 -0500 +Subject: [PATCH] man: correct description of systemd-user-sessions + +That part of functionality was removed in 7fb3ee51c1b377. + +(cherry picked from commit 3849a2ac8198fedd25e66fe780821fa96eb6396d) +--- + man/systemd-user-sessions.service.xml | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/man/systemd-user-sessions.service.xml b/man/systemd-user-sessions.service.xml +index 9d796b1..e75ef11 100644 +--- a/man/systemd-user-sessions.service.xml ++++ b/man/systemd-user-sessions.service.xml +@@ -55,13 +55,12 @@ + Description + + systemd-user-sessions.service is a +- service that controls user logins. After basic system +- initialization is complete it removes ++ service that controls user logins through ++ pam_nologin8. ++ After basic system initialization is complete it removes + /run/nologin, thus permitting logins. Before + system shutdown it creates /run/nologin, thus +- prohibiting further logins. At the same time it also kills all +- user processes, so that system shutdown may proceed without any +- remaining user processes around. ++ prohibiting further logins. + + + diff --git a/SOURCES/0062-build-sys-allow-lto-and-FORTIFY_SOURCE-with-O-sz.patch b/SOURCES/0062-build-sys-allow-lto-and-FORTIFY_SOURCE-with-O-sz.patch new file mode 100644 index 0000000..76c32f3 --- /dev/null +++ b/SOURCES/0062-build-sys-allow-lto-and-FORTIFY_SOURCE-with-O-sz.patch @@ -0,0 +1,31 @@ +From 21511551c7d49424a202b25ffe76cf1371dfc0c1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 1 Mar 2015 22:46:43 -0500 +Subject: [PATCH] build-sys: allow lto and FORTIFY_SOURCE with -O[sz] + +https://bugs.freedesktop.org/show_bug.cgi?id=89382 +(cherry picked from commit 0289f2fb2a64df53b589b771f69c43126b029590) +--- + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 9c25c3c..3201428 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -208,13 +208,13 @@ AS_CASE([$CC], [*clang*], + -Wno-gnu-variable-sized-type-not-at-end \ + ])]) + +-AS_CASE([$CFLAGS], [*-O[[12345\ ]]*], ++AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*], + [CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\ + -flto -ffat-lto-objects])], + [AC_MSG_RESULT([skipping -flto, optimization not enabled])]) + AC_SUBST([OUR_CFLAGS], "$with_cflags $sanitizer_cflags") + +-AS_CASE([$CFLAGS], [*-O[[12345\ ]]*], ++AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*], + [CC_CHECK_FLAGS_APPEND([with_cppflags], [CPPFLAGS], [\ + -Wp,-D_FORTIFY_SOURCE=2])], + [AC_MSG_RESULT([skipping -D_FORTIFY_SOURCE, optimization not enabled])]) diff --git a/SOURCES/0062-logind-fix-bus-introspection-data-for-TakeControl.patch b/SOURCES/0062-logind-fix-bus-introspection-data-for-TakeControl.patch deleted file mode 100644 index 7b09e47..0000000 --- a/SOURCES/0062-logind-fix-bus-introspection-data-for-TakeControl.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 52fe02b97504dfefb89db203cf7c6e93679ff681 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 4 Oct 2013 21:16:40 +0200 -Subject: [PATCH] logind: fix bus introspection data for TakeControl() - ---- - src/login/logind-session-dbus.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c -index 5f6bafb..be4e01c 100644 ---- a/src/login/logind-session-dbus.c -+++ b/src/login/logind-session-dbus.c -@@ -41,7 +41,7 @@ - " \n" \ - " \n" \ - " \n" \ -- " \n" \ -+ " \n" \ - " \n" \ - " \n" \ - " \n" \ diff --git a/SOURCES/0063-man-fix-typo.patch b/SOURCES/0063-man-fix-typo.patch new file mode 100644 index 0000000..60fe6df --- /dev/null +++ b/SOURCES/0063-man-fix-typo.patch @@ -0,0 +1,23 @@ +From 3f4c4af890ff655bf409875d0775f436e6d63353 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 3 Mar 2015 00:11:51 +0100 +Subject: [PATCH] man: fix typo + +(cherry picked from commit a68188812290cb9ec9f3f8a17b65e64549a4fd65) +--- + man/systemd.netdev.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml +index 4480e19..ef58887 100644 +--- a/man/systemd.netdev.xml ++++ b/man/systemd.netdev.xml +@@ -108,7 +108,7 @@ + A bond device is an aggregation of all its slave devices. See Linux Ethernet Bonding Driver HOWTO for details.Local configuration + + bridge +- A bridge devcie is a software switch, each of its slave devices and the bridge itself are ports of the switch. ++ A bridge device is a software switch, each of its slave devices and the bridge itself are ports of the switch. + + dummy + A dummy device drops all packets sent to it. diff --git a/SOURCES/0063-utf8-fix-utf8_is_printable.patch b/SOURCES/0063-utf8-fix-utf8_is_printable.patch deleted file mode 100644 index 0074c63..0000000 --- a/SOURCES/0063-utf8-fix-utf8_is_printable.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 91eda57764f26d3ebdbf8194a528d8d60d0f409a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Sat, 5 Oct 2013 22:47:52 -0400 -Subject: [PATCH] utf8: fix utf8_is_printable - ---- - src/shared/utf8.c | 5 +++-- - src/test/test-utf8.c | 1 + - 2 files changed, 4 insertions(+), 2 deletions(-) - -diff --git a/src/shared/utf8.c b/src/shared/utf8.c -index a8e28ac..31120af 100644 ---- a/src/shared/utf8.c -+++ b/src/shared/utf8.c -@@ -141,14 +141,15 @@ bool utf8_is_printable(const char* str, size_t length) { - - assert(str); - -- for (p = (const uint8_t*) str; length; p++) { -+ for (p = (const uint8_t*) str; length;) { - int encoded_len = utf8_encoded_valid_unichar((const char *)p); -- int32_t val = utf8_encoded_to_unichar((const char*)p); -+ int val = utf8_encoded_to_unichar((const char*)p); - - if (encoded_len < 0 || val < 0 || is_unicode_control(val)) - return false; - - length -= encoded_len; -+ p += encoded_len; - } - - return true; -diff --git a/src/test/test-utf8.c b/src/test/test-utf8.c -index 7bd0db1..f0182ee 100644 ---- a/src/test/test-utf8.c -+++ b/src/test/test-utf8.c -@@ -26,6 +26,7 @@ static void test_utf8_is_printable(void) { - assert_se(utf8_is_printable("ascii is valid\tunicode", 22)); - assert_se(utf8_is_printable("\342\204\242", 3)); - assert_se(!utf8_is_printable("\341\204", 2)); -+ assert_se(utf8_is_printable("ąę", 4)); - } - - static void test_utf8_is_valid(void) { diff --git a/SOURCES/0064-bus-proxyd-avoid-logging-oom-twice.patch b/SOURCES/0064-bus-proxyd-avoid-logging-oom-twice.patch new file mode 100644 index 0000000..9671e78 --- /dev/null +++ b/SOURCES/0064-bus-proxyd-avoid-logging-oom-twice.patch @@ -0,0 +1,23 @@ +From 61dd027666b40102bc9463217264f1deaab4cc8a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 3 Mar 2015 00:05:14 -0500 +Subject: [PATCH] bus-proxyd: avoid logging oom twice + +(cherry picked from commit c29005212dc38d98c707639d1a82ffa5270f2e97) +--- + src/bus-proxyd/bus-proxyd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/bus-proxyd/bus-proxyd.c b/src/bus-proxyd/bus-proxyd.c +index b6b0056..b6550ed 100644 +--- a/src/bus-proxyd/bus-proxyd.c ++++ b/src/bus-proxyd/bus-proxyd.c +@@ -82,7 +82,7 @@ static int client_context_new(ClientContext **out) { + + c = new0(ClientContext, 1); + if (!c) +- return log_oom(); ++ return -ENOMEM; + + c->fd = -1; + diff --git a/SOURCES/0064-keymap-Fix-Samsung-900X-34-C.patch b/SOURCES/0064-keymap-Fix-Samsung-900X-34-C.patch deleted file mode 100644 index 4782f3a..0000000 --- a/SOURCES/0064-keymap-Fix-Samsung-900X-34-C.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 774b623c772bbb716b74c8927b6f90cfbce795b9 Mon Sep 17 00:00:00 2001 -From: Martin Pitt -Date: Wed, 9 Oct 2013 16:05:15 +0200 -Subject: [PATCH] keymap: Fix Samsung 900X[34]C - -It appears that it's not really the 900 vs. 940 or the X3 vs X4, but the -A/B/C/D suffix after that which makes the difference between the keymaps. On a -NP900X3C-A04RU you get - - MODALIAS=dmi:bvn*:bvr*:bd*:svnSAMSUNGELECTRONICSCO.,LTD.:pn900X3C/900X3D/900X4C/900X4D:* - -So change the matches to use AB vs. CDG as the differentiator. - -Thanks to Anatoly Markov for reporting and testing! ---- - hwdb/60-keyboard.hwdb | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb -index 20d398f..b497f92 100644 ---- a/hwdb/60-keyboard.hwdb -+++ b/hwdb/60-keyboard.hwdb -@@ -904,6 +904,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*550P*:pvr* - KEYBOARD_KEY_a9=! # Fn Lock - Function lock off - - keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr* -+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34][CDG]*:pvr* - keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*940X3G*:pvr* - KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings - KEYBOARD_KEY_a0=!mute # Fn+F6 mute -@@ -915,7 +916,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*940X3G*:pvr* - - # Series 9 - keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*90X3A*:pvr* --keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34]*:pvr* -+keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34][AB]*:pvr* - KEYBOARD_KEY_ce=! # Fn+F8 keyboard backlight up - KEYBOARD_KEY_8d=! # Fn+F7 keyboard backlight down - KEYBOARD_KEY_96=! # Fn+F1 performance mode (?) diff --git a/SOURCES/0065-Do-not-run-sysv-generator-test-when-sysv-compat-is-d.patch b/SOURCES/0065-Do-not-run-sysv-generator-test-when-sysv-compat-is-d.patch new file mode 100644 index 0000000..9f2a66c --- /dev/null +++ b/SOURCES/0065-Do-not-run-sysv-generator-test-when-sysv-compat-is-d.patch @@ -0,0 +1,29 @@ +From c11c73fc4541bf0ea5a418ebea53e58668100f82 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 3 Mar 2015 10:36:47 -0500 +Subject: [PATCH] Do not run sysv-generator-test when sysv compat is disabled + +(cherry picked from commit dcf1369057231fbf09e37b5a48483763b4ae6e19) +--- + Makefile.am | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/Makefile.am b/Makefile.am +index 2e6455f..4933f76 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -3789,9 +3789,14 @@ TESTS += \ + if HAVE_PYTHON + TESTS += \ + test/rule-syntax-check.py \ ++ $(NULL) ++ ++if HAVE_SYSV_COMPAT ++TESTS += \ + test/sysv-generator-test.py \ + $(NULL) + endif ++endif + + manual_tests += \ + test-libudev \ diff --git a/SOURCES/0065-do-not-accept-garbage-from-acpi-firmware-performance.patch b/SOURCES/0065-do-not-accept-garbage-from-acpi-firmware-performance.patch deleted file mode 100644 index 531aa76..0000000 --- a/SOURCES/0065-do-not-accept-garbage-from-acpi-firmware-performance.patch +++ /dev/null @@ -1,30 +0,0 @@ -From d6987c081c5b0d1a2d9083b3d50fb78c63ab4904 Mon Sep 17 00:00:00 2001 -From: Kay Sievers -Date: Thu, 10 Oct 2013 01:38:11 +0200 -Subject: [PATCH] do not accept "garbage" from acpi firmware performance data - (FPDT) - -00000000 46 42 50 54 38 00 00 00 02 00 30 02 00 00 00 00 |FBPT8.....0.....| -00000010 23 45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |#E..............| -00000020 f5 6a 51 00 00 00 00 00 00 00 00 00 00 00 00 00 |.jQ.............| -00000030 00 00 00 00 00 00 00 00 70 74 61 6c 58 00 00 00 |........ptalX...| ---- - src/shared/acpi-fpdt.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/src/shared/acpi-fpdt.c b/src/shared/acpi-fpdt.c -index af58c7c..75648b4 100644 ---- a/src/shared/acpi-fpdt.c -+++ b/src/shared/acpi-fpdt.c -@@ -146,6 +146,11 @@ int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit) { - if (brec.type != ACPI_FPDT_BOOT_REC) - return -EINVAL; - -+ if (brec.startup_start == 0 || brec.exit_services_exit < brec.startup_start) -+ return -EINVAL; -+ if (brec.exit_services_exit > NSEC_PER_HOUR) -+ return -EINVAL; -+ - if (loader_start) - *loader_start = brec.startup_start / 1000; - if (loader_exit) diff --git a/SOURCES/0066-README-mention-ACLs-more.patch b/SOURCES/0066-README-mention-ACLs-more.patch new file mode 100644 index 0000000..93e5683 --- /dev/null +++ b/SOURCES/0066-README-mention-ACLs-more.patch @@ -0,0 +1,26 @@ +From b1e53a9d3cc7c6fbe4447e201c8f6348ffcd7b6a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 3 Mar 2015 09:00:39 -0500 +Subject: [PATCH] README: mention ACLs more + +They are now useful for any fs used for journal storage. + +(cherry picked from commit a6cccd8f580fc1e062dba3895e232007acd38781) +--- + README | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/README b/README +index ac2a81c..ffc2cf9 100644 +--- a/README ++++ b/README +@@ -78,8 +78,8 @@ REQUIREMENTS: + Optional but strongly recommended: + CONFIG_IPV6 + CONFIG_AUTOFS4_FS +- CONFIG_TMPFS_POSIX_ACL + CONFIG_TMPFS_XATTR ++ CONFIG_{TMPFS,EXT4,XFS,BTRFS_FS,...}_POSIX_ACL + CONFIG_SECCOMP + + Required for CPUShares in resource control unit settings diff --git a/SOURCES/0066-login-fix-invalid-free-in-sd_session_get_vt.patch b/SOURCES/0066-login-fix-invalid-free-in-sd_session_get_vt.patch deleted file mode 100644 index 01743fd..0000000 --- a/SOURCES/0066-login-fix-invalid-free-in-sd_session_get_vt.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 540aab87440dbde3bf6a1d057df9c7a79adf7031 Mon Sep 17 00:00:00 2001 -From: David Herrmann -Date: Thu, 10 Oct 2013 13:09:37 +0200 -Subject: [PATCH] login: fix invalid free() in sd_session_get_vt() - -We need to clear variables markes as _cleanup_free_. Otherwise, our -error-paths might corrupt random memory. ---- - src/login/sd-login.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/login/sd-login.c b/src/login/sd-login.c -index 71d8c29..6c27dfe 100644 ---- a/src/login/sd-login.c -+++ b/src/login/sd-login.c -@@ -350,7 +350,7 @@ _public_ int sd_session_get_tty(const char *session, char **tty) { - } - - _public_ int sd_session_get_vt(const char *session, unsigned *vtnr) { -- _cleanup_free_ char *vtnr_string; -+ _cleanup_free_ char *vtnr_string = NULL; - unsigned u; - int r; - diff --git a/SOURCES/0067-Do-not-advertise-.d-snippets-over-main-config-file.patch b/SOURCES/0067-Do-not-advertise-.d-snippets-over-main-config-file.patch new file mode 100644 index 0000000..57e3439 --- /dev/null +++ b/SOURCES/0067-Do-not-advertise-.d-snippets-over-main-config-file.patch @@ -0,0 +1,333 @@ +From b72201257216f687bf3462ad7539612cccbbce75 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 3 Mar 2015 19:10:21 -0500 +Subject: [PATCH] Do not advertise .d snippets over main config file + +For daemons which have a main configuration file, there's +little reason for the administrator to use configuration snippets. +They are useful for packagers which need to override settings, but +we shouldn't advertise that as the main way of configuring those +services. + +https://bugs.freedesktop.org/show_bug.cgi?id=89397 +(cherry picked from commit e93549ef29c4123d9ee45acb5815048390201e49) +--- + man/bootchart.conf.xml | 3 +-- + man/coredump.conf.xml | 3 +-- + man/journald.conf.xml | 3 +-- + man/logind.conf.xml | 8 +++++--- + man/resolved.conf.xml | 3 +-- + man/standard-conf.xml | 42 ++++++++++++++++++++++++++++++++++-------- + man/systemd-sleep.conf.xml | 3 +-- + man/systemd-system.conf.xml | 3 +-- + man/timesyncd.conf.xml | 3 +-- + src/bootchart/bootchart.conf | 7 ++++--- + src/core/system.conf | 7 ++++--- + src/journal/coredump.conf | 7 ++++--- + src/journal/journald.conf | 7 ++++--- + src/login/logind.conf | 7 ++++--- + src/resolve/resolved.conf.in | 5 +++-- + src/timesync/timesyncd.conf.in | 7 ++++--- + 16 files changed, 73 insertions(+), 45 deletions(-) + +diff --git a/man/bootchart.conf.xml b/man/bootchart.conf.xml +index 8d9700d..bf6ca0b 100644 +--- a/man/bootchart.conf.xml ++++ b/man/bootchart.conf.xml +@@ -68,8 +68,7 @@ + parameters and graph output. + + +- +- ++ + + + Options +diff --git a/man/coredump.conf.xml b/man/coredump.conf.xml +index 3d325e6..0b7329b 100644 +--- a/man/coredump.conf.xml ++++ b/man/coredump.conf.xml +@@ -63,8 +63,7 @@ + a handler for core dumps invoked by the kernel. + + +- +- ++ + + + Options +diff --git a/man/journald.conf.xml b/man/journald.conf.xml +index 364b58f..85146b0 100644 +--- a/man/journald.conf.xml ++++ b/man/journald.conf.xml +@@ -64,8 +64,7 @@ + + + +- +- ++ + + + Options +diff --git a/man/logind.conf.xml b/man/logind.conf.xml +index ffaec50..ca2b187 100644 +--- a/man/logind.conf.xml ++++ b/man/logind.conf.xml +@@ -58,11 +58,13 @@ + + Description + +- These files configure various parameters of the systemd login manager, systemd-logind.service8. ++ These files configure various parameters of the systemd ++ login manager, ++ systemd-logind.service8. ++ + + +- +- ++ + + + Options +diff --git a/man/resolved.conf.xml b/man/resolved.conf.xml +index 36cae27..8047a4e 100644 +--- a/man/resolved.conf.xml ++++ b/man/resolved.conf.xml +@@ -63,8 +63,7 @@ + + + +- +- ++ + + + Options +diff --git a/man/standard-conf.xml b/man/standard-conf.xml +index b87d7e9..36af459 100644 +--- a/man/standard-conf.xml ++++ b/man/standard-conf.xml +@@ -33,13 +33,39 @@ + configuration file. + + +- +- Configuration File +- +- Configuration is also read from a single configuration file in +- /etc/. This file is read before any of the +- configuration directories, and has the lowest precedence; entries in a file +- in any configuration directory override entries in the single configuration +- file. ++ ++ Configuration Directories and Precedence ++ ++ Default configuration is defined during compilation, so a ++ configuration file is only needed when it is necessary to deviate ++ from those defaults. By default the configuration file in ++ /etc/systemd/ contains commented out entries ++ showing the defaults as a guide to the administrator. This file ++ can be edited to create local overrides. ++ ++ ++ When packages need to customize the configuration, they can ++ install configuration snippets in ++ /usr/lib/systemd/*.conf.d/. Files in ++ /etc/ are reserved for the local ++ administrator, who may use this logic to override the ++ configuration files installed by vendor packages. The main ++ configuration file is read before any of the configuration ++ directories, and has the lowest precedence; entries in a file in ++ any configuration directory override entries in the single ++ configuration file. Files in the ++ logind.conf.d/ configuration subdirectories ++ are sorted by their filename in lexicographic order, regardless of ++ which of the subdirectories they reside in. If multiple files ++ specify the same option, the entry in the file with the ++ lexicographically latest name takes precedence. It is recommended ++ to prefix all filenames in those subdirectories with a two-digit ++ number and a dash, to simplify the ordering of the files. ++ ++ To disable a configuration file supplied by the vendor, the ++ recommended way is to place a symlink to ++ /dev/null in the configuration directory in ++ /etc/, with the same filename as the vendor ++ configuration file. + + +diff --git a/man/systemd-sleep.conf.xml b/man/systemd-sleep.conf.xml +index 433f2f8..bb17ec8 100644 +--- a/man/systemd-sleep.conf.xml ++++ b/man/systemd-sleep.conf.xml +@@ -112,8 +112,7 @@ along with systemd; If not, see . + attempts to suspend or hibernate the machine. + + +- +- ++ + + + Options +diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml +index 7c3f237..c7bcfae 100644 +--- a/man/systemd-system.conf.xml ++++ b/man/systemd-system.conf.xml +@@ -74,8 +74,7 @@ + operations. + + +- +- ++ + + + Options +diff --git a/man/timesyncd.conf.xml b/man/timesyncd.conf.xml +index 1127970..89a651c 100644 +--- a/man/timesyncd.conf.xml ++++ b/man/timesyncd.conf.xml +@@ -63,8 +63,7 @@ + + + +- +- ++ + + + Options +diff --git a/src/bootchart/bootchart.conf b/src/bootchart/bootchart.conf +index 2d7cb61..4f5e509 100644 +--- a/src/bootchart/bootchart.conf ++++ b/src/bootchart/bootchart.conf +@@ -5,10 +5,11 @@ + # the Free Software Foundation; either version 2.1 of the License, or + # (at your option) any later version. + # +-# You can override the directives in this file by creating files in +-# /etc/systemd/bootchart.conf.d/*.conf. ++# Entries in this file show the compile time defaults. ++# You can change settings by editing this file. ++# Defaults can be restored by simply deleting this file. + # +-# See bootchart.conf(5) for details ++# See bootchart.conf(5) for details. + + [Bootchart] + #Samples=500 +diff --git a/src/core/system.conf b/src/core/system.conf +index a372720..2316090 100644 +--- a/src/core/system.conf ++++ b/src/core/system.conf +@@ -5,10 +5,11 @@ + # the Free Software Foundation; either version 2.1 of the License, or + # (at your option) any later version. + # +-# You can override the directives in this file by creating files in +-# /etc/systemd/system.conf.d/*.conf. ++# Entries in this file show the compile time defaults. ++# You can change settings by editing this file. ++# Defaults can be restored by simply deleting this file. + # +-# See systemd-system.conf(5) for details ++# See systemd-system.conf(5) for details. + + [Manager] + #LogLevel=info +diff --git a/src/journal/coredump.conf b/src/journal/coredump.conf +index 0fe9fe8..c2f0643 100644 +--- a/src/journal/coredump.conf ++++ b/src/journal/coredump.conf +@@ -5,10 +5,11 @@ + # the Free Software Foundation; either version 2.1 of the License, or + # (at your option) any later version. + # +-# You can override the directives in this file by creating files in +-# /etc/systemd/coredump.conf.d/*.conf. ++# Entries in this file show the compile time defaults. ++# You can change settings by editing this file. ++# Defaults can be restored by simply deleting this file. + # +-# See coredump.conf(5) for details ++# See coredump.conf(5) for details. + + [Coredump] + #Storage=external +diff --git a/src/journal/journald.conf b/src/journal/journald.conf +index 29bdf8f..47eefe9 100644 +--- a/src/journal/journald.conf ++++ b/src/journal/journald.conf +@@ -5,10 +5,11 @@ + # the Free Software Foundation; either version 2.1 of the License, or + # (at your option) any later version. + # +-# You can override the directives in this file by creating files in +-# /etc/systemd/journald.conf.d/*.conf. ++# Entries in this file show the compile time defaults. ++# You can change settings by editing this file. ++# Defaults can be restored by simply deleting this file. + # +-# See journald.conf(5) for details ++# See journald.conf(5) for details. + + [Journal] + #Storage=auto +diff --git a/src/login/logind.conf b/src/login/logind.conf +index 6b1943a..834c4c2 100644 +--- a/src/login/logind.conf ++++ b/src/login/logind.conf +@@ -5,10 +5,11 @@ + # the Free Software Foundation; either version 2.1 of the License, or + # (at your option) any later version. + # +-# You can override the directives in this file by creating files in +-# /etc/systemd/logind.conf.d/*.conf. ++# Entries in this file show the compile time defaults. ++# You can change settings by editing this file. ++# Defaults can be restored by simply deleting this file. + # +-# See logind.conf(5) for details ++# See logind.conf(5) for details. + + [Login] + #NAutoVTs=6 +diff --git a/src/resolve/resolved.conf.in b/src/resolve/resolved.conf.in +index e5a19ee..3eb19e4 100644 +--- a/src/resolve/resolved.conf.in ++++ b/src/resolve/resolved.conf.in +@@ -5,8 +5,9 @@ + # the Free Software Foundation; either version 2.1 of the License, or + # (at your option) any later version. + # +-# You can override the directives in this file by creating files in +-# /etc/systemd/resolved.conf.d/*.conf. ++# Entries in this file show the compile time defaults. ++# You can change settings by editing this file. ++# Defaults can be restored by simply deleting this file. + # + # See resolved.conf(5) for details + +diff --git a/src/timesync/timesyncd.conf.in b/src/timesync/timesyncd.conf.in +index fc3c6c4..b6a2ada 100644 +--- a/src/timesync/timesyncd.conf.in ++++ b/src/timesync/timesyncd.conf.in +@@ -5,10 +5,11 @@ + # the Free Software Foundation; either version 2.1 of the License, or + # (at your option) any later version. + # +-# You can override the directives in this file by creating files in +-# /etc/systemd/timesyncd.conf.d/*.conf. ++# Entries in this file show the compile time defaults. ++# You can change settings by editing this file. ++# Defaults can be restored by simply deleting this file. + # +-# See timesyncd.conf(5) for details ++# See timesyncd.conf(5) for details. + + [Time] + #NTP= diff --git a/SOURCES/0067-login-make-sd_session_get_vt-actually-work.patch b/SOURCES/0067-login-make-sd_session_get_vt-actually-work.patch deleted file mode 100644 index 74b6f71..0000000 --- a/SOURCES/0067-login-make-sd_session_get_vt-actually-work.patch +++ /dev/null @@ -1,24 +0,0 @@ -From b2301b8a4a17d51ac713fd39484fe48075ad2f64 Mon Sep 17 00:00:00 2001 -From: David Herrmann -Date: Thu, 10 Oct 2013 13:11:27 +0200 -Subject: [PATCH] login: make sd_session_get_vt() actually work - -We use VTNR, not VTNr as key. Until now sd_session_get_vt() just returns -an error. ---- - src/login/sd-login.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/login/sd-login.c b/src/login/sd-login.c -index 6c27dfe..7e25041 100644 ---- a/src/login/sd-login.c -+++ b/src/login/sd-login.c -@@ -354,7 +354,7 @@ _public_ int sd_session_get_vt(const char *session, unsigned *vtnr) { - unsigned u; - int r; - -- r = session_get_string(session, "VTNr", &vtnr_string); -+ r = session_get_string(session, "VTNR", &vtnr_string); - if (r < 0) - return r; - diff --git a/SOURCES/0068-Make-sure-that-we-don-t-dereference-NULL.patch b/SOURCES/0068-Make-sure-that-we-don-t-dereference-NULL.patch deleted file mode 100644 index 48887d0..0000000 --- a/SOURCES/0068-Make-sure-that-we-don-t-dereference-NULL.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 9765cfab7747c4d9435ec16a5fe29affeb2e52a7 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Sat, 12 Oct 2013 13:43:07 -0400 -Subject: [PATCH] Make sure that we don't dereference NULL - -The code was actually safe, because b should -never be null, because if rvalue is empty, a different -branch is taken. But we *do* check for NULL in the -loop above, so it's better to also check here for symmetry. ---- - src/core/load-fragment.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c -index 44920d6..f01843d 100644 ---- a/src/core/load-fragment.c -+++ b/src/core/load-fragment.c -@@ -1860,7 +1860,8 @@ int config_parse_documentation(const char *unit, - free(*a); - } - } -- *b = NULL; -+ if (b) -+ *b = NULL; - - return r; - } diff --git a/SOURCES/0068-hwdb-add-pnpid-for-the-T450s-touchpad.patch b/SOURCES/0068-hwdb-add-pnpid-for-the-T450s-touchpad.patch new file mode 100644 index 0000000..52dcf04 --- /dev/null +++ b/SOURCES/0068-hwdb-add-pnpid-for-the-T450s-touchpad.patch @@ -0,0 +1,22 @@ +From 48b8df6ea51021e6624bdc45ff371dd033d379df Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Wed, 4 Mar 2015 13:24:45 +1000 +Subject: [PATCH] hwdb: add pnpid for the T450s touchpad + +https://bugs.freedesktop.org/show_bug.cgi?id=89411 +(cherry picked from commit c26c1d86b3e466e073577e27ad839a0c112cd17b) +--- + hwdb/70-touchpad.hwdb | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/hwdb/70-touchpad.hwdb b/hwdb/70-touchpad.hwdb +index bbf44db..9fcb5fd 100644 +--- a/hwdb/70-touchpad.hwdb ++++ b/hwdb/70-touchpad.hwdb +@@ -36,4 +36,6 @@ + + # Lenovo X1 Carbon 3rd + touchpad:pnpid:*LEN0048*: ++# Lenovo T450s ++touchpad:pnpid:*LEN200f*: + TOUCHPAD_HAS_TRACKPOINT_BUTTONS=1 diff --git a/SOURCES/0069-gitignore-ignore-clang-analyze-output.patch b/SOURCES/0069-gitignore-ignore-clang-analyze-output.patch deleted file mode 100644 index 84f5b8e..0000000 --- a/SOURCES/0069-gitignore-ignore-clang-analyze-output.patch +++ /dev/null @@ -1,21 +0,0 @@ -From 9f433bba1d84c974f73d7c5929850a317981f692 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Sat, 12 Oct 2013 19:50:54 -0400 -Subject: [PATCH] gitignore: ignore clang --analyze output - ---- - .gitignore | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/.gitignore b/.gitignore -index 5b38c0b..56e10a6 100644 ---- a/.gitignore -+++ b/.gitignore -@@ -162,6 +162,7 @@ - *.la - *.lo - *.o -+*.plist - *.stamp - *.pyc - __pycache__/ diff --git a/SOURCES/0069-networkd-netdev-inform-when-we-take-over-an-existing.patch b/SOURCES/0069-networkd-netdev-inform-when-we-take-over-an-existing.patch new file mode 100644 index 0000000..6a68bb0 --- /dev/null +++ b/SOURCES/0069-networkd-netdev-inform-when-we-take-over-an-existing.patch @@ -0,0 +1,30 @@ +From fab00ed4a9ce8a1d579028c2fc39db3717b454da Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Wed, 4 Mar 2015 10:33:50 +0100 +Subject: [PATCH] networkd: netdev - inform when we take over an existing + netdev + +The crucial point here is that we will not change the settings of a netdev created by someone else +we simply use it as is and trust it was set up as intended. + +This is confusing in the case of the pre-created netdev's (bond0 etc.), the solution should probably +be to simply make the kernel stop creating these devices as they are pretty useless. + +(cherry picked from commit ff88a301e93cf1bddbaa7faa981f390a2a81a4bb) +--- + src/network/networkd-netdev.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/network/networkd-netdev.c b/src/network/networkd-netdev.c +index 8119205..7d193d0 100644 +--- a/src/network/networkd-netdev.c ++++ b/src/network/networkd-netdev.c +@@ -261,7 +261,7 @@ static int netdev_create_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userda + + r = sd_rtnl_message_get_errno(m); + if (r == -EEXIST) +- log_netdev_debug(netdev, "netdev exists, using existing"); ++ log_info_netdev(netdev, "netdev exists, using existing without changing its parameters"); + else if (r < 0) { + log_warning_netdev(netdev, "netdev could not be created: %s", strerror(-r)); + netdev_drop(netdev); diff --git a/SOURCES/0070-man-add-more-markup-to-udevadm-8.patch b/SOURCES/0070-man-add-more-markup-to-udevadm-8.patch deleted file mode 100644 index efbecde..0000000 --- a/SOURCES/0070-man-add-more-markup-to-udevadm-8.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 52473fa9ee6d097431c48c0b9c4b4a51837c75eb Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Sun, 13 Oct 2013 19:43:19 -0400 -Subject: [PATCH] man: add more markup to udevadm(8) - ---- - man/udevadm.xml | 49 +++++++++++++++++++++++++++++++++---------------- - 1 file changed, 33 insertions(+), 16 deletions(-) - -diff --git a/man/udevadm.xml b/man/udevadm.xml -index b959216..a1ffe42 100644 ---- a/man/udevadm.xml -+++ b/man/udevadm.xml -@@ -61,9 +61,10 @@ - - - Description -- udevadm expects a command and command specific options. It -- controls the runtime behavior of udev, requests kernel events, -- manages the event queue, and provides simple debugging mechanisms. -+ udevadm expects a command and command -+ specific options. It controls the runtime behavior of -+ systemd-udevd, requests kernel events, manages -+ the event queue, and provides simple debugging mechanisms. - - - OPTIONS -@@ -97,23 +98,37 @@ - - - -- Query the database for specified type of device data. It needs the -- or to identify the specified -- device. Valid queries are: -- name, symlink, path, -- property, all. -+ Query the database for specified type of device -+ data. It needs the or -+ to identify the specified -+ device. Valid queries are: name, -+ symlink, path, -+ property, -+ all. - - - - - -- The devpath of the device to query. -+ The /sys path of the device to -+ query, e.g. -+ /sys/class/block/sda. -+ Note that this option usually isn't very useful, since -+ udev can guess the type of the -+ argument, so udevadm -+ --devpath=/class/block/sda is equivalent to -+ udevadm /sys/class/block/sda. - - - - - -- The name of the device node or a symlink to query -+ The name of the device node or a symlink to query, -+ e.g. /dev/sda. -+ Note that this option usually isn't very useful, since -+ udev can guess the type of the -+ argument, so udevadm --name=sda is -+ equivalent to udevadm /dev/sda. - - - -@@ -462,13 +477,15 @@ - - - -- -+ - -- Specify when udevadm should resolve names of users and groups. -- When set to early (the default) names will be resolved when the -- rules are parsed. When set to late names will be resolved for -- every event. When set to never names will never be resolved and -- all devices will be owned by root. -+ Specify when udevadm should resolve names of users -+ and groups. When set to early (the -+ default) names will be resolved when the rules are -+ parsed. When set to late names will -+ be resolved for every event. When set to -+ never names will never be resolved -+ and all devices will be owned by root. - - - diff --git a/SOURCES/0070-man-replace-obsolete-wiki-link-with-man-page.patch b/SOURCES/0070-man-replace-obsolete-wiki-link-with-man-page.patch new file mode 100644 index 0000000..657c617 --- /dev/null +++ b/SOURCES/0070-man-replace-obsolete-wiki-link-with-man-page.patch @@ -0,0 +1,181 @@ +From d3a45e70ee215646cdfbe19f514be08ae95e12eb Mon Sep 17 00:00:00 2001 +From: Zachary Cook +Date: Wed, 4 Mar 2015 18:43:20 -0500 +Subject: [PATCH] man: replace obsolete wiki link with man page + +(cherry picked from commit b1c1a51944e8e11545ae2a230d674f5145595192) +--- + man/systemd-cryptsetup-generator.xml | 6 ++---- + man/systemd-debug-generator.xml | 6 ++---- + man/systemd-efi-boot-generator.xml | 4 +--- + man/systemd-fstab-generator.xml | 6 ++---- + man/systemd-getty-generator.xml | 5 ++--- + man/systemd-gpt-auto-generator.xml | 4 +--- + man/systemd-system-update-generator.xml | 6 ++---- + man/systemd-sysv-generator.xml | 6 ++---- + man/systemd.unit.xml | 4 ++-- + man/systemd.xml | 5 ++--- + 10 files changed, 18 insertions(+), 34 deletions(-) + +diff --git a/man/systemd-cryptsetup-generator.xml b/man/systemd-cryptsetup-generator.xml +index 0e48e79..1974cd7 100644 +--- a/man/systemd-cryptsetup-generator.xml ++++ b/man/systemd-cryptsetup-generator.xml +@@ -59,10 +59,8 @@ + systemd-cryptsetup@.service8 + units as necessary. + +- systemd-cryptsetup-generator +- implements the generator +- specification. ++ systemd-cryptsetup-generator implements ++ systemd.generator7. + + + +diff --git a/man/systemd-debug-generator.xml b/man/systemd-debug-generator.xml +index 74c3b26..5c5e9fc 100644 +--- a/man/systemd-debug-generator.xml ++++ b/man/systemd-debug-generator.xml +@@ -79,10 +79,8 @@ + systemctl1's + enable command. + +- systemd-debug-generator implements the +- generator +- specification. ++ systemd-debug-generator implements ++ systemd.generator7. + + + +diff --git a/man/systemd-efi-boot-generator.xml b/man/systemd-efi-boot-generator.xml +index b2d8d65..fd7ba79 100644 +--- a/man/systemd-efi-boot-generator.xml ++++ b/man/systemd-efi-boot-generator.xml +@@ -68,9 +68,7 @@ + only be activated on-demand, when accessed. + + systemd-efi-boot-generator implements +- the generator +- specification. ++ systemd.generator7. + + + +diff --git a/man/systemd-fstab-generator.xml b/man/systemd-fstab-generator.xml +index 8f82e33..022efb4 100644 +--- a/man/systemd-fstab-generator.xml ++++ b/man/systemd-fstab-generator.xml +@@ -71,10 +71,8 @@ + for more information about special /etc/fstab + mount options this generator understands. + +- systemd-fstab-generator implements the +- generator +- specification. ++ systemd-fstab-generator implements ++ systemd.generator7. + + + +diff --git a/man/systemd-getty-generator.xml b/man/systemd-getty-generator.xml +index 0b5b2f2..3389259 100644 +--- a/man/systemd-getty-generator.xml ++++ b/man/systemd-getty-generator.xml +@@ -75,9 +75,8 @@ + for more information on the console= kernel + parameter. + +- systemd-getty-generator implements the +- generator +- specification. ++ systemd-getty-generator implements ++ systemd.generator7. + + Further information about configuration of gettys you may + find in +diff --git a/man/systemd-gpt-auto-generator.xml b/man/systemd-gpt-auto-generator.xml +index 9c706df..8d2eaca 100644 +--- a/man/systemd-gpt-auto-generator.xml ++++ b/man/systemd-gpt-auto-generator.xml +@@ -157,9 +157,7 @@ + using btrfs subvolume set-default. + + systemd-gpt-auto-generator implements +- the +- Generator +- Specification. ++ systemd.generator7. + + + +diff --git a/man/systemd-system-update-generator.xml b/man/systemd-system-update-generator.xml +index 3eec1d7..e7fc95c 100644 +--- a/man/systemd-system-update-generator.xml ++++ b/man/systemd-system-update-generator.xml +@@ -61,10 +61,8 @@ + Updates Specification. + + +- systemd-system-update-generator +- implements the +- generator +- specification. ++ systemd-system-update-generator implements ++ systemd.generator7. + + + +diff --git a/man/systemd-sysv-generator.xml b/man/systemd-sysv-generator.xml +index e619b1b..f2d56cb 100644 +--- a/man/systemd-sysv-generator.xml ++++ b/man/systemd-sysv-generator.xml +@@ -81,10 +81,8 @@ + part of early boot, so all wrapper units are ordered after + basic.target. + +- systemd-sysv-generator +- implements the generator +- specification. ++ systemd-sysv-generator implements ++ systemd.generator7. + + + +diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml +index 09e11b4..a452f87 100644 +--- a/man/systemd.unit.xml ++++ b/man/systemd.unit.xml +@@ -357,8 +357,8 @@ + from directories not on the unit load path. See the + link command for + systemctl1. +- Also, some units are dynamically created via generators Generators. ++ Also, some units are dynamically created via a ++ systemd.generator7. + + + +diff --git a/man/systemd.xml b/man/systemd.xml +index 80591dc..9b92140 100644 +--- a/man/systemd.xml ++++ b/man/systemd.xml +@@ -415,9 +415,8 @@ + + Units may be generated dynamically at boot and system + manager reload time, for example based on other configuration +- files or parameters passed on the kernel command line. For details +- see the +- Generators Specification. ++ files or parameters passed on the kernel command line. For details see ++ systemd.generator7. + + Systems which invoke systemd in a container or initrd + environment should implement the diff --git a/SOURCES/0071-Fix-bad-assert-in-show_pid_array.patch b/SOURCES/0071-Fix-bad-assert-in-show_pid_array.patch deleted file mode 100644 index 08c3d4e..0000000 --- a/SOURCES/0071-Fix-bad-assert-in-show_pid_array.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 50f0e2315d0c22d2e98e53ff02e7ae2412463e9a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Mon, 14 Oct 2013 19:15:24 -0400 -Subject: [PATCH] Fix bad assert in show_pid_array - -This function should get the same treatment as other qsort uses -did in 7ff7394 "Never call qsort on potentially NULL arrays". - -Reported-by: Oleksii Shevchuk ---- - src/shared/cgroup-show.c | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - -diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c -index cc44ab4..aa0f017 100644 ---- a/src/shared/cgroup-show.c -+++ b/src/shared/cgroup-show.c -@@ -44,8 +44,6 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi - unsigned i, m, pid_width; - pid_t biggest = 0; - -- assert(n_pids > 0); -- - /* Filter duplicates */ - m = 0; - for (i = 0; i < n_pids; i++) { -@@ -65,7 +63,7 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi - pid_width = DECIMAL_STR_WIDTH(biggest); - - /* And sort */ -- qsort(pids, n_pids, sizeof(pid_t), compare); -+ qsort_safe(pids, n_pids, sizeof(pid_t), compare); - - if(flags & OUTPUT_FULL_WIDTH) - n_columns = 0; diff --git a/SOURCES/0071-Use-correct-uname-identifiers-in-arch_map-for-SuperH.patch b/SOURCES/0071-Use-correct-uname-identifiers-in-arch_map-for-SuperH.patch new file mode 100644 index 0000000..42132df --- /dev/null +++ b/SOURCES/0071-Use-correct-uname-identifiers-in-arch_map-for-SuperH.patch @@ -0,0 +1,31 @@ +From 3df99b05df12b73e4d081ee223f9b35ed33f47ca Mon Sep 17 00:00:00 2001 +From: John Paul Adrian Glaubitz +Date: Thu, 5 Mar 2015 00:07:33 +0100 +Subject: [PATCH] Use correct uname identifiers in arch_map for SuperH + architecture + +https://bugs.freedesktop.org/show_bug.cgi?id=89421 +(cherry picked from commit 3a867c6a2361c8af943d3ed452da6e8623a3f65d) +--- + src/shared/architecture.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/src/shared/architecture.c b/src/shared/architecture.c +index 34c5a53..884abdd 100644 +--- a/src/shared/architecture.c ++++ b/src/shared/architecture.c +@@ -108,8 +108,12 @@ int uname_architecture(void) { + { "armv8l", ARCHITECTURE_ARM }, + { "armv8b", ARCHITECTURE_ARM_BE }, + #elif defined(__sh__) || defined(__sh64__) +- { "sh64", ARCHITECTURE_SH64 }, +- { "sh", ARCHITECTURE_SH }, ++ { "sh5", ARCHITECTURE_SH64 }, ++ { "sh2", ARCHITECTURE_SH }, ++ { "sh2a", ARCHITECTURE_SH }, ++ { "sh3", ARCHITECTURE_SH }, ++ { "sh4", ARCHITECTURE_SH }, ++ { "sh4a", ARCHITECTURE_SH }, + #elif defined(__m68k__) + { "m68k", ARCHITECTURE_M68K }, + #elif defined(__tilegx__) diff --git a/SOURCES/0072-Never-call-qsort-on-potentially-NULL-arrays.patch b/SOURCES/0072-Never-call-qsort-on-potentially-NULL-arrays.patch deleted file mode 100644 index 1df9c4c..0000000 --- a/SOURCES/0072-Never-call-qsort-on-potentially-NULL-arrays.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 87f830a2046141ed917661a726c3ec38b4d15e89 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Fri, 11 Oct 2013 19:33:13 -0400 -Subject: [PATCH] Never call qsort on potentially NULL arrays - -This extends 62678ded 'efi: never call qsort on potentially -NULL arrays' to all other places where qsort is used and it -is not obvious that the count is non-zero. ---- - src/shared/cgroup-show.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c -index aa0f017..f6e56db 100644 ---- a/src/shared/cgroup-show.c -+++ b/src/shared/cgroup-show.c -@@ -44,6 +44,8 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi - unsigned i, m, pid_width; - pid_t biggest = 0; - -+ assert(n_pids > 0); -+ - /* Filter duplicates */ - m = 0; - for (i = 0; i < n_pids; i++) { diff --git a/SOURCES/0072-hwdb-fix-Dell-XPS12-9Q33-key-name.patch b/SOURCES/0072-hwdb-fix-Dell-XPS12-9Q33-key-name.patch new file mode 100644 index 0000000..ce15d99 --- /dev/null +++ b/SOURCES/0072-hwdb-fix-Dell-XPS12-9Q33-key-name.patch @@ -0,0 +1,24 @@ +From e43361ab55a61ebfaf16e1c78be1bce1fdf84c67 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 4 Mar 2015 20:25:04 -0500 +Subject: [PATCH] hwdb: fix Dell XPS12 9Q33 key name + +https://bugs.freedesktop.org/show_bug.cgi?id=84437 +(cherry picked from commit 4f70555d76c90ffdc5a5e4f75bbc08b38022c911) +--- + hwdb/60-keyboard.hwdb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb +index 2cb9769..8890665 100644 +--- a/hwdb/60-keyboard.hwdb ++++ b/hwdb/60-keyboard.hwdb +@@ -259,7 +259,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnXPS*:pvr* + # Dell XPS12 9Q33 + keyboard:dmi:bvn*:bvr*:bd*:svnDell*:pnXPS12-9Q33*:pvr* + KEYBOARD_KEY_88=wlan +- KEYBOARD_KEY_65=switchvideomode # Screen Rotate ++ KEYBOARD_KEY_65=direction # Screen Rotate + + # Dell Latitude microphone mute + keyboard:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude* diff --git a/SOURCES/0073-Remove-the-cap-on-epoll-events.patch b/SOURCES/0073-Remove-the-cap-on-epoll-events.patch new file mode 100644 index 0000000..57a1a34 --- /dev/null +++ b/SOURCES/0073-Remove-the-cap-on-epoll-events.patch @@ -0,0 +1,36 @@ +From f5ce5e24f9cf18a37ef6aedb149891d07767b045 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Wed, 4 Mar 2015 16:32:16 +0100 +Subject: [PATCH] Remove the cap on epoll events + +Currently the code will silently blank out events if there are more +then 512 epoll events, causing them never to be handled at all. This +patch removes the cap on the number of events for epoll_wait, thereby +avoiding this issue. + +(cherry picked from commit 1c724e9e0ec5bc4bf791a3d7b1cf5b955cdb98b2) +--- + src/libsystemd/sd-event/sd-event.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c +index 25089a0..c6350be 100644 +--- a/src/libsystemd/sd-event/sd-event.c ++++ b/src/libsystemd/sd-event/sd-event.c +@@ -37,7 +37,6 @@ + + #include "sd-event.h" + +-#define EPOLL_QUEUE_MAX 512U + #define DEFAULT_ACCURACY_USEC (250 * USEC_PER_MSEC) + + typedef enum EventSourceType { +@@ -2367,7 +2366,7 @@ _public_ int sd_event_wait(sd_event *e, uint64_t timeout) { + return 1; + } + +- ev_queue_max = CLAMP(e->n_sources, 1U, EPOLL_QUEUE_MAX); ++ ev_queue_max = MAX(e->n_sources, 1u); + ev_queue = newa(struct epoll_event, ev_queue_max); + + m = epoll_wait(e->epoll_fd, ev_queue, ev_queue_max, diff --git a/SOURCES/0073-rules-expose-loop-block-devices-to-systemd.patch b/SOURCES/0073-rules-expose-loop-block-devices-to-systemd.patch deleted file mode 100644 index 0da76da..0000000 --- a/SOURCES/0073-rules-expose-loop-block-devices-to-systemd.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 24888798c1c90dbdc7ab0aa0b57f2196066712c4 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 16 Oct 2013 02:49:54 +0200 -Subject: [PATCH] rules: expose loop block devices to systemd - -Since the kernel no longer exposes a large number of "dead" loop devices -it is OK to expose them now in systemd, so let's do that. This has the -benefit that mount dependencies on loop devices start to work. ---- - rules/99-systemd.rules.in | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in -index bbb7d0c..3c99475 100644 ---- a/rules/99-systemd.rules.in -+++ b/rules/99-systemd.rules.in -@@ -11,12 +11,12 @@ SUBSYSTEM=="tty", KERNEL=="tty[a-zA-Z]*|hvc*|xvc*|hvsi*", TAG+="systemd" - - KERNEL=="vport*", TAG+="systemd" - --SUBSYSTEM=="block", KERNEL!="ram*|loop*", TAG+="systemd" --SUBSYSTEM=="block", KERNEL!="ram*|loop*", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", ENV{SYSTEMD_READY}="0" -+SUBSYSTEM=="block", KERNEL!="ram*", TAG+="systemd" -+SUBSYSTEM=="block", KERNEL!="ram*", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", ENV{SYSTEMD_READY}="0" - - # Ignore encrypted devices with no identified superblock on it, since - # we are probably still calling mke2fs or mkswap on it. --SUBSYSTEM=="block", KERNEL!="ram*|loop*", ENV{DM_UUID}=="CRYPT-*", ENV{ID_PART_TABLE_TYPE}=="", ENV{ID_FS_USAGE}=="", ENV{SYSTEMD_READY}="0" -+SUBSYSTEM=="block", KERNEL!="ram*", ENV{DM_UUID}=="CRYPT-*", ENV{ID_PART_TABLE_TYPE}=="", ENV{ID_FS_USAGE}=="", ENV{SYSTEMD_READY}="0" - - # Ignore raid devices that are not yet assembled and started - SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="md*", TEST!="md/array_state", ENV{SYSTEMD_READY}="0" diff --git a/SOURCES/0074-Allow-up-to-4096-simultaneous-connections.patch b/SOURCES/0074-Allow-up-to-4096-simultaneous-connections.patch new file mode 100644 index 0000000..e89f571 --- /dev/null +++ b/SOURCES/0074-Allow-up-to-4096-simultaneous-connections.patch @@ -0,0 +1,30 @@ +From b4ea0d8280135b7eabb1bb70e24d62c86e065db3 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Wed, 4 Mar 2015 16:32:17 +0100 +Subject: [PATCH] Allow up to 4096 simultaneous connections + +On large system we hit the limit on 512 simultaneous dbus +connections, resulting in tons of annoying messages: + +Too many concurrent connections, refusing + +This patch raises the limit to 4096. + +(cherry picked from commit cbecf9bf929318533fea798c57c10efcf6b2b447) +--- + src/core/dbus.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/dbus.c b/src/core/dbus.c +index 260775c..85b5174 100644 +--- a/src/core/dbus.c ++++ b/src/core/dbus.c +@@ -44,7 +44,7 @@ + #include "bus-internal.h" + #include "selinux-access.h" + +-#define CONNECTIONS_MAX 512 ++#define CONNECTIONS_MAX 4096 + + static void destroy_bus(Manager *m, sd_bus **bus); + diff --git a/SOURCES/0074-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch b/SOURCES/0074-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch deleted file mode 100644 index fa85b4f..0000000 --- a/SOURCES/0074-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch +++ /dev/null @@ -1,35 +0,0 @@ -From d59e493f9b1b6645c9d1916bdc3e8b4802643ab5 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 16 Oct 2013 02:51:24 +0200 -Subject: [PATCH] rules: don't limit some of the rules to the "add" action - -Devices should show up in systemd regardless whether the user invoked -"udevadm trigger" or not. Before this change some devices might have -suddenly disappeared due issuing that command. - -Conflicts: - rules/99-systemd.rules.in ---- - rules/99-systemd.rules.in | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in -index 3c99475..307f18f 100644 ---- a/rules/99-systemd.rules.in -+++ b/rules/99-systemd.rules.in -@@ -53,12 +53,12 @@ ACTION=="add", SUBSYSTEM=="net", KERNEL!="lo", RUN+="@rootlibexecdir@/systemd-sy - - # Pull in backlight save/restore for all firmware backlight devices - --ACTION=="add", SUBSYSTEM=="backlight", ATTR{type}=="firmware", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service" -+SUBSYSTEM=="backlight", ATTR{type}=="firmware", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-backlight@$name.service" - - # Asynchronously mount file systems implemented by these modules as - # soon as they are loaded. - --SUBSYSTEM=="module", KERNEL=="fuse", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-fs-fuse-connections.mount" --SUBSYSTEM=="module", KERNEL=="configfs", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-kernel-config.mount" -+SUBSYSTEM=="module", KERNEL=="fuse", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-fs-fuse-connections.mount" -+SUBSYSTEM=="module", KERNEL=="configfs", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-kernel-config.mount" - - LABEL="systemd_end" diff --git a/SOURCES/0075-hwdb-add-Logitech-G5-Laser-Mouse.patch b/SOURCES/0075-hwdb-add-Logitech-G5-Laser-Mouse.patch new file mode 100644 index 0000000..bd1835b --- /dev/null +++ b/SOURCES/0075-hwdb-add-Logitech-G5-Laser-Mouse.patch @@ -0,0 +1,23 @@ +From b9c441e4f5e7049c23d3f5d0a5a874b13e0356fc Mon Sep 17 00:00:00 2001 +From: Jonathon Gilbert +Date: Thu, 5 Mar 2015 20:29:56 +1000 +Subject: [PATCH] hwdb: add Logitech G5 Laser Mouse + +(cherry picked from commit 6437edbebe80e68b782f178c7a76e870a53811d7) +--- + hwdb/70-mouse.hwdb | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/hwdb/70-mouse.hwdb b/hwdb/70-mouse.hwdb +index a62ebc4..93ee4d9 100644 +--- a/hwdb/70-mouse.hwdb ++++ b/hwdb/70-mouse.hwdb +@@ -196,6 +196,8 @@ mouse:usb:v046dpc52b:name:Logitech Unifying Device. Wireless PID:4008: + mouse:usb:v046dpc52b:name:Logitech Unifying Device. Wireless PID:101b: + MOUSE_DPI=800@166 + ++# Logitech G5 Laser Mouse ++mouse:usb:v046dpc049:name:Logitech USB Gaming Mouse: + # Logitech G500s Laser Gaming Mouse + mouse:usb:v046dpc24e:name:Logitech G500s Laser Gaming Mouse: + MOUSE_DPI=400@500 *800@500 2000@500 diff --git a/SOURCES/0075-hwdb-update.patch b/SOURCES/0075-hwdb-update.patch deleted file mode 100644 index 66eb771..0000000 --- a/SOURCES/0075-hwdb-update.patch +++ /dev/null @@ -1,1629 +0,0 @@ -From 805268127b9bceb16f58bf52e3f993e87ea0b9f8 Mon Sep 17 00:00:00 2001 -From: Kay Sievers -Date: Sun, 20 Oct 2013 01:12:29 +0200 -Subject: [PATCH] hwdb: update - ---- - hwdb/20-OUI.hwdb | 391 +++++++++++++++++++++++++++++++++++++++++- - hwdb/20-pci-vendor-model.hwdb | 216 ++++++++++++++++++++--- - 2 files changed, 578 insertions(+), 29 deletions(-) - -diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb -index e913b28..5067167 100644 ---- a/hwdb/20-OUI.hwdb -+++ b/hwdb/20-OUI.hwdb -@@ -12278,7 +12278,7 @@ OUI:40D85501B* - ID_OUI_FROM_DATABASE=Audio Enhancement - - OUI:40D85501C* -- ID_OUI_FROM_DATABASE=BERG -+ ID_OUI_FROM_DATABASE=BERG Cloud Limited - - OUI:40D85501D* - ID_OUI_FROM_DATABASE=Scharco Elektronik GmbH -@@ -13324,6 +13324,93 @@ OUI:40D85517B* - OUI:40D85517C* - ID_OUI_FROM_DATABASE=Critical Link - -+OUI:40D85517D* -+ ID_OUI_FROM_DATABASE=Kiwigrid GmbH -+ -+OUI:40D85517E* -+ ID_OUI_FROM_DATABASE=TOKHATEC -+ -+OUI:40D85517F* -+ ID_OUI_FROM_DATABASE=Telvent -+ -+OUI:40D855180* -+ ID_OUI_FROM_DATABASE=BroadSoft Inc -+ -+OUI:40D855181* -+ ID_OUI_FROM_DATABASE=eROCCA -+ -+OUI:40D855182* -+ ID_OUI_FROM_DATABASE=Georg Neumann GmbH -+ -+OUI:40D855183* -+ ID_OUI_FROM_DATABASE=EMAC, Inc. -+ -+OUI:40D855184* -+ ID_OUI_FROM_DATABASE=Satkirit Ltd -+ -+OUI:40D855185* -+ ID_OUI_FROM_DATABASE=Standard Change Makers -+ -+OUI:40D855186* -+ ID_OUI_FROM_DATABASE=KST technology -+ -+OUI:40D855187* -+ ID_OUI_FROM_DATABASE=CDEX Corp. -+ -+OUI:40D855188* -+ ID_OUI_FROM_DATABASE=Array Corporation -+ -+OUI:40D855189* -+ ID_OUI_FROM_DATABASE=Yoozma Corporation -+ -+OUI:40D85518A* -+ ID_OUI_FROM_DATABASE=Aplex Technology Inc. -+ -+OUI:40D85518B* -+ ID_OUI_FROM_DATABASE=Diagnosys Test Systems Ltd -+ -+OUI:40D85518C* -+ ID_OUI_FROM_DATABASE=EOS S.r.l. -+ -+OUI:40D85518D* -+ ID_OUI_FROM_DATABASE=Zoe Medical -+ -+OUI:40D85518E* -+ ID_OUI_FROM_DATABASE=Kerun Visual Technology Co., Ltd.(Shenzhen) -+ -+OUI:40D85518F* -+ ID_OUI_FROM_DATABASE=Beat Sensing co. , ltd. -+ -+OUI:40D855190* -+ ID_OUI_FROM_DATABASE=Spider Tecnologia Ind. e Com Ltda -+ -+OUI:40D855191* -+ ID_OUI_FROM_DATABASE=Soukai Electric -+ -+OUI:40D855192* -+ ID_OUI_FROM_DATABASE=GENERAL DYNAMICS C4 SYSTEMS -+ -+OUI:40D855193* -+ ID_OUI_FROM_DATABASE=FORZA SILICON CORP. -+ -+OUI:40D855194* -+ ID_OUI_FROM_DATABASE=RF Code -+ -+OUI:40D855195* -+ ID_OUI_FROM_DATABASE=TONNA ELECTRONIQUE -+ -+OUI:40D855196* -+ ID_OUI_FROM_DATABASE=Advanced Micro Controls Inc. -+ -+OUI:40D855197* -+ ID_OUI_FROM_DATABASE=Berg Cloud Limited -+ -+OUI:40D855198* -+ ID_OUI_FROM_DATABASE=devboards GmbH -+ -+OUI:40D855199* -+ ID_OUI_FROM_DATABASE=PRESSOL Schmiergeraete GmbH -+ - OUI:000000* - ID_OUI_FROM_DATABASE=XEROX CORPORATION - -@@ -46883,7 +46970,7 @@ OUI:0080B7* - ID_OUI_FROM_DATABASE=STELLAR COMPUTER - - OUI:0080B8* -- ID_OUI_FROM_DATABASE=BUG, INCORPORATED -+ ID_OUI_FROM_DATABASE=B.U.G. MORISEIKI, INCORPORATED - - OUI:0080B9* - ID_OUI_FROM_DATABASE=ARCHE TECHNOLIGIES INC. -@@ -51589,6 +51676,9 @@ OUI:04F7E4* - OUI:04F8C2* - ID_OUI_FROM_DATABASE=Flaircomm Microelectronics, Inc. - -+OUI:04F938* -+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD -+ - OUI:04FE31* - ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd - -@@ -52132,6 +52222,9 @@ OUI:08512E* - OUI:085240* - ID_OUI_FROM_DATABASE=EbV Elektronikbau- und Vertriebs GmbH - -+OUI:085AE0* -+ ID_OUI_FROM_DATABASE=Recovision Technology Co., Ltd. -+ - OUI:085B0E* - ID_OUI_FROM_DATABASE=Fortinet, Inc. - -@@ -52297,6 +52390,9 @@ OUI:08FC52* - OUI:08FC88* - ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd - -+OUI:08FD0E* -+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd -+ - OUI:0C0400* - ID_OUI_FROM_DATABASE=Jantar d.o.o. - -@@ -52306,6 +52402,9 @@ OUI:0C0535* - OUI:0C1105* - ID_OUI_FROM_DATABASE=Ringslink (Xiamen) Network Communication Technologies Co., Ltd - -+OUI:0C1262* -+ ID_OUI_FROM_DATABASE=zte corporation -+ - OUI:0C130B* - ID_OUI_FROM_DATABASE=Uniqoteq Ltd. - -@@ -52366,6 +52465,9 @@ OUI:0C4DE9* - OUI:0C51F7* - ID_OUI_FROM_DATABASE=CHAUVIN ARNOUX - -+OUI:0C54A5* -+ ID_OUI_FROM_DATABASE=PEGATRON CORPORATION -+ - OUI:0C5521* - ID_OUI_FROM_DATABASE=Axiros GmbH - -@@ -52627,6 +52729,9 @@ OUI:100D7F* - OUI:100E2B* - ID_OUI_FROM_DATABASE=NEC CASIO Mobile Communications - -+OUI:100E7E* -+ ID_OUI_FROM_DATABASE=Juniper networks -+ - OUI:1010B6* - ID_OUI_FROM_DATABASE=McCain Inc - -@@ -53023,6 +53128,9 @@ OUI:149090* - OUI:149448* - ID_OUI_FROM_DATABASE=BLU CASTLE S.A. - -+OUI:1499E2* -+ ID_OUI_FROM_DATABASE=Apple, Inc -+ - OUI:149FE8* - ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd. - -@@ -53095,6 +53203,9 @@ OUI:14EE9D* - OUI:14F0C5* - ID_OUI_FROM_DATABASE=Xtremio Ltd. - -+OUI:14F28E* -+ ID_OUI_FROM_DATABASE=ShenYang ZhongKe-Allwin Technology Co.LTD -+ - OUI:14F42A* - ID_OUI_FROM_DATABASE=Samsung Electronics - -@@ -53257,6 +53368,9 @@ OUI:1867B0* - OUI:186D99* - ID_OUI_FROM_DATABASE=Adanis Inc. - -+OUI:1879A2* -+ ID_OUI_FROM_DATABASE=GMJ ELECTRIC LIMITED -+ - OUI:187A93* - ID_OUI_FROM_DATABASE=AMICCOM Electronics Corporation - -@@ -53440,6 +53554,9 @@ OUI:1C19DE* - OUI:1C1D67* - ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd - -+OUI:1C1D86* -+ ID_OUI_FROM_DATABASE=Cisco -+ - OUI:1C334D* - ID_OUI_FROM_DATABASE=ITS Telecom - -@@ -53803,6 +53920,9 @@ OUI:20858C* - OUI:208984* - ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD - -+OUI:208986* -+ ID_OUI_FROM_DATABASE=zte corporation -+ - OUI:20918A* - ID_OUI_FROM_DATABASE=PROFALUX - -@@ -53929,6 +54049,9 @@ OUI:20FEDB* - OUI:2401C7* - ID_OUI_FROM_DATABASE=Cisco - -+OUI:24050F* -+ ID_OUI_FROM_DATABASE=MTN Electronic Co. Ltd -+ - OUI:240917* - ID_OUI_FROM_DATABASE=Devlin Electronics Limited - -@@ -54034,6 +54157,9 @@ OUI:249442* - OUI:249504* - ID_OUI_FROM_DATABASE=SFR - -+OUI:24A2E1* -+ ID_OUI_FROM_DATABASE=Apple, Inc -+ - OUI:24A42C* - ID_OUI_FROM_DATABASE=KOUKAAM a.s. - -@@ -54043,6 +54169,9 @@ OUI:24A43C* - OUI:24A495* - ID_OUI_FROM_DATABASE=Thales Canada Inc. - -+OUI:24A87D* -+ ID_OUI_FROM_DATABASE=Panasonic Automotive Systems Asia Pacific(Thailand)Co.,Ltd. -+ - OUI:24A937* - ID_OUI_FROM_DATABASE=PURE Storage - -@@ -54121,6 +54250,9 @@ OUI:24DBAC* - OUI:24DBAD* - ID_OUI_FROM_DATABASE=ShopperTrak RCT Corporation - -+OUI:24DBED* -+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd -+ - OUI:24DEC6* - ID_OUI_FROM_DATABASE=Aruba Networks - -@@ -54130,6 +54262,9 @@ OUI:24E271* - OUI:24E6BA* - ID_OUI_FROM_DATABASE=JSC Zavod im. Kozitsky - -+OUI:24E9B3* -+ ID_OUI_FROM_DATABASE=Cisco -+ - OUI:24EA40* - ID_OUI_FROM_DATABASE=Systeme Helmholz GmbH - -@@ -54547,6 +54682,9 @@ OUI:2C553C* - OUI:2C59E5* - ID_OUI_FROM_DATABASE=Hewlett Packard - -+OUI:2C5A05* -+ ID_OUI_FROM_DATABASE=Nokia Corporation -+ - OUI:2C5AA3* - ID_OUI_FROM_DATABASE=PROMATE ELECTRONIC CO.LTD - -@@ -54940,6 +55078,9 @@ OUI:3407FB* - OUI:340804* - ID_OUI_FROM_DATABASE=D-Link Corporation - -+OUI:3413A8* -+ ID_OUI_FROM_DATABASE=Mediplan Limited -+ - OUI:3413E8* - ID_OUI_FROM_DATABASE=Intel Corporate - -@@ -55321,6 +55462,9 @@ OUI:386E21* - OUI:3872C0* - ID_OUI_FROM_DATABASE=COMTREND - -+OUI:387B47* -+ ID_OUI_FROM_DATABASE=AKELA, Inc. -+ - OUI:388345* - ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO., LTD. - -@@ -55390,6 +55534,9 @@ OUI:38C7BA* - OUI:38C85C* - ID_OUI_FROM_DATABASE=Cisco SPVTG - -+OUI:38C9A9* -+ ID_OUI_FROM_DATABASE=SMART High Reliability Solutions, Inc. -+ - OUI:38CA97* - ID_OUI_FROM_DATABASE=Contour Design LLC - -@@ -55459,6 +55606,9 @@ OUI:3C081E* - OUI:3C096D* - ID_OUI_FROM_DATABASE=Powerhouse Dynamics - -+OUI:3C0E23* -+ ID_OUI_FROM_DATABASE=Cisco -+ - OUI:3C0FC1* - ID_OUI_FROM_DATABASE=KBC Networks - -@@ -55507,6 +55657,9 @@ OUI:3C300C* - OUI:3C363D* - ID_OUI_FROM_DATABASE=Nokia Corporation - -+OUI:3C36E4* -+ ID_OUI_FROM_DATABASE=Arris Group, Inc. -+ - OUI:3C3888* - ID_OUI_FROM_DATABASE=ConnectQuest, llc - -@@ -55672,6 +55825,9 @@ OUI:3CD0F8* - OUI:3CD16E* - ID_OUI_FROM_DATABASE=Telepower Communication Co., Ltd - -+OUI:3CD4D6* -+ ID_OUI_FROM_DATABASE=WirelessWERX, Inc -+ - OUI:3CD7DA* - ID_OUI_FROM_DATABASE=SK Mtek microelectronics(shenzhen)limited - -@@ -55771,6 +55927,9 @@ OUI:402CF4* - OUI:403004* - ID_OUI_FROM_DATABASE=Apple - -+OUI:403067* -+ ID_OUI_FROM_DATABASE=Conlog (Pty) Ltd -+ - OUI:40336C* - ID_OUI_FROM_DATABASE=Godrej & Boyce Mfg. co. ltd - -@@ -55918,6 +56077,9 @@ OUI:40B3FC* - OUI:40B4F0* - ID_OUI_FROM_DATABASE=Juniper Networks - -+OUI:40B6B1* -+ ID_OUI_FROM_DATABASE=SUNGSAM CO,.Ltd -+ - OUI:40B7F3* - ID_OUI_FROM_DATABASE=ARRIS Group, Inc. - -@@ -55972,6 +56134,9 @@ OUI:40ECF8* - OUI:40EF4C* - ID_OUI_FROM_DATABASE=Fihonest communication co.,Ltd - -+OUI:40F02F* -+ ID_OUI_FROM_DATABASE=Liteon Technology Corporation -+ - OUI:40F14C* - ID_OUI_FROM_DATABASE=ISE Europe SPRL - -@@ -56203,6 +56368,12 @@ OUI:44C233* - OUI:44C39B* - ID_OUI_FROM_DATABASE=OOO RUBEZH NPO - -+OUI:44C4A9* -+ ID_OUI_FROM_DATABASE=Opticom Communication, LLC -+ -+OUI:44C56F* -+ ID_OUI_FROM_DATABASE=NGN Easy Satfinder (Tianjin) Electronic Co., Ltd -+ - OUI:44C9A2* - ID_OUI_FROM_DATABASE=Greenwald Industries - -@@ -56362,6 +56533,9 @@ OUI:48B253* - OUI:48B8DE* - ID_OUI_FROM_DATABASE=HOMEWINS TECHNOLOGY CO.,LTD. - -+OUI:48B977* -+ ID_OUI_FROM_DATABASE=PulseOn Oy -+ - OUI:48B9C2* - ID_OUI_FROM_DATABASE=Teletics Inc. - -@@ -56659,9 +56833,15 @@ OUI:4CCC34* - OUI:4CD637* - ID_OUI_FROM_DATABASE=Qsono Electronics Co., Ltd - -+OUI:4CD9C4* -+ ID_OUI_FROM_DATABASE=Magneti Marelli Automotive Electronics (Guangzhou) Co. Ltd -+ - OUI:4CDF3D* - ID_OUI_FROM_DATABASE=TEAM ENGINEERS ADVANCE TECHNOLOGIES INDIA PVT LTD - -+OUI:4CE1BB* -+ ID_OUI_FROM_DATABASE=Zhuhai HiFocus Technology Co., Ltd. -+ - OUI:4CE676* - ID_OUI_FROM_DATABASE=Buffalo Inc. - -@@ -56701,6 +56881,9 @@ OUI:5011EB* - OUI:5017FF* - ID_OUI_FROM_DATABASE=Cisco - -+OUI:501AC5* -+ ID_OUI_FROM_DATABASE=Microsoft -+ - OUI:50206B* - ID_OUI_FROM_DATABASE=Emerson Climate Technologies Transportation Solutions - -@@ -56812,6 +56995,9 @@ OUI:507D02* - OUI:507E5D* - ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation - -+OUI:508569* -+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD -+ - OUI:5087B8* - ID_OUI_FROM_DATABASE=Nuvyyo Inc - -@@ -56995,6 +57181,9 @@ OUI:5435DF* - OUI:543968* - ID_OUI_FROM_DATABASE=Edgewater Networks Inc - -+OUI:5439DF* -+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD -+ - OUI:543D37* - ID_OUI_FROM_DATABASE=Ruckus Wireless - -@@ -57055,6 +57244,9 @@ OUI:5481AD* - OUI:54847B* - ID_OUI_FROM_DATABASE=Digital Devices GmbH - -+OUI:54880E* -+ ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD. -+ - OUI:548922* - ID_OUI_FROM_DATABASE=Zelfy Inc - -@@ -57439,6 +57631,9 @@ OUI:5C2479* - OUI:5C260A* - ID_OUI_FROM_DATABASE=Dell Inc. - -+OUI:5C2AEF* -+ ID_OUI_FROM_DATABASE=Open Access Pty Ltd -+ - OUI:5C3327* - ID_OUI_FROM_DATABASE=Spazio Italia srl - -@@ -57547,6 +57742,9 @@ OUI:5CA39D* - OUI:5CA3EB* - ID_OUI_FROM_DATABASE=Lokel s.r.o. - -+OUI:5CA48A* -+ ID_OUI_FROM_DATABASE=Cisco -+ - OUI:5CAC4C* - ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. - -@@ -58228,6 +58426,9 @@ OUI:64E161* - OUI:64E599* - ID_OUI_FROM_DATABASE=EFM Networks - -+OUI:64E625* -+ ID_OUI_FROM_DATABASE=Woxu Wireless Co., Ltd -+ - OUI:64E682* - ID_OUI_FROM_DATABASE=Apple - -@@ -58318,6 +58519,9 @@ OUI:683EEC* - OUI:684352* - ID_OUI_FROM_DATABASE=Bhuu Limited - -+OUI:684898* -+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd -+ - OUI:684B88* - ID_OUI_FROM_DATABASE=Galtronics Telemetry Inc. - -@@ -58573,6 +58777,9 @@ OUI:6C3A84* - OUI:6C3BE5* - ID_OUI_FROM_DATABASE=Hewlett Packard - -+OUI:6C3C53* -+ ID_OUI_FROM_DATABASE=SoundHawk Corp -+ - OUI:6C3E6D* - ID_OUI_FROM_DATABASE=Apple - -@@ -58912,6 +59119,9 @@ OUI:706582* - OUI:70704C* - ID_OUI_FROM_DATABASE=Purple Communications, Inc - -+OUI:7071B3* -+ ID_OUI_FROM_DATABASE=Brain Corporation -+ - OUI:7071BC* - ID_OUI_FROM_DATABASE=PEGATRON CORPORATION - -@@ -58936,6 +59146,9 @@ OUI:7076F0* - OUI:707BE8* - ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD - -+OUI:707C18* -+ ID_OUI_FROM_DATABASE=ADATA Technology Co., Ltd -+ - OUI:707E43* - ID_OUI_FROM_DATABASE=ARRIS Group, Inc. - -@@ -59128,6 +59341,9 @@ OUI:74372F* - OUI:743889* - ID_OUI_FROM_DATABASE=ANNAX Anzeigesysteme GmbH - -+OUI:743ECB* -+ ID_OUI_FROM_DATABASE=Gentrice tech -+ - OUI:744401* - ID_OUI_FROM_DATABASE=NETGEAR - -@@ -59533,6 +59749,9 @@ OUI:78A6BD* - OUI:78A714* - ID_OUI_FROM_DATABASE=Amphenol - -+OUI:78A873* -+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd -+ - OUI:78AB60* - ID_OUI_FROM_DATABASE=ABB Australia - -@@ -59644,6 +59863,9 @@ OUI:78E8B6* - OUI:78EC22* - ID_OUI_FROM_DATABASE=Shanghai Qihui Telecom Technology Co., LTD - -+OUI:78EC74* -+ ID_OUI_FROM_DATABASE=Kyland-USA -+ - OUI:78EF4C* - ID_OUI_FROM_DATABASE=Unetconvergence Co., Ltd. - -@@ -59749,6 +59971,9 @@ OUI:7C3E9D* - OUI:7C438F* - ID_OUI_FROM_DATABASE=E-Band Communications Corp. - -+OUI:7C444C* -+ ID_OUI_FROM_DATABASE=Entertainment Solutions, S.L. -+ - OUI:7C49B9* - ID_OUI_FROM_DATABASE=Plexus Manufacturing Sdn Bhd - -@@ -59911,6 +60136,9 @@ OUI:7CC8D7* - OUI:7CCB0D* - ID_OUI_FROM_DATABASE=Antaira Technologies, LLC - -+OUI:7CCD11* -+ ID_OUI_FROM_DATABASE=MS-Magnet -+ - OUI:7CCD3C* - ID_OUI_FROM_DATABASE=Guangzhou Juzing Technology Co., Ltd - -@@ -60181,6 +60409,9 @@ OUI:80B95C* - OUI:80BAAC* - ID_OUI_FROM_DATABASE=TeleAdapt Ltd - -+OUI:80BAE6* -+ ID_OUI_FROM_DATABASE=Neets -+ - OUI:80BBEB* - ID_OUI_FROM_DATABASE=Satmap Systems Ltd - -@@ -60373,6 +60604,9 @@ OUI:847E40* - OUI:8482F4* - ID_OUI_FROM_DATABASE=Beijing Huasun Unicreate Technology Co., Ltd - -+OUI:848336* -+ ID_OUI_FROM_DATABASE=Newrun -+ - OUI:848371* - ID_OUI_FROM_DATABASE=Avaya, Inc - -@@ -60475,6 +60709,9 @@ OUI:84F64C* - OUI:84FCFE* - ID_OUI_FROM_DATABASE=Apple - -+OUI:84FE9E* -+ ID_OUI_FROM_DATABASE=RTC Industries, Inc. -+ - OUI:880355* - ID_OUI_FROM_DATABASE=Arcadyan Technology Corp. - -@@ -60634,6 +60871,9 @@ OUI:889821* - OUI:889B39* - ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd - -+OUI:889CA6* -+ ID_OUI_FROM_DATABASE=BTB Korea INC -+ - OUI:889FFA* - ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. - -@@ -60664,6 +60904,9 @@ OUI:88BFD5* - OUI:88C36E* - ID_OUI_FROM_DATABASE=Beijing Ereneben lnformation Technology Limited - -+OUI:88C626* -+ ID_OUI_FROM_DATABASE=Logitech - Ultimate Ears -+ - OUI:88C663* - ID_OUI_FROM_DATABASE=Apple - -@@ -60760,6 +61003,9 @@ OUI:8C2F39* - OUI:8C3330* - ID_OUI_FROM_DATABASE=EmFirst Co., Ltd. - -+OUI:8C3AE3* -+ ID_OUI_FROM_DATABASE=LG Electronics -+ - OUI:8C3C07* - ID_OUI_FROM_DATABASE=Skiva Technologies, Inc. - -@@ -60778,6 +61024,9 @@ OUI:8C4B59* - OUI:8C4CDC* - ID_OUI_FROM_DATABASE=PLANEX COMMUNICATIONS INC. - -+OUI:8C4DB9* -+ ID_OUI_FROM_DATABASE=Unmonday Ltd -+ - OUI:8C4DEA* - ID_OUI_FROM_DATABASE=Cerio Corporation - -@@ -60790,6 +61039,9 @@ OUI:8C53F7* - OUI:8C541D* - ID_OUI_FROM_DATABASE=LGE - -+OUI:8C569D* -+ ID_OUI_FROM_DATABASE=Imaging Solutions Group -+ - OUI:8C56C5* - ID_OUI_FROM_DATABASE=Nintendo Co., Ltd. - -@@ -60943,6 +61195,9 @@ OUI:8CDD8D* - OUI:8CDE52* - ID_OUI_FROM_DATABASE=ISSC Technologies Corp. - -+OUI:8CDE99* -+ ID_OUI_FROM_DATABASE=Comlab Inc. -+ - OUI:8CE081* - ID_OUI_FROM_DATABASE=zte corporation - -@@ -61138,6 +61393,9 @@ OUI:907F61* - OUI:908260* - ID_OUI_FROM_DATABASE=IEEE 1904.1 Working Group - -+OUI:90837A* -+ ID_OUI_FROM_DATABASE=General Electric Water & Process Technologies -+ - OUI:90840D* - ID_OUI_FROM_DATABASE=Apple - -@@ -61204,6 +61462,9 @@ OUI:90B21F* - OUI:90B8D0* - ID_OUI_FROM_DATABASE=Joyent, Inc. - -+OUI:90B931* -+ ID_OUI_FROM_DATABASE=Apple, Inc -+ - OUI:90B97D* - ID_OUI_FROM_DATABASE=Johnson Outdoors Marine Electronics d/b/a Minnkota - -@@ -61543,6 +61804,9 @@ OUI:94F720* - OUI:94FAE8* - ID_OUI_FROM_DATABASE=Shenzhen Eycom Technology Co., Ltd - -+OUI:94FBB2* -+ ID_OUI_FROM_DATABASE=Shenzhen Gongjin Electronics Co.,Ltd -+ - OUI:94FD1D* - ID_OUI_FROM_DATABASE=WhereWhen Corp - -@@ -61747,6 +62011,9 @@ OUI:98D6F7* - OUI:98D88C* - ID_OUI_FROM_DATABASE=Nortel Networks - -+OUI:98DA92* -+ ID_OUI_FROM_DATABASE=Vuzix Corporation -+ - OUI:98DCD9* - ID_OUI_FROM_DATABASE=UNITEC Co., Ltd. - -@@ -61780,6 +62047,9 @@ OUI:98FE03* - OUI:98FE94* - ID_OUI_FROM_DATABASE=Apple - -+OUI:98FF6A* -+ ID_OUI_FROM_DATABASE=OTEC(Shanghai)Technology Co.,Ltd. -+ - OUI:98FFD0* - ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd. - -@@ -61849,6 +62119,9 @@ OUI:9C417C* - OUI:9C443D* - ID_OUI_FROM_DATABASE=CHENGDU XUGUANG TECHNOLOGY CO, LTD - -+OUI:9C44A6* -+ ID_OUI_FROM_DATABASE=SwiftTest, Inc. -+ - OUI:9C4563* - ID_OUI_FROM_DATABASE=DIMEP Sistemas - -@@ -61927,6 +62200,9 @@ OUI:9C7BD2* - OUI:9C807D* - ID_OUI_FROM_DATABASE=SYSCABLE Korea Inc. - -+OUI:9C80DF* -+ ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation -+ - OUI:9C8888* - ID_OUI_FROM_DATABASE=Simac Techniek NV - -@@ -62098,6 +62374,9 @@ OUI:A01917* - OUI:A01C05* - ID_OUI_FROM_DATABASE=NIMAX TELECOM CO.,LTD. - -+OUI:A01D48* -+ ID_OUI_FROM_DATABASE=Hewlett Packard -+ - OUI:A02195* - ID_OUI_FROM_DATABASE=Samsung Electronics Digital Imaging - -@@ -62416,6 +62695,9 @@ OUI:A433D1* - OUI:A438FC* - ID_OUI_FROM_DATABASE=Plastic Logic - -+OUI:A43A69* -+ ID_OUI_FROM_DATABASE=Vers Inc -+ - OUI:A4466B* - ID_OUI_FROM_DATABASE=EOC Technology - -@@ -62461,6 +62743,9 @@ OUI:A46706* - OUI:A46E79* - ID_OUI_FROM_DATABASE=DFT System Co.Ltd - -+OUI:A47733* -+ ID_OUI_FROM_DATABASE=Google -+ - OUI:A47760* - ID_OUI_FROM_DATABASE=Nokia Corporation - -@@ -62911,6 +63196,9 @@ OUI:AC20AA* - OUI:AC220B* - ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC. - -+OUI:AC2DA3* -+ ID_OUI_FROM_DATABASE=TXTR GmbH -+ - OUI:AC2FA8* - ID_OUI_FROM_DATABASE=Humannix Co.,Ltd. - -@@ -62986,6 +63274,9 @@ OUI:AC6123* - OUI:AC6706* - ID_OUI_FROM_DATABASE=Ruckus Wireless - -+OUI:AC6BAC* -+ ID_OUI_FROM_DATABASE=Jenny Science AG -+ - OUI:AC6E1A* - ID_OUI_FROM_DATABASE=Shenzhen Gongjin Electronics Co.,Ltd - -@@ -63085,6 +63376,9 @@ OUI:ACBEB6* - OUI:ACC2EC* - ID_OUI_FROM_DATABASE=CLT INT'L IND. CORP. - -+OUI:ACC595* -+ ID_OUI_FROM_DATABASE=Graphite Systems -+ - OUI:ACC698* - ID_OUI_FROM_DATABASE=Kohzu Precision Co., Ltd. - -@@ -63172,6 +63466,9 @@ OUI:ACF7F3* - OUI:ACF97E* - ID_OUI_FROM_DATABASE=ELESYS INC. - -+OUI:ACFDEC* -+ ID_OUI_FROM_DATABASE=Apple, Inc -+ - OUI:B00594* - ID_OUI_FROM_DATABASE=Liteon Technology Corporation - -@@ -63193,6 +63490,9 @@ OUI:B01B7C* - OUI:B01C91* - ID_OUI_FROM_DATABASE=Elim Co - -+OUI:B024F3* -+ ID_OUI_FROM_DATABASE=Progeny Systems -+ - OUI:B0358D* - ID_OUI_FROM_DATABASE=Nokia Corporation - -@@ -63286,6 +63586,9 @@ OUI:B09134* - OUI:B0973A* - ID_OUI_FROM_DATABASE=E-Fuel Corporation - -+OUI:B0989F* -+ ID_OUI_FROM_DATABASE=LG CNS -+ - OUI:B09928* - ID_OUI_FROM_DATABASE=Fujitsu Limited - -@@ -63313,6 +63616,9 @@ OUI:B0AA36* - OUI:B0ACFA* - ID_OUI_FROM_DATABASE=Fujitsu Limited - -+OUI:B0ADAA* -+ ID_OUI_FROM_DATABASE=Avaya, Inc -+ - OUI:B0B2DC* - ID_OUI_FROM_DATABASE=Zyxel Communications Corporation - -@@ -63364,6 +63670,9 @@ OUI:B0D09C* - OUI:B0D2F5* - ID_OUI_FROM_DATABASE=Vello Systems, Inc. - -+OUI:B0D7C5* -+ ID_OUI_FROM_DATABASE=STP KFT -+ - OUI:B0DF3A* - ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd - -@@ -63466,6 +63775,9 @@ OUI:B43741* - OUI:B439D6* - ID_OUI_FROM_DATABASE=ProCurve Networking by HP - -+OUI:B43A28* -+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd -+ - OUI:B43DB2* - ID_OUI_FROM_DATABASE=Degreane Horizon - -@@ -63784,6 +64096,9 @@ OUI:B8782E* - OUI:B8797E* - ID_OUI_FROM_DATABASE=Secure Meters (UK) Limited - -+OUI:B87AC9* -+ ID_OUI_FROM_DATABASE=Siemens Ltd. -+ - OUI:B8871E* - ID_OUI_FROM_DATABASE=Good Mind Industries Co., Ltd. - -@@ -63823,6 +64138,9 @@ OUI:B8975A* - OUI:B898B0* - ID_OUI_FROM_DATABASE=Atlona Inc. - -+OUI:B898F7* -+ ID_OUI_FROM_DATABASE=Gionee Communication Equipment Co,Ltd.ShenZhen -+ - OUI:B89AED* - ID_OUI_FROM_DATABASE=OceanServer Technology, Inc - -@@ -63985,12 +64303,18 @@ OUI:BC125E* - OUI:BC1401* - ID_OUI_FROM_DATABASE=Hitron Technologies. Inc - -+OUI:BC14EF* -+ ID_OUI_FROM_DATABASE=ITON Technology Limited -+ - OUI:BC15A6* - ID_OUI_FROM_DATABASE=Taiwan Jantek Electronics,Ltd. - - OUI:BC1665* - ID_OUI_FROM_DATABASE=Cisco - -+OUI:BC1A67* -+ ID_OUI_FROM_DATABASE=YF Technology Co., Ltd -+ - OUI:BC20A4* - ID_OUI_FROM_DATABASE=Samsung Electronics - -@@ -64021,6 +64345,9 @@ OUI:BC2D98* - OUI:BC305B* - ID_OUI_FROM_DATABASE=Dell Inc. - -+OUI:BC307D* -+ ID_OUI_FROM_DATABASE=Wistron Neweb Corp. -+ - OUI:BC35E5* - ID_OUI_FROM_DATABASE=Hydro Systems Company - -@@ -64207,6 +64534,9 @@ OUI:BCE59F* - OUI:BCEA2B* - ID_OUI_FROM_DATABASE=CityCom GmbH - -+OUI:BCEE7B* -+ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC. -+ - OUI:BCF2AF* - ID_OUI_FROM_DATABASE=devolo AG - -@@ -64324,6 +64654,9 @@ OUI:C0626B* - OUI:C06394* - ID_OUI_FROM_DATABASE=Apple - -+OUI:C064C6* -+ ID_OUI_FROM_DATABASE=Nokia Corporation -+ - OUI:C06599* - ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd - -@@ -64462,6 +64795,9 @@ OUI:C0E54E* - OUI:C0EAE4* - ID_OUI_FROM_DATABASE=Sonicwall - -+OUI:C0F1C4* -+ ID_OUI_FROM_DATABASE=Pacidal Corporation Ltd. -+ - OUI:C0F8DA* - ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. - -@@ -64642,6 +64978,9 @@ OUI:C47F51* - OUI:C4823F* - ID_OUI_FROM_DATABASE=Fujian Newland Auto-ID Tech. Co,.Ltd. - -+OUI:C4824E* -+ ID_OUI_FROM_DATABASE=Changzhou Uchip Electronics Co., LTD. -+ - OUI:C48508* - ID_OUI_FROM_DATABASE=Intel Corporate - -@@ -65005,6 +65344,9 @@ OUI:C8F386* - OUI:C8F406* - ID_OUI_FROM_DATABASE=Avaya, Inc - -+OUI:C8F68D* -+ ID_OUI_FROM_DATABASE=S.E.TECHNOLOGIES LIMITED -+ - OUI:C8F704* - ID_OUI_FROM_DATABASE=Building Block Video - -@@ -65143,6 +65485,9 @@ OUI:CC5D57* - OUI:CC60BB* - ID_OUI_FROM_DATABASE=Empower RF Systems - -+OUI:CC65AD* -+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc. -+ - OUI:CC69B0* - ID_OUI_FROM_DATABASE=Global Traffic Technologies, LLC - -@@ -65533,6 +65878,9 @@ OUI:D0DFB2* - OUI:D0DFC7* - ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd - -+OUI:D0E140* -+ ID_OUI_FROM_DATABASE=Apple, Inc -+ - OUI:D0E347* - ID_OUI_FROM_DATABASE=Yoga - -@@ -65716,6 +66064,9 @@ OUI:D479C3* - OUI:D47B75* - ID_OUI_FROM_DATABASE=HARTING Electronics GmbH - -+OUI:D481CA* -+ ID_OUI_FROM_DATABASE=iDevices, LLC -+ - OUI:D4823E* - ID_OUI_FROM_DATABASE=Argosy Technologies, Ltd. - -@@ -65965,6 +66316,9 @@ OUI:D8543A* - OUI:D857EF* - ID_OUI_FROM_DATABASE=Samsung Electronics - -+OUI:D858D7* -+ ID_OUI_FROM_DATABASE=CZ.NIC, z.s.p.o. -+ - OUI:D85D4C* - ID_OUI_FROM_DATABASE=TP-LINK Technologies Co.,Ltd. - -@@ -66004,6 +66358,9 @@ OUI:D878E5* - OUI:D87988* - ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd. - -+OUI:D87CDD* -+ ID_OUI_FROM_DATABASE=SANIX INCORPORATED -+ - OUI:D88A3B* - ID_OUI_FROM_DATABASE=UNIT-EM - -@@ -66475,6 +66832,9 @@ OUI:E067B3* - OUI:E06995* - ID_OUI_FROM_DATABASE=PEGATRON CORPORATION - -+OUI:E0750A* -+ ID_OUI_FROM_DATABASE=ALPS ERECTORIC CO.,LTD. -+ - OUI:E0757D* - ID_OUI_FROM_DATABASE=Motorola Mobility LLC - -@@ -66577,6 +66937,9 @@ OUI:E0C6B3* - OUI:E0C79D* - ID_OUI_FROM_DATABASE=Texas Instruments - -+OUI:E0C86A* -+ ID_OUI_FROM_DATABASE=SHENZHEN TW-SCIE Co., Ltd -+ - OUI:E0C922* - ID_OUI_FROM_DATABASE=Jireh Energy Tech., Ltd. - -@@ -66661,6 +67024,9 @@ OUI:E0F9BE* - OUI:E0FAEC* - ID_OUI_FROM_DATABASE=Platan sp. z o.o. sp. k. - -+OUI:E40439* -+ ID_OUI_FROM_DATABASE=TomTom Software Ltd -+ - OUI:E4115B* - ID_OUI_FROM_DATABASE=Hewlett Packard - -@@ -66997,6 +67363,9 @@ OUI:E85E53* - OUI:E8611F* - ID_OUI_FROM_DATABASE=Dawning Information Industry Co.,Ltd - -+OUI:E86183* -+ ID_OUI_FROM_DATABASE=Black Diamond Advanced Technology, LLC -+ - OUI:E86CDA* - ID_OUI_FROM_DATABASE=Supercomputers and Neurocomputers Research Center - -@@ -67435,6 +67804,9 @@ OUI:F02408* - OUI:F02572* - ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. - -+OUI:F025B7* -+ ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD. -+ - OUI:F0264C* - ID_OUI_FROM_DATABASE=Dr. Sigrist AG - -@@ -67486,6 +67858,9 @@ OUI:F05DC8* - OUI:F05F5A* - ID_OUI_FROM_DATABASE=Getriebebau NORD GmbH and Co. KG - -+OUI:F06130* -+ ID_OUI_FROM_DATABASE=Advantage Pharmacy Services, LLC -+ - OUI:F0620D* - ID_OUI_FROM_DATABASE=Shenzhen Egreat Tech Corp.,Ltd - -@@ -67681,6 +68056,9 @@ OUI:F40321* - OUI:F4044C* - ID_OUI_FROM_DATABASE=ValenceTech Limited - -+OUI:F4068D* -+ ID_OUI_FROM_DATABASE=devolo AG -+ - OUI:F40B93* - ID_OUI_FROM_DATABASE=Research In Motion - -@@ -68107,6 +68485,9 @@ OUI:F89FB8* - OUI:F8A03D* - ID_OUI_FROM_DATABASE=Dinstar Technologies Co., Ltd. - -+OUI:F8A2B4* -+ ID_OUI_FROM_DATABASE=RHEWA-WAAGENFABRIK August Freudewald GmbH &Co. KG -+ - OUI:F8A45F* - ID_OUI_FROM_DATABASE=Beijing Xiaomi communications co.,ltd - -@@ -68245,6 +68626,9 @@ OUI:FC0647* - OUI:FC0877* - ID_OUI_FROM_DATABASE=Prentke Romich Company - -+OUI:FC09D8* -+ ID_OUI_FROM_DATABASE=ACTEON Group -+ - OUI:FC0A81* - ID_OUI_FROM_DATABASE=Motorola Solutions Inc. - -@@ -68314,6 +68698,9 @@ OUI:FC455F* - OUI:FC48EF* - ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD - -+OUI:FC4B1C* -+ ID_OUI_FROM_DATABASE=INTERSENSOR S.R.L. -+ - OUI:FC4BBC* - ID_OUI_FROM_DATABASE=Sunplus Technology Co., Ltd. - -diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb -index fdb534d..289f81c 100644 ---- a/hwdb/20-pci-vendor-model.hwdb -+++ b/hwdb/20-pci-vendor-model.hwdb -@@ -4158,7 +4158,7 @@ pci:v00001002d00005F57* - ID_MODEL_FROM_DATABASE=R423 [Radeon X800 XT] - - pci:v00001002d00006600* -- ID_MODEL_FROM_DATABASE=Mars [Radeon HD 8670A/8750M] -+ ID_MODEL_FROM_DATABASE=Mars [Radeon HD 8670A/8670M/8750M] - - pci:v00001002d00006601* - ID_MODEL_FROM_DATABASE=Mars [Radeon HD 8730M] -@@ -4169,6 +4169,12 @@ pci:v00001002d00006602* - pci:v00001002d00006603* - ID_MODEL_FROM_DATABASE=Mars - -+pci:v00001002d00006604* -+ ID_MODEL_FROM_DATABASE=Mars [Radeon R7 M265] -+ -+pci:v00001002d00006605* -+ ID_MODEL_FROM_DATABASE=Mars [Radeon R7 M260] -+ - pci:v00001002d00006606* - ID_MODEL_FROM_DATABASE=Mars XTX [Radeon HD 8790M] - -@@ -4176,13 +4182,13 @@ pci:v00001002d00006607* - ID_MODEL_FROM_DATABASE=Mars LE [Radeon HD 8530M] - - pci:v00001002d00006610* -- ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8600 Series] -+ ID_MODEL_FROM_DATABASE=Oland XT [Radeon HD 8670/R7 250] - - pci:v00001002d00006611* - ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8570] - - pci:v00001002d00006613* -- ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8500 Series] -+ ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240] - - pci:v00001002d00006620* - ID_MODEL_FROM_DATABASE=Mars -@@ -4197,10 +4203,10 @@ pci:v00001002d00006631* - ID_MODEL_FROM_DATABASE=Oland - - pci:v00001002d00006640* -- ID_MODEL_FROM_DATABASE=Saturn [Radeon HD 8950] -+ ID_MODEL_FROM_DATABASE=Saturn XT [Radeon HD 8950M] - - pci:v00001002d00006641* -- ID_MODEL_FROM_DATABASE=Saturn PRO -+ ID_MODEL_FROM_DATABASE=Saturn PRO [Radeon HD 8930M] - - pci:v00001002d00006649* - ID_MODEL_FROM_DATABASE=Bonaire -@@ -4236,13 +4242,13 @@ pci:v00001002d0000665Csv00001787sd00002329* - ID_MODEL_FROM_DATABASE=Radeon HD 7790 TurboDuo - - pci:v00001002d0000665D* -- ID_MODEL_FROM_DATABASE=Bonaire -+ ID_MODEL_FROM_DATABASE=Bonaire [Radeon R7 200 Series] - - pci:v00001002d00006660* -- ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A] -+ ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M] - - pci:v00001002d00006663* -- ID_MODEL_FROM_DATABASE=Sun PRO [Radeon HD 8500M Series] -+ ID_MODEL_FROM_DATABASE=Sun PRO [Radeon HD 8570M] - - pci:v00001002d00006664* - ID_MODEL_FROM_DATABASE=Jet XT [Radeon R5 M200 Series] -@@ -4254,7 +4260,7 @@ pci:v00001002d00006667* - ID_MODEL_FROM_DATABASE=Jet ULT [Radeon R5 M200 Series] - - pci:v00001002d0000666F* -- ID_MODEL_FROM_DATABASE=Sun [Radeon HD 8500M] -+ ID_MODEL_FROM_DATABASE=Sun LE [Radeon HD 8550M] - - pci:v00001002d00006670* - ID_MODEL_FROM_DATABASE=Hainan -@@ -5675,6 +5681,15 @@ pci:v00001002d0000678Asv00001002sd0000030C* - pci:v00001002d0000678Asv00001002sd00000310* - ID_MODEL_FROM_DATABASE=FirePro S9000 - -+pci:v00001002d0000678Asv00001002sd00000420* -+ ID_MODEL_FROM_DATABASE=Radeon Sky 700 -+ -+pci:v00001002d0000678Asv00001002sd00000422* -+ ID_MODEL_FROM_DATABASE=Radeon Sky 900 -+ -+pci:v00001002d0000678Asv00001002sd00000B0E* -+ ID_MODEL_FROM_DATABASE=FirePro S10000 Passive -+ - pci:v00001002d0000678Asv00001002sd00000B2A* - ID_MODEL_FROM_DATABASE=FirePro S10000 - -@@ -5691,11 +5706,14 @@ pci:v00001002d00006792* - ID_MODEL_FROM_DATABASE=Tahiti - - pci:v00001002d00006798* -- ID_MODEL_FROM_DATABASE=Tahiti XT [Radeon HD 7970] -+ ID_MODEL_FROM_DATABASE=Tahiti XT [Radeon HD 7970/R9 280X] - - pci:v00001002d00006798sv00001002sd00003000* - ID_MODEL_FROM_DATABASE=Tahiti XT2 [Radeon HD 7970 GHz Edition] - -+pci:v00001002d00006798sv00001002sd00003001* -+ ID_MODEL_FROM_DATABASE=Tahiti XTL [Radeon R9 280X] -+ - pci:v00001002d00006798sv00001002sd00004000* - ID_MODEL_FROM_DATABASE=Radeon HD 8970 OEM - -@@ -5717,6 +5735,12 @@ pci:v00001002d00006798sv00001043sd0000044A* - pci:v00001002d00006798sv00001043sd0000044C* - ID_MODEL_FROM_DATABASE=Tahiti XT2 [Matrix HD 7970 Platinum] - -+pci:v00001002d00006798sv00001043sd00003001* -+ ID_MODEL_FROM_DATABASE=Tahiti XTL [ROG Matrix R9 280X] -+ -+pci:v00001002d00006798sv00001043sd00003006* -+ ID_MODEL_FROM_DATABASE=Tahiti XTL [Radeon R9 280X DirectCU II TOP] -+ - pci:v00001002d00006798sv00001043sd00009999* - ID_MODEL_FROM_DATABASE=ARES II - -@@ -5771,6 +5795,9 @@ pci:v00001002d0000679Bsv00001002sd00000B2A* - pci:v00001002d0000679Bsv00001462sd00008036* - ID_MODEL_FROM_DATABASE=Radeon HD 8990 OEM - -+pci:v00001002d0000679Bsv0000148Csd00008990* -+ ID_MODEL_FROM_DATABASE=Radeon HD 8990 OEM -+ - pci:v00001002d0000679E* - ID_MODEL_FROM_DATABASE=Tahiti LE [Radeon HD 7870 XT] - -@@ -5834,6 +5861,9 @@ pci:v00001002d00006808* - pci:v00001002d00006808sv00001002sd00000310* - ID_MODEL_FROM_DATABASE=FirePro S7000 - -+pci:v00001002d00006808sv00001002sd00000420* -+ ID_MODEL_FROM_DATABASE=Radeon Sky 500 -+ - pci:v00001002d00006809* - ID_MODEL_FROM_DATABASE=Pitcairn LE GL [FirePro W5000] - -@@ -5865,19 +5895,22 @@ pci:v00001002d00006819sv0000174Bsd0000E221* - ID_MODEL_FROM_DATABASE=Radeon HD 7850 2GB GDDR5 DVI-I/DVI-D/HDMI/DP - - pci:v00001002d00006820* -- ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8800M Series] -+ ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M] - - pci:v00001002d00006820sv0000103Csd00001851* - ID_MODEL_FROM_DATABASE=Radeon HD 7750M - - pci:v00001002d00006821* -- ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8800M Series] -+ ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M] -+ -+pci:v00001002d00006821sv00001002sd0000031E* -+ ID_MODEL_FROM_DATABASE=FirePro SX4000 - - pci:v00001002d00006822* - ID_MODEL_FROM_DATABASE=Venus PRO - - pci:v00001002d00006823* -- ID_MODEL_FROM_DATABASE=Venus PRO [Radeon HD 8800M Series] -+ ID_MODEL_FROM_DATABASE=Venus PRO [Radeon HD 8850M] - - pci:v00001002d00006825* - ID_MODEL_FROM_DATABASE=Heathrow XT [Radeon HD 7870M] -@@ -5901,7 +5934,7 @@ pci:v00001002d0000682A* - ID_MODEL_FROM_DATABASE=Venus PRO - - pci:v00001002d0000682B* -- ID_MODEL_FROM_DATABASE=Venus LE [Radeon HD 8800M Series] -+ ID_MODEL_FROM_DATABASE=Venus LE [Radeon HD 8830M] - - pci:v00001002d0000682D* - ID_MODEL_FROM_DATABASE=Chelsea XT GL [FirePro M4000] -@@ -5919,7 +5952,7 @@ pci:v00001002d00006831* - ID_MODEL_FROM_DATABASE=Cape Verde [AMD Radeon HD 7700M Series] - - pci:v00001002d00006835* -- ID_MODEL_FROM_DATABASE=Cape Verde PRX [Radeon R7 200 Series] -+ ID_MODEL_FROM_DATABASE=Cape Verde PRX [Radeon R7 260] - - pci:v00001002d00006837* - ID_MODEL_FROM_DATABASE=Cape Verde LE [Radeon HD 7730/8730] -@@ -16466,6 +16499,12 @@ pci:v00001077d00008031* - pci:v00001077d00008032* - ID_MODEL_FROM_DATABASE=8300 Series 10GbE Converged Network Adapter (iSCSI) - -+pci:v00001077d00008430* -+ ID_MODEL_FROM_DATABASE=ISP8324 1/10GbE Converged Network Controller (NIC VF) -+ -+pci:v00001077d00008431* -+ ID_MODEL_FROM_DATABASE=8300 Series 10GbE Converged Network Adapter (FCoE VF) -+ - pci:v00001077d00008432* - ID_MODEL_FROM_DATABASE=ISP2432M-based 10GbE Converged Network Adapter (CNA) - -@@ -17090,6 +17129,12 @@ pci:v00001093d00002890* - pci:v00001093d000028C0* - ID_MODEL_FROM_DATABASE=PCI-6014 - -+pci:v00001093d000028D0* -+ ID_MODEL_FROM_DATABASE=PCI-5122 -+ -+pci:v00001093d000028E0* -+ ID_MODEL_FROM_DATABASE=PXI-5122 -+ - pci:v00001093d00002A60* - ID_MODEL_FROM_DATABASE=PCI-6023E - -@@ -17174,12 +17219,33 @@ pci:v00001093d000070BF* - pci:v00001093d000070C0* - ID_MODEL_FROM_DATABASE=PCI-6143 - -+pci:v00001093d000070F0* -+ ID_MODEL_FROM_DATABASE=PXI-5922 -+ -+pci:v00001093d000070F1* -+ ID_MODEL_FROM_DATABASE=PCI-5922 -+ - pci:v00001093d000070F2* - ID_MODEL_FROM_DATABASE=PCI-6224 - -+pci:v00001093d00007121* -+ ID_MODEL_FROM_DATABASE=PXI-5122EX -+ -+pci:v00001093d00007122* -+ ID_MODEL_FROM_DATABASE=PCI-5122EX -+ - pci:v00001093d00007144* - ID_MODEL_FROM_DATABASE=PXI-5124 (12-bit 200 MS/s Digitizer) - -+pci:v00001093d00007145* -+ ID_MODEL_FROM_DATABASE=PCI-5124 -+ -+pci:v00001093d0000714C* -+ ID_MODEL_FROM_DATABASE=PXI-5114 -+ -+pci:v00001093d0000714D* -+ ID_MODEL_FROM_DATABASE=PCI-5114 -+ - pci:v00001093d0000716C* - ID_MODEL_FROM_DATABASE=PCI-6225 - -@@ -17195,6 +17261,60 @@ pci:v00001093d000071BC* - pci:v00001093d000071D0* - ID_MODEL_FROM_DATABASE=PXI-6143 - -+pci:v00001093d00007260* -+ ID_MODEL_FROM_DATABASE=PXI-5142 -+ -+pci:v00001093d00007261* -+ ID_MODEL_FROM_DATABASE=PCI-5142 -+ -+pci:v00001093d000072A8* -+ ID_MODEL_FROM_DATABASE=PXI-5152 -+ -+pci:v00001093d000072A9* -+ ID_MODEL_FROM_DATABASE=PCI-5152 -+ -+pci:v00001093d000072AA* -+ ID_MODEL_FROM_DATABASE=PXI-5105 -+ -+pci:v00001093d000072AB* -+ ID_MODEL_FROM_DATABASE=PCI-5105 -+ -+pci:v00001093d0000730F* -+ ID_MODEL_FROM_DATABASE=PXI-5922EX -+ -+pci:v00001093d00007310* -+ ID_MODEL_FROM_DATABASE=PCI-5922EX -+ -+pci:v00001093d00007333* -+ ID_MODEL_FROM_DATABASE=PXI-5900 -+ -+pci:v00001093d00007349* -+ ID_MODEL_FROM_DATABASE=PXI-5154 -+ -+pci:v00001093d0000734A* -+ ID_MODEL_FROM_DATABASE=PCI-5154 -+ -+pci:v00001093d0000737D* -+ ID_MODEL_FROM_DATABASE=PXI-5124EX -+ -+pci:v00001093d000073F0* -+ ID_MODEL_FROM_DATABASE=PXI-5153 -+ -+pci:v00001093d000073F1* -+ ID_MODEL_FROM_DATABASE=PCI-5153 -+ -+pci:v00001093d0000745E* -+ ID_MODEL_FROM_DATABASE=PXI-5153EX -+ -+pci:v00001093d0000745F* -+ ID_MODEL_FROM_DATABASE=PCI-5153EX -+ -+pci:v00001093d00007460* -+ ID_MODEL_FROM_DATABASE=PXI-5154EX -+ -+pci:v00001093d00007461* -+ ID_MODEL_FROM_DATABASE=PCI-5154EX -+ - pci:v00001093d0000B001* - ID_MODEL_FROM_DATABASE=IMAQ-PCI-1408 - -@@ -17226,7 +17346,10 @@ pci:v00001093d0000B091* - ID_MODEL_FROM_DATABASE=IMAQ-PXI-1411 - - pci:v00001093d0000C4C4* -- ID_MODEL_FROM_DATABASE=PXIe-4353 -+ ID_MODEL_FROM_DATABASE=PXIe-4353/5160 -+ -+pci:v00001093d0000C4C4sv00001093sd000076D0* -+ ID_MODEL_FROM_DATABASE=PXIe-5160 - - pci:v00001093d0000C801* - ID_MODEL_FROM_DATABASE=PCI-GPIB -@@ -25557,10 +25680,10 @@ pci:v000010DEd00000FE5* - ID_MODEL_FROM_DATABASE=GK107 [GeForce K340 USM] - - pci:v000010DEd00000FE6* -- ID_MODEL_FROM_DATABASE=GK107 [NVS K1 USM] -+ ID_MODEL_FROM_DATABASE=GK107 [GRID K1 NVS USM] - - pci:v000010DEd00000FE7* -- ID_MODEL_FROM_DATABASE=GK107GL [GRID K1] -+ ID_MODEL_FROM_DATABASE=GK107GL [GRID K100 vGPU] - - pci:v000010DEd00000FE7sv000010DEsd0000101E* - ID_MODEL_FROM_DATABASE=GRID K100 -@@ -25575,13 +25698,13 @@ pci:v000010DEd00000FF2* - ID_MODEL_FROM_DATABASE=GK107GL [GRID K1] - - pci:v000010DEd00000FF5* -- ID_MODEL_FROM_DATABASE=GK107GL [Tesla K1 USM] -+ ID_MODEL_FROM_DATABASE=GK107GL [GRID K1 Tesla USM] - - pci:v000010DEd00000FF6* - ID_MODEL_FROM_DATABASE=GK107GLM [Quadro K1100M] - - pci:v000010DEd00000FF7* -- ID_MODEL_FROM_DATABASE=GK107GL [Quadro K1 USM] -+ ID_MODEL_FROM_DATABASE=GK107GL [GRID K140Q vGPU] - - pci:v000010DEd00000FF7sv000010DEsd00001037* - ID_MODEL_FROM_DATABASE=GRID K140Q -@@ -25652,6 +25775,9 @@ pci:v000010DEd00001021* - pci:v000010DEd00001022* - ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20c] - -+pci:v000010DEd00001024* -+ ID_MODEL_FROM_DATABASE=GK110GL [Tesla K40c] -+ - pci:v000010DEd00001026* - ID_MODEL_FROM_DATABASE=GK110GL [Tesla K20s] - -@@ -26246,6 +26372,9 @@ pci:v000010DEd00001140sv000017AAsd00003983* - pci:v000010DEd00001140sv000017AAsd00005003* - ID_MODEL_FROM_DATABASE=GeForce GT 720M - -+pci:v000010DEd00001140sv000017AAsd00005005* -+ ID_MODEL_FROM_DATABASE=GeForce 705M -+ - pci:v000010DEd00001140sv000017AAsd0000500D* - ID_MODEL_FROM_DATABASE=GeForce GT 620M - -@@ -26334,13 +26463,13 @@ pci:v000010DEd0000118A* - ID_MODEL_FROM_DATABASE=GK104GL [GRID K520] - - pci:v000010DEd0000118B* -- ID_MODEL_FROM_DATABASE=GK104 [GeForce K2 USM] -+ ID_MODEL_FROM_DATABASE=GK104GL [GRID K2 GeForce USM] - - pci:v000010DEd0000118C* -- ID_MODEL_FROM_DATABASE=GK104 [NVS K2 USM] -+ ID_MODEL_FROM_DATABASE=GK104 [GRID K2 NVS USM] - - pci:v000010DEd0000118D* -- ID_MODEL_FROM_DATABASE=GK104GL [GRID K2] -+ ID_MODEL_FROM_DATABASE=GK104GL [GRID K200 vGPU] - - pci:v000010DEd0000118Dsv000010DEsd0000101D* - ID_MODEL_FROM_DATABASE=GRID K200 -@@ -26351,6 +26480,9 @@ pci:v000010DEd0000118E* - pci:v000010DEd0000118F* - ID_MODEL_FROM_DATABASE=GK104GL [Tesla K10] - -+pci:v000010DEd00001193* -+ ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 760 Ti OEM] -+ - pci:v000010DEd0000119D* - ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 775M] - -@@ -26379,7 +26511,7 @@ pci:v000010DEd000011A7* - ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 675MX] - - pci:v000010DEd000011B0* -- ID_MODEL_FROM_DATABASE=GK104GL [Quadro K2 USM] -+ ID_MODEL_FROM_DATABASE=GK104GL [GRID K240Q\K260Q vGPU] - - pci:v000010DEd000011B0sv000010DEsd0000101A* - ID_MODEL_FROM_DATABASE=GRID K240Q -@@ -26388,7 +26520,7 @@ pci:v000010DEd000011B0sv000010DEsd0000101B* - ID_MODEL_FROM_DATABASE=GRID K260Q - - pci:v000010DEd000011B1* -- ID_MODEL_FROM_DATABASE=GK104GL [Tesla K2 USM] -+ ID_MODEL_FROM_DATABASE=GK104GL [GRID K2 Tesla USM] - - pci:v000010DEd000011B6* - ID_MODEL_FROM_DATABASE=GK104GLM [Quadro K3100M] -@@ -32642,6 +32774,9 @@ pci:v00001179d00000618* - pci:v00001179d00000701* - ID_MODEL_FROM_DATABASE=FIR Port Type-O - -+pci:v00001179d00000803* -+ ID_MODEL_FROM_DATABASE=TC6371AF SD Host Controller -+ - pci:v00001179d00000804* - ID_MODEL_FROM_DATABASE=TC6371AF SmartMedia Controller - -@@ -40046,6 +40181,9 @@ pci:v000013F6d00008788sv000014C3sd00001710* - pci:v000013F6d00008788sv000014C3sd00001711* - ID_MODEL_FROM_DATABASE=HiFier Serenade - -+pci:v000013F6d00008788sv000014C3sd00001713* -+ ID_MODEL_FROM_DATABASE=HiFier Serenade III -+ - pci:v000013F6d00008788sv00001A58sd00000910* - ID_MODEL_FROM_DATABASE=Barracuda AC-1 - -@@ -50711,8 +50849,11 @@ pci:v00001A41d00000002* - pci:v00001A41d00000200* - ID_MODEL_FROM_DATABASE=TILE-Gx processor - -+pci:v00001A41d00000201* -+ ID_MODEL_FROM_DATABASE=TILE-Gx Processor Virtual Function -+ - pci:v00001A41d00002000* -- ID_MODEL_FROM_DATABASE=TILE-Gx PCI Express Bridge -+ ID_MODEL_FROM_DATABASE=TILE-Gx PCI Express Root Port - - pci:v00001A4A* - ID_VENDOR_FROM_DATABASE=SLAC National Accelerator Lab PPA-REG -@@ -51353,6 +51494,15 @@ pci:v00001CC5* - pci:v00001CC5d00000100* - ID_MODEL_FROM_DATABASE=CAN-PCIe-02 - -+pci:v00001CE4* -+ ID_VENDOR_FROM_DATABASE=Exablaze -+ -+pci:v00001CE4d00000001* -+ ID_MODEL_FROM_DATABASE=ExaNIC X4 -+ -+pci:v00001CE4d00000002* -+ ID_MODEL_FROM_DATABASE=ExaNIC X2 -+ - pci:v00001D44* - ID_VENDOR_FROM_DATABASE=DPT - -@@ -54131,6 +54281,9 @@ pci:v00008086d000008B4sv00008086sd00000270* - pci:v00008086d000008B4sv00008086sd00008270* - ID_MODEL_FROM_DATABASE=Dual Band Wireless AC 3160 - -+pci:v00008086d000008CF* -+ ID_MODEL_FROM_DATABASE=Atom Processor Z2760 Integrated Graphics Controller -+ - pci:v00008086d00000960* - ID_MODEL_FROM_DATABASE=80960RP (i960RP) Microprocessor/Bridge - -@@ -56369,6 +56522,9 @@ pci:v00008086d000010FBsv0000103Csd0000211B* - pci:v00008086d000010FBsv0000103Csd00002147* - ID_MODEL_FROM_DATABASE=Ethernet 10Gb 1-port 561i Adapter - -+pci:v00008086d000010FBsv0000103Csd00002159* -+ ID_MODEL_FROM_DATABASE=Ethernet 10Gb 2-port 562i Adapter -+ - pci:v00008086d000010FBsv0000108Esd00007B11* - ID_MODEL_FROM_DATABASE=Ethernet Server Adapter X520-2 - -@@ -57290,6 +57446,9 @@ pci:v00008086d00001528sv00001028sd00001F61* - pci:v00008086d00001528sv0000103Csd0000192D* - ID_MODEL_FROM_DATABASE=561FLR-T 2-port 10Gb Ethernet Adapter - -+pci:v00008086d00001528sv0000103Csd00002004* -+ ID_MODEL_FROM_DATABASE=Ethernet 10Gb 2-port 561i Adapter -+ - pci:v00008086d00001528sv0000103Csd0000211A* - ID_MODEL_FROM_DATABASE=Ethernet 10Gb 2-port 561T Adapter - -@@ -57416,6 +57575,9 @@ pci:v00008086d0000155D* - pci:v00008086d0000155Dsv00008086sd00000001* - ID_MODEL_FROM_DATABASE=Ethernet Server Bypass Adapter X520-SR2 - -+pci:v00008086d0000155Dsv00008086sd00000002* -+ ID_MODEL_FROM_DATABASE=Ethernet Server Bypass Adapter X520-LR2 -+ - pci:v00008086d00001560* - ID_MODEL_FROM_DATABASE=Ethernet Controller X540 - -@@ -69747,7 +69909,7 @@ pci:v00009005d00000285sv0000103Csd00003227* - ID_MODEL_FROM_DATABASE=AAR-2610SA - - pci:v00009005d00000285sv0000108Esd00000286* -- ID_MODEL_FROM_DATABASE=STK RAID INT -+ ID_MODEL_FROM_DATABASE=Sun StorageTek SAS RAID HBA, Internal - - pci:v00009005d00000285sv0000108Esd00000287* - ID_MODEL_FROM_DATABASE=STK RAID EXT diff --git a/SOURCES/0076-rules-remove-pointless-MODE-settings.patch b/SOURCES/0076-rules-remove-pointless-MODE-settings.patch deleted file mode 100644 index e2f5e28..0000000 --- a/SOURCES/0076-rules-remove-pointless-MODE-settings.patch +++ /dev/null @@ -1,40 +0,0 @@ -From d5ac78410cbf19b9e9e420286ad1afce03764c6d Mon Sep 17 00:00:00 2001 -From: Kay Sievers -Date: Mon, 21 Oct 2013 03:49:03 +0200 -Subject: [PATCH] rules: remove pointless MODE= settings - -Changing the default MODE= for the group accessi, but not specifying -a GROUP= does not provide anything. - -It disables the default logic that the mode switches to 0660 as soon -as a GROUP= is specifed, which make custom rules uneccesarily complicated. - -https://bugs.freedesktop.org/show_bug.cgi?id=70665 ---- - rules/50-udev-default.rules | 6 ++---- - 1 file changed, 2 insertions(+), 4 deletions(-) - -diff --git a/rules/50-udev-default.rules b/rules/50-udev-default.rules -index f764789..679dfdf 100644 ---- a/rules/50-udev-default.rules -+++ b/rules/50-udev-default.rules -@@ -20,9 +20,7 @@ KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP= - - SUBSYSTEM=="mem", KERNEL=="mem|kmem|port", GROUP="kmem", MODE="0640" - --SUBSYSTEM=="input", KERNEL=="mouse*|mice|event*", MODE="0640" --SUBSYSTEM=="input", KERNEL=="ts[0-9]*|uinput", MODE="0640" --SUBSYSTEM=="input", KERNEL=="js[0-9]*", MODE="0644" -+SUBSYSTEM=="input", KERNEL=="js[0-9]*", MODE="0664" - - SUBSYSTEM=="video4linux", GROUP="video" - SUBSYSTEM=="misc", KERNEL=="agpgart", GROUP="video" -@@ -63,7 +61,7 @@ SUBSYSTEM=="raw", KERNEL=="raw[0-9]*", GROUP="disk" - SUBSYSTEM=="aoe", GROUP="disk", MODE="0220" - SUBSYSTEM=="aoe", KERNEL=="err", MODE="0440" - --KERNEL=="rfkill", MODE="0644" -+KERNEL=="rfkill", MODE="0664" - KERNEL=="tun", MODE="0666", OPTIONS+="static_node=net/tun" - - KERNEL=="fuse", MODE="0666", OPTIONS+="static_node=fuse" diff --git a/SOURCES/0076-tmpfiles-Fix-handling-of-duplicate-lines.patch b/SOURCES/0076-tmpfiles-Fix-handling-of-duplicate-lines.patch new file mode 100644 index 0000000..ee6b829 --- /dev/null +++ b/SOURCES/0076-tmpfiles-Fix-handling-of-duplicate-lines.patch @@ -0,0 +1,32 @@ +From 339b62c8f336bb51dc7a925062abeb3ce76145e6 Mon Sep 17 00:00:00 2001 +From: Martin Pitt +Date: Thu, 5 Mar 2015 14:58:56 +0100 +Subject: [PATCH] tmpfiles: Fix handling of duplicate lines + +Commit 3f93da987 accidentally dropped the "return 0" after detection of a +duplicate line. Put it back, to get back the documented and intended "first +match wins" behaviour. + +https://launchpad.net/bugs/1428540 +(cherry picked from commit 6487ada88d63e4998113f4c57fa10b7c865f8026) +--- + src/tmpfiles/tmpfiles.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index 187997e..1e10968 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -1750,9 +1750,11 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { + unsigned n; + + for (n = 0; n < existing->count; n++) { +- if (!item_compatible(existing->items + n, &i)) ++ if (!item_compatible(existing->items + n, &i)) { + log_warning("[%s:%u] Duplicate line for path \"%s\", ignoring.", + fname, line, i.path); ++ return 0; ++ } + } + } else { + existing = new0(ItemArray, 1); diff --git a/SOURCES/0077-catalog-remove-links-to-non-existent-wiki-pages.patch b/SOURCES/0077-catalog-remove-links-to-non-existent-wiki-pages.patch deleted file mode 100644 index 242ab4f..0000000 --- a/SOURCES/0077-catalog-remove-links-to-non-existent-wiki-pages.patch +++ /dev/null @@ -1,89 +0,0 @@ -From c1dfe1e12f7f37d3f3ad13160146a551a396f3c0 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Thu, 24 Oct 2013 00:45:10 -0400 -Subject: [PATCH] catalog: remove links to non-existent wiki pages - -AFAIK, we don't have even one page with message explanations. -If/when we add them, we can add links. - -https://bugzilla.redhat.com/show_bug.cgi?id=1017161 ---- - catalog/systemd.catalog | 9 --------- - 1 file changed, 9 deletions(-) - -diff --git a/catalog/systemd.catalog b/catalog/systemd.catalog -index 892b2ad..3c2fe64 100644 ---- a/catalog/systemd.catalog -+++ b/catalog/systemd.catalog -@@ -204,7 +204,6 @@ Unit @UNIT@ has begun shutting down. - Subject: Unit @UNIT@ has finished shutting down - Defined-By: systemd - Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel --Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@ - - Unit @UNIT@ has finished shutting down. - -@@ -212,7 +211,6 @@ Unit @UNIT@ has finished shutting down. - Subject: Unit @UNIT@ has failed - Defined-By: systemd - Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel --Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@ - - Unit @UNIT@ has failed. - -@@ -222,7 +220,6 @@ The result is @RESULT@. - Subject: Unit @UNIT@ has begun with reloading its configuration - Defined-By: systemd - Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel --Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@ - - Unit @UNIT@ has begun with reloading its configuration - -@@ -230,7 +227,6 @@ Unit @UNIT@ has begun with reloading its configuration - Subject: Unit @UNIT@ has finished reloading its configuration - Defined-By: systemd - Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel --Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@ - - Unit @UNIT@ has finished reloading its configuration - -@@ -240,7 +236,6 @@ The result is @RESULT@. - Subject: Process @EXECUTABLE@ could not be executed - Defined-By: systemd - Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel --Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@ - - The process @EXECUTABLE@ could not be executed and failed. - -@@ -250,7 +245,6 @@ The error number returned while executing this process is @ERRNO@. - Subject: One or more messages could not be forwarded to syslog - Defined-By: systemd - Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel --Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@ - - One or more messages could not be forwarded to the syslog service - running side-by-side with journald. This usually indicates that the -@@ -261,7 +255,6 @@ messages queued. - Subject: Mount point is not empty - Defined-By: systemd - Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel --Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@ - - The directory @WHERE@ is specified as the mount point (second field in - /etc/fstab or Where= field in systemd unit file) and is not empty. -@@ -274,7 +267,6 @@ location. - Subject: A virtual machine or container has been started - Defined-By: systemd - Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel --Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@ - - The virtual machine @NAME@ with its leader PID @LEADER@ has been - started is now ready to use. -@@ -283,7 +275,6 @@ started is now ready to use. - Subject: A virtual machine or container has been terminated - Defined-By: systemd - Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel --Documentation: http://www.freedesktop.org/wiki/Software/systemd/catalog/@MESSAGE_ID@ - - The virtual machine @NAME@ with its leader PID @LEADER@ has been - shut down. diff --git a/SOURCES/0077-hwdb-add-Lenovo-W451-to-TOUCHPAD_HAS_TRACKPOINT_BUTT.patch b/SOURCES/0077-hwdb-add-Lenovo-W451-to-TOUCHPAD_HAS_TRACKPOINT_BUTT.patch new file mode 100644 index 0000000..40c282d --- /dev/null +++ b/SOURCES/0077-hwdb-add-Lenovo-W451-to-TOUCHPAD_HAS_TRACKPOINT_BUTT.patch @@ -0,0 +1,23 @@ +From 01dd8dc414460df51940c64e73cf318a9f587270 Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Fri, 6 Mar 2015 11:02:04 +1000 +Subject: [PATCH] hwdb: add Lenovo W451 to TOUCHPAD_HAS_TRACKPOINT_BUTTONS list + +(cherry picked from commit 9638ee90862e4a24f5796e87beebc4c47e2728c2) +--- + hwdb/70-touchpad.hwdb | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/hwdb/70-touchpad.hwdb b/hwdb/70-touchpad.hwdb +index 9fcb5fd..8a32446 100644 +--- a/hwdb/70-touchpad.hwdb ++++ b/hwdb/70-touchpad.hwdb +@@ -36,6 +36,8 @@ + + # Lenovo X1 Carbon 3rd + touchpad:pnpid:*LEN0048*: ++# Lenovo W541 ++touchpad:pnpid:*LEN004a*: + # Lenovo T450s + touchpad:pnpid:*LEN200f*: + TOUCHPAD_HAS_TRACKPOINT_BUTTONS=1 diff --git a/SOURCES/0078-udev-builtin-path_id-add-support-for-bcma-bus.patch b/SOURCES/0078-udev-builtin-path_id-add-support-for-bcma-bus.patch deleted file mode 100644 index b3d3af9..0000000 --- a/SOURCES/0078-udev-builtin-path_id-add-support-for-bcma-bus.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 8e98bfcd1771a460ccf99fa7df7d46cac2e1754a Mon Sep 17 00:00:00 2001 -From: Tom Gundersen -Date: Sat, 26 Oct 2013 12:22:04 +0200 -Subject: [PATCH] udev-builtin: path_id - add support for bcma bus - -This matches the bcma support in the network device naming. - -Eventually wa want to make sure ID_PATH is equivalent to ID_NET_NAME_PATH, -so we never need to match on the latter. ---- - src/udev/udev-builtin-path_id.c | 16 ++++++++++++++++ - 1 file changed, 16 insertions(+) - -diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c -index 0659967..763f3c3 100644 ---- a/src/udev/udev-builtin-path_id.c -+++ b/src/udev/udev-builtin-path_id.c -@@ -452,6 +452,19 @@ static struct udev_device *handle_usb(struct udev_device *parent, char **path) - return parent; - } - -+static struct udev_device *handle_bcma(struct udev_device *parent, char **path) -+{ -+ const char *sysname; -+ unsigned int core; -+ -+ sysname = udev_device_get_sysname(parent); -+ if (sscanf(sysname, "bcma%*u:%u", &core) != 1) -+ return NULL; -+ -+ path_prepend(path, "bcma-%u", core); -+ return parent; -+} -+ - static struct udev_device *handle_ccw(struct udev_device *parent, struct udev_device *dev, char **path) - { - struct udev_device *scsi_dev; -@@ -509,6 +522,9 @@ static int builtin_path_id(struct udev_device *dev, int argc, char *argv[], bool - } else if (streq(subsys, "usb")) { - parent = handle_usb(parent, &path); - some_transport = true; -+ } else if (streq(subsys, "bcma")) { -+ parent = handle_bcma(parent, &path); -+ some_transport = true; - } else if (streq(subsys, "serio")) { - path_prepend(&path, "serio-%s", udev_device_get_sysnum(parent)); - parent = skip_subsystem(parent, "serio"); diff --git a/SOURCES/0078-vconsole-match-on-vtcon-events-not-fbcon-ones.patch b/SOURCES/0078-vconsole-match-on-vtcon-events-not-fbcon-ones.patch new file mode 100644 index 0000000..303208c --- /dev/null +++ b/SOURCES/0078-vconsole-match-on-vtcon-events-not-fbcon-ones.patch @@ -0,0 +1,39 @@ +From 5e6503d0d2efb5cbff945df42423640ffb138073 Mon Sep 17 00:00:00 2001 +From: Jan Engelhardt +Date: Tue, 24 Feb 2015 17:49:02 +0100 +Subject: [PATCH] vconsole: match on vtcon events, not fbcon ones + +I observe that upon loading of framebuffer drivers, I do not get the +desired system font, but the kernel-level defaults (usually +lib/fonts/font_8x16.c, but your mileage may vary depending on kernel +config and boot options). + +The fbcon driver may be loaded at a time way before the first +framebuffer device is active, such that the vconsole setup helper +runs too early. + +The existing rule is non-fitting. The going live of the fbcon kernel +component does not indicate the proper time at which to load the +visuals, which really ought to be done when a new vtcon object comes +into existence. (The font table is a per-vtcon property.) + +(cherry picked from commit a52750d1483ff139df33149afc0b675531e9cd79) +--- + src/vconsole/90-vconsole.rules.in | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +diff --git a/src/vconsole/90-vconsole.rules.in b/src/vconsole/90-vconsole.rules.in +index 0620096..35b9ad5 100644 +--- a/src/vconsole/90-vconsole.rules.in ++++ b/src/vconsole/90-vconsole.rules.in +@@ -5,7 +5,6 @@ + # the Free Software Foundation; either version 2.1 of the License, or + # (at your option) any later version. + +-# Kernel resets vconsole state when changing console drivers so run +-# systemd-vconsole-setup when fbcon loads +- +-ACTION=="add", SUBSYSTEM=="graphics", KERNEL=="fbcon", RUN+="@rootlibexecdir@/systemd-vconsole-setup" ++# Each vtcon keeps its own state of fonts. ++# ++ACTION=="add", SUBSYSTEM=="vtconsole", KERNEL=="vtcon*", RUN+="@rootlibexecdir@/systemd-vconsole-setup" diff --git a/SOURCES/0079-core-do-not-spawn-jobs-or-touch-other-units-during-c.patch b/SOURCES/0079-core-do-not-spawn-jobs-or-touch-other-units-during-c.patch new file mode 100644 index 0000000..b446593 --- /dev/null +++ b/SOURCES/0079-core-do-not-spawn-jobs-or-touch-other-units-during-c.patch @@ -0,0 +1,375 @@ +From f997080b4d17a40b59b398e4354b6368d9c85f69 Mon Sep 17 00:00:00 2001 +From: Ivan Shapovalov +Date: Sat, 7 Mar 2015 08:44:52 -0500 +Subject: [PATCH] core: do not spawn jobs or touch other units during + coldplugging + +Because the order of coldplugging is not defined, we can reference a +not-yet-coldplugged unit and read its state while it has not yet been +set to a meaningful value. + +This way, already active units may get started again. + +We fix this by deferring such actions until all units have been at +least somehow coldplugged. + +Fixes https://bugs.freedesktop.org/show_bug.cgi?id=88401 + +(cherry picked from commit 6e392c9c45643d106673c6643ac8bf4e65da13c1) +--- + src/core/automount.c | 2 +- + src/core/busname.c | 2 +- + src/core/device.c | 2 +- + src/core/manager.c | 35 +++++++++++++++++++++++++++++++++-- + src/core/mount.c | 2 +- + src/core/path.c | 14 ++++++++++---- + src/core/scope.c | 2 +- + src/core/service.c | 2 +- + src/core/slice.c | 2 +- + src/core/snapshot.c | 2 +- + src/core/socket.c | 2 +- + src/core/swap.c | 2 +- + src/core/target.c | 2 +- + src/core/timer.c | 14 ++++++++++---- + src/core/unit.c | 25 ++++++++++++++++--------- + src/core/unit.h | 12 +++++++++--- + 16 files changed, 89 insertions(+), 33 deletions(-) + +diff --git a/src/core/automount.c b/src/core/automount.c +index 9f6bd84..e4c7941 100644 +--- a/src/core/automount.c ++++ b/src/core/automount.c +@@ -235,7 +235,7 @@ static void automount_set_state(Automount *a, AutomountState state) { + unit_notify(UNIT(a), state_translation_table[old_state], state_translation_table[state], true); + } + +-static int automount_coldplug(Unit *u) { ++static int automount_coldplug(Unit *u, Hashmap *deferred_work) { + Automount *a = AUTOMOUNT(u); + int r; + +diff --git a/src/core/busname.c b/src/core/busname.c +index 1d77292..43d7607 100644 +--- a/src/core/busname.c ++++ b/src/core/busname.c +@@ -335,7 +335,7 @@ static void busname_set_state(BusName *n, BusNameState state) { + unit_notify(UNIT(n), state_translation_table[old_state], state_translation_table[state], true); + } + +-static int busname_coldplug(Unit *u) { ++static int busname_coldplug(Unit *u, Hashmap *deferred_work) { + BusName *n = BUSNAME(u); + int r; + +diff --git a/src/core/device.c b/src/core/device.c +index 1cc103c..4ff8827 100644 +--- a/src/core/device.c ++++ b/src/core/device.c +@@ -142,7 +142,7 @@ static void device_set_state(Device *d, DeviceState state) { + unit_notify(UNIT(d), state_translation_table[old_state], state_translation_table[state], true); + } + +-static int device_coldplug(Unit *u) { ++static int device_coldplug(Unit *u, Hashmap *deferred_work) { + Device *d = DEVICE(u); + + assert(d); +diff --git a/src/core/manager.c b/src/core/manager.c +index bc9b7ec..203a6a0 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -983,7 +983,28 @@ static int manager_coldplug(Manager *m) { + Unit *u; + char *k; + +- assert(m); ++ /* ++ * Some unit types tend to spawn jobs or check other units' state ++ * during coldplug. This is wrong because it is undefined whether the ++ * units in question have been already coldplugged (i. e. their state ++ * restored). This way, we can easily re-start an already started unit ++ * or otherwise make a wrong decision based on the unit's state. ++ * ++ * Solve this by providing a way for coldplug functions to defer ++ * such actions until after all units have been coldplugged. ++ * ++ * We store Unit* -> int(*)(Unit*). ++ * ++ * https://bugs.freedesktop.org/show_bug.cgi?id=88401 ++ */ ++ _cleanup_hashmap_free_ Hashmap *deferred_work = NULL; ++ int(*proc)(Unit*); ++ ++ assert(m); ++ ++ deferred_work = hashmap_new(&trivial_hash_ops); ++ if (!deferred_work) ++ return -ENOMEM; + + /* Then, let's set up their initial state. */ + HASHMAP_FOREACH_KEY(u, k, m->units, i) { +@@ -993,7 +1014,17 @@ static int manager_coldplug(Manager *m) { + if (u->id != k) + continue; + +- q = unit_coldplug(u); ++ q = unit_coldplug(u, deferred_work); ++ if (q < 0) ++ r = q; ++ } ++ ++ /* After coldplugging and setting up initial state of the units, ++ * let's perform operations which spawn jobs or query units' state. */ ++ HASHMAP_FOREACH_KEY(proc, u, deferred_work, i) { ++ int q; ++ ++ q = proc(u); + if (q < 0) + r = q; + } +diff --git a/src/core/mount.c b/src/core/mount.c +index c971330..3ae0eb4 100644 +--- a/src/core/mount.c ++++ b/src/core/mount.c +@@ -617,7 +617,7 @@ static void mount_set_state(Mount *m, MountState state) { + m->reload_result = MOUNT_SUCCESS; + } + +-static int mount_coldplug(Unit *u) { ++static int mount_coldplug(Unit *u, Hashmap *deferred_work) { + Mount *m = MOUNT(u); + MountState new_state = MOUNT_DEAD; + int r; +diff --git a/src/core/path.c b/src/core/path.c +index e5ea79f..51e36fa 100644 +--- a/src/core/path.c ++++ b/src/core/path.c +@@ -440,7 +440,12 @@ static void path_set_state(Path *p, PathState state) { + + static void path_enter_waiting(Path *p, bool initial, bool recheck); + +-static int path_coldplug(Unit *u) { ++static int path_enter_waiting_coldplug(Unit *u) { ++ path_enter_waiting(PATH(u), true, true); ++ return 0; ++} ++ ++static int path_coldplug(Unit *u, Hashmap *deferred_work) { + Path *p = PATH(u); + + assert(p); +@@ -449,9 +454,10 @@ static int path_coldplug(Unit *u) { + if (p->deserialized_state != p->state) { + + if (p->deserialized_state == PATH_WAITING || +- p->deserialized_state == PATH_RUNNING) +- path_enter_waiting(p, true, true); +- else ++ p->deserialized_state == PATH_RUNNING) { ++ hashmap_put(deferred_work, u, &path_enter_waiting_coldplug); ++ path_set_state(p, PATH_WAITING); ++ } else + path_set_state(p, p->deserialized_state); + } + +diff --git a/src/core/scope.c b/src/core/scope.c +index b41db78..ae6614f 100644 +--- a/src/core/scope.c ++++ b/src/core/scope.c +@@ -173,7 +173,7 @@ static int scope_load(Unit *u) { + return scope_verify(s); + } + +-static int scope_coldplug(Unit *u) { ++static int scope_coldplug(Unit *u, Hashmap *deferred_work) { + Scope *s = SCOPE(u); + int r; + +diff --git a/src/core/service.c b/src/core/service.c +index 15e29be..7781b4e 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -879,7 +879,7 @@ static void service_set_state(Service *s, ServiceState state) { + s->reload_result = SERVICE_SUCCESS; + } + +-static int service_coldplug(Unit *u) { ++static int service_coldplug(Unit *u, Hashmap *deferred_work) { + Service *s = SERVICE(u); + int r; + +diff --git a/src/core/slice.c b/src/core/slice.c +index ae9819d..61ff9d3 100644 +--- a/src/core/slice.c ++++ b/src/core/slice.c +@@ -153,7 +153,7 @@ static int slice_load(Unit *u) { + return slice_verify(s); + } + +-static int slice_coldplug(Unit *u) { ++static int slice_coldplug(Unit *u, Hashmap *deferred_work) { + Slice *t = SLICE(u); + + assert(t); +diff --git a/src/core/snapshot.c b/src/core/snapshot.c +index b70c3be..b1d8448 100644 +--- a/src/core/snapshot.c ++++ b/src/core/snapshot.c +@@ -75,7 +75,7 @@ static int snapshot_load(Unit *u) { + return 0; + } + +-static int snapshot_coldplug(Unit *u) { ++static int snapshot_coldplug(Unit *u, Hashmap *deferred_work) { + Snapshot *s = SNAPSHOT(u); + + assert(s); +diff --git a/src/core/socket.c b/src/core/socket.c +index 88aae48..760de02 100644 +--- a/src/core/socket.c ++++ b/src/core/socket.c +@@ -1326,7 +1326,7 @@ static void socket_set_state(Socket *s, SocketState state) { + unit_notify(UNIT(s), state_translation_table[old_state], state_translation_table[state], true); + } + +-static int socket_coldplug(Unit *u) { ++static int socket_coldplug(Unit *u, Hashmap *deferred_work) { + Socket *s = SOCKET(u); + int r; + +diff --git a/src/core/swap.c b/src/core/swap.c +index 5c19af5..369abf0 100644 +--- a/src/core/swap.c ++++ b/src/core/swap.c +@@ -513,7 +513,7 @@ static void swap_set_state(Swap *s, SwapState state) { + job_add_to_run_queue(UNIT(other)->job); + } + +-static int swap_coldplug(Unit *u) { ++static int swap_coldplug(Unit *u, Hashmap *deferred_work) { + Swap *s = SWAP(u); + SwapState new_state = SWAP_DEAD; + int r; +diff --git a/src/core/target.c b/src/core/target.c +index 33fb66b..2411a8e 100644 +--- a/src/core/target.c ++++ b/src/core/target.c +@@ -107,7 +107,7 @@ static int target_load(Unit *u) { + return 0; + } + +-static int target_coldplug(Unit *u) { ++static int target_coldplug(Unit *u, Hashmap *deferred_work) { + Target *t = TARGET(u); + + assert(t); +diff --git a/src/core/timer.c b/src/core/timer.c +index 45744c7..48cf9c1 100644 +--- a/src/core/timer.c ++++ b/src/core/timer.c +@@ -268,7 +268,12 @@ static void timer_set_state(Timer *t, TimerState state) { + + static void timer_enter_waiting(Timer *t, bool initial); + +-static int timer_coldplug(Unit *u) { ++static int timer_enter_waiting_coldplug(Unit *u) { ++ timer_enter_waiting(TIMER(u), false); ++ return 0; ++} ++ ++static int timer_coldplug(Unit *u, Hashmap *deferred_work) { + Timer *t = TIMER(u); + + assert(t); +@@ -276,9 +281,10 @@ static int timer_coldplug(Unit *u) { + + if (t->deserialized_state != t->state) { + +- if (t->deserialized_state == TIMER_WAITING) +- timer_enter_waiting(t, false); +- else ++ if (t->deserialized_state == TIMER_WAITING) { ++ hashmap_put(deferred_work, u, &timer_enter_waiting_coldplug); ++ timer_set_state(t, TIMER_WAITING); ++ } else + timer_set_state(t, t->deserialized_state); + } + +diff --git a/src/core/unit.c b/src/core/unit.c +index a6558ee..565455b 100644 +--- a/src/core/unit.c ++++ b/src/core/unit.c +@@ -2859,27 +2859,34 @@ int unit_add_node_link(Unit *u, const char *what, bool wants) { + return 0; + } + +-int unit_coldplug(Unit *u) { ++static int unit_add_deserialized_job_coldplug(Unit *u) { ++ int r; ++ ++ r = manager_add_job(u->manager, u->deserialized_job, u, JOB_IGNORE_REQUIREMENTS, false, NULL, NULL); ++ if (r < 0) ++ return r; ++ ++ u->deserialized_job = _JOB_TYPE_INVALID; ++ ++ return 0; ++} ++ ++int unit_coldplug(Unit *u, Hashmap *deferred_work) { + int r; + + assert(u); + + if (UNIT_VTABLE(u)->coldplug) +- if ((r = UNIT_VTABLE(u)->coldplug(u)) < 0) ++ if ((r = UNIT_VTABLE(u)->coldplug(u, deferred_work)) < 0) + return r; + + if (u->job) { + r = job_coldplug(u->job); + if (r < 0) + return r; +- } else if (u->deserialized_job >= 0) { ++ } else if (u->deserialized_job >= 0) + /* legacy */ +- r = manager_add_job(u->manager, u->deserialized_job, u, JOB_IGNORE_REQUIREMENTS, false, NULL, NULL); +- if (r < 0) +- return r; +- +- u->deserialized_job = _JOB_TYPE_INVALID; +- } ++ hashmap_put(deferred_work, u, &unit_add_deserialized_job_coldplug); + + return 0; + } +diff --git a/src/core/unit.h b/src/core/unit.h +index 291bc77..7ebc489 100644 +--- a/src/core/unit.h ++++ b/src/core/unit.h +@@ -307,8 +307,14 @@ struct UnitVTable { + int (*load)(Unit *u); + + /* If a lot of units got created via enumerate(), this is +- * where to actually set the state and call unit_notify(). */ +- int (*coldplug)(Unit *u); ++ * where to actually set the state and call unit_notify(). ++ * ++ * This must not reference other units (maybe implicitly through spawning ++ * jobs), because it is possible that they are not yet coldplugged. ++ * Such actions must be deferred until the end of coldplug bу adding ++ * a "Unit* -> int(*)(Unit*)" entry into the hashmap. ++ */ ++ int (*coldplug)(Unit *u, Hashmap *deferred_work); + + void (*dump)(Unit *u, FILE *f, const char *prefix); + +@@ -544,7 +550,7 @@ int unit_deserialize(Unit *u, FILE *f, FDSet *fds); + + int unit_add_node_link(Unit *u, const char *what, bool wants); + +-int unit_coldplug(Unit *u); ++int unit_coldplug(Unit *u, Hashmap *deferred_work); + + void unit_status_printf(Unit *u, const char *status, const char *unit_status_msg_format) _printf_(3, 0); + diff --git a/SOURCES/0079-libudev-default-log_priority-to-INFO.patch b/SOURCES/0079-libudev-default-log_priority-to-INFO.patch deleted file mode 100644 index e680015..0000000 --- a/SOURCES/0079-libudev-default-log_priority-to-INFO.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 1842d7a64410f099a454f341ecf0ad9d6682f8ec Mon Sep 17 00:00:00 2001 -From: Tom Gundersen -Date: Wed, 30 Oct 2013 15:09:01 +0100 -Subject: [PATCH] libudev: default log_priority to INFO - -This brings it in sync with the default config file. ---- - src/libudev/libudev.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/libudev/libudev.c b/src/libudev/libudev.c -index 208039a..bc73a5a 100644 ---- a/src/libudev/libudev.c -+++ b/src/libudev/libudev.c -@@ -125,7 +125,7 @@ _public_ struct udev *udev_new(void) - return NULL; - udev->refcount = 1; - udev->log_fn = log_stderr; -- udev->log_priority = LOG_ERR; -+ udev->log_priority = LOG_INFO; - udev_list_init(udev, &udev->properties_list, true); - - f = fopen("/etc/udev/udev.conf", "re"); diff --git a/SOURCES/0080-firstboot-set-all-spwd-fields-to-1-for-consistency-w.patch b/SOURCES/0080-firstboot-set-all-spwd-fields-to-1-for-consistency-w.patch new file mode 100644 index 0000000..2414db8 --- /dev/null +++ b/SOURCES/0080-firstboot-set-all-spwd-fields-to-1-for-consistency-w.patch @@ -0,0 +1,28 @@ +From 5857b7843b35d84f976a399765f1c9a5365742a2 Mon Sep 17 00:00:00 2001 +From: Ivan Shapovalov +Date: Thu, 26 Feb 2015 02:46:24 +0300 +Subject: [PATCH] firstboot: set all spwd fields to -1 for consistency with + sysusers + +(cherry picked from commit ad525df851a1bef7369fe21b5cde382941e7b073) +--- + src/firstboot/firstboot.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c +index a765d6d..a37ca17 100644 +--- a/src/firstboot/firstboot.c ++++ b/src/firstboot/firstboot.c +@@ -525,9 +525,9 @@ static int process_root_password(void) { + + struct spwd item = { + .sp_namp = (char*) "root", +- .sp_min = 0, +- .sp_max = 99999, +- .sp_warn = 7, ++ .sp_min = -1, ++ .sp_max = -1, ++ .sp_warn = -1, + .sp_inact = -1, + .sp_expire = -1, + .sp_flag = (unsigned long) -1, /* this appears to be what everybody does ... */ diff --git a/SOURCES/0080-nspawn-only-pass-in-slice-setting-if-it-is-set.patch b/SOURCES/0080-nspawn-only-pass-in-slice-setting-if-it-is-set.patch deleted file mode 100644 index 7888d44..0000000 --- a/SOURCES/0080-nspawn-only-pass-in-slice-setting-if-it-is-set.patch +++ /dev/null @@ -1,22 +0,0 @@ -From d5e2897030849371bc976ecb8de3ca2fbf16b6bb Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 30 Oct 2013 18:40:21 +0100 -Subject: [PATCH] nspawn: only pass in slice setting if it is set - ---- - src/nspawn/nspawn.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c -index eb9605c..9616dbf 100644 ---- a/src/nspawn/nspawn.c -+++ b/src/nspawn/nspawn.c -@@ -1202,7 +1202,7 @@ static int register_machine(void) { - "container", - (uint32_t) 0, - strempty(arg_directory), -- 1, "Slice", "s", strempty(arg_slice)); -+ !isempty(arg_slice), "Slice", "s", arg_slice); - if (r < 0) { - log_error("Failed to register machine: %s", error.message ? error.message : strerror(-r)); - return r; diff --git a/SOURCES/0081-sysusers-do-not-reject-users-with-already-present-et.patch b/SOURCES/0081-sysusers-do-not-reject-users-with-already-present-et.patch new file mode 100644 index 0000000..b84cd49 --- /dev/null +++ b/SOURCES/0081-sysusers-do-not-reject-users-with-already-present-et.patch @@ -0,0 +1,77 @@ +From 169e74d772eac561a24f461ac65118d3d83a5980 Mon Sep 17 00:00:00 2001 +From: Ivan Shapovalov +Date: Sat, 7 Mar 2015 18:11:32 +0300 +Subject: [PATCH] sysusers: do not reject users with already present + /etc/shadow entries + +This is needed to interoperate firstboot and sysusers. The former one is started +first, and it writes only /etc/shadow when it is told to set the root password. +It's better to relax checks here than to duplicate functionality in firstboot. + +(cherry picked from commit c5abf22514b3925aa6f0d4a3f36f76799bf1911b) +--- + src/sysusers/sysusers.c | 23 +++++++++-------------- + 1 file changed, 9 insertions(+), 14 deletions(-) + +diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c +index e47bcb4..76b5962 100644 +--- a/src/sysusers/sysusers.c ++++ b/src/sysusers/sysusers.c +@@ -605,6 +605,8 @@ static int write_files(void) { + if (r < 0) + goto finish; + ++ lstchg = (long) (now(CLOCK_REALTIME) / USEC_PER_DAY); ++ + original = fopen(shadow_path, "re"); + if (original) { + struct spwd *sp; +@@ -618,8 +620,13 @@ static int write_files(void) { + + i = hashmap_get(users, sp->sp_namp); + if (i && i->todo_user) { +- r = -EEXIST; +- goto finish; ++ /* we will update the existing entry */ ++ sp->sp_lstchg = lstchg; ++ ++ /* only the /etc/shadow stage is left, so we can ++ * safely remove the item from the todo set */ ++ i->todo_user = false; ++ hashmap_remove(todo_uids, UID_TO_PTR(i->uid)); + } + + errno = 0; +@@ -642,7 +649,6 @@ static int write_files(void) { + goto finish; + } + +- lstchg = (long) (now(CLOCK_REALTIME) / USEC_PER_DAY); + HASHMAP_FOREACH(i, todo_uids, iterator) { + struct spwd n = { + .sp_namp = i->name, +@@ -879,7 +885,6 @@ static int add_user(Item *i) { + + if (!arg_root) { + struct passwd *p; +- struct spwd *sp; + + /* Also check NSS */ + errno = 0; +@@ -895,16 +900,6 @@ static int add_user(Item *i) { + } + if (!IN_SET(errno, 0, ENOENT)) + return log_error_errno(errno, "Failed to check if user %s already exists: %m", i->name); +- +- /* And shadow too, just to be sure */ +- errno = 0; +- sp = getspnam(i->name); +- if (sp) { +- log_error("User %s already exists in shadow database, but not in user database.", i->name); +- return -EBADMSG; +- } +- if (!IN_SET(errno, 0, ENOENT)) +- return log_error_errno(errno, "Failed to check if user %s already exists in shadow database: %m", i->name); + } + + /* Try to use the suggested numeric uid */ diff --git a/SOURCES/0081-zsh-completion-add-systemd-run.patch b/SOURCES/0081-zsh-completion-add-systemd-run.patch deleted file mode 100644 index 697c4a7..0000000 --- a/SOURCES/0081-zsh-completion-add-systemd-run.patch +++ /dev/null @@ -1,60 +0,0 @@ -From d437087966e4a5f7ad0b37b4254988de41e16228 Mon Sep 17 00:00:00 2001 -From: Ronny Chevalier -Date: Wed, 30 Oct 2013 21:57:44 +0100 -Subject: [PATCH] zsh-completion: add systemd-run - ---- - Makefile.am | 1 + - shell-completion/zsh/_systemd-run | 31 +++++++++++++++++++++++++++++++ - 2 files changed, 32 insertions(+) - create mode 100644 shell-completion/zsh/_systemd-run - -diff --git a/Makefile.am b/Makefile.am -index 8d9c587..0c11477 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -352,6 +352,7 @@ dist_zshcompletion_DATA = \ - shell-completion/zsh/_kernel-install \ - shell-completion/zsh/_systemd-nspawn \ - shell-completion/zsh/_systemd-analyze \ -+ shell-completion/zsh/_systemd-run \ - shell-completion/zsh/_sd_hosts_or_user_at_host \ - shell-completion/zsh/_systemd-delta \ - shell-completion/zsh/_systemd -diff --git a/shell-completion/zsh/_systemd-run b/shell-completion/zsh/_systemd-run -new file mode 100644 -index 0000000..0c81c54 ---- /dev/null -+++ b/shell-completion/zsh/_systemd-run -@@ -0,0 +1,31 @@ -+#compdef systemd-run -+ -+__systemctl() { -+ local -a _modes -+ _modes=("--user" "--system") -+ systemctl ${words:*_modes} --full --no-legend --no-pager "$@" 2>/dev/null -+} -+ -+__get_slices () { -+ __systemctl list-units --all -t slice \ -+ | { while read -r a b; do echo $a; done; }; -+} -+ -+__slices () { -+ local -a _slices -+ _slices=(${(fo)"$(__get_slices)"}) -+ typeset -U _slices -+ _describe 'slices' _slices -+} -+ -+_arguments \ -+ {-h,--help}'[Show help message]' \ -+ '--version[Show package version]' \ -+ '--user[Run as user unit]' \ -+ '--scope[Run this as scope rather than service]' \ -+ '--unit=[Run under the specified unit name]:unit name' \ -+ '--description=[Description for unit]:description' \ -+ '--slice=[Run in the specified slice]:slices:__slices' \ -+ {-r,--remain-after-exit}'[Leave service around until explicitly stopped]' \ -+ '--send-sighup[Send SIGHUP when terminating]' \ -+ '*::command:_command' diff --git a/SOURCES/0082-nspawn-fix-use-after-free-and-leak-in-error-paths.patch b/SOURCES/0082-nspawn-fix-use-after-free-and-leak-in-error-paths.patch new file mode 100644 index 0000000..2c64837 --- /dev/null +++ b/SOURCES/0082-nspawn-fix-use-after-free-and-leak-in-error-paths.patch @@ -0,0 +1,40 @@ +From 28b5692e9ab3dbb07e4d6b8e44b370637c04ba86 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 7 Mar 2015 14:19:20 -0500 +Subject: [PATCH] nspawn: fix use-after-free and leak in error paths + +CID #1257765. + +(cherry picked from commit 8a16a7b4e7f6702a7e6edaead80ecf04be7d3ba2) +--- + src/nspawn/nspawn.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c +index 7724df9..78bd584 100644 +--- a/src/nspawn/nspawn.c ++++ b/src/nspawn/nspawn.c +@@ -3627,7 +3627,7 @@ int main(int argc, char *argv[]) { + } + + if (arg_ephemeral) { +- char *np; ++ _cleanup_free_ char *np = NULL; + + /* If the specified path is a mount point we + * generate the new snapshot immediately +@@ -3657,13 +3657,13 @@ int main(int argc, char *argv[]) { + + r = btrfs_subvol_snapshot(arg_directory, np, arg_read_only, true); + if (r < 0) { +- free(np); + log_error_errno(r, "Failed to create snapshot %s from %s: %m", np, arg_directory); + goto finish; + } + + free(arg_directory); + arg_directory = np; ++ np = NULL; + + remove_subvol = true; + diff --git a/SOURCES/0082-systemctl-fix-typo-in-help-text.patch b/SOURCES/0082-systemctl-fix-typo-in-help-text.patch deleted file mode 100644 index fe90610..0000000 --- a/SOURCES/0082-systemctl-fix-typo-in-help-text.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 9e6ece2b9eb8d57a9d724d6b7bbb92524ac52ad3 Mon Sep 17 00:00:00 2001 -From: Thomas Hindoe Paaboel Andersen -Date: Fri, 1 Nov 2013 20:46:49 +0100 -Subject: [PATCH] systemctl: fix typo in help text - ---- - src/systemctl/systemctl.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c -index 036828b..36040db 100644 ---- a/src/systemctl/systemctl.c -+++ b/src/systemctl/systemctl.c -@@ -4743,7 +4743,7 @@ static int systemctl_help(void) { - " -f --force When enabling unit files, override existing symlinks\n" - " When shutting down, execute action immediately\n" - " --root=PATH Enable unit files in the specified root directory\n" -- " -n --lines=INTEGER Numer of journal entries to show\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" - "Unit Commands:\n" diff --git a/SOURCES/0083-detect_virtualization-returns-NULL-pass-empty-string.patch b/SOURCES/0083-detect_virtualization-returns-NULL-pass-empty-string.patch deleted file mode 100644 index 55bd8bd..0000000 --- a/SOURCES/0083-detect_virtualization-returns-NULL-pass-empty-string.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 98ec954cba5abf87f29cf5122825eb565b5bdf64 Mon Sep 17 00:00:00 2001 -From: Kay Sievers -Date: Sat, 2 Nov 2013 00:01:32 +0100 -Subject: [PATCH] detect_virtualization() returns NULL; pass empty string to - dbus - ---- - src/core/dbus-manager.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c -index 7be5d13..6d16c2a 100644 ---- a/src/core/dbus-manager.c -+++ b/src/core/dbus-manager.c -@@ -466,7 +466,7 @@ static int bus_manager_append_progress(DBusMessageIter *i, const char *property, - - static int bus_manager_append_virt(DBusMessageIter *i, const char *property, void *data) { - Manager *m = data; -- const char *id = ""; -+ const char *id = NULL; - - assert(i); - assert(property); -@@ -474,6 +474,8 @@ static int bus_manager_append_virt(DBusMessageIter *i, const char *property, voi - - detect_virtualization(&id); - -+ if (!id) -+ id = ""; - if (!dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &id)) - return -ENOMEM; - diff --git a/SOURCES/0083-login-fix-copy-pasto-in-error-path.patch b/SOURCES/0083-login-fix-copy-pasto-in-error-path.patch new file mode 100644 index 0000000..609ac40 --- /dev/null +++ b/SOURCES/0083-login-fix-copy-pasto-in-error-path.patch @@ -0,0 +1,25 @@ +From d67968957aece7a1d4da581d86ad719c9a7fad21 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 7 Mar 2015 14:23:38 -0500 +Subject: [PATCH] login: fix copy-pasto in error path + +CID #1256583. + +(cherry picked from commit dcee01125dde502bd8108c36ddf2026c1348865f) +--- + src/login/inhibit.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/login/inhibit.c b/src/login/inhibit.c +index 44bda34..88af23e 100644 +--- a/src/login/inhibit.c ++++ b/src/login/inhibit.c +@@ -260,7 +260,7 @@ int main(int argc, char *argv[]) { + + fd = inhibit(bus, &error); + if (fd < 0) { +- log_error("Failed to inhibit: %s", bus_error_message(&error, -r)); ++ log_error("Failed to inhibit: %s", bus_error_message(&error, fd)); + return EXIT_FAILURE; + } + diff --git a/SOURCES/0084-journalctl-update-hint-now-that-we-set-ACL-everywher.patch b/SOURCES/0084-journalctl-update-hint-now-that-we-set-ACL-everywher.patch new file mode 100644 index 0000000..fbdd2f0 --- /dev/null +++ b/SOURCES/0084-journalctl-update-hint-now-that-we-set-ACL-everywher.patch @@ -0,0 +1,63 @@ +From cf04c51fb2d5ce08a8b8aafec999e2007ef53c83 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 8 Mar 2015 11:04:59 -0400 +Subject: [PATCH] journalctl: update hint now that we set ACL everywhere + +(cherry picked from commit 05c1853093d8c4e4aa16876b5129b65dac5abd01) +--- + src/journal/journalctl.c | 25 +++++++++++-------------- + 1 file changed, 11 insertions(+), 14 deletions(-) + +diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c +index 55c7786..12c869f 100644 +--- a/src/journal/journalctl.c ++++ b/src/journal/journalctl.c +@@ -1542,10 +1542,17 @@ static int access_check_var_log_journal(sd_journal *j) { + have_access = in_group("systemd-journal") > 0; + + if (!have_access) { ++ const char* dir; ++ ++ if (access("/run/log/journal", F_OK) >= 0) ++ dir = "/run/log/journal"; ++ else ++ dir = "/var/log/journal"; ++ + /* Let's enumerate all groups from the default ACL of + * the directory, which generally should allow access + * to most journal files too */ +- r = search_acl_groups(&g, "/var/log/journal/", &have_access); ++ r = search_acl_groups(&g, dir, &have_access); + if (r < 0) + return r; + } +@@ -1571,7 +1578,7 @@ static int access_check_var_log_journal(sd_journal *j) { + return log_oom(); + + log_notice("Hint: You are currently not seeing messages from other users and the system.\n" +- " Users in the groups '%s' can see all messages.\n" ++ " Users in groups '%s' can see all messages.\n" + " Pass -q to turn off this notice.", s); + } + } +@@ -1595,18 +1602,8 @@ static int access_check(sd_journal *j) { + + if (set_contains(j->errors, INT_TO_PTR(-EACCES))) { + #ifdef HAVE_ACL +- /* If /var/log/journal doesn't even exist, +- * unprivileged users have no access at all */ +- if (access("/var/log/journal", F_OK) < 0 && +- geteuid() != 0 && +- in_group("systemd-journal") <= 0) { +- log_error("Unprivileged users cannot access messages, unless persistent log storage is\n" +- "enabled. Users in the 'systemd-journal' group may always access messages."); +- return -EACCES; +- } +- +- /* If /var/log/journal exists, try to pring a nice +- notice if the user lacks access to it */ ++ /* If /run/log/journal or /var/log/journal exist, try ++ to pring a nice notice if the user lacks access to it. */ + if (!arg_quiet && geteuid() != 0) { + r = access_check_var_log_journal(j); + if (r < 0) diff --git a/SOURCES/0084-udev-builtin-keyboard-Fix-large-scan-codes-on-32-bit.patch b/SOURCES/0084-udev-builtin-keyboard-Fix-large-scan-codes-on-32-bit.patch deleted file mode 100644 index 648a718..0000000 --- a/SOURCES/0084-udev-builtin-keyboard-Fix-large-scan-codes-on-32-bit.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 4b2a44e3fa0e56b638dab29def3f499788a03334 Mon Sep 17 00:00:00 2001 -From: Martin Pitt -Date: Mon, 4 Nov 2013 07:25:45 +0100 -Subject: [PATCH] udev-builtin-keyboard: Fix large scan codes on 32 bit - architectures - -Use strtoul(), as scan codes are always positive. On 32 bit architectures -strtol gives wrong results: - - strtol("fffffff0", &endptr, 16) - -returns 2147483647 instead of 4294967280. - -https://launchpad.net/bugs/1247676 ---- - src/udev/udev-builtin-keyboard.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/udev/udev-builtin-keyboard.c b/src/udev/udev-builtin-keyboard.c -index ddd8535..8f457ab 100644 ---- a/src/udev/udev-builtin-keyboard.c -+++ b/src/udev/udev-builtin-keyboard.c -@@ -88,7 +88,7 @@ static int builtin_keyboard(struct udev_device *dev, int argc, char *argv[], boo - continue; - - /* KEYBOARD_KEY_= */ -- scancode = strtol(key + 13, &endptr, 16); -+ scancode = strtoul(key + 13, &endptr, 16); - if (endptr[0] != '\0') { - log_error("Error, unable to parse scan code from '%s'\n", key); - continue; diff --git a/SOURCES/0085-nspawn-log-out-of-memory-errors.patch b/SOURCES/0085-nspawn-log-out-of-memory-errors.patch deleted file mode 100644 index 3e6ba0c..0000000 --- a/SOURCES/0085-nspawn-log-out-of-memory-errors.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 472b443a7e1949f6d35d5216b6323424719d1b8c Mon Sep 17 00:00:00 2001 -From: Djalal Harouni -Date: Tue, 5 Nov 2013 15:26:37 +0100 -Subject: [PATCH] nspawn: log out of memory errors - ---- - src/nspawn/nspawn.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c -index 9616dbf..db47fbd 100644 ---- a/src/nspawn/nspawn.c -+++ b/src/nspawn/nspawn.c -@@ -224,6 +224,9 @@ static int parse_argv(int argc, char *argv[]) { - - case 'S': - arg_slice = strdup(optarg); -+ if (!arg_slice) -+ return log_oom(); -+ - break; - - case 'M': -@@ -315,11 +318,11 @@ static int parse_argv(int argc, char *argv[]) { - - r = strv_extend(x, a); - if (r < 0) -- return r; -+ return log_oom(); - - r = strv_extend(x, b); - if (r < 0) -- return r; -+ return log_oom(); - - break; - } diff --git a/SOURCES/0085-sd-journal-return-error-when-we-cannot-open-a-file.patch b/SOURCES/0085-sd-journal-return-error-when-we-cannot-open-a-file.patch new file mode 100644 index 0000000..71f0e41 --- /dev/null +++ b/SOURCES/0085-sd-journal-return-error-when-we-cannot-open-a-file.patch @@ -0,0 +1,26 @@ +From 5633544097b9c3bf3d63ef3be9e7db5d4e1f49dc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 8 Mar 2015 11:11:50 -0400 +Subject: [PATCH] sd-journal: return error when we cannot open a file + +Lack of this caused journalctl not to display a hint about missing groups +properly when the user lacks permissions. + +(cherry picked from commit 7b300be75e6d5755778dd7da63e7147866f21351) +--- + src/journal/sd-journal.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c +index 9b57e59..9b9e8ac 100644 +--- a/src/journal/sd-journal.c ++++ b/src/journal/sd-journal.c +@@ -1248,7 +1248,7 @@ static int add_file(sd_journal *j, const char *prefix, const char *filename) { + r = add_any_file(j, path); + if (r == -ENOENT) + return 0; +- return 0; ++ return r; + } + + static int remove_file(sd_journal *j, const char *prefix, const char *filename) { diff --git a/SOURCES/0086-man-fix-typo.patch b/SOURCES/0086-man-fix-typo.patch deleted file mode 100644 index b985a5a..0000000 --- a/SOURCES/0086-man-fix-typo.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 97df020a95852dddd28787ee846691c301b58807 Mon Sep 17 00:00:00 2001 -From: Ronny Chevalier -Date: Sun, 3 Nov 2013 15:07:31 +0100 -Subject: [PATCH] man: fix typo - ---- - man/systemd-run.xml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/man/systemd-run.xml b/man/systemd-run.xml -index e76a402..252335b 100644 ---- a/man/systemd-run.xml -+++ b/man/systemd-run.xml -@@ -60,7 +60,7 @@ along with systemd; If not, see . - - Description - -- systemd-run may be used create and start -+ systemd-run may be used to create and start - a transient .service or a - .scope unit and run the specified - COMMAND in it. diff --git a/SOURCES/0086-missing.h-add-NDA_.patch b/SOURCES/0086-missing.h-add-NDA_.patch new file mode 100644 index 0000000..80ace08 --- /dev/null +++ b/SOURCES/0086-missing.h-add-NDA_.patch @@ -0,0 +1,70 @@ +From eceb99d70a7c0916cb626dfbcb50894e1f4e9431 Mon Sep 17 00:00:00 2001 +From: Michael Olbrich +Date: Mon, 9 Mar 2015 12:27:25 +0100 +Subject: [PATCH] missing.h: add NDA_* + +This is necessary to build with older kernel headers. NDA_VLAN was +introduced in v3.9 and NDA_PORT, NDA_VNI and NDA_IFINDEX in v3.10 + +(cherry picked from commit cf1755bac0426132c21fdca519a336ce7d920277) +--- + configure.ac | 4 +++- + src/shared/missing.h | 16 ++++++++++++++++ + 2 files changed, 19 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 3201428..081ed0f 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -334,7 +334,8 @@ AC_CHECK_DECLS([IFLA_INET6_ADDR_GEN_MODE, + IFLA_VXLAN_LOCAL6, + IFLA_IPTUN_6RD_RELAY_PREFIXLEN, + IFLA_BRIDGE_VLAN_INFO, +- IFLA_BRPORT_UNICAST_FLOOD], ++ IFLA_BRPORT_UNICAST_FLOOD, ++ NDA_IFINDEX], + [], [], [[ + #include + #include +@@ -345,6 +346,7 @@ AC_CHECK_DECLS([IFLA_INET6_ADDR_GEN_MODE, + #include + #include + #include ++#include + ]]) + + # This makes sure pkg.m4 is available. +diff --git a/src/shared/missing.h b/src/shared/missing.h +index 8cb0b2c..6ef4dbd 100644 +--- a/src/shared/missing.h ++++ b/src/shared/missing.h +@@ -35,6 +35,7 @@ + #include + #include + #include ++#include + + #ifdef HAVE_AUDIT + #include +@@ -687,6 +688,21 @@ static inline int setns(int fd, int nstype) { + #define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1) + #endif + ++#if !HAVE_DECL_NDA_IFINDEX ++#define NDA_UNSPEC 0 ++#define NDA_DST 1 ++#define NDA_LLADDR 2 ++#define NDA_CACHEINFO 3 ++#define NDA_PROBES 4 ++#define NDA_VLAN 5 ++#define NDA_PORT 6 ++#define NDA_VNI 7 ++#define NDA_IFINDEX 8 ++#define __NDA_MAX 9 ++ ++#define NDA_MAX (__NDA_MAX - 1) ++#endif ++ + #ifndef IPV6_UNICAST_IF + #define IPV6_UNICAST_IF 76 + #endif diff --git a/SOURCES/0087-man-do-not-use-term-in-para.patch b/SOURCES/0087-man-do-not-use-term-in-para.patch deleted file mode 100644 index 20e3451..0000000 --- a/SOURCES/0087-man-do-not-use-term-in-para.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 2bdcb1a688e047a1b7712acc6d8efbcd7a437373 Mon Sep 17 00:00:00 2001 -From: Kay Sievers -Date: Tue, 5 Nov 2013 21:34:50 +0100 -Subject: [PATCH] man: do not use in - -Element term in namespace '' encountered in para, but no template matches. ---- - man/systemd.mount.xml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml -index 71a5736..df5a79e 100644 ---- a/man/systemd.mount.xml -+++ b/man/systemd.mount.xml -@@ -261,7 +261,7 @@ - a time span value such as "5min - 20s". Pass 0 to disable the timeout - logic. Default value is setted up in manager configuration -- file via DefaultTimeoutStart=. -+ file via DefaultTimeoutStart=. - - - diff --git a/SOURCES/0087-udevd-close-race-in-udev-settle.patch b/SOURCES/0087-udevd-close-race-in-udev-settle.patch new file mode 100644 index 0000000..280a322 --- /dev/null +++ b/SOURCES/0087-udevd-close-race-in-udev-settle.patch @@ -0,0 +1,85 @@ +From 175c446fc5ca6adbeeb25dfe0ef725e2f1914259 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Mon, 9 Mar 2015 16:16:23 +0100 +Subject: [PATCH] udevd: close race in udev settle + +The udev-settle guarantees that udevd is no longer processing any of the +events casued by udev-trigger. The way this works is that it sends a +synchronous PING to udevd after udev-trigger has ran, and when that returns +it knows that udevd has started processing the events from udev-trigger. +udev-settle will then wait for the event queue to empty before returning. + +However, there was a race here, as we would only update the /run state at +the beginning of the event loop, before reading out new events and before +processing the ping. + +That means that if the first uevent arrived in the same event-loop iteration +as the PING, we would return the ping before updating the queue state in /run +(which would happen on the next iteration). + +The race window here is tiny (as the /run state would probably get updated +before udev-settle got a chance to read /run), but still a possibility. + +Fix the problem by updating the /run state as the last step before returning +the PING. + +We must still update it at the beginning of the loop as well, otherwise we +risk being stuck in poll() with a stale state in /run. + +Reported-by: Daniel Drake +(cherry picked from commit db93e063bdffe0a8b95fcc522aeacddf62d1a9f9) +--- + src/udev/udevd.c | 26 +++++++++++++++++--------- + 1 file changed, 17 insertions(+), 9 deletions(-) + +diff --git a/src/udev/udevd.c b/src/udev/udevd.c +index 99d4c89..e98c1fd 100644 +--- a/src/udev/udevd.c ++++ b/src/udev/udevd.c +@@ -909,6 +909,17 @@ static void handle_signal(struct udev *udev, int signo) { + } + } + ++static void event_queue_update(void) { ++ if (!udev_list_node_is_empty(&event_list)) { ++ int fd; ++ ++ fd = open("/run/udev/queue", O_WRONLY|O_CREAT|O_CLOEXEC|O_TRUNC|O_NOFOLLOW, 0444); ++ if (fd >= 0) ++ close(fd); ++ } else ++ unlink("/run/udev/queue"); ++} ++ + static int systemd_fds(struct udev *udev, int *rctrl, int *rnetlink) { + int ctrl = -1, netlink = -1; + int fd, n; +@@ -1369,15 +1380,7 @@ int main(int argc, char *argv[]) { + } + + /* tell settle that we are busy or idle */ +- if (!udev_list_node_is_empty(&event_list)) { +- int fd; +- +- fd = open("/run/udev/queue", O_WRONLY|O_CREAT|O_CLOEXEC|O_TRUNC|O_NOFOLLOW, 0444); +- if (fd >= 0) +- close(fd); +- } else { +- unlink("/run/udev/queue"); +- } ++ event_queue_update(); + + fdcount = epoll_wait(fd_ep, ev, ELEMENTSOF(ev), timeout); + if (fdcount < 0) +@@ -1502,6 +1505,11 @@ int main(int argc, char *argv[]) { + if (is_inotify) + handle_inotify(udev); + ++ /* tell settle that we are busy or idle, this needs to be before the ++ * PING handling ++ */ ++ event_queue_update(); ++ + /* + * This needs to be after the inotify handling, to make sure, + * that the ping is send back after the possibly generated diff --git a/SOURCES/0088-man-document-that-ExecStartPre-is-not-the-place-to-s.patch b/SOURCES/0088-man-document-that-ExecStartPre-is-not-the-place-to-s.patch new file mode 100644 index 0000000..c115ee4 --- /dev/null +++ b/SOURCES/0088-man-document-that-ExecStartPre-is-not-the-place-to-s.patch @@ -0,0 +1,27 @@ +From 1c8b76caab7d5164ac2d0d09aff9e4ffecdf205e Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 9 Mar 2015 18:01:47 +0100 +Subject: [PATCH] man: document that ExecStartPre= is not the place to start + long-running processes + +(cherry picked from commit b481de3b22fcd838a8f059aed8745375afdb9eca) +--- + man/systemd.service.xml | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/man/systemd.service.xml b/man/systemd.service.xml +index c03b4e8..f598705 100644 +--- a/man/systemd.service.xml ++++ b/man/systemd.service.xml +@@ -334,6 +334,11 @@ + If any of those commands (not prefixed with + -) fail, the rest are not executed and the + unit is considered failed. ++ ++ Note that ExecStartPre= may not be ++ used to start long-running processes. All processes forked ++ off by processes invoked via ExecStartPre= will ++ be killed before the next service process is run. + + + diff --git a/SOURCES/0088-shutdown-trim-the-cgroup-tree-on-loop-iteration.patch b/SOURCES/0088-shutdown-trim-the-cgroup-tree-on-loop-iteration.patch deleted file mode 100644 index ad78f06..0000000 --- a/SOURCES/0088-shutdown-trim-the-cgroup-tree-on-loop-iteration.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 8742fc797d827ff92831af7d8af353e6bb073ddc Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 5 Nov 2013 22:17:03 +0100 -Subject: [PATCH] shutdown: trim the cgroup tree on loop iteration - -This way we leave the cgroup empty before exiting in a container which -makes sure the container manager will get cgroup notification event - -https://bugs.freedesktop.org/show_bug.cgi?id=68370 -https://bugzilla.redhat.com/show_bug.cgi?id=988883 ---- - src/core/shutdown.c | 16 +++++++++++++--- - 1 file changed, 13 insertions(+), 3 deletions(-) - -diff --git a/src/core/shutdown.c b/src/core/shutdown.c -index 4709746..ea02b60 100644 ---- a/src/core/shutdown.c -+++ b/src/core/shutdown.c -@@ -46,6 +46,7 @@ - #include "virt.h" - #include "watchdog.h" - #include "killall.h" -+#include "cgroup-util.h" - - #define FINALIZE_ATTEMPTS 50 - -@@ -131,12 +132,12 @@ static int pivot_to_new_root(void) { - } - - int main(int argc, char *argv[]) { -- _cleanup_free_ char *line = NULL; -- int cmd, r; -- unsigned retries; - bool need_umount = true, need_swapoff = true, need_loop_detach = true, need_dm_detach = true; - bool in_container, use_watchdog = false; -+ _cleanup_free_ char *line = NULL, *cgroup = NULL; - char *arguments[3]; -+ unsigned retries; -+ int cmd, r; - - /* suppress shutdown status output if 'quiet' is used */ - r = read_one_line_file("/proc/cmdline", &line); -@@ -186,6 +187,8 @@ int main(int argc, char *argv[]) { - goto error; - } - -+ cg_get_root_path(&cgroup); -+ - use_watchdog = !!getenv("WATCHDOG_USEC"); - - /* lock us into memory */ -@@ -210,6 +213,13 @@ int main(int argc, char *argv[]) { - if (use_watchdog) - watchdog_ping(); - -+ /* Let's trim the cgroup tree on each iteration so -+ that we leave an empty cgroup tree around, so that -+ container managers get a nice notify event when we -+ are down */ -+ if (cgroup) -+ cg_trim(SYSTEMD_CGROUP_CONTROLLER, cgroup, false); -+ - if (need_umount) { - log_info("Unmounting file systems."); - r = umount_all(&changed); diff --git a/SOURCES/0089-journal-fix-return-code.patch b/SOURCES/0089-journal-fix-return-code.patch new file mode 100644 index 0000000..2b26cf4 --- /dev/null +++ b/SOURCES/0089-journal-fix-return-code.patch @@ -0,0 +1,31 @@ +From 185e6b251907bdf6adc63866f38722e9fb3d3715 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 9 Mar 2015 17:46:30 -0400 +Subject: [PATCH] journal: fix return code + +Introduced in fa6ac76083b8ff. + +Might be related to CID #1261724, but I don't know if coverity can +recurse this deep. + +(cherry picked from commit 977eaa1eae53af7f418d87fcb42f4a4d34aad739) +--- + src/journal/journal-file.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c +index 24c49b9..f500568 100644 +--- a/src/journal/journal-file.c ++++ b/src/journal/journal-file.c +@@ -2652,10 +2652,8 @@ int journal_file_open( + } + + r = mmap_cache_get(f->mmap, f->fd, f->prot, CONTEXT_HEADER, true, 0, PAGE_ALIGN(sizeof(Header)), &f->last_stat, &h); +- if (r < 0) { +- r = -errno; ++ if (r < 0) + goto fail; +- } + + f->header = h; + diff --git a/SOURCES/0089-run-support-system-to-match-other-commands-even-if-r.patch b/SOURCES/0089-run-support-system-to-match-other-commands-even-if-r.patch deleted file mode 100644 index 74ec531..0000000 --- a/SOURCES/0089-run-support-system-to-match-other-commands-even-if-r.patch +++ /dev/null @@ -1,112 +0,0 @@ -From 8588ecf209ae4f8a198614b3786c58e584528f98 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 6 Nov 2013 17:31:20 +0100 -Subject: [PATCH] run: support --system to match other commands, even if - redundant - -Conflicts: - man/systemd-run.xml - src/run/run.c ---- - man/systemd-run.xml | 9 +++++++++ - src/run/run.c | 20 +++++++++++++------- - 2 files changed, 22 insertions(+), 7 deletions(-) - -diff --git a/man/systemd-run.xml b/man/systemd-run.xml -index 252335b..48a0715 100644 ---- a/man/systemd-run.xml -+++ b/man/systemd-run.xml -@@ -113,6 +113,15 @@ along with systemd; If not, see . - - - -+ -+ -+ -+ Talk to the service manager of the system. This is the -+ implied default. -+ -+ -+ -+ - - - -diff --git a/src/run/run.c b/src/run/run.c -index 18a4920..a6abead 100644 ---- a/src/run/run.c -+++ b/src/run/run.c -@@ -61,6 +61,7 @@ static int parse_argv(int argc, char *argv[]) { - enum { - ARG_VERSION = 0x100, - ARG_USER, -+ ARG_SYSTEM, - ARG_SCOPE, - ARG_UNIT, - ARG_DESCRIPTION, -@@ -72,6 +73,7 @@ static int parse_argv(int argc, char *argv[]) { - { "help", no_argument, NULL, 'h' }, - { "version", no_argument, NULL, ARG_VERSION }, - { "user", no_argument, NULL, ARG_USER }, -+ { "system", no_argument, NULL, ARG_SYSTEM }, - { "scope", no_argument, NULL, ARG_SCOPE }, - { "unit", required_argument, NULL, ARG_UNIT }, - { "description", required_argument, NULL, ARG_DESCRIPTION }, -@@ -103,6 +105,10 @@ static int parse_argv(int argc, char *argv[]) { - arg_user = true; - break; - -+ case ARG_SYSTEM: -+ arg_user = false; -+ break; -+ - case ARG_SCOPE: - arg_scope = true; - break; -@@ -333,12 +339,12 @@ int main(int argc, char* argv[]) { - - r = parse_argv(argc, argv); - if (r <= 0) -- goto fail; -+ goto finish; - - r = find_binary(argv[optind], &command); - if (r < 0) { - log_error("Failed to find executable %s: %s", argv[optind], strerror(-r)); -- goto fail; -+ goto finish; - } - argv[optind] = command; - -@@ -346,7 +352,7 @@ int main(int argc, char* argv[]) { - description = strv_join(argv + optind, " "); - if (!description) { - r = log_oom(); -- goto fail; -+ goto finish; - } - - arg_description = description; -@@ -357,8 +363,8 @@ int main(int argc, char* argv[]) { - else - r = sd_bus_open_system(&bus); - if (r < 0) { -- log_error("Failed to create new bus connection: %s", strerror(-r)); -- goto fail; -+ log_error("Failed to create bus connection: %s", strerror(-r)); -+ goto finish; - } - - if (arg_scope) -@@ -368,9 +374,9 @@ int main(int argc, char* argv[]) { - if (r < 0) { - log_error("Failed start transient unit: %s", error.message ? error.message : strerror(-r)); - sd_bus_error_free(&error); -- goto fail; -+ goto finish; - } - --fail: -+finish: - return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; - } diff --git a/SOURCES/0090-acpi-fpdt-break-on-zero-or-negative-length-read.patch b/SOURCES/0090-acpi-fpdt-break-on-zero-or-negative-length-read.patch deleted file mode 100644 index 9807e91..0000000 --- a/SOURCES/0090-acpi-fpdt-break-on-zero-or-negative-length-read.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 113e2da2789ac680d2042993dcf76eef43072f4d Mon Sep 17 00:00:00 2001 -From: Pavel Holica -Date: Wed, 6 Nov 2013 23:24:16 +0100 -Subject: [PATCH] acpi-fpdt: break on zero or negative length read - -https://bugzilla.redhat.com/show_bug.cgi?id=1027478 ---- - src/shared/acpi-fpdt.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/shared/acpi-fpdt.c b/src/shared/acpi-fpdt.c -index 75648b4..7bae47f 100644 ---- a/src/shared/acpi-fpdt.c -+++ b/src/shared/acpi-fpdt.c -@@ -109,6 +109,8 @@ int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit) { - for (rec = (struct acpi_fpdt_header *)(buf + sizeof(struct acpi_table_header)); - (char *)rec < buf + l; - rec = (struct acpi_fpdt_header *)((char *)rec + rec->length)) { -+ if (rec->length <= 0) -+ break; - if (rec->type != ACPI_FPDT_TYPE_BOOT) - continue; - if (rec->length != sizeof(struct acpi_fpdt_header)) diff --git a/SOURCES/0090-console-fix-error-code-inversion.patch b/SOURCES/0090-console-fix-error-code-inversion.patch new file mode 100644 index 0000000..b6095ee --- /dev/null +++ b/SOURCES/0090-console-fix-error-code-inversion.patch @@ -0,0 +1,27 @@ +From 6e2893aa4e1d6471b174e56c5132da31f890d620 Mon Sep 17 00:00:00 2001 +From: David Herrmann +Date: Tue, 16 Dec 2014 16:14:48 +0100 +Subject: [PATCH] console: fix error-code inversion + +The error-code propagated via sysview is always negative. Avoid +multiplying by -1 before returning it. Otherwise, we will return >0 +instead of <0, which will not be detected as error by sysview-core. + +(cherry picked from commit 84c3561c58dd992b339afe5bb4c41971a2ebc486) +--- + src/console/consoled-manager.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/console/consoled-manager.c b/src/console/consoled-manager.c +index 9dd62f0..25de0a2 100644 +--- a/src/console/consoled-manager.c ++++ b/src/console/consoled-manager.c +@@ -228,7 +228,7 @@ static int manager_sysview_session_control(Manager *m, sysview_event *event) { + sysview_session_get_name(session)); + session_free(s); + sysview_session_set_userdata(session, NULL); +- return -error; ++ return error; + } + + return 0; diff --git a/SOURCES/0091-bus-proxy-complain-only-once-about-queue-overflows.patch b/SOURCES/0091-bus-proxy-complain-only-once-about-queue-overflows.patch new file mode 100644 index 0000000..d087b18 --- /dev/null +++ b/SOURCES/0091-bus-proxy-complain-only-once-about-queue-overflows.patch @@ -0,0 +1,72 @@ +From 4c6c21f92a8204abf031e42bb4949a0ecf039f7a Mon Sep 17 00:00:00 2001 +From: David Herrmann +Date: Wed, 11 Mar 2015 13:53:21 +0100 +Subject: [PATCH] bus-proxy: complain only once about queue overflows + +If the local peer does not dispatch its incoming queue, the bus-proxy will +slowly fill its outgoing queue. Once its full, it will continously +complain that it cannot forward its messages. + +As it turns out, pulseaudio does have an idle background dbus connection +that is not integrated into any mainloop (and given that gdbus and +libdbus1 both support background shared connections, PA is probably not +the only example), therefore, the bus-proxy will loudly complain if it +cannot forward NameOwnerChanged events once the queue is full. + +This commit makes the proxy track queue-state and complain only once the +queue runs full, not if it is already full. + +A PA bug-report (and patch) has been filed, and other applications should +be fixed similarly. Hence, lets keep the error message, instead of +dropping it. It's unused resources we really want to get rid of, so +silencing the message does not really help (which is actually what +dbus-daemon does). + +(cherry picked from commit ec2c7b56599981a7d9e76b15c75af3e1af3e6f81) +--- + src/bus-proxyd/proxy.c | 16 ++++++++++++---- + src/bus-proxyd/proxy.h | 1 + + 2 files changed, 13 insertions(+), 4 deletions(-) + +diff --git a/src/bus-proxyd/proxy.c b/src/bus-proxyd/proxy.c +index 3dea908..e13cf5e 100644 +--- a/src/bus-proxyd/proxy.c ++++ b/src/bus-proxyd/proxy.c +@@ -729,13 +729,21 @@ static int proxy_process_destination_to_local(Proxy *p) { + + /* Return the error to the client, if we can */ + synthetic_reply_method_errnof(m, r, "Failed to forward message we got from destination: %m"); +- log_error_errno(r, +- "Failed to forward message we got from destination: uid=" UID_FMT " gid=" GID_FMT" message=%s destination=%s path=%s interface=%s member=%s: %m", +- p->local_creds.uid, p->local_creds.gid, bus_message_type_to_string(m->header->type), +- strna(m->destination), strna(m->path), strna(m->interface), strna(m->member)); ++ if (r == -ENOBUFS) { ++ /* if local dbus1 peer does not dispatch its queue, warn only once */ ++ if (!p->queue_overflow) ++ log_error("Dropped messages due to queue overflow of local peer (pid: "PID_FMT" uid: "UID_FMT")", p->local_creds.pid, p->local_creds.uid); ++ p->queue_overflow = true; ++ } else ++ log_error_errno(r, ++ "Failed to forward message we got from destination: uid=" UID_FMT " gid=" GID_FMT" message=%s destination=%s path=%s interface=%s member=%s: %m", ++ p->local_creds.uid, p->local_creds.gid, bus_message_type_to_string(m->header->type), ++ strna(m->destination), strna(m->path), strna(m->interface), strna(m->member)); ++ + return 1; + } + ++ p->queue_overflow = false; + return 1; + } + +diff --git a/src/bus-proxyd/proxy.h b/src/bus-proxyd/proxy.h +index 913d470..782c4e6 100644 +--- a/src/bus-proxyd/proxy.h ++++ b/src/bus-proxyd/proxy.h +@@ -40,6 +40,7 @@ struct Proxy { + SharedPolicy *policy; + + bool got_hello : 1; ++ bool queue_overflow : 1; + }; + + int proxy_new(Proxy **out, int in_fd, int out_fd, const char *dest); diff --git a/SOURCES/0091-man-add-rationale-into-systemd-halt-8.patch b/SOURCES/0091-man-add-rationale-into-systemd-halt-8.patch deleted file mode 100644 index d678ec3..0000000 --- a/SOURCES/0091-man-add-rationale-into-systemd-halt-8.patch +++ /dev/null @@ -1,28 +0,0 @@ -From e701defc239f63731940b8d0867405e0b36b9ada Mon Sep 17 00:00:00 2001 -From: Jan Engelhardt -Date: Thu, 7 Nov 2013 01:17:49 +0100 -Subject: [PATCH] man: add rationale into systemd-halt(8) - -The explanation is from -http://people.debian.org/~stapelberg/docs/systemd-dependencies.html ---- - man/systemd-halt.service.xml | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/man/systemd-halt.service.xml b/man/systemd-halt.service.xml -index 812281e..90b443f 100644 ---- a/man/systemd-halt.service.xml -+++ b/man/systemd-halt.service.xml -@@ -83,6 +83,12 @@ - remaining swap devices, detach all remaining storage - devices and kill all remaining processes. - -+ 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 -+ then cannot be re-mounted read-only. -+ - Immediately before executing the actual system - halt/poweroff/reboot/kexec - systemd-shutdown will run all diff --git a/SOURCES/0092-cgtop-fix-assert-when-not-on-tty.patch b/SOURCES/0092-cgtop-fix-assert-when-not-on-tty.patch new file mode 100644 index 0000000..1418d3d --- /dev/null +++ b/SOURCES/0092-cgtop-fix-assert-when-not-on-tty.patch @@ -0,0 +1,31 @@ +From 33088d83ecaf03611e3d20a893e675e4d7c3ae9a Mon Sep 17 00:00:00 2001 +From: Umut Tezduyar Lindskog +Date: Wed, 11 Mar 2015 11:24:18 +0100 +Subject: [PATCH] cgtop: fix assert when not on tty + +systemd-cgtop --dept=1 -b -n 10 -d 0.1 | cat + +Assertion 'new_length >= 3' failed at src/shared/util.c:3 \ +595, function ellipsize_mem(). Aborting. +Aborted (core dumped) + +(David: add comment) + +(cherry picked from commit 510c4a0f1e7e7efe2897d2fbb9067f121467b103) +--- + src/cgtop/cgtop.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c +index 3c7ad40..f951c37 100644 +--- a/src/cgtop/cgtop.c ++++ b/src/cgtop/cgtop.c +@@ -447,7 +447,7 @@ static int display(Hashmap *a) { + Group *g; + Group **array; + signed path_columns; +- unsigned rows, n = 0, j, maxtcpu = 0, maxtpath = 0; ++ unsigned rows, n = 0, j, maxtcpu = 0, maxtpath = 3; /* 3 for ellipsize() to work properly */ + char buffer[MAX3(21, FORMAT_BYTES_MAX, FORMAT_TIMESPAN_MAX)]; + + assert(a); diff --git a/SOURCES/0092-systemd-python-convert-keyword-value-to-string.patch b/SOURCES/0092-systemd-python-convert-keyword-value-to-string.patch deleted file mode 100644 index ab97a86..0000000 --- a/SOURCES/0092-systemd-python-convert-keyword-value-to-string.patch +++ /dev/null @@ -1,27 +0,0 @@ -From f9c5cdfe9fe4d3ac8b075ed55d58f79cc067cdae Mon Sep 17 00:00:00 2001 -From: Richard Marko -Date: Tue, 5 Nov 2013 15:41:20 +0100 -Subject: [PATCH] systemd-python: convert keyword value to string - -Allows using journal.send('msg', PRIORITY=journal.LOG_CRIT) - -Before this commit this results in -TypeError: cannot concatenate 'str' and 'int' objects -and requires passing PRIORITY value as string to work. ---- - src/python-systemd/journal.py | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/python-systemd/journal.py b/src/python-systemd/journal.py -index d0bcd24..9c7e004 100644 ---- a/src/python-systemd/journal.py -+++ b/src/python-systemd/journal.py -@@ -352,6 +352,8 @@ def get_catalog(mid): - def _make_line(field, value): - if isinstance(value, bytes): - return field.encode('utf-8') + b'=' + value -+ elif isinstance(value, int): -+ return field + '=' + str(value) - else: - return field + '=' + value - diff --git a/SOURCES/0093-Make-hibernation-test-work-for-swap-files.patch b/SOURCES/0093-Make-hibernation-test-work-for-swap-files.patch deleted file mode 100644 index 08a6534..0000000 --- a/SOURCES/0093-Make-hibernation-test-work-for-swap-files.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 4baeb24c8002e602d9eca1ba240aa2e166de4ae6 Mon Sep 17 00:00:00 2001 -From: Jan Janssen -Date: Thu, 31 Oct 2013 17:22:03 +0100 -Subject: [PATCH] Make hibernation test work for swap files - -Suspend to disk works for swap files too (even if it is located -on an ecrypted file system): -https://www.kernel.org/doc/Documentation/power/swsusp-and-swap-files.txt ---- - 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 d068bfc..2bb0493 100644 ---- a/src/shared/sleep-config.c -+++ b/src/shared/sleep-config.c -@@ -206,7 +206,7 @@ static int hibernation_partition_size(size_t *size, size_t *used) { - if (!d) - return -ENOMEM; - -- if (!streq(type, "partition")) { -+ if (!streq(type, "partition") && !streq(type, "file")) { - log_debug("Partition %s has type %s, ignoring.", d, type); - continue; - } diff --git a/SOURCES/0093-man-split-paragraph.patch b/SOURCES/0093-man-split-paragraph.patch new file mode 100644 index 0000000..8833a00 --- /dev/null +++ b/SOURCES/0093-man-split-paragraph.patch @@ -0,0 +1,28 @@ +From 682a699e71147673f8de5fa12dbec8f2a4c28d9c Mon Sep 17 00:00:00 2001 +From: David Herrmann +Date: Thu, 12 Mar 2015 12:46:46 +0100 +Subject: [PATCH] man: split paragraph + +Explicitly put the "multiple EnvironmentFile=" description into its own +paragraph to make it much easier to find. + +(cherry picked from commit f407824d751a9cb31abfdf0343fe179e0efef259) +--- + man/systemd.exec.xml | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml +index 11b160e..fdb1578 100644 +--- a/man/systemd.exec.xml ++++ b/man/systemd.exec.xml +@@ -283,7 +283,9 @@ + shortly before the process is executed (more specifically, + after all processes from a previous unit state terminated. + This means you can generate these files in one unit state, and +- read it with this option in the next). Settings from these ++ read it with this option in the next). ++ ++ Settings from these + files override settings made with + Environment=. If the same variable is set + twice from these files, the files will be read in the order diff --git a/SOURCES/0094-hwdb-update.patch b/SOURCES/0094-hwdb-update.patch new file mode 100644 index 0000000..7b5c751 --- /dev/null +++ b/SOURCES/0094-hwdb-update.patch @@ -0,0 +1,3156 @@ +From 31eb7c2966a9a52b57cc4ac1f678c9149b8e57ed Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Thu, 12 Mar 2015 18:34:23 +0100 +Subject: [PATCH] hwdb: update + +(cherry picked from commit b83cbcb7d95482baa588706227f01bbbe44b9d12) +--- + hwdb/20-OUI.hwdb | 247 ++++++++++- + hwdb/20-pci-vendor-model.hwdb | 936 +++++++++++++++++++++++++++-------------- + hwdb/20-sdio-vendor-model.hwdb | 30 ++ + hwdb/20-usb-vendor-model.hwdb | 181 +++++++- + 4 files changed, 1060 insertions(+), 334 deletions(-) + +diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb +index 6976bdf..deb323d 100644 +--- a/hwdb/20-OUI.hwdb ++++ b/hwdb/20-OUI.hwdb +@@ -28829,7 +28829,7 @@ OUI:0013EB* + ID_OUI_FROM_DATABASE=Sysmaster Corporation + + OUI:0013EC* +- ID_OUI_FROM_DATABASE=Sunbay Software AG ++ ID_OUI_FROM_DATABASE=Netsnapper Technologies SARL + + OUI:0013ED* + ID_OUI_FROM_DATABASE=PSIA +@@ -44296,6 +44296,9 @@ OUI:0030FE* + OUI:0030FF* + ID_OUI_FROM_DATABASE=DATAFAB SYSTEMS, INC. + ++OUI:00323A* ++ ID_OUI_FROM_DATABASE=so-logic ++ + OUI:00336C* + ID_OUI_FROM_DATABASE=SynapSense Corporation + +@@ -44513,7 +44516,7 @@ OUI:004035* + ID_OUI_FROM_DATABASE=OPCOM + + OUI:004036* +- ID_OUI_FROM_DATABASE=TRIBE COMPUTER WORKS, INC. ++ ID_OUI_FROM_DATABASE=Zoom Telephonics, Inc + + OUI:004037* + ID_OUI_FROM_DATABASE=SEA-ILAN, INC. +@@ -50456,7 +50459,7 @@ OUI:00D093* + ID_OUI_FROM_DATABASE=TQ - COMPONENTS GMBH + + OUI:00D094* +- ID_OUI_FROM_DATABASE=TIMELINE VISTA, INC. ++ ID_OUI_FROM_DATABASE=Seeion Control LLC + + OUI:00D095* + ID_OUI_FROM_DATABASE=Alcatel-Lucent, Enterprise Business Group +@@ -52561,6 +52564,9 @@ OUI:082719* + OUI:082AD0* + ID_OUI_FROM_DATABASE=SRD Innovations Inc. + ++OUI:082CB0* ++ ID_OUI_FROM_DATABASE=Network Instruments ++ + OUI:082E5F* + ID_OUI_FROM_DATABASE=Hewlett Packard + +@@ -52699,6 +52705,9 @@ OUI:088E4F* + OUI:088F2C* + ID_OUI_FROM_DATABASE=Hills Sound Vision & Lighting + ++OUI:08952A* ++ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc ++ + OUI:0896D7* + ID_OUI_FROM_DATABASE=AVM GmbH + +@@ -52804,6 +52813,9 @@ OUI:08EB74* + OUI:08EBED* + ID_OUI_FROM_DATABASE=World Elite Technology Co.,LTD + ++OUI:08ECA9* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:08EDB9* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + +@@ -53320,6 +53332,9 @@ OUI:103DEA* + OUI:1040F3* + ID_OUI_FROM_DATABASE=Apple + ++OUI:10417F* ++ ID_OUI_FROM_DATABASE=Apple Inc ++ + OUI:104369* + ID_OUI_FROM_DATABASE=Soundmax Electronic Limited + +@@ -53611,6 +53626,9 @@ OUI:141330* + OUI:14144B* + ID_OUI_FROM_DATABASE=FUJIAN STAR-NET COMMUNICATION CO.,LTD + ++OUI:14157C* ++ ID_OUI_FROM_DATABASE=TOKYO COSMOS ELECTRIC CO.,LTD. ++ + OUI:141A51* + ID_OUI_FROM_DATABASE=Treetech Sistemas Digitais + +@@ -53656,6 +53674,9 @@ OUI:14307A* + OUI:1430C6* + ID_OUI_FROM_DATABASE=Motorola Mobility LLC + ++OUI:1432D1* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:14358B* + ID_OUI_FROM_DATABASE=Mediabridge Products, LLC. + +@@ -53716,6 +53737,9 @@ OUI:1458D0* + OUI:145A05* + ID_OUI_FROM_DATABASE=Apple + ++OUI:145A83* ++ ID_OUI_FROM_DATABASE=Logi-D inc ++ + OUI:145BD1* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + +@@ -53929,6 +53953,9 @@ OUI:181420* + OUI:181456* + ID_OUI_FROM_DATABASE=Nokia Corporation + ++OUI:1816C9* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:181714* + ID_OUI_FROM_DATABASE=DAEWOOIS + +@@ -54049,6 +54076,9 @@ OUI:185936* + OUI:185AE8* + ID_OUI_FROM_DATABASE=Zenotech.Co.,Ltd + ++OUI:185D9A* ++ ID_OUI_FROM_DATABASE=BobjGear LLC ++ + OUI:18622C* + ID_OUI_FROM_DATABASE=SAGEMCOM SAS + +@@ -54532,6 +54562,9 @@ OUI:1CAB01* + OUI:1CABA7* + ID_OUI_FROM_DATABASE=Apple + ++OUI:1CADD1* ++ ID_OUI_FROM_DATABASE=Bosung Electronics Co., Ltd. ++ + OUI:1CAF05* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -54937,6 +54970,9 @@ OUI:20DCE6* + OUI:20DF3F* + ID_OUI_FROM_DATABASE=Nanjing SAC Power Grid Automation Co., Ltd. + ++OUI:20E407* ++ ID_OUI_FROM_DATABASE=Spark srl ++ + OUI:20E52A* + ID_OUI_FROM_DATABASE=NETGEAR INC., + +@@ -55252,6 +55288,9 @@ OUI:24E271* + OUI:24E314* + ID_OUI_FROM_DATABASE=Apple + ++OUI:24E5AA* ++ ID_OUI_FROM_DATABASE=Philips Oral Healthcare, Inc. ++ + OUI:24E6BA* + ID_OUI_FROM_DATABASE=JSC Zavod im. Kozitsky + +@@ -56185,6 +56224,9 @@ OUI:308730* + OUI:308999* + ID_OUI_FROM_DATABASE=Guangdong East Power Co., + ++OUI:3089D3* ++ ID_OUI_FROM_DATABASE=Shenzhen ucloudlink new technology co.,LTD ++ + OUI:308CFB* + ID_OUI_FROM_DATABASE=Dropcam + +@@ -56461,6 +56503,9 @@ OUI:3476C5* + OUI:347877* + ID_OUI_FROM_DATABASE=O-NET Communications(Shenzhen) Limited + ++OUI:347A60* ++ ID_OUI_FROM_DATABASE=Pace plc ++ + OUI:347E39* + ID_OUI_FROM_DATABASE=Nokia Danmark A/S + +@@ -56506,6 +56551,9 @@ OUI:3499D7* + OUI:349A0D* + ID_OUI_FROM_DATABASE=ZBD Displays Ltd + ++OUI:349B5B* ++ ID_OUI_FROM_DATABASE=Maquet GmbH ++ + OUI:349D90* + ID_OUI_FROM_DATABASE=Heinzmann GmbH & CO. KG + +@@ -57256,6 +57304,9 @@ OUI:3CA10D* + OUI:3CA315* + ID_OUI_FROM_DATABASE=Bless Information & Communications Co., Ltd + ++OUI:3CA31A* ++ ID_OUI_FROM_DATABASE=Oilfind International LLC ++ + OUI:3CA72B* + ID_OUI_FROM_DATABASE=MRV Communications (Networks) LTD + +@@ -57343,6 +57394,9 @@ OUI:3CD92B* + OUI:3CD9CE* + ID_OUI_FROM_DATABASE=Eclipse WiFi + ++OUI:3CDA2A* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:3CDF1E* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + +@@ -57592,6 +57646,9 @@ OUI:408B07* + OUI:408BF6* + ID_OUI_FROM_DATABASE=Shenzhen TCL New Technology Co; Ltd. + ++OUI:408D5C* ++ ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD. ++ + OUI:409558* + ID_OUI_FROM_DATABASE=Aisino Corporation + +@@ -58093,6 +58150,9 @@ OUI:44ED57* + OUI:44EE30* + ID_OUI_FROM_DATABASE=Budelmann Elektronik GmbH + ++OUI:44F436* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:44F459* + ID_OUI_FROM_DATABASE=Samsung Electronics + +@@ -58117,6 +58177,9 @@ OUI:48066A* + OUI:480C49* + ID_OUI_FROM_DATABASE=NAKAYO TELECOMMUNICATIONS,INC + ++OUI:480FCF* ++ ID_OUI_FROM_DATABASE=Hewlett Packard ++ + OUI:481249* + ID_OUI_FROM_DATABASE=Luxcom Technologies Inc. + +@@ -58171,6 +58234,9 @@ OUI:4846F1* + OUI:4846FB* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:485073* ++ ID_OUI_FROM_DATABASE=Microsoft Corporation ++ + OUI:4851B7* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -58636,6 +58702,9 @@ OUI:4CB199* + OUI:4CB4EA* + ID_OUI_FROM_DATABASE=HRD (S) PTE., LTD. + ++OUI:4CB76D* ++ ID_OUI_FROM_DATABASE=Novi Security ++ + OUI:4CB81C* + ID_OUI_FROM_DATABASE=SAM Electronics GmbH + +@@ -58705,6 +58774,9 @@ OUI:4CEB42* + OUI:4CEDDE* + ID_OUI_FROM_DATABASE=Askey Computer Corp + ++OUI:4CEEB0* ++ ID_OUI_FROM_DATABASE=SHC Netzwerktechnik GmbH ++ + OUI:4CF02E* + ID_OUI_FROM_DATABASE=Vifa Denmark A/S + +@@ -59032,6 +59104,9 @@ OUI:50ED94* + OUI:50F003* + ID_OUI_FROM_DATABASE=Open Stack, Inc. + ++OUI:50F0D3* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:50F43C* + ID_OUI_FROM_DATABASE=Leeo Inc + +@@ -59137,6 +59212,9 @@ OUI:5439DF* + OUI:543D37* + ID_OUI_FROM_DATABASE=Ruckus Wireless + ++OUI:5440AD* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:544249* + ID_OUI_FROM_DATABASE=Sony Corporation + +@@ -59170,6 +59248,9 @@ OUI:545EBD* + OUI:545FA9* + ID_OUI_FROM_DATABASE=Teracom Limited + ++OUI:546172* ++ ID_OUI_FROM_DATABASE=ZODIAC AEROSPACE SAS ++ + OUI:5461EA* + ID_OUI_FROM_DATABASE=Zaplox AB + +@@ -59284,6 +59365,9 @@ OUI:54BEF7* + OUI:54C80F* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + ++OUI:54CD10* ++ ID_OUI_FROM_DATABASE=Panasonic Mobile Communications Co.,Ltd. ++ + OUI:54CDA7* + ID_OUI_FROM_DATABASE=Fujian Shenzhou Electronic Co.,Ltd + +@@ -59794,6 +59878,9 @@ OUI:5C41E7* + OUI:5C43D2* + ID_OUI_FROM_DATABASE=HAZEMEYER + ++OUI:5C4527* ++ ID_OUI_FROM_DATABASE=Juniper Networks ++ + OUI:5C4A26* + ID_OUI_FROM_DATABASE=Enguity Technology Corp + +@@ -59911,6 +59998,9 @@ OUI:5CAAFD* + OUI:5CAC4C* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + ++OUI:5CB395* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:5CB43E* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -60859,6 +60949,9 @@ OUI:64F970* + OUI:64F987* + ID_OUI_FROM_DATABASE=Avvasi Inc. + ++OUI:64FB81* ++ ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information. ++ + OUI:64FC8C* + ID_OUI_FROM_DATABASE=Zonar Systems + +@@ -61417,6 +61510,9 @@ OUI:6C9CE9* + OUI:6C9CED* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + ++OUI:6CA100* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:6CA682* + ID_OUI_FROM_DATABASE=EDAM information & communications + +@@ -61507,6 +61603,9 @@ OUI:6CD68A* + OUI:6CDC6A* + ID_OUI_FROM_DATABASE=Promethean Limited + ++OUI:6CE01E* ++ ID_OUI_FROM_DATABASE=Modcam AB ++ + OUI:6CE0B0* + ID_OUI_FROM_DATABASE=SOUND4 + +@@ -62119,6 +62218,9 @@ OUI:747E2D* + OUI:748114* + ID_OUI_FROM_DATABASE=Apple + ++OUI:74852A* ++ ID_OUI_FROM_DATABASE=PEGATRON CORPORATION ++ + OUI:74867A* + ID_OUI_FROM_DATABASE=Dell Inc + +@@ -62548,6 +62650,9 @@ OUI:789ED0* + OUI:789F4C* + ID_OUI_FROM_DATABASE=HOERBIGER Elektronik GmbH + ++OUI:789F70* ++ ID_OUI_FROM_DATABASE=Apple Inc ++ + OUI:789F87* + ID_OUI_FROM_DATABASE=Siemens AG I IA PP PRM + +@@ -62620,6 +62725,12 @@ OUI:78B81A* + OUI:78BAD0* + ID_OUI_FROM_DATABASE=Shinybow Technology Co. Ltd. + ++OUI:78BAF9* ++ ID_OUI_FROM_DATABASE=Cisco ++ ++OUI:78BDBC* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:78BEB6* + ID_OUI_FROM_DATABASE=Enhanced Vision + +@@ -63002,7 +63113,7 @@ OUI:7CB21B* + ID_OUI_FROM_DATABASE=Cisco SPVTG + + OUI:7CB232* +- ID_OUI_FROM_DATABASE=TCL King High Frequency EI,Co.,LTD ++ ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD + + OUI:7CB542* + ID_OUI_FROM_DATABASE=ACES Technology +@@ -63133,6 +63244,9 @@ OUI:7CF429* + OUI:7CF854* + ID_OUI_FROM_DATABASE=Samsung Electronics + ++OUI:7CF90E* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:7CFADF* + ID_OUI_FROM_DATABASE=Apple + +@@ -63235,6 +63349,9 @@ OUI:8038FD* + OUI:8039E5* + ID_OUI_FROM_DATABASE=PATLITE CORPORATION + ++OUI:803B2A* ++ ID_OUI_FROM_DATABASE=ABB Xiamen Low Voltage Equipment Co.,Ltd. ++ + OUI:803B9A* + ID_OUI_FROM_DATABASE=ghe-ces electronic ag + +@@ -63262,6 +63379,9 @@ OUI:804971* + OUI:804B20* + ID_OUI_FROM_DATABASE=Ventilation Control + ++OUI:804E81* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:804F58* + ID_OUI_FROM_DATABASE=ThinkEco, Inc. + +@@ -63514,6 +63634,9 @@ OUI:840B2D* + OUI:840F45* + ID_OUI_FROM_DATABASE=Shanghai GMT Digital Technologies Co., Ltd + ++OUI:84119E* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:841715* + ID_OUI_FROM_DATABASE=GP Electronics (HK) Ltd. + +@@ -63580,6 +63703,9 @@ OUI:842B50* + OUI:842BBC* + ID_OUI_FROM_DATABASE=Modelleisenbahn GmbH + ++OUI:842E27* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:842F75* + ID_OUI_FROM_DATABASE=Innokas Group + +@@ -63943,6 +64069,9 @@ OUI:883612* + OUI:883B8B* + ID_OUI_FROM_DATABASE=Cheering Connection Co. Ltd. + ++OUI:884157* ++ ID_OUI_FROM_DATABASE=Shenzhen Atsmart Technology Co.,Ltd. ++ + OUI:8841C1* + ID_OUI_FROM_DATABASE=ORBISAT DA AMAZONIA IND E AEROL SA + +@@ -64006,6 +64135,9 @@ OUI:88708C* + OUI:8870EF* + ID_OUI_FROM_DATABASE=SC Professional Trading Co., Ltd. + ++OUI:887384* ++ ID_OUI_FROM_DATABASE=Toshiba ++ + OUI:887398* + ID_OUI_FROM_DATABASE=K2E Tekpoint + +@@ -64039,6 +64171,9 @@ OUI:888B5D* + OUI:888C19* + ID_OUI_FROM_DATABASE=Brady Corp Asia Pacific Ltd + ++OUI:88908D* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:889166* + ID_OUI_FROM_DATABASE=Viewcooper Corp. + +@@ -64075,6 +64210,9 @@ OUI:889FFA* + OUI:88A25E* + ID_OUI_FROM_DATABASE=juniper networks + ++OUI:88A2D7* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:88A3CC* + ID_OUI_FROM_DATABASE=Amatis Controls + +@@ -64591,6 +64729,9 @@ OUI:90203A* + OUI:902083* + ID_OUI_FROM_DATABASE=General Engine Management Systems Ltd. + ++OUI:902106* ++ ID_OUI_FROM_DATABASE=BSkyB Ltd ++ + OUI:902155* + ID_OUI_FROM_DATABASE=HTC Corporation + +@@ -64711,6 +64852,9 @@ OUI:9067F3* + OUI:9068C3* + ID_OUI_FROM_DATABASE=Motorola Mobility LLC + ++OUI:906CAC* ++ ID_OUI_FROM_DATABASE=Fortinet, Inc. ++ + OUI:906DC8* + ID_OUI_FROM_DATABASE=DLG Automação Industrial Ltda + +@@ -65254,6 +65398,9 @@ OUI:94E711* + OUI:94E848* + ID_OUI_FROM_DATABASE=FYLDE MICRO LTD + ++OUI:94E96A* ++ ID_OUI_FROM_DATABASE=Apple Inc ++ + OUI:94E98C* + ID_OUI_FROM_DATABASE=Alcatel-Lucent + +@@ -65935,6 +66082,9 @@ OUI:9CF938* + OUI:9CFBF1* + ID_OUI_FROM_DATABASE=MESOMATIC GmbH & Co.KG + ++OUI:9CFC01* ++ ID_OUI_FROM_DATABASE=Apple Inc ++ + OUI:9CFFBE* + ID_OUI_FROM_DATABASE=OTSL Inc. + +@@ -65977,6 +66127,9 @@ OUI:A0143D* + OUI:A0165C* + ID_OUI_FROM_DATABASE=Triteka LTD + ++OUI:A01828* ++ ID_OUI_FROM_DATABASE=Apple Inc ++ + OUI:A01859* + ID_OUI_FROM_DATABASE=Shenzhen Yidashi Electronics Co Ltd + +@@ -66178,6 +66331,9 @@ OUI:A0A23C* + OUI:A0A3E2* + ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc + ++OUI:A0A65C* ++ ID_OUI_FROM_DATABASE=Supercomputing Systems AG ++ + OUI:A0A763* + ID_OUI_FROM_DATABASE=Polytron Vertrieb GmbH + +@@ -66382,6 +66538,9 @@ OUI:A42305* + OUI:A424B3* + ID_OUI_FROM_DATABASE=FlatFrog Laboratories AB + ++OUI:A424DD* ++ ID_OUI_FROM_DATABASE=Cambrionix Ltd ++ + OUI:A4251B* + ID_OUI_FROM_DATABASE=Avaya, Inc + +@@ -66397,6 +66556,9 @@ OUI:A42B8C* + OUI:A42C08* + ID_OUI_FROM_DATABASE=Masterwork Automodules + ++OUI:A43135* ++ ID_OUI_FROM_DATABASE=Apple Inc ++ + OUI:A433D1* + ID_OUI_FROM_DATABASE=Fibrlink Communications Co.,Ltd. + +@@ -66475,6 +66637,9 @@ OUI:A46032* + OUI:A46706* + ID_OUI_FROM_DATABASE=Apple + ++OUI:A46C2A* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:A46CC1* + ID_OUI_FROM_DATABASE=LTi REEnergy GmbH + +@@ -67066,6 +67231,9 @@ OUI:AC20AA* + OUI:AC220B* + ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC. + ++OUI:AC293A* ++ ID_OUI_FROM_DATABASE=Apple Inc ++ + OUI:AC2DA3* + ID_OUI_FROM_DATABASE=TXTR GmbH + +@@ -67144,6 +67312,9 @@ OUI:AC562C* + OUI:AC583B* + ID_OUI_FROM_DATABASE=Human Assembler, Inc. + ++OUI:AC5A14* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:AC5D10* + ID_OUI_FROM_DATABASE=Pace Americas + +@@ -67153,6 +67324,9 @@ OUI:AC5E8C* + OUI:AC6123* + ID_OUI_FROM_DATABASE=Drivven, Inc. + ++OUI:AC620D* ++ ID_OUI_FROM_DATABASE=Jabil Circuit (Wuxi) Co. LTD ++ + OUI:AC6706* + ID_OUI_FROM_DATABASE=Ruckus Wireless + +@@ -67180,6 +67354,9 @@ OUI:AC7289* + OUI:AC7A42* + ID_OUI_FROM_DATABASE=iConnectivity + ++OUI:AC7A4D* ++ ID_OUI_FROM_DATABASE=ALPS ELECTRIC CO.,LTD. ++ + OUI:AC7BA1* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -67402,6 +67579,9 @@ OUI:ACF7F3* + OUI:ACF97E* + ID_OUI_FROM_DATABASE=ELESYS INC. + ++OUI:ACFD93* ++ ID_OUI_FROM_DATABASE=Weifang GoerTek Electronics Co., Ltd. ++ + OUI:ACFDCE* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -67688,7 +67868,7 @@ OUI:B0D59D* + ID_OUI_FROM_DATABASE=Shenzhen Zowee Technology Co., Ltd + + OUI:B0D7C5* +- ID_OUI_FROM_DATABASE=STP KFT ++ ID_OUI_FROM_DATABASE=Logipix Ltd + + OUI:B0DA00* + ID_OUI_FROM_DATABASE=CERA ELECTRONIQUE +@@ -67891,6 +68071,9 @@ OUI:B467E9* + OUI:B46D35* + ID_OUI_FROM_DATABASE=Dalian Seasky Automation Co;Ltd + ++OUI:B46D83* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:B47356* + ID_OUI_FROM_DATABASE=Hangzhou Treebear Networking Co., Ltd. + +@@ -68569,6 +68752,9 @@ OUI:BC38D2* + OUI:BC39A6* + ID_OUI_FROM_DATABASE=CSUN System Technology Co.,LTD + ++OUI:BC3AEA* ++ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD. ++ + OUI:BC3BAF* + ID_OUI_FROM_DATABASE=Apple + +@@ -69211,6 +69397,9 @@ OUI:C40F09* + OUI:C4108A* + ID_OUI_FROM_DATABASE=Ruckus Wireless + ++OUI:C412F5* ++ ID_OUI_FROM_DATABASE=D-Link International ++ + OUI:C413E2* + ID_OUI_FROM_DATABASE=Aerohive Networks Inc. + +@@ -69520,6 +69709,9 @@ OUI:C4E92F* + OUI:C4E984* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + ++OUI:C4EA1D* ++ ID_OUI_FROM_DATABASE=Technicolor ++ + OUI:C4EBE3* + ID_OUI_FROM_DATABASE=RRCN SAS + +@@ -69586,6 +69778,9 @@ OUI:C81B6B* + OUI:C81E8E* + ID_OUI_FROM_DATABASE=ADV Security (S) Pte Ltd + ++OUI:C81EE7* ++ ID_OUI_FROM_DATABASE=Apple Inc ++ + OUI:C81F66* + ID_OUI_FROM_DATABASE=Dell Inc + +@@ -69610,6 +69805,9 @@ OUI:C83232* + OUI:C8334B* + ID_OUI_FROM_DATABASE=Apple + ++OUI:C8348E* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:C835B8* + ID_OUI_FROM_DATABASE=Ericsson, EAB/RWI/K + +@@ -70018,6 +70216,9 @@ OUI:CC4BFB* + OUI:CC4E24* + ID_OUI_FROM_DATABASE=Brocade Communications Systems, Inc. + ++OUI:CC4EEC* ++ ID_OUI_FROM_DATABASE=HUMAX Co., Ltd. ++ + OUI:CC501C* + ID_OUI_FROM_DATABASE=KVH Industries, Inc. + +@@ -70279,6 +70480,9 @@ OUI:CCFCB1* + OUI:CCFE3C* + ID_OUI_FROM_DATABASE=Samsung Electronics + ++OUI:D0034B* ++ ID_OUI_FROM_DATABASE=Apple Inc ++ + OUI:D00790* + ID_OUI_FROM_DATABASE=Texas Instruments + +@@ -70321,6 +70525,9 @@ OUI:D023DB* + OUI:D02516* + ID_OUI_FROM_DATABASE=SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD. + ++OUI:D02598* ++ ID_OUI_FROM_DATABASE=Apple Inc ++ + OUI:D02788* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind.Co.Ltd + +@@ -70342,6 +70549,9 @@ OUI:D03972* + OUI:D039B3* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + ++OUI:D0431E* ++ ID_OUI_FROM_DATABASE=Dell Inc. ++ + OUI:D046DC* + ID_OUI_FROM_DATABASE=Southwest Research Institute + +@@ -70501,6 +70711,9 @@ OUI:D09C30* + OUI:D09D0A* + ID_OUI_FROM_DATABASE=LINKCOM + ++OUI:D09DAB* ++ ID_OUI_FROM_DATABASE=TCT mobile ltd ++ + OUI:D0A0D6* + ID_OUI_FROM_DATABASE=Chengdu TD Tech Ltd. + +@@ -71266,6 +71479,9 @@ OUI:D8977C* + OUI:D897BA* + ID_OUI_FROM_DATABASE=PEGATRON CORPORATION + ++OUI:D89A34* ++ ID_OUI_FROM_DATABASE=Beijing SHENQI Technology Co., Ltd. ++ + OUI:D89D67* + ID_OUI_FROM_DATABASE=Hewlett Packard + +@@ -72028,6 +72244,9 @@ OUI:E0D9A2* + OUI:E0DADC* + ID_OUI_FROM_DATABASE=JVC KENWOOD Corporation + ++OUI:E0DB10* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:E0DB55* + ID_OUI_FROM_DATABASE=Dell Inc + +@@ -72367,6 +72586,9 @@ OUI:E4F4C6* + OUI:E4F7A1* + ID_OUI_FROM_DATABASE=Datafox GmbH + ++OUI:E4F89C* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:E4F8EF* + ID_OUI_FROM_DATABASE=Samsung Elec Co.,Ltd + +@@ -72376,6 +72598,9 @@ OUI:E4F939* + OUI:E4FA1D* + ID_OUI_FROM_DATABASE=PAD Peripheral Advanced Design Inc. + ++OUI:E4FAFD* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:E4FED9* + ID_OUI_FROM_DATABASE=EDMI Europe Ltd + +@@ -72739,6 +72964,9 @@ OUI:E8F1B0* + OUI:E8F226* + ID_OUI_FROM_DATABASE=MILLSON CUSTOM SOLUTIONS INC. + ++OUI:E8F2E3* ++ ID_OUI_FROM_DATABASE=Starcor Beijing Co.,Limited ++ + OUI:E8F928* + ID_OUI_FROM_DATABASE=RFTECH SRL + +@@ -72874,6 +73102,9 @@ OUI:EC5A86* + OUI:EC5C69* + ID_OUI_FROM_DATABASE=MITSUBISHI HEAVY INDUSTRIES MECHATRONICS SYSTEMS,LTD. + ++OUI:EC60E0* ++ ID_OUI_FROM_DATABASE=AVI-ON LABS ++ + OUI:EC6264* + ID_OUI_FROM_DATABASE=Global411 Internet Services, LLC + +@@ -73213,6 +73444,9 @@ OUI:F07765* + OUI:F077D0* + ID_OUI_FROM_DATABASE=Xcellen + ++OUI:F07816* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:F07959* + ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC. + +@@ -73279,6 +73513,9 @@ OUI:F09FC2* + OUI:F0A764* + ID_OUI_FROM_DATABASE=GST Co., Ltd. + ++OUI:F0AB54* ++ ID_OUI_FROM_DATABASE=MITSUMI ELECTRIC CO.,LTD. ++ + OUI:F0ACA4* + ID_OUI_FROM_DATABASE=HBC-radiomatic + +diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb +index 6c22088..3b35b26 100644 +--- a/hwdb/20-pci-vendor-model.hwdb ++++ b/hwdb/20-pci-vendor-model.hwdb +@@ -4361,6 +4361,9 @@ pci:v00001002d0000665Csv00001787sd00002329* + pci:v00001002d0000665D* + ID_MODEL_FROM_DATABASE=Bonaire [Radeon R7 200 Series] + ++pci:v00001002d0000665F* ++ ID_MODEL_FROM_DATABASE=Tobago [Radeon R7 300 Series] ++ + pci:v00001002d00006660* + ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M] + +@@ -5984,6 +5987,63 @@ pci:v00001002d000067AA* + pci:v00001002d000067B0* + ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] + ++pci:v00001002d000067B0sv00001043sd0000046A* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (R9 290X DirectCU II) ++ ++pci:v00001002d000067B0sv00001043sd0000046C* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (R9 290X DirectCU II OC) ++ ++pci:v00001002d000067B0sv00001043sd00000474* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (Matrix R9 290X Platinum) ++ ++pci:v00001002d000067B0sv00001043sd00000476* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (ARES III) ++ ++pci:v00001002d000067B0sv00001458sd0000227C* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (R9 290X WindForce 3X OC) ++ ++pci:v00001002d000067B0sv00001458sd00002281* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (R9 290X WindForce 3X OC) ++ ++pci:v00001002d000067B0sv00001458sd0000228C* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (R9 290X WindForce 3X) ++ ++pci:v00001002d000067B0sv00001458sd0000228D* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (R9 290X WindForce 3X OC) ++ ++pci:v00001002d000067B0sv00001458sd00002290* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (R9 290X WindForce 3X) ++ ++pci:v00001002d000067B0sv00001462sd00003070* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (R9 290X Lightning) ++ ++pci:v00001002d000067B0sv00001462sd00003071* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (R9 290X Lightning) ++ ++pci:v00001002d000067B0sv00001462sd00003072* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (R9 290X Lightning LE) ++ ++pci:v00001002d000067B0sv00001462sd00003080* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (R9 290X Gaming) ++ ++pci:v00001002d000067B0sv00001462sd00003082* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (R9 290X Gaming OC) ++ ++pci:v00001002d000067B0sv0000148Csd00002347* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (Devil 13 Dual Core R9 290X) ++ ++pci:v00001002d000067B0sv00001682sd00009290* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (Double Dissipation R9 290X) ++ ++pci:v00001002d000067B0sv0000174Bsd0000E282* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (Vapor-X R9 290X Tri-X OC) ++ ++pci:v00001002d000067B0sv0000174Bsd0000E285* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (R9 290X Tri-X OC) ++ ++pci:v00001002d000067B0sv00001787sd00002020* ++ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X] (R9 290X IceQ X² Turbo) ++ + pci:v00001002d000067B1* + ID_MODEL_FROM_DATABASE=Hawaii PRO [Radeon R9 290] + +@@ -9092,6 +9152,9 @@ pci:v00001002d0000985E* + pci:v00001002d0000985F* + ID_MODEL_FROM_DATABASE=Mullins + ++pci:v00001002d00009874* ++ ID_MODEL_FROM_DATABASE=Carrizo ++ + pci:v00001002d00009900* + ID_MODEL_FROM_DATABASE=Trinity [Radeon HD 7660G] + +@@ -10272,10 +10335,10 @@ pci:v00001014d000000A6* + ID_MODEL_FROM_DATABASE=ATM 155MBPS MM Controller (1410a600) + + pci:v00001014d000000B7* +- ID_MODEL_FROM_DATABASE=256-bit Graphics Rasterizer [FireGL1] ++ ID_MODEL_FROM_DATABASE=GXT2000P Graphics Adapter + + pci:v00001014d000000B7sv00001092sd000000B8* +- ID_MODEL_FROM_DATABASE=256-bit Graphics Rasterizer [FireGL1] (FireGL1 AGP 32Mb) ++ ID_MODEL_FROM_DATABASE=GXT2000P Graphics Adapter (FireGL1 AGP 32Mb) + + pci:v00001014d000000B8* + ID_MODEL_FROM_DATABASE=GXT2000P Graphics Adapter +@@ -10325,6 +10388,15 @@ pci:v00001014d00000170* + pci:v00001014d00000170sv00001092sd00000172* + ID_MODEL_FROM_DATABASE=GXT6000P Graphics Adapter (Fire GL2) + ++pci:v00001014d00000170sv00001092sd00000173* ++ ID_MODEL_FROM_DATABASE=GXT6000P Graphics Adapter (Fire GL3) ++ ++pci:v00001014d00000170sv00001092sd00000174* ++ ID_MODEL_FROM_DATABASE=GXT6000P Graphics Adapter (Fire GL4) ++ ++pci:v00001014d00000170sv00001092sd00000184* ++ ID_MODEL_FROM_DATABASE=GXT6000P Graphics Adapter (Fire GL4s) ++ + pci:v00001014d0000017D* + ID_MODEL_FROM_DATABASE=GXT300P Graphics Adapter + +@@ -28542,913 +28614,934 @@ pci:v000010DEd000010D8* + ID_MODEL_FROM_DATABASE=GT218 [NVS 300] + + pci:v000010DEd00001140* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] + + pci:v000010DEd00001140sv00001019sd0000999F* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001025sd00000600* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001025sd00000606* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001025sd0000064A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001025sd0000064C* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001025sd0000067A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001025sd00000680* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001025sd00000686* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001025sd00000689* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001025sd0000068B* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001025sd0000068D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001025sd0000068E* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001025sd00000691* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001025sd00000692* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001025sd00000694* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001025sd00000702* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001025sd00000719* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001025sd00000725* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001025sd00000728* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001025sd0000072B* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001025sd0000072E* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001025sd00000732* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001025sd00000763* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001025sd00000773* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001025sd00000774* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001025sd00000776* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001025sd0000077A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001025sd0000077B* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001025sd0000077C* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001025sd0000077D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001025sd0000077E* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001025sd0000077F* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001025sd00000781* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001025sd00000798* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001025sd00000799* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001025sd0000079B* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001025sd0000079C* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001025sd00000807* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001025sd00000821* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001025sd00000823* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001025sd00000830* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001025sd00000833* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001025sd00000837* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001025sd0000083E* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd00000841* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001025sd00000854* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd00000855* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd00000856* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd00000857* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd00000858* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd00000868* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd00000869* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 810M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 810M) + + pci:v000010DEd00001140sv00001025sd00000873* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd00000878* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd0000087B* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd0000087C* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 810M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 810M) + + pci:v000010DEd00001140sv00001025sd00000881* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd0000088A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd0000089B* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd0000090F* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd00000921* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd0000092E* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 810M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 810M) + + pci:v000010DEd00001140sv00001025sd0000092F* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd0000093A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd0000093C* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd0000093F* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd00000941* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd00000945* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd00000954* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001025sd00000965* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001028sd0000054D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) + + pci:v000010DEd00001140sv00001028sd0000054E* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) + + pci:v000010DEd00001140sv00001028sd00000554* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001028sd00000557* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001028sd00000562* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 625M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 625M) + + pci:v000010DEd00001140sv00001028sd00000565* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) + + pci:v000010DEd00001140sv00001028sd00000568* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) + + pci:v000010DEd00001140sv00001028sd00000590* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) + + pci:v000010DEd00001140sv00001028sd00000592* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 625M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 625M) + + pci:v000010DEd00001140sv00001028sd00000594* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 625M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 625M) + + pci:v000010DEd00001140sv00001028sd00000595* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 625M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 625M) + + pci:v000010DEd00001140sv00001028sd000005A2* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 625M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 625M) + + pci:v000010DEd00001140sv00001028sd000005B1* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 625M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 625M) + + pci:v000010DEd00001140sv00001028sd000005B3* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 625M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 625M) + + pci:v000010DEd00001140sv00001028sd000005DA* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) + + pci:v000010DEd00001140sv00001028sd000005DE* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001028sd000005E0* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001028sd000005E8* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) + + pci:v000010DEd00001140sv00001028sd000005F4* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001028sd0000060F* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001028sd0000064E* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001028sd00000652* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001028sd00000653* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001028sd00000655* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001028sd0000065E* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001028sd00000662* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001028sd0000068D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv0000103Csd000018EF* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) + + pci:v000010DEd00001140sv0000103Csd000018F9* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) + + pci:v000010DEd00001140sv0000103Csd000018FB* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) + + pci:v000010DEd00001140sv0000103Csd000018FD* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) + + pci:v000010DEd00001140sv0000103Csd000018FF* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) + + pci:v000010DEd00001140sv0000103Csd00002335* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv0000103Csd00002337* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv0000103Csd00002AEF* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720A) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720A) + + pci:v000010DEd00001140sv0000103Csd00002AF9* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710A) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710A) + + pci:v000010DEd00001140sv00001043sd000010DD* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (NVS 5200M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (NVS 5200M) + + pci:v000010DEd00001140sv00001043sd000010ED* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (NVS 5200M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (NVS 5200M) + + pci:v000010DEd00001140sv00001043sd000011FD* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001043sd0000124D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001043sd0000126D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001043sd0000131D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001043sd000013FD* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001043sd000014C7* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001043sd00001507* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001043sd000015AD* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd000015ED* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd0000160D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd0000163D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd0000166D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd000016CD* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd000016DD* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd0000170D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd0000176D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd0000178D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd0000179D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd000017DD* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd00002132* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001043sd00002136* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (NVS 5200M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (NVS 5200M) + + pci:v000010DEd00001140sv00001043sd000021BA* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001043sd000021FA* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001043sd0000220A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001043sd0000221A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001043sd0000223A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 710M) + + pci:v000010DEd00001140sv00001043sd0000224A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 710M) + + pci:v000010DEd00001140sv00001043sd0000227A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd0000228A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd0000232A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd0000233A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd0000236A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd0000238A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd00008595* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001043sd000085EA* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001043sd000085EB* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd000085EC* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd000085EE* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001043sd000085F3* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd0000860E* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd0000861A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd0000861B* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd00008628* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd00008643* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd0000864C* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001043sd00008652* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv0000105Bsd00000DAC* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv0000105Bsd00000DAD* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv0000105Bsd00000EF3* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001072sd0000152D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv000010CFsd000017F5* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001179sd0000FA01* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA02* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA03* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA05* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA11* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA13* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA18* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA19* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA21* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA23* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA2A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA32* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA33* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA36* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA38* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA42* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA43* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA45* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA47* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA49* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA58* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA59* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA88* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001179sd0000FA89* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv0000144Dsd0000B092* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv0000144Dsd0000C0D5* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) + + pci:v000010DEd00001140sv0000144Dsd0000C0D7* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv0000144Dsd0000C0E2* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (NVS 5200M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (NVS 5200M) + + pci:v000010DEd00001140sv0000144Dsd0000C0E3* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (NVS 5200M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (NVS 5200M) + + pci:v000010DEd00001140sv0000144Dsd0000C0E4* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (NVS 5200M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (NVS 5200M) + + pci:v000010DEd00001140sv0000144Dsd0000C10D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv0000144Dsd0000C652* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv0000144Dsd0000C709* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv0000144Dsd0000C711* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv0000144Dsd0000C736* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv0000144Dsd0000C737* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv0000144Dsd0000C745* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv0000144Dsd0000C750* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001462sd000010B8* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 710M) + + pci:v000010DEd00001140sv00001462sd000010E9* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001462sd00001116* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001462sd0000AA33* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 720M) + + pci:v000010DEd00001140sv00001462sd0000AAA2* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001462sd0000AAA3* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001462sd0000ACB2* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001462sd0000ACC1* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001462sd0000AE61* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 720M) + + pci:v000010DEd00001140sv00001462sd0000AE65* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001462sd0000AE6A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001462sd0000AE71* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv000014C0sd00000083* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv0000152Dsd00000926* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 620M) + + pci:v000010DEd00001140sv0000152Dsd00000982* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) + + pci:v000010DEd00001140sv0000152Dsd00000983* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) + + pci:v000010DEd00001140sv0000152Dsd00001005* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 820M) + + pci:v000010DEd00001140sv0000152Dsd00001012* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv0000152Dsd00001019* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv0000152Dsd00001030* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) + + pci:v000010DEd00001140sv0000152Dsd00001055* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv0000152Dsd00001067* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv0000152Dsd00001072* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv0000152Dsd00001086* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv0000152Dsd00001092* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv000017AAsd00002200* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (NVS 5200M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (NVS 5200M) + + pci:v000010DEd00001140sv000017AAsd00002213* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv000017AAsd00002220* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv000017AAsd0000309C* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720A) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720A) + + pci:v000010DEd00001140sv000017AAsd000030B4* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820A) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820A) ++ ++pci:v000010DEd00001140sv000017AAsd000030B7* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 720A) ++ ++pci:v000010DEd00001140sv000017AAsd0000361B* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820A) ++ ++pci:v000010DEd00001140sv000017AAsd0000361C* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820A) + + pci:v000010DEd00001140sv000017AAsd00003656* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv000017AAsd0000365A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 705M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 705M) + + pci:v000010DEd00001140sv000017AAsd0000365E* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 800M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 800M) ++ ++pci:v000010DEd00001140sv000017AAsd00003661* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820A) + + pci:v000010DEd00001140sv000017AAsd0000366C* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 800M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 800M) + + pci:v000010DEd00001140sv000017AAsd00003685* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 800M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 800M) + + pci:v000010DEd00001140sv000017AAsd00003686* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 800M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 800M) + + pci:v000010DEd00001140sv000017AAsd00003687* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 705A) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 705A) + + pci:v000010DEd00001140sv000017AAsd00003696* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820A) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820A) + + pci:v000010DEd00001140sv000017AAsd0000369B* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820A) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820A) + + pci:v000010DEd00001140sv000017AAsd0000369C* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820A) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820A) + + pci:v000010DEd00001140sv000017AAsd0000369D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820A) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820A) + + pci:v000010DEd00001140sv000017AAsd0000369E* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820A) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820A) + + pci:v000010DEd00001140sv000017AAsd000036A9* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820A) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820A) ++ ++pci:v000010DEd00001140sv000017AAsd000036AF* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820A) ++ ++pci:v000010DEd00001140sv000017AAsd000036B0* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820A) ++ ++pci:v000010DEd00001140sv000017AAsd000036B6* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820A) + + pci:v000010DEd00001140sv000017AAsd00003800* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv000017AAsd00003801* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv000017AAsd00003802* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv000017AAsd00003803* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv000017AAsd00003804* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv000017AAsd00003806* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv000017AAsd00003808* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv000017AAsd0000380D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv000017AAsd0000380E* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv000017AAsd0000380F* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv000017AAsd00003811* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv000017AAsd00003812* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv000017AAsd00003813* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv000017AAsd00003816* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv000017AAsd00003818* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv000017AAsd0000381A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv000017AAsd0000381C* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv000017AAsd00003901* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 610M / GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 610M / GT 620M) + + pci:v000010DEd00001140sv000017AAsd00003902* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv000017AAsd00003903* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 610M/710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 610M/710M) + + pci:v000010DEd00001140sv000017AAsd00003904* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M/625M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M/625M) + + pci:v000010DEd00001140sv000017AAsd00003905* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv000017AAsd00003907* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv000017AAsd00003910* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 720M) + + pci:v000010DEd00001140sv000017AAsd00003912* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 720M) + + pci:v000010DEd00001140sv000017AAsd00003913* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv000017AAsd00003915* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv000017AAsd00003977* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv000017AAsd00003983* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 610M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 610M) + + pci:v000010DEd00001140sv000017AAsd00005001* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 610M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 610M) + + pci:v000010DEd00001140sv000017AAsd00005003* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv000017AAsd00005005* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 705M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 705M) + + pci:v000010DEd00001140sv000017AAsd0000500D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv000017AAsd00005014* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv000017AAsd00005017* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv000017AAsd00005019* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv000017AAsd0000501A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv000017AAsd0000501F* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv000017AAsd00005025* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv000017AAsd00005027* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv000017AAsd0000502A* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv000017AAsd0000502B* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv000017AAsd0000502D* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv000017AAsd0000502E* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv000017AAsd0000502F* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv000017AAsd00005030* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 705M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 705M) + + pci:v000010DEd00001140sv000017AAsd00005031* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 705M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 705M) + + pci:v000010DEd00001140sv000017AAsd00005032* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv000017AAsd00005033* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv000017AAsd0000503E* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv000017AAsd0000503F* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv000017AAsd00005040* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001854sd00000177* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001854sd00000180* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv00001854sd00000190* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001854sd00000192* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001B0Asd000020DD* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001B0Asd000020DF* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 620M) + + pci:v000010DEd00001140sv00001B0Asd0000210E* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001B0Asd00002202* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + + pci:v000010DEd00001140sv00001B0Asd000090D7* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001140sv00001B0Asd000090DD* +- ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + + pci:v000010DEd00001180* + ID_MODEL_FROM_DATABASE=GK104 [GeForce GTX 680] +@@ -29654,6 +29747,9 @@ pci:v000010DEd000011E3* + pci:v000010DEd000011E3sv000017AAsd00003683* + ID_MODEL_FROM_DATABASE=GK106M [GeForce GTX 760M] (GeForce GTX 760A) + ++pci:v000010DEd000011E7* ++ ID_MODEL_FROM_DATABASE=GK106M ++ + pci:v000010DEd000011FA* + ID_MODEL_FROM_DATABASE=GK106GL [Quadro K4000] + +@@ -30014,6 +30110,9 @@ pci:v000010DFd00000720sv000017AAsd00001057* + pci:v000010DFd00000720sv000017AAsd00001059* + ID_MODEL_FROM_DATABASE=OneConnect NIC (Skyhawk) (ThinkServer OCm14104-UT-L AnyFabric) + ++pci:v000010DFd00000720sv000017AAsd00004014* ++ ID_MODEL_FROM_DATABASE=OneConnect NIC (Skyhawk) (ThinkServer OCm14102-NX-L AnyFabric) ++ + pci:v000010DFd00000722* + ID_MODEL_FROM_DATABASE=OneConnect iSCSI Initiator (Skyhawk) + +@@ -30755,6 +30854,9 @@ pci:v000010ECd00008168sv00001775sd000011CC* + pci:v000010ECd00008168sv00001849sd00008168* + ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Motherboard (one of many)) + ++pci:v000010ECd00008168sv00007470sd00003468* ++ ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (TG-3468 Gigabit PCI Express Network Adapter) ++ + pci:v000010ECd00008168sv00008086sd0000D615* + ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Desktop Board D510MO/D525MW) + +@@ -31278,7 +31380,7 @@ pci:v00001102d00007005sv00001102sd00001002* + ID_MODEL_FROM_DATABASE=SB Audigy LS Game Port (SB0312 Audigy LS MIDI/Game port) + + pci:v00001102d00007006* +- ID_MODEL_FROM_DATABASE=[SB X-Fi Xtreme Audio] CA0110-IBG PCI to PCIe Bridge ++ ID_MODEL_FROM_DATABASE=[SB X-Fi Xtreme Audio] CA0110-IBG PCIe to PCI Bridge + + pci:v00001102d00008938* + ID_MODEL_FROM_DATABASE=Ectiva EV1938 +@@ -33896,6 +33998,9 @@ pci:v0000111Dd00008088sv00001093sd00007600* + pci:v0000111Dd00008088sv00001093sd00007602* + ID_MODEL_FROM_DATABASE=PES32NT8BG2 PCI Express Switch (PXIe-8384) + ++pci:v0000111Dd0000808F* ++ ID_MODEL_FROM_DATABASE=PES32NT8AG2 ++ + pci:v0000111E* + ID_VENDOR_FROM_DATABASE=Eldec + +@@ -34664,9 +34769,12 @@ pci:v00001131d00007164sv00000070sd000089A0* + pci:v00001131d00007164sv00000070sd000089A1* + ID_MODEL_FROM_DATABASE=SAA7164 (WinTV HVR-2200) + +-pci:v00001131d00007164sv00000070sd0000F123* ++pci:v00001131d00007164sv00000070sd0000F120* + ID_MODEL_FROM_DATABASE=SAA7164 (WinTV HVR-2205) + ++pci:v00001131d00007164sv00000070sd0000F123* ++ ID_MODEL_FROM_DATABASE=SAA7164 (WinTV HVR-2215) ++ + pci:v00001131d00007231* + ID_MODEL_FROM_DATABASE=SAA7231 + +@@ -39923,6 +40031,15 @@ pci:v0000125E* + pci:v0000125F* + ID_VENDOR_FROM_DATABASE=Concurrent Technologies, Inc. + ++pci:v0000125Fd00002071* ++ ID_MODEL_FROM_DATABASE=CC PMC/232 ++ ++pci:v0000125Fd00002084* ++ ID_MODEL_FROM_DATABASE=CC PMC/23P ++ ++pci:v0000125Fd00002091* ++ ID_MODEL_FROM_DATABASE=CC PMC/422 ++ + pci:v00001260* + ID_VENDOR_FROM_DATABASE=Intersil Corporation + +@@ -43145,17 +43262,56 @@ pci:v00001397* + pci:v00001397d000008B4* + ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] + ++pci:v00001397d000008B4sv00001397sd000008B4* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [Cologne Chip HFC-4S Eval. Board]) ++ ++pci:v00001397d000008B4sv00001397sd0000B51A* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [Allo.com BRI card]) ++ + pci:v00001397d000008B4sv00001397sd0000B520* + ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [IOB4ST]) + + pci:v00001397d000008B4sv00001397sd0000B540* +- ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [Swyx 4xS0 SX2 QuadBri]) ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [Swyx SX2 QuadBri]) + + pci:v00001397d000008B4sv00001397sd0000B550* +- ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [Junghanns quadBRI]) ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [Junghanns.NET quadBRI]) + + pci:v00001397d000008B4sv00001397sd0000B556* +- ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [Junghanns DuoDBRI]) ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [Junghanns.NET duoBRI]) ++ ++pci:v00001397d000008B4sv00001397sd0000B559* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [Junghanns.NET duoBRI miniPCI]) ++ ++pci:v00001397d000008B4sv00001397sd0000B560* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [BeroNet BN4S0]) ++ ++pci:v00001397d000008B4sv00001397sd0000B566* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [BeroNet BN2S0]) ++ ++pci:v00001397d000008B4sv00001397sd0000B567* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [BeroNet BN1S0 miniPCI]) ++ ++pci:v00001397d000008B4sv00001397sd0000B568* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [BeroNet BN4S0 miniPCI]) ++ ++pci:v00001397d000008B4sv00001397sd0000B569* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [BeroNet BN2S0 miniPCI]) ++ ++pci:v00001397d000008B4sv00001397sd0000B620* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S) ++ ++pci:v00001397d000008B4sv00001397sd0000B752* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [Junghanns.NET quadBRI PCIe]) ++ ++pci:v00001397d000008B4sv00001397sd0000B761* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [BeroNet BN2S0 PCIe]) ++ ++pci:v00001397d000008B4sv00001397sd0000B762* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [BeroNet BN4S0 PCIe]) ++ ++pci:v00001397d000008B4sv00001397sd0000E884* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [OpenVox B200P]) + + pci:v00001397d000008B4sv00001397sd0000E888* + ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-4S] (HFC-4S [OpenVox B200P / B400P]) +@@ -43163,9 +43319,33 @@ pci:v00001397d000008B4sv00001397sd0000E888* + pci:v00001397d000016B8* + ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-8S] + +-pci:v00001397d000016B8sv00001397sd0000B562* ++pci:v00001397d000016B8sv00001397sd000016B8* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-8S] (HFC-8S [Cologne Chip HFC-8S Eval. Board]) ++ ++pci:v00001397d000016B8sv00001397sd0000B521* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-8S] (HFC-8S [IOB4ST Recording]) ++ ++pci:v00001397d000016B8sv00001397sd0000B522* + ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-8S] (HFC-8S [IOB8ST]) + ++pci:v00001397d000016B8sv00001397sd0000B552* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-8S] (HFC-8S [Junghanns.NET octoBRI]) ++ ++pci:v00001397d000016B8sv00001397sd0000B55B* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-8S] (HFC-8S [Junghanns.NET octoBRI]) ++ ++pci:v00001397d000016B8sv00001397sd0000B562* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-8S] (HFC-8S [BeroNet BN8S0]) ++ ++pci:v00001397d000016B8sv00001397sd0000B56B* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-8S] (HFC-8S [BeroNet BN8S0+]) ++ ++pci:v00001397d000016B8sv00001397sd0000B622* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-8S] (HFC-8S) ++ ++pci:v00001397d000016B8sv00001397sd0000E998* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-8S] (HFC-8S [OpenVox B800P]) ++ + pci:v00001397d00002BD0* + ID_MODEL_FROM_DATABASE=ISDN network controller [HFC-PCI] + +@@ -43184,6 +43364,42 @@ pci:v00001397d00002BD0sv0000E4BFsd00001000* + pci:v00001397d000030B1* + ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-E1] + ++pci:v00001397d000030B1sv00001397sd000030B1* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-E1] (HFC-E1 [Cologne Chip HFC-E1 Eval. Board]) ++ ++pci:v00001397d000030B1sv00001397sd0000B523* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-E1] (HFC-E1 [IOB1E1]) ++ ++pci:v00001397d000030B1sv00001397sd0000B543* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-E1] (HFC-E1 [Swyx SX2 SinglePRI V2]) ++ ++pci:v00001397d000030B1sv00001397sd0000B544* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-E1] (HFC-E1 [Swyx SX2 DualPRI V2]) ++ ++pci:v00001397d000030B1sv00001397sd0000B553* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-E1] (HFC-E1 [Junghanns.NET singleE1]) ++ ++pci:v00001397d000030B1sv00001397sd0000B554* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-E1] (HFC-E1 [Junghanns.NET doubleE1]) ++ ++pci:v00001397d000030B1sv00001397sd0000B555* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-E1] (HFC-E1 [Junghanns.NET doubleE1 2.0]) ++ ++pci:v00001397d000030B1sv00001397sd0000B55A* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-E1] (HFC-E1 [Junghanns.NET singleE1 miniPCI]) ++ ++pci:v00001397d000030B1sv00001397sd0000B563* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-E1] (HFC-E1 [beroNet BN1E1]) ++ ++pci:v00001397d000030B1sv00001397sd0000B564* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-E1] (HFC-E1 [beroNet BN2E1]) ++ ++pci:v00001397d000030B1sv00001397sd0000B565* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-E1] (HFC-E1 [beroNet BN2E1+]) ++ ++pci:v00001397d000030B1sv00001397sd0000B56A* ++ ID_MODEL_FROM_DATABASE=ISDN network Controller [HFC-E1] (HFC-E1 [beroNet BN1E1 miniPCI]) ++ + pci:v00001397d0000B700* + ID_MODEL_FROM_DATABASE=ISDN network controller PrimuX S0 [HFC-PCI] + +@@ -45206,6 +45422,9 @@ pci:v00001425d00005088* + pci:v00001425d00005089* + ID_MODEL_FROM_DATABASE=T520-5089 Unified Wire Ethernet Controller + ++pci:v00001425d00005090* ++ ID_MODEL_FROM_DATABASE=T540-5090 Unified Wire Ethernet Controller ++ + pci:v00001425d00005401* + ID_MODEL_FROM_DATABASE=T520-CR Unified Wire Ethernet Controller + +@@ -45299,6 +45518,9 @@ pci:v00001425d00005488* + pci:v00001425d00005489* + ID_MODEL_FROM_DATABASE=T520-5089 Unified Wire Ethernet Controller + ++pci:v00001425d00005490* ++ ID_MODEL_FROM_DATABASE=T540-5090 Unified Wire Ethernet Controller ++ + pci:v00001425d00005501* + ID_MODEL_FROM_DATABASE=T520-CR Unified Wire Storage Controller + +@@ -45392,6 +45614,9 @@ pci:v00001425d00005588* + pci:v00001425d00005589* + ID_MODEL_FROM_DATABASE=T520-5089 Unified Wire Storage Controller + ++pci:v00001425d00005590* ++ ID_MODEL_FROM_DATABASE=T540-5090 Unified Wire Storage Controller ++ + pci:v00001425d00005601* + ID_MODEL_FROM_DATABASE=T520-CR Unified Wire Storage Controller + +@@ -45485,6 +45710,9 @@ pci:v00001425d00005688* + pci:v00001425d00005689* + ID_MODEL_FROM_DATABASE=T520-5089 Unified Wire Storage Controller + ++pci:v00001425d00005690* ++ ID_MODEL_FROM_DATABASE=T540-5090 Unified Wire Storage Controller ++ + pci:v00001425d00005701* + ID_MODEL_FROM_DATABASE=T520-CR Unified Wire Ethernet Controller + +@@ -45578,6 +45806,9 @@ pci:v00001425d00005788* + pci:v00001425d00005789* + ID_MODEL_FROM_DATABASE=T520-5089 Unified Wire Ethernet Controller + ++pci:v00001425d00005790* ++ ID_MODEL_FROM_DATABASE=T540-5090 Unified Wire Ethernet Controller ++ + pci:v00001425d00005801* + ID_MODEL_FROM_DATABASE=T520-CR Unified Wire Ethernet Controller [VF] + +@@ -45671,6 +45902,9 @@ pci:v00001425d00005888* + pci:v00001425d00005889* + ID_MODEL_FROM_DATABASE=T520-5089 Unified Wire Ethernet Controller [VF] + ++pci:v00001425d00005890* ++ ID_MODEL_FROM_DATABASE=T540-5090 Unified Wire Ethernet Controller [VF] ++ + pci:v00001425d0000A000* + ID_MODEL_FROM_DATABASE=PE10K Unified Wire Ethernet Controller + +@@ -51930,7 +52164,10 @@ pci:v0000168Cd0000003C* + ID_MODEL_FROM_DATABASE=QCA988x 802.11ac Wireless Network Adapter + + pci:v0000168Cd0000003E* +- ID_MODEL_FROM_DATABASE=Killer N1525 Wireless-AC ++ ID_MODEL_FROM_DATABASE=QCA6174 802.11ac Wireless Network Adapter ++ ++pci:v0000168Cd0000003Esv00001A56sd00001525* ++ ID_MODEL_FROM_DATABASE=QCA6174 802.11ac Wireless Network Adapter (Killer N1525 Wireless-AC) + + pci:v0000168Cd00000207* + ID_MODEL_FROM_DATABASE=AR5210 Wireless Network Adapter [AR5000 802.11a] +@@ -54326,6 +54563,12 @@ pci:v00001924d00000903sv00001924sd00008009* + pci:v00001924d00000903sv00001924sd0000800A* + ID_MODEL_FROM_DATABASE=SFC9120 (SFN7x02F-R2 Flareon 7000 Series 10G Adapter) + ++pci:v00001924d00000903sv00001924sd0000800B* ++ ID_MODEL_FROM_DATABASE=SFC9120 (SFN7x22F-R3 Flareon Ultra 7000 Series 10G Adapter) ++ ++pci:v00001924d00000903sv00001924sd0000800C* ++ ID_MODEL_FROM_DATABASE=SFC9120 (SFN7x02F-R3 Flareon 7000 Series 10G Adapter) ++ + pci:v00001924d00000923* + ID_MODEL_FROM_DATABASE=SFC9140 + +@@ -55940,6 +56183,27 @@ pci:v00001BB0d00000002* + pci:v00001BB0d00000010* + ID_MODEL_FROM_DATABASE=OmniCube Accelerator OA-3000-2 + ++pci:v00001BB1* ++ ID_VENDOR_FROM_DATABASE=Seagate Technology PLC ++ ++pci:v00001BB1d0000005D* ++ ID_MODEL_FROM_DATABASE=Nytro PCIe Flash Storage ++ ++pci:v00001BB1d0000005Dsv00001BB1sd00006501* ++ ID_MODEL_FROM_DATABASE=Nytro PCIe Flash Storage (Nytro XP6500-8A1536 1.5TB) ++ ++pci:v00001BB1d0000005Dsv00001BB1sd00006502* ++ ID_MODEL_FROM_DATABASE=Nytro PCIe Flash Storage (Nytro XP6500-8A2048) ++ ++pci:v00001BB1d0000005Dsv00001BB1sd00006503* ++ ID_MODEL_FROM_DATABASE=Nytro PCIe Flash Storage (Nytro XP6500-8A4096) ++ ++pci:v00001BB1d0000005Dsv00001BB1sd00006511* ++ ID_MODEL_FROM_DATABASE=Nytro PCIe Flash Storage (Nytro XH6550-2GB DRAM) ++ ++pci:v00001BB1d0000005Dsv00001BB1sd00006512* ++ ID_MODEL_FROM_DATABASE=Nytro PCIe Flash Storage (Nytro XH6550-8GB DRAM) ++ + pci:v00001BB3* + ID_VENDOR_FROM_DATABASE=Bluecherry + +@@ -57905,6 +58169,9 @@ pci:v00007401* + pci:v00007401d0000E100* + ID_MODEL_FROM_DATABASE=PTP3100 PCIe PTP Slave Clock + ++pci:v00007470* ++ ID_VENDOR_FROM_DATABASE=TP-LINK Technologies Co., Ltd. ++ + pci:v00007604* + ID_VENDOR_FROM_DATABASE=O.N. Electronic Co Ltd. + +@@ -58434,13 +58701,13 @@ pci:v00008086d00000341* + ID_MODEL_FROM_DATABASE=41210 [Lanai] Serial to Parallel PCI Bridge (B-Segment Bridge) + + pci:v00008086d00000370* +- ID_MODEL_FROM_DATABASE=80333 Segment-A PCI Express-to-PCI Express Bridge ++ ID_MODEL_FROM_DATABASE=80333 Segment-A PCIe Express to PCI-X bridge + + pci:v00008086d00000371* + ID_MODEL_FROM_DATABASE=80333 A-Bus IOAPIC + + pci:v00008086d00000372* +- ID_MODEL_FROM_DATABASE=80333 Segment-B PCI Express-to-PCI Express Bridge ++ ID_MODEL_FROM_DATABASE=80333 Segment-B PCIe Express to PCI-X bridge + + pci:v00008086d00000373* + ID_MODEL_FROM_DATABASE=80333 B-Bus IOAPIC +@@ -62285,6 +62552,9 @@ pci:v00008086d00001521sv0000103Csd00003380* + pci:v00008086d00001521sv0000103Csd0000339E* + ID_MODEL_FROM_DATABASE=I350 Gigabit Network Connection (Ethernet 1Gb 2-port 361T Adapter) + ++pci:v00008086d00001521sv0000103Csd00008157* ++ ID_MODEL_FROM_DATABASE=I350 Gigabit Network Connection (Ethernet 1Gb 4-port 366T Adapter) ++ + pci:v00008086d00001521sv0000108Esd00007B16* + ID_MODEL_FROM_DATABASE=I350 Gigabit Network Connection (Quad Port GbE PCIe 2.0 ExpressModule, UTP) + +@@ -62588,6 +62858,12 @@ pci:v00008086d00001572* + pci:v00008086d00001572sv00001028sd00001F99* + ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet 10G 4P X710/I350 rNDC) + ++pci:v00008086d00001572sv00001137sd00000000* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet Converged NIC X710-4) ++ ++pci:v00008086d00001572sv00001137sd0000013B* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet Converged NIC X710-4) ++ + pci:v00008086d00001572sv000017AAsd00000000* + ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (ThinkServer XL710 AnyFabric) + +@@ -62636,6 +62912,18 @@ pci:v00008086d00001581sv00001028sd00001F98* + pci:v00008086d00001583* + ID_MODEL_FROM_DATABASE=Ethernet Controller XL710 for 40GbE QSFP+ + ++pci:v00008086d00001583sv0000108Esd00000000* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller XL710 for 40GbE QSFP+ (Oracle 10 Gb and 40 Gb Ethernet Adapter) ++ ++pci:v00008086d00001583sv0000108Esd00007B1B* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller XL710 for 40GbE QSFP+ (Oracle 10 Gb and 40 Gb Ethernet Adapter) ++ ++pci:v00008086d00001583sv00001137sd00000000* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller XL710 for 40GbE QSFP+ (Ethernet Converged NIC XL710-Q2) ++ ++pci:v00008086d00001583sv00001137sd0000013C* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller XL710 for 40GbE QSFP+ (Ethernet Converged NIC XL710-Q2) ++ + pci:v00008086d00001583sv00008086sd00000000* + ID_MODEL_FROM_DATABASE=Ethernet Controller XL710 for 40GbE QSFP+ (Ethernet Converged Network Adapter XL710-Q2) + +@@ -62664,7 +62952,16 @@ pci:v00008086d00001584sv00008086sd00000003* + ID_MODEL_FROM_DATABASE=Ethernet Controller XL710 for 40GbE QSFP+ (Ethernet I/O Module XL710-Q1) + + pci:v00008086d00001585* +- ID_MODEL_FROM_DATABASE=Ethernet Controller XL710 for 10GbE QSFP+ ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE QSFP+ ++ ++pci:v00008086d00001586* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T ++ ++pci:v00008086d00001586sv0000108Esd00000000* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T ++ ++pci:v00008086d00001586sv0000108Esd00004857* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T + + pci:v00008086d000015A0* + ID_MODEL_FROM_DATABASE=Ethernet Connection (2) I218-LM +@@ -77396,6 +77693,15 @@ pci:v00009412* + pci:v00009412d00006565* + ID_MODEL_FROM_DATABASE=6565 + ++pci:v00009413* ++ ID_VENDOR_FROM_DATABASE=Softlogic Co., Ltd. ++ ++pci:v00009413d00006010* ++ ID_MODEL_FROM_DATABASE=SOLO6010 MPEG-4 Video encoder/decoder ++ ++pci:v00009413d00006110* ++ ID_MODEL_FROM_DATABASE=SOLO6110 H.264 Video encoder/decoder ++ + pci:v00009618* + ID_VENDOR_FROM_DATABASE=JusonTech Corporation + +diff --git a/hwdb/20-sdio-vendor-model.hwdb b/hwdb/20-sdio-vendor-model.hwdb +index 626d673..9cf34b2 100644 +--- a/hwdb/20-sdio-vendor-model.hwdb ++++ b/hwdb/20-sdio-vendor-model.hwdb +@@ -80,6 +80,36 @@ sdio:c*v02D0* + sdio:c*v02D0d044B* + ID_MODEL_FROM_DATABASE=Nintendo Wii WLAN daughter card + ++sdio:c*v02D0dA887* ++ ID_MODEL_FROM_DATABASE=BCM43143 WLAN card ++ ++sdio:c*v02D0d4324* ++ ID_MODEL_FROM_DATABASE=BCM43241 WLAN card ++ ++sdio:c*v02D0d4329* ++ ID_MODEL_FROM_DATABASE=BCM4329 WLAN card ++ ++sdio:c*v02D0d4330* ++ ID_MODEL_FROM_DATABASE=BCM4330 WLAN card ++ ++sdio:c*v02D0d4334* ++ ID_MODEL_FROM_DATABASE=BCM4334 WLAN card ++ ++sdio:c*v02D0dA94C* ++ ID_MODEL_FROM_DATABASE=BCM43340 WLAN card ++ ++sdio:c*v02D0dA94D* ++ ID_MODEL_FROM_DATABASE=BCM43341 WLAN card ++ ++sdio:c*v02D0d4335* ++ ID_MODEL_FROM_DATABASE=BCM4335/BCM4339 WLAN card ++ ++sdio:c*v02D0dA962* ++ ID_MODEL_FROM_DATABASE=BCM43362 WLAN card ++ ++sdio:c*v02D0d4354* ++ ID_MODEL_FROM_DATABASE=BCM4354 WLAN card ++ + sdio:c*v02DB* + ID_VENDOR_FROM_DATABASE=SyChip Inc. + +diff --git a/hwdb/20-usb-vendor-model.hwdb b/hwdb/20-usb-vendor-model.hwdb +index 94e0269..8867531 100644 +--- a/hwdb/20-usb-vendor-model.hwdb ++++ b/hwdb/20-usb-vendor-model.hwdb +@@ -503,6 +503,9 @@ usb:v03F0p0217* + usb:v03F0p0218* + ID_MODEL_FROM_DATABASE=APOLLO P2500/2600 + ++usb:v03F0p022A* ++ ID_MODEL_FROM_DATABASE=Laserjet CP1525nw ++ + usb:v03F0p0241* + ID_MODEL_FROM_DATABASE=Link-5 micro dongle + +@@ -1320,7 +1323,7 @@ usb:v03F0p4002* + ID_MODEL_FROM_DATABASE=PhotoSmart 635/715/720/735/935 (storage) + + usb:v03F0p4004* +- ID_MODEL_FROM_DATABASE=cp1160 ++ ID_MODEL_FROM_DATABASE=CP1160 + + usb:v03F0p4102* + ID_MODEL_FROM_DATABASE=PhotoSmart 618 +@@ -2075,6 +2078,9 @@ usb:v0403p1060* + usb:v0403p1234* + ID_MODEL_FROM_DATABASE=IronLogic RFID Adapter [Z-2 USB] + ++usb:v0403p1235* ++ ID_MODEL_FROM_DATABASE=Iron Logic Z-397 RS-485/422 converter ++ + usb:v0403p6001* + ID_MODEL_FROM_DATABASE=FT232 USB-Serial (UART) IC + +@@ -2147,6 +2153,9 @@ usb:v0403p8B2B* + usb:v0403p8B2C* + ID_MODEL_FROM_DATABASE=Alpermann+Velte TCC70 + ++usb:v0403p9090* ++ ID_MODEL_FROM_DATABASE=SNAP Stick 200 ++ + usb:v0403p9132* + ID_MODEL_FROM_DATABASE=LCD and Temperature Interface + +@@ -3311,6 +3320,9 @@ usb:v0411p00E8* + usb:v0411p0105* + ID_MODEL_FROM_DATABASE=External Hard Drive HD-CEU2 [Drive Station] + ++usb:v0411p012C* ++ ID_MODEL_FROM_DATABASE=SATA Bridge ++ + usb:v0411p012E* + ID_MODEL_FROM_DATABASE=WLI-UC-AG300N Wireless LAN Adapter + +@@ -5378,6 +5390,12 @@ usb:v0451p625F* + usb:v0451p8042* + ID_MODEL_FROM_DATABASE=Hub + ++usb:v0451p8142* ++ ID_MODEL_FROM_DATABASE=TUSB8041 4-Port Hub ++ ++usb:v0451p926B* ++ ID_MODEL_FROM_DATABASE=TUSB9260 Boot Loader ++ + usb:v0451pDBC0* + ID_MODEL_FROM_DATABASE=Device Bay Controller + +@@ -7364,6 +7382,9 @@ usb:v046Dp0A1F* + usb:v046Dp0A29* + ID_MODEL_FROM_DATABASE=H600 [Wireless Headset] + ++usb:v046Dp0A37* ++ ID_MODEL_FROM_DATABASE=USB Headset H540 ++ + usb:v046Dp0A38* + ID_MODEL_FROM_DATABASE=Headset H340 + +@@ -7608,7 +7629,7 @@ usb:v046DpC122* + ID_MODEL_FROM_DATABASE=Harmony 650/700 Remote + + usb:v046DpC124* +- ID_MODEL_FROM_DATABASE=Harmony 300 Remote ++ ID_MODEL_FROM_DATABASE=Harmony 300/350 Remote + + usb:v046DpC125* + ID_MODEL_FROM_DATABASE=Harmony 200 Remote +@@ -8432,6 +8453,9 @@ usb:v0471p20E3* + usb:v0471p20E4* + ID_MODEL_FROM_DATABASE=GoGear ViBE 8GB + ++usb:v0471p2160* ++ ID_MODEL_FROM_DATABASE=Mio LINK Heart Rate Monitor ++ + usb:v0471p262C* + ID_MODEL_FROM_DATABASE=SPC230NC Webcam + +@@ -8948,6 +8972,9 @@ usb:v0483p2018* + usb:v0483p2302* + ID_MODEL_FROM_DATABASE=Portable Flash Device (PFD) + ++usb:v0483p347B* ++ ID_MODEL_FROM_DATABASE=ST-LINK/V2-1 ++ + usb:v0483p3744* + ID_MODEL_FROM_DATABASE=STLINK Pseudo disk + +@@ -9044,6 +9071,9 @@ usb:v0489pE016* + usb:v0489pE02C* + ID_MODEL_FROM_DATABASE=Atheros AR5BBU12 Bluetooth Device + ++usb:v0489pE04D* ++ ID_MODEL_FROM_DATABASE=Atheros AR3012 Bluetooth ++ + usb:v048A* + ID_VENDOR_FROM_DATABASE=S-MOS Systems, Inc. + +@@ -13277,6 +13307,9 @@ usb:v04D8pF4B5* + usb:v04D8pF8DA* + ID_MODEL_FROM_DATABASE=Hughski Ltd. ColorHug + ++usb:v04D8pF8E8* ++ ID_MODEL_FROM_DATABASE=Harmony 300/350 Remote ++ + usb:v04D8pF91C* + ID_MODEL_FROM_DATABASE=SPROG IIv3 + +@@ -14376,7 +14409,7 @@ usb:v04E8p6632* + ID_MODEL_FROM_DATABASE=MITs Sync + + usb:v04E8p663E* +- ID_MODEL_FROM_DATABASE=D900e Phone ++ ID_MODEL_FROM_DATABASE=D900e/B2100 Phone + + usb:v04E8p663F* + ID_MODEL_FROM_DATABASE=SGH-E720/SGH-E840 +@@ -14400,10 +14433,10 @@ usb:v04E8p6734* + ID_MODEL_FROM_DATABASE=Juke + + usb:v04E8p6759* +- ID_MODEL_FROM_DATABASE=D900e Media Player ++ ID_MODEL_FROM_DATABASE=D900e/B2100 Media Player + + usb:v04E8p675A* +- ID_MODEL_FROM_DATABASE=D900e Mass Storage ++ ID_MODEL_FROM_DATABASE=D900e/B2100 Mass Storage + + usb:v04E8p675B* + ID_MODEL_FROM_DATABASE=D900e Camera +@@ -17153,6 +17186,9 @@ usb:v054Cp04CB* + usb:v054Cp0541* + ID_MODEL_FROM_DATABASE=DSC-HX100V [Cybershot Digital Still Camera] + ++usb:v054Cp05C4* ++ ID_MODEL_FROM_DATABASE=DualShock 4 ++ + usb:v054Cp0689* + ID_MODEL_FROM_DATABASE=Walkman NWZ-B173F + +@@ -17870,6 +17906,9 @@ usb:v056Ap00F6* + usb:v056Ap00F8* + ID_MODEL_FROM_DATABASE=Cintiq 24HD touch (DTH-2400) tablet + ++usb:v056Ap0302* ++ ID_MODEL_FROM_DATABASE=Intuos CTH480S2 [Manga] ++ + usb:v056Ap0307* + ID_MODEL_FROM_DATABASE=Cintiq Companion Hybrid 13HD (DTH-A1300) tablet + +@@ -20511,7 +20550,7 @@ usb:v05B4p4857* + ID_MODEL_FROM_DATABASE=M-Any DAH-210 + + usb:v05B4p6001* +- ID_MODEL_FROM_DATABASE=Digisette DUO-MP3 AR-100 ++ ID_MODEL_FROM_DATABASE=HYUNDAI GDS30C6001 SSFDC / MMC I/F Controller + + usb:v05B5* + ID_VENDOR_FROM_DATABASE=Dialogic Corp. +@@ -20618,6 +20657,9 @@ usb:v05C6p9001* + usb:v05C6p9002* + ID_MODEL_FROM_DATABASE=Gobi Wireless Modem + ++usb:v05C6p9003* ++ ID_MODEL_FROM_DATABASE=Quectel UC20 ++ + usb:v05C6p9008* + ID_MODEL_FROM_DATABASE=Gobi Wireless Modem (QDL mode) + +@@ -21548,6 +21590,9 @@ usb:v05DCpA813* + usb:v05DCpA815* + ID_MODEL_FROM_DATABASE=JumpDrive V10 + ++usb:v05DCpA833* ++ ID_MODEL_FROM_DATABASE=JumpDrive S23 64GB ++ + usb:v05DCpB002* + ID_MODEL_FROM_DATABASE=USB CF Reader + +@@ -22589,6 +22634,9 @@ usb:v064EpA219* + usb:v064EpC107* + ID_MODEL_FROM_DATABASE=HP webcam [dv6-1190en] + ++usb:v064EpC335* ++ ID_MODEL_FROM_DATABASE=HP TrueVision HD ++ + usb:v064EpD101* + ID_MODEL_FROM_DATABASE=Acer CrystalEye Webcam + +@@ -25850,6 +25898,9 @@ usb:v0764p0005* + usb:v0764p0501* + ID_MODEL_FROM_DATABASE=CP1500 AVR UPS + ++usb:v0764p0601* ++ ID_MODEL_FROM_DATABASE=PR1500LCDRT2U UPS ++ + usb:v0765* + ID_VENDOR_FROM_DATABASE=X-Rite, Inc. + +@@ -26900,6 +26951,9 @@ usb:v07B3p0A06* + usb:v07B3p0B00* + ID_MODEL_FROM_DATABASE=SmartPhoto F50 + ++usb:v07B3p0C00* ++ ID_MODEL_FROM_DATABASE=OpticPro ST64 Scanner ++ + usb:v07B3p0C03* + ID_MODEL_FROM_DATABASE=OpticPro ST64+ Scanner + +@@ -26946,7 +27000,7 @@ usb:v07B4p0112* + ID_MODEL_FROM_DATABASE=MAUSB-100 xD Card Reader + + usb:v07B4p0113* +- ID_MODEL_FROM_DATABASE=Mju 500 ++ ID_MODEL_FROM_DATABASE=Mju 500 / Stylus Digital Camera (PTP) + + usb:v07B4p0114* + ID_MODEL_FROM_DATABASE=C-350Z Camera +@@ -28589,6 +28643,9 @@ usb:v0846p9041* + usb:v0846p9042* + ID_MODEL_FROM_DATABASE=On Networks N150MA 802.11bgn [Realtek RTL8188CUS] + ++usb:v0846p9043* ++ ID_MODEL_FROM_DATABASE=WNA1000Mv2 802.11bgn [Realtek RTL8188CUS?] ++ + usb:v0846p9050* + ID_MODEL_FROM_DATABASE=A6200 802.11a/b/g/n/ac Wireless Adapter [Broadcom BCM43526] + +@@ -29432,6 +29489,9 @@ usb:v08E3p0301* + usb:v08E4* + ID_VENDOR_FROM_DATABASE=Pioneer Corp. + ++usb:v08E4p0184* ++ ID_MODEL_FROM_DATABASE=DDJ-WeGO ++ + usb:v08E4p0185* + ID_MODEL_FROM_DATABASE=DDJ-WeGO2 + +@@ -29990,6 +30050,9 @@ usb:v090Cp037A* + usb:v090Cp037B* + ID_MODEL_FROM_DATABASE=Silicon Motion Camera + ++usb:v090Cp037C* ++ ID_MODEL_FROM_DATABASE=300k Pixel Camera ++ + usb:v090Cp1000* + ID_MODEL_FROM_DATABASE=Flash Drive + +@@ -30032,6 +30095,9 @@ usb:v090CpB370* + usb:v090CpB371* + ID_MODEL_FROM_DATABASE=Silicon Motion SM371 Camera + ++usb:v090CpF37D* ++ ID_MODEL_FROM_DATABASE=Endoscope camera ++ + usb:v090D* + ID_VENDOR_FROM_DATABASE=Multiport Computer Vertriebs GmbH + +@@ -30323,6 +30389,9 @@ usb:v0928* + usb:v0928p8000* + ID_MODEL_FROM_DATABASE=Firmware uploader + ++usb:v0928pFFFF* ++ ID_MODEL_FROM_DATABASE=Blank Oxford Device ++ + usb:v0929* + ID_VENDOR_FROM_DATABASE=American Biometric Co. + +@@ -35774,6 +35843,15 @@ usb:v0C4Bp0500* + usb:v0C4Bp0501* + ID_MODEL_FROM_DATABASE=cyberJack RFID comfort dual interface smartcard reader + ++usb:v0C4Bp0502* ++ ID_MODEL_FROM_DATABASE=cyberJack compact ++ ++usb:v0C4Bp0504* ++ ID_MODEL_FROM_DATABASE=cyberJack go / go plus ++ ++usb:v0C4Bp0505* ++ ID_MODEL_FROM_DATABASE=cyberJack wave ++ + usb:v0C4Bp9102* + ID_MODEL_FROM_DATABASE=cyberJack RFID basis contactless smartcard reader + +@@ -35981,6 +36059,36 @@ usb:v0C5E* + usb:v0C60* + ID_VENDOR_FROM_DATABASE=Apogee Electronics Corp. + ++usb:v0C60p0001* ++ ID_MODEL_FROM_DATABASE=MiniMe ++ ++usb:v0C60p0002* ++ ID_MODEL_FROM_DATABASE=MiniDAC ++ ++usb:v0C60p0003* ++ ID_MODEL_FROM_DATABASE=ONE ++ ++usb:v0C60p0004* ++ ID_MODEL_FROM_DATABASE=GiO ++ ++usb:v0C60p0007* ++ ID_MODEL_FROM_DATABASE=Duet ++ ++usb:v0C60p0009* ++ ID_MODEL_FROM_DATABASE=Jam ++ ++usb:v0C60p000A* ++ ID_MODEL_FROM_DATABASE=Jam Bootloader ++ ++usb:v0C60p000B* ++ ID_MODEL_FROM_DATABASE=MiC ++ ++usb:v0C60p000C* ++ ID_MODEL_FROM_DATABASE=MiC Bootloader ++ ++usb:v0C60p8007* ++ ID_MODEL_FROM_DATABASE=Duet DFU Mode ++ + usb:v0C62* + ID_VENDOR_FROM_DATABASE=Chant Sincere Co., Ltd + +@@ -37524,7 +37632,7 @@ usb:v0DA3* + ID_VENDOR_FROM_DATABASE=Nippon Electro-Sensory Devices Corp. + + usb:v0DA4* +- ID_VENDOR_FROM_DATABASE=Polar Electro OY ++ ID_VENDOR_FROM_DATABASE=Polar Electro Oy + + usb:v0DA4p0001* + ID_MODEL_FROM_DATABASE=Interface +@@ -37667,6 +37775,18 @@ usb:v0DB3* + usb:v0DB4* + ID_VENDOR_FROM_DATABASE=Chung Fu Chen Yeh Enterprise Corp. + ++usb:v0DB5* ++ ID_VENDOR_FROM_DATABASE=Access IS ++ ++usb:v0DB5p0139* ++ ID_MODEL_FROM_DATABASE=LSR116 CDC ++ ++usb:v0DB5p013A* ++ ID_MODEL_FROM_DATABASE=LSR116 Keyboard ++ ++usb:v0DB5p013B* ++ ID_MODEL_FROM_DATABASE=LSR116 HID ++ + usb:v0DB7* + ID_VENDOR_FROM_DATABASE=ELCON Systemtechnik + +@@ -38510,6 +38630,9 @@ usb:v0E6Fp0005* + usb:v0E6Fp0006* + ID_MODEL_FROM_DATABASE=Edge wireless Controller + ++usb:v0E6Fp0128* ++ ID_MODEL_FROM_DATABASE=Wireless PS3 Controller ++ + usb:v0E70* + ID_VENDOR_FROM_DATABASE=Tokyo Electronic Industry Co., Ltd + +@@ -38618,6 +38741,9 @@ usb:v0E8Fp0020* + usb:v0E8Fp0021* + ID_MODEL_FROM_DATABASE=Multimedia Keyboard Controller + ++usb:v0E8Fp0022* ++ ID_MODEL_FROM_DATABASE=multimedia keyboard controller ++ + usb:v0E8Fp0201* + ID_MODEL_FROM_DATABASE=SmartJoy Frag Xpad/PS2 adaptor + +@@ -38858,6 +38984,9 @@ usb:v0EE3p1000* + usb:v0EE4* + ID_VENDOR_FROM_DATABASE=Sunrich Technology, Ltd + ++usb:v0EE4p0690* ++ ID_MODEL_FROM_DATABASE=SATA 3 Adapter ++ + usb:v0EEE* + ID_VENDOR_FROM_DATABASE=Digital Stream Technology, Inc. + +@@ -39663,7 +39792,7 @@ usb:v0FCEpE19B* + ID_MODEL_FROM_DATABASE=C2005 [Xperia M dual] (Mass Storage) + + usb:v0FCEpF0FA* +- ID_MODEL_FROM_DATABASE=Liveview micro display MN800 in DFU mode ++ ID_MODEL_FROM_DATABASE=MN800 / Smartwatch 2 (DFU mode) + + usb:v0FCF* + ID_VENDOR_FROM_DATABASE=Dynastream Innovations, Inc. +@@ -39884,6 +40013,9 @@ usb:v1004p61C6* + usb:v1004p61CC* + ID_MODEL_FROM_DATABASE=Optimus S + ++usb:v1004p61DA* ++ ID_MODEL_FROM_DATABASE=G2 Android Phone [tethering mode] ++ + usb:v1004p61F1* + ID_MODEL_FROM_DATABASE=Optimus Android Phone [LG Software mode] + +@@ -39900,13 +40032,13 @@ usb:v1004p6300* + ID_MODEL_FROM_DATABASE=Optimus Android Phone + + usb:v1004p631C* +- ID_MODEL_FROM_DATABASE=Optimus Android Phone [MTP mode] ++ ID_MODEL_FROM_DATABASE=G2/Optimus Android Phone [MTP mode] + + usb:v1004p631D* + ID_MODEL_FROM_DATABASE=Optimus Android Phone (Camera/PTP Mode) + + usb:v1004p631E* +- ID_MODEL_FROM_DATABASE=Optimus Android Phone [Camera/PTP mode] ++ ID_MODEL_FROM_DATABASE=G2/Optimus Android Phone [Camera/PTP mode] + + usb:v1004p631F* + ID_MODEL_FROM_DATABASE=Optimus Android Phone (Charge Mode) +@@ -40241,6 +40373,9 @@ usb:v1046p9967* + usb:v1048* + ID_VENDOR_FROM_DATABASE=Targus Group International + ++usb:v1048p2010* ++ ID_MODEL_FROM_DATABASE=4-Port hub ++ + usb:v104B* + ID_VENDOR_FROM_DATABASE=Mylex / Buslogic + +@@ -40287,13 +40422,22 @@ usb:v1050p0010* + ID_MODEL_FROM_DATABASE=Yubikey + + usb:v1050p0110* +- ID_MODEL_FROM_DATABASE=Yubikey NEO OTP ++ ID_MODEL_FROM_DATABASE=Yubikey NEO(-N) OTP + + usb:v1050p0111* +- ID_MODEL_FROM_DATABASE=Yubikey NEO OTP+CCID ++ ID_MODEL_FROM_DATABASE=Yubikey NEO(-N) OTP+CCID + + usb:v1050p0112* +- ID_MODEL_FROM_DATABASE=Yubikey NEO CCID ++ ID_MODEL_FROM_DATABASE=Yubikey NEO(-N) CCID ++ ++usb:v1050p0113* ++ ID_MODEL_FROM_DATABASE=Yubikey NEO(-N) U2F ++ ++usb:v1050p0114* ++ ID_MODEL_FROM_DATABASE=Yubikey NEO(-N) OTP+U2F ++ ++usb:v1050p0115* ++ ID_MODEL_FROM_DATABASE=Yubikey NEO(-N) U2F+CCID + + usb:v1050p0200* + ID_MODEL_FROM_DATABASE=U2F Gnubby +@@ -50777,6 +50921,15 @@ usb:v2931p0A05* + usb:v2931p0AFE* + ID_MODEL_FROM_DATABASE=Jolla charging only + ++usb:v2A03* ++ ID_VENDOR_FROM_DATABASE=dog hunter AG ++ ++usb:v2A03p0001* ++ ID_MODEL_FROM_DATABASE=Linino One (CDC ACM) ++ ++usb:v2A03p8001* ++ ID_MODEL_FROM_DATABASE=Linino ONE board ++ + usb:v2C02* + ID_VENDOR_FROM_DATABASE=Planex Communications + diff --git a/SOURCES/0094-man-add-docs-for-sd_is_special-and-some-man-page-sym.patch b/SOURCES/0094-man-add-docs-for-sd_is_special-and-some-man-page-sym.patch deleted file mode 100644 index 2b774d0..0000000 --- a/SOURCES/0094-man-add-docs-for-sd_is_special-and-some-man-page-sym.patch +++ /dev/null @@ -1,134 +0,0 @@ -From 5b154beab0557c51f18012e7d01d29d48d1910f3 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Thu, 7 Nov 2013 17:51:09 +0100 -Subject: [PATCH] man: add docs for sd_is_special() and some man page symlinks - -Conflicts: - Makefile.am ---- - Makefile-man.am | 15 +++++++++++++++ - man/sd_is_fifo.xml | 17 +++++++++++++++++ - man/sd_seat_get_active.xml | 2 ++ - 3 files changed, 34 insertions(+) - -diff --git a/Makefile-man.am b/Makefile-man.am -index c8a4342..b8c8acc 100644 ---- a/Makefile-man.am -+++ b/Makefile-man.am -@@ -138,6 +138,7 @@ MANPAGES_ALIAS += \ - man/sd_is_socket.3 \ - man/sd_is_socket_inet.3 \ - man/sd_is_socket_unix.3 \ -+ man/sd_is_special.3 \ - man/sd_journal.3 \ - man/sd_journal_add_conjunction.3 \ - man/sd_journal_add_disjunction.3 \ -@@ -238,6 +239,7 @@ man/sd_is_mq.3: man/sd_is_fifo.3 - man/sd_is_socket.3: man/sd_is_fifo.3 - man/sd_is_socket_inet.3: man/sd_is_fifo.3 - man/sd_is_socket_unix.3: man/sd_is_fifo.3 -+man/sd_is_special.3: man/sd_is_fifo.3 - man/sd_journal.3: man/sd_journal_open.3 - man/sd_journal_add_conjunction.3: man/sd_journal_add_match.3 - man/sd_journal_add_disjunction.3: man/sd_journal_add_match.3 -@@ -410,6 +412,9 @@ man/sd_is_socket_inet.html: man/sd_is_fifo.html - man/sd_is_socket_unix.html: man/sd_is_fifo.html - $(html-alias) - -+man/sd_is_special.html: man/sd_is_fifo.html -+ $(html-alias) -+ - man/sd_journal.html: man/sd_journal_open.html - $(html-alias) - -@@ -844,7 +849,9 @@ MANPAGES_ALIAS += \ - man/sd_pid_get_slice.3 \ - man/sd_pid_get_unit.3 \ - man/sd_pid_get_user_unit.3 \ -+ man/sd_seat_can_graphical.3 \ - man/sd_seat_can_multi_session.3 \ -+ man/sd_seat_can_tty.3 \ - man/sd_seat_get_sessions.3 \ - man/sd_session_get_class.3 \ - man/sd_session_get_display.3 \ -@@ -873,7 +880,9 @@ man/sd_pid_get_owner_uid.3: man/sd_pid_get_session.3 - man/sd_pid_get_slice.3: man/sd_pid_get_session.3 - man/sd_pid_get_unit.3: man/sd_pid_get_session.3 - man/sd_pid_get_user_unit.3: man/sd_pid_get_session.3 -+man/sd_seat_can_graphical.3: man/sd_seat_get_active.3 - man/sd_seat_can_multi_session.3: man/sd_seat_get_active.3 -+man/sd_seat_can_tty.3: man/sd_seat_get_active.3 - man/sd_seat_get_sessions.3: man/sd_seat_get_active.3 - man/sd_session_get_class.3: man/sd_session_is_active.3 - man/sd_session_get_display.3: man/sd_session_is_active.3 -@@ -930,9 +939,15 @@ man/sd_pid_get_unit.html: man/sd_pid_get_session.html - man/sd_pid_get_user_unit.html: man/sd_pid_get_session.html - $(html-alias) - -+man/sd_seat_can_graphical.html: man/sd_seat_get_active.html -+ $(html-alias) -+ - man/sd_seat_can_multi_session.html: man/sd_seat_get_active.html - $(html-alias) - -+man/sd_seat_can_tty.html: man/sd_seat_get_active.html -+ $(html-alias) -+ - man/sd_seat_get_sessions.html: man/sd_seat_get_active.html - $(html-alias) - -diff --git a/man/sd_is_fifo.xml b/man/sd_is_fifo.xml -index 2bc860c..4d9cd79 100644 ---- a/man/sd_is_fifo.xml -+++ b/man/sd_is_fifo.xml -@@ -48,6 +48,7 @@ - sd_is_socket_inet - sd_is_socket_unix - sd_is_mq -+ sd_is_special - Check the type of a file descriptor - - -@@ -93,6 +94,12 @@ - const char *path - - -+ -+ int sd_is_special -+ int fd -+ const char *path -+ -+ - - - -@@ -153,6 +160,16 @@ - path parameter is not - NULL, it is checked whether the - message queue is bound to the specified name. -+ -+ sd_is_special() may be -+ 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 -+ descriptor is bound to the specified file -+ name. Special files in this context are character -+ device nodes and files in /proc -+ or /sys. - - - -diff --git a/man/sd_seat_get_active.xml b/man/sd_seat_get_active.xml -index 1610d3e..cd87696 100644 ---- a/man/sd_seat_get_active.xml -+++ b/man/sd_seat_get_active.xml -@@ -46,6 +46,8 @@ - sd_seat_get_active - sd_seat_get_sessions - sd_seat_can_multi_session -+ sd_seat_can_tty -+ sd_seat_can_graphical - Determine state of a specific seat - - diff --git a/SOURCES/0095-networkd-Begin-with-serial-number-1-for-netlink-requ.patch b/SOURCES/0095-networkd-Begin-with-serial-number-1-for-netlink-requ.patch new file mode 100644 index 0000000..b93ebee --- /dev/null +++ b/SOURCES/0095-networkd-Begin-with-serial-number-1-for-netlink-requ.patch @@ -0,0 +1,45 @@ +From 0dd3b68d80bd32ecc5db65d634072390dad581aa Mon Sep 17 00:00:00 2001 +From: Richard Maw +Date: Thu, 12 Mar 2015 18:14:58 +0000 +Subject: [PATCH] networkd: Begin with serial number 1 for netlink requests + +"Notifications are of informal nature and no reply is expected, therefore the +sequence number is typically set to 0."[1] + +If networkd is started soon after recent netlink activity, then there +will be messages with sequence number 0 in the buffer. + +The first thing networkd does is to request a dump of all the links. If +it uses sequence number 0 for this, then it may confuse the dump request's +response with that of a notification. + +This will result in it failing to properly enumerate all the links, +but more importantly, when it comes to enumerate all the addresses, it +will still have the link dump in progress, so the address enumeration +will fail with -EBUSY. + +[1]: http://www.infradead.org/~tgr/libnl/doc/core.html#core_msg_types + +[tomegun: sequence -> serial] + +(cherry picked from commit d422e52a3523ad0955bec4f9fbed46e234d28590) +--- + src/libsystemd/sd-rtnl/sd-rtnl.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/libsystemd/sd-rtnl/sd-rtnl.c b/src/libsystemd/sd-rtnl/sd-rtnl.c +index ae49c77..7cdcc5d 100644 +--- a/src/libsystemd/sd-rtnl/sd-rtnl.c ++++ b/src/libsystemd/sd-rtnl/sd-rtnl.c +@@ -61,6 +61,11 @@ static int sd_rtnl_new(sd_rtnl **ret) { + sizeof(struct nlmsghdr), sizeof(uint8_t))) + return -ENOMEM; + ++ /* Change notification responses have sequence 0, so we must ++ * start our request sequence numbers at 1, or we may confuse our ++ * responses with notifications from the kernel */ ++ rtnl->serial = 1; ++ + *ret = rtnl; + rtnl = NULL; + diff --git a/SOURCES/0095-systemctl-return-r-instead-of-always-returning-0.patch b/SOURCES/0095-systemctl-return-r-instead-of-always-returning-0.patch deleted file mode 100644 index 53cec6a..0000000 --- a/SOURCES/0095-systemctl-return-r-instead-of-always-returning-0.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 72002c70f780a73efc8357fe0249228e6d0a6924 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Wed, 6 Nov 2013 11:18:02 +0100 -Subject: [PATCH] systemctl: return r instead of always returning 0 - ---- - src/systemctl/systemctl.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c -index 36040db..1d68b38 100644 ---- a/src/systemctl/systemctl.c -+++ b/src/systemctl/systemctl.c -@@ -1362,7 +1362,7 @@ static int list_jobs(DBusConnection *bus, char **args) { - } - free(jobs); - -- return 0; -+ return r; - } - - static int cancel_job(DBusConnection *bus, char **args) { diff --git a/SOURCES/0096-journal-fix-minor-memory-leak.patch b/SOURCES/0096-journal-fix-minor-memory-leak.patch deleted file mode 100644 index 4b99d8c..0000000 --- a/SOURCES/0096-journal-fix-minor-memory-leak.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 9d2d041c768d1597cd556a322e4eb3d1d623f318 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 8 Nov 2013 13:53:25 +0100 -Subject: [PATCH] journal: fix minor memory leak - ---- - src/journal/sd-journal.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c -index 7700d6c..9676f0f 100644 ---- a/src/journal/sd-journal.c -+++ b/src/journal/sd-journal.c -@@ -1276,7 +1276,7 @@ static void check_network(sd_journal *j, int fd) { - static bool file_has_type_prefix(const char *prefix, const char *filename) { - const char *full, *tilded, *atted; - -- full = strappend(prefix, ".journal"); -+ full = strappenda(prefix, ".journal"); - tilded = strappenda(full, "~"); - atted = strappenda(prefix, "@"); - diff --git a/SOURCES/0096-journal-remote-downgrade-routine-messages-to-debug.patch b/SOURCES/0096-journal-remote-downgrade-routine-messages-to-debug.patch new file mode 100644 index 0000000..42f7036 --- /dev/null +++ b/SOURCES/0096-journal-remote-downgrade-routine-messages-to-debug.patch @@ -0,0 +1,179 @@ +From c546fffcff0d2e3522738aac30391d5996bdf4a6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 12 Mar 2015 21:29:28 -0400 +Subject: [PATCH] journal-remote: downgrade routine messages to debug + +https://bugs.freedesktop.org/show_bug.cgi?id=89486 +(cherry picked from commit 0e72da6fe8671d49b4d458519f5ac7600fd04f03) +--- + src/journal-remote/journal-remote-parse.c | 2 +- + src/journal-remote/journal-remote-write.c | 2 +- + src/journal-remote/journal-remote.c | 36 +++++++++++++++---------------- + src/journal-remote/microhttpd-util.c | 4 ++-- + 4 files changed, 22 insertions(+), 22 deletions(-) + +diff --git a/src/journal-remote/journal-remote-parse.c b/src/journal-remote/journal-remote-parse.c +index afded7e..6c096de 100644 +--- a/src/journal-remote/journal-remote-parse.c ++++ b/src/journal-remote/journal-remote-parse.c +@@ -443,7 +443,7 @@ int process_source(RemoteSource *source, bool compress, bool seal) { + return r; + + /* We have a full event */ +- log_trace("Received a full event from source@%p fd:%d (%s)", ++ log_trace("Received full event from source@%p fd:%d (%s)", + source, source->fd, source->name); + + if (!source->iovw.count) { +diff --git a/src/journal-remote/journal-remote-write.c b/src/journal-remote/journal-remote-write.c +index df30049..99820fa 100644 +--- a/src/journal-remote/journal-remote-write.c ++++ b/src/journal-remote/journal-remote-write.c +@@ -156,7 +156,7 @@ int writer_write(Writer *w, + if (r < 0) + return r; + else +- log_info("%s: Successfully rotated journal", w->journal->path); ++ log_debug("%s: Successfully rotated journal", w->journal->path); + + log_debug("Retrying write."); + r = journal_file_append_entry(w->journal, ts, iovw->iovec, iovw->count, +diff --git a/src/journal-remote/journal-remote.c b/src/journal-remote/journal-remote.c +index 8f32a9a..d1486e7 100644 +--- a/src/journal-remote/journal-remote.c ++++ b/src/journal-remote/journal-remote.c +@@ -207,7 +207,7 @@ static int open_output(Writer *w, const char* host) { + log_error_errno(r, "Failed to open output journal %s: %m", + output); + else +- log_info("Opened output file %s", w->journal->path); ++ log_debug("Opened output file %s", w->journal->path); + return r; + } + +@@ -747,7 +747,7 @@ static int setup_microhttpd_socket(RemoteServer *s, + const char *trust) { + int fd; + +- fd = make_socket_fd(LOG_INFO, address, SOCK_STREAM | SOCK_CLOEXEC); ++ fd = make_socket_fd(LOG_DEBUG, address, SOCK_STREAM | SOCK_CLOEXEC); + if (fd < 0) + return fd; + +@@ -844,7 +844,7 @@ static int remoteserver_init(RemoteServer *s, + if (n < 0) + return log_error_errno(n, "Failed to read listening file descriptors from environment: %m"); + else +- log_info("Received %d descriptors", n); ++ log_debug("Received %d descriptors", n); + + if (MAX(http_socket, https_socket) >= SD_LISTEN_FDS_START + n) { + log_error("Received fewer sockets than expected"); +@@ -853,7 +853,7 @@ static int remoteserver_init(RemoteServer *s, + + for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + n; fd++) { + if (sd_is_socket(fd, AF_UNSPEC, 0, true)) { +- log_info("Received a listening socket (fd:%d)", fd); ++ log_debug("Received a listening socket (fd:%d)", fd); + + if (fd == http_socket) + r = setup_microhttpd_server(s, fd, NULL, NULL, NULL); +@@ -868,7 +868,7 @@ static int remoteserver_init(RemoteServer *s, + if (r < 0) + return log_error_errno(r, "Failed to retrieve remote name: %m"); + +- log_info("Received a connection socket (fd:%d) from %s", fd, hostname); ++ log_debug("Received a connection socket (fd:%d) from %s", fd, hostname); + + r = add_source(s, fd, hostname, true); + } else { +@@ -908,7 +908,7 @@ static int remoteserver_init(RemoteServer *s, + } + + if (arg_listen_raw) { +- log_info("Listening on a socket..."); ++ log_debug("Listening on a socket..."); + r = setup_raw_socket(s, arg_listen_raw); + if (r < 0) + return r; +@@ -930,12 +930,12 @@ static int remoteserver_init(RemoteServer *s, + const char *output_name; + + if (streq(*file, "-")) { +- log_info("Using standard input as source."); ++ log_debug("Using standard input as source."); + + fd = STDIN_FILENO; + output_name = "stdin"; + } else { +- log_info("Reading file %s...", *file); ++ log_debug("Reading file %s...", *file); + + fd = open(*file, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NONBLOCK); + if (fd < 0) +@@ -1014,22 +1014,22 @@ static int dispatch_raw_source_event(sd_event_source *event, + if (source->state == STATE_EOF) { + size_t remaining; + +- log_info("EOF reached with source fd:%d (%s)", +- source->fd, source->name); ++ log_debug("EOF reached with source fd:%d (%s)", ++ source->fd, source->name); + + remaining = source_non_empty(source); + if (remaining > 0) +- log_warning("Premature EOF. %zu bytes lost.", remaining); ++ log_notice("Premature EOF. %zu bytes lost.", remaining); + remove_source(s, source->fd); +- log_info("%zu active sources remaining", s->active); ++ log_debug("%zu active sources remaining", s->active); + return 0; + } else if (r == -E2BIG) { +- log_error("Entry too big, skipped"); ++ log_notice_errno(E2BIG, "Entry too big, skipped"); + return 1; + } else if (r == -EAGAIN) { + return 0; + } else if (r < 0) { +- log_info_errno(r, "Closing connection: %m"); ++ log_debug_errno(r, "Closing connection: %m"); + remove_source(server, fd); + return 0; + } else +@@ -1071,10 +1071,10 @@ static int accept_connection(const char* type, int fd, + return r; + } + +- log_info("Accepted %s %s connection from %s", +- type, +- socket_address_family(addr) == AF_INET ? "IP" : "IPv6", +- a); ++ log_debug("Accepted %s %s connection from %s", ++ type, ++ socket_address_family(addr) == AF_INET ? "IP" : "IPv6", ++ a); + + *hostname = b; + +diff --git a/src/journal-remote/microhttpd-util.c b/src/journal-remote/microhttpd-util.c +index a95fff1..b45c38d 100644 +--- a/src/journal-remote/microhttpd-util.c ++++ b/src/journal-remote/microhttpd-util.c +@@ -178,7 +178,7 @@ static int verify_cert_authorized(gnutls_session_t session) { + if (r < 0) + return log_error_errno(r, "gnutls_certificate_verification_status_print failed: %m"); + +- log_info("Certificate status: %s", out.data); ++ log_debug("Certificate status: %s", out.data); + gnutls_free(out.data); + + return status == 0 ? 0 : -EPERM; +@@ -280,7 +280,7 @@ int check_permissions(struct MHD_Connection *connection, int *code, char **hostn + return -EPERM; + } + +- log_info("Connection from %s", buf); ++ log_debug("Connection from %s", buf); + + if (hostname) { + *hostname = buf; diff --git a/SOURCES/0097-journal-remote-process-events-without-delay.patch b/SOURCES/0097-journal-remote-process-events-without-delay.patch new file mode 100644 index 0000000..620048e --- /dev/null +++ b/SOURCES/0097-journal-remote-process-events-without-delay.patch @@ -0,0 +1,156 @@ +From 47ac92420da9ecbffaf3aa0046d170be358639a2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 13 Mar 2015 00:02:28 -0400 +Subject: [PATCH] journal-remote: process events without delay + +journal-remote buffers input, and then parses it handling one journal entry at a time. +It was possible for useful data to be left in the buffer after some entries were +processesed. But all data would be already read from the fd, so there would be +no reason for the event loop to call the handler again. After some new data came in, +the handler would be called again, and would then process the "old" data in the buffer. + +Fix this by enabling a handler wherever we process input data and do not exhaust data +from the input buffer (i.e. when EAGAIN was not encountered). The handler runs until +we encounter EAGAIN. + +Looping over the input data is done in this roundabout way to allow the event loop +to dispatch other events in the meanwhile. If the loop was inside the handler, a +source which produced data fast enough could completely monopolize the process. + +https://bugs.freedesktop.org/show_bug.cgi?id=89516 +(cherry picked from commit 043945b93824e33e040954612aaa934cd1a43a1b) +--- + src/journal-remote/journal-remote-parse.c | 1 + + src/journal-remote/journal-remote-parse.h | 1 + + src/journal-remote/journal-remote.c | 65 +++++++++++++++++++++++++++---- + 3 files changed, 59 insertions(+), 8 deletions(-) + +diff --git a/src/journal-remote/journal-remote-parse.c b/src/journal-remote/journal-remote-parse.c +index 6c096de..7e62954 100644 +--- a/src/journal-remote/journal-remote-parse.c ++++ b/src/journal-remote/journal-remote-parse.c +@@ -41,6 +41,7 @@ void source_free(RemoteSource *source) { + writer_unref(source->writer); + + sd_event_source_unref(source->event); ++ sd_event_source_unref(source->buffer_event); + + free(source); + } +diff --git a/src/journal-remote/journal-remote-parse.h b/src/journal-remote/journal-remote-parse.h +index 22db550..06a5029 100644 +--- a/src/journal-remote/journal-remote-parse.h ++++ b/src/journal-remote/journal-remote-parse.h +@@ -54,6 +54,7 @@ typedef struct RemoteSource { + Writer *writer; + + sd_event_source *event; ++ sd_event_source *buffer_event; + } RemoteSource; + + RemoteSource* source_new(int fd, bool passive_fd, char *name, Writer *writer); +diff --git a/src/journal-remote/journal-remote.c b/src/journal-remote/journal-remote.c +index d1486e7..b7cc6d7 100644 +--- a/src/journal-remote/journal-remote.c ++++ b/src/journal-remote/journal-remote.c +@@ -289,6 +289,8 @@ static int dispatch_raw_source_event(sd_event_source *event, + int fd, + uint32_t revents, + void *userdata); ++static int dispatch_raw_source_until_block(sd_event_source *event, ++ void *userdata); + static int dispatch_blocking_source_event(sd_event_source *event, + void *userdata); + static int dispatch_raw_connection_event(sd_event_source *event, +@@ -376,8 +378,15 @@ static int add_source(RemoteServer *s, int fd, char* name, bool own_name) { + + r = sd_event_add_io(s->events, &source->event, + fd, EPOLLIN|EPOLLRDHUP|EPOLLPRI, +- dispatch_raw_source_event, s); +- if (r == -EPERM) { ++ dispatch_raw_source_event, source); ++ if (r == 0) { ++ /* Add additional source for buffer processing. It will be ++ * enabled later. */ ++ r = sd_event_add_defer(s->events, &source->buffer_event, ++ dispatch_raw_source_until_block, source); ++ if (r == 0) ++ sd_event_source_set_enabled(source->buffer_event, SD_EVENT_OFF); ++ } else if (r == -EPERM) { + log_debug("Falling back to sd_event_add_defer for fd:%d (%s)", fd, name); + r = sd_event_add_defer(s->events, &source->event, + dispatch_blocking_source_event, source); +@@ -997,15 +1006,18 @@ static void server_destroy(RemoteServer *s) { + ********************************************************************** + **********************************************************************/ + +-static int dispatch_raw_source_event(sd_event_source *event, +- int fd, +- uint32_t revents, +- void *userdata) { ++static int handle_raw_source(sd_event_source *event, ++ int fd, ++ uint32_t revents, ++ RemoteServer *s) { + +- RemoteServer *s = userdata; + RemoteSource *source; + int r; + ++ /* Returns 1 if there might be more data pending, ++ * 0 if data is currently exhausted, negative on error. ++ */ ++ + assert(fd >= 0 && fd < (ssize_t) s->sources_size); + source = s->sources[fd]; + assert(source->fd == fd); +@@ -1036,11 +1048,48 @@ static int dispatch_raw_source_event(sd_event_source *event, + return 1; + } + ++static int dispatch_raw_source_until_block(sd_event_source *event, ++ void *userdata) { ++ RemoteSource *source = userdata; ++ int r; ++ ++ /* Make sure event stays around even if source is destroyed */ ++ sd_event_source_ref(event); ++ ++ r = handle_raw_source(event, source->fd, EPOLLIN, server); ++ if (r != 1) ++ /* No more data for now */ ++ sd_event_source_set_enabled(event, SD_EVENT_OFF); ++ ++ sd_event_source_unref(event); ++ ++ return r; ++} ++ ++static int dispatch_raw_source_event(sd_event_source *event, ++ int fd, ++ uint32_t revents, ++ void *userdata) { ++ RemoteSource *source = userdata; ++ int r; ++ ++ assert(source->event); ++ assert(source->buffer_event); ++ ++ r = handle_raw_source(event, fd, EPOLLIN, server); ++ if (r == 1) ++ /* Might have more data. We need to rerun the handler ++ * until we are sure the buffer is exhausted. */ ++ sd_event_source_set_enabled(source->buffer_event, SD_EVENT_ON); ++ ++ return r; ++} ++ + static int dispatch_blocking_source_event(sd_event_source *event, + void *userdata) { + RemoteSource *source = userdata; + +- return dispatch_raw_source_event(event, source->fd, EPOLLIN, server); ++ return handle_raw_source(event, source->fd, EPOLLIN, server); + } + + static int accept_connection(const char* type, int fd, diff --git a/SOURCES/0097-man-units-fix-installation-of-systemd-nspawn-.servic.patch b/SOURCES/0097-man-units-fix-installation-of-systemd-nspawn-.servic.patch deleted file mode 100644 index 956462c..0000000 --- a/SOURCES/0097-man-units-fix-installation-of-systemd-nspawn-.servic.patch +++ /dev/null @@ -1,57 +0,0 @@ -From a3794196f13a2fd47d61517a304c15e162a6c06a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Thu, 7 Nov 2013 23:57:19 -0500 -Subject: [PATCH] man,units: fix installation of systemd-nspawn@.service and - add example - ---- - TODO | 1 + - man/systemd-nspawn.xml | 12 ++++++++++++ - units/systemd-nspawn@.service.in | 2 +- - 3 files changed, 14 insertions(+), 1 deletion(-) - -diff --git a/TODO b/TODO -index 07269f4..ad4b733 100644 ---- a/TODO -+++ b/TODO -@@ -493,6 +493,7 @@ Features: - - nspawn: maybe add a way to drop additional caps, in addition to add additional caps - - nspawn: maybe explicitly reset loginuid? - - nspawn: make it work for dwalsh and shared /usr containers -- tmpfs mounts as command line parameters, selinux exec context -+ - refuses to boot containers without /etc/machine-id (OK?), and with empty /etc/machine-id (not OK). - - * cryptsetup: - - cryptsetup-generator: allow specification of passwords in crypttab itself -diff --git a/man/systemd-nspawn.xml b/man/systemd-nspawn.xml -index 7d450f9..ba9e516 100644 ---- a/man/systemd-nspawn.xml -+++ b/man/systemd-nspawn.xml -@@ -428,6 +428,18 @@ - - - -+ Example 4 -+ -+ # mv ~/arch-tree /var/lib/container/arch -+# systemctl enable systemd-nspawn@arch.service -+# systemctl start systemd-nspawn@arch.service -+ -+ This makes the Arch Linux container part of the -+ multi-user.target on the host. -+ -+ -+ -+ - Exit status - - The exit code of the program executed in the -diff --git a/units/systemd-nspawn@.service.in b/units/systemd-nspawn@.service.in -index eca62e3..8e00736 100644 ---- a/units/systemd-nspawn@.service.in -+++ b/units/systemd-nspawn@.service.in -@@ -14,4 +14,4 @@ ExecStart=@bindir@/systemd-nspawn -bjD /var/lib/container/%i - Type=notify - - [Install] --Also=multi-user.target -+WantedBy=multi-user.target diff --git a/SOURCES/0098-man-update-example-2-in-systemd.network-5.patch b/SOURCES/0098-man-update-example-2-in-systemd.network-5.patch new file mode 100644 index 0000000..ff6a9b4 --- /dev/null +++ b/SOURCES/0098-man-update-example-2-in-systemd.network-5.patch @@ -0,0 +1,26 @@ +From 131de4184e86e7096d987973d7c4918f8303fa4b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 13 Mar 2015 00:25:31 -0400 +Subject: [PATCH] man: update example 2 in systemd.network(5) + +none/both/v4/v6 are deprecated in favour of no/yes/ipv4/ipv6. + +https://bugs.freedesktop.org/show_bug.cgi?id=89221 +(cherry picked from commit 9c8ca3f7a69f82ca181b3cd2d5e1d3e621938abb) +--- + man/systemd.network.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/systemd.network.xml b/man/systemd.network.xml +index 485876b..24f8416 100644 +--- a/man/systemd.network.xml ++++ b/man/systemd.network.xml +@@ -643,7 +643,7 @@ Gateway=192.168.0.1 + Name=en* + + [Network] +-DHCP=both ++DHCP=yes + + + diff --git a/SOURCES/0098-systemd-fix-memory-leak-in-cgroup-code.patch b/SOURCES/0098-systemd-fix-memory-leak-in-cgroup-code.patch deleted file mode 100644 index 069e194..0000000 --- a/SOURCES/0098-systemd-fix-memory-leak-in-cgroup-code.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 19a5f184904952d20cf1a6ea81e6e295fe991765 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Fri, 8 Nov 2013 08:41:13 -0500 -Subject: [PATCH] systemd: fix memory leak in cgroup code - -If the unit already was in the hashmap, path would be leaked. ---- - src/core/cgroup.c | 24 +++++++++++++----------- - 1 file changed, 13 insertions(+), 11 deletions(-) - -diff --git a/src/core/cgroup.c b/src/core/cgroup.c -index 8bf4d89..b60707c 100644 ---- a/src/core/cgroup.c -+++ b/src/core/cgroup.c -@@ -376,23 +376,23 @@ static CGroupControllerMask unit_get_siblings_mask(Unit *u) { - } - - static int unit_create_cgroups(Unit *u, CGroupControllerMask mask) { -- char *path = NULL; -+ _cleanup_free_ char *path; - int r; -- bool is_in_hash = false; -+ bool was_in_hash = false; - - assert(u); - - path = unit_default_cgroup_path(u); - if (!path) -- return -ENOMEM; -+ return log_oom(); - - r = hashmap_put(u->manager->cgroup_unit, path, u); - if (r == 0) -- is_in_hash = true; -- -- if (r < 0) { -- log_error("cgroup %s exists already: %s", path, strerror(-r)); -- free(path); -+ was_in_hash = true; -+ else if (r < 0) { -+ log_error(r == -EEXIST ? -+ "cgroup %s exists already: %s" : "hashmap_put failed for %s: %s", -+ path, strerror(-r)); - return r; - } - -@@ -405,13 +405,15 @@ static int unit_create_cgroups(Unit *u, CGroupControllerMask mask) { - if (u->cgroup_path) { - r = cg_migrate_everywhere(u->manager->cgroup_supported, u->cgroup_path, path); - if (r < 0) -- log_error("Failed to migrate cgroup %s: %s", path, strerror(-r)); -+ log_error("Failed to migrate cgroup from %s to %s: %s", -+ u->cgroup_path, path, strerror(-r)); - } - -- if (!is_in_hash) { -- /* And remember the new data */ -+ if (!was_in_hash) { -+ /* Remember the new data */ - free(u->cgroup_path); - u->cgroup_path = path; -+ path = NULL; - } - - u->cgroup_realized = true; diff --git a/SOURCES/0099-button-don-t-exit-if-we-cannot-handle-a-button-press.patch b/SOURCES/0099-button-don-t-exit-if-we-cannot-handle-a-button-press.patch deleted file mode 100644 index 3a1167c..0000000 --- a/SOURCES/0099-button-don-t-exit-if-we-cannot-handle-a-button-press.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 47be95beb25c23acbd7a47fa226a5523eb4a6e35 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Sun, 10 Nov 2013 23:05:08 +0100 -Subject: [PATCH] button: don't exit if we cannot handle a button press - ---- - src/login/logind-button.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/login/logind-button.c b/src/login/logind-button.c -index ea45c28..4f456d2 100644 ---- a/src/login/logind-button.c -+++ b/src/login/logind-button.c -@@ -172,7 +172,7 @@ static int button_handle( - * execute another one until the lid is opened/closed again */ - b->lid_close_queued = false; - -- return r; -+ return 0; - } - - int button_process(Button *b) { diff --git a/SOURCES/0099-gpt-auto-generator-fix-detection-of-srv.patch b/SOURCES/0099-gpt-auto-generator-fix-detection-of-srv.patch new file mode 100644 index 0000000..b3e8549 --- /dev/null +++ b/SOURCES/0099-gpt-auto-generator-fix-detection-of-srv.patch @@ -0,0 +1,24 @@ +From a9c2be5c2e43bd5fb37dd45f84e6787f4abec23f Mon Sep 17 00:00:00 2001 +From: Mathieu Chevrier +Date: Fri, 13 Mar 2015 00:33:44 -0400 +Subject: [PATCH] gpt-auto-generator: fix detection of /srv + +https://bugs.freedesktop.org/show_bug.cgi?id=89226 +(cherry picked from commit d736e4f3e76daca4ab1b1fc444737e5ee20a27cd) +--- + src/gpt-auto-generator/gpt-auto-generator.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c +index 7d5a6c6..cceeeb8 100644 +--- a/src/gpt-auto-generator/gpt-auto-generator.c ++++ b/src/gpt-auto-generator/gpt-auto-generator.c +@@ -549,7 +549,7 @@ static int enumerate_partitions(dev_t devnum) { + srv_rw = !(flags & GPT_FLAG_READ_ONLY), + + free(srv); +- srv = strdup(node); ++ srv = strdup(subnode); + if (!srv) + return log_oom(); + } diff --git a/SOURCES/0100-sd-rtnl-never-set-serial-to-0.patch b/SOURCES/0100-sd-rtnl-never-set-serial-to-0.patch new file mode 100644 index 0000000..fbaa11b --- /dev/null +++ b/SOURCES/0100-sd-rtnl-never-set-serial-to-0.patch @@ -0,0 +1,28 @@ +From fc9d7a3891dc293cccd4e127cfb1e2355f4e93da Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Fri, 13 Mar 2015 15:49:07 +0100 +Subject: [PATCH] sd-rtnl: never set serial to 0 + +In the unlikely event that we wrap the counter, skip 0 as this is used +for broadcasts. + +Suggested by Richard Maw. + +(cherry picked from commit 913b0eef1a01e0c78f0453b0174e75d5caae1023) +--- + src/libsystemd/sd-rtnl/sd-rtnl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/libsystemd/sd-rtnl/sd-rtnl.c b/src/libsystemd/sd-rtnl/sd-rtnl.c +index 7cdcc5d..5df39e1 100644 +--- a/src/libsystemd/sd-rtnl/sd-rtnl.c ++++ b/src/libsystemd/sd-rtnl/sd-rtnl.c +@@ -262,7 +262,7 @@ static void rtnl_seal_message(sd_rtnl *rtnl, sd_rtnl_message *m) { + assert(m); + assert(m->hdr); + +- m->hdr->nlmsg_seq = rtnl->serial++; ++ m->hdr->nlmsg_seq = rtnl->serial++ ? : rtnl->serial++; + + rtnl_message_seal(m); + diff --git a/SOURCES/0100-timer-properly-format-relative-timestamps-in-the-fut.patch b/SOURCES/0100-timer-properly-format-relative-timestamps-in-the-fut.patch deleted file mode 100644 index 8d9b3a7..0000000 --- a/SOURCES/0100-timer-properly-format-relative-timestamps-in-the-fut.patch +++ /dev/null @@ -1,120 +0,0 @@ -From dc7bf475eda82d02b5a0f243fee6741fab56729c Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Mon, 11 Nov 2013 03:02:52 +0100 -Subject: [PATCH] timer: properly format relative timestamps in the future - ---- - src/shared/time-util.c | 69 ++++++++++++++++++++++++++++++++------------------ - 1 file changed, 44 insertions(+), 25 deletions(-) - -diff --git a/src/shared/time-util.c b/src/shared/time-util.c -index 860be61..b8a6bd7 100644 ---- a/src/shared/time-util.c -+++ b/src/shared/time-util.c -@@ -191,55 +191,62 @@ char *format_timestamp_us(char *buf, size_t l, usec_t t) { - } - - char *format_timestamp_relative(char *buf, size_t l, usec_t t) { -+ const char *s; - usec_t n, d; - - n = now(CLOCK_REALTIME); - -- if (t <= 0 || t > n || t + USEC_PER_DAY*7 <= t) -+ if (t <= 0 || (t == (usec_t) -1)) - return NULL; - -- d = n - t; -+ if (n > t) { -+ d = n - t; -+ s = "ago"; -+ } else { -+ d = t - n; -+ s = "left"; -+ } - - if (d >= USEC_PER_YEAR) -- snprintf(buf, l, "%llu years %llu months ago", -+ snprintf(buf, l, "%llu years %llu months %s", - (unsigned long long) (d / USEC_PER_YEAR), -- (unsigned long long) ((d % USEC_PER_YEAR) / USEC_PER_MONTH)); -+ (unsigned long long) ((d % USEC_PER_YEAR) / USEC_PER_MONTH), s); - else if (d >= USEC_PER_MONTH) -- snprintf(buf, l, "%llu months %llu days ago", -+ snprintf(buf, l, "%llu months %llu days %s", - (unsigned long long) (d / USEC_PER_MONTH), -- (unsigned long long) ((d % USEC_PER_MONTH) / USEC_PER_DAY)); -+ (unsigned long long) ((d % USEC_PER_MONTH) / USEC_PER_DAY), s); - else if (d >= USEC_PER_WEEK) -- snprintf(buf, l, "%llu weeks %llu days ago", -+ snprintf(buf, l, "%llu weeks %llu days %s", - (unsigned long long) (d / USEC_PER_WEEK), -- (unsigned long long) ((d % USEC_PER_WEEK) / USEC_PER_DAY)); -+ (unsigned long long) ((d % USEC_PER_WEEK) / USEC_PER_DAY), s); - else if (d >= 2*USEC_PER_DAY) -- snprintf(buf, l, "%llu days ago", (unsigned long long) (d / USEC_PER_DAY)); -+ snprintf(buf, l, "%llu days %s", (unsigned long long) (d / USEC_PER_DAY), s); - else if (d >= 25*USEC_PER_HOUR) -- snprintf(buf, l, "1 day %lluh ago", -- (unsigned long long) ((d - USEC_PER_DAY) / USEC_PER_HOUR)); -+ snprintf(buf, l, "1 day %lluh %s", -+ (unsigned long long) ((d - USEC_PER_DAY) / USEC_PER_HOUR), s); - else if (d >= 6*USEC_PER_HOUR) -- snprintf(buf, l, "%lluh ago", -- (unsigned long long) (d / USEC_PER_HOUR)); -+ snprintf(buf, l, "%lluh %s", -+ (unsigned long long) (d / USEC_PER_HOUR), s); - else if (d >= USEC_PER_HOUR) -- snprintf(buf, l, "%lluh %llumin ago", -+ snprintf(buf, l, "%lluh %llumin %s", - (unsigned long long) (d / USEC_PER_HOUR), -- (unsigned long long) ((d % USEC_PER_HOUR) / USEC_PER_MINUTE)); -+ (unsigned long long) ((d % USEC_PER_HOUR) / USEC_PER_MINUTE), s); - else if (d >= 5*USEC_PER_MINUTE) -- snprintf(buf, l, "%llumin ago", -- (unsigned long long) (d / USEC_PER_MINUTE)); -+ snprintf(buf, l, "%llumin %s", -+ (unsigned long long) (d / USEC_PER_MINUTE), s); - else if (d >= USEC_PER_MINUTE) -- snprintf(buf, l, "%llumin %llus ago", -+ snprintf(buf, l, "%llumin %llus %s", - (unsigned long long) (d / USEC_PER_MINUTE), -- (unsigned long long) ((d % USEC_PER_MINUTE) / USEC_PER_SEC)); -+ (unsigned long long) ((d % USEC_PER_MINUTE) / USEC_PER_SEC), s); - else if (d >= USEC_PER_SEC) -- snprintf(buf, l, "%llus ago", -- (unsigned long long) (d / USEC_PER_SEC)); -+ snprintf(buf, l, "%llus %s", -+ (unsigned long long) (d / USEC_PER_SEC), s); - else if (d >= USEC_PER_MSEC) -- snprintf(buf, l, "%llums ago", -- (unsigned long long) (d / USEC_PER_MSEC)); -+ snprintf(buf, l, "%llums %s", -+ (unsigned long long) (d / USEC_PER_MSEC), s); - else if (d > 0) -- snprintf(buf, l, "%lluus ago", -- (unsigned long long) d); -+ snprintf(buf, l, "%lluus %s", -+ (unsigned long long) d, s); - else - snprintf(buf, l, "now"); - -@@ -479,6 +486,18 @@ int parse_timestamp(const char *t, usec_t *usec) { - return r; - - goto finish; -+ } else if (endswith(t, " left")) { -+ _cleanup_free_ char *z; -+ -+ z = strndup(t, strlen(t) - 4); -+ if (!z) -+ return -ENOMEM; -+ -+ r = parse_sec(z, &plus); -+ if (r < 0) -+ return r; -+ -+ goto finish; - } - - for (i = 0; i < ELEMENTSOF(day_nr); i++) { diff --git a/SOURCES/0101-gpt-auto-generator-allow-type-check-to-fail.patch b/SOURCES/0101-gpt-auto-generator-allow-type-check-to-fail.patch new file mode 100644 index 0000000..e1e35cc --- /dev/null +++ b/SOURCES/0101-gpt-auto-generator-allow-type-check-to-fail.patch @@ -0,0 +1,45 @@ +From e2353e7c13808e47efb844f8fb10b7aa2142e619 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 13 Mar 2015 21:10:13 -0500 +Subject: [PATCH] gpt-auto-generator: allow type check to fail + +add_mount() is OK with unknow file type, but we have to initalize +the variable to NULL not to pass garbage on error. + +(cherry picked from commit a0b1209c4a59754f428894e0485413542da50014) +--- + src/gpt-auto-generator/gpt-auto-generator.c | 13 +++++-------- + 1 file changed, 5 insertions(+), 8 deletions(-) + +diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c +index cceeeb8..00a2141 100644 +--- a/src/gpt-auto-generator/gpt-auto-generator.c ++++ b/src/gpt-auto-generator/gpt-auto-generator.c +@@ -291,7 +291,7 @@ static int probe_and_add_mount( + const char *post) { + + _cleanup_blkid_free_probe_ blkid_probe b = NULL; +- const char *fstype; ++ const char *fstype = NULL; + int r; + + assert(id); +@@ -324,14 +324,11 @@ static int probe_and_add_mount( + r = blkid_do_safeprobe(b); + if (r == -2 || r == 1) /* no result or uncertain */ + return 0; +- else if (r != 0) { +- if (errno == 0) +- errno = EIO; +- log_error_errno(errno, "Failed to probe %s: %m", what); +- return -errno; +- } ++ else if (r != 0) ++ return log_error_errno(errno ?: EIO, "Failed to probe %s: %m", what); + +- blkid_probe_lookup_value(b, "TYPE", &fstype, NULL); ++ /* add_mount is OK with fstype being NULL. */ ++ (void) blkid_probe_lookup_value(b, "TYPE", &fstype, NULL); + + return add_mount( + id, diff --git a/SOURCES/0101-timer-consider-usec_t-1-an-invalid-timestamp.patch b/SOURCES/0101-timer-consider-usec_t-1-an-invalid-timestamp.patch deleted file mode 100644 index 40d0397..0000000 --- a/SOURCES/0101-timer-consider-usec_t-1-an-invalid-timestamp.patch +++ /dev/null @@ -1,48 +0,0 @@ -From eaae0683686ccd07d1cf79f2247032586162f854 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Mon, 11 Nov 2013 03:03:17 +0100 -Subject: [PATCH] timer: consider (usec_t) -1 an invalid timestamp - ---- - src/shared/time-util.c | 4 ++-- - src/shared/time-util.h | 5 ++++- - 2 files changed, 6 insertions(+), 3 deletions(-) - -diff --git a/src/shared/time-util.c b/src/shared/time-util.c -index b8a6bd7..81d4ede 100644 ---- a/src/shared/time-util.c -+++ b/src/shared/time-util.c -@@ -157,7 +157,7 @@ char *format_timestamp(char *buf, size_t l, usec_t t) { - assert(buf); - assert(l > 0); - -- if (t <= 0) -+ if (t <= 0 || t == (usec_t) -1) - return NULL; - - sec = (time_t) (t / USEC_PER_SEC); -@@ -175,7 +175,7 @@ char *format_timestamp_us(char *buf, size_t l, usec_t t) { - assert(buf); - assert(l > 0); - -- if (t <= 0) -+ if (t <= 0 || t == (usec_t) -1) - return NULL; - - sec = (time_t) (t / USEC_PER_SEC); -diff --git a/src/shared/time-util.h b/src/shared/time-util.h -index 7660fe1..bc10d22 100644 ---- a/src/shared/time-util.h -+++ b/src/shared/time-util.h -@@ -64,7 +64,10 @@ dual_timestamp* dual_timestamp_get(dual_timestamp *ts); - dual_timestamp* dual_timestamp_from_realtime(dual_timestamp *ts, usec_t u); - dual_timestamp* dual_timestamp_from_monotonic(dual_timestamp *ts, usec_t u); - --#define dual_timestamp_is_set(ts) ((ts)->realtime > 0) -+static inline bool dual_timestamp_is_set(dual_timestamp *ts) { -+ return ((ts->realtime > 0 && ts->realtime != (usec_t) -1) || -+ (ts->monotonic > 0 && ts->monotonic != (usec_t) -1)); -+} - - usec_t timespec_load(const struct timespec *ts) _pure_; - struct timespec *timespec_store(struct timespec *ts, usec_t u); diff --git a/SOURCES/0102-Resolve-dev-console-to-the-active-tty-instead-of-jus.patch b/SOURCES/0102-Resolve-dev-console-to-the-active-tty-instead-of-jus.patch deleted file mode 100644 index 405308f..0000000 --- a/SOURCES/0102-Resolve-dev-console-to-the-active-tty-instead-of-jus.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 41882edd0421d7f611bcec8cba9379ac8bfa24a9 Mon Sep 17 00:00:00 2001 -From: Olivier Brunel -Date: Fri, 20 Sep 2013 22:18:28 +0200 -Subject: [PATCH] Resolve /dev/console to the active tty instead of just "tty0" - -When resolving /dev/console one would often get "tty0" meaning the active VT. -Resolving to the actual tty (e.g. "tty1") will notably help on boot when -determining whether or not PID1 can output to the console. ---- - src/shared/util.c | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -diff --git a/src/shared/util.c b/src/shared/util.c -index b1a4006..8a542da 100644 ---- a/src/shared/util.c -+++ b/src/shared/util.c -@@ -3627,6 +3627,16 @@ char *resolve_dev_console(char **active) { - else - tty = *active; - -+ if (streq(tty, "tty0")) { -+ char *tmp; -+ -+ /* Get the active VC (e.g. tty1) */ -+ if (read_one_line_file("/sys/class/tty/tty0/active", &tmp) >= 0) { -+ free(*active); -+ tty = *active = tmp; -+ } -+ } -+ - return tty; - } - diff --git a/SOURCES/0102-man-fix-a-bunch-of-links.patch b/SOURCES/0102-man-fix-a-bunch-of-links.patch new file mode 100644 index 0000000..6b6b610 --- /dev/null +++ b/SOURCES/0102-man-fix-a-bunch-of-links.patch @@ -0,0 +1,1453 @@ +From a0def1365a2c50f7e1d4ec14c104bfe5cbd8bf8a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 13 Mar 2015 21:22:39 -0500 +Subject: [PATCH] man: fix a bunch of links + +All hail linkchecker! + +(cherry picked from commit 3ba3a79df4ae094d1008c04a9af8d1ff970124c4) + +Conflicts: + man/systemd-efi-boot-generator.xml +--- + man/busctl.xml | 4 ++-- + man/crypttab.xml | 20 +++++++++---------- + man/file-hierarchy.xml | 2 +- + man/kernel-command-line.xml | 2 +- + man/locale.conf.xml | 8 ++++---- + man/localectl.xml | 8 ++++---- + man/logind.conf.xml | 2 +- + man/machine-id.xml | 4 ++-- + man/modules-load.d.xml | 2 +- + man/os-release.xml | 2 +- + man/sd_bus_message_append.xml | 2 +- + man/sd_bus_open_user.xml | 2 +- + man/sd_event_add_signal.xml | 4 ++-- + man/sd_journal_get_catalog.xml | 2 +- + man/sd_journal_get_cursor.xml | 2 +- + man/sd_journal_print.xml | 14 ++++++------- + man/sysctl.d.xml | 8 ++++---- + man/systemctl.xml | 6 +++--- + man/systemd-activate.xml | 2 +- + man/systemd-analyze.xml | 4 ++-- + man/systemd-cat.xml | 2 +- + man/systemd-cryptsetup-generator.xml | 2 +- + man/systemd-cryptsetup@.service.xml | 2 +- + man/systemd-efi-boot-generator.xml | 4 ++-- + man/systemd-firstboot.xml | 14 ++++++------- + man/systemd-fstab-generator.xml | 4 ++-- + man/systemd-gpt-auto-generator.xml | 8 ++++---- + man/systemd-hibernate-resume-generator.xml | 2 +- + man/systemd-journald.service.xml | 2 +- + man/systemd-localed.service.xml | 8 ++++---- + man/systemd-nspawn.xml | 4 ++-- + man/systemd-quotacheck.service.xml | 2 +- + man/systemd-remount-fs.service.xml | 6 +++--- + man/systemd-socket-proxyd.xml | 8 ++++---- + man/systemd-sysctl.service.xml | 8 ++++---- + man/systemd-system.conf.xml | 2 +- + man/systemd-update-utmp.service.xml | 2 +- + man/systemd-vconsole-setup.service.xml | 8 ++++---- + man/systemd.automount.xml | 6 +++--- + man/systemd.exec.xml | 16 +++++++-------- + man/systemd.generator.xml | 2 +- + man/systemd.journal-fields.xml | 2 +- + man/systemd.kill.xml | 4 ++-- + man/systemd.mount.xml | 14 ++++++------- + man/systemd.network.xml | 8 ++++---- + man/systemd.path.xml | 4 ++-- + man/systemd.socket.xml | 32 +++++++++++++++--------------- + man/systemd.swap.xml | 10 +++++----- + man/systemd.unit.xml | 4 ++-- + man/systemd.xml | 6 +++--- + man/vconsole.conf.xml | 6 +++--- + 51 files changed, 151 insertions(+), 151 deletions(-) + +diff --git a/man/busctl.xml b/man/busctl.xml +index 251233b..cc1844b 100644 +--- a/man/busctl.xml ++++ b/man/busctl.xml +@@ -288,7 +288,7 @@ + url="http://wiki.wireshark.org/Development/LibpcapFileFormat">Libpcap + File Format description. Make sure to redirect the + output to STDOUT to a file. Tools like +- wireshark1 ++ wireshark1 + may be used to dissect and view the generated + files. + +@@ -472,7 +472,7 @@ o "/org/freedesktop/systemd1/job/42684" + systemd1, + systemd-bus-proxyd8, + machinectl1, +- wireshark1 ++ wireshark1 + + + +diff --git a/man/crypttab.xml b/man/crypttab.xml +index aeacc57..3e249ad 100644 +--- a/man/crypttab.xml ++++ b/man/crypttab.xml +@@ -75,7 +75,7 @@ + + Setting up encrypted block devices using this file supports + three encryption modes: LUKS, TrueCrypt and plain. See +- cryptsetup8 ++ cryptsetup8 + for more information about each mode. When no mode is specified in + the options field and the block device contains a LUKS signature, + it is opened as a LUKS device; otherwise, it is assumed to be in +@@ -117,7 +117,7 @@ + + + Specifies the cipher to use. See +- cryptsetup8 ++ cryptsetup8 + for possible values and the default value of this option. A + cipher with unpredictable IV values, such as + aes-cbc-essiv:sha256, is +@@ -129,7 +129,7 @@ + + Specifies the hash to use for password + hashing. See +- cryptsetup8 ++ cryptsetup8 + for possible values and the default value of this + option. + +@@ -140,7 +140,7 @@ + Use a detached (separated) metadata device or + file where the LUKS header is stored. This option is only + relevant for LUKS devices. See +- cryptsetup8 ++ cryptsetup8 + for possible values and the default value of this + option. + +@@ -150,7 +150,7 @@ + + Specifies the number of bytes to skip at the + start of the key file. See +- cryptsetup8 ++ cryptsetup8 + for possible values and the default value of this + option. + +@@ -160,7 +160,7 @@ + + Specifies the maximum number of bytes to read + from the key file. See +- cryptsetup8 ++ cryptsetup8 + for possible values and the default value of this option. This + option is ignored in plain encryption mode, as the key file + size is then given by the key size. +@@ -174,7 +174,7 @@ + given passphrase or key, but another would, the setup of the + device will fail regardless. This option implies + . See +- cryptsetup8 ++ cryptsetup8 + for possible values. The default is to try all key slots in + sequential order. + +@@ -221,7 +221,7 @@ + + + Specifies the key size in bits. See +- cryptsetup8 ++ cryptsetup8 + for possible values and the default value of this + option. + +@@ -278,7 +278,7 @@ + volume provided in the second field. Please note that there is + no protection for the hidden volume if the outer volume is + mounted instead. See +- cryptsetup8 ++ cryptsetup8 + for more information on this limitation. + + +@@ -383,7 +383,7 @@ hidden /mnt/tc_hidden /dev/null tcrypt-hidden,tcrypt-keyfile=/etc/keyfil + systemd1, + systemd-cryptsetup@.service8, + systemd-cryptsetup-generator8, +- cryptsetup8, ++ cryptsetup8, + mkswap8, + mke2fs8 + +diff --git a/man/file-hierarchy.xml b/man/file-hierarchy.xml +index e9c894f..364e130 100644 +--- a/man/file-hierarchy.xml ++++ b/man/file-hierarchy.xml +@@ -397,7 +397,7 @@ + /dev/shm + Place for POSIX shared memory segments, as + created via +- shm_open3. ++ shm_open3. + This directory is flushed on boot, and is a + tmpfs file system. Since all users have + write access to this directory, special care should be taken +diff --git a/man/kernel-command-line.xml b/man/kernel-command-line.xml +index 3741cf9..919bd13 100644 +--- a/man/kernel-command-line.xml ++++ b/man/kernel-command-line.xml +@@ -336,7 +336,7 @@ + + Enables resume from hibernation using the specified + device. All +- fstab5-like ++ fstab5-like + paths are supported. For details, see + systemd-hibernate-resume-generator8. + +diff --git a/man/locale.conf.xml b/man/locale.conf.xml +index 48c0006..2c32d16 100644 +--- a/man/locale.conf.xml ++++ b/man/locale.conf.xml +@@ -91,7 +91,7 @@ + might be checked for locale configuration as well, however only as + fallback. + +- localectl1 ++ localectl1 + may be used to alter the settings in this file during runtime from + the command line. Use + systemd-firstboot1 +@@ -121,7 +121,7 @@ + Note that LC_ALL may not be configured in this + file. For details about the meaning and semantics of these + settings, refer to +- locale7. ++ locale7. + + + +@@ -142,8 +142,8 @@ LC_MESSAGES=en_US.UTF-8 + See Also + + systemd1, +- locale7, +- localectl1, ++ locale7, ++ localectl1, + systemd-localed.service8, + systemd-firstboot1 + +diff --git a/man/localectl.xml b/man/localectl.xml +index aae6e06..7def047 100644 +--- a/man/localectl.xml ++++ b/man/localectl.xml +@@ -124,7 +124,7 @@ + Set the system locale. This takes one or more + assignments such as "LANG=de_DE.utf8", + "LC_MESSAGES=en_GB.utf8", and so on. See +- locale7 ++ locale7 + for details on the available settings and their meanings. Use + list-locales for a list of available + locales (see below). +@@ -204,10 +204,10 @@ + See Also + + systemd1, +- locale7, +- locale.conf5, ++ locale7, ++ locale.conf5, + vconsole.conf5, +- loadkeys1, ++ loadkeys1, + kbd4, + + The XKB Configuration Guide +diff --git a/man/logind.conf.xml b/man/logind.conf.xml +index ca2b187..d02d573 100644 +--- a/man/logind.conf.xml ++++ b/man/logind.conf.xml +@@ -126,7 +126,7 @@ + + Note that setting KillUserProcesses=1 + will break tools like +- screen1. ++ screen1. + + + +diff --git a/man/machine-id.xml b/man/machine-id.xml +index 83e0b26..92d67a3 100644 +--- a/man/machine-id.xml ++++ b/man/machine-id.xml +@@ -75,7 +75,7 @@ + globally unique ID in the network, which does not change even if + the local network configuration changes. Due to this and its + greater length, it is a more useful replacement for the +- gethostid3 ++ gethostid3 + call that POSIX specifies. + + The +@@ -127,7 +127,7 @@ id[8] = (id[8] & 0x3F) | 0x80; + + systemd1, + systemd-machine-id-setup1, +- gethostid3, ++ gethostid3, + hostname5, + machine-info5, + os-release5, +diff --git a/man/modules-load.d.xml b/man/modules-load.d.xml +index 34a937d..4b722aa 100644 +--- a/man/modules-load.d.xml ++++ b/man/modules-load.d.xml +@@ -94,7 +94,7 @@ virtio-net + systemd1, + systemd-modules-load.service8, + systemd-delta1, +- modprobe8 ++ modprobe8 + + + +diff --git a/man/os-release.xml b/man/os-release.xml +index 1b71a49..8f4ab10 100644 +--- a/man/os-release.xml ++++ b/man/os-release.xml +@@ -316,7 +316,7 @@ BUG_REPORT_URL="https://bugzilla.redhat.com/" + See Also + + systemd1, +- lsb_release1, ++ lsb_release1, + hostname5, + machine-id5, + machine-info5 +diff --git a/man/sd_bus_message_append.xml b/man/sd_bus_message_append.xml +index 0c49a0c..11fa07c 100644 +--- a/man/sd_bus_message_append.xml ++++ b/man/sd_bus_message_append.xml +@@ -245,7 +245,7 @@ sd_bus_message_append(m, "ynqiuxtd", y, n, q, i, u, x, t, d); + sd_bus_new3, + sd_bus_ref3, + sd_bus_unref3, +- ssh1, ++ ssh1, + systemd-machined.service8, + machinectl1 + +diff --git a/man/sd_bus_open_user.xml b/man/sd_bus_open_user.xml +index e7a7659..2bbb010 100644 +--- a/man/sd_bus_open_user.xml ++++ b/man/sd_bus_open_user.xml +@@ -208,7 +208,7 @@ along with systemd; If not, see . + sd_bus_new3, + sd_bus_ref3, + sd_bus_unref3, +- ssh1, ++ ssh1, + systemd-machined.service8, + machinectl1 + +diff --git a/man/sd_event_add_signal.xml b/man/sd_event_add_signal.xml +index 0299aa5..7c8df7d 100644 +--- a/man/sd_event_add_signal.xml ++++ b/man/sd_event_add_signal.xml +@@ -86,7 +86,7 @@ along with systemd; If not, see . + the source parameter. The + signal parameter specifies the signal to be handled + (see +- signal7). ++ signal7). + The handler must reference a function to + call when the signal is delivered or be NULL. + The handler function will be passed the +@@ -94,7 +94,7 @@ along with systemd; If not, see . + freely by the caller. The handler also receives a pointer to a + const struct signalfd_siginfo containing + the information about the received signal. See +- signalfd2 ++ signalfd2 + for further information. + + Only a single handler may be installed for a specific +diff --git a/man/sd_journal_get_catalog.xml b/man/sd_journal_get_catalog.xml +index 1dcbadd..c19eb11 100644 +--- a/man/sd_journal_get_catalog.xml ++++ b/man/sd_journal_get_catalog.xml +@@ -130,7 +130,7 @@ + sd_journal_open3, + sd_journal_next3, + sd_journal_get_data3, +- malloc3 ++ malloc3 + + + +diff --git a/man/sd_journal_get_cursor.xml b/man/sd_journal_get_cursor.xml +index 2b7f443..a400d8b 100644 +--- a/man/sd_journal_get_cursor.xml ++++ b/man/sd_journal_get_cursor.xml +@@ -84,7 +84,7 @@ + time) available entry. The call takes two arguments: a journal + context object and a pointer to a string pointer where the cursor + string will be placed. The string is allocated via libc +- malloc3 ++ malloc3 + and should be freed after use with + free3. + +diff --git a/man/sd_journal_print.xml b/man/sd_journal_print.xml +index 068b10e..0cd0b45 100644 +--- a/man/sd_journal_print.xml ++++ b/man/sd_journal_print.xml +@@ -119,7 +119,7 @@ + sd_journal_print() but takes a variable + argument list encapsulated in an object of type + va_list (see +- stdarg3 ++ stdarg3 + for more information) instead of the format string. It is + otherwise equivalent in behavior. + +@@ -145,7 +145,7 @@ + sd_journal_send() but takes an array of + struct iovec (as defined in + uio.h, see +- readv3 ++ readv3 + for details) instead of the format string. Each structure should + reference one field of the entry to submit. The second argument + specifies the number of structures in the array. +@@ -154,7 +154,7 @@ + necessary. + + sd_journal_perror() is a similar to +- perror3 ++ perror3 + and writes a message to the journal that consists of the passed + string, suffixed with ": " and a human readable representation of + the current error code stored in +@@ -219,7 +219,7 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid( + Async signal safety + sd_journal_sendv() is "async signal + safe" in the meaning of +- signal7. ++ signal7. + + + sd_journal_print, +@@ -249,11 +249,11 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid( + sd-journal3, + sd_journal_stream_fd3, + syslog3, +- perror3, ++ perror3, + errno3, + systemd.journal-fields7, +- signal7, +- socket7 ++ signal7, ++ socket7 + + + +diff --git a/man/sysctl.d.xml b/man/sysctl.d.xml +index 5a35cfe..8a13179 100644 +--- a/man/sysctl.d.xml ++++ b/man/sysctl.d.xml +@@ -57,7 +57,7 @@ + At boot, + systemd-sysctl.service8 + reads configuration files from the above directories to configure +- sysctl8 ++ sysctl8 + kernel parameters. + + +@@ -162,9 +162,9 @@ net.bridge.bridge-nf-call-arptables = 0 + systemd1, + systemd-sysctl.service8, + systemd-delta1, +- sysctl8, +- sysctl.conf5, +- modprobe8 ++ sysctl8, ++ sysctl.conf5, ++ modprobe8 + + + +diff --git a/man/systemctl.xml b/man/systemctl.xml +index 6f30474..07eb431 100644 +--- a/man/systemctl.xml ++++ b/man/systemctl.xml +@@ -1703,9 +1703,9 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service + $VISUAL are present or if it is set to an empty + string or if their execution failed, systemctl will try to execute well + known editors in this order: +- nano1, +- vim1, +- vi1. ++ nano1, ++ vim1, ++ vi1. + + + +diff --git a/man/systemd-activate.xml b/man/systemd-activate.xml +index e64894a..cb68a79 100644 +--- a/man/systemd-activate.xml ++++ b/man/systemd-activate.xml +@@ -165,7 +165,7 @@ + systemd1, + systemd.socket5, + systemd.service5, +- cat1 ++ cat1 + + + +diff --git a/man/systemd-analyze.xml b/man/systemd-analyze.xml +index 1ff81d3..1983150 100644 +--- a/man/systemd-analyze.xml ++++ b/man/systemd-analyze.xml +@@ -145,7 +145,7 @@ + systemd-analyze dot generates textual + dependency graph description in dot format for further processing + with the GraphViz +- dot1 ++ dot1 + tool. Use a command line like systemd-analyze dot | dot + -Tsvg > systemd.svg to generate a graphical dependency + tree. Unless or +@@ -229,7 +229,7 @@ + dot command (see above), this selects which + relationships are shown in the dependency graph. Both options + require a +- glob7 ++ glob7 + pattern as an argument, which will be matched against the + left-hand and the right-hand, respectively, nodes of a + relationship. +diff --git a/man/systemd-cat.xml b/man/systemd-cat.xml +index 38ddf66..9b1a880 100644 +--- a/man/systemd-cat.xml ++++ b/man/systemd-cat.xml +@@ -171,7 +171,7 @@ + + systemd1, + systemctl1, +- logger1 ++ logger1 + + + +diff --git a/man/systemd-cryptsetup-generator.xml b/man/systemd-cryptsetup-generator.xml +index 1974cd7..b627035 100644 +--- a/man/systemd-cryptsetup-generator.xml ++++ b/man/systemd-cryptsetup-generator.xml +@@ -185,7 +185,7 @@ + systemd1, + crypttab5, + systemd-cryptsetup@.service8, +- cryptsetup8, ++ cryptsetup8, + systemd-fstab-generator8 + + +diff --git a/man/systemd-cryptsetup@.service.xml b/man/systemd-cryptsetup@.service.xml +index bd03637..ea52485 100644 +--- a/man/systemd-cryptsetup@.service.xml ++++ b/man/systemd-cryptsetup@.service.xml +@@ -78,7 +78,7 @@ + systemd1, + systemd-cryptsetup-generator8, + crypttab5, +- cryptsetup8 ++ cryptsetup8 + + + +diff --git a/man/systemd-efi-boot-generator.xml b/man/systemd-efi-boot-generator.xml +index fd7ba79..3431c3c 100644 +--- a/man/systemd-efi-boot-generator.xml ++++ b/man/systemd-efi-boot-generator.xml +@@ -62,7 +62,7 @@ + does not communicate the used ESP to the OS, on systems where + /boot is an explicitly configured mount (for + example, listed in +- fstab5) ++ fstab5) + or where the /boot mount point is non-empty. + Since this generator creates an automount unit, the mount will + only be activated on-demand, when accessed. +@@ -79,7 +79,7 @@ + systemd.automount5, + systemd-gpt-auto-generator8, + gummiboot8, +- fstab5 ++ fstab5 + + + +diff --git a/man/systemd-firstboot.xml b/man/systemd-firstboot.xml +index 67d38ba..67289da 100644 +--- a/man/systemd-firstboot.xml ++++ b/man/systemd-firstboot.xml +@@ -91,7 +91,7 @@ + + Note that this tool operates directly on the file system and + does not involve any running system services, unlike +- localectl1, ++ localectl1, + timedatectl1 + or + hostnamectl1. +@@ -125,7 +125,7 @@ + LANG= and LC_MESSAGES + settings. The argument should be a valid locale identifier, + such as de_DE.UTF-8. This controls the +- locale.conf5 ++ locale.conf5 + configuration file. + + +@@ -163,7 +163,7 @@ + + Sets the password of the system's root user. + This creates a +- shadow5 ++ shadow5 + file. This setting exists in two forms: + accepts the password to set + directly on the command line, +@@ -171,7 +171,7 @@ + Note that it is not recommended specifying passwords on the + command line as other users might be able to see them simply + by invoking +- ps1. ++ ps1. + + + +@@ -244,13 +244,13 @@ + See Also + + systemd1, +- locale.conf5, ++ locale.conf5, + localtime5, + hostname5, + machine-id5, +- shadow5, ++ shadow5, + systemd-machine-id-setup1, +- localectl1, ++ localectl1, + timedatectl1, + hostnamectl1 + +diff --git a/man/systemd-fstab-generator.xml b/man/systemd-fstab-generator.xml +index 022efb4..bdc2dc1 100644 +--- a/man/systemd-fstab-generator.xml ++++ b/man/systemd-fstab-generator.xml +@@ -54,7 +54,7 @@ + + systemd-fstab-generator is a generator + that translates /etc/fstab (see +- fstab5 ++ fstab5 + for details) into native systemd units early at boot and when + configuration of the system manager is reloaded. This will + instantiate mount and swap units as necessary. +@@ -173,7 +173,7 @@ + See Also + + systemd1, +- fstab5, ++ fstab5, + systemd.mount5, + systemd.swap5, + systemd-cryptsetup-generator8 +diff --git a/man/systemd-gpt-auto-generator.xml b/man/systemd-gpt-auto-generator.xml +index 8d2eaca..bcc64ec 100644 +--- a/man/systemd-gpt-auto-generator.xml ++++ b/man/systemd-gpt-auto-generator.xml +@@ -66,7 +66,7 @@ + Partitions Specification. Note that this generator has no + effect on non-GPT systems, on systems where the units are + explicitly configured (for example, listed in +- fstab5), ++ fstab5), + or where the mount points are non-empty. + + This generator will only look for root partitions on the +@@ -169,9 +169,9 @@ + systemd-fstab-generator8, + systemd-efi-boot-generator8, + systemd-cryptsetup@.service8, +- cryptsetup8, +- fstab5, +- btrfs8 ++ cryptsetup8, ++ fstab5, ++ btrfs8 + + + +diff --git a/man/systemd-hibernate-resume-generator.xml b/man/systemd-hibernate-resume-generator.xml +index a21782c..d811b9b 100644 +--- a/man/systemd-hibernate-resume-generator.xml ++++ b/man/systemd-hibernate-resume-generator.xml +@@ -73,7 +73,7 @@ + Takes a path to the resume device. Both + persistent block device paths like + /dev/disk/by-foo/bar and +- fstab5-style ++ fstab5-style + specifiers like FOO=bar are + supported. + +diff --git a/man/systemd-journald.service.xml b/man/systemd-journald.service.xml +index 6b250b6..8280d6c 100644 +--- a/man/systemd-journald.service.xml ++++ b/man/systemd-journald.service.xml +@@ -241,7 +241,7 @@ + systemd.journal-fields7, + sd-journal3, + systemd-coredump8, +- setfacl1, ++ setfacl1, + sd_journal_print4, + pydoc systemd.journal. + +diff --git a/man/systemd-localed.service.xml b/man/systemd-localed.service.xml +index 8999166..06aa78c 100644 +--- a/man/systemd-localed.service.xml ++++ b/man/systemd-localed.service.xml +@@ -64,7 +64,7 @@ + unused. + + The tool +- localectl1 ++ localectl1 + is a command line client to this service. + + See the See Also + + systemd1, +- locale.conf5, ++ locale.conf5, + vconsole.conf5, +- localectl1, +- loadkeys1 ++ localectl1, ++ loadkeys1 + + + +diff --git a/man/systemd-nspawn.xml b/man/systemd-nspawn.xml +index 4a936d3..65b4c2f 100644 +--- a/man/systemd-nspawn.xml ++++ b/man/systemd-nspawn.xml +@@ -598,7 +598,7 @@ + + Control the architecture ("personality") + reported by +- uname2 ++ uname2 + in the container. Currently, only x86 and + x86-64 are supported. This is useful when + running a 32-bit container on a 64-bit host. If this setting +@@ -735,7 +735,7 @@ + pacman8, + systemd.slice5, + machinectl1, +- btrfs8 ++ btrfs8 + + + +diff --git a/man/systemd-quotacheck.service.xml b/man/systemd-quotacheck.service.xml +index 2179f11..9d49762 100644 +--- a/man/systemd-quotacheck.service.xml ++++ b/man/systemd-quotacheck.service.xml +@@ -86,7 +86,7 @@ + See Also + + systemd1, +- quotacheck8, ++ quotacheck8, + systemd-fsck@.service8 + + +diff --git a/man/systemd-remount-fs.service.xml b/man/systemd-remount-fs.service.xml +index 7b88ac3..8e60e31 100644 +--- a/man/systemd-remount-fs.service.xml ++++ b/man/systemd-remount-fs.service.xml +@@ -56,7 +56,7 @@ + + systemd-remount-fs.service is an + early-boot service that applies mount options listed in +- fstab5 ++ fstab5 + to the root file system, the /usr file system + and the kernel API file systems. This is required so that the + mount options of these file systems -- which are pre-mounted by +@@ -80,8 +80,8 @@ + See Also + + systemd1, +- fstab5, +- mount8 ++ fstab5, ++ mount8 + + + +diff --git a/man/systemd-socket-proxyd.xml b/man/systemd-socket-proxyd.xml +index 1c78b65..0b852e6 100644 +--- a/man/systemd-socket-proxyd.xml ++++ b/man/systemd-socket-proxyd.xml +@@ -72,7 +72,7 @@ + to a configured server for each client, and then bidirectionally + forwards data between the two. + This utility's behavior is similar to +- socat1. ++ socat1. + The main differences for systemd-socket-proxyd + are support for socket activation with + Accept=false and an event-driven +@@ -183,9 +183,9 @@ $ curl http://localhost:80/]]> + systemd.socket5, + systemd.service5, + systemctl1, +- socat1, +- nginx1, +- curl1 ++ socat1, ++ nginx1, ++ curl1 + + + +diff --git a/man/systemd-sysctl.service.xml b/man/systemd-sysctl.service.xml +index f35a18a..d4c1a7e 100644 +--- a/man/systemd-sysctl.service.xml ++++ b/man/systemd-sysctl.service.xml +@@ -56,11 +56,11 @@ + + systemd-sysctl.service is an early-boot + service that configures +- sysctl8 ++ sysctl8 + kernel parameters. + + See +- sysctl.d5 ++ sysctl.d5 + for information about the configuration of this service. + + +@@ -68,8 +68,8 @@ + See Also + + systemd1, +- sysctl.d5, +- sysctl8, ++ sysctl.d5, ++ sysctl8, + + + +diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml +index c7bcfae..1b74ed3 100644 +--- a/man/systemd-system.conf.xml ++++ b/man/systemd-system.conf.xml +@@ -172,7 +172,7 @@ + capabilities7 + for details. Takes a whitespace-separated list of capability + names as read by +- cap_from_name3. ++ cap_from_name3. + Capabilities listed will be included in the bounding set, all + others are removed. If the list of capabilities is prefixed + with ~, all but the listed capabilities will be included, the +diff --git a/man/systemd-update-utmp.service.xml b/man/systemd-update-utmp.service.xml +index b842d29..c8a9cb7 100644 +--- a/man/systemd-update-utmp.service.xml ++++ b/man/systemd-update-utmp.service.xml +@@ -69,7 +69,7 @@ + + systemd1, + utmp5, +- auditd8 ++ auditd8 + + + +diff --git a/man/systemd-vconsole-setup.service.xml b/man/systemd-vconsole-setup.service.xml +index 59bb5e4..7c6ed08 100644 +--- a/man/systemd-vconsole-setup.service.xml ++++ b/man/systemd-vconsole-setup.service.xml +@@ -57,9 +57,9 @@ + systemd-vconsole-setup.service is an + early-boot service that configures the virtual console font and + console keymap. Internally it calls +- loadkeys1 ++ loadkeys1 + and +- setfont8. ++ setfont8. + + See + vconsole.conf5 +@@ -105,8 +105,8 @@ + + systemd1, + vconsole.conf5, +- loadkeys1, +- setfont8, ++ loadkeys1, ++ setfont8, + systemd-localed.service8 + + +diff --git a/man/systemd.automount.xml b/man/systemd.automount.xml +index 3db65d9..b5b5885 100644 +--- a/man/systemd.automount.xml ++++ b/man/systemd.automount.xml +@@ -96,7 +96,7 @@ + + Automount units may either be configured via unit files, or + via /etc/fstab (see +- fstab5 ++ fstab5 + for details). + + For details how systemd parses +@@ -145,8 +145,8 @@ + systemctl1, + systemd.unit5, + systemd.mount5, +- mount8, +- automount8, ++ mount8, ++ automount8, + systemd.directives7 + + +diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml +index fdb1578..56b53e6 100644 +--- a/man/systemd.exec.xml ++++ b/man/systemd.exec.xml +@@ -663,7 +663,7 @@ + capabilities7 + for details. Takes a whitespace-separated list of capability + names as read by +- cap_from_name3, ++ cap_from_name3, + e.g. CAP_SYS_ADMIN, + CAP_DAC_OVERRIDE, + CAP_SYS_PTRACE. Capabilities listed will +@@ -711,7 +711,7 @@ + set for the executed process. Take a capability string + describing the effective, permitted and inherited capability + sets as documented in +- cap_from_text3. ++ cap_from_text3. + Note that these capability sets are usually influenced (and + filtered) by the capabilities attached to the executed file. + Due to that CapabilityBoundingSet= is +@@ -881,7 +881,7 @@ + , which control whether mounts in the + file system namespace set up for this unit's processes will + receive or propagate mounts or unmounts. See +- mount2 ++ mount2 + for details. Defaults to . Use + to ensure that mounts and unmounts are + propagated from the host to the container and vice versa. Use +@@ -929,7 +929,7 @@ + authorize the transition. This directive is ignored if SELinux + is disabled. If prefixed by -, all errors + will be ignored. See +- setexeccon3 ++ setexeccon3 + for details. + + +@@ -1076,7 +1076,7 @@ + prefixed with ~ the listed address + families will be applied as blacklist, otherwise as whitelist. + Note that this restricts access to the +- socket2 ++ socket2 + system call only. Sockets passed into the process by other + means (for example, by using socket activation with socket + units, see +@@ -1104,7 +1104,7 @@ + Personality= + + Controls which kernel architecture +- uname2 ++ uname2 + shall report, when invoked by unit processes. Takes one of + x86 and x86-64. This + is useful when running 32-bit services on a 64-bit host +@@ -1166,7 +1166,7 @@ + $LANG + + Locale. Can be set in +- locale.conf5 ++ locale.conf5 + or on the kernel command line (see + systemd1 + and +@@ -1184,7 +1184,7 @@ + login shell. The variables are set for the units that have + User= set, which includes user + systemd instances. See +- passwd5. ++ passwd5. + + + +diff --git a/man/systemd.generator.xml b/man/systemd.generator.xml +index ccb6987..9b39e73 100644 +--- a/man/systemd.generator.xml ++++ b/man/systemd.generator.xml +@@ -333,7 +333,7 @@ find $dir + systemd-debug-generator8, + systemd-efi-boot-generator8, + systemd-fstab-generator8, +- fstab5, ++ fstab5, + systemd-getty-generator8, + systemd-gpt-auto-generator8, + systemd-hibernate-resume-generator8, +diff --git a/man/systemd.journal-fields.xml b/man/systemd.journal-fields.xml +index 1fd46de..7d6c5c7 100644 +--- a/man/systemd.journal-fields.xml ++++ b/man/systemd.journal-fields.xml +@@ -134,7 +134,7 @@ + derived from glibc's + program_invocation_short_name variable, + see +- program_invocation_short_name3.) ++ program_invocation_short_name3.) + + + +diff --git a/man/systemd.kill.xml b/man/systemd.kill.xml +index c974e22..e57f0e7 100644 +--- a/man/systemd.kill.xml ++++ b/man/systemd.kill.xml +@@ -135,7 +135,7 @@ + of shutting down a unit (see above), and is usually followed + by SIGKILL (see above and below). For a + list of valid signals, see +- signal7. ++ signal7. + Defaults to SIGTERM. + + +@@ -176,7 +176,7 @@ + systemd.exec5, + systemd.directives7, + kill2, +- signal7 ++ signal7 + + + +diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml +index 5cbde8b..fcb9a44 100644 +--- a/man/systemd.mount.xml ++++ b/man/systemd.mount.xml +@@ -68,7 +68,7 @@ + Additional options are listed in + systemd.exec5, + which define the execution environment the +- mount8 ++ mount8 + binary is executed in, and in + systemd.kill5, + which define the way the processes are terminated, and in +@@ -78,7 +78,7 @@ + particularly useful for mount units specifying a + Type= option or using configuration not + specified in /etc/fstab; +- mount8 ++ mount8 + will refuse options that are not listed in + /etc/fstab if it is not run as UID 0. + +@@ -118,7 +118,7 @@ + + Mount units may either be configured via unit files, or via + /etc/fstab (see +- fstab5 ++ fstab5 + 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. In general, +@@ -231,7 +231,7 @@ + What= + Takes an absolute path of a device node, file + or other resource to mount. See +- mount8 ++ mount8 + for details. If this refers to a device node, a dependency on + the respective device unit is automatically created. (See + systemd.device5 +@@ -251,7 +251,7 @@ + + Type= + Takes a string for the file system type. See +- mount8 ++ mount8 + for details. This setting is optional. + + +@@ -270,7 +270,7 @@ + the options specified in Options= is + relaxed, and unknown mount options are tolerated. This + corresponds with +- mount8's ++ mount8's + -s switch. Defaults to + off. + +@@ -321,7 +321,7 @@ + systemd.service5, + systemd.device5, + proc5, +- mount8, ++ mount8, + systemd-fstab-generator8, + systemd.directives7 + +diff --git a/man/systemd.network.xml b/man/systemd.network.xml +index 24f8416..9738627 100644 +--- a/man/systemd.network.xml ++++ b/man/systemd.network.xml +@@ -286,7 +286,7 @@ + separated by a / character. Specify + this key more than once to configure several addresses. + The format of the address must be as described in +- inet_pton3. ++ inet_pton3. + This is a short-hand for an [Address] section only + containing an Address key (see below). This option may be + specified more than once. +@@ -312,7 +312,7 @@ + + The gateway address, which must be in the format + described in +- inet_pton3. ++ inet_pton3. + This is a short-hand for a [Route] section only containing + a Gateway key. This option may be specified more than + once. +@@ -323,7 +323,7 @@ + + A DNS server address, which must be in the format + described in +- inet_pton3. ++ inet_pton3. + This option may be specified more than once. + + +@@ -429,7 +429,7 @@ + + The broadcast address, which must be in the format + described in +- inet_pton3. ++ inet_pton3. + This key only applies to IPv4 addresses. If it is not + given, it is derived from the Address + key. +diff --git a/man/systemd.path.xml b/man/systemd.path.xml +index 08a7ec8..d02bc92 100644 +--- a/man/systemd.path.xml ++++ b/man/systemd.path.xml +@@ -74,7 +74,7 @@ + (see below). + + Internally, path units use the +- inotify7 ++ inotify7 + API to monitor file systems. Due to that, it suffers by the same + limitations as inotify, and for example cannot be used to monitor + files or directories changed by other machines on remote NFS file +@@ -187,7 +187,7 @@ + systemctl1, + systemd.unit5, + systemd.service5, +- inotify7, ++ inotify7, + systemd.directives7 + + +diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml +index 3938345..2f54193 100644 +--- a/man/systemd.socket.xml ++++ b/man/systemd.socket.xml +@@ -265,7 +265,7 @@ + Takes a one of , + or . Controls + the IPV6_V6ONLY socket option (see +- ipv67 ++ ipv67 + for details). If , IPv6 sockets bound + will be accessible via both IPv4 and IPv6. If + , they will be accessible via IPv6 +@@ -294,7 +294,7 @@ + this socket to. If set, traffic will only be accepted from the + specified network interfaces. This controls the + SO_BINDTODEVICE socket option (see +- socket7 ++ socket7 + for details). If this option is used, an automatic dependency + from this socket unit on the network interface device unit + (systemd.device5 +@@ -380,7 +380,7 @@ + /proc/sys/net/ipv4/tcp_keepalive_time) + for all TCP streams accepted on this socket. This controls the + SO_KEEPALIVE socket option (see +- socket7 ++ socket7 + and the TCP + Keepalive HOWTO for details.) Defaults to +@@ -392,7 +392,7 @@ + Takes time (in seconds) as argument . The connection needs to remain + idle before TCP starts sending keepalive probes. This controls the TCP_KEEPIDLE + socket option (see +- socket7 ++ socket7 + and the TCP + Keepalive HOWTO for details.) +@@ -405,7 +405,7 @@ + individual keepalive probes, if the socket option SO_KEEPALIVE + has been set on this socket seconds as argument. This controls + the TCP_KEEPINTVL socket option (see +- socket7 ++ socket7 + and the TCP + Keepalive HOWTO for details.) Defaults value is 75 +@@ -418,7 +418,7 @@ + unacknowledged probes to send before considering the + connection dead and notifying the application layer. This + controls the TCP_KEEPCNT socket option (see +- socket7 ++ socket7 + and the TCP + Keepalive HOWTO for details.) Defaults value is +@@ -431,7 +431,7 @@ + algorithm works by combining a number of small outgoing + messages, and sending them all at once. This controls the + TCP_NODELAY socket option (see +- tcp7 ++ tcp7 + Defaults to . + + +@@ -440,7 +440,7 @@ + Takes an integer argument controlling the + priority for all traffic sent from this socket. This controls + the SO_PRIORITY socket option (see +- socket7 ++ socket7 + for details.). + + +@@ -453,7 +453,7 @@ + established. When this option is set, the + TCP_DEFER_ACCEPT socket option will be + used (see +- tcp7), ++ tcp7), + and the kernel will ignore initial ACK packets without any + data. The argument specifies the approximate amount of time + the kernel should wait for incoming data before falling back +@@ -480,7 +480,7 @@ + Takes an integer argument controlling the + receive or send buffer sizes of this socket, respectively. + This controls the SO_RCVBUF and SO_SNDBUF socket options (see +- socket7 ++ socket7 + for details.). The usual suffixes K, M, G are supported and + are understood to the base of 1024. + +@@ -490,7 +490,7 @@ + Takes an integer argument controlling the IP + Type-Of-Service field for packets generated from this socket. + This controls the IP_TOS socket option (see +- ip7 ++ ip7 + for details.). Either a numeric string or one of + , , + or may +@@ -503,9 +503,9 @@ + Time-To-Live/IPv6 Hop-Count field for packets generated from + this socket. This sets the IP_TTL/IPV6_UNICAST_HOPS socket + options (see +- ip7 ++ ip7 + and +- ipv67 ++ ipv67 + for details.) + + +@@ -515,7 +515,7 @@ + mark of packets generated by this socket. This can be used in + the firewall logic to filter packets from this socket. This + sets the SO_MARK socket option. See +- iptables8 ++ iptables8 + for details. + + +@@ -526,7 +526,7 @@ + bind2s + to this TCP or UDP port. This controls the SO_REUSEPORT socket + option. See +- socket7 ++ socket7 + for details. + + +@@ -578,7 +578,7 @@ + control the mq_maxmsg field or the mq_msgsize field, + respectively, when creating the message queue. Note that + either none or both of these variables need to be set. See +- mq_setattr3 ++ mq_setattr3 + for details. + + +diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml +index 23b9c71..5016f45 100644 +--- a/man/systemd.swap.xml ++++ b/man/systemd.swap.xml +@@ -69,7 +69,7 @@ + Additional options are listed in + systemd.exec5, + which define the execution environment the +- swapon8 ++ swapon8 + binary is executed in, and in + systemd.kill5, + which define the way the processes are terminated, and in +@@ -100,7 +100,7 @@ + + Swap units may either be configured via unit files, or via + /etc/fstab (see +- fstab5 ++ fstab5 + for details). Swaps listed in /etc/fstab will + be converted into native units dynamically at boot and when the + configuration of the system manager is reloaded. See +@@ -161,7 +161,7 @@ + What= + Takes an absolute path of a device node or + file to use for paging. See +- swapon8 ++ swapon8 + for details. If this refers to a device node, a dependency on + the respective device unit is automatically created. (See + systemd.device5 +@@ -187,7 +187,7 @@ + device. This may be used for controlling discard options among + other functionality, if the swap backing device supports the + discard or trim operation. (See +- swapon8 ++ swapon8 + for more information.) + + +@@ -229,7 +229,7 @@ + systemd.resource-control5, + systemd.device5, + systemd.mount5, +- swapon8, ++ swapon8, + systemd-fstab-generator8, + systemd.directives7 + +diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml +index a452f87..c2e374a 100644 +--- a/man/systemd.unit.xml ++++ b/man/systemd.unit.xml +@@ -826,7 +826,7 @@ + cris to test + against a specific architecture. The architecture is + determined from the information returned by +- uname2 ++ uname2 + and is thus subject to + personality2. + Note that a Personality= setting in the +@@ -1438,7 +1438,7 @@ PrivateTmp=yes + systemd-analyze1, + capabilities7, + systemd.directives7, +- uname1 ++ uname1 + + + +diff --git a/man/systemd.xml b/man/systemd.xml +index 9b92140..d006b0b 100644 +--- a/man/systemd.xml ++++ b/man/systemd.xml +@@ -1012,9 +1012,9 @@ + Set the system locale to use. This overrides + the settings in /etc/locale.conf. For + more information see +- locale.conf5 ++ locale.conf5 + and +- locale7. ++ locale7. + + + +@@ -1077,7 +1077,7 @@ + + The systemd Homepage, + systemd-system.conf5, +- locale.conf5, ++ locale.conf5, + systemctl1, + journalctl1, + systemd-notify1, +diff --git a/man/vconsole.conf.xml b/man/vconsole.conf.xml +index 17bea8b..27196d4 100644 +--- a/man/vconsole.conf.xml ++++ b/man/vconsole.conf.xml +@@ -129,9 +129,9 @@ FONT=eurlatgr + + systemd1, + systemd-vconsole-setup.service8, +- loadkeys1, +- setfont8, +- locale.conf5, ++ loadkeys1, ++ setfont8, ++ locale.conf5, + systemd-localed.service8 + + diff --git a/SOURCES/0103-Only-disable-output-on-console-during-boot-if-needed.patch b/SOURCES/0103-Only-disable-output-on-console-during-boot-if-needed.patch deleted file mode 100644 index 446b085..0000000 --- a/SOURCES/0103-Only-disable-output-on-console-during-boot-if-needed.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 6a2697e8d12f8a09caa26394ecdbbb6d0721f757 Mon Sep 17 00:00:00 2001 -From: Olivier Brunel -Date: Fri, 20 Sep 2013 22:18:29 +0200 -Subject: [PATCH] Only disable output on console during boot if needed - -If there are no more jobs on console, no need/we shouldn't disable output. ---- - src/core/manager.c | 2 +- - src/core/unit.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/core/manager.c b/src/core/manager.c -index 58dacdc..ce32baf 100644 ---- a/src/core/manager.c -+++ b/src/core/manager.c -@@ -1761,7 +1761,7 @@ static int process_event(Manager *m, struct epoll_event *ev) { - } - - case WATCH_IDLE_PIPE: { -- m->no_console_output = true; -+ m->no_console_output = m->n_on_console > 0; - - manager_unwatch_idle_pipe(m); - close_idle_pipe(m); -diff --git a/src/core/unit.c b/src/core/unit.c -index 0f57b06..acd9c74 100644 ---- a/src/core/unit.c -+++ b/src/core/unit.c -@@ -1457,7 +1457,7 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su - - if (m->n_on_console == 0) - /* unset no_console_output flag, since the console is free */ -- m->no_console_output = 0; -+ m->no_console_output = false; - } else - m->n_on_console ++; - } diff --git a/SOURCES/0103-man-link-to-fd.o-for-dbus-stuff.patch b/SOURCES/0103-man-link-to-fd.o-for-dbus-stuff.patch new file mode 100644 index 0000000..9e34a20 --- /dev/null +++ b/SOURCES/0103-man-link-to-fd.o-for-dbus-stuff.patch @@ -0,0 +1,90 @@ +From ec79f8b26d793d2e2ee1705ca86437049e0153c6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 13 Mar 2015 21:24:30 -0500 +Subject: [PATCH] man: link to fd.o for dbus stuff + +(cherry picked from commit 3b5cfcdb580f5b766ff7fb1a2839bd37d74a98de) +--- + man/busctl.xml | 2 +- + man/custom-html.xsl | 13 +++++++++++++ + man/systemd-bus-proxyd.xml | 2 +- + man/systemd-bus-proxyd@.service.xml | 2 +- + man/systemd-machine-id-setup.xml | 2 +- + 5 files changed, 17 insertions(+), 4 deletions(-) + +diff --git a/man/busctl.xml b/man/busctl.xml +index cc1844b..807fc78 100644 +--- a/man/busctl.xml ++++ b/man/busctl.xml +@@ -465,7 +465,7 @@ o "/org/freedesktop/systemd1/job/42684" + See Also + + +- dbus-daemon1, ++ dbus-daemon1, + D-Bus, + kdbus, + sd-bus3, +diff --git a/man/custom-html.xsl b/man/custom-html.xsl +index 32299db..706b95a 100644 +--- a/man/custom-html.xsl ++++ b/man/custom-html.xsl +@@ -91,6 +91,19 @@ + + + ++ ++ ++ ++ http://dbus.freedesktop.org/doc/ ++ ++ . ++ ++ .html ++ ++ ++ ++ ++ + + +

+diff --git a/man/systemd-bus-proxyd.xml b/man/systemd-bus-proxyd.xml +index 2c77640..e0efe99 100644 +--- a/man/systemd-bus-proxyd.xml ++++ b/man/systemd-bus-proxyd.xml +@@ -101,7 +101,7 @@ along with systemd; If not, see . + See Also + + +- dbus-daemon1, ++ dbus-daemon1, + D-Bus, + kdbus + +diff --git a/man/systemd-bus-proxyd@.service.xml b/man/systemd-bus-proxyd@.service.xml +index 141b43f..dc4f07f 100644 +--- a/man/systemd-bus-proxyd@.service.xml ++++ b/man/systemd-bus-proxyd@.service.xml +@@ -73,7 +73,7 @@ + + + systemd-bus-proxyd8, +- dbus-daemon1, ++ dbus-daemon1, + D-Bus, + kdbus + +diff --git a/man/systemd-machine-id-setup.xml b/man/systemd-machine-id-setup.xml +index 22bad3e..182717f 100644 +--- a/man/systemd-machine-id-setup.xml ++++ b/man/systemd-machine-id-setup.xml +@@ -122,7 +122,7 @@ + + systemd1, + machine-id5, +- dbus-uuidgen1, ++ dbus-uuidgen1, + systemd-firstboot1 + + diff --git a/SOURCES/0104-Fix-possible-lack-of-status-messages-on-shutdown-reb.patch b/SOURCES/0104-Fix-possible-lack-of-status-messages-on-shutdown-reb.patch deleted file mode 100644 index d3e1a98..0000000 --- a/SOURCES/0104-Fix-possible-lack-of-status-messages-on-shutdown-reb.patch +++ /dev/null @@ -1,26 +0,0 @@ -From f64dc9cfd4f2fb79c3b46b2657961b407c6b3235 Mon Sep 17 00:00:00 2001 -From: Olivier Brunel -Date: Fri, 20 Sep 2013 22:18:30 +0200 -Subject: [PATCH] Fix possible lack of status messages on shutdown/reboot - -Since 31a7eb86 the output on console can be disabled to avoid colliding with -gettys. However, it could also lead to a lack of messages during -shutdown/reboot. ---- - src/core/job.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/src/core/job.c b/src/core/job.c -index 5ea9803..7d2b994 100644 ---- a/src/core/job.c -+++ b/src/core/job.c -@@ -1099,6 +1099,9 @@ void job_shutdown_magic(Job *j) { - if (!unit_has_name(j->unit, SPECIAL_SHUTDOWN_TARGET)) - return; - -+ /* In case messages on console has been disabled on boot */ -+ j->unit->manager->no_console_output = false; -+ - if (detect_container(NULL) > 0) - return; - diff --git a/SOURCES/0104-man-fix-name-of-systemd.resource-control-5.patch b/SOURCES/0104-man-fix-name-of-systemd.resource-control-5.patch new file mode 100644 index 0000000..b468029 --- /dev/null +++ b/SOURCES/0104-man-fix-name-of-systemd.resource-control-5.patch @@ -0,0 +1,23 @@ +From 28dd732dd917b9832c4c39b7fd44a566516815db Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 13 Mar 2015 21:25:37 -0500 +Subject: [PATCH] man: fix name of systemd.resource-control(5) + +(cherry picked from commit ee41f6028189819c728316e917ca09b9eb0a7850) +--- + man/systemctl.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/systemctl.xml b/man/systemctl.xml +index 07eb431..3c4c9cb 100644 +--- a/man/systemctl.xml ++++ b/man/systemctl.xml +@@ -1732,7 +1732,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service + loginctl1, + machinectl1, + systemd.unit5, +- systemd.resource-management5, ++ systemd.resource-control5, + systemd.special7, + wall1, + systemd.preset5, diff --git a/SOURCES/0105-random-seed-improve-debugging-messages-a-bit.patch b/SOURCES/0105-random-seed-improve-debugging-messages-a-bit.patch deleted file mode 100644 index 08eb783..0000000 --- a/SOURCES/0105-random-seed-improve-debugging-messages-a-bit.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 03269523c0f254846613ae3ae0183f4724e47ed8 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Tue, 12 Nov 2013 22:05:16 -0500 -Subject: [PATCH] random-seed: improve debugging messages a bit - ---- - Makefile.am | 2 ++ - src/random-seed/random-seed.c | 8 ++++---- - 2 files changed, 6 insertions(+), 4 deletions(-) - -diff --git a/Makefile.am b/Makefile.am -index 0c11477..3103bac 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -159,6 +159,7 @@ AM_CPPFLAGS = \ - -DSYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH=\"$(rootbindir)/systemd-tty-ask-password-agent\" \ - -DSYSTEMD_STDIO_BRIDGE_BINARY_PATH=\"$(bindir)/systemd-stdio-bridge\" \ - -DROOTPREFIX=\"$(rootprefix)\" \ -+ -DRANDOM_SEED_DIR=\"$(localstatedir)/lib/systemd/\" \ - -DRANDOM_SEED=\"$(localstatedir)/lib/systemd/random-seed\" \ - -DSYSTEMD_CRYPTSETUP_PATH=\"$(rootlibexecdir)/systemd-cryptsetup\" \ - -DSYSTEM_GENERATOR_PATH=\"$(systemgeneratordir)\" \ -@@ -4227,6 +4228,7 @@ substitutions = \ - '|PACKAGE_VERSION=$(PACKAGE_VERSION)|' \ - '|PACKAGE_NAME=$(PACKAGE_NAME)|' \ - '|PACKAGE_URL=$(PACKAGE_URL)|' \ -+ '|RANDOM_SEED_DIR=$(localstatedir)/lib/systemd/|' \ - '|RANDOM_SEED=$(localstatedir)/lib/systemd/random-seed|' \ - '|prefix=$(prefix)|' \ - '|exec_prefix=$(exec_prefix)|' \ -diff --git a/src/random-seed/random-seed.c b/src/random-seed/random-seed.c -index afbd500..af79ecf 100644 ---- a/src/random-seed/random-seed.c -+++ b/src/random-seed/random-seed.c -@@ -72,7 +72,7 @@ int main(int argc, char *argv[]) { - - r = mkdir_parents_label(RANDOM_SEED, 0755); - if (r < 0) { -- log_error("Failed to create parent directory of " RANDOM_SEED ": %s", strerror(-r)); -+ log_error("Failed to create directory " RANDOM_SEED_DIR ": %s", strerror(-r)); - goto finish; - } - -@@ -86,7 +86,7 @@ int main(int argc, char *argv[]) { - if (seed_fd < 0) { - seed_fd = open(RANDOM_SEED, O_RDONLY|O_CLOEXEC|O_NOCTTY); - if (seed_fd < 0) { -- log_error("Failed to open random seed: %m"); -+ log_error("Failed to open " RANDOM_SEED ": %m"); - r = -errno; - goto finish; - } -@@ -106,7 +106,7 @@ int main(int argc, char *argv[]) { - if (k <= 0) { - - if (r != 0) -- log_error("Failed to read seed file: %m"); -+ log_error("Failed to read seed from " RANDOM_SEED ": %m"); - - r = k == 0 ? -EIO : (int) k; - -@@ -125,7 +125,7 @@ int main(int argc, char *argv[]) { - - seed_fd = open(RANDOM_SEED, O_WRONLY|O_CLOEXEC|O_NOCTTY|O_CREAT, 0600); - if (seed_fd < 0) { -- log_error("Failed to open random seed: %m"); -+ log_error("Failed to open " RANDOM_SEED ": %m"); - r = -errno; - goto finish; - } diff --git a/SOURCES/0105-selinux-fix-SEGV-during-switch-root-if-SELinux-polic.patch b/SOURCES/0105-selinux-fix-SEGV-during-switch-root-if-SELinux-polic.patch new file mode 100644 index 0000000..d8dfba6 --- /dev/null +++ b/SOURCES/0105-selinux-fix-SEGV-during-switch-root-if-SELinux-polic.patch @@ -0,0 +1,37 @@ +From 3a82f8be03b07b84fa470c6e42cd87865aeaf701 Mon Sep 17 00:00:00 2001 +From: Will Woods +Date: Fri, 13 Mar 2015 17:24:46 -0400 +Subject: [PATCH] selinux: fix SEGV during switch-root if SELinux policy loaded + +If you've got SELinux policy loaded, label_hnd is your labeling handle. +When systemd is shutting down, we free that handle via mac_selinux_finish(). + +But: switch_root() calls mkdir_p_label(), which tries to look up a label +using that freed handle, and so we get a bunch of garbage and eventually +SEGV in libselinux. + +(This doesn't happen in the switch-root from initramfs to real root because +there's no SELinux policy loaded in initramfs, so label_hnd is NULL and we +never attempt any lookups.) + +So: make sure that mac_selinux_finish() actually sets label_hnd to NULL, so +nobody tries to use it after it becomes invalid. + +https://bugzilla.redhat.com/show_bug.cgi?id=1185604 +(cherry picked from commit f5ce2b49585a14cefb6d02f61c8dcdf7628a8605) +--- + src/shared/selinux-util.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/shared/selinux-util.c b/src/shared/selinux-util.c +index a2233e0..a46ddf8 100644 +--- a/src/shared/selinux-util.c ++++ b/src/shared/selinux-util.c +@@ -117,6 +117,7 @@ void mac_selinux_finish(void) { + return; + + selabel_close(label_hnd); ++ label_hnd = NULL; + #endif + } + diff --git a/SOURCES/0106-Fix-RemainAfterExit-services-keeping-a-hold-on-conso.patch b/SOURCES/0106-Fix-RemainAfterExit-services-keeping-a-hold-on-conso.patch deleted file mode 100644 index 86dead0..0000000 --- a/SOURCES/0106-Fix-RemainAfterExit-services-keeping-a-hold-on-conso.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 210dca6fd02254b8c4d145064cdfadbfef68dbd3 Mon Sep 17 00:00:00 2001 -From: Olivier Brunel -Date: Thu, 14 Nov 2013 15:52:54 +0100 -Subject: [PATCH] Fix RemainAfterExit services keeping a hold on console - -When a service exits succesfully and has RemainAfterExit set, its hold -on the console (in m->n_on_console) wasn't released since the unit state -didn't change. ---- - src/core/service.c | 16 ++++++++++++++++ - src/core/unit.c | 3 +++ - 2 files changed, 19 insertions(+) - -diff --git a/src/core/service.c b/src/core/service.c -index 5662180..62ae8f0 100644 ---- a/src/core/service.c -+++ b/src/core/service.c -@@ -1570,6 +1570,22 @@ static void service_set_state(Service *s, ServiceState state) { - if (state == SERVICE_EXITED && UNIT(s)->manager->n_reloading <= 0) - unit_destroy_cgroup(UNIT(s)); - -+ /* For remain_after_exit services, let's see if we can "release" the -+ * hold on the console, since unit_notify() only does that in case of -+ * change of state */ -+ if (state == SERVICE_EXITED && s->remain_after_exit && -+ UNIT(s)->manager->n_on_console > 0) { -+ ExecContext *ec = unit_get_exec_context(UNIT(s)); -+ if (ec && exec_context_may_touch_console(ec)) { -+ Manager *m = UNIT(s)->manager; -+ -+ m->n_on_console --; -+ if (m->n_on_console == 0) -+ /* unset no_console_output flag, since the console is free */ -+ m->no_console_output = false; -+ } -+ } -+ - if (old_state != state) - log_debug_unit(UNIT(s)->id, - "%s changed %s -> %s", UNIT(s)->id, -diff --git a/src/core/unit.c b/src/core/unit.c -index acd9c74..6c2c4a0 100644 ---- a/src/core/unit.c -+++ b/src/core/unit.c -@@ -1449,6 +1449,9 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su - if (UNIT_IS_INACTIVE_OR_FAILED(ns)) - unit_destroy_cgroup(u); - -+ /* Note that this doesn't apply to RemainAfterExit services exiting -+ * sucessfully, since there's no change of state in that case. Which is -+ * why it is handled in service_set_state() */ - if (UNIT_IS_INACTIVE_OR_FAILED(os) != UNIT_IS_INACTIVE_OR_FAILED(ns)) { - ExecContext *ec = unit_get_exec_context(u); - if (ec && exec_context_may_touch_console(ec)) { diff --git a/SOURCES/0106-service-don-t-add-After-dependencies-on-.busname-uni.patch b/SOURCES/0106-service-don-t-add-After-dependencies-on-.busname-uni.patch new file mode 100644 index 0000000..3b404e3 --- /dev/null +++ b/SOURCES/0106-service-don-t-add-After-dependencies-on-.busname-uni.patch @@ -0,0 +1,35 @@ +From 7c1b21bad54714f04d0d2a8c77008408affe7067 Mon Sep 17 00:00:00 2001 +From: Michael Biebl +Date: Sat, 14 Mar 2015 16:48:54 +0100 +Subject: [PATCH] service: don't add After= dependencies on .busname units if + kdbus support is disabled + +(cherry picked from commit 6962fd3bd28cb5d3aaff69c1e3b6cc006e7c8426) +--- + src/core/service.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/core/service.c b/src/core/service.c +index 7781b4e..ae5e610 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -556,14 +556,16 @@ static int service_add_extras(Service *s) { + s->notify_access = NOTIFY_MAIN; + + if (s->bus_name) { ++#ifdef ENABLE_KDBUS + const char *n; + +- r = unit_watch_bus_name(UNIT(s), s->bus_name); ++ n = strjoina(s->bus_name, ".busname"); ++ r = unit_add_dependency_by_name(UNIT(s), UNIT_AFTER, n, NULL, true); + if (r < 0) + return r; ++#endif + +- n = strjoina(s->bus_name, ".busname"); +- r = unit_add_dependency_by_name(UNIT(s), UNIT_AFTER, n, NULL, true); ++ r = unit_watch_bus_name(UNIT(s), s->bus_name); + if (r < 0) + return r; + } diff --git a/SOURCES/0107-keymap-Add-Toshiba-Satellite-U940.patch b/SOURCES/0107-keymap-Add-Toshiba-Satellite-U940.patch deleted file mode 100644 index 7419cb1..0000000 --- a/SOURCES/0107-keymap-Add-Toshiba-Satellite-U940.patch +++ /dev/null @@ -1,28 +0,0 @@ -From d76eefd8a937c6ed75cb24a2c14fa37291e663be Mon Sep 17 00:00:00 2001 -From: Jose Ignacio Naranjo -Date: Sun, 17 Nov 2013 21:11:34 +0100 -Subject: [PATCH] keymap: Add Toshiba Satellite U940 - -Signed-off-by: Martin Pitt ---- - hwdb/60-keyboard.hwdb | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb -index b497f92..d4d948d 100644 ---- a/hwdb/60-keyboard.hwdb -+++ b/hwdb/60-keyboard.hwdb -@@ -1031,6 +1031,13 @@ keyboard:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSatellite*P75-A:pvr* - KEYBOARD_KEY_a9=switchvideomode # switch display outputs - KEYBOARD_KEY_d4=wlan # RF Switch Off - -+# Satellite U940 -+keyboard:name:Toshiba*input*device:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSATELLITEU940:pvr* -+ KEYBOARD_KEY_13c=brightnessdown -+ KEYBOARD_KEY_13d=brightnessup -+ KEYBOARD_KEY_13e=switchvideomode -+ KEYBOARD_KEY_13f=f21 # Touchpad toggle -+ - ########################################################### - # VIA - ########################################################### diff --git a/SOURCES/0107-libudev-monitor-fix-error-path-in-send_device.patch b/SOURCES/0107-libudev-monitor-fix-error-path-in-send_device.patch new file mode 100644 index 0000000..41cca7b --- /dev/null +++ b/SOURCES/0107-libudev-monitor-fix-error-path-in-send_device.patch @@ -0,0 +1,38 @@ +From dfd0017561730f675d65cc826815ce7c932892aa Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Wed, 11 Mar 2015 22:23:38 +0100 +Subject: [PATCH] libudev: monitor - fix error path in send_device + +Return -errno rather than -1 in case sendmsg() fails. + +(cherry picked from commit a4445e88cece0444c66d70876b03065158dd4685) +--- + src/libudev/libudev-monitor.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/src/libudev/libudev-monitor.c b/src/libudev/libudev-monitor.c +index 3f1fee7..d0486e3 100644 +--- a/src/libudev/libudev-monitor.c ++++ b/src/libudev/libudev-monitor.c +@@ -749,12 +749,20 @@ int udev_monitor_send_device(struct udev_monitor *udev_monitor, + * If we send to a multicast group, we will get + * ECONNREFUSED, which is expected. + */ +- if (destination != NULL) ++ if (destination) + smsg.msg_name = &destination->snl; + else + smsg.msg_name = &udev_monitor->snl_destination; + smsg.msg_namelen = sizeof(struct sockaddr_nl); + count = sendmsg(udev_monitor->sock, &smsg, 0); ++ if (count < 0) { ++ if (!destination && errno == ECONNREFUSED) { ++ log_debug("passed unknown number of bytes to netlink monitor %p", udev_monitor); ++ return 0; ++ } else ++ return -errno; ++ } ++ + log_debug("passed %zi bytes to netlink monitor %p", count, udev_monitor); + return count; + } diff --git a/SOURCES/0108-calendar-support-yearly-and-annually-names-the-same-.patch b/SOURCES/0108-calendar-support-yearly-and-annually-names-the-same-.patch deleted file mode 100644 index 7ed6206..0000000 --- a/SOURCES/0108-calendar-support-yearly-and-annually-names-the-same-.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 9e4b36ca509cdcb39afaa9fc7a0f1901b8855647 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 19 Nov 2013 01:13:42 +0100 -Subject: [PATCH] calendar: support 'yearly' and 'annually' names the same way - as cron - ---- - src/shared/calendarspec.c | 17 +++++++++++++++++ - 1 file changed, 17 insertions(+) - -diff --git a/src/shared/calendarspec.c b/src/shared/calendarspec.c -index 7979e23..7075159 100644 ---- a/src/shared/calendarspec.c -+++ b/src/shared/calendarspec.c -@@ -686,6 +686,23 @@ int calendar_spec_from_string(const char *p, CalendarSpec **spec) { - if (r < 0) - goto fail; - -+ } else if (strcaseeq(p, "anually") || strcaseeq(p, "yearly")) { -+ r = const_chain(1, &c->month); -+ if (r < 0) -+ goto fail; -+ r = const_chain(1, &c->day); -+ if (r < 0) -+ goto fail; -+ r = const_chain(0, &c->hour); -+ if (r < 0) -+ goto fail; -+ r = const_chain(0, &c->minute); -+ if (r < 0) -+ goto fail; -+ r = const_chain(0, &c->second); -+ if (r < 0) -+ goto fail; -+ - } else if (strcaseeq(p, "weekly")) { - - c->weekdays_bits = 1; diff --git a/SOURCES/0108-core-remove-left-over-debug-message.patch b/SOURCES/0108-core-remove-left-over-debug-message.patch new file mode 100644 index 0000000..4774156 --- /dev/null +++ b/SOURCES/0108-core-remove-left-over-debug-message.patch @@ -0,0 +1,23 @@ +From ea76eeb44ef5c8e5fc8e44328c2c455a2b9a0db0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 14 Mar 2015 17:41:53 -0400 +Subject: [PATCH] core: remove left-over debug message + +(cherry picked from commit bdb26d423a7f992bec5c28e17894c684d770d6f3) +--- + src/core/load-fragment.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c +index 90bf563..f17a82f 100644 +--- a/src/core/load-fragment.c ++++ b/src/core/load-fragment.c +@@ -634,8 +634,6 @@ int config_parse_exec(const char *unit, + + n[k] = NULL; + +- log_debug("path: %s", path ?: n[0]); +- + if (!n[0]) + reason = "Empty executable name or zeroeth argument"; + else if (!string_is_safe(path ?: n[0])) diff --git a/SOURCES/0109-hashmap-be-a-bit-more-conservative-with-pre-allocati.patch b/SOURCES/0109-hashmap-be-a-bit-more-conservative-with-pre-allocati.patch deleted file mode 100644 index 49110a5..0000000 --- a/SOURCES/0109-hashmap-be-a-bit-more-conservative-with-pre-allocati.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 79d427226ea91530362d41e778e1064a396aad09 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 19 Nov 2013 21:02:59 +0100 -Subject: [PATCH] hashmap: be a bit more conservative with pre-allocating hash - tables and items - ---- - src/shared/hashmap.c | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/src/shared/hashmap.c b/src/shared/hashmap.c -index f06fce6..8f5957b 100644 ---- a/src/shared/hashmap.c -+++ b/src/shared/hashmap.c -@@ -66,13 +66,14 @@ static void *first_hashmap_tile = NULL; - static struct pool *first_entry_pool = NULL; - static void *first_entry_tile = NULL; - --static void* allocate_tile(struct pool **first_pool, void **first_tile, size_t tile_size) { -+static void* allocate_tile(struct pool **first_pool, void **first_tile, size_t tile_size, unsigned at_least) { - unsigned i; - - /* When a tile is released we add it to the list and simply - * place the next pointer at its offset 0. */ - - assert(tile_size >= sizeof(void*)); -+ assert(at_least > 0); - - if (*first_tile) { - void *r; -@@ -88,7 +89,7 @@ static void* allocate_tile(struct pool **first_pool, void **first_tile, size_t t - struct pool *p; - - n = *first_pool ? (*first_pool)->n_tiles : 0; -- n = MAX(512U, n * 2); -+ n = MAX(at_least, n * 2); - size = PAGE_ALIGN(ALIGN(sizeof(struct pool)) + n*tile_size); - n = (size - ALIGN(sizeof(struct pool))) / tile_size; - -@@ -191,7 +192,7 @@ Hashmap *hashmap_new(hash_func_t hash_func, compare_func_t compare_func) { - size = ALIGN(sizeof(Hashmap)) + INITIAL_N_BUCKETS * sizeof(struct hashmap_entry*); - - if (b) { -- h = allocate_tile(&first_hashmap_pool, &first_hashmap_tile, size); -+ h = allocate_tile(&first_hashmap_pool, &first_hashmap_tile, size, 8); - if (!h) - return NULL; - -@@ -476,7 +477,7 @@ int hashmap_put(Hashmap *h, const void *key, void *value) { - hash = bucket_hash(h, key); - - if (h->from_pool) -- e = allocate_tile(&first_entry_pool, &first_entry_tile, sizeof(struct hashmap_entry)); -+ e = allocate_tile(&first_entry_pool, &first_entry_tile, sizeof(struct hashmap_entry), 64U); - else - e = new(struct hashmap_entry, 1); - diff --git a/SOURCES/0109-units-there-is-no-systemd-udev-hwdb-update.service.patch b/SOURCES/0109-units-there-is-no-systemd-udev-hwdb-update.service.patch new file mode 100644 index 0000000..a3e0e65 --- /dev/null +++ b/SOURCES/0109-units-there-is-no-systemd-udev-hwdb-update.service.patch @@ -0,0 +1,23 @@ +From e2d3644c855b9262508448abc5044e3e21103680 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 14 Mar 2015 17:56:13 -0400 +Subject: [PATCH] units: there is no systemd-udev-hwdb-update.service + +(cherry picked from commit d99ce93383028f08470b6d334bc1a31ca8d16b22) +--- + units/systemd-udevd.service.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/units/systemd-udevd.service.in b/units/systemd-udevd.service.in +index f6acd6f..2791f73 100644 +--- a/units/systemd-udevd.service.in ++++ b/units/systemd-udevd.service.in +@@ -10,7 +10,7 @@ Description=udev Kernel Device Manager + Documentation=man:systemd-udevd.service(8) man:udev(7) + DefaultDependencies=no + Wants=systemd-udevd-control.socket systemd-udevd-kernel.socket +-After=systemd-udevd-control.socket systemd-udevd-kernel.socket systemd-udev-hwdb-update.service systemd-sysusers.service ++After=systemd-udevd-control.socket systemd-udevd-kernel.socket systemd-hwdb-update.service systemd-sysusers.service + Before=sysinit.target + ConditionPathIsReadWrite=/sys + diff --git a/SOURCES/0110-manager-don-t-do-plymouth-in-a-container.patch b/SOURCES/0110-manager-don-t-do-plymouth-in-a-container.patch deleted file mode 100644 index e2393a2..0000000 --- a/SOURCES/0110-manager-don-t-do-plymouth-in-a-container.patch +++ /dev/null @@ -1,26 +0,0 @@ -From d4b53c89833bf8dc934eee8a19bd3b112135fe71 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 20 Nov 2013 03:44:11 +0100 -Subject: [PATCH] manager: don't do plymouth in a container - -Given that plymouth listens on an abstract namespace socket and if -CLONE_NEWNET is not used the abstract namespace is shared with the host -we might actually end up send plymouth data to the host. ---- - src/core/manager.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/src/core/manager.c b/src/core/manager.c -index ce32baf..944c196 100644 ---- a/src/core/manager.c -+++ b/src/core/manager.c -@@ -1966,6 +1966,9 @@ void manager_send_unit_plymouth(Manager *m, Unit *u) { - if (m->running_as != SYSTEMD_SYSTEM) - return; - -+ if (detect_container(NULL) > 0) -+ return; -+ - if (u->type != UNIT_SERVICE && - u->type != UNIT_MOUNT && - u->type != UNIT_SWAP) diff --git a/SOURCES/0110-util-remove-redundant-debug-message.patch b/SOURCES/0110-util-remove-redundant-debug-message.patch new file mode 100644 index 0000000..70cfea3 --- /dev/null +++ b/SOURCES/0110-util-remove-redundant-debug-message.patch @@ -0,0 +1,29 @@ +From 5ad9a98a4c77949fd3519e11b44b8e0564dfc3a6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 14 Mar 2015 20:14:39 -0400 +Subject: [PATCH] util: remove redundant debug message + +mar 14 20:05:34 fedora22 systemd[4058]: /usr/lib/systemd/system-generators/kdump-dep-generator.sh will be executed. +mar 14 20:05:34 fedora22 systemd[4058]: Spawned /usr/lib/systemd/system-generators/kdump-dep-generator.sh as 4059. + +The second line already says everything. + +(cherry picked from commit 7034e9db51d0b6f8e1dbbe9127393c6fbc06fe28) +--- + src/shared/util.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 8548723..1e1bf94 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -4115,8 +4115,7 @@ static int do_execute(char **directories, usec_t timeout, char *argv[]) { + if (null_or_empty_path(path)) { + log_debug("%s is empty (a mask).", path); + continue; +- } else +- log_debug("%s will be executed.", path); ++ } + + pid = fork(); + if (pid < 0) { diff --git a/SOURCES/0111-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/SOURCES/0111-hwdb-Update-database-of-Bluetooth-company-identifier.patch deleted file mode 100644 index 4ebe150..0000000 --- a/SOURCES/0111-hwdb-Update-database-of-Bluetooth-company-identifier.patch +++ /dev/null @@ -1,327 +0,0 @@ -From 9151c0ff148c20cdeb6e9fbc5909d56133718780 Mon Sep 17 00:00:00 2001 -From: Marcel Holtmann -Date: Sat, 21 Sep 2013 11:45:05 -0700 -Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers - ---- - hwdb/20-bluetooth-vendor-product.hwdb | 209 +++++++++++++++++++++++++++++++--- - 1 file changed, 193 insertions(+), 16 deletions(-) - -diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb -index c8cb322..faecf42 100644 ---- a/hwdb/20-bluetooth-vendor-product.hwdb -+++ b/hwdb/20-bluetooth-vendor-product.hwdb -@@ -46,7 +46,7 @@ bluetooth:v000D* - ID_VENDOR_FROM_DATABASE=Texas Instruments Inc. - - bluetooth:v000E* -- ID_VENDOR_FROM_DATABASE=Ceva, Inc. (formerly Parthus Technologies Inc.) -+ ID_VENDOR_FROM_DATABASE=Ceva, Inc. (formerly Parthus Technologies, Inc.) - - bluetooth:v000F* - ID_VENDOR_FROM_DATABASE=Broadcom Corporation -@@ -55,7 +55,7 @@ bluetooth:v0010* - ID_VENDOR_FROM_DATABASE=Mitel Semiconductor - - bluetooth:v0011* -- ID_VENDOR_FROM_DATABASE=Widcomm, Inc. -+ ID_VENDOR_FROM_DATABASE=Widcomm, Inc - - bluetooth:v0012* - ID_VENDOR_FROM_DATABASE=Zeevo, Inc. -@@ -73,13 +73,13 @@ bluetooth:v0016* - ID_VENDOR_FROM_DATABASE=KC Technology Inc. - - bluetooth:v0017* -- ID_VENDOR_FROM_DATABASE=Newlogic -+ ID_VENDOR_FROM_DATABASE=NewLogic - - bluetooth:v0018* - ID_VENDOR_FROM_DATABASE=Transilica, Inc. - - bluetooth:v0019* -- ID_VENDOR_FROM_DATABASE=Rohde & Schwartz GmbH & Co. KG -+ ID_VENDOR_FROM_DATABASE=Rohde & Schwarz GmbH & Co. KG - - bluetooth:v001A* - ID_VENDOR_FROM_DATABASE=TTPCom Limited -@@ -151,7 +151,7 @@ bluetooth:v0030* - ID_VENDOR_FROM_DATABASE=ST Microelectronics - - bluetooth:v0031* -- ID_VENDOR_FROM_DATABASE=Synopsys -+ ID_VENDOR_FROM_DATABASE=Synopsis - - bluetooth:v0032* - ID_VENDOR_FROM_DATABASE=Red-M (Communications) Ltd -@@ -190,16 +190,16 @@ bluetooth:v003D* - ID_VENDOR_FROM_DATABASE=IPextreme, Inc. - - bluetooth:v003E* -- ID_VENDOR_FROM_DATABASE=Systems and Chips, Inc -+ ID_VENDOR_FROM_DATABASE=Systems and Chips, Inc. - - bluetooth:v003F* -- ID_VENDOR_FROM_DATABASE=Bluetooth SIG, Inc -+ ID_VENDOR_FROM_DATABASE=Bluetooth SIG, Inc. - - bluetooth:v0040* - ID_VENDOR_FROM_DATABASE=Seiko Epson Corporation - - bluetooth:v0041* -- ID_VENDOR_FROM_DATABASE=Integrated Silicon Solution Taiwain, Inc. -+ ID_VENDOR_FROM_DATABASE=Integrated Silicon Solution Taiwan, Inc. - - bluetooth:v0042* - ID_VENDOR_FROM_DATABASE=CONWISE Technology Corporation Ltd -@@ -244,7 +244,7 @@ bluetooth:v004F* - ID_VENDOR_FROM_DATABASE=APT Licensing Ltd. - - bluetooth:v0050* -- ID_VENDOR_FROM_DATABASE=SiRF Technology, Inc. -+ ID_VENDOR_FROM_DATABASE=SiRF Technology - - bluetooth:v0051* - ID_VENDOR_FROM_DATABASE=Tzero Technologies, Inc. -@@ -379,7 +379,7 @@ bluetooth:v007C* - ID_VENDOR_FROM_DATABASE=A & R Cambridge - - bluetooth:v007D* -- ID_VENDOR_FROM_DATABASE=Seers Technology Co. Ltd. -+ ID_VENDOR_FROM_DATABASE=Seers Technology Co. Ltd - - bluetooth:v007E* - ID_VENDOR_FROM_DATABASE=Sports Tracking Technologies Ltd. -@@ -406,7 +406,7 @@ bluetooth:v0085* - ID_VENDOR_FROM_DATABASE=BlueRadios, Inc. - - bluetooth:v0086* -- ID_VENDOR_FROM_DATABASE=equinux AG -+ ID_VENDOR_FROM_DATABASE=equinox AG - - bluetooth:v0087* - ID_VENDOR_FROM_DATABASE=Garmin International, Inc. -@@ -421,7 +421,7 @@ bluetooth:v008A* - ID_VENDOR_FROM_DATABASE=Jawbone - - bluetooth:v008B* -- ID_VENDOR_FROM_DATABASE=Topcon Positioning Systems, LLC -+ ID_VENDOR_FROM_DATABASE=Topcorn Positioning Systems, LLC - - bluetooth:v008C* - ID_VENDOR_FROM_DATABASE=Qualcomm Labs, Inc. -@@ -433,13 +433,13 @@ bluetooth:v008E* - ID_VENDOR_FROM_DATABASE=Quintic Corp. - - bluetooth:v008F* -- ID_VENDOR_FROM_DATABASE=Stollmann E+V GmbH -+ ID_VENDOR_FROM_DATABASE=Stollman E+V GmbH - - bluetooth:v0090* - ID_VENDOR_FROM_DATABASE=Funai Electric Co., Ltd. - - bluetooth:v0091* -- ID_VENDOR_FROM_DATABASE=Advanced PANMOBIL systems GmbH & Co. KG -+ ID_VENDOR_FROM_DATABASE=Advanced PANMOBIL Systems GmbH & Co. KG - - bluetooth:v0092* - ID_VENDOR_FROM_DATABASE=ThinkOptics, Inc. -@@ -460,7 +460,7 @@ bluetooth:v0097* - ID_VENDOR_FROM_DATABASE=Bluetrek Technologies Limited - - bluetooth:v0098* -- ID_VENDOR_FROM_DATABASE=zero1.tv GmbH -+ ID_VENDOR_FROM_DATABASE=zer01.tv GmbH - - bluetooth:v0099* - ID_VENDOR_FROM_DATABASE=i.Tech Dynamic Global Distribution Ltd. -@@ -511,7 +511,7 @@ bluetooth:v00A8* - ID_VENDOR_FROM_DATABASE=ARP Devices Limited - - bluetooth:v00A9* -- ID_VENDOR_FROM_DATABASE=Magneti Marelli S.p.A. -+ ID_VENDOR_FROM_DATABASE=Magneti Marelli S.p.A - - bluetooth:v00AA* - ID_VENDOR_FROM_DATABASE=CAEN RFID srl -@@ -539,3 +539,180 @@ bluetooth:v00B1* - - bluetooth:v00B2* - ID_VENDOR_FROM_DATABASE=Bekey A/S -+ -+bluetooth:v00B3* -+ ID_VENDOR_FROM_DATABASE=Clarinox Technologies Pty. Ltd. -+ -+bluetooth:v00B4* -+ ID_VENDOR_FROM_DATABASE=BDE Technology Co., Ltd. -+ -+bluetooth:v00B5* -+ ID_VENDOR_FROM_DATABASE=Swirl Networks -+ -+bluetooth:v00B6* -+ ID_VENDOR_FROM_DATABASE=Meso international -+ -+bluetooth:v00B7* -+ ID_VENDOR_FROM_DATABASE=TreLab Ltd -+ -+bluetooth:v00B8* -+ ID_VENDOR_FROM_DATABASE=Qualcomm Innovation Center, Inc. (QuIC) -+ -+bluetooth:v00B9* -+ ID_VENDOR_FROM_DATABASE=Johnson Controls, Inc. -+ -+bluetooth:v00BA* -+ ID_VENDOR_FROM_DATABASE=Starkey Laboratories Inc. -+ -+bluetooth:v00BB* -+ ID_VENDOR_FROM_DATABASE=S-Power Electronics Limited -+ -+bluetooth:v00BC* -+ ID_VENDOR_FROM_DATABASE=Ace Sensor Inc -+ -+bluetooth:v00BD* -+ ID_VENDOR_FROM_DATABASE=Aplix Corporation -+ -+bluetooth:v00BE* -+ ID_VENDOR_FROM_DATABASE=AAMP of America -+ -+bluetooth:v00BF* -+ ID_VENDOR_FROM_DATABASE=Stalmart Technology Limited -+ -+bluetooth:v00C0* -+ ID_VENDOR_FROM_DATABASE=AMICCOM Electronics Corporation -+ -+bluetooth:v00C1* -+ ID_VENDOR_FROM_DATABASE=Shenzhen Excelsecu Data Technology Co.,Ltd -+ -+bluetooth:v00C2* -+ ID_VENDOR_FROM_DATABASE=Geneq Inc. -+ -+bluetooth:v00C3* -+ ID_VENDOR_FROM_DATABASE=adidas AG -+ -+bluetooth:v00C4* -+ ID_VENDOR_FROM_DATABASE=LG Electronics -+ -+bluetooth:v00C5* -+ ID_VENDOR_FROM_DATABASE=Onset Computer Corporation -+ -+bluetooth:v00C6* -+ ID_VENDOR_FROM_DATABASE=Selfly BV -+ -+bluetooth:v00C7* -+ ID_VENDOR_FROM_DATABASE=Quuppa Oy. -+ -+bluetooth:v00C8* -+ ID_VENDOR_FROM_DATABASE=GeLo Inc -+ -+bluetooth:v00C9* -+ ID_VENDOR_FROM_DATABASE=Evluma -+ -+bluetooth:v00CA* -+ ID_VENDOR_FROM_DATABASE=MC10 -+ -+bluetooth:v00CB* -+ ID_VENDOR_FROM_DATABASE=Binauric SE -+ -+bluetooth:v00CC* -+ ID_VENDOR_FROM_DATABASE=Beats Electronics -+ -+bluetooth:v00CD* -+ ID_VENDOR_FROM_DATABASE=Microchip Technology Inc. -+ -+bluetooth:v00CE* -+ ID_VENDOR_FROM_DATABASE=Elgato Systems GmbH -+ -+bluetooth:v00CF* -+ ID_VENDOR_FROM_DATABASE=ARCHOS SA -+ -+bluetooth:v00D1* -+ ID_VENDOR_FROM_DATABASE=Polar Electro Europe B.V. -+ -+bluetooth:v00D2* -+ ID_VENDOR_FROM_DATABASE=Dialog Semiconductor B.V. -+ -+bluetooth:v00D3* -+ ID_VENDOR_FROM_DATABASE=Taixingbang Technology (HK) Co,. LTD. -+ -+bluetooth:v00D4* -+ ID_VENDOR_FROM_DATABASE=Kawantech -+ -+bluetooth:v00D5* -+ ID_VENDOR_FROM_DATABASE=Austco Communication Systems -+ -+bluetooth:v00D6* -+ ID_VENDOR_FROM_DATABASE=Timex Group USA, Inc. -+ -+bluetooth:v00D7* -+ ID_VENDOR_FROM_DATABASE=Qualcomm Technologies, Inc. -+ -+bluetooth:v00D8* -+ ID_VENDOR_FROM_DATABASE=Qualcomm Connected Experiences, Inc. -+ -+bluetooth:v00D9* -+ ID_VENDOR_FROM_DATABASE=Voyetra Turtle Beach -+ -+bluetooth:v00DA* -+ ID_VENDOR_FROM_DATABASE=txtr GmbH -+ -+bluetooth:v00DB* -+ ID_VENDOR_FROM_DATABASE=Biosentronics -+ -+bluetooth:v00DC* -+ ID_VENDOR_FROM_DATABASE=Procter & Gamble -+ -+bluetooth:v00DD* -+ ID_VENDOR_FROM_DATABASE=Hosiden Corporation -+ -+bluetooth:v00DE* -+ ID_VENDOR_FROM_DATABASE=Muzik LLC -+ -+bluetooth:v00DF* -+ ID_VENDOR_FROM_DATABASE=Misfit Wearables Corp -+ -+bluetooth:v00E0* -+ ID_VENDOR_FROM_DATABASE=Google -+ -+bluetooth:v00E1* -+ ID_VENDOR_FROM_DATABASE=Danlers Ltd -+ -+bluetooth:v00E2* -+ ID_VENDOR_FROM_DATABASE=Semilink Inc -+ -+bluetooth:v00E3* -+ ID_VENDOR_FROM_DATABASE=inMusic Brands, Inc -+ -+bluetooth:v00E4* -+ ID_VENDOR_FROM_DATABASE=L.S. Research Inc. -+ -+bluetooth:v00E5* -+ ID_VENDOR_FROM_DATABASE=Eden Software Consultants Ltd. -+ -+bluetooth:v00E6* -+ ID_VENDOR_FROM_DATABASE=Freshtemp -+ -+bluetooth:v00E7* -+ ID_VENDOR_FROM_DATABASE=KS Technologies -+ -+bluetooth:v00E8* -+ ID_VENDOR_FROM_DATABASE=ACTS Technologies -+ -+bluetooth:v00E9* -+ ID_VENDOR_FROM_DATABASE=Vtrack Systems -+ -+bluetooth:v00EA* -+ ID_VENDOR_FROM_DATABASE=Nielsen-Kellerman Company -+ -+bluetooth:v00EB* -+ ID_VENDOR_FROM_DATABASE=Server Technology, Inc. -+ -+bluetooth:v00EC* -+ ID_VENDOR_FROM_DATABASE=BioResearch Associates -+ -+bluetooth:v00ED* -+ ID_VENDOR_FROM_DATABASE=Jolly Logic, LLC -+ -+bluetooth:v00EE* -+ ID_VENDOR_FROM_DATABASE=Above Average Outcomes, Inc. diff --git a/SOURCES/0111-tmpfiles-remove-redundant-debug-message.patch b/SOURCES/0111-tmpfiles-remove-redundant-debug-message.patch new file mode 100644 index 0000000..15a637a --- /dev/null +++ b/SOURCES/0111-tmpfiles-remove-redundant-debug-message.patch @@ -0,0 +1,26 @@ +From b9de0cce0292983b62842990b9ce71c99b1bc434 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 14 Mar 2015 20:24:47 -0400 +Subject: [PATCH] tmpfiles: remove redundant debug message + +Mar 13 19:48:30 adam.happyassassin.net systemd-tmpfiles[970]: "/var/lib/machines" has right mode 40700 +Mar 13 19:48:30 adam.happyassassin.net systemd-tmpfiles[970]: /var/lib/machines created successfully. + +(cherry picked from commit 51bfdaf66c381793d2f39ad891f3411a55927da6) +--- + src/tmpfiles/tmpfiles.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index 1e10968..73a9c9d 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -1209,8 +1209,6 @@ static int create_item(Item *i) { + break; + } + +- log_debug("%s created successfully.", i->path); +- + return 0; + } + diff --git a/SOURCES/0112-automount-log-info-about-triggering-process.patch b/SOURCES/0112-automount-log-info-about-triggering-process.patch deleted file mode 100644 index 08de3c9..0000000 --- a/SOURCES/0112-automount-log-info-about-triggering-process.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 46405e5b293eeb66eb10e79f824a51cbaf5147ab Mon Sep 17 00:00:00 2001 -From: Kay Sievers -Date: Thu, 28 Nov 2013 01:25:10 +0100 -Subject: [PATCH] automount: log info about triggering process - -Conflicts: - src/core/automount.c ---- - src/core/automount.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/core/automount.c b/src/core/automount.c -index d1379e0..203104e 100644 ---- a/src/core/automount.c -+++ b/src/core/automount.c -@@ -776,8 +776,8 @@ static void automount_fd_event(Unit *u, int fd, uint32_t events, Watch *w) { - _cleanup_free_ char *p = NULL; - - get_process_comm(packet.v5_packet.pid, &p); -- log_debug_unit(u->id, -- "Got direct mount request on %s, triggered by %lu (%s)", -+ log_info_unit(u->id, -+ "Got automount request for %s, triggered by %lu (%s)", - a->where, (unsigned long) packet.v5_packet.pid, strna(p)); - } else - log_debug_unit(u->id, "Got direct mount request on %s", a->where); diff --git a/SOURCES/0112-sysv-generator-initialize-LookupPaths-just-once.patch b/SOURCES/0112-sysv-generator-initialize-LookupPaths-just-once.patch new file mode 100644 index 0000000..453fdf9 --- /dev/null +++ b/SOURCES/0112-sysv-generator-initialize-LookupPaths-just-once.patch @@ -0,0 +1,275 @@ +From f8fd91c9f0f1f7feabf8567bdad61f57fe922011 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 14 Mar 2015 21:46:59 -0400 +Subject: [PATCH] sysv-generator: initialize LookupPaths just once + +With debugging on, sysv-generator would print the full set of +lookup paths for *every* sysv script. + +While at it, pass LookupPaths as a pointer in sysv-generator, +and constify it everywhere. + +(cherry picked from commit a8ffe6fbcbfdba39aef8dce8b298b3e0cb377c0e) +--- + src/shared/install.c | 55 ++++++++++++++++++++++--------------- + src/shared/install.h | 11 +++++++- + src/shared/path-lookup.c | 1 + + src/shared/path-lookup.h | 3 +- + src/sysv-generator/sysv-generator.c | 14 +++++----- + 5 files changed, 53 insertions(+), 31 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index 65f1c24..92b8d6e 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -1084,7 +1084,7 @@ static int unit_file_load( + static int unit_file_search( + InstallContext *c, + InstallInfo *info, +- LookupPaths *paths, ++ const LookupPaths *paths, + const char *root_dir, + bool allow_symlink, + bool load, +@@ -1153,7 +1153,7 @@ static int unit_file_search( + } + + static int unit_file_can_install( +- LookupPaths *paths, ++ const LookupPaths *paths, + const char *root_dir, + const char *name, + bool allow_symlink, +@@ -1317,7 +1317,7 @@ static int install_info_symlink_wants( + + static int install_info_symlink_link( + InstallInfo *i, +- LookupPaths *paths, ++ const LookupPaths *paths, + const char *config_path, + const char *root_dir, + bool force, +@@ -1345,7 +1345,7 @@ static int install_info_symlink_link( + + static int install_info_apply( + InstallInfo *i, +- LookupPaths *paths, ++ const LookupPaths *paths, + const char *config_path, + const char *root_dir, + bool force, +@@ -1377,7 +1377,7 @@ static int install_info_apply( + + static int install_context_apply( + InstallContext *c, +- LookupPaths *paths, ++ const LookupPaths *paths, + const char *config_path, + const char *root_dir, + bool force, +@@ -1424,7 +1424,7 @@ static int install_context_apply( + + static int install_context_mark_for_removal( + InstallContext *c, +- LookupPaths *paths, ++ const LookupPaths *paths, + Set **remove_symlinks_to, + const char *config_path, + const char *root_dir) { +@@ -1785,39 +1785,28 @@ int unit_file_get_default( + return -ENOENT; + } + +-UnitFileState unit_file_get_state( ++UnitFileState unit_file_lookup_state( + UnitFileScope scope, + const char *root_dir, ++ const LookupPaths *paths, + const char *name) { + +- _cleanup_lookup_paths_free_ LookupPaths paths = {}; + UnitFileState state = _UNIT_FILE_STATE_INVALID; + char **i; + _cleanup_free_ char *path = NULL; + int r; + +- assert(scope >= 0); +- assert(scope < _UNIT_FILE_SCOPE_MAX); +- assert(name); +- +- if (root_dir && scope != UNIT_FILE_SYSTEM) +- return -EINVAL; ++ assert(paths); + + if (!unit_name_is_valid(name, TEMPLATE_VALID)) + return -EINVAL; + +- r = lookup_paths_init_from_scope(&paths, scope, root_dir); +- if (r < 0) +- return r; +- +- STRV_FOREACH(i, paths.unit_path) { ++ STRV_FOREACH(i, paths->unit_path) { + struct stat st; + char *partial; + bool also = false; + + free(path); +- path = NULL; +- + path = path_join(root_dir, *i, name); + if (!path) + return -ENOMEM; +@@ -1858,7 +1847,7 @@ UnitFileState unit_file_get_state( + else if (r > 0) + return state; + +- r = unit_file_can_install(&paths, root_dir, partial, true, &also); ++ r = unit_file_can_install(paths, root_dir, partial, true, &also); + if (r < 0 && errno != ENOENT) + return r; + else if (r > 0) +@@ -1873,6 +1862,28 @@ UnitFileState unit_file_get_state( + return r < 0 ? r : state; + } + ++UnitFileState unit_file_get_state( ++ UnitFileScope scope, ++ const char *root_dir, ++ const char *name) { ++ ++ _cleanup_lookup_paths_free_ LookupPaths paths = {}; ++ int r; ++ ++ assert(scope >= 0); ++ assert(scope < _UNIT_FILE_SCOPE_MAX); ++ assert(name); ++ ++ if (root_dir && scope != UNIT_FILE_SYSTEM) ++ return -EINVAL; ++ ++ r = lookup_paths_init_from_scope(&paths, scope, root_dir); ++ if (r < 0) ++ return r; ++ ++ return unit_file_lookup_state(scope, root_dir, &paths, name); ++} ++ + int unit_file_query_preset(UnitFileScope scope, const char *root_dir, const char *name) { + _cleanup_strv_free_ char **files = NULL; + char **p; +diff --git a/src/shared/install.h b/src/shared/install.h +index 357be0f..3ca3939 100644 +--- a/src/shared/install.h ++++ b/src/shared/install.h +@@ -23,6 +23,7 @@ + + #include "hashmap.h" + #include "unit-name.h" ++#include "path-lookup.h" + + typedef enum UnitFileScope { + UNIT_FILE_SYSTEM, +@@ -98,7 +99,15 @@ int unit_file_set_default(UnitFileScope scope, const char *root_dir, const char + int unit_file_get_default(UnitFileScope scope, const char *root_dir, char **name); + int unit_file_add_dependency(UnitFileScope scope, bool runtime, const char *root_dir, char **files, char *target, UnitDependency dep, bool force, UnitFileChange **changes, unsigned *n_changes); + +-UnitFileState unit_file_get_state(UnitFileScope scope, const char *root_dir, const char *filename); ++UnitFileState unit_file_lookup_state( ++ UnitFileScope scope, ++ const char *root_dir, ++ const LookupPaths *paths, ++ const char *name); ++UnitFileState unit_file_get_state( ++ UnitFileScope scope, ++ const char *root_dir, ++ const char *filename); + + int unit_file_get_list(UnitFileScope scope, const char *root_dir, Hashmap *h); + +diff --git a/src/shared/path-lookup.c b/src/shared/path-lookup.c +index 291a2f4..812730b 100644 +--- a/src/shared/path-lookup.c ++++ b/src/shared/path-lookup.c +@@ -31,6 +31,7 @@ + #include "strv.h" + #include "path-util.h" + #include "path-lookup.h" ++#include "install.h" + + int user_config_home(char **config_home) { + const char *e; +diff --git a/src/shared/path-lookup.h b/src/shared/path-lookup.h +index 2ec888d..f1925ee 100644 +--- a/src/shared/path-lookup.h ++++ b/src/shared/path-lookup.h +@@ -22,7 +22,8 @@ + ***/ + + #include "macro.h" +-#include "install.h" ++ ++typedef enum UnitFileScope UnitFileScope; + + typedef struct LookupPaths { + char **unit_path; +diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c +index 6e39b44..0125ca2 100644 +--- a/src/sysv-generator/sysv-generator.c ++++ b/src/sysv-generator/sysv-generator.c +@@ -723,10 +723,10 @@ static int fix_order(SysvStub *s, Hashmap *all_services) { + return 0; + } + +-static int enumerate_sysv(LookupPaths lp, Hashmap *all_services) { ++static int enumerate_sysv(const LookupPaths *lp, Hashmap *all_services) { + char **path; + +- STRV_FOREACH(path, lp.sysvinit_path) { ++ STRV_FOREACH(path, lp->sysvinit_path) { + _cleanup_closedir_ DIR *d = NULL; + struct dirent *de; + +@@ -768,7 +768,7 @@ static int enumerate_sysv(LookupPaths lp, Hashmap *all_services) { + if (!fpath) + return log_oom(); + +- if (unit_file_get_state(UNIT_FILE_SYSTEM, NULL, name) >= 0) { ++ if (unit_file_lookup_state(UNIT_FILE_SYSTEM, NULL, lp, name) >= 0) { + log_debug("Native unit for %s already exists, skipping", name); + continue; + } +@@ -793,7 +793,7 @@ static int enumerate_sysv(LookupPaths lp, Hashmap *all_services) { + return 0; + } + +-static int set_dependencies_from_rcnd(LookupPaths lp, Hashmap *all_services) { ++static int set_dependencies_from_rcnd(const LookupPaths *lp, Hashmap *all_services) { + char **p; + unsigned i; + _cleanup_closedir_ DIR *d = NULL; +@@ -804,7 +804,7 @@ static int set_dependencies_from_rcnd(LookupPaths lp, Hashmap *all_services) { + _cleanup_set_free_ Set *shutdown_services = NULL; + int r = 0; + +- STRV_FOREACH(p, lp.sysvrcnd_path) ++ STRV_FOREACH(p, lp->sysvrcnd_path) + for (i = 0; i < ELEMENTSOF(rcnd_table); i ++) { + struct dirent *de; + +@@ -954,13 +954,13 @@ int main(int argc, char *argv[]) { + return EXIT_FAILURE; + } + +- r = enumerate_sysv(lp, all_services); ++ r = enumerate_sysv(&lp, all_services); + if (r < 0) { + log_error("Failed to generate units for all init scripts."); + return EXIT_FAILURE; + } + +- r = set_dependencies_from_rcnd(lp, all_services); ++ r = set_dependencies_from_rcnd(&lp, all_services); + if (r < 0) { + log_error("Failed to read runlevels from rcnd links."); + return EXIT_FAILURE; diff --git a/SOURCES/0113-core-do-not-use-quotes-around-virt-and-arch.patch b/SOURCES/0113-core-do-not-use-quotes-around-virt-and-arch.patch new file mode 100644 index 0000000..af42855 --- /dev/null +++ b/SOURCES/0113-core-do-not-use-quotes-around-virt-and-arch.patch @@ -0,0 +1,31 @@ +From f7ef062a0fb0dd0a6560d00e579c496e164a1c85 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 14 Mar 2015 21:49:10 -0400 +Subject: [PATCH] core: do not use quotes around virt and arch + +Quotes are useful when the string can contain spaces or be otherwise +confusing. Not possible with those two. + +(cherry picked from commit d3f86679783aee216d60b125acfb5f39a0df555f) +--- + src/core/main.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/core/main.c b/src/core/main.c +index ba2de85..fd527d4 100644 +--- a/src/core/main.c ++++ b/src/core/main.c +@@ -1537,11 +1537,11 @@ int main(int argc, char *argv[]) { + + detect_virtualization(&virtualization); + if (virtualization) +- log_info("Detected virtualization '%s'.", virtualization); ++ log_info("Detected virtualization %s.", virtualization); + + write_container_id(); + +- log_info("Detected architecture '%s'.", architecture_to_string(uname_architecture())); ++ log_info("Detected architecture %s.", architecture_to_string(uname_architecture())); + + if (in_initrd()) + log_info("Running in initial RAM disk."); diff --git a/SOURCES/0113-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/SOURCES/0113-hwdb-Update-database-of-Bluetooth-company-identifier.patch deleted file mode 100644 index 0d0176a..0000000 --- a/SOURCES/0113-hwdb-Update-database-of-Bluetooth-company-identifier.patch +++ /dev/null @@ -1,147 +0,0 @@ -From 99e5a2d023c6651d76f5a5d36fa8b0400dd3720a Mon Sep 17 00:00:00 2001 -From: Marcel Holtmann -Date: Fri, 29 Nov 2013 07:26:47 -0800 -Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers - ---- - hwdb/20-bluetooth-vendor-product.hwdb | 109 +++++++++++++++++++++++++++++++++- - 1 file changed, 107 insertions(+), 2 deletions(-) - -diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb -index faecf42..dcc25bb 100644 ---- a/hwdb/20-bluetooth-vendor-product.hwdb -+++ b/hwdb/20-bluetooth-vendor-product.hwdb -@@ -366,6 +366,9 @@ bluetooth:v0077* - bluetooth:v0078* - ID_VENDOR_FROM_DATABASE=Nike, Inc. - -+bluetooth:v0078p0001* -+ ID_PRODUCT_FROM_DATABASE=Nike+ FuelBand -+ - bluetooth:v0079* - ID_VENDOR_FROM_DATABASE=lesswire AG - -@@ -457,7 +460,7 @@ bluetooth:v0096* - ID_VENDOR_FROM_DATABASE=ODM Technology, Inc. - - bluetooth:v0097* -- ID_VENDOR_FROM_DATABASE=Bluetrek Technologies Limited -+ ID_VENDOR_FROM_DATABASE=ConnecteDevice Ltd. - - bluetooth:v0098* - ID_VENDOR_FROM_DATABASE=zer01.tv GmbH -@@ -634,7 +637,7 @@ bluetooth:v00D2* - ID_VENDOR_FROM_DATABASE=Dialog Semiconductor B.V. - - bluetooth:v00D3* -- ID_VENDOR_FROM_DATABASE=Taixingbang Technology (HK) Co,. LTD. -+ ID_VENDOR_FROM_DATABASE=Taixingbang Technology (HK) Co,. LTD. - - bluetooth:v00D4* - ID_VENDOR_FROM_DATABASE=Kawantech -@@ -716,3 +719,105 @@ bluetooth:v00ED* - - bluetooth:v00EE* - ID_VENDOR_FROM_DATABASE=Above Average Outcomes, Inc. -+ -+bluetooth:v00EF* -+ ID_VENDOR_FROM_DATABASE=Bitsplitters GmbH -+ -+bluetooth:v00F0* -+ ID_VENDOR_FROM_DATABASE=PayPal, Inc. -+ -+bluetooth:v00F1* -+ ID_VENDOR_FROM_DATABASE=Witron Technology Limited -+ -+bluetooth:v00F2* -+ ID_VENDOR_FROM_DATABASE=Morse Project Inc. -+ -+bluetooth:v00F3* -+ ID_VENDOR_FROM_DATABASE=Kent Displays Inc. -+ -+bluetooth:v00F4* -+ ID_VENDOR_FROM_DATABASE=Nautilus Inc. -+ -+bluetooth:v00F5* -+ ID_VENDOR_FROM_DATABASE=Smartifier Oy -+ -+bluetooth:v00F6* -+ ID_VENDOR_FROM_DATABASE=Elcometer Limited -+ -+bluetooth:v00F7* -+ ID_VENDOR_FROM_DATABASE=VSN Technologies Inc. -+ -+bluetooth:v00F8* -+ ID_VENDOR_FROM_DATABASE=AceUni Corp., Ltd. -+ -+bluetooth:v00F9* -+ ID_VENDOR_FROM_DATABASE=StickNFind -+ -+bluetooth:v00FA* -+ ID_VENDOR_FROM_DATABASE=Crystal Code AB -+ -+bluetooth:v00FB* -+ ID_VENDOR_FROM_DATABASE=KOUKAAM a.s. -+ -+bluetooth:v00FC* -+ ID_VENDOR_FROM_DATABASE=Delphi Corporation -+ -+bluetooth:v00FD* -+ ID_VENDOR_FROM_DATABASE=ValenceTech Limited -+ -+bluetooth:v00FE* -+ ID_VENDOR_FROM_DATABASE=Reserved -+ -+bluetooth:v00FF* -+ ID_VENDOR_FROM_DATABASE=Typo Products, LLC -+ -+bluetooth:v0100* -+ ID_VENDOR_FROM_DATABASE=TomTom International BV -+ -+bluetooth:v0101* -+ ID_VENDOR_FROM_DATABASE=Fugoo, Inc -+ -+bluetooth:v0102* -+ ID_VENDOR_FROM_DATABASE=Keiser Corporation -+ -+bluetooth:v0103* -+ ID_VENDOR_FROM_DATABASE=Bang & Olufsen A/S -+ -+bluetooth:v0104* -+ ID_VENDOR_FROM_DATABASE=PLUS Locations Systems Pty Ltd -+ -+bluetooth:v0105* -+ ID_VENDOR_FROM_DATABASE=Ubiquitous Computing Technology Corporation -+ -+bluetooth:v0106* -+ ID_VENDOR_FROM_DATABASE=Innovative Yachtter Solutions -+ -+bluetooth:v0107* -+ ID_VENDOR_FROM_DATABASE=William Demant Holding A/S -+ -+bluetooth:v0108* -+ ID_VENDOR_FROM_DATABASE=Chicony Electronics Co., Ltd. -+ -+bluetooth:v0109* -+ ID_VENDOR_FROM_DATABASE=Atus BV -+ -+bluetooth:v010A* -+ ID_VENDOR_FROM_DATABASE=Codegate Ltd. -+ -+bluetooth:v010B* -+ ID_VENDOR_FROM_DATABASE=ERi, Inc. -+ -+bluetooth:v010C* -+ ID_VENDOR_FROM_DATABASE=Transducers Direct, LLC -+ -+bluetooth:v010D* -+ ID_VENDOR_FROM_DATABASE=Fujitsu Ten Limited -+ -+bluetooth:v010E* -+ ID_VENDOR_FROM_DATABASE=Audi AG -+ -+bluetooth:v010F* -+ ID_VENDOR_FROM_DATABASE=HiSilicon Technologies Co., Ltd. -+ -+bluetooth:v0110* -+ ID_VENDOR_FROM_DATABASE=Nippon Seiki Co., Ltd. diff --git a/SOURCES/0114-journal-fail-silently-in-sd_j_sendv-if-journal-is-un.patch b/SOURCES/0114-journal-fail-silently-in-sd_j_sendv-if-journal-is-un.patch deleted file mode 100644 index a164ad5..0000000 --- a/SOURCES/0114-journal-fail-silently-in-sd_j_sendv-if-journal-is-un.patch +++ /dev/null @@ -1,34 +0,0 @@ -From d57b2e82e42d68555c92da2b19e07dbfdd74ab12 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Tue, 3 Dec 2013 08:07:32 -0500 -Subject: [PATCH] journal: fail silently in sd_j_sendv() if journal is - unavailable - -"syslog(3) and sd_journal_print() may largely be used interchangeably -functionality-wise" according to sd_journal_print(3). This socket -should be always available except in rare circumstatances, and we -don't random applications to fail on logging, so let's do what syslog -did. The alternative of forcing all callers to do error handling for -this rare case doesn't really have any benefits, since if they can't -log there isn't much they can do anyway. - -https://bugzilla.redhat.com/show_bug.cgi?id=1023041 ---- - src/journal/journal-send.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/journal/journal-send.c b/src/journal/journal-send.c -index d00e26f..d99ff0c 100644 ---- a/src/journal/journal-send.c -+++ b/src/journal/journal-send.c -@@ -305,6 +305,10 @@ _public_ int sd_journal_sendv(const struct iovec *iov, int n) { - if (k >= 0) - return 0; - -+ /* Fail silently if the journal is not available */ -+ if (errno == ENOENT) -+ return 0; -+ - if (errno != EMSGSIZE && errno != ENOBUFS) - return -errno; - diff --git a/SOURCES/0114-udev-downgrade-has-devpath-and-filled-with-db-file-m.patch b/SOURCES/0114-udev-downgrade-has-devpath-and-filled-with-db-file-m.patch new file mode 100644 index 0000000..097bfce --- /dev/null +++ b/SOURCES/0114-udev-downgrade-has-devpath-and-filled-with-db-file-m.patch @@ -0,0 +1,37 @@ +From b69fafa98f1185c4e95c350aac833fdae7de0612 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 14 Mar 2015 22:22:49 -0400 +Subject: [PATCH] udev: downgrade "has devpath" and "filled with db file" + messages + +Udev debug messages have to be significantly overhauled... For now +just downgrade those two. They are responsible for approximately 25% +of debug output during boot and are rather useless. + +(cherry picked from commit cdd45c1ffbf790facd1817757832aa25d9211967) +--- + src/libudev/libudev-device.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c +index 9863901..e408942 100644 +--- a/src/libudev/libudev-device.c ++++ b/src/libudev/libudev-device.c +@@ -613,7 +613,7 @@ int udev_device_read_db(struct udev_device *udev_device, const char *dbfile) + } + fclose(f); + +- log_debug("device %p filled with db file data", udev_device); ++ log_trace("device %p filled with db file data", udev_device); + return 0; + } + +@@ -775,7 +775,7 @@ _public_ struct udev_device *udev_device_new_from_syspath(struct udev *udev, con + return NULL; + + udev_device_set_syspath(udev_device, path); +- log_debug("device %p has devpath '%s'", udev_device, udev_device_get_devpath(udev_device)); ++ log_trace("device %p has devpath '%s'", udev_device, udev_device_get_devpath(udev_device)); + + return udev_device; + } diff --git a/SOURCES/0115-Fix-memory-leak-in-stdout-journal-streams.patch b/SOURCES/0115-Fix-memory-leak-in-stdout-journal-streams.patch deleted file mode 100644 index 186952d..0000000 --- a/SOURCES/0115-Fix-memory-leak-in-stdout-journal-streams.patch +++ /dev/null @@ -1,23 +0,0 @@ -From ac67da03ebc56ab45b3fbb166fe961cb753d2777 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/SOURCES/0115-cryptsetup-generator-remove-warning-about-crypttab-a.patch b/SOURCES/0115-cryptsetup-generator-remove-warning-about-crypttab-a.patch new file mode 100644 index 0000000..c890cfb --- /dev/null +++ b/SOURCES/0115-cryptsetup-generator-remove-warning-about-crypttab-a.patch @@ -0,0 +1,36 @@ +From d066c82a5a5c63c50617be27409ae0bb4bd3a356 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 14 Mar 2015 22:35:30 -0400 +Subject: [PATCH] cryptsetup-generator: remove warning about crypttab access + mode +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This file contains no privileged data — just names of devices to decrypt +and files containing keys. On a running system most of this can be inferred from +the device tree anyway. + +(cherry picked from commit 71e4e1258436e7e81d772aed52a02bb5d9c87cb8) +--- + src/cryptsetup/cryptsetup-generator.c | 7 ------- + 1 file changed, 7 deletions(-) + +diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c +index dfbca87..d191def 100644 +--- a/src/cryptsetup/cryptsetup-generator.c ++++ b/src/cryptsetup/cryptsetup-generator.c +@@ -377,13 +377,6 @@ static int add_crypttab_devices(void) { + return 0; + } + +- /* If we readd support for specifying passphrases +- * directly in crypttab we should upgrade the warning +- * below, though possibly only if a passphrase is +- * specified directly. */ +- if (st.st_mode & 0005) +- log_debug("/etc/crypttab is world-readable. This is usually not a good idea."); +- + for (;;) { + int r, k; + char line[LINE_MAX], *l, *uuid; diff --git a/SOURCES/0116-man-document-is-enabled-output.patch b/SOURCES/0116-man-document-is-enabled-output.patch deleted file mode 100644 index f4c79d8..0000000 --- a/SOURCES/0116-man-document-is-enabled-output.patch +++ /dev/null @@ -1,92 +0,0 @@ -From ce006689117c3226ddb0eb5a1f8e5963cab1c92a 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/SOURCES/0116-sysctl-tweak-debug-message.patch b/SOURCES/0116-sysctl-tweak-debug-message.patch new file mode 100644 index 0000000..5dbbfcf --- /dev/null +++ b/SOURCES/0116-sysctl-tweak-debug-message.patch @@ -0,0 +1,23 @@ +From bea8dcb307f5978590d7371005eac46e20b29701 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 14 Mar 2015 22:56:01 -0400 +Subject: [PATCH] sysctl: tweak debug message + +(cherry picked from commit 924bc14fef39373f4523664207007a6c82c2b2d5) +--- + src/sysctl/sysctl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c +index b6945ed..4fb293b 100644 +--- a/src/sysctl/sysctl.c ++++ b/src/sysctl/sysctl.c +@@ -121,7 +121,7 @@ static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno + return log_error_errno(r, "Failed to open file '%s', ignoring: %m", path); + } + +- log_debug("parse: %s", path); ++ log_debug("Parsing %s", path); + while (!feof(f)) { + char l[LINE_MAX], *p, *value, *new_value, *property, *existing; + void *v; diff --git a/SOURCES/0117-hostnamed-avoid-using-NULL-in-error-path.patch b/SOURCES/0117-hostnamed-avoid-using-NULL-in-error-path.patch deleted file mode 100644 index 0833384..0000000 --- a/SOURCES/0117-hostnamed-avoid-using-NULL-in-error-path.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 7722552d5eade35dbb6c433e82774fcd2e157232 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/SOURCES/0117-journald-add-syslog-fields-for-audit-messages.patch b/SOURCES/0117-journald-add-syslog-fields-for-audit-messages.patch new file mode 100644 index 0000000..445441c --- /dev/null +++ b/SOURCES/0117-journald-add-syslog-fields-for-audit-messages.patch @@ -0,0 +1,39 @@ +From 5e565da856cf4cf919ed1045b01ab461c586395a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 4 Mar 2015 10:31:42 -0500 +Subject: [PATCH] journald: add syslog fields for audit messages + +Audit messages would be displayed as "unknown[1]". + +Also specify AUTH as facility... This seems to be the closest match +(/* security/authorization messages */). + +(cherry picked from commit cd556b6ca8aec8dd371806afedec45f852f8f724) +--- + src/journal/journald-audit.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/src/journal/journald-audit.c b/src/journal/journald-audit.c +index 151097a..77abe2e 100644 +--- a/src/journal/journald-audit.c ++++ b/src/journal/journald-audit.c +@@ -373,7 +373,7 @@ static void process_audit_string(Server *s, int type, const char *data, size_t s + if (isempty(p)) + return; + +- n_iov_allocated = N_IOVEC_META_FIELDS + 5; ++ n_iov_allocated = N_IOVEC_META_FIELDS + 7; + iov = new(struct iovec, n_iov_allocated); + if (!iov) { + log_oom(); +@@ -392,6 +392,10 @@ static void process_audit_string(Server *s, int type, const char *data, size_t s + sprintf(id_field, "_AUDIT_ID=%" PRIu64, id); + IOVEC_SET_STRING(iov[n_iov++], id_field); + ++ assert_cc(32 == LOG_AUTH); ++ IOVEC_SET_STRING(iov[n_iov++], "SYSLOG_FACILITY=32"); ++ IOVEC_SET_STRING(iov[n_iov++], "SYSLOG_IDENTIFIER=audit"); ++ + m = alloca(strlen("MESSAGE= ") + strlen(p) + 1); + sprintf(m, "MESSAGE= %s", type, p); + IOVEC_SET_STRING(iov[n_iov++], m); diff --git a/SOURCES/0118-core-do-not-segfault-if-swap-activity-happens-when-p.patch b/SOURCES/0118-core-do-not-segfault-if-swap-activity-happens-when-p.patch deleted file mode 100644 index 2e0f1ad..0000000 --- a/SOURCES/0118-core-do-not-segfault-if-swap-activity-happens-when-p.patch +++ /dev/null @@ -1,87 +0,0 @@ -From 80b37e95f732ab5de22fda0d8d14c7d58ac29877 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/SOURCES/0118-core-remove-useless-debug-message.patch b/SOURCES/0118-core-remove-useless-debug-message.patch new file mode 100644 index 0000000..6b942f2 --- /dev/null +++ b/SOURCES/0118-core-remove-useless-debug-message.patch @@ -0,0 +1,32 @@ +From 5efee680aa8f55c825be62e2e714f88d5c88066b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 15 Mar 2015 12:12:19 -0400 +Subject: [PATCH] core: remove useless debug message + +Mar 13 19:48:28 adam.happyassassin.net systemd[1]: Collecting (null) +Mar 13 19:48:28 adam.happyassassin.net systemd[1]: Collecting (null) +Mar 13 19:48:28 adam.happyassassin.net systemd[1]: Collecting (null) +Mar 13 19:48:28 adam.happyassassin.net systemd[1]: Collecting (null) +Mar 13 19:48:28 adam.happyassassin.net systemd[1]: Collecting (null) +Mar 13 19:48:28 adam.happyassassin.net systemd[1]: Collecting (null) +Mar 13 19:48:28 adam.happyassassin.net systemd[1]: Collecting (null) + +(cherry picked from commit cc3bc3e6203e0c615e31b8b68796362e1385f28a) +--- + src/core/manager.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/core/manager.c b/src/core/manager.c +index 203a6a0..7483a96 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -844,7 +844,8 @@ static unsigned manager_dispatch_gc_queue(Manager *m) { + + if (u->gc_marker == gc_marker + GC_OFFSET_BAD || + u->gc_marker == gc_marker + GC_OFFSET_UNSURE) { +- log_unit_debug(u->id, "Collecting %s", u->id); ++ if (u->id) ++ log_unit_debug(u->id, "Collecting %s", u->id); + u->gc_marker = gc_marker + GC_OFFSET_BAD; + unit_add_to_cleanup_queue(u); + } diff --git a/SOURCES/0119-kernel-install-add-h-help.patch b/SOURCES/0119-kernel-install-add-h-help.patch deleted file mode 100644 index 43f033b..0000000 --- a/SOURCES/0119-kernel-install-add-h-help.patch +++ /dev/null @@ -1,69 +0,0 @@ -From ced01b28f5e44cc708ae7af681919e4dc83da169 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/SOURCES/0119-man-standard-conf-change-directory-reference-to-wild.patch b/SOURCES/0119-man-standard-conf-change-directory-reference-to-wild.patch new file mode 100644 index 0000000..ec222e8 --- /dev/null +++ b/SOURCES/0119-man-standard-conf-change-directory-reference-to-wild.patch @@ -0,0 +1,23 @@ +From 6cf5c5d46e6eb06411dd8b180d3f1b3de1f93652 Mon Sep 17 00:00:00 2001 +From: Alison Chaiken +Date: Sun, 15 Mar 2015 16:26:14 -0700 +Subject: [PATCH] man: standard-conf: change directory reference to wildcard + +(cherry picked from commit 1d940aa32913c108e0282ebd359b2eb999ffeadf) +--- + man/standard-conf.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/standard-conf.xml b/man/standard-conf.xml +index 36af459..004f53f 100644 +--- a/man/standard-conf.xml ++++ b/man/standard-conf.xml +@@ -54,7 +54,7 @@ + directories, and has the lowest precedence; entries in a file in + any configuration directory override entries in the single + configuration file. Files in the +- logind.conf.d/ configuration subdirectories ++ *.conf.d/ configuration subdirectories + are sorted by their filename in lexicographic order, regardless of + which of the subdirectories they reside in. If multiple files + specify the same option, the entry in the file with the diff --git a/SOURCES/0120-core-don-t-change-removed-devices-to-state-tentative.patch b/SOURCES/0120-core-don-t-change-removed-devices-to-state-tentative.patch new file mode 100644 index 0000000..9a27748 --- /dev/null +++ b/SOURCES/0120-core-don-t-change-removed-devices-to-state-tentative.patch @@ -0,0 +1,33 @@ +From 8e184ad6e23a8248e149cd5bf4f9bf56089a6dd1 Mon Sep 17 00:00:00 2001 +From: Martin Pitt +Date: Fri, 13 Mar 2015 08:35:59 +0100 +Subject: [PATCH] core: don't change removed devices to state "tentative" + +Commit 628c89c introduced the "tentative" device state, which caused +devices to go from "plugged" to "tentative" on a remove uevent. This +breaks the cleanup of stale mounts (see commit 3b48ce4), as that only +applies to "dead" devices. + +The "tentative" state only really makes sense on adding a device when +we don't know where it was coming from (i. e. not from udev). But when +we get a device removal from udev we definitively know that it's gone, +so change the device state back to "dead" as before 628c89c. + +(cherry picked from commit 496068a8288084ab3ecf8b179a8403ecff1a6be8) +--- + src/core/device.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/device.c b/src/core/device.c +index 4ff8827..cc4ebd2 100644 +--- a/src/core/device.c ++++ b/src/core/device.c +@@ -421,7 +421,7 @@ static void device_update_found_one(Device *d, bool add, DeviceFound found, bool + if (now) { + if (d->found & DEVICE_FOUND_UDEV) + device_set_state(d, DEVICE_PLUGGED); +- else if (d->found != DEVICE_NOT_FOUND) ++ else if (add && d->found != DEVICE_NOT_FOUND) + device_set_state(d, DEVICE_TENTATIVE); + else + device_set_state(d, DEVICE_DEAD); diff --git a/SOURCES/0120-kernel-install-fix-help-output.patch b/SOURCES/0120-kernel-install-fix-help-output.patch deleted file mode 100644 index 5fb2323..0000000 --- a/SOURCES/0120-kernel-install-fix-help-output.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 13279ea569e963ac8cd7062a33108c209b9e2308 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/SOURCES/0121-fstab-generator-ignore-invalid-swap-priority.patch b/SOURCES/0121-fstab-generator-ignore-invalid-swap-priority.patch new file mode 100644 index 0000000..92e32d5 --- /dev/null +++ b/SOURCES/0121-fstab-generator-ignore-invalid-swap-priority.patch @@ -0,0 +1,75 @@ +From e819659256d139cd5faebb5c0ca3ad4ad95ccb27 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 21 Mar 2015 11:31:16 -0400 +Subject: [PATCH] fstab-generator: ignore invalid swap priority + +A failed priority is not something worth stopping boot over. Most people +have only one swap device, in which case priority is irrelevant, and even +if there is more than one swap device, they are all usable, and ignoring the +priority field should only result in some loss of performance. + +The kernel will report the priority as -1 if not set, so it's easy for +people to make this mistake. + +https://bugzilla.redhat.com/show_bug.cgi?id=1204336 +(cherry picked from commit e0952d9d021234e79f3a70f33a9e5d201872a417) +--- + src/fstab-generator/fstab-generator.c | 23 ++++++++++++++++------- + 1 file changed, 16 insertions(+), 7 deletions(-) + +diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c +index 5662b5f..8e2f522 100644 +--- a/src/fstab-generator/fstab-generator.c ++++ b/src/fstab-generator/fstab-generator.c +@@ -54,9 +54,10 @@ static int add_swap( + bool noauto, + bool nofail) { + +- _cleanup_free_ char *name = NULL, *unit = NULL, *lnk = NULL; ++ _cleanup_free_ char *name = NULL, *unit = NULL, *lnk = NULL, *filtered = NULL; + _cleanup_fclose_ FILE *f = NULL; + int r, pri = -1; ++ const char *opts; + + assert(what); + assert(me); +@@ -71,9 +72,17 @@ static int add_swap( + return 0; + } + +- r = fstab_find_pri(me->mnt_opts, &pri); +- if (r < 0) +- return log_error_errno(r, "Failed to parse priority: %m"); ++ opts = me->mnt_opts; ++ r = fstab_find_pri(opts, &pri); ++ if (r < 0) { ++ log_error_errno(r, "Failed to parse priority, ignoring: %m"); ++ ++ /* Remove invalid pri field */ ++ r = fstab_filter_options(opts, "pri\0", NULL, NULL, &filtered); ++ if (r < 0) ++ return log_error_errno(r, "Failed to parse options: %m"); ++ opts = filtered; ++ } + + name = unit_name_from_path(what, ".swap"); + if (!name) +@@ -106,15 +115,15 @@ static int add_swap( + if (pri >= 0) + fprintf(f, "Priority=%i\n", pri); + +- if (!isempty(me->mnt_opts) && !streq(me->mnt_opts, "defaults")) +- fprintf(f, "Options=%s\n", me->mnt_opts); ++ if (!isempty(opts) && !streq(opts, "defaults")) ++ fprintf(f, "Options=%s\n", opts); + + r = fflush_and_check(f); + if (r < 0) + return log_error_errno(r, "Failed to write unit file %s: %m", unit); + + /* use what as where, to have a nicer error message */ +- r = generator_write_timeouts(arg_dest, what, what, me->mnt_opts, NULL); ++ r = generator_write_timeouts(arg_dest, what, what, opts, NULL); + if (r < 0) + return r; + diff --git a/SOURCES/0121-man-improve-wording-and-comma-usage-in-systemd.journ.patch b/SOURCES/0121-man-improve-wording-and-comma-usage-in-systemd.journ.patch deleted file mode 100644 index 5eb475b..0000000 --- a/SOURCES/0121-man-improve-wording-and-comma-usage-in-systemd.journ.patch +++ /dev/null @@ -1,67 +0,0 @@ -From 4984e8c420d3e091d5e42094bbf5e38721702dad 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/SOURCES/0122-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch b/SOURCES/0122-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch deleted file mode 100644 index 1d3fb33..0000000 --- a/SOURCES/0122-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch +++ /dev/null @@ -1,84 +0,0 @@ -From b39fc4c896dffbe14d14b17dab68961027194856 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/SOURCES/0122-missing.h-add-more-btrfs-types-and-defines.patch b/SOURCES/0122-missing.h-add-more-btrfs-types-and-defines.patch new file mode 100644 index 0000000..4234833 --- /dev/null +++ b/SOURCES/0122-missing.h-add-more-btrfs-types-and-defines.patch @@ -0,0 +1,192 @@ +From cb18a928a4db39a0eac1ab1fda1c80fd4cc4e22b Mon Sep 17 00:00:00 2001 +From: Michael Olbrich +Date: Wed, 18 Mar 2015 14:04:55 +0100 +Subject: [PATCH] missing.h: add more btrfs types and defines + +(cherry picked from commit 8e8ba79229bb82248a568f5929143a66f4be45b7) +--- + src/shared/missing.h | 151 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 151 insertions(+) + +diff --git a/src/shared/missing.h b/src/shared/missing.h +index 6ef4dbd..4b36a9c 100644 +--- a/src/shared/missing.h ++++ b/src/shared/missing.h +@@ -294,12 +294,59 @@ static inline int getrandom(void *buffer, size_t count, unsigned flags) { + #define BTRFS_UUID_SIZE 16 + #endif + ++#ifndef BTRFS_SUBVOL_RDONLY ++#define BTRFS_SUBVOL_RDONLY (1ULL << 1) ++#endif ++ ++#ifndef BTRFS_SUBVOL_NAME_MAX ++#define BTRFS_SUBVOL_NAME_MAX 4039 ++#endif ++ ++#ifndef BTRFS_INO_LOOKUP_PATH_MAX ++#define BTRFS_INO_LOOKUP_PATH_MAX 4080 ++#endif ++ ++#ifndef BTRFS_SEARCH_ARGS_BUFSIZE ++#define BTRFS_SEARCH_ARGS_BUFSIZE (4096 - sizeof(struct btrfs_ioctl_search_key)) ++#endif ++ + #ifndef HAVE_LINUX_BTRFS_H + struct btrfs_ioctl_vol_args { + int64_t fd; + char name[BTRFS_PATH_NAME_MAX + 1]; + }; + ++struct btrfs_qgroup_limit { ++ __u64 flags; ++ __u64 max_rfer; ++ __u64 max_excl; ++ __u64 rsv_rfer; ++ __u64 rsv_excl; ++}; ++ ++struct btrfs_qgroup_inherit { ++ __u64 flags; ++ __u64 num_qgroups; ++ __u64 num_ref_copies; ++ __u64 num_excl_copies; ++ struct btrfs_qgroup_limit lim; ++ __u64 qgroups[0]; ++}; ++ ++struct btrfs_ioctl_vol_args_v2 { ++ __s64 fd; ++ __u64 transid; ++ __u64 flags; ++ union { ++ struct { ++ __u64 size; ++ struct btrfs_qgroup_inherit *qgroup_inherit; ++ }; ++ __u64 unused[4]; ++ }; ++ char name[BTRFS_SUBVOL_NAME_MAX + 1]; ++}; ++ + struct btrfs_ioctl_dev_info_args { + uint64_t devid; /* in/out */ + uint8_t uuid[BTRFS_UUID_SIZE]; /* in/out */ +@@ -315,6 +362,68 @@ struct btrfs_ioctl_fs_info_args { + uint8_t fsid[BTRFS_FSID_SIZE]; /* out */ + uint64_t reserved[124]; /* pad to 1k */ + }; ++ ++struct btrfs_ioctl_ino_lookup_args { ++ __u64 treeid; ++ __u64 objectid; ++ char name[BTRFS_INO_LOOKUP_PATH_MAX]; ++}; ++ ++struct btrfs_ioctl_search_key { ++ /* which root are we searching. 0 is the tree of tree roots */ ++ __u64 tree_id; ++ ++ /* keys returned will be >= min and <= max */ ++ __u64 min_objectid; ++ __u64 max_objectid; ++ ++ /* keys returned will be >= min and <= max */ ++ __u64 min_offset; ++ __u64 max_offset; ++ ++ /* max and min transids to search for */ ++ __u64 min_transid; ++ __u64 max_transid; ++ ++ /* keys returned will be >= min and <= max */ ++ __u32 min_type; ++ __u32 max_type; ++ ++ /* ++ * how many items did userland ask for, and how many are we ++ * returning ++ */ ++ __u32 nr_items; ++ ++ /* align to 64 bits */ ++ __u32 unused; ++ ++ /* some extra for later */ ++ __u64 unused1; ++ __u64 unused2; ++ __u64 unused3; ++ __u64 unused4; ++}; ++ ++struct btrfs_ioctl_search_header { ++ __u64 transid; ++ __u64 objectid; ++ __u64 offset; ++ __u32 type; ++ __u32 len; ++}; ++ ++ ++struct btrfs_ioctl_search_args { ++ struct btrfs_ioctl_search_key key; ++ char buf[BTRFS_SEARCH_ARGS_BUFSIZE]; ++}; ++ ++struct btrfs_ioctl_clone_range_args { ++ __s64 src_fd; ++ __u64 src_offset, src_length; ++ __u64 dest_offset; ++}; + #endif + + #ifndef BTRFS_IOC_DEFRAG +@@ -322,6 +431,48 @@ struct btrfs_ioctl_fs_info_args { + struct btrfs_ioctl_vol_args) + #endif + ++#ifndef BTRFS_IOC_CLONE ++#define BTRFS_IOC_CLONE _IOW(BTRFS_IOCTL_MAGIC, 9, int) ++#endif ++ ++#ifndef BTRFS_IOC_CLONE_RANGE ++#define BTRFS_IOC_CLONE_RANGE _IOW(BTRFS_IOCTL_MAGIC, 13, \ ++ struct btrfs_ioctl_clone_range_args) ++#endif ++ ++#ifndef BTRFS_IOC_SUBVOL_CREATE ++#define BTRFS_IOC_SUBVOL_CREATE _IOW(BTRFS_IOCTL_MAGIC, 14, \ ++ struct btrfs_ioctl_vol_args) ++#endif ++ ++#ifndef BTRFS_IOC_SNAP_DESTROY ++#define BTRFS_IOC_SNAP_DESTROY _IOW(BTRFS_IOCTL_MAGIC, 15, \ ++ struct btrfs_ioctl_vol_args) ++#endif ++ ++#ifndef BTRFS_IOC_TREE_SEARCH ++#define BTRFS_IOC_TREE_SEARCH _IOWR(BTRFS_IOCTL_MAGIC, 17, \ ++ struct btrfs_ioctl_search_args) ++#endif ++ ++#ifndef BTRFS_IOC_INO_LOOKUP ++#define BTRFS_IOC_INO_LOOKUP _IOWR(BTRFS_IOCTL_MAGIC, 18, \ ++ struct btrfs_ioctl_ino_lookup_args) ++#endif ++ ++#ifndef BTRFS_IOC_SNAP_CREATE_V2 ++#define BTRFS_IOC_SNAP_CREATE_V2 _IOW(BTRFS_IOCTL_MAGIC, 23, \ ++ struct btrfs_ioctl_vol_args_v2) ++#endif ++ ++#ifndef BTRFS_IOC_SUBVOL_GETFLAGS ++#define BTRFS_IOC_SUBVOL_GETFLAGS _IOR(BTRFS_IOCTL_MAGIC, 25, __u64) ++#endif ++ ++#ifndef BTRFS_IOC_SUBVOL_SETFLAGS ++#define BTRFS_IOC_SUBVOL_SETFLAGS _IOW(BTRFS_IOCTL_MAGIC, 26, __u64) ++#endif ++ + #ifndef BTRFS_IOC_DEV_INFO + #define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \ + struct btrfs_ioctl_dev_info_args) diff --git a/SOURCES/0123-build-sys-add-configure-option-to-disableLTO-gold.patch b/SOURCES/0123-build-sys-add-configure-option-to-disableLTO-gold.patch new file mode 100644 index 0000000..d8e104b --- /dev/null +++ b/SOURCES/0123-build-sys-add-configure-option-to-disableLTO-gold.patch @@ -0,0 +1,42 @@ +From 2d5ee8de927f69784d8380c24ca5505b3f6e7672 Mon Sep 17 00:00:00 2001 +From: systemd team +Date: Tue, 14 Apr 2015 15:00:06 +0200 +Subject: [PATCH] build-sys: add configure option to disableLTO/gold + +--- + configure.ac | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 081ed0f..9103f9b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -208,10 +208,15 @@ AS_CASE([$CC], [*clang*], + -Wno-gnu-variable-sized-type-not-at-end \ + ])]) + +-AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*], +- [CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\ +- -flto -ffat-lto-objects])], +- [AC_MSG_RESULT([skipping -flto, optimization not enabled])]) ++AC_ARG_ENABLE([lto], AS_HELP_STRING([--disable-lto], [Disable Link time optimization])) ++AS_IF([test "x$enable_lto" != "xno"], [ ++AS_CASE([$CFLAGS], [*-O[[12345\ ]]*], [ ++ CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [-flto -ffat-lto-objects]) ++ CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS],[-Wl,-fuse-ld=gold]) ++ ], ++[AC_MSG_RESULT([skipping -flto, optimization not enabled])]) ++]) ++ + AC_SUBST([OUR_CFLAGS], "$with_cflags $sanitizer_cflags") + + AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*], +@@ -227,7 +232,7 @@ CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [\ + -Wl,-z,relro \ + -Wl,-z,now \ + -pie \ +- -Wl,-fuse-ld=gold]) ++ ]) + AC_SUBST([OUR_LDFLAGS], "$with_ldflags $sanitizer_ldflags") + + AC_CHECK_SIZEOF(pid_t) diff --git a/SOURCES/0123-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch b/SOURCES/0123-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch deleted file mode 100644 index b7509f7..0000000 --- a/SOURCES/0123-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch +++ /dev/null @@ -1,22 +0,0 @@ -From ccc70cad7ae319fcff491bbd657b2ff06d4d3ee8 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/SOURCES/0124-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/SOURCES/0124-hwdb-Update-database-of-Bluetooth-company-identifier.patch deleted file mode 100644 index fba8d02..0000000 --- a/SOURCES/0124-hwdb-Update-database-of-Bluetooth-company-identifier.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 3ec8c3972d2a93027ce2b07a22b3ee8fdfb447cc 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/SOURCES/0124-rules-bring-back-80-net-name-slot.rules.patch b/SOURCES/0124-rules-bring-back-80-net-name-slot.rules.patch new file mode 100644 index 0000000..2da57cf --- /dev/null +++ b/SOURCES/0124-rules-bring-back-80-net-name-slot.rules.patch @@ -0,0 +1,45 @@ +From 434e13b009b4bd829c4ac827bdb53e3df61e5a6f Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Tue, 14 Apr 2015 17:11:48 +0200 +Subject: [PATCH] rules: bring back 80-net-name-slot.rules + +--- + Makefile.am | 3 ++- + rules/80-net-name-slot.rules | 14 ++++++++++++++ + 2 files changed, 16 insertions(+), 1 deletion(-) + create mode 100644 rules/80-net-name-slot.rules + +diff --git a/Makefile.am b/Makefile.am +index 4933f76..bec32c3 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -3570,7 +3570,8 @@ dist_udevrules_DATA += \ + rules/80-net-setup-link.rules \ + rules/95-udev-late.rules \ + rules/40-redhat.rules \ +- rules/73-idrac.rules ++ rules/73-idrac.rules \ ++ rules/80-net-name-slot.rules + + nodist_udevrules_DATA += \ + rules/99-systemd.rules +diff --git a/rules/80-net-name-slot.rules b/rules/80-net-name-slot.rules +new file mode 100644 +index 0000000..c5f1b38 +--- /dev/null ++++ b/rules/80-net-name-slot.rules +@@ -0,0 +1,14 @@ ++# do not edit this file, it will be overwritten on update ++ ++ACTION!="add", GOTO="net_name_slot_end" ++SUBSYSTEM!="net", GOTO="net_name_slot_end" ++NAME!="", GOTO="net_name_slot_end" ++ ++IMPORT{cmdline}="net.ifnames" ++ENV{net.ifnames}=="0", GOTO="net_name_slot_end" ++ ++NAME=="", ENV{ID_NET_NAME_ONBOARD}!="", NAME="$env{ID_NET_NAME_ONBOARD}" ++NAME=="", ENV{ID_NET_NAME_SLOT}!="", NAME="$env{ID_NET_NAME_SLOT}" ++NAME=="", ENV{ID_NET_NAME_PATH}!="", NAME="$env{ID_NET_NAME_PATH}" ++ ++LABEL="net_name_slot_end" diff --git a/SOURCES/0125-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch b/SOURCES/0125-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch deleted file mode 100644 index 1c804b0..0000000 --- a/SOURCES/0125-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 3bdb6f693180ae6a64af158ddf23fb1335380e48 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/SOURCES/0125-Revert-journald-allow-restarting-journald-without-lo.patch b/SOURCES/0125-Revert-journald-allow-restarting-journald-without-lo.patch new file mode 100644 index 0000000..d6f9ac8 --- /dev/null +++ b/SOURCES/0125-Revert-journald-allow-restarting-journald-without-lo.patch @@ -0,0 +1,564 @@ +From 91cb89c1b79ef3c475d91319edb0c052cb9f2724 Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Wed, 15 Apr 2015 13:52:02 +0200 +Subject: [PATCH] Revert "journald: allow restarting journald without losing + stream connections" + +This reverts commit 13790add4bf648fed816361794d8277a75253410. +--- + src/journal/journald-server.c | 26 +-- + src/journal/journald-stream.c | 376 ++++++-------------------------------- + src/journal/journald-stream.h | 3 +- + units/systemd-journald.service.in | 1 - + 4 files changed, 61 insertions(+), 345 deletions(-) + +diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c +index 7ee8174..04839c9 100644 +--- a/src/journal/journald-server.c ++++ b/src/journal/journald-server.c +@@ -1455,7 +1455,6 @@ static int server_open_hostname(Server *s) { + } + + int server_init(Server *s) { +- _cleanup_fdset_free_ FDSet *fds = NULL; + int n, r, fd; + + assert(s); +@@ -1552,33 +1551,26 @@ int server_init(Server *s) { + s->audit_fd = fd; + + } else { ++ log_warning("Unknown socket passed as file descriptor %d, ignoring.", fd); + +- if (!fds) { +- fds = fdset_new(); +- if (!fds) +- return log_oom(); +- } ++ /* Let's close the fd, better be safe than ++ sorry. The fd might reference some resource ++ that we really want to release if we don't ++ make use of it. */ + +- r = fdset_put(fds, fd); +- if (r < 0) +- return log_oom(); ++ safe_close(fd); + } + } + +- r = server_open_stdout_socket(s, fds); ++ r = server_open_syslog_socket(s); + if (r < 0) + return r; + +- if (fdset_size(fds) > 0) { +- log_warning("%u unknown file descriptors passed, closing.", fdset_size(fds)); +- fds = fdset_free(fds); +- } +- +- r = server_open_syslog_socket(s); ++ r = server_open_native_socket(s); + if (r < 0) + return r; + +- r = server_open_native_socket(s); ++ r = server_open_stdout_socket(s); + if (r < 0) + return r; + +diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c +index 942a857..11b852d 100644 +--- a/src/journal/journald-stream.c ++++ b/src/journal/journald-stream.c +@@ -28,11 +28,8 @@ + #endif + + #include "sd-event.h" +-#include "sd-daemon.h" + #include "socket-util.h" + #include "selinux-util.h" +-#include "mkdir.h" +-#include "fileio.h" + #include "journald-server.h" + #include "journald-stream.h" + #include "journald-syslog.h" +@@ -72,153 +69,14 @@ struct StdoutStream { + bool forward_to_kmsg:1; + bool forward_to_console:1; + +- bool fdstore:1; +- + char buffer[LINE_MAX+1]; + size_t length; + + sd_event_source *event_source; + +- char *state_file; +- + LIST_FIELDS(StdoutStream, stdout_stream); + }; + +-void stdout_stream_free(StdoutStream *s) { +- if (!s) +- return; +- +- if (s->server) { +- assert(s->server->n_stdout_streams > 0); +- s->server->n_stdout_streams --; +- LIST_REMOVE(stdout_stream, s->server->stdout_streams, s); +- } +- +- if (s->event_source) { +- sd_event_source_set_enabled(s->event_source, SD_EVENT_OFF); +- s->event_source = sd_event_source_unref(s->event_source); +- } +- +- safe_close(s->fd); +- +-#ifdef HAVE_SELINUX +- if (s->security_context) +- freecon(s->security_context); +-#endif +- +- free(s->identifier); +- free(s->unit_id); +- free(s->state_file); +- +- free(s); +-} +- +-DEFINE_TRIVIAL_CLEANUP_FUNC(StdoutStream*, stdout_stream_free); +- +-static void stdout_stream_destroy(StdoutStream *s) { +- if (!s) +- return; +- +- if (s->state_file) +- unlink(s->state_file); +- +- stdout_stream_free(s); +-} +- +-static int stdout_stream_save(StdoutStream *s) { +- _cleanup_free_ char *temp_path = NULL; +- _cleanup_fclose_ FILE *f = NULL; +- int r; +- +- assert(s); +- +- if (s->state != STDOUT_STREAM_RUNNING) +- return 0; +- +- if (!s->state_file) { +- struct stat st; +- +- r = fstat(s->fd, &st); +- if (r < 0) +- return log_warning_errno(errno, "Failed to stat connected stream: %m"); +- +- /* We use device and inode numbers as identifier for the stream */ +- if (asprintf(&s->state_file, "/run/systemd/journal/streams/%lu:%lu", (unsigned long) st.st_dev, (unsigned long) st.st_ino) < 0) +- return log_oom(); +- } +- +- mkdir_p("/run/systemd/journal/streams", 0755); +- +- r = fopen_temporary(s->state_file, &f, &temp_path); +- if (r < 0) +- goto finish; +- +- fprintf(f, +- "# This is private data. Do not parse\n" +- "PRIORITY=%i\n" +- "LEVEL_PREFIX=%i\n" +- "FORWARD_TO_SYSLOG=%i\n" +- "FORWARD_TO_KMSG=%i\n" +- "FORWARD_TO_CONSOLE=%i\n", +- s->priority, +- s->level_prefix, +- s->forward_to_syslog, +- s->forward_to_kmsg, +- s->forward_to_console); +- +- if (!isempty(s->identifier)) { +- _cleanup_free_ char *escaped; +- +- escaped = cescape(s->identifier); +- if (!escaped) { +- r = -ENOMEM; +- goto finish; +- } +- +- fprintf(f, "IDENTIFIER=%s\n", escaped); +- } +- +- if (!isempty(s->unit_id)) { +- _cleanup_free_ char *escaped; +- +- escaped = cescape(s->unit_id); +- if (!escaped) { +- r = -ENOMEM; +- goto finish; +- } +- +- fprintf(f, "UNIT=%s\n", escaped); +- } +- +- r = fflush_and_check(f); +- if (r < 0) +- goto finish; +- +- if (rename(temp_path, s->state_file) < 0) { +- r = -errno; +- goto finish; +- } +- +- free(temp_path); +- temp_path = NULL; +- +- /* Store the connection fd in PID 1, so that we get it passed +- * in again on next start */ +- if (!s->fdstore) { +- sd_pid_notify_with_fds(0, false, "FDSTORE=1", &s->fd, 1); +- s->fdstore = true; +- } +- +-finish: +- if (temp_path) +- unlink(temp_path); +- +- if (r < 0) +- log_error_errno(r, "Failed to save stream data %s: %m", s->state_file); +- +- return r; +-} +- + static int stdout_stream_log(StdoutStream *s, const char *p) { + struct iovec iovec[N_IOVEC_META_FIELDS + 5]; + int priority; +@@ -371,9 +229,6 @@ static int stdout_stream_line(StdoutStream *s, char *p) { + + s->forward_to_console = !!r; + s->state = STDOUT_STREAM_RUNNING; +- +- /* Try to save the stream, so that journald can be restarted and we can recover */ +- (void) stdout_stream_save(s); + return 0; + + case STDOUT_STREAM_RUNNING: +@@ -468,63 +323,40 @@ static int stdout_stream_process(sd_event_source *es, int fd, uint32_t revents, + return 1; + + terminate: +- stdout_stream_destroy(s); ++ stdout_stream_free(s); + return 0; + } + +-static int stdout_stream_install(Server *s, int fd, StdoutStream **ret) { +- _cleanup_(stdout_stream_freep) StdoutStream *stream = NULL; +- int r; +- ++void stdout_stream_free(StdoutStream *s) { + assert(s); +- assert(fd >= 0); + +- stream = new0(StdoutStream, 1); +- if (!stream) +- return log_oom(); ++ if (s->server) { ++ assert(s->server->n_stdout_streams > 0); ++ s->server->n_stdout_streams --; ++ LIST_REMOVE(stdout_stream, s->server->stdout_streams, s); ++ } + +- stream->fd = -1; +- stream->priority = LOG_INFO; ++ if (s->event_source) { ++ sd_event_source_set_enabled(s->event_source, SD_EVENT_OFF); ++ s->event_source = sd_event_source_unref(s->event_source); ++ } + +- r = getpeercred(fd, &stream->ucred); +- if (r < 0) +- return log_error_errno(r, "Failed to determine peer credentials: %m"); ++ safe_close(s->fd); + + #ifdef HAVE_SELINUX +- if (mac_selinux_use()) { +- if (getpeercon(fd, &stream->security_context) < 0 && errno != ENOPROTOOPT) +- log_error_errno(errno, "Failed to determine peer security context: %m"); +- } ++ if (s->security_context) ++ freecon(s->security_context); + #endif + +- (void) shutdown(fd, SHUT_WR); +- +- r = sd_event_add_io(s->event, &stream->event_source, fd, EPOLLIN, stdout_stream_process, stream); +- if (r < 0) +- return log_error_errno(r, "Failed to add stream to event loop: %m"); +- +- r = sd_event_source_set_priority(stream->event_source, SD_EVENT_PRIORITY_NORMAL+5); +- if (r < 0) +- return log_error_errno(r, "Failed to adjust stdout event source priority: %m"); +- +- stream->fd = fd; +- +- stream->server = s; +- LIST_PREPEND(stdout_stream, s->stdout_streams, stream); +- s->n_stdout_streams ++; +- +- if (ret) +- *ret = stream; +- +- stream = NULL; +- +- return 0; ++ free(s->identifier); ++ free(s->unit_id); ++ free(s); + } + + static int stdout_stream_new(sd_event_source *es, int listen_fd, uint32_t revents, void *userdata) { +- _cleanup_close_ int fd = -1; + Server *s = userdata; +- int r; ++ StdoutStream *stream; ++ int fd, r; + + assert(s); + +@@ -544,163 +376,60 @@ static int stdout_stream_new(sd_event_source *es, int listen_fd, uint32_t revent + + if (s->n_stdout_streams >= STDOUT_STREAMS_MAX) { + log_warning("Too many stdout streams, refusing connection."); ++ safe_close(fd); + return 0; + } + +- r = stdout_stream_install(s, fd, NULL); +- if (r < 0) +- return r; +- +- fd = -1; +- return 0; +-} +- +-static int stdout_stream_load(StdoutStream *stream, const char *fname) { +- _cleanup_free_ char +- *priority = NULL, +- *level_prefix = NULL, +- *forward_to_syslog = NULL, +- *forward_to_kmsg = NULL, +- *forward_to_console = NULL; +- int r; +- +- assert(stream); +- assert(fname); +- +- if (!stream->state_file) { +- stream->state_file = strappend("/run/systemd/journal/streams/", fname); +- if (!stream->state_file) +- return log_oom(); +- } +- +- r = parse_env_file(stream->state_file, NEWLINE, +- "PRIORITY", &priority, +- "LEVEL_PREFIX", &level_prefix, +- "FORWARD_TO_SYSLOG", &forward_to_syslog, +- "FORWARD_TO_KMSG", &forward_to_kmsg, +- "FORWARD_TO_CONSOLE", &forward_to_console, +- "IDENTIFIER", &stream->identifier, +- "UNIT", &stream->unit_id, +- NULL); +- if (r < 0) +- return log_error_errno(r, "Failed to read: %s", stream->state_file); +- +- if (priority) { +- int p; +- +- p = log_level_from_string(priority); +- if (p >= 0) +- stream->priority = p; ++ stream = new0(StdoutStream, 1); ++ if (!stream) { ++ safe_close(fd); ++ return log_oom(); + } + +- if (level_prefix) { +- r = parse_boolean(level_prefix); +- if (r >= 0) +- stream->level_prefix = r; +- } ++ stream->fd = fd; + +- if (forward_to_syslog) { +- r = parse_boolean(forward_to_syslog); +- if (r >= 0) +- stream->forward_to_syslog = r; ++ r = getpeercred(fd, &stream->ucred); ++ if (r < 0) { ++ log_error_errno(errno, "Failed to determine peer credentials: %m"); ++ goto fail; + } + +- if (forward_to_kmsg) { +- r = parse_boolean(forward_to_kmsg); +- if (r >= 0) +- stream->forward_to_kmsg = r; ++#ifdef HAVE_SELINUX ++ if (mac_selinux_use()) { ++ if (getpeercon(fd, &stream->security_context) < 0 && errno != ENOPROTOOPT) ++ log_error_errno(errno, "Failed to determine peer security context: %m"); + } ++#endif + +- if (forward_to_console) { +- r = parse_boolean(forward_to_console); +- if (r >= 0) +- stream->forward_to_console = r; ++ if (shutdown(fd, SHUT_WR) < 0) { ++ log_error_errno(errno, "Failed to shutdown writing side of socket: %m"); ++ goto fail; + } + +- return 0; +-} +- +-static int stdout_stream_restore(Server *s, const char *fname, int fd) { +- StdoutStream *stream; +- int r; +- +- assert(s); +- assert(fname); +- assert(fd >= 0); +- +- if (s->n_stdout_streams >= STDOUT_STREAMS_MAX) { +- log_warning("Too many stdout streams, refusing restoring of stream."); +- return -ENOBUFS; ++ r = sd_event_add_io(s->event, &stream->event_source, fd, EPOLLIN, stdout_stream_process, stream); ++ if (r < 0) { ++ log_error_errno(r, "Failed to add stream to event loop: %m"); ++ goto fail; + } + +- r = stdout_stream_install(s, fd, &stream); +- if (r < 0) +- return r; +- +- stream->state = STDOUT_STREAM_RUNNING; +- stream->fdstore = true; +- +- /* Ignore all parsing errors */ +- (void) stdout_stream_load(stream, fname); +- +- return 0; +-} +- +-static int server_restore_streams(Server *s, FDSet *fds) { +- _cleanup_closedir_ DIR *d = NULL; +- struct dirent *de; +- int r; +- +- d = opendir("/run/systemd/journal/streams"); +- if (!d) { +- if (errno == ENOENT) +- return 0; +- +- return log_warning_errno(errno, "Failed to enumerate /run/systemd/journal/streams: %m"); ++ r = sd_event_source_set_priority(stream->event_source, SD_EVENT_PRIORITY_NORMAL+5); ++ if (r < 0) { ++ log_error_errno(r, "Failed to adjust stdout event source priority: %m"); ++ goto fail; + } + +- FOREACH_DIRENT(de, d, goto fail) { +- unsigned long st_dev, st_ino; +- bool found = false; +- Iterator i; +- int fd; +- +- if (sscanf(de->d_name, "%lu:%lu", &st_dev, &st_ino) != 2) +- continue; +- +- FDSET_FOREACH(fd, fds, i) { +- struct stat st; +- +- if (fstat(fd, &st) < 0) +- return log_error_errno(errno, "Failed to stat %s: %m", de->d_name); +- +- if (S_ISSOCK(st.st_mode) && st.st_dev == st_dev && st.st_ino == st_ino) { +- found = true; +- break; +- } +- } +- +- if (!found) { +- /* No file descriptor? Then let's delete the state file */ +- log_debug("Cannot restore stream file %s", de->d_name); +- unlinkat(dirfd(d), de->d_name, 0); +- continue; +- } +- +- fdset_remove(fds, fd); +- +- r = stdout_stream_restore(s, de->d_name, fd); +- if (r < 0) +- safe_close(fd); +- } ++ stream->server = s; ++ LIST_PREPEND(stdout_stream, s->stdout_streams, stream); ++ s->n_stdout_streams ++; + + return 0; + + fail: +- return log_error_errno(errno, "Failed to read streams directory: %m"); ++ stdout_stream_free(stream); ++ return 0; + } + +-int server_open_stdout_socket(Server *s, FDSet *fds) { ++int server_open_stdout_socket(Server *s) { + int r; + + assert(s); +@@ -736,8 +465,5 @@ int server_open_stdout_socket(Server *s, FDSet *fds) { + if (r < 0) + return log_error_errno(r, "Failed to adjust priority of stdout server event source: %m"); + +- /* Try to restore streams, but don't bother if this fails */ +- (void) server_restore_streams(s, fds); +- + return 0; + } +diff --git a/src/journal/journald-stream.h b/src/journal/journald-stream.h +index 94bf955..8cad012 100644 +--- a/src/journal/journald-stream.h ++++ b/src/journal/journald-stream.h +@@ -21,9 +21,8 @@ + along with systemd; If not, see . + ***/ + +-#include "fdset.h" + #include "journald-server.h" + +-int server_open_stdout_socket(Server *s, FDSet *fds); ++int server_open_stdout_socket(Server *s); + + void stdout_stream_free(StdoutStream *s); +diff --git a/units/systemd-journald.service.in b/units/systemd-journald.service.in +index a3540c6..87704bb 100644 +--- a/units/systemd-journald.service.in ++++ b/units/systemd-journald.service.in +@@ -23,7 +23,6 @@ NotifyAccess=all + StandardOutput=null + CapabilityBoundingSet=CAP_SYS_ADMIN CAP_DAC_OVERRIDE CAP_SYS_PTRACE CAP_SYSLOG CAP_AUDIT_CONTROL CAP_AUDIT_READ CAP_CHOWN CAP_DAC_READ_SEARCH CAP_FOWNER CAP_SETUID CAP_SETGID CAP_MAC_OVERRIDE + WatchdogSec=1min +-FileDescriptorStoreMax=1024 + + # Increase the default a bit in order to allow many simultaneous + # services being run since we keep one fd open per service. Also, when diff --git a/SOURCES/0126-Revert-man-switch-yum-to-dnf-for-Fedora.patch b/SOURCES/0126-Revert-man-switch-yum-to-dnf-for-Fedora.patch new file mode 100644 index 0000000..5687d1f --- /dev/null +++ b/SOURCES/0126-Revert-man-switch-yum-to-dnf-for-Fedora.patch @@ -0,0 +1,66 @@ +From 597856130181473bff35f225d87b05c5825b1670 Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Wed, 15 Apr 2015 14:04:52 +0200 +Subject: [PATCH] Revert "man: switch yum to dnf for Fedora" + +This reverts commit 74a6d87d0cd1f2213869e168b6ca55eded6f4ae8. + +Conflicts: + man/systemd-nspawn.xml +--- + man/custom-html.xsl | 12 ------------ + man/systemd-nspawn.xml | 4 +--- + 2 files changed, 1 insertion(+), 15 deletions(-) + +diff --git a/man/custom-html.xsl b/man/custom-html.xsl +index 706b95a..1df824c 100644 +--- a/man/custom-html.xsl ++++ b/man/custom-html.xsl +@@ -60,18 +60,6 @@ + + + +- +- +- +- https://www.mankier.com/ +- +- / +- +- +- +- +- +- + + + +diff --git a/man/systemd-nspawn.xml b/man/systemd-nspawn.xml +index 65b4c2f..cbd44d4 100644 +--- a/man/systemd-nspawn.xml ++++ b/man/systemd-nspawn.xml +@@ -98,7 +98,6 @@ + container. + + Use a tool like +- dnf8, + yum8, + debootstrap8, + or +@@ -668,7 +667,7 @@ + + Build and boot a minimal Fedora distribution in a container + +- # dnf -y --releasever=21 --nogpg --installroot=/srv/mycontainer --disablerepo='*' --enablerepo=fedora install systemd passwd dnf fedora-release vim-minimal ++ # yum -y --releasever=21 --nogpg --installroot=/srv/mycontainer --disablerepo='*' --enablerepo=fedora install systemd passwd yum fedora-release vim-minimal + # systemd-nspawn -bD /srv/mycontainer + + This installs a minimal Fedora distribution into the +@@ -729,7 +728,6 @@ + + systemd1, + chroot1, +- dnf8, + yum8, + debootstrap8, + pacman8, diff --git a/SOURCES/0126-core-manager-remove-infinite-loop.patch b/SOURCES/0126-core-manager-remove-infinite-loop.patch deleted file mode 100644 index c07716c..0000000 --- a/SOURCES/0126-core-manager-remove-infinite-loop.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 31a3bfaf3da730a2d6f32a8ab9d9e10e77905d4f 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/SOURCES/0127-journal-remove-audit-socket-unit-files.patch b/SOURCES/0127-journal-remove-audit-socket-unit-files.patch new file mode 100644 index 0000000..6f3b6c2 --- /dev/null +++ b/SOURCES/0127-journal-remove-audit-socket-unit-files.patch @@ -0,0 +1,80 @@ +From c45af40e61ab34508862f9e668f47cc6eb2f6d45 Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Thu, 16 Apr 2015 10:50:10 +0200 +Subject: [PATCH] journal: remove audit socket unit-files + +--- + Makefile.am | 6 ++---- + units/systemd-journald-audit.socket | 19 ------------------- + units/systemd-journald.service.in | 4 ++-- + 3 files changed, 4 insertions(+), 25 deletions(-) + delete mode 100644 units/systemd-journald-audit.socket + +diff --git a/Makefile.am b/Makefile.am +index bec32c3..6d6b650 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -4518,8 +4518,7 @@ bin_PROGRAMS += \ + + dist_systemunit_DATA += \ + units/systemd-journald.socket \ +- units/systemd-journald-dev-log.socket \ +- units/systemd-journald-audit.socket ++ units/systemd-journald-dev-log.socket + + nodist_systemunit_DATA += \ + units/systemd-journald.service \ +@@ -4539,8 +4538,7 @@ dist_catalog_DATA = \ + + SOCKETS_TARGET_WANTS += \ + systemd-journald.socket \ +- systemd-journald-dev-log.socket \ +- systemd-journald-audit.socket ++ systemd-journald-dev-log.socket + + SYSINIT_TARGET_WANTS += \ + systemd-journald.service \ +diff --git a/units/systemd-journald-audit.socket b/units/systemd-journald-audit.socket +deleted file mode 100644 +index 35397aa..0000000 +--- a/units/systemd-journald-audit.socket ++++ /dev/null +@@ -1,19 +0,0 @@ +-# This file is part of systemd. +-# +-# systemd is free software; you can redistribute it and/or modify it +-# under the terms of the GNU Lesser General Public License as published by +-# the Free Software Foundation; either version 2.1 of the License, or +-# (at your option) any later version. +- +-[Unit] +-Description=Journal Audit Socket +-Documentation=man:systemd-journald.service(8) man:journald.conf(5) +-DefaultDependencies=no +-Before=sockets.target +-ConditionSecurity=audit +- +-[Socket] +-Service=systemd-journald.service +-ReceiveBuffer=128M +-ListenNetlink=audit 1 +-PassCredentials=yes +diff --git a/units/systemd-journald.service.in b/units/systemd-journald.service.in +index 87704bb..1bcc290 100644 +--- a/units/systemd-journald.service.in ++++ b/units/systemd-journald.service.in +@@ -10,12 +10,12 @@ Description=Journal Service + Documentation=man:systemd-journald.service(8) man:journald.conf(5) + DefaultDependencies=no + Requires=systemd-journald.socket +-After=systemd-journald.socket systemd-journald-dev-log.socket systemd-journald-audit.socket syslog.socket ++After=systemd-journald.socket systemd-journald-dev-log.socket syslog.socket + Before=sysinit.target + + [Service] + Type=notify +-Sockets=systemd-journald.socket systemd-journald-dev-log.socket systemd-journald-audit.socket ++Sockets=systemd-journald.socket systemd-journald-dev-log.socket + ExecStart=@rootlibexecdir@/systemd-journald + Restart=always + RestartSec=0 diff --git a/SOURCES/0127-util-check-for-overflow-in-greedy_realloc.patch b/SOURCES/0127-util-check-for-overflow-in-greedy_realloc.patch deleted file mode 100644 index b7f5d0e..0000000 --- a/SOURCES/0127-util-check-for-overflow-in-greedy_realloc.patch +++ /dev/null @@ -1,34 +0,0 @@ -From aa37345b6b9c0910d871d05ff028c257b657ffb7 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 8a542da..e9b8255 100644 ---- a/src/shared/util.c -+++ b/src/shared/util.c -@@ -5838,10 +5838,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/SOURCES/0128-factory-we-don-t-want-that.patch b/SOURCES/0128-factory-we-don-t-want-that.patch new file mode 100644 index 0000000..404e684 --- /dev/null +++ b/SOURCES/0128-factory-we-don-t-want-that.patch @@ -0,0 +1,47 @@ +From c5177fff7f87e08175f6a5c9dba204ea31bfd13a Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Thu, 16 Apr 2015 11:53:05 +0200 +Subject: [PATCH] factory: we don't want that + +--- + Makefile.am | 16 ++++++++-------- + tmpfiles.d/etc.conf.m4 | 2 -- + 2 files changed, 8 insertions(+), 10 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 6d6b650..8474b29 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -2288,14 +2288,14 @@ INSTALL_DIRS += \ + endif + + # ------------------------------------------------------------------------------ +-dist_factory_etc_DATA = \ +- factory/etc/nsswitch.conf +- +-if HAVE_PAM +-dist_factory_pam_DATA = \ +- factory/etc/pam.d/system-auth \ +- factory/etc/pam.d/other +-endif ++#dist_factory_etc_DATA = \ ++# factory/etc/nsswitch.conf ++# ++#if HAVE_PAM ++#dist_factory_pam_DATA = \ ++# factory/etc/pam.d/system-auth \ ++# factory/etc/pam.d/other ++#endif + + # ------------------------------------------------------------------------------ + if ENABLE_FIRSTBOOT +diff --git a/tmpfiles.d/etc.conf.m4 b/tmpfiles.d/etc.conf.m4 +index 125d6e0..4937719 100644 +--- a/tmpfiles.d/etc.conf.m4 ++++ b/tmpfiles.d/etc.conf.m4 +@@ -10,5 +10,3 @@ + L /etc/os-release - - - - ../usr/lib/os-release + L /etc/localtime - - - - ../usr/share/zoneinfo/UTC + L+ /etc/mtab - - - - ../proc/self/mounts +-C /etc/nsswitch.conf - - - - +-C /etc/pam.d - - - - diff --git a/SOURCES/0128-journald-use-a-bit-more-cleanup-magic.patch b/SOURCES/0128-journald-use-a-bit-more-cleanup-magic.patch deleted file mode 100644 index 2a7e2f8..0000000 --- a/SOURCES/0128-journald-use-a-bit-more-cleanup-magic.patch +++ /dev/null @@ -1,35 +0,0 @@ -From f1a8d50c069f57f0b9d23c81e50686bc8a2e43b7 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/SOURCES/0129-activate-clean-up-inherited-descriptors.patch b/SOURCES/0129-activate-clean-up-inherited-descriptors.patch deleted file mode 100644 index 3467859..0000000 --- a/SOURCES/0129-activate-clean-up-inherited-descriptors.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 25854e394d661eeb661c6974f01b492f55868307 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/SOURCES/0129-timedated-flip-internal-status-after-executing-opera.patch b/SOURCES/0129-timedated-flip-internal-status-after-executing-opera.patch new file mode 100644 index 0000000..a39a1a6 --- /dev/null +++ b/SOURCES/0129-timedated-flip-internal-status-after-executing-opera.patch @@ -0,0 +1,38 @@ +From d7ca3b22fce0f97fe10a7abe6e0edc5de785ef98 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 21 Mar 2015 17:40:20 -0400 +Subject: [PATCH] timedated: flip internal status after executing operation + +timedated would set the internal status before calling out to systemd to do +the actual change. When the operation was refused because of a SELinux denial, +the state kept in timedated would get out of sync, and the second call from +timedatectl would appear to succeed. + +https://bugzilla.redhat.com/show_bug.cgi?id=1014315 +(cherry picked from commit 192b98b8fe73c8fb4bb3d6540deb93f5fb6eb9d2) +--- + src/timedate/timedated.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c +index 66097ef..c3113b0 100644 +--- a/src/timedate/timedated.c ++++ b/src/timedate/timedated.c +@@ -679,8 +679,6 @@ static int method_set_ntp(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus + if (r == 0) + return 1; + +- c->use_ntp = ntp; +- + r = context_enable_ntp(c, bus, error); + if (r < 0) + return r; +@@ -689,6 +687,8 @@ static int method_set_ntp(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus + if (r < 0) + return r; + ++ c->use_ntp = ntp; ++ + log_info("Set NTP to %s", c->use_ntp ? "enabled" : "disabled"); + + sd_bus_emit_properties_changed(bus, "/org/freedesktop/timedate1", "org.freedesktop.timedate1", "NTP", NULL); diff --git a/SOURCES/0130-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch b/SOURCES/0130-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch deleted file mode 100644 index 845b047..0000000 --- a/SOURCES/0130-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch +++ /dev/null @@ -1,95 +0,0 @@ -From f0f727fbb8576afc7ea31f2b6aacccdd565472d0 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/SOURCES/0130-timedated-fix-enable-disable-reversal.patch b/SOURCES/0130-timedated-fix-enable-disable-reversal.patch new file mode 100644 index 0000000..43d83b8 --- /dev/null +++ b/SOURCES/0130-timedated-fix-enable-disable-reversal.patch @@ -0,0 +1,130 @@ +From 467145adad739b0426501d2fd7ce1c0afe977e67 Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Thu, 16 Apr 2015 15:22:57 +0200 +Subject: [PATCH] timedated: fix enable/disable reversal + +The state was flipped later, +but the enable/disable routine made use of the state to decide +what to do. + +context_enable_ntp() and context_start_ntp() now get the desired +state directly, so the Context parameter can be removed. + +(based on 81b843990297ad8c813c531fccd8da30bb715bd6) +--- + src/timedate/timedated.c | 50 +++++++++++++++++------------------------------- + 1 file changed, 18 insertions(+), 32 deletions(-) + +diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c +index c3113b0..f875149 100644 +--- a/src/timedate/timedated.c ++++ b/src/timedate/timedated.c +@@ -280,39 +280,26 @@ static int context_read_ntp(Context *c, sd_bus *bus) { + return 0; + } + +-static int context_start_ntp(Context *c, sd_bus *bus, sd_bus_error *error) { ++static int context_start_ntp(sd_bus *bus, sd_bus_error *error, bool enabled) { + _cleanup_strv_free_ char **l = NULL; + char **i; + int r; + +- assert(c); + assert(bus); + assert(error); + + l = get_ntp_services(); + STRV_FOREACH(i, l) { + +- if (c->use_ntp) +- r = sd_bus_call_method( +- bus, +- "org.freedesktop.systemd1", +- "/org/freedesktop/systemd1", +- "org.freedesktop.systemd1.Manager", +- "StartUnit", +- error, +- NULL, +- "ss", *i, "replace"); +- else +- r = sd_bus_call_method( +- bus, +- "org.freedesktop.systemd1", +- "/org/freedesktop/systemd1", +- "org.freedesktop.systemd1.Manager", +- "StopUnit", +- error, +- NULL, +- "ss", *i, "replace"); +- ++ r = sd_bus_call_method( ++ bus, ++ "org.freedesktop.systemd1", ++ "/org/freedesktop/systemd1", ++ "org.freedesktop.systemd1.Manager", ++ enabled ? "StartUnit" : "StopUnit", ++ error, ++ NULL, ++ "ss", *i, "replace"); + if (r < 0) { + if (sd_bus_error_has_name(error, SD_BUS_ERROR_FILE_NOT_FOUND) || + sd_bus_error_has_name(error, "org.freedesktop.systemd1.LoadFailed") || +@@ -332,18 +319,17 @@ static int context_start_ntp(Context *c, sd_bus *bus, sd_bus_error *error) { + return -ENOTSUP; + } + +-static int context_enable_ntp(Context*c, sd_bus *bus, sd_bus_error *error) { ++static int context_enable_ntp(sd_bus *bus, sd_bus_error *error, bool enabled) { + _cleanup_strv_free_ char **l = NULL; + char **i; + int r; + +- assert(c); + assert(bus); + assert(error); + + l = get_ntp_services(); + STRV_FOREACH(i, l) { +- if (c->use_ntp) ++ if (enabled) + r = sd_bus_call_method( + bus, + "org.freedesktop.systemd1", +@@ -662,15 +648,15 @@ static int method_set_time(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bu + } + + static int method_set_ntp(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus_error *error) { +- int ntp, interactive; ++ int enabled, interactive; + Context *c = userdata; + int r; + +- r = sd_bus_message_read(m, "bb", &ntp, &interactive); ++ r = sd_bus_message_read(m, "bb", &enabled, &interactive); + if (r < 0) + return r; + +- if ((bool)ntp == c->use_ntp) ++ if ((bool)enabled == c->use_ntp) + return sd_bus_reply_method_return(m, NULL); + + r = bus_verify_polkit_async(m, CAP_SYS_TIME, "org.freedesktop.timedate1.set-ntp", interactive, &c->polkit_registry, error); +@@ -679,15 +665,15 @@ static int method_set_ntp(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus + if (r == 0) + return 1; + +- r = context_enable_ntp(c, bus, error); ++ r = context_enable_ntp(bus, error, enabled); + if (r < 0) + return r; + +- r = context_start_ntp(c, bus, error); ++ r = context_start_ntp(bus, error, enabled); + if (r < 0) + return r; + +- c->use_ntp = ntp; ++ c->use_ntp = enabled; + + log_info("Set NTP to %s", c->use_ntp ? "enabled" : "disabled"); + diff --git a/SOURCES/0131-core-make-SELinux-enable-disable-check-symmetric.patch b/SOURCES/0131-core-make-SELinux-enable-disable-check-symmetric.patch new file mode 100644 index 0000000..7804e00 --- /dev/null +++ b/SOURCES/0131-core-make-SELinux-enable-disable-check-symmetric.patch @@ -0,0 +1,43 @@ +From bfd900a5a995e3bc342acd50ac816df6da37bf62 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 21 Mar 2015 18:50:10 -0400 +Subject: [PATCH] core: make SELinux enable/disable check symmetric + +We'd use the generic check for disable, and a unit-file-specific one for enable. +Use the more specific one both ways. + +systemd[1]: SELinux access check scon=system_u:system_r:systemd_timedated_t:s0 tcon=system_u:system_r:init_t:s0 tclass=system perm=disable path=(null) cmdline=/usr/lib/systemd/systemd-timedated: -13 +systemd[1]: SELinux access check scon=system_u:system_r:systemd_timedated_t:s0 tcon=system_u:object_r:systemd_unit_file_t:s0 tclass=service perm=enable path=/usr/lib/systemd/system/systemd-timesyncd.service cmdline=/usr/lib/systemd/systemd-timedated: -13 + +https://bugzilla.redhat.com/show_bug.cgi?id=1014315 +(cherry picked from commit df823e23f04da832ad5fc078176f8c26597a9845) + +Conflicts: + src/core/dbus-manager.c +--- + src/core/dbus-manager.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 8ba665d..2bc37ba 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -1772,15 +1772,15 @@ static int method_disable_unit_files_generic( + if (r == 0) + return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */ + +- r = mac_selinux_access_check(message, verb, error); ++ r = sd_bus_message_read_strv(message, &l); + if (r < 0) + return r; + +- r = sd_bus_message_read_strv(message, &l); ++ r = sd_bus_message_read(message, "b", &runtime); + if (r < 0) + return r; + +- r = sd_bus_message_read(message, "b", &runtime); ++ r = mac_selinux_unit_access_check_strv(l, message, m, verb, error); + if (r < 0) + return r; + diff --git a/SOURCES/0131-units-don-t-run-readahead-done-timers-in-containers.patch b/SOURCES/0131-units-don-t-run-readahead-done-timers-in-containers.patch deleted file mode 100644 index b2a01c0..0000000 --- a/SOURCES/0131-units-don-t-run-readahead-done-timers-in-containers.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 295730ffeef69a057773ba201cb1ad9e81c187fa 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/SOURCES/0132-nspawn-complain-and-continue-if-machine-has-same-id.patch b/SOURCES/0132-nspawn-complain-and-continue-if-machine-has-same-id.patch deleted file mode 100644 index 1ba1db8..0000000 --- a/SOURCES/0132-nspawn-complain-and-continue-if-machine-has-same-id.patch +++ /dev/null @@ -1,63 +0,0 @@ -From e16c7a905dbb6882970a13678e42816847565841 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 db47fbd..4bc49a3 100644 ---- a/src/nspawn/nspawn.c -+++ b/src/nspawn/nspawn.c -@@ -802,14 +802,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(); -@@ -833,6 +830,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/SOURCES/0132-shared-add-path_compare-an-ordering-path-comparison.patch b/SOURCES/0132-shared-add-path_compare-an-ordering-path-comparison.patch new file mode 100644 index 0000000..f929624 --- /dev/null +++ b/SOURCES/0132-shared-add-path_compare-an-ordering-path-comparison.patch @@ -0,0 +1,149 @@ +From 331328223912b66dd25d5cb6ed250d67419d54de Mon Sep 17 00:00:00 2001 +From: Michal Schmidt +Date: Mon, 16 Mar 2015 21:58:35 +0100 +Subject: [PATCH] shared: add path_compare(), an ordering path comparison + +... and make path_equal() a simple wrapper around it. + +(cherry picked from commit 2230852bd9755e1b7bfd1260082471f559b0a005) +--- + src/shared/path-util.c | 37 +++++++++++++++++++++++++++---------- + src/shared/path-util.h | 1 + + src/test/test-path-util.c | 36 +++++++++++++++++++++++++----------- + 3 files changed, 53 insertions(+), 21 deletions(-) + +diff --git a/src/shared/path-util.c b/src/shared/path-util.c +index 70bc1ca..d5510bf 100644 +--- a/src/shared/path-util.c ++++ b/src/shared/path-util.c +@@ -403,12 +403,18 @@ char* path_startswith(const char *path, const char *prefix) { + } + } + +-bool path_equal(const char *a, const char *b) { ++int path_compare(const char *a, const char *b) { ++ int d; ++ + assert(a); + assert(b); + +- if ((a[0] == '/') != (b[0] == '/')) +- return false; ++ /* A relative path and an abolute path must not compare as equal. ++ * Which one is sorted before the other does not really matter. ++ * Here a relative path is ordered before an absolute path. */ ++ d = (a[0] == '/') - (b[0] == '/'); ++ if (d) ++ return d; + + for (;;) { + size_t j, k; +@@ -417,25 +423,36 @@ bool path_equal(const char *a, const char *b) { + b += strspn(b, "/"); + + if (*a == 0 && *b == 0) +- return true; ++ return 0; + +- if (*a == 0 || *b == 0) +- return false; ++ /* Order prefixes first: "/foo" before "/foo/bar" */ ++ if (*a == 0) ++ return -1; ++ if (*b == 0) ++ return 1; + + j = strcspn(a, "/"); + k = strcspn(b, "/"); + +- if (j != k) +- return false; ++ /* Alphabetical sort: "/foo/aaa" before "/foo/b" */ ++ d = memcmp(a, b, MIN(j, k)); ++ if (d) ++ return (d > 0) - (d < 0); /* sign of d */ + +- if (memcmp(a, b, j) != 0) +- return false; ++ /* Sort "/foo/a" before "/foo/aaa" */ ++ d = (j > k) - (j < k); /* sign of (j - k) */ ++ if (d) ++ return d; + + a += j; + b += k; + } + } + ++bool path_equal(const char *a, const char *b) { ++ return path_compare(a, b) == 0; ++} ++ + bool path_equal_or_files_same(const char *a, const char *b) { + return path_equal(a, b) || files_same(a, b) > 0; + } +diff --git a/src/shared/path-util.h b/src/shared/path-util.h +index bcf116e..ca81b49 100644 +--- a/src/shared/path-util.h ++++ b/src/shared/path-util.h +@@ -44,6 +44,7 @@ char* path_make_absolute_cwd(const char *p); + int path_make_relative(const char *from_dir, const char *to_path, char **_r); + char* path_kill_slashes(char *path); + char* path_startswith(const char *path, const char *prefix) _pure_; ++int path_compare(const char *a, const char *b) _pure_; + bool path_equal(const char *a, const char *b) _pure_; + bool path_equal_or_files_same(const char *a, const char *b); + char* path_join(const char *root, const char *path, const char *rest); +diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c +index 11aa52a..6396fcb 100644 +--- a/src/test/test-path-util.c ++++ b/src/test/test-path-util.c +@@ -27,23 +27,37 @@ + #include "macro.h" + #include "strv.h" + ++#define test_path_compare(a, b, result) { \ ++ assert_se(path_compare(a, b) == result); \ ++ assert_se(path_compare(b, a) == -result); \ ++ assert_se(path_equal(a, b) == !result); \ ++ assert_se(path_equal(b, a) == !result); \ ++ } + + static void test_path(void) { +- assert_se(path_equal("/goo", "/goo")); +- assert_se(path_equal("//goo", "/goo")); +- assert_se(path_equal("//goo/////", "/goo")); +- assert_se(path_equal("goo/////", "goo")); ++ test_path_compare("/goo", "/goo", 0); ++ test_path_compare("/goo", "/goo", 0); ++ test_path_compare("//goo", "/goo", 0); ++ test_path_compare("//goo/////", "/goo", 0); ++ test_path_compare("goo/////", "goo", 0); ++ ++ test_path_compare("/goo/boo", "/goo//boo", 0); ++ test_path_compare("//goo/boo", "/goo/boo//", 0); + +- assert_se(path_equal("/goo/boo", "/goo//boo")); +- assert_se(path_equal("//goo/boo", "/goo/boo//")); ++ test_path_compare("/", "///", 0); + +- assert_se(path_equal("/", "///")); ++ test_path_compare("/x", "x/", 1); ++ test_path_compare("x/", "/", -1); + +- assert_se(!path_equal("/x", "x/")); +- assert_se(!path_equal("x/", "/")); ++ test_path_compare("/x/./y", "x/y", 1); ++ test_path_compare("x/.y", "x/y", -1); + +- assert_se(!path_equal("/x/./y", "x/y")); +- assert_se(!path_equal("x/.y", "x/y")); ++ test_path_compare("foo", "/foo", -1); ++ test_path_compare("/foo", "/foo/bar", -1); ++ test_path_compare("/foo/aaa", "/foo/b", -1); ++ test_path_compare("/foo/aaa", "/foo/b/a", -1); ++ test_path_compare("/foo/a", "/foo/aaa", -1); ++ test_path_compare("/foo/a/b", "/foo/aaa", -1); + + assert_se(path_is_absolute("/")); + assert_se(!path_is_absolute("./")); diff --git a/SOURCES/0133-core-namespace-fix-path-sorting.patch b/SOURCES/0133-core-namespace-fix-path-sorting.patch new file mode 100644 index 0000000..c481597 --- /dev/null +++ b/SOURCES/0133-core-namespace-fix-path-sorting.patch @@ -0,0 +1,58 @@ +From 0881ff2b6842798836faef3a55a04a3e6e0cbb66 Mon Sep 17 00:00:00 2001 +From: Michal Schmidt +Date: Mon, 16 Mar 2015 22:04:21 +0100 +Subject: [PATCH] core/namespace: fix path sorting + +The comparison function we use for qsorting paths is overly indifferent. +Consider these 3 paths for sorting: + /foo + /bar + /foo/foo +qsort() may compare: + "/foo" with "/bar" => 0, indifference + "/bar" with "/foo/foo" => 0, indifference +and assume transitively that "/foo" and "/foo/foo" are also indifferent. + +But this is wrong, we want "/foo" sorted before "/foo/foo". +The comparison function must be transitive. + +Use path_compare(), which behaves properly. + +Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1184016 +(cherry picked from commit a0827e2b123010c46cfe4f03eebba57d92f9efc4) +--- + src/core/namespace.c | 12 ++++-------- + 1 file changed, 4 insertions(+), 8 deletions(-) + +diff --git a/src/core/namespace.c b/src/core/namespace.c +index 4fecd32..d4f1c86 100644 +--- a/src/core/namespace.c ++++ b/src/core/namespace.c +@@ -91,9 +91,11 @@ static int append_mounts(BindMount **p, char **strv, MountMode mode) { + + static int mount_path_compare(const void *a, const void *b) { + const BindMount *p = a, *q = b; ++ int d; + +- if (path_equal(p->path, q->path)) { ++ d = path_compare(p->path, q->path); + ++ if (!d) { + /* If the paths are equal, check the mode */ + if (p->mode < q->mode) + return -1; +@@ -105,13 +107,7 @@ static int mount_path_compare(const void *a, const void *b) { + } + + /* If the paths are not equal, then order prefixes first */ +- if (path_startswith(p->path, q->path)) +- return 1; +- +- if (path_startswith(q->path, p->path)) +- return -1; +- +- return 0; ++ return d; + } + + static void drop_duplicates(BindMount *m, unsigned *n) { diff --git a/SOURCES/0133-man-beef-up-ExecStart-description.patch b/SOURCES/0133-man-beef-up-ExecStart-description.patch deleted file mode 100644 index 0100ab5..0000000 --- a/SOURCES/0133-man-beef-up-ExecStart-description.patch +++ /dev/null @@ -1,150 +0,0 @@ -From 1e09f64d4735563be7b7f7e98d727ba15fe6a523 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/SOURCES/0134-machine-do-not-rely-on-asprintf-setting-arg-on-error.patch b/SOURCES/0134-machine-do-not-rely-on-asprintf-setting-arg-on-error.patch new file mode 100644 index 0000000..bfc0060 --- /dev/null +++ b/SOURCES/0134-machine-do-not-rely-on-asprintf-setting-arg-on-error.patch @@ -0,0 +1,44 @@ +From 4e78db7126779a9f6432ead9a73cdab1087405bc Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Fri, 17 Apr 2015 15:12:00 +0200 +Subject: [PATCH] machine: do not rely on asprintf setting arg on error + +Strictly speaking, the output variable is undefined if asprintf fails. +We use the return value not the arg everywhere, and should we do here. + +(Based on 2c07315225bef6be4830bce25a74da7f0ba4fcdc) +--- + src/machine/machine-dbus.c | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c +index b0f0f66..624a99f 100644 +--- a/src/machine/machine-dbus.c ++++ b/src/machine/machine-dbus.c +@@ -438,6 +438,7 @@ int bus_machine_method_open_login(sd_bus *bus, sd_bus_message *message, void *us + _cleanup_close_ int master = -1; + Machine *m = userdata; + const char *p; ++ char *address; + int r; + + if (m->class != MACHINE_CONTAINER) +@@ -475,13 +476,14 @@ int bus_machine_method_open_login(sd_bus *bus, sd_bus_message *message, void *us + return r; + + #ifdef ENABLE_KDBUS +- asprintf(&container_bus->address, "x-machine-kernel:pid=" PID_FMT ";x-machine-unix:pid=" PID_FMT, m->leader, m->leader); ++# define ADDRESS_FMT "x-machine-kernel:pid=%1$" PID_PRI ";x-machine-unix:pid=%1$" PID_PRI + #else +- asprintf(&container_bus->address, "x-machine-unix:pid=" PID_FMT, m->leader); ++# define ADDRESS_FMT "x-machine-unix:pid=%1$" PID_PRI + #endif +- if (!container_bus->address) +- return -ENOMEM; ++ if (asprintf(&address, ADDRESS_FMT, m->leader) < 0) ++ return log_oom(); + ++ container_bus->address = address; + container_bus->bus_client = true; + container_bus->trusted = false; + container_bus->is_system = true; diff --git a/SOURCES/0134-man-remove-advice-to-avoid-setting-the-same-var-more.patch b/SOURCES/0134-man-remove-advice-to-avoid-setting-the-same-var-more.patch deleted file mode 100644 index c5fc953..0000000 --- a/SOURCES/0134-man-remove-advice-to-avoid-setting-the-same-var-more.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 69924ed702e14592ba0aae1510fca652c7d306df 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/SOURCES/0135-some-compilators-don-t-support-__INCLUDE_LEVEL__.patch b/SOURCES/0135-some-compilators-don-t-support-__INCLUDE_LEVEL__.patch new file mode 100644 index 0000000..405e9d8 --- /dev/null +++ b/SOURCES/0135-some-compilators-don-t-support-__INCLUDE_LEVEL__.patch @@ -0,0 +1,22 @@ +From 5a21b0644425a8f1decdb6d52b93e2a73d5c75bf Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Tue, 21 Apr 2015 17:02:22 +0200 +Subject: [PATCH] some compilators don't support __INCLUDE_LEVEL__ + +--- + src/systemd/_sd-common.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/systemd/_sd-common.h b/src/systemd/_sd-common.h +index 896a027..e9426a4 100644 +--- a/src/systemd/_sd-common.h ++++ b/src/systemd/_sd-common.h +@@ -24,7 +24,7 @@ + + /* This is a private header; never even think of including this directly! */ + +-#if __INCLUDE_LEVEL__ <= 1 ++#if defined __INCLUDE_LEVEL__ && __INCLUDE_LEVEL__ <= 1 + #error "Do not include _sd-common.h directly; it is a private header." + #endif + diff --git a/SOURCES/0135-systemctl-add-the-plain-option-to-the-help-message.patch b/SOURCES/0135-systemctl-add-the-plain-option-to-the-help-message.patch deleted file mode 100644 index 23dd90e..0000000 --- a/SOURCES/0135-systemctl-add-the-plain-option-to-the-help-message.patch +++ /dev/null @@ -1,23 +0,0 @@ -From f1150c21ae7c7b337c29c12624046eccebc6b636 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 1d68b38..d29133c 100644 ---- a/src/systemctl/systemctl.c -+++ b/src/systemctl/systemctl.c -@@ -4745,7 +4745,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/SOURCES/0136-Fix-a-few-resource-leaks-in-error-paths.patch b/SOURCES/0136-Fix-a-few-resource-leaks-in-error-paths.patch deleted file mode 100644 index 0e9ce24..0000000 --- a/SOURCES/0136-Fix-a-few-resource-leaks-in-error-paths.patch +++ /dev/null @@ -1,67 +0,0 @@ -From c26444ca9751a1f7cec28f8140b9674cec2ee3ce 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/SOURCES/0136-udev-net_id-support-multi-port-enpo-device-names.patch b/SOURCES/0136-udev-net_id-support-multi-port-enpo-device-names.patch new file mode 100644 index 0000000..ad8d40b --- /dev/null +++ b/SOURCES/0136-udev-net_id-support-multi-port-enpo-device-names.patch @@ -0,0 +1,72 @@ +From 88eb414beca3ab29f40a6e422faa790ddaae2918 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Wed, 1 Apr 2015 16:51:02 +0200 +Subject: [PATCH] udev: net_id - support multi-port enpo* device names + +I'd argue that having firmware labels for such devices makes +no sense, but they exist, so make sure we handle them as best +as we can. +--- + src/udev/udev-builtin-net_id.c | 33 +++++++++++++++++++++++++-------- + 1 file changed, 25 insertions(+), 8 deletions(-) + +diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c +index 99caa0a..6a5ada6 100644 +--- a/src/udev/udev-builtin-net_id.c ++++ b/src/udev/udev-builtin-net_id.c +@@ -35,7 +35,7 @@ + * Type of names: + * b -- BCMA bus core number + * ccw -- CCW bus group name +- * o -- on-board device index number ++ * o[d] -- on-board device index number + * s[f][d] -- hotplug slot index number + * x -- MAC address + * [P]ps[f][d/] +@@ -128,22 +128,39 @@ struct netnames { + + /* retrieve on-board index number and label from firmware */ + static int dev_pci_onboard(struct udev_device *dev, struct netnames *names) { +- const char *index; ++ unsigned dev_port = 0; ++ size_t l; ++ char *s; ++ const char *attr; + int idx; + + /* ACPI _DSM -- device specific method for naming a PCI or PCI Express device */ +- index = udev_device_get_sysattr_value(names->pcidev, "acpi_index"); ++ attr = udev_device_get_sysattr_value(names->pcidev, "acpi_index"); + /* SMBIOS type 41 -- Onboard Devices Extended Information */ +- if (!index) +- index = udev_device_get_sysattr_value(names->pcidev, "index"); +- if (!index) ++ if (!attr) ++ attr = udev_device_get_sysattr_value(names->pcidev, "index"); ++ if (!attr) + return -ENOENT; +- idx = strtoul(index, NULL, 0); ++ ++ idx = strtoul(attr, NULL, 0); + if (idx <= 0) + return -EINVAL; +- snprintf(names->pci_onboard, sizeof(names->pci_onboard), "o%d", idx); ++ ++ /* kernel provided multi-device index */ ++ attr = udev_device_get_sysattr_value(dev, "dev_port"); ++ if (attr) ++ dev_port = strtol(attr, NULL, 10); ++ ++ s = names->pci_onboard; ++ l = sizeof(names->pci_onboard); ++ l = strpcpyf(&s, l, "o%d", idx); ++ if (dev_port > 0) ++ l = strpcpyf(&s, l, "d%d", dev_port); ++ if (l == 0) ++ names->pci_onboard[0] = '\0'; + + names->pci_onboard_label = udev_device_get_sysattr_value(names->pcidev, "label"); ++ + return 0; + } + diff --git a/SOURCES/0137-Fix-a-few-signed-unsigned-format-string-issues.patch b/SOURCES/0137-Fix-a-few-signed-unsigned-format-string-issues.patch deleted file mode 100644 index 1991645..0000000 --- a/SOURCES/0137-Fix-a-few-signed-unsigned-format-string-issues.patch +++ /dev/null @@ -1,81 +0,0 @@ -From fbf1747793446a4779dbd503ba07d3e0cb3cd360 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 d9de46d..b3cb04b 100644 ---- a/src/udev/udev-builtin-net_id.c -+++ b/src/udev/udev-builtin-net_id.c -@@ -170,23 +170,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 */ -@@ -243,7 +237,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; -@@ -345,11 +338,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/SOURCES/0137-udev-net_id-improve-comments.patch b/SOURCES/0137-udev-net_id-improve-comments.patch new file mode 100644 index 0000000..7af802d --- /dev/null +++ b/SOURCES/0137-udev-net_id-improve-comments.patch @@ -0,0 +1,35 @@ +From 127c3f7b5ca3158851dc4a747f664ce43b2a94ee Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Wed, 1 Apr 2015 23:34:19 +0200 +Subject: [PATCH] udev: net_id - improve comments + +The dev_port concept is a bit confusing, expand on the comment a bit. + +Conflicts: + src/udev/udev-builtin-net_id.c +--- + src/udev/udev-builtin-net_id.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c +index 6a5ada6..2cc1fd4 100644 +--- a/src/udev/udev-builtin-net_id.c ++++ b/src/udev/udev-builtin-net_id.c +@@ -146,7 +146,7 @@ static int dev_pci_onboard(struct udev_device *dev, struct netnames *names) { + if (idx <= 0) + return -EINVAL; + +- /* kernel provided multi-device index */ ++ /* kernel provided port index for multiple ports on a single PCI function */ + attr = udev_device_get_sysattr_value(dev, "dev_port"); + if (attr) + dev_port = strtol(attr, NULL, 10); +@@ -199,7 +199,7 @@ static int dev_pci_slot(struct udev_device *dev, struct netnames *names) { + if (sscanf(udev_device_get_sysname(names->pcidev), "%x:%x:%x.%u", &domain, &bus, &slot, &func) != 4) + return -ENOENT; + +- /* kernel provided multi-device index */ ++ /* kernel provided port index for multiple ports on a single PCI function */ + attr = udev_device_get_sysattr_value(dev, "dev_id"); + if (attr) { + dev_id = strtol(attr, NULL, 16); diff --git a/SOURCES/0138-journal-file-protect-against-alloca-0.patch b/SOURCES/0138-journal-file-protect-against-alloca-0.patch deleted file mode 100644 index c069194..0000000 --- a/SOURCES/0138-journal-file-protect-against-alloca-0.patch +++ /dev/null @@ -1,23 +0,0 @@ -From d3bf15d0b7c461aae4d97fe6425a6f0cea277222 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 962cdd6..ebf72f3 100644 ---- a/src/journal/journal-file.c -+++ b/src/journal/journal-file.c -@@ -2730,7 +2730,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/SOURCES/0138-udev-restore-udevadm-settle-timeout.patch b/SOURCES/0138-udev-restore-udevadm-settle-timeout.patch new file mode 100644 index 0000000..3127a1c --- /dev/null +++ b/SOURCES/0138-udev-restore-udevadm-settle-timeout.patch @@ -0,0 +1,53 @@ +From b2575f7d4f06ab9df5c5744e0324160effda437e Mon Sep 17 00:00:00 2001 +From: Nir Soffer +Date: Wed, 8 Apr 2015 04:04:16 +0300 +Subject: [PATCH] udev: restore udevadm settle timeout + +Commit 9ea28c55a2 (udev: remove seqnum API and all assumptions about +seqnums) introduced a regresion, ignoring the timeout option when +waiting until the event queue is empty. + +Previously, if the udev event queue was not empty when the timeout was +expired, udevadm settle was returning with exit code 1. To check if the +queue is empty, you could invoke udevadm settle with timeout=0. This +patch restores the previous behavior. + +(David: fixed timeout==0 handling and dropped redundant assignment) + +Cherry-picked from: 0736455b1186c9515e0f093e1e686e684d225787 +Resolves: #1210981 +--- + src/udev/udevadm-settle.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/udev/udevadm-settle.c b/src/udev/udevadm-settle.c +index fff5de7..e60c462 100644 +--- a/src/udev/udevadm-settle.c ++++ b/src/udev/udevadm-settle.c +@@ -56,6 +56,7 @@ static int adm_settle(struct udev *udev, int argc, char *argv[]) { + { "quiet", no_argument, NULL, 'q' }, /* removed */ + {} + }; ++ usec_t deadline; + const char *exists = NULL; + unsigned int timeout = 120; + struct pollfd pfd[1] = { {.fd = -1}, }; +@@ -105,6 +106,8 @@ static int adm_settle(struct udev *udev, int argc, char *argv[]) { + return EXIT_FAILURE; + } + ++ deadline = now(CLOCK_MONOTONIC) + timeout * USEC_PER_SEC; ++ + /* guarantee that the udev daemon isn't pre-processing */ + if (getuid() == 0) { + struct udev_ctrl *uctrl; +@@ -146,6 +149,9 @@ static int adm_settle(struct udev *udev, int argc, char *argv[]) { + break; + } + ++ if (timeout > 0 && now(CLOCK_MONOTONIC) >= deadline) ++ break; ++ + /* wake up when queue is empty */ + if (poll(pfd, 1, MSEC_PER_SEC) > 0 && pfd[0].revents & POLLIN) + udev_queue_flush(queue); diff --git a/SOURCES/0139-man-describe-journalctl-show-cursor.patch b/SOURCES/0139-man-describe-journalctl-show-cursor.patch deleted file mode 100644 index e858676..0000000 --- a/SOURCES/0139-man-describe-journalctl-show-cursor.patch +++ /dev/null @@ -1,42 +0,0 @@ -From d6be31a099e36738c48a322466f080701a39d1a9 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 b5a0c53..dd8cb18 100644 ---- a/man/journalctl.xml -+++ b/man/journalctl.xml -@@ -565,11 +565,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/SOURCES/0139-udev-settle-should-return-immediately-when-timeout-i.patch b/SOURCES/0139-udev-settle-should-return-immediately-when-timeout-i.patch new file mode 100644 index 0000000..90b6c7b --- /dev/null +++ b/SOURCES/0139-udev-settle-should-return-immediately-when-timeout-i.patch @@ -0,0 +1,38 @@ +From 98b78068d13095fdd40883b2b6c815a9ebb59435 Mon Sep 17 00:00:00 2001 +From: Nir Soffer +Date: Sun, 19 Apr 2015 03:41:26 +0300 +Subject: [PATCH] udev: settle should return immediately when timeout is 0 + +udevadm manual says: + + A value of 0 will check if the queue is empty and always return + immediately. + +However, currently we ignore the deadline if the value is 0, and wait +without any limit. + +Zero timeout behaved according to the documentation until commit +ead7c62ab7 (udevadm: settle - kill alarm()). Looking at this patch, it +seems that the behavior change was unintended. + +This patch restores the documented behavior. + +Cherry-picked from: bf23b9f86f6807c3029a6a46e1999ae0c87ca22a +Resolves: #1210981 +--- + src/udev/udevadm-settle.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/udev/udevadm-settle.c b/src/udev/udevadm-settle.c +index e60c462..40e3e28 100644 +--- a/src/udev/udevadm-settle.c ++++ b/src/udev/udevadm-settle.c +@@ -149,7 +149,7 @@ static int adm_settle(struct udev *udev, int argc, char *argv[]) { + break; + } + +- if (timeout > 0 && now(CLOCK_MONOTONIC) >= deadline) ++ if (now(CLOCK_MONOTONIC) >= deadline) + break; + + /* wake up when queue is empty */ diff --git a/SOURCES/0140-journal-fix-against-theoretical-undefined-behavior.patch b/SOURCES/0140-journal-fix-against-theoretical-undefined-behavior.patch deleted file mode 100644 index b7737e3..0000000 --- a/SOURCES/0140-journal-fix-against-theoretical-undefined-behavior.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 072cebc2c736bec33e90299b49d82976c12b5549 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 ebf72f3..2c0fd0c 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/SOURCES/0140-udev-Fix-ping-timeout-when-settle-timeout-is-0.patch b/SOURCES/0140-udev-Fix-ping-timeout-when-settle-timeout-is-0.patch new file mode 100644 index 0000000..76f0a21 --- /dev/null +++ b/SOURCES/0140-udev-Fix-ping-timeout-when-settle-timeout-is-0.patch @@ -0,0 +1,30 @@ +From e7cd53f60cc2cb5e98efa0e88cfd0e7dd8325085 Mon Sep 17 00:00:00 2001 +From: Nir Soffer +Date: Sun, 19 Apr 2015 02:49:47 +0300 +Subject: [PATCH] udev: Fix ping timeout when settle timeout is 0 + +When running udevadm settle --timeout=0, the ping always times out, and +udevadm will return 0 without checking the queue state. + +(David: Use a reasonable timeout to still get the barrier provided by + ctrl-ping) + +Cherry-picked from: 7375b3c4871861f100860ea4c2848e66b60e6ca4 +Resolves: #1210981 +--- + src/udev/udevadm-settle.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/udev/udevadm-settle.c b/src/udev/udevadm-settle.c +index 40e3e28..33597bc 100644 +--- a/src/udev/udevadm-settle.c ++++ b/src/udev/udevadm-settle.c +@@ -114,7 +114,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) { ++ if (udev_ctrl_send_ping(uctrl, MAX(5U, timeout)) < 0) { + log_debug("no connection to daemon"); + udev_ctrl_unref(uctrl); + return EXIT_SUCCESS; diff --git a/SOURCES/0141-detect-virt-use-proc-device-tree.patch b/SOURCES/0141-detect-virt-use-proc-device-tree.patch new file mode 100644 index 0000000..c284d51 --- /dev/null +++ b/SOURCES/0141-detect-virt-use-proc-device-tree.patch @@ -0,0 +1,29 @@ +From 436a001a5a28b9e3dd0988cc5a88bd3d7ec0acc8 Mon Sep 17 00:00:00 2001 +From: Andrew Jones +Date: Tue, 31 Mar 2015 11:08:11 +0200 +Subject: [PATCH] detect-virt: use /proc/device-tree + +Kernel doc Documentation/ABI/testing/sysfs-firmware-ofw says that +the /proc/device-tree symlink should be used, as opposed to +directly accessing /sys/firmware/devicetree/base. The former is +ABI, but not the later. + +Cherry-picked from: b8f1df82646d2 +Resolves: #1207773 +--- + src/shared/virt.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/virt.c b/src/shared/virt.c +index 7c1381f..aa3501f 100644 +--- a/src/shared/virt.c ++++ b/src/shared/virt.c +@@ -106,7 +106,7 @@ static int detect_vm_devicetree(const char **_id) { + _cleanup_free_ char *hvtype = NULL; + int r; + +- r = read_one_line_file("/sys/firmware/devicetree/base/hypervisor/compatible", &hvtype); ++ r = read_one_line_file("/proc/device-tree/hypervisor/compatible", &hvtype); + if (r >= 0) { + if (streq(hvtype, "linux,kvm")) { + *_id = "kvm"; diff --git a/SOURCES/0141-journald-downgrade-warning-message-when-dev-kmsg-doe.patch b/SOURCES/0141-journald-downgrade-warning-message-when-dev-kmsg-doe.patch deleted file mode 100644 index 2ba9527..0000000 --- a/SOURCES/0141-journald-downgrade-warning-message-when-dev-kmsg-doe.patch +++ /dev/null @@ -1,24 +0,0 @@ -From b92a3a82b9bfdce438821f6f941f81ef2b4dd9e1 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/SOURCES/0142-ARM-detect-virt-detect-Xen.patch b/SOURCES/0142-ARM-detect-virt-detect-Xen.patch new file mode 100644 index 0000000..159288a --- /dev/null +++ b/SOURCES/0142-ARM-detect-virt-detect-Xen.patch @@ -0,0 +1,34 @@ +From 6378069c62b2e5b1005df6bd243709181c178d1c Mon Sep 17 00:00:00 2001 +From: Andrew Jones +Date: Tue, 31 Mar 2015 11:08:12 +0200 +Subject: [PATCH] ARM: detect-virt: detect Xen + +Cherry-picked from: db6a86897efb3 +Resolves: #1207773 +--- + src/shared/virt.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/shared/virt.c b/src/shared/virt.c +index aa3501f..7125232 100644 +--- a/src/shared/virt.c ++++ b/src/shared/virt.c +@@ -102,7 +102,7 @@ static int detect_vm_cpuid(const char **_id) { + } + + static int detect_vm_devicetree(const char **_id) { +-#if defined(__powerpc__) || defined(__powerpc64__) ++#if defined(__arm__) || defined(__aarch64__) || defined(__powerpc__) || defined(__powerpc64__) + _cleanup_free_ char *hvtype = NULL; + int r; + +@@ -111,6 +111,9 @@ static int detect_vm_devicetree(const char **_id) { + if (streq(hvtype, "linux,kvm")) { + *_id = "kvm"; + return 1; ++ } else if (strstr(hvtype, "xen")) { ++ *_id = "xen"; ++ return 1; + } + } + #endif diff --git a/SOURCES/0142-journal-file.c-remove-redundant-assignment-of-variab.patch b/SOURCES/0142-journal-file.c-remove-redundant-assignment-of-variab.patch deleted file mode 100644 index 7d152a1..0000000 --- a/SOURCES/0142-journal-file.c-remove-redundant-assignment-of-variab.patch +++ /dev/null @@ -1,24 +0,0 @@ -From cbd7e523d1bccde7fc1ad2ca18c74b8ee00f2940 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 2c0fd0c..9f04c58 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/SOURCES/0143-ARM-detect-virt-detect-QEMU-KVM.patch b/SOURCES/0143-ARM-detect-virt-detect-QEMU-KVM.patch new file mode 100644 index 0000000..9a9af94 --- /dev/null +++ b/SOURCES/0143-ARM-detect-virt-detect-QEMU-KVM.patch @@ -0,0 +1,55 @@ +From fa2237b9987c39147704274937895547c8c8d647 Mon Sep 17 00:00:00 2001 +From: Andrew Jones +Date: Tue, 31 Mar 2015 11:08:13 +0200 +Subject: [PATCH] ARM: detect-virt: detect QEMU/KVM + +QEMU/KVM guests do not have hypervisor nodes, but they do have +fw-cfg nodes (since qemu v2.3.0-rc0). fw-cfg nodes are documented, +see kernel doc Documentation/devicetree/bindings/arm/fw-cfg.txt, +and therefore we should be able to rely on it in this detection. + +Unfortunately, we currently don't have enough information in the +DT, or elsewhere, to determine if we're using KVM acceleration +with QEMU or not, so we can only report 'qemu' at this time, even +if KVM is in use. This shouldn't really matter in practice though, +because if detect-virt is used interactively it will be clear to +the user whether or not KVM acceleration is present by the overall +speed of the guest. If used by a script, then the script's behavior +should not change whether it's 'qemu' or 'kvm'. QEMU emulated +guests and QEMU/KVM guests of the same type should behave +identically, only the speed at which they run should differ. + +Cherry-picked from: ce09c71d56a11 +Resolves: #1207773 +--- + src/shared/virt.c | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +diff --git a/src/shared/virt.c b/src/shared/virt.c +index 7125232..54c4655 100644 +--- a/src/shared/virt.c ++++ b/src/shared/virt.c +@@ -115,6 +115,23 @@ static int detect_vm_devicetree(const char **_id) { + *_id = "xen"; + return 1; + } ++ } else if (r == -ENOENT) { ++ _cleanup_closedir_ DIR *dir = NULL; ++ struct dirent *dent; ++ ++ dir = opendir("/proc/device-tree"); ++ if (!dir) { ++ if (errno == ENOENT) ++ return 0; ++ return -errno; ++ } ++ ++ FOREACH_DIRENT(dent, dir, return -errno) { ++ if (strstr(dent->d_name, "fw-cfg")) { ++ *_id = "qemu"; ++ return 1; ++ } ++ } + } + #endif + return 0; diff --git a/SOURCES/0143-login-Don-t-stop-a-running-user-manager-from-garbage.patch b/SOURCES/0143-login-Don-t-stop-a-running-user-manager-from-garbage.patch deleted file mode 100644 index d0aa0b2..0000000 --- a/SOURCES/0143-login-Don-t-stop-a-running-user-manager-from-garbage.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 85e0484fedb9f4cf0220e19a5207a3923326fb7f 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/SOURCES/0144-Persistent-by_path-links-for-ata-devices.patch b/SOURCES/0144-Persistent-by_path-links-for-ata-devices.patch new file mode 100644 index 0000000..3f83c2b --- /dev/null +++ b/SOURCES/0144-Persistent-by_path-links-for-ata-devices.patch @@ -0,0 +1,104 @@ +From 8572638ab99090b016ccc28ac1f69aa7759e43cf Mon Sep 17 00:00:00 2001 +From: Robert Milasan +Date: Thu, 12 Jul 2012 15:56:34 +0000 +Subject: [PATCH] Persistent by_path links for ata devices + +With newer kernel we have the 'port_no' attribute, +which allows us to construct a valid ata by-path link. + +With this patch ATA links of the form + +ata-.[01] + +(for master/slave devices) or + +ata-..0 + +(for devices behind port multipliers) +are generated. + +References: bnc#770910,FATE#317063 + +Signed-off-by: Robert Milasan +Signed-off-by: Hannes Reinecke + +Downstream patch +https://build.opensuse.org/package/view_file/Base:System/systemd/1001-re-enable-by_path-links-for-ata-devices.patch + +Resolves: #1045498 +--- + src/udev/udev-builtin-path_id.c | 53 +++++++++++++++++++++++++++++++---------- + 1 file changed, 41 insertions(+), 12 deletions(-) + +diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c +index b6749aa..bb0a624 100644 +--- a/src/udev/udev-builtin-path_id.c ++++ b/src/udev/udev-builtin-path_id.c +@@ -426,6 +426,46 @@ static struct udev_device *handle_scsi_hyperv(struct udev_device *parent, char * + return parent; + } + ++static struct udev_device *handle_ata(struct udev_device *parent, char **path) ++{ ++ struct udev *udev = udev_device_get_udev(parent); ++ struct udev_device *hostdev, *portdev; ++ int host, bus, target, lun, port_no; ++ const char *name, *atahost, *port; ++ ++ hostdev = udev_device_get_parent_with_subsystem_devtype(parent, "scsi", "scsi_host"); ++ if (hostdev == NULL) ++ return NULL; ++ ++ name = udev_device_get_sysname(parent); ++ if (sscanf(name, "%d:%d:%d:%d", &host, &bus, &target, &lun) != 4) ++ return NULL; ++ ++ /* The ata port is the parent of the SCSI host */ ++ hostdev = udev_device_get_parent(hostdev); ++ atahost = udev_device_get_sysname(hostdev); ++ if (strncmp(atahost, "ata", 3)) ++ return NULL; ++ ++ /* ATA port number is found in 'port_no' attribute */ ++ portdev = udev_device_new_from_subsystem_sysname(udev, "ata_port", ++ atahost); ++ port = udev_device_get_sysattr_value(portdev, "port_no"); ++ if (!port || sscanf(port, "%d", &port_no) != 1) { ++ hostdev = NULL; ++ goto out; ++ } ++ if (bus != 0) ++ /* Devices behind port multiplier have a bus != 0*/ ++ path_prepend(path, "ata-%u.%u.0", port_no, bus); ++ else ++ /* Master/slave are distinguished by target id */ ++ path_prepend(path, "ata-%u.%u", port_no, target); ++out: ++ udev_device_unref(portdev); ++ return hostdev; ++} ++ + static struct udev_device *handle_scsi(struct udev_device *parent, char **path, bool *supported_parent) { + const char *devtype; + const char *name; +@@ -465,19 +505,8 @@ static struct udev_device *handle_scsi(struct udev_device *parent, char **path, + goto out; + } + +- /* +- * We do not support the ATA transport class, it uses global counters +- * to name the ata devices which numbers spread across multiple +- * controllers. +- * +- * The real link numbers are not exported. Also, possible chains of ports +- * behind port multipliers cannot be composed that way. +- * +- * Until all that is solved at the kernel level, there are no by-path/ +- * links for ATA devices. +- */ + if (strstr(name, "/ata") != NULL) { +- parent = NULL; ++ parent = handle_ata(parent, path); + goto out; + } + diff --git a/SOURCES/0144-log-when-we-log-to-dev-console-and-got-disconnected-.patch b/SOURCES/0144-log-when-we-log-to-dev-console-and-got-disconnected-.patch deleted file mode 100644 index 5af8230..0000000 --- a/SOURCES/0144-log-when-we-log-to-dev-console-and-got-disconnected-.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 87823e84ec7b0e6939596063c540219a681bbbb9 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 8f4995a..605d069 100644 ---- a/src/shared/log.c -+++ b/src/shared/log.c -@@ -337,8 +337,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/SOURCES/0145-loginctl-when-showing-device-tree-of-seats-with-no-d.patch b/SOURCES/0145-loginctl-when-showing-device-tree-of-seats-with-no-d.patch deleted file mode 100644 index 983678c..0000000 --- a/SOURCES/0145-loginctl-when-showing-device-tree-of-seats-with-no-d.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 63c96665d60fd219410eb213b2e2fd83ef242616 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 3c03bd1..14de7d8 100644 ---- a/src/login/sysfs-show.c -+++ b/src/login/sysfs-show.c -@@ -182,6 +182,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)"); - - finish: - if (e) diff --git a/SOURCES/0145-man-document-forwarding-to-syslog-better.patch b/SOURCES/0145-man-document-forwarding-to-syslog-better.patch new file mode 100644 index 0000000..710eaf2 --- /dev/null +++ b/SOURCES/0145-man-document-forwarding-to-syslog-better.patch @@ -0,0 +1,118 @@ +From 24d007a0a8a77a6b75c6c7a403fc8d107875ebdc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 9 May 2015 16:20:51 -0500 +Subject: [PATCH] man: document forwarding to syslog better + +https://bugzilla.redhat.com/show_bug.cgi?id=1147651 + +Cherry-picked from: 589532d0 +Resolves: #1177336 +--- + man/journald.conf.xml | 70 ++++++++++++++++++++++++++++++++------------------- + 1 file changed, 44 insertions(+), 26 deletions(-) + +diff --git a/man/journald.conf.xml b/man/journald.conf.xml +index 85146b0..abfe313 100644 +--- a/man/journald.conf.xml ++++ b/man/journald.conf.xml +@@ -97,7 +97,7 @@ + needed, so that its existence controls where log data goes. + none turns off all storage, all log data + received will be dropped. Forwarding to other targets, such as +- the console, the kernel log buffer or a syslog daemon will ++ the console, the kernel log buffer, or a syslog socket will + still work however. Defaults to + auto. + +@@ -220,27 +220,19 @@ + journald will stop using more space, but it will not be + removing existing files to go reduce footprint either. + +- SystemMaxFileSize= +- and +- RuntimeMaxFileSize= +- control how large individual journal +- files may grow at maximum. This +- influences the granularity in which +- disk space is made available through +- rotation, i.e. deletion of historic +- data. Defaults to one eighth of the +- values configured with ++ SystemMaxFileSize= and ++ RuntimeMaxFileSize= control how large ++ individual journal files may grow at maximum. This influences ++ the granularity in which disk space is made available through ++ rotation, i.e. deletion of historic data. Defaults to one ++ eighth of the values configured with + SystemMaxUse= and +- RuntimeMaxUse=, so +- that usually seven rotated journal +- files are kept as history. Specify +- values in bytes or use K, M, G, T, P, +- E as units for the specified sizes +- (equal to 1024, 1024²,... bytes). +- Note that size limits are enforced +- synchronously when journal files are +- extended, and no explicit rotation +- step triggered by time is ++ RuntimeMaxUse=, so that usually seven ++ rotated journal files are kept as history. Specify values in ++ bytes or use K, M, G, T, P, E as units for the specified sizes ++ (equal to 1024, 1024²,... bytes). Note that size limits are ++ enforced synchronously when journal files are extended, and no ++ explicit rotation step triggered by time is + needed. + + +@@ -308,13 +300,13 @@ + daemon, to the kernel log buffer (kmsg), to the system + console, or sent as wall messages to all logged-in users. + These options take boolean arguments. If forwarding to syslog +- is enabled but no syslog daemon is running, the respective +- option has no effect. By default, only forwarding wall is +- enabled. These settings may be overridden at boot time with +- the kernel command line options ++ is enabled but nothing reads messages from the socket, ++ forwarding to syslog has no effect. By default, only ++ forwarding to wall is enabled. These settings may be ++ overridden at boot time with the kernel command line options + systemd.journald.forward_to_syslog=, + systemd.journald.forward_to_kmsg=, +- systemd.journald.forward_to_console= and ++ systemd.journald.forward_to_console=, and + systemd.journald.forward_to_wall=. When + forwarding to the console, the TTY to log to can be changed + with TTYPath=, described +@@ -366,6 +358,32 @@ + + + ++ Forwarding to traditional syslog daemons ++ ++ ++ Journal events can be transfered to a different logging daemon ++ in two different ways. In the first method, messages are ++ immediately forwarded to a socket ++ (/run/systemd/journal/syslog), where the ++ traditional syslog daemon can read them. This method is ++ controlled by ForwardToSyslog= option. In a ++ second method, a syslog daemon behaves like a normal journal ++ client, and reads messages from the journal files, similarly to ++ journalctl1. ++ In this method, messages do not have to be read immediately, ++ which allows a logging daemon which is only started late in boot ++ to access all messages since the start of the system. In ++ addition, full structured meta-data is available to it. This ++ method of course is available only if the messages are stored in ++ a journal file at all. So it will work if ++ Storage=none is set. It should be noted that ++ usualy the second method is used by syslog ++ daemons, so the Storage= option, and not the ++ ForwardToSyslog= option, is relevant for them. ++ ++ ++ ++ + See Also + + systemd1, diff --git a/SOURCES/0146-man-be-more-explicit-about-option-arguments-that-tak.patch b/SOURCES/0146-man-be-more-explicit-about-option-arguments-that-tak.patch deleted file mode 100644 index a0d5914..0000000 --- a/SOURCES/0146-man-be-more-explicit-about-option-arguments-that-tak.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 44d5ed4f1e398188bad5283fd75b91594de54cd0 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 dd8cb18..2ee1647 100644 ---- a/man/journalctl.xml -+++ b/man/journalctl.xml -@@ -714,7 +714,7 @@ - - - - - List the contents of -@@ -723,7 +723,7 @@ - description strings. - - If any -- ID128s are -+ 128-bit-IDs are - specified, only those entries are shown. - - -@@ -731,7 +731,7 @@ - - - - - Show the contents of -@@ -742,7 +742,7 @@ - files. - - If any -- ID128s are -+ 128-bit-IDs are - specified, only those entries are shown. - - diff --git a/SOURCES/0146-man-fix-typos-in-previous-comimt.patch b/SOURCES/0146-man-fix-typos-in-previous-comimt.patch new file mode 100644 index 0000000..80b822d --- /dev/null +++ b/SOURCES/0146-man-fix-typos-in-previous-comimt.patch @@ -0,0 +1,36 @@ +From 363e3817cc3462c42e837677768f10fa549966f7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 9 May 2015 19:46:15 -0400 +Subject: [PATCH] man: fix typos in previous comimt + +Cherry-picked from: 7703bd4d +Resolves: #1177336 +--- + man/journald.conf.xml | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/man/journald.conf.xml b/man/journald.conf.xml +index abfe313..2cbe58b 100644 +--- a/man/journald.conf.xml ++++ b/man/journald.conf.xml +@@ -361,7 +361,7 @@ + Forwarding to traditional syslog daemons + + +- Journal events can be transfered to a different logging daemon ++ Journal events can be transferred to a different logging daemon + in two different ways. In the first method, messages are + immediately forwarded to a socket + (/run/systemd/journal/syslog), where the +@@ -375,9 +375,9 @@ + to access all messages since the start of the system. In + addition, full structured meta-data is available to it. This + method of course is available only if the messages are stored in +- a journal file at all. So it will work if ++ a journal file at all. So it will not work if + Storage=none is set. It should be noted that +- usualy the second method is used by syslog ++ usually the second method is used by syslog + daemons, so the Storage= option, and not the + ForwardToSyslog= option, is relevant for them. + diff --git a/SOURCES/0147-LSB-always-add-network-online.target-to-services-wit.patch b/SOURCES/0147-LSB-always-add-network-online.target-to-services-wit.patch new file mode 100644 index 0000000..a277278 --- /dev/null +++ b/SOURCES/0147-LSB-always-add-network-online.target-to-services-wit.patch @@ -0,0 +1,31 @@ +From 47ad778fc50382b916683a628b3f6f62754cc17d Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Wed, 13 May 2015 15:20:30 +0200 +Subject: [PATCH] LSB: always add network-online.target to services with + priority over 10 + +rhel-only + +Resolves: #1189253 +--- + src/sysv-generator/sysv-generator.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c +index 0125ca2..cfc4a99 100644 +--- a/src/sysv-generator/sysv-generator.c ++++ b/src/sysv-generator/sysv-generator.c +@@ -692,6 +692,13 @@ static int fix_order(SysvStub *s, Hashmap *all_services) { + if (s->sysv_start_priority < 0) + return 0; + ++ /* RHEL-only, services with more than 10 should be start after network */ ++ if (s->sysv_start_priority > 10) { ++ r = strv_extend(&s->after, SPECIAL_NETWORK_ONLINE_TARGET); ++ if (r < 0) ++ return log_oom(); ++ } ++ + HASHMAP_FOREACH(other, all_services, j) { + if (s == other) + continue; diff --git a/SOURCES/0147-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch b/SOURCES/0147-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch deleted file mode 100644 index 247541f..0000000 --- a/SOURCES/0147-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 214ead7a0ff493e8961e0368ece5414d1409c4cf 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 2ee1647..0e188df 100644 ---- a/man/journalctl.xml -+++ b/man/journalctl.xml -@@ -770,10 +770,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/SOURCES/0148-keymap-Refactor-Acer-tables.patch b/SOURCES/0148-keymap-Refactor-Acer-tables.patch deleted file mode 100644 index c7f7417..0000000 --- a/SOURCES/0148-keymap-Refactor-Acer-tables.patch +++ /dev/null @@ -1,145 +0,0 @@ -From fd5f1706cda158e7a89e955f861bd34d7a8b429f 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/SOURCES/0148-rules-enable-memory-hotplug.patch b/SOURCES/0148-rules-enable-memory-hotplug.patch new file mode 100644 index 0000000..2583020 --- /dev/null +++ b/SOURCES/0148-rules-enable-memory-hotplug.patch @@ -0,0 +1,24 @@ +From 57adc4317ee2553d2d3ac84ef9625ed9c1cf5700 Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Wed, 13 May 2015 16:56:44 +0200 +Subject: [PATCH] rules: enable memory hotplug + +rhel-only + +Resolves: #1105020 +--- + rules/40-redhat.rules | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/rules/40-redhat.rules b/rules/40-redhat.rules +index 2b494e5..8231caa 100644 +--- a/rules/40-redhat.rules ++++ b/rules/40-redhat.rules +@@ -1,3 +1,7 @@ + # do not edit this file, it will be overwritten on update + ++# CPU hotadd request + SUBSYSTEM=="cpu", ACTION=="add", TEST=="online", ATTR{online}=="0", ATTR{online}="1" ++ ++# Memory hotadd request ++SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online" diff --git a/SOURCES/0149-logind-remove-dead-variable.patch b/SOURCES/0149-logind-remove-dead-variable.patch deleted file mode 100644 index d31a83d..0000000 --- a/SOURCES/0149-logind-remove-dead-variable.patch +++ /dev/null @@ -1,37 +0,0 @@ -From d999e2ffa714ceda7859df25e2db296444dcbd1b 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/SOURCES/0149-rules-reload-sysctl-settings-when-the-bridge-module-.patch b/SOURCES/0149-rules-reload-sysctl-settings-when-the-bridge-module-.patch new file mode 100644 index 0000000..1714546 --- /dev/null +++ b/SOURCES/0149-rules-reload-sysctl-settings-when-the-bridge-module-.patch @@ -0,0 +1,22 @@ +From 05f3e4b89d6503a4a327be9bee9802097bc8c860 Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Wed, 13 May 2015 17:11:48 +0200 +Subject: [PATCH] rules: reload sysctl settings when the bridge module is + loaded + +Resolves: #1182105 +--- + rules/40-redhat.rules | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/rules/40-redhat.rules b/rules/40-redhat.rules +index 8231caa..556a3a3 100644 +--- a/rules/40-redhat.rules ++++ b/rules/40-redhat.rules +@@ -5,3 +5,6 @@ SUBSYSTEM=="cpu", ACTION=="add", TEST=="online", ATTR{online}=="0", ATTR{online} + + # Memory hotadd request + SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online" ++ ++# reload sysctl.conf / sysctl.conf.d settings when the bridge module is loaded ++ACTION=="add", SUBSYSTEM=="module", KERNEL=="bridge", RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/proc/sys/net/bridge" diff --git a/SOURCES/0150-console-getty.service-don-t-start-when-dev-console-i.patch b/SOURCES/0150-console-getty.service-don-t-start-when-dev-console-i.patch new file mode 100644 index 0000000..ce00bef --- /dev/null +++ b/SOURCES/0150-console-getty.service-don-t-start-when-dev-console-i.patch @@ -0,0 +1,54 @@ +From c37bc5ac3a7282cccd090d20a3cf7120e31c4ee5 Mon Sep 17 00:00:00 2001 +From: Jan Pazdziora +Date: Fri, 13 Mar 2015 12:57:18 +0100 +Subject: [PATCH] console-getty.service: don't start when /dev/console is + missing + +Create minimal image which runs systemd + + FROM rhel7.1 + RUN yum install -y /usr/bin/ps + ENV container docker + CMD [ "/usr/sbin/init" ] + +When you run the container without -t, the process + + /sbin/agetty --noclear --keep-baud console 115200 38400 9600 + +is not happy and checking the journal in the container, there is a stream of + +Mar 13 04:50:15 11bf07f59fff agetty[66]: /dev/console: No such file or directory +Mar 13 04:50:25 11bf07f59fff systemd[1]: console-getty.service holdoff time over, scheduling restart. +Mar 13 04:50:25 11bf07f59fff systemd[1]: Stopping Console Getty... +Mar 13 04:50:25 11bf07f59fff systemd[1]: Starting Console Getty... +Mar 13 04:50:25 11bf07f59fff systemd[1]: Started Console Getty. +Mar 13 04:50:25 11bf07f59fff agetty[67]: /dev/console: No such file or directory +Mar 13 04:50:35 11bf07f59fff systemd[1]: console-getty.service holdoff time over, scheduling restart. +Mar 13 04:50:35 11bf07f59fff systemd[1]: Stopping Console Getty... +Mar 13 04:50:35 11bf07f59fff systemd[1]: Starting Console Getty... +Mar 13 04:50:35 11bf07f59fff systemd[1]: Started Console Getty. +Mar 13 04:50:35 11bf07f59fff agetty[74]: /dev/console: No such file or directory +Mar 13 04:50:45 11bf07f59fff systemd[1]: console-getty.service holdoff time over, scheduling restart. +Mar 13 04:50:45 11bf07f59fff systemd[1]: Stopping Console Getty... +Mar 13 04:50:45 11bf07f59fff systemd[1]: Starting Console Getty... + +(cherry picked from commit 1b41981d9a62443d566df6bcabc1b5024e9f5e4a) + +Cherry-picked from: 77d83ce +Resolves: #1222517 +--- + units/console-getty.service.m4.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/units/console-getty.service.m4.in b/units/console-getty.service.m4.in +index 8ac51a4..413d940 100644 +--- a/units/console-getty.service.m4.in ++++ b/units/console-getty.service.m4.in +@@ -9,6 +9,7 @@ + Description=Console Getty + Documentation=man:agetty(8) + After=systemd-user-sessions.service plymouth-quit-wait.service ++ConditionPathExists=/dev/console + m4_ifdef(`HAVE_SYSV_COMPAT', + After=rc-local.service + )m4_dnl diff --git a/SOURCES/0150-hwdb-update.patch b/SOURCES/0150-hwdb-update.patch deleted file mode 100644 index 27dd141..0000000 --- a/SOURCES/0150-hwdb-update.patch +++ /dev/null @@ -1,4917 +0,0 @@ -From 2ad4d7a28f6875caaeba0af6d093d644f995f4ff 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/SOURCES/0151-delta-replace-readdir_r-with-readdir.patch b/SOURCES/0151-delta-replace-readdir_r-with-readdir.patch deleted file mode 100644 index ca8ebba..0000000 --- a/SOURCES/0151-delta-replace-readdir_r-with-readdir.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 095e14ab14e22d4fa605411bb0f47a856c90df8b 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 193642d..c2550d6 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/SOURCES/0151-resolved-Do-not-add-.busname-dependencies-when-compi.patch b/SOURCES/0151-resolved-Do-not-add-.busname-dependencies-when-compi.patch new file mode 100644 index 0000000..1bee381 --- /dev/null +++ b/SOURCES/0151-resolved-Do-not-add-.busname-dependencies-when-compi.patch @@ -0,0 +1,63 @@ +From 33ee9624d4fb50f29f2e3c8ffd0c7efa95a03f02 Mon Sep 17 00:00:00 2001 +From: Dimitri John Ledkov +Date: Tue, 17 Mar 2015 16:37:07 +0100 +Subject: [PATCH] resolved: Do not add .busname dependencies, when compiling + without kdbus. + +(cherry picked from commit defa8e675b2903ad53e093bb2847c7256f0779a5) + +Cherry-picked from: 33ff64c +Resolves: #1222517 +--- + Makefile.am | 2 +- + units/.gitignore | 1 + + units/{systemd-resolved.service.in => systemd-resolved.service.m4.in} | 2 ++ + 3 files changed, 4 insertions(+), 1 deletion(-) + rename units/{systemd-resolved.service.in => systemd-resolved.service.m4.in} (96%) + +diff --git a/Makefile.am b/Makefile.am +index 8474b29..604eaf2 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -5520,7 +5520,7 @@ dist_dbussystemservice_DATA += \ + src/resolve/org.freedesktop.resolve1.service + + EXTRA_DIST += \ +- units/systemd-resolved.service.in ++ units/systemd-resolved.service.m4.in + + SYSTEM_UNIT_ALIASES += \ + systemd-resolved.service dbus-org.freedesktop.resolve1.service +diff --git a/units/.gitignore b/units/.gitignore +index 638a7ab..7f3e0d0 100644 +--- a/units/.gitignore ++++ b/units/.gitignore +@@ -58,6 +58,7 @@ + /systemd-reboot.service + /systemd-remount-fs.service + /systemd-resolved.service ++/systemd-resolved.service.m4 + /systemd-hibernate-resume@.service + /systemd-rfkill@.service + /systemd-shutdownd.service +diff --git a/units/systemd-resolved.service.in b/units/systemd-resolved.service.m4.in +similarity index 96% +rename from units/systemd-resolved.service.in +rename to units/systemd-resolved.service.m4.in +index b643da9..d133847 100644 +--- a/units/systemd-resolved.service.in ++++ b/units/systemd-resolved.service.m4.in +@@ -10,11 +10,13 @@ Description=Network Name Resolution + Documentation=man:systemd-resolved.service(8) + After=systemd-networkd.service network.service + ++m4_ifdef(`ENABLE_KDBUS', + # On kdbus systems we pull in the busname explicitly, because it + # carries policy that allows the daemon to acquire its name. + Wants=org.freedesktop.resolve1.busname + After=org.freedesktop.resolve1.busname + ++)m4_dnl + [Service] + Type=notify + Restart=always diff --git a/SOURCES/0152-delta-fix-delta-for-drop-ins.patch b/SOURCES/0152-delta-fix-delta-for-drop-ins.patch deleted file mode 100644 index 7a257aa..0000000 --- a/SOURCES/0152-delta-fix-delta-for-drop-ins.patch +++ /dev/null @@ -1,375 +0,0 @@ -From 5bb09b7611b2bb5df0df432df20c84ca741cad24 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 c2550d6..06c7431 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; - - dirent_ensure_type(d, de); - -@@ -303,9 +327,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) -@@ -315,44 +338,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; - } -@@ -367,10 +383,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) { -@@ -411,21 +425,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); - } - } - -@@ -550,35 +563,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; - -@@ -597,14 +581,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 -@@ -615,7 +599,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/SOURCES/0152-man-add-journal-remote.conf-5.patch b/SOURCES/0152-man-add-journal-remote.conf-5.patch new file mode 100644 index 0000000..36a4b7d --- /dev/null +++ b/SOURCES/0152-man-add-journal-remote.conf-5.patch @@ -0,0 +1,181 @@ +From 825d40b7ccdde8b4b9a5299d6e6747c80b9519e2 Mon Sep 17 00:00:00 2001 +From: Chris Morgan +Date: Sat, 21 Mar 2015 20:47:46 -0400 +Subject: [PATCH] man: add journal-remote.conf(5) + +(cherry picked from commit eaa5251d9167027275d8275862e23e0b7dc8866e) + +Cherry-picked from: 90d2614 +Resolves: #1222517 +--- + Makefile-man.am | 7 +++ + man/journal-remote.conf.xml | 114 +++++++++++++++++++++++++++++++++++++++++ + man/systemd-journal-remote.xml | 1 + + 3 files changed, 122 insertions(+) + create mode 100644 man/journal-remote.conf.xml + +diff --git a/Makefile-man.am b/Makefile-man.am +index ac6f69a..084df75 100644 +--- a/Makefile-man.am ++++ b/Makefile-man.am +@@ -1358,14 +1358,20 @@ endif + + if HAVE_MICROHTTPD + MANPAGES += \ ++ man/journal-remote.conf.5 \ + man/systemd-journal-gatewayd.service.8 \ + man/systemd-journal-remote.8 \ + man/systemd-journal-upload.8 + MANPAGES_ALIAS += \ ++ man/journal-remote.conf.d.5 \ + man/systemd-journal-gatewayd.8 \ + man/systemd-journal-gatewayd.socket.8 ++man/journal-remote.conf.d.5: man/journal-remote.conf.5 + man/systemd-journal-gatewayd.8: man/systemd-journal-gatewayd.service.8 + man/systemd-journal-gatewayd.socket.8: man/systemd-journal-gatewayd.service.8 ++man/journal-remote.conf.d.html: man/journal-remote.conf.html ++ $(html-alias) ++ + man/systemd-journal-gatewayd.html: man/systemd-journal-gatewayd.service.html + $(html-alias) + +@@ -1662,6 +1668,7 @@ EXTRA_DIST += \ + man/hostname.xml \ + man/hostnamectl.xml \ + man/hwdb.xml \ ++ man/journal-remote.conf.xml \ + man/journalctl.xml \ + man/journald.conf.xml \ + man/kernel-command-line.xml \ +diff --git a/man/journal-remote.conf.xml b/man/journal-remote.conf.xml +new file mode 100644 +index 0000000..a7b2227 +--- /dev/null ++++ b/man/journal-remote.conf.xml +@@ -0,0 +1,114 @@ ++ ++ ++ ++ ++ ++ ++ ++ journal-remote.conf ++ systemd ++ ++ ++ ++ Developer ++ Chris ++ Morgan ++ chmorgan@gmail.com ++ ++ ++ ++ ++ ++ journal-remote.conf ++ 5 ++ ++ ++ ++ journal-remote.conf ++ journal-remote.conf.d ++ Journal remote service configuration files ++ ++ ++ ++ /etc/systemd/journal-remote.conf ++ /etc/systemd/journald.conf.d/*.conf ++ /run/systemd/journald.conf.d/*.conf ++ /usr/lib/systemd/journald.conf.d/*.conf ++ ++ ++ ++ Description ++ ++ These files configure various parameters of the systemd-remote-journal ++ application, ++ systemd-journal-remote8. ++ ++ ++ ++ ++ ++ Options ++ ++ All options are configured in the ++ [Remote] section: ++ ++ ++ ++ ++ SplitMode= ++ ++ One of host or none. ++ ++ ++ ++ ++ ServerKeyFile= ++ ++ SSL key in PEM format ++ ++ ++ ++ ServerCertificateFile= ++ ++ SSL CA certificate in PEM format. ++ ++ ++ ++ TrustedCertificateFile= ++ ++ SSL CA certificate. ++ ++ ++ ++ ++ ++ ++ ++ See Also ++ ++ systemd-journal-remote1, ++ systemd1, ++ systemd-journald.service8 ++ ++ ++ ++ +diff --git a/man/systemd-journal-remote.xml b/man/systemd-journal-remote.xml +index 2687662..d5bda63 100644 +--- a/man/systemd-journal-remote.xml ++++ b/man/systemd-journal-remote.xml +@@ -310,6 +310,7 @@ systemd-journal-remote --url http://some.host:19531/ + journalctl1, + systemd-journald.service8, + systemd-journal-gatewayd.service8 ++ journal-remote.conf5 + + + diff --git a/SOURCES/0153-delta-if-prefix-is-specified-only-show-overrides-the.patch b/SOURCES/0153-delta-if-prefix-is-specified-only-show-overrides-the.patch deleted file mode 100644 index efb109c..0000000 --- a/SOURCES/0153-delta-if-prefix-is-specified-only-show-overrides-the.patch +++ /dev/null @@ -1,251 +0,0 @@ -From 13fb7479365d958e76b149fe5615be74f519f03a 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 06c7431..a8dd57e 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 -@@ -348,7 +349,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; -@@ -393,20 +394,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: -@@ -425,24 +429,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; - } - -@@ -596,15 +617,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/SOURCES/0153-mount-don-t-run-quotaon-only-for-network-filesystems.patch b/SOURCES/0153-mount-don-t-run-quotaon-only-for-network-filesystems.patch new file mode 100644 index 0000000..89e0aad --- /dev/null +++ b/SOURCES/0153-mount-don-t-run-quotaon-only-for-network-filesystems.patch @@ -0,0 +1,32 @@ +From 1ab30e0ea4b78ea20e64dccf729668d18a0fac51 Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Mon, 30 Mar 2015 14:42:02 +0200 +Subject: [PATCH] mount: don't run quotaon only for network filesystems + +If you have for example ext4 on iscsi devices it is possible to setup +qoutas there. Unfortunately, because such fstab entry contains _netdev, +systemd will not add dependency to quotaon.service. + +(cherry picked from commit 11041c8488e956924870379a9203d7f1cac3b038) + +Cherry-picked from: f66964d +Resolves: #1222517 +--- + src/core/mount.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/core/mount.c b/src/core/mount.c +index 3ae0eb4..3359220 100644 +--- a/src/core/mount.c ++++ b/src/core/mount.c +@@ -107,7 +107,9 @@ static bool mount_is_auto(const MountParameters *p) { + static bool needs_quota(const MountParameters *p) { + assert(p); + +- if (mount_is_network(p)) ++ /* Quotas are not enabled on network filesystems, ++ * but we them, for example, on storages connected via iscsi */ ++ if (p->fstype && fstype_is_network(p->fstype)) + return false; + + if (mount_is_bind(p)) diff --git a/SOURCES/0154-man-units-tmpfiles.d-5-cleanup.patch b/SOURCES/0154-man-units-tmpfiles.d-5-cleanup.patch deleted file mode 100644 index 6d8b332..0000000 --- a/SOURCES/0154-man-units-tmpfiles.d-5-cleanup.patch +++ /dev/null @@ -1,401 +0,0 @@ -From b2d9ad357e136b289238eb05648c504d0c0bc06b 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/SOURCES/0154-mount-fix-up-wording-in-the-comment.patch b/SOURCES/0154-mount-fix-up-wording-in-the-comment.patch new file mode 100644 index 0000000..672e265 --- /dev/null +++ b/SOURCES/0154-mount-fix-up-wording-in-the-comment.patch @@ -0,0 +1,26 @@ +From 07ce9278fbfc06ce14cd16d463788c55442ee163 Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Wed, 1 Apr 2015 13:08:25 +0200 +Subject: [PATCH] mount: fix up wording in the comment + +(cherry picked from commit 340a1d2330ddc1dd18ad75bcdddf32f63c84b4a1) + +Cherry-picked from: 375af09 +Resolves: #1222517 +--- + src/core/mount.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/mount.c b/src/core/mount.c +index 3359220..fd4fb6f 100644 +--- a/src/core/mount.c ++++ b/src/core/mount.c +@@ -108,7 +108,7 @@ static bool needs_quota(const MountParameters *p) { + assert(p); + + /* Quotas are not enabled on network filesystems, +- * but we them, for example, on storages connected via iscsi */ ++ * but we want them, for example, on storage connected via iscsi */ + if (p->fstype && fstype_is_network(p->fstype)) + return false; + diff --git a/SOURCES/0155-tmpfiles-introduce-the-concept-of-unsafe-operations.patch b/SOURCES/0155-tmpfiles-introduce-the-concept-of-unsafe-operations.patch deleted file mode 100644 index 60be1d3..0000000 --- a/SOURCES/0155-tmpfiles-introduce-the-concept-of-unsafe-operations.patch +++ /dev/null @@ -1,281 +0,0 @@ -From 97784aaf5e005bf57c572a6f8ccae5baee59bd0f 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 3103bac..f4867d9 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -1589,6 +1589,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 9a397af..1983717 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/SOURCES/0155-udev-net_id-fix-copy-paste-error.patch b/SOURCES/0155-udev-net_id-fix-copy-paste-error.patch new file mode 100644 index 0000000..d363763 --- /dev/null +++ b/SOURCES/0155-udev-net_id-fix-copy-paste-error.patch @@ -0,0 +1,28 @@ +From 400756b14b8272138ba27fdac9a3ec1fddeff676 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Wed, 1 Apr 2015 16:41:41 +0200 +Subject: [PATCH] udev: net_id - fix copy-paste error + +In case pci_slot overflows we were truncating pci_path instead. + +(cherry picked from commit 16f948cb208f1db9a1665f07ac9b22e416dc19d4) + +Cherry-picked from: 1269e4e +Resolves: #1222517 +--- + src/udev/udev-builtin-net_id.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c +index 2cc1fd4..66474f7 100644 +--- a/src/udev/udev-builtin-net_id.c ++++ b/src/udev/udev-builtin-net_id.c +@@ -271,7 +271,7 @@ static int dev_pci_slot(struct udev_device *dev, struct netnames *names) { + if (dev_id > 0) + l = strpcpyf(&s, l, "d%d", dev_id); + if (l == 0) +- names->pci_path[0] = '\0'; ++ names->pci_slot[0] = '\0'; + } + out: + udev_device_unref(pci); diff --git a/SOURCES/0156-man-don-t-mention-journalctl-dev-sda.patch b/SOURCES/0156-man-don-t-mention-journalctl-dev-sda.patch new file mode 100644 index 0000000..f260b8f --- /dev/null +++ b/SOURCES/0156-man-don-t-mention-journalctl-dev-sda.patch @@ -0,0 +1,31 @@ +From 3f1ad9b2a6658cd7fc59049d00def3280fd8df5a Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 2 Apr 2015 12:14:57 +0200 +Subject: [PATCH] man: don't mention "journalctl /dev/sda" + +It never worked, and nobody ever worked on it, hence don't mention it. + +(cherry picked from commit c4f54721175bde35e2051d61d3d23285def9619d) + +Cherry-picked from: a9a9aa6 +Resolves: #1222517 +--- + man/journalctl.xml | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/man/journalctl.xml b/man/journalctl.xml +index 770cf9b..08de0ff 100644 +--- a/man/journalctl.xml ++++ b/man/journalctl.xml +@@ -817,11 +817,6 @@ + + journalctl /usr/bin/dbus-daemon + +- Show all logs of the kernel device node +- /dev/sda: +- +- journalctl /dev/sda +- + Show all kernel logs from previous boot: + + journalctl -k -b -1 diff --git a/SOURCES/0156-sleep-config-fix-useless-check-for-swapfile-type.patch b/SOURCES/0156-sleep-config-fix-useless-check-for-swapfile-type.patch deleted file mode 100644 index 9e5e16a..0000000 --- a/SOURCES/0156-sleep-config-fix-useless-check-for-swapfile-type.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 4a57577928328ccd3f695a2723872ca9f9d911fb 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/SOURCES/0157-man-resolve-word-omissions.patch b/SOURCES/0157-man-resolve-word-omissions.patch deleted file mode 100644 index 3e2c3c8..0000000 --- a/SOURCES/0157-man-resolve-word-omissions.patch +++ /dev/null @@ -1,725 +0,0 @@ -From 36cd86e0d91fdc201b5e5bb2862cf12606da6fdf 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/SOURCES/0157-units-move-After-systemd-hwdb-update.service-depende.patch b/SOURCES/0157-units-move-After-systemd-hwdb-update.service-depende.patch new file mode 100644 index 0000000..89729ac --- /dev/null +++ b/SOURCES/0157-units-move-After-systemd-hwdb-update.service-depende.patch @@ -0,0 +1,46 @@ +From 09d583399bf41a61b9b3a96d9eefa51ad4219a6a Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 3 Apr 2015 14:27:16 +0200 +Subject: [PATCH] units: move After=systemd-hwdb-update.service dependency from + udev to udev-trigger + +Let's move the hwdb regeneration a bit later. Given that hwdb is +non-essential it should be OK to allow udev to run without it until we +do the full trigger. + +http://lists.freedesktop.org/archives/systemd-devel/2015-April/030074.html +(cherry picked from commit d8f0930eec248c2f54c85aa5029e1b3775c8dc75) + +Cherry-picked from: 84a1e05 +Resolves: #1222517 +--- + units/systemd-udev-trigger.service.in | 2 +- + units/systemd-udevd.service.in | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/units/systemd-udev-trigger.service.in b/units/systemd-udev-trigger.service.in +index 0c33909..1e04d11 100644 +--- a/units/systemd-udev-trigger.service.in ++++ b/units/systemd-udev-trigger.service.in +@@ -10,7 +10,7 @@ Description=udev Coldplug all Devices + Documentation=man:udev(7) man:systemd-udevd.service(8) + DefaultDependencies=no + Wants=systemd-udevd.service +-After=systemd-udevd-kernel.socket systemd-udevd-control.socket ++After=systemd-udevd-kernel.socket systemd-udevd-control.socket systemd-hwdb-update.service + Before=sysinit.target + ConditionPathIsReadWrite=/sys + +diff --git a/units/systemd-udevd.service.in b/units/systemd-udevd.service.in +index 2791f73..a133044 100644 +--- a/units/systemd-udevd.service.in ++++ b/units/systemd-udevd.service.in +@@ -10,7 +10,7 @@ Description=udev Kernel Device Manager + Documentation=man:systemd-udevd.service(8) man:udev(7) + DefaultDependencies=no + Wants=systemd-udevd-control.socket systemd-udevd-kernel.socket +-After=systemd-udevd-control.socket systemd-udevd-kernel.socket systemd-hwdb-update.service systemd-sysusers.service ++After=systemd-udevd-control.socket systemd-udevd-kernel.socket systemd-sysusers.service + Before=sysinit.target + ConditionPathIsReadWrite=/sys + diff --git a/SOURCES/0158-man-improvements-to-comma-placement.patch b/SOURCES/0158-man-improvements-to-comma-placement.patch deleted file mode 100644 index 042cecc..0000000 --- a/SOURCES/0158-man-improvements-to-comma-placement.patch +++ /dev/null @@ -1,507 +0,0 @@ -From 17bb3520f3e976c9e1cec61c330b1e37449b7832 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/SOURCES/0158-units-explicitly-order-systemd-user-sessions.service.patch b/SOURCES/0158-units-explicitly-order-systemd-user-sessions.service.patch new file mode 100644 index 0000000..11bbe9e --- /dev/null +++ b/SOURCES/0158-units-explicitly-order-systemd-user-sessions.service.patch @@ -0,0 +1,29 @@ +From d7087b71c5b31bae35cb32a4b87e83d578a2d694 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 3 Apr 2015 14:31:35 +0200 +Subject: [PATCH] units: explicitly order systemd-user-sessions.service after + nss-user-lookup.target + +We should not allow logins before NIS/LDAP users are available. + +(cherry picked from commit efb3e19be9c568974b221990b9e84fb5304c5537) + +Cherry-picked from: 6446de5 +Resolves: #1222517 +--- + units/systemd-user-sessions.service.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/units/systemd-user-sessions.service.in b/units/systemd-user-sessions.service.in +index 0869e73..c09c05d 100644 +--- a/units/systemd-user-sessions.service.in ++++ b/units/systemd-user-sessions.service.in +@@ -8,7 +8,7 @@ + [Unit] + Description=Permit User Sessions + Documentation=man:systemd-user-sessions.service(8) +-After=remote-fs.target ++After=remote-fs.target nss-user-lookup.target + + [Service] + Type=oneshot diff --git a/SOURCES/0159-man-grammar-and-wording-improvements.patch b/SOURCES/0159-man-grammar-and-wording-improvements.patch deleted file mode 100644 index 09d5e86..0000000 --- a/SOURCES/0159-man-grammar-and-wording-improvements.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 24f82a86f4d61809f9eb913c1244a4a6df7ba896 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/SOURCES/0159-zsh-completion-update-loginctl.patch b/SOURCES/0159-zsh-completion-update-loginctl.patch new file mode 100644 index 0000000..3ef5551 --- /dev/null +++ b/SOURCES/0159-zsh-completion-update-loginctl.patch @@ -0,0 +1,31 @@ +From caa80561b4acad9d66747ff6eb2b499ea67139e9 Mon Sep 17 00:00:00 2001 +From: Ronny Chevalier +Date: Tue, 7 Apr 2015 19:35:13 +0200 +Subject: [PATCH] zsh-completion: update loginctl + +(cherry picked from commit 8470025541039f39391815b2ac93952003b7eee8) + +Cherry-picked from: def740b +Resolves: #1222517 +--- + shell-completion/zsh/_loginctl | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/shell-completion/zsh/_loginctl b/shell-completion/zsh/_loginctl +index 0de66e1..bd33b66 100644 +--- a/shell-completion/zsh/_loginctl ++++ b/shell-completion/zsh/_loginctl +@@ -102,10 +102,11 @@ _arguments -s \ + '--kill-who=[Who to send signal to]:killwho:(main control all)' \ + {-s+,--signal=}'[Which signal to send]:signal:_signals' \ + {-H+,--host=}'[Operate on remote host]:userathost:_sd_hosts_or_user_at_host' \ +- {-M+,--machine=}'[Operate on local container]:machine' \ +- {-P,--privileged}'[Acquire privileges before execution]' \ ++ {-M+,--machine=}'[Operate on local container]:machine:_sd_machines' \ + {-l,--full}'[Do not ellipsize output]' \ + '--no-pager[Do not pipe output into a pager]' \ + '--no-legend[Do not show the headers and footers]' \ + '--no-ask-password[Do not ask for system passwords]' \ ++ {-n+,--lines=}'[Number of journal entries to show]' \ ++ {-o+,--output=}'[Change journal output mode]:output modes:_sd_outputmodes' \ + '*::loginctl command:_loginctl_command' diff --git a/SOURCES/0160-man-document-fail-nofail-auto-noauto.patch b/SOURCES/0160-man-document-fail-nofail-auto-noauto.patch deleted file mode 100644 index ddf240b..0000000 --- a/SOURCES/0160-man-document-fail-nofail-auto-noauto.patch +++ /dev/null @@ -1,130 +0,0 @@ -From 9395355f4733cecc72b31f384e313606745c14d2 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/SOURCES/0160-zsh-completion-add-missing-M-completion-for-journalc.patch b/SOURCES/0160-zsh-completion-add-missing-M-completion-for-journalc.patch new file mode 100644 index 0000000..13077ec --- /dev/null +++ b/SOURCES/0160-zsh-completion-add-missing-M-completion-for-journalc.patch @@ -0,0 +1,25 @@ +From 6cc26ef0b749f56f184faacde210c6674ab83cf4 Mon Sep 17 00:00:00 2001 +From: Ronny Chevalier +Date: Tue, 7 Apr 2015 19:35:57 +0200 +Subject: [PATCH] zsh-completion: add missing -M completion for journalctl + +(cherry picked from commit b178d279d92fdf002b18dd2f06f2353af14d0a6e) + +Cherry-picked from: 6ff6bbf +Resolves: #1222517 +--- + shell-completion/zsh/_journalctl | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/shell-completion/zsh/_journalctl b/shell-completion/zsh/_journalctl +index a469bbc..863348e 100644 +--- a/shell-completion/zsh/_journalctl ++++ b/shell-completion/zsh/_journalctl +@@ -76,6 +76,7 @@ _arguments -s \ + {-F,--field=}'[List all values a certain field takes]:Fields:_list_fields' \ + '--system[Show system and kernel messages]' \ + '--user[Show messages from user services]' \ ++ {-M+,--machine=}'[Operate on local container]:machines:_sd_machines' \ + {-D+,--directory=}'[Show journal files from directory]:directories:_directories' \ + '--file=[Operate on specified journal files]:file:_files' \ + '--root=[Operate on catalog hierarchy under specified directory]:directories:_directories' \ diff --git a/SOURCES/0161-man-fix-description-of-is-enabled-returned-value.patch b/SOURCES/0161-man-fix-description-of-is-enabled-returned-value.patch deleted file mode 100644 index a29e918..0000000 --- a/SOURCES/0161-man-fix-description-of-is-enabled-returned-value.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 823c9b307bdcbce12ee7af42ab2e8b4a01df1831 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/SOURCES/0161-zsh-completion-update-hostnamectl.patch b/SOURCES/0161-zsh-completion-update-hostnamectl.patch new file mode 100644 index 0000000..5c3bf36 --- /dev/null +++ b/SOURCES/0161-zsh-completion-update-hostnamectl.patch @@ -0,0 +1,48 @@ +From 2cfba1646374d8d10431d0bd647b734ad4f59a49 Mon Sep 17 00:00:00 2001 +From: Ronny Chevalier +Date: Tue, 7 Apr 2015 20:14:28 +0200 +Subject: [PATCH] zsh-completion: update hostnamectl + +(cherry picked from commit d67b1f525f488e5dfc076972cccf2a6411257fb8) + +Cherry-picked from: c5b43a4 +Resolves: #1222517 +--- + shell-completion/zsh/_hostnamectl | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/shell-completion/zsh/_hostnamectl b/shell-completion/zsh/_hostnamectl +index a7217a1..7528e06 100644 +--- a/shell-completion/zsh/_hostnamectl ++++ b/shell-completion/zsh/_hostnamectl +@@ -33,6 +33,14 @@ _hostnamectl_set-deployment() { + fi + } + ++_hostnamectl_set-location() { ++ if (( CURRENT <= 3 )); then ++ _message "new location" ++ else ++ _message "no more options" ++ fi ++} ++ + _hostnamectl_command() { + local -a _hostnamectl_cmds + _hostnamectl_cmds=( +@@ -40,7 +48,8 @@ _hostnamectl_command() { + "set-hostname:Set system hostname" + "set-icon-name:Set icon name for host" + "set-chassis:Set chassis type for host" +- "set-deployment:Set deployment environment" ++ "set-deployment:Set deployment environment for host" ++ "set-location:Set location for host" + ) + if (( CURRENT == 1 )); then + _describe -t commands 'hostnamectl commands' _hostnamectl_cmds || compadd "$@" +@@ -67,4 +76,5 @@ _arguments -s \ + '--pretty[Only set pretty hostname]' \ + '--no-ask-password[Do not prompt for password]' \ + {-H+,--host=}'[Operate on remote host]:userathost:_sd_hosts_or_user_at_host' \ ++ {-M+,--machine=}'[Operate on local container]:machines:_sd_machines' \ + '*::hostnamectl commands:_hostnamectl_command' diff --git a/SOURCES/0162-man-fix-Type-reference.patch b/SOURCES/0162-man-fix-Type-reference.patch deleted file mode 100644 index 262de6f..0000000 --- a/SOURCES/0162-man-fix-Type-reference.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 8c9d4932e5d6ee02b6fc3373a8f68d89faf49928 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/SOURCES/0162-shell-completion-systemctl-switch-root-verb.patch b/SOURCES/0162-shell-completion-systemctl-switch-root-verb.patch new file mode 100644 index 0000000..0c6a788 --- /dev/null +++ b/SOURCES/0162-shell-completion-systemctl-switch-root-verb.patch @@ -0,0 +1,53 @@ +From 15e2a6ebee7eab4a9b2ef57082e949ead17cdd85 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 2 Apr 2015 22:54:35 -0400 +Subject: [PATCH] shell-completion: systemctl switch-root verb + +The completion is rudimentary (all files). I think this is OK since +this is used so rarely. But not having it proposed at all is annoying. + +(cherry picked from commit 7b742b3130941b5c8d5e178b6694428fb3b61086) + +Cherry-picked from: 166cee1 +Resolves: #1222517 +--- + shell-completion/bash/systemctl.in | 2 +- + shell-completion/zsh/_systemctl.in | 5 +++++ + 2 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/shell-completion/bash/systemctl.in b/shell-completion/bash/systemctl.in +index 8063316..3d787cd 100644 +--- a/shell-completion/bash/systemctl.in ++++ b/shell-completion/bash/systemctl.in +@@ -160,7 +160,7 @@ _systemctl () { + reboot rescue show-environment suspend get-default + is-system-running' + [NAME]='snapshot' +- [FILE]='link' ++ [FILE]='link switch-root' + [TARGETS]='set-default' + ) + +diff --git a/shell-completion/zsh/_systemctl.in b/shell-completion/zsh/_systemctl.in +index 7f2d5ac..82edfd3 100644 +--- a/shell-completion/zsh/_systemctl.in ++++ b/shell-completion/zsh/_systemctl.in +@@ -59,6 +59,7 @@ + "reboot:Shut down and reboot the system" + "kexec:Shut down and reboot the system with kexec" + "exit:Ask for user instance termination" ++ "switch-root:Change root directory" + ) + + if (( CURRENT == 1 )); then +@@ -297,6 +298,10 @@ done + _sd_unit_files + } + ++(( $+functions[_systemctl_switch-root] )) || _systemctl_switch-root() { ++ _files ++} ++ + # no systemctl completion for: + # [STANDALONE]='daemon-reexec daemon-reload default + # emergency exit halt kexec list-jobs list-units diff --git a/SOURCES/0163-core-automount-beef-up-error-message.patch b/SOURCES/0163-core-automount-beef-up-error-message.patch new file mode 100644 index 0000000..48de0a5 --- /dev/null +++ b/SOURCES/0163-core-automount-beef-up-error-message.patch @@ -0,0 +1,29 @@ +From 64b6bcb807fdafc3609ab0019b3d8e9186fed632 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 2 Apr 2015 22:58:39 -0400 +Subject: [PATCH] core/automount: beef up error message + +This should not happen... but when it does more information is nice. + +(cherry picked from commit 50b03c8ea1248f2d35a9042a3fa959adc0ceb819) + +Cherry-picked from: 5670709 +Resolves: #1222517 +--- + src/core/automount.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/core/automount.c b/src/core/automount.c +index e4c7941..b391f61 100644 +--- a/src/core/automount.c ++++ b/src/core/automount.c +@@ -734,7 +734,8 @@ static int automount_dispatch_io(sd_event_source *s, int fd, uint32_t events, vo + assert(fd == a->pipe_fd); + + if (events != EPOLLIN) { +- log_unit_error(UNIT(a)->id, "Got invalid poll event on pipe."); ++ log_unit_error(UNIT(a)->id, "%s: got invalid poll event %"PRIu32" on pipe (fd=%d)", ++ UNIT(a)->id, events, fd); + goto fail; + } + diff --git a/SOURCES/0163-man-fix-Type-reference-v2.patch b/SOURCES/0163-man-fix-Type-reference-v2.patch deleted file mode 100644 index c5bfe20..0000000 --- a/SOURCES/0163-man-fix-Type-reference-v2.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 7f66158304287727f35c24d9bd4c700c0923bc73 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/SOURCES/0164-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/SOURCES/0164-hwdb-Update-database-of-Bluetooth-company-identifier.patch deleted file mode 100644 index ac7a4f8..0000000 --- a/SOURCES/0164-hwdb-Update-database-of-Bluetooth-company-identifier.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 48acc4b9f59e019748459e01c8c125803ac88df3 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/SOURCES/0164-man-remove-fs-from-rootfsflags.patch b/SOURCES/0164-man-remove-fs-from-rootfsflags.patch new file mode 100644 index 0000000..bcbabfd --- /dev/null +++ b/SOURCES/0164-man-remove-fs-from-rootfsflags.patch @@ -0,0 +1,28 @@ +From 3231718bd58d86cc52da68d72fabf0cef48aebbd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 3 Apr 2015 08:28:21 -0400 +Subject: [PATCH] man: remove 'fs' from 'rootfsflags' + +rootfsflags does not appear anywhere else. + +(cherry picked from commit d6a12e7ca3a17ce0224fd6c95d827e4f97fe2c9a) + +Cherry-picked from: 589a5b6 +Resolves: #1222517 +--- + man/kernel-command-line.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/kernel-command-line.xml b/man/kernel-command-line.xml +index 919bd13..eb73727 100644 +--- a/man/kernel-command-line.xml ++++ b/man/kernel-command-line.xml +@@ -295,7 +295,7 @@ + + root= + rootfstype= +- rootfsflags= ++ rootflags= + ro + rw + diff --git a/SOURCES/0165-man-add-a-note-about-propagating-signals.patch b/SOURCES/0165-man-add-a-note-about-propagating-signals.patch deleted file mode 100644 index 2db8823..0000000 --- a/SOURCES/0165-man-add-a-note-about-propagating-signals.patch +++ /dev/null @@ -1,61 +0,0 @@ -From a49c79e807843bbd87961b3d4b81ea79076c043e 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/SOURCES/0165-shared-fix-memleak.patch b/SOURCES/0165-shared-fix-memleak.patch new file mode 100644 index 0000000..de6d162 --- /dev/null +++ b/SOURCES/0165-shared-fix-memleak.patch @@ -0,0 +1,56 @@ +From 60cf5a261b6b521b92801447aeace9c63a282ddc Mon Sep 17 00:00:00 2001 +From: Ronny Chevalier +Date: Fri, 10 Apr 2015 15:44:02 +0200 +Subject: [PATCH] shared: fix memleak + +path was used for 2 purposes but it was not freed before being reused. + +(cherry picked from commit 0d67448869bd881fd6aea57de6da98800395cf1f) + +Cherry-picked from: 146ec8e +Resolves: #1222517 +--- + src/shared/install.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index 92b8d6e..efd489e 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -515,7 +515,7 @@ static int find_symlinks_in_scope( + UnitFileState *state) { + + int r; +- _cleanup_free_ char *path = NULL; ++ _cleanup_free_ char *normal_path = NULL, *runtime_path = NULL; + bool same_name_link_runtime = false, same_name_link = false; + + assert(scope >= 0); +@@ -523,11 +523,11 @@ static int find_symlinks_in_scope( + assert(name); + + /* First look in runtime config path */ +- r = get_config_path(scope, true, root_dir, &path); ++ r = get_config_path(scope, true, root_dir, &normal_path); + if (r < 0) + return r; + +- r = find_symlinks(name, path, &same_name_link_runtime); ++ r = find_symlinks(name, normal_path, &same_name_link_runtime); + if (r < 0) + return r; + else if (r > 0) { +@@ -536,11 +536,11 @@ static int find_symlinks_in_scope( + } + + /* Then look in the normal config path */ +- r = get_config_path(scope, false, root_dir, &path); ++ r = get_config_path(scope, false, root_dir, &runtime_path); + if (r < 0) + return r; + +- r = find_symlinks(name, path, &same_name_link); ++ r = find_symlinks(name, runtime_path, &same_name_link); + if (r < 0) + return r; + else if (r > 0) { diff --git a/SOURCES/0166-man-include-autoconf-snippet-in-daemon-7.patch b/SOURCES/0166-man-include-autoconf-snippet-in-daemon-7.patch deleted file mode 100644 index e6f0e03..0000000 --- a/SOURCES/0166-man-include-autoconf-snippet-in-daemon-7.patch +++ /dev/null @@ -1,41 +0,0 @@ -From f338abbfbc3e385dda57ebc22769e54ab3f5edc8 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/SOURCES/0166-udevd-fix-synchronization-with-settle-when-handling-.patch b/SOURCES/0166-udevd-fix-synchronization-with-settle-when-handling-.patch new file mode 100644 index 0000000..8406c23 --- /dev/null +++ b/SOURCES/0166-udevd-fix-synchronization-with-settle-when-handling-.patch @@ -0,0 +1,70 @@ +From e55efa99fd829a4699aae6505e02fae7b50a40bc Mon Sep 17 00:00:00 2001 +From: Daniel Drake +Date: Mon, 6 Apr 2015 16:03:43 -0600 +Subject: [PATCH] udevd: fix synchronization with settle when handling inotify + events + +udev uses inotify to implement a scheme where when the user closes +a writable device node, a change uevent is forcefully generated. +In the case of block devices, it actually requests a partition rescan. + +This currently can't be synchronized with "udevadm settle", i.e. this +is not reliable in a script: + + sfdisk --change-id /dev/sda 1 81 + udevadm settle + mount /dev/sda1 /foo + +The settle call doesn't synchronize there, so at the same time we try +to mount the device, udevd is busy removing the partition device nodes and +readding them again. The mount call often happens in that moment where the +partition node has been removed but not readded yet. + +This exact issue was fixed long ago: +http://git.kernel.org/cgit/linux/hotplug/udev.git/commit/?id=bb38678e3ccc02bcd970ccde3d8166a40edf92d3 + +but that fix is no longer valid now that sequence numbers are no longer +used. + +Fix this by forcing another mainloop iteration after handling inotify events +before unblocking settle. If the inotify event caused us to generate a +"change" event, we'll pick that up in the following loop iteration, before +we reach the end of the loop where we respond to settle's control message, +unblocking it. + +(cherry picked from commit 07ba8037bf2a2d6a683fa107ee6f2b9545fca23e) + +Cherry-picked from: 7a2e024 +Resolves: #1222517 +--- + src/udev/udevd.c | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) + +diff --git a/src/udev/udevd.c b/src/udev/udevd.c +index e98c1fd..87a3f69 100644 +--- a/src/udev/udevd.c ++++ b/src/udev/udevd.c +@@ -1502,9 +1502,22 @@ int main(int argc, char *argv[]) { + continue; + + /* device node watch */ +- if (is_inotify) ++ if (is_inotify) { + handle_inotify(udev); + ++ /* ++ * settle might be waiting on us to determine the queue ++ * state. If we just handled an inotify event, we might have ++ * generated a "change" event, but we won't have queued up ++ * the resultant uevent yet. ++ * ++ * Before we go ahead and potentially tell settle that the ++ * queue is empty, lets loop one more time to update the ++ * queue state again before deciding. ++ */ ++ continue; ++ } ++ + /* tell settle that we are busy or idle, this needs to be before the + * PING handling + */ diff --git a/SOURCES/0167-python-systemd-fix-is_socket_inet-to-cope-with-ports.patch b/SOURCES/0167-python-systemd-fix-is_socket_inet-to-cope-with-ports.patch new file mode 100644 index 0000000..39a3bfa --- /dev/null +++ b/SOURCES/0167-python-systemd-fix-is_socket_inet-to-cope-with-ports.patch @@ -0,0 +1,42 @@ +From bac3b41f700542d3944a2e95c7cee1681f2936f4 Mon Sep 17 00:00:00 2001 +From: Simon Farnsworth +Date: Wed, 25 Mar 2015 17:00:09 +0000 +Subject: [PATCH] python-systemd: fix is_socket_inet to cope with ports + +Just a couple of trivial oversights. + +(cherry picked from commit 9f1a574d50c1ffd19f18805cc8a3a433c4f2da37) + +Cherry-picked from: 81b3dd9 +Resolves: #1222517 +--- + src/python-systemd/_daemon.c | 2 +- + src/python-systemd/daemon.py | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/python-systemd/_daemon.c b/src/python-systemd/_daemon.c +index 65cfec7..7c5f1b2 100644 +--- a/src/python-systemd/_daemon.c ++++ b/src/python-systemd/_daemon.c +@@ -225,7 +225,7 @@ static PyObject* is_socket_inet(PyObject *self, PyObject *args) { + &fd, &family, &type, &listening, &port)) + return NULL; + +- if (port < 0 || port > INT16_MAX) { ++ if (port < 0 || port > UINT16_MAX) { + set_error(-EINVAL, NULL, "port must fit into uint16_t"); + return NULL; + } +diff --git a/src/python-systemd/daemon.py b/src/python-systemd/daemon.py +index 1c386bb..82011ca 100644 +--- a/src/python-systemd/daemon.py ++++ b/src/python-systemd/daemon.py +@@ -26,7 +26,7 @@ def is_socket(fileobj, family=_AF_UNSPEC, type=0, listening=-1): + + def is_socket_inet(fileobj, family=_AF_UNSPEC, type=0, listening=-1, port=0): + fd = _convert_fileobj(fileobj) +- return _is_socket_inet(fd, family, type, listening) ++ return _is_socket_inet(fd, family, type, listening, port) + + def is_socket_unix(fileobj, type=0, listening=-1, path=None): + fd = _convert_fileobj(fileobj) diff --git a/SOURCES/0167-systemd-python-fix-setting-of-exception-codes.patch b/SOURCES/0167-systemd-python-fix-setting-of-exception-codes.patch deleted file mode 100644 index 32dd320..0000000 --- a/SOURCES/0167-systemd-python-fix-setting-of-exception-codes.patch +++ /dev/null @@ -1,325 +0,0 @@ -From b22a215807207c1a6332a22505840478ac633afd 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/SOURCES/0168-man-fix-examples-indentation-in-tmpfiles.d-5.patch b/SOURCES/0168-man-fix-examples-indentation-in-tmpfiles.d-5.patch new file mode 100644 index 0000000..4e35bca --- /dev/null +++ b/SOURCES/0168-man-fix-examples-indentation-in-tmpfiles.d-5.patch @@ -0,0 +1,36 @@ +From fc3494e5b171b36621b7bc95ba65ee4b58789283 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 13 Apr 2015 15:23:07 +0200 +Subject: [PATCH] man: fix examples indentation in tmpfiles.d(5) + +(cherry picked from commit bd1100898d63e9e2d8f6327b6895454f9abd5bd0) + +Cherry-picked from: c784558 +Resolves: #1222517 +--- + man/tmpfiles.d.xml | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml +index 4bd0fcf..9b4e11c 100644 +--- a/man/tmpfiles.d.xml ++++ b/man/tmpfiles.d.xml +@@ -504,15 +504,15 @@ + boot with specific modes and ownership. + + d /run/screens 1777 root root 10d +- d /run/uscreens 0755 root root 10d12h +- t /run/screen - - - - user.name="John Smith" security.SMACK64=screen ++d /run/uscreens 0755 root root 10d12h ++t /run/screen - - - - user.name="John Smith" security.SMACK64=screen + + + /etc/tmpfiles.d/abrt.conf example + abrt needs a directory created at boot with specific mode and ownership and its content should be preserved. + + d /var/tmp/abrt 0755 abrt abrt +- x /var/tmp/abrt/* ++x /var/tmp/abrt/* + + + diff --git a/SOURCES/0168-systemd-python-fix-listen_fds-under-Python-2.patch b/SOURCES/0168-systemd-python-fix-listen_fds-under-Python-2.patch deleted file mode 100644 index 46d4dd1..0000000 --- a/SOURCES/0168-systemd-python-fix-listen_fds-under-Python-2.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 9135ee7824ab7f645488e9fa163eda49d4d2b12e 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/SOURCES/0169-man-expand-on-some-more-subtle-points-in-systemd.soc.patch b/SOURCES/0169-man-expand-on-some-more-subtle-points-in-systemd.soc.patch deleted file mode 100644 index 064a939..0000000 --- a/SOURCES/0169-man-expand-on-some-more-subtle-points-in-systemd.soc.patch +++ /dev/null @@ -1,120 +0,0 @@ -From 6fe43c70ac008feaf26f49420c559565e3b50528 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/SOURCES/0169-systemctl-avoid-bumping-NOFILE-rlimit-unless-needed.patch b/SOURCES/0169-systemctl-avoid-bumping-NOFILE-rlimit-unless-needed.patch new file mode 100644 index 0000000..afe865c --- /dev/null +++ b/SOURCES/0169-systemctl-avoid-bumping-NOFILE-rlimit-unless-needed.patch @@ -0,0 +1,46 @@ +From f98f6ed9a27871cd2ce505b977ba8c2390e104b6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 14 Apr 2015 20:47:20 -0500 +Subject: [PATCH] systemctl: avoid bumping NOFILE rlimit unless needed + +We actually only use the journal when showing status. Move setrlimit call +so it is only called for status. + +https://bugzilla.redhat.com/show_bug.cgi?id=1184712 +(cherry picked from commit 40acc203c043fd419f3c045dc6f116c3a28411d8) + +Cherry-picked from: e87fa61 +Resolves: #1222517 +--- + src/systemctl/systemctl.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c +index 4ec0cff..089c25f 100644 +--- a/src/systemctl/systemctl.c ++++ b/src/systemctl/systemctl.c +@@ -4449,6 +4449,12 @@ static int show(sd_bus *bus, char **args) { + if (show_properties) + pager_open_if_enabled(); + ++ if (show_status) ++ /* Increase max number of open files to 16K if we can, we ++ * might needs this when browsing journal files, which might ++ * be split up into many files. */ ++ setrlimit_closest(RLIMIT_NOFILE, &RLIMIT_MAKE_CONST(16384)); ++ + /* If no argument is specified inspect the manager itself */ + + if (show_properties && strv_length(args) <= 1) +@@ -7207,11 +7213,6 @@ found: + } + } + +- /* Increase max number of open files to 16K if we can, we +- * might needs this when browsing journal files, which might +- * be split up into many files. */ +- setrlimit_closest(RLIMIT_NOFILE, &RLIMIT_MAKE_CONST(16384)); +- + return verb->dispatch(bus, argv + optind); + } + diff --git a/SOURCES/0170-exit-status-Fix-NOTINSSTALLED-typo.patch b/SOURCES/0170-exit-status-Fix-NOTINSSTALLED-typo.patch new file mode 100644 index 0000000..243ef95 --- /dev/null +++ b/SOURCES/0170-exit-status-Fix-NOTINSSTALLED-typo.patch @@ -0,0 +1,26 @@ +From 1eef7cbf1ab594fe00c83044763d41a0b29be6c6 Mon Sep 17 00:00:00 2001 +From: Martin Pitt +Date: Sat, 18 Apr 2015 22:38:13 +0100 +Subject: [PATCH] exit-status: Fix "NOTINSSTALLED" typo + +(cherry picked from commit 9f8f87e375175536a972feab79c2ff8901c47f8e) + +Cherry-picked from: 02e0056 +Resolves: #1222517 +--- + src/shared/exit-status.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/exit-status.c b/src/shared/exit-status.c +index 5c73b4d..90c83a4 100644 +--- a/src/shared/exit-status.c ++++ b/src/shared/exit-status.c +@@ -167,7 +167,7 @@ const char* exit_status_to_string(ExitStatus status, ExitStatusLevel level) { + return "NOPERMISSION"; + + case EXIT_NOTINSTALLED: +- return "NOTINSSTALLED"; ++ return "NOTINSTALLED"; + + case EXIT_NOTCONFIGURED: + return "NOTCONFIGURED"; diff --git a/SOURCES/0170-tmpfiles-rename-unsafe-to-boot.patch b/SOURCES/0170-tmpfiles-rename-unsafe-to-boot.patch deleted file mode 100644 index c8ac916..0000000 --- a/SOURCES/0170-tmpfiles-rename-unsafe-to-boot.patch +++ /dev/null @@ -1,119 +0,0 @@ -From 81e897b916baa556c7f0ef7bceedb5b73d550bad 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 1983717..67b13bc 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/SOURCES/0171-sleep-config-Dereference-pointer-before-check-for-NU.patch b/SOURCES/0171-sleep-config-Dereference-pointer-before-check-for-NU.patch deleted file mode 100644 index 0812944..0000000 --- a/SOURCES/0171-sleep-config-Dereference-pointer-before-check-for-NU.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 44d380fa1042c56eee959c8cf8477aa62b8d8a0e 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/SOURCES/0171-tmpfiles-there-s-no-systemd-forbid-user-logins.servi.patch b/SOURCES/0171-tmpfiles-there-s-no-systemd-forbid-user-logins.servi.patch new file mode 100644 index 0000000..9eb3fd7 --- /dev/null +++ b/SOURCES/0171-tmpfiles-there-s-no-systemd-forbid-user-logins.servi.patch @@ -0,0 +1,27 @@ +From 0756d902734c3d4353264d1b4c2ccec87359bd4a Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 21 Apr 2015 17:26:56 +0200 +Subject: [PATCH] tmpfiles: there's no systemd-forbid-user-logins.service + service + +(cherry picked from commit 451d691ae110a600497348d9f6288bc84efb8642) + +Cherry-picked from: 0d2b365 +Resolves: #1222517 +--- + tmpfiles.d/systemd-nologin.conf | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tmpfiles.d/systemd-nologin.conf b/tmpfiles.d/systemd-nologin.conf +index d61232b..a30a8da 100644 +--- a/tmpfiles.d/systemd-nologin.conf ++++ b/tmpfiles.d/systemd-nologin.conf +@@ -5,7 +5,7 @@ + # 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). ++# See tmpfiles.d(5), systemd-user-session.service(5) and pam_nologin(8). + # 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/SOURCES/0172-kmod-setup-load-ip_tables-kmod-at-boot.patch b/SOURCES/0172-kmod-setup-load-ip_tables-kmod-at-boot.patch new file mode 100644 index 0000000..ced7aaf --- /dev/null +++ b/SOURCES/0172-kmod-setup-load-ip_tables-kmod-at-boot.patch @@ -0,0 +1,49 @@ +From 6df5513d294ae368f2a09fb47917e11048347885 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 22 Apr 2015 13:50:56 +0200 +Subject: [PATCH] kmod-setup: load ip_tables kmod at boot + +The module is currently no auto-loadable (and this is unlikely to change +anytime soon, given it's API is via getsockopt/setsockopt). It is needed +by networkd and nspawn currently. + +Users who really don't like the module to be loaded have the option to +blacklist it still, or not compile it at all. But for all others this +should make things work out-of-the-box. + +(cherry picked from commit 1d3087978a8ee23107cb64aa55ca97aefe9531e2) + +Cherry-picked from: f801bf8 +Resolves: #1222517 +--- + src/core/kmod-setup.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index c0a05b9..97f3b9b 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -63,16 +63,19 @@ int kmod_setup(void) { + bool (*condition_fn)(void); + } kmod_table[] = { + /* auto-loading on use doesn't work before udev is up */ +- { "autofs4", "/sys/class/misc/autofs", true, NULL }, ++ { "autofs4", "/sys/class/misc/autofs", true, NULL }, + + /* early configure of ::1 on the loopback device */ +- { "ipv6", "/sys/module/ipv6", true, NULL }, ++ { "ipv6", "/sys/module/ipv6", true, NULL }, + + /* this should never be a module */ +- { "unix", "/proc/net/unix", true, NULL }, ++ { "unix", "/proc/net/unix", true, NULL }, + + /* IPC is needed before we bring up any other services */ +- { "kdbus", "/sys/fs/kdbus", false, cmdline_check_kdbus }, ++ { "kdbus", "/sys/fs/kdbus", false, cmdline_check_kdbus }, ++ ++ /* netfilter is needed by networkd, nspawn among others, and cannot be autoloaded */ ++ { "ip_tables", "/proc/net/ip_tables_names", false, NULL }, + }; + struct kmod_ctx *ctx = NULL; + unsigned int i; diff --git a/SOURCES/0172-sleep-config-fix-double-free.patch b/SOURCES/0172-sleep-config-fix-double-free.patch deleted file mode 100644 index 439932b..0000000 --- a/SOURCES/0172-sleep-config-fix-double-free.patch +++ /dev/null @@ -1,99 +0,0 @@ -From 9835435400e945b294872a525aacf99a5ad5bcf5 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/SOURCES/0173-core-service-check-if-mainpid-matches-only-if-it-is-.patch b/SOURCES/0173-core-service-check-if-mainpid-matches-only-if-it-is-.patch deleted file mode 100644 index 729d377..0000000 --- a/SOURCES/0173-core-service-check-if-mainpid-matches-only-if-it-is-.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 32e036b9baa6e9c9ecc90ae5db558db0a93847b2 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/SOURCES/0173-util-Fix-assertion-in-split-on-missing.patch b/SOURCES/0173-util-Fix-assertion-in-split-on-missing.patch new file mode 100644 index 0000000..54d78af --- /dev/null +++ b/SOURCES/0173-util-Fix-assertion-in-split-on-missing.patch @@ -0,0 +1,81 @@ +From 030a063371f4f4fd0d4366ebd3cebfa9930773da Mon Sep 17 00:00:00 2001 +From: Martin Pitt +Date: Wed, 22 Apr 2015 23:09:43 +0100 +Subject: [PATCH] util: Fix assertion in split() on missing ' + +When parsing a unit with a trailing slash after an escaped line break, like + + ExecStart=/bin/echo 'foo \ + bar' + +the split() function (through config_parse()) asserted and crashed pid 1: + + Assertion 'current[*l + 1] == quotechars[0]' failed at ../src/shared/util.c:583, function split(). Aborting. + +Fix this by returning an error in this case ("trailing garbage"). + +Add corresponding test case. Also fix the missing "unit" argument of +config_parse_exec() in the comment. + +https://launchpad.net/bugs/1447243 +(cherry picked from commit 470dca63cd2b1579f45f72b6b9777494abeff105) + +Cherry-picked from: 8f93633 +Resolves: #1222517 +--- + src/shared/util.c | 3 +-- + src/test/test-unit-file.c | 15 +++++++++++++++ + 2 files changed, 16 insertions(+), 2 deletions(-) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 1e1bf94..649344d 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -571,13 +571,12 @@ const char* split(const char **state, size_t *l, const char *separator, bool quo + char quotechars[2] = {*current, '\0'}; + + *l = strcspn_escaped(current + 1, quotechars); +- if (current[*l + 1] == '\0' || ++ if (current[*l + 1] == '\0' || current[*l + 1] != quotechars[0] || + (current[*l + 2] && !strchr(separator, current[*l + 2]))) { + /* right quote missing or garbage at the end */ + *state = current; + return NULL; + } +- assert(current[*l + 1] == quotechars[0]); + *state = current++ + *l + 2; + } else if (quoted) { + *l = strcspn_escaped(current, separator); +diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c +index e517f57..9f3e3a2 100644 +--- a/src/test/test-unit-file.c ++++ b/src/test/test-unit-file.c +@@ -92,6 +92,7 @@ static void check_execcommand(ExecCommand *c, + + static void test_config_parse_exec(void) { + /* int config_parse_exec( ++ const char *unit, + const char *filename, + unsigned line, + const char *section, +@@ -303,6 +304,20 @@ static void test_config_parse_exec(void) { + assert_se(r == 0); + assert_se(c1->command_next == NULL); + ++ log_info("/* missing ending ' */"); ++ r = config_parse_exec(NULL, "fake", 4, "section", 1, ++ "LValue", 0, "/path 'foo", ++ &c, NULL); ++ assert_se(r == 0); ++ assert_se(c1->command_next == NULL); ++ ++ log_info("/* missing ending ' with trailing backslash */"); ++ r = config_parse_exec(NULL, "fake", 4, "section", 1, ++ "LValue", 0, "/path 'foo\\", ++ &c, NULL); ++ assert_se(r == 0); ++ assert_se(c1->command_next == NULL); ++ + exec_command_free_list(c); + } + diff --git a/SOURCES/0174-man-typo-fix.patch b/SOURCES/0174-man-typo-fix.patch deleted file mode 100644 index 6b02abd..0000000 --- a/SOURCES/0174-man-typo-fix.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 903086a167718d33ebb5e4f1825d1696e45ff1a5 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/SOURCES/0174-units-set-KillMode-mixed-for-our-daemons-that-fork-w.patch b/SOURCES/0174-units-set-KillMode-mixed-for-our-daemons-that-fork-w.patch new file mode 100644 index 0000000..9a56cb1 --- /dev/null +++ b/SOURCES/0174-units-set-KillMode-mixed-for-our-daemons-that-fork-w.patch @@ -0,0 +1,37 @@ +From b0204b37bd8275f95885548277acf5bda383173d Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 24 Apr 2015 16:12:28 +0200 +Subject: [PATCH] units: set KillMode=mixed for our daemons that fork worker + processes + +The daemons should really have the time to kill the workers first, +before systemd does it, hence use KillMode=mixed for these daemons. + +https://bugs.freedesktop.org/show_bug.cgi?id=90051 +(cherry picked from commit 658f26b828fdd7007cfe82d794f610525b21cb99) + +Cherry-picked from: 7396ceb +Resolves: #1222517 +--- + units/systemd-importd.service.in | 1 + + units/systemd-udevd.service.in | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/units/systemd-importd.service.in b/units/systemd-importd.service.in +index 26759ea..5534a49 100644 +--- a/units/systemd-importd.service.in ++++ b/units/systemd-importd.service.in +@@ -18,3 +18,4 @@ WatchdogSec=1min + PrivateTmp=yes + ProtectSystem=full + ProtectHome=yes ++KillMode=mixed +diff --git a/units/systemd-udevd.service.in b/units/systemd-udevd.service.in +index a133044..32f04d9 100644 +--- a/units/systemd-udevd.service.in ++++ b/units/systemd-udevd.service.in +@@ -22,3 +22,4 @@ Restart=always + RestartSec=0 + ExecStart=@rootlibexecdir@/systemd-udevd + MountFlags=slave ++KillMode=mixed diff --git a/SOURCES/0175-swap-remove-if-else-with-the-same-data-path.patch b/SOURCES/0175-swap-remove-if-else-with-the-same-data-path.patch deleted file mode 100644 index 39753dd..0000000 --- a/SOURCES/0175-swap-remove-if-else-with-the-same-data-path.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 6710995e2c264939da4d383b5d37724c46282cdc 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/SOURCES/0175-unit-don-t-add-automatic-dependencies-on-device-unit.patch b/SOURCES/0175-unit-don-t-add-automatic-dependencies-on-device-unit.patch new file mode 100644 index 0000000..6935a63 --- /dev/null +++ b/SOURCES/0175-unit-don-t-add-automatic-dependencies-on-device-unit.patch @@ -0,0 +1,41 @@ +From 33cca921994d30abfb03ce0f681c6fc58f5c0703 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 24 Apr 2015 17:28:06 +0200 +Subject: [PATCH] unit: don't add automatic dependencies on device units if + they aren't supported + +http://lists.freedesktop.org/archives/systemd-devel/2015-April/031187.html +(cherry picked from commit 47bc12e1ba35d38edda737dae232088d6d3ae688) + +Cherry-picked from: c20cdaa +Resolves: #1222517 +--- + src/core/unit.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/src/core/unit.c b/src/core/unit.c +index 565455b..b9e1f13 100644 +--- a/src/core/unit.c ++++ b/src/core/unit.c +@@ -2830,14 +2830,18 @@ int unit_add_node_link(Unit *u, const char *what, bool wants) { + + assert(u); + +- if (!what) +- return 0; +- + /* Adds in links to the device node that this unit is based on */ ++ if (isempty(what)) ++ return 0; + + if (!is_device_path(what)) + return 0; + ++ /* When device units aren't supported (such as in a ++ * container), don't create dependencies on them. */ ++ if (unit_vtable[UNIT_DEVICE]->supported && !unit_vtable[UNIT_DEVICE]->supported(u->manager)) ++ return 0; ++ + e = unit_name_from_path(what, ".device"); + if (!e) + return -ENOMEM; diff --git a/SOURCES/0176-hwdb-update.patch b/SOURCES/0176-hwdb-update.patch deleted file mode 100644 index 331e48b..0000000 --- a/SOURCES/0176-hwdb-update.patch +++ /dev/null @@ -1,769 +0,0 @@ -From 6dc222a83a577bfd29def018fb7a8c591b2d6761 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/SOURCES/0176-update-done-ignore-nanosecond-file-timestamp-compone.patch b/SOURCES/0176-update-done-ignore-nanosecond-file-timestamp-compone.patch new file mode 100644 index 0000000..e2e71e1 --- /dev/null +++ b/SOURCES/0176-update-done-ignore-nanosecond-file-timestamp-compone.patch @@ -0,0 +1,38 @@ +From 6503fbef433da29fe1f450e44c8eaca61888bcda Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 27 Apr 2015 17:25:57 +0200 +Subject: [PATCH] update-done: ignore nanosecond file timestamp components, + they are not reliable + +https://bugs.freedesktop.org/show_bug.cgi?id=90192 +(cherry picked from commit 329c542585cd92cb905990e3bf59eda16fd88cfb) + +Cherry-picked from: a38a3e0 +Resolves: #1222517 +--- + src/update-done/update-done.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +diff --git a/src/update-done/update-done.c b/src/update-done/update-done.c +index 561963e..cb5cd6f 100644 +--- a/src/update-done/update-done.c ++++ b/src/update-done/update-done.c +@@ -36,9 +36,15 @@ static int apply_timestamp(const char *path, struct timespec *ts) { + assert(ts); + + if (stat(path, &st) >= 0) { +- /* Is the timestamp file already newer than the OS? If so, there's nothing to do. */ +- if (st.st_mtim.tv_sec > ts->tv_sec || +- (st.st_mtim.tv_sec == ts->tv_sec && st.st_mtim.tv_nsec >= ts->tv_nsec)) ++ /* Is the timestamp file already newer than the OS? If ++ * so, there's nothing to do. We ignore the nanosecond ++ * component of the timestamp, since some file systems ++ * do not support any better accuracy than 1s and we ++ * have no way to identify the accuracy ++ * available. Most notably ext4 on small disks (where ++ * 128 byte inodes are used) does not support better ++ * accuracy than 1s. */ ++ if (st.st_mtim.tv_sec > ts->tv_sec) + return 0; + + /* It is older? Then let's update it */ diff --git a/SOURCES/0177-journal-Add-missing-byte-order-conversions.patch b/SOURCES/0177-journal-Add-missing-byte-order-conversions.patch deleted file mode 100644 index 13f36ef..0000000 --- a/SOURCES/0177-journal-Add-missing-byte-order-conversions.patch +++ /dev/null @@ -1,58 +0,0 @@ -From dcf643901f6aeeda806e19fa7cbb766ded3f3d44 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 9f04c58..748816a 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/SOURCES/0177-sd-daemon-simplify-sd_pid_notify_with_fds.patch b/SOURCES/0177-sd-daemon-simplify-sd_pid_notify_with_fds.patch new file mode 100644 index 0000000..feb6b73 --- /dev/null +++ b/SOURCES/0177-sd-daemon-simplify-sd_pid_notify_with_fds.patch @@ -0,0 +1,119 @@ +From f065b88b17bd569dda412b2e6f34d921f7badb79 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 13 Mar 2015 21:22:05 -0500 +Subject: [PATCH] sd-daemon: simplify sd_pid_notify_with_fds + +Coverity was complaining that CMSG_NXTHDR is used without +checking the return value. In this case it cannot fail, but +it is a good excuse to simplify the function a bit. + +CID #1261726. + +(cherry picked from commit 64144440a5d2d94482f882b992fd2a4e0dca7a05) + +http://lists.freedesktop.org/archives/systemd-devel/2015-April/031348.html + +Cherry-picked from: c1258d6 +Resolves: #1222517 +--- + src/libsystemd/sd-daemon/sd-daemon.c | 61 ++++++++++++++++-------------------- + 1 file changed, 27 insertions(+), 34 deletions(-) + +diff --git a/src/libsystemd/sd-daemon/sd-daemon.c b/src/libsystemd/sd-daemon/sd-daemon.c +index 22a3a53..1474321 100644 +--- a/src/libsystemd/sd-daemon/sd-daemon.c ++++ b/src/libsystemd/sd-daemon/sd-daemon.c +@@ -352,12 +352,10 @@ _public_ int sd_pid_notify_with_fds(pid_t pid, int unset_environment, const char + .msg_iovlen = 1, + .msg_name = &sockaddr, + }; +- struct cmsghdr *control; + _cleanup_close_ int fd = -1; + struct cmsghdr *cmsg = NULL; + const char *e; +- size_t controllen_without_ucred = 0; +- bool try_without_ucred = false; ++ bool have_pid; + int r; + + if (!state) { +@@ -396,42 +394,37 @@ _public_ int sd_pid_notify_with_fds(pid_t pid, int unset_environment, const char + if (msghdr.msg_namelen > sizeof(struct sockaddr_un)) + msghdr.msg_namelen = sizeof(struct sockaddr_un); + +- control = alloca(CMSG_SPACE(sizeof(struct ucred)) + CMSG_SPACE(sizeof(int) * n_fds)); ++ have_pid = pid != 0 && pid != getpid(); + +- if (n_fds > 0) { +- msghdr.msg_control = control; +- msghdr.msg_controllen = CMSG_LEN(sizeof(int) * n_fds); ++ if (n_fds > 0 || have_pid) { ++ msghdr.msg_controllen = CMSG_SPACE(sizeof(int) * n_fds) + ++ CMSG_SPACE(sizeof(struct ucred) * have_pid); ++ msghdr.msg_control = alloca(msghdr.msg_controllen); + + cmsg = CMSG_FIRSTHDR(&msghdr); +- cmsg->cmsg_level = SOL_SOCKET; +- cmsg->cmsg_type = SCM_RIGHTS; +- cmsg->cmsg_len = CMSG_LEN(sizeof(int) * n_fds); ++ if (n_fds > 0) { ++ cmsg->cmsg_level = SOL_SOCKET; ++ cmsg->cmsg_type = SCM_RIGHTS; ++ cmsg->cmsg_len = CMSG_LEN(sizeof(int) * n_fds); + +- memcpy(CMSG_DATA(cmsg), fds, sizeof(int) * n_fds); +- } +- +- if (pid != 0 && pid != getpid()) { +- struct ucred *ucred; +- +- try_without_ucred = true; +- controllen_without_ucred = msghdr.msg_controllen; ++ memcpy(CMSG_DATA(cmsg), fds, sizeof(int) * n_fds); + +- msghdr.msg_control = control; +- msghdr.msg_controllen += CMSG_LEN(sizeof(struct ucred)); ++ if (have_pid) ++ assert_se(cmsg = CMSG_NXTHDR(&msghdr, cmsg)); ++ } + +- if (cmsg) +- cmsg = CMSG_NXTHDR(&msghdr, cmsg); +- else +- cmsg = CMSG_FIRSTHDR(&msghdr); ++ if (have_pid) { ++ struct ucred *ucred; + +- cmsg->cmsg_level = SOL_SOCKET; +- cmsg->cmsg_type = SCM_CREDENTIALS; +- cmsg->cmsg_len = CMSG_LEN(sizeof(struct ucred)); ++ cmsg->cmsg_level = SOL_SOCKET; ++ cmsg->cmsg_type = SCM_CREDENTIALS; ++ cmsg->cmsg_len = CMSG_LEN(sizeof(struct ucred)); + +- ucred = (struct ucred*) CMSG_DATA(cmsg); +- ucred->pid = pid; +- ucred->uid = getuid(); +- ucred->gid = getgid(); ++ ucred = (struct ucred*) CMSG_DATA(cmsg); ++ ucred->pid = pid; ++ ucred->uid = getuid(); ++ ucred->gid = getgid(); ++ } + } + + /* First try with fake ucred data, as requested */ +@@ -441,10 +434,10 @@ _public_ int sd_pid_notify_with_fds(pid_t pid, int unset_environment, const char + } + + /* If that failed, try with our own ucred instead */ +- if (try_without_ucred) { +- if (controllen_without_ucred <= 0) ++ if (have_pid) { ++ msghdr.msg_controllen -= CMSG_SPACE(sizeof(struct ucred)); ++ if (msghdr.msg_controllen == 0) + msghdr.msg_control = NULL; +- msghdr.msg_controllen = controllen_without_ucred; + + if (sendmsg(fd, &msghdr, MSG_NOSIGNAL) >= 0) { + r = 1; diff --git a/SOURCES/0178-fstab-generator-add-x-systemd.requires-and-x-systemd.patch b/SOURCES/0178-fstab-generator-add-x-systemd.requires-and-x-systemd.patch new file mode 100644 index 0000000..71a910d --- /dev/null +++ b/SOURCES/0178-fstab-generator-add-x-systemd.requires-and-x-systemd.patch @@ -0,0 +1,248 @@ +From 8f149756435998d009a8edc7206c5de038e5cbf1 Mon Sep 17 00:00:00 2001 +From: Karel Zak +Date: Mon, 18 May 2015 12:30:37 +0200 +Subject: [PATCH] fstab-generator: add x-systemd.requires and + x-systemd.requires-mounts-for + +Currently we have no way how to specify dependencies between fstab +entries (or another units) in the /etc/fstab. It means that users are +forced to bypass fstab and write .mount units manually. + +The patch introduces new systemd fstab options: + +x-systemd.requires= + + - to specify dependence an another mount (PATH is translated to unit name) + +x-systemd.requires= + + - to specify dependence on arbitrary UNIT + +x-systemd.requires-mounts-for= + + - to specify dependence on another paths, implemented by + RequiresMountsFor=. The option may be specified more than once. + +For example two bind mounts where B depends on A: + + /mnt/test/A /mnt/test/A none bind,defaults + /mnt/test/A /mnt/test/B none bind,x-systemd.requires=/mnt/test/A + +More complex example with overlay FS where one mount point depends on +"low" and "upper" directories: + + /dev/sdc1 /mnt/low ext4 defaults + /dev/sdc2 /mnt/high ext4 defaults + overlay /mnt/merged overlay lowerdir=/mnt/low,upperdir=/mnt/high/data,workdir=/mnt/high/work,x-systemd.requires-mounts-for=/mnt/low,x-systemd.requires-mounts-for=mnt/high + +https://bugzilla.redhat.com/show_bug.cgi?id=812826 +https://bugzilla.redhat.com/show_bug.cgi?id=1164334 + +Conflicts: + src/fstab-generator/fstab-generator.c + +Cherry-picked from: 3519d230c8bafe834b2dac26ace49fcfba139823 +Resolves: #1164334 +--- + man/systemd.mount.xml | 30 ++++++++++++++ + src/fstab-generator/fstab-generator.c | 76 +++++++++++++++++++++++++++++++++++ + src/shared/fstab-util.c | 30 ++++++++++++++ + src/shared/fstab-util.h | 2 + + 4 files changed, 138 insertions(+) + +diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml +index fcb9a44..8e652e1 100644 +--- a/man/systemd.mount.xml ++++ b/man/systemd.mount.xml +@@ -139,6 +139,36 @@ + + + ++ ++ ++ Configures a Requires= and ++ an After= dependency between the created ++ mount unit and another systemd unit, such as a device or mount ++ unit. The argument should be a unit name, or an absolute path ++ to a device node or mount point. This option may be specified ++ more than once. This option is particularly useful for mount ++ point declarations that need an additional device to be around ++ (such as an external journal device for journal file systems) ++ or an additional mount to be in place (such as an overlay file ++ system that merges multiple mount points). See ++ After= and Requires= in ++ systemd.unit5 ++ for details. ++ ++ ++ ++ ++ ++ Configures a ++ RequiresMountsFor= dependency between the ++ created mount unit and other mount units. The argument must be ++ an absolute path. This option may be specified more than once. ++ See RequiresMountsFor= in ++ systemd.unit5 ++ for details. ++ ++ ++ + + + An automount unit will be created for the file +diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c +index 8e2f522..65ed205 100644 +--- a/src/fstab-generator/fstab-generator.c ++++ b/src/fstab-generator/fstab-generator.c +@@ -155,6 +155,64 @@ static bool mount_in_initrd(struct mntent *me) { + streq(me->mnt_dir, "/usr"); + } + ++static int write_requires_after(FILE *f, const char *opts) { ++ _cleanup_strv_free_ char **names = NULL, **units = NULL; ++ _cleanup_free_ char *res = NULL; ++ char **s; ++ int r; ++ ++ assert(f); ++ assert(opts); ++ ++ r = fstab_extract_values(opts, "x-systemd.requires", &names); ++ if (r < 0) ++ return log_warning_errno(r, "Failed to parse options: %m"); ++ if (r == 0) ++ return 0; ++ ++ STRV_FOREACH(s, names) { ++ char *x; ++ ++ x = unit_name_mangle_with_suffix(*s, MANGLE_NOGLOB, ".mount"); ++ if (!x) ++ return log_error_errno(r, "Failed to generate unit name: %m"); ++ r = strv_consume(&units, x); ++ if (r < 0) ++ return log_oom(); ++ } ++ ++ if (units) { ++ res = strv_join(units, " "); ++ if (!res) ++ return log_oom(); ++ fprintf(f, "After=%1$s\nRequires=%1$s\n", res); ++ } ++ ++ return 0; ++} ++ ++static int write_requires_mounts_for(FILE *f, const char *opts) { ++ _cleanup_strv_free_ char **paths = NULL; ++ _cleanup_free_ char *res = NULL; ++ int r; ++ ++ assert(f); ++ assert(opts); ++ ++ r = fstab_extract_values(opts, "x-systemd.requires-mounts-for", &paths); ++ if (r < 0) ++ return log_warning_errno(r, "Failed to parse options: %m"); ++ if (r == 0) ++ return 0; ++ ++ res = strv_join(paths, " "); ++ if (!res) ++ return log_oom(); ++ ++ fprintf(f, "RequiresMountsFor=%s\n", res); ++ ++ return 0; ++} + static int add_mount( + const char *what, + const char *where, +@@ -225,6 +283,15 @@ static int add_mount( + if (post && !noauto && !nofail && !automount) + fprintf(f, "Before=%s\n", post); + ++ if (!automount && opts) { ++ r = write_requires_after(f, opts); ++ if (r < 0) ++ return r; ++ r = write_requires_mounts_for(f, opts); ++ if (r < 0) ++ return r; ++ } ++ + if (passno != 0) { + r = generator_write_fsck_deps(f, arg_dest, what, where, fstype); + if (r < 0) +@@ -289,6 +356,15 @@ static int add_mount( + "Before=%s\n", + post); + ++ if (opts) { ++ r = write_requires_after(f, opts); ++ if (r < 0) ++ return r; ++ r = write_requires_mounts_for(f, opts); ++ if (r < 0) ++ return r; ++ } ++ + fprintf(f, + "[Automount]\n" + "Where=%s\n", +diff --git a/src/shared/fstab-util.c b/src/shared/fstab-util.c +index cf317e1..e231a0f 100644 +--- a/src/shared/fstab-util.c ++++ b/src/shared/fstab-util.c +@@ -125,6 +125,36 @@ answer: + return !!n; + } + ++int fstab_extract_values(const char *opts, const char *name, char ***values) { ++ _cleanup_strv_free_ char **optsv = NULL, **res = NULL; ++ char **s; ++ ++ assert(opts); ++ assert(name); ++ assert(values); ++ ++ optsv = strv_split(opts, ","); ++ if (!optsv) ++ return -ENOMEM; ++ ++ STRV_FOREACH(s, optsv) { ++ char *arg; ++ int r; ++ ++ arg = startswith(*s, name); ++ if (!arg || *arg != '=') ++ continue; ++ r = strv_extend(&res, arg + 1); ++ if (r < 0) ++ return r; ++ } ++ ++ *values = res; ++ res = NULL; ++ ++ return !!*values; ++} ++ + int fstab_find_pri(const char *options, int *ret) { + _cleanup_free_ char *opt = NULL; + int r; +diff --git a/src/shared/fstab-util.h b/src/shared/fstab-util.h +index 9f6b32e..387c562 100644 +--- a/src/shared/fstab-util.h ++++ b/src/shared/fstab-util.h +@@ -28,6 +28,8 @@ + int fstab_filter_options(const char *opts, const char *names, + const char **namefound, char **value, char **filtered); + ++int fstab_extract_values(const char *opts, const char *name, char ***values); ++ + static inline bool fstab_test_option(const char *opts, const char *names) { + return !!fstab_filter_options(opts, names, NULL, NULL, NULL); + } diff --git a/SOURCES/0178-hwdb-change-key-mappings-for-Samsung-90X3A.patch b/SOURCES/0178-hwdb-change-key-mappings-for-Samsung-90X3A.patch deleted file mode 100644 index e7547c6..0000000 --- a/SOURCES/0178-hwdb-change-key-mappings-for-Samsung-90X3A.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 3d7988d5f0db77f35581a5fb5786a84723d7ce6e 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/SOURCES/0179-core-Fix-assertion-with-empty-Exec-paths.patch b/SOURCES/0179-core-Fix-assertion-with-empty-Exec-paths.patch new file mode 100644 index 0000000..119d1e0 --- /dev/null +++ b/SOURCES/0179-core-Fix-assertion-with-empty-Exec-paths.patch @@ -0,0 +1,78 @@ +From 9ea44466541480b583032617e6060313f79a6bda Mon Sep 17 00:00:00 2001 +From: Martin Pitt +Date: Thu, 14 May 2015 09:06:40 +0200 +Subject: [PATCH] core: Fix assertion with empty Exec*= paths + +An Exec*= line with whitespace after modifiers, like + + ExecStart=- /bin/true + +is considered to have an empty command path. This is as specified, but causes +systemd to crash with + + Assertion 'skip < l' failed at ../src/core/load-fragment.c:607, function config_parse_exec(). Aborting. + Aborted (core dumped) + +Fix this by logging an error instead and ignoring the invalid line. + +Add corresponding test cases. Also add a test case for a completely empty value +which resets the command list. + +https://launchpad.net/bugs/1454173 + +Cherry-picked from: 35b1078e1c375df244e19961792aeb78ca34bb54 +Resolves: #1222517 +--- + src/core/load-fragment.c | 6 +++++- + src/test/test-unit-file.c | 21 +++++++++++++++++++++ + 2 files changed, 26 insertions(+), 1 deletion(-) + +diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c +index f17a82f..ec4cf4e 100644 +--- a/src/core/load-fragment.c ++++ b/src/core/load-fragment.c +@@ -604,7 +604,11 @@ int config_parse_exec(const char *unit, + skip = separate_argv0 + ignore; + + /* skip special chars in the beginning */ +- assert(skip < l); ++ if (l <= skip) { ++ log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Empty path in command line, ignoring: %s", rvalue); ++ r = 0; ++ goto fail; ++ } + + } else if (strneq(word, ";", MAX(l, 1U))) + /* new commandline */ +diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c +index 9f3e3a2..5500983 100644 +--- a/src/test/test-unit-file.c ++++ b/src/test/test-unit-file.c +@@ -318,6 +318,27 @@ static void test_config_parse_exec(void) { + assert_se(r == 0); + assert_se(c1->command_next == NULL); + ++ log_info("/* invalid space between modifiers */"); ++ r = config_parse_exec(NULL, "fake", 4, "section", 1, ++ "LValue", 0, "- /path", ++ &c, NULL); ++ assert_se(r == 0); ++ assert_se(c1->command_next == NULL); ++ ++ log_info("/* only modifiers, no path */"); ++ r = config_parse_exec(NULL, "fake", 4, "section", 1, ++ "LValue", 0, "-", ++ &c, NULL); ++ assert_se(r == 0); ++ assert_se(c1->command_next == NULL); ++ ++ log_info("/* empty argument, reset */"); ++ r = config_parse_exec(NULL, "fake", 4, "section", 1, ++ "LValue", 0, "", ++ &c, NULL); ++ assert_se(r == 0); ++ assert_se(c == NULL); ++ + exec_command_free_list(c); + } + diff --git a/SOURCES/0179-hwdb-add-Samsung-700G.patch b/SOURCES/0179-hwdb-add-Samsung-700G.patch deleted file mode 100644 index a8cf51a..0000000 --- a/SOURCES/0179-hwdb-add-Samsung-700G.patch +++ /dev/null @@ -1,22 +0,0 @@ -From c28eaf0a17c230cdda898525a132109a50f82996 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/SOURCES/0180-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch b/SOURCES/0180-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch deleted file mode 100644 index c566805..0000000 --- a/SOURCES/0180-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 13e1c1cd5d95e077fe9e08ec6e80b3ac91e957f2 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/SOURCES/0180-rules-load-sg-module.patch b/SOURCES/0180-rules-load-sg-module.patch new file mode 100644 index 0000000..134023f --- /dev/null +++ b/SOURCES/0180-rules-load-sg-module.patch @@ -0,0 +1,24 @@ +From 50a7827f7376d31d2af2dc563fc51d8ad71f48dc Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Wed, 20 May 2015 12:34:18 +0200 +Subject: [PATCH] rules: load sg module + +Revert of 09637f743414e2c36d6c5b032d77d76dbeb86b31 +RHEL-only + +Resolves: #1186462 +--- + rules/40-redhat.rules | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/rules/40-redhat.rules b/rules/40-redhat.rules +index 556a3a3..305e752 100644 +--- a/rules/40-redhat.rules ++++ b/rules/40-redhat.rules +@@ -8,3 +8,6 @@ SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online" + + # reload sysctl.conf / sysctl.conf.d settings when the bridge module is loaded + ACTION=="add", SUBSYSTEM=="module", KERNEL=="bridge", RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/proc/sys/net/bridge" ++ ++# load SCSI generic (sg) driver ++SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST!="[module/sg]", RUN+="/sbin/modprobe -bv sg" diff --git a/SOURCES/0181-hwdb-fix-match-for-Thinkpad-X201-tablet.patch b/SOURCES/0181-hwdb-fix-match-for-Thinkpad-X201-tablet.patch deleted file mode 100644 index 0c30675..0000000 --- a/SOURCES/0181-hwdb-fix-match-for-Thinkpad-X201-tablet.patch +++ /dev/null @@ -1,22 +0,0 @@ -From ce340fda3e72602eac5165c33527f444eff78d18 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/SOURCES/0181-util-add-shell_maybe_quote-call-for-preparing-a-stri.patch b/SOURCES/0181-util-add-shell_maybe_quote-call-for-preparing-a-stri.patch new file mode 100644 index 0000000..838d0ee --- /dev/null +++ b/SOURCES/0181-util-add-shell_maybe_quote-call-for-preparing-a-stri.patch @@ -0,0 +1,191 @@ +From 32b4631e74262e02094c6402d39d1e4264442037 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 9 Apr 2015 18:32:21 +0200 +Subject: [PATCH] util: add shell_maybe_quote() call for preparing a string for + shell cmdline inclusion + +If necessary the passed string is enclosed in "", and all special +characters escapes. + +This also ports over usage in bus-util.c and job.c to use this, instead +of a incorrect local implementation that forgets to properly escape. + +Conflicts: + src/shared/util.c + src/shared/util.h + +Cherry-picked from: 019c7fba +Resolves: #1016680 +--- + src/core/job.c | 8 +++---- + src/libsystemd/sd-bus/bus-util.c | 15 +++++++------- + src/shared/util.c | 45 ++++++++++++++++++++++++++++++++++++++-- + src/shared/util.h | 2 ++ + src/test/test-util.c | 19 +++++++++++++++++ + 5 files changed, 74 insertions(+), 15 deletions(-) + +diff --git a/src/core/job.c b/src/core/job.c +index 4740ff1..7416386 100644 +--- a/src/core/job.c ++++ b/src/core/job.c +@@ -679,15 +679,13 @@ static void job_print_status_message(Unit *u, JobType t, JobResult result) { + break; + + case JOB_FAILED: { +- bool quotes; ++ _cleanup_free_ char *quoted = NULL; + +- quotes = chars_intersect(u->id, SHELL_NEED_QUOTES); ++ quoted = shell_maybe_quote(u->id); + + manager_flip_auto_status(u->manager, true); + unit_status_printf(u, ANSI_HIGHLIGHT_RED_ON "FAILED" ANSI_HIGHLIGHT_OFF, format); +- manager_status_printf(u->manager, STATUS_TYPE_NORMAL, NULL, +- "See \"systemctl status %s%s%s\" for details.", +- quotes ? "'" : "", u->id, quotes ? "'" : ""); ++ manager_status_printf(u->manager, STATUS_TYPE_NORMAL, NULL, "See 'systemctl status %s' for details.", strna(quoted)); + break; + } + +diff --git a/src/libsystemd/sd-bus/bus-util.c b/src/libsystemd/sd-bus/bus-util.c +index 52d4ebe..b0a5a75 100644 +--- a/src/libsystemd/sd-bus/bus-util.c ++++ b/src/libsystemd/sd-bus/bus-util.c +@@ -1709,16 +1709,15 @@ static int check_wait_response(BusWaitForJobs *d, bool quiet) { + else if (streq(d->result, "unsupported")) + log_error("Operation on or unit type of %s not supported on this system.", strna(d->name)); + else if (!streq(d->result, "done") && !streq(d->result, "skipped")) { +- if (d->name) { +- bool quotes; ++ _cleanup_free_ char *quoted = NULL; + +- quotes = chars_intersect(d->name, SHELL_NEED_QUOTES); ++ if (d->name) ++ quoted = shell_maybe_quote(d->name); + +- log_error("Job for %s failed. See \"systemctl status %s%s%s\" and \"journalctl -xe\" for details.", +- d->name, +- quotes ? "'" : "", d->name, quotes ? "'" : ""); +- } else +- log_error("Job failed. See \"journalctl -xe\" for details."); ++ if (quoted) ++ log_error("Job for %s failed. See 'systemctl status %s' and 'journalctl -xe' for details.", d->name, quoted); ++ else ++ log_error("Job failed. See 'journalctl -xe' for details."); + } + } + +diff --git a/src/shared/util.c b/src/shared/util.c +index 649344d..778c2b0 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -1329,7 +1329,8 @@ char *cescape(const char *s) { + + assert(s); + +- /* Does C style string escaping. */ ++ /* Does C style string escaping. May be be reversed with ++ * cunescape(). */ + + r = new(char, strlen(s)*4 + 1); + if (!r) +@@ -1493,7 +1494,7 @@ char *xescape(const char *s, const char *bad) { + + /* Escapes all chars in bad, in addition to \ and all special + * chars, in \xFF style escaping. May be reversed with +- * cunescape. */ ++ * cunescape(). */ + + r = new(char, strlen(s) * 4 + 1); + if (!r) +@@ -8101,3 +8102,43 @@ ssize_t string_table_lookup(const char * const *table, size_t len, const char *k + + return -1; + } ++ ++char *shell_maybe_quote(const char *s) { ++ const char *p; ++ char *r, *t; ++ ++ assert(s); ++ ++ /* Encloses a string in double quotes if necessary to make it ++ * OK as shell string. */ ++ ++ for (p = s; *p; p++) ++ if (*p <= ' ' || ++ *p >= 127 || ++ strchr(SHELL_NEED_QUOTES, *p)) ++ break; ++ ++ if (!*p) ++ return strdup(s); ++ ++ r = new(char, 1+strlen(s)*2+1+1); ++ if (!r) ++ return NULL; ++ ++ t = r; ++ *(t++) = '"'; ++ t = mempcpy(t, s, p - s); ++ ++ for (; *p; p++) { ++ ++ if (strchr(SHELL_NEED_ESCAPE, *p)) ++ *(t++) = '\\'; ++ ++ *(t++) = *p; ++ } ++ ++ *(t++)= '"'; ++ *t = 0; ++ ++ return r; ++} +diff --git a/src/shared/util.h b/src/shared/util.h +index a83b588..7ecfd85 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -1078,3 +1078,5 @@ void sigkill_wait(pid_t *pid); + #define _cleanup_sigkill_wait_ _cleanup_(sigkill_wait) + + int syslog_parse_priority(const char **p, int *priority, bool with_facility); ++ ++char *shell_maybe_quote(const char *s); +diff --git a/src/test/test-util.c b/src/test/test-util.c +index 9515a8c..9ae347b 100644 +--- a/src/test/test-util.c ++++ b/src/test/test-util.c +@@ -1512,6 +1512,24 @@ static void test_sparse_write(void) { + test_sparse_write_one(fd, test_e, sizeof(test_e)); + } + ++static void test_shell_maybe_quote_one(const char *s, const char *expected) { ++ _cleanup_free_ char *r; ++ ++ assert_se(r = shell_maybe_quote(s)); ++ assert_se(streq(r, expected)); ++} ++ ++static void test_shell_maybe_quote(void) { ++ ++ test_shell_maybe_quote_one("", ""); ++ test_shell_maybe_quote_one("\\", "\"\\\\\""); ++ test_shell_maybe_quote_one("\"", "\"\\\"\""); ++ test_shell_maybe_quote_one("foobar", "foobar"); ++ test_shell_maybe_quote_one("foo bar", "\"foo bar\""); ++ test_shell_maybe_quote_one("foo \"bar\" waldo", "\"foo \\\"bar\\\" waldo\""); ++ test_shell_maybe_quote_one("foo$bar", "\"foo\\$bar\""); ++} ++ + int main(int argc, char *argv[]) { + log_parse_environment(); + log_open(); +@@ -1589,6 +1607,7 @@ int main(int argc, char *argv[]) { + test_same_fd(); + test_uid_ptr(); + test_sparse_write(); ++ test_shell_maybe_quote(); + + return 0; + } diff --git a/SOURCES/0182-bus-util-be-more-verbose-if-dbus-job-fails.patch b/SOURCES/0182-bus-util-be-more-verbose-if-dbus-job-fails.patch new file mode 100644 index 0000000..52e8d1b --- /dev/null +++ b/SOURCES/0182-bus-util-be-more-verbose-if-dbus-job-fails.patch @@ -0,0 +1,123 @@ +From 8946c35e525c2a14b12ed425f11af152e37d8583 Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Fri, 10 Apr 2015 15:56:52 +0200 +Subject: [PATCH] bus-util: be more verbose if dbus job fails + +Users might have hard time figuring out why exactly their systemctl request +failed. If dbus job fails try to figure out more details about failure by +examining Result property of the service. + +https://bugzilla.redhat.com/show_bug.cgi?id=1016680 + +Cherry-picked from: d5cad22109749faffb7563e4b2a3a728486d47b5 +Resolves: #1016680 +--- + src/libsystemd/sd-bus/bus-util.c | 79 ++++++++++++++++++++++++++++++++++++---- + 1 file changed, 72 insertions(+), 7 deletions(-) + +diff --git a/src/libsystemd/sd-bus/bus-util.c b/src/libsystemd/sd-bus/bus-util.c +index b0a5a75..2e6d889 100644 +--- a/src/libsystemd/sd-bus/bus-util.c ++++ b/src/libsystemd/sd-bus/bus-util.c +@@ -30,6 +30,7 @@ + #include "path-util.h" + #include "missing.h" + #include "set.h" ++#include "unit-name.h" + + #include "sd-bus.h" + #include "bus-error.h" +@@ -1690,6 +1691,68 @@ static int bus_process_wait(sd_bus *bus) { + } + } + ++static int bus_job_get_service_result(BusWaitForJobs *d, char **result) { ++ _cleanup_free_ char *dbus_path = NULL; ++ ++ assert(d); ++ assert(d->name); ++ assert(result); ++ ++ dbus_path = unit_dbus_path_from_name(d->name); ++ if (!dbus_path) ++ return -ENOMEM; ++ ++ return sd_bus_get_property_string(d->bus, ++ "org.freedesktop.systemd1", ++ dbus_path, ++ "org.freedesktop.systemd1.Service", ++ "Result", ++ NULL, ++ result); ++} ++ ++static const struct { ++ const char *result, *explanation; ++} explanations [] = { ++ { "resources", "configured resource limit was exceeded" }, ++ { "timeout", "timeout was exceeded" }, ++ { "exit-code", "control process exited with error code" }, ++ { "signal", "fatal signal was delivered to the control process" }, ++ { "core-dump", "fatal signal was delivered to the control process. Core dumped" }, ++ { "watchdog", "service failed to send watchdog ping" }, ++ { "start-limit", "start of the service was attempted too often too quickly" } ++}; ++ ++static void log_job_error_with_service_result(const char* service, const char *result) { ++ unsigned i; ++ _cleanup_free_ char *service_shell_quoted = NULL; ++ ++ assert(service); ++ assert(result); ++ ++ service_shell_quoted = shell_maybe_quote(service); ++ ++ for (i = 0; i < ELEMENTSOF(explanations); ++i) ++ if (streq(result, explanations[i].result)) ++ break; ++ ++ if (i < ELEMENTSOF(explanations)) ++ log_error("Job for %s failed because %s. See \"systemctl status %s\" and \"journalctl -xe\" for details.\n", ++ service, ++ explanations[i].explanation, ++ strna(service_shell_quoted)); ++ else ++ log_error("Job for %s failed. See \"systemctl status %s\" and \"journalctl -xe\" for details.\n", ++ service, ++ strna(service_shell_quoted)); ++ ++ /* For some results maybe additional explanation is required */ ++ if (streq_ptr(result, "start-limit")) ++ log_info("To force a start please invoke \"systemctl reset-failed %s\" followed by \"systemctl start %s\" again.", ++ strna(service_shell_quoted), ++ strna(service_shell_quoted)); ++} ++ + static int check_wait_response(BusWaitForJobs *d, bool quiet) { + int r = 0; + +@@ -1709,15 +1772,17 @@ static int check_wait_response(BusWaitForJobs *d, bool quiet) { + else if (streq(d->result, "unsupported")) + log_error("Operation on or unit type of %s not supported on this system.", strna(d->name)); + else if (!streq(d->result, "done") && !streq(d->result, "skipped")) { +- _cleanup_free_ char *quoted = NULL; ++ if (d->name) { ++ int q; ++ _cleanup_free_ char *result = NULL; + +- if (d->name) +- quoted = shell_maybe_quote(d->name); ++ q = bus_job_get_service_result(d, &result); ++ if (q < 0) ++ log_debug_errno(q, "Failed to get Result property of service %s: %m", d->name); + +- if (quoted) +- log_error("Job for %s failed. See 'systemctl status %s' and 'journalctl -xe' for details.", d->name, quoted); +- else +- log_error("Job failed. See 'journalctl -xe' for details."); ++ log_job_error_with_service_result(d->name, result); ++ } else ++ log_error("Job failed. See \"journalctl -xe\" for details."); + } + } + diff --git a/SOURCES/0182-keymap-Recognize-different-Toshiba-Satellite-capital.patch b/SOURCES/0182-keymap-Recognize-different-Toshiba-Satellite-capital.patch deleted file mode 100644 index 4f223e2..0000000 --- a/SOURCES/0182-keymap-Recognize-different-Toshiba-Satellite-capital.patch +++ /dev/null @@ -1,26 +0,0 @@ -From a3d80446f49c5b5e40522fc250b1df3356cb0cf1 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/SOURCES/0183-notify-fix-badly-backported-help-message.patch b/SOURCES/0183-notify-fix-badly-backported-help-message.patch new file mode 100644 index 0000000..67c4414 --- /dev/null +++ b/SOURCES/0183-notify-fix-badly-backported-help-message.patch @@ -0,0 +1,25 @@ +From 1d23db320710dc4391f6e77ddb32122f83ab8c66 Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Fri, 29 May 2015 14:12:36 +0200 +Subject: [PATCH] notify: fix badly backported help message + +rhel-only + +Related: #1199644 +--- + src/notify/notify.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/notify/notify.c b/src/notify/notify.c +index e4a128b..c89a6cc 100644 +--- a/src/notify/notify.c ++++ b/src/notify/notify.c +@@ -49,7 +49,7 @@ static void help(void) { + " --ready Inform the init system about service start-up completion\n" + " --pid[=PID] Set main pid of daemon\n" + " --status=TEXT Set status text\n" +- " --booted Check if the system was booted up with systemd\n", ++ " --booted Check if the system was booted up with systemd\n" + " --readahead=ACTION Controls read-ahead operations\n", + program_invocation_short_name); + } diff --git a/SOURCES/0183-sleep.c-fix-typo.patch b/SOURCES/0183-sleep.c-fix-typo.patch deleted file mode 100644 index a37a28f..0000000 --- a/SOURCES/0183-sleep.c-fix-typo.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 5eaadd27a8c22c2a9e5c66c5cc69c9354eff036e 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/SOURCES/0184-cryptsetup-craft-a-unique-ID-with-the-source-device.patch b/SOURCES/0184-cryptsetup-craft-a-unique-ID-with-the-source-device.patch new file mode 100644 index 0000000..a7207f4 --- /dev/null +++ b/SOURCES/0184-cryptsetup-craft-a-unique-ID-with-the-source-device.patch @@ -0,0 +1,166 @@ +From 6c45bdd261e027ea78eabb81feaa70f3774bcf2f Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Mon, 1 Jun 2015 17:26:27 +0200 +Subject: [PATCH] cryptsetup: craft a unique ID with the source device + +If cryptsetup is called with a source device as argv[3], then craft the +ID for the password agent with a unique device path. + +If possible "/dev/block/:" is used, otherwise the original +argv[3] is used. + +This enables password agents like petera [1] to provide a password +according to the source device. The original ID did not carry enough +information and was more targeted for a human readable string, which +is specified in the "Message" field anyway. + +With this patch the ID of the ask.XXX ini file looks like this: +ID=cryptsetup:/dev/block/: + +[1] https://github.com/npmccallum/petera + +Cherry-picked from: e51b9486d1b59e72c293028fed1384f4e4ef09aa +Resolves: #1226333 +--- + src/cryptsetup/cryptsetup.c | 90 +++++++++++++++++++++++++++++---------------- + 1 file changed, 58 insertions(+), 32 deletions(-) + +diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c +index 3f613d9..5dedb07 100644 +--- a/src/cryptsetup/cryptsetup.c ++++ b/src/cryptsetup/cryptsetup.c +@@ -217,6 +217,23 @@ static void log_glue(int level, const char *msg, void *usrptr) { + log_debug("%s", msg); + } + ++static int disk_major_minor(const char *path, char **ret) { ++ struct stat st; ++ ++ assert(path); ++ ++ if (stat(path, &st) < 0) ++ return -errno; ++ ++ if (!S_ISBLK(st.st_mode)) ++ return -EINVAL; ++ ++ if (asprintf(ret, "/dev/block/%d:%d", major(st.st_rdev), minor(st.st_rdev)) < 0) ++ return -errno; ++ ++ return 0; ++} ++ + static char* disk_description(const char *path) { + + static const char name_fields[] = +@@ -278,20 +295,55 @@ static char *disk_mount_point(const char *label) { + return NULL; + } + +-static int get_password(const char *name, usec_t until, bool accept_cached, char ***passwords) { +- int r; ++static int get_password(const char *vol, const char *src, usec_t until, bool accept_cached, char ***passwords) { ++ int r = 0; + char **p; + _cleanup_free_ char *text = NULL; + _cleanup_free_ char *escaped_name = NULL; + char *id; ++ const char *name = NULL; ++ _cleanup_free_ char *description = NULL, *name_buffer = NULL, ++ *mount_point = NULL, *maj_min = NULL; + +- assert(name); ++ assert(vol); ++ assert(src); + assert(passwords); + ++ description = disk_description(src); ++ mount_point = disk_mount_point(vol); ++ ++ if (description && streq(vol, description)) { ++ /* If the description string is simply the ++ * volume name, then let's not show this ++ * twice */ ++ free(description); ++ description = NULL; ++ } ++ ++ if (mount_point && description) ++ r = asprintf(&name_buffer, "%s (%s) on %s", description, vol, mount_point); ++ else if (mount_point) ++ r = asprintf(&name_buffer, "%s on %s", vol, mount_point); ++ else if (description) ++ r = asprintf(&name_buffer, "%s (%s)", description, vol); ++ ++ if (r < 0) ++ return log_oom(); ++ ++ name = name_buffer ? name_buffer : vol; ++ + if (asprintf(&text, "Please enter passphrase for disk %s!", name) < 0) + return log_oom(); + +- escaped_name = cescape(name); ++ if (src) ++ (void) disk_major_minor(src, &maj_min); ++ ++ if (maj_min) { ++ escaped_name = maj_min; ++ maj_min = NULL; ++ } else ++ escaped_name = cescape(name); ++ + if (!escaped_name) + return log_oom(); + +@@ -532,8 +584,7 @@ int main(int argc, char *argv[]) { + unsigned tries; + usec_t until; + crypt_status_info status; +- const char *key_file = NULL, *name = NULL; +- _cleanup_free_ char *description = NULL, *name_buffer = NULL, *mount_point = NULL; ++ const char *key_file = NULL; + + /* Arguments: systemd-cryptsetup attach VOLUME SOURCE-DEVICE [PASSWORD] [OPTIONS] */ + +@@ -561,31 +612,6 @@ int main(int argc, char *argv[]) { + /* A delicious drop of snake oil */ + mlockall(MCL_FUTURE); + +- description = disk_description(argv[3]); +- mount_point = disk_mount_point(argv[2]); +- +- if (description && streq(argv[2], description)) { +- /* If the description string is simply the +- * volume name, then let's not show this +- * twice */ +- free(description); +- description = NULL; +- } +- +- k = 0; +- if (mount_point && description) +- k = asprintf(&name_buffer, "%s (%s) on %s", description, argv[2], mount_point); +- else if (mount_point) +- k = asprintf(&name_buffer, "%s on %s", argv[2], mount_point); +- else if (description) +- k = asprintf(&name_buffer, "%s (%s)", description, argv[2]); +- +- if (k < 0) { +- log_oom(); +- goto finish; +- } +- name = name_buffer ? name_buffer : argv[2]; +- + if (arg_header) { + log_debug("LUKS header: %s", arg_header); + k = crypt_init(&cd, arg_header); +@@ -632,7 +658,7 @@ int main(int argc, char *argv[]) { + _cleanup_strv_free_ char **passwords = NULL; + + if (!key_file) { +- k = get_password(name, until, tries == 0 && !arg_verify, &passwords); ++ k = get_password(argv[2], argv[3], until, tries == 0 && !arg_verify, &passwords); + if (k == -EAGAIN) + continue; + else if (k < 0) diff --git a/SOURCES/0184-man-mention-which-variables-will-be-expanded-in-Exec.patch b/SOURCES/0184-man-mention-which-variables-will-be-expanded-in-Exec.patch deleted file mode 100644 index 622312d..0000000 --- a/SOURCES/0184-man-mention-which-variables-will-be-expanded-in-Exec.patch +++ /dev/null @@ -1,86 +0,0 @@ -From b993c1cda2625b91562ada55f21da2310e9b436d 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 f50161f..612b4d2 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/SOURCES/0185-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch b/SOURCES/0185-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch deleted file mode 100644 index 0dc8aba..0000000 --- a/SOURCES/0185-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 6ccaa6a0b732ab324629c8b1c24a8e775f51da86 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/SOURCES/0185-systemctl-introduce-now-for-enable-disable-and-mask.patch b/SOURCES/0185-systemctl-introduce-now-for-enable-disable-and-mask.patch new file mode 100644 index 0000000..f58e4c3 --- /dev/null +++ b/SOURCES/0185-systemctl-introduce-now-for-enable-disable-and-mask.patch @@ -0,0 +1,457 @@ +From 65d36d59c936650e141fcbf38b287627fd0ba21a Mon Sep 17 00:00:00 2001 +From: Jan Synacek +Date: Fri, 15 May 2015 09:54:10 +0200 +Subject: [PATCH] systemctl: introduce --now for enable, disable and mask + +https://bugs.freedesktop.org/show_bug.cgi?id=42940 + +Conflicts: + src/libsystemd/sd-bus/bus-util.c + src/libsystemd/sd-bus/bus-util.h + src/systemctl/systemctl.c + +Cherry-picked from: 57ab2eabb8f92fad5239c7d4492e9c6e23ee0678 +Resolves: #1233081 +--- + Makefile.am | 1 + + man/systemctl.xml | 33 ++++++++---- + src/libsystemd/sd-bus/bus-util.c | 6 ++- + src/libsystemd/sd-bus/bus-util.h | 3 +- + src/machine/machinectl.c | 2 +- + src/shared/install.c | 112 +++++++++++++++++++-------------------- + src/shared/install.h | 1 + + src/systemctl/systemctl.c | 28 ++++++++-- + 8 files changed, 114 insertions(+), 72 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 604eaf2..d3fb398 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -5253,6 +5253,7 @@ machinectl_LDADD = \ + libsystemd-internal.la \ + libsystemd-logs.la \ + libsystemd-journal-internal.la \ ++ libsystemd-units.la \ + libsystemd-shared.la + + rootbin_PROGRAMS += \ +diff --git a/man/systemctl.xml b/man/systemctl.xml +index 3c4c9cb..44ec0d7 100644 +--- a/man/systemctl.xml ++++ b/man/systemctl.xml +@@ -456,6 +456,18 @@ + + + ++ ++ ++ ++ When used with enable, the units ++ will also be started. When used with disable or ++ mask, the units will also be stopped. The start ++ or stop operation is only carried out when the respective enable or ++ disable operation has been successful. ++ ++ ++ ++ + + + +@@ -909,11 +921,12 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service + the changes are taken into account immediately. Note that + this does not have the effect of also + starting any of the units being enabled. If this +- is desired, a separate start command must +- be invoked for the unit. Also note that in case of instance +- enablement, symlinks named the same as instances are created in +- the install location, however they all point to the same +- template unit file. ++ is desired, either should be used ++ together with this command, or an additional start ++ command must be invoked for the unit. Also note that in case of ++ instance enablement, symlinks named the same as instances ++ are created in the install location, however they all point to the ++ same template unit file. + + This command will print the actions executed. This + output may be suppressed by passing . +@@ -968,9 +981,10 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service + enable. This call implicitly reloads the + systemd daemon configuration after completing the disabling + of the units. Note that this command does not implicitly +- stop the units that are being disabled. If this is desired, +- an additional stop command should be +- executed afterwards. ++ stop the units that are being disabled. If this is desired, either ++ should be used together with this command, or ++ an additional stop command should be executed ++ afterwards. + + This command will print the actions executed. This + output may be suppressed by passing . +@@ -1116,7 +1130,8 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service + activation of the unit, including enablement and manual + activation. Use this option with care. This honors the + option to only mask temporarily +- until the next reboot of the system. ++ until the next reboot of the system. The ++ option can be used to ensure that the units are also stopped. + + + +diff --git a/src/libsystemd/sd-bus/bus-util.c b/src/libsystemd/sd-bus/bus-util.c +index 2e6d889..fff00d9 100644 +--- a/src/libsystemd/sd-bus/bus-util.c ++++ b/src/libsystemd/sd-bus/bus-util.c +@@ -1849,7 +1849,7 @@ int bus_wait_for_jobs_add(BusWaitForJobs *d, const char *path) { + return set_put_strdup(d->jobs, path); + } + +-int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet) { ++int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, UnitFileChange **changes, unsigned *n_changes) { + const char *type, *path, *source; + int r; + +@@ -1864,6 +1864,10 @@ int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet) { + else + log_info("Removed symlink %s.", path); + } ++ ++ r = unit_file_changes_add(changes, n_changes, streq(type, "symlink") ? UNIT_FILE_SYMLINK : UNIT_FILE_UNLINK, path, source); ++ if (r < 0) ++ return r; + } + if (r < 0) + return bus_log_parse_error(r); +diff --git a/src/libsystemd/sd-bus/bus-util.h b/src/libsystemd/sd-bus/bus-util.h +index e8a97ce..21db982 100644 +--- a/src/libsystemd/sd-bus/bus-util.h ++++ b/src/libsystemd/sd-bus/bus-util.h +@@ -24,6 +24,7 @@ + #include "sd-event.h" + #include "sd-bus.h" + #include "hashmap.h" ++#include "install.h" + #include "time-util.h" + #include "util.h" + +@@ -211,4 +212,4 @@ int bus_wait_for_jobs(BusWaitForJobs *d, bool quiet); + + DEFINE_TRIVIAL_CLEANUP_FUNC(BusWaitForJobs*, bus_wait_for_jobs_free); + +-int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet); ++int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, UnitFileChange **changes, unsigned *n_changes); +diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c +index 9f8c68b..f191070 100644 +--- a/src/machine/machinectl.c ++++ b/src/machine/machinectl.c +@@ -1709,7 +1709,7 @@ static int enable_machine(int argc, char *argv[], void *userdata) { + return bus_log_parse_error(r); + } + +- r = bus_deserialize_and_dump_unit_file_changes(reply, arg_quiet); ++ r = bus_deserialize_and_dump_unit_file_changes(reply, arg_quiet, NULL, NULL); + if (r < 0) + return r; + +diff --git a/src/shared/install.c b/src/shared/install.c +index efd489e..b62065b 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -113,51 +113,6 @@ static int get_config_path(UnitFileScope scope, bool runtime, const char *root_d + return 0; + } + +-static int add_file_change( +- UnitFileChange **changes, +- unsigned *n_changes, +- UnitFileChangeType type, +- const char *path, +- const char *source) { +- +- UnitFileChange *c; +- unsigned i; +- +- assert(path); +- assert(!changes == !n_changes); +- +- if (!changes) +- return 0; +- +- c = realloc(*changes, (*n_changes + 1) * sizeof(UnitFileChange)); +- if (!c) +- return -ENOMEM; +- +- *changes = c; +- i = *n_changes; +- +- c[i].type = type; +- c[i].path = strdup(path); +- if (!c[i].path) +- return -ENOMEM; +- +- path_kill_slashes(c[i].path); +- +- if (source) { +- c[i].source = strdup(source); +- if (!c[i].source) { +- free(c[i].path); +- return -ENOMEM; +- } +- +- path_kill_slashes(c[i].path); +- } else +- c[i].source = NULL; +- +- *n_changes = i+1; +- return 0; +-} +- + static int mark_symlink_for_removal( + Set **remove_symlinks_to, + const char *p) { +@@ -310,7 +265,7 @@ static int remove_marked_symlinks_fd( + + path_kill_slashes(p); + rmdir_parents(p, config_path); +- add_file_change(changes, n_changes, UNIT_FILE_UNLINK, p, NULL); ++ unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, p, NULL); + + if (!set_get(remove_symlinks_to, p)) { + +@@ -597,7 +552,7 @@ int unit_file_mask( + } + + if (symlink("/dev/null", path) >= 0) { +- add_file_change(changes, n_changes, UNIT_FILE_SYMLINK, path, "/dev/null"); ++ unit_file_changes_add(changes, n_changes, UNIT_FILE_SYMLINK, path, "/dev/null"); + continue; + } + +@@ -608,8 +563,8 @@ int unit_file_mask( + + if (force) { + if (symlink_atomic("/dev/null", path) >= 0) { +- add_file_change(changes, n_changes, UNIT_FILE_UNLINK, path, NULL); +- add_file_change(changes, n_changes, UNIT_FILE_SYMLINK, path, "/dev/null"); ++ unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, path, NULL); ++ unit_file_changes_add(changes, n_changes, UNIT_FILE_SYMLINK, path, "/dev/null"); + continue; + } + } +@@ -665,7 +620,7 @@ int unit_file_unmask( + q = -errno; + else { + q = mark_symlink_for_removal(&remove_symlinks_to, path); +- add_file_change(changes, n_changes, UNIT_FILE_UNLINK, path, NULL); ++ unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, path, NULL); + } + } + +@@ -747,7 +702,7 @@ int unit_file_link( + return -ENOMEM; + + if (symlink(*i, path) >= 0) { +- add_file_change(changes, n_changes, UNIT_FILE_SYMLINK, path, *i); ++ unit_file_changes_add(changes, n_changes, UNIT_FILE_SYMLINK, path, *i); + continue; + } + +@@ -766,8 +721,8 @@ int unit_file_link( + + if (force) { + if (symlink_atomic(*i, path) >= 0) { +- add_file_change(changes, n_changes, UNIT_FILE_UNLINK, path, NULL); +- add_file_change(changes, n_changes, UNIT_FILE_SYMLINK, path, *i); ++ unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, path, NULL); ++ unit_file_changes_add(changes, n_changes, UNIT_FILE_SYMLINK, path, *i); + continue; + } + } +@@ -794,6 +749,51 @@ void unit_file_list_free(Hashmap *h) { + hashmap_free(h); + } + ++int unit_file_changes_add( ++ UnitFileChange **changes, ++ unsigned *n_changes, ++ UnitFileChangeType type, ++ const char *path, ++ const char *source) { ++ ++ UnitFileChange *c; ++ unsigned i; ++ ++ assert(path); ++ assert(!changes == !n_changes); ++ ++ if (!changes) ++ return 0; ++ ++ c = realloc(*changes, (*n_changes + 1) * sizeof(UnitFileChange)); ++ if (!c) ++ return -ENOMEM; ++ ++ *changes = c; ++ i = *n_changes; ++ ++ c[i].type = type; ++ c[i].path = strdup(path); ++ if (!c[i].path) ++ return -ENOMEM; ++ ++ path_kill_slashes(c[i].path); ++ ++ if (source) { ++ c[i].source = strdup(source); ++ if (!c[i].source) { ++ free(c[i].path); ++ return -ENOMEM; ++ } ++ ++ path_kill_slashes(c[i].path); ++ } else ++ c[i].source = NULL; ++ ++ *n_changes = i+1; ++ return 0; ++} ++ + void unit_file_changes_free(UnitFileChange *changes, unsigned n_changes) { + unsigned i; + +@@ -1199,7 +1199,7 @@ static int create_symlink( + mkdir_parents_label(new_path, 0755); + + if (symlink(old_path, new_path) >= 0) { +- add_file_change(changes, n_changes, UNIT_FILE_SYMLINK, new_path, old_path); ++ unit_file_changes_add(changes, n_changes, UNIT_FILE_SYMLINK, new_path, old_path); + return 0; + } + +@@ -1220,8 +1220,8 @@ static int create_symlink( + if (r < 0) + return r; + +- add_file_change(changes, n_changes, UNIT_FILE_UNLINK, new_path, NULL); +- add_file_change(changes, n_changes, UNIT_FILE_SYMLINK, new_path, old_path); ++ unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, new_path, NULL); ++ unit_file_changes_add(changes, n_changes, UNIT_FILE_SYMLINK, new_path, old_path); + + return 0; + } +diff --git a/src/shared/install.h b/src/shared/install.h +index 3ca3939..d729e6e 100644 +--- a/src/shared/install.h ++++ b/src/shared/install.h +@@ -112,6 +112,7 @@ UnitFileState unit_file_get_state( + int unit_file_get_list(UnitFileScope scope, const char *root_dir, Hashmap *h); + + void unit_file_list_free(Hashmap *h); ++int unit_file_changes_add(UnitFileChange **changes, unsigned *n_changes, UnitFileChangeType type, const char *path, const char *source); + void unit_file_changes_free(UnitFileChange *changes, unsigned n_changes); + + int unit_file_query_preset(UnitFileScope scope, const char *root_dir, const char *name); +diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c +index 089c25f..9898694 100644 +--- a/src/systemctl/systemctl.c ++++ b/src/systemctl/systemctl.c +@@ -138,6 +138,7 @@ static char *arg_host = NULL; + static unsigned arg_lines = 10; + static OutputMode arg_output = OUTPUT_SHORT; + static bool arg_plain = false; ++static bool arg_now = false; + + static bool original_stdout_is_tty; + +@@ -1979,7 +1980,7 @@ static int set_default(sd_bus *bus, char **args) { + return r; + } + +- r = bus_deserialize_and_dump_unit_file_changes(reply, arg_quiet); ++ r = bus_deserialize_and_dump_unit_file_changes(reply, arg_quiet, NULL, NULL); + if (r < 0) + return r; + +@@ -5415,7 +5416,7 @@ static int enable_unit(sd_bus *bus, char **args) { + return bus_log_parse_error(r); + } + +- r = bus_deserialize_and_dump_unit_file_changes(reply, arg_quiet); ++ r = bus_deserialize_and_dump_unit_file_changes(reply, arg_quiet, &changes, &n_changes); + if (r < 0) + return r; + +@@ -5437,6 +5438,18 @@ static int enable_unit(sd_bus *bus, char **args) { + "3) A unit may be started when needed via activation (socket, path, timer,\n" + " D-Bus, udev, scripted systemctl call, ...).\n"); + ++ if (arg_now && n_changes > 0 && STR_IN_SET(args[0], "enable", "disable", "mask")) { ++ char *new_args[n_changes + 2]; ++ unsigned i; ++ ++ new_args[0] = streq(args[0], "enable") ? (char *)"start" : (char *)"stop"; ++ for (i = 0; i < n_changes; i++) ++ new_args[i + 1] = basename(changes[i].path); ++ new_args[i + 1] = NULL; ++ ++ r = start_unit(bus, new_args); ++ } ++ + finish: + unit_file_changes_free(changes, n_changes); + +@@ -5516,7 +5529,7 @@ static int add_dependency(sd_bus *bus, char **args) { + return r; + } + +- r = bus_deserialize_and_dump_unit_file_changes(reply, arg_quiet); ++ r = bus_deserialize_and_dump_unit_file_changes(reply, arg_quiet, NULL, NULL); + if (r < 0) + return r; + +@@ -5582,7 +5595,7 @@ static int preset_all(sd_bus *bus, char **args) { + return r; + } + +- r = bus_deserialize_and_dump_unit_file_changes(reply, arg_quiet); ++ r = bus_deserialize_and_dump_unit_file_changes(reply, arg_quiet, NULL, NULL); + if (r < 0) + return r; + +@@ -6058,6 +6071,7 @@ static void systemctl_help(void) { + " When shutting down or sleeping, ignore inhibitors\n" + " --kill-who=WHO Who to send signal to\n" + " -s --signal=SIGNAL Which signal to send\n" ++ " --now Start or stop unit in addition to enabling or disabling it\n" + " -q --quiet Suppress output\n" + " --no-block Do not wait until operation finished\n" + " --no-wall Don't send wall message before halt/power-off/reboot\n" +@@ -6255,6 +6269,7 @@ static int systemctl_parse_argv(int argc, char *argv[]) { + ARG_STATE, + ARG_JOB_MODE, + ARG_PRESET_MODE, ++ ARG_NOW, + }; + + static const struct option options[] = { +@@ -6297,6 +6312,7 @@ static int systemctl_parse_argv(int argc, char *argv[]) { + { "state", required_argument, NULL, ARG_STATE }, + { "recursive", no_argument, NULL, 'r' }, + { "preset-mode", required_argument, NULL, ARG_PRESET_MODE }, ++ { "now", no_argument, NULL, ARG_NOW }, + {} + }; + +@@ -6573,6 +6589,10 @@ static int systemctl_parse_argv(int argc, char *argv[]) { + + break; + ++ case ARG_NOW: ++ arg_now = true; ++ break; ++ + case '?': + return -EINVAL; + diff --git a/SOURCES/0186-journal-fix-access-to-munmapped-memory-in-sd_journal.patch b/SOURCES/0186-journal-fix-access-to-munmapped-memory-in-sd_journal.patch deleted file mode 100644 index 37d6d58..0000000 --- a/SOURCES/0186-journal-fix-access-to-munmapped-memory-in-sd_journal.patch +++ /dev/null @@ -1,320 +0,0 @@ -From 035c9e559064114e3f7ba19b593a97c4a4d4f060 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 748816a..9dbd674 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 5cc2c2d..376c3d4 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 03b57be..cfb26da 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; -@@ -182,7 +182,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) -@@ -357,7 +357,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) -@@ -375,9 +374,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; - } - -@@ -399,7 +399,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) -@@ -419,9 +418,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; - } - -@@ -447,7 +447,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); -@@ -517,7 +516,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; - } - -@@ -538,7 +538,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); -@@ -554,6 +553,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 0c42fb8..e5e3b38 100644 ---- a/src/journal/mmap-cache.h -+++ b/src/journal/mmap-cache.h -@@ -31,6 +31,22 @@ 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 9676f0f..67a77e6 100644 ---- a/src/journal/sd-journal.c -+++ b/src/journal/sd-journal.c -@@ -2506,9 +2506,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; -@@ -2533,9 +2531,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) { -@@ -2572,8 +2572,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) -@@ -2607,6 +2615,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/SOURCES/0186-udev-also-create-old-sas-paths.patch b/SOURCES/0186-udev-also-create-old-sas-paths.patch new file mode 100644 index 0000000..8109100 --- /dev/null +++ b/SOURCES/0186-udev-also-create-old-sas-paths.patch @@ -0,0 +1,135 @@ +From 956212c9a226d9192e4b3c085e917fe59f6d5cb9 Mon Sep 17 00:00:00 2001 +From: Maurizio Lombardi +Date: Tue, 2 Jun 2015 17:26:25 +0200 +Subject: [PATCH] udev: also create old sas paths + +RHEL-only + +Resolves: #957112 +--- + rules/60-persistent-storage.rules | 2 ++ + src/udev/udev-builtin-path_id.c | 33 ++++++++++++++++++++++++++------- + 2 files changed, 28 insertions(+), 7 deletions(-) + +diff --git a/rules/60-persistent-storage.rules b/rules/60-persistent-storage.rules +index 25b44a5..71ab974 100644 +--- a/rules/60-persistent-storage.rules ++++ b/rules/60-persistent-storage.rules +@@ -54,7 +54,9 @@ KERNEL=="mspblk[0-9]p[0-9]", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", SYMLINK+= + # by-path (parent device path) + ENV{DEVTYPE}=="disk", DEVPATH!="*/virtual/*", IMPORT{builtin}="path_id" + ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}" ++ENV{DEVTYPE}=="disk", ENV{ID_SAS_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_SAS_PATH}" + ENV{DEVTYPE}=="partition", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-part%n" ++ENV{DEVTYPE}=="partition", ENV{ID_SAS_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_SAS_PATH}-part%n" + + # skip unpartitioned removable media devices from drivers which do not send "change" events + ENV{DEVTYPE}=="disk", KERNEL!="sd*|sr*", ATTR{removable}=="1", GOTO="persistent_storage_end" +diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c +index bb0a624..025392d 100644 +--- a/src/udev/udev-builtin-path_id.c ++++ b/src/udev/udev-builtin-path_id.c +@@ -154,7 +154,7 @@ out: + return parent; + } + +-static struct udev_device *handle_scsi_sas(struct udev_device *parent, char **path) ++static struct udev_device *handle_scsi_sas(struct udev_device *parent, bool enable_new_sas_path, char **path, bool *new_sas_path) + { + struct udev *udev = udev_device_get_udev(parent); + struct udev_device *targetdev; +@@ -169,6 +169,8 @@ static struct udev_device *handle_scsi_sas(struct udev_device *parent, char **pa + const char *phy_count; + char *lun = NULL; + ++ *new_sas_path = false; ++ + targetdev = udev_device_get_parent_with_subsystem_devtype(parent, "scsi", "scsi_target"); + if (targetdev == NULL) + return NULL; +@@ -201,7 +203,7 @@ static struct udev_device *handle_scsi_sas(struct udev_device *parent, char **pa + } + + /* Check if we are simple disk */ +- if (strncmp(phy_count, "1", 2) != 0) { ++ if (strncmp(phy_count, "1", 2) != 0 || !enable_new_sas_path) { + parent = handle_scsi_sas_wide_port(parent, path); + goto out; + } +@@ -241,6 +243,8 @@ static struct udev_device *handle_scsi_sas(struct udev_device *parent, char **pa + + if (lun) + free(lun); ++ ++ *new_sas_path = true; + out: + udev_device_unref(target_sasdev); + udev_device_unref(expander_sasdev); +@@ -466,7 +470,7 @@ out: + return hostdev; + } + +-static struct udev_device *handle_scsi(struct udev_device *parent, char **path, bool *supported_parent) { ++static struct udev_device *handle_scsi(struct udev_device *parent, bool enable_new_sas_path, char **path, bool *supported_parent, bool *new_sas_path) { + const char *devtype; + const char *name; + const char *id; +@@ -494,7 +498,7 @@ static struct udev_device *handle_scsi(struct udev_device *parent, char **path, + } + + if (strstr(name, "/end_device-") != NULL) { +- parent = handle_scsi_sas(parent, path); ++ parent = handle_scsi_sas(parent, enable_new_sas_path, path, new_sas_path); + *supported_parent = true; + goto out; + } +@@ -610,6 +614,8 @@ static int builtin_path_id(struct udev_device *dev, int argc, char *argv[], bool + char *path = NULL; + bool supported_transport = false; + bool supported_parent = false; ++ bool new_sas_path = false; ++ bool enable_new_sas_path = true; + + /* S390 ccw bus */ + parent = udev_device_get_parent_with_subsystem_devtype(dev, "ccw", NULL); +@@ -618,6 +624,8 @@ static int builtin_path_id(struct udev_device *dev, int argc, char *argv[], bool + goto out; + } + ++restart: ++ ; + /* walk up the chain of devices and compose path */ + parent = dev; + while (parent != NULL) { +@@ -629,7 +637,7 @@ static int builtin_path_id(struct udev_device *dev, int argc, char *argv[], bool + } else if (streq(subsys, "scsi_tape")) { + handle_scsi_tape(parent, &path); + } else if (streq(subsys, "scsi")) { +- parent = handle_scsi(parent, &path, &supported_parent); ++ parent = handle_scsi(parent, enable_new_sas_path, &path, &supported_parent, &new_sas_path); + supported_transport = true; + } else if (streq(subsys, "cciss")) { + parent = handle_cciss(parent, &path); +@@ -721,9 +729,20 @@ out: + i--; + tag[i] = '\0'; + +- udev_builtin_add_property(dev, test, "ID_PATH", path); +- udev_builtin_add_property(dev, test, "ID_PATH_TAG", tag); ++ if (new_sas_path) { ++ udev_builtin_add_property(dev, test, "ID_SAS_PATH", path); ++ } else { ++ udev_builtin_add_property(dev, test, "ID_PATH", path); ++ udev_builtin_add_property(dev, test, "ID_PATH_TAG", tag); ++ } ++ + free(path); ++ ++ if (new_sas_path) { ++ enable_new_sas_path = false; ++ goto restart; ++ } ++ + return EXIT_SUCCESS; + } + return EXIT_FAILURE; diff --git a/SOURCES/0187-gpt-auto-generator-skip-nonexistent-devices.patch b/SOURCES/0187-gpt-auto-generator-skip-nonexistent-devices.patch deleted file mode 100644 index 4b7115f..0000000 --- a/SOURCES/0187-gpt-auto-generator-skip-nonexistent-devices.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 7f3f1b3f979a96182b2eb44eeea86993506108d5 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 d2b4213..1f09aed 100644 ---- a/src/gpt-auto-generator/gpt-auto-generator.c -+++ b/src/gpt-auto-generator/gpt-auto-generator.c -@@ -306,6 +306,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)); - udev_device_unref(q); diff --git a/SOURCES/0187-journald-do-not-strip-leading-whitespace-from-messag.patch b/SOURCES/0187-journald-do-not-strip-leading-whitespace-from-messag.patch new file mode 100644 index 0000000..f74bb27 --- /dev/null +++ b/SOURCES/0187-journald-do-not-strip-leading-whitespace-from-messag.patch @@ -0,0 +1,34 @@ +From fa74ba131041161f1ae9fbc0a3b11f9a005b9d8f Mon Sep 17 00:00:00 2001 +From: Filipe Brandenburger +Date: Wed, 10 Jun 2015 22:33:44 -0700 +Subject: [PATCH] journald: do not strip leading whitespace from messages + +Keep leading whitespace for compatibility with older syslog +implementations. Also useful when piping formatted output to the +`logger` command. Keep removing trailing whitespace. + +Tested with `pstree | logger` and checking that the output of +`journalctl | tail` included aligned and formatted output. + +Confirmed that all test cases still pass as expected. + +Cherry-picked from: ec5ff444 +Resolves: #1227396 +--- + src/journal/journald-syslog.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/journal/journald-syslog.c b/src/journal/journald-syslog.c +index 7d545ca..ba80941 100644 +--- a/src/journal/journald-syslog.c ++++ b/src/journal/journald-syslog.c +@@ -232,7 +232,8 @@ size_t syslog_parse_identifier(const char **buf, char **identifier, char **pid) + if (t) + *identifier = t; + +- e += strspn(p + e, WHITESPACE); ++ if (strchr(WHITESPACE, p[e])) ++ e++; + *buf = p + e; + return e; + } diff --git a/SOURCES/0188-Revert-core-one-step-back-again-for-nspawn-we-actual.patch b/SOURCES/0188-Revert-core-one-step-back-again-for-nspawn-we-actual.patch new file mode 100644 index 0000000..8a758c7 --- /dev/null +++ b/SOURCES/0188-Revert-core-one-step-back-again-for-nspawn-we-actual.patch @@ -0,0 +1,39 @@ +From 647a7761e2fa423c6e1bd6785b043dbe7b525e3c Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Thu, 25 Jun 2015 09:20:59 +0200 +Subject: [PATCH] Revert "core: one step back again, for nspawn we actually + can't wait for cgroups running empty since systemd will get exactly zero + notifications about it" + +This reverts commit 743970d2ea6d08aa7c7bff8220f6b7702f2b1db7. + +RHEL-only +https://bugzilla.redhat.com/show_bug.cgi?id=1141137 +https://github.com/systemd/systemd/pull/350 + +Resolves: #1199644 +--- + src/core/unit.c | 10 +--------- + 1 file changed, 1 insertion(+), 9 deletions(-) + +diff --git a/src/core/unit.c b/src/core/unit.c +index b9e1f13..fa17567 100644 +--- a/src/core/unit.c ++++ b/src/core/unit.c +@@ -3546,15 +3546,7 @@ int unit_kill_context( + log_unit_warning_errno(u->id, r, "Failed to kill control group: %m"); + } else if (r > 0) { + +- /* FIXME: For now, we will not wait for the +- * cgroup members to die, simply because +- * cgroup notification is unreliable. It +- * doesn't work at all in containers, and +- * outside of containers it can be confused +- * easily by leaving directories in the +- * cgroup. */ +- +- /* wait_for_exit = true; */ ++ wait_for_exit = true; + + if (c->send_sighup && k != KILL_KILL) { + set_free(pid_set); diff --git a/SOURCES/0188-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch b/SOURCES/0188-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch deleted file mode 100644 index 3b194f3..0000000 --- a/SOURCES/0188-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 59250a9f6ac82b91cae43ae6a022298df1a67ee1 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 1f09aed..f1749be 100644 ---- a/src/gpt-auto-generator/gpt-auto-generator.c -+++ b/src/gpt-auto-generator/gpt-auto-generator.c -@@ -73,10 +73,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; - -@@ -307,7 +305,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/SOURCES/0189-bus-creds-always-set-SD_BUS_CREDS_PID-when-we-set-pi.patch b/SOURCES/0189-bus-creds-always-set-SD_BUS_CREDS_PID-when-we-set-pi.patch new file mode 100644 index 0000000..39e7156 --- /dev/null +++ b/SOURCES/0189-bus-creds-always-set-SD_BUS_CREDS_PID-when-we-set-pi.patch @@ -0,0 +1,61 @@ +From 0ca06b7178ac205855238941eef7fe981447822a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 24 May 2015 20:20:06 -0400 +Subject: [PATCH] bus-creds: always set SD_BUS_CREDS_PID when we set pid in the + mask + +Also reorder the code a bit to be easier to parse. + +Cherry-picked from: 236f83a +Related: #1230190 +--- + src/core/selinux-access.c | 2 +- + src/libsystemd/sd-bus/bus-creds.c | 17 +++++++---------- + 2 files changed, 8 insertions(+), 11 deletions(-) + +diff --git a/src/core/selinux-access.c b/src/core/selinux-access.c +index 1888874..ce4f394 100644 +--- a/src/core/selinux-access.c ++++ b/src/core/selinux-access.c +@@ -240,7 +240,7 @@ int mac_selinux_generic_access_check( + audit_info.path = path; + audit_info.cmdline = cl; + +- r = selinux_check_access((security_context_t) scon, fcon, tclass, permission, &audit_info); ++ r = selinux_check_access(scon, fcon, tclass, permission, &audit_info); + if (r < 0) + r = sd_bus_error_setf(error, SD_BUS_ERROR_ACCESS_DENIED, "SELinux policy denies access."); + +diff --git a/src/libsystemd/sd-bus/bus-creds.c b/src/libsystemd/sd-bus/bus-creds.c +index ea8a619..5b87fa9 100644 +--- a/src/libsystemd/sd-bus/bus-creds.c ++++ b/src/libsystemd/sd-bus/bus-creds.c +@@ -698,21 +698,18 @@ int bus_creds_add_more(sd_bus_creds *c, uint64_t mask, pid_t pid, pid_t tid) { + return 0; + + /* Try to retrieve PID from creds if it wasn't passed to us */ +- if (pid <= 0 && (c->mask & SD_BUS_CREDS_PID)) ++ if (pid > 0) { ++ c->pid = pid; ++ c->mask |= SD_BUS_CREDS_PID; ++ } else if (c->mask & SD_BUS_CREDS_PID) + pid = c->pid; ++ else ++ /* Without pid we cannot do much... */ ++ return 0; + + if (tid <= 0 && (c->mask & SD_BUS_CREDS_TID)) + tid = c->pid; + +- /* Without pid we cannot do much... */ +- if (pid <= 0) +- return 0; +- +- if (pid > 0) { +- c->pid = pid; +- c->mask |= SD_BUS_CREDS_PID; +- } +- + if (tid > 0) { + c->tid = tid; + c->mask |= SD_BUS_CREDS_TID; diff --git a/SOURCES/0189-nspawn-explicitly-terminate-machines-when-we-exit-ns.patch b/SOURCES/0189-nspawn-explicitly-terminate-machines-when-we-exit-ns.patch deleted file mode 100644 index b3eb736..0000000 --- a/SOURCES/0189-nspawn-explicitly-terminate-machines-when-we-exit-ns.patch +++ /dev/null @@ -1,123 +0,0 @@ -From 5a69011a7d265ec42562fdfdb99d886570a49d7a Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 6 Nov 2013 02:05:06 +0100 -Subject: [PATCH] nspawn: explicitly terminate machines when we exit nspawn - -https://bugs.freedesktop.org/show_bug.cgi?id=68370 -https://bugzilla.redhat.com/show_bug.cgi?id=988883 - -Conflicts: - src/nspawn/nspawn.c - -Conflicts: - src/nspawn/nspawn.c ---- - src/nspawn/nspawn.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++---- - 1 file changed, 64 insertions(+), 4 deletions(-) - -diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c -index 4bc49a3..f326f99 100644 ---- a/src/nspawn/nspawn.c -+++ b/src/nspawn/nspawn.c -@@ -43,9 +43,9 @@ - #include - #include - --#include --#include -- -+#include "sd-daemon.h" -+#include "sd-bus.h" -+#include "sd-id128.h" - #include "log.h" - #include "util.h" - #include "mkdir.h" -@@ -56,13 +56,13 @@ - #include "strv.h" - #include "path-util.h" - #include "loopback-setup.h" --#include "sd-id128.h" - #include "dev-setup.h" - #include "fdset.h" - #include "build.h" - #include "fileio.h" - #include "bus-internal.h" - #include "bus-message.h" -+#include "bus-error.h" - - #ifndef TTY_GID - #define TTY_GID 5 -@@ -1229,6 +1229,60 @@ static int register_machine(void) { - return 0; - } - -+static int terminate_machine(pid_t pid) { -+ _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; -+ _cleanup_bus_message_unref_ sd_bus_message *reply = NULL; -+ _cleanup_bus_unref_ sd_bus *bus = NULL; -+ const char *path; -+ int r; -+ -+ r = sd_bus_open_system(&bus); -+ if (r < 0) { -+ log_error("Failed to open system bus: %s", strerror(-r)); -+ return r; -+ } -+ -+ r = sd_bus_call_method( -+ bus, -+ "org.freedesktop.machine1", -+ "/org/freedesktop/machine1", -+ "org.freedesktop.machine1.Manager", -+ "GetMachineByPID", -+ &error, -+ &reply, -+ "u", -+ (uint32_t) pid); -+ if (r < 0) { -+ /* Note that the machine might already have been -+ * cleaned up automatically, hence don't consider it a -+ * failure if we cannot get the machine object. */ -+ log_debug("Failed to get machine: %s", bus_error_message(&error, r)); -+ return 0; -+ } -+ -+ r = sd_bus_message_read(reply, "o", &path); -+ if (r < 0) { -+ log_error("Failed to parse GetMachineByPID() reply: %s", bus_error_message(&error, r)); -+ return r; -+ } -+ -+ r = sd_bus_call_method( -+ bus, -+ "org.freedesktop.machine1", -+ path, -+ "org.freedesktop.machine1.Machine", -+ "Terminate", -+ &error, -+ NULL, -+ NULL); -+ if (r < 0) { -+ log_debug("Failed to terminate machine: %s", bus_error_message(&error, r)); -+ return 0; -+ } -+ -+ return 0; -+} -+ - static bool audit_enabled(void) { - int fd; - -@@ -1704,6 +1758,12 @@ int main(int argc, char *argv[]) { - if (saved_attr_valid) - tcsetattr(STDIN_FILENO, TCSANOW, &saved_attr); - -+ /* Kill if it is not dead yet anyway */ -+ terminate_machine(pid); -+ -+ /* Redundant, but better safe than sorry */ -+ kill(pid, SIGKILL); -+ - k = wait_for_terminate(pid, &status); - if (k < 0) { - r = EXIT_FAILURE; diff --git a/SOURCES/0190-bash-completion-journalctl-file.patch b/SOURCES/0190-bash-completion-journalctl-file.patch deleted file mode 100644 index 2da6b7c..0000000 --- a/SOURCES/0190-bash-completion-journalctl-file.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 30b346ca4f331934ce49a1199137778562ff38d2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Fri, 15 Nov 2013 19:00:01 -0500 -Subject: [PATCH] bash-completion: journalctl --file - -Conflicts: - shell-completion/bash/journalctl ---- - shell-completion/bash/journalctl | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/shell-completion/bash/journalctl b/shell-completion/bash/journalctl -index 3c40d57..441b636 100644 ---- a/shell-completion/bash/journalctl -+++ b/shell-completion/bash/journalctl -@@ -43,7 +43,7 @@ _journalctl() { - -h --help -l --local --new-id128 -m --merge --no-pager - --no-tail -q --quiet --setup-keys --this-boot --verify - --version --list-catalog --update-catalog' -- [ARG]='-b --boot --this-boot -D --directory -F --field -+ [ARG]='-b --boot --this-boot -D --directory --file -F --field - -o --output -u --unit --user-unit' - [ARGUNKNOWN]='-c --cursor --interval -n --lines -p --priority --since --until - --verify-key' -@@ -58,6 +58,10 @@ _journalctl() { - comps=$(compgen -d -- "$cur") - compopt -o filenames - ;; -+ --file) -+ comps=$(compgen -f -- "$cur") -+ compopt -o filenames -+ ;; - --output|-o) - comps='short short-monotonic verbose export json cat' - ;; diff --git a/SOURCES/0190-sd-bus-do-not-use-per-datagram-auxiliary-information.patch b/SOURCES/0190-sd-bus-do-not-use-per-datagram-auxiliary-information.patch new file mode 100644 index 0000000..bed34e4 --- /dev/null +++ b/SOURCES/0190-sd-bus-do-not-use-per-datagram-auxiliary-information.patch @@ -0,0 +1,137 @@ +From d0986e46b74de3b131fccbf79bd00de5ff054f71 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 6 Jun 2015 18:59:27 -0400 +Subject: [PATCH] sd-bus: do not use per-datagram auxiliary information + +SELinux information cannot be retrieved this way, since we are +using stream unix sockets and SCM_SECURITY does not work for +them. + +SCM_CREDENTIALS use dropped to be consistent. We also should +get this information at connection time. + +https://bugzilla.redhat.com/show_bug.cgi?id=1224211 +"SCM_SECURITY was only added for datagram sockets." + +Cherry-picked from: d868f2a +Related: #1230190 +--- + src/libsystemd/sd-bus/bus-socket.c | 70 +++++++------------------------------- + 1 file changed, 12 insertions(+), 58 deletions(-) + +diff --git a/src/libsystemd/sd-bus/bus-socket.c b/src/libsystemd/sd-bus/bus-socket.c +index 52883fa..abd9ece 100644 +--- a/src/libsystemd/sd-bus/bus-socket.c ++++ b/src/libsystemd/sd-bus/bus-socket.c +@@ -501,9 +501,7 @@ static int bus_socket_read_auth(sd_bus *b) { + void *p; + union { + struct cmsghdr cmsghdr; +- uint8_t buf[CMSG_SPACE(sizeof(int) * BUS_FDS_MAX) + +- CMSG_SPACE(sizeof(struct ucred)) + +- CMSG_SPACE(NAME_MAX)]; /*selinux label */ ++ uint8_t buf[CMSG_SPACE(sizeof(int) * BUS_FDS_MAX)]; + } control; + struct cmsghdr *cmsg; + bool handle_cmsg = false; +@@ -556,8 +554,8 @@ static int bus_socket_read_auth(sd_bus *b) { + + b->rbuffer_size += k; + +- if (handle_cmsg) { +- for (cmsg = CMSG_FIRSTHDR(&mh); cmsg; cmsg = CMSG_NXTHDR(&mh, cmsg)) { ++ if (handle_cmsg) ++ for (cmsg = CMSG_FIRSTHDR(&mh); cmsg; cmsg = CMSG_NXTHDR(&mh, cmsg)) + if (cmsg->cmsg_level == SOL_SOCKET && + cmsg->cmsg_type == SCM_RIGHTS) { + int j; +@@ -568,31 +566,9 @@ static int bus_socket_read_auth(sd_bus *b) { + j = (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int); + close_many((int*) CMSG_DATA(cmsg), j); + return -EIO; +- +- } else if (cmsg->cmsg_level == SOL_SOCKET && +- cmsg->cmsg_type == SCM_CREDENTIALS && +- cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred))) { +- +- /* Ignore bogus data, which we might +- * get on socketpair() sockets */ +- if (((struct ucred*) CMSG_DATA(cmsg))->pid != 0) { +- memcpy(&b->ucred, CMSG_DATA(cmsg), sizeof(struct ucred)); +- b->ucred_valid = true; +- } +- +- } else if (cmsg->cmsg_level == SOL_SOCKET && +- cmsg->cmsg_type == SCM_SECURITY) { +- +- size_t l; +- +- l = cmsg->cmsg_len - CMSG_LEN(0); +- if (l > 0) { +- memcpy(&b->label, CMSG_DATA(cmsg), l); +- b->label[l] = 0; +- } +- } +- } +- } ++ } else ++ log_debug("Got unexpected auxiliary data with level=%d and type=%d", ++ cmsg->cmsg_level, cmsg->cmsg_type); + + r = bus_socket_auth_verify(b); + if (r != 0) +@@ -945,9 +921,7 @@ int bus_socket_read_message(sd_bus *bus) { + void *b; + union { + struct cmsghdr cmsghdr; +- uint8_t buf[CMSG_SPACE(sizeof(int) * BUS_FDS_MAX) + +- CMSG_SPACE(sizeof(struct ucred)) + +- CMSG_SPACE(NAME_MAX)]; /*selinux label */ ++ uint8_t buf[CMSG_SPACE(sizeof(int) * BUS_FDS_MAX)]; + } control; + struct cmsghdr *cmsg; + bool handle_cmsg = false; +@@ -995,8 +969,8 @@ int bus_socket_read_message(sd_bus *bus) { + + bus->rbuffer_size += k; + +- if (handle_cmsg) { +- for (cmsg = CMSG_FIRSTHDR(&mh); cmsg; cmsg = CMSG_NXTHDR(&mh, cmsg)) { ++ if (handle_cmsg) ++ for (cmsg = CMSG_FIRSTHDR(&mh); cmsg; cmsg = CMSG_NXTHDR(&mh, cmsg)) + if (cmsg->cmsg_level == SOL_SOCKET && + cmsg->cmsg_type == SCM_RIGHTS) { + int n, *f; +@@ -1021,29 +995,9 @@ int bus_socket_read_message(sd_bus *bus) { + memcpy(f + bus->n_fds, CMSG_DATA(cmsg), n * sizeof(int)); + bus->fds = f; + bus->n_fds += n; +- } else if (cmsg->cmsg_level == SOL_SOCKET && +- cmsg->cmsg_type == SCM_CREDENTIALS && +- cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred))) { +- +- /* Ignore bogus data, which we might +- * get on socketpair() sockets */ +- if (((struct ucred*) CMSG_DATA(cmsg))->pid != 0) { +- memcpy(&bus->ucred, CMSG_DATA(cmsg), sizeof(struct ucred)); +- bus->ucred_valid = true; +- } +- +- } else if (cmsg->cmsg_level == SOL_SOCKET && +- cmsg->cmsg_type == SCM_SECURITY) { +- +- size_t l; +- l = cmsg->cmsg_len - CMSG_LEN(0); +- if (l > 0) { +- memcpy(&bus->label, CMSG_DATA(cmsg), l); +- bus->label[l] = 0; +- } +- } +- } +- } ++ } else ++ log_debug("Got unexpected auxiliary data with level=%d and type=%d", ++ cmsg->cmsg_level, cmsg->cmsg_type); + + r = bus_socket_read_message_need(bus, &need); + if (r < 0) diff --git a/SOURCES/0191-journalctl-zsh-completion-fix-several-issues-in-help.patch b/SOURCES/0191-journalctl-zsh-completion-fix-several-issues-in-help.patch deleted file mode 100644 index 24cc9fe..0000000 --- a/SOURCES/0191-journalctl-zsh-completion-fix-several-issues-in-help.patch +++ /dev/null @@ -1,135 +0,0 @@ -From d7e71959bf4e186404e112e0c5c5c1ecdbe2056c 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 - -Conflicts: - shell-completion/zsh/_journalctl - 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 73646b5..57f9452 100644 ---- a/shell-completion/zsh/_journalctl -+++ b/shell-completion/zsh/_journalctl -@@ -70,14 +70,14 @@ _arguments -s \ - {-q,--quiet}"[Don't show privilege warning]" \ - {-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' \ -- {-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]' \ -@@ -90,8 +90,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 0876ee6..54e3ddd 100644 ---- a/src/journal/journalctl.c -+++ b/src/journal/journalctl.c -@@ -118,29 +118,29 @@ 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" -- " -k --dmesg Show kernel message log from current boot\n" -+ " -b --boot[=ID] Show data only from ID or, if unspecified, the 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" -@@ -149,20 +149,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/SOURCES/0191-sd-bus-store-selinux-context-at-connection-time.patch b/SOURCES/0191-sd-bus-store-selinux-context-at-connection-time.patch new file mode 100644 index 0000000..c26486d --- /dev/null +++ b/SOURCES/0191-sd-bus-store-selinux-context-at-connection-time.patch @@ -0,0 +1,94 @@ +From d491fd1068446f74992e76154e5e9d57bd67e7ac Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 6 Jun 2015 21:24:45 -0400 +Subject: [PATCH] sd-bus: store selinux context at connection time + +This appears to be the right time to do it for SOCK_STREAM +unix sockets. + +Also: condition bus_get_owner_creds_dbus1 was reversed. Split +it out to a separate variable for clarity and fix. + +https://bugzilla.redhat.com/show_bug.cgi?id=1224211 + +Cherry-picked from: c4e6556 +Related: #1230190 +--- + src/libsystemd/sd-bus/bus-control.c | 6 ++++-- + src/libsystemd/sd-bus/bus-internal.h | 2 +- + src/libsystemd/sd-bus/bus-socket.c | 7 +++++++ + src/libsystemd/sd-bus/sd-bus.c | 1 + + 4 files changed, 13 insertions(+), 3 deletions(-) + +diff --git a/src/libsystemd/sd-bus/bus-control.c b/src/libsystemd/sd-bus/bus-control.c +index 06e5b4f..8b84b94 100644 +--- a/src/libsystemd/sd-bus/bus-control.c ++++ b/src/libsystemd/sd-bus/bus-control.c +@@ -945,8 +945,10 @@ static int bus_get_owner_creds_dbus1(sd_bus *bus, uint64_t mask, sd_bus_creds ** + _cleanup_bus_creds_unref_ sd_bus_creds *c = NULL; + pid_t pid = 0; + int r; ++ bool do_label = bus->label && (mask & SD_BUS_CREDS_SELINUX_CONTEXT); + +- if (!bus->ucred_valid && !isempty(bus->label)) ++ /* Avoid allocating anything if we have no chance of returning useful data */ ++ if (!bus->ucred_valid && !do_label) + return -ENODATA; + + c = bus_creds_new(); +@@ -970,7 +972,7 @@ static int bus_get_owner_creds_dbus1(sd_bus *bus, uint64_t mask, sd_bus_creds ** + } + } + +- if (!isempty(bus->label) && (mask & SD_BUS_CREDS_SELINUX_CONTEXT)) { ++ if (do_label) { + c->label = strdup(bus->label); + if (!c->label) + return -ENOMEM; +diff --git a/src/libsystemd/sd-bus/bus-internal.h b/src/libsystemd/sd-bus/bus-internal.h +index e9f1a81..071b3da 100644 +--- a/src/libsystemd/sd-bus/bus-internal.h ++++ b/src/libsystemd/sd-bus/bus-internal.h +@@ -262,7 +262,7 @@ struct sd_bus { + usec_t auth_timeout; + + struct ucred ucred; +- char label[NAME_MAX]; ++ char *label; + + uint64_t creds_mask; + +diff --git a/src/libsystemd/sd-bus/bus-socket.c b/src/libsystemd/sd-bus/bus-socket.c +index abd9ece..d00cd01 100644 +--- a/src/libsystemd/sd-bus/bus-socket.c ++++ b/src/libsystemd/sd-bus/bus-socket.c +@@ -600,10 +600,17 @@ void bus_socket_setup(sd_bus *b) { + } + + static void bus_get_peercred(sd_bus *b) { ++ int r; ++ + assert(b); + + /* Get the peer for socketpair() sockets */ + b->ucred_valid = getpeercred(b->input_fd, &b->ucred) >= 0; ++ ++ /* Get the SELinux context of the peer */ ++ r = getpeersec(b->input_fd, &b->label); ++ if (r < 0 && r != -EOPNOTSUPP) ++ log_debug_errno(r, "Failed to determine peer security context: %m"); + } + + static int bus_socket_start_auth_client(sd_bus *b) { +diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c +index cac9b65..b0a3237 100644 +--- a/src/libsystemd/sd-bus/sd-bus.c ++++ b/src/libsystemd/sd-bus/sd-bus.c +@@ -121,6 +121,7 @@ static void bus_free(sd_bus *b) { + if (b->kdbus_buffer) + munmap(b->kdbus_buffer, KDBUS_POOL_SIZE); + ++ free(b->label); + free(b->rbuffer); + free(b->unique_name); + free(b->auth_buffer); diff --git a/SOURCES/0192-cgroup-run-PID-1-in-the-root-cgroup.patch b/SOURCES/0192-cgroup-run-PID-1-in-the-root-cgroup.patch deleted file mode 100644 index 38a14e5..0000000 --- a/SOURCES/0192-cgroup-run-PID-1-in-the-root-cgroup.patch +++ /dev/null @@ -1,61 +0,0 @@ -From c46be83563a2d20a480988dab55404f941b9cc35 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 5 Nov 2013 22:14:52 +0100 -Subject: [PATCH] cgroup: run PID 1 in the root cgroup - -This way cleaning up the cgroup tree on shutdown is a lot easier since -we are in the root dir. Also PID 1 was previously artificially placed in -system.slice, even though our rule actually was not to have processes in -slices. The root slice otoh is magic anyway, so having PID 1 in there -sounds less surprising. - -Of course, this means that PID is scheduled against the three top-level -slices. ---- - src/core/cgroup.c | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) - -diff --git a/src/core/cgroup.c b/src/core/cgroup.c -index b60707c..32e2599 100644 ---- a/src/core/cgroup.c -+++ b/src/core/cgroup.c -@@ -591,8 +591,8 @@ pid_t unit_search_main_pid(Unit *u) { - - int manager_setup_cgroup(Manager *m) { - _cleanup_free_ char *path = NULL; -+ char *e; - int r; -- char *e, *a; - - assert(m); - -@@ -612,9 +612,13 @@ int manager_setup_cgroup(Manager *m) { - return r; - } - -- /* Already in /system.slice? If so, let's cut this off again */ -+ /* LEGACY: Already in /system.slice? If so, let's cut this -+ * off. This is to support live upgrades from older systemd -+ * versions where PID 1 was moved there. */ - if (m->running_as == SYSTEMD_SYSTEM) { - e = endswith(m->cgroup_root, "/" SPECIAL_SYSTEM_SLICE); -+ if (!e) -+ e = endswith(m->cgroup_root, "/system"); - if (e) - *e = 0; - } -@@ -645,12 +649,8 @@ int manager_setup_cgroup(Manager *m) { - log_debug("Release agent already installed."); - } - -- /* 4. Realize the system slice and put us in there */ -- if (m->running_as == SYSTEMD_SYSTEM) { -- a = strappenda(m->cgroup_root, "/" SPECIAL_SYSTEM_SLICE); -- r = cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER, a, 0); -- } else -- r = cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER, m->cgroup_root, 0); -+ /* 4. Make sure we are in the root cgroup */ -+ r = cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER, m->cgroup_root, 0); - if (r < 0) { - log_error("Failed to create root cgroup hierarchy: %s", strerror(-r)); - return r; diff --git a/SOURCES/0192-journald-simplify-context-handling.patch b/SOURCES/0192-journald-simplify-context-handling.patch new file mode 100644 index 0000000..b6e92fd --- /dev/null +++ b/SOURCES/0192-journald-simplify-context-handling.patch @@ -0,0 +1,81 @@ +From da4f4b5c330ad648c9ca9c33e1f0e65148042c12 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 6 Jun 2015 21:36:52 -0400 +Subject: [PATCH] journald: simplify context handling + +By using our homegrown function we can dispense with all the iffdefery. + +Cherry-picked from: 2de56f7 +Related: #1230190 +--- + src/journal/journald-stream.c | 29 ++++++++--------------------- + 1 file changed, 8 insertions(+), 21 deletions(-) + +diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c +index 11b852d..15a554c 100644 +--- a/src/journal/journald-stream.c ++++ b/src/journal/journald-stream.c +@@ -57,10 +57,7 @@ struct StdoutStream { + int fd; + + struct ucred ucred; +-#ifdef HAVE_SELINUX +- security_context_t security_context; +-#endif +- ++ char *label; + char *identifier; + char *unit_id; + int priority; +@@ -84,8 +81,7 @@ static int stdout_stream_log(StdoutStream *s, const char *p) { + char syslog_facility[sizeof("SYSLOG_FACILITY=")-1 + DECIMAL_STR_MAX(int) + 1]; + _cleanup_free_ char *message = NULL, *syslog_identifier = NULL; + unsigned n = 0; +- char *label = NULL; +- size_t label_len = 0; ++ size_t label_len; + + assert(s); + assert(p); +@@ -130,14 +126,8 @@ static int stdout_stream_log(StdoutStream *s, const char *p) { + if (message) + IOVEC_SET_STRING(iovec[n++], message); + +-#ifdef HAVE_SELINUX +- if (s->security_context) { +- label = (char*) s->security_context; +- label_len = strlen((char*) s->security_context); +- } +-#endif +- +- server_dispatch_message(s->server, iovec, n, ELEMENTSOF(iovec), &s->ucred, NULL, label, label_len, s->unit_id, priority, 0); ++ label_len = s->label ? strlen(s->label) : 0; ++ server_dispatch_message(s->server, iovec, n, ELEMENTSOF(iovec), &s->ucred, NULL, s->label, label_len, s->unit_id, priority, 0); + return 0; + } + +@@ -343,11 +333,7 @@ void stdout_stream_free(StdoutStream *s) { + + safe_close(s->fd); + +-#ifdef HAVE_SELINUX +- if (s->security_context) +- freecon(s->security_context); +-#endif +- ++ free(s->label); + free(s->identifier); + free(s->unit_id); + free(s); +@@ -396,8 +382,9 @@ static int stdout_stream_new(sd_event_source *es, int listen_fd, uint32_t revent + + #ifdef HAVE_SELINUX + if (mac_selinux_use()) { +- if (getpeercon(fd, &stream->security_context) < 0 && errno != ENOPROTOOPT) +- log_error_errno(errno, "Failed to determine peer security context: %m"); ++ r = getpeersec(fd, &stream->label); ++ if (r < 0 && r != -EOPNOTSUPP) ++ (void) log_warning_errno(r, "Failed to determine peer security context: %m"); + } + #endif + diff --git a/SOURCES/0193-bash-completion-add-verb-set-property.patch b/SOURCES/0193-bash-completion-add-verb-set-property.patch new file mode 100644 index 0000000..8bc3cda --- /dev/null +++ b/SOURCES/0193-bash-completion-add-verb-set-property.patch @@ -0,0 +1,51 @@ +From 19c1015ce732c387cae8d0a2b116eb2022087ca2 Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Tue, 23 Sep 2014 14:59:11 +0200 +Subject: [PATCH] bash-completion: add verb set-property + +not in upstream yet + +Resolves: #1235635 +--- + shell-completion/bash/systemctl.in | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/shell-completion/bash/systemctl.in b/shell-completion/bash/systemctl.in +index 3d787cd..496c756 100644 +--- a/shell-completion/bash/systemctl.in ++++ b/shell-completion/bash/systemctl.in +@@ -96,6 +96,12 @@ _systemctl () { + [ARG]='--host -H --kill-who --property -p --signal -s --type -t --state --root' + ) + ++ local -A PROPS='CPUQuota= CPUAccounting= MemoryAccounting= BlockIOAccounting= SendSIGHUP= SendSIGKILL= WakeSystem= ++ DefaultDependencies= MemoryLimit= CPUShares= BlockIOWeight= User= Group= DevicePolicy= KillMode= DeviceAllow= ++ BlockIOReadBandwidth= BlockIOWriteBandwidth= BlockIODeviceWeight= Nice= Environment= KillSignal= AccuracySec= ++ LimitCPU= LimitFSIZE= LimitDATA= LimitSTACK= LimitCORE= LimitRSS= LimitNOFILE= LimitAS= LimitNPROC= LimitMEMLOCK= ++ LimitLOCKS= LimitSIGPENDING= LimitMSGQUEUE= LimitNICE= LimitRTPRIO= LimitRTTIME=' ++ + if __contains_word "--user" ${COMP_WORDS[*]}; then + mode=--user + else +@@ -153,6 +159,7 @@ _systemctl () { + [MASKED_UNITS]='unmask' + [JOBS]='cancel' + [SNAPSHOTS]='delete' ++ [PROPERTIES]='set-property' + [ENVS]='set-environment unset-environment' + [STANDALONE]='daemon-reexec daemon-reload default + emergency exit halt hibernate hybrid-sleep kexec list-jobs +@@ -258,6 +265,13 @@ _systemctl () { + elif __contains_word "$verb" ${VERBS[TARGETS]}; then + comps=$( __systemctl $mode list-unit-files --type target --full --all \ + | { while read -r a b; do echo " $a"; done; } ) ++ elif __contains_word "$verb" ${VERBS[PROPERTIES]}; then ++ if __contains_word "$prev" ${VERBS[PROPERTIES]}; then ++ comps=$( __get_active_units $mode ) ++ else ++ comps=$PROPS ++ compopt -o nospace ++ fi + fi + + COMPREPLY=( $(compgen -o filenames -W '$comps' -- "$cur") ) diff --git a/SOURCES/0193-pam-retrieve-value-of-debug-param-first.patch b/SOURCES/0193-pam-retrieve-value-of-debug-param-first.patch deleted file mode 100644 index 5d6a2f1..0000000 --- a/SOURCES/0193-pam-retrieve-value-of-debug-param-first.patch +++ /dev/null @@ -1,36 +0,0 @@ -From c9f24bd31d2b980718ecdc55ab33f5baa35ec4a2 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Mon, 10 Feb 2014 13:47:38 +0100 -Subject: [PATCH] pam: retrieve value of debug param first - -We are setting debug to false by default, so we should should first retrieve -value of debug parameter and then log only if debug was set. Now we don't take -the value passed to us into the count. ---- - src/login/pam-module.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/login/pam-module.c b/src/login/pam-module.c -index 973daf7..878a704 100644 ---- a/src/login/pam-module.c -+++ b/src/login/pam-module.c -@@ -199,9 +199,6 @@ _public_ PAM_EXTERN int pam_sm_open_session( - - dbus_error_init(&error); - -- if (debug) -- pam_syslog(handle, LOG_INFO, "pam-systemd initializing"); -- - /* Make this a NOP on non-logind systems */ - if (!logind_running()) - return PAM_SUCCESS; -@@ -214,6 +211,9 @@ _public_ PAM_EXTERN int pam_sm_open_session( - goto finish; - } - -+ if (debug) -+ pam_syslog(handle, LOG_INFO, "pam-systemd initializing"); -+ - r = get_user_data(handle, &username, &pw); - if (r != PAM_SUCCESS) - goto finish; diff --git a/SOURCES/0194-sd-bus-don-t-inherit-connection-creds-into-message-c.patch b/SOURCES/0194-sd-bus-don-t-inherit-connection-creds-into-message-c.patch new file mode 100644 index 0000000..a3e0212 --- /dev/null +++ b/SOURCES/0194-sd-bus-don-t-inherit-connection-creds-into-message-c.patch @@ -0,0 +1,33 @@ +From 61a6ce79defd59fee00cd2bc28d58f7c3e637ae2 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 23 Apr 2015 13:37:03 +0200 +Subject: [PATCH] sd-bus: don't inherit connection creds into message creds + when we have a direct connection + +It's never a good idea, let's just not do it, not even on dierct +connections. + +Conflicts: + src/libsystemd/sd-bus/bus-socket.c + +Cherry-picked from: 038f9863 +Related: #1230190 +--- + src/libsystemd/sd-bus/bus-socket.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/libsystemd/sd-bus/bus-socket.c b/src/libsystemd/sd-bus/bus-socket.c +index d00cd01..a3c3a45 100644 +--- a/src/libsystemd/sd-bus/bus-socket.c ++++ b/src/libsystemd/sd-bus/bus-socket.c +@@ -900,8 +900,8 @@ static int bus_socket_make_message(sd_bus *bus, size_t size) { + r = bus_message_from_malloc(bus, + bus->rbuffer, size, + bus->fds, bus->n_fds, +- !bus->bus_client && bus->ucred_valid ? &bus->ucred : NULL, +- !bus->bus_client && bus->label[0] ? bus->label : NULL, ++ NULL, ++ NULL, + &t); + if (r < 0) { + free(b); diff --git a/SOURCES/0194-utils-silence-the-compiler-warning.patch b/SOURCES/0194-utils-silence-the-compiler-warning.patch deleted file mode 100644 index 7c644e0..0000000 --- a/SOURCES/0194-utils-silence-the-compiler-warning.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 34c5f9d3b7020312310de1ea9b6446c51b911cb3 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Mon, 10 Feb 2014 15:41:47 +0100 -Subject: [PATCH] utils: silence the compiler warning - ---- - src/shared/util.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/shared/util.c b/src/shared/util.c -index e9b8255..2086847 100644 ---- a/src/shared/util.c -+++ b/src/shared/util.c -@@ -427,7 +427,7 @@ char *split_quoted(const char *c, size_t *l, char **state) { - *state = (char*) e; - } - -- return current; -+ return (char *) current; - } - - int get_parent_of_pid(pid_t pid, pid_t *_ppid) { diff --git a/SOURCES/0195-s390-getty-generator-initialize-essential-system-ter.patch b/SOURCES/0195-s390-getty-generator-initialize-essential-system-ter.patch deleted file mode 100644 index ce31e20..0000000 --- a/SOURCES/0195-s390-getty-generator-initialize-essential-system-ter.patch +++ /dev/null @@ -1,58 +0,0 @@ -From d87f3874bac62d012ff5e573c2b803b3244a02da Mon Sep 17 00:00:00 2001 -From: Hendrik Brueckner -Date: Fri, 31 Jan 2014 17:08:37 +0100 -Subject: [PATCH] s390/getty-generator: initialize essential system - terminals/consoles - -Ensure to start getty programs on all essential system consoles on Linux on -System z. Add these essential devices to the list of virtualization_consoles -to always generate getty configurations. - -For the sake of completion, the list of essential consoles is: - - /dev/sclp_line0 - Operating system messages applet (LPAR) - /dev/ttysclp0 - Integrated ASCII console applet (z/VM and LPAR) - /dev/ttyS0 - Already handled by systemd (3215 console on z/VM) - /dev/hvc0 - Already handled by systemd (IUCV HVC terminal on z/VM) - -Depending on the environment, z/VM or LPAR, only a subset of these terminals -are available. - -See also RH BZ 860158[1] "Cannot login via Operating System Console into RHEL7 -instance installed on a LPAR". This bugzilla actually blocks the installation -of Linux on System z instances in LPAR mode. - -[1] https://bugzilla.redhat.com/show_bug.cgi?id=860158 ---- - rules/99-systemd.rules.in | 2 +- - src/getty-generator/getty-generator.c | 4 +++- - 2 files changed, 4 insertions(+), 2 deletions(-) - -diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in -index 307f18f..0e0a567 100644 ---- a/rules/99-systemd.rules.in -+++ b/rules/99-systemd.rules.in -@@ -7,7 +7,7 @@ - - ACTION=="remove", GOTO="systemd_end" - --SUBSYSTEM=="tty", KERNEL=="tty[a-zA-Z]*|hvc*|xvc*|hvsi*", TAG+="systemd" -+SUBSYSTEM=="tty", KERNEL=="tty[a-zA-Z]*|hvc*|xvc*|hvsi*|ttysclp*|sclp_line*", TAG+="systemd" - - KERNEL=="vport*", TAG+="systemd" - -diff --git a/src/getty-generator/getty-generator.c b/src/getty-generator/getty-generator.c -index 6c93806..40374b5 100644 ---- a/src/getty-generator/getty-generator.c -+++ b/src/getty-generator/getty-generator.c -@@ -91,7 +91,9 @@ int main(int argc, char *argv[]) { - static const char virtualization_consoles[] = - "hvc0\0" - "xvc0\0" -- "hvsi0\0"; -+ "hvsi0\0" -+ "sclp_line0\0" -+ "ttysclp0\0"; - - int r = EXIT_SUCCESS; - char *active; diff --git a/SOURCES/0195-udev-fix-crash-in-path_id-builtin.patch b/SOURCES/0195-udev-fix-crash-in-path_id-builtin.patch new file mode 100644 index 0000000..0234c47 --- /dev/null +++ b/SOURCES/0195-udev-fix-crash-in-path_id-builtin.patch @@ -0,0 +1,27 @@ +From a571e5420b188913e4986f65c33294c2b39e3f7d Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Tue, 14 Jul 2015 17:24:09 +0200 +Subject: [PATCH] udev: fix crash in path_id builtin + +RHEL-only + +Resolves: #957112 +--- + src/udev/udev-builtin-path_id.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c +index 025392d..9ca6084 100644 +--- a/src/udev/udev-builtin-path_id.c ++++ b/src/udev/udev-builtin-path_id.c +@@ -737,6 +737,10 @@ out: + } + + free(path); ++ path = NULL; ++ supported_transport = false; ++ supported_parent = false; ++ + + if (new_sas_path) { + enable_new_sas_path = false; diff --git a/SOURCES/0196-pam-use-correct-log-level.patch b/SOURCES/0196-pam-use-correct-log-level.patch deleted file mode 100644 index fb6ba86..0000000 --- a/SOURCES/0196-pam-use-correct-log-level.patch +++ /dev/null @@ -1,22 +0,0 @@ -From e4478da5da5d3cfa56cf88e8d8ef598245e96535 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Mon, 10 Feb 2014 16:53:05 +0100 -Subject: [PATCH] pam: use correct log level - ---- - src/login/pam-module.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/login/pam-module.c b/src/login/pam-module.c -index 878a704..02f1618 100644 ---- a/src/login/pam-module.c -+++ b/src/login/pam-module.c -@@ -212,7 +212,7 @@ _public_ PAM_EXTERN int pam_sm_open_session( - } - - if (debug) -- pam_syslog(handle, LOG_INFO, "pam-systemd initializing"); -+ pam_syslog(handle, LOG_DEBUG, "pam-systemd initializing"); - - r = get_user_data(handle, &username, &pw); - if (r != PAM_SUCCESS) diff --git a/SOURCES/0196-sysv-generator-test-Fix-assertion.patch b/SOURCES/0196-sysv-generator-test-Fix-assertion.patch new file mode 100644 index 0000000..bc5c3c0 --- /dev/null +++ b/SOURCES/0196-sysv-generator-test-Fix-assertion.patch @@ -0,0 +1,35 @@ +From 20f5864e8f41957f6ed4b94a0199253a821b8c40 Mon Sep 17 00:00:00 2001 +From: Alberto Fanjul Alonso +Date: Tue, 28 Apr 2015 15:44:23 +0200 +Subject: [PATCH] sysv-generator test: Fix assertion + +(cherry picked from commit 230f04856647fcfb07d5658f4b8c1cb3557fa0d8) + +Cherry-picked from: 230f048 +Resolves: #1222517 +--- + test/sysv-generator-test.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/test/sysv-generator-test.py b/test/sysv-generator-test.py +index 09f5c01..509899e 100644 +--- a/test/sysv-generator-test.py ++++ b/test/sysv-generator-test.py +@@ -323,7 +323,7 @@ class SysvGeneratorTest(unittest.TestCase): + self.add_sysv('foo.sh', {'Provides': 'foo bar'}) + err, results = self.run_generator() + # ensure we don't try to create a symlink to itself +- self.assertNotIn(err, 'itself') ++ self.assertNotIn('itself', err) + self.assertEqual(list(results), ['foo.service']) + self.assertEqual(results['foo.service'].get('Unit', 'Description'), + 'LSB: test foo service') +@@ -361,7 +361,7 @@ class SysvGeneratorTest(unittest.TestCase): + ['foo.bak.service', 'foo.old.service', 'foo.service']) + + # ensure we don't try to create a symlink to itself +- self.assertNotIn(err, 'itself') ++ self.assertNotIn('itself', err) + + self.assert_enabled('foo.service', [2, 3, 4, 5]) + self.assert_enabled('foo.bak.service', []) diff --git a/SOURCES/0197-man-avoid-line-break-in-url.patch b/SOURCES/0197-man-avoid-line-break-in-url.patch new file mode 100644 index 0000000..1867541 --- /dev/null +++ b/SOURCES/0197-man-avoid-line-break-in-url.patch @@ -0,0 +1,27 @@ +From ab0d796698509ca5da4ac4c926ab123925b25b4e Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 29 Apr 2015 12:04:16 +0200 +Subject: [PATCH] man: avoid line break in url + +(cherry picked from commit b53c3c2d24ed1398ee427139cd880b07bc35fa24) + +Cherry-picked from: b53c3c2 +Resolves: #1222517 +--- + man/os-release.xml | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/man/os-release.xml b/man/os-release.xml +index 8f4ab10..4f57323 100644 +--- a/man/os-release.xml ++++ b/man/os-release.xml +@@ -104,8 +104,7 @@ + + For a longer rationale for os-release + please refer to the Announcement of +- /etc/os-release. ++ url="http://0pointer.de/blog/projects/os-release">Announcement of /etc/os-release. + + + diff --git a/SOURCES/0197-pam-do-not-set-XDG_RUNTIME_DIR-unconditionally.patch b/SOURCES/0197-pam-do-not-set-XDG_RUNTIME_DIR-unconditionally.patch deleted file mode 100644 index 0e128e9..0000000 --- a/SOURCES/0197-pam-do-not-set-XDG_RUNTIME_DIR-unconditionally.patch +++ /dev/null @@ -1,159 +0,0 @@ -From 281100560056e06f69d2cdb4dcc854bd3717734f Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Mon, 10 Feb 2014 17:41:32 +0100 -Subject: [PATCH] pam: do not set XDG_RUNTIME_DIR unconditionally - -If the session's original user is not the same as the newly logged in one we -will not set XDG_RUNTIME_DIR. - -Patch based on upstream commit baae0358f349870544884e405e82e4be7d8add9f ---- - src/login/logind-dbus.c | 2 ++ - src/login/logind-session-dbus.c | 1 + - src/login/pam-module.c | 52 ++++++++++++++++++++--------------------- - 3 files changed, 29 insertions(+), 26 deletions(-) - -diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c -index bb85c7d..69e94aa 100644 ---- a/src/login/logind-dbus.c -+++ b/src/login/logind-dbus.c -@@ -90,6 +90,7 @@ - " \n" \ - " \n" \ - " \n" \ -+ " \n" \ - " \n" \ - " \n" \ - " \n" \ -@@ -523,6 +524,7 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message) { - DBUS_TYPE_OBJECT_PATH, &path, - DBUS_TYPE_STRING, &session->user->runtime_path, - DBUS_TYPE_UNIX_FD, &fifo_fd, -+ DBUS_TYPE_UINT32, &session->user->uid, - DBUS_TYPE_STRING, &cseat, - DBUS_TYPE_UINT32, &vtnr, - DBUS_TYPE_BOOLEAN, &exists, -diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c -index be4e01c..86b0746 100644 ---- a/src/login/logind-session-dbus.c -+++ b/src/login/logind-session-dbus.c -@@ -755,6 +755,7 @@ int session_send_create_reply(Session *s, DBusError *error) { - DBUS_TYPE_OBJECT_PATH, &path, - DBUS_TYPE_STRING, &s->user->runtime_path, - DBUS_TYPE_UNIX_FD, &fifo_fd, -+ DBUS_TYPE_UINT32, &s->user->uid, - DBUS_TYPE_STRING, &cseat, - DBUS_TYPE_UINT32, &vtnr, - DBUS_TYPE_BOOLEAN, &exists, -diff --git a/src/login/pam-module.c b/src/login/pam-module.c -index 02f1618..22d9733 100644 ---- a/src/login/pam-module.c -+++ b/src/login/pam-module.c -@@ -86,31 +86,24 @@ static int get_user_data( - - const char *username = NULL; - struct passwd *pw = NULL; -- uid_t uid; - int r; - - assert(handle); - assert(ret_username); - assert(ret_pw); - -- r = audit_loginuid_from_pid(0, &uid); -- if (r >= 0) -- pw = pam_modutil_getpwuid(handle, uid); -- else { -- r = pam_get_user(handle, &username, NULL); -- if (r != PAM_SUCCESS) { -- pam_syslog(handle, LOG_ERR, "Failed to get user name."); -- return r; -- } -- -- if (isempty(username)) { -- pam_syslog(handle, LOG_ERR, "User name not valid."); -- return PAM_AUTH_ERR; -- } -+ r = pam_get_user(handle, &username, NULL); -+ if (r != PAM_SUCCESS) { -+ pam_syslog(handle, LOG_ERR, "Failed to get user name."); -+ return r; -+ } - -- pw = pam_modutil_getpwnam(handle, username); -+ if (isempty(username)) { -+ pam_syslog(handle, LOG_ERR, "User name not valid."); -+ return PAM_AUTH_ERR; - } - -+ pw = pam_modutil_getpwnam(handle, username); - if (!pw) { - pam_syslog(handle, LOG_ERR, "Failed to get user data."); - return PAM_USER_UNKNOWN; -@@ -123,16 +116,14 @@ static int get_user_data( - } - - static int get_seat_from_display(const char *display, const char **seat, uint32_t *vtnr) { -- _cleanup_free_ char *p = NULL; -- int r; -+ _cleanup_free_ char *p = NULL, *tty=NULL; - _cleanup_close_ int fd = -1; - union sockaddr_union sa = { - .un.sun_family = AF_UNIX, - }; - struct ucred ucred; - socklen_t l; -- _cleanup_free_ char *tty = NULL; -- int v; -+ int v, r; - - assert(display); - assert(vtnr); -@@ -186,14 +177,14 @@ _public_ PAM_EXTERN int pam_sm_open_session( - bool debug = false; - const char *username, *id, *object_path, *runtime_path, *service = NULL, *tty = NULL, *display = NULL, *remote_user = NULL, *remote_host = NULL, *seat = NULL, *type = NULL, *class = NULL, *class_pam = NULL, *cvtnr = NULL; - DBusError error; -- uint32_t uid, pid; - DBusMessageIter iter; - int session_fd = -1; - DBusConnection *bus = NULL; - DBusMessage *m = NULL, *reply = NULL; - dbus_bool_t remote, existing; - int r; -- uint32_t vtnr = 0; -+ uint32_t uid, pid, vtnr = 0; -+ uid_t original_uid; - - assert(handle); - -@@ -389,6 +380,7 @@ _public_ PAM_EXTERN int pam_sm_open_session( - DBUS_TYPE_OBJECT_PATH, &object_path, - DBUS_TYPE_STRING, &runtime_path, - DBUS_TYPE_UNIX_FD, &session_fd, -+ DBUS_TYPE_UINT32, &original_uid, - DBUS_TYPE_STRING, &seat, - DBUS_TYPE_UINT32, &vtnr, - DBUS_TYPE_BOOLEAN, &existing, -@@ -409,10 +401,18 @@ _public_ PAM_EXTERN int pam_sm_open_session( - goto finish; - } - -- r = pam_misc_setenv(handle, "XDG_RUNTIME_DIR", runtime_path, 0); -- if (r != PAM_SUCCESS) { -- pam_syslog(handle, LOG_ERR, "Failed to set runtime dir."); -- goto finish; -+ if (original_uid == pw->pw_uid) { -+ /* Don't set $XDG_RUNTIME_DIR if the user we now -+ * authenticated for does not match the original user -+ * of the session. We do this in order not to result -+ * in privileged apps clobbering the runtime directory -+ * unnecessarily. */ -+ -+ r = pam_misc_setenv(handle, "XDG_RUNTIME_DIR", runtime_path, 0); -+ if (r != PAM_SUCCESS) { -+ pam_syslog(handle, LOG_ERR, "Failed to set runtime dir."); -+ return r; -+ } - } - - if (!isempty(seat)) { diff --git a/SOURCES/0198-Add-VARIANT-as-a-standard-value-for-etc-os-release.patch b/SOURCES/0198-Add-VARIANT-as-a-standard-value-for-etc-os-release.patch new file mode 100644 index 0000000..25b66fb --- /dev/null +++ b/SOURCES/0198-Add-VARIANT-as-a-standard-value-for-etc-os-release.patch @@ -0,0 +1,75 @@ +From e31c6804ca177ab911f6212b34930969b83f2d30 Mon Sep 17 00:00:00 2001 +From: Stephen Gallagher +Date: Wed, 29 Apr 2015 08:19:05 -0400 +Subject: [PATCH] Add VARIANT as a standard value for /etc/os-release + +Some distributions (such as Fedora) are using the VARIANT field to +indicate to select packages which of several default configurations +they should be using. For example, VARIANT=Server provides a +different default firewall configuration (blocking basically +everything but SSH and the management console) whereas +VARIANT=Workstation opens many other ports for application +compatibility. + +By adding this patch to the manual pages, we can standardize on a +cross-distribution mechanism for accomplishing this. + +Fedora implementation details are available at +https://fedoraproject.org/wiki/Packaging:Per-Product_Configuration + +(David: drop double paranthesis) + +(cherry picked from commit be7d0048ddda1e994f651e2825f96266d537d10d) + +Cherry-picked from: be7d004 +Resolves: #1222517 +--- + man/os-release.xml | 35 +++++++++++++++++++++++++++++++++++ + 1 file changed, 35 insertions(+) + +diff --git a/man/os-release.xml b/man/os-release.xml +index 4f57323..4ca2e59 100644 +--- a/man/os-release.xml ++++ b/man/os-release.xml +@@ -273,6 +273,41 @@ + + + ++ ++ VARIANT= ++ ++ ++ A string identifying a specific variant or edition of the ++ operating system suitable for presentation to the user. This ++ field may be used to inform the user that the configuration of ++ this system is subject to a specific divergent set of rules or ++ default configuration settings. This field is optional and may ++ not be implemented on all systems. ++ Examples: ++ VARIANT="Server Edition", ++ VARIANT="Smart Refrigerator Edition" ++ Note: this field is for display purposes only. The ++ VARIANT_ID field should be used for making ++ programmatic decisions. ++ ++ ++ ++ ++ VARIANT_ID= ++ ++ ++ A lower-case string (no spaces or other characters outside of ++ 0-9, a-z, ".", "_" and "-"), identifying a specific variant or ++ edition of the operating system. This may be interpreted by ++ other packages in order to determine a divergent default ++ configuration. This field is optional and may not be ++ implemented on all systems. ++ Examples: ++ VARIANT_ID=server, ++ VARIANT_ID=embedded ++ ++ ++ + + + If you are reading this file from C code or a shell script diff --git a/SOURCES/0198-selinux-Don-t-attempt-to-load-policy-in-initramfs-if.patch b/SOURCES/0198-selinux-Don-t-attempt-to-load-policy-in-initramfs-if.patch deleted file mode 100644 index 9efd464..0000000 --- a/SOURCES/0198-selinux-Don-t-attempt-to-load-policy-in-initramfs-if.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 4083e4d76b61bc9eb40583f941412c1ea1a0285b Mon Sep 17 00:00:00 2001 -From: Colin Walters -Date: Fri, 21 Feb 2014 03:29:00 +0100 -Subject: [PATCH] selinux: Don't attempt to load policy in initramfs if it - doesn't exist - -Currently on at least Fedora, SELinux policy does not come in the -initramfs. systemd will attempt to load *both* in the initramfs and -in the real root. - -Now, the selinux_init_load_policy() API has a regular error return -value, as well as an "enforcing" boolean. To determine enforcing -state, it looks for /etc/selinux/config as well as the presence of -"enforcing=" on the kernel command line. - -Ordinarily, neither of those exist in the initramfs, so it will return -"unknown" for enforcing, and systemd will simply ignore the failure to -load policy. ---- - src/core/selinux-setup.c | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/src/core/selinux-setup.c b/src/core/selinux-setup.c -index 7a32ed5..9a5d6b2 100644 ---- a/src/core/selinux-setup.c -+++ b/src/core/selinux-setup.c -@@ -58,6 +58,13 @@ int selinux_setup(bool *loaded_policy) { - cb.func_log = null_log; - selinux_set_callback(SELINUX_CB_LOG, cb); - -+ /* Don't load policy in the initrd if we don't appear to have -+ * it. For the real root, we check below if we've already -+ * loaded policy, and return gracefully. -+ */ -+ if (in_initrd() && access(selinux_path(), F_OK) < 0) -+ return 0; -+ - /* Already initialized by somebody else? */ - r = getcon_raw(&con); - if (r == 0) { diff --git a/SOURCES/0199-Fix-permissions-on-run-systemd-nspawn-locks.patch b/SOURCES/0199-Fix-permissions-on-run-systemd-nspawn-locks.patch new file mode 100644 index 0000000..94e9f33 --- /dev/null +++ b/SOURCES/0199-Fix-permissions-on-run-systemd-nspawn-locks.patch @@ -0,0 +1,44 @@ +From b0a6aa4de054e69213d0902094a1ae85fe2c5e58 Mon Sep 17 00:00:00 2001 +From: Seth Jennings +Date: Tue, 5 May 2015 13:31:01 -0500 +Subject: [PATCH] Fix permissions on /run/systemd/nspawn/locks + +machined is getting an EACCES when trying to create the lock file for +images because the mode on /run/systemd/nspawn/locks is 0600. + +mkdir("/run/systemd/nspawn/locks", 0600) = -1 EEXIST (File exists) +stat("/run/systemd/nspawn/locks", {st_mode=S_IFDIR|0600, st_size=40, ...}) = 0 +open("/run/systemd/nspawn/locks/inode-41:256", O_RDWR|O_CREAT|O_NOCTTY|O_NOFOLLOW|O_CLOEXEC, 0600) = -1 EACCES (Permission denied) + +This commit adjusts the mode to 0700 to correct the issue. + +(cherry picked from commit 7e7cddb22493642dad826ec42ac00979f40b2d17) + +Cherry-picked from: 7e7cddb +Resolves: #1222517 +--- + src/shared/machine-image.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/shared/machine-image.c b/src/shared/machine-image.c +index 8d61507..c02ee81 100644 +--- a/src/shared/machine-image.c ++++ b/src/shared/machine-image.c +@@ -601,7 +601,7 @@ int image_path_lock(const char *path, int operation, LockFile *global, LockFile + return r; + + if (p) { +- mkdir_p("/run/systemd/nspawn/locks", 0600); ++ mkdir_p("/run/systemd/nspawn/locks", 0700); + + r = make_lock_file(p, operation, global); + if (r < 0) { +@@ -628,7 +628,7 @@ int image_name_lock(const char *name, int operation, LockFile *ret) { + if (streq(name, ".host")) + return -EBUSY; + +- mkdir_p("/run/systemd/nspawn/locks", 0600); ++ mkdir_p("/run/systemd/nspawn/locks", 0700); + p = strjoina("/run/systemd/nspawn/locks/name-", name); + + return make_lock_file(p, operation, ret); diff --git a/SOURCES/0199-kernel-install-add-fedora-specific-callouts-to-new-k.patch b/SOURCES/0199-kernel-install-add-fedora-specific-callouts-to-new-k.patch deleted file mode 100644 index 092bc0e..0000000 --- a/SOURCES/0199-kernel-install-add-fedora-specific-callouts-to-new-k.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 4d66c1673654c639a350f784c59b4c613c94edf7 Mon Sep 17 00:00:00 2001 -From: Harald Hoyer -Date: Wed, 13 Mar 2013 07:57:53 +0100 -Subject: [PATCH] kernel-install: add fedora specific callouts to - new-kernel-pkg - ---- - src/kernel-install/kernel-install | 21 +++++++++++++++++++++ - 1 file changed, 21 insertions(+) - -diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install -index 3ae1d77..3a2ac56 100644 ---- a/src/kernel-install/kernel-install -+++ b/src/kernel-install/kernel-install -@@ -19,6 +19,27 @@ - # You should have received a copy of the GNU Lesser General Public License - # along with systemd; If not, see . - -+if [[ -x /sbin/new-kernel-pkg ]]; then -+ [[ "$2" == *\+* ]] && flavor=-"${2##*+}" -+ case "$1" in -+ add) -+ /sbin/new-kernel-pkg --package "kernel${flavor}" --install "$2" || exit $? -+ /sbin/new-kernel-pkg --package "kernel${flavor}" --mkinitrd --dracut --depmod --update "$2" || exit $? -+ /sbin/new-kernel-pkg --package "kernel${flavor}" --rpmposttrans "$2" || exit $? -+ ;; -+ remove) -+ /sbin/new-kernel-pkg --package "kernel${flavor+-$flavor}" --rminitrd --rmmoddep --remove "$2" || exit $? -+ ;; -+ *) -+ ;; -+ esac -+ -+ # exit, if we can't find a boot loader spec conforming setup -+ if ! [[ -d /boot/loader/entries || -L /boot/loader/entries ]]; then -+ exit 0 -+ fi -+fi -+ - usage() - { - echo "Usage:" diff --git a/SOURCES/0200-generators-rename-add_-root-usr-_mount-to-add_-sysro.patch b/SOURCES/0200-generators-rename-add_-root-usr-_mount-to-add_-sysro.patch new file mode 100644 index 0000000..7ff6b9a --- /dev/null +++ b/SOURCES/0200-generators-rename-add_-root-usr-_mount-to-add_-sysro.patch @@ -0,0 +1,163 @@ +From 3282d24f8f9f7561312779710f250396f2ecc29b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 2 May 2015 12:01:29 -0500 +Subject: [PATCH] generators: rename add_{root,usr}_mount to + add_{sysroot,sysroot_usr}_mount + +This makes it obvious that those functions are only usable in the +initramfs. + +Also, add a warning when noauto, nofail, or automount is used for the +root fs, instead of silently ignoring. Using those options would be a +sign of significant misconfiguration, and if we bother to check for +them, than let's go all the way and complain. + +Other various small cleanups and reformattings elsewhere. + +(cherry picked from commit 2e8522767e27d5686206794c69e0aa95da6e798b) + +Cherry-picked from: 2e85227 +Resolves: #1222517 +--- + src/fstab-generator/fstab-generator.c | 20 ++++++++++++-------- + src/shared/generator.c | 21 ++++++++++++--------- + src/shared/generator.h | 17 +++++++++++++---- + 3 files changed, 37 insertions(+), 21 deletions(-) + +diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c +index 65ed205..029eb16 100644 +--- a/src/fstab-generator/fstab-generator.c ++++ b/src/fstab-generator/fstab-generator.c +@@ -250,10 +250,14 @@ static int add_mount( + return 0; + + if (path_equal(where, "/")) { +- /* The root disk is not an option */ +- automount = false; +- noauto = false; +- nofail = false; ++ if (noauto) ++ log_warning("Ignoring \"noauto\" for root device"); ++ if (nofail) ++ log_warning("Ignoring \"nofail\" for root device"); ++ if (automount) ++ log_warning("Ignoring automount option for root device"); ++ ++ noauto = nofail = automount = false; + } + + name = unit_name_from_path(where, ".mount"); +@@ -470,7 +474,7 @@ static int parse_fstab(bool initrd) { + return r; + } + +-static int add_root_mount(void) { ++static int add_sysroot_mount(void) { + _cleanup_free_ char *what = NULL; + const char *opts; + +@@ -506,7 +510,7 @@ static int add_root_mount(void) { + "/proc/cmdline"); + } + +-static int add_usr_mount(void) { ++static int add_sysroot_usr_mount(void) { + _cleanup_free_ char *what = NULL; + const char *opts; + +@@ -653,9 +657,9 @@ int main(int argc, char *argv[]) { + + /* Always honour root= and usr= in the kernel command line if we are in an initrd */ + if (in_initrd()) { +- r = add_root_mount(); ++ r = add_sysroot_mount(); + if (r == 0) +- r = add_usr_mount(); ++ r = add_sysroot_usr_mount(); + } + + /* Honour /etc/fstab only when that's enabled */ +diff --git a/src/shared/generator.c b/src/shared/generator.c +index 7f16d5c..cd37812 100644 +--- a/src/shared/generator.c ++++ b/src/shared/generator.c +@@ -33,13 +33,13 @@ + + int generator_write_fsck_deps( + FILE *f, +- const char *dest, ++ const char *dir, + const char *what, + const char *where, + const char *fstype) { + + assert(f); +- assert(dest); ++ assert(dir); + assert(what); + assert(where); + +@@ -59,10 +59,10 @@ int generator_write_fsck_deps( + return log_warning_errno(r, "Checking was requested for %s, but fsck.%s cannot be used: %m", what, fstype); + } + +- if (streq(where, "/")) { ++ if (path_equal(where, "/")) { + char *lnk; + +- lnk = strjoina(dest, "/" SPECIAL_LOCAL_FS_TARGET ".wants/systemd-fsck-root.service"); ++ lnk = strjoina(dir, "/" SPECIAL_LOCAL_FS_TARGET ".wants/systemd-fsck-root.service"); + + mkdir_parents(lnk, 0755); + if (symlink(SYSTEM_DATA_UNIT_PATH "/systemd-fsck-root.service", lnk) < 0) +@@ -76,17 +76,20 @@ int generator_write_fsck_deps( + return log_oom(); + + fprintf(f, +- "RequiresOverridable=%s\n" +- "After=%s\n", +- fsck, ++ "RequiresOverridable=%1$s\n" ++ "After=%1$s\n", + fsck); + } + + return 0; + } + +-int generator_write_timeouts(const char *dir, const char *what, const char *where, +- const char *opts, char **filtered) { ++int generator_write_timeouts( ++ const char *dir, ++ const char *what, ++ const char *where, ++ const char *opts, ++ char **filtered) { + + /* Allow configuration how long we wait for a device that + * backs a mount point to show up. This is useful to support +diff --git a/src/shared/generator.h b/src/shared/generator.h +index 64bd28f..6c3f38a 100644 +--- a/src/shared/generator.h ++++ b/src/shared/generator.h +@@ -23,7 +23,16 @@ + + #include + +-int generator_write_fsck_deps(FILE *f, const char *dest, const char *what, const char *where, const char *type); +- +-int generator_write_timeouts(const char *dir, const char *what, const char *where, +- const char *opts, char **filtered); ++int generator_write_fsck_deps( ++ FILE *f, ++ const char *dir, ++ const char *what, ++ const char *where, ++ const char *type); ++ ++int generator_write_timeouts( ++ const char *dir, ++ const char *what, ++ const char *where, ++ const char *opts, ++ char **filtered); diff --git a/SOURCES/0200-remove-user-.service.patch b/SOURCES/0200-remove-user-.service.patch deleted file mode 100644 index d6784ca..0000000 --- a/SOURCES/0200-remove-user-.service.patch +++ /dev/null @@ -1,91 +0,0 @@ -From a76f607703911f314fea41148ef7c23fac20029d Mon Sep 17 00:00:00 2001 -From: Harald Hoyer -Date: Wed, 30 Oct 2013 18:22:49 +0100 -Subject: [PATCH] remove user@.service - -fixes rhbz#1019738 ---- - Makefile.am | 2 -- - src/login/logind-user.c | 42 ------------------------------------------ - 2 files changed, 44 deletions(-) - -diff --git a/Makefile.am b/Makefile.am -index f4867d9..df63275 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -437,7 +437,6 @@ nodist_systemunit_DATA = \ - units/systemd-sysctl.service \ - units/emergency.service \ - units/rescue.service \ -- units/user@.service \ - units/systemd-hibernate.service \ - units/systemd-hybrid-sleep.service \ - units/systemd-suspend.service \ -@@ -486,7 +485,6 @@ EXTRA_DIST += \ - units/user/systemd-exit.service.in \ - units/systemd-fsck@.service.in \ - units/systemd-fsck-root.service.in \ -- units/user@.service.in \ - units/systemd-udevd.service \ - units/systemd-udev-trigger.service \ - units/systemd-udev-settle.service \ -diff --git a/src/login/logind-user.c b/src/login/logind-user.c -index b87311c..8e7256b 100644 ---- a/src/login/logind-user.c -+++ b/src/login/logind-user.c -@@ -365,43 +365,6 @@ static int user_start_slice(User *u) { - return 0; - } - --static int user_start_service(User *u) { -- DBusError error; -- char *job; -- int r; -- -- assert(u); -- -- dbus_error_init(&error); -- -- if (!u->service) { -- char lu[DECIMAL_STR_MAX(unsigned long) + 1], *service; -- sprintf(lu, "%lu", (unsigned long) u->uid); -- -- service = unit_name_build("user", lu, ".service"); -- if (!service) -- return log_oom(); -- -- r = manager_start_unit(u->manager, service, &error, &job); -- if (r < 0) { -- log_error("Failed to start user service: %s", bus_error(&error, r)); -- dbus_error_free(&error); -- -- free(service); -- } else { -- u->service = service; -- -- free(u->service_job); -- u->service_job = job; -- } -- } -- -- if (u->service) -- hashmap_put(u->manager->user_units, u->service, u); -- -- return 0; --} -- - int user_start(User *u) { - int r; - -@@ -422,11 +385,6 @@ int user_start(User *u) { - if (r < 0) - return r; - -- /* Spawn user systemd */ -- r = user_start_service(u); -- if (r < 0) -- return r; -- - if (!dual_timestamp_is_set(&u->timestamp)) - dual_timestamp_get(&u->timestamp); - diff --git a/SOURCES/0201-Fix-bad-assert-in-show_pid_array.patch b/SOURCES/0201-Fix-bad-assert-in-show_pid_array.patch deleted file mode 100644 index 5a7ef1d..0000000 --- a/SOURCES/0201-Fix-bad-assert-in-show_pid_array.patch +++ /dev/null @@ -1,26 +0,0 @@ -From a01fee0ef04e93dbe1eecb1aa276e515114e9c1b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Mon, 14 Oct 2013 19:15:24 -0400 -Subject: [PATCH] Fix bad assert in show_pid_array - -This function should get the same treatment as other qsort uses -did in 7ff7394 "Never call qsort on potentially NULL arrays". - -Reported-by: Oleksii Shevchuk ---- - src/shared/cgroup-show.c | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c -index f6e56db..aa0f017 100644 ---- a/src/shared/cgroup-show.c -+++ b/src/shared/cgroup-show.c -@@ -44,8 +44,6 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi - unsigned i, m, pid_width; - pid_t biggest = 0; - -- assert(n_pids > 0); -- - /* Filter duplicates */ - m = 0; - for (i = 0; i < n_pids; i++) { diff --git a/SOURCES/0201-Generate-systemd-fsck-root.service-in-the-initramfs.patch b/SOURCES/0201-Generate-systemd-fsck-root.service-in-the-initramfs.patch new file mode 100644 index 0000000..341fbb3 --- /dev/null +++ b/SOURCES/0201-Generate-systemd-fsck-root.service-in-the-initramfs.patch @@ -0,0 +1,109 @@ +From 306dfc00aefbd35197ca30469f4b40bb120caf91 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 6 May 2015 01:09:53 -0400 +Subject: [PATCH] Generate systemd-fsck-root.service in the initramfs + +In the initrafms, generate a systemd-fsck-root.service to replace +systemd-fsck@.service. This way, after we transition +to the real root, systemd-fsck-root.service is marked as already done. + +This introduces an unnecessary synchronization point, because +systemd-fsck@* is ordered after systemd-fsck-root also in the +initramfs. In practice this shouldn't be a problem. + +https://bugzilla.redhat.com/show_bug.cgi?id=1201979 + +C.f. 956eaf2b8d6c9999024705ddadc7393bc707de02. + +(cherry picked from commit 4dda4e637e4c17a14db6cd265f36f5e8a5050367) + +Cherry-picked from: 4dda4e6 +Resolves: #1222517 +--- + src/shared/generator.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++---- + 1 file changed, 59 insertions(+), 4 deletions(-) + +diff --git a/src/shared/generator.c b/src/shared/generator.c +index cd37812..148a0b0 100644 +--- a/src/shared/generator.c ++++ b/src/shared/generator.c +@@ -29,8 +29,51 @@ + #include "generator.h" + #include "path-util.h" + #include "fstab-util.h" ++#include "fileio.h" + #include "dropin.h" + ++static int write_fsck_sysroot_service(const char *dir, const char *what) { ++ const char *unit; ++ _cleanup_free_ char *device = NULL; ++ _cleanup_fclose_ FILE *f = NULL; ++ ++ unit = strjoina(dir, "/systemd-fsck-root.service"); ++ log_debug("Creating %s", unit); ++ ++ device = unit_name_from_path(what, ".device"); ++ if (!device) ++ return log_oom(); ++ ++ f = fopen(unit, "wxe"); ++ if (!f) ++ return log_error_errno(errno, "Failed to create unit file %s: %m", unit); ++ ++ fprintf(f, ++ "# Automatically generated by %1$s\n\n" ++ "[Unit]\n" ++ "Documentation=man:systemd-fsck-root.service(8)\n" ++ "Description=File System Check on %2$s\n" ++ "DefaultDependencies=no\n" ++ "BindsTo=%3$s\n" ++ "After=%3$s\n" ++ "Before=shutdown.target\n" ++ "\n" ++ "[Service]\n" ++ "Type=oneshot\n" ++ "RemainAfterExit=yes\n" ++ "ExecStart=/usr/lib/systemd/systemd-fsck %2$s\n" ++ "TimeoutSec=0\n", ++ program_invocation_short_name, ++ what, ++ device); ++ ++ fflush(f); ++ if (ferror(f)) ++ return log_error_errno(errno, "Failed to write unit file %s: %m", unit); ++ ++ return 0; ++} ++ + int generator_write_fsck_deps( + FILE *f, + const char *dir, +@@ -69,11 +112,23 @@ int generator_write_fsck_deps( + return log_error_errno(errno, "Failed to create symlink %s: %m", lnk); + + } else { +- _cleanup_free_ char *fsck = NULL; ++ _cleanup_free_ char *_fsck = NULL; ++ const char *fsck; ++ int r; ++ ++ if (in_initrd() && path_equal(where, "/sysroot")) { ++ r = write_fsck_sysroot_service(dir, what); ++ if (r < 0) ++ return r; ++ ++ fsck = "systemd-fsck-root.service"; ++ } else { ++ _fsck = unit_name_from_path_instance("systemd-fsck", what, ".service"); ++ if (!_fsck) ++ return log_oom(); + +- fsck = unit_name_from_path_instance("systemd-fsck", what, ".service"); +- if (!fsck) +- return log_oom(); ++ fsck = _fsck; ++ } + + fprintf(f, + "RequiresOverridable=%1$s\n" diff --git a/SOURCES/0202-mount-don-t-send-out-PropertiesChanged-message-if-ac.patch b/SOURCES/0202-mount-don-t-send-out-PropertiesChanged-message-if-ac.patch deleted file mode 100644 index d3e7674..0000000 --- a/SOURCES/0202-mount-don-t-send-out-PropertiesChanged-message-if-ac.patch +++ /dev/null @@ -1,69 +0,0 @@ -From 3b321e8bb1548432624b374f7077f4aaaae40a2d Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 26 Feb 2014 04:27:50 +0100 -Subject: [PATCH] mount: don't send out PropertiesChanged message if actually - nothing got changed - -Conflicts: - src/core/mount.c ---- - src/core/mount.c | 15 ++++++++++++--- - 1 file changed, 12 insertions(+), 3 deletions(-) - -diff --git a/src/core/mount.c b/src/core/mount.c -index c0445a6..62ec7fe 100644 ---- a/src/core/mount.c -+++ b/src/core/mount.c -@@ -1414,7 +1414,7 @@ static int mount_add_one( - bool set_flags) { - int r; - Unit *u; -- bool delete; -+ bool delete, changed = false;; - char *e, *w = NULL, *o = NULL, *f = NULL; - MountParameters *p; - bool load_extras = false; -@@ -1483,6 +1483,7 @@ static int mount_add_one( - } - - unit_add_to_load_queue(u); -+ changed = true; - } else { - delete = false; - free(e); -@@ -1502,6 +1503,7 @@ static int mount_add_one( - /* Load in the extras later on, after we - * finished initialization of the unit */ - load_extras = true; -+ changed = true; - } - } - -@@ -1513,10 +1515,16 @@ static int mount_add_one( - } - - p = &MOUNT(u)->parameters_proc_self_mountinfo; -+ -+ changed = changed || -+ !streq_ptr(p->options, options) || -+ !streq_ptr(p->what, what) || -+ !streq_ptr(p->fstype, fstype); -+ - if (set_flags) { - MOUNT(u)->is_mounted = true; - MOUNT(u)->just_mounted = !MOUNT(u)->from_proc_self_mountinfo; -- MOUNT(u)->just_changed = !streq_ptr(p->options, o); -+ MOUNT(u)->just_changed = changed; - } - - MOUNT(u)->from_proc_self_mountinfo = true; -@@ -1538,7 +1546,8 @@ static int mount_add_one( - goto fail; - } - -- unit_add_to_dbus_queue(u); -+ if (changed) -+ unit_add_to_dbus_queue(u); - - return 0; - diff --git a/SOURCES/0202-units-fix-typo-in-systemd-resolved.service.patch b/SOURCES/0202-units-fix-typo-in-systemd-resolved.service.patch new file mode 100644 index 0000000..782d2d8 --- /dev/null +++ b/SOURCES/0202-units-fix-typo-in-systemd-resolved.service.patch @@ -0,0 +1,33 @@ +From 9e7315f4149a97fa8d5b826770610cd59316db2d Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 14 May 2015 22:32:35 +0200 +Subject: [PATCH] units: fix typo in systemd-resolved.service +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +There's no network.service unit, we actually mean network.target here. + +Reported by Fco. Eduardo Ramírez. + +(cherry picked from commit 1dff3202941786dd00060f078f6b031efe52d3c3) + +Cherry-picked from: 1dff320 +Resolves: #1222517 +--- + units/systemd-resolved.service.m4.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/units/systemd-resolved.service.m4.in b/units/systemd-resolved.service.m4.in +index d133847..98ae564 100644 +--- a/units/systemd-resolved.service.m4.in ++++ b/units/systemd-resolved.service.m4.in +@@ -8,7 +8,7 @@ + [Unit] + Description=Network Name Resolution + Documentation=man:systemd-resolved.service(8) +-After=systemd-networkd.service network.service ++After=systemd-networkd.service network.target + + m4_ifdef(`ENABLE_KDBUS', + # On kdbus systems we pull in the busname explicitly, because it diff --git a/SOURCES/0203-core-don-t-consider-umask-for-SocketMode.patch b/SOURCES/0203-core-don-t-consider-umask-for-SocketMode.patch new file mode 100644 index 0000000..e97df69 --- /dev/null +++ b/SOURCES/0203-core-don-t-consider-umask-for-SocketMode.patch @@ -0,0 +1,28 @@ +From a8ad87112c0992579fcf4fc91234490ec82ce939 Mon Sep 17 00:00:00 2001 +From: Davide Bettio +Date: Fri, 15 May 2015 16:36:28 +0200 +Subject: [PATCH] core: don't consider umask for SocketMode= + +https://bugs.freedesktop.org/show_bug.cgi?id=89248 +(cherry picked from commit a2c7f25aec23b6d74ff5cf169e38159754e6dfe8) + +Cherry-picked from: a2c7f25 +Resolves: #1222517 +--- + src/shared/socket-label.c | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/src/shared/socket-label.c b/src/shared/socket-label.c +index 6806c51..a6289eb 100644 +--- a/src/shared/socket-label.c ++++ b/src/shared/socket-label.c +@@ -117,9 +117,6 @@ int socket_address_listen( + /* Enforce the right access mode for the socket */ + old_mask = umask(~ socket_mode); + +- /* Include the original umask in our mask */ +- umask(~socket_mode | old_mask); +- + r = mac_selinux_bind(fd, &a->sockaddr.sa, a->size); + + if (r < 0 && errno == EADDRINUSE) { diff --git a/SOURCES/0203-udev-rules-setup-tty-permissions-and-group-for-sclp_.patch b/SOURCES/0203-udev-rules-setup-tty-permissions-and-group-for-sclp_.patch deleted file mode 100644 index b9d9a8c..0000000 --- a/SOURCES/0203-udev-rules-setup-tty-permissions-and-group-for-sclp_.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 01f17a96d58033e281e52483d1afb73362c98aa8 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Thu, 27 Feb 2014 11:19:09 +0100 -Subject: [PATCH] udev/rules: setup tty permissions and group for sclp_line, - ttysclp and 3270/tty - ---- - rules/50-udev-default.rules | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/rules/50-udev-default.rules b/rules/50-udev-default.rules -index 679dfdf..0bccf67 100644 ---- a/rules/50-udev-default.rules -+++ b/rules/50-udev-default.rules -@@ -15,6 +15,9 @@ ACTION!="add", GOTO="default_permissions_end" - SUBSYSTEM=="tty", KERNEL=="ptmx", GROUP="tty", MODE="0666" - SUBSYSTEM=="tty", KERNEL=="tty", GROUP="tty", MODE="0666" - SUBSYSTEM=="tty", KERNEL=="tty[0-9]*", GROUP="tty", MODE="0620" -+SUBSYSTEM=="tty", KERNEL=="sclp_line[0-9]*", GROUP="tty", MODE="0620" -+SUBSYSTEM=="tty", KERNEL=="ttysclp[0-9]*", GROUP="tty", MODE="0620" -+SUBSYSTEM=="tty", KERNEL=="3270/tty[0-9]*", GROUP="tty", MODE="0620" - SUBSYSTEM=="vc", KERNEL=="vcs*|vcsa*", GROUP="tty" - KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout" - diff --git a/SOURCES/0204-cdrom_id-use-the-old-MMC-fallback.patch b/SOURCES/0204-cdrom_id-use-the-old-MMC-fallback.patch deleted file mode 100644 index bc9671f..0000000 --- a/SOURCES/0204-cdrom_id-use-the-old-MMC-fallback.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 0f9f786f2f6fa8e7aa0c00b29c36296e8b291d76 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Thu, 27 Feb 2014 11:06:37 +0100 -Subject: [PATCH] cdrom_id: use the old MMC fallback - -https://bugzilla.redhat.com/show_bug.cgi?id=1038015 -The problem seems to be that the your virtual DVD is emulating a really -old DVD device, and doing it kind of strangely. - -> dracut:# /lib/udev/cdrom_id --debug /dev/sr0 -> probing: '/dev/sr0' -> INQUIRY: [IMM ][Virtual CD/DVD ][0316] -> GET CONFIGURATION failed with SK=5h/ASC=24h/ACQ=00h - -So your virtual drive rejects the GET CONFIGURATION command as illegal. - -Other pre-MMC2 drives that don't accept this command usually return the -error -SK=5h,ASC=20h (invalid/unsupported command code), in which case cdrom_id -tries an older method, and then ID_CDROM_MEDIA_TRACK_COUNT_DATA gets set -and all the /dev/disk/by-label (etc) links get set up. - -The virtual drive returns the error SK=5h,ASC=24h (invalid field in -Command Descriptor Block), which cdrom_id doesn't handle, so it gives up -and the links never get made. - -The ideal solution would be to make the IMM to emulate a device that's -less than 15 years old, but I'm not going to hold my breath waiting for -that. - -So probably cdrom_id should also use the old MMC fallback when the error -is SK=5h,ASC=24h, and then all of this would work as expected. - -Suggested-by:Luca Miccini - -Conflicts: - src/udev/cdrom_id/cdrom_id.c ---- - src/udev/cdrom_id/cdrom_id.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/udev/cdrom_id/cdrom_id.c b/src/udev/cdrom_id/cdrom_id.c -index 1ad0459..ae19542 100644 ---- a/src/udev/cdrom_id/cdrom_id.c -+++ b/src/udev/cdrom_id/cdrom_id.c -@@ -555,7 +555,7 @@ static int cd_profiles(struct udev *udev, int fd) - if ((err != 0)) { - 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) { -+ if (SK(err) == 0x5 && (ASC(err) == 0x20 || ASC(err) == 0x24)) { - log_debug("drive is pre-MMC2 and does not support 46h get configuration command\n"); - log_debug("trying to work around the problem\n"); - ret = cd_profiles_old_mmc(udev, fd); diff --git a/SOURCES/0204-timedate-fix-memory-leak-in-timedated.patch b/SOURCES/0204-timedate-fix-memory-leak-in-timedated.patch new file mode 100644 index 0000000..d037012 --- /dev/null +++ b/SOURCES/0204-timedate-fix-memory-leak-in-timedated.patch @@ -0,0 +1,71 @@ +From 266eacb3e5a46caba3a56485a9ba54ad8027ff61 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Cristian=20Rodr=C3=ADguez?= +Date: Fri, 15 May 2015 13:26:18 -0300 +Subject: [PATCH] timedate: fix memory leak in timedated + +$ /usr/lib/systemd/systemd-timedated (wait until auto-exit) + +================================================================= +==396==ERROR: LeakSanitizer: detected memory leaks + +Direct leak of 928 byte(s) in 1 object(s) allocated from: + #0 0x7f782f788db1 in __interceptor_calloc (/usr/lib64/libasan.so.2+0x96db1) + #1 0x562a83ae60cf in bus_message_from_header src/libsystemd/sd-bus/bus-message.c:480 + #2 0x562a83ae6f5a in bus_message_from_malloc src/libsystemd/sd-bus/bus-message.c:576 + #3 0x562a83ad3cad in bus_socket_make_message src/libsystemd/sd-bus/bus-socket.c:915 + #4 0x562a83ad4cfc in bus_socket_read_message src/libsystemd/sd-bus/bus-socket.c:1051 + #5 0x562a83ab733f in bus_read_message src/libsystemd/sd-bus/sd-bus.c:1647 + #6 0x562a83ab98ea in sd_bus_call src/libsystemd/sd-bus/sd-bus.c:2038 + #7 0x562a83b1f46d in sd_bus_call_method src/libsystemd/sd-bus/bus-convenience.c:94 + #8 0x562a83aab3e1 in context_read_ntp src/timedate/timedated.c:192 + #9 0x562a83aae1af in main src/timedate/timedated.c:730 + #10 0x7f782eb238c4 in __libc_start_main (/lib64/libc.so.6+0x208c4) + +Indirect leak of 77 byte(s) in 1 object(s) allocated from: + #0 0x7f782f788f6a in realloc (/usr/lib64/libasan.so.2+0x96f6a) + #1 0x562a83ad418a in bus_socket_read_message src/libsystemd/sd-bus/bus-socket.c:963 + #2 0x562a83ab733f in bus_read_message src/libsystemd/sd-bus/sd-bus.c:1647 + #3 0x562a83ab98ea in sd_bus_call src/libsystemd/sd-bus/sd-bus.c:2038 + #4 0x562a83b1f46d in sd_bus_call_method src/libsystemd/sd-bus/bus-convenience.c:94 + #5 0x562a83aab3e1 in context_read_ntp src/timedate/timedated.c:192 + #6 0x562a83aae1af in main src/timedate/timedated.c:730 + #7 0x7f782eb238c4 in __libc_start_main (/lib64/libc.so.6+0x208c4) + +Indirect leak of 2 byte(s) in 1 object(s) allocated from: + #0 0x7f782f75493f in strdup (/usr/lib64/libasan.so.2+0x6293f) + #1 0x562a83b0229b in bus_message_parse_fields src/libsystemd/sd-bus/bus-message.c:5382 + #2 0x562a83ae7290 in bus_message_from_malloc src/libsystemd/sd-bus/bus-message.c:601 + #3 0x562a83ad3cad in bus_socket_make_message src/libsystemd/sd-bus/bus-socket.c:915 + #4 0x562a83ad4cfc in bus_socket_read_message src/libsystemd/sd-bus/bus-socket.c:1051 + #5 0x562a83ab733f in bus_read_message src/libsystemd/sd-bus/sd-bus.c:1647 + #6 0x562a83ab98ea in sd_bus_call src/libsystemd/sd-bus/sd-bus.c:2038 + #7 0x562a83b1f46d in sd_bus_call_method src/libsystemd/sd-bus/bus-convenience.c:94 + #8 0x562a83aab3e1 in context_read_ntp src/timedate/timedated.c:192 + #9 0x562a83aae1af in main src/timedate/timedated.c:730 + #10 0x7f782eb238c4 in __libc_start_main (/lib64/libc.so.6+0x208c4) + +SUMMARY: AddressSanitizer: 1007 byte(s) leaked in 3 allocation(s). + +This is due to missing _cleanup_bus_message_unref_ in context_read_ntp() + +(cherry picked from commit 6b71bab08dc6c92156263daba0e969313eed1323) + +Cherry-picked from: 6b71bab +Resolves: #1222517 +--- + src/timedate/timedated.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c +index f875149..09d0dba 100644 +--- a/src/timedate/timedated.c ++++ b/src/timedate/timedated.c +@@ -245,7 +245,7 @@ static int context_read_ntp(Context *c, sd_bus *bus) { + l = get_ntp_services(); + STRV_FOREACH(i, l) { + _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; +- sd_bus_message *reply = NULL; ++ _cleanup_bus_message_unref_ sd_bus_message *reply = NULL; + const char *s; + + r = sd_bus_call_method( diff --git a/SOURCES/0205-core-introduce-new-stop-protocol-for-unit-scopes.patch b/SOURCES/0205-core-introduce-new-stop-protocol-for-unit-scopes.patch deleted file mode 100644 index 6f6c239..0000000 --- a/SOURCES/0205-core-introduce-new-stop-protocol-for-unit-scopes.patch +++ /dev/null @@ -1,265 +0,0 @@ -From 1c961f8bf67a798d51d88195f89d035012a681d4 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Thu, 27 Feb 2014 17:56:16 +0100 -Subject: [PATCH] core: introduce new stop protocol for unit scopes - -By specifiy a Controller property when creating the scope a client can -specify a bus name that will be notified with a RequestStop bus signal -when the scope has been asked to shut down, instead of sending SIGTERM -to the scope processes themselves. - -https://bugzilla.redhat.com/show_bug.cgi?id=1032695 - -Based-on: 2d4a39e759c4ab846ad8a546abeddd40bc8d736e ---- - src/core/dbus-scope.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++ - src/core/dbus-scope.h | 2 ++ - src/core/scope.c | 20 +++++++++++++++--- - src/core/scope.h | 2 ++ - src/run/run.c | 8 +++++++ - src/shared/dbus-common.c | 42 ++++++++++++++++++++++++++++++++++++ - src/shared/dbus-common.h | 2 ++ - 7 files changed, 128 insertions(+), 3 deletions(-) - -diff --git a/src/core/dbus-scope.c b/src/core/dbus-scope.c -index 783a969..b576f76 100644 ---- a/src/core/dbus-scope.c -+++ b/src/core/dbus-scope.c -@@ -31,10 +31,12 @@ - #define BUS_SCOPE_INTERFACE \ - " \n" \ - BUS_UNIT_CGROUP_INTERFACE \ -+ " \n"\ - " \n" \ - BUS_KILL_CONTEXT_INTERFACE \ - BUS_CGROUP_CONTEXT_INTERFACE \ - " \n" \ -+ " \n" \ - " \n" - - #define INTROSPECTION \ -@@ -56,6 +58,7 @@ const char bus_scope_interface[] _introspect_("Scope") = BUS_SCOPE_INTERFACE; - static DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_scope_append_scope_result, scope_result, ScopeResult); - - static const BusProperty bus_scope_properties[] = { -+ { "Controller", bus_property_append_string, "s", offsetof(Scope, controller) }, - { "TimeoutStopUSec", bus_property_append_usec, "t", offsetof(Scope, timeout_stop_usec) }, - { "Result", bus_scope_append_scope_result, "s", offsetof(Scope, result) }, - {} -@@ -127,6 +130,31 @@ static int bus_scope_set_transient_property( - - return 1; - -+ } else if (streq(name, "Controller")) { -+ const char *controller; -+ -+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_STRING) -+ return -EINVAL; -+ -+ dbus_message_iter_get_basic(i, &controller); -+ -+ if (!isempty(controller) && !bus_service_name_is_valid(controller)) -+ return -EINVAL; -+ -+ if (mode != UNIT_CHECK) { -+ char *c = NULL; -+ -+ if (!isempty(controller)) { -+ c = strdup(controller); -+ if (!c) -+ return -ENOMEM; -+ } -+ -+ free(s->controller); -+ s->controller = c; -+ } -+ -+ return 1; - } else if (streq(name, "TimeoutStopUSec")) { - - if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_UINT64) -@@ -187,3 +215,30 @@ int bus_scope_commit_properties(Unit *u) { - unit_realize_cgroup(u); - return 0; - } -+ -+int bus_scope_send_request_stop(Scope *s) { -+ _cleanup_dbus_message_unref_ DBusMessage *m = NULL; -+ _cleanup_free_ char *p = NULL; -+ int r; -+ -+ assert(s); -+ -+ if (!s->controller) -+ return 0; -+ -+ p = unit_dbus_path(UNIT(s)); -+ if (!p) -+ return -ENOMEM; -+ -+ m = dbus_message_new_signal(p, -+ "org.freedesktop.systemd1.Scope", -+ "RequestStop"); -+ if (!m) -+ return 0; -+ -+ r = dbus_message_set_destination(m, s->controller); -+ if (!r) -+ return 0; -+ -+ return dbus_connection_send(UNIT(s)->manager->api_bus, m, NULL); -+} -diff --git a/src/core/dbus-scope.h b/src/core/dbus-scope.h -index e6836f1..34720f2 100644 ---- a/src/core/dbus-scope.h -+++ b/src/core/dbus-scope.h -@@ -30,4 +30,6 @@ DBusHandlerResult bus_scope_message_handler(Unit *u, DBusConnection *c, DBusMess - int bus_scope_set_property(Unit *u, const char *name, DBusMessageIter *i, UnitSetPropertiesMode mode, DBusError *error); - int bus_scope_commit_properties(Unit *u); - -+int bus_scope_send_request_stop(Scope *s); -+ - extern const char bus_scope_interface[]; -diff --git a/src/core/scope.c b/src/core/scope.c -index 41da3b9..e75fc2b 100644 ---- a/src/core/scope.c -+++ b/src/core/scope.c -@@ -64,6 +64,9 @@ static void scope_done(Unit *u) { - - cgroup_context_done(&s->cgroup_context); - -+ free(s->controller); -+ s->controller = NULL; -+ - set_free(s->pids); - s->pids = NULL; - -@@ -198,6 +201,7 @@ static void scope_enter_dead(Scope *s, ScopeResult f) { - } - - static void scope_enter_signal(Scope *s, ScopeState state, ScopeResult f) { -+ bool skip_signal = false; - int r; - - assert(s); -@@ -205,13 +209,23 @@ static void scope_enter_signal(Scope *s, ScopeState state, ScopeResult f) { - if (f != SCOPE_SUCCESS) - s->result = f; - -- r = unit_kill_context( -+ /* If we have a controller set let's ask the controller nicely -+ * to terminate the scope, instead of us going directly into -+ * SIGTERM beserk mode */ -+ if (state == SCOPE_STOP_SIGTERM) -+ skip_signal = bus_scope_send_request_stop(s) > 0; -+ -+ if (!skip_signal) { -+ r = unit_kill_context( - UNIT(s), - &s->kill_context, - state != SCOPE_STOP_SIGTERM, - -1, -1, false); -- if (r < 0) -- goto fail; -+ -+ if (r < 0) -+ goto fail; -+ } else -+ r = 1; - - if (r > 0) { - if (s->timeout_stop_usec > 0) { -diff --git a/src/core/scope.h b/src/core/scope.h -index 2a3dcb7..b4bafa7 100644 ---- a/src/core/scope.h -+++ b/src/core/scope.h -@@ -55,6 +55,8 @@ struct Scope { - - usec_t timeout_stop_usec; - -+ char *controller; -+ - Set *pids; - - Watch timer_watch; -diff --git a/src/run/run.c b/src/run/run.c -index a6abead..93e3f88 100644 ---- a/src/run/run.c -+++ b/src/run/run.c -@@ -315,6 +315,14 @@ static int start_transient_scope( - if (r < 0) - return r; - -+ { -+ const char *unique_id; -+ sd_bus_get_unique_name(bus, &unique_id); -+ r = sd_bus_message_append(m, "(sv)", "Controller", "s", unique_id); -+ if (r < 0) -+ return r; -+ } -+ - r = sd_bus_message_append(m, "(sv)", "PIDs", "au", 1, (uint32_t) getpid()); - if (r < 0) - return r; -diff --git a/src/shared/dbus-common.c b/src/shared/dbus-common.c -index 3ba2d87..8a68708 100644 ---- a/src/shared/dbus-common.c -+++ b/src/shared/dbus-common.c -@@ -1428,3 +1428,45 @@ const char *bus_message_get_sender_with_fallback(DBusMessage *m) { - - return ":no-sender"; - } -+ -+bool bus_service_name_is_valid(const char *p) { -+ const char *q; -+ bool dot, found_dot = false, unique; -+ -+ if (isempty(p)) -+ return false; -+ -+ unique = p[0] == ':'; -+ -+ for (dot = true, q = unique ? p+1 : p; *q; q++) -+ if (*q == '.') { -+ if (dot) -+ return false; -+ -+ found_dot = dot = true; -+ } else { -+ bool good; -+ -+ good = -+ (*q >= 'a' && *q <= 'z') || -+ (*q >= 'A' && *q <= 'Z') || -+ ((!dot || unique) && *q >= '0' && *q <= '9') || -+ *q == '_' || *q == '-'; -+ -+ if (!good) -+ return false; -+ -+ dot = false; -+ } -+ -+ if (q - p > 255) -+ return false; -+ -+ if (dot) -+ return false; -+ -+ if (!found_dot) -+ return false; -+ -+ return true; -+} -diff --git a/src/shared/dbus-common.h b/src/shared/dbus-common.h -index 9752f08..8d01d14 100644 ---- a/src/shared/dbus-common.h -+++ b/src/shared/dbus-common.h -@@ -242,5 +242,7 @@ const char *bus_message_get_sender_with_fallback(DBusMessage *m); - - void bus_message_unrefp(DBusMessage **reply); - -+bool bus_service_name_is_valid(const char *p); -+ - #define _cleanup_dbus_message_unref_ __attribute__((cleanup(bus_message_unrefp))) - #define _cleanup_dbus_error_free_ __attribute__((cleanup(dbus_error_free))) diff --git a/SOURCES/0205-coredump-make-sure-we-vacuum-by-default.patch b/SOURCES/0205-coredump-make-sure-we-vacuum-by-default.patch new file mode 100644 index 0000000..e9edb96 --- /dev/null +++ b/SOURCES/0205-coredump-make-sure-we-vacuum-by-default.patch @@ -0,0 +1,57 @@ +From c730efd5335cf49ef78008b7d49fc5d5215089eb Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 15 May 2015 20:56:55 +0200 +Subject: [PATCH] coredump: make sure we vacuum by default + +Only if both keep_free and max_use are actually 0 we can shortcut things +and avoid vacuuming. If either are positive or -1 we need to execute the +vacuuming. + +http://lists.freedesktop.org/archives/systemd-devel/2015-April/031382.html +(cherry picked from commit 5470c03b37d8421a903564c2c8028c8b8d67d403) + +Cherry-picked from: 5470c03 +Resolves: #1222517 +--- + man/coredump.conf.xml | 4 +++- + src/journal/coredump-vacuum.c | 5 ++--- + 2 files changed, 5 insertions(+), 4 deletions(-) + +diff --git a/man/coredump.conf.xml b/man/coredump.conf.xml +index 0b7329b..fd54c59 100644 +--- a/man/coredump.conf.xml ++++ b/man/coredump.conf.xml +@@ -134,7 +134,9 @@ + by coredumps might temporarily exceed these limits while + coredumps are processed. Note that old coredumps are also + removed based on time via +- systemd-tmpfiles8. ++ systemd-tmpfiles8. Set ++ either value to 0 to turn off size based ++ clean-up. + + + +diff --git a/src/journal/coredump-vacuum.c b/src/journal/coredump-vacuum.c +index 9b73795..c0347ef 100644 +--- a/src/journal/coredump-vacuum.c ++++ b/src/journal/coredump-vacuum.c +@@ -103,8 +103,7 @@ static bool vacuum_necessary(int fd, off_t sum, off_t keep_free, off_t max_use) + + if (max_use < DEFAULT_MAX_USE_LOWER) + max_use = DEFAULT_MAX_USE_LOWER; +- } +- else ++ } else + max_use = DEFAULT_MAX_USE_LOWER; + } else + max_use = PAGE_ALIGN(max_use); +@@ -135,7 +134,7 @@ int coredump_vacuum(int exclude_fd, off_t keep_free, off_t max_use) { + struct stat exclude_st; + int r; + +- if (keep_free <= 0 && max_use <= 0) ++ if (keep_free == 0 && max_use == 0) + return 0; + + if (exclude_fd >= 0) { diff --git a/SOURCES/0206-core-watch-SIGCHLD-more-closely-to-track-processes-o.patch b/SOURCES/0206-core-watch-SIGCHLD-more-closely-to-track-processes-o.patch deleted file mode 100644 index 5ebd63a..0000000 --- a/SOURCES/0206-core-watch-SIGCHLD-more-closely-to-track-processes-o.patch +++ /dev/null @@ -1,716 +0,0 @@ -From 1386240aee3f78a9101a118f11a7028571d33a71 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Thu, 27 Feb 2014 18:16:19 +0100 -Subject: [PATCH] core: watch SIGCHLD more closely to track processes of units - with no reliable cgroup empty notifier - -When a process dies that we can associate with a specific unit, start -watching all other processes of that unit, so that we can associate -those processes with the unit too. - -Also, for service units start doing this as soon as we get the first -SIGCHLD for either control or main process, so that we can follow the -processes of the service from one to the other, as long as process that -remain are processes of the ones we watched that died and got reassigned -to us as parent. - -Similar, for scope units start doing this as soon as the scope -controller abandons the unit, and thus management entirely reverts to -systemd. To abandon a unit introduce a new Abandon() scope unit method -call. - -Based-on: a911bb9ab27ac0eb3bbf4e8b4109e5da9b88eee3 ---- - src/core/dbus-scope.c | 36 +++++++++---- - src/core/manager.c | 2 +- - src/core/scope.c | 87 ++++++++++++++++++++++--------- - src/core/scope.h | 5 +- - src/core/service.c | 140 ++++++++++++++++++++++++++++++-------------------- - src/core/unit.c | 112 +++++++++++++++++++++++++++++++++++++++- - src/core/unit.h | 9 ++++ - 7 files changed, 298 insertions(+), 93 deletions(-) - -diff --git a/src/core/dbus-scope.c b/src/core/dbus-scope.c -index b576f76..58dd9ff 100644 ---- a/src/core/dbus-scope.c -+++ b/src/core/dbus-scope.c -@@ -30,6 +30,7 @@ - - #define BUS_SCOPE_INTERFACE \ - " \n" \ -+ " \n" \ - BUS_UNIT_CGROUP_INTERFACE \ - " \n"\ - " \n" \ -@@ -66,19 +67,40 @@ static const BusProperty bus_scope_properties[] = { - - DBusHandlerResult bus_scope_message_handler(Unit *u, DBusConnection *c, DBusMessage *message) { - Scope *s = SCOPE(u); -+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL; - -- const BusBoundProperties bps[] = { -+ SELINUX_UNIT_ACCESS_CHECK(u, c, message, "status"); -+ -+ if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Scope", "Abandon")) { -+ int r; -+ -+ r = scope_abandon(s); -+ if (r < 0) -+ log_error("Failed to mark scope %s as abandoned : %s", UNIT(s)->id, strerror(-r)); -+ -+ reply = dbus_message_new_method_return(message); -+ if (!reply) -+ goto oom; -+ } else { -+ const BusBoundProperties bps[] = { - { "org.freedesktop.systemd1.Unit", bus_unit_properties, u }, - { "org.freedesktop.systemd1.Scope", bus_unit_cgroup_properties, u }, - { "org.freedesktop.systemd1.Scope", bus_scope_properties, s }, - { "org.freedesktop.systemd1.Scope", bus_cgroup_context_properties, &s->cgroup_context }, - { "org.freedesktop.systemd1.Scope", bus_kill_context_properties, &s->kill_context }, - {} -- }; -+ }; - -- SELINUX_UNIT_ACCESS_CHECK(u, c, message, "status"); -+ return bus_default_message_handler(c, message, INTROSPECTION, INTERFACES_LIST, bps); -+ } -+ -+ if (reply) -+ if (!bus_maybe_send_reply(c, message, reply)) -+ goto oom; - -- return bus_default_message_handler(c, message, INTROSPECTION, INTERFACES_LIST, bps); -+ return DBUS_HANDLER_RESULT_HANDLED; -+oom: -+ return DBUS_HANDLER_RESULT_NEED_MEMORY; - } - - static int bus_scope_set_transient_property( -@@ -102,10 +124,6 @@ static int bus_scope_set_transient_property( - dbus_message_iter_get_element_type(i) != DBUS_TYPE_UINT32) - return -EINVAL; - -- r = set_ensure_allocated(&s->pids, trivial_hash_func, trivial_compare_func); -- if (r < 0) -- return r; -- - dbus_message_iter_recurse(i, &sub); - while (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_UINT32) { - uint32_t pid; -@@ -116,7 +134,7 @@ static int bus_scope_set_transient_property( - return -EINVAL; - - if (mode != UNIT_CHECK) { -- r = set_put(s->pids, LONG_TO_PTR(pid)); -+ r = unit_watch_pid(UNIT(s), pid); - if (r < 0 && r != -EEXIST) - return r; - } -diff --git a/src/core/manager.c b/src/core/manager.c -index a34a3c6..db5094f 100644 ---- a/src/core/manager.c -+++ b/src/core/manager.c -@@ -1389,7 +1389,7 @@ static int manager_dispatch_sigchld(Manager *m) { - log_debug_unit(u->id, - "Child %lu belongs to %s", (long unsigned) si.si_pid, u->id); - -- hashmap_remove(m->watch_pids, LONG_TO_PTR(si.si_pid)); -+ unit_unwatch_pid(u, si.si_pid); - UNIT_VTABLE(u)->sigchld_event(u, si.si_pid, si.si_code, si.si_status); - } - -diff --git a/src/core/scope.c b/src/core/scope.c -index e75fc2b..22bdfb2 100644 ---- a/src/core/scope.c -+++ b/src/core/scope.c -@@ -35,6 +35,7 @@ - static const UnitActiveState state_translation_table[_SCOPE_STATE_MAX] = { - [SCOPE_DEAD] = UNIT_INACTIVE, - [SCOPE_RUNNING] = UNIT_ACTIVE, -+ [SCOPE_ABANDONED] = UNIT_ACTIVE, - [SCOPE_STOP_SIGTERM] = UNIT_DEACTIVATING, - [SCOPE_STOP_SIGKILL] = UNIT_DEACTIVATING, - [SCOPE_FAILED] = UNIT_FAILED -@@ -67,9 +68,6 @@ static void scope_done(Unit *u) { - free(s->controller); - s->controller = NULL; - -- set_free(s->pids); -- s->pids = NULL; -- - unit_unwatch_timer(u, &s->timer_watch); - } - -@@ -84,6 +82,9 @@ static void scope_set_state(Scope *s, ScopeState state) { - state != SCOPE_STOP_SIGKILL) - unit_unwatch_timer(UNIT(s), &s->timer_watch); - -+ if (state == SCOPE_DEAD || state == SCOPE_FAILED) -+ unit_unwatch_all_pids(UNIT(s)); -+ - if (state != old_state) - log_debug("%s changed %s -> %s", - UNIT(s)->id, -@@ -115,7 +116,7 @@ static int scope_verify(Scope *s) { - if (UNIT(s)->load_state != UNIT_LOADED) - return 0; - -- if (set_size(s->pids) <= 0 && UNIT(s)->manager->n_reloading <= 0) { -+ if (set_size(UNIT(s)->pids) <= 0 && UNIT(s)->manager->n_reloading <= 0) { - log_error_unit(UNIT(s)->id, "Scope %s has no PIDs. Refusing.", UNIT(s)->id); - return -EINVAL; - } -@@ -169,6 +170,9 @@ static int scope_coldplug(Unit *u) { - return r; - } - -+ if (s->deserialized_state != SCOPE_DEAD && s->deserialized_state != SCOPE_FAILED) -+ unit_watch_all_pids(UNIT(s)); -+ - scope_set_state(s, s->deserialized_state); - } - -@@ -209,6 +213,8 @@ static void scope_enter_signal(Scope *s, ScopeState state, ScopeResult f) { - if (f != SCOPE_SUCCESS) - s->result = f; - -+ unit_watch_all_pids(UNIT(s)); -+ - /* If we have a controller set let's ask the controller nicely - * to terminate the scope, instead of us going directly into - * SIGTERM beserk mode */ -@@ -271,13 +277,10 @@ static int scope_start(Unit *u) { - return r; - } - -- r = cg_attach_many_everywhere(u->manager->cgroup_supported, u->cgroup_path, s->pids); -+ r = cg_attach_many_everywhere(u->manager->cgroup_supported, u->cgroup_path, UNIT(s)->pids); - if (r < 0) - return r; - -- set_free(s->pids); -- s->pids = NULL; -- - s->result = SCOPE_SUCCESS; - - scope_set_state(s, SCOPE_RUNNING); -@@ -288,13 +291,13 @@ static int scope_stop(Unit *u) { - Scope *s = SCOPE(u); - - assert(s); -- assert(s->state == SCOPE_RUNNING); - - if (s->state == SCOPE_STOP_SIGTERM || - s->state == SCOPE_STOP_SIGKILL) - return 0; - -- assert(s->state == SCOPE_RUNNING); -+ assert(s->state == SCOPE_RUNNING || -+ s->state == SCOPE_ABANDONED); - - scope_enter_signal(s, SCOPE_STOP_SIGTERM, SCOPE_SUCCESS); - return 0; -@@ -358,7 +361,7 @@ static bool scope_check_gc(Unit *u) { - /* Never clean up scopes that still have a process around, - * even if the scope is formally dead. */ - -- if (UNIT(s)->cgroup_path) { -+ if (u->cgroup_path) { - r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path, true); - if (r <= 0) - return true; -@@ -367,6 +370,33 @@ static bool scope_check_gc(Unit *u) { - return false; - } - -+static void scope_notify_cgroup_empty_event(Unit *u) { -+ Scope *s = SCOPE(u); -+ -+ assert(u); -+ -+ log_debug_unit(u->id, "%s: cgroup is empty", u->id); -+ -+ if (s->state == SCOPE_RUNNING || s->state == SCOPE_ABANDONED || -+ s->state == SCOPE_STOP_SIGTERM || SCOPE_STOP_SIGKILL) -+ scope_enter_dead(s, SCOPE_SUCCESS); -+} -+ -+static void scope_sigchld_event(Unit *u, pid_t pid, int code, int status) { -+ /* If we get a SIGCHLD event for one of the processes we were -+ interested in, then we look for others to watch, under the -+ assumption that we'll sooner or later get a SIGCHLD for -+ them, as the original process we watched was probably the -+ parent of them, and they are hence now our children. */ -+ -+ unit_tidy_watch_pids(u, 0, 0); -+ unit_watch_all_pids(u); -+ -+ /* If the PID set is empty now, then let's finish this off */ -+ if (set_isempty(u->pids)) -+ scope_notify_cgroup_empty_event(u); -+} -+ - static void scope_timer_event(Unit *u, uint64_t elapsed, Watch*w) { - Scope *s = SCOPE(u); - -@@ -397,24 +427,30 @@ static void scope_timer_event(Unit *u, uint64_t elapsed, Watch*w) { - } - } - --static void scope_notify_cgroup_empty_event(Unit *u) { -- Scope *s = SCOPE(u); -- assert(u); -+int scope_abandon(Scope *s) { -+ assert(s); - -- log_debug_unit(u->id, "%s: cgroup is empty", u->id); -+ if (s->state != SCOPE_RUNNING && s->state != SCOPE_ABANDONED) -+ return -ESTALE; - -- switch (s->state) { -+ free(s->controller); -+ s->controller = NULL; - -- case SCOPE_RUNNING: -- case SCOPE_STOP_SIGTERM: -- case SCOPE_STOP_SIGKILL: -- scope_enter_dead(s, SCOPE_SUCCESS); -+ /* The client is no longer watching the remaining processes, -+ * so let's step in here, under the assumption that the -+ * remaining processes will be sooner or later reassigned to -+ * us as parent. */ - -- break; -+ unit_tidy_watch_pids(UNIT(s), 0, 0); -+ unit_watch_all_pids(UNIT(s)); - -- default: -- ; -- } -+ /* If the PID set is empty now, then let's finish this off */ -+ if (set_isempty(UNIT(s)->pids)) -+ scope_notify_cgroup_empty_event(UNIT(s)); -+ else -+ scope_set_state(s, SCOPE_ABANDONED); -+ -+ return 0; - } - - _pure_ static UnitActiveState scope_active_state(Unit *u) { -@@ -432,6 +468,7 @@ _pure_ static const char *scope_sub_state_to_string(Unit *u) { - static const char* const scope_state_table[_SCOPE_STATE_MAX] = { - [SCOPE_DEAD] = "dead", - [SCOPE_RUNNING] = "running", -+ [SCOPE_ABANDONED] = "abandoned", - [SCOPE_STOP_SIGTERM] = "stop-sigterm", - [SCOPE_STOP_SIGKILL] = "stop-sigkill", - [SCOPE_FAILED] = "failed", -@@ -481,6 +518,8 @@ const UnitVTable scope_vtable = { - - .check_gc = scope_check_gc, - -+ .sigchld_event = scope_sigchld_event, -+ - .timer_event = scope_timer_event, - - .reset_failed = scope_reset_failed, -diff --git a/src/core/scope.h b/src/core/scope.h -index b4bafa7..1e9f201 100644 ---- a/src/core/scope.h -+++ b/src/core/scope.h -@@ -29,6 +29,7 @@ typedef struct Scope Scope; - typedef enum ScopeState { - SCOPE_DEAD, - SCOPE_RUNNING, -+ SCOPE_ABANDONED, - SCOPE_STOP_SIGTERM, - SCOPE_STOP_SIGKILL, - SCOPE_FAILED, -@@ -57,13 +58,13 @@ struct Scope { - - char *controller; - -- Set *pids; -- - Watch timer_watch; - }; - - extern const UnitVTable scope_vtable; - -+int scope_abandon(Scope *s); -+ - const char* scope_state_to_string(ScopeState i) _const_; - ScopeState scope_state_from_string(const char *s) _pure_; - -diff --git a/src/core/service.c b/src/core/service.c -index f0acda1..41e5cb5 100644 ---- a/src/core/service.c -+++ b/src/core/service.c -@@ -1546,6 +1546,11 @@ static void service_set_state(Service *s, ServiceState state) { - s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID; - } - -+ if (state == SERVICE_DEAD || -+ state == SERVICE_FAILED || -+ state == SERVICE_AUTO_RESTART) -+ unit_unwatch_all_pids(UNIT(s)); -+ - if (state != SERVICE_START_PRE && - state != SERVICE_START && - state != SERVICE_START_POST && -@@ -1661,8 +1666,14 @@ static int service_coldplug(Unit *u) { - return r; - } - -+ if (s->deserialized_state != SERVICE_DEAD && -+ s->deserialized_state != SERVICE_FAILED && -+ s->deserialized_state != SERVICE_AUTO_RESTART) -+ unit_watch_all_pids(UNIT(s)); -+ - if (s->deserialized_state == SERVICE_START_POST || -- s->deserialized_state == SERVICE_RUNNING) -+ s->deserialized_state == SERVICE_RUNNING || -+ s->deserialized_state == SERVICE_RELOAD) - service_handle_watchdog(s); - - service_set_state(s, s->deserialized_state); -@@ -1970,6 +1981,7 @@ static void service_enter_stop_post(Service *s, ServiceResult f) { - s->result = f; - - service_unwatch_control_pid(s); -+ unit_watch_all_pids(UNIT(s)); - - s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST]; - if (s->control_command) { -@@ -2010,6 +2022,8 @@ static void service_enter_signal(Service *s, ServiceState state, ServiceResult f - if (f != SERVICE_SUCCESS) - s->result = f; - -+ unit_watch_all_pids(UNIT(s)); -+ - r = unit_kill_context( - UNIT(s), - &s->kill_context, -@@ -2055,6 +2069,7 @@ static void service_enter_stop(Service *s, ServiceResult f) { - s->result = f; - - service_unwatch_control_pid(s); -+ unit_watch_all_pids(UNIT(s)); - - s->control_command = s->exec_command[SERVICE_EXEC_STOP]; - if (s->control_command) { -@@ -2961,6 +2976,62 @@ fail: - service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES); - } - -+static void service_notify_cgroup_empty_event(Unit *u) { -+ Service *s = SERVICE(u); -+ -+ assert(u); -+ -+ log_debug_unit(u->id, "%s: cgroup is empty", u->id); -+ -+ switch (s->state) { -+ -+ /* Waiting for SIGCHLD is usually more interesting, -+ * because it includes return codes/signals. Which is -+ * why we ignore the cgroup events for most cases, -+ * except when we don't know pid which to expect the -+ * SIGCHLD for. */ -+ -+ case SERVICE_START: -+ case SERVICE_START_POST: -+ /* If we were hoping for the daemon to write its PID file, -+ * we can give up now. */ -+ if (s->pid_file_pathspec) { -+ log_warning_unit(u->id, -+ "%s never wrote its PID file. Failing.", UNIT(s)->id); -+ service_unwatch_pid_file(s); -+ if (s->state == SERVICE_START) -+ service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES); -+ else -+ service_enter_stop(s, SERVICE_FAILURE_RESOURCES); -+ } -+ break; -+ -+ case SERVICE_RUNNING: -+ /* service_enter_running() will figure out what to do */ -+ service_enter_running(s, SERVICE_SUCCESS); -+ break; -+ -+ case SERVICE_STOP_SIGTERM: -+ case SERVICE_STOP_SIGKILL: -+ -+ if (main_pid_good(s) <= 0 && !control_pid_good(s)) -+ service_enter_stop_post(s, SERVICE_SUCCESS); -+ -+ break; -+ -+ case SERVICE_STOP_POST: -+ case SERVICE_FINAL_SIGTERM: -+ case SERVICE_FINAL_SIGKILL: -+ if (main_pid_good(s) <= 0 && !control_pid_good(s)) -+ service_enter_dead(s, SERVICE_SUCCESS, true); -+ -+ break; -+ -+ default: -+ ; -+ } -+} -+ - static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) { - Service *s = SERVICE(u); - ServiceResult f; -@@ -3229,6 +3300,18 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) { - - /* Notify clients about changed exit status */ - unit_add_to_dbus_queue(u); -+ -+ /* We got one SIGCHLD for the service, let's watch all -+ * processes that are now running of the service, and watch -+ * that. Among the PIDs we then watch will be children -+ * reassigned to us, which hopefully allows us to identify -+ * when all children are gone */ -+ unit_tidy_watch_pids(u, s->main_pid, s->control_pid); -+ unit_watch_all_pids(u); -+ -+ /* If the PID set is empty now, then let's finish this off */ -+ if (set_isempty(u->pids)) -+ service_notify_cgroup_empty_event(u); - } - - static void service_timer_event(Unit *u, uint64_t elapsed, Watch* w) { -@@ -3332,61 +3415,6 @@ static void service_timer_event(Unit *u, uint64_t elapsed, Watch* w) { - } - } - --static void service_notify_cgroup_empty_event(Unit *u) { -- Service *s = SERVICE(u); -- -- assert(u); -- -- log_debug_unit(u->id, "%s: cgroup is empty", u->id); -- -- switch (s->state) { -- -- /* Waiting for SIGCHLD is usually more interesting, -- * because it includes return codes/signals. Which is -- * why we ignore the cgroup events for most cases, -- * except when we don't know pid which to expect the -- * SIGCHLD for. */ -- -- case SERVICE_START: -- case SERVICE_START_POST: -- /* If we were hoping for the daemon to write its PID file, -- * we can give up now. */ -- if (s->pid_file_pathspec) { -- log_warning_unit(u->id, -- "%s never wrote its PID file. Failing.", UNIT(s)->id); -- service_unwatch_pid_file(s); -- if (s->state == SERVICE_START) -- service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES); -- else -- service_enter_stop(s, SERVICE_FAILURE_RESOURCES); -- } -- break; -- -- case SERVICE_RUNNING: -- /* service_enter_running() will figure out what to do */ -- service_enter_running(s, SERVICE_SUCCESS); -- break; -- -- case SERVICE_STOP_SIGTERM: -- case SERVICE_STOP_SIGKILL: -- -- if (main_pid_good(s) <= 0 && !control_pid_good(s)) -- service_enter_stop_post(s, SERVICE_SUCCESS); -- -- break; -- -- case SERVICE_FINAL_SIGTERM: -- case SERVICE_FINAL_SIGKILL: -- if (main_pid_good(s) <= 0 && !control_pid_good(s)) -- service_enter_dead(s, SERVICE_SUCCESS, true); -- -- break; -- -- default: -- ; -- } --} -- - static void service_notify_message(Unit *u, pid_t pid, char **tags) { - Service *s = SERVICE(u); - const char *e; -diff --git a/src/core/unit.c b/src/core/unit.c -index 6c2c4a0..0332094 100644 ---- a/src/core/unit.c -+++ b/src/core/unit.c -@@ -472,6 +472,8 @@ void unit_free(Unit *u) { - - set_free_free(u->names); - -+ unit_unwatch_all_pids(u); -+ - condition_free_list(u->conditions); - - unit_ref_unset(&u->slice); -@@ -1658,13 +1660,25 @@ void unit_unwatch_fd(Unit *u, Watch *w) { - } - - int unit_watch_pid(Unit *u, pid_t pid) { -+ int q, r; -+ - assert(u); - assert(pid >= 1); - -+ r = set_ensure_allocated(&u->pids, trivial_hash_func, trivial_compare_func); -+ if (r < 0) -+ return r; -+ - /* Watch a specific PID. We only support one unit watching - * each PID for now. */ - -- return hashmap_put(u->manager->watch_pids, LONG_TO_PTR(pid), u); -+ r = set_put(u->pids, LONG_TO_PTR(pid)); -+ -+ q = hashmap_put(u->manager->watch_pids, LONG_TO_PTR(pid), u); -+ if (q < 0) -+ return q; -+ -+ return r; - } - - void unit_unwatch_pid(Unit *u, pid_t pid) { -@@ -1672,6 +1686,102 @@ void unit_unwatch_pid(Unit *u, pid_t pid) { - assert(pid >= 1); - - hashmap_remove_value(u->manager->watch_pids, LONG_TO_PTR(pid), u); -+ set_remove(u->pids, LONG_TO_PTR(pid)); -+} -+ -+static int watch_pids_in_path(Unit *u, const char *path) { -+ _cleanup_closedir_ DIR *d = NULL; -+ _cleanup_fclose_ FILE *f = NULL; -+ int ret = 0, r; -+ -+ assert(u); -+ assert(path); -+ -+ /* Adds all PIDs from a specific cgroup path to the set of PIDs we watch. */ -+ -+ r = cg_enumerate_processes(SYSTEMD_CGROUP_CONTROLLER, path, &f); -+ if (r >= 0) { -+ pid_t pid; -+ -+ while ((r = cg_read_pid(f, &pid)) > 0) { -+ r = unit_watch_pid(u, pid); -+ if (r < 0 && ret >= 0) -+ ret = r; -+ } -+ if (r < 0 && ret >= 0) -+ ret = r; -+ -+ } else if (ret >= 0) -+ ret = r; -+ -+ r = cg_enumerate_subgroups(SYSTEMD_CGROUP_CONTROLLER, path, &d); -+ if (r >= 0) { -+ char *fn; -+ -+ while ((r = cg_read_subgroup(d, &fn)) > 0) { -+ _cleanup_free_ char *p = NULL; -+ -+ p = strjoin(path, "/", fn, NULL); -+ free(fn); -+ -+ if (!p) -+ return -ENOMEM; -+ -+ r = watch_pids_in_path(u, p); -+ if (r < 0 && ret >= 0) -+ ret = r; -+ } -+ if (r < 0 && ret >= 0) -+ ret = r; -+ -+ } else if (ret >= 0) -+ ret = r; -+ -+ return ret; -+} -+ -+ -+int unit_watch_all_pids(Unit *u) { -+ assert(u); -+ -+ if (!u->cgroup_path) -+ return -ENOENT; -+ -+ /* Adds all PIDs from our cgroup to the set of PIDs we watch */ -+ -+ return watch_pids_in_path(u, u->cgroup_path); -+} -+ -+void unit_unwatch_all_pids(Unit *u) { -+ Iterator i; -+ void *e; -+ -+ assert(u); -+ -+ SET_FOREACH(e, u->pids, i) -+ hashmap_remove_value(u->manager->watch_pids, e, u); -+ -+ set_free(u->pids); -+ u->pids = NULL; -+} -+ -+void unit_tidy_watch_pids(Unit *u, pid_t except1, pid_t except2) { -+ Iterator i; -+ void *e; -+ -+ assert(u); -+ -+ /* Cleans dead PIDs from our list */ -+ -+ SET_FOREACH(e, u->pids, i) { -+ pid_t pid = PTR_TO_LONG(e); -+ -+ if (pid == except1 || pid == except2) -+ continue; -+ -+ if (kill(pid, 0) < 0 && errno == ESRCH) -+ set_remove(u->pids, e); -+ } - } - - int unit_watch_timer(Unit *u, clockid_t clock_id, bool relative, usec_t usec, Watch *w) { -diff --git a/src/core/unit.h b/src/core/unit.h -index 6dd750f..6dff25e 100644 ---- a/src/core/unit.h -+++ b/src/core/unit.h -@@ -198,6 +198,11 @@ struct Unit { - /* CGroup realize members queue */ - LIST_FIELDS(Unit, cgroup_queue); - -+ /* PIDs we keep an eye on. Note that a unit might have many -+ * more, but these are the ones we care enough about to -+ * process SIGCHLD for */ -+ Set *pids; -+ - /* Used during GC sweeps */ - unsigned gc_marker; - -@@ -531,6 +536,10 @@ void unit_unwatch_fd(Unit *u, Watch *w); - - int unit_watch_pid(Unit *u, pid_t pid); - void unit_unwatch_pid(Unit *u, pid_t pid); -+int unit_watch_all_pids(Unit *u); -+void unit_unwatch_all_pids(Unit *u); -+ -+void unit_tidy_watch_pids(Unit *u, pid_t except1, pid_t except2); - - int unit_watch_timer(Unit *u, clockid_t, bool relative, usec_t usec, Watch *w); - void unit_unwatch_timer(Unit *u, Watch *w); diff --git a/SOURCES/0206-tmpfiles-don-t-fail-if-we-cannot-create-a-subvolume-.patch b/SOURCES/0206-tmpfiles-don-t-fail-if-we-cannot-create-a-subvolume-.patch new file mode 100644 index 0000000..84c89b6 --- /dev/null +++ b/SOURCES/0206-tmpfiles-don-t-fail-if-we-cannot-create-a-subvolume-.patch @@ -0,0 +1,51 @@ +From e2550d725cf94c01dee40f5f02ad242ee8e02072 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 15 May 2015 21:47:22 +0200 +Subject: [PATCH] tmpfiles: don't fail if we cannot create a subvolume because + a file system is read-only but a dir already exists anyway + +https://bugs.freedesktop.org/show_bug.cgi?id=90281 +(cherry picked from commit 7b135a73999b6911ebb85c053b6f7701fdac1883) + +Cherry-picked from: 7b135a7 +Resolves: #1222517 +--- + src/tmpfiles/tmpfiles.c | 17 +++++++++++------ + 1 file changed, 11 insertions(+), 6 deletions(-) + +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index 73a9c9d..d0e6567 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -1002,20 +1002,25 @@ static int create_item(Item *i) { + r = mkdir_label(i->path, i->mode); + + if (r < 0) { +- if (r != -EEXIST) +- return log_error_errno(r, "Failed to create directory or subvolume \"%s\": %m", i->path); ++ int k; + +- if (stat(i->path, &st) < 0) +- return log_error_errno(errno, "stat(%s) failed: %m", i->path); ++ if (r != -EEXIST && r != -EROFS) ++ return log_error_errno(r, "Failed to create directory or subvolume \"%s\": %m", i->path); + +- if (!S_ISDIR(st.st_mode)) { +- log_debug("\"%s\" already exists and is not a directory.", i->path); ++ k = is_dir(i->path, false); ++ if (k == -ENOENT && r == -EROFS) ++ return log_error_errno(r, "%s does not exist and cannot be created as the file system is read-only.", i->path); ++ if (k < 0) ++ return log_error_errno(k, "Failed to check if %s exists: %m", i->path); ++ if (!k) { ++ log_warning("\"%s\" already exists and is not a directory.", i->path); + return 0; + } + + creation = CREATION_EXISTING; + } else + creation = CREATION_NORMAL; ++ + log_debug("%s directory \"%s\".", creation_mode_verb_to_string(creation), i->path); + + r = path_set_perms(i, i->path); diff --git a/SOURCES/0207-logind-rework-session-shutdown-logic.patch b/SOURCES/0207-logind-rework-session-shutdown-logic.patch deleted file mode 100644 index b9387e2..0000000 --- a/SOURCES/0207-logind-rework-session-shutdown-logic.patch +++ /dev/null @@ -1,597 +0,0 @@ -From 553a962a570cade5c44953593209d25e28ec5145 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Mon, 3 Mar 2014 15:37:49 +0100 -Subject: [PATCH] logind: rework session shutdown logic - -Simplify the shutdown logic a bit: - -- Keep the session FIFO around in the PAM module, even after the session - shutdown hook has been finished. This allows logind to track precisely - when the PAM handler goes away. - -- In the ReleaseSession() call start a timer, that will stop terminate - the session when elapsed. - -- Never fiddle with the KillMode of scopes to configure whether user - processes should be killed or not. Instead, simply leave the scope - units around when we terminate a session whose processes should not be - killed. - -- When killing is enabled, stop the session scope on FIFO EOF or after - the ReleaseSession() timeout. When killing is disabled, simply tell - PID 1 to abandon the scope. - -Because the scopes stay around and hence all processes are always member -of a scope, the system shutdown logic should be more robust, as the -scopes can be shutdown as part of the usual shutdown logic. - -Based-on: 5f41d1f10fd97e93517b6a762b1bec247f4d1171 ---- - src/login/logind-dbus.c | 51 +++++++++++------- - src/login/logind-session.c | 130 +++++++++++++++++++++++++++++++++++---------- - src/login/logind-session.h | 4 ++ - src/login/logind-user.c | 23 +++++--- - src/login/logind-user.h | 1 + - src/login/logind.c | 23 ++++++-- - src/login/logind.h | 4 +- - src/login/pam-module.c | 11 ++-- - 8 files changed, 182 insertions(+), 65 deletions(-) - -diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c -index 69e94aa..8de301e 100644 ---- a/src/login/logind-dbus.c -+++ b/src/login/logind-dbus.c -@@ -1747,13 +1747,7 @@ static DBusHandlerResult manager_message_handler( - if (!session) - return bus_send_error_reply(connection, message, &error, -ENOENT); - -- /* We use the FIFO to detect stray sessions where the -- process invoking PAM dies abnormally. We need to make -- sure that that process is not killed if at the clean -- end of the session it closes the FIFO. Hence, with -- this call explicitly turn off the FIFO logic, so that -- the PAM code can finish clean up on its own */ -- session_remove_fifo(session); -+ session_release(session); - - reply = dbus_message_new_method_return(message); - if (!reply) -@@ -2551,7 +2545,6 @@ int manager_start_scope( - const char *slice, - const char *description, - const char *after, -- const char *kill_mode, - DBusError *error, - char **job) { - -@@ -2623,18 +2616,6 @@ int manager_start_scope( - return log_oom(); - } - -- if (!isempty(kill_mode)) { -- const char *kill_mode_property = "KillMode"; -- -- if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) || -- !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &kill_mode_property) || -- !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "s", &sub3) || -- !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_STRING, &kill_mode) || -- !dbus_message_iter_close_container(&sub2, &sub3) || -- !dbus_message_iter_close_container(&sub, &sub2)) -- return log_oom(); -- } -- - /* cgroup empty notification is not available in containers - * currently. To make this less problematic, let's shorten the - * stop timeout for sessions, so that we don't wait -@@ -2793,6 +2774,36 @@ int manager_stop_unit(Manager *manager, const char *unit, DBusError *error, char - return 1; - } - -+int manager_abandon_scope(Manager *manager, const char *scope, DBusError *error) { -+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL; -+ _cleanup_free_ char *path = NULL; -+ int r; -+ -+ assert(manager); -+ assert(scope); -+ -+ path = unit_dbus_path_from_name(scope); -+ if (!path) -+ return -ENOMEM; -+ -+ r = bus_method_call_with_reply( -+ manager->bus, -+ "org.freedesktop.systemd1", -+ path, -+ "org.freedesktop.systemd1.Scope", -+ "Abandon", -+ &reply, -+ error, -+ DBUS_TYPE_INVALID); -+ -+ if (r < 0) { -+ log_error("Failed to abandon scope %s", scope); -+ return r; -+ } -+ -+ return 1; -+} -+ - int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo, DBusError *error) { - _cleanup_dbus_message_unref_ DBusMessage *reply = NULL; - const char *w; -diff --git a/src/login/logind-session.c b/src/login/logind-session.c -index 27aa335..78e6d74 100644 ---- a/src/login/logind-session.c -+++ b/src/login/logind-session.c -@@ -24,6 +24,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -36,6 +37,8 @@ - #include "dbus-common.h" - #include "logind-session.h" - -+#define RELEASE_SEC 20 -+ - static unsigned devt_hash_func(const void *p) { - uint64_t u = *(const dev_t*)p; - -@@ -505,7 +508,6 @@ static int session_start_scope(Session *s) { - - if (!s->scope) { - _cleanup_free_ char *description = NULL; -- const char *kill_mode; - char *scope, *job; - - description = strjoin("Session ", s->id, " of user ", s->user->name, NULL); -@@ -516,9 +518,7 @@ static int session_start_scope(Session *s) { - if (!scope) - return log_oom(); - -- kill_mode = manager_shall_kill(s->manager, s->user->name) ? "control-group" : "none"; -- -- r = manager_start_scope(s->manager, scope, s->leader, s->user->slice, description, "systemd-user-sessions.service", kill_mode, &error, &job); -+ r = manager_start_scope(s->manager, scope, s->leader, s->user->slice, description, "systemd-logind.service", &error, &job); - if (r < 0) { - log_error("Failed to start session scope %s: %s %s", - scope, bus_error(&error, r), error.name); -@@ -579,23 +579,22 @@ int session_start(Session *s) { - - s->started = true; - -- /* Save session data */ -+ /* Save data */ - session_save(s); - user_save(s->user); -+ if (s->seat) -+ seat_save(s->seat); - -+ /* Send signals */ - session_send_signal(s, true); - - if (s->seat) { -- seat_save(s->seat); -- - if (s->seat->active == s) - seat_send_changed(s->seat, "Sessions\0ActiveSession\0"); - else - seat_send_changed(s->seat, "Sessions\0"); - } - -- user_send_changed(s->user, "Sessions\0"); -- - return 0; - } - -@@ -611,15 +610,24 @@ static int session_stop_scope(Session *s) { - if (!s->scope) - return 0; - -- r = manager_stop_unit(s->manager, s->scope, &error, &job); -- if (r < 0) { -- log_error("Failed to stop session scope: %s", bus_error(&error, r)); -- dbus_error_free(&error); -- return r; -- } -+ if (manager_shall_kill(s->manager, s->user->name)) { -+ r = manager_stop_unit(s->manager, s->scope, &error, &job); -+ if (r < 0) { -+ log_error("Failed to stop session scope: %s", bus_error(&error, r)); -+ dbus_error_free(&error); -+ return r; -+ } - -- free(s->scope_job); -- s->scope_job = job; -+ free(s->scope_job); -+ s->scope_job = job; -+ } else { -+ r = manager_abandon_scope(s->manager, s->scope, &error); -+ if (r < 0) { -+ log_error("Failed to abandon session scope: %s", bus_error(&error, r)); -+ dbus_error_free(&error); -+ return r; -+ } -+ } - - return 0; - } -@@ -644,6 +652,19 @@ static int session_unlink_x11_socket(Session *s) { - return r < 0 ? -errno : 0; - } - -+static void session_close_timer_fd(Session *s) { -+ assert(s); -+ -+ if (s->timer_fd <= 0) -+ return; -+ -+ hashmap_remove(s->manager->timer_fds, INT_TO_PTR(s->timer_fd + 1)); -+ epoll_ctl(s->manager->epoll_fd, EPOLL_CTL_DEL, s->timer_fd, NULL); -+ -+ close_nointr(s->timer_fd); -+ s->timer_fd = -1; -+} -+ - int session_stop(Session *s) { - int r; - -@@ -652,11 +673,18 @@ int session_stop(Session *s) { - if (!s->user) - return -ESTALE; - -+ session_close_timer_fd(s); -+ -+ /* We are going down, don't care about FIFOs anymore */ -+ session_remove_fifo(s); -+ - /* Kill cgroup */ - r = session_stop_scope(s); - - session_save(s); - -+ s->stopping = true; -+ - return r; - } - -@@ -678,6 +706,8 @@ int session_finalize(Session *s) { - "MESSAGE=Removed session %s.", s->id, - NULL); - -+ session_close_timer_fd(s); -+ - /* Kill session devices */ - while ((sd = hashmap_first(s->devices))) - session_device_free(sd); -@@ -698,16 +728,64 @@ int session_finalize(Session *s) { - if (s->seat->active == s) - seat_set_active(s->seat, NULL); - -- seat_send_changed(s->seat, "Sessions\0"); - seat_save(s->seat); -+ seat_send_changed(s->seat, "Sessions\0"); - } - -- user_send_changed(s->user, "Sessions\0"); - user_save(s->user); -+ user_send_changed(s->user, "Sessions\0"); - - return r; - } - -+void session_release(Session *s) { -+ int r; -+ -+ struct itimerspec its = { .it_value.tv_sec = RELEASE_SEC }; -+ struct epoll_event ev = {}; -+ -+ assert(s); -+ -+ if (!s->started || s->stopping) -+ return; -+ -+ if (s->timer_fd >= 0) -+ return; -+ -+ s->timer_fd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK|TFD_CLOEXEC); -+ if (s->timer_fd < 0) { -+ log_error("Failed to create session release timer fd"); -+ goto out; -+ } -+ -+ r = hashmap_put(s->manager->timer_fds, INT_TO_PTR(s->timer_fd + 1), s); -+ if (r < 0) { -+ log_error("Failed to store session release timer fd"); -+ goto out; -+ } -+ -+ ev.events = EPOLLONESHOT; -+ ev.data.u32 = FD_OTHER_BASE + s->timer_fd; -+ -+ r = epoll_ctl(s->manager->epoll_fd, EPOLL_CTL_ADD, s->timer_fd, &ev); -+ if (r < 0) { -+ log_error("Failed to add session release timer fd to epoll instance"); -+ goto out; -+ } -+ -+ r = timerfd_settime(s->timer_fd, TFD_TIMER_ABSTIME, &its, NULL); -+ if (r < 0) { -+ log_error("Failed to arm timer : %m"); -+ goto out; -+ } -+ -+out: -+ if (s->timer_fd >= 0) { -+ close_nointr(s->timer_fd); -+ s->timer_fd = -1; -+ } -+} -+ - bool session_is_active(Session *s) { - assert(s); - -@@ -904,8 +982,6 @@ void session_remove_fifo(Session *s) { - } - - int session_check_gc(Session *s, bool drop_not_started) { -- int r; -- - assert(s); - - if (drop_not_started && !s->started) -@@ -915,11 +991,7 @@ int session_check_gc(Session *s, bool drop_not_started) { - return 0; - - if (s->fifo_fd >= 0) { -- r = pipe_eof(s->fifo_fd); -- if (r < 0) -- return r; -- -- if (r == 0) -+ if (pipe_eof(s->fifo_fd) <= 0) - return 1; - } - -@@ -945,15 +1017,15 @@ void session_add_to_gc_queue(Session *s) { - SessionState session_get_state(Session *s) { - assert(s); - -+ if (s->stopping || s->timer_fd >= 0) -+ return SESSION_CLOSING; -+ - if (s->closing) - return SESSION_CLOSING; - - if (s->scope_job) - return SESSION_OPENING; - -- if (s->fifo_fd < 0) -- return SESSION_CLOSING; -- - if (session_is_active(s)) - return SESSION_ACTIVE; - -diff --git a/src/login/logind-session.h b/src/login/logind-session.h -index f175a89..9b76582 100644 ---- a/src/login/logind-session.h -+++ b/src/login/logind-session.h -@@ -98,11 +98,14 @@ struct Session { - int fifo_fd; - char *fifo_path; - -+ int timer_fd; -+ - bool idle_hint; - dual_timestamp idle_hint_timestamp; - - bool in_gc_queue:1; - bool started:1; -+ bool stopping:1; - bool closing:1; - - DBusMessage *create_message; -@@ -130,6 +133,7 @@ void session_remove_fifo(Session *s); - int session_start(Session *s); - int session_stop(Session *s); - int session_finalize(Session *s); -+void session_release(Session *s); - int session_save(Session *s); - int session_load(Session *s); - int session_kill(Session *s, KillWho who, int signo); -diff --git a/src/login/logind-user.c b/src/login/logind-user.c -index 8e7256b..653574e 100644 ---- a/src/login/logind-user.c -+++ b/src/login/logind-user.c -@@ -487,6 +487,8 @@ int user_stop(User *u) { - if (k < 0) - r = k; - -+ u->stopping = true; -+ - user_save(u); - - return r; -@@ -602,22 +604,27 @@ void user_add_to_gc_queue(User *u) { - - UserState user_get_state(User *u) { - Session *i; -- bool all_closing = true; - - assert(u); - -+ if (u->stopping) -+ return USER_CLOSING; -+ - if (u->slice_job || u->service_job) - return USER_OPENING; - -- LIST_FOREACH(sessions_by_user, i, u->sessions) { -- if (session_is_active(i)) -- return USER_ACTIVE; -- if (session_get_state(i) != SESSION_CLOSING) -- all_closing = false; -- } -+ if (u->sessions) { -+ bool all_closing = true; -+ -+ LIST_FOREACH(sessions_by_user, i, u->sessions) { -+ if (session_is_active(i)) -+ return USER_ACTIVE; -+ if (session_get_state(i) != SESSION_CLOSING) -+ all_closing = false; -+ } - -- if (u->sessions) - return all_closing ? USER_CLOSING : USER_ONLINE; -+ } - - if (user_check_linger_file(u) > 0) - return USER_LINGERING; -diff --git a/src/login/logind-user.h b/src/login/logind-user.h -index a36f456..a12532e 100644 ---- a/src/login/logind-user.h -+++ b/src/login/logind-user.h -@@ -61,6 +61,7 @@ struct User { - - bool in_gc_queue:1; - bool started:1; -+ bool stopping:1; - - LIST_HEAD(Session, sessions); - LIST_FIELDS(User, gc_queue); -diff --git a/src/login/logind.c b/src/login/logind.c -index 0628032..5180be7 100644 ---- a/src/login/logind.c -+++ b/src/login/logind.c -@@ -80,10 +80,11 @@ Manager *manager_new(void) { - m->session_fds = hashmap_new(trivial_hash_func, trivial_compare_func); - m->inhibitor_fds = hashmap_new(trivial_hash_func, trivial_compare_func); - m->button_fds = hashmap_new(trivial_hash_func, trivial_compare_func); -+ m->timer_fds = hashmap_new(trivial_hash_func, trivial_compare_func); - - if (!m->devices || !m->seats || !m->sessions || !m->users || !m->inhibitors || !m->buttons || !m->busnames || - !m->user_units || !m->session_units || -- !m->session_fds || !m->inhibitor_fds || !m->button_fds) { -+ !m->session_fds || !m->inhibitor_fds || !m->button_fds || !m->timer_fds) { - manager_free(m); - return NULL; - } -@@ -149,6 +150,7 @@ void manager_free(Manager *m) { - hashmap_free(m->session_fds); - hashmap_free(m->inhibitor_fds); - hashmap_free(m->button_fds); -+ hashmap_free(m->timer_fds); - - if (m->console_active_fd >= 0) - close_nointr_nofail(m->console_active_fd); -@@ -620,6 +622,13 @@ static void manager_dispatch_other(Manager *m, int fd) { - return; - } - -+ s = hashmap_get(m->timer_fds, INT_TO_PTR(fd + 1)); -+ if (s) { -+ assert(s->timer_fd == fd); -+ session_stop(s); -+ return; -+ } -+ - i = hashmap_get(m->inhibitor_fds, INT_TO_PTR(fd + 1)); - if (i) { - assert(i->fifo_fd == fd); -@@ -942,8 +951,12 @@ void manager_gc(Manager *m, bool drop_not_started) { - LIST_REMOVE(Session, gc_queue, m->session_gc_queue, session); - session->in_gc_queue = false; - -- if (session_check_gc(session, drop_not_started) == 0) { -+ /* First, if we are not closing yet, initiate stopping */ -+ if (!session_check_gc(session, drop_not_started) && -+ session_get_state(session) != SESSION_CLOSING) - session_stop(session); -+ -+ if (!session_check_gc(session, drop_not_started)) { - session_finalize(session); - session_free(session); - } -@@ -953,8 +966,11 @@ void manager_gc(Manager *m, bool drop_not_started) { - LIST_REMOVE(User, gc_queue, m->user_gc_queue, user); - user->in_gc_queue = false; - -- if (user_check_gc(user, drop_not_started) == 0) { -+ if (!user_check_gc(user, drop_not_started) && -+ user_get_state(user) != USER_CLOSING) - user_stop(user); -+ -+ if (!user_check_gc(user, drop_not_started)) { - user_finalize(user); - user_free(user); - } -@@ -1032,6 +1048,7 @@ finish: - - return r; - } -+ - int manager_startup(Manager *m) { - int r; - Seat *seat; -diff --git a/src/login/logind.h b/src/login/logind.h -index 9e6296c..0d2248f 100644 ---- a/src/login/logind.h -+++ b/src/login/logind.h -@@ -88,6 +88,7 @@ struct Manager { - Hashmap *session_fds; - Hashmap *inhibitor_fds; - Hashmap *button_fds; -+ Hashmap *timer_fds; - - usec_t inhibit_delay_max; - -@@ -183,9 +184,10 @@ int manager_send_changed(Manager *manager, const char *properties); - - int manager_dispatch_delayed(Manager *manager); - --int manager_start_scope(Manager *manager, const char *scope, pid_t pid, const char *slice, const char *description, const char *after, const char *kill_mode, DBusError *error, char **job); -+int manager_start_scope(Manager *manager, const char *scope, pid_t pid, const char *slice, const char *description, const char *after, DBusError *error, char **job); - int manager_start_unit(Manager *manager, const char *unit, DBusError *error, char **job); - int manager_stop_unit(Manager *manager, const char *unit, DBusError *error, char **job); -+int manager_abandon_scope(Manager *manager, const char *scope, DBusError *error); - int manager_kill_unit(Manager *manager, const char *unit, KillWho who, int signo, DBusError *error); - int manager_unit_is_active(Manager *manager, const char *unit); - -diff --git a/src/login/pam-module.c b/src/login/pam-module.c -index 22d9733..7bd4783 100644 ---- a/src/login/pam-module.c -+++ b/src/login/pam-module.c -@@ -478,7 +478,7 @@ _public_ PAM_EXTERN int pam_sm_close_session( - int flags, - int argc, const char **argv) { - -- const void *p = NULL, *existing = NULL; -+ const void *existing = NULL; - const char *id; - DBusConnection *bus = NULL; - DBusMessage *m = NULL, *reply = NULL; -@@ -535,12 +535,15 @@ _public_ PAM_EXTERN int pam_sm_close_session( - } - } - -+ -+ /* Note that we are knowingly leaking the FIFO fd here. This -+ * way, logind can watch us die. If we closed it here it would -+ * not have any clue when that is completed. Given that one -+ * cannot really have multiple PAM sessions open from the same -+ * process this means we will leak one FD at max. */ - r = PAM_SUCCESS; - - finish: -- pam_get_data(handle, "systemd.session-fd", &p); -- if (p) -- close_nointr(PTR_TO_INT(p) - 1); - - dbus_error_free(&error); - diff --git a/SOURCES/0207-resolved-fix-crash-when-shutting-down.patch b/SOURCES/0207-resolved-fix-crash-when-shutting-down.patch new file mode 100644 index 0000000..c635021 --- /dev/null +++ b/SOURCES/0207-resolved-fix-crash-when-shutting-down.patch @@ -0,0 +1,148 @@ +From c724e008771aaaed70f909cb28fdcab1c9244d22 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 18 May 2015 23:23:17 +0200 +Subject: [PATCH] resolved: fix crash when shutting down +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Reported by Cristian Rodríguez + +http://lists.freedesktop.org/archives/systemd-devel/2015-May/031626.html +(cherry picked from commit cab5b05903096e1c9cf5575ccc73f89d15c8db69) + +Cherry-picked from: cab5b05 +Resolves: #1222517 +--- + src/resolve/resolved-dns-cache.c | 4 +--- + src/resolve/resolved-dns-server.c | 15 ++++++++------- + src/resolve/resolved-link.c | 6 +++--- + src/resolve/resolved-manager.c | 4 ++-- + src/shared/prioq.c | 6 ++++-- + src/shared/prioq.h | 2 +- + 6 files changed, 19 insertions(+), 18 deletions(-) + +diff --git a/src/resolve/resolved-dns-cache.c b/src/resolve/resolved-dns-cache.c +index 33ca4d1..874207c 100644 +--- a/src/resolve/resolved-dns-cache.c ++++ b/src/resolve/resolved-dns-cache.c +@@ -93,9 +93,7 @@ void dns_cache_flush(DnsCache *c) { + + hashmap_free(c->by_key); + c->by_key = NULL; +- +- prioq_free(c->by_expiry); +- c->by_expiry = NULL; ++ c->by_expiry = prioq_free(c->by_expiry); + } + + static void dns_cache_remove(DnsCache *c, DnsResourceKey *key) { +diff --git a/src/resolve/resolved-dns-server.c b/src/resolve/resolved-dns-server.c +index caf06fe..9a62a63 100644 +--- a/src/resolve/resolved-dns-server.c ++++ b/src/resolve/resolved-dns-server.c +@@ -78,23 +78,24 @@ DnsServer* dns_server_free(DnsServer *s) { + if (!s) + return NULL; + +- if (s->manager) { ++ if (s->link) { + if (s->type == DNS_SERVER_LINK) + LIST_REMOVE(servers, s->link->dns_servers, s); +- else if (s->type == DNS_SERVER_SYSTEM) ++ ++ if (s->link->current_dns_server == s) ++ link_set_dns_server(s->link, NULL); ++ } ++ ++ if (s->manager) { ++ if (s->type == DNS_SERVER_SYSTEM) + LIST_REMOVE(servers, s->manager->dns_servers, s); + else if (s->type == DNS_SERVER_FALLBACK) + LIST_REMOVE(servers, s->manager->fallback_dns_servers, s); +- else +- assert_not_reached("Unknown server type"); + + if (s->manager->current_dns_server == s) + manager_set_dns_server(s->manager, NULL); + } + +- if (s->link && s->link->current_dns_server == s) +- link_set_dns_server(s->link, NULL); +- + free(s); + + return NULL; +diff --git a/src/resolve/resolved-link.c b/src/resolve/resolved-link.c +index f94e4bb..27d9129 100644 +--- a/src/resolve/resolved-link.c ++++ b/src/resolve/resolved-link.c +@@ -68,13 +68,13 @@ Link *link_free(Link *l) { + if (l->manager) + hashmap_remove(l->manager->links, INT_TO_PTR(l->ifindex)); + ++ while (l->dns_servers) ++ dns_server_free(l->dns_servers); ++ + dns_scope_free(l->unicast_scope); + dns_scope_free(l->llmnr_ipv4_scope); + dns_scope_free(l->llmnr_ipv6_scope); + +- while (l->dns_servers) +- dns_server_free(l->dns_servers); +- + free(l); + return NULL; + } +diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c +index b5ad701..7c253aa 100644 +--- a/src/resolve/resolved-manager.c ++++ b/src/resolve/resolved-manager.c +@@ -536,11 +536,11 @@ Manager *manager_free(Manager *m) { + while (m->dns_queries) + dns_query_free(m->dns_queries); + +- dns_scope_free(m->unicast_scope); +- + manager_flush_dns_servers(m, DNS_SERVER_SYSTEM); + manager_flush_dns_servers(m, DNS_SERVER_FALLBACK); + ++ dns_scope_free(m->unicast_scope); ++ + hashmap_free(m->links); + hashmap_free(m->dns_transactions); + +diff --git a/src/shared/prioq.c b/src/shared/prioq.c +index 8af4c51..b89888b 100644 +--- a/src/shared/prioq.c ++++ b/src/shared/prioq.c +@@ -45,12 +45,14 @@ Prioq *prioq_new(compare_func_t compare_func) { + return q; + } + +-void prioq_free(Prioq *q) { ++Prioq* prioq_free(Prioq *q) { + if (!q) +- return; ++ return NULL; + + free(q->items); + free(q); ++ ++ return NULL; + } + + int prioq_ensure_allocated(Prioq **q, compare_func_t compare_func) { +diff --git a/src/shared/prioq.h b/src/shared/prioq.h +index d836b36..1c044b1 100644 +--- a/src/shared/prioq.h ++++ b/src/shared/prioq.h +@@ -28,7 +28,7 @@ typedef struct Prioq Prioq; + #define PRIOQ_IDX_NULL ((unsigned) -1) + + Prioq *prioq_new(compare_func_t compare); +-void prioq_free(Prioq *q); ++Prioq *prioq_free(Prioq *q); + int prioq_ensure_allocated(Prioq **q, compare_func_t compare_func); + + int prioq_put(Prioq *q, void *data, unsigned *idx); diff --git a/SOURCES/0208-logind-order-all-scopes-after-both-systemd-logind.se.patch b/SOURCES/0208-logind-order-all-scopes-after-both-systemd-logind.se.patch deleted file mode 100644 index 53803da..0000000 --- a/SOURCES/0208-logind-order-all-scopes-after-both-systemd-logind.se.patch +++ /dev/null @@ -1,87 +0,0 @@ -From 10c5a4fec72a42369af812769802be974af3a012 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Mon, 3 Mar 2014 16:07:39 +0100 -Subject: [PATCH] logind: order all scopes after both systemd-logind.service - and systemd-user-sessions.service - -This way at shutdown we can be sure that the sessions go away before the -network. - -Based-on: ba4c5d93b73ef7bba0ae0c6bf2b36a42360f7a34 ---- - src/login/logind-dbus.c | 17 ++++++++++++++--- - src/login/logind-session.c | 2 +- - src/login/logind.h | 2 +- - 3 files changed, 16 insertions(+), 5 deletions(-) - -diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c -index 8de301e..a68e9b4 100644 ---- a/src/login/logind-dbus.c -+++ b/src/login/logind-dbus.c -@@ -2545,10 +2545,11 @@ int manager_start_scope( - const char *slice, - const char *description, - const char *after, -+ const char *after2, - DBusError *error, - char **job) { - -- const char *timeout_stop_property = "TimeoutStopUSec", *send_sighup_property = "SendSIGHUP", *pids_property = "PIDs"; -+ const char *timeout_stop_property = "TimeoutStopUSec", *send_sighup_property = "SendSIGHUP", *pids_property = "PIDs", *after_property = "After"; - _cleanup_dbus_message_unref_ DBusMessage *m = NULL, *reply = NULL; - DBusMessageIter iter, sub, sub2, sub3, sub4; - uint64_t timeout = 500 * USEC_PER_MSEC; -@@ -2603,8 +2604,6 @@ int manager_start_scope( - } - - if (!isempty(after)) { -- const char *after_property = "After"; -- - if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) || - !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &after_property) || - !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "as", &sub3) || -@@ -2616,6 +2615,18 @@ int manager_start_scope( - return log_oom(); - } - -+ if (!isempty(after2)) { -+ if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) || -+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &after_property) || -+ !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "as", &sub3) || -+ !dbus_message_iter_open_container(&sub3, DBUS_TYPE_ARRAY, "s", &sub4) || -+ !dbus_message_iter_append_basic(&sub4, DBUS_TYPE_STRING, &after2) || -+ !dbus_message_iter_close_container(&sub3, &sub4) || -+ !dbus_message_iter_close_container(&sub2, &sub3) || -+ !dbus_message_iter_close_container(&sub, &sub2)) -+ return log_oom(); -+ } -+ - /* cgroup empty notification is not available in containers - * currently. To make this less problematic, let's shorten the - * stop timeout for sessions, so that we don't wait -diff --git a/src/login/logind-session.c b/src/login/logind-session.c -index 78e6d74..2bac0a2 100644 ---- a/src/login/logind-session.c -+++ b/src/login/logind-session.c -@@ -518,7 +518,7 @@ static int session_start_scope(Session *s) { - if (!scope) - return log_oom(); - -- r = manager_start_scope(s->manager, scope, s->leader, s->user->slice, description, "systemd-logind.service", &error, &job); -+ r = manager_start_scope(s->manager, scope, s->leader, s->user->slice, description, "systemd-logind.service", "systemd-user-session.service", &error, &job); - if (r < 0) { - log_error("Failed to start session scope %s: %s %s", - scope, bus_error(&error, r), error.name); -diff --git a/src/login/logind.h b/src/login/logind.h -index 0d2248f..540572f 100644 ---- a/src/login/logind.h -+++ b/src/login/logind.h -@@ -184,7 +184,7 @@ int manager_send_changed(Manager *manager, const char *properties); - - int manager_dispatch_delayed(Manager *manager); - --int manager_start_scope(Manager *manager, const char *scope, pid_t pid, const char *slice, const char *description, const char *after, DBusError *error, char **job); -+int manager_start_scope(Manager *manager, const char *scope, pid_t pid, const char *slice, const char *description, const char *after, const char *after2, DBusError *error, char **job); - int manager_start_unit(Manager *manager, const char *unit, DBusError *error, char **job); - int manager_stop_unit(Manager *manager, const char *unit, DBusError *error, char **job); - int manager_abandon_scope(Manager *manager, const char *scope, DBusError *error); diff --git a/SOURCES/0208-resolved-allow-DnsAnswer-objects-with-no-space-for-R.patch b/SOURCES/0208-resolved-allow-DnsAnswer-objects-with-no-space-for-R.patch new file mode 100644 index 0000000..64d5902 --- /dev/null +++ b/SOURCES/0208-resolved-allow-DnsAnswer-objects-with-no-space-for-R.patch @@ -0,0 +1,30 @@ +From d5b06145261637bcb69c1a213874cce10918a189 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 18 May 2015 23:38:47 +0200 +Subject: [PATCH] resolved: allow DnsAnswer objects with no space for RRs + +They might be created as result of merged answer sets, hence accept +them. + +http://lists.freedesktop.org/archives/systemd-devel/2015-April/030834.html +(cherry picked from commit 084cea6cee1471d81e078bea4e7ee5f50a5dc009) + +Cherry-picked from: 084cea6 +Resolves: #1222517 +--- + src/resolve/resolved-dns-answer.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/src/resolve/resolved-dns-answer.c b/src/resolve/resolved-dns-answer.c +index 7c4ab18..e08eb66 100644 +--- a/src/resolve/resolved-dns-answer.c ++++ b/src/resolve/resolved-dns-answer.c +@@ -25,8 +25,6 @@ + DnsAnswer *dns_answer_new(unsigned n) { + DnsAnswer *a; + +- assert(n > 0); +- + a = malloc0(offsetof(DnsAnswer, rrs) + sizeof(DnsResourceRecord*) * n); + if (!a) + return NULL; diff --git a/SOURCES/0209-id128-add-new-sd_id128_is_null-call.patch b/SOURCES/0209-id128-add-new-sd_id128_is_null-call.patch new file mode 100644 index 0000000..1801a9a --- /dev/null +++ b/SOURCES/0209-id128-add-new-sd_id128_is_null-call.patch @@ -0,0 +1,28 @@ +From 69c2ae8ed9bb861a0bc47ce553b1749390009036 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 24 Feb 2015 00:10:35 +0100 +Subject: [PATCH] id128: add new sd_id128_is_null() call + +(cherry picked from commit 15e80c7b75c3a3188bfaaa0baddccf31ae661a7a) + +Cherry-picked from: 15e80c7 +Resolves: #1222517 +--- + src/systemd/sd-id128.h | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/systemd/sd-id128.h b/src/systemd/sd-id128.h +index 48fd876..9f44527 100644 +--- a/src/systemd/sd-id128.h ++++ b/src/systemd/sd-id128.h +@@ -106,6 +106,10 @@ _sd_pure_ static inline int sd_id128_equal(sd_id128_t a, sd_id128_t b) { + return memcmp(&a, &b, 16) == 0; + } + ++_sd_pure_ static inline int sd_id128_is_null(sd_id128_t a) { ++ return a.qwords[0] == 0 && a.qwords[1] == 0; ++} ++ + #define SD_ID128_NULL ((const sd_id128_t) { .qwords = { 0, 0 }}) + + _SD_END_DECLARATIONS; diff --git a/SOURCES/0209-logind-given-that-we-can-now-relatively-safely-shutd.patch b/SOURCES/0209-logind-given-that-we-can-now-relatively-safely-shutd.patch deleted file mode 100644 index 547f5bf..0000000 --- a/SOURCES/0209-logind-given-that-we-can-now-relatively-safely-shutd.patch +++ /dev/null @@ -1,43 +0,0 @@ -From adc1b71d84ab8b618c623749f43dc6350d75de6b Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Tue, 4 Mar 2014 17:00:54 +0100 -Subject: [PATCH] logind: given that we can now relatively safely shutdown - sessions copes without working cgroup empty notifications there's no need to - set the stop timeout of sessions scopes low - -Based-on: a50df72b37ce2a7caf7775c70d18c3f9504b9e80 ---- - src/login/logind-dbus.c | 11 +---------- - 1 file changed, 1 insertion(+), 10 deletions(-) - -diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c -index a68e9b4..6cabb7b 100644 ---- a/src/login/logind-dbus.c -+++ b/src/login/logind-dbus.c -@@ -2549,10 +2549,9 @@ int manager_start_scope( - DBusError *error, - char **job) { - -- const char *timeout_stop_property = "TimeoutStopUSec", *send_sighup_property = "SendSIGHUP", *pids_property = "PIDs", *after_property = "After"; -+ const char *send_sighup_property = "SendSIGHUP", *pids_property = "PIDs", *after_property = "After"; - _cleanup_dbus_message_unref_ DBusMessage *m = NULL, *reply = NULL; - DBusMessageIter iter, sub, sub2, sub3, sub4; -- uint64_t timeout = 500 * USEC_PER_MSEC; - dbus_bool_t send_sighup = true; - const char *fail = "fail"; - uint32_t u; -@@ -2632,14 +2631,6 @@ int manager_start_scope( - * stop timeout for sessions, so that we don't wait - * forever. */ - -- if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) || -- !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &timeout_stop_property) || -- !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "t", &sub3) || -- !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_UINT64, &timeout) || -- !dbus_message_iter_close_container(&sub2, &sub3) || -- !dbus_message_iter_close_container(&sub, &sub2)) -- return log_oom(); -- - /* Make sure that the session shells are terminated with - * SIGHUP since bash and friends tend to ignore SIGTERM */ - if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) || diff --git a/SOURCES/0210-journalctl-Improve-boot-ID-lookup.patch b/SOURCES/0210-journalctl-Improve-boot-ID-lookup.patch new file mode 100644 index 0000000..b1c78f9 --- /dev/null +++ b/SOURCES/0210-journalctl-Improve-boot-ID-lookup.patch @@ -0,0 +1,403 @@ +From 99ea430346f3f8ffba504cd3de1a269ab4eac8e6 Mon Sep 17 00:00:00 2001 +From: Jan Janssen +Date: Fri, 1 May 2015 15:15:16 +0200 +Subject: [PATCH] journalctl: Improve boot ID lookup + +This method should greatly improve offset based lookup, by simply jumping +from one boot to the next boot. It starts at the journal head to get the +a boot ID, makes a _BOOT_ID match and then comes from the opposite +journal direction (tail) to get to the end that boot. After flushing the matches +and advancing the journal from that exact position, we arrive at the start +of next boot. Rinse and repeat. + +This is faster than the old method of aggregating the full boot listing just +so we can jump to a specific boot, which can be a real pain on big journals +just for a mere "-b -1" case. + +As an additional benefit --list-boots should improve slightly too, because +it does less seeking. + +Note that there can be a change in boot order with this lookup method +because it will use the order of boots in the journal, not the realtime stamp +stored in them. That's arguably better, though. +Another deficiency is that it will get confused with boots interleaving in the +journal, therefore, it will refuse operation in --merge, --file and --directory mode. + +https://bugs.freedesktop.org/show_bug.cgi?id=72601 +(cherry picked from commit 596a23293d28f93843aef86721b90043e74d3081) + +Cherry-picked from: 596a232 +Resolves: #1222517 +--- + src/journal/journalctl.c | 275 ++++++++++++++++++++++++++++++----------------- + 1 file changed, 174 insertions(+), 101 deletions(-) + +diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c +index 12c869f..c26cc00 100644 +--- a/src/journal/journalctl.c ++++ b/src/journal/journalctl.c +@@ -131,6 +131,7 @@ typedef struct boot_id_t { + sd_id128_t id; + uint64_t first; + uint64_t last; ++ LIST_FIELDS(struct boot_id_t, boot_list); + } boot_id_t; + + static void pager_open_if_enabled(void) { +@@ -735,6 +736,11 @@ static int parse_argv(int argc, char *argv[]) { + return -EINVAL; + } + ++ if ((arg_boot || arg_action == ACTION_LIST_BOOTS) && (arg_file || arg_directory || arg_merge)) { ++ log_error("Using --boot or --list-boots with --file, --directory or --merge is not supported."); ++ return -EINVAL; ++ } ++ + return 1; + } + +@@ -854,111 +860,203 @@ static int add_matches(sd_journal *j, char **args) { + return 0; + } + +-static int boot_id_cmp(const void *a, const void *b) { +- uint64_t _a, _b; ++static int discover_next_boot(sd_journal *j, ++ boot_id_t **boot, ++ bool advance_older, ++ bool read_realtime) { ++ int r; ++ char match[9+32+1] = "_BOOT_ID="; ++ _cleanup_free_ boot_id_t *next_boot = NULL; + +- _a = ((const boot_id_t *)a)->first; +- _b = ((const boot_id_t *)b)->first; ++ assert(j); ++ assert(boot); + +- return _a < _b ? -1 : (_a > _b ? 1 : 0); +-} ++ /* We expect the journal to be on the last position of a boot ++ * (in relation to the direction we are going), so that the next ++ * invocation of sd_journal_next/previous will be from a different ++ * boot. We then collect any information we desire and then jump ++ * to the last location of the new boot by using a _BOOT_ID match ++ * coming from the other journal direction. */ + +-static int get_boots(sd_journal *j, +- boot_id_t **boots, +- unsigned int *count, +- boot_id_t *query_ref_boot) { +- int r; +- const void *data; +- size_t length, allocated = 0; ++ /* Make sure we aren't restricted by any _BOOT_ID matches, so that ++ * we can actually advance to a *different* boot. */ ++ sd_journal_flush_matches(j); + +- assert(j); +- assert(boots); +- assert(count); ++ if (advance_older) ++ r = sd_journal_previous(j); ++ else ++ r = sd_journal_next(j); ++ if (r < 0) ++ return r; ++ else if (r == 0) ++ return 0; /* End of journal, yay. */ ++ ++ next_boot = new0(boot_id_t, 1); ++ if (!next_boot) ++ return log_oom(); + +- r = sd_journal_query_unique(j, "_BOOT_ID"); ++ r = sd_journal_get_monotonic_usec(j, NULL, &next_boot->id); + if (r < 0) + return r; + +- *count = 0; +- SD_JOURNAL_FOREACH_UNIQUE(j, data, length) { +- boot_id_t *id; ++ if (read_realtime) { ++ r = sd_journal_get_realtime_usec(j, &next_boot->first); ++ if (r < 0) ++ return r; ++ } + +- assert(startswith(data, "_BOOT_ID=")); ++ /* Now seek to the last occurrence of this boot ID. */ ++ sd_id128_to_string(next_boot->id, match + 9); ++ r = sd_journal_add_match(j, match, sizeof(match) - 1); ++ if (r < 0) ++ return r; + +- if (!GREEDY_REALLOC(*boots, allocated, *count + 1)) +- return log_oom(); ++ if (advance_older) ++ r = sd_journal_seek_head(j); ++ else ++ r = sd_journal_seek_tail(j); ++ if (r < 0) ++ return r; + +- id = *boots + *count; ++ if (advance_older) ++ r = sd_journal_next(j); ++ else ++ r = sd_journal_previous(j); ++ if (r < 0) ++ return r; ++ else if (r == 0) ++ return -ENODATA; /* This shouldn't happen. We just came from this very boot ID. */ + +- r = sd_id128_from_string(((const char *)data) + strlen("_BOOT_ID="), &id->id); ++ if (read_realtime) { ++ r = sd_journal_get_realtime_usec(j, &next_boot->last); + if (r < 0) +- continue; ++ return r; ++ } ++ ++ *boot = next_boot; ++ next_boot = NULL; ++ return 0; ++} ++ ++static int get_boots(sd_journal *j, ++ boot_id_t **boots, ++ boot_id_t *query_ref_boot, ++ int ref_boot_offset) { ++ bool skip_once; ++ int r, count = 0; ++ boot_id_t *head = NULL, *tail = NULL; ++ const bool advance_older = query_ref_boot && ref_boot_offset <= 0; ++ ++ assert(j); ++ ++ /* Adjust for the asymmetry that offset 0 is ++ * the last (and current) boot, while 1 is considered the ++ * (chronological) first boot in the journal. */ ++ skip_once = query_ref_boot && sd_id128_is_null(query_ref_boot->id) && ref_boot_offset < 0; ++ ++ /* Advance to the earliest/latest occurrence of our reference ++ * boot ID (taking our lookup direction into account), so that ++ * discover_next_boot() can do its job. ++ * If no reference is given, the journal head/tail will do, ++ * they're "virtual" boots after all. */ ++ if (query_ref_boot && !sd_id128_is_null(query_ref_boot->id)) { ++ char match[9+32+1] = "_BOOT_ID="; ++ ++ sd_journal_flush_matches(j); + +- r = sd_journal_add_match(j, data, length); ++ sd_id128_to_string(query_ref_boot->id, match + 9); ++ r = sd_journal_add_match(j, match, sizeof(match) - 1); + if (r < 0) + return r; + +- r = sd_journal_seek_head(j); ++ if (advance_older) ++ r = sd_journal_seek_head(j); ++ else ++ r = sd_journal_seek_tail(j); + if (r < 0) + return r; + +- r = sd_journal_next(j); ++ if (advance_older) ++ r = sd_journal_next(j); ++ else ++ r = sd_journal_previous(j); + if (r < 0) + return r; + else if (r == 0) +- goto flush; +- +- r = sd_journal_get_realtime_usec(j, &id->first); ++ goto finish; ++ else if (ref_boot_offset == 0) { ++ count = 1; ++ goto finish; ++ } ++ } else { ++ if (advance_older) ++ r = sd_journal_seek_tail(j); ++ else ++ r = sd_journal_seek_head(j); + if (r < 0) + return r; + +- if (query_ref_boot) { +- id->last = 0; +- if (sd_id128_equal(id->id, query_ref_boot->id)) +- *query_ref_boot = *id; +- } else { +- r = sd_journal_seek_tail(j); +- if (r < 0) +- return r; ++ /* No sd_journal_next/previous here. */ ++ } + +- r = sd_journal_previous(j); +- if (r < 0) +- return r; +- else if (r == 0) +- goto flush; ++ while (true) { ++ _cleanup_free_ boot_id_t *current = NULL; + +- r = sd_journal_get_realtime_usec(j, &id->last); +- if (r < 0) +- return r; ++ r = discover_next_boot(j, ¤t, advance_older, !query_ref_boot); ++ if (r < 0) { ++ boot_id_t *id, *id_next; ++ LIST_FOREACH_SAFE(boot_list, id, id_next, head) ++ free(id); ++ return r; + } + +- (*count)++; +- flush: +- sd_journal_flush_matches(j); ++ if (!current) ++ break; ++ ++ if (query_ref_boot) { ++ if (!skip_once) ++ ref_boot_offset += advance_older ? 1 : -1; ++ skip_once = false; ++ ++ if (ref_boot_offset == 0) { ++ count = 1; ++ query_ref_boot->id = current->id; ++ break; ++ } ++ } else { ++ LIST_INSERT_AFTER(boot_list, head, tail, current); ++ tail = current; ++ current = NULL; ++ count++; ++ } + } + +- qsort_safe(*boots, *count, sizeof(boot_id_t), boot_id_cmp); +- return 0; ++finish: ++ if (boots) ++ *boots = head; ++ ++ sd_journal_flush_matches(j); ++ ++ return count; + } + + static int list_boots(sd_journal *j) { +- int r, w, i; +- unsigned int count; +- boot_id_t *id; +- _cleanup_free_ boot_id_t *all_ids = NULL; ++ int w, i, count; ++ boot_id_t *id, *id_next, *all_ids; + + assert(j); + +- r = get_boots(j, &all_ids, &count, NULL); +- if (r < 0) +- return r; ++ count = get_boots(j, &all_ids, NULL, 0); ++ if (count <= 0) ++ return count; + + pager_open_if_enabled(); + + /* numbers are one less, but we need an extra char for the sign */ + w = DECIMAL_STR_WIDTH(count - 1) + 1; + +- for (id = all_ids, i = 0; id < all_ids + count; id++, i++) { ++ i = 0; ++ LIST_FOREACH_SAFE(boot_list, id, id_next, all_ids) { + char a[FORMAT_TIMESTAMP_MAX], b[FORMAT_TIMESTAMP_MAX]; + + printf("% *i " SD_ID128_FORMAT_STR " %s—%s\n", +@@ -966,39 +1064,8 @@ static int list_boots(sd_journal *j) { + SD_ID128_FORMAT_VAL(id->id), + format_timestamp_maybe_utc(a, sizeof(a), id->first), + format_timestamp_maybe_utc(b, sizeof(b), id->last)); +- } +- +- return 0; +-} +- +-static int get_boot_id_by_offset(sd_journal *j, sd_id128_t *boot_id, int offset) { +- int r; +- unsigned int count; +- boot_id_t ref_boot_id = {}, *id; +- _cleanup_free_ boot_id_t *all_ids = NULL; +- +- assert(j); +- assert(boot_id); +- +- ref_boot_id.id = *boot_id; +- r = get_boots(j, &all_ids, &count, &ref_boot_id); +- if (r < 0) +- return r; +- +- if (sd_id128_equal(*boot_id, SD_ID128_NULL)) { +- if (offset > (int) count || offset <= -(int)count) +- return -EADDRNOTAVAIL; +- +- *boot_id = all_ids[(offset <= 0)*count + offset - 1].id; +- } else { +- id = bsearch(&ref_boot_id, all_ids, count, sizeof(boot_id_t), boot_id_cmp); +- +- if (!id || +- offset <= 0 ? (id - all_ids) + offset < 0 : +- (id - all_ids) + offset >= (int) count) +- return -EADDRNOTAVAIL; +- +- *boot_id = (id + offset)->id; ++ i++; ++ free(id); + } + + return 0; +@@ -1007,6 +1074,7 @@ static int get_boot_id_by_offset(sd_journal *j, sd_id128_t *boot_id, int offset) + static int add_boot(sd_journal *j) { + char match[9+32+1] = "_BOOT_ID="; + int r; ++ boot_id_t ref_boot_id = {}; + + assert(j); + +@@ -1016,17 +1084,22 @@ static int add_boot(sd_journal *j) { + if (arg_boot_offset == 0 && sd_id128_equal(arg_boot_id, SD_ID128_NULL)) + return add_match_this_boot(j, arg_machine); + +- r = get_boot_id_by_offset(j, &arg_boot_id, arg_boot_offset); +- if (r < 0) { +- if (sd_id128_equal(arg_boot_id, SD_ID128_NULL)) +- log_error_errno(r, "Failed to look up boot %+i: %m", arg_boot_offset); ++ ref_boot_id.id = arg_boot_id; ++ r = get_boots(j, NULL, &ref_boot_id, arg_boot_offset); ++ assert(r <= 1); ++ if (r <= 0) { ++ const char *reason = (r == 0) ? "No such boot ID in journal" : strerror(-r); ++ ++ if (sd_id128_is_null(arg_boot_id)) ++ log_error("Failed to look up boot %+i: %s", arg_boot_offset, reason); + else + 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_FORMAT_VAL(arg_boot_id), arg_boot_offset, reason); ++ ++ return r == 0 ? -ENODATA : r; + } + +- sd_id128_to_string(arg_boot_id, match + 9); ++ sd_id128_to_string(ref_boot_id.id, match + 9); + + r = sd_journal_add_match(j, match, sizeof(match) - 1); + if (r < 0) diff --git a/SOURCES/0210-utmp-make-sure-we-don-t-write-the-utmp-reboot-record.patch b/SOURCES/0210-utmp-make-sure-we-don-t-write-the-utmp-reboot-record.patch deleted file mode 100644 index fdee14a..0000000 --- a/SOURCES/0210-utmp-make-sure-we-don-t-write-the-utmp-reboot-record.patch +++ /dev/null @@ -1,24 +0,0 @@ -From cd31a2a77cccee55836ae77ac9f436c3764baf88 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Thu, 30 Jan 2014 14:37:23 +0100 -Subject: [PATCH] utmp: make sure we don't write the utmp reboot record twice - on each boot - ---- - src/update-utmp/update-utmp.c | 3 --- - 1 file changed, 3 deletions(-) - -diff --git a/src/update-utmp/update-utmp.c b/src/update-utmp/update-utmp.c -index 202aa98..3606d17 100644 ---- a/src/update-utmp/update-utmp.c -+++ b/src/update-utmp/update-utmp.c -@@ -268,9 +268,6 @@ static int on_runlevel(Context *c) { - return q; - } - -- /* Hmm, we didn't find any runlevel, that means we -- * have been rebooted */ -- r = on_reboot(c); - previous = 0; - } - diff --git a/SOURCES/0211-rules-mark-loop-device-as-SYSTEMD_READY-0-if-no-file.patch b/SOURCES/0211-rules-mark-loop-device-as-SYSTEMD_READY-0-if-no-file.patch deleted file mode 100644 index e47f069..0000000 --- a/SOURCES/0211-rules-mark-loop-device-as-SYSTEMD_READY-0-if-no-file.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 4c3ce66158917f3fff65e25b5dde622bff3ec6f8 Mon Sep 17 00:00:00 2001 -From: Peter Rajnoha -Date: Thu, 6 Mar 2014 15:49:55 +0100 -Subject: [PATCH] rules: mark loop device as SYSTEMD_READY=0 if no file is - attached - -Check existence of loop/backing_file in sysfs and mark loop -devices with SYSTEMD_READY if missing. Such loop files is -uninitialized and it's not ready for use yet (there's no file -attached). ---- - rules/99-systemd.rules.in | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in -index 0e0a567..0471719 100644 ---- a/rules/99-systemd.rules.in -+++ b/rules/99-systemd.rules.in -@@ -25,6 +25,9 @@ SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="md*", ATTR{md/array_state}==" - # Ignore nbd devices in the "add" event, with "change" the nbd is ready - ACTION=="add", SUBSYSTEM=="block", KERNEL=="nbd*", ENV{SYSTEMD_READY}="0" - -+# Ignore loop devices that don't have any file attached -+ACTION=="add|change", KERNEL=="loop[0-9]*", TEST!="loop/backing_file", ENV{SYSTEMD_READY}="0" -+ - # We need a hardware independent way to identify network devices. We - # use the /sys/subsystem path for this. Current vanilla kernels don't - # actually support that hierarchy right now, however upcoming kernels diff --git a/SOURCES/0211-test-hashmap-fix-an-assert.patch b/SOURCES/0211-test-hashmap-fix-an-assert.patch new file mode 100644 index 0000000..4d3dbd1 --- /dev/null +++ b/SOURCES/0211-test-hashmap-fix-an-assert.patch @@ -0,0 +1,28 @@ +From 2c52141dcf9c1bc2445dde5265036abca7e5c2c7 Mon Sep 17 00:00:00 2001 +From: Thomas Hindoe Paaboel Andersen +Date: Tue, 19 May 2015 06:33:54 +0200 +Subject: [PATCH] test-hashmap: fix an assert + +CID#1299016 + +(cherry picked from commit b669934fae49c9158c35e612e54e1765edca8584) + +Cherry-picked from: b669934 +Resolves: #1222517 +--- + src/test/test-hashmap-plain.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/test/test-hashmap-plain.c b/src/test/test-hashmap-plain.c +index 84b508f..c1a5ccf 100644 +--- a/src/test/test-hashmap-plain.c ++++ b/src/test/test-hashmap-plain.c +@@ -682,7 +682,7 @@ static void test_hashmap_get2(void) { + r = hashmap_get2(m, key_orig, &key_copy); + assert_se(streq(r, val)); + assert_se(key_orig != key_copy); +- assert_se(streq(key_orig, key_orig)); ++ assert_se(streq(key_orig, key_copy)); + + r = hashmap_get2(m, "no such key", NULL); + assert_se(r == NULL); diff --git a/SOURCES/0212-logind-fix-reference-to-systemd-user-sessions.servic.patch b/SOURCES/0212-logind-fix-reference-to-systemd-user-sessions.servic.patch deleted file mode 100644 index c4a2f33..0000000 --- a/SOURCES/0212-logind-fix-reference-to-systemd-user-sessions.servic.patch +++ /dev/null @@ -1,22 +0,0 @@ -From eed10abd7ed29316dcc0a234506117069c98f949 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Mon, 10 Mar 2014 17:47:35 +0100 -Subject: [PATCH] logind: fix reference to systemd-user-sessions.service - ---- - src/login/logind-session.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/login/logind-session.c b/src/login/logind-session.c -index 2bac0a2..f31961a 100644 ---- a/src/login/logind-session.c -+++ b/src/login/logind-session.c -@@ -518,7 +518,7 @@ static int session_start_scope(Session *s) { - if (!scope) - return log_oom(); - -- r = manager_start_scope(s->manager, scope, s->leader, s->user->slice, description, "systemd-logind.service", "systemd-user-session.service", &error, &job); -+ r = manager_start_scope(s->manager, scope, s->leader, s->user->slice, description, "systemd-logind.service", "systemd-user-sessions.service", &error, &job); - if (r < 0) { - log_error("Failed to start session scope %s: %s %s", - scope, bus_error(&error, r), error.name); diff --git a/SOURCES/0212-units-make-sure-systemd-nspawn-.slice-instances-are-.patch b/SOURCES/0212-units-make-sure-systemd-nspawn-.slice-instances-are-.patch new file mode 100644 index 0000000..d6c0ec5 --- /dev/null +++ b/SOURCES/0212-units-make-sure-systemd-nspawn-.slice-instances-are-.patch @@ -0,0 +1,27 @@ +From 68932296f01cd3eee3ee47f3e8f339f33c18b95d Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 19 May 2015 19:47:52 +0200 +Subject: [PATCH] units: make sure systemd-nspawn@.slice instances are actually + located in machine.slice + +https://plus.google.com/112206451048767236518/posts/SYAueyXHeEX +(cherry picked from commit 45d383a3b888195b01b58dbd2c46a11027ff5022) + +Cherry-picked from: 45d383a +Resolves: #1222517 +--- + units/systemd-nspawn@.service.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/units/systemd-nspawn@.service.in b/units/systemd-nspawn@.service.in +index 3e26b53..5e86121 100644 +--- a/units/systemd-nspawn@.service.in ++++ b/units/systemd-nspawn@.service.in +@@ -17,6 +17,7 @@ KillMode=mixed + Type=notify + RestartForceExitStatus=133 + SuccessExitStatus=133 ++Slice=machine.slice + Delegate=yes + + [Install] diff --git a/SOURCES/0213-Revert-journald-audit-exit-gracefully-in-the-case-we.patch b/SOURCES/0213-Revert-journald-audit-exit-gracefully-in-the-case-we.patch new file mode 100644 index 0000000..a5caea0 --- /dev/null +++ b/SOURCES/0213-Revert-journald-audit-exit-gracefully-in-the-case-we.patch @@ -0,0 +1,31 @@ +From d5e8f58887c572e3d9317b68999ca5d6320f2815 Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Wed, 15 Jul 2015 14:52:04 +0200 +Subject: [PATCH] Revert "journald-audit: exit gracefully in the case we can't + join audit multicast group" + +This reverts commit 9b5e05005e534fc7fb6dc56c94e3296bb17fe122. + +Cherry-picked from: +Resolves: #1222517 +--- + src/journal/journald-audit.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/src/journal/journald-audit.c b/src/journal/journald-audit.c +index 77abe2e..46eb82f 100644 +--- a/src/journal/journald-audit.c ++++ b/src/journal/journald-audit.c +@@ -533,10 +533,8 @@ int server_open_audit(Server *s) { + } + + r = bind(s->audit_fd, &sa.sa, sizeof(sa.nl)); +- if (r < 0) { +- log_warning_errno(errno, "Failed to join audit multicast group, ignoring: %m"); +- return 0; +- } ++ if (r < 0) ++ return log_error_errno(errno, "Failed to join audit multicast group: %m"); + } else + fd_nonblock(s->audit_fd, 1); + diff --git a/SOURCES/0213-logind-add-forgotten-call-to-user_send_changed.patch b/SOURCES/0213-logind-add-forgotten-call-to-user_send_changed.patch deleted file mode 100644 index 858c260..0000000 --- a/SOURCES/0213-logind-add-forgotten-call-to-user_send_changed.patch +++ /dev/null @@ -1,21 +0,0 @@ -From 4a725025497979ad512e242335360b23fb43b349 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Mon, 10 Mar 2014 18:11:45 +0100 -Subject: [PATCH] logind: add forgotten call to user_send_changed() - ---- - src/login/logind-session.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/login/logind-session.c b/src/login/logind-session.c -index f31961a..e519d35 100644 ---- a/src/login/logind-session.c -+++ b/src/login/logind-session.c -@@ -587,6 +587,7 @@ int session_start(Session *s) { - - /* Send signals */ - session_send_signal(s, true); -+ user_send_changed(s->user, "Sessions\0"); - - if (s->seat) { - if (s->seat->active == s) diff --git a/SOURCES/0214-journald-handle-more-gracefully-when-bind-fails-on-a.patch b/SOURCES/0214-journald-handle-more-gracefully-when-bind-fails-on-a.patch new file mode 100644 index 0000000..b4688c3 --- /dev/null +++ b/SOURCES/0214-journald-handle-more-gracefully-when-bind-fails-on-a.patch @@ -0,0 +1,36 @@ +From a81ba5e1bfabf643e11fec41c1ce646874ae0df1 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 20 May 2015 14:37:21 +0200 +Subject: [PATCH] journald: handle more gracefully when bind() fails on audit + sockets + +(cherry picked from commit 417a7fdc418ec76cc4c321c9a07ec15c72b3ac7d) + +Cherry-picked from: 417a7fd +Resolves: #1222517 +--- + src/journal/journald-audit.c | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/src/journal/journald-audit.c b/src/journal/journald-audit.c +index 46eb82f..0e739a2 100644 +--- a/src/journal/journald-audit.c ++++ b/src/journal/journald-audit.c +@@ -532,9 +532,14 @@ int server_open_audit(Server *s) { + return 0; + } + +- r = bind(s->audit_fd, &sa.sa, sizeof(sa.nl)); +- if (r < 0) +- return log_error_errno(errno, "Failed to join audit multicast group: %m"); ++ if (bind(s->audit_fd, &sa.sa, sizeof(sa.nl)) < 0) { ++ log_warning_errno(errno, ++ "Failed to join audit multicast group. " ++ "The kernel is probably too old or multicast reading is not supported. " ++ "Ignoring: %m"); ++ s->audit_fd = safe_close(s->audit_fd); ++ return 0; ++ } + } else + fd_nonblock(s->audit_fd, 1); + diff --git a/SOURCES/0214-logind-save-session-after-setting-the-stopping-flag.patch b/SOURCES/0214-logind-save-session-after-setting-the-stopping-flag.patch deleted file mode 100644 index 8e10f41..0000000 --- a/SOURCES/0214-logind-save-session-after-setting-the-stopping-flag.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 66cd858045170353359d05dd0b4d259d6059de72 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Mon, 10 Mar 2014 18:22:55 +0100 -Subject: [PATCH] logind: save session after setting the stopping flag - ---- - src/login/logind-session.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/src/login/logind-session.c b/src/login/logind-session.c -index e519d35..3ab41e6 100644 ---- a/src/login/logind-session.c -+++ b/src/login/logind-session.c -@@ -682,10 +682,9 @@ int session_stop(Session *s) { - /* Kill cgroup */ - r = session_stop_scope(s); - -- session_save(s); -- - s->stopping = true; - -+ session_save(s); - return r; - } - diff --git a/SOURCES/0215-logind-save-user-state-after-stopping-the-session.patch b/SOURCES/0215-logind-save-user-state-after-stopping-the-session.patch deleted file mode 100644 index ea53156..0000000 --- a/SOURCES/0215-logind-save-user-state-after-stopping-the-session.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 34c3bd12815064d0d3820ac0b30c0952ba5fd1fe Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Mon, 10 Mar 2014 18:26:34 +0100 -Subject: [PATCH] logind: save user state after stopping the session - ---- - src/login/logind-session.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/login/logind-session.c b/src/login/logind-session.c -index 3ab41e6..2a2a670 100644 ---- a/src/login/logind-session.c -+++ b/src/login/logind-session.c -@@ -685,6 +685,8 @@ int session_stop(Session *s) { - s->stopping = true; - - session_save(s); -+ user_save(s); -+ - return r; - } - diff --git a/SOURCES/0215-udev-link-config-fix-corruption.patch b/SOURCES/0215-udev-link-config-fix-corruption.patch new file mode 100644 index 0000000..5ddb976 --- /dev/null +++ b/SOURCES/0215-udev-link-config-fix-corruption.patch @@ -0,0 +1,72 @@ +From f50fbeaf7c2ce57027f774d02d9e2b09f810ec2a Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Thu, 21 May 2015 15:22:07 +0200 +Subject: [PATCH] udev: link-config - fix corruption + +The parser used for MTU and Speed expects them to be size_t, not unsigned int. + +This caused a corruption in the rest of the structure. + +Reported by David O Neill . + +(cherry picked from commit dab495dc23bf9a5ba0487a057bb594355555a0e9) + +Cherry-picked from: dab495d +Resolves: #1222517 +--- + src/udev/net/link-config.c | 11 ++++++----- + src/udev/net/link-config.h | 4 ++-- + 2 files changed, 8 insertions(+), 7 deletions(-) + +diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c +index 8b3dc45..489593f 100644 +--- a/src/udev/net/link-config.c ++++ b/src/udev/net/link-config.c +@@ -177,6 +177,9 @@ static int load_link(link_config_ctx *ctx, const char *filename) { + else + log_debug("Parsed configuration file %s", filename); + ++ if (link->mtu > UINT_MAX || link->speed > UINT_MAX) ++ return -ERANGE; ++ + link->filename = strdup(filename); + + LIST_PREPEND(links, ctx->links, link); +@@ -379,10 +382,9 @@ int link_config_apply(link_config_ctx *ctx, link_config *config, + if (!old_name) + return -EINVAL; + +- r = ethtool_set_speed(&ctx->ethtool_fd, old_name, config->speed / 1024, +- config->duplex); ++ r = ethtool_set_speed(&ctx->ethtool_fd, old_name, config->speed / 1024, config->duplex); + if (r < 0) +- log_warning_errno(r, "Could not set speed or duplex of %s to %u Mbps (%s): %m", ++ log_warning_errno(r, "Could not set speed or duplex of %s to %zu Mbps (%s): %m", + old_name, config->speed / 1024, + duplex_to_string(config->duplex)); + +@@ -461,8 +463,7 @@ int link_config_apply(link_config_ctx *ctx, link_config *config, + mac = config->mac; + } + +- r = rtnl_set_link_properties(&ctx->rtnl, ifindex, config->alias, mac, +- config->mtu); ++ r = rtnl_set_link_properties(&ctx->rtnl, ifindex, config->alias, mac, config->mtu); + if (r < 0) + return log_warning_errno(r, "Could not set Alias, MACAddress or MTU on %s: %m", old_name); + +diff --git a/src/udev/net/link-config.h b/src/udev/net/link-config.h +index cb434d1..f2e9174 100644 +--- a/src/udev/net/link-config.h ++++ b/src/udev/net/link-config.h +@@ -67,8 +67,8 @@ struct link_config { + NamePolicy *name_policy; + char *name; + char *alias; +- unsigned int mtu; +- unsigned int speed; ++ size_t mtu; ++ size_t speed; + Duplex duplex; + WakeOnLan wol; + diff --git a/SOURCES/0216-logind-initialize-timer_fd.patch b/SOURCES/0216-logind-initialize-timer_fd.patch deleted file mode 100644 index 19d5cac..0000000 --- a/SOURCES/0216-logind-initialize-timer_fd.patch +++ /dev/null @@ -1,21 +0,0 @@ -From fe828286b888871e18bc68173cd281619bd7b4b2 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Tue, 11 Mar 2014 13:26:38 +0100 -Subject: [PATCH] logind: initialize timer_fd - ---- - src/login/logind-session.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/login/logind-session.c b/src/login/logind-session.c -index 2a2a670..d7c3187 100644 ---- a/src/login/logind-session.c -+++ b/src/login/logind-session.c -@@ -89,6 +89,7 @@ Session* session_new(Manager *m, const char *id) { - - s->manager = m; - s->fifo_fd = -1; -+ s->timer_fd = -1; - - return s; - } diff --git a/SOURCES/0216-udev-net_id-Only-read-the-first-64-bytes-of-PCI-conf.patch b/SOURCES/0216-udev-net_id-Only-read-the-first-64-bytes-of-PCI-conf.patch new file mode 100644 index 0000000..37d3d53 --- /dev/null +++ b/SOURCES/0216-udev-net_id-Only-read-the-first-64-bytes-of-PCI-conf.patch @@ -0,0 +1,59 @@ +From 210ec6353d3cab2029e1eb160671fea918c97814 Mon Sep 17 00:00:00 2001 +From: "Jason S. McMullan" +Date: Fri, 22 May 2015 20:30:01 +0200 +Subject: [PATCH] udev/net_id: Only read the first 64 bytes of PCI config space + +The original code used fread(), which on some libc implementions +(ie glibc 2.17) would pre-read a full 4K (PAGE_SIZE) of the +PCI config space, when only 64 bytes were requested. + +I have recently come across PCIe hardware which responds with +Completion Timeouts when accesses above 256 bytes are attempted. + +This can cause server systems with GHES/AEPI support to cause +and immediate kernel panic due to the failed PCI transaction. + +This change replaces the buffered fread() with an explict +unbuffered read() of 64 bytes, which corrects this issue by +only reading the guaranteed first 64 bytes of PCIe config space. + +(cherry picked from commit 0454229c100a2113ba82df55703436d6cb2c492b) + +Cherry-picked from: 0454229 +Resolves: #1222517 +--- + src/udev/udev-builtin-net_id.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c +index 66474f7..dd2886c 100644 +--- a/src/udev/udev-builtin-net_id.c ++++ b/src/udev/udev-builtin-net_id.c +@@ -91,6 +91,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -166,15 +167,15 @@ static int dev_pci_onboard(struct udev_device *dev, struct netnames *names) { + + /* read the 256 bytes PCI configuration space to check the multi-function bit */ + static bool is_pci_multifunction(struct udev_device *dev) { +- _cleanup_fclose_ FILE *f = NULL; ++ _cleanup_close_ int fd = -1; + const char *filename; + uint8_t config[64]; + + filename = strjoina(udev_device_get_syspath(dev), "/config"); +- f = fopen(filename, "re"); +- if (!f) ++ fd = open(filename, O_RDONLY | O_CLOEXEC); ++ if (fd < 0) + return false; +- if (fread(&config, sizeof(config), 1, f) != 1) ++ if (read(fd, &config, sizeof(config)) != sizeof(config)) + return false; + + /* bit 0-6 header type, bit 7 multi/single function device */ diff --git a/SOURCES/0217-service-don-t-create-extra-cgroup-for-control-proces.patch b/SOURCES/0217-service-don-t-create-extra-cgroup-for-control-proces.patch deleted file mode 100644 index c7ffdb4..0000000 --- a/SOURCES/0217-service-don-t-create-extra-cgroup-for-control-proces.patch +++ /dev/null @@ -1,46 +0,0 @@ -From d09b7328c7757cebdc2fb0032361c086733bd3f7 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Mon, 10 Mar 2014 15:11:29 +0100 -Subject: [PATCH] service: don't create extra cgroup for control process when - reloading SysV service - -Unfortunately common practice in initscripts is to have reload as an -alias for restart (https://fedoraproject.org/wiki/Packaging:SysVInitScript). -In that case the newly started process will be killed immediately after -the reload process ends and its cgroup is destroyed. ---- - src/core/service.c | 13 ++++++++++++- - 1 file changed, 12 insertions(+), 1 deletion(-) - -diff --git a/src/core/service.c b/src/core/service.c -index 41e5cb5..dff5286 100644 ---- a/src/core/service.c -+++ b/src/core/service.c -@@ -2353,7 +2353,15 @@ static void service_enter_reload(Service *s) { - !s->root_directory_start_only, - false, - false, -+#ifdef HAVE_SYSV_COMPAT -+ /* Don't create extra cgroup for SysV services. -+ * Unfortunately common practice was to have reload as an alias -+ * for restart and we are killing the new main process, when destroying -+ * cgroup for the control process*/ -+ !s->is_sysv, -+#else - true, -+#endif - &s->control_pid); - if (r < 0) - goto fail; -@@ -3174,7 +3182,10 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) { - /* Immediately get rid of the cgroup, so that the - * kernel doesn't delay the cgroup empty messages for - * the service cgroup any longer than necessary */ -- service_kill_control_processes(s); -+#ifdef HAVE_SYSV_COMPAT -+ if (!s->is_sysv) -+#endif -+ service_kill_control_processes(s); - - if (s->control_command && - s->control_command->command_next && diff --git a/SOURCES/0217-shared-generator-correct-path-to-systemd-fsck.patch b/SOURCES/0217-shared-generator-correct-path-to-systemd-fsck.patch new file mode 100644 index 0000000..d63575e --- /dev/null +++ b/SOURCES/0217-shared-generator-correct-path-to-systemd-fsck.patch @@ -0,0 +1,44 @@ +From 36bc4ca74d03fcff5808a7efb107886749472819 Mon Sep 17 00:00:00 2001 +From: Mike Gilbert +Date: Sun, 24 May 2015 16:33:35 -0400 +Subject: [PATCH] shared: generator - correct path to systemd-fsck + +In generated systemd-fsck-root.service. This would break if rootprefix +is not /usr/lib/systemd. + +[tomegun: flesh out commit message] + +(cherry picked from commit 77eb82f9f0f60535ab5f585834ed6e66cf39b184) + +Cherry-picked from: 77eb82f +Resolves: #1222517 +--- + Makefile.am | 1 + + src/shared/generator.c | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index d3fb398..a81d3c1 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -177,6 +177,7 @@ AM_CPPFLAGS = \ + -DCATALOG_DATABASE=\"$(catalogstatedir)/database\" \ + -DSYSTEMD_CGROUP_AGENT_PATH=\"$(rootlibexecdir)/systemd-cgroups-agent\" \ + -DSYSTEMD_BINARY_PATH=\"$(rootlibexecdir)/systemd\" \ ++ -DSYSTEMD_FSCK_PATH=\"$(rootlibexecdir)/systemd-fsck\" \ + -DSYSTEMD_SHUTDOWN_BINARY_PATH=\"$(rootlibexecdir)/systemd-shutdown\" \ + -DSYSTEMD_SLEEP_BINARY_PATH=\"$(rootlibexecdir)/systemd-sleep\" \ + -DSYSTEMCTL_BINARY_PATH=\"$(rootbindir)/systemctl\" \ +diff --git a/src/shared/generator.c b/src/shared/generator.c +index 148a0b0..3af84a3 100644 +--- a/src/shared/generator.c ++++ b/src/shared/generator.c +@@ -61,7 +61,7 @@ static int write_fsck_sysroot_service(const char *dir, const char *what) { + "[Service]\n" + "Type=oneshot\n" + "RemainAfterExit=yes\n" +- "ExecStart=/usr/lib/systemd/systemd-fsck %2$s\n" ++ "ExecStart=" SYSTEMD_FSCK_PATH " %2$s\n" + "TimeoutSec=0\n", + program_invocation_short_name, + what, diff --git a/SOURCES/0218-logind-Save-the-user-s-state-when-a-session-enters-S.patch b/SOURCES/0218-logind-Save-the-user-s-state-when-a-session-enters-S.patch new file mode 100644 index 0000000..3127350 --- /dev/null +++ b/SOURCES/0218-logind-Save-the-user-s-state-when-a-session-enters-S.patch @@ -0,0 +1,47 @@ +From a01e2476f0421026d12384292b34f303fc01c43c Mon Sep 17 00:00:00 2001 +From: Philip Withnall +Date: Tue, 2 Jun 2015 14:17:10 +0100 +Subject: [PATCH] =?UTF-8?q?logind:=20Save=20the=20user=E2=80=99s=20state?= + =?UTF-8?q?=20when=20a=20session=20enters=20SESSION=5FACTIVE?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When (for example) switching from X11 to a new VT and logging in there, +creating a new session, the user state file (/run/systemd/users/$uid) is +not updated after the session becomes active. The latest time it is +saved is when the session is in SESSION_OPENING. + +This results in a /run/systemd/users/$uid file which contains +STATE=online for the current user on the current active VT, which is +obviously wrong. + +As functions like sd_uid_get_state() use this file to get the user’s +state, this could result in things like PolicyKit making incorrect +decisions about the user’s state. (See +https://bugs.freedesktop.org/show_bug.cgi?id=76358.) + +Fix this by re-saving the state for a session’s user after completing +the state_job for that session. + +https://bugs.freedesktop.org/show_bug.cgi?id=90818 +(cherry picked from commit 41dfeaa194c18de49706b5cecf4e53accd12b7f6) + +Cherry-picked from: 41dfeaa +Resolves: #1222517 +--- + src/login/logind-dbus.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c +index 8b0bafd..fb84e92 100644 +--- a/src/login/logind-dbus.c ++++ b/src/login/logind-dbus.c +@@ -2124,6 +2124,7 @@ int match_job_removed(sd_bus *bus, sd_bus_message *message, void *userdata, sd_b + session_jobs_reply(session, unit, result); + + session_save(session); ++ user_save(session->user); + session_add_to_gc_queue(session); + } + diff --git a/SOURCES/0218-logind-pass-pointer-to-User-object-to-user_save.patch b/SOURCES/0218-logind-pass-pointer-to-User-object-to-user_save.patch deleted file mode 100644 index a9deb00..0000000 --- a/SOURCES/0218-logind-pass-pointer-to-User-object-to-user_save.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 83062f40f3e39d089396ad7918620ecab8534179 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Tue, 11 Mar 2014 20:42:42 +0100 -Subject: [PATCH] logind: pass pointer to User object to user_save() - ---- - src/login/logind-session.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/login/logind-session.c b/src/login/logind-session.c -index d7c3187..b0e4bf6 100644 ---- a/src/login/logind-session.c -+++ b/src/login/logind-session.c -@@ -686,7 +686,7 @@ int session_stop(Session *s) { - s->stopping = true; - - session_save(s); -- user_save(s); -+ user_save(s->user); - - return r; - } diff --git a/SOURCES/0219-fstab-generator-When-parsing-the-root-cmdline-option.patch b/SOURCES/0219-fstab-generator-When-parsing-the-root-cmdline-option.patch deleted file mode 100644 index 2f4467c..0000000 --- a/SOURCES/0219-fstab-generator-When-parsing-the-root-cmdline-option.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 42f30a9750ca939f1e805d5fb7790cd8dd3dee62 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Thomas=20B=C3=A4chler?= -Date: Mon, 30 Sep 2013 00:32:33 +0200 -Subject: [PATCH] fstab-generator: When parsing the root= cmdline option, set - FsckPassNo to 1 - -[tomegun: without this we would never fsck the rootfs if it was directly -mounted 'rw' from the initrd. We now risk fsck'ing it twice in the case it -is mounted 'ro', so that should be addressed in a separate patch.] ---- - src/fstab-generator/fstab-generator.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c -index 9efccb9..6cecb4e 100644 ---- a/src/fstab-generator/fstab-generator.c -+++ b/src/fstab-generator/fstab-generator.c -@@ -449,7 +449,7 @@ static int parse_new_root_from_proc_cmdline(void) { - } - - log_debug("Found entry what=%s where=/sysroot type=%s", what, type); -- r = add_mount(what, "/sysroot", type, opts, 0, noauto, nofail, false, -+ r = add_mount(what, "/sysroot", type, opts, 1, noauto, nofail, false, - SPECIAL_INITRD_ROOT_FS_TARGET, "/proc/cmdline"); - - return (r < 0) ? r : 0; diff --git a/SOURCES/0219-small-fix-ru-translation.patch b/SOURCES/0219-small-fix-ru-translation.patch new file mode 100644 index 0000000..7a484c1 --- /dev/null +++ b/SOURCES/0219-small-fix-ru-translation.patch @@ -0,0 +1,44 @@ +From 376e273fd9efb41fbeefc1e273fb4bd69135d041 Mon Sep 17 00:00:00 2001 +From: kloun +Date: Thu, 4 Jun 2015 17:56:59 +0300 +Subject: [PATCH] small fix ru translation + +(cherry picked from commit fcf3f5958e0441c9cc00f035ef6c86c278442366) + +Cherry-picked from: fcf3f59 +Resolves: #1222517 +--- + catalog/systemd.ru.catalog | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/catalog/systemd.ru.catalog b/catalog/systemd.ru.catalog +index f995324..03eea04 100644 +--- a/catalog/systemd.ru.catalog ++++ b/catalog/systemd.ru.catalog +@@ -81,7 +81,7 @@ Documentation: man:core(5) + Записан дамп памяти. + + Вероятно, это произошло из-за ошибки, допущенной в коде программы. +-Рекомендуется сообщить ее разработчикам о возникшей проблеме. ++Рекомендуется сообщить её разработчикам о возникшей проблеме. + + # Subject: A new session @SESSION_ID@ has been created for user @USER_ID@ + -- 8d45620c1a4348dbb17410da57c60c66 +@@ -146,7 +146,7 @@ Defined-By: systemd + Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel + + Все системные службы, запуск которых предписан настройками, были запущены. +-Впрочем, это еще не означает, что система в данный момент ничем не занята, ++Впрочем, это ещё не означает, что система в данный момент ничем не занята, + так как некоторые службы могут продолжать инициализацию даже после того, как + отчитались о своем запуске. + +@@ -274,7 +274,7 @@ Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel + столбце файла /etc/fstab, либо в параметре Where= файла конфигурации юнита), + не является пустым. Это никак не мешает монтированию, однако ранее находившиеся + в нем файлы будут недоступны. Чтобы получить к ним доступ, вы можете вручную +-перемонтировать нижележащую файловую систему в другую точку. ++перемонтировать эту файловую систему в другую точку. + + # Subject: A virtual machine or container has been started + -- 24d8d4452573402496068381a6312df2 diff --git a/SOURCES/0220-gpt-auto-generator-Generate-explicit-dependencies-on.patch b/SOURCES/0220-gpt-auto-generator-Generate-explicit-dependencies-on.patch deleted file mode 100644 index 5f88f3d..0000000 --- a/SOURCES/0220-gpt-auto-generator-Generate-explicit-dependencies-on.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 23623890843b81c5d0bd6115ae1f458539b2d43b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Thomas=20B=C3=A4chler?= -Date: Mon, 30 Sep 2013 01:34:45 +0200 -Subject: [PATCH] gpt-auto-generator: Generate explicit dependencies on - systemd-fsck@.service instead of using FsckPassNo - -[tomegun: check for OOM] ---- - src/gpt-auto-generator/gpt-auto-generator.c | 14 +++++++++----- - 1 file changed, 9 insertions(+), 5 deletions(-) - -diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c -index f1749be..adbf71d 100644 ---- a/src/gpt-auto-generator/gpt-auto-generator.c -+++ b/src/gpt-auto-generator/gpt-auto-generator.c -@@ -179,7 +179,7 @@ static int add_swap(const char *path, const char *fstype) { - } - - static int add_home(const char *path, const char *fstype) { -- _cleanup_free_ char *unit = NULL, *lnk = NULL; -+ _cleanup_free_ char *unit = NULL, *lnk = NULL, *fsck = NULL; - _cleanup_fclose_ FILE *f = NULL; - - if (dir_is_empty("/home") <= 0) -@@ -197,19 +197,23 @@ static int add_home(const char *path, const char *fstype) { - return -errno; - } - -+ fsck = unit_name_from_path_instance("systemd-fsck", path, ".service"); -+ if (!fsck) -+ return log_oom(); -+ - fprintf(f, - "# Automatically generated by systemd-gpt-auto-generator\n\n" - "[Unit]\n" - "DefaultDependencies=no\n" -- "After=" SPECIAL_LOCAL_FS_PRE_TARGET "\n" -+ "Requires=%s\n" -+ "After=" SPECIAL_LOCAL_FS_PRE_TARGET " %s\n" - "Conflicts=" SPECIAL_UMOUNT_TARGET "\n" - "Before=" SPECIAL_UMOUNT_TARGET " " SPECIAL_LOCAL_FS_TARGET "\n\n" - "[Mount]\n" - "What=%s\n" - "Where=/home\n" -- "Type=%s\n" -- "FsckPassNo=2\n", -- path, fstype); -+ "Type=%s\n", -+ fsck, fsck, path, fstype); - - fflush(f); - if (ferror(f)) { diff --git a/SOURCES/0220-kmod-setup-don-t-warn-when-ipv6-can-t-be-loaded.patch b/SOURCES/0220-kmod-setup-don-t-warn-when-ipv6-can-t-be-loaded.patch new file mode 100644 index 0000000..fd3e4ac --- /dev/null +++ b/SOURCES/0220-kmod-setup-don-t-warn-when-ipv6-can-t-be-loaded.patch @@ -0,0 +1,33 @@ +From 7076491959d3e67f339a520dcdfb824a46ff5ccb Mon Sep 17 00:00:00 2001 +From: Daniel Mack +Date: Fri, 5 Jun 2015 14:59:36 +0200 +Subject: [PATCH] kmod-setup: don't warn when ipv6 can't be loaded + +Not having IPv6 is a valid setup. Let's not print a warning in that +case. + +Addresses: + + https://bugs.freedesktop.org/show_bug.cgi?id=87475 + +(cherry picked from commit b4aa82f168913b7bff42017023b43933b3aa0d24) + +Cherry-picked from: b4aa82f +Resolves: #1222517 +--- + src/core/kmod-setup.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index 97f3b9b..6b2f295 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -66,7 +66,7 @@ int kmod_setup(void) { + { "autofs4", "/sys/class/misc/autofs", true, NULL }, + + /* early configure of ::1 on the loopback device */ +- { "ipv6", "/sys/module/ipv6", true, NULL }, ++ { "ipv6", "/sys/module/ipv6", false, NULL }, + + /* this should never be a module */ + { "unix", "/proc/net/unix", true, NULL }, diff --git a/SOURCES/0221-Partially-revert-ma-setup-simplify.patch b/SOURCES/0221-Partially-revert-ma-setup-simplify.patch new file mode 100644 index 0000000..df497de --- /dev/null +++ b/SOURCES/0221-Partially-revert-ma-setup-simplify.patch @@ -0,0 +1,67 @@ +From 21559c09b39155d44f8997703a35211623a38689 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 1 Jun 2015 10:33:48 -0400 +Subject: [PATCH] Partially revert "ma-setup: simplify" + +copy_bytes() tries to do the write in chunks, but ima kernel code +needs every rule to be written in one write. Writing the whole file +at once avoids the issue. + +http://lists.freedesktop.org/archives/systemd-devel/2015-June/032623.html +http://sourceforge.net/p/linux-ima/mailman/message/34145236/ +https://bugzilla.redhat.com/show_bug.cgi?id=1226948 +(cherry picked from commit 116b6c8687e1da25fcecf80ba6ac16866e308d50) + +Cherry-picked from: 116b6c8 +Resolves: #1222517 +--- + src/core/ima-setup.c | 15 +++++++++++++-- + 1 file changed, 13 insertions(+), 2 deletions(-) + +diff --git a/src/core/ima-setup.c b/src/core/ima-setup.c +index 0e0d16a..1d4acfa 100644 +--- a/src/core/ima-setup.c ++++ b/src/core/ima-setup.c +@@ -27,9 +27,10 @@ + #include + #include + #include ++#include ++#include + + #include "ima-setup.h" +-#include "copy.h" + #include "util.h" + #include "log.h" + +@@ -42,6 +43,8 @@ int ima_setup(void) { + + #ifdef HAVE_IMA + _cleanup_close_ int policyfd = -1, imafd = -1; ++ struct stat st; ++ char *policy; + + if (access(IMA_SECFS_DIR, F_OK) < 0) { + log_debug("IMA support is disabled in the kernel, ignoring."); +@@ -66,12 +69,20 @@ int ima_setup(void) { + return 0; + } + +- r = copy_bytes(policyfd, imafd, (off_t) -1, false); ++ if (fstat(policyfd, &st) < 0) ++ return log_error_errno(errno, "Failed to fstat "IMA_POLICY_PATH": %m"); ++ ++ policy = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, policyfd, 0); ++ if (policy == MAP_FAILED) ++ return log_error_errno(errno, "Failed to mmap "IMA_POLICY_PATH": %m"); ++ ++ r = loop_write(imafd, policy, (size_t) st.st_size, false); + if (r < 0) + log_error_errno(r, "Failed to load the IMA custom policy file "IMA_POLICY_PATH": %m"); + else + log_info("Successfully loaded the IMA custom policy "IMA_POLICY_PATH"."); + ++ munmap(policy, st.st_size); + #endif /* HAVE_IMA */ + return r; + } diff --git a/SOURCES/0221-fstab-generator-Generate-explicit-dependencies-on-sy.patch b/SOURCES/0221-fstab-generator-Generate-explicit-dependencies-on-sy.patch deleted file mode 100644 index 7404814..0000000 --- a/SOURCES/0221-fstab-generator-Generate-explicit-dependencies-on-sy.patch +++ /dev/null @@ -1,108 +0,0 @@ -From 8a9eab141ab379c658fc198fb0b0ee4ca3bdd1d2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Thomas=20B=C3=A4chler?= -Date: Mon, 30 Sep 2013 01:34:44 +0200 -Subject: [PATCH] fstab-generator: Generate explicit dependencies on - systemd-fsck@.service instead of using FsckPassNo - -[tomegun: - * order all fsck instances after fsck-root - * check for OOM - * added notes in the manpages] - -Conflicts: - man/systemd-fsck@.service.xml - man/systemd-fstab-generator.xml ---- - man/systemd-fsck@.service.xml | 4 +--- - man/systemd-fstab-generator.xml | 9 ++++----- - src/fstab-generator/fstab-generator.c | 21 +++++++++++++++++---- - units/systemd-fsck@.service.in | 2 +- - 4 files changed, 23 insertions(+), 13 deletions(-) - -diff --git a/man/systemd-fsck@.service.xml b/man/systemd-fsck@.service.xml -index c653dc5..17bd1c0 100644 ---- a/man/systemd-fsck@.service.xml -+++ b/man/systemd-fsck@.service.xml -@@ -63,9 +63,7 @@ - check. systemd-fsck-root.service is - responsible for file system checks on the root - 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. -+ before the other file systems. - - 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 e3cf5d2..740db8f 100644 ---- a/man/systemd-fstab-generator.xml -+++ b/man/systemd-fstab-generator.xml -@@ -61,11 +61,10 @@ - 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. -+ The passno field -+ is treated like a simlpe boolean, and the ordering information -+ is discarded. However, the root filesystem is checked -+ before all the other filesystems. - - See - systemd.mount5 -diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c -index 6cecb4e..7874ff1 100644 ---- a/src/fstab-generator/fstab-generator.c -+++ b/src/fstab-generator/fstab-generator.c -@@ -209,17 +209,30 @@ static int add_mount( - "Before=%s\n", - post); - -+ if (passno > 0) { -+ _cleanup_free_ char *fsck = NULL; -+ -+ fsck = unit_name_from_path_instance("systemd-fsck", what, ".service"); -+ if (!fsck) -+ return log_oom(); -+ -+ fprintf(f, -+ "Requires=%s\n" -+ "After=%s\n", -+ fsck, -+ fsck); -+ } -+ -+ - fprintf(f, - "\n" - "[Mount]\n" - "What=%s\n" - "Where=%s\n" -- "Type=%s\n" -- "FsckPassNo=%i\n", -+ "Type=%s\n", - what, - where, -- type, -- passno); -+ type); - - if (!isempty(opts) && - !streq(opts, "defaults")) -diff --git a/units/systemd-fsck@.service.in b/units/systemd-fsck@.service.in -index e229cdc..c12efa8 100644 ---- a/units/systemd-fsck@.service.in -+++ b/units/systemd-fsck@.service.in -@@ -10,7 +10,7 @@ Description=File System Check on %f - Documentation=man:systemd-fsck@.service(8) - DefaultDependencies=no - BindsTo=%i.device --After=systemd-readahead-collect.service systemd-readahead-replay.service %i.device -+After=systemd-readahead-collect.service systemd-readahead-replay.service %i.device systemd-fsck-root.service - Before=shutdown.target - - [Service] diff --git a/SOURCES/0222-fsck-root-only-run-when-requested-in-fstab.patch b/SOURCES/0222-fsck-root-only-run-when-requested-in-fstab.patch deleted file mode 100644 index 21d7714..0000000 --- a/SOURCES/0222-fsck-root-only-run-when-requested-in-fstab.patch +++ /dev/null @@ -1,92 +0,0 @@ -From 8610788332cb6492d8e5275b32200db4138401bb Mon Sep 17 00:00:00 2001 -From: Tom Gundersen -Date: Sat, 19 Oct 2013 11:38:42 +0200 -Subject: [PATCH] fsck-root: only run when requested in fstab - -fsck-root is redundant in case an initrd is used, or in case the rootfs -is never remounted 'rw', so the new default is the correct behavior for -most users. For the rest, they should enable it in fstab. ---- - Makefile.am | 1 - - man/systemd-fsck@.service.xml | 4 +++- - src/fstab-generator/fstab-generator.c | 31 ++++++++++++++++++++++--------- - 3 files changed, 25 insertions(+), 11 deletions(-) - -diff --git a/Makefile.am b/Makefile.am -index df63275..fa2fba6 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -4415,7 +4415,6 @@ SYSINIT_TARGET_WANTS += \ - systemd-update-utmp.service - LOCAL_FS_TARGET_WANTS += \ - systemd-remount-fs.service \ -- systemd-fsck-root.service \ - tmp.mount - MULTI_USER_TARGET_WANTS += \ - getty.target \ -diff --git a/man/systemd-fsck@.service.xml b/man/systemd-fsck@.service.xml -index 17bd1c0..811392b 100644 ---- a/man/systemd-fsck@.service.xml -+++ b/man/systemd-fsck@.service.xml -@@ -63,7 +63,9 @@ - check. systemd-fsck-root.service is - responsible for file system checks on the root - file system. The root file system check is performed -- before the other file systems. -+ before the other file systems. Either service is enabled -+ at boot if passno in /etc/fstab for -+ the filesystem is set to a value greater than zero. - - systemd-fsck will - forward file system checking progress to the -diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c -index 7874ff1..c0c2992 100644 ---- a/src/fstab-generator/fstab-generator.c -+++ b/src/fstab-generator/fstab-generator.c -@@ -210,17 +210,29 @@ static int add_mount( - post); - - if (passno > 0) { -- _cleanup_free_ char *fsck = NULL; -+ if (streq(where, "/")) { -+ lnk = strjoin(arg_dest, "/", SPECIAL_LOCAL_FS_TARGET, ".wants/", "systemd-fsck-root.service", NULL); -+ if (!lnk) -+ return log_oom(); - -- fsck = unit_name_from_path_instance("systemd-fsck", what, ".service"); -- if (!fsck) -- return log_oom(); -+ mkdir_parents_label(lnk, 0755); -+ if (symlink("systemd-fsck-root.service", lnk) < 0) { -+ log_error("Failed to create symlink %s: %m", lnk); -+ return -errno; -+ } -+ } else { -+ _cleanup_free_ char *fsck = NULL; - -- fprintf(f, -- "Requires=%s\n" -- "After=%s\n", -- fsck, -- fsck); -+ fsck = unit_name_from_path_instance("systemd-fsck", what, ".service"); -+ if (!fsck) -+ return log_oom(); -+ -+ fprintf(f, -+ "Requires=%s\n" -+ "After=%s\n", -+ fsck, -+ fsck); -+ } - } - - -@@ -248,6 +260,7 @@ static int add_mount( - - if (!noauto) { - if (post) { -+ free(lnk); - lnk = strjoin(arg_dest, "/", post, nofail || automount ? ".wants/" : ".requires/", name, NULL); - if (!lnk) - return log_oom(); diff --git a/SOURCES/0222-ima-setup-write-policy-one-line-at-a-time.patch b/SOURCES/0222-ima-setup-write-policy-one-line-at-a-time.patch new file mode 100644 index 0000000..cd5d2f0 --- /dev/null +++ b/SOURCES/0222-ima-setup-write-policy-one-line-at-a-time.patch @@ -0,0 +1,94 @@ +From 877774af9162dde25e314ff99a427dd28435c26a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 10 Jun 2015 15:19:03 -0400 +Subject: [PATCH] ima-setup: write policy one line at a time + +ima_write_policy() expects data to be written as one or more +rules, no more than PAGE_SIZE at a time. Easiest way to ensure +that we are not splitting rules is to read and write one line at +a time. + +https://bugzilla.redhat.com/show_bug.cgi?id=1226948 +(cherry picked from commit 92994160afa888255a7ede525dd16e3f1e2ed10d) + +Cherry-picked from: 9299416 +Resolves: #1222517 +--- + src/core/ima-setup.c | 41 +++++++++++++++++------------------------ + 1 file changed, 17 insertions(+), 24 deletions(-) + +diff --git a/src/core/ima-setup.c b/src/core/ima-setup.c +index 1d4acfa..81ce2cd 100644 +--- a/src/core/ima-setup.c ++++ b/src/core/ima-setup.c +@@ -24,11 +24,6 @@ + #include + #include + #include +-#include +-#include +-#include +-#include +-#include + + #include "ima-setup.h" + #include "util.h" +@@ -39,20 +34,19 @@ + #define IMA_POLICY_PATH "/etc/ima/ima-policy" + + int ima_setup(void) { +- int r = 0; +- + #ifdef HAVE_IMA +- _cleanup_close_ int policyfd = -1, imafd = -1; +- struct stat st; +- char *policy; ++ _cleanup_fclose_ FILE *input = NULL; ++ _cleanup_close_ int imafd = -1; ++ unsigned lineno = 0; ++ char line[page_size()]; + + if (access(IMA_SECFS_DIR, F_OK) < 0) { + log_debug("IMA support is disabled in the kernel, ignoring."); + return 0; + } + +- policyfd = open(IMA_POLICY_PATH, O_RDONLY|O_CLOEXEC); +- if (policyfd < 0) { ++ input = fopen(IMA_POLICY_PATH, "re"); ++ if (!input) { + log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_WARNING, errno, + "Failed to open the IMA custom policy file "IMA_POLICY_PATH", ignoring: %m"); + return 0; +@@ -69,20 +63,19 @@ int ima_setup(void) { + return 0; + } + +- if (fstat(policyfd, &st) < 0) +- return log_error_errno(errno, "Failed to fstat "IMA_POLICY_PATH": %m"); ++ FOREACH_LINE(line, input, ++ return log_error_errno(errno, "Failed to read the IMA custom policy file "IMA_POLICY_PATH": %m")) { ++ size_t len; + +- policy = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, policyfd, 0); +- if (policy == MAP_FAILED) +- return log_error_errno(errno, "Failed to mmap "IMA_POLICY_PATH": %m"); ++ len = strlen(line); ++ lineno++; + +- r = loop_write(imafd, policy, (size_t) st.st_size, false); +- if (r < 0) +- log_error_errno(r, "Failed to load the IMA custom policy file "IMA_POLICY_PATH": %m"); +- else +- log_info("Successfully loaded the IMA custom policy "IMA_POLICY_PATH"."); ++ if (len > 0 && write(imafd, line, len) < 0) ++ return log_error_errno(errno, "Failed to load the IMA custom policy file "IMA_POLICY_PATH"%u: %m", ++ lineno); ++ } + +- munmap(policy, st.st_size); ++ log_info("Successfully loaded the IMA custom policy "IMA_POLICY_PATH"."); + #endif /* HAVE_IMA */ +- return r; ++ return 0; + } diff --git a/SOURCES/0223-ata_id-unbotch-format-specifier.patch b/SOURCES/0223-ata_id-unbotch-format-specifier.patch new file mode 100644 index 0000000..c388f3a --- /dev/null +++ b/SOURCES/0223-ata_id-unbotch-format-specifier.patch @@ -0,0 +1,34 @@ +From b2aa96a5e92762adaff127227338fe5034175fcd Mon Sep 17 00:00:00 2001 +From: Jan Engelhardt +Date: Wed, 24 Jun 2015 01:48:18 +0200 +Subject: [PATCH] ata_id: unbotch format specifier + +Commit v218-247-g11c6f69 broke the output of the utility. "%1$" PRIu64 +"x" expands to "%1$lux", essentially "%lux", which shows the problem. +u and x cannot be combined, u wins as the type character, and x gets +emitted verbatim to stdout. + +References: https://bugzilla.redhat.com/show_bug.cgi?id=1227503 +(cherry picked from commit ec62e858734a66130f68d036c55c2050bde1e52e) + +Cherry-picked from: ec62e85 +Resolves: #1222517 +--- + src/udev/ata_id/ata_id.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/udev/ata_id/ata_id.c b/src/udev/ata_id/ata_id.c +index 9e4f674..b6f28c6 100644 +--- a/src/udev/ata_id/ata_id.c ++++ b/src/udev/ata_id/ata_id.c +@@ -639,8 +639,8 @@ int main(int argc, char *argv[]) + */ + word = identify.wyde[108]; + if ((word & 0xf000) == 0x5000) +- printf("ID_WWN=0x%1$"PRIu64"x\n" +- "ID_WWN_WITH_EXTENSION=0x%1$"PRIu64"x\n", ++ printf("ID_WWN=0x%1$" PRIx64 "\n" ++ "ID_WWN_WITH_EXTENSION=0x%1$" PRIx64 "\n", + identify.octa[108/4]); + + /* from Linux's include/linux/ata.h */ diff --git a/SOURCES/0223-core-allow-PIDs-to-be-watched-by-two-units-at-the-sa.patch b/SOURCES/0223-core-allow-PIDs-to-be-watched-by-two-units-at-the-sa.patch deleted file mode 100644 index 62ebf31..0000000 --- a/SOURCES/0223-core-allow-PIDs-to-be-watched-by-two-units-at-the-sa.patch +++ /dev/null @@ -1,360 +0,0 @@ -From 49bfaaa65107a9d79fbb1276e44fd4e3c98b0e9c Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 7 Feb 2014 11:58:25 +0100 -Subject: [PATCH] core: allow PIDs to be watched by two units at the same time - -In some cases it is interesting to map a PID to two units at the same -time. For example, when a user logs in via a getty, which is reexeced to -/sbin/login that binary will be explicitly referenced as main pid of the -getty service, as well as implicitly referenced as part of the session -scope. - -Conflicts: - src/core/manager.c - src/core/manager.h ---- - src/core/manager.c | 201 ++++++++++++++++++++++++++++++----------------------- - src/core/manager.h | 9 ++- - src/core/unit.c | 28 ++++++-- - 3 files changed, 142 insertions(+), 96 deletions(-) - -diff --git a/src/core/manager.c b/src/core/manager.c -index db5094f..2829c95 100644 ---- a/src/core/manager.c -+++ b/src/core/manager.c -@@ -525,7 +525,10 @@ int manager_new(SystemdRunningAs running_as, bool reexecuting, Manager **_m) { - if (!(m->jobs = hashmap_new(trivial_hash_func, trivial_compare_func))) - goto fail; - -- if (!(m->watch_pids = hashmap_new(trivial_hash_func, trivial_compare_func))) -+ if (!(m->watch_pids1 = hashmap_new(trivial_hash_func, trivial_compare_func))) -+ goto fail; -+ -+ if (!(m->watch_pids2 = hashmap_new(trivial_hash_func, trivial_compare_func))) - goto fail; - - m->cgroup_unit = hashmap_new(string_hash_func, string_compare_func); -@@ -740,7 +743,8 @@ void manager_free(Manager *m) { - - hashmap_free(m->units); - hashmap_free(m->jobs); -- hashmap_free(m->watch_pids); -+ hashmap_free(m->watch_pids1); -+ hashmap_free(m->watch_pids2); - hashmap_free(m->watch_bus); - - if (m->epoll_fd >= 0) -@@ -1247,6 +1251,26 @@ unsigned manager_dispatch_dbus_queue(Manager *m) { - return n; - } - -+static void manager_invoke_notify_message(Manager *m, Unit *u, pid_t pid, char *buf, size_t n) { -+ _cleanup_strv_free_ char **tags = NULL; -+ -+ assert(m); -+ assert(u); -+ assert(buf); -+ assert(n > 0); -+ -+ tags = strv_split(buf, "\n\r"); -+ if (!tags) { -+ log_oom(); -+ return; -+ } -+ -+ log_debug_unit(u->id, "Got notification message for unit %s", u->id); -+ -+ if (UNIT_VTABLE(u)->notify_message) -+ UNIT_VTABLE(u)->notify_message(u, pid, tags); -+} -+ - static int manager_process_notify_fd(Manager *m) { - ssize_t n; - -@@ -1259,6 +1283,8 @@ static int manager_process_notify_fd(Manager *m) { - .iov_len = sizeof(buf)-1, - }; - -+ bool found = false; -+ - union { - struct cmsghdr cmsghdr; - uint8_t buf[CMSG_SPACE(sizeof(struct ucred))]; -@@ -1272,7 +1298,6 @@ static int manager_process_notify_fd(Manager *m) { - }; - struct ucred *ucred; - Unit *u; -- _cleanup_strv_free_ char **tags = NULL; - - n = recvmsg(m->notify_watch.fd, &msghdr, MSG_DONTWAIT); - if (n <= 0) { -@@ -1295,105 +1320,105 @@ static int manager_process_notify_fd(Manager *m) { - - ucred = (struct ucred*) CMSG_DATA(&control.cmsghdr); - -- u = hashmap_get(m->watch_pids, LONG_TO_PTR(ucred->pid)); -- if (!u) { -- u = manager_get_unit_by_pid(m, ucred->pid); -- if (!u) { -- log_warning("Cannot find unit for notify message of PID %lu.", (unsigned long) ucred->pid); -- continue; -- } -- } -- - assert((size_t) n < sizeof(buf)); - buf[n] = 0; -- tags = strv_split(buf, "\n\r"); -- if (!tags) -- return log_oom(); -- -- log_debug_unit(u->id, "Got notification message for unit %s", u->id); -- -- if (UNIT_VTABLE(u)->notify_message) -- UNIT_VTABLE(u)->notify_message(u, ucred->pid, tags); -- } -- -- return 0; --} -- --static int manager_dispatch_sigchld(Manager *m) { -- assert(m); -- -- for (;;) { -- siginfo_t si = {}; -- Unit *u; -- int r; -- -- /* First we call waitd() for a PID and do not reap the -- * zombie. That way we can still access /proc/$PID for -- * it while it is a zombie. */ -- if (waitid(P_ALL, 0, &si, WEXITED|WNOHANG|WNOWAIT) < 0) { -- -- if (errno == ECHILD) -- break; - -- if (errno == EINTR) -- continue; -- -- return -errno; -+ u = manager_get_unit_by_pid(m, ucred->pid); -+ if (u) { -+ manager_invoke_notify_message(m, u, ucred->pid, buf, n); -+ found = true; - } - -- if (si.si_pid <= 0) -- break; -- -- if (si.si_code == CLD_EXITED || si.si_code == CLD_KILLED || si.si_code == CLD_DUMPED) { -- _cleanup_free_ char *name = NULL; -- -- get_process_comm(si.si_pid, &name); -- log_debug("Got SIGCHLD for process %lu (%s)", (unsigned long) si.si_pid, strna(name)); -+ u = hashmap_get(m->watch_pids1, LONG_TO_PTR(ucred->pid)); -+ if (u) { -+ manager_invoke_notify_message(m, u, ucred->pid, buf, n); -+ found = true; - } - -- /* Let's flush any message the dying child might still -- * have queued for us. This ensures that the process -- * still exists in /proc so that we can figure out -- * which cgroup and hence unit it belongs to. */ -- r = manager_process_notify_fd(m); -- if (r < 0) -- return r; -- -- /* And now figure out the unit this belongs to */ -- u = hashmap_get(m->watch_pids, LONG_TO_PTR(si.si_pid)); -- if (!u) -- u = manager_get_unit_by_pid(m, si.si_pid); -- -- /* And now, we actually reap the zombie. */ -- if (waitid(P_PID, si.si_pid, &si, WEXITED) < 0) { -- if (errno == EINTR) -- continue; -- -- return -errno; -+ u = hashmap_get(m->watch_pids2, LONG_TO_PTR(ucred->pid)); -+ if (u) { -+ manager_invoke_notify_message(m, u, ucred->pid, buf, n); -+ found = true; - } - -- if (si.si_code != CLD_EXITED && si.si_code != CLD_KILLED && si.si_code != CLD_DUMPED) -- continue; -+ if (!found) -+ log_warning("Cannot find unit for notify message of PID %lu.",(long unsigned) ucred->pid); -+ } - -- log_debug("Child %lu died (code=%s, status=%i/%s)", -- (long unsigned) si.si_pid, -- sigchld_code_to_string(si.si_code), -- si.si_status, -- strna(si.si_code == CLD_EXITED -- ? exit_status_to_string(si.si_status, EXIT_STATUS_FULL) -- : signal_to_string(si.si_status))); -+ return 0; -+} - -- if (!u) -- continue; -+static void invoke_sigchld_event(Manager *m, Unit *u, siginfo_t *si) { -+ assert(m); -+ assert(u); -+ assert(si); - -- log_debug_unit(u->id, -- "Child %lu belongs to %s", (long unsigned) si.si_pid, u->id); -+ log_debug_unit(u->id, "Child %lu belongs to %s",(long unsigned) si->si_pid, u->id); - -- unit_unwatch_pid(u, si.si_pid); -- UNIT_VTABLE(u)->sigchld_event(u, si.si_pid, si.si_code, si.si_status); -- } -+ unit_unwatch_pid(u, si->si_pid); -+ UNIT_VTABLE(u)->sigchld_event(u, si->si_pid, si->si_code, si->si_status); -+} - -- return 0; -+static int manager_dispatch_sigchld(Manager *m) { -+ assert(m); -+ -+ for (;;) { -+ siginfo_t si = {}; -+ -+ /* First we call waitd() for a PID and do not reap the -+ * zombie. That way we can still access /proc/$PID for -+ * it while it is a zombie. */ -+ if (waitid(P_ALL, 0, &si, WEXITED|WNOHANG|WNOWAIT) < 0) { -+ -+ if (errno == ECHILD) -+ break; -+ -+ if (errno == EINTR) -+ continue; -+ -+ return -errno; -+ } -+ -+ if (si.si_pid <= 0) -+ break; -+ -+ if (si.si_code == CLD_EXITED || si.si_code == CLD_KILLED || si.si_code == CLD_DUMPED) { -+ _cleanup_free_ char *name = NULL; -+ Unit *u; -+ -+ get_process_comm(si.si_pid, &name); -+ -+ log_debug("Child %lu (%s) died (code=%s, status=%i/%s)", -+ (long unsigned) si.si_pid, strna(name), -+ sigchld_code_to_string(si.si_code), -+ si.si_status, -+ strna(si.si_code == CLD_EXITED -+ ? exit_status_to_string(si.si_status, EXIT_STATUS_FULL) -+ : signal_to_string(si.si_status))); -+ -+ /* And now figure out the unit this belongs -+ * to, it might be multiple... */ -+ u = manager_get_unit_by_pid(m, si.si_pid); -+ if (u) -+ invoke_sigchld_event(m, u, &si); -+ u = hashmap_get(m->watch_pids1, LONG_TO_PTR(si.si_pid)); -+ if (u) -+ invoke_sigchld_event(m, u, &si); -+ u = hashmap_get(m->watch_pids2, LONG_TO_PTR(si.si_pid)); -+ if (u) -+ invoke_sigchld_event(m, u, &si); -+ } -+ -+ /* And now, we actually reap the zombie. */ -+ if (waitid(P_PID, si.si_pid, &si, WEXITED) < 0) { -+ if (errno == EINTR) -+ continue; -+ -+ return -errno; -+ } -+ } -+ -+ return 0; - } - - static int manager_start_target(Manager *m, const char *name, JobMode mode) { -diff --git a/src/core/manager.h b/src/core/manager.h -index ee42c5e..0133ea5 100644 ---- a/src/core/manager.h -+++ b/src/core/manager.h -@@ -125,7 +125,14 @@ struct Manager { - /* Units that should be realized */ - LIST_HEAD(Unit, cgroup_queue); - -- Hashmap *watch_pids; /* pid => Unit object n:1 */ -+ /* We use two hash tables here, since the same PID might be -+ * watched by two different units: once the unit that forked -+ * it off, and possibly a different unit to which it was -+ * joined as cgroup member. Since we know that it is either -+ * one or two units for each PID we just use to hashmaps -+ * here. */ -+ Hashmap *watch_pids1; /* pid => Unit object n:1 */ -+ Hashmap *watch_pids2; /* pid => Unit object n:1 */ - - char *notify_socket; - -diff --git a/src/core/unit.c b/src/core/unit.c -index 0332094..a510eb2 100644 ---- a/src/core/unit.c -+++ b/src/core/unit.c -@@ -1665,16 +1665,27 @@ int unit_watch_pid(Unit *u, pid_t pid) { - assert(u); - assert(pid >= 1); - -+ /* Watch a specific PID. We only support one or two units -+ * watching each PID for now, not more. */ -+ -+ r = hashmap_ensure_allocated(&u->manager->watch_pids1, trivial_hash_func, trivial_compare_func); -+ if (r < 0) -+ return r; -+ - r = set_ensure_allocated(&u->pids, trivial_hash_func, trivial_compare_func); - if (r < 0) - return r; - -- /* Watch a specific PID. We only support one unit watching -- * each PID for now. */ -+ r = hashmap_put(u->manager->watch_pids1, LONG_TO_PTR(pid), u); -+ if (r == -EEXIST) { -+ r = hashmap_ensure_allocated(&u->manager->watch_pids2, trivial_hash_func, trivial_compare_func); -+ if (r < 0) -+ return r; - -- r = set_put(u->pids, LONG_TO_PTR(pid)); -+ r = hashmap_put(u->manager->watch_pids2, LONG_TO_PTR(pid), u); -+ } - -- q = hashmap_put(u->manager->watch_pids, LONG_TO_PTR(pid), u); -+ q = set_put(u->pids, LONG_TO_PTR(pid)); - if (q < 0) - return q; - -@@ -1685,7 +1696,8 @@ void unit_unwatch_pid(Unit *u, pid_t pid) { - assert(u); - assert(pid >= 1); - -- hashmap_remove_value(u->manager->watch_pids, LONG_TO_PTR(pid), u); -+ hashmap_remove_value(u->manager->watch_pids1, LONG_TO_PTR(pid), u); -+ hashmap_remove_value(u->manager->watch_pids2, LONG_TO_PTR(pid), u); - set_remove(u->pids, LONG_TO_PTR(pid)); - } - -@@ -1758,8 +1770,10 @@ void unit_unwatch_all_pids(Unit *u) { - - assert(u); - -- SET_FOREACH(e, u->pids, i) -- hashmap_remove_value(u->manager->watch_pids, e, u); -+ SET_FOREACH(e, u->pids, i) { -+ hashmap_remove_value(u->manager->watch_pids1, e, u); -+ hashmap_remove_value(u->manager->watch_pids2, e, u); -+ } - - set_free(u->pids); - u->pids = NULL; diff --git a/SOURCES/0224-core-correctly-unregister-PIDs-from-PID-hashtables.patch b/SOURCES/0224-core-correctly-unregister-PIDs-from-PID-hashtables.patch deleted file mode 100644 index 19726e6..0000000 --- a/SOURCES/0224-core-correctly-unregister-PIDs-from-PID-hashtables.patch +++ /dev/null @@ -1,97 +0,0 @@ -From 8581dc72de05227a236b6ff3751c40f1e0be1b2f Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Thu, 6 Mar 2014 02:19:42 +0100 -Subject: [PATCH] core: correctly unregister PIDs from PID hashtables - -Conflicts: - src/core/unit.c ---- - src/core/unit.c | 41 ++++++++++++++++++----------------------- - 1 file changed, 18 insertions(+), 23 deletions(-) - -diff --git a/src/core/unit.c b/src/core/unit.c -index a510eb2..6ee34ec 100644 ---- a/src/core/unit.c -+++ b/src/core/unit.c -@@ -1668,11 +1668,11 @@ int unit_watch_pid(Unit *u, pid_t pid) { - /* Watch a specific PID. We only support one or two units - * watching each PID for now, not more. */ - -- r = hashmap_ensure_allocated(&u->manager->watch_pids1, trivial_hash_func, trivial_compare_func); -+ r = set_ensure_allocated(&u->pids, trivial_hash_func, trivial_compare_func); - if (r < 0) - return r; - -- r = set_ensure_allocated(&u->pids, trivial_hash_func, trivial_compare_func); -+ r = hashmap_ensure_allocated(&u->manager->watch_pids1, trivial_hash_func, trivial_compare_func); - if (r < 0) - return r; - -@@ -1701,7 +1701,17 @@ void unit_unwatch_pid(Unit *u, pid_t pid) { - set_remove(u->pids, LONG_TO_PTR(pid)); - } - --static int watch_pids_in_path(Unit *u, const char *path) { -+void unit_unwatch_all_pids(Unit *u) { -+ assert(u); -+ -+ while (!set_isempty(u->pids)) -+ unit_unwatch_pid(u, PTR_TO_LONG(set_first(u->pids))); -+ -+ set_free(u->pids); -+ u->pids = NULL; -+} -+ -+static int unit_watch_pids_in_path(Unit *u, const char *path) { - _cleanup_closedir_ DIR *d = NULL; - _cleanup_fclose_ FILE *f = NULL; - int ret = 0, r; -@@ -1739,7 +1749,7 @@ static int watch_pids_in_path(Unit *u, const char *path) { - if (!p) - return -ENOMEM; - -- r = watch_pids_in_path(u, p); -+ r = unit_watch_pids_in_path(u, p); - if (r < 0 && ret >= 0) - ret = r; - } -@@ -1756,27 +1766,12 @@ static int watch_pids_in_path(Unit *u, const char *path) { - int unit_watch_all_pids(Unit *u) { - assert(u); - -- if (!u->cgroup_path) -- return -ENOENT; -- - /* Adds all PIDs from our cgroup to the set of PIDs we watch */ - -- return watch_pids_in_path(u, u->cgroup_path); --} -- --void unit_unwatch_all_pids(Unit *u) { -- Iterator i; -- void *e; -- -- assert(u); -- -- SET_FOREACH(e, u->pids, i) { -- hashmap_remove_value(u->manager->watch_pids1, e, u); -- hashmap_remove_value(u->manager->watch_pids2, e, u); -- } -+ if (!u->cgroup_path) -+ return -ENOENT; - -- set_free(u->pids); -- u->pids = NULL; -+ return unit_watch_pids_in_path(u, u->cgroup_path); - } - - void unit_tidy_watch_pids(Unit *u, pid_t except1, pid_t except2) { -@@ -1794,7 +1789,7 @@ void unit_tidy_watch_pids(Unit *u, pid_t except1, pid_t except2) { - continue; - - if (kill(pid, 0) < 0 && errno == ESRCH) -- set_remove(u->pids, e); -+ unit_unwatch_pid(u, pid); - } - } - diff --git a/SOURCES/0224-install-explicitly-return-0-on-success.patch b/SOURCES/0224-install-explicitly-return-0-on-success.patch new file mode 100644 index 0000000..b3073af --- /dev/null +++ b/SOURCES/0224-install-explicitly-return-0-on-success.patch @@ -0,0 +1,35 @@ +From c086e8c91b0dc455bfa5fa09f3f5aa20c582b2a0 Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Thu, 25 Jun 2015 16:06:40 +0200 +Subject: [PATCH] install: explicitly return 0 on success + +Maybe there is some left-over value stored in r from previous function +call. Let's make sure we always return consistent error code when we reach end of +the function body. + +Fixes following crash of test-install, + +Assertion 'r == 0' failed at src/test/test-install.c:52, function main(). Aborting. +[1] 11703 abort (core dumped) ./test-install + +(cherry picked from commit 77cd2c87a47c49aa9063fbaa4d9077f4a381cab1) + +Cherry-picked from: 77cd2c8 +Resolves: #1222517 +--- + src/shared/install.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index b62065b..aa197e9 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -2265,7 +2265,7 @@ int unit_file_get_list( + } + } + +- return r; ++ return 0; + } + + static const char* const unit_file_state_table[_UNIT_FILE_STATE_MAX] = { diff --git a/SOURCES/0225-logind-uninitialized-timer_fd-is-set-to-1.patch b/SOURCES/0225-logind-uninitialized-timer_fd-is-set-to-1.patch deleted file mode 100644 index 214ad91..0000000 --- a/SOURCES/0225-logind-uninitialized-timer_fd-is-set-to-1.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 855cfba6fb79066f46f02bbab09d498eda0d7cdd Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Thu, 13 Mar 2014 11:16:36 +0100 -Subject: [PATCH] logind: uninitialized timer_fd is set to -1 - ---- - src/login/logind-session.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/login/logind-session.c b/src/login/logind-session.c -index b0e4bf6..730f11d 100644 ---- a/src/login/logind-session.c -+++ b/src/login/logind-session.c -@@ -657,7 +657,7 @@ static int session_unlink_x11_socket(Session *s) { - static void session_close_timer_fd(Session *s) { - assert(s); - -- if (s->timer_fd <= 0) -+ if (s->timer_fd < 0) - return; - - hashmap_remove(s->manager->timer_fds, INT_TO_PTR(s->timer_fd + 1)); diff --git a/SOURCES/0225-systemd.service.xml-document-that-systemd-removes-th.patch b/SOURCES/0225-systemd.service.xml-document-that-systemd-removes-th.patch new file mode 100644 index 0000000..c7623d2 --- /dev/null +++ b/SOURCES/0225-systemd.service.xml-document-that-systemd-removes-th.patch @@ -0,0 +1,30 @@ +From 7dbfc725ccbdcdf33aa46f97a68275fbd5f936c5 Mon Sep 17 00:00:00 2001 +From: Felipe Sateler +Date: Sat, 27 Jun 2015 17:25:06 -0300 +Subject: [PATCH] systemd.service.xml: document that systemd removes the + PIDFile + +(cherry picked from commit 341db20b7e98199003b4ce6aa52b339757828204) + +Cherry-picked from: 341db20 +Resolves: #1222517 +--- + man/systemd.service.xml | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/man/systemd.service.xml b/man/systemd.service.xml +index f598705..a274db4 100644 +--- a/man/systemd.service.xml ++++ b/man/systemd.service.xml +@@ -226,7 +226,10 @@ + services where Type= is set to + . systemd will read the PID of the + main process of the daemon after start-up of the service. +- systemd will not write to the file configured here. ++ systemd will not write to the file configured here, although ++ it will remove the file after the service has shut down if it ++ still exists. ++ + + + diff --git a/SOURCES/0226-core-handle-log-target-null-when-calling-systemd-shu.patch b/SOURCES/0226-core-handle-log-target-null-when-calling-systemd-shu.patch new file mode 100644 index 0000000..5fb2cb4 --- /dev/null +++ b/SOURCES/0226-core-handle-log-target-null-when-calling-systemd-shu.patch @@ -0,0 +1,31 @@ +From ce82f7886b2326a507d523dcf459be4ab7fd8eb1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Iago=20L=C3=B3pez=20Galeiras?= +Date: Tue, 30 Jun 2015 15:08:49 +0200 +Subject: [PATCH] core: handle --log-target=null when calling systemd-shutdown + +When shutting down, if systemd was started with --log-target=null, +systemd-shutdown was being called with --log-target=console. + +(cherry picked from commit 10f00ff17b9c9b55dc77c99797d27cb819fa5fdf) + +Cherry-picked from: 10f00ff +Resolves: #1222517 +--- + src/core/main.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/core/main.c b/src/core/main.c +index fd527d4..1c8d67d 100644 +--- a/src/core/main.c ++++ b/src/core/main.c +@@ -2001,6 +2001,10 @@ finish: + command_line[pos++] = "kmsg"; + break; + ++ case LOG_TARGET_NULL: ++ command_line[pos++] = "null"; ++ break; ++ + case LOG_TARGET_CONSOLE: + default: + command_line[pos++] = "console"; diff --git a/SOURCES/0226-logind-add-forgotten-return-statement.patch b/SOURCES/0226-logind-add-forgotten-return-statement.patch deleted file mode 100644 index dc11357..0000000 --- a/SOURCES/0226-logind-add-forgotten-return-statement.patch +++ /dev/null @@ -1,22 +0,0 @@ -From bb13793eb734f73c4faba11d4d90077c977ec673 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Thu, 13 Mar 2014 11:18:27 +0100 -Subject: [PATCH] logind: add forgotten return statement - ---- - src/login/logind-session.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/login/logind-session.c b/src/login/logind-session.c -index 730f11d..ece222a 100644 ---- a/src/login/logind-session.c -+++ b/src/login/logind-session.c -@@ -782,6 +782,8 @@ void session_release(Session *s) { - goto out; - } - -+ return; -+ - out: - if (s->timer_fd >= 0) { - close_nointr(s->timer_fd); diff --git a/SOURCES/0227-core-remove-extra-semicolon-and-make-gcc-shut-up.patch b/SOURCES/0227-core-remove-extra-semicolon-and-make-gcc-shut-up.patch deleted file mode 100644 index 96c3003..0000000 --- a/SOURCES/0227-core-remove-extra-semicolon-and-make-gcc-shut-up.patch +++ /dev/null @@ -1,22 +0,0 @@ -From dce7f7c81bebf628623aad4a666fef6449294a8e Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Thu, 13 Mar 2014 11:25:45 +0100 -Subject: [PATCH] core: remove extra semicolon and make gcc shut up - ---- - src/core/mount.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/core/mount.c b/src/core/mount.c -index 62ec7fe..3672338 100644 ---- a/src/core/mount.c -+++ b/src/core/mount.c -@@ -1414,7 +1414,7 @@ static int mount_add_one( - bool set_flags) { - int r; - Unit *u; -- bool delete, changed = false;; -+ bool delete, changed = false; - char *e, *w = NULL, *o = NULL, *f = NULL; - MountParameters *p; - bool load_extras = false; diff --git a/SOURCES/0227-man-ProtectHome-protects-root-as-well.patch b/SOURCES/0227-man-ProtectHome-protects-root-as-well.patch new file mode 100644 index 0000000..5fe757e --- /dev/null +++ b/SOURCES/0227-man-ProtectHome-protects-root-as-well.patch @@ -0,0 +1,30 @@ +From 421fa6e97928bca5a55414ad38bd9659d0e99a15 Mon Sep 17 00:00:00 2001 +From: Christian Hesse +Date: Tue, 30 Jun 2015 19:12:20 +0200 +Subject: [PATCH] man: ProtectHome= protects /root as well + +(cherry picked from commit 5833143708733a3fc9e6935922bf11d7d27cb768) + +Cherry-picked from: 5833143 +Resolves: #1222517 +--- + man/systemd.exec.xml | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml +index 56b53e6..5b93aa7 100644 +--- a/man/systemd.exec.xml ++++ b/man/systemd.exec.xml +@@ -858,9 +858,10 @@ + + Takes a boolean argument or + read-only. If true, the directories +- /home and /run/user ++ /home, /root and ++ /run/user + are made inaccessible and empty for processes invoked by this +- unit. If set to read-only, the two ++ unit. If set to read-only, the three + directories are made read-only instead. It is recommended to + enable this setting for all long-running services (in + particular network-facing ones), to ensure they cannot get diff --git a/SOURCES/0228-core-fix-detection-of-dead-processes.patch b/SOURCES/0228-core-fix-detection-of-dead-processes.patch deleted file mode 100644 index 9c35a9b..0000000 --- a/SOURCES/0228-core-fix-detection-of-dead-processes.patch +++ /dev/null @@ -1,87 +0,0 @@ -From f04488d2842544de263e245ee1a21e789ec818a8 Mon Sep 17 00:00:00 2001 -From: Yuxuan Shui -Date: Sat, 15 Feb 2014 02:38:50 +0800 -Subject: [PATCH] core: fix detection of dead processes - -Commit 5ba6985b moves the UNIT_VTABLE(u)->sigchld_event before systemd -actually reaps the zombie. Which leads to service_load_pid_file accepting -zombie as a valid pid. - -This fixes timeouts like: -[ 2746.602243] systemd[1]: chronyd.service stop-sigterm timed out. Killing. -[ 2836.852545] systemd[1]: chronyd.service still around after SIGKILL. Ignoring. -[ 2927.102187] systemd[1]: chronyd.service stop-final-sigterm timed out. Killing. -[ 3017.352560] systemd[1]: chronyd.service still around after final SIGKILL. Entering failed mode. ---- - src/core/service.c | 8 ++++++++ - src/shared/util.c | 25 +++++++++++++++++++++++++ - src/shared/util.h | 1 + - 3 files changed, 34 insertions(+) - -diff --git a/src/core/service.c b/src/core/service.c -index dff5286..3eacf3b 100644 ---- a/src/core/service.c -+++ b/src/core/service.c -@@ -1429,6 +1429,14 @@ static int service_load_pid_file(Service *s, bool may_warn) { - return -ESRCH; - } - -+ if (get_process_state(pid) == 'Z') { -+ if (may_warn) -+ log_info_unit(UNIT(s)->id, -+ "PID "PID_FMT" read from file %s is a zombie.", -+ pid, s->pid_file); -+ return -ESRCH; -+ } -+ - if (s->main_pid_known) { - if (pid == s->main_pid) - return 0; -diff --git a/src/shared/util.c b/src/shared/util.c -index 2086847..090a204 100644 ---- a/src/shared/util.c -+++ b/src/shared/util.c -@@ -558,6 +558,31 @@ char *truncate_nl(char *s) { - return s; - } - -+int get_process_state(pid_t pid) { -+ const char *p; -+ char state; -+ int r; -+ _cleanup_free_ char *line = NULL; -+ -+ assert(pid >= 0); -+ -+ p = procfs_file_alloca(pid, "stat"); -+ r = read_one_line_file(p, &line); -+ if (r < 0) -+ return r; -+ -+ p = strrchr(line, ')'); -+ if (!p) -+ return -EIO; -+ -+ p++; -+ -+ if (sscanf(p, " %c", &state) != 1) -+ return -EIO; -+ -+ return (unsigned char) state; -+} -+ - int get_process_comm(pid_t pid, char **name) { - const char *p; - -diff --git a/src/shared/util.h b/src/shared/util.h -index 222abe0..1d60687 100644 ---- a/src/shared/util.h -+++ b/src/shared/util.h -@@ -215,6 +215,7 @@ char *file_in_same_dir(const char *path, const char *filename); - - int rmdir_parents(const char *path, const char *stop); - -+char get_process_state(pid_t pid); - int get_process_comm(pid_t pid, char **name); - int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char **line); - int get_process_exe(pid_t pid, char **name); diff --git a/SOURCES/0228-timedatectl-trim-non-local-RTC-warning-to-80-chars-w.patch b/SOURCES/0228-timedatectl-trim-non-local-RTC-warning-to-80-chars-w.patch new file mode 100644 index 0000000..3f3d9af --- /dev/null +++ b/SOURCES/0228-timedatectl-trim-non-local-RTC-warning-to-80-chars-w.patch @@ -0,0 +1,35 @@ +From 205750e2144e942bb6c04bb901684cc1aea82a26 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Vedran=20Mileti=C4=87?= +Date: Thu, 2 Jul 2015 00:13:31 +0200 +Subject: [PATCH] timedatectl: trim non-local RTC warning to 80 chars wide + +(cherry picked from commit ab59f4123a6f9c32953e522cc9afc5fc610d59ca) + +Cherry-picked from: ab59f41 +Resolves: #1222517 +--- + src/timedate/timedatectl.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +diff --git a/src/timedate/timedatectl.c b/src/timedate/timedatectl.c +index 4d89886..1accccb 100644 +--- a/src/timedate/timedatectl.c ++++ b/src/timedate/timedatectl.c +@@ -190,11 +190,12 @@ static void print_status_info(const StatusInfo *i) { + + if (i->rtc_local) + fputs("\n" ANSI_HIGHLIGHT_ON +- "Warning: The system is configured to read the RTC time in the local time zone. This\n" +- " mode can not be fully supported. It will create various problems with time\n" +- " zone changes and daylight saving time adjustments. The RTC time is never updated,\n" +- " it relies on external facilities to maintain it. If at all possible, use\n" +- " RTC in UTC by calling 'timedatectl set-local-rtc 0'" ANSI_HIGHLIGHT_OFF ".\n", stdout); ++ "Warning: The system is configured to read the RTC time in the local time zone.\n" ++ " This mode can not be fully supported. It will create various problems\n" ++ " with time zone changes and daylight saving time adjustments. The RTC\n" ++ " time is never updated, it relies on external facilities to maintain it.\n" ++ " If at all possible, use RTC in UTC by calling\n" ++ " 'timedatectl set-local-rtc 0'" ANSI_HIGHLIGHT_OFF ".\n", stdout); + } + + static int show_status(sd_bus *bus, char **args, unsigned n) { diff --git a/SOURCES/0229-Fix-prototype-of-get_process_state.patch b/SOURCES/0229-Fix-prototype-of-get_process_state.patch deleted file mode 100644 index 571ba22..0000000 --- a/SOURCES/0229-Fix-prototype-of-get_process_state.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 9ada721f27bbf373f407b40de1ae558397e4c851 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Fri, 14 Feb 2014 23:04:50 -0500 -Subject: [PATCH] Fix prototype of get_process_state - ---- - src/shared/util.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/shared/util.h b/src/shared/util.h -index 1d60687..3a4bc98 100644 ---- a/src/shared/util.h -+++ b/src/shared/util.h -@@ -215,7 +215,7 @@ char *file_in_same_dir(const char *path, const char *filename); - - int rmdir_parents(const char *path, const char *stop); - --char get_process_state(pid_t pid); -+int get_process_state(pid_t pid); - int get_process_comm(pid_t pid, char **name); - int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char **line); - int get_process_exe(pid_t pid, char **name); diff --git a/SOURCES/0229-escape-fix-exit-code.patch b/SOURCES/0229-escape-fix-exit-code.patch new file mode 100644 index 0000000..1c00f1d --- /dev/null +++ b/SOURCES/0229-escape-fix-exit-code.patch @@ -0,0 +1,26 @@ +From 3eb63550d4222d9edd6ed2d257b8b03eff65fd24 Mon Sep 17 00:00:00 2001 +From: Michael Marineau +Date: Wed, 1 Jul 2015 23:46:42 -0700 +Subject: [PATCH] escape: fix exit code + +r == 0 indicates success, not failure + +(cherry picked from commit ff9c82cc399c37dd3d3fad4ec116b33c9efe70ea) + +Cherry-picked from: ff9c82c +Resolves: #1222517 +--- + src/escape/escape.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/escape/escape.c b/src/escape/escape.c +index f2a0721..766a2c2 100644 +--- a/src/escape/escape.c ++++ b/src/escape/escape.c +@@ -232,5 +232,5 @@ int main(int argc, char *argv[]) { + fputc('\n', stdout); + + finish: +- return r <= 0 ? EXIT_FAILURE : EXIT_SUCCESS; ++ return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; + } diff --git a/SOURCES/0230-core-check-for-return-value-from-get_process_state.patch b/SOURCES/0230-core-check-for-return-value-from-get_process_state.patch deleted file mode 100644 index 411e573..0000000 --- a/SOURCES/0230-core-check-for-return-value-from-get_process_state.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 54461c902d71e43fd5cc0010e0352903685c3974 Mon Sep 17 00:00:00 2001 -From: Yuxuan Shui -Date: Sat, 15 Feb 2014 13:20:55 +0800 -Subject: [PATCH] core: check for return value from get_process_state - -Fix for commit e10c9985bb. ---- - src/core/service.c | 12 +++++++++--- - 1 file changed, 9 insertions(+), 3 deletions(-) - -diff --git a/src/core/service.c b/src/core/service.c -index 3eacf3b..f6fdbbc 100644 ---- a/src/core/service.c -+++ b/src/core/service.c -@@ -1429,11 +1429,17 @@ static int service_load_pid_file(Service *s, bool may_warn) { - return -ESRCH; - } - -- if (get_process_state(pid) == 'Z') { -+ r = get_process_state(pid); -+ if (r < 0) { -+ if (may_warn) -+ log_info_unit(UNIT(s)->id, "Failed to read /proc/%d/stat: %s", -+ pid, strerror(-r)); -+ return r; -+ } else if (r == 'Z') { - if (may_warn) - log_info_unit(UNIT(s)->id, -- "PID "PID_FMT" read from file %s is a zombie.", -- pid, s->pid_file); -+ "PID %lu read from file %s is a zombie.", -+ (unsigned long) pid, s->pid_file); - return -ESRCH; - } - diff --git a/SOURCES/0230-man-information-about-available-properties.patch b/SOURCES/0230-man-information-about-available-properties.patch new file mode 100644 index 0000000..38a7d09 --- /dev/null +++ b/SOURCES/0230-man-information-about-available-properties.patch @@ -0,0 +1,54 @@ +From 285bd714e050c189f6e5e9aa6b59173997ae550e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 29 Jun 2015 20:19:56 -0400 +Subject: [PATCH] man: information about available properties + +https://bugzilla.redhat.com/show_bug.cgi?id=1144496 +(cherry picked from commit ea539eb65950bea7a9734424e660ef84f6f30e6c) + +Cherry-picked from: ea539eb +Resolves: #1222517 +--- + man/systemctl.xml | 28 +++++++++++++++++++++++----- + 1 file changed, 23 insertions(+), 5 deletions(-) + +diff --git a/man/systemctl.xml b/man/systemctl.xml +index 44ec0d7..6b29b8c 100644 +--- a/man/systemctl.xml ++++ b/man/systemctl.xml +@@ -111,12 +111,30 @@ + + + When showing unit/job/manager properties with the +- show command, limit display to certain +- properties as specified as argument. If not specified, all +- set properties are shown. The argument should be a ++ show command, limit display to properties ++ specified in the argument. The argument should be a + comma-separated list of property names, such as +- MainPID. If specified more than once, all +- properties with the specified names are shown. ++ MainPID. Unless specified, all known ++ properties are shown. If specified more than once, all ++ properties with the specified names are shown. Shell ++ completion is implemented for property names. ++ ++ For the manager itself, ++ systemctl show will show all available ++ properties. Those properties are documented in ++ systemd-system.conf5. ++ ++ ++ Properties for units vary by unit type, so showing any ++ unit (even a non-existent one) is a way to list properties ++ pertaining to this type. Similarly showing any job will list ++ properties pertaining to all jobs. Properties for units are ++ documented in ++ systemd.unit5, ++ and the pages for individual unit types ++ systemd.service5, ++ systemd.socket5, ++ etc. + + + diff --git a/SOURCES/0231-journal-in-persistent-mode-create-var-log-journal-wi.patch b/SOURCES/0231-journal-in-persistent-mode-create-var-log-journal-wi.patch new file mode 100644 index 0000000..717b98a --- /dev/null +++ b/SOURCES/0231-journal-in-persistent-mode-create-var-log-journal-wi.patch @@ -0,0 +1,36 @@ +From c9c9111ad96ab8827a8866f80adbacf4f58e055e Mon Sep 17 00:00:00 2001 +From: Dimitri John Ledkov +Date: Fri, 3 Jul 2015 11:34:12 +0100 +Subject: [PATCH] journal: in persistent mode create /var/log/journal, with all + parents. + +systemd-journald races with systemd-tmpfiles-setup, and hence both are +started at about the same time. On a bare-bones system (e.g. with +empty /var, or even non-existent /var), systemd-tmpfiles will create +/var/log. But it can happen too late, that is systemd-journald already +attempted to mkdir /var/log/journal, ignoring the error. Thus failing +to create /var/log/journal. One option, without modifiying the +dependency graph is to create /var/log/journal directory with parents, +when persistent storage has been requested. + +(cherry picked from commit ac892057c2ddd8f06323c73ebd80423cc3ec7190) + +Cherry-picked from: ac89205 +Resolves: #1222517 +--- + src/journal/journald-server.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c +index 04839c9..d692c06 100644 +--- a/src/journal/journald-server.c ++++ b/src/journal/journald-server.c +@@ -942,7 +942,7 @@ static int system_journal_open(Server *s, bool flush_requested) { + * the machine path */ + + if (s->storage == STORAGE_PERSISTENT) +- (void) mkdir("/var/log/journal/", 0755); ++ (void) mkdir_p("/var/log/journal/", 0755); + + fn = strjoina("/var/log/journal/", ids); + (void) mkdir(fn, 0755); diff --git a/SOURCES/0231-unit-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch b/SOURCES/0231-unit-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch deleted file mode 100644 index d412557..0000000 --- a/SOURCES/0231-unit-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 95f08deefa7c0611854d2831960e77be9a814969 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Wed, 2 Apr 2014 15:13:18 +0200 -Subject: [PATCH] unit: add waiting jobs to run queue in unit_coldplug - -When we have job installed and added to run queue for service which is still in -dead state and systemd initiates reload then after reload we never add -deserialized job to the run queue again. This is caused by check in -service_coldplug() where we check if deserialized state is something else than -dead state, which is not the case thus we never call service_set_state() and -finally unit_notify() where we would have added job to the run queue. ---- - src/core/unit.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/src/core/unit.c b/src/core/unit.c -index 6ee34ec..a4e6c18 100644 ---- a/src/core/unit.c -+++ b/src/core/unit.c -@@ -2539,6 +2539,9 @@ int unit_coldplug(Unit *u) { - r = job_coldplug(u->job); - if (r < 0) - return r; -+ -+ if (u->job->state == JOB_WAITING) -+ job_add_to_run_queue(u->job); - } else if (u->deserialized_job >= 0) { - /* legacy */ - r = manager_add_job(u->manager, u->deserialized_job, u, JOB_IGNORE_REQUIREMENTS, false, NULL, NULL); diff --git a/SOURCES/0232-logind-session-save-stopping-flag.patch b/SOURCES/0232-logind-session-save-stopping-flag.patch deleted file mode 100644 index e19886b..0000000 --- a/SOURCES/0232-logind-session-save-stopping-flag.patch +++ /dev/null @@ -1,60 +0,0 @@ -From bd9127d97ae66b547a6e3a89a70b5045d706b68c Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Wed, 2 Apr 2014 14:41:26 +0200 -Subject: [PATCH] logind-session: save stopping flag - ---- - src/login/logind-session.c | 15 ++++++++++++--- - 1 file changed, 12 insertions(+), 3 deletions(-) - -diff --git a/src/login/logind-session.c b/src/login/logind-session.c -index ece222a..0fa290b 100644 ---- a/src/login/logind-session.c -+++ b/src/login/logind-session.c -@@ -187,12 +187,14 @@ int session_save(Session *s) { - "USER=%s\n" - "ACTIVE=%i\n" - "STATE=%s\n" -- "REMOTE=%i\n", -+ "REMOTE=%i\n" -+ "STOPPING=%i\n", - (unsigned long) s->user->uid, - s->user->name, - session_is_active(s), - session_state_to_string(session_get_state(s)), -- s->remote); -+ s->remote, -+ s->stopping); - - if (s->type >= 0) - fprintf(f, "TYPE=%s\n", session_type_to_string(s->type)); -@@ -267,7 +269,8 @@ int session_load(Session *s) { - *class = NULL, - *uid = NULL, - *realtime = NULL, -- *monotonic = NULL; -+ *monotonic = NULL, -+ *stopping = NULL; - - int k, r; - -@@ -291,6 +294,7 @@ int session_load(Session *s) { - "UID", &uid, - "REALTIME", &realtime, - "MONOTONIC", &monotonic, -+ "STOPPING", &stopping, - NULL); - - if (r < 0) { -@@ -391,6 +395,11 @@ int session_load(Session *s) { - s->timestamp.monotonic = l; - } - -+ if (stopping) { -+ k = parse_boolean(stopping); -+ if (k >= 0) -+ s->stopping = k; -+ } - return r; - } - diff --git a/SOURCES/0232-sysv-generator-fix-wrong-Overwriting-existing-symlin.patch b/SOURCES/0232-sysv-generator-fix-wrong-Overwriting-existing-symlin.patch new file mode 100644 index 0000000..6b64911 --- /dev/null +++ b/SOURCES/0232-sysv-generator-fix-wrong-Overwriting-existing-symlin.patch @@ -0,0 +1,75 @@ +From c59c376b2623330a70ab692844ca00eb58f67576 Mon Sep 17 00:00:00 2001 +From: Martin Pitt +Date: Thu, 19 Feb 2015 11:06:24 +0100 +Subject: [PATCH] sysv-generator: fix wrong "Overwriting existing symlink" + warnings + +Fix result testing of is_symlink() to ignore negative results, which happen if +the file name does not exist at all. In this case we do not want a warning and +unlink the non-existing link. + +https://bugs.debian.org/778700 +(cherry picked from commit 4e5589836c9e143796c3f3d81e67ab7a9209e2b0) + +Apparently this was missed for some reason and did not end up in +stable previously. + +Cherry-picked from: 4e55898 +Resolves: #1222517 +--- + src/sysv-generator/sysv-generator.c | 2 +- + test/sysv-generator-test.py | 7 +++++++ + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c +index cfc4a99..3c6cb8f 100644 +--- a/src/sysv-generator/sysv-generator.c ++++ b/src/sysv-generator/sysv-generator.c +@@ -166,7 +166,7 @@ static int generate_unit_file(SysvStub *s) { + /* We might already have a symlink with the same name from a Provides:, + * or from backup files like /etc/init.d/foo.bak. Real scripts always win, + * so remove an existing link */ +- if (is_symlink(unit)) { ++ if (is_symlink(unit) > 0) { + log_warning("Overwriting existing symlink %s with real service", unit); + (void) unlink(unit); + } +diff --git a/test/sysv-generator-test.py b/test/sysv-generator-test.py +index 509899e..e716d70 100644 +--- a/test/sysv-generator-test.py ++++ b/test/sysv-generator-test.py +@@ -178,6 +178,8 @@ class SysvGeneratorTest(unittest.TestCase): + self.assertEqual(s.get('Service', 'ExecStop'), + '%s stop' % init_script) + ++ self.assertNotIn('Overwriting', err) ++ + def test_simple_enabled_all(self): + '''simple service without dependencies, enabled in all runlevels''' + +@@ -185,6 +187,7 @@ class SysvGeneratorTest(unittest.TestCase): + err, results = self.run_generator() + self.assertEqual(list(results), ['foo.service']) + self.assert_enabled('foo.service', [2, 3, 4, 5]) ++ self.assertNotIn('Overwriting', err) + + def test_simple_enabled_some(self): + '''simple service without dependencies, enabled in some runlevels''' +@@ -270,6 +273,7 @@ class SysvGeneratorTest(unittest.TestCase): + for f in ['bar.service', 'baz.service']: + self.assertEqual(os.readlink(os.path.join(self.out_dir, f)), + 'foo.service') ++ self.assertNotIn('Overwriting', err) + + def test_same_provides_in_multiple_scripts(self): + '''multiple init.d scripts provide the same name''' +@@ -289,6 +293,9 @@ class SysvGeneratorTest(unittest.TestCase): + self.add_sysv('bar', {'Provides': 'bar'}, enable=True) + err, results = self.run_generator() + self.assertEqual(sorted(results), ['bar.service', 'foo.service']) ++ # we do expect an overwrite here, bar.service should overwrite the ++ # alias link from foo.service ++ self.assertIn('Overwriting', err) + + def test_nonexecutable_script(self): + '''ignores non-executable init.d script''' diff --git a/SOURCES/0233-mount-don-t-claim-a-device-is-gone-from-proc-self-mo.patch b/SOURCES/0233-mount-don-t-claim-a-device-is-gone-from-proc-self-mo.patch new file mode 100644 index 0000000..a060bfe --- /dev/null +++ b/SOURCES/0233-mount-don-t-claim-a-device-is-gone-from-proc-self-mo.patch @@ -0,0 +1,92 @@ +From 6b8fedd82c23f1d8c334c3081a1befebedc40f1f Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 19 May 2015 13:50:36 +0200 +Subject: [PATCH] mount: don't claim a device is gone from /proc/self/mountinfo + before it is gone from *all* lines + +Devices might be referenced by multiple mount points in +/proc/self/mountinfo, hence we should consider them unmounted only after +they disappeared from all lines, not just from one. + +http://lists.freedesktop.org/archives/systemd-devel/2015-May/032026.html +(cherry picked from commit fcd8b266edf0df2b85079fcf7b099cd4028740e6) + +Cherry-picked from: +Resolves: #1222517 +--- + src/core/mount.c | 30 +++++++++++++++++++++++++++--- + 1 file changed, 27 insertions(+), 3 deletions(-) + +diff --git a/src/core/mount.c b/src/core/mount.c +index fd4fb6f..fa63f24 100644 +--- a/src/core/mount.c ++++ b/src/core/mount.c +@@ -1698,7 +1698,10 @@ fail: + } + + static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents, void *userdata) { ++ _cleanup_set_free_ Set *around = NULL, *gone = NULL; + Manager *m = userdata; ++ const char *what; ++ Iterator i; + Unit *u; + int r; + +@@ -1765,6 +1768,8 @@ static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents, + + if (!mount->is_mounted) { + ++ /* A mount point is gone */ ++ + mount->from_proc_self_mountinfo = false; + + switch (mount->state) { +@@ -1780,13 +1785,17 @@ static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents, + break; + } + +- if (mount->parameters_proc_self_mountinfo.what) +- (void) device_found_node(m, mount->parameters_proc_self_mountinfo.what, false, DEVICE_FOUND_MOUNT, true); ++ /* Remember that this device might just have disappeared */ ++ if (mount->parameters_proc_self_mountinfo.what) { + ++ if (set_ensure_allocated(&gone, &string_hash_ops) < 0 || ++ set_put(gone, mount->parameters_proc_self_mountinfo.what) < 0) ++ log_oom(); /* we don't care too much about OOM here... */ ++ } + + } else if (mount->just_mounted || mount->just_changed) { + +- /* New or changed mount entry */ ++ /* A mount point was added or changed */ + + switch (mount->state) { + +@@ -1811,12 +1820,27 @@ static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents, + mount_set_state(mount, mount->state); + break; + } ++ ++ if (mount->parameters_proc_self_mountinfo.what) { ++ ++ if (set_ensure_allocated(&around, &string_hash_ops) < 0 || ++ set_put(around, mount->parameters_proc_self_mountinfo.what) < 0) ++ log_oom(); ++ } + } + + /* Reset the flags for later calls */ + mount->is_mounted = mount->just_mounted = mount->just_changed = false; + } + ++ SET_FOREACH(what, gone, i) { ++ if (set_contains(around, what)) ++ continue; ++ ++ /* Let the device units know that the device is no longer mounted */ ++ (void) device_found_node(m, what, false, DEVICE_FOUND_MOUNT, true); ++ } ++ + return 0; + } + diff --git a/SOURCES/0233-units-serial-getty-.service-add-Install-section.patch b/SOURCES/0233-units-serial-getty-.service-add-Install-section.patch deleted file mode 100644 index dd560ff..0000000 --- a/SOURCES/0233-units-serial-getty-.service-add-Install-section.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 8ade7cd519f3cdccc81ed8c2fb2f72df48a191d7 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Mon, 24 Feb 2014 08:02:28 -0500 -Subject: [PATCH] units/serial-getty@.service: add [Install] section - -This makes it easier to manually enable and disable -specific gettys, and also mirrors getty@.service. - -http://lists.freedesktop.org/archives/systemd-devel/2014-February/017329.html - -Resolves: #1083936 ---- - units/serial-getty@.service.m4 | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/units/serial-getty@.service.m4 b/units/serial-getty@.service.m4 -index e32c6b7..aea078f 100644 ---- a/units/serial-getty@.service.m4 -+++ b/units/serial-getty@.service.m4 -@@ -33,3 +33,6 @@ TTYVHangup=yes - KillMode=process - IgnoreSIGPIPE=no - SendSIGHUP=yes -+ -+[Install] -+WantedBy=getty.target diff --git a/SOURCES/0234-mount-properly-check-for-mounts-currently-in-proc-se.patch b/SOURCES/0234-mount-properly-check-for-mounts-currently-in-proc-se.patch new file mode 100644 index 0000000..d9a2ab9 --- /dev/null +++ b/SOURCES/0234-mount-properly-check-for-mounts-currently-in-proc-se.patch @@ -0,0 +1,75 @@ +From 602786c9171d189e859796fd61873835fe858a06 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 19 May 2015 17:19:27 +0200 +Subject: [PATCH] mount: properly check for mounts currently in + /proc/self/mountinfo + +http://lists.freedesktop.org/archives/systemd-devel/2015-May/032059.html +(cherry picked from commit 394763f63c1941cafd9d3bf81e8151a2206474a7) + +Cherry-picked from: 394763f +Resolves: #1222517 +--- + src/core/mount.c | 33 +++++++++++++++++++-------------- + 1 file changed, 19 insertions(+), 14 deletions(-) + +diff --git a/src/core/mount.c b/src/core/mount.c +index fa63f24..1f1a41a 100644 +--- a/src/core/mount.c ++++ b/src/core/mount.c +@@ -1768,7 +1768,18 @@ static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents, + + if (!mount->is_mounted) { + +- /* A mount point is gone */ ++ /* A mount point is not around right now. It ++ * might be gone, or might never have ++ * existed. */ ++ ++ if (mount->from_proc_self_mountinfo && ++ mount->parameters_proc_self_mountinfo.what) { ++ ++ /* Remember that this device might just have disappeared */ ++ if (set_ensure_allocated(&gone, &string_hash_ops) < 0 || ++ set_put(gone, mount->parameters_proc_self_mountinfo.what) < 0) ++ log_oom(); /* we don't care too much about OOM here... */ ++ } + + mount->from_proc_self_mountinfo = false; + +@@ -1785,14 +1796,6 @@ static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents, + break; + } + +- /* Remember that this device might just have disappeared */ +- if (mount->parameters_proc_self_mountinfo.what) { +- +- if (set_ensure_allocated(&gone, &string_hash_ops) < 0 || +- set_put(gone, mount->parameters_proc_self_mountinfo.what) < 0) +- log_oom(); /* we don't care too much about OOM here... */ +- } +- + } else if (mount->just_mounted || mount->just_changed) { + + /* A mount point was added or changed */ +@@ -1820,13 +1823,15 @@ static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents, + mount_set_state(mount, mount->state); + break; + } ++ } + +- if (mount->parameters_proc_self_mountinfo.what) { ++ if (mount->is_mounted && ++ mount->from_proc_self_mountinfo && ++ mount->parameters_proc_self_mountinfo.what) { + +- if (set_ensure_allocated(&around, &string_hash_ops) < 0 || +- set_put(around, mount->parameters_proc_self_mountinfo.what) < 0) +- log_oom(); +- } ++ if (set_ensure_allocated(&around, &string_hash_ops) < 0 || ++ set_put(around, mount->parameters_proc_self_mountinfo.what) < 0) ++ log_oom(); + } + + /* Reset the flags for later calls */ diff --git a/SOURCES/0234-units-order-network-online.target-after-network.targ.patch b/SOURCES/0234-units-order-network-online.target-after-network.targ.patch deleted file mode 100644 index 4390f79..0000000 --- a/SOURCES/0234-units-order-network-online.target-after-network.targ.patch +++ /dev/null @@ -1,19 +0,0 @@ -From dda9057e8ee63f2e525333bf7d606f22bce0f7f5 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Mon, 21 Jul 2014 15:13:15 +0200 -Subject: [PATCH] units: order network-online.target after network.target - -Resolves: #1072431 ---- - units/network-online.target | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/units/network-online.target b/units/network-online.target -index a40c44c..67bc4fa 100644 ---- a/units/network-online.target -+++ b/units/network-online.target -@@ -9,3 +9,4 @@ - Description=Network is Online - Documentation=man:systemd.special(7) - Documentation=http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget -+After=network.target diff --git a/SOURCES/0235-units-add-Install-section-to-tmp.mount.patch b/SOURCES/0235-units-add-Install-section-to-tmp.mount.patch new file mode 100644 index 0000000..3952ccd --- /dev/null +++ b/SOURCES/0235-units-add-Install-section-to-tmp.mount.patch @@ -0,0 +1,26 @@ +From 6e9187c22c22872e8b0ade7a0e5603895797ede2 Mon Sep 17 00:00:00 2001 +From: Michal Schmidt +Date: Fri, 15 Feb 2013 09:07:57 +0100 +Subject: [PATCH] units: add [Install] section to tmp.mount + +Change-Id: I2e6d129de00a9afaf7558006c886866f64394c29 +Related: #908253 + +Cherry-picked from: b4aeab33 +Resolves: #1199644 +--- + units/tmp.mount | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/units/tmp.mount b/units/tmp.mount +index 00a0d28..af0cf4a 100644 +--- a/units/tmp.mount ++++ b/units/tmp.mount +@@ -19,3 +19,7 @@ What=tmpfs + Where=/tmp + Type=tmpfs + Options=mode=1777,strictatime ++ ++# Make 'systemctl enable tmp.mount' work: ++[Install] ++WantedBy=local-fs.target diff --git a/SOURCES/0235-util-consider-both-fuse.glusterfs-and-glusterfs-netw.patch b/SOURCES/0235-util-consider-both-fuse.glusterfs-and-glusterfs-netw.patch deleted file mode 100644 index 5cbe8ca..0000000 --- a/SOURCES/0235-util-consider-both-fuse.glusterfs-and-glusterfs-netw.patch +++ /dev/null @@ -1,36 +0,0 @@ -From f8615ebc34fb1a960a1bd946650a8c15a9a347fa Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 25 Mar 2014 01:46:24 +0100 -Subject: [PATCH] util: consider both fuse.glusterfs and glusterfs network file - systems -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Based on a similar patch by Lukáš Nykrýn. - -Resolves: #1080229 ---- - src/shared/util.c | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/src/shared/util.c b/src/shared/util.c -index 090a204..2974c2a 100644 ---- a/src/shared/util.c -+++ b/src/shared/util.c -@@ -1625,7 +1625,14 @@ bool fstype_is_network(const char *fstype) { - "nfs\0" - "nfs4\0" - "gfs\0" -- "gfs2\0"; -+ "gfs2\0" -+ "glusterfs\0"; -+ -+ const char *x; -+ -+ x = startswith(fstype, "fuse."); -+ if (x) -+ fstype = x; - - return nulstr_contains(table, fstype); - } diff --git a/SOURCES/0236-bus-util-add-articles-to-explanation-messages.patch b/SOURCES/0236-bus-util-add-articles-to-explanation-messages.patch new file mode 100644 index 0000000..25946c4 --- /dev/null +++ b/SOURCES/0236-bus-util-add-articles-to-explanation-messages.patch @@ -0,0 +1,52 @@ +From 18b5e1630c73438a262fea9dd76bc3e67b250335 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 11 Apr 2015 19:39:30 -0400 +Subject: [PATCH] bus-util: add articles to explanation messages + +We are talking about one member of a group of things (resource limits, signals, +timeouts), without specifying which one. An indenfinite article is in order. + +When we are talking about the control process, it's a specific one, so the +definite article is used. + +Cherry-picked from: a61cc46 +Related: #1016680 +--- + src/libsystemd/sd-bus/bus-util.c | 17 ++++++++--------- + 1 file changed, 8 insertions(+), 9 deletions(-) + +diff --git a/src/libsystemd/sd-bus/bus-util.c b/src/libsystemd/sd-bus/bus-util.c +index fff00d9..017fbaf 100644 +--- a/src/libsystemd/sd-bus/bus-util.c ++++ b/src/libsystemd/sd-bus/bus-util.c +@@ -1714,13 +1714,13 @@ static int bus_job_get_service_result(BusWaitForJobs *d, char **result) { + static const struct { + const char *result, *explanation; + } explanations [] = { +- { "resources", "configured resource limit was exceeded" }, +- { "timeout", "timeout was exceeded" }, +- { "exit-code", "control process exited with error code" }, +- { "signal", "fatal signal was delivered to the control process" }, +- { "core-dump", "fatal signal was delivered to the control process. Core dumped" }, +- { "watchdog", "service failed to send watchdog ping" }, +- { "start-limit", "start of the service was attempted too often too quickly" } ++ { "resources", "a configured resource limit was exceeded" }, ++ { "timeout", "a timeout was exceeded" }, ++ { "exit-code", "the control process exited with error code" }, ++ { "signal", "a fatal signal was delivered to the control process" }, ++ { "core-dump", "a fatal signal was delivered causing the control process to dump core" }, ++ { "watchdog", "the service failed to send watchdog ping" }, ++ { "start-limit", "start of the service was attempted too often" } + }; + + static void log_job_error_with_service_result(const char* service, const char *result) { +@@ -1748,8 +1748,7 @@ static void log_job_error_with_service_result(const char* service, const char *r + + /* For some results maybe additional explanation is required */ + if (streq_ptr(result, "start-limit")) +- log_info("To force a start please invoke \"systemctl reset-failed %s\" followed by \"systemctl start %s\" again.", +- strna(service_shell_quoted), ++ log_info("To force a start use \"systemctl reset-failed %1$s\" followed by \"systemctl start %1$s\" again.", + strna(service_shell_quoted)); + } + diff --git a/SOURCES/0236-core-make-StopWhenUnneeded-work-in-conjunction-with-.patch b/SOURCES/0236-core-make-StopWhenUnneeded-work-in-conjunction-with-.patch deleted file mode 100644 index a7cb5f3..0000000 --- a/SOURCES/0236-core-make-StopWhenUnneeded-work-in-conjunction-with-.patch +++ /dev/null @@ -1,43 +0,0 @@ -From bb586b571661bd77cafe0824efecdba502c99a98 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Thu, 13 Feb 2014 02:12:27 +0100 -Subject: [PATCH] core: make StopWhenUnneeded work in conjunction with units - that fail during their start job - -https://bugzilla.redhat.com/show_bug.cgi?id=997031 - -Resolves: #986949 ---- - src/core/unit.c | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/src/core/unit.c b/src/core/unit.c -index a4e6c18..17792d1 100644 ---- a/src/core/unit.c -+++ b/src/core/unit.c -@@ -1455,7 +1455,9 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su - * sucessfully, since there's no change of state in that case. Which is - * why it is handled in service_set_state() */ - if (UNIT_IS_INACTIVE_OR_FAILED(os) != UNIT_IS_INACTIVE_OR_FAILED(ns)) { -- ExecContext *ec = unit_get_exec_context(u); -+ ExecContext *ec; -+ -+ ec = unit_get_exec_context(u); - if (ec && exec_context_may_touch_console(ec)) { - if (UNIT_IS_INACTIVE_OR_FAILED(ns)) { - m->n_on_console --; -@@ -1551,12 +1553,11 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su - } - - /* stop unneeded units regardless if going down was expected or not */ -- if (UNIT_IS_ACTIVE_OR_ACTIVATING(os) && UNIT_IS_INACTIVE_OR_DEACTIVATING(ns)) -+ if (UNIT_IS_INACTIVE_OR_DEACTIVATING(ns)) - check_unneeded_dependencies(u); - - if (ns != os && ns == UNIT_FAILED) { -- log_notice_unit(u->id, -- "Unit %s entered failed state.", u->id); -+ log_notice_unit(u->id, "Unit %s entered failed state.", u->id); - unit_start_on_failure(u); - } - } diff --git a/SOURCES/0237-bus-util-print-correct-warnings-for-units-that-fail-.patch b/SOURCES/0237-bus-util-print-correct-warnings-for-units-that-fail-.patch new file mode 100644 index 0000000..1cde3b7 --- /dev/null +++ b/SOURCES/0237-bus-util-print-correct-warnings-for-units-that-fail-.patch @@ -0,0 +1,65 @@ +From caff38650c2c1ae9244a30b87275db3d3a5e3b5d Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 28 Apr 2015 12:12:29 +0200 +Subject: [PATCH] bus-util: print correct warnings for units that fail but for + which we have a NULL result only + +Cherry-picked from: 373a99e +Related: #1016680 +--- + src/libsystemd/sd-bus/bus-util.c | 34 ++++++++++++++++++++-------------- + 1 file changed, 20 insertions(+), 14 deletions(-) + +diff --git a/src/libsystemd/sd-bus/bus-util.c b/src/libsystemd/sd-bus/bus-util.c +index 017fbaf..e48abf5 100644 +--- a/src/libsystemd/sd-bus/bus-util.c ++++ b/src/libsystemd/sd-bus/bus-util.c +@@ -1724,28 +1724,34 @@ static const struct { + }; + + static void log_job_error_with_service_result(const char* service, const char *result) { +- unsigned i; + _cleanup_free_ char *service_shell_quoted = NULL; + + assert(service); +- assert(result); + + service_shell_quoted = shell_maybe_quote(service); + +- for (i = 0; i < ELEMENTSOF(explanations); ++i) +- if (streq(result, explanations[i].result)) +- break; ++ if (!isempty(result)) { ++ unsigned i; + +- if (i < ELEMENTSOF(explanations)) +- log_error("Job for %s failed because %s. See \"systemctl status %s\" and \"journalctl -xe\" for details.\n", +- service, +- explanations[i].explanation, +- strna(service_shell_quoted)); +- else +- log_error("Job for %s failed. See \"systemctl status %s\" and \"journalctl -xe\" for details.\n", +- service, +- strna(service_shell_quoted)); ++ for (i = 0; i < ELEMENTSOF(explanations); ++i) ++ if (streq(result, explanations[i].result)) ++ break; ++ ++ if (i < ELEMENTSOF(explanations)) { ++ log_error("Job for %s failed because %s. See \"systemctl status %s\" and \"journalctl -xe\" for details.\n", ++ service, ++ explanations[i].explanation, ++ strna(service_shell_quoted)); + ++ goto finish; ++ } ++ } ++ ++ log_error("Job for %s failed. See \"systemctl status %s\" and \"journalctl -xe\" for details.\n", ++ service, ++ strna(service_shell_quoted)); ++ ++finish: + /* For some results maybe additional explanation is required */ + if (streq_ptr(result, "start-limit")) + log_info("To force a start use \"systemctl reset-failed %1$s\" followed by \"systemctl start %1$s\" again.", diff --git a/SOURCES/0237-cgroups-agent-down-grade-log-level.patch b/SOURCES/0237-cgroups-agent-down-grade-log-level.patch deleted file mode 100644 index 5cc9b97..0000000 --- a/SOURCES/0237-cgroups-agent-down-grade-log-level.patch +++ /dev/null @@ -1,41 +0,0 @@ -From b0010d76a8c56900d15fab8ac1ed94d364d1e566 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Wed, 23 Jul 2014 14:08:18 +0200 -Subject: [PATCH] cgroups-agent: down-grade log level - -(cherry picked from commit 844de4355592259eebcffddfc38c63266e451cb6) - -Conflicts: - src/cgroups-agent/cgroups-agent.c - -Resolves: #1044386 ---- - src/cgroups-agent/cgroups-agent.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/src/cgroups-agent/cgroups-agent.c b/src/cgroups-agent/cgroups-agent.c -index a47949a..43b9b3a 100644 ---- a/src/cgroups-agent/cgroups-agent.c -+++ b/src/cgroups-agent/cgroups-agent.c -@@ -50,7 +50,11 @@ int main(int argc, char *argv[]) { - - bus = dbus_connection_open_private("unix:path=/run/systemd/private", &error); - if (!bus) { -- log_warning("Failed to get D-Bus connection: %s", bus_error_message(&error)); -+ log_warning("Failed to get D-Bus connection: %s", strerror(-r)); -+ /* If we couldn't connect we assume this was triggered -+ * while systemd got restarted/transitioned from -+ * initrd to the system, so let's ignore this */ -+ log_debug("Failed to get D-Bus connection: %s", strerror(-r)); - goto finish; - } - -@@ -73,7 +77,7 @@ int main(int argc, char *argv[]) { - } - - if (!dbus_connection_send(bus, m, NULL)) { -- log_error("Failed to send signal message on private connection."); -+ log_debug("Failed to send signal message on private connection."); - goto finish; - } - diff --git a/SOURCES/0238-Revert-journald-move-dev-log-socket-to-run.patch b/SOURCES/0238-Revert-journald-move-dev-log-socket-to-run.patch new file mode 100644 index 0000000..a60581a --- /dev/null +++ b/SOURCES/0238-Revert-journald-move-dev-log-socket-to-run.patch @@ -0,0 +1,210 @@ +From 4a1723115afea68db4cbe4f7f2d97c4f5663403d Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Thu, 6 Aug 2015 11:30:19 +0200 +Subject: [PATCH] Revert "journald: move /dev/log socket to /run" + +This reverts commit 03ee5c38cb0da193dd08733fb4c0c2809cee6a99. + +rhel-only + +Resolves: #1249968 +--- + Makefile-man.am | 5 ----- + Makefile.am | 7 ++----- + man/systemd-journald.service.xml | 2 -- + src/core/namespace.c | 3 ++- + src/journal/journald-server.c | 3 +-- + src/journal/journald-syslog.c | 2 +- + units/systemd-journald-dev-log.socket | 32 -------------------------------- + units/systemd-journald.service.in | 4 ++-- + units/systemd-journald.socket | 2 +- + 9 files changed, 9 insertions(+), 51 deletions(-) + delete mode 100644 units/systemd-journald-dev-log.socket + +diff --git a/Makefile-man.am b/Makefile-man.am +index 084df75..497be66 100644 +--- a/Makefile-man.am ++++ b/Makefile-man.am +@@ -214,7 +214,6 @@ MANPAGES_ALIAS += \ + man/systemd-hybrid-sleep.service.8 \ + man/systemd-initctl.8 \ + man/systemd-initctl.socket.8 \ +- man/systemd-journald-dev-log.socket.8 \ + man/systemd-journald.8 \ + man/systemd-journald.socket.8 \ + man/systemd-kexec.service.8 \ +@@ -326,7 +325,6 @@ man/systemd-hibernate.service.8: man/systemd-suspend.service.8 + man/systemd-hybrid-sleep.service.8: man/systemd-suspend.service.8 + man/systemd-initctl.8: man/systemd-initctl.service.8 + man/systemd-initctl.socket.8: man/systemd-initctl.service.8 +-man/systemd-journald-dev-log.socket.8: man/systemd-journald.service.8 + man/systemd-journald.8: man/systemd-journald.service.8 + man/systemd-journald.socket.8: man/systemd-journald.service.8 + man/systemd-kexec.service.8: man/systemd-halt.service.8 +@@ -616,9 +614,6 @@ man/systemd-initctl.html: man/systemd-initctl.service.html + man/systemd-initctl.socket.html: man/systemd-initctl.service.html + $(html-alias) + +-man/systemd-journald-dev-log.socket.html: man/systemd-journald.service.html +- $(html-alias) +- + man/systemd-journald.html: man/systemd-journald.service.html + $(html-alias) + +diff --git a/Makefile.am b/Makefile.am +index a81d3c1..58bcc2c 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -4518,8 +4518,7 @@ bin_PROGRAMS += \ + systemd-cat + + dist_systemunit_DATA += \ +- units/systemd-journald.socket \ +- units/systemd-journald-dev-log.socket ++ units/systemd-journald.socket + + nodist_systemunit_DATA += \ + units/systemd-journald.service \ +@@ -4538,9 +4537,7 @@ dist_catalog_DATA = \ + catalog/systemd.catalog + + SOCKETS_TARGET_WANTS += \ +- systemd-journald.socket \ +- systemd-journald-dev-log.socket +- ++ systemd-journald.socket + SYSINIT_TARGET_WANTS += \ + systemd-journald.service \ + systemd-journal-flush.service \ +diff --git a/man/systemd-journald.service.xml b/man/systemd-journald.service.xml +index 8280d6c..fe99ce9 100644 +--- a/man/systemd-journald.service.xml ++++ b/man/systemd-journald.service.xml +@@ -45,7 +45,6 @@ + + systemd-journald.service + systemd-journald.socket +- systemd-journald-dev-log.socket + systemd-journald + Journal service + +@@ -53,7 +52,6 @@ + + systemd-journald.service + systemd-journald.socket +- systemd-journald-dev-log.socket + /usr/lib/systemd/systemd-journald + + +diff --git a/src/core/namespace.c b/src/core/namespace.c +index d4f1c86..ebd5fb3 100644 +--- a/src/core/namespace.c ++++ b/src/core/namespace.c +@@ -187,7 +187,8 @@ static int mount_dev(BindMount *m) { + mount("/dev/hugepages", devhugepages, NULL, MS_BIND, NULL); + + devlog = strjoina(temporary_mount, "/dev/log"); +- symlink("/run/systemd/journal/dev-log", devlog); ++ (void)touch(devlog); ++ mount("/dev/log", devlog, NULL, MS_BIND, NULL); + + NULSTR_FOREACH(d, devnodes) { + _cleanup_free_ char *dn = NULL; +diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c +index d692c06..fb7aae3 100644 +--- a/src/journal/journald-server.c ++++ b/src/journal/journald-server.c +@@ -1531,8 +1531,7 @@ int server_init(Server *s) { + + s->stdout_fd = fd; + +- } else if (sd_is_socket_unix(fd, SOCK_DGRAM, -1, "/dev/log", 0) > 0 || +- sd_is_socket_unix(fd, SOCK_DGRAM, -1, "/run/systemd/journal/dev-log", 0) > 0) { ++ } else if (sd_is_socket_unix(fd, SOCK_DGRAM, -1, "/dev/log", 0) > 0) { + + if (s->syslog_fd >= 0) { + log_error("Too many /dev/log sockets passed."); +diff --git a/src/journal/journald-syslog.c b/src/journal/journald-syslog.c +index ba80941..4e118aa 100644 +--- a/src/journal/journald-syslog.c ++++ b/src/journal/journald-syslog.c +@@ -384,7 +384,7 @@ int server_open_syslog_socket(Server *s) { + if (s->syslog_fd < 0) { + static const union sockaddr_union sa = { + .un.sun_family = AF_UNIX, +- .un.sun_path = "/run/systemd/journal/dev-log", ++ .un.sun_path = "/dev/log", + }; + + s->syslog_fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0); +diff --git a/units/systemd-journald-dev-log.socket b/units/systemd-journald-dev-log.socket +deleted file mode 100644 +index ffd44bb..0000000 +--- a/units/systemd-journald-dev-log.socket ++++ /dev/null +@@ -1,32 +0,0 @@ +-# This file is part of systemd. +-# +-# systemd is free software; you can redistribute it and/or modify it +-# under the terms of the GNU Lesser General Public License as published by +-# the Free Software Foundation; either version 2.1 of the License, or +-# (at your option) any later version. +- +-[Unit] +-Description=Journal Socket (/dev/log) +-Documentation=man:systemd-journald.service(8) man:journald.conf(5) +-DefaultDependencies=no +-Before=sockets.target +- +-# Mount and swap units need this. If this socket unit is removed by an +-# isolate request the mount and swap units would be removed too, +-# hence let's exclude this from isolate requests. +-IgnoreOnIsolate=yes +- +-[Socket] +-Service=systemd-journald.service +-ListenDatagram=/run/systemd/journal/dev-log +-Symlinks=/dev/log +-SocketMode=0666 +-PassCredentials=yes +-PassSecurity=yes +- +-# Increase both the send and receive buffer, so that things don't +-# block early. Note that journald internally uses the this socket both +-# for receiving syslog messages, and for forwarding them to any other +-# syslog, hence we bump both values. +-ReceiveBuffer=8M +-SendBuffer=8M +diff --git a/units/systemd-journald.service.in b/units/systemd-journald.service.in +index 1bcc290..9d44622 100644 +--- a/units/systemd-journald.service.in ++++ b/units/systemd-journald.service.in +@@ -10,12 +10,12 @@ Description=Journal Service + Documentation=man:systemd-journald.service(8) man:journald.conf(5) + DefaultDependencies=no + Requires=systemd-journald.socket +-After=systemd-journald.socket systemd-journald-dev-log.socket syslog.socket ++After=systemd-journald.socket syslog.socket + Before=sysinit.target + + [Service] + Type=notify +-Sockets=systemd-journald.socket systemd-journald-dev-log.socket ++Sockets=systemd-journald.socket + ExecStart=@rootlibexecdir@/systemd-journald + Restart=always + RestartSec=0 +diff --git a/units/systemd-journald.socket b/units/systemd-journald.socket +index 7173701..fbeb10b 100644 +--- a/units/systemd-journald.socket ++++ b/units/systemd-journald.socket +@@ -19,8 +19,8 @@ IgnoreOnIsolate=yes + [Socket] + ListenStream=/run/systemd/journal/stdout + ListenDatagram=/run/systemd/journal/socket ++ListenDatagram=/dev/log + SocketMode=0666 + PassCredentials=yes + PassSecurity=yes + ReceiveBuffer=8M +-Service=systemd-journald.service diff --git a/SOURCES/0238-random-seed-raise-POOL_SIZE_MIN-constant-to-1024.patch b/SOURCES/0238-random-seed-raise-POOL_SIZE_MIN-constant-to-1024.patch deleted file mode 100644 index ccf36f5..0000000 --- a/SOURCES/0238-random-seed-raise-POOL_SIZE_MIN-constant-to-1024.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 20436a1eb3a468b7bc32fe1d36cb7c4029519052 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Thu, 24 Jul 2014 11:17:36 +0200 -Subject: [PATCH] random-seed: raise POOL_SIZE_MIN constant to 1024 - -Resolves: #1066517 ---- - src/random-seed/random-seed.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/random-seed/random-seed.c b/src/random-seed/random-seed.c -index af79ecf..8b7bfbb 100644 ---- a/src/random-seed/random-seed.c -+++ b/src/random-seed/random-seed.c -@@ -29,7 +29,7 @@ - #include "util.h" - #include "mkdir.h" - --#define POOL_SIZE_MIN 512 -+#define POOL_SIZE_MIN 1024 - - int main(int argc, char *argv[]) { - _cleanup_close_ int seed_fd = -1, random_fd = -1; diff --git a/SOURCES/0239-delta-do-not-use-unicode-chars-in-C-locale.patch b/SOURCES/0239-delta-do-not-use-unicode-chars-in-C-locale.patch deleted file mode 100644 index c3ff191..0000000 --- a/SOURCES/0239-delta-do-not-use-unicode-chars-in-C-locale.patch +++ /dev/null @@ -1,135 +0,0 @@ -From 719f080ce2c999febe4c9289fb09e5e2e719d4d2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Wed, 16 Apr 2014 23:33:41 -0400 -Subject: [PATCH] delta: do not use unicode chars in C locale - -https://bugzilla.redhat.com/show_bug.cgi?id=1088418 - -(cherry picked from commit 00a5cc3a63c125633e822f39efd9c32223169f62) - -Resolves: #1088419 ---- - src/delta/delta.c | 40 +++++++++++++++++++++++++--------------- - 1 file changed, 25 insertions(+), 15 deletions(-) - -diff --git a/src/delta/delta.c b/src/delta/delta.c -index a8dd57e..f1aea80 100644 ---- a/src/delta/delta.c -+++ b/src/delta/delta.c -@@ -85,6 +85,10 @@ static void pager_open_if_enabled(void) { - pager_open(false); - } - -+static inline const char* arrow(void) { -+ return is_locale_utf8() ? "→" : "->"; -+} -+ - static int equivalent(const char *a, const char *b) { - _cleanup_free_ char *x = NULL, *y = NULL; - -@@ -103,8 +107,9 @@ static int notify_override_masked(const char *top, const char *bottom) { - if (!(arg_flags & SHOW_MASKED)) - return 0; - -- printf("%s%s%s %s → %s\n", -- ansi_highlight_red(), "[MASKED]", ansi_highlight_off(), top, bottom); -+ printf("%s%s%s %s %s %s\n", -+ ansi_highlight_red(), "[MASKED]", ansi_highlight_off(), -+ top, arrow(), bottom); - return 1; - } - -@@ -112,8 +117,9 @@ static int notify_override_equivalent(const char *top, const char *bottom) { - if (!(arg_flags & SHOW_EQUIVALENT)) - return 0; - -- printf("%s%s%s %s → %s\n", -- ansi_highlight_green(), "[EQUIVALENT]", ansi_highlight_off(), top, bottom); -+ printf("%s%s%s %s %s %s\n", -+ ansi_highlight_green(), "[EQUIVALENT]", ansi_highlight_off(), -+ top, arrow(), bottom); - return 1; - } - -@@ -121,8 +127,9 @@ static int notify_override_redirected(const char *top, const char *bottom) { - if (!(arg_flags & SHOW_REDIRECTED)) - return 0; - -- printf("%s%s%s %s → %s\n", -- ansi_highlight(), "[REDIRECTED]", ansi_highlight_off(), top, bottom); -+ printf("%s%s%s %s %s %s\n", -+ ansi_highlight(), "[REDIRECTED]", ansi_highlight_off(), -+ top, arrow(), bottom); - return 1; - } - -@@ -130,8 +137,9 @@ static int notify_override_overridden(const char *top, const char *bottom) { - if (!(arg_flags & SHOW_OVERRIDDEN)) - return 0; - -- printf("%s%s%s %s → %s\n", -- ansi_highlight(), "[OVERRIDDEN]", ansi_highlight_off(), top, bottom); -+ printf("%s%s%s %s %s %s\n", -+ ansi_highlight(), "[OVERRIDDEN]", ansi_highlight_off(), -+ top, arrow(), bottom); - return 1; - } - -@@ -139,8 +147,9 @@ static int notify_override_extended(const char *top, const char *bottom) { - if (!(arg_flags & SHOW_EXTENDED)) - return 0; - -- printf("%s%s%s %s → %s\n", -- ansi_highlight(), "[EXTENDED]", ansi_highlight_off(), top, bottom); -+ printf("%s%s%s %s %s %s\n", -+ ansi_highlight(), "[EXTENDED]", ansi_highlight_off(), -+ top, arrow(), bottom); - return 1; - } - -@@ -241,7 +250,7 @@ static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const - return -ENOMEM; - d = p + strlen(toppath) + 1; - -- log_debug("Adding at top: %s → %s", d, p); -+ log_debug("Adding at top: %s %s %s", d, arrow(), p); - k = hashmap_put(top, d, p); - if (k >= 0) { - p = strdup(p); -@@ -253,7 +262,7 @@ static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const - return k; - } - -- log_debug("Adding at bottom: %s → %s", d, p); -+ log_debug("Adding at bottom: %s %s %s", d, arrow(), p); - free(hashmap_remove(bottom, d)); - k = hashmap_put(bottom, d, p); - if (k < 0) { -@@ -276,7 +285,8 @@ static int enumerate_dir_d(Hashmap *top, Hashmap *bottom, Hashmap *drops, const - if (!p) - return -ENOMEM; - -- log_debug("Adding to drops: %s → %s → %s", unit, basename(p), p); -+ log_debug("Adding to drops: %s %s %s %s %s", -+ unit, arrow(), basename(p), arrow(), p); - k = hashmap_put(h, basename(p), p); - if (k < 0) { - free(p); -@@ -328,7 +338,7 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch - if (!p) - return -ENOMEM; - -- log_debug("Adding at top: %s → %s", basename(p), p); -+ log_debug("Adding at top: %s %s %s", basename(p), arrow(), p); - k = hashmap_put(top, basename(p), p); - if (k >= 0) { - p = strdup(p); -@@ -339,7 +349,7 @@ static int enumerate_dir(Hashmap *top, Hashmap *bottom, Hashmap *drops, const ch - return k; - } - -- log_debug("Adding at bottom: %s → %s", basename(p), p); -+ log_debug("Adding at bottom: %s %s %s", basename(p), arrow(), p); - free(hashmap_remove(bottom, basename(p))); - k = hashmap_put(bottom, basename(p), p); - if (k < 0) { diff --git a/SOURCES/0239-journald-server-don-t-read-audit-events.patch b/SOURCES/0239-journald-server-don-t-read-audit-events.patch new file mode 100644 index 0000000..83465f7 --- /dev/null +++ b/SOURCES/0239-journald-server-don-t-read-audit-events.patch @@ -0,0 +1,25 @@ +From 5dee07f71ccaf8eacd115e01e665c645f7c3a75d Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Mon, 10 Aug 2015 14:24:18 +0200 +Subject: [PATCH] journald-server: don't read audit events + +Resolves: #1252409 +--- + src/journal/journald-server.c | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c +index fb7aae3..f13147f 100644 +--- a/src/journal/journald-server.c ++++ b/src/journal/journald-server.c +@@ -1577,10 +1577,6 @@ int server_init(Server *s) { + if (r < 0) + return r; + +- r = server_open_audit(s); +- if (r < 0) +- return r; +- + r = server_open_kernel_seqnum(s); + if (r < 0) + return r; diff --git a/SOURCES/0240-core-print-debug-instead-of-error-message.patch b/SOURCES/0240-core-print-debug-instead-of-error-message.patch deleted file mode 100644 index a406895..0000000 --- a/SOURCES/0240-core-print-debug-instead-of-error-message.patch +++ /dev/null @@ -1,32 +0,0 @@ -From bcbb894a709f56ac0bccf7e5edfd59e39e8ec800 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Wed, 14 May 2014 15:13:43 +0200 -Subject: [PATCH] core: print debug instead of error message - -In case that session scope is in some other state than SCOPE_RUNNING or -SCOPE_ABANDONED we will not print error message. It might be the case -that scope is in other state because systemd realized that scope is -empty before dispatching dbus call from pam hook. Or system is going -down and stop job is runnig for the scope and changed scope state to -SCOPE_STOP_SIGTERM or SCOPE_STOP_SIGKILL. - -(cherry picked from commit f517790db5277fa71d6ae3617244f1acc4b62572) - -Resolves: #1105608 ---- - src/core/dbus-scope.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/core/dbus-scope.c b/src/core/dbus-scope.c -index 58dd9ff..71d6921 100644 ---- a/src/core/dbus-scope.c -+++ b/src/core/dbus-scope.c -@@ -76,7 +76,7 @@ DBusHandlerResult bus_scope_message_handler(Unit *u, DBusConnection *c, DBusMess - - r = scope_abandon(s); - if (r < 0) -- log_error("Failed to mark scope %s as abandoned : %s", UNIT(s)->id, strerror(-r)); -+ log_debug("Failed to mark scope %s as abandoned : Scope is not running", UNIT(s)->id); - - reply = dbus_message_new_method_return(message); - if (!reply) diff --git a/SOURCES/0240-everything-remove-traces-of-user.patch b/SOURCES/0240-everything-remove-traces-of-user.patch new file mode 100644 index 0000000..1c38e23 --- /dev/null +++ b/SOURCES/0240-everything-remove-traces-of-user.patch @@ -0,0 +1,833 @@ +From d550b42ed66ea7e3de9d04b3d472c6c1721a2978 Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Tue, 11 Aug 2015 13:53:47 +0200 +Subject: [PATCH] everything: remove traces of --user + +Resolves: #1071363 +--- + man/busctl.xml | 6 ++-- + man/journalctl.xml | 14 -------- + man/pam_systemd.xml | 7 ++-- + man/systemctl.xml | 55 +++++------------------------ + man/systemd-analyze.xml | 6 ---- + man/systemd-run.xml | 1 - + man/systemd-system.conf.xml | 5 +-- + man/systemd.device.xml | 4 +-- + man/systemd.exec.xml | 17 ++------- + man/systemd.special.xml | 46 ++---------------------- + man/systemd.unit.xml | 66 +---------------------------------- + man/systemd.xml | 63 +++++---------------------------- + man/user-system-options.xml | 9 ----- + shell-completion/bash/busctl | 2 +- + shell-completion/bash/journalctl | 5 +-- + shell-completion/bash/systemctl.in | 2 +- + shell-completion/bash/systemd-analyze | 12 +++---- + shell-completion/bash/systemd-run | 4 +-- + src/analyze/analyze.c | 1 - + src/core/main.c | 1 - + src/journal/journalctl.c | 1 - + src/libsystemd/sd-bus/busctl.c | 1 - + src/run/run.c | 1 - + src/systemctl/systemctl.c | 1 - + 24 files changed, 40 insertions(+), 290 deletions(-) + +diff --git a/man/busctl.xml b/man/busctl.xml +index 807fc78..0635280 100644 +--- a/man/busctl.xml ++++ b/man/busctl.xml +@@ -75,9 +75,8 @@ + + Connect to the bus specified by + ADDRESS instead of using suitable +- defaults for either the system or user bus (see +- and +- options). ++ defaults for the system bus (see ++ option). + + + +@@ -236,7 +235,6 @@ + + + +- + + + +diff --git a/man/journalctl.xml b/man/journalctl.xml +index 08de0ff..2764f66 100644 +--- a/man/journalctl.xml ++++ b/man/journalctl.xml +@@ -470,20 +470,6 @@ + + + +- +- +- Show messages for the specified user session +- unit. This will add a match for messages from the unit +- (_SYSTEMD_USER_UNIT= and +- _UID=) and additional matches for messages +- from session systemd and messages about coredumps for the +- specified unit. +- +- This parameter can be specified multiple times. +- +- +- +- + + + +diff --git a/man/pam_systemd.xml b/man/pam_systemd.xml +index b4a3f50..a448aed 100644 +--- a/man/pam_systemd.xml ++++ b/man/pam_systemd.xml +@@ -78,9 +78,7 @@ + A new systemd scope unit is created for the + session. If this is the first concurrent session of the user, an + implicit slice below user.slice is +- automatically created and the scope placed into it. An instance +- of the system service user@.service, which +- runs the systemd user manager instance, is started. ++ automatically created and the scope placed into it. + + + +@@ -91,8 +89,7 @@ + logind.conf + 5, all processes of the + session are terminated. If the last concurrent session of a user +- ends, the user's systemd instance will be terminated too, and so +- will the user's slice unit. ++ ends, the user's slice unit will be terminated too. + + If the last concurrent session of a user ends, + the $XDG_RUNTIME_DIR directory and all its +diff --git a/man/systemctl.xml b/man/systemctl.xml +index 6b29b8c..c6f5842 100644 +--- a/man/systemctl.xml ++++ b/man/systemctl.xml +@@ -339,7 +339,6 @@ + + + +- + + + - -- -+ - - - systemd-machine-id-setup -@@ -96,19 +97,15 @@ - - - -- -- -- -- Prints a short help -- text and exits. -- -- -- -- -- -- Prints a short version -- string and exits. -+ -+ Takes a directory path -+ as an argument. All paths will be -+ prefixed with the given alternate ROOT -+ path, including config search paths. -+ - -+ -+ - - - -diff --git a/src/core/machine-id-setup.c b/src/core/machine-id-setup.c -index 18e015f..291930e 100644 ---- a/src/core/machine-id-setup.c -+++ b/src/core/machine-id-setup.c -@@ -59,18 +59,22 @@ static int shorten_uuid(char destination[36], const char *source) { - return -EINVAL; - } - --static int generate(char id[34]) { -+static int generate(char id[34], const char *root) { - int fd, r; - unsigned char *p; - sd_id128_t buf; - char *q; - ssize_t k; - const char *vm_id; -+ _cleanup_free_ char *dbus_machine_id = NULL; - - assert(id); - -+ if (asprintf(&dbus_machine_id, "%s/var/lib/dbus/machine-id", root) < 0) -+ return log_oom(); -+ - /* First, try reading the D-Bus machine id, unless it is a symlink */ -- fd = open("/var/lib/dbus/machine-id", O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW); -+ fd = open(dbus_machine_id, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW); - if (fd >= 0) { - k = loop_read(fd, id, 33, false); - close_nointr_nofail(fd); -@@ -150,12 +154,20 @@ static int generate(char id[34]) { - return 0; - } - --int machine_id_setup(void) { -+int machine_id_setup(const char *root) { - _cleanup_close_ int fd = -1; - int r; - bool writable; - struct stat st; - char id[34]; /* 32 + \n + \0 */ -+ _cleanup_free_ char *etc_machine_id = NULL; -+ _cleanup_free_ char *run_machine_id = NULL; -+ -+ if (asprintf(&etc_machine_id, "%s/etc/machine-id", root) < 0) -+ return log_oom(); -+ -+ if (asprintf(&run_machine_id, "%s/run/machine-id", root) < 0) -+ return log_oom(); - - RUN_WITH_UMASK(0000) { - /* We create this 0444, to indicate that this isn't really -@@ -163,13 +175,13 @@ int machine_id_setup(void) { - * will be owned by root it doesn't matter much, but maybe - * people look. */ - -- fd = open("/etc/machine-id", O_RDWR|O_CREAT|O_CLOEXEC|O_NOCTTY, 0444); -+ fd = open(etc_machine_id, O_RDWR|O_CREAT|O_CLOEXEC|O_NOCTTY, 0444); - if (fd >= 0) - writable = true; - else { -- fd = open("/etc/machine-id", O_RDONLY|O_CLOEXEC|O_NOCTTY); -+ fd = open(etc_machine_id, O_RDONLY|O_CLOEXEC|O_NOCTTY); - if (fd < 0) { -- log_error("Cannot open /etc/machine-id: %m"); -+ log_error("Cannot open %s: %m", etc_machine_id); - return -errno; - } - -@@ -193,7 +205,7 @@ int machine_id_setup(void) { - /* Hmm, so, the id currently stored is not useful, then let's - * generate one */ - -- r = generate(id); -+ r = generate(id, root); - if (r < 0) - return r; - -@@ -211,27 +223,27 @@ int machine_id_setup(void) { - * /run/machine-id as a replacement */ - - RUN_WITH_UMASK(0022) { -- r = write_string_file("/run/machine-id", id); -+ r = write_string_file(run_machine_id, id); - } - if (r < 0) { -- log_error("Cannot write /run/machine-id: %s", strerror(-r)); -- unlink("/run/machine-id"); -+ log_error("Cannot write %s: %s", run_machine_id, strerror(-r)); -+ unlink(run_machine_id); - return r; - } - - /* And now, let's mount it over */ -- r = mount("/run/machine-id", "/etc/machine-id", NULL, MS_BIND, NULL); -+ r = mount(run_machine_id, etc_machine_id, NULL, MS_BIND, NULL); - if (r < 0) { -- log_error("Failed to mount /etc/machine-id: %m"); -- unlink_noerrno("/run/machine-id"); -+ log_error("Failed to mount %s: %m", etc_machine_id); -+ unlink_noerrno(run_machine_id); - return -errno; - } - -- log_info("Installed transient /etc/machine-id file."); -+ log_info("Installed transient %s file.", etc_machine_id); - - /* Mark the mount read-only */ -- if (mount(NULL, "/etc/machine-id", NULL, MS_BIND|MS_RDONLY|MS_REMOUNT, NULL) < 0) -- log_warning("Failed to make transient /etc/machine-id read-only: %m"); -+ if (mount(NULL, etc_machine_id, NULL, MS_BIND|MS_RDONLY|MS_REMOUNT, NULL) < 0) -+ log_warning("Failed to make transient %s read-only: %m", etc_machine_id); - - return 0; - } -diff --git a/src/core/machine-id-setup.h b/src/core/machine-id-setup.h -index b9e6b4d..b0583ee 100644 ---- a/src/core/machine-id-setup.h -+++ b/src/core/machine-id-setup.h -@@ -21,4 +21,4 @@ - along with systemd; If not, see . - ***/ - --int machine_id_setup(void); -+int machine_id_setup(const char *root); -diff --git a/src/core/main.c b/src/core/main.c -index 00fd394..afd5f6f 100644 ---- a/src/core/main.c -+++ b/src/core/main.c -@@ -1503,7 +1503,7 @@ int main(int argc, char *argv[]) { - kmod_setup(); - #endif - hostname_setup(); -- machine_id_setup(); -+ machine_id_setup(""); - loopback_setup(); - - test_mtab(); -diff --git a/src/machine-id-setup/machine-id-setup-main.c b/src/machine-id-setup/machine-id-setup-main.c -index eb2d514..f4dc705 100644 ---- a/src/machine-id-setup/machine-id-setup-main.c -+++ b/src/machine-id-setup/machine-id-setup-main.c -@@ -29,12 +29,15 @@ - #include "log.h" - #include "build.h" - -+static const char *arg_root = ""; -+ - static int help(void) { - - printf("%s [OPTIONS...]\n\n" - "Initialize /etc/machine-id from a random source.\n\n" - " -h --help Show this help\n" -- " --version Show package version\n", -+ " --version Show package version\n" -+ " --root Filesystem root\n", - program_invocation_short_name); - - return 0; -@@ -43,13 +46,15 @@ static int help(void) { - static int parse_argv(int argc, char *argv[]) { - - enum { -- ARG_VERSION = 0x100 -+ ARG_VERSION = 0x100, -+ ARG_ROOT, - }; - - static const struct option options[] = { - { "help", no_argument, NULL, 'h' }, - { "version", no_argument, NULL, ARG_VERSION }, -- { NULL, 0, NULL, 0 } -+ { "root", required_argument, NULL, ARG_ROOT }, -+ {} - }; - - int c; -@@ -70,6 +75,10 @@ static int parse_argv(int argc, char *argv[]) { - puts(SYSTEMD_FEATURES); - return 0; - -+ case ARG_ROOT: -+ arg_root = optarg; -+ break; -+ - case '?': - return -EINVAL; - -@@ -97,5 +106,5 @@ int main(int argc, char *argv[]) { - if (r <= 0) - return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; - -- return machine_id_setup() < 0 ? EXIT_FAILURE : EXIT_SUCCESS; -+ return machine_id_setup(arg_root) < 0 ? EXIT_FAILURE : EXIT_SUCCESS; - } diff --git a/SOURCES/0263-conf-files-fix-when-for-root-logic.patch b/SOURCES/0263-conf-files-fix-when-for-root-logic.patch deleted file mode 100644 index ac43e75..0000000 --- a/SOURCES/0263-conf-files-fix-when-for-root-logic.patch +++ /dev/null @@ -1,51 +0,0 @@ -From b5f15b581d886a332de50512c0fe75d1acc0c1ee Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 17 Jun 2014 01:56:44 +0200 -Subject: [PATCH] conf-files: fix when for --root= logic - -This is based on parts of similar patches from Michael Marineau and -Lukas Nykryn, but simply uses strappenda3(). - -(cherry picked from commit cebed5005b5ede17fc52ab50c054fca73bc938b8) - -Related: #1111199 ---- - src/shared/conf-files.c | 16 +++++++++++++--- - 1 file changed, 13 insertions(+), 3 deletions(-) - -diff --git a/src/shared/conf-files.c b/src/shared/conf-files.c -index 3d5b1df..4ec8bed 100644 ---- a/src/shared/conf-files.c -+++ b/src/shared/conf-files.c -@@ -37,10 +37,20 @@ - #include "hashmap.h" - #include "conf-files.h" - --static int files_add(Hashmap *h, const char *dirpath, const char *suffix) { -+static int files_add(Hashmap *h, const char *dirpath, const char *suffix, const char *root) { - _cleanup_closedir_ DIR *dir = NULL; - -- dir = opendir(dirpath); -+ assert(dirpath); -+ assert(suffix); -+ -+ if (isempty(root)) -+ dir = opendir(dirpath); -+ else { -+ const char *p; -+ -+ p = strappenda3(root, "/", dirpath); -+ dir = opendir(p); -+ } - if (!dir) { - if (errno == ENOENT) - return 0; -@@ -108,7 +118,7 @@ static int conf_files_list_strv_internal(char ***strv, const char *suffix, const - return -ENOMEM; - - STRV_FOREACH(p, dirs) { -- r = files_add(fh, *p, suffix); -+ r = files_add(fh, *p, suffix, root); - if (r == -ENOMEM) { - hashmap_free_free(fh); - return r; diff --git a/SOURCES/0264-Make-systemctl-root-look-for-files-in-the-proper-pla.patch b/SOURCES/0264-Make-systemctl-root-look-for-files-in-the-proper-pla.patch deleted file mode 100644 index 1922225..0000000 --- a/SOURCES/0264-Make-systemctl-root-look-for-files-in-the-proper-pla.patch +++ /dev/null @@ -1,341 +0,0 @@ -From 022406c6dcaa5e9201a30b95f3e86328739e3892 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Thu, 24 Apr 2014 01:44:10 -0400 -Subject: [PATCH] Make systemctl --root look for files in the proper places - -Running systemctl enable/disable/set-default/... with the --root -option under strace reveals that it accessed various files and -directories in the main fs, and not underneath the specified root. -This can lead to correct results only when the layout and -configuration in the container are identical, which often is not the -case. Fix this by adding the specified root to all file access -operations. - -This patch does not handle some corner cases: symlinks which point -outside of the specified root might be interpreted differently than -they would be by the kernel if the specified root was the real root. -But systemctl does not create such symlinks by itself, and I think -this is enough of a corner case not to be worth the additional -complexity of reimplementing link chasing in systemd. - -Also, simplify the code in a few places and remove an hypothetical -memory leak on error. - -Conflicts: - TODO - src/shared/install.c - -(cherry picked from commit 12ed81d9c88406234c20e9261ae8c8b992d8bc4d) - -Related: #1111199 ---- - src/core/manager.c | 2 ++ - src/shared/install.c | 34 +++++++++++++++++++++----------- - src/shared/path-lookup.c | 12 ++++-------- - src/shared/path-lookup.h | 8 +++++++- - src/shared/path-util.c | 49 ++++++++++++++++++++++++++++++++++++----------- - src/systemctl/systemctl.c | 2 +- - 6 files changed, 75 insertions(+), 32 deletions(-) - -diff --git a/src/core/manager.c b/src/core/manager.c -index 57a88b0..a2810b4 100644 ---- a/src/core/manager.c -+++ b/src/core/manager.c -@@ -891,6 +891,7 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds) { - - r = lookup_paths_init( - &m->lookup_paths, m->running_as, true, -+ NULL, - m->generator_unit_path, - m->generator_unit_path_early, - m->generator_unit_path_late); -@@ -2383,6 +2384,7 @@ int manager_reload(Manager *m) { - - q = lookup_paths_init( - &m->lookup_paths, m->running_as, true, -+ NULL, - m->generator_unit_path, - m->generator_unit_path_early, - m->generator_unit_path_late); -diff --git a/src/shared/install.c b/src/shared/install.c -index b9c85b7..672dcc2 100644 ---- a/src/shared/install.c -+++ b/src/shared/install.c -@@ -47,7 +47,9 @@ typedef struct { - #define _cleanup_lookup_paths_free_ _cleanup_(lookup_paths_free) - #define _cleanup_install_context_done_ _cleanup_(install_context_done) - --static int lookup_paths_init_from_scope(LookupPaths *paths, UnitFileScope scope) { -+static int lookup_paths_init_from_scope(LookupPaths *paths, -+ UnitFileScope scope, -+ const char *root_dir) { - assert(paths); - assert(scope >= 0); - assert(scope < _UNIT_FILE_SCOPE_MAX); -@@ -57,6 +59,7 @@ static int lookup_paths_init_from_scope(LookupPaths *paths, UnitFileScope scope) - return lookup_paths_init(paths, - scope == UNIT_FILE_SYSTEM ? SYSTEMD_SYSTEM : SYSTEMD_USER, - scope == UNIT_FILE_USER, -+ root_dir, - NULL, NULL, NULL); - } - -@@ -705,7 +708,7 @@ int unit_file_link( - assert(scope >= 0); - assert(scope < _UNIT_FILE_SCOPE_MAX); - -- r = lookup_paths_init_from_scope(&paths, scope); -+ r = lookup_paths_init_from_scope(&paths, scope, root_dir); - if (r < 0) - return r; - -@@ -1476,7 +1479,7 @@ int unit_file_enable( - assert(scope >= 0); - assert(scope < _UNIT_FILE_SCOPE_MAX); - -- r = lookup_paths_init_from_scope(&paths, scope); -+ r = lookup_paths_init_from_scope(&paths, scope, root_dir); - if (r < 0) - return r; - -@@ -1516,7 +1519,7 @@ int unit_file_disable( - assert(scope >= 0); - assert(scope < _UNIT_FILE_SCOPE_MAX); - -- r = lookup_paths_init_from_scope(&paths, scope); -+ r = lookup_paths_init_from_scope(&paths, scope, root_dir); - if (r < 0) - return r; - -@@ -1578,7 +1581,7 @@ int unit_file_set_default( - if (unit_name_to_type(file) != UNIT_TARGET) - return -EINVAL; - -- r = lookup_paths_init_from_scope(&paths, scope); -+ r = lookup_paths_init_from_scope(&paths, scope, root_dir); - if (r < 0) - return r; - -@@ -1613,7 +1616,11 @@ int unit_file_get_default( - char **p; - int r; - -- r = lookup_paths_init_from_scope(&paths, scope); -+ assert(scope >= 0); -+ assert(scope < _UNIT_FILE_SCOPE_MAX); -+ assert(name); -+ -+ r = lookup_paths_init_from_scope(&paths, scope, root_dir); - if (r < 0) - return r; - -@@ -1665,12 +1672,13 @@ UnitFileState unit_file_get_state( - if (!unit_name_is_valid(name, true)) - return -EINVAL; - -- r = lookup_paths_init_from_scope(&paths, scope); -+ r = lookup_paths_init_from_scope(&paths, scope, root_dir); - if (r < 0) - return r; - - STRV_FOREACH(i, paths.unit_path) { - struct stat st; -+ char *partial; - - free(path); - path = NULL; -@@ -1679,10 +1687,14 @@ UnitFileState unit_file_get_state( - asprintf(&path, "%s/%s/%s", root_dir, *i, name); - else - asprintf(&path, "%s/%s", *i, name); -- - if (!path) - return -ENOMEM; - -+ if (root_dir) -+ partial = path + strlen(root_dir) + 1; -+ else -+ partial = path; -+ - /* - * Search for a unit file in our default paths, to - * be sure, that there are no broken symlinks. -@@ -1714,7 +1726,7 @@ UnitFileState unit_file_get_state( - else if (r > 0) - return state; - -- r = unit_file_can_install(&paths, root_dir, path, true); -+ r = unit_file_can_install(&paths, root_dir, partial, true); - if (r < 0 && errno != ENOENT) - return r; - else if (r > 0) -@@ -1822,7 +1834,7 @@ int unit_file_preset( - assert(scope >= 0); - assert(scope < _UNIT_FILE_SCOPE_MAX); - -- r = lookup_paths_init_from_scope(&paths, scope); -+ r = lookup_paths_init_from_scope(&paths, scope, root_dir); - if (r < 0) - return r; - -@@ -1891,7 +1903,7 @@ int unit_file_get_list( - if (root_dir && scope != UNIT_FILE_SYSTEM) - return -EINVAL; - -- r = lookup_paths_init_from_scope(&paths, scope); -+ r = lookup_paths_init_from_scope(&paths, scope, root_dir); - if (r < 0) - return r; - -diff --git a/src/shared/path-lookup.c b/src/shared/path-lookup.c -index 03c1380..b62f302 100644 ---- a/src/shared/path-lookup.c -+++ b/src/shared/path-lookup.c -@@ -239,6 +239,7 @@ int lookup_paths_init( - LookupPaths *p, - SystemdRunningAs running_as, - bool personal, -+ const char *root_dir, - const char *generator, - const char *generator_early, - const char *generator_late) { -@@ -316,11 +317,9 @@ int lookup_paths_init( - } - } - -- if (!path_strv_canonicalize_absolute(p->unit_path, NULL)) -+ if (!path_strv_canonicalize_absolute_uniq(p->unit_path, root_dir)) - return -ENOMEM; - -- strv_uniq(p->unit_path); -- - if (!strv_isempty(p->unit_path)) { - _cleanup_free_ char *t = strv_join(p->unit_path, "\n\t"); - if (!t) -@@ -372,15 +371,12 @@ int lookup_paths_init( - return -ENOMEM; - } - -- if (!path_strv_canonicalize_absolute(p->sysvinit_path, NULL)) -+ if (!path_strv_canonicalize_absolute_uniq(p->sysvinit_path, root_dir)) - return -ENOMEM; - -- if (!path_strv_canonicalize_absolute(p->sysvrcnd_path, NULL)) -+ if (!path_strv_canonicalize_absolute_uniq(p->sysvrcnd_path, root_dir)) - return -ENOMEM; - -- strv_uniq(p->sysvinit_path); -- strv_uniq(p->sysvrcnd_path); -- - if (!strv_isempty(p->sysvinit_path)) { - _cleanup_free_ char *t = strv_join(p->sysvinit_path, "\n\t"); - if (!t) -diff --git a/src/shared/path-lookup.h b/src/shared/path-lookup.h -index 9dee85f..0db9bfb 100644 ---- a/src/shared/path-lookup.h -+++ b/src/shared/path-lookup.h -@@ -41,5 +41,11 @@ SystemdRunningAs systemd_running_as_from_string(const char *s) _pure_; - - int user_config_home(char **config_home); - --int lookup_paths_init(LookupPaths *p, SystemdRunningAs running_as, bool personal, const char *generator, const char *generator_early, const char *generator_late); -+int lookup_paths_init(LookupPaths *p, -+ SystemdRunningAs running_as, -+ bool personal, -+ const char *root_dir, -+ const char *generator, -+ const char *generator_early, -+ const char *generator_late); - void lookup_paths_free(LookupPaths *p); -diff --git a/src/shared/path-util.c b/src/shared/path-util.c -index de291a5..0aa5d61 100644 ---- a/src/shared/path-util.c -+++ b/src/shared/path-util.c -@@ -179,36 +179,63 @@ char **path_strv_canonicalize_absolute(char **l, const char *prefix) { - - STRV_FOREACH(s, l) { - char *t, *u; -+ _cleanup_free_ char *orig = NULL; - -- if (!path_is_absolute(*s)) -+ if (!path_is_absolute(*s)) { -+ free(*s); - continue; -+ } - - if (prefix) { -- t = strappend(prefix, *s); -- free(*s); -- *s = NULL; -- -+ orig = *s; -+ t = strappend(prefix, orig); - if (!t) { - enomem = true; - continue; - } -- } else { -+ } else - t = *s; -- *s = NULL; -- } - - errno = 0; - u = canonicalize_file_name(t); - if (!u) { -- if (errno == ENOENT) -- u = t; -- else { -+ if (errno == ENOENT) { -+ if (prefix) { -+ u = orig; -+ orig = NULL; -+ free(t); -+ } else -+ u = t; -+ } else { - free(t); - if (errno == ENOMEM || errno == 0) - enomem = true; - - continue; - } -+ } else if (prefix) { -+ char *x; -+ -+ free(t); -+ x = path_startswith(u, prefix); -+ if (x) { -+ /* restore the slash if it was lost */ -+ if (!startswith(x, "/")) -+ *(--x) = '/'; -+ -+ t = strdup(x); -+ free(u); -+ if (!t) { -+ enomem = true; -+ continue; -+ } -+ u = t; -+ } else { -+ /* canonicalized path goes outside of -+ * prefix, keep the original path instead */ -+ u = orig; -+ orig = NULL; -+ } - } else - free(t); - -diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c -index 1ca4fd3..1cbcd20 100644 ---- a/src/systemctl/systemctl.c -+++ b/src/systemctl/systemctl.c -@@ -4258,7 +4258,7 @@ static int enable_sysv_units(const char *verb, char **args) { - /* Processes all SysV units, and reshuffles the array so that - * afterwards only the native units remain */ - -- r = lookup_paths_init(&paths, SYSTEMD_SYSTEM, false, NULL, NULL, NULL); -+ r = lookup_paths_init(&paths, SYSTEMD_SYSTEM, false, arg_root, NULL, NULL, NULL); - if (r < 0) - return r; - diff --git a/SOURCES/0265-tmpfiles-fix-memory-leak-of-exclude_prefixes.patch b/SOURCES/0265-tmpfiles-fix-memory-leak-of-exclude_prefixes.patch deleted file mode 100644 index edeb5cf..0000000 --- a/SOURCES/0265-tmpfiles-fix-memory-leak-of-exclude_prefixes.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 0ec33b41e2fddd714851b444d85c4bd8a4fae879 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Thu, 30 Jan 2014 21:40:27 -0500 -Subject: [PATCH] tmpfiles: fix memory leak of exclude_prefixes - -Missed in 5c795114. - -(cherry picked from commit 498f8a39e66a62d015ac78e67e2504658bbba5f2) - -Related: #1111199 ---- - src/tmpfiles/tmpfiles.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c -index 32f9088..1337d02 100644 ---- a/src/tmpfiles/tmpfiles.c -+++ b/src/tmpfiles/tmpfiles.c -@@ -1332,12 +1332,12 @@ static int parse_argv(int argc, char *argv[]) { - break; - - case ARG_PREFIX: -- if (strv_extend(&include_prefixes, optarg) < 0) -+ if (strv_push(&include_prefixes, optarg) < 0) - return log_oom(); - break; - - case ARG_EXCLUDE_PREFIX: -- if (strv_extend(&exclude_prefixes, optarg) < 0) -+ if (strv_push(&exclude_prefixes, optarg) < 0) - return log_oom(); - break; - -@@ -1498,7 +1498,8 @@ finish: - hashmap_free(items); - hashmap_free(globs); - -- strv_free(include_prefixes); -+ free(include_prefixes); -+ free(exclude_prefixes); - - set_free_free(unix_sockets); - diff --git a/SOURCES/0266-tmpfiles-add-root-option-to-operate-on-an-alternate-.patch b/SOURCES/0266-tmpfiles-add-root-option-to-operate-on-an-alternate-.patch deleted file mode 100644 index 7210d8b..0000000 --- a/SOURCES/0266-tmpfiles-add-root-option-to-operate-on-an-alternate-.patch +++ /dev/null @@ -1,150 +0,0 @@ -From 14f32b5e62d7f0973302080488a0f0fce897b2d0 Mon Sep 17 00:00:00 2001 -From: Michael Marineau -Date: Thu, 13 Mar 2014 21:32:13 -0700 -Subject: [PATCH] tmpfiles: add --root option to operate on an alternate fs - tree - -This makes it possible to initialize or cleanup an arbitrary filesystem -hierarchy in the same way that it would be during system boot. - -Conflicts: - src/tmpfiles/tmpfiles.c - -(cherry picked from commit cf9a4abdc24c43565d0890fcb88c00169057c0c4) - -Resolves: #1111199 ---- - man/systemd-tmpfiles.xml | 12 ++++++++++-- - src/tmpfiles/tmpfiles.c | 29 +++++++++++++++++++++++++---- - 2 files changed, 35 insertions(+), 6 deletions(-) - -diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml -index 64f9cf9..8d1db16 100644 ---- a/man/systemd-tmpfiles.xml -+++ b/man/systemd-tmpfiles.xml -@@ -139,19 +139,27 @@ - - - -- -+ - Only apply rules that - apply to paths with the specified - prefix. This option can be specified - multiple times. - - -- -+ - Ignore rules that - apply to paths with the specified - prefix. This option can be specified - multiple times. - -+ -+ -+ Takes a directory path -+ as an argument. All paths will be -+ prefixed with the given alternate root -+ path, including config search paths. -+ -+ - - - -diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c -index 1337d02..ff51062 100644 ---- a/src/tmpfiles/tmpfiles.c -+++ b/src/tmpfiles/tmpfiles.c -@@ -110,6 +110,7 @@ static bool arg_boot = false; - - static char **include_prefixes = NULL; - static char **exclude_prefixes = NULL; -+static char *arg_root = NULL; - - static const char conf_file_dirs[] = - "/etc/tmpfiles.d\0" -@@ -1186,6 +1187,15 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { - if (!should_include_path(i->path)) - return 0; - -+ if (arg_root) { -+ char *p = strappend(arg_root, i->path); -+ if (!p) -+ return log_oom(); -+ -+ free(i->path); -+ i->path = p; -+ } -+ - if (user && !streq(user, "-")) { - const char *u = user; - -@@ -1274,7 +1284,8 @@ static int help(void) { - " --remove Remove marked files/directories\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", -+ " --exclude-prefix=PATH Ignore rules that apply to paths with the specified prefix\n" -+ " --root=PATH Operate on an alternate filesystem root\n", - program_invocation_short_name); - - return 0; -@@ -1289,6 +1300,7 @@ static int parse_argv(int argc, char *argv[]) { - ARG_BOOT, - ARG_PREFIX, - ARG_EXCLUDE_PREFIX, -+ ARG_ROOT, - }; - - static const struct option options[] = { -@@ -1299,7 +1311,8 @@ static int parse_argv(int argc, char *argv[]) { - { "boot", no_argument, NULL, ARG_BOOT }, - { "prefix", required_argument, NULL, ARG_PREFIX }, - { "exclude-prefix", required_argument, NULL, ARG_EXCLUDE_PREFIX }, -- { NULL, 0, NULL, 0 } -+ { "root", required_argument, NULL, ARG_ROOT }, -+ {} - }; - - int c; -@@ -1341,6 +1354,13 @@ static int parse_argv(int argc, char *argv[]) { - return log_oom(); - break; - -+ case ARG_ROOT: -+ arg_root = path_make_absolute_cwd(optarg); -+ if (!arg_root) -+ return log_oom(); -+ path_kill_slashes(arg_root); -+ break; -+ - case '?': - return -EINVAL; - -@@ -1368,7 +1388,7 @@ static int read_config_file(const char *fn, bool ignore_enoent) { - - assert(fn); - -- r = search_and_fopen_nulstr(fn, "re", NULL, conf_file_dirs, &f); -+ r = search_and_fopen_nulstr(fn, "re", arg_root, conf_file_dirs, &f); - if (r < 0) { - if (ignore_enoent && r == -ENOENT) - return 0; -@@ -1469,7 +1489,7 @@ int main(int argc, char *argv[]) { - _cleanup_strv_free_ char **files = NULL; - char **f; - -- r = conf_files_list_nulstr(&files, ".conf", NULL, conf_file_dirs); -+ r = conf_files_list_nulstr(&files, ".conf", arg_root, conf_file_dirs); - if (r < 0) { - log_error("Failed to enumerate tmpfiles.d files: %s", strerror(-r)); - goto finish; -@@ -1500,6 +1520,7 @@ finish: - - free(include_prefixes); - free(exclude_prefixes); -+ free(arg_root); - - set_free_free(unix_sockets); - diff --git a/SOURCES/0267-conf-files-include-root-in-returned-file-paths.patch b/SOURCES/0267-conf-files-include-root-in-returned-file-paths.patch deleted file mode 100644 index 21f7c01..0000000 --- a/SOURCES/0267-conf-files-include-root-in-returned-file-paths.patch +++ /dev/null @@ -1,89 +0,0 @@ -From c73f2c0db1e35c80ea3cff7b1eb2bece09be4793 Mon Sep 17 00:00:00 2001 -From: Michael Marineau -Date: Thu, 19 Jun 2014 19:07:04 -0700 -Subject: [PATCH] conf-files: include root in returned file paths - -This restores the original root handling logic that was present prior to -112cfb18 when path expansion moved to path_strv_canonicalize_absolute. -That behavior partially went away in 12ed81d9. - -Alternatively all users of conf_files_list* could be updated to -concatenate the paths themselves as unit_file_query_preset did but since -no user needs the un-concatenated form that is pointless duplication. - -Conflicts: - src/shared/install.c - -(cherry picked from commit cba2ef02722114da2b730d57f1e3bb43013d8921) - -Related: #1111199 ---- - src/shared/conf-files.c | 16 ++++++---------- - src/shared/install.c | 6 +++--- - 2 files changed, 9 insertions(+), 13 deletions(-) - -diff --git a/src/shared/conf-files.c b/src/shared/conf-files.c -index 4ec8bed..fc5f1fe 100644 ---- a/src/shared/conf-files.c -+++ b/src/shared/conf-files.c -@@ -37,20 +37,16 @@ - #include "hashmap.h" - #include "conf-files.h" - --static int files_add(Hashmap *h, const char *dirpath, const char *suffix, const char *root) { -+static int files_add(Hashmap *h, const char *root, const char *path, const char *suffix) { - _cleanup_closedir_ DIR *dir = NULL; -+ char *dirpath; - -- assert(dirpath); -+ assert(path); - assert(suffix); - -- if (isempty(root)) -- dir = opendir(dirpath); -- else { -- const char *p; -+ dirpath = strappenda(root ? root : "", path); - -- p = strappenda3(root, "/", dirpath); -- dir = opendir(p); -- } -+ dir = opendir(dirpath); - if (!dir) { - if (errno == ENOENT) - return 0; -@@ -118,7 +114,7 @@ static int conf_files_list_strv_internal(char ***strv, const char *suffix, const - return -ENOMEM; - - STRV_FOREACH(p, dirs) { -- r = files_add(fh, *p, suffix, root); -+ r = files_add(fh, root, *p, suffix); - if (r == -ENOMEM) { - hashmap_free_free(fh); - return r; -diff --git a/src/shared/install.c b/src/shared/install.c -index 672dcc2..871de78 100644 ---- a/src/shared/install.c -+++ b/src/shared/install.c -@@ -1740,7 +1740,7 @@ UnitFileState unit_file_get_state( - - int unit_file_query_preset(UnitFileScope scope, const char *name) { - _cleanup_strv_free_ char **files = NULL; -- char **i; -+ char **p; - int r; - - assert(scope >= 0); -@@ -1768,10 +1768,10 @@ int unit_file_query_preset(UnitFileScope scope, const char *name) { - if (r < 0) - return r; - -- STRV_FOREACH(i, files) { -+ STRV_FOREACH(p, files) { - _cleanup_fclose_ FILE *f; - -- f = fopen(*i, "re"); -+ f = fopen(*p, "re"); - if (!f) { - if (errno == ENOENT) - continue; diff --git a/SOURCES/0268-install-make-sure-that-root-mode-doesn-t-make-us-con.patch b/SOURCES/0268-install-make-sure-that-root-mode-doesn-t-make-us-con.patch deleted file mode 100644 index 82a76c2..0000000 --- a/SOURCES/0268-install-make-sure-that-root-mode-doesn-t-make-us-con.patch +++ /dev/null @@ -1,148 +0,0 @@ -From 8d32393e5a3fbc12371edf69830d0258a097211f Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 17 Jun 2014 00:53:49 +0200 -Subject: [PATCH] install: make sure that --root= mode doesn't make us consider - all units outside of search path - -(cherry picked from commit 8f294b45cbb627d31342f6a79444be59ce7e2274) - -Related: #1111199 ---- - src/shared/install.c | 41 +++++++++++++++++++++++++++++++++++++---- - src/shared/util.c | 16 ---------------- - src/shared/util.h | 1 - - 3 files changed, 37 insertions(+), 21 deletions(-) - -diff --git a/src/shared/install.c b/src/shared/install.c -index 871de78..7dad66d 100644 ---- a/src/shared/install.c -+++ b/src/shared/install.c -@@ -47,6 +47,37 @@ typedef struct { - #define _cleanup_lookup_paths_free_ _cleanup_(lookup_paths_free) - #define _cleanup_install_context_done_ _cleanup_(install_context_done) - -+static int in_search_path(const char *path, char **search, const char *root_dir) { -+ _cleanup_free_ char *parent = NULL; -+ char **i; -+ int r; -+ -+ assert(path); -+ -+ r = path_get_parent(path, &parent); -+ if (r < 0) -+ return r; -+ -+ STRV_FOREACH(i, search) { -+ _cleanup_free_ char *buf = NULL; -+ const char *p; -+ -+ if (root_dir) { -+ buf = strjoin(root_dir, "/", *i, NULL); -+ if (!buf) -+ return -ENOMEM; -+ -+ p = buf; -+ } else -+ p = *i; -+ -+ if (path_equal(parent, p)) -+ return 1; -+ } -+ -+ return 0; -+} -+ - static int lookup_paths_init_from_scope(LookupPaths *paths, - UnitFileScope scope, - const char *root_dir) { -@@ -741,7 +772,7 @@ int unit_file_link( - continue; - } - -- q = in_search_path(*i, paths.unit_path); -+ q = in_search_path(*i, paths.unit_path, root_dir); - if (q < 0) - return q; - -@@ -1296,6 +1327,7 @@ static int install_info_symlink_link( - InstallInfo *i, - LookupPaths *paths, - const char *config_path, -+ const char *root_dir, - bool force, - UnitFileChange **changes, - unsigned *n_changes) { -@@ -1308,7 +1340,7 @@ static int install_info_symlink_link( - assert(config_path); - assert(i->path); - -- r = in_search_path(i->path, paths->unit_path); -+ r = in_search_path(i->path, paths->unit_path, root_dir); - if (r != 0) - return r; - -@@ -1323,6 +1355,7 @@ static int install_info_apply( - InstallInfo *i, - LookupPaths *paths, - const char *config_path, -+ const char *root_dir, - bool force, - UnitFileChange **changes, - unsigned *n_changes) { -@@ -1343,7 +1376,7 @@ static int install_info_apply( - if (r == 0) - r = q; - -- q = install_info_symlink_link(i, paths, config_path, force, changes, n_changes); -+ q = install_info_symlink_link(i, paths, config_path, root_dir, force, changes, n_changes); - if (r == 0) - r = q; - -@@ -1383,7 +1416,7 @@ static int install_context_apply( - } else if (r >= 0) - r += q; - -- q = install_info_apply(i, paths, config_path, force, changes, n_changes); -+ q = install_info_apply(i, paths, config_path, root_dir, force, changes, n_changes); - if (r >= 0 && q < 0) - r = q; - } -diff --git a/src/shared/util.c b/src/shared/util.c -index e313ea9..fc1f765 100644 ---- a/src/shared/util.c -+++ b/src/shared/util.c -@@ -4490,22 +4490,6 @@ int dirent_ensure_type(DIR *d, struct dirent *de) { - return 0; - } - --int in_search_path(const char *path, char **search) { -- char **i; -- _cleanup_free_ char *parent = NULL; -- int r; -- -- r = path_get_parent(path, &parent); -- if (r < 0) -- return r; -- -- STRV_FOREACH(i, search) -- if (path_equal(parent, *i)) -- return 1; -- -- return 0; --} -- - int get_files_in_directory(const char *path, char ***list) { - _cleanup_closedir_ DIR *d = NULL; - size_t bufsize = 0, n = 0; -diff --git a/src/shared/util.h b/src/shared/util.h -index 3f30917..ec18d2c 100644 ---- a/src/shared/util.h -+++ b/src/shared/util.h -@@ -475,7 +475,6 @@ int glob_extend(char ***strv, const char *path); - - int dirent_ensure_type(DIR *d, struct dirent *de); - --int in_search_path(const char *path, char **search); - int get_files_in_directory(const char *path, char ***list); - - char *strjoin(const char *x, ...) _sentinel_; diff --git a/SOURCES/0269-shared-install-do-not-prefix-created-symlink-with-ro.patch b/SOURCES/0269-shared-install-do-not-prefix-created-symlink-with-ro.patch deleted file mode 100644 index 8060501..0000000 --- a/SOURCES/0269-shared-install-do-not-prefix-created-symlink-with-ro.patch +++ /dev/null @@ -1,130 +0,0 @@ -From 6dadf44d7062c38c3f4f782da3cd88114dceb959 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Mon, 21 Apr 2014 19:17:40 -0400 -Subject: [PATCH] shared/install: do not prefix created symlink with root path - -Before: /var/tmp/inst1//etc/systemd/system/default.target -> /var/tmp/inst1//usr/lib/systemd/system/graphical.target -After: /var/tmp/inst1/etc/systemd/system/default.target -> /usr/lib/systemd/system/graphical.target - -(cherry picked from commit 62b002337727093c21d020c730bd65971f7783a7) - -Related: #1111199 ---- - src/shared/install.c | 89 +++++++++++++++++++++++++--------------------------- - 1 file changed, 43 insertions(+), 46 deletions(-) - -diff --git a/src/shared/install.c b/src/shared/install.c -index 7dad66d..955a9bc 100644 ---- a/src/shared/install.c -+++ b/src/shared/install.c -@@ -1073,67 +1073,64 @@ static int unit_file_search( - assert(info); - assert(paths); - -- if (info->path) -- return unit_file_load(c, info, info->path, allow_symlink); -+ if (info->path) { -+ char *full_path = NULL; -+ -+ if (!isempty(root_dir)) -+ full_path = strappenda(root_dir, info->path); -+ -+ return unit_file_load(c, info, full_path ?: info->path, allow_symlink); -+ } - - assert(info->name); - - STRV_FOREACH(p, paths->unit_path) { -- char *path = NULL; -- -- if (isempty(root_dir)) -- asprintf(&path, "%s/%s", *p, info->name); -- else -- asprintf(&path, "%s/%s/%s", root_dir, *p, info->name); -+ _cleanup_free_ char *path = NULL, *full_path = NULL; - -+ path = strjoin(*p, "/", info->name, NULL); - if (!path) - return -ENOMEM; - -- r = unit_file_load(c, info, path, allow_symlink); -+ if (!isempty(root_dir)) { -+ full_path = strappend(root_dir, path); -+ if (!full_path) -+ return -ENOMEM; -+ } - -- if (r >= 0) -+ r = unit_file_load(c, info, full_path ?: path, allow_symlink); -+ if (r >= 0) { - info->path = path; -- else { -- if (r == -ENOENT && unit_name_is_instance(info->name)) { -- /* Unit file doesn't exist, however instance enablement was requested. -- * We will check if it is possible to load template unit file. */ -- char *template = NULL, -- *template_path = NULL, -- *template_dir = NULL; -- -- template = unit_name_template(info->name); -- if (!template) { -- free(path); -- return -ENOMEM; -- } -+ path = NULL; -+ } else if (r == -ENOENT && unit_name_is_instance(info->name)) { -+ /* Unit file doesn't exist, however instance enablement was requested. -+ * We will check if it is possible to load template unit file. */ -+ _cleanup_free_ char *template = NULL, *template_dir = NULL; -+ -+ template = unit_name_template(info->name); -+ if (!template) -+ return -ENOMEM; - -- /* We will reuse path variable since we don't need it anymore. */ -- template_dir = path; -- *(strrchr(path, '/') + 1) = '\0'; -+ /* We will reuse path variable since we don't need it anymore. */ -+ template_dir = path; -+ *(strrchr(template_dir, '/') + 1) = '\0'; - -- template_path = strjoin(template_dir, template, NULL); -- if (!template_path) { -- free(path); -- free(template); -- return -ENOMEM; -- } -+ path = strappend(template_dir, template); -+ if (!path) -+ return -ENOMEM; - -- /* Let's try to load template unit. */ -- r = unit_file_load(c, info, template_path, allow_symlink); -- if (r >= 0) { -- info->path = strdup(template_path); -- if (!info->path) { -- free(path); -- free(template); -- free(template_path); -- return -ENOMEM; -- } -- } -+ if (!isempty(root_dir)) { -+ free(full_path); -+ full_path = strappend(root_dir, path); -+ if (!full_path) -+ return -ENOMEM; -+ } - -- free(template); -- free(template_path); -+ /* Let's try to load template unit. */ -+ r = unit_file_load(c, info, full_path ?: path, allow_symlink); -+ if (r >= 0) { -+ info->path = path; -+ path = NULL; - } -- free(path); - } - - if (r != -ENOENT && r != -ELOOP) diff --git a/SOURCES/0270-systemctl-fail-in-the-case-that-no-unit-files-were-f.patch b/SOURCES/0270-systemctl-fail-in-the-case-that-no-unit-files-were-f.patch deleted file mode 100644 index 392e694..0000000 --- a/SOURCES/0270-systemctl-fail-in-the-case-that-no-unit-files-were-f.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 9e42758bf5dcaff2120856556ef1c3cafff7d581 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Tue, 19 Aug 2014 20:53:29 +0200 -Subject: [PATCH] systemctl: fail in the case that no unit files were found - -Previously systemctl died with message - --bash-4.2# systemctl --root /rawhi list-unit-files -(src/systemctl/systemctl.c:868) Out of memory. - -in the case that no unit files were found in the --root -or the directory did not exist. - -So lets return ENOENT in the case that --root does not exist -and empty list in the case that there are no unit files. - -(cherry picked from commit fdbdf6ec29bda40763d7d3e7bb2a63e2f5d60c4c) - -Related: #1111199 ---- - src/shared/install.c | 6 ++++++ - src/systemctl/systemctl.c | 4 ++++ - 2 files changed, 10 insertions(+) - -diff --git a/src/shared/install.c b/src/shared/install.c -index 955a9bc..598323a 100644 ---- a/src/shared/install.c -+++ b/src/shared/install.c -@@ -1933,6 +1933,12 @@ int unit_file_get_list( - if (root_dir && scope != UNIT_FILE_SYSTEM) - return -EINVAL; - -+ if (root_dir) { -+ r = access(root_dir, F_OK); -+ if (r < 0) -+ return -errno; -+ } -+ - r = lookup_paths_init_from_scope(&paths, scope, root_dir); - if (r < 0) - return r; -diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c -index 1cbcd20..90a80bd 100644 ---- a/src/systemctl/systemctl.c -+++ b/src/systemctl/systemctl.c -@@ -862,6 +862,10 @@ static int list_unit_files(DBusConnection *bus, char **args) { - } - - n_units = hashmap_size(h); -+ -+ if (n_units == 0) -+ return 0; -+ - units = new(UnitFileList, n_units); - if (!units) { - unit_file_list_free(h); diff --git a/SOURCES/0271-units-make-ExecStopPost-action-part-of-ExecStart.patch b/SOURCES/0271-units-make-ExecStopPost-action-part-of-ExecStart.patch deleted file mode 100644 index f2dd649..0000000 --- a/SOURCES/0271-units-make-ExecStopPost-action-part-of-ExecStart.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 9af28110933ae9cdd96477dd2911c19295bc74ce Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Tue, 8 Jul 2014 17:42:23 +0200 -Subject: [PATCH] units: make ExecStopPost action part of ExecStart - -Currently after exiting rescue shell we isolate default target. User -might want to isolate to some other target than default one. However -issuing systemctl isolate command to desired target would bring system -to default target as a consequence of running ExecStopPost action. - -Having common ancestor for rescue shell and possible followup systemctl -default command should fix this. If user exits rescue shell we will -proceed with isolating default target, otherwise, on manual isolate, -parent shell process is terminated and we don't isolate default target, -but target chosen by user. - -Suggested-by: Michal Schmidt - -(cherry picked from commit d3381512282f2ca1c7669f77fb736a90fdce6982) - -Resolves: #1036276 ---- - units/emergency.service.in | 3 +-- - units/rescue.service.m4.in | 3 +-- - 2 files changed, 2 insertions(+), 4 deletions(-) - -diff --git a/units/emergency.service.in b/units/emergency.service.in -index 94c090f..91fc1bb 100644 ---- a/units/emergency.service.in -+++ b/units/emergency.service.in -@@ -17,8 +17,7 @@ Environment=HOME=/root - WorkingDirectory=/root - ExecStartPre=-/bin/plymouth quit - ExecStartPre=-/bin/echo -e 'Welcome to emergency mode! After logging in, type "journalctl -xb" to view\\nsystem logs, "systemctl reboot" to reboot, "systemctl default" to try again\\nto boot into default mode.' --ExecStart=-/sbin/sulogin --ExecStopPost=@SYSTEMCTL@ --fail --no-block default -+ExecStart=-/bin/sh -c "/sbin/sulogin; @SYSTEMCTL@ --fail --no-block default" - Type=idle - StandardInput=tty-force - StandardOutput=inherit -diff --git a/units/rescue.service.m4.in b/units/rescue.service.m4.in -index 552ef89..ef54369 100644 ---- a/units/rescue.service.m4.in -+++ b/units/rescue.service.m4.in -@@ -18,8 +18,7 @@ Environment=HOME=/root - WorkingDirectory=/root - ExecStartPre=-/bin/plymouth quit - ExecStartPre=-/bin/echo -e 'Welcome to rescue mode! Type "systemctl default" or ^D to enter default mode.\\nType "journalctl -xb" to view system logs. Type "systemctl reboot" to reboot.' --ExecStart=-/sbin/sulogin --ExecStopPost=-@SYSTEMCTL@ --fail --no-block default -+ExecStart=-/bin/sh -c "/sbin/sulogin; @SYSTEMCTL@ --fail --no-block default" - Type=idle - StandardInput=tty-force - StandardOutput=inherit diff --git a/SOURCES/0272-systemctl-fix-broken-list-unit-files-with-root.patch b/SOURCES/0272-systemctl-fix-broken-list-unit-files-with-root.patch deleted file mode 100644 index 6c211b2..0000000 --- a/SOURCES/0272-systemctl-fix-broken-list-unit-files-with-root.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 736a7f8c5d6c711ece23b0f347d3b89ac7464b08 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Tue, 26 Aug 2014 13:33:08 +0200 -Subject: [PATCH] systemctl: fix broken list-unit-files with --root - -(cherry picked from commit 81fc054dc7c365545bca86d78bf36a12658cedb3) - -Related: #1111199 - -Conflicts: - src/shared/install.c ---- - src/shared/install.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/src/shared/install.c b/src/shared/install.c -index 598323a..2c8f907 100644 ---- a/src/shared/install.c -+++ b/src/shared/install.c -@@ -1973,6 +1973,7 @@ int unit_file_get_list( - union dirent_storage buffer; - UnitFileList __attribute__((cleanup(unitfilelist_free))) - *f = NULL; -+ _cleanup_free_ char *path = NULL; - - r = readdir_r(d, &buffer.de, &de); - if (r != 0) -@@ -2027,7 +2028,11 @@ int unit_file_get_list( - goto found; - } - -- r = unit_file_can_install(&paths, root_dir, f->path, true); -+ path = path_make_absolute(de->d_name, *i); -+ if (!path) -+ return -ENOMEM; -+ -+ r = unit_file_can_install(&paths, root_dir, path, true); - if (r == -EINVAL || /* Invalid setting? */ - r == -EBADMSG || /* Invalid format? */ - r == -ENOENT /* Included file not found? */) diff --git a/SOURCES/0273-machine-id-only-look-into-KVM-uuid-when-we-are-not-r.patch b/SOURCES/0273-machine-id-only-look-into-KVM-uuid-when-we-are-not-r.patch deleted file mode 100644 index f84f577..0000000 --- a/SOURCES/0273-machine-id-only-look-into-KVM-uuid-when-we-are-not-r.patch +++ /dev/null @@ -1,87 +0,0 @@ -From a777218d241e52279039da5a2ba9b5a69576583c Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Mon, 28 Apr 2014 18:11:40 +0200 -Subject: [PATCH] machine-id: only look into KVM uuid when we are not running - in a container - -Resolves: #1123452 - -(cherry picked from commit 0b36bbc42d3a408531517a02acaf56105b863d55) - -Conflicts: - src/core/machine-id-setup.c ---- - src/core/machine-id-setup.c | 53 +++++++++++++++++++++++---------------------- - 1 file changed, 27 insertions(+), 26 deletions(-) - -diff --git a/src/core/machine-id-setup.c b/src/core/machine-id-setup.c -index 291930e..8cfcf51 100644 ---- a/src/core/machine-id-setup.c -+++ b/src/core/machine-id-setup.c -@@ -92,32 +92,9 @@ static int generate(char id[34], const char *root) { - } - } - -- /* If that didn't work, see if we are running in qemu/kvm and a -- * machine ID was passed in via -uuid on the qemu/kvm command -- * line */ -- -- r = detect_vm(&vm_id); -- if (r > 0 && streq(vm_id, "kvm")) { -- char uuid[37]; -- -- fd = open("/sys/class/dmi/id/product_uuid", O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW); -- if (fd >= 0) { -- k = loop_read(fd, uuid, 36, false); -- close_nointr_nofail(fd); -- -- if (k >= 36) { -- r = shorten_uuid(id, uuid); -- if (r >= 0) { -- log_info("Initializing machine ID from KVM UUID."); -- return 0; -- } -- } -- } -- } -- -- /* If that didn't work either, see if we are running in a -- * container, and a machine ID was passed in via -- * $container_uuid the way libvirt/LXC does it */ -+ /* If that didn't work, see if we are running in a container, -+ * and a machine ID was passed in via $container_uuid the way -+ * libvirt/LXC does it */ - r = detect_container(NULL); - if (r > 0) { - _cleanup_free_ char *e = NULL; -@@ -132,6 +109,30 @@ static int generate(char id[34], const char *root) { - } - } - } -+ -+ } else { -+ /* If we are not running in a container, see if we are -+ * running in qemu/kvm and a machine ID was passed in -+ * via -uuid on the qemu/kvm command line */ -+ -+ r = detect_vm(&vm_id); -+ if (r > 0 && streq(vm_id, "kvm")) { -+ char uuid[37]; -+ -+ fd = open("/sys/class/dmi/id/product_uuid", O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW); -+ if (fd >= 0) { -+ k = loop_read(fd, uuid, 36, false); -+ close_nointr_nofail(fd); -+ -+ if (k >= 36) { -+ r = shorten_uuid(id, uuid); -+ if (r >= 0) { -+ log_info("Initializing machine ID from KVM UUID."); -+ return 0; -+ } -+ } -+ } -+ } - } - - /* If that didn't work, generate a random machine id */ diff --git a/SOURCES/0274-util-reset-signals-when-we-fork-off-agents.patch b/SOURCES/0274-util-reset-signals-when-we-fork-off-agents.patch deleted file mode 100644 index a55fd51..0000000 --- a/SOURCES/0274-util-reset-signals-when-we-fork-off-agents.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 72be8870f1ab5d8753d966ee6c81f88734053a95 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 26 Aug 2014 21:04:21 +0200 -Subject: [PATCH] util: reset signals when we fork off agents - -If we invoke agents, we should make sure we actually can kill them -again. I mean, it's probably not our job to cleanup the signals if our -tools are invoked in weird contexts, but at least we should make sure, -that the subprocesses we invoke and intend to control work as intended. - -Also see: - -http://lists.freedesktop.org/archives/systemd-devel/2014-August/022460.html - -(cherry picked from commit 8a7c93d858c342744adf481565d8bb03b9713dcf) - -Resolves: #1134818 ---- - src/shared/util.c | 18 ++++++++++++++++++ - src/shared/util.h | 1 + - 2 files changed, 19 insertions(+) - -diff --git a/src/shared/util.c b/src/shared/util.c -index fc1f765..e4448ff 100644 ---- a/src/shared/util.c -+++ b/src/shared/util.c -@@ -935,6 +935,18 @@ int reset_all_signal_handlers(void) { - return 0; - } - -+int reset_signal_mask(void) { -+ sigset_t ss; -+ -+ if (sigemptyset(&ss) < 0) -+ return -errno; -+ -+ if (sigprocmask(SIG_SETMASK, &ss, NULL) < 0) -+ return -errno; -+ -+ return 0; -+} -+ - char *strstrip(char *s) { - char *e; - -@@ -5028,6 +5040,12 @@ int fork_agent(pid_t *pid, const int except[], unsigned n_except, const char *pa - /* Don't leak fds to the agent */ - close_all_fds(except, n_except); - -+ /* Make sure we actually can kill the agent, if we need to, in -+ * case somebody invoked us from a shell script that trapped -+ * SIGTERM or so... */ -+ reset_all_signal_handlers(); -+ reset_signal_mask(); -+ - stdout_is_tty = isatty(STDOUT_FILENO); - stderr_is_tty = isatty(STDERR_FILENO); - -diff --git a/src/shared/util.h b/src/shared/util.h -index ec18d2c..5a9bc99 100644 ---- a/src/shared/util.h -+++ b/src/shared/util.h -@@ -207,6 +207,7 @@ int readlink_and_make_absolute(const char *p, char **r); - int readlink_and_canonicalize(const char *p, char **r); - - int reset_all_signal_handlers(void); -+int reset_signal_mask(void); - - char *strstrip(char *s); - char *delete_chars(char *s, const char *bad); diff --git a/SOURCES/0275-util-fix-minimal-race-where-we-might-miss-SIGTERMs-w.patch b/SOURCES/0275-util-fix-minimal-race-where-we-might-miss-SIGTERMs-w.patch deleted file mode 100644 index 5cdd581..0000000 --- a/SOURCES/0275-util-fix-minimal-race-where-we-might-miss-SIGTERMs-w.patch +++ /dev/null @@ -1,95 +0,0 @@ -From f0fdbdb003cb3e8d8188c1c01701b510505b5b8b Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 27 Aug 2014 21:42:20 +0200 -Subject: [PATCH] util: fix minimal race where we might miss SIGTERMs when - forking off an agent - -Before forking, block all signals, and unblock them afterwards. This way -the child will have them blocked, and we won't lose them. - -(cherry picked from commit 8a7c93d858c342744adf481565d8bb03b9713dcf) - -Related: #1134818 ---- - src/shared/util.c | 35 +++++++++++++++++++++++------------ - 1 file changed, 23 insertions(+), 12 deletions(-) - -diff --git a/src/shared/util.c b/src/shared/util.c -index e4448ff..9f25b15 100644 ---- a/src/shared/util.c -+++ b/src/shared/util.c -@@ -5002,9 +5002,9 @@ int fd_inc_rcvbuf(int fd, size_t n) { - } - - int fork_agent(pid_t *pid, const int except[], unsigned n_except, const char *path, ...) { -- pid_t parent_pid, agent_pid; -- int fd; - bool stdout_is_tty, stderr_is_tty; -+ pid_t parent_pid, agent_pid; -+ sigset_t ss, saved_ss; - unsigned n, i; - va_list ap; - char **l; -@@ -5012,16 +5012,25 @@ int fork_agent(pid_t *pid, const int except[], unsigned n_except, const char *pa - assert(pid); - assert(path); - -- parent_pid = getpid(); -- - /* Spawns a temporary TTY agent, making sure it goes away when - * we go away */ - -+ parent_pid = getpid(); -+ -+ /* First we temporarily block all signals, so that the new -+ * child has them blocked initially. This way, we can be sure -+ * that SIGTERMs are not lost we might send to the agent. */ -+ assert_se(sigfillset(&ss) >= 0); -+ assert_se(sigprocmask(SIG_SETMASK, &ss, &saved_ss) >= 0); -+ - agent_pid = fork(); -- if (agent_pid < 0) -+ if (agent_pid < 0) { -+ assert_se(sigprocmask(SIG_SETMASK, &saved_ss, NULL) >= 0); - return -errno; -+ } - - if (agent_pid != 0) { -+ assert_se(sigprocmask(SIG_SETMASK, &saved_ss, NULL) >= 0); - *pid = agent_pid; - return 0; - } -@@ -5032,24 +5041,26 @@ int fork_agent(pid_t *pid, const int except[], unsigned n_except, const char *pa - if (prctl(PR_SET_PDEATHSIG, SIGTERM) < 0) - _exit(EXIT_FAILURE); - -+ /* Make sure we actually can kill the agent, if we need to, in -+ * case somebody invoked us from a shell script that trapped -+ * SIGTERM or so... */ -+ reset_all_signal_handlers(); -+ reset_signal_mask(); -+ - /* Check whether our parent died before we were able -- * to set the death signal */ -+ * to set the death signal and unblock the signals */ - if (getppid() != parent_pid) - _exit(EXIT_SUCCESS); - - /* Don't leak fds to the agent */ - close_all_fds(except, n_except); - -- /* Make sure we actually can kill the agent, if we need to, in -- * case somebody invoked us from a shell script that trapped -- * SIGTERM or so... */ -- reset_all_signal_handlers(); -- reset_signal_mask(); -- - stdout_is_tty = isatty(STDOUT_FILENO); - stderr_is_tty = isatty(STDERR_FILENO); - - if (!stdout_is_tty || !stderr_is_tty) { -+ int fd; -+ - /* Detach from stdout/stderr. and reopen - * /dev/tty for them. This is important to - * ensure that when systemctl is started via diff --git a/SOURCES/0276-udev-do-not-skip-the-execution-of-RUN-when-renaming-.patch b/SOURCES/0276-udev-do-not-skip-the-execution-of-RUN-when-renaming-.patch deleted file mode 100644 index 89c26df..0000000 --- a/SOURCES/0276-udev-do-not-skip-the-execution-of-RUN-when-renaming-.patch +++ /dev/null @@ -1,163 +0,0 @@ -From 426a65ac5d56264b1890539eff96a1fa1d460217 Mon Sep 17 00:00:00 2001 -From: Kay Sievers -Date: Wed, 14 May 2014 00:34:49 +0200 -Subject: [PATCH] udev: do not skip the execution of RUN when renaming a - network device fails - -(cherry picked from commit 1ea972174baba40dbc80c51cbfc4edc49764b59b) - -Resolves: #1102135 ---- - src/test/test-udev.c | 5 ++--- - src/udev/udev-event.c | 9 ++++----- - src/udev/udev.h | 2 +- - src/udev/udevadm-test.c | 13 +++++-------- - src/udev/udevd.c | 13 ++++++------- - 5 files changed, 18 insertions(+), 24 deletions(-) - -diff --git a/src/test/test-udev.c b/src/test/test-udev.c -index 17825f1..3fcf728 100644 ---- a/src/test/test-udev.c -+++ b/src/test/test-udev.c -@@ -156,9 +156,8 @@ int main(int argc, char *argv[]) - } - } - -- err = udev_event_execute_rules(event, rules, &sigmask_orig); -- if (err == 0) -- udev_event_execute_run(event, NULL); -+ udev_event_execute_rules(event, rules, &sigmask_orig); -+ udev_event_execute_run(event, NULL); - out: - if (event != NULL && event->fd_signal >= 0) - close(event->fd_signal); -diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c -index 3db2cb7..d69d7ba 100644 ---- a/src/udev/udev-event.c -+++ b/src/udev/udev-event.c -@@ -776,13 +776,12 @@ static int rename_netif(struct udev_event *event) - return err; - } - --int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules, const sigset_t *sigmask) -+void udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules, const sigset_t *sigmask) - { - struct udev_device *dev = event->dev; -- int err = 0; - - if (udev_device_get_subsystem(dev) == NULL) -- return -1; -+ return; - - if (streq(udev_device_get_action(dev), "remove")) { - udev_device_read_db(dev, NULL); -@@ -816,9 +815,10 @@ int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules, - event->name != NULL && !streq(event->name, udev_device_get_sysname(dev))) { - char syspath[UTIL_PATH_SIZE]; - char *pos; -+ int err; - - err = rename_netif(event); -- if (err == 0) { -+ if (err >= 0) { - log_debug("renamed netif to '%s'\n", event->name); - - /* remember old name */ -@@ -881,7 +881,6 @@ int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules, - udev_device_unref(event->dev_db); - event->dev_db = NULL; - } -- return err; - } - - void udev_event_execute_run(struct udev_event *event, const sigset_t *sigmask) -diff --git a/src/udev/udev.h b/src/udev/udev.h -index 8395926..900b1d6 100644 ---- a/src/udev/udev.h -+++ b/src/udev/udev.h -@@ -83,7 +83,7 @@ int udev_event_apply_subsys_kernel(struct udev_event *event, const char *string, - int udev_event_spawn(struct udev_event *event, - const char *cmd, char **envp, const sigset_t *sigmask, - char *result, size_t ressize); --int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules, const sigset_t *sigset); -+void udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules, const sigset_t *sigset); - void udev_event_execute_run(struct udev_event *event, const sigset_t *sigset); - int udev_build_argv(struct udev *udev, char *cmd, int *argc, char *argv[]); - -diff --git a/src/udev/udevadm-test.c b/src/udev/udevadm-test.c -index df1409b..dc292c2 100644 ---- a/src/udev/udevadm-test.c -+++ b/src/udev/udevadm-test.c -@@ -42,7 +42,6 @@ static int adm_test(struct udev *udev, int argc, char *argv[]) - struct udev_rules *rules = NULL; - struct udev_list_entry *entry; - sigset_t mask, sigmask_orig; -- int err; - int rc = 0; - - static const struct option options[] = { -@@ -141,18 +140,16 @@ static int adm_test(struct udev *udev, int argc, char *argv[]) - goto out; - } - -- err = udev_event_execute_rules(event, rules, &sigmask_orig); -+ udev_event_execute_rules(event, rules, &sigmask_orig); - - udev_list_entry_foreach(entry, udev_device_get_properties_list_entry(dev)) - printf("%s=%s\n", udev_list_entry_get_name(entry), udev_list_entry_get_value(entry)); - -- if (err == 0) { -- udev_list_entry_foreach(entry, udev_list_get_entry(&event->run_list)) { -- char program[UTIL_PATH_SIZE]; -+ udev_list_entry_foreach(entry, udev_list_get_entry(&event->run_list)) { -+ char program[UTIL_PATH_SIZE]; - -- udev_event_apply_format(event, udev_list_entry_get_name(entry), program, sizeof(program)); -- printf("run: '%s'\n", program); -- } -+ udev_event_apply_format(event, udev_list_entry_get_name(entry), program, sizeof(program)); -+ printf("run: '%s'\n", program); - } - out: - if (event != NULL && event->fd_signal >= 0) -diff --git a/src/udev/udevd.c b/src/udev/udevd.c -index 7c6c5d6..3d5feb4 100644 ---- a/src/udev/udevd.c -+++ b/src/udev/udevd.c -@@ -272,7 +272,7 @@ static void worker_new(struct event *event) - for (;;) { - struct udev_event *udev_event; - struct worker_message msg; -- int err; -+ int err = 0; - - log_debug("seq %llu running\n", udev_device_get_seqnum(dev)); - udev_event = udev_event_new(dev); -@@ -288,13 +288,12 @@ static void worker_new(struct event *event) - udev_event->exec_delay = exec_delay; - - /* apply rules, create node, symlinks */ -- err = udev_event_execute_rules(udev_event, rules, &sigmask_orig); -+ udev_event_execute_rules(udev_event, rules, &sigmask_orig); - -- if (err == 0) -- udev_event_execute_run(udev_event, &sigmask_orig); -+ udev_event_execute_run(udev_event, &sigmask_orig); - - /* apply/restore inotify watch */ -- if (err == 0 && udev_event->inotify_watch) { -+ if (udev_event->inotify_watch) { - udev_watch_begin(udev, dev); - udev_device_update_db(dev); - } -@@ -304,8 +303,8 @@ static void worker_new(struct event *event) - - /* send udevd the result of the event execution */ - memset(&msg, 0, sizeof(struct worker_message)); -- if (err != 0) -- msg.exitcode = err; -+ -+ msg.exitcode = err; - msg.pid = getpid(); - send(worker_watch[WRITE_END], &msg, sizeof(struct worker_message), 0); - diff --git a/SOURCES/0277-man-mention-System-Administrator-s-Guide-in-systemct.patch b/SOURCES/0277-man-mention-System-Administrator-s-Guide-in-systemct.patch deleted file mode 100644 index 7e82917..0000000 --- a/SOURCES/0277-man-mention-System-Administrator-s-Guide-in-systemct.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 28d352847cea4cacab45fe56e9f452eb45bc0708 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Thu, 28 Aug 2014 15:12:10 +0200 -Subject: [PATCH] man: mention System Administrator's Guide in systemctl - manpage - -Resolves: #978948 ---- - man/systemctl.xml | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/man/systemctl.xml b/man/systemctl.xml -index 25b03d8..d1fda61 100644 ---- a/man/systemctl.xml -+++ b/man/systemctl.xml -@@ -1350,6 +1350,17 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service - - - -+ Examples -+ -+ For examples how to use systemctl in comparsion -+ with old service and chkconfig command please see: -+ -+ Managing System Services -+ -+ -+ -+ -+ - See Also - - systemd1, diff --git a/SOURCES/0278-vconsole-also-copy-character-maps-not-just-fonts-fro.patch b/SOURCES/0278-vconsole-also-copy-character-maps-not-just-fonts-fro.patch deleted file mode 100644 index 2bd6874..0000000 --- a/SOURCES/0278-vconsole-also-copy-character-maps-not-just-fonts-fro.patch +++ /dev/null @@ -1,57 +0,0 @@ -From e39ab9b0f4d2cbc9fab10c64c2527908526ea86e Mon Sep 17 00:00:00 2001 -From: Carl Schaefer -Date: Mon, 23 Jun 2014 18:23:48 +0200 -Subject: [PATCH] vconsole: also copy character maps (not just fonts) from vt1 - to vt2, vt3, ... - -https://bugs.freedesktop.org/show_bug.cgi?id=78796 - -(cherry picked from commit ff452e76e2c0f89a32542b7179bb2fd538335933) - -Resolves: #1002450 ---- - src/vconsole/vconsole-setup.c | 24 ++++++++++++++++++++++++ - 1 file changed, 24 insertions(+) - -diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c -index 1bbf737..7196ddf 100644 ---- a/src/vconsole/vconsole-setup.c -+++ b/src/vconsole/vconsole-setup.c -@@ -180,6 +180,10 @@ static int font_load(const char *vc, const char *font, const char *map, const ch - */ - static void font_copy_to_all_vcs(int fd) { - struct vt_stat vcs = {}; -+ unsigned char map8[E_TABSZ]; -+ unsigned short map16[E_TABSZ]; -+ struct unimapdesc unimapd; -+ struct unipair unipairs[USHRT_MAX]; - int i, r; - - /* get active, and 16 bit mask of used VT numbers */ -@@ -209,6 +213,26 @@ static void font_copy_to_all_vcs(int fd) { - cfo.op = KD_FONT_OP_COPY; - cfo.height = vcs.v_active-1; /* tty1 == index 0 */ - ioctl(vcfd, KDFONTOP, &cfo); -+ -+ /* copy map of 8bit chars */ -+ if (ioctl(fd, GIO_SCRNMAP, map8) >= 0) -+ ioctl(vcfd, PIO_SCRNMAP, map8); -+ -+ /* copy map of 8bit chars -> 16bit Unicode values */ -+ if (ioctl(fd, GIO_UNISCRNMAP, map16) >= 0) -+ ioctl(vcfd, PIO_UNISCRNMAP, map16); -+ -+ /* copy unicode translation table */ -+ /* unimapd is a ushort count and a pointer to an -+ array of struct unipair { ushort, ushort } */ -+ unimapd.entries = unipairs; -+ unimapd.entry_ct = USHRT_MAX; -+ if (ioctl(fd, GIO_UNIMAP, &unimapd) >= 0) { -+ struct unimapinit adv = { 0, 0, 0 }; -+ -+ ioctl(vcfd, PIO_UNIMAPCLR, &adv); -+ ioctl(vcfd, PIO_UNIMAP, &unimapd); -+ } - } - } - diff --git a/SOURCES/0279-vconsole-setup-run-setfont-before-loadkeys.patch b/SOURCES/0279-vconsole-setup-run-setfont-before-loadkeys.patch deleted file mode 100644 index 2a543f3..0000000 --- a/SOURCES/0279-vconsole-setup-run-setfont-before-loadkeys.patch +++ /dev/null @@ -1,99 +0,0 @@ -From a5236c816e1b8f7a56b2b4b0fa5ac2d5998e5b84 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Tue, 1 Jul 2014 22:20:11 -0400 -Subject: [PATCH] vconsole-setup: run setfont before loadkeys - -https://bugs.freedesktop.org/show_bug.cgi?id=80685 - -(cherry picked from commit abee28c56d523e55751b0c007d0bf812cc285c00) - -Conflicts: - src/vconsole/vconsole-setup.c - -Related: #1002450 ---- - src/vconsole/vconsole-setup.c | 49 ++++++++++++++++++++----------------------- - 1 file changed, 23 insertions(+), 26 deletions(-) - -diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c -index 7196ddf..25d15af 100644 ---- a/src/vconsole/vconsole-setup.c -+++ b/src/vconsole/vconsole-setup.c -@@ -238,12 +238,10 @@ static void font_copy_to_all_vcs(int fd) { - - int main(int argc, char **argv) { - const char *vc; -- char *vc_keymap = NULL; -- char *vc_keymap_toggle = NULL; -- char *vc_font = NULL; -- char *vc_font_map = NULL; -- char *vc_font_unimap = NULL; -- int fd = -1; -+ _cleanup_free_ char -+ *vc_keymap = NULL, *vc_keymap_toggle = NULL, -+ *vc_font = NULL, *vc_font_map = NULL, *vc_font_unimap = NULL; -+ _cleanup_close_ int fd = -1; - bool utf8; - pid_t font_pid = 0, keymap_pid = 0; - bool font_copy = false; -@@ -265,12 +263,12 @@ int main(int argc, char **argv) { - fd = open_terminal(vc, O_RDWR|O_CLOEXEC); - if (fd < 0) { - log_error("Failed to open %s: %m", vc); -- goto finish; -+ return EXIT_FAILURE; - } - - if (!is_vconsole(fd)) { - log_error("Device %s is not a virtual console.", vc); -- goto finish; -+ return EXIT_FAILURE; - } - - utf8 = is_locale_utf8(); -@@ -305,28 +303,27 @@ int main(int argc, char **argv) { - else - disable_utf8(fd); - -- r = EXIT_FAILURE; -- if (keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid) >= 0 && -- font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid) >= 0) -- r = EXIT_SUCCESS; -- --finish: -- if (keymap_pid > 0) -- wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid); -+ r = font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid); -+ if (r < 0) { -+ log_error("Failed to start " KBD_LOADKEYS ": %s", strerror(-r)); -+ return EXIT_FAILURE; -+ } - -- if (font_pid > 0) { -+ if (font_pid > 0) - wait_for_terminate_and_warn(KBD_SETFONT, font_pid); -- if (font_copy) -- font_copy_to_all_vcs(fd); -+ -+ r = keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid); -+ if (r < 0) { -+ log_error("Failed to start " KBD_SETFONT ": %s", strerror(-r)); -+ return EXIT_FAILURE; - } - -- free(vc_keymap); -- free(vc_font); -- free(vc_font_map); -- free(vc_font_unimap); -+ if (keymap_pid > 0) -+ wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid); - -- if (fd >= 0) -- close_nointr_nofail(fd); -+ /* Only copy the font when we started setfont successfully */ -+ if (font_copy && font_pid > 0) -+ font_copy_to_all_vcs(fd); - -- return r; -+ return EXIT_SUCCESS; - } diff --git a/SOURCES/0280-vconsole-setup-fix-inverted-error-messages.patch b/SOURCES/0280-vconsole-setup-fix-inverted-error-messages.patch deleted file mode 100644 index b48682d..0000000 --- a/SOURCES/0280-vconsole-setup-fix-inverted-error-messages.patch +++ /dev/null @@ -1,38 +0,0 @@ -From ef543bf1d0011c0c7bfe38e097c1ef53e7027591 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Mon, 7 Jul 2014 08:55:30 -0400 -Subject: [PATCH] vconsole-setup: fix inverted error messages - -Introduced in abee28c56d. - -Pointed-out-by: Werner Fink - -(cherry picked from commit 3dde3f819732aaa66ab8e881305488adaea17641) - -Related: #1002450 ---- - src/vconsole/vconsole-setup.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c -index 25d15af..645b1e6 100644 ---- a/src/vconsole/vconsole-setup.c -+++ b/src/vconsole/vconsole-setup.c -@@ -305,7 +305,7 @@ int main(int argc, char **argv) { - - r = font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid); - if (r < 0) { -- log_error("Failed to start " KBD_LOADKEYS ": %s", strerror(-r)); -+ log_error("Failed to start " KBD_SETFONT ": %s", strerror(-r)); - return EXIT_FAILURE; - } - -@@ -314,7 +314,7 @@ int main(int argc, char **argv) { - - r = keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid); - if (r < 0) { -- log_error("Failed to start " KBD_SETFONT ": %s", strerror(-r)); -+ log_error("Failed to start " KBD_LOADKEYS ": %s", strerror(-r)); - return EXIT_FAILURE; - } - diff --git a/SOURCES/0281-localed-consider-an-unset-model-as-a-wildcard.patch b/SOURCES/0281-localed-consider-an-unset-model-as-a-wildcard.patch deleted file mode 100644 index 1ebefe1..0000000 --- a/SOURCES/0281-localed-consider-an-unset-model-as-a-wildcard.patch +++ /dev/null @@ -1,42 +0,0 @@ -From a27bc4778ef4579a954846cb75435226655ad31a Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Fri, 30 May 2014 18:20:16 +0200 -Subject: [PATCH] localed: consider an unset model as a wildcard - -(cherry picked from commit 387066c2e5bda159201896b194711965b52f34a9) - -Conflicts: - src/locale/localed.c - -Resolves: #903776 ---- - src/locale/localed.c | 13 +++++++------ - 1 file changed, 7 insertions(+), 6 deletions(-) - -diff --git a/src/locale/localed.c b/src/locale/localed.c -index b9b98f4..a93b309 100644 ---- a/src/locale/localed.c -+++ b/src/locale/localed.c -@@ -871,15 +871,16 @@ static int find_legacy_keymap(char **new_keymap) { - } - } - -- if (matching > 0 && -- streq_ptr(state.x11_model, a[2])) { -- matching++; -- -- if (streq_ptr(state.x11_variant, a[3])) { -+ if (matching > 0) { -+ if (isempty(state.x11_model) || streq_ptr(state.x11_model, a[2])) { - matching++; - -- if (streq_ptr(state.x11_options, a[4])) -+ if (streq_ptr(state.x11_variant, a[3])) { - matching++; -+ -+ if (streq_ptr(state.x11_options, a[4])) -+ matching++; -+ } - } - } - diff --git a/SOURCES/0282-systemd-detect-virt-detect-s390-virtualization.patch b/SOURCES/0282-systemd-detect-virt-detect-s390-virtualization.patch deleted file mode 100644 index 33c6bfa..0000000 --- a/SOURCES/0282-systemd-detect-virt-detect-s390-virtualization.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 50bb38a3dc24eb252097e958387d5a7075717a5a Mon Sep 17 00:00:00 2001 -From: Thomas Blume -Date: Fri, 18 Jul 2014 09:13:36 -0400 -Subject: [PATCH] systemd-detect-virt: detect s390 virtualization - -A system that is running on a logical partition (LPAR) provided by -PR/SM has access to physical hardware (except CPU). It is true that -PR/SM abstracts the hardware, but only for sharing purposes. - -Details are statet at: - -http://publib.boulder.ibm.com/infocenter/eserver/v1r2/topic/eicaz/eicazzlpar.htm - --->-- -In other words, PR/SM transforms physical resources into virtual resources so -that many logical partitions can share the same physical resources. ---<-- - -Still, from the OS point of view, the shared virtual resource is real -hardware. ConditionVirtualization must be set to false if the OS runs -directly on PR/SM (e.g. in an LPAR). - -[zj: reorder code so that variables are not allocated when #if-def is -false. Add commit message.] - -Conflicts: - src/shared/virt.c - -(cherry picked from commit f41925b4e442a34c93ad120ef1426c974a047ed1) - -Resolves: #1139149 ---- - man/systemd.unit.xml | 1 + - src/shared/virt.c | 16 ++++++++++++++++ - 2 files changed, 17 insertions(+) - -diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml -index 4704352..c500953 100644 ---- a/man/systemd.unit.xml -+++ b/man/systemd.unit.xml -@@ -969,6 +969,7 @@ - virtualization solution, or one of - qemu, - kvm, -+ zvm, - vmware, - microsoft, - oracle, -diff --git a/src/shared/virt.c b/src/shared/virt.c -index 4f8134a..5466d97 100644 ---- a/src/shared/virt.c -+++ b/src/shared/virt.c -@@ -175,6 +175,22 @@ int detect_vm(const char **id) { - return 1; - } - -+#if defined(__s390__) -+ { -+ _cleanup_free_ char *t = NULL; -+ -+ r = get_status_field("/proc/sysinfo", "VM00 Control Program:", &t); -+ if (r >= 0) { -+ if (streq(t, "z/VM")) -+ _id = "zvm"; -+ else -+ _id = "kvm"; -+ -+ return 1; -+ } -+ } -+#endif -+ - return 0; - } - diff --git a/SOURCES/0283-systemctl-unbreak-switchroot.patch b/SOURCES/0283-systemctl-unbreak-switchroot.patch deleted file mode 100644 index 8183aa5..0000000 --- a/SOURCES/0283-systemctl-unbreak-switchroot.patch +++ /dev/null @@ -1,75 +0,0 @@ -From e1036b1b5133141949bea166fb2cb6cdbfec3be0 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Fri, 12 Sep 2014 13:27:36 +0200 -Subject: [PATCH] systemctl: unbreak switchroot - -rhel-only patch -cad8ec5980d63253586d9f884649c45eed0667a1 backport broke it - -Related: #1138546 ---- - src/systemctl/systemctl.c | 26 ++++++++++++++------------ - 1 file changed, 14 insertions(+), 12 deletions(-) - -diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c -index 90a80bd..ebc8caa 100644 ---- a/src/systemctl/systemctl.c -+++ b/src/systemctl/systemctl.c -@@ -4147,8 +4147,8 @@ static int show_enviroment(DBusConnection *bus, char **args) { - } - - static int switch_root(DBusConnection *bus, char **args) { -- _cleanup_free_ char *cmdline_init = NULL; -- const char *root, *init; -+ _cleanup_free_ char *init = NULL; -+ const char *root; - unsigned l; - int r; - -@@ -4161,23 +4161,20 @@ static int switch_root(DBusConnection *bus, char **args) { - root = args[1]; - - if (l >= 3) -- init = args[2]; -+ init = strdup(args[2]); - else { - r = parse_env_file("/proc/cmdline", WHITESPACE, -- "init", &cmdline_init, -+ "init", &init, - NULL); - if (r < 0) - log_debug("Failed to parse /proc/cmdline: %s", strerror(-r)); - -- init = cmdline_init; -+ if (!init) -+ init = strdup(""); - } -- if (!init) -- return log_oom(); - -- if (isempty(init)) -- init = NULL; - -- if (init) { -+ if (!isempty(init)) { - const char *root_systemd_path = NULL, *root_init_path = NULL; - - root_systemd_path = strappenda(root, "/" SYSTEMD_BINARY_PATH); -@@ -4185,10 +4182,15 @@ static int switch_root(DBusConnection *bus, char **args) { - - /* If the passed init is actually the same as the - * systemd binary, then let's suppress it. */ -- if (files_same(root_init_path, root_systemd_path) > 0) -- init = NULL; -+ if (files_same(root_init_path, root_systemd_path) > 0) { -+ free(init); -+ init = strdup(""); -+ } - } - -+ if (!init) -+ return log_oom(); -+ - log_debug("Switching root - root: %s; init: %s", root, strna(init)); - - return bus_method_call_with_reply( diff --git a/SOURCES/0284-systemd-detect-virt-fix-detect-s390-virtualization.patch b/SOURCES/0284-systemd-detect-virt-fix-detect-s390-virtualization.patch deleted file mode 100644 index 4b96c27..0000000 --- a/SOURCES/0284-systemd-detect-virt-fix-detect-s390-virtualization.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 4c05a1381fbedaebe3832da433e4e10c682d6384 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Fri, 12 Sep 2014 15:23:50 +0200 -Subject: [PATCH] systemd-detect-virt: fix detect s390 virtualization - -rhel-only patch - -Related: #1139149 ---- - src/shared/virt.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/shared/virt.c b/src/shared/virt.c -index 5466d97..fca8515 100644 ---- a/src/shared/virt.c -+++ b/src/shared/virt.c -@@ -182,9 +182,9 @@ int detect_vm(const char **id) { - r = get_status_field("/proc/sysinfo", "VM00 Control Program:", &t); - if (r >= 0) { - if (streq(t, "z/VM")) -- _id = "zvm"; -+ *id = "zvm"; - else -- _id = "kvm"; -+ *id = "kvm"; - - return 1; - } diff --git a/SOURCES/0285-exec-Add-SELinuxContext-configuration-item.patch b/SOURCES/0285-exec-Add-SELinuxContext-configuration-item.patch deleted file mode 100644 index d98ae1d..0000000 --- a/SOURCES/0285-exec-Add-SELinuxContext-configuration-item.patch +++ /dev/null @@ -1,180 +0,0 @@ -From d0a2b8832732d297321fddcad56872511ff212f2 Mon Sep 17 00:00:00 2001 -From: Michael Scherer -Date: Thu, 6 Feb 2014 10:05:16 +0100 -Subject: [PATCH] exec: Add SELinuxContext configuration item -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This permit to let system administrators decide of the domain of a service. -This can be used with templated units to have each service in a différent -domain ( for example, a per customer database, using MLS or anything ), -or can be used to force a non selinux enabled system (jvm, erlang, etc) -to start in a different domain for each service. - -Conflicts: - src/core/dbus-execute.c - src/core/execute.c - src/core/execute.h - src/shared/exit-status.c - src/shared/exit-status.h - -(cherry picked from commit 7b52a628f8b43ba521c302a7f32bccf9d0dc8bfd) - -Related: #1113790 ---- - man/systemd.exec.xml | 11 +++++++++++ - src/core/dbus-execute.c | 1 + - src/core/execute.c | 27 +++++++++++++++++++++++++++ - src/core/execute.h | 2 ++ - src/core/load-fragment-gperf.gperf.m4 | 3 ++- - src/shared/exit-status.c | 3 +++ - src/shared/exit-status.h | 1 + - 7 files changed, 47 insertions(+), 1 deletion(-) - -diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml -index 612b4d2..a68cfa7 100644 ---- a/man/systemd.exec.xml -+++ b/man/systemd.exec.xml -@@ -919,6 +919,17 @@ - - - -+ SELinuxContext= -+ -+ Set the SELinux context of the -+ executed process. If set, this will override the -+ automated domain transition. However, the policy -+ still need to autorize the transition. See -+ setexeccon3 -+ for details. -+ -+ -+ - IgnoreSIGPIPE= - - Takes a boolean -diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c -index 2402e8c..97d75fa 100644 ---- a/src/core/dbus-execute.c -+++ b/src/core/dbus-execute.c -@@ -429,6 +429,7 @@ const BusProperty bus_exec_context_properties[] = { - { "PrivateNetwork", bus_property_append_bool, "b", offsetof(ExecContext, private_network) }, - { "SameProcessGroup", bus_property_append_bool, "b", offsetof(ExecContext, same_pgrp) }, - { "UtmpIdentifier", bus_property_append_string, "s", offsetof(ExecContext, utmp_id), true }, -+ { "SELinuxContext", bus_property_append_string, "s", offsetof(ExecContext, selinux_context), true }, - { "IgnoreSIGPIPE", bus_property_append_bool, "b", offsetof(ExecContext, ignore_sigpipe) }, - { "NoNewPrivileges", bus_property_append_bool, "b", offsetof(ExecContext, no_new_privileges) }, - { "SystemCallFilter", bus_execute_append_syscall_filter, "au", 0 }, -diff --git a/src/core/execute.c b/src/core/execute.c -index 981b9e4..cf9d24e 100644 ---- a/src/core/execute.c -+++ b/src/core/execute.c -@@ -46,6 +46,10 @@ - #include - #endif - -+#ifdef HAVE_SELINUX -+#include -+#endif -+ - #include "execute.h" - #include "strv.h" - #include "macro.h" -@@ -1467,6 +1471,20 @@ int exec_spawn(ExecCommand *command, - goto fail_child; - } - } -+#ifdef HAVE_SELINUX -+ if (context->selinux_context) { -+ err = security_check_context(context->selinux_context); -+ if (err < 0) { -+ r = EXIT_SELINUX_CONTEXT; -+ goto fail_child; -+ } -+ err = setexeccon(context->selinux_context); -+ if (err < 0) { -+ r = EXIT_SELINUX_CONTEXT; -+ goto fail_child; -+ } -+ } -+#endif - } - - our_env = new0(char*, 7); -@@ -1696,6 +1714,9 @@ void exec_context_done(ExecContext *c, bool reloading_or_reexecuting) { - free(c->utmp_id); - c->utmp_id = NULL; - -+ free(c->selinux_context); -+ c->selinux_context = NULL; -+ - free(c->syscall_filter); - c->syscall_filter = NULL; - -@@ -2067,6 +2088,12 @@ void exec_context_dump(ExecContext *c, FILE* f, const char *prefix) { - fprintf(f, - "%sUtmpIdentifier: %s\n", - prefix, c->utmp_id); -+ -+ if (c->selinux_context) -+ fprintf(f, -+ "%sSELinuxContext: %s\n", -+ prefix, c->selinux_context); -+ - } - - void exec_status_start(ExecStatus *s, pid_t pid) { -diff --git a/src/core/execute.h b/src/core/execute.h -index c1e9717..92ac8dd 100644 ---- a/src/core/execute.h -+++ b/src/core/execute.h -@@ -124,6 +124,8 @@ struct ExecContext { - - char *utmp_id; - -+ char *selinux_context; -+ - char **read_write_dirs, **read_only_dirs, **inaccessible_dirs; - unsigned long mount_flags; - -diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4 -index 0991cb9..935f04e 100644 ---- a/src/core/load-fragment-gperf.gperf.m4 -+++ b/src/core/load-fragment-gperf.gperf.m4 -@@ -75,7 +75,8 @@ $1.MountFlags, config_parse_exec_mount_flags, 0, - $1.TCPWrapName, config_parse_unit_string_printf, 0, offsetof($1, exec_context.tcpwrap_name) - $1.PAMName, config_parse_unit_string_printf, 0, offsetof($1, exec_context.pam_name) - $1.IgnoreSIGPIPE, config_parse_bool, 0, offsetof($1, exec_context.ignore_sigpipe) --$1.UtmpIdentifier, config_parse_unit_string_printf, 0, offsetof($1, exec_context.utmp_id)' -+$1.UtmpIdentifier, config_parse_unit_string_printf, 0, offsetof($1, exec_context.utmp_id) -+$1.SELinuxContext, config_parse_unit_string_printf, 0, offsetof($1, exec_context.selinux_context)' - )m4_dnl - m4_define(`KILL_CONTEXT_CONFIG_ITEMS', - `$1.SendSIGKILL, config_parse_bool, 0, offsetof($1, kill_context.send_sigkill) -diff --git a/src/shared/exit-status.c b/src/shared/exit-status.c -index f15fdba..676291b 100644 ---- a/src/shared/exit-status.c -+++ b/src/shared/exit-status.c -@@ -131,6 +131,9 @@ const char* exit_status_to_string(ExitStatus status, ExitStatusLevel level) { - case EXIT_SECCOMP: - return "SECCOMP"; - -+ case EXIT_SELINUX_CONTEXT: -+ return "SELINUX_CONTEXT"; -+ - case EXIT_CHOWN: - return "CHOWN"; - -diff --git a/src/shared/exit-status.h b/src/shared/exit-status.h -index 52dd3d0..798f1e1 100644 ---- a/src/shared/exit-status.h -+++ b/src/shared/exit-status.h -@@ -68,6 +68,7 @@ typedef enum ExitStatus { - EXIT_NAMESPACE, - EXIT_NO_NEW_PRIVILEGES, - EXIT_SECCOMP, -+ EXIT_SELINUX_CONTEXT, - EXIT_CHOWN - } ExitStatus; - diff --git a/SOURCES/0286-exec-Ignore-the-setting-SELinuxContext-if-selinux-is.patch b/SOURCES/0286-exec-Ignore-the-setting-SELinuxContext-if-selinux-is.patch deleted file mode 100644 index 53183d4..0000000 --- a/SOURCES/0286-exec-Ignore-the-setting-SELinuxContext-if-selinux-is.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 602f5a2c2a7ed23ebd61a728f6e16f63024e3c1f Mon Sep 17 00:00:00 2001 -From: Michael Scherer -Date: Thu, 6 Feb 2014 10:05:17 +0100 -Subject: [PATCH] exec: Ignore the setting SELinuxContext if selinux is not - enabled - -(cherry picked from commit 5c56a259e07661a66e806cc2fbc71de96a75f78e) - -Related: #1113790 ---- - src/core/execute.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/core/execute.c b/src/core/execute.c -index cf9d24e..cb6f146 100644 ---- a/src/core/execute.c -+++ b/src/core/execute.c -@@ -1472,7 +1472,7 @@ int exec_spawn(ExecCommand *command, - } - } - #ifdef HAVE_SELINUX -- if (context->selinux_context) { -+ if (context->selinux_context && use_selinux()) { - err = security_check_context(context->selinux_context); - if (err < 0) { - r = EXIT_SELINUX_CONTEXT; diff --git a/SOURCES/0287-exec-Add-support-for-ignoring-errors-on-SELinuxConte.patch b/SOURCES/0287-exec-Add-support-for-ignoring-errors-on-SELinuxConte.patch deleted file mode 100644 index 24e2e9a..0000000 --- a/SOURCES/0287-exec-Add-support-for-ignoring-errors-on-SELinuxConte.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 5c2592bf519dc7b2b28cde77f5f35422ec7a9320 Mon Sep 17 00:00:00 2001 -From: Michael Scherer -Date: Thu, 6 Feb 2014 10:05:18 +0100 -Subject: [PATCH] exec: Add support for ignoring errors on SELinuxContext by - prefixing it with -, like for others settings. - -Also remove call to security_check_context, as this doesn't serve anything, since -setexeccon will fail anyway. - -(cherry picked from commit 0d3f7bb3a5bc6d5c0712f88a080fed388981bca3) - -Related: #1113790 ---- - man/systemd.exec.xml | 4 +++- - src/core/execute.c | 20 +++++++++++++------- - 2 files changed, 16 insertions(+), 8 deletions(-) - -diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml -index a68cfa7..7608489 100644 ---- a/man/systemd.exec.xml -+++ b/man/systemd.exec.xml -@@ -924,7 +924,9 @@ - Set the SELinux context of the - executed process. If set, this will override the - automated domain transition. However, the policy -- still need to autorize the transition. See -+ still need to autorize the transition. This directive -+ is ignored if SELinux is disabled. If prefixed by -, -+ all errors will be ignored. See - setexeccon3 - for details. - -diff --git a/src/core/execute.c b/src/core/execute.c -index cb6f146..9fc5090 100644 ---- a/src/core/execute.c -+++ b/src/core/execute.c -@@ -72,6 +72,7 @@ - #include "fileio.h" - #include "unit.h" - #include "async.h" -+#include "selinux-util.h" - - #define IDLE_TIMEOUT_USEC (5*USEC_PER_SEC) - #define IDLE_TIMEOUT2_USEC (1*USEC_PER_SEC) -@@ -1473,13 +1474,18 @@ int exec_spawn(ExecCommand *command, - } - #ifdef HAVE_SELINUX - if (context->selinux_context && use_selinux()) { -- err = security_check_context(context->selinux_context); -- if (err < 0) { -- r = EXIT_SELINUX_CONTEXT; -- goto fail_child; -- } -- err = setexeccon(context->selinux_context); -- if (err < 0) { -+ bool ignore; -+ char* c; -+ -+ c = context->selinux_context; -+ if (c[0] == '-') { -+ c++; -+ ignore = true; -+ } else -+ ignore = false; -+ -+ err = setexeccon(c); -+ if (err < 0 && !ignore) { - r = EXIT_SELINUX_CONTEXT; - goto fail_child; - } diff --git a/SOURCES/0288-core-store-and-expose-SELinuxContext-field-normalize.patch b/SOURCES/0288-core-store-and-expose-SELinuxContext-field-normalize.patch deleted file mode 100644 index 3bf7ac7..0000000 --- a/SOURCES/0288-core-store-and-expose-SELinuxContext-field-normalize.patch +++ /dev/null @@ -1,199 +0,0 @@ -From f71db1f834f639a16a38e7314ba7ca0dd0d060d8 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Mon, 17 Feb 2014 16:52:52 +0100 -Subject: [PATCH] core: store and expose SELinuxContext field normalized as - bool + string - -Conflicts: - src/core/dbus-execute.c - src/core/execute.c - src/core/load-fragment.h - -(cherry picked from commit 5f8640fb628cb034981e02d741fd9ddf26fdf38d) - -Related: #1113790 ---- - src/core/dbus-execute.c | 26 ++++++++++++++++++- - src/core/execute.c | 18 +++---------- - src/core/execute.h | 1 + - src/core/load-fragment-gperf.gperf.m4 | 2 +- - src/core/load-fragment.c | 48 +++++++++++++++++++++++++++++++++++ - src/core/load-fragment.h | 1 + - 6 files changed, 80 insertions(+), 16 deletions(-) - -diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c -index 97d75fa..8162f1c 100644 ---- a/src/core/dbus-execute.c -+++ b/src/core/dbus-execute.c -@@ -372,6 +372,30 @@ static int bus_execute_append_syscall_filter(DBusMessageIter *i, const char *pro - return 0; - } - -+static int bus_execute_append_selinux_context(DBusMessageIter *i, const char *property, void *data) { -+ ExecContext *c = data; -+ dbus_bool_t selinux_context_ignore; -+ const char *selinux_context = NULL; -+ -+ assert(i); -+ assert(property); -+ assert(c); -+ -+ selinux_context = c->selinux_context; -+ if (!selinux_context) -+ selinux_context = ""; -+ -+ selinux_context_ignore = c->selinux_context_ignore; -+ -+ if (!dbus_message_iter_append_basic(i, DBUS_TYPE_BOOLEAN, &selinux_context_ignore)) -+ return -ENOMEM; -+ -+ if (!dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &selinux_context)) -+ return -ENOMEM; -+ -+ return 0; -+} -+ - const BusProperty bus_exec_context_properties[] = { - { "Environment", bus_property_append_strv, "as", offsetof(ExecContext, environment), true }, - { "EnvironmentFiles", bus_execute_append_env_files, "a(sb)", offsetof(ExecContext, environment_files), true }, -@@ -429,7 +453,7 @@ const BusProperty bus_exec_context_properties[] = { - { "PrivateNetwork", bus_property_append_bool, "b", offsetof(ExecContext, private_network) }, - { "SameProcessGroup", bus_property_append_bool, "b", offsetof(ExecContext, same_pgrp) }, - { "UtmpIdentifier", bus_property_append_string, "s", offsetof(ExecContext, utmp_id), true }, -- { "SELinuxContext", bus_property_append_string, "s", offsetof(ExecContext, selinux_context), true }, -+ { "SELinuxContext", bus_execute_append_selinux_context, "(bs)", 0 }, - { "IgnoreSIGPIPE", bus_property_append_bool, "b", offsetof(ExecContext, ignore_sigpipe) }, - { "NoNewPrivileges", bus_property_append_bool, "b", offsetof(ExecContext, no_new_privileges) }, - { "SystemCallFilter", bus_execute_append_syscall_filter, "au", 0 }, -diff --git a/src/core/execute.c b/src/core/execute.c -index 9fc5090..a20301d 100644 ---- a/src/core/execute.c -+++ b/src/core/execute.c -@@ -1474,18 +1474,8 @@ int exec_spawn(ExecCommand *command, - } - #ifdef HAVE_SELINUX - if (context->selinux_context && use_selinux()) { -- bool ignore; -- char* c; -- -- c = context->selinux_context; -- if (c[0] == '-') { -- c++; -- ignore = true; -- } else -- ignore = false; -- -- err = setexeccon(c); -- if (err < 0 && !ignore) { -+ err = setexeccon(context->selinux_context); -+ if (err < 0 && !context->selinux_context_ignore) { - r = EXIT_SELINUX_CONTEXT; - goto fail_child; - } -@@ -2097,8 +2087,8 @@ void exec_context_dump(ExecContext *c, FILE* f, const char *prefix) { - - if (c->selinux_context) - fprintf(f, -- "%sSELinuxContext: %s\n", -- prefix, c->selinux_context); -+ "%sSELinuxContext: %s%s\n", -+ prefix, c->selinux_context_ignore ? "-" : "", c->selinux_context); - - } - -diff --git a/src/core/execute.h b/src/core/execute.h -index 92ac8dd..2452126 100644 ---- a/src/core/execute.h -+++ b/src/core/execute.h -@@ -124,6 +124,7 @@ struct ExecContext { - - char *utmp_id; - -+ bool selinux_context_ignore; - char *selinux_context; - - char **read_write_dirs, **read_only_dirs, **inaccessible_dirs; -diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4 -index 935f04e..759fbd8 100644 ---- a/src/core/load-fragment-gperf.gperf.m4 -+++ b/src/core/load-fragment-gperf.gperf.m4 -@@ -76,7 +76,7 @@ $1.TCPWrapName, config_parse_unit_string_printf, 0, - $1.PAMName, config_parse_unit_string_printf, 0, offsetof($1, exec_context.pam_name) - $1.IgnoreSIGPIPE, config_parse_bool, 0, offsetof($1, exec_context.ignore_sigpipe) - $1.UtmpIdentifier, config_parse_unit_string_printf, 0, offsetof($1, exec_context.utmp_id) --$1.SELinuxContext, config_parse_unit_string_printf, 0, offsetof($1, exec_context.selinux_context)' -+$1.SELinuxContext, config_parse_exec_selinux_context, 0, offsetof($1, exec_context)' - )m4_dnl - m4_define(`KILL_CONTEXT_CONFIG_ITEMS', - `$1.SendSIGKILL, config_parse_bool, 0, offsetof($1, kill_context.send_sigkill) -diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c -index f01843d..8e6e428 100644 ---- a/src/core/load-fragment.c -+++ b/src/core/load-fragment.c -@@ -1139,6 +1139,54 @@ int config_parse_exec_mount_flags(const char *unit, - return 0; - } - -+int config_parse_exec_selinux_context( -+ const char *unit, -+ const char *filename, -+ unsigned line, -+ const char *section, -+ const char *lvalue, -+ int ltype, -+ const char *rvalue, -+ void *data, -+ void *userdata) { -+ -+ ExecContext *c = data; -+ Unit *u = userdata; -+ bool ignore; -+ char *k; -+ int r; -+ -+ assert(filename); -+ assert(lvalue); -+ assert(rvalue); -+ assert(data); -+ -+ if (isempty(rvalue)) { -+ free(c->selinux_context); -+ c->selinux_context = NULL; -+ c->selinux_context_ignore = false; -+ return 0; -+ } -+ -+ if (rvalue[0] == '-') { -+ ignore = true; -+ rvalue++; -+ } else -+ ignore = false; -+ -+ r = unit_name_printf(u, rvalue, &k); -+ if (r < 0) { -+ log_syntax(unit, LOG_ERR, filename, line, -r, "Failed to resolve specifiers, ignoring: %s", strerror(-r)); -+ return 0; -+ } -+ -+ free(c->selinux_context); -+ c->selinux_context = k; -+ c->selinux_context_ignore = ignore; -+ -+ return 0; -+} -+ - int config_parse_timer(const char *unit, - const char *filename, - unsigned line, -diff --git a/src/core/load-fragment.h b/src/core/load-fragment.h -index 90e5e3a..de48436 100644 ---- a/src/core/load-fragment.h -+++ b/src/core/load-fragment.h -@@ -83,6 +83,7 @@ int config_parse_device_allow(const char *unit, const char *filename, unsigned l - int config_parse_blockio_weight(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); - int config_parse_blockio_device_weight(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); - int config_parse_blockio_bandwidth(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); -+int config_parse_exec_selinux_context(const char *unit, const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata); - - /* gperf prototypes */ - const struct ConfigPerfItem* load_fragment_gperf_lookup(const char *key, unsigned length); diff --git a/SOURCES/0289-socket-introduce-SELinuxContextFromNet-option.patch b/SOURCES/0289-socket-introduce-SELinuxContextFromNet-option.patch deleted file mode 100644 index d1a60da..0000000 --- a/SOURCES/0289-socket-introduce-SELinuxContextFromNet-option.patch +++ /dev/null @@ -1,431 +0,0 @@ -From 98bb285648a68c89820fe7415737ee97da74ec69 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Thu, 24 Jul 2014 10:40:28 +0200 -Subject: [PATCH] socket: introduce SELinuxContextFromNet option - -This makes possible to spawn service instances triggered by socket with -MLS/MCS SELinux labels which are created based on information provided by -connected peer. - -Implementation of label_get_child_mls_label derived from xinetd. - -Reviewed-by: Paul Moore - -Resolves: #1113790 ---- - man/systemd.socket.xml | 26 ++++++++ - src/core/execute.c | 30 +++++++-- - src/core/execute.h | 1 + - src/core/load-fragment-gperf.gperf.m4 | 1 + - src/core/mount.c | 1 + - src/core/service.c | 4 +- - src/core/service.h | 3 +- - src/core/socket.c | 16 +++-- - src/core/socket.h | 2 + - src/core/swap.c | 1 + - src/shared/label.c | 113 ++++++++++++++++++++++++++++++++++ - src/shared/label.h | 2 + - 12 files changed, 189 insertions(+), 11 deletions(-) - -diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml -index d146b3b..75ba15f 100644 ---- a/man/systemd.socket.xml -+++ b/man/systemd.socket.xml -@@ -585,6 +585,32 @@ - - - -+ SELinuxContextFromNet= -+ Takes a boolean -+ argument. When true systemd will attempt -+ to figure out the SELinux label used -+ for the instantiated service from the -+ information handed by the peer over the -+ network. Note that only the security -+ level is used from the information -+ provided by the peer. Other parts of -+ the resulting SELinux context originate -+ from either the target binary that is -+ effectively triggered by socket unit -+ are taken from the value of the -+ SELinuxContext= -+ option.This configuration option only -+ affects sockets with -+ Accept= mode set to -+ true. Also note that -+ this option is useful only when -+ MLS/MCS SELinux policy is -+ deployed. Defaults to -+ false. -+ -+ -+ -+ - PipeSize= - Takes an integer - value. Controls the pipe buffer size -diff --git a/src/core/execute.c b/src/core/execute.c -index a20301d..0894156 100644 ---- a/src/core/execute.c -+++ b/src/core/execute.c -@@ -73,6 +73,7 @@ - #include "unit.h" - #include "async.h" - #include "selinux-util.h" -+#include "label.h" - - #define IDLE_TIMEOUT_USEC (5*USEC_PER_SEC) - #define IDLE_TIMEOUT2_USEC (1*USEC_PER_SEC) -@@ -1038,6 +1039,7 @@ int exec_spawn(ExecCommand *command, - bool apply_chroot, - bool apply_tty_stdin, - bool confirm_spawn, -+ bool selinux_context_net, - CGroupControllerMask cgroup_supported, - const char *cgroup_path, - const char *unit_id, -@@ -1473,11 +1475,29 @@ int exec_spawn(ExecCommand *command, - } - } - #ifdef HAVE_SELINUX -- if (context->selinux_context && use_selinux()) { -- err = setexeccon(context->selinux_context); -- if (err < 0 && !context->selinux_context_ignore) { -- r = EXIT_SELINUX_CONTEXT; -- goto fail_child; -+ if (use_selinux()) { -+ if (context->selinux_context) { -+ err = setexeccon(context->selinux_context); -+ if (err < 0 && !context->selinux_context_ignore) { -+ r = EXIT_SELINUX_CONTEXT; -+ goto fail_child; -+ } -+ } -+ -+ if (selinux_context_net && socket_fd >= 0) { -+ _cleanup_free_ char *label = NULL; -+ -+ err = label_get_child_mls_label(socket_fd, command->path, &label); -+ if (err < 0) { -+ r = EXIT_SELINUX_CONTEXT; -+ goto fail_child; -+ } -+ -+ err = setexeccon(label); -+ if (err < 0) { -+ r = EXIT_SELINUX_CONTEXT; -+ goto fail_child; -+ } - } - } - #endif -diff --git a/src/core/execute.h b/src/core/execute.h -index 2452126..5055890 100644 ---- a/src/core/execute.h -+++ b/src/core/execute.h -@@ -174,6 +174,7 @@ int exec_spawn(ExecCommand *command, - bool apply_chroot, - bool apply_tty_stdin, - bool confirm_spawn, -+ bool selinux_context_net, - CGroupControllerMask cgroup_mask, - const char *cgroup_path, - const char *unit_id, -diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4 -index 759fbd8..ee7cd5d 100644 ---- a/src/core/load-fragment-gperf.gperf.m4 -+++ b/src/core/load-fragment-gperf.gperf.m4 -@@ -221,6 +221,7 @@ Socket.Service, config_parse_socket_service, 0, - Socket.SmackLabel, config_parse_string, 0, offsetof(Socket, smack) - Socket.SmackLabelIPIn, config_parse_string, 0, offsetof(Socket, smack_ip_in) - Socket.SmackLabelIPOut, config_parse_string, 0, offsetof(Socket, smack_ip_out) -+Socket.SELinuxContextFromNet, config_parse_bool, 0, offsetof(Socket, selinux_context_from_net), - EXEC_CONTEXT_CONFIG_ITEMS(Socket)m4_dnl - CGROUP_CONTEXT_CONFIG_ITEMS(Socket)m4_dnl - KILL_CONTEXT_CONFIG_ITEMS(Socket)m4_dnl -diff --git a/src/core/mount.c b/src/core/mount.c -index 3672338..bbceb92 100644 ---- a/src/core/mount.c -+++ b/src/core/mount.c -@@ -791,6 +791,7 @@ static int mount_spawn(Mount *m, ExecCommand *c, pid_t *_pid) { - true, - true, - UNIT(m)->manager->confirm_spawn, -+ false, - UNIT(m)->manager->cgroup_supported, - UNIT(m)->cgroup_path, - UNIT(m)->id, -diff --git a/src/core/service.c b/src/core/service.c -index 4366e1b..7ef2b3a 100644 ---- a/src/core/service.c -+++ b/src/core/service.c -@@ -1867,6 +1867,7 @@ static int service_spawn( - apply_chroot, - apply_tty_stdin, - UNIT(s)->manager->confirm_spawn, -+ false, - UNIT(s)->manager->cgroup_supported, - path, - UNIT(s)->id, -@@ -3806,7 +3807,7 @@ static void service_bus_query_pid_done( - } - } - --int service_set_socket_fd(Service *s, int fd, Socket *sock) { -+int service_set_socket_fd(Service *s, int fd, Socket *sock, bool selinux_context_net) { - - assert(s); - assert(fd >= 0); -@@ -3825,6 +3826,7 @@ int service_set_socket_fd(Service *s, int fd, Socket *sock) { - return -EAGAIN; - - s->socket_fd = fd; -+ s->socket_fd_selinux_context_net = selinux_context_net; - s->got_socket_fd = true; - - unit_ref_set(&s->accept_socket, UNIT(sock)); -diff --git a/src/core/service.h b/src/core/service.h -index fa4ef2b..24e6b4e 100644 ---- a/src/core/service.h -+++ b/src/core/service.h -@@ -156,6 +156,7 @@ struct Service { - - pid_t main_pid, control_pid; - int socket_fd; -+ bool socket_fd_selinux_context_net; - - int fsck_passno; - -@@ -204,7 +205,7 @@ extern const UnitVTable service_vtable; - - struct Socket; - --int service_set_socket_fd(Service *s, int fd, struct Socket *socket); -+int service_set_socket_fd(Service *s, int fd, struct Socket *socket, bool selinux_context_net); - - const char* service_state_to_string(ServiceState i) _const_; - ServiceState service_state_from_string(const char *s) _pure_; -diff --git a/src/core/socket.c b/src/core/socket.c -index 32e0d35..35fc204 100644 ---- a/src/core/socket.c -+++ b/src/core/socket.c -@@ -431,7 +431,8 @@ static void socket_dump(Unit *u, FILE *f, const char *prefix) { - "%sBroadcast: %s\n" - "%sPassCredentials: %s\n" - "%sPassSecurity: %s\n" -- "%sTCPCongestion: %s\n", -+ "%sTCPCongestion: %s\n" -+ "%sSELinuxContextFromNet: %s\n", - prefix, socket_state_to_string(s->state), - prefix, socket_result_to_string(s->result), - prefix, socket_address_bind_ipv6_only_to_string(s->bind_ipv6_only), -@@ -444,7 +445,8 @@ static void socket_dump(Unit *u, FILE *f, const char *prefix) { - prefix, yes_no(s->broadcast), - prefix, yes_no(s->pass_cred), - prefix, yes_no(s->pass_sec), -- prefix, strna(s->tcp_congestion)); -+ prefix, strna(s->tcp_congestion), -+ prefix, yes_no(s->selinux_context_from_net)); - - if (s->control_pid > 0) - fprintf(f, -@@ -994,7 +996,12 @@ static int socket_open_fds(Socket *s) { - - if (p->type == SOCKET_SOCKET) { - -- if (!know_label) { -+ if (!know_label && s->selinux_context_from_net) { -+ r = label_get_our_label(&label); -+ if (r < 0) -+ return r; -+ know_label = true; -+ } else if (!know_label) { - - if ((r = socket_instantiate_service(s)) < 0) - return r; -@@ -1227,6 +1234,7 @@ static int socket_spawn(Socket *s, ExecCommand *c, pid_t *_pid) { - true, - true, - UNIT(s)->manager->confirm_spawn, -+ s->selinux_context_from_net, - UNIT(s)->manager->cgroup_supported, - UNIT(s)->cgroup_path, - UNIT(s)->id, -@@ -1666,7 +1674,7 @@ static void socket_enter_running(Socket *s, int cfd) { - unit_choose_id(UNIT(service), name); - free(name); - -- r = service_set_socket_fd(service, cfd, s); -+ r = service_set_socket_fd(service, cfd, s, s->selinux_context_from_net); - if (r < 0) - goto fail; - -diff --git a/src/core/socket.h b/src/core/socket.h -index 6a24883..ddddf4c 100644 ---- a/src/core/socket.h -+++ b/src/core/socket.h -@@ -154,6 +154,8 @@ struct Socket { - char *smack_ip_in; - char *smack_ip_out; - -+ bool selinux_context_from_net; -+ - char *user; - char *group; - }; -diff --git a/src/core/swap.c b/src/core/swap.c -index 727bb95..b72034f 100644 ---- a/src/core/swap.c -+++ b/src/core/swap.c -@@ -589,6 +589,7 @@ static int swap_spawn(Swap *s, ExecCommand *c, pid_t *_pid) { - true, - true, - UNIT(s)->manager->confirm_spawn, -+ false, - UNIT(s)->manager->cgroup_supported, - UNIT(s)->cgroup_path, - UNIT(s)->id, -diff --git a/src/shared/label.c b/src/shared/label.c -index fde39f2..4dab93e 100644 ---- a/src/shared/label.c -+++ b/src/shared/label.c -@@ -38,6 +38,13 @@ - #include "selinux-util.h" - #include - #include -+#include -+ -+define_trivial_cleanup_func(security_context_t, freecon); -+define_trivial_cleanup_func(context_t, context_free); -+ -+#define _cleanup_security_context_free_ _cleanup_(freeconp) -+#define _cleanup_context_free_ _cleanup_(context_freep) - - static struct selabel_handle *label_hnd = NULL; - -@@ -180,6 +187,112 @@ fail: - return r; - } - -+int label_get_our_label(char **label) { -+ int r = -EOPNOTSUPP; -+ char *l = NULL; -+ -+#ifdef HAVE_SELINUX -+ r = getcon(&l); -+ if (r < 0) -+ return r; -+ -+ *label = l; -+#endif -+ -+ return r; -+} -+ -+int label_get_child_mls_label(int socket_fd, const char *exe, char **label) { -+ int r = -EOPNOTSUPP; -+ -+#ifdef HAVE_SELINUX -+ -+ _cleanup_security_context_free_ security_context_t mycon = NULL, peercon = NULL, fcon = NULL, ret = NULL; -+ _cleanup_context_free_ context_t pcon = NULL, bcon = NULL; -+ security_class_t sclass; -+ -+ const char *range = NULL; -+ -+ assert(socket_fd >= 0); -+ assert(exe); -+ assert(label); -+ -+ r = getcon(&mycon); -+ if (r < 0) { -+ r = -EINVAL; -+ goto out; -+ } -+ -+ r = getpeercon(socket_fd, &peercon); -+ if (r < 0) { -+ r = -EINVAL; -+ goto out; -+ } -+ -+ r = getexeccon(&fcon); -+ if (r < 0) { -+ r = -EINVAL; -+ goto out; -+ } -+ -+ if (!fcon) { -+ /* If there is no context set for next exec let's use context -+ of target executable */ -+ r = getfilecon(exe, &fcon); -+ if (r < 0) { -+ r = -errno; -+ goto out; -+ } -+ } -+ -+ bcon = context_new(mycon); -+ if (!bcon) { -+ r = -ENOMEM; -+ goto out; -+ } -+ -+ pcon = context_new(peercon); -+ if (!pcon) { -+ r = -ENOMEM; -+ goto out; -+ } -+ -+ range = context_range_get(pcon); -+ if (!range) { -+ r = -errno; -+ goto out; -+ } -+ -+ r = context_range_set(bcon, range); -+ if (r) { -+ r = -errno; -+ goto out; -+ } -+ -+ freecon(mycon); -+ mycon = context_str(bcon); -+ if (!mycon) { -+ r = -errno; -+ goto out; -+ } -+ -+ sclass = string_to_security_class("process"); -+ r = security_compute_create(mycon, fcon, sclass, &ret); -+ if (r < 0) { -+ r = -EINVAL; -+ goto out; -+ } -+ -+ *label = ret; -+ r = 0; -+ -+out: -+ if (r < 0 && security_getenforce() == 1) -+ return r; -+#endif -+ return r; -+} -+ - int label_context_set(const char *path, mode_t mode) { - int r = 0; - -diff --git a/src/shared/label.h b/src/shared/label.h -index 09e15e3..d8a281c 100644 ---- a/src/shared/label.h -+++ b/src/shared/label.h -@@ -39,6 +39,8 @@ void label_context_clear(void); - void label_free(const char *label); - - int label_get_create_label_from_exe(const char *exe, char **label); -+int label_get_our_label(char **label); -+int label_get_child_mls_label(int socket_fd, const char *exec, char **label); - - int label_mkdir(const char *path, mode_t mode); - diff --git a/SOURCES/0290-sysctl-make-prefix-allow-all-kinds-of-sysctl-paths.patch b/SOURCES/0290-sysctl-make-prefix-allow-all-kinds-of-sysctl-paths.patch deleted file mode 100644 index 943dccf..0000000 --- a/SOURCES/0290-sysctl-make-prefix-allow-all-kinds-of-sysctl-paths.patch +++ /dev/null @@ -1,101 +0,0 @@ -From 5024f01fec5e6c8fd05ca5451176878084e3f18f Mon Sep 17 00:00:00 2001 -From: David Herrmann -Date: Wed, 17 Sep 2014 09:06:49 +0200 -Subject: [PATCH] sysctl: make --prefix allow all kinds of sysctl paths - -Currently, we save arguments passed as --prefix directly and compare them -later to absolute sysctl file-system paths. That is, you are required to -specify arguments to --prefix with leading /proc/sys/. This is kinda -uselesss. Furthermore, we replace dots by slashes in the name, which makes -it impossible to match on specific sysfs paths that have dots in their -name (like netdev names). The intention of this argument is clear, but it -never worked as expected. - -This patch modifies --prefix to accept any kind of sysctl paths. It -supports paths prefixed with /proc/sys for compatibility (but drops the -erroneous dot->slash conversion), but instead applies normalize_sysctl() -which turns any name or path into a proper path. It then appends -/proc/sys/ so we can properly use it in matches. - -Thanks to Jan Synacek for catching this! - -Conflicts: - src/sysctl/sysctl.c - -(cherry picked from commit 0e1f579227b08832437a7ac2227c7e4007a89d23) - -Resolves: #1138591 ---- - src/sysctl/sysctl.c | 40 +++++++++++++++++++++++++++++----------- - 1 file changed, 29 insertions(+), 11 deletions(-) - -diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c -index a9d4d53..d6f48dd 100644 ---- a/src/sysctl/sysctl.c -+++ b/src/sysctl/sysctl.c -@@ -51,9 +51,23 @@ static const char conf_file_dirs[] = - static char *normalize_sysctl(char *s) { - char *n; - -- for (n = s; *n; n++) -+ n = strpbrk(s, "/."); -+ /* If the first separator is a slash, the path is -+ * assumed to be normalized and slashes remain slashes -+ * and dots remains dots. */ -+ if (!n || *n == '/') -+ return s; -+ -+ /* Otherwise, dots become slashes and slashes become -+ * dots. Fun. */ -+ while (n) { - if (*n == '.') - *n = '/'; -+ else -+ *n = '.'; -+ -+ n = strpbrk(n + 1, "/."); -+ } - - return s; - } -@@ -205,7 +219,7 @@ static int help(void) { - printf("%s [OPTIONS...] [CONFIGURATION FILE...]\n\n" - "Applies kernel sysctl settings.\n\n" - " -h --help Show this help\n" -- " --prefix=PATH Only apply rules that apply to paths with the specified prefix\n", -+ " --prefix=PATH Only apply rules with the specified prefix\n", - program_invocation_short_name); - - return 0; -@@ -238,18 +252,22 @@ static int parse_argv(int argc, char *argv[]) { - - case ARG_PREFIX: { - char *p; -- char **l; - -- for (p = optarg; *p; p++) -- if (*p == '.') -- *p = '/'; -- -- l = strv_append(arg_prefixes, optarg); -- if (!l) -+ /* We used to require people to specify absolute paths -+ * in /proc/sys in the past. This is kinda useless, but -+ * we need to keep compatibility. We now support any -+ * sysctl name available. */ -+ normalize_sysctl(optarg); -+ if (startswith(optarg, "/proc/sys")) -+ p = strdup(optarg); -+ else -+ p = strappend("/proc/sys/", optarg); -+ -+ if (!p) - return log_oom(); - -- strv_free(arg_prefixes); -- arg_prefixes = l; -+ if (strv_push(&arg_prefixes, p) < 0) -+ return log_oom(); - - break; - } diff --git a/SOURCES/0291-core-make-sure-to-serialize-jobs-for-all-units.patch b/SOURCES/0291-core-make-sure-to-serialize-jobs-for-all-units.patch deleted file mode 100644 index b3b713e..0000000 --- a/SOURCES/0291-core-make-sure-to-serialize-jobs-for-all-units.patch +++ /dev/null @@ -1,112 +0,0 @@ -From bbfce083901a7c7b0ca93297453796c2183a237d Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 16 May 2014 01:15:03 +0200 -Subject: [PATCH] core: make sure to serialize jobs for all units - -Previously we wouldn't serialize jobs for units that themselves have -nothing to serialize. - -http://lists.freedesktop.org/archives/systemd-devel/2014-May/019051.html - -Conflicts: - src/core/unit.c - -(cherry-picked from 9bdb98c59451ed090f8d35d470a54710f389ce71) - -Related: #1138546 ---- - src/core/manager.c | 3 --- - src/core/unit.c | 45 +++++++++++++++++++++------------------------ - 2 files changed, 21 insertions(+), 27 deletions(-) - -diff --git a/src/core/manager.c b/src/core/manager.c -index a2810b4..4ad26e1 100644 ---- a/src/core/manager.c -+++ b/src/core/manager.c -@@ -2169,9 +2169,6 @@ int manager_serialize(Manager *m, FILE *f, FDSet *fds, bool switching_root) { - if (u->id != t) - continue; - -- if (!unit_can_serialize(u)) -- continue; -- - /* Start marker */ - fputs(u->id, f); - fputc('\n', f); -diff --git a/src/core/unit.c b/src/core/unit.c -index 17792d1..855e135 100644 ---- a/src/core/unit.c -+++ b/src/core/unit.c -@@ -2296,24 +2296,10 @@ int unit_serialize(Unit *u, FILE *f, FDSet *fds, bool serialize_jobs) { - assert(f); - assert(fds); - -- if (!unit_can_serialize(u)) -- return 0; -- -- r = UNIT_VTABLE(u)->serialize(u, f, fds); -- if (r < 0) -- return r; -- -- -- if (serialize_jobs) { -- if (u->job) { -- fprintf(f, "job\n"); -- job_serialize(u->job, f, fds); -- } -- -- if (u->nop_job) { -- fprintf(f, "job\n"); -- job_serialize(u->nop_job, f, fds); -- } -+ if (unit_can_serialize(u)) { -+ r = UNIT_VTABLE(u)->serialize(u, f, fds); -+ if (r < 0) -+ return r; - } - - dual_timestamp_serialize(f, "inactive-exit-timestamp", &u->inactive_exit_timestamp); -@@ -2330,6 +2316,18 @@ int unit_serialize(Unit *u, FILE *f, FDSet *fds, bool serialize_jobs) { - if (u->cgroup_path) - unit_serialize_item(u, f, "cgroup", u->cgroup_path); - -+ if (serialize_jobs) { -+ if (u->job) { -+ fprintf(f, "job\n"); -+ job_serialize(u->job, f, fds); -+ } -+ -+ if (u->nop_job) { -+ fprintf(f, "job\n"); -+ job_serialize(u->nop_job, f, fds); -+ } -+ } -+ - /* End marker */ - fputc('\n', f); - return 0; -@@ -2369,9 +2367,6 @@ int unit_deserialize(Unit *u, FILE *f, FDSet *fds) { - assert(f); - assert(fds); - -- if (!unit_can_serialize(u)) -- return 0; -- - for (;;) { - char line[LINE_MAX], *l, *v; - size_t k; -@@ -2484,9 +2479,11 @@ int unit_deserialize(Unit *u, FILE *f, FDSet *fds) { - continue; - } - -- r = UNIT_VTABLE(u)->deserialize_item(u, l, v, fds); -- if (r < 0) -- return r; -+ if (unit_can_serialize(u)) { -+ r = UNIT_VTABLE(u)->deserialize_item(u, l, v, fds); -+ if (r < 0) -+ return r; -+ } - } - } - diff --git a/SOURCES/0292-man-mention-localectl-in-locale.conf.patch b/SOURCES/0292-man-mention-localectl-in-locale.conf.patch deleted file mode 100644 index 7ae99b0..0000000 --- a/SOURCES/0292-man-mention-localectl-in-locale.conf.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 6c3574cb20ee440a2293a64ef140dc0d073a93a5 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Thu, 18 Sep 2014 14:13:31 +0200 -Subject: [PATCH] man: mention localectl in locale.conf - -rhel-only (in other patch in upstream) - -Resolves: #1049286 ---- - man/locale.conf.xml | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/man/locale.conf.xml b/man/locale.conf.xml -index e970921..408f18f 100644 ---- a/man/locale.conf.xml -+++ b/man/locale.conf.xml -@@ -96,6 +96,10 @@ - configuration files might be checked for locale - configuration as well, however only as - fallback. -+ -+ localectl1 -+ may be used to alter the settings in this file during -+ runtime from the command line. - - - -@@ -142,6 +146,7 @@ LC_MESSAGES=en_US.UTF-8 - - systemd1, - locale7, -+ localectl1, - systemd-localed.service8 - - diff --git a/SOURCES/0293-rules-automatically-online-hot-added-CPUs.patch b/SOURCES/0293-rules-automatically-online-hot-added-CPUs.patch deleted file mode 100644 index 29beacc..0000000 --- a/SOURCES/0293-rules-automatically-online-hot-added-CPUs.patch +++ /dev/null @@ -1,37 +0,0 @@ -From fa5a7d49ecbe40e2e33f1d165a4522d9b4315531 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Mon, 22 Sep 2014 07:41:06 +0200 -Subject: [PATCH] rules: automatically online hot-added CPUs - -RHEL-only patch - -Resolves: #968811 ---- - Makefile.am | 3 ++- - rules/40-redhat.rules | 3 +++ - 2 files changed, 5 insertions(+), 1 deletion(-) - create mode 100644 rules/40-redhat.rules - -diff --git a/Makefile.am b/Makefile.am -index 30ab13c..54941c0 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -2220,7 +2220,8 @@ dist_udevrules_DATA += \ - rules/75-tty-description.rules \ - rules/78-sound-card.rules \ - rules/80-net-name-slot.rules \ -- rules/95-udev-late.rules -+ rules/95-udev-late.rules \ -+ rules/40-redhat.rules - - dist_udevhwdb_DATA = \ - hwdb/20-pci-vendor-model.hwdb \ -diff --git a/rules/40-redhat.rules b/rules/40-redhat.rules -new file mode 100644 -index 0000000..2b494e5 ---- /dev/null -+++ b/rules/40-redhat.rules -@@ -0,0 +1,3 @@ -+# do not edit this file, it will be overwritten on update -+ -+SUBSYSTEM=="cpu", ACTION=="add", TEST=="online", ATTR{online}=="0", ATTR{online}="1" diff --git a/SOURCES/0294-rules-add-rule-for-naming-Dell-iDRAC-USB-Virtual-NIC.patch b/SOURCES/0294-rules-add-rule-for-naming-Dell-iDRAC-USB-Virtual-NIC.patch deleted file mode 100644 index 5168276..0000000 --- a/SOURCES/0294-rules-add-rule-for-naming-Dell-iDRAC-USB-Virtual-NIC.patch +++ /dev/null @@ -1,41 +0,0 @@ -From eb8c33c65906ba721c6becb4053b8e0b56447aec Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Mon, 22 Sep 2014 07:53:52 +0200 -Subject: [PATCH] rules: add rule for naming Dell iDRAC USB Virtual NIC as - 'idrac' - -RHEL-only patch - -Resolves: #1054477 ---- - Makefile.am | 3 ++- - rules/73-idrac.rules | 6 ++++++ - 2 files changed, 8 insertions(+), 1 deletion(-) - create mode 100644 rules/73-idrac.rules - -diff --git a/Makefile.am b/Makefile.am -index 54941c0..d54a556 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -2221,7 +2221,8 @@ dist_udevrules_DATA += \ - rules/78-sound-card.rules \ - rules/80-net-name-slot.rules \ - rules/95-udev-late.rules \ -- rules/40-redhat.rules -+ rules/40-redhat.rules \ -+ rules/73-idrac.rules - - dist_udevhwdb_DATA = \ - hwdb/20-pci-vendor-model.hwdb \ -diff --git a/rules/73-idrac.rules b/rules/73-idrac.rules -new file mode 100644 -index 0000000..d67fc42 ---- /dev/null -+++ b/rules/73-idrac.rules -@@ -0,0 +1,6 @@ -+# do not edit this file, it will be overwritten on update -+ -+# On Dell PowerEdge systems, the iDRAC7 and later support a USB Virtual NIC -+# with terminates in the iDRAC. Help identify this with 'idrac' -+ -+ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", ATTRS{idVendor}=="413c", ATTRS{idProduct}=="a102", NAME="idrac" diff --git a/SOURCES/0295-bash-completion-add-verb-set-property.patch b/SOURCES/0295-bash-completion-add-verb-set-property.patch deleted file mode 100644 index 1fbd4e9..0000000 --- a/SOURCES/0295-bash-completion-add-verb-set-property.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 233b0373a3d75e277ad5a232a65567395da57f0e Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Tue, 23 Sep 2014 14:59:11 +0200 -Subject: [PATCH] bash-completion: add verb set-property - -Resolves: #1064487 ---- - shell-completion/bash/systemctl | 12 +++++++++++- - 1 file changed, 11 insertions(+), 1 deletion(-) - -diff --git a/shell-completion/bash/systemctl b/shell-completion/bash/systemctl -index 84149e3..efe8485 100644 ---- a/shell-completion/bash/systemctl -+++ b/shell-completion/bash/systemctl -@@ -25,7 +25,7 @@ __systemctl() { - __systemd_properties() { - local mode=$1 - { __systemctl -a $mode show; -- systemd --dump-configuration-items; } | -+ /usr/lib/systemd/systemd --dump-configuration-items; } | - while IFS='=' read -r key value; do - [[ $value ]] && echo "$key" - done -@@ -77,6 +77,8 @@ _systemctl () { - [ARG]='--host -H --kill-mode --kill-who --property -p --signal -s --type -t --state --root' - ) - -+ local -A PROPS='CPUAccounting= MemoryAccounting= BlockIOAccounting= MemoryLimit= CPUShares= BlockIOWeight= DevicePolicy= DeviceAllow= BlockIOReadBandwidth= BlockIOWriteBandwidth= BlockIODeviceWeight=' -+ - if __contains_word "--user" ${COMP_WORDS[*]}; then - mode=--user - else -@@ -136,6 +138,7 @@ _systemctl () { - [MASKED_UNITS]='unmask' - [JOBS]='cancel' - [SNAPSHOTS]='delete' -+ [PROPERTIES]='set-property' - [ENVS]='set-environment unset-environment' - [STANDALONE]='daemon-reexec daemon-reload default - emergency exit halt hibernate hybrid-sleep kexec list-jobs -@@ -220,6 +223,13 @@ _systemctl () { - elif __contains_word "$verb" ${VERBS[TARGETS]}; then - comps=$( __systemctl $mode list-unit-files --type target --full --all \ - | { while read -r a b; do echo " $a"; done; } ) -+ elif __contains_word "$verb" ${VERBS[PROPERTIES]}; then -+ if __contains_word "$prev" ${VERBS[PROPERTIES]}; then -+ comps=$( __get_active_units $mode ) -+ else -+ comps=$PROPS -+ compopt -o nospace -+ fi - fi - - COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) diff --git a/SOURCES/0296-man-update-journald-rate-limit-defaults.patch b/SOURCES/0296-man-update-journald-rate-limit-defaults.patch deleted file mode 100644 index 40d490d..0000000 --- a/SOURCES/0296-man-update-journald-rate-limit-defaults.patch +++ /dev/null @@ -1,29 +0,0 @@ -From e11d039c50d13ac638c2ef77285af3543805a2f2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Mantas=20Mikul=C4=97nas?= -Date: Wed, 30 Apr 2014 19:53:13 +0300 -Subject: [PATCH] man: update journald rate limit defaults - -This brings the man page back into sync with the actual code. - -(cherry picked from commit 8f18f550e7023948f199616fdfbb0f09711fd615) - -Resolves: #1145352 ---- - man/journald.conf.xml | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/man/journald.conf.xml b/man/journald.conf.xml -index b362c5d..87e13b2 100644 ---- a/man/journald.conf.xml -+++ b/man/journald.conf.xml -@@ -190,8 +190,8 @@ - limiting is applied per-service, so - that two services which log do not - interfere with each other's -- limits. Defaults to 200 messages in -- 10s. The time specification for -+ limits. Defaults to 1000 messages in -+ 30s. The time specification for - RateLimitInterval= - may be specified in the following - units: s, diff --git a/SOURCES/0297-core-don-t-try-to-connect-to-d-bus-after-switchroot.patch b/SOURCES/0297-core-don-t-try-to-connect-to-d-bus-after-switchroot.patch deleted file mode 100644 index d585e6b..0000000 --- a/SOURCES/0297-core-don-t-try-to-connect-to-d-bus-after-switchroot.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 376c59b17a8d90b623533f639c2045276d1009d7 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Wed, 24 Sep 2014 13:20:29 +0200 -Subject: [PATCH] core: don't try to connect to d-bus after switchroot - -rhel-only - -Resolves: #1083300 ---- - src/core/main.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/core/main.c b/src/core/main.c -index afd5f6f..d4bf8ba 100644 ---- a/src/core/main.c -+++ b/src/core/main.c -@@ -1543,7 +1543,7 @@ int main(int argc, char *argv[]) { - if (arg_running_as == SYSTEMD_SYSTEM) - bump_rlimit_nofile(&saved_rlimit_nofile); - -- r = manager_new(arg_running_as, !!serialization, &m); -+ r = manager_new(arg_running_as, !!serialization && !arg_switched_root, &m); - if (r < 0) { - log_error("Failed to allocate manager object: %s", strerror(-r)); - goto finish; diff --git a/SOURCES/0298-localed-log-locale-keymap-changes-in-detail.patch b/SOURCES/0298-localed-log-locale-keymap-changes-in-detail.patch deleted file mode 100644 index d5ed8ac..0000000 --- a/SOURCES/0298-localed-log-locale-keymap-changes-in-detail.patch +++ /dev/null @@ -1,244 +0,0 @@ -From d522b56345f2fe53a5ccac396c669d8f74088a6b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Wed, 3 Sep 2014 22:55:16 -0400 -Subject: [PATCH] localed: log locale/keymap changes in detail - -Converting X11 to legacy keymaps and back is a fucking mess. Let's -make it at least possible to request detailed logs of what is being -changed and why (LOG_DEBUG level). - -At LOG_INFO level, we would log the requested change of X11 or console -keymap, but not the resulting change after conversion to console or X11. -Make sure that every change of configuration on disk has a matching -line in the logs. - -Conflicts: - src/locale/localed.c - -(cherry picked from commit 502f961425f9dea1a85239766a3189695194da63) - -Related: #1109145 ---- - src/locale/localed.c | 84 ++++++++++++++++++++++++++++++++++++++-------------- - 1 file changed, 61 insertions(+), 23 deletions(-) - -diff --git a/src/locale/localed.c b/src/locale/localed.c -index a93b309..c22e12d 100644 ---- a/src/locale/localed.c -+++ b/src/locale/localed.c -@@ -337,9 +337,11 @@ static int read_data(void) { - return r < 0 ? r : q < 0 ? q : p; - } - --static int write_data_locale(void) { -+static int write_data_locale(char ***settings) { - int r, p; -- char **l = NULL; -+ _cleanup_strv_free_ char **l = NULL; -+ -+ /* Set values will be returned as strv in *settings on success. */ - - r = load_env_file("/etc/locale.conf", NULL, &l); - if (r < 0 && r != -ENOENT) -@@ -355,14 +357,12 @@ static int write_data_locale(void) { - continue; - } - -- if (asprintf(&t, "%s=%s", names[p], data[p]) < 0) { -- strv_free(l); -+ if (asprintf(&t, "%s=%s", names[p], data[p]) < 0) - return -ENOMEM; -- } -+ - - u = strv_env_set(l, t); - free(t); -- strv_free(l); - - if (!u) - return -ENOMEM; -@@ -371,8 +371,6 @@ static int write_data_locale(void) { - } - - if (strv_isempty(l)) { -- strv_free(l); -- - if (unlink("/etc/locale.conf") < 0) - return errno == ENOENT ? 0 : -errno; - -@@ -380,7 +378,11 @@ static int write_data_locale(void) { - } - - r = write_env_file_label("/etc/locale.conf", l); -- strv_free(l); -+ if (r < 0) -+ return r; -+ -+ *settings = l; -+ l = NULL; - - return r; - } -@@ -771,6 +773,12 @@ static int convert_vconsole_to_x11(DBusConnection *connection) { - if (r < 0) - log_error("Failed to set X11 keyboard layout: %s", strerror(-r)); - -+ log_info("Changed X11 keyboard layout to '%s' model '%s' variant '%s' options '%s'", -+ strempty(state.x11_layout), -+ strempty(state.x11_model), -+ strempty(state.x11_variant), -+ strempty(state.x11_options)); -+ - changed = bus_properties_changed_new( - "/org/freedesktop/locale1", - "org.freedesktop.locale1", -@@ -787,7 +795,8 @@ static int convert_vconsole_to_x11(DBusConnection *connection) { - - if (!b) - return -ENOMEM; -- } -+ } else -+ log_debug("X11 keyboard layout was not modified."); - - return 0; - } -@@ -805,13 +814,18 @@ static int find_converted_keymap(char **new_keymap) { - - NULSTR_FOREACH(dir, KBD_KEYMAP_DIRS) { - _cleanup_free_ char *p = NULL, *pz = NULL; -+ bool uncompressed; - - p = strjoin(dir, "xkb/", n, ".map", NULL); - pz = strjoin(dir, "xkb/", n, ".map.gz", NULL); - if (!p || !pz) - return -ENOMEM; - -- if (access(p, F_OK) == 0 || access(pz, F_OK) == 0) { -+ uncompressed = access(p, F_OK) == 0; -+ if (uncompressed || access(pz, F_OK) == 0) { -+ log_debug("Found converted keymap %s at %s", -+ n, uncompressed ? p : pz); -+ - *new_keymap = n; - n = NULL; - return 1; -@@ -885,13 +899,19 @@ static int find_legacy_keymap(char **new_keymap) { - } - - /* The best matching entry so far, then let's save that */ -- if (matching > best_matching) { -- best_matching = matching; -+ if (matching >= MAX(best_matching, 1u)) { -+ log_debug("Found legacy keymap %s with score %u", -+ a[0], matching); - -- free(*new_keymap); -- *new_keymap = strdup(a[0]); -- if (!*new_keymap) -- return -ENOMEM; -+ if (matching > best_matching) { -+ best_matching = matching; -+ -+ free(*new_keymap); -+ *new_keymap = strdup(a[0]); -+ -+ if (!*new_keymap) -+ return -ENOMEM; -+ } - } - } - -@@ -943,6 +963,9 @@ static int convert_x11_to_vconsole(DBusConnection *connection) { - if (r < 0) - log_error("Failed to set virtual console keymap: %s", strerror(-r)); - -+ log_info("Changed virtual console keymap to '%s' toggle '%s'", -+ strempty(state.vc_keymap), strempty(state.vc_keymap_toggle)); -+ - changed = bus_properties_changed_new( - "/org/freedesktop/locale1", - "org.freedesktop.locale1", -@@ -959,7 +982,8 @@ static int convert_x11_to_vconsole(DBusConnection *connection) { - return -ENOMEM; - - return load_vconsole_keymap(connection, NULL); -- } -+ } else -+ log_debug("Virtual console keymap was not modified."); - - return 0; - } -@@ -968,6 +992,7 @@ static int append_locale(DBusMessageIter *i, const char *property, void *userdat - int r, c = 0, p; - char **l; - -+ /* Check whether a variable changed and if it is valid */ - l = new0(char*, _PROP_MAX+1); - if (!l) - return -ENOMEM; -@@ -1086,6 +1111,7 @@ static DBusHandlerResult locale_message_handler( - } - - if (modified) { -+ _cleanup_strv_free_ char **settings = NULL; - - r = verify_polkit(connection, message, "org.freedesktop.locale1.set-locale", interactive, NULL, &error); - if (r < 0) { -@@ -1127,7 +1153,7 @@ static DBusHandlerResult locale_message_handler( - - simplify(); - -- r = write_data_locale(); -+ r = write_data_locale(&settings); - if (r < 0) { - log_error("Failed to set locale: %s", strerror(-r)); - return bus_send_error_reply(connection, message, NULL, r); -@@ -1135,7 +1161,13 @@ static DBusHandlerResult locale_message_handler( - - push_data(connection); - -- log_info("Changed locale information."); -+ if (settings) { -+ _cleanup_free_ char *line; -+ -+ line = strv_join(settings, ", "); -+ log_info("Changed locale to %s.", strnull(line)); -+ } else -+ log_info("Changed locale to unset."); - - changed = bus_properties_changed_new( - "/org/freedesktop/locale1", -@@ -1143,8 +1175,10 @@ static DBusHandlerResult locale_message_handler( - "Locale\0"); - if (!changed) - goto oom; -- } else -+ } else { -+ log_debug("Locale settings were not modified."); - strv_free(l); -+ } - - } else if (dbus_message_is_method_call(message, "org.freedesktop.locale1", "SetVConsoleKeyboard")) { - -@@ -1188,7 +1222,8 @@ static DBusHandlerResult locale_message_handler( - return bus_send_error_reply(connection, message, NULL, r); - } - -- log_info("Changed virtual console keymap to '%s'", strempty(state.vc_keymap)); -+ log_info("Changed virtual console keymap to '%s' toggle '%s'", -+ strempty(state.vc_keymap), strempty(state.vc_keymap_toggle)); - - r = load_vconsole_keymap(connection, NULL); - if (r < 0) -@@ -1266,7 +1301,10 @@ static DBusHandlerResult locale_message_handler( - return bus_send_error_reply(connection, message, NULL, r); - } - -- log_info("Changed X11 keyboard layout to '%s'", strempty(state.x11_layout)); -+ log_info("Changed X11 keyboard layout to '%s' model '%s' variant '%s' options '%s'", strempty(state.x11_layout), -+ strempty(state.x11_model), -+ strempty(state.x11_variant), -+ strempty(state.x11_options)); - - changed = bus_properties_changed_new( - "/org/freedesktop/locale1", diff --git a/SOURCES/0299-localed-introduce-helper-function-to-simplify-matchi.patch b/SOURCES/0299-localed-introduce-helper-function-to-simplify-matchi.patch deleted file mode 100644 index 2440a08..0000000 --- a/SOURCES/0299-localed-introduce-helper-function-to-simplify-matchi.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 31ad188e3cec2909ce0041aa43ca816d0eee6ed1 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Wed, 3 Sep 2014 22:55:52 -0400 -Subject: [PATCH] localed: introduce helper function to simplify matching - -Conflicts: - src/locale/localed.c - -(cherry picked from commit 81fd105a5f9762fa2f2e42bc949876e32b3a126f) - -Related: #1109145 ---- - src/locale/localed.c | 22 ++++++++++------------ - 1 file changed, 10 insertions(+), 12 deletions(-) - -diff --git a/src/locale/localed.c b/src/locale/localed.c -index c22e12d..56900a6 100644 ---- a/src/locale/localed.c -+++ b/src/locale/localed.c -@@ -145,6 +145,12 @@ static int free_and_set(char **s, const char *v) { - return 0; - } - -+static bool startswith_comma(const char *s, const char *prefix) { -+ const char *t; -+ -+ return s && (t = startswith(s, prefix)) && (*t == ','); -+} -+ - static void free_data_locale(void) { - int p; - -@@ -861,26 +867,18 @@ static int find_legacy_keymap(char **new_keymap) { - /* If we got an exact match, this is best */ - matching = 10; - else { -- size_t x; -- -- x = strcspn(state.x11_layout, ","); -- - /* We have multiple X layouts, look for an - * entry that matches our key with everything - * but the first layout stripped off. */ -- if (x > 0 && -- strlen(a[1]) == x && -- strneq(state.x11_layout, a[1], x)) -+ if (startswith_comma(state.x11_layout, a[1])) - matching = 5; - else { -- size_t w; -+ char *x; - - /* If that didn't work, strip off the - * other layouts from the entry, too */ -- w = strcspn(a[1], ","); -- -- if (x > 0 && x == w && -- memcmp(state.x11_layout, a[1], x) == 0) -+ x = strndupa(a[1], strcspn(a[1], ",")); -+ if (startswith_comma(state.x11_layout, x)) - matching = 1; - } - } diff --git a/SOURCES/0300-localed-check-for-partially-matching-converted-keyma.patch b/SOURCES/0300-localed-check-for-partially-matching-converted-keyma.patch deleted file mode 100644 index 64bddd1..0000000 --- a/SOURCES/0300-localed-check-for-partially-matching-converted-keyma.patch +++ /dev/null @@ -1,113 +0,0 @@ -From 6dd719fad5521a24f6278cf005c250c99292a762 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Wed, 3 Sep 2014 22:55:54 -0400 -Subject: [PATCH] localed: check for partially matching converted keymaps - -If a user specifies multiple X11 keymaps, with a (at least the first -one) nonempty variant, and we don't match the whole combo, use -a converted keymap which includes the variant in preference to -the default, variantless, keymap. - -E.g.: We would convert X11 config "layout=fr variant=mac" to "fr-mac", -but "layout=fr,us variant=mac," to "fr", because we don't have a -converted keymap which would match "fr,us", and we don't have a legacy -mapping for "fr,us". This is unexpected, and if we cannot match both, -it is still better to match the primary mapping and use "fr-mac". - -Conflicts: - src/locale/localed.c - -(cherry picked from commit 78bd12a05a9252cf573da28394b23e2b891cbba8) - -Resolves: #1109145 ---- - src/locale/localed.c | 36 ++++++++++++++++++++++++++++-------- - 1 file changed, 28 insertions(+), 8 deletions(-) - -diff --git a/src/locale/localed.c b/src/locale/localed.c -index 56900a6..592fab9 100644 ---- a/src/locale/localed.c -+++ b/src/locale/localed.c -@@ -776,8 +776,10 @@ static int convert_vconsole_to_x11(DBusConnection *connection) { - int r; - - r = write_data_x11(); -- if (r < 0) -+ if (r < 0) { - log_error("Failed to set X11 keyboard layout: %s", strerror(-r)); -+ return r; -+ } - - log_info("Changed X11 keyboard layout to '%s' model '%s' variant '%s' options '%s'", - strempty(state.x11_layout), -@@ -807,14 +809,14 @@ static int convert_vconsole_to_x11(DBusConnection *connection) { - return 0; - } - --static int find_converted_keymap(char **new_keymap) { -+static int find_converted_keymap(const char *x11_layout, const char *x11_variant, char **new_keymap) { - const char *dir; - _cleanup_free_ char *n; - -- if (state.x11_variant) -- n = strjoin(state.x11_layout, "-", state.x11_variant, NULL); -+ if (x11_variant) -+ n = strjoin(x11_layout, "-", x11_variant, NULL); - else -- n = strdup(state.x11_layout); -+ n = strdup(x11_layout); - if (!n) - return -ENOMEM; - -@@ -845,7 +847,7 @@ static int find_legacy_keymap(char **new_keymap) { - _cleanup_fclose_ FILE *f; - unsigned n = 0; - unsigned best_matching = 0; -- -+ int r; - - f = fopen(SYSTEMD_KBD_MODEL_MAP, "re"); - if (!f) -@@ -854,7 +856,6 @@ static int find_legacy_keymap(char **new_keymap) { - for (;;) { - _cleanup_strv_free_ char **a = NULL; - unsigned matching = 0; -- int r; - - r = read_next_mapping(f, &n, &a); - if (r < 0) -@@ -913,6 +914,25 @@ static int find_legacy_keymap(char **new_keymap) { - } - } - -+ if (best_matching < 10 && state.x11_layout) { -+ /* The best match is only the first part of the X11 -+ * keymap. Check if we have a converted map which -+ * matches just the first layout. -+ */ -+ char *l, *v = NULL, *converted; -+ -+ l = strndupa(state.x11_layout, strcspn(state.x11_layout, ",")); -+ if (state.x11_variant) -+ v = strndupa(state.x11_variant, strcspn(state.x11_variant, ",")); -+ r = find_converted_keymap(l, v, &converted); -+ if (r < 0) -+ return r; -+ if (r > 0) { -+ free(*new_keymap); -+ *new_keymap = converted; -+ } -+ } -+ - return 0; - } - -@@ -932,7 +952,7 @@ static int convert_x11_to_vconsole(DBusConnection *connection) { - } else { - char *new_keymap = NULL; - -- r = find_converted_keymap(&new_keymap); -+ r = find_converted_keymap(state.x11_layout, state.x11_variant, &new_keymap); - if (r < 0) - return r; - else if (r == 0) { diff --git a/SOURCES/0301-fileio-make-parse_env_file-return-number-of-parsed-i.patch b/SOURCES/0301-fileio-make-parse_env_file-return-number-of-parsed-i.patch deleted file mode 100644 index 97a7897..0000000 --- a/SOURCES/0301-fileio-make-parse_env_file-return-number-of-parsed-i.patch +++ /dev/null @@ -1,130 +0,0 @@ -From 3a68febdb636924b941a84e123b6e51e042e1273 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Mon, 22 Sep 2014 09:38:38 +0200 -Subject: [PATCH] fileio: make parse_env_file() return number of parsed items - -This commit introduces possibility to call parse_env_file_internal() and hand -over extra argument where we will accumulate how many items were successfully -parsed and pushed by callback. We make use of this in parse_env_file() and -return number of parsed items on success instead of always returning zero. - -As a side-effect this commit should fix bug that locale settings in -/etc/locale.conf are not overriden by options passed via kernel command line. - -Conflicts: - src/shared/fileio.c - -(cherry picked from commit a5f6c30da3ac58081108221bf8a0f6f1d84b33a9) - -Resolves: #1069420 ---- - src/shared/fileio.c | 30 +++++++++++++++++++----------- - 1 file changed, 19 insertions(+), 11 deletions(-) - -diff --git a/src/shared/fileio.c b/src/shared/fileio.c -index 733b320..fbc28bd 100644 ---- a/src/shared/fileio.c -+++ b/src/shared/fileio.c -@@ -180,8 +180,9 @@ static int parse_env_file_internal( - const char *fname, - const char *newline, - int (*push) (const char *filename, unsigned line, -- const char *key, char *value, void *userdata), -- void *userdata) { -+ const char *key, char *value, void *userdata, int *n_pushed), -+ void *userdata, -+ int *n_pushed) { - - _cleanup_free_ char *contents = NULL, *key = NULL; - size_t key_alloc = 0, n_key = 0, value_alloc = 0, n_value = 0, last_value_whitespace = (size_t) -1, last_key_whitespace = (size_t) -1; -@@ -268,7 +269,7 @@ static int parse_env_file_internal( - if (last_key_whitespace != (size_t) -1) - key[last_key_whitespace] = 0; - -- r = push(fname, line, key, value, userdata); -+ r = push(fname, line, key, value, userdata, n_pushed); - if (r < 0) - goto fail; - -@@ -313,7 +314,7 @@ static int parse_env_file_internal( - if (last_key_whitespace != (size_t) -1) - key[last_key_whitespace] = 0; - -- r = push(fname, line, key, value, userdata); -+ r = push(fname, line, key, value, userdata, n_pushed); - if (r < 0) - goto fail; - -@@ -448,7 +449,7 @@ static int parse_env_file_internal( - if (last_key_whitespace != (size_t) -1) - key[last_key_whitespace] = 0; - -- r = push(fname, line, key, value, userdata); -+ r = push(fname, line, key, value, userdata, n_pushed); - if (r < 0) - goto fail; - } -@@ -461,7 +462,7 @@ fail: - } - - static int parse_env_file_push(const char *filename, unsigned line, -- const char *key, char *value, void *userdata) { -+ const char *key, char *value, void *userdata, int *n_pushed) { - assert(utf8_is_valid(key)); - - if (value && !utf8_is_valid(value)) -@@ -484,6 +485,10 @@ static int parse_env_file_push(const char *filename, unsigned line, - va_end(aq); - free(*v); - *v = value; -+ -+ if (n_pushed) -+ (*n_pushed)++; -+ - return 1; - } - } -@@ -500,20 +505,20 @@ int parse_env_file( - const char *newline, ...) { - - va_list ap; -- int r; -+ int r, n_pushed = 0; - - if (!newline) - newline = NEWLINE; - - va_start(ap, newline); -- r = parse_env_file_internal(fname, newline, parse_env_file_push, &ap); -+ r = parse_env_file_internal(fname, newline, parse_env_file_push, &ap, &n_pushed); - va_end(ap); - -- return r; -+ return r < 0 ? r : n_pushed; - } - - static int load_env_file_push(const char *filename, unsigned line, -- const char *key, char *value, void *userdata) { -+ const char *key, char *value, void *userdata, int *n_pushed) { - assert(utf8_is_valid(key)); - - if (value && !utf8_is_valid(value)) -@@ -534,6 +539,9 @@ static int load_env_file_push(const char *filename, unsigned line, - free(p); - return r; - } -+ -+ if (n_pushed) -+ (*n_pushed)++; - } - - free(value); -@@ -547,7 +555,7 @@ int load_env_file(const char *fname, const char *newline, char ***rl) { - if (!newline) - newline = NEWLINE; - -- r = parse_env_file_internal(fname, newline, load_env_file_push, &m); -+ r = parse_env_file_internal(fname, newline, load_env_file_push, &m, NULL); - if (r < 0) { - strv_free(m); - return r; diff --git a/SOURCES/0302-localectl-print-warning-when-there-are-options-given.patch b/SOURCES/0302-localectl-print-warning-when-there-are-options-given.patch deleted file mode 100644 index 78d86bc..0000000 --- a/SOURCES/0302-localectl-print-warning-when-there-are-options-given.patch +++ /dev/null @@ -1,292 +0,0 @@ -From 7664fb3e7ebba889d52c4e7ba653dbbba9035969 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Wed, 24 Sep 2014 13:17:43 +0200 -Subject: [PATCH] localectl: print warning when there are options given on - kernel cmdline - -Conflicts: - src/locale/localectl.c - -(cherry picked from commit a34286684ebb78dd3db0d7f34feb2c121c9d00cc) - -Related: #1069420 ---- - Makefile.am | 2 ++ - src/core/locale-setup.c | 47 +++++--------------------------------------- - src/locale/localectl.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ - src/shared/locale-util.c | 42 +++++++++++++++++++++++++++++++++++++++ - src/shared/locale-util.h | 47 ++++++++++++++++++++++++++++++++++++++++++++ - 5 files changed, 147 insertions(+), 42 deletions(-) - create mode 100644 src/shared/locale-util.c - create mode 100644 src/shared/locale-util.h - -diff --git a/Makefile.am b/Makefile.am -index d54a556..dab55ba 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -656,6 +656,8 @@ libsystemd_shared_la_SOURCES = \ - src/shared/path-util.h \ - src/shared/time-util.c \ - src/shared/time-util.h \ -+ src/shared/locale-util.c \ -+ src/shared/locale-util.h \ - src/shared/hashmap.c \ - src/shared/hashmap.h \ - src/shared/set.c \ -diff --git a/src/core/locale-setup.c b/src/core/locale-setup.c -index 276deb9..69e9bca 100644 ---- a/src/core/locale-setup.c -+++ b/src/core/locale-setup.c -@@ -30,48 +30,11 @@ - #include "fileio.h" - #include "strv.h" - #include "env-util.h" -- --enum { -- /* We don't list LC_ALL here on purpose. People should be -- * using LANG instead. */ -- -- VARIABLE_LANG, -- VARIABLE_LANGUAGE, -- VARIABLE_LC_CTYPE, -- VARIABLE_LC_NUMERIC, -- VARIABLE_LC_TIME, -- VARIABLE_LC_COLLATE, -- VARIABLE_LC_MONETARY, -- VARIABLE_LC_MESSAGES, -- VARIABLE_LC_PAPER, -- VARIABLE_LC_NAME, -- VARIABLE_LC_ADDRESS, -- VARIABLE_LC_TELEPHONE, -- VARIABLE_LC_MEASUREMENT, -- VARIABLE_LC_IDENTIFICATION, -- _VARIABLE_MAX --}; -- --static const char * const variable_names[_VARIABLE_MAX] = { -- [VARIABLE_LANG] = "LANG", -- [VARIABLE_LANGUAGE] = "LANGUAGE", -- [VARIABLE_LC_CTYPE] = "LC_CTYPE", -- [VARIABLE_LC_NUMERIC] = "LC_NUMERIC", -- [VARIABLE_LC_TIME] = "LC_TIME", -- [VARIABLE_LC_COLLATE] = "LC_COLLATE", -- [VARIABLE_LC_MONETARY] = "LC_MONETARY", -- [VARIABLE_LC_MESSAGES] = "LC_MESSAGES", -- [VARIABLE_LC_PAPER] = "LC_PAPER", -- [VARIABLE_LC_NAME] = "LC_NAME", -- [VARIABLE_LC_ADDRESS] = "LC_ADDRESS", -- [VARIABLE_LC_TELEPHONE] = "LC_TELEPHONE", -- [VARIABLE_LC_MEASUREMENT] = "LC_MEASUREMENT", -- [VARIABLE_LC_IDENTIFICATION] = "LC_IDENTIFICATION" --}; -+#include "locale-util.h" - - int locale_setup(char ***environment) { - char **add; -- char *variables[_VARIABLE_MAX] = {}; -+ char *variables[_VARIABLE_LC_MAX] = {}; - int r = 0, i; - - if (detect_container(NULL) <= 0) { -@@ -121,13 +84,13 @@ int locale_setup(char ***environment) { - } - - add = NULL; -- for (i = 0; i < _VARIABLE_MAX; i++) { -+ for (i = 0; i < _VARIABLE_LC_MAX; i++) { - char *s; - - if (!variables[i]) - continue; - -- s = strjoin(variable_names[i], "=", variables[i], NULL); -+ s = strjoin(locale_variable_to_string(i), "=", variables[i], NULL); - if (!s) { - r = -ENOMEM; - goto finish; -@@ -158,7 +121,7 @@ int locale_setup(char ***environment) { - finish: - strv_free(add); - -- for (i = 0; i < _VARIABLE_MAX; i++) -+ for (i = 0; i < _VARIABLE_LC_MAX; i++) - free(variables[i]); - - return r; -diff --git a/src/locale/localectl.c b/src/locale/localectl.c -index d3c6152..fdef3a0 100644 ---- a/src/locale/localectl.c -+++ b/src/locale/localectl.c -@@ -39,6 +39,9 @@ - #include "path-util.h" - #include "utf8.h" - #include "def.h" -+#include "virt.h" -+#include "fileio.h" -+#include "locale-util.h" - - static bool arg_no_pager = false; - static enum transport { -@@ -79,6 +82,53 @@ typedef struct StatusInfo { - const char *x11_options; - } StatusInfo; - -+static void print_overriden_variables(void) { -+ int r; -+ char *variables[_VARIABLE_LC_MAX] = {}; -+ LocaleVariable j; -+ bool print_warning = true; -+ -+ if (detect_container(NULL) > 0 || arg_host) -+ return; -+ -+ r = parse_env_file("/proc/cmdline", WHITESPACE, -+ "locale.LANG", &variables[VARIABLE_LANG], -+ "locale.LANGUAGE", &variables[VARIABLE_LANGUAGE], -+ "locale.LC_CTYPE", &variables[VARIABLE_LC_CTYPE], -+ "locale.LC_NUMERIC", &variables[VARIABLE_LC_NUMERIC], -+ "locale.LC_TIME", &variables[VARIABLE_LC_TIME], -+ "locale.LC_COLLATE", &variables[VARIABLE_LC_COLLATE], -+ "locale.LC_MONETARY", &variables[VARIABLE_LC_MONETARY], -+ "locale.LC_MESSAGES", &variables[VARIABLE_LC_MESSAGES], -+ "locale.LC_PAPER", &variables[VARIABLE_LC_PAPER], -+ "locale.LC_NAME", &variables[VARIABLE_LC_NAME], -+ "locale.LC_ADDRESS", &variables[VARIABLE_LC_ADDRESS], -+ "locale.LC_TELEPHONE", &variables[VARIABLE_LC_TELEPHONE], -+ "locale.LC_MEASUREMENT", &variables[VARIABLE_LC_MEASUREMENT], -+ "locale.LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION], -+ NULL); -+ -+ if (r < 0 && r != -ENOENT) { -+ log_warning("Failed to read /proc/cmdline: %s", strerror(-r)); -+ goto finish; -+ } -+ -+ for (j = VARIABLE_LANG; j < _VARIABLE_LC_MAX; j++) -+ if (variables[j]) { -+ if (print_warning) { -+ printf("Warning: Settings on Kernel Command Line override system locale settings in /etc/locale.conf\n"); -+ printf(" Command Line: %s=%s\n", locale_variable_to_string(j), variables[j]); -+ -+ print_warning = false; -+ continue; -+ } -+ printf(" %s=%s\n", locale_variable_to_string(j), variables[j]); -+ } -+ finish: -+ for (j = VARIABLE_LANG; j < _VARIABLE_LC_MAX; j++) -+ free(variables[j]); -+} -+ - static void print_status_info(StatusInfo *i) { - assert(i); - -@@ -218,6 +268,7 @@ static int show_status(DBusConnection *bus, char **args, unsigned n) { - dbus_message_iter_next(&sub); - } - -+ print_overriden_variables(); - print_status_info(&info); - strv_free(info.locale); - return 0; -diff --git a/src/shared/locale-util.c b/src/shared/locale-util.c -new file mode 100644 -index 0000000..d53b16c ---- /dev/null -+++ b/src/shared/locale-util.c -@@ -0,0 +1,42 @@ -+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ -+ -+/*** -+ This file is part of systemd. -+ -+ Copyright 2014 Lennart Poettering -+ -+ systemd is free software; you can redistribute it and/or modify it -+ under the terms of the GNU Lesser General Public License as published by -+ the Free Software Foundation; either version 2.1 of the License, or -+ (at your option) any later version. -+ -+ systemd is distributed in the hope that it will be useful, but -+ WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public License -+ along with systemd; If not, see . -+***/ -+ -+#include "util.h" -+#include "locale-util.h" -+ -+static const char * const locale_variable_table[_VARIABLE_LC_MAX] = { -+ [VARIABLE_LANG] = "LANG", -+ [VARIABLE_LANGUAGE] = "LANGUAGE", -+ [VARIABLE_LC_CTYPE] = "LC_CTYPE", -+ [VARIABLE_LC_NUMERIC] = "LC_NUMERIC", -+ [VARIABLE_LC_TIME] = "LC_TIME", -+ [VARIABLE_LC_COLLATE] = "LC_COLLATE", -+ [VARIABLE_LC_MONETARY] = "LC_MONETARY", -+ [VARIABLE_LC_MESSAGES] = "LC_MESSAGES", -+ [VARIABLE_LC_PAPER] = "LC_PAPER", -+ [VARIABLE_LC_NAME] = "LC_NAME", -+ [VARIABLE_LC_ADDRESS] = "LC_ADDRESS", -+ [VARIABLE_LC_TELEPHONE] = "LC_TELEPHONE", -+ [VARIABLE_LC_MEASUREMENT] = "LC_MEASUREMENT", -+ [VARIABLE_LC_IDENTIFICATION] = "LC_IDENTIFICATION" -+}; -+ -+DEFINE_STRING_TABLE_LOOKUP(locale_variable, LocaleVariable); -diff --git a/src/shared/locale-util.h b/src/shared/locale-util.h -new file mode 100644 -index 0000000..420a89d ---- /dev/null -+++ b/src/shared/locale-util.h -@@ -0,0 +1,47 @@ -+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ -+ -+/*** -+ This file is part of systemd. -+ -+ Copyright 2014 Lennart Poettering -+ -+ systemd is free software; you can redistribute it and/or modify it -+ under the terms of the GNU Lesser General Public License as published by -+ the Free Software Foundation; either version 2.1 of the License, or -+ (at your option) any later version. -+ -+ systemd is distributed in the hope that it will be useful, but -+ WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public License -+ along with systemd; If not, see . -+***/ -+ -+#include "util.h" -+ -+typedef enum LocaleVariable { -+ /* We don't list LC_ALL here on purpose. People should be -+ * using LANG instead. */ -+ -+ VARIABLE_LANG, -+ VARIABLE_LANGUAGE, -+ VARIABLE_LC_CTYPE, -+ VARIABLE_LC_NUMERIC, -+ VARIABLE_LC_TIME, -+ VARIABLE_LC_COLLATE, -+ VARIABLE_LC_MONETARY, -+ VARIABLE_LC_MESSAGES, -+ VARIABLE_LC_PAPER, -+ VARIABLE_LC_NAME, -+ VARIABLE_LC_ADDRESS, -+ VARIABLE_LC_TELEPHONE, -+ VARIABLE_LC_MEASUREMENT, -+ VARIABLE_LC_IDENTIFICATION, -+ _VARIABLE_LC_MAX, -+ _VARIABLE_LC_INVALID = -1 -+} LocaleVariable; -+ -+const char* locale_variable_to_string(LocaleVariable i) _const_; -+LocaleVariable locale_variable_from_string(const char *s) _pure_; diff --git a/SOURCES/0303-dbus-fix-crash-when-appending-selinux-context.patch b/SOURCES/0303-dbus-fix-crash-when-appending-selinux-context.patch deleted file mode 100644 index 9aff9d2..0000000 --- a/SOURCES/0303-dbus-fix-crash-when-appending-selinux-context.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 48a85bb45ff9d3ee302594ac41d102fa16b31350 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Sat, 27 Sep 2014 20:40:11 +0200 -Subject: [PATCH] dbus: fix crash when appending selinux context - -RHEL-only - -Related: #1113790 ---- - src/core/dbus-execute.c | 11 +++++++++-- - 1 file changed, 9 insertions(+), 2 deletions(-) - -diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c -index 8162f1c..ae65be1 100644 ---- a/src/core/dbus-execute.c -+++ b/src/core/dbus-execute.c -@@ -376,6 +376,7 @@ static int bus_execute_append_selinux_context(DBusMessageIter *i, const char *pr - ExecContext *c = data; - dbus_bool_t selinux_context_ignore; - const char *selinux_context = NULL; -+ DBusMessageIter sub; - - assert(i); - assert(property); -@@ -387,10 +388,16 @@ static int bus_execute_append_selinux_context(DBusMessageIter *i, const char *pr - - selinux_context_ignore = c->selinux_context_ignore; - -- if (!dbus_message_iter_append_basic(i, DBUS_TYPE_BOOLEAN, &selinux_context_ignore)) -+ if (!dbus_message_iter_open_container(i, DBUS_TYPE_STRUCT, NULL, &sub)) -+ return -ENOMEM; -+ -+ if (!dbus_message_iter_append_basic(&sub, DBUS_TYPE_BOOLEAN, &selinux_context_ignore)) - return -ENOMEM; - -- if (!dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &selinux_context)) -+ if (!dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &selinux_context)) -+ return -ENOMEM; -+ -+ if (!dbus_message_iter_close_container(i, &sub)) - return -ENOMEM; - - return 0; diff --git a/SOURCES/0304-tmpfiles-minor-modernizations.patch b/SOURCES/0304-tmpfiles-minor-modernizations.patch deleted file mode 100644 index 29e507e..0000000 --- a/SOURCES/0304-tmpfiles-minor-modernizations.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 50720580bc5333e594032b124a9a1114e66dc7ae Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Thu, 12 Jun 2014 23:07:17 +0200 -Subject: [PATCH] tmpfiles: minor modernizations - -(cherry-picked from 753615e85d990077c303ae4a42a53e792ffb12ca) - -Resolves: #1147524 ---- - src/tmpfiles/tmpfiles.c | 12 ++++++++---- - 1 file changed, 8 insertions(+), 4 deletions(-) - -diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c -index ff51062..df6c99a 100644 ---- a/src/tmpfiles/tmpfiles.c -+++ b/src/tmpfiles/tmpfiles.c -@@ -990,7 +990,9 @@ static int process_item(Item *i) { - } - - static void item_free(Item *i) { -- assert(i); -+ -+ if (!i) -+ return; - - free(i->path); - free(i->argument); -@@ -1122,7 +1124,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { - } - } - -- switch(type) { -+ switch (type) { - - case CREATE_FILE: - case TRUNCATE_FILE: -@@ -1171,7 +1173,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { - } - - default: -- log_error("[%s:%u] Unknown file type '%c'.", fname, line, type); -+ log_error("[%s:%u] Unknown command type '%c'.", fname, line, type); - return -EBADMSG; - } - -@@ -1355,9 +1357,11 @@ static int parse_argv(int argc, char *argv[]) { - break; - - case ARG_ROOT: -+ free(arg_root); - arg_root = path_make_absolute_cwd(optarg); - if (!arg_root) - return log_oom(); -+ - path_kill_slashes(arg_root); - break; - -@@ -1456,7 +1460,7 @@ int main(int argc, char *argv[]) { - - r = parse_argv(argc, argv); - if (r <= 0) -- return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; -+ goto finish; - - log_set_target(LOG_TARGET_AUTO); - log_parse_environment(); diff --git a/SOURCES/0305-install-when-looking-for-a-unit-file-for-enabling-se.patch b/SOURCES/0305-install-when-looking-for-a-unit-file-for-enabling-se.patch deleted file mode 100644 index c00ae0c..0000000 --- a/SOURCES/0305-install-when-looking-for-a-unit-file-for-enabling-se.patch +++ /dev/null @@ -1,126 +0,0 @@ -From f73a446c8a1db5c255e6cf1bf6c5d68fe6448f10 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 17 Jun 2014 00:13:48 +0200 -Subject: [PATCH] install: when looking for a unit file for enabling, search - for templates only after traversing all search directories - -Let's always make sure to look in all search directories for the full -unit names first, before looking for templates for them. - -(cherry-picked from e50bd775163cd96be1888943a8785a436be710e8) - -Resolves: #1147524 ---- - src/shared/install.c | 74 +++++++++++++++++++++++++++------------------------- - 1 file changed, 38 insertions(+), 36 deletions(-) - -diff --git a/src/shared/install.c b/src/shared/install.c -index 2c8f907..dc8842b 100644 ---- a/src/shared/install.c -+++ b/src/shared/install.c -@@ -1074,67 +1074,69 @@ static int unit_file_search( - assert(paths); - - if (info->path) { -- char *full_path = NULL; -+ const char *path; - -- if (!isempty(root_dir)) -- full_path = strappenda(root_dir, info->path); -+ if (isempty(root_dir)) -+ path = info->path; -+ else -+ path = strappenda(root_dir, info->path); - -- return unit_file_load(c, info, full_path ?: info->path, allow_symlink); -+ return unit_file_load(c, info, path, allow_symlink); - } - - assert(info->name); - - STRV_FOREACH(p, paths->unit_path) { -- _cleanup_free_ char *path = NULL, *full_path = NULL; -+ _cleanup_free_ char *path = NULL; - -- path = strjoin(*p, "/", info->name, NULL); -+ if (isempty(root_dir)) -+ path = strjoin(*p, "/", info->name, NULL); -+ else -+ path = strjoin(root_dir, "/", *p, "/", info->name, NULL); - if (!path) - return -ENOMEM; - -- if (!isempty(root_dir)) { -- full_path = strappend(root_dir, path); -- if (!full_path) -- return -ENOMEM; -- } -- -- r = unit_file_load(c, info, full_path ?: path, allow_symlink); -+ r = unit_file_load(c, info, path, allow_symlink); - if (r >= 0) { - info->path = path; - path = NULL; -- } else if (r == -ENOENT && unit_name_is_instance(info->name)) { -- /* Unit file doesn't exist, however instance enablement was requested. -- * We will check if it is possible to load template unit file. */ -- _cleanup_free_ char *template = NULL, *template_dir = NULL; -+ return r; -+ } -+ if (r != -ENOENT && r != -ELOOP) -+ return r; -+ } - -- template = unit_name_template(info->name); -- if (!template) -- return -ENOMEM; -+ if (unit_name_is_instance(info->name)) { - -- /* We will reuse path variable since we don't need it anymore. */ -- template_dir = path; -- *(strrchr(template_dir, '/') + 1) = '\0'; -+ /* Unit file doesn't exist, however instance -+ * enablement was requested. We will check if it is -+ * possible to load template unit file. */ - -- path = strappend(template_dir, template); -+ _cleanup_free_ char *template = NULL, *template_dir = NULL; -+ -+ template = unit_name_template(info->name); -+ if (!template) -+ return -ENOMEM; -+ -+ STRV_FOREACH(p, paths->unit_path) { -+ _cleanup_free_ char *path = NULL; -+ -+ if (isempty(root_dir)) -+ path = strjoin(*p, "/", template, NULL); -+ else -+ path = strjoin(root_dir, "/", *p, "/", template, NULL); - if (!path) - return -ENOMEM; - -- if (!isempty(root_dir)) { -- free(full_path); -- full_path = strappend(root_dir, path); -- if (!full_path) -- return -ENOMEM; -- } -- -- /* Let's try to load template unit. */ -- r = unit_file_load(c, info, full_path ?: path, allow_symlink); -+ r = unit_file_load(c, info, path, allow_symlink); - if (r >= 0) { - info->path = path; - path = NULL; -+ return r; - } -+ if (r != -ENOENT && r != -ELOOP) -+ return r; - } -- -- if (r != -ENOENT && r != -ELOOP) -- return r; - } - - return -ENOENT; diff --git a/SOURCES/0306-install-remove-unused-variable.patch b/SOURCES/0306-install-remove-unused-variable.patch deleted file mode 100644 index cfde10e..0000000 --- a/SOURCES/0306-install-remove-unused-variable.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 9d05d80b64a04e2bf9a61d992b7bd22b23949d1e Mon Sep 17 00:00:00 2001 -From: Thomas Hindoe Paaboel Andersen -Date: Tue, 17 Jun 2014 21:22:01 +0200 -Subject: [PATCH] install: remove unused variable - -(cherry-picked from de228aabc833901e7c75aab8d62e58229e2a8bfc) - -Resolves: #1147524 ---- - src/shared/install.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/shared/install.c b/src/shared/install.c -index dc8842b..dd5e22b 100644 ---- a/src/shared/install.c -+++ b/src/shared/install.c -@@ -1112,7 +1112,7 @@ static int unit_file_search( - * enablement was requested. We will check if it is - * possible to load template unit file. */ - -- _cleanup_free_ char *template = NULL, *template_dir = NULL; -+ _cleanup_free_ char *template = NULL; - - template = unit_name_template(info->name); - if (!template) diff --git a/SOURCES/0307-bootctl-typo-fix-in-help-message.patch b/SOURCES/0307-bootctl-typo-fix-in-help-message.patch deleted file mode 100644 index 909d4aa..0000000 --- a/SOURCES/0307-bootctl-typo-fix-in-help-message.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 5f9893fe56014642bbdb2d15eb829e3447dac265 Mon Sep 17 00:00:00 2001 -From: Thomas Hindoe Paaboel Andersen -Date: Wed, 6 Nov 2013 00:29:49 +0100 -Subject: [PATCH] bootctl: typo fix in help message - -(cherry-picked from 82de16f92ca5259e9ddb4f328f086cb6a9f043b0) - -Resolves: #1147524 ---- - src/boot/bootctl.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c -index af694fd..d25ddef 100644 ---- a/src/boot/bootctl.c -+++ b/src/boot/bootctl.c -@@ -34,7 +34,7 @@ - - static int help(void) { - printf("%s [OPTIONS...] COMMAND ...\n\n" -- "Query or change firmware and boot mananger settings.\n\n" -+ "Query or change firmware and boot manager settings.\n\n" - " -h --help Show this help\n" - " --version Show package version\n" - "Commands:\n" diff --git a/SOURCES/0308-logind-ignore-failing-close-on-session-devices.patch b/SOURCES/0308-logind-ignore-failing-close-on-session-devices.patch deleted file mode 100644 index 683440f..0000000 --- a/SOURCES/0308-logind-ignore-failing-close-on-session-devices.patch +++ /dev/null @@ -1,59 +0,0 @@ -From b1c42aa11792c00cf359bec452022b73cbe2c79d Mon Sep 17 00:00:00 2001 -From: David Herrmann -Date: Thu, 28 Nov 2013 14:51:40 +0100 -Subject: [PATCH] logind: ignore failing close() on session-devices - -Unfortunately, close() on a revoked/removed character-device fails with -ENODEV. I tried tracking this down in the kernel, but couldn't figure out -were exactly it comes from. However, can be easily reproduced with: - fd = open("/dev/input/event0", O_RDWR); - ioctl(fd, EVIOCREVOKE, 0); - r = close(fd); -A second close on @fd would return EBADF so the close is actually valid. - -We simply ignore close() errors for all session-devices as their access -may be revoked asynchronously, or the device might get unplugged. -We use close_nointr() in case anyone ever looks at the return value (or -anyone runs "grep 'close(' -r src/" to find broken close() calls). - -Fixes: - systemd-logind[31992]: Assertion 'close_nointr(fd) == 0' failed at src/shared/util.c:185, function close_nointr_nofail(). Aborting. - -(cherry-picked from d1107170f9e0fa2cb6e8d18586a003f0d96abfc3) - -Resolves: #1147524 ---- - src/login/logind-session-device.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/login/logind-session-device.c b/src/login/logind-session-device.c -index 6605935..fd02b43 100644 ---- a/src/login/logind-session-device.c -+++ b/src/login/logind-session-device.c -@@ -162,7 +162,7 @@ static int session_device_open(SessionDevice *sd, bool active) { - * state. */ - r = sd_drmsetmaster(fd); - if (r < 0) { -- close(fd); -+ close_nointr(fd); - return r; - } - } else { -@@ -209,7 +209,7 @@ static int session_device_start(SessionDevice *sd) { - r = session_device_open(sd, true); - if (r < 0) - return r; -- close_nointr_nofail(sd->fd); -+ close_nointr(sd->fd); - sd->fd = r; - break; - case DEVICE_TYPE_UNKNOWN: -@@ -407,7 +407,7 @@ void session_device_free(SessionDevice *sd) { - - session_device_stop(sd); - session_device_notify(sd, SESSION_DEVICE_RELEASE); -- close_nointr_nofail(sd->fd); -+ close_nointr(sd->fd); - - LIST_REMOVE(SessionDevice, sd_by_device, sd->device->session_devices, sd); - diff --git a/SOURCES/0309-sysfs-show.c-return-negative-error.patch b/SOURCES/0309-sysfs-show.c-return-negative-error.patch deleted file mode 100644 index eeafc02..0000000 --- a/SOURCES/0309-sysfs-show.c-return-negative-error.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 8d5952a7659d735958119b64d05ceab34be9e454 Mon Sep 17 00:00:00 2001 -From: Thomas Hindoe Paaboel Andersen -Date: Sat, 30 Nov 2013 21:59:40 +0100 -Subject: [PATCH] sysfs-show.c: return negative error - -introduced in 1ca208fb4f93e5869704af1812cbff7130a2fc03 - -(cherry-picked from a051da35ce96923e31a532c86a530bfd40d5dc76) - -Resolves: #1147524 ---- - src/login/sysfs-show.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/login/sysfs-show.c b/src/login/sysfs-show.c -index 9fc3054..cb12ebf 100644 ---- a/src/login/sysfs-show.c -+++ b/src/login/sysfs-show.c -@@ -164,7 +164,7 @@ int show_sysfs(const char *seat, const char *prefix, unsigned n_columns) { - - e = udev_enumerate_new(udev); - if (!e) -- return ENOMEM; -+ return -ENOMEM; - - if (!streq(seat, "seat0")) - r = udev_enumerate_add_match_tag(e, seat); diff --git a/SOURCES/0310-core-only-send-SIGHUP-when-doing-first-kill-not-when.patch b/SOURCES/0310-core-only-send-SIGHUP-when-doing-first-kill-not-when.patch deleted file mode 100644 index b5cdad2..0000000 --- a/SOURCES/0310-core-only-send-SIGHUP-when-doing-first-kill-not-when.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 2f960b84dad97c50c819f2c11812fe6f302ec2ca Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Thu, 6 Feb 2014 01:50:41 +0100 -Subject: [PATCH] core: only send SIGHUP when doing first kill, not when doing - final sigkill - -Conflicts: - src/core/unit.c - -(cherry-picked from 97e0691f85da6e7ea131ce80bd61e2d47a737a61) - -Resolves: #1147524 ---- - src/core/unit.c | 20 ++++++++++++++++---- - 1 file changed, 16 insertions(+), 4 deletions(-) - -diff --git a/src/core/unit.c b/src/core/unit.c -index 855e135..fe1864a 100644 ---- a/src/core/unit.c -+++ b/src/core/unit.c -@@ -3113,7 +3113,7 @@ int unit_kill_context( - } else { - wait_for_exit = !main_pid_alien; - -- if (c->send_sighup) -+ if (c->send_sighup && !sigkill) - kill(main_pid, SIGHUP); - } - } -@@ -3131,7 +3131,7 @@ int unit_kill_context( - } else { - wait_for_exit = true; - -- if (c->send_sighup) -+ if (c->send_sighup && !sigkill) - kill(control_pid, SIGHUP); - } - } -@@ -3149,8 +3149,20 @@ int unit_kill_context( - if (r != -EAGAIN && r != -ESRCH && r != -ENOENT) - log_warning_unit(u->id, "Failed to kill control group: %s", strerror(-r)); - } else if (r > 0) { -- wait_for_exit = true; -- if (c->send_sighup) { -+ -+ /* FIXME: Now, we don't actually wait for any -+ * of the processes that are neither control -+ * nor main process. We should wait for them -+ * of course, but that's hard since the cgroup -+ * notification logic is so unreliable. It is -+ * not available at all in containers, and on -+ * the host it gets confused by -+ * subgroups. Hence, for now, let's not wait -+ * for these processes -- but when the kernel -+ * gets fixed we really should correct -+ * that. */ -+ -+ if (c->send_sighup && !sigkill) { - set_free(pid_set); - - pid_set = unit_pid_set(main_pid, control_pid); diff --git a/SOURCES/0311-cgroup-make-sure-to-properly-send-SIGCONT-to-all-pro.patch b/SOURCES/0311-cgroup-make-sure-to-properly-send-SIGCONT-to-all-pro.patch deleted file mode 100644 index f07310d..0000000 --- a/SOURCES/0311-cgroup-make-sure-to-properly-send-SIGCONT-to-all-pro.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 0c5ef7a5535c4b3aebfc61793c28919f696d5e99 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Thu, 6 Feb 2014 19:27:59 +0100 -Subject: [PATCH] cgroup: make sure to properly send SIGCONT to all processes - of a cgroup if that's requested - -(cherry-picked from 6e8314c420eb375847c9e526745c2caec802399d) - -Resolves: #1147524 ---- - src/shared/cgroup-util.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/shared/cgroup-util.c b/src/shared/cgroup-util.c -index 8a4edda..b58d8b8 100644 ---- a/src/shared/cgroup-util.c -+++ b/src/shared/cgroup-util.c -@@ -194,12 +194,12 @@ int cg_kill(const char *controller, const char *path, int sig, bool sigcont, boo - if (kill(pid, sig) < 0) { - if (ret >= 0 && errno != ESRCH) - ret = -errno; -- } else if (ret == 0) { -- -+ } else { - if (sigcont) - kill(pid, SIGCONT); - -- ret = 1; -+ if (ret == 0) -+ ret = 1; - } - - done = false; diff --git a/SOURCES/0312-core-don-t-send-duplicate-SIGCONT-when-killing-units.patch b/SOURCES/0312-core-don-t-send-duplicate-SIGCONT-when-killing-units.patch deleted file mode 100644 index a0134d0..0000000 --- a/SOURCES/0312-core-don-t-send-duplicate-SIGCONT-when-killing-units.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 1368259de25f91b0130fcf9a8dd1623b3354ba10 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Thu, 6 Feb 2014 19:46:46 +0100 -Subject: [PATCH] core: don't send duplicate SIGCONT when killing units - -(cherry-picked from 8190da36f71a887945297cd65d6426c78b466a50) - -Resolves: #1147524 ---- - src/core/unit.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/core/unit.c b/src/core/unit.c -index fe1864a..87a6385 100644 ---- a/src/core/unit.c -+++ b/src/core/unit.c -@@ -3169,7 +3169,7 @@ int unit_kill_context( - if (!pid_set) - return -ENOMEM; - -- cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, SIGHUP, true, true, false, pid_set); -+ cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, SIGHUP, false, true, false, pid_set); - } - } - } diff --git a/SOURCES/0313-efi-fix-Undefined-reference-efi_loader_get_boot_usec.patch b/SOURCES/0313-efi-fix-Undefined-reference-efi_loader_get_boot_usec.patch deleted file mode 100644 index ea63c99..0000000 --- a/SOURCES/0313-efi-fix-Undefined-reference-efi_loader_get_boot_usec.patch +++ /dev/null @@ -1,28 +0,0 @@ -From d19e3171725a0afd00c094e8d2b9012309b91f21 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Cristian=20Rodr=C3=ADguez?= -Date: Tue, 11 Feb 2014 09:54:49 -0300 -Subject: [PATCH] efi: fix Undefined reference efi_loader_get_boot_usec when - EFI support is disabled - -(cherry-picked from 70d9b9fc0a4fa1698ff00e364c61bb875244efa1) - -Resolves: #1147524 ---- - src/shared/boot-timestamps.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/shared/boot-timestamps.c b/src/shared/boot-timestamps.c -index 9449965..d656685 100644 ---- a/src/shared/boot-timestamps.c -+++ b/src/shared/boot-timestamps.c -@@ -40,8 +40,10 @@ int boot_timestamps(const dual_timestamp *n, dual_timestamp *firmware, dual_time - - r = acpi_get_boot_usec(&x, &y); - if (r < 0) { -+#ifdef ENABLE_EFI - r = efi_loader_get_boot_usec(&x, &y); - if (r < 0) -+#endif - return r; - } - diff --git a/SOURCES/0314-macro-better-make-IN_SET-macro-use-const-arrays.patch b/SOURCES/0314-macro-better-make-IN_SET-macro-use-const-arrays.patch deleted file mode 100644 index ef19db1..0000000 --- a/SOURCES/0314-macro-better-make-IN_SET-macro-use-const-arrays.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 87eaadf84215ef31e453d26c4935f82ec7ab1ef0 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 3 Dec 2013 16:41:06 +0100 -Subject: [PATCH] macro: better make IN_SET() macro use const arrays - -Conflicts: - src/shared/macro.h - -(cherry-picked from 059d9fbb) - -Resolves: #1147524 ---- - src/shared/macro.h | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) - -diff --git a/src/shared/macro.h b/src/shared/macro.h -index d4f92b6..27a02d4 100644 ---- a/src/shared/macro.h -+++ b/src/shared/macro.h -@@ -287,4 +287,18 @@ do { \ - #define SET_FLAG(v, flag, b) \ - (v) = (b) ? ((v) | (flag)) : ((v) & ~(flag)) - -+#define IN_SET(x, ...) \ -+ ({ \ -+ const typeof(x) _x = (x); \ -+ unsigned _i; \ -+ bool _found = false; \ -+ for (_i = 0; _i < sizeof((const typeof(_x)[]) { __VA_ARGS__ })/sizeof(const typeof(_x)); _i++) \ -+ if (((const typeof(_x)[]) { __VA_ARGS__ })[_i] == _x) { \ -+ _found = true; \ -+ break; \ -+ } \ -+ _found; \ -+ }) -+ -+ - #include "log.h" diff --git a/SOURCES/0315-macro-make-sure-we-can-use-IN_SET-also-with-complex-.patch b/SOURCES/0315-macro-make-sure-we-can-use-IN_SET-also-with-complex-.patch deleted file mode 100644 index 9cd02cc..0000000 --- a/SOURCES/0315-macro-make-sure-we-can-use-IN_SET-also-with-complex-.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 28a4b5dd0895ba41d1327dcaf824f8adffea73f7 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 12 Mar 2014 22:26:22 +0100 -Subject: [PATCH] macro: make sure we can use IN_SET() also with complex - function calls as first argument - -(cherry-picked from dc36d78e) - -Resolves: #1147524 ---- - src/shared/macro.h | 9 +++++---- - src/test/test-util.c | 1 - - 2 files changed, 5 insertions(+), 5 deletions(-) - -diff --git a/src/shared/macro.h b/src/shared/macro.h -index 27a02d4..21039eb 100644 ---- a/src/shared/macro.h -+++ b/src/shared/macro.h -@@ -287,13 +287,14 @@ do { \ - #define SET_FLAG(v, flag, b) \ - (v) = (b) ? ((v) | (flag)) : ((v) & ~(flag)) - --#define IN_SET(x, ...) \ -+#define IN_SET(x, y, ...) \ - ({ \ -- const typeof(x) _x = (x); \ -+ const typeof(y) _y = (y); \ -+ const typeof(_y) _x = (x); \ - unsigned _i; \ - bool _found = false; \ -- for (_i = 0; _i < sizeof((const typeof(_x)[]) { __VA_ARGS__ })/sizeof(const typeof(_x)); _i++) \ -- if (((const typeof(_x)[]) { __VA_ARGS__ })[_i] == _x) { \ -+ for (_i = 0; _i < 1 + sizeof((const typeof(_x)[]) { __VA_ARGS__ })/sizeof(const typeof(_x)); _i++) \ -+ if (((const typeof(_x)[]) { _y, __VA_ARGS__ })[_i] == _x) { \ - _found = true; \ - break; \ - } \ -diff --git a/src/test/test-util.c b/src/test/test-util.c -index c5762ed..8527f13 100644 ---- a/src/test/test-util.c -+++ b/src/test/test-util.c -@@ -571,7 +571,6 @@ static void test_fstab_node_to_udev_node(void) { - assert_se(streq(n, "/dev/disk/by-partuuid/037b9d94-148e-4ee4-8d38-67bfe15bb535")); - free(n); - -- - n = fstab_node_to_udev_node("PONIES=awesome"); - puts(n); - assert_se(streq(n, "PONIES=awesome")); diff --git a/SOURCES/0316-core-fix-property-changes-in-transient-units.patch b/SOURCES/0316-core-fix-property-changes-in-transient-units.patch deleted file mode 100644 index e1a7765..0000000 --- a/SOURCES/0316-core-fix-property-changes-in-transient-units.patch +++ /dev/null @@ -1,93 +0,0 @@ -From e091fcc1cc628b9e2192104c47e2be103bc8577a Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Mon, 17 Feb 2014 01:58:33 +0100 -Subject: [PATCH] core: fix property changes in transient units - -(cherry-picked from 6d2357247b198314d972932415d65a42f83a9b6e) - -Resolves: #1147524 ---- - src/core/dbus-unit.c | 3 --- - src/core/unit.c | 13 ++++++------- - 2 files changed, 6 insertions(+), 10 deletions(-) - -diff --git a/src/core/dbus-unit.c b/src/core/dbus-unit.c -index 2ea59b2..a185f5c 100644 ---- a/src/core/dbus-unit.c -+++ b/src/core/dbus-unit.c -@@ -962,9 +962,6 @@ int bus_unit_set_properties( - assert(u); - assert(iter); - -- if (u->transient) -- mode &= UNIT_RUNTIME; -- - /* We iterate through the array twice. First run we just check - * if all passed data is valid, second run actually applies - * it. This is to implement transaction-like behaviour without -diff --git a/src/core/unit.c b/src/core/unit.c -index 87a6385..e56971b 100644 ---- a/src/core/unit.c -+++ b/src/core/unit.c -@@ -2904,7 +2904,6 @@ static int drop_in_file(Unit *u, UnitSetPropertiesMode mode, const char *name, c - assert(name); - assert(_p); - assert(_q); -- assert(mode & (UNIT_PERSISTENT|UNIT_RUNTIME)); - - b = xescape(name, "/."); - if (!b) -@@ -2923,7 +2922,7 @@ static int drop_in_file(Unit *u, UnitSetPropertiesMode mode, const char *name, c - return -ENOENT; - - p = strjoin(c, "/", u->id, ".d", NULL); -- } else if (mode & UNIT_PERSISTENT) -+ } else if (mode == UNIT_PERSISTENT && !u->transient) - p = strjoin("/etc/systemd/system/", u->id, ".d", NULL); - else - p = strjoin("/run/systemd/system/", u->id, ".d", NULL); -@@ -2949,7 +2948,7 @@ int unit_write_drop_in(Unit *u, UnitSetPropertiesMode mode, const char *name, co - assert(name); - assert(data); - -- if (!(mode & (UNIT_PERSISTENT|UNIT_RUNTIME))) -+ if (!IN_SET(mode, UNIT_PERSISTENT, UNIT_RUNTIME)) - return 0; - - r = drop_in_file(u, mode, name, &p, &q); -@@ -2969,7 +2968,7 @@ int unit_write_drop_in_format(Unit *u, UnitSetPropertiesMode mode, const char *n - assert(name); - assert(format); - -- if (!(mode & (UNIT_PERSISTENT|UNIT_RUNTIME))) -+ if (!IN_SET(mode, UNIT_PERSISTENT, UNIT_RUNTIME)) - return 0; - - va_start(ap, format); -@@ -2992,7 +2991,7 @@ int unit_write_drop_in_private(Unit *u, UnitSetPropertiesMode mode, const char * - if (!UNIT_VTABLE(u)->private_section) - return -EINVAL; - -- if (!(mode & (UNIT_PERSISTENT|UNIT_RUNTIME))) -+ if (!IN_SET(mode, UNIT_PERSISTENT, UNIT_RUNTIME)) - return 0; - - ndata = strjoin("[", UNIT_VTABLE(u)->private_section, "]\n", data, NULL); -@@ -3011,7 +3010,7 @@ int unit_write_drop_in_private_format(Unit *u, UnitSetPropertiesMode mode, const - assert(name); - assert(format); - -- if (!(mode & (UNIT_PERSISTENT|UNIT_RUNTIME))) -+ if (!IN_SET(mode, UNIT_PERSISTENT, UNIT_RUNTIME)) - return 0; - - va_start(ap, format); -@@ -3030,7 +3029,7 @@ int unit_remove_drop_in(Unit *u, UnitSetPropertiesMode mode, const char *name) { - - assert(u); - -- if (!(mode & (UNIT_PERSISTENT|UNIT_RUNTIME))) -+ if (!IN_SET(mode, UNIT_PERSISTENT, UNIT_RUNTIME)) - return 0; - - r = drop_in_file(u, mode, name, &p, &q); diff --git a/SOURCES/0317-load-modules-properly-return-a-failing-error-code-if.patch b/SOURCES/0317-load-modules-properly-return-a-failing-error-code-if.patch deleted file mode 100644 index 1f5b8b5..0000000 --- a/SOURCES/0317-load-modules-properly-return-a-failing-error-code-if.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 85658c05781da6137bf8c93d1454aa588ab98696 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 18 Feb 2014 21:23:16 +0100 -Subject: [PATCH] load-modules: properly return a failing error code if some - module fails to load - -This is the missing part of b857193b1def5172e3641ca1d5bc9e08ae81aac4. - -(cherry-picked from 4b462d1a28461b302586b117736ef288fba1012f) - -Resolves: #1147524 ---- - src/modules-load/modules-load.c | 8 +++++--- - 1 file changed, 5 insertions(+), 3 deletions(-) - -diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c -index cba7c55..5d2ca4d 100644 ---- a/src/modules-load/modules-load.c -+++ b/src/modules-load/modules-load.c -@@ -306,9 +306,11 @@ int main(int argc, char *argv[]) { - r = k; - } - -- r = conf_files_list_nulstr(&files, ".conf", NULL, conf_file_dirs); -- if (r < 0) { -- log_error("Failed to enumerate modules-load.d files: %s", strerror(-r)); -+ k = conf_files_list_nulstr(&files, ".conf", NULL, conf_file_dirs); -+ if (k < 0) { -+ log_error("Failed to enumerate modules-load.d files: %s", strerror(-k)); -+ if (r == 0) -+ r = k; - goto finish; - } - diff --git a/SOURCES/0318-core-unit-fix-unit_add_target_dependencies-for-units.patch b/SOURCES/0318-core-unit-fix-unit_add_target_dependencies-for-units.patch deleted file mode 100644 index 26b22bd..0000000 --- a/SOURCES/0318-core-unit-fix-unit_add_target_dependencies-for-units.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 22eebbf0b5ab380173b3d8bab558719b1f408a2e Mon Sep 17 00:00:00 2001 -From: Daniel Mack -Date: Thu, 20 Feb 2014 13:29:54 +0100 -Subject: [PATCH] core/unit: fix unit_add_target_dependencies() for units with - no dependencies - -For units without any dependencies, r needs to be initialized to 0. -Otherwise, the return value of unit_add_target_dependencies() is -unspecified. - -Conflicts: - src/core/unit.c - -(cherry-picked from db57f3c6d11864f4227bb6734a0d509695a32a7d) - -Resolves: #1147524 ---- - src/core/unit.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/core/unit.c b/src/core/unit.c -index e56971b..b51e351 100644 ---- a/src/core/unit.c -+++ b/src/core/unit.c -@@ -923,8 +923,8 @@ static int unit_add_default_dependencies(Unit *u) { - - Unit *target; - Iterator i; -- int r; - unsigned k; -+ int r = 0; - - assert(u); - diff --git a/SOURCES/0319-man-there-is-no-ExecStopPre-for-service-units.patch b/SOURCES/0319-man-there-is-no-ExecStopPre-for-service-units.patch deleted file mode 100644 index 1bce347..0000000 --- a/SOURCES/0319-man-there-is-no-ExecStopPre-for-service-units.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 7d34b04e8dc4e1253d6360eeefbfaf686f58991b Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 21 Feb 2014 15:06:44 +0100 -Subject: [PATCH] man: there is no ExecStopPre= for service units - -https://bugs.freedesktop.org/show_bug.cgi?id=73177 - -(cherry-picked from c32acc96ef74d13d0059a680cdede5f05db1981a) - -Resolves: #1147524 ---- - 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 4fb21ba..80d6951 100644 ---- a/man/systemd.service.xml -+++ b/man/systemd.service.xml -@@ -678,7 +678,7 @@ ExecStart=/bin/echo $ONE $TWO ${TWO} - specified with - ExecStartPre=, - ExecStartPost=, -- ExecStopPre=, -+ ExecStop=, - ExecStopPost=, or - ExecReload=. - When the death of the process is a diff --git a/SOURCES/0320-man-document-that-per-interface-sysctl-variables-are.patch b/SOURCES/0320-man-document-that-per-interface-sysctl-variables-are.patch deleted file mode 100644 index 9a6d9a6..0000000 --- a/SOURCES/0320-man-document-that-per-interface-sysctl-variables-are.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 1c06bbbcbc55b2404cdece020411f06b28b4b2b3 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Sun, 23 Feb 2014 16:43:19 +0100 -Subject: [PATCH] man: document that per-interface sysctl variables are applied - as network interfaces show up - -https://bugzilla.redhat.com/show_bug.cgi?id=1062955 - -(cherry-picked from 8f03fd08911016d8bbcad5892b2c07b30a4c2306) - -Resolves: #1147524 ---- - man/sysctl.d.xml | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -diff --git a/man/sysctl.d.xml b/man/sysctl.d.xml -index 5544283..00a857b 100644 ---- a/man/sysctl.d.xml -+++ b/man/sysctl.d.xml -@@ -103,6 +103,16 @@ - /dev/null in - /etc/sysctl.d/ bearing the - same filename. -+ -+ The settings configured with -+ sysctl.d files will be applied -+ early on boot. The network interface-specific options -+ will also be applied individually for each network -+ interface as it shows up in the system. (More -+ specifically, that is -+ net.ipv4.conf.*, -+ net.ipv6.conf.*, -+ net.ipv4.neigh.* and net.ipv6.neigh.*) - - - diff --git a/SOURCES/0321-journal-downgrade-vaccuum-message-to-debug-level.patch b/SOURCES/0321-journal-downgrade-vaccuum-message-to-debug-level.patch deleted file mode 100644 index f136f6a..0000000 --- a/SOURCES/0321-journal-downgrade-vaccuum-message-to-debug-level.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 68272275166ad738ccf7c70ac0a6b8c72470c95f Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Sun, 23 Feb 2014 17:05:37 +0100 -Subject: [PATCH] journal: downgrade vaccuum message to debug level - -https://bugzilla.redhat.com/show_bug.cgi?id=1047148 - -(cherry-picked from 3bb621e1e66b704c0c2dcef31c66f7c646dd47f6) - -Resolves: #1147524 ---- - src/journal/journal-vacuum.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/journal/journal-vacuum.c b/src/journal/journal-vacuum.c -index d4a1c6c..88c67a1 100644 ---- a/src/journal/journal-vacuum.c -+++ b/src/journal/journal-vacuum.c -@@ -336,7 +336,7 @@ finish: - free(list[i].filename); - free(list); - -- log_info("Vacuuming done, freed %"PRIu64" bytes", freed); -+ log_debug("Vacuuming done, freed %"PRIu64" bytes", freed); - - return r; - } diff --git a/SOURCES/0322-logs-show-fix-corrupt-output-with-empty-messages.patch b/SOURCES/0322-logs-show-fix-corrupt-output-with-empty-messages.patch deleted file mode 100644 index bc7025c..0000000 --- a/SOURCES/0322-logs-show-fix-corrupt-output-with-empty-messages.patch +++ /dev/null @@ -1,42 +0,0 @@ -From b5915d4a5870668442d3ef08a3b1f6b0028ea97f Mon Sep 17 00:00:00 2001 -From: Uoti Urpala -Date: Thu, 20 Feb 2014 03:00:09 +0200 -Subject: [PATCH] logs-show: fix corrupt output with empty messages - -If a message had zero length, journalctl would print no newline, and -two output lines would be concatenated. Fix. The problem was -introduced in commit 31f7bf199452 ("logs-show: print multiline -messages"). Affected short and verbose output modes. - -Before fix: - -Feb 09 21:16:17 glyph dhclient[1323]: Feb 09 21:16:17 glyph NetworkManager[788]: (enp4s2): DHCPv4 state changed nbi -> preinit - -after: - -Feb 09 21:16:17 glyph dhclient[1323]: -Feb 09 21:16:17 glyph NetworkManager[788]: (enp4s2): DHCPv4 state changed nbi -> preinit - -(cherry-picked from 47d80904a1f72d559962cc5ad32fffd46672a34a) - -Resolves: #1147524 ---- - src/shared/logs-show.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c -index 7bb19b4..91eefb3 100644 ---- a/src/shared/logs-show.c -+++ b/src/shared/logs-show.c -@@ -121,6 +121,11 @@ static bool print_multiline(FILE *f, unsigned prefix, unsigned n_columns, Output - } - } - -+ /* A special case: make sure that we print a newline when -+ the message is empty. */ -+ if (message_len == 0) -+ fputs("\n", f); -+ - for (pos = message; - pos < message + message_len; - pos = end + 1, line++) { diff --git a/SOURCES/0323-journalctl-refuse-extra-arguments-with-verify-and-si.patch b/SOURCES/0323-journalctl-refuse-extra-arguments-with-verify-and-si.patch deleted file mode 100644 index 289f375..0000000 --- a/SOURCES/0323-journalctl-refuse-extra-arguments-with-verify-and-si.patch +++ /dev/null @@ -1,31 +0,0 @@ -From f951a4b2dbbfdb8c387a802d0ae56ce47470f679 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Wed, 26 Feb 2014 23:01:43 -0500 -Subject: [PATCH] journalctl: refuse extra arguments with --verify and similar - -Positional arguments only make sense with the default action. -For other actions, complain instead of ignoring them silently. - -(cherry-picked from 0b6b7c2004317da48e5bbd3078c5662d8f0061b6) - -Resolves: #1147524 ---- - src/journal/journalctl.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c -index 54e3ddd..3113e65 100644 ---- a/src/journal/journalctl.c -+++ b/src/journal/journalctl.c -@@ -584,6 +584,11 @@ static int parse_argv(int argc, char *argv[]) { - return -EINVAL; - } - -+ if (arg_action != ACTION_SHOW && optind < argc) { -+ log_error("Extraneous arguments starting with '%s'", argv[optind]); -+ return -EINVAL; -+ } -+ - return 1; - } - diff --git a/SOURCES/0324-journal-assume-that-next-entry-is-after-previous-ent.patch b/SOURCES/0324-journal-assume-that-next-entry-is-after-previous-ent.patch deleted file mode 100644 index 6186ad2..0000000 --- a/SOURCES/0324-journal-assume-that-next-entry-is-after-previous-ent.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 559cbd8367f3eb2c7ce49f923a688e7f83c5b439 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Thu, 27 Feb 2014 00:07:29 -0500 -Subject: [PATCH] journal: assume that next entry is after previous entry - -With a corrupted file, we can get in a situation where two entries -in the entry array point to the same object. Then journal_file_next_entry -will find the first one using generic_arrray_bisect, and try to move to -the second one, but since the address is the same, generic_array_get will -return the first one. journal_file_next_entry ends up in an infinite loop. - -https://bugzilla.redhat.com/show_bug.cgi?id=1047039 - -(cherry-picked from fb099c8d2af6620db2709e826a258089d10cdfe8) - -Resolves: #1147524 ---- - src/journal/journal-file.c | 26 ++++++++++++++++++++------ - 1 file changed, 20 insertions(+), 6 deletions(-) - -diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c -index 9dbd674..f101a1f 100644 ---- a/src/journal/journal-file.c -+++ b/src/journal/journal-file.c -@@ -1359,7 +1359,7 @@ int journal_file_append_entry(JournalFile *f, const dual_timestamp *ts, const st - } - - typedef struct ChainCacheItem { -- uint64_t first; /* the array at the begin of the chain */ -+ uint64_t first; /* the array at the beginning of the chain */ - uint64_t array; /* the cached array */ - uint64_t begin; /* the first item in the cached array */ - uint64_t total; /* the total number of items in all arrays before this one in the chain */ -@@ -1945,7 +1945,7 @@ int journal_file_next_entry( - direction_t direction, - Object **ret, uint64_t *offset) { - -- uint64_t i, n; -+ uint64_t i, n, ofs; - int r; - - assert(f); -@@ -1986,10 +1986,24 @@ int journal_file_next_entry( - } - - /* And jump to it */ -- return generic_array_get(f, -- le64toh(f->header->entry_array_offset), -- i, -- ret, offset); -+ r = generic_array_get(f, -+ le64toh(f->header->entry_array_offset), -+ i, -+ ret, &ofs); -+ if (r <= 0) -+ return r; -+ -+ if (p > 0 && -+ (direction == DIRECTION_DOWN ? ofs <= p : ofs >= p)) { -+ log_debug("%s: entry array corrupted at entry %"PRIu64, -+ f->path, i); -+ return -EBADMSG; -+ } -+ -+ if (offset) -+ *offset = ofs; -+ -+ return 1; - } - - int journal_file_skip_entry( diff --git a/SOURCES/0325-journal-forget-file-after-encountering-an-error.patch b/SOURCES/0325-journal-forget-file-after-encountering-an-error.patch deleted file mode 100644 index bce17cd..0000000 --- a/SOURCES/0325-journal-forget-file-after-encountering-an-error.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 1ff08dbb562d007bbca2323ab219324058fe8adb Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Thu, 27 Feb 2014 00:11:54 -0500 -Subject: [PATCH] journal: forget file after encountering an error - -If we encounter an inconsistency in a file, let's just -ignore it. Otherwise, after previous patch, we would try, -and fail, to use this file in every invocation of sd_journal_next -or sd_journal_previous that happens afterwards. - -(cherry-picked from a9a245c128af6c0418085062c60251bc51fa4a94) - -Resolves: #1147524 ---- - src/journal/sd-journal.c | 16 ++++++++++++---- - 1 file changed, 12 insertions(+), 4 deletions(-) - -diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c -index 67a77e6..8e3bb0c 100644 ---- a/src/journal/sd-journal.c -+++ b/src/journal/sd-journal.c -@@ -50,6 +50,8 @@ - - #define DEFAULT_DATA_THRESHOLD (64*1024) - -+static void remove_file_real(sd_journal *j, JournalFile *f); -+ - static bool journal_pid_changed(sd_journal *j) { - assert(j); - -@@ -895,6 +897,7 @@ static int real_journal_next(sd_journal *j, direction_t direction) { - r = next_beyond_location(j, f, direction, &o, &p); - if (r < 0) { - log_debug("Can't iterate through %s, ignoring: %s", f->path, strerror(-r)); -+ remove_file_real(j, f); - continue; - } else if (r == 0) - continue; -@@ -1368,7 +1371,7 @@ static int add_file(sd_journal *j, const char *prefix, const char *filename) { - } - - static int remove_file(sd_journal *j, const char *prefix, const char *filename) { -- char *path; -+ _cleanup_free_ char *path; - JournalFile *f; - - assert(j); -@@ -1380,10 +1383,17 @@ static int remove_file(sd_journal *j, const char *prefix, const char *filename) - return -ENOMEM; - - f = hashmap_get(j->files, path); -- free(path); - if (!f) - return 0; - -+ remove_file_real(j, f); -+ return 0; -+} -+ -+static void remove_file_real(sd_journal *j, JournalFile *f) { -+ assert(j); -+ assert(f); -+ - hashmap_remove(j->files, f->path); - - log_debug("File %s removed.", f->path); -@@ -1401,8 +1411,6 @@ static int remove_file(sd_journal *j, const char *prefix, const char *filename) - journal_file_close(f); - - j->current_invalidate_counter ++; -- -- return 0; - } - - static int add_directory(sd_journal *j, const char *prefix, const char *dirname) { diff --git a/SOURCES/0326-man-update-link-to-LSB.patch b/SOURCES/0326-man-update-link-to-LSB.patch deleted file mode 100644 index 64a213c..0000000 --- a/SOURCES/0326-man-update-link-to-LSB.patch +++ /dev/null @@ -1,36 +0,0 @@ -From da1a97ff0f6637cb2e1d68ab0289b0f1125dc4df Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Thu, 6 Mar 2014 08:10:19 -0500 -Subject: [PATCH] man: update link to LSB - -https://bugzilla.redhat.com/show_bug.cgi?id=1073402 - -(cherry-picked from 27d14fb331ba8144f99f4da2d13f15cf5c8b8a9f) - -Resolves: #1147524 ---- - man/daemon.xml | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/man/daemon.xml b/man/daemon.xml -index 105826a..418a7e9 100644 ---- a/man/daemon.xml -+++ b/man/daemon.xml -@@ -251,7 +251,7 @@ - detect service errors and problems. It - is recommended to follow the exit code - scheme as defined in the LSB -+ url="http://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/iniscrptact.html">LSB - recommendations for SysV init - scripts. - -@@ -394,7 +394,7 @@ - exclusively on boot (and manually by the - administrator) via SysV init scripts, as - detailed in the LSB -+ url="http://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/iniscrptact.html">LSB - Linux Standard Base Core - Specification. This method of - activation is supported ubiquitously on Linux diff --git a/SOURCES/0327-man-systemd-bootchart-fix-spacing-in-command.patch b/SOURCES/0327-man-systemd-bootchart-fix-spacing-in-command.patch deleted file mode 100644 index d3a958b..0000000 --- a/SOURCES/0327-man-systemd-bootchart-fix-spacing-in-command.patch +++ /dev/null @@ -1,29 +0,0 @@ -From a7711e81f0192e06fbc97705bf757410fc33724c Mon Sep 17 00:00:00 2001 -From: Zachary Cook -Date: Thu, 6 Mar 2014 03:49:49 -0500 -Subject: [PATCH] man: systemd-bootchart - fix spacing in command - -Use the same formatting as the systemd-analyze man page, so that man shows a space. - -(cherry-picked from 82ed60080d327d7301fcd55f5a1f8511f894b9d5) - -Resolves: #1147524 ---- - man/systemd-bootchart.xml | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/man/systemd-bootchart.xml b/man/systemd-bootchart.xml -index ae432b5..818afa1 100644 ---- a/man/systemd-bootchart.xml -+++ b/man/systemd-bootchart.xml -@@ -76,8 +76,8 @@ - in which order, and where possible problems - exist in the startup sequence of the system. - It is essentially a more detailed version of -- the systemd-analyze -- plot function. -+ the systemd-analyze plot -+ function. - - - Of course, bootchart can also be used at any diff --git a/SOURCES/0328-man-add-missing-comma.patch b/SOURCES/0328-man-add-missing-comma.patch deleted file mode 100644 index 91e4440..0000000 --- a/SOURCES/0328-man-add-missing-comma.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 958e9706f20d69608c703808731bb9ff523d8462 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Thu, 6 Mar 2014 23:54:13 -0500 -Subject: [PATCH] man: add missing comma - -marcosf0> missing comma in udevadm "see also" section - -(cherry-picked from 7d06ef0a5cd2f0a4e021d3d12f3841cce529e0f2) - -Resolves: #1147524 ---- - man/udevadm.xml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/man/udevadm.xml b/man/udevadm.xml -index ca3713f..6fc6783 100644 ---- a/man/udevadm.xml -+++ b/man/udevadm.xml -@@ -514,7 +514,7 @@ - See Also - - udev7 -- -+ , - - systemd-udevd.service8 - diff --git a/SOURCES/0329-units-Do-not-unescape-instance-name-in-systemd-backl.patch b/SOURCES/0329-units-Do-not-unescape-instance-name-in-systemd-backl.patch deleted file mode 100644 index 3f9d6c3..0000000 --- a/SOURCES/0329-units-Do-not-unescape-instance-name-in-systemd-backl.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 51aa47339565893e48a3533250d392fcdb80a675 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Thomas=20B=C3=A4chler?= -Date: Fri, 7 Mar 2014 01:50:34 +0100 -Subject: [PATCH] units: Do not unescape instance name in - systemd-backlight@.service - -The instance name is never escaped in the udev rule, but unescaped in the unit. -This results in the following error message on Asus boards: - - Failed to get backlight or LED device 'backlight:eeepc/wmi': No such file or directory - -(cherry-picked from 6c49212741253dae05b89d22374186f092ef1e5a) - -Resolves: #1147524 ---- - units/systemd-backlight@.service.in | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/units/systemd-backlight@.service.in b/units/systemd-backlight@.service.in -index 5caa5d5..e945d87 100644 ---- a/units/systemd-backlight@.service.in -+++ b/units/systemd-backlight@.service.in -@@ -6,7 +6,7 @@ - # (at your option) any later version. - - [Unit] --Description=Load/Save Screen Backlight Brightness of %I -+Description=Load/Save Screen Backlight Brightness of %i - Documentation=man:systemd-backlight@.service(8) - DefaultDependencies=no - RequiresMountsFor=/var/lib/systemd/backlight -@@ -17,5 +17,5 @@ Before=sysinit.target shutdown.target - [Service] - Type=oneshot - RemainAfterExit=yes --ExecStart=@rootlibexecdir@/systemd-backlight load %I --ExecStop=@rootlibexecdir@/systemd-backlight save %I -+ExecStart=@rootlibexecdir@/systemd-backlight load %i -+ExecStop=@rootlibexecdir@/systemd-backlight save %i diff --git a/SOURCES/0330-manager-flush-memory-stream-before-using-the-buffer.patch b/SOURCES/0330-manager-flush-memory-stream-before-using-the-buffer.patch deleted file mode 100644 index c3ad052..0000000 --- a/SOURCES/0330-manager-flush-memory-stream-before-using-the-buffer.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 0fca5aae90d5a4e292db8db7b9c31c8390799368 Mon Sep 17 00:00:00 2001 -From: Daniel Mack -Date: Fri, 7 Mar 2014 14:43:59 +0100 -Subject: [PATCH] manager: flush memory stream before using the buffer - -When the manager receives a SIGUSR2 signal, it opens a memory stream -with open_memstream(), uses the returned file handle for logging, and -dumps the logged content with log_dump(). - -However, the char* buffer is only safe to use after the file handle has -been flushed with fflush, as the man pages states: - - When the stream is closed (fclose(3)) or flushed (fflush(3)), the - locations pointed to by ptr and sizeloc are updated to contain, - respectively, a pointer to the buffer and the current size of the - buffer. - These values remain valid only as long as the caller performs no - further output on the stream. If further output is performed, then the - stream must again be flushed before trying to access these variables. - -Without that call, dump remains NULL and the daemon crashes in -log_dump(). - -Conflicts: - src/core/manager.c - -(cherry-picked from b2cdc6664ef6b56e47d38649d69b9943d9f9f5d0) - -Resolves: #1147524 ---- - src/core/manager.c | 17 +++++++++-------- - 1 file changed, 9 insertions(+), 8 deletions(-) - -diff --git a/src/core/manager.c b/src/core/manager.c -index 4ad26e1..e48ea36 100644 ---- a/src/core/manager.c -+++ b/src/core/manager.c -@@ -1536,11 +1536,12 @@ static int manager_process_signal_fd(Manager *m) { - } - - case SIGUSR2: { -- FILE *f; -- char *dump = NULL; -+ _cleanup_free_ char *dump = NULL; -+ _cleanup_fclose_ FILE *f = NULL; - size_t size; - -- if (!(f = open_memstream(&dump, &size))) { -+ f = open_memstream(&dump, &size); -+ if (!f) { - log_warning("Failed to allocate memory stream."); - break; - } -@@ -1549,16 +1550,16 @@ static int manager_process_signal_fd(Manager *m) { - manager_dump_jobs(m, f, "\t"); - - if (ferror(f)) { -- fclose(f); -- free(dump); - log_warning("Failed to write status stream"); - break; - } - -- fclose(f); -- log_dump(LOG_INFO, dump); -- free(dump); -+ if (fflush(f)) { -+ log_warning("Failed to flush status stream"); -+ break; -+ } - -+ log_dump(LOG_INFO, dump); - break; - } - diff --git a/SOURCES/0331-man-multiple-sleep-modes-are-to-be-separated-by-whit.patch b/SOURCES/0331-man-multiple-sleep-modes-are-to-be-separated-by-whit.patch deleted file mode 100644 index d52f697..0000000 --- a/SOURCES/0331-man-multiple-sleep-modes-are-to-be-separated-by-whit.patch +++ /dev/null @@ -1,63 +0,0 @@ -From ccbe3369a69af38dbf8fdf3a0a1b27ba534506ea Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 11 Mar 2014 05:23:39 +0100 -Subject: [PATCH] man: multiple sleep modes are to be separated by whitespace, - not commas - -As pointed out by Jason A. Donenfeld. - -Conflicts: - man/systemd-sleep.conf.xml - -(cherry-picked from 252094eb05c58270a0bc35b14ad30a126ddbb3bb) - -Resolves: #1147524 ---- - man/systemd-sleep.conf.xml | 18 ++++++++---------- - 1 file changed, 8 insertions(+), 10 deletions(-) - -diff --git a/man/systemd-sleep.conf.xml b/man/systemd-sleep.conf.xml -index dc4b0da..d0ea6d8 100644 ---- a/man/systemd-sleep.conf.xml -+++ b/man/systemd-sleep.conf.xml -@@ -127,10 +127,10 @@ along with systemd; If not, see . - systemd-suspend.service8, - systemd-hibernate.service8, or - systemd-hybrid-sleep.service8. -- More than one value can be specified by seperating -- multiple values with commas. They will be tried -+ More than one value can be specified by separating -+ multiple values with whitespace. They will be tried - in turn, until one is written without error. If -- neither suceeds, the operation will be aborted. -+ neither succeeds, the operation will be aborted. - - - -@@ -145,10 +145,10 @@ along with systemd; If not, see . - systemd-suspend.service8, - systemd-hibernate.service8, or - systemd-hybrid-sleep.service8. -- More than one value can be specified by seperating -- multiple values with commas. They will be tried -+ More than one value can be specified by separating -+ multiple values with whitespace. They will be tried - in turn, until one is written without error. If -- neither suceeds, the operation will be aborted. -+ neither succeeds, the operation will be aborted. - - - -@@ -160,10 +160,8 @@ along with systemd; If not, see . - Example: to exploit the freeze mode added - in Linux 3.9, one can use systemctl suspend - with -- --[Sleep] --SuspendState=freeze -- -+ [Sleep] -+SuspendState=freeze - - - diff --git a/SOURCES/0332-man-fix-description-of-systemctl-after-before.patch b/SOURCES/0332-man-fix-description-of-systemctl-after-before.patch deleted file mode 100644 index beb81e2..0000000 --- a/SOURCES/0332-man-fix-description-of-systemctl-after-before.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 603f2c62ba1a64aa22223b66dfdd455ca6589b91 Mon Sep 17 00:00:00 2001 -From: Andrey Borzenkov -Date: Fri, 21 Feb 2014 20:44:06 +0400 -Subject: [PATCH] man: fix description of systemctl --after/--before - -It was backward - --after fetches After property, so units shown really -come *before* unit given as argument. Same for --before. - -(cherry-picked from 4a77ca700d1841c2b8a86ed5b7f3495db61c236d) - -Resolves: #1147524 ---- - man/systemctl.xml | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/man/systemctl.xml b/man/systemctl.xml -index d1fda61..045d520 100644 ---- a/man/systemctl.xml -+++ b/man/systemctl.xml -@@ -176,8 +176,8 @@ systemctl start foo - - - -- Show which units are started after or before -- with list-dependencies, respectively. -+ Show after (before) which units the specified unit is started -+ with list-dependencies. - - - diff --git a/SOURCES/0333-udev-properly-detect-reference-to-unexisting-part-of.patch b/SOURCES/0333-udev-properly-detect-reference-to-unexisting-part-of.patch deleted file mode 100644 index 8969cb5..0000000 --- a/SOURCES/0333-udev-properly-detect-reference-to-unexisting-part-of.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 2e13dee991178518480d68e89d323666b047d182 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Mon, 24 Feb 2014 17:06:21 +0100 -Subject: [PATCH] udev: properly detect reference to unexisting part of - PROGRAM's result - -(cherry-picked from 66390abefae6530981446970ffd7ff4d1085e254) - -Resolves: #1147524 ---- - src/udev/udev-event.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c -index d69d7ba..aa7c793 100644 ---- a/src/udev/udev-event.c -+++ b/src/udev/udev-event.c -@@ -254,6 +254,8 @@ subst: - cpos++; - while (isspace(cpos[0])) - cpos++; -+ if (cpos[0] == '\0') -+ break; - } - if (i > 0) { - log_error("requested part of result string not found\n"); diff --git a/SOURCES/0334-gpt-auto-generator-don-t-return-OOM-on-parentless-de.patch b/SOURCES/0334-gpt-auto-generator-don-t-return-OOM-on-parentless-de.patch deleted file mode 100644 index ac3d6d0..0000000 --- a/SOURCES/0334-gpt-auto-generator-don-t-return-OOM-on-parentless-de.patch +++ /dev/null @@ -1,25 +0,0 @@ -From c8135d12561727f7ed8513cb5f113866ee963194 Mon Sep 17 00:00:00 2001 -From: Tomasz Torcz -Date: Wed, 12 Mar 2014 19:25:11 +0100 -Subject: [PATCH] gpt-auto-generator: don't return OOM on parentless devices - -(cherry-picked from 9c4495ca561624c2f0085507dd1288ed5f1247c5) - -Resolves: #1147524 ---- - src/gpt-auto-generator/gpt-auto-generator.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c -index 8436d26..6a4c9d8 100644 ---- a/src/gpt-auto-generator/gpt-auto-generator.c -+++ b/src/gpt-auto-generator/gpt-auto-generator.c -@@ -252,7 +252,7 @@ static int enumerate_partitions(struct udev *udev, dev_t dev) { - - parent = udev_device_get_parent(d); - if (!parent) -- return log_oom(); -+ return 0; - - r = udev_enumerate_add_match_parent(e, parent); - if (r < 0) diff --git a/SOURCES/0335-man-improve-wording-of-systemctl-s-after-before.patch b/SOURCES/0335-man-improve-wording-of-systemctl-s-after-before.patch deleted file mode 100644 index eaaf62b..0000000 --- a/SOURCES/0335-man-improve-wording-of-systemctl-s-after-before.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 8c346633426ec3476f87e7558407b75d9da1d5a4 Mon Sep 17 00:00:00 2001 -From: "Jason St. John" -Date: Mon, 17 Mar 2014 00:03:46 -0400 -Subject: [PATCH] man: improve wording of systemctl's --after/--before - -Commit 4a77ca7 was an attempt at fixing the wording of --after and --before, -but the new wording was unclear. - -Split the combined --after/--before section into a separate section for -each, explicitly state what each option does, and add information about -how these lists are generated. - -Reported-by: Andrey Borzenkov -Reported-by: Lennart Poettering - -(cherry-picked from 9029f64298cb70c12ecf638fddee7f41b056fcf1) - -Resolves: #1147524 ---- - man/systemctl.xml | 21 ++++++++++++++++++--- - 1 file changed, 18 insertions(+), 3 deletions(-) - -diff --git a/man/systemctl.xml b/man/systemctl.xml -index 045d520..cb63bb0 100644 ---- a/man/systemctl.xml -+++ b/man/systemctl.xml -@@ -173,12 +173,27 @@ systemctl start foo - - - -+ -+ -+ With list-dependencies, show the -+ units that are ordered before the specified unit. In other -+ words, list the units that are in the After= -+ directive of the specified unit, have the specified unit in -+ their Before= directive, or are otherwise -+ implicit dependencies of the specified unit. -+ -+ -+ -+ - - - -- Show after (before) which units the specified unit is started -- with list-dependencies. -- -+ With list-dependencies, show the -+ units that are ordered after the specified unit. In other -+ words, list the units that are in the Before= -+ directive of the specified unit, have the specified unit in -+ their After= directive, or otherwise depend -+ on the specified unit. - - - diff --git a/SOURCES/0336-cgroup-it-s-not-OK-to-invoke-alloca-in-loops.patch b/SOURCES/0336-cgroup-it-s-not-OK-to-invoke-alloca-in-loops.patch deleted file mode 100644 index 25952cb..0000000 --- a/SOURCES/0336-cgroup-it-s-not-OK-to-invoke-alloca-in-loops.patch +++ /dev/null @@ -1,80 +0,0 @@ -From aab1a9e316bfa55ab41ecad102c90c6b7eeac52e Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 18 Mar 2014 04:06:36 +0100 -Subject: [PATCH] cgroup: it's not OK to invoke alloca() in loops - -(cherry-picked from a641dcd9bf05418d6a6c165e1c0cff615b4a0f47) - -Resolves: #1147524 ---- - src/core/mount-setup.c | 20 ++++++++++++++------ - 1 file changed, 14 insertions(+), 6 deletions(-) - -diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c -index 4359f59..679f289 100644 ---- a/src/core/mount-setup.c -+++ b/src/core/mount-setup.c -@@ -210,10 +210,10 @@ int mount_setup_early(void) { - } - - int mount_cgroup_controllers(char ***join_controllers) { -- int r; -- char buf[LINE_MAX]; - _cleanup_set_free_free_ Set *controllers = NULL; - _cleanup_fclose_ FILE *f; -+ char buf[LINE_MAX]; -+ int r; - - /* Mount all available cgroup controllers that are built into the kernel. */ - -@@ -256,6 +256,7 @@ int mount_cgroup_controllers(char ***join_controllers) { - } - - for (;;) { -+ _cleanup_free_ char *options = NULL, *controller = NULL, *where = NULL; - MountPoint p = { - .what = "cgroup", - .type = "cgroup", -@@ -263,7 +264,6 @@ int mount_cgroup_controllers(char ***join_controllers) { - .mode = MNT_IN_CONTAINER, - }; - char ***k = NULL; -- _cleanup_free_ char *options = NULL, *controller; - - controller = set_steal_first(controllers); - if (!controller) -@@ -280,7 +280,7 @@ int mount_cgroup_controllers(char ***join_controllers) { - for (i = *k, j = *k; *i; i++) { - - if (!streq(*i, controller)) { -- char _cleanup_free_ *t; -+ _cleanup_free_ char *t; - - t = set_remove(controllers, *i); - if (!t) { -@@ -302,7 +302,11 @@ int mount_cgroup_controllers(char ***join_controllers) { - controller = NULL; - } - -- p.where = strappenda("/sys/fs/cgroup/", options); -+ where = strappend("/sys/fs/cgroup/", options); -+ if (!where) -+ return log_oom(); -+ -+ p.where = where; - p.options = options; - - r = mount_one(&p, true); -@@ -313,7 +317,11 @@ int mount_cgroup_controllers(char ***join_controllers) { - char **i; - - for (i = *k; *i; i++) { -- char *t = strappenda("/sys/fs/cgroup/", *i); -+ _cleanup_free_ char *t = NULL; -+ -+ t = strappend("/sys/fs/cgroup/", *i); -+ if (!t) -+ return log_oom(); - - r = symlink(options, t); - if (r < 0 && errno != EEXIST) { diff --git a/SOURCES/0337-core-don-t-try-to-relabel-mounts-before-we-loaded-th.patch b/SOURCES/0337-core-don-t-try-to-relabel-mounts-before-we-loaded-th.patch deleted file mode 100644 index bcb14c8..0000000 --- a/SOURCES/0337-core-don-t-try-to-relabel-mounts-before-we-loaded-th.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 5e102f2c8212a94b3a5221b5cf79eaafef693cc7 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Mon, 24 Mar 2014 21:04:02 +0100 -Subject: [PATCH] core: don't try to relabel mounts before we loaded the policy - -(cherry-picked from c4bfd1691f4d3e26d6d7f34dbca941e119956e8a) - -Resolves: #1147524 ---- - src/core/mount-setup.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c -index 679f289..cff83d3 100644 ---- a/src/core/mount-setup.c -+++ b/src/core/mount-setup.c -@@ -166,7 +166,10 @@ static int mount_one(const MountPoint *p, bool relabel) { - - /* The access mode here doesn't really matter too much, since - * the mounted file system will take precedence anyway. */ -- mkdir_p_label(p->where, 0755); -+ if (relabel) -+ mkdir_p_label(p->where, 0755); -+ else -+ mkdir_p(p->where, 0755); - - log_debug("Mounting %s to %s of type %s with options %s.", - p->what, diff --git a/SOURCES/0338-systemctl-kill-mode-is-long-long-gone-don-t-mention-.patch b/SOURCES/0338-systemctl-kill-mode-is-long-long-gone-don-t-mention-.patch deleted file mode 100644 index aa89da3..0000000 --- a/SOURCES/0338-systemctl-kill-mode-is-long-long-gone-don-t-mention-.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 597dd2168bb3e7f62842b07c9df1bb7c7c47b793 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 25 Mar 2014 00:31:48 +0100 -Subject: [PATCH] systemctl: --kill-mode is long long gone, don't mention it in - the man page - -(cherry-picked from 0088d63151e088d62104d88f866e9eb049091c22) - -Resolves: #1147524 ---- - man/systemctl.xml | 5 ++--- - shell-completion/bash/systemctl | 5 +---- - 2 files changed, 3 insertions(+), 7 deletions(-) - -diff --git a/man/systemctl.xml b/man/systemctl.xml -index cb63bb0..f68b606 100644 ---- a/man/systemctl.xml -+++ b/man/systemctl.xml -@@ -672,9 +672,8 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service - - Send a signal to one or more processes of the - unit. Use to select which -- process to kill. Use to select -- the kill mode and to select the -- signal to send. -+ process to kill. Use to select -+ the signal to send. - - - -diff --git a/shell-completion/bash/systemctl b/shell-completion/bash/systemctl -index efe8485..cbf0eb7 100644 ---- a/shell-completion/bash/systemctl -+++ b/shell-completion/bash/systemctl -@@ -74,7 +74,7 @@ _systemctl () { - [STANDALONE]='--all -a --reverse --after --before --defaults --fail --ignore-dependencies --failed --force -f --full -l --global - --help -h --no-ask-password --no-block --no-legend --no-pager --no-reload --no-wall - --quiet -q --privileged -P --system --user --version --runtime' -- [ARG]='--host -H --kill-mode --kill-who --property -p --signal -s --type -t --state --root' -+ [ARG]='--host -H --kill-who --property -p --signal -s --type -t --state --root' - ) - - local -A PROPS='CPUAccounting= MemoryAccounting= BlockIOAccounting= MemoryLimit= CPUShares= BlockIOWeight= DevicePolicy= DeviceAllow= BlockIOReadBandwidth= BlockIOWriteBandwidth= BlockIODeviceWeight=' -@@ -101,9 +101,6 @@ _systemctl () { - --kill-who) - comps='all control main' - ;; -- --kill-mode) -- comps='control-group process' -- ;; - --root) - comps=$(compgen -A directory -- "$cur" ) - compopt -o filenames diff --git a/SOURCES/0339-ask-password-when-the-user-types-a-overly-long-passw.patch b/SOURCES/0339-ask-password-when-the-user-types-a-overly-long-passw.patch deleted file mode 100644 index ba22ef7..0000000 --- a/SOURCES/0339-ask-password-when-the-user-types-a-overly-long-passw.patch +++ /dev/null @@ -1,34 +0,0 @@ -From e02c7fe6cff60803c19dcfe3c21c69bc9c8bdef8 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Tue, 25 Mar 2014 01:27:05 +0100 -Subject: [PATCH] ask-password: when the user types a overly long password, - beep and refuse -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Based on a similar patch from David Härdeman. - -(cherry-picked from 036eeac5a1799fa2c0ae11a14d8c667b5d303189) - -Resolves: #1147524 ---- - src/shared/ask-password-api.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/src/shared/ask-password-api.c b/src/shared/ask-password-api.c -index 4557155..25367d0 100644 ---- a/src/shared/ask-password-api.c -+++ b/src/shared/ask-password-api.c -@@ -207,6 +207,11 @@ int ask_password_tty( - if (ttyfd >= 0) - loop_write(ttyfd, "(no echo) ", 10, false); - } else { -+ if (p >= sizeof(passphrase)-1) { -+ loop_write(ttyfd, "\a", 1, false); -+ continue; -+ } -+ - passphrase[p++] = c; - - if (!silent_mode && ttyfd >= 0) diff --git a/SOURCES/0340-logind-don-t-print-error-if-devices-vanish-during-AC.patch b/SOURCES/0340-logind-don-t-print-error-if-devices-vanish-during-AC.patch deleted file mode 100644 index 3a196d3..0000000 --- a/SOURCES/0340-logind-don-t-print-error-if-devices-vanish-during-AC.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 02d57e30f6e8f0a1f0828d4ee0e1d3b87b54d8f6 Mon Sep 17 00:00:00 2001 -From: David Herrmann -Date: Wed, 2 Apr 2014 16:20:13 +0200 -Subject: [PATCH] logind: don't print error if devices vanish during ACL-init - -If a device is unplugged while we initialize it, we will get ENOENT for -ACL-init (and related stuff). We currently print errors then, which is -misleading. Print a debug-message early and continue. - -Conflicts: - src/login/logind-acl.c - -(cherry-picked from 8016b904849a2d2bd8b0171ed8493db5524b5ff7) - -Resolves: #1147524 ---- - src/login/logind-acl.c | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/src/login/logind-acl.c b/src/login/logind-acl.c -index 25abcbc..6582b8c 100644 ---- a/src/login/logind-acl.c -+++ b/src/login/logind-acl.c -@@ -283,8 +283,14 @@ int devnode_acl_all(struct udev *udev, - } - - SET_FOREACH(n, nodes, i) { -+ int k; -+ - log_debug("Fixing up ACLs at %s for seat %s", n, seat); -- r = devnode_acl(n, flush, del, old_uid, add, new_uid); -+ k = devnode_acl(n, flush, del, old_uid, add, new_uid); -+ if (k == -ENOENT) -+ log_debug("Device %s disappeared while setting ACLs", n); -+ else if (k < 0) -+ r = k; - } - - finish: diff --git a/SOURCES/0341-tty-ask-password-agent-return-negative-errno.patch b/SOURCES/0341-tty-ask-password-agent-return-negative-errno.patch deleted file mode 100644 index 8c2555c..0000000 --- a/SOURCES/0341-tty-ask-password-agent-return-negative-errno.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 2ae90f52f6ce48f24dcb585b8c0b02dc461cfc4e Mon Sep 17 00:00:00 2001 -From: Florian Albrechtskirchinger -Date: Thu, 3 Apr 2014 21:17:20 +0200 -Subject: [PATCH] tty-ask-password-agent: return negative errno - -Return negative errno in wall_tty_block(). get_ctty_devnr() already -returns a negative errno in case of failure, no need to negate it again. - -Reported-by: Simon - -(cherry-picked from ee0e4cca5ac37a094dfe1074907dae70c7b7701c) - -Resolves: #1147524 ---- - src/tty-ask-password-agent/tty-ask-password-agent.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/tty-ask-password-agent/tty-ask-password-agent.c b/src/tty-ask-password-agent/tty-ask-password-agent.c -index f463662..256c21d 100644 ---- a/src/tty-ask-password-agent/tty-ask-password-agent.c -+++ b/src/tty-ask-password-agent/tty-ask-password-agent.c -@@ -438,7 +438,7 @@ static int wall_tty_block(void) { - - r = get_ctty_devnr(0, &devnr); - if (r < 0) -- return -r; -+ return r; - - if (asprintf(&p, "/run/systemd/ask-password-block/%u:%u", major(devnr), minor(devnr)) < 0) - return -ENOMEM; diff --git a/SOURCES/0342-journal-cleanup-up-error-handling-in-update_catalog.patch b/SOURCES/0342-journal-cleanup-up-error-handling-in-update_catalog.patch deleted file mode 100644 index 103582f..0000000 --- a/SOURCES/0342-journal-cleanup-up-error-handling-in-update_catalog.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 4896a8507ea140f8f38bc88dc044b2e516a54cbf Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Fri, 11 Apr 2014 08:44:55 -0400 -Subject: [PATCH] journal: cleanup up error handling in update_catalog() - -- Negative/positive errno mixup caused duplicates not to be detected properly. - Now we get a warning about some duplicate entries in our own catalogs... -- Errors in update_catalog would be ignored, but they should not be. - -(cherry-picked from e3b9d9c8027a7c4c55cf1614e0fe9423fad69e8f) - -Resolves: #1147524 ---- - src/journal/catalog.c | 25 +++++++++++++------------ - src/journal/test-catalog.c | 3 ++- - 2 files changed, 15 insertions(+), 13 deletions(-) - -diff --git a/src/journal/catalog.c b/src/journal/catalog.c -index 90ca008..e5342be 100644 ---- a/src/journal/catalog.c -+++ b/src/journal/catalog.c -@@ -109,7 +109,7 @@ static int finish_item( - const char *payload) { - - ssize_t offset; -- CatalogItem *i; -+ _cleanup_free_ CatalogItem *i = NULL; - int r; - - assert(h); -@@ -129,13 +129,14 @@ static int finish_item( - i->offset = htole64((uint64_t) offset); - - r = hashmap_put(h, i, i); -- if (r == EEXIST) { -+ if (r == -EEXIST) { - log_warning("Duplicate entry for " SD_ID128_FORMAT_STR ".%s, ignoring.", - SD_ID128_FORMAT_VAL(id), language ? language : "C"); -- free(i); - return 0; -- } -+ } else if (r < 0) -+ return r; - -+ i = NULL; - return 0; - } - -@@ -348,8 +349,8 @@ error: - int catalog_update(const char* database, const char* root, const char* const* dirs) { - _cleanup_strv_free_ char **files = NULL; - char **f; -- Hashmap *h; - struct strbuf *sb = NULL; -+ _cleanup_hashmap_free_free_ Hashmap *h = NULL; - _cleanup_free_ CatalogItem *items = NULL; - CatalogItem *i; - Iterator j; -@@ -371,13 +372,17 @@ int catalog_update(const char* database, const char* root, const char* const* di - } - - STRV_FOREACH(f, files) { -- log_debug("reading file '%s'", *f); -- catalog_import_file(h, sb, *f); -+ log_debug("Reading file '%s'", *f); -+ r = catalog_import_file(h, sb, *f); -+ if (r < 0) { -+ log_error("Failed to import file '%s': %s.", -+ *f, strerror(-r)); -+ goto finish; -+ } - } - - if (hashmap_size(h) <= 0) { - log_info("No items in catalog."); -- r = 0; - goto finish; - } else - log_debug("Found %u items in catalog.", hashmap_size(h)); -@@ -408,11 +413,7 @@ int catalog_update(const char* database, const char* root, const char* const* di - log_debug("%s: wrote %u items, with %zu bytes of strings, %ld total size.", - database, n, sb->len, r); - -- r = 0; -- - finish: -- if (h) -- hashmap_free_free(h); - if (sb) - strbuf_cleanup(sb); - -diff --git a/src/journal/test-catalog.c b/src/journal/test-catalog.c -index 5db5bed..f021dbf 100644 ---- a/src/journal/test-catalog.c -+++ b/src/journal/test-catalog.c -@@ -126,7 +126,8 @@ int main(int argc, char *argv[]) { - - setlocale(LC_ALL, "de_DE.UTF-8"); - -- log_set_max_level(LOG_DEBUG); -+ log_parse_environment(); -+ log_open(); - - test_catalog_importing(); - diff --git a/SOURCES/0343-bash-completion-fix-__get_startable_units.patch b/SOURCES/0343-bash-completion-fix-__get_startable_units.patch deleted file mode 100644 index ae4700d..0000000 --- a/SOURCES/0343-bash-completion-fix-__get_startable_units.patch +++ /dev/null @@ -1,25 +0,0 @@ -From ab6c4755057a7d852f1eaed62920ef1b25a19507 Mon Sep 17 00:00:00 2001 -From: Dan Kilman -Date: Sun, 13 Apr 2014 18:06:13 +0300 -Subject: [PATCH] bash completion: fix __get_startable_units - -(cherry-picked from a163b64c4b08e8a4ad39a9a295acf3d1634024a3) - -Resolves: #1147524 ---- - shell-completion/bash/systemctl | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/shell-completion/bash/systemctl b/shell-completion/bash/systemctl -index cbf0eb7..c1cd416 100644 ---- a/shell-completion/bash/systemctl -+++ b/shell-completion/bash/systemctl -@@ -56,7 +56,7 @@ __get_all_units () { __systemctl $1 list-units --all \ - __get_active_units () { __systemctl $1 list-units \ - | { while read -r a b; do echo " $a"; done; }; } - __get_startable_units () { __systemctl $1 list-units --all -t service,timer,socket,mount,automount,path,snapshot,swap \ -- | { while read -r a b c d; do [[ $c == "inactive" || $c == "failed " ]] && echo " $a"; done; }; } -+ | { while read -r a b c d; do [[ $c == "inactive" || $c == "failed" ]] && echo " $a"; done; }; } - __get_failed_units () { __systemctl $1 list-units \ - | { while read -r a b c d; do [[ $c == "failed" ]] && echo " $a"; done; }; } - __get_enabled_units () { __systemctl $1 list-unit-files \ diff --git a/SOURCES/0344-core-check-the-right-variable-for-failed-open.patch b/SOURCES/0344-core-check-the-right-variable-for-failed-open.patch deleted file mode 100644 index 752e8fd..0000000 --- a/SOURCES/0344-core-check-the-right-variable-for-failed-open.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 31cd4f1513656008646ee542e451338112fc8158 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?=C5=81ukasz=20Stelmach?= -Date: Thu, 8 May 2014 12:57:26 +0200 -Subject: [PATCH] core: check the right variable for failed open() - -(cherry-picked from cd7affaeea16d3904354b810a292e594dfef25dd) - -Resolves: #1147524 ---- - src/core/cgroup.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/core/cgroup.c b/src/core/cgroup.c -index 32e2599..c215a86 100644 ---- a/src/core/cgroup.c -+++ b/src/core/cgroup.c -@@ -661,7 +661,7 @@ int manager_setup_cgroup(Manager *m) { - close_nointr_nofail(m->pin_cgroupfs_fd); - - m->pin_cgroupfs_fd = open(path, O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOCTTY|O_NONBLOCK); -- if (r < 0) { -+ if (m->pin_cgroupfs_fd < 0) { - log_error("Failed to open pin file: %m"); - return -errno; - } diff --git a/SOURCES/0345-util-allow-trailing-semicolons-on-define_trivial_cle.patch b/SOURCES/0345-util-allow-trailing-semicolons-on-define_trivial_cle.patch deleted file mode 100644 index 3c95a1c..0000000 --- a/SOURCES/0345-util-allow-trailing-semicolons-on-define_trivial_cle.patch +++ /dev/null @@ -1,209 +0,0 @@ -From 30725ba0d69c5ba935c64ce9c3892494687e4c9b Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Mon, 14 Oct 2013 04:59:26 +0200 -Subject: [PATCH] util: allow trailing semicolons on - define_trivial_cleanup_func lines - -Emacs C indenting really gets confused by these lines if they carry no -trailing semicolon, hence let's make this nicer for good old emacs. The -other macros which define functions already do this too, so let's copy -the scheme here. - -Also, let's use an uppercase name for the macro. So far our rough rule -was that macros that are totally not function-like (like this ones, -which define a function) are uppercase. (Well, admittedly it is a rough -rule only, for example function and variable decorators are all -lower-case SINCE THE CONSTANT YELLING IN THE SOURCES WOULD SUCK, and -also they at least got underscore prefixes.) Also, the macros that -define functions that we already have are all uppercase, so let's do the -same here... - -(cherry-picked from cd7affaeea16d3904354b810a292e594dfef25dd) - -Related: #1147524 ---- - src/gpt-auto-generator/gpt-auto-generator.c | 2 +- - src/journal/journal-internal.h | 2 +- - src/shared/fdset.h | 2 +- - src/shared/hashmap.h | 8 ++++++++ - src/shared/label.c | 4 ++-- - src/shared/set.h | 4 ++-- - src/shared/strv.h | 2 +- - src/shared/udev-util.h | 10 +++++----- - src/shared/util.h | 19 ++++++++++--------- - src/tmpfiles/tmpfiles.c | 2 +- - 10 files changed, 32 insertions(+), 23 deletions(-) - -diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c -index 6a4c9d8..eb281b5 100644 ---- a/src/gpt-auto-generator/gpt-auto-generator.c -+++ b/src/gpt-auto-generator/gpt-auto-generator.c -@@ -51,7 +51,7 @@ - - static const char *arg_dest = "/tmp"; - --define_trivial_cleanup_func(blkid_probe, blkid_free_probe) -+DEFINE_TRIVIAL_CLEANUP_FUNC(blkid_probe, blkid_free_probe); - #define _cleanup_blkid_freep_probe_ _cleanup_(blkid_free_probep) - - static int verify_gpt_partition(const char *node, sd_id128_t *type, unsigned *nr, char **fstype) { -diff --git a/src/journal/journal-internal.h b/src/journal/journal-internal.h -index 1bc912c..3355fca 100644 ---- a/src/journal/journal-internal.h -+++ b/src/journal/journal-internal.h -@@ -135,7 +135,7 @@ struct sd_journal { - char *journal_make_match_string(sd_journal *j); - void journal_print_header(sd_journal *j); - --define_trivial_cleanup_func(sd_journal*, sd_journal_close) -+DEFINE_TRIVIAL_CLEANUP_FUNC(sd_journal*, sd_journal_close); - #define _cleanup_journal_close_ _cleanup_(sd_journal_closep) - - #define JOURNAL_FOREACH_DATA_RETVAL(j, data, l, retval) \ -diff --git a/src/shared/fdset.h b/src/shared/fdset.h -index 6277e46..907acd7 100644 ---- a/src/shared/fdset.h -+++ b/src/shared/fdset.h -@@ -49,5 +49,5 @@ int fdset_iterate(FDSet *s, Iterator *i); - #define FDSET_FOREACH(fd, fds, i) \ - for ((i) = ITERATOR_FIRST, (fd) = fdset_iterate((fds), &(i)); (fd) >= 0; (fd) = fdset_iterate((fds), &(i))) - --define_trivial_cleanup_func(FDSet*, fdset_free) -+DEFINE_TRIVIAL_CLEANUP_FUNC(FDSet*, fdset_free); - #define _cleanup_fdset_free_ _cleanup_(fdset_freep) -diff --git a/src/shared/hashmap.h b/src/shared/hashmap.h -index 3d4f672..b912af8 100644 ---- a/src/shared/hashmap.h -+++ b/src/shared/hashmap.h -@@ -24,6 +24,7 @@ - #include - - #include "macro.h" -+#include "util.h" - - /* Pretty straightforward hash table implementation. As a minor - * optimization a NULL hashmap object will be treated as empty hashmap -@@ -104,3 +105,10 @@ char **hashmap_get_strv(Hashmap *h); - - #define HASHMAP_FOREACH_BACKWARDS(e, h, i) \ - for ((i) = ITERATOR_LAST, (e) = hashmap_iterate_backwards((h), &(i), NULL); (e); (e) = hashmap_iterate_backwards((h), &(i), NULL)) -+ -+DEFINE_TRIVIAL_CLEANUP_FUNC(Hashmap*, hashmap_free); -+DEFINE_TRIVIAL_CLEANUP_FUNC(Hashmap*, hashmap_free_free); -+DEFINE_TRIVIAL_CLEANUP_FUNC(Hashmap*, hashmap_free_free_free); -+#define _cleanup_hashmap_free_ _cleanup_(hashmap_freep) -+#define _cleanup_hashmap_free_free_ _cleanup_(hashmap_free_freep) -+#define _cleanup_hashmap_free_free_free_ _cleanup_(hashmap_free_free_freep) -diff --git a/src/shared/label.c b/src/shared/label.c -index 4dab93e..8f7dfb4 100644 ---- a/src/shared/label.c -+++ b/src/shared/label.c -@@ -40,8 +40,8 @@ - #include - #include - --define_trivial_cleanup_func(security_context_t, freecon); --define_trivial_cleanup_func(context_t, context_free); -+DEFINE_TRIVIAL_CLEANUP_FUNC(security_context_t, freecon); -+DEFINE_TRIVIAL_CLEANUP_FUNC(context_t, context_free); - - #define _cleanup_security_context_free_ _cleanup_(freeconp) - #define _cleanup_context_free_ _cleanup_(context_freep) -diff --git a/src/shared/set.h b/src/shared/set.h -index a291470..5612478 100644 ---- a/src/shared/set.h -+++ b/src/shared/set.h -@@ -73,7 +73,7 @@ char **set_get_strv(Set *s); - #define SET_FOREACH_BACKWARDS(e, s, i) \ - for ((i) = ITERATOR_LAST, (e) = set_iterate_backwards((s), &(i)); (e); (e) = set_iterate_backwards((s), &(i))) - --define_trivial_cleanup_func(Set*, set_free) --define_trivial_cleanup_func(Set*, set_free_free) -+DEFINE_TRIVIAL_CLEANUP_FUNC(Set*, set_free); -+DEFINE_TRIVIAL_CLEANUP_FUNC(Set*, set_free_free); - #define _cleanup_set_free_ _cleanup_(set_freep) - #define _cleanup_set_free_free_ _cleanup_(set_free_freep) -diff --git a/src/shared/strv.h b/src/shared/strv.h -index 4d117f8..f6fb033 100644 ---- a/src/shared/strv.h -+++ b/src/shared/strv.h -@@ -30,7 +30,7 @@ char *strv_find(char **l, const char *name) _pure_; - char *strv_find_prefix(char **l, const char *name) _pure_; - - void strv_free(char **l); --define_trivial_cleanup_func(char**, strv_free) -+DEFINE_TRIVIAL_CLEANUP_FUNC(char**, strv_free); - #define _cleanup_strv_free_ _cleanup_(strv_freep) - - char **strv_copy(char * const *l); -diff --git a/src/shared/udev-util.h b/src/shared/udev-util.h -index bff8f5f..27677af 100644 ---- a/src/shared/udev-util.h -+++ b/src/shared/udev-util.h -@@ -24,11 +24,11 @@ - #include "udev.h" - #include "util.h" - --define_trivial_cleanup_func(struct udev*, udev_unref) --define_trivial_cleanup_func(struct udev_device*, udev_device_unref) --define_trivial_cleanup_func(struct udev_enumerate*, udev_enumerate_unref) --define_trivial_cleanup_func(struct udev_event*, udev_event_unref) --define_trivial_cleanup_func(struct udev_rules*, udev_rules_unref) -+DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev*, udev_unref); -+DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_device*, udev_device_unref); -+DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_enumerate*, udev_enumerate_unref); -+DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_event*, udev_event_unref); -+DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_rules*, udev_rules_unref); - - #define _cleanup_udev_unref_ _cleanup_(udev_unrefp) - #define _cleanup_udev_device_unref_ _cleanup_(udev_device_unrefp) -diff --git a/src/shared/util.h b/src/shared/util.h -index 5a9bc99..d68f385 100644 ---- a/src/shared/util.h -+++ b/src/shared/util.h -@@ -558,11 +558,12 @@ static inline void freep(void *p) { - free(*(void**) p); - } - --#define define_trivial_cleanup_func(type, func) \ -- static inline void func##p(type *p) { \ -- if (*p) \ -- func(*p); \ -- } \ -+#define DEFINE_TRIVIAL_CLEANUP_FUNC(type, func) \ -+ static inline void func##p(type *p) { \ -+ if (*p) \ -+ func(*p); \ -+ } \ -+ struct __useless_struct_to_allow_trailing_semicolon__ - - static inline void closep(int *fd) { - if (*fd >= 0) -@@ -573,10 +574,10 @@ static inline void umaskp(mode_t *u) { - umask(*u); - } - --define_trivial_cleanup_func(FILE*, fclose) --define_trivial_cleanup_func(FILE*, pclose) --define_trivial_cleanup_func(DIR*, closedir) --define_trivial_cleanup_func(FILE*, endmntent) -+DEFINE_TRIVIAL_CLEANUP_FUNC(FILE*, fclose); -+DEFINE_TRIVIAL_CLEANUP_FUNC(FILE*, pclose); -+DEFINE_TRIVIAL_CLEANUP_FUNC(DIR*, closedir); -+DEFINE_TRIVIAL_CLEANUP_FUNC(FILE*, endmntent); - - #define _cleanup_free_ _cleanup_(freep) - #define _cleanup_close_ _cleanup_(closep) -diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c -index df6c99a..9917514 100644 ---- a/src/tmpfiles/tmpfiles.c -+++ b/src/tmpfiles/tmpfiles.c -@@ -999,7 +999,7 @@ static void item_free(Item *i) { - free(i); - } - --define_trivial_cleanup_func(Item*, item_free) -+DEFINE_TRIVIAL_CLEANUP_FUNC(Item*, item_free); - #define _cleanup_item_free_ _cleanup_(item_freep) - - static bool item_equal(Item *a, Item *b) { diff --git a/SOURCES/0346-man-sd_journal_send-does-nothing-when-journald-is-no.patch b/SOURCES/0346-man-sd_journal_send-does-nothing-when-journald-is-no.patch deleted file mode 100644 index 9e76321..0000000 --- a/SOURCES/0346-man-sd_journal_send-does-nothing-when-journald-is-no.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 4dd641efa81998ed328fd2c74be8beee7aa32dad Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Fri, 9 May 2014 08:39:25 -0400 -Subject: [PATCH] man: sd_journal_send does nothing when journald is not - available - -https://bugzilla.redhat.com/show_bug.cgi?id=1096067 - -(cherry-picked from bdf9fc1a940e342afb7a78075984419cb3bc3135) - -Resolves: #1147524 ---- - man/sd_journal_print.xml | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/man/sd_journal_print.xml b/man/sd_journal_print.xml -index a716cc3..d934b0a 100644 ---- a/man/sd_journal_print.xml -+++ b/man/sd_journal_print.xml -@@ -218,6 +218,11 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid( - errno-style error code. The - errno3 - variable itself is not altered. -+ -+ If -+ systemd-journald8 -+ is not running (the socket is not present), those -+ functions do nothing, and also return 0. - - - diff --git a/SOURCES/0347-man-clarify-that-the-ExecReload-command-should-be-sy.patch b/SOURCES/0347-man-clarify-that-the-ExecReload-command-should-be-sy.patch deleted file mode 100644 index 19bf9a7..0000000 --- a/SOURCES/0347-man-clarify-that-the-ExecReload-command-should-be-sy.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 191c7ee3810782c8968def5b23e46b442a8f530d Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 16 May 2014 01:33:22 +0200 -Subject: [PATCH] man: clarify that the ExecReload= command should be - synchronous - -http://lists.freedesktop.org/archives/systemd-devel/2014-May/019054.html - -(cherry-picked from 33169701b0640d3629d4c36cf8c71dc26d2cb7e1) - -Resolves: #1147524 ---- - man/systemd.service.xml | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) - -diff --git a/man/systemd.service.xml b/man/systemd.service.xml -index 80d6951..8df4b87 100644 ---- a/man/systemd.service.xml -+++ b/man/systemd.service.xml -@@ -525,6 +525,20 @@ ExecStart=/bin/echo $ONE $TWO ${TWO} - following: - - /bin/kill -HUP $MAINPID -+ -+ Note however that reloading a -+ daemon by sending a signal (as with -+ the example line above) is usually not -+ a good choice, because this is an -+ asynchronous operation and hence not -+ suitable to order reloads of multiple -+ services against each other. It is -+ strongly recommended to set -+ ExecReload= to a -+ command that no only triggers a -+ configuration reload of the daemon, -+ but also synchronously waits for it -+ complete. - - - diff --git a/SOURCES/0348-conf-parser-never-consider-it-an-error-if-we-cannot-.patch b/SOURCES/0348-conf-parser-never-consider-it-an-error-if-we-cannot-.patch deleted file mode 100644 index c64d9d5..0000000 --- a/SOURCES/0348-conf-parser-never-consider-it-an-error-if-we-cannot-.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 762f7d479be5217a2109dbf0f97fe82e1155e6ee Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Thu, 22 May 2014 16:47:46 +0900 -Subject: [PATCH] conf-parser: never consider it an error if we cannot load a - drop-in file because it is missing - -After all, we want to be able to boot with /etc empty one day... - -(cherry-picked from 9f43a07f10639c5b41b45448e551e43914eefe32) - -Resolves: #1147524 ---- - src/shared/conf-parser.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c -index 6085d33..db71168 100644 ---- a/src/shared/conf-parser.c -+++ b/src/shared/conf-parser.c -@@ -320,8 +320,8 @@ int config_parse(const char *unit, - if (!f) { - f = ours = fopen(filename, "re"); - if (!f) { -- log_error("Failed to open configuration file '%s': %m", filename); -- return -errno; -+ log_full(errno == ENOENT ? LOG_DEBUG : LOG_ERR, "Failed to open configuration file '%s': %m", filename); -+ return errno == ENOENT ? 0 : -errno; - } - } - diff --git a/SOURCES/0349-socket-properly-handle-if-our-service-vanished-durin.patch b/SOURCES/0349-socket-properly-handle-if-our-service-vanished-durin.patch deleted file mode 100644 index 3b16964..0000000 --- a/SOURCES/0349-socket-properly-handle-if-our-service-vanished-durin.patch +++ /dev/null @@ -1,30 +0,0 @@ -From e1c7d367b8523ec8c9ef3deb81a1cfd879944171 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Thu, 22 May 2014 16:56:21 +0900 -Subject: [PATCH] socket: properly handle if our service vanished during - runtime - -(cherry-picked from 640ace4a8de907994a1b95f6d368c3e6a8fcf60f) - -Resolves: #1147524 ---- - src/core/socket.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/src/core/socket.c b/src/core/socket.c -index 35fc204..958d063 100644 ---- a/src/core/socket.c -+++ b/src/core/socket.c -@@ -1610,6 +1610,12 @@ static void socket_enter_running(Socket *s, int cfd) { - } - - if (!pending) { -+ if (!UNIT_ISSET(s->service)) { -+ log_error_unit(UNIT(s)->id, "%s: service to activate vanished, refusing activation.", UNIT(s)->id); -+ r = -ENOENT; -+ goto fail; -+ } -+ - r = manager_add_job(UNIT(s)->manager, JOB_START, UNIT_DEREF(s->service), JOB_REPLACE, true, &error, NULL); - if (r < 0) - goto fail; diff --git a/SOURCES/0350-Do-not-unescape-unit-names-in-Install-section.patch b/SOURCES/0350-Do-not-unescape-unit-names-in-Install-section.patch deleted file mode 100644 index 14c7012..0000000 --- a/SOURCES/0350-Do-not-unescape-unit-names-in-Install-section.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 5db48e390d876be7e00c3403953d7fe80ff6c87b Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Mon, 26 May 2014 20:09:45 +0200 -Subject: [PATCH] Do not unescape unit names in [Install] section - -https://bugs.freedesktop.org/show_bug.cgi?id=49316 - -(cherry-picked from 000f6e5667eb4f73e137cbd0d7395a9f9db7728a) - -Resolves: #1147524 ---- - src/shared/conf-parser.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c -index db71168..b356687 100644 ---- a/src/shared/conf-parser.c -+++ b/src/shared/conf-parser.c -@@ -670,7 +670,7 @@ int config_parse_strv(const char *unit, - FOREACH_WORD_QUOTED(w, l, rvalue, state) { - _cleanup_free_ char *n; - -- n = cunescape_length(w, l); -+ n = strndup(w, l); - if (!n) - return log_oom(); - diff --git a/SOURCES/0351-util-ignore_file-should-not-allow-files-ending-with.patch b/SOURCES/0351-util-ignore_file-should-not-allow-files-ending-with.patch deleted file mode 100644 index 80fdab8..0000000 --- a/SOURCES/0351-util-ignore_file-should-not-allow-files-ending-with.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 45914d5301d694730965872962fc71b9d11f9b3d Mon Sep 17 00:00:00 2001 -From: Thomas Hindoe Paaboel Andersen -Date: Sat, 31 May 2014 21:36:23 +0200 -Subject: [PATCH] util: ignore_file should not allow files ending with '~' - -ignore_file currently allows any file ending with '~' while it -seems that the opposite was intended: -a228a22fda4faa9ecb7c5a5e499980c8ae5d2a08 - -(cherry-picked from 93f1a06374e335e8508d89e1bdaadf45be6ab777) - -Resolves: #1147524 ---- - src/shared/util.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/shared/util.c b/src/shared/util.c -index 9f25b15..1590c3a 100644 ---- a/src/shared/util.c -+++ b/src/shared/util.c -@@ -1502,7 +1502,7 @@ bool ignore_file(const char *filename) { - assert(filename); - - if (endswith(filename, "~")) -- return false; -+ return true; - - return ignore_file_allow_backup(filename); - } diff --git a/SOURCES/0352-core-fix-invalid-free-in-killall.patch b/SOURCES/0352-core-fix-invalid-free-in-killall.patch deleted file mode 100644 index 93a0721..0000000 --- a/SOURCES/0352-core-fix-invalid-free-in-killall.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 250a6ce38605fe172541fb75e8d64132f2ec38d4 Mon Sep 17 00:00:00 2001 -From: Andreas Henriksson -Date: Fri, 13 Jun 2014 18:48:19 +0200 -Subject: [PATCH] core: fix invalid free() in killall() - -static int killall(....) in ./src/core/killall.c tries to get "s" -initialized by calling get_process_comm(...) which calls -read_one_line_file(...) which if it fails will mean it is left -uninitialized. -It is then used in argument to strna(s) call where it is -dereferenced(!), in addition to nothing else initializing it before -the scope it is in finishes. - -(cherry-picked from 3e09eb5c83e56bc0184bd9d9c44f76047464f77c) - -Resolves: #1147524 ---- - src/core/killall.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/core/killall.c b/src/core/killall.c -index e395050..967dac0 100644 ---- a/src/core/killall.c -+++ b/src/core/killall.c -@@ -167,7 +167,7 @@ static int killall(int sig, Set *pids) { - continue; - - if (sig == SIGKILL) { -- _cleanup_free_ char *s; -+ _cleanup_free_ char *s = NULL; - - get_process_comm(pid, &s); - log_notice("Sending SIGKILL to PID %lu (%s).", (unsigned long) pid, strna(s)); diff --git a/SOURCES/0353-install-fix-invalid-free-in-unit_file_mask.patch b/SOURCES/0353-install-fix-invalid-free-in-unit_file_mask.patch deleted file mode 100644 index c964279..0000000 --- a/SOURCES/0353-install-fix-invalid-free-in-unit_file_mask.patch +++ /dev/null @@ -1,31 +0,0 @@ -From b1de3eb93bfdc4cf3872d9e1005166bb9867b0b2 Mon Sep 17 00:00:00 2001 -From: Andreas Henriksson -Date: Fri, 13 Jun 2014 18:48:18 +0200 -Subject: [PATCH] install: fix invalid free() in unit_file_mask() - -int unit_file_mask(...) in ./src/shared/install.c calls -get_config_path(...) which can in 4 error cases return without setting -"ret", and thus "prefix" can be uninitialized when unit_file_mask(...) -finishes (which it does directly after the error is returned from -get_config_path(...)). - -(cherry-picked from 223217749e57996336d5730b0a28716cca56d45d) - -Resolves: #1147524 ---- - src/shared/install.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/shared/install.c b/src/shared/install.c -index dd5e22b..1662c5f 100644 ---- a/src/shared/install.c -+++ b/src/shared/install.c -@@ -598,7 +598,7 @@ int unit_file_mask( - unsigned *n_changes) { - - char **i; -- _cleanup_free_ char *prefix; -+ _cleanup_free_ char *prefix = NULL; - int r; - - assert(scope >= 0); diff --git a/SOURCES/0354-unit-name-fix-detection-of-unit-templates-instances.patch b/SOURCES/0354-unit-name-fix-detection-of-unit-templates-instances.patch deleted file mode 100644 index 0305b54..0000000 --- a/SOURCES/0354-unit-name-fix-detection-of-unit-templates-instances.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 14b393f9d9b7caffcd48557c6bd4eb63de4942ad Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Mon, 16 Jun 2014 17:01:26 +0200 -Subject: [PATCH] unit-name: fix detection of unit templates/instances - -We need to check for the last dot, not the first one in a unit name, for -the suffix. Correct that. - -(cherry-picked from 6ef9eeed61a291cc42b7d911f5cf5a4deca742a3) - -Resolves: #1147524 ---- - src/shared/unit-name.c | 16 ++++++++++++---- - 1 file changed, 12 insertions(+), 4 deletions(-) - -diff --git a/src/shared/unit-name.c b/src/shared/unit-name.c -index bc8094d..577f7e7 100644 ---- a/src/shared/unit-name.c -+++ b/src/shared/unit-name.c -@@ -334,7 +334,7 @@ char *unit_name_path_unescape(const char *f) { - } - - bool unit_name_is_template(const char *n) { -- const char *p; -+ const char *p, *e; - - assert(n); - -@@ -342,11 +342,15 @@ bool unit_name_is_template(const char *n) { - if (!p) - return false; - -- return p[1] == '.'; -+ e = strrchr(p+1, '.'); -+ if (!e) -+ return false; -+ -+ return e == p + 1; - } - - bool unit_name_is_instance(const char *n) { -- const char *p; -+ const char *p, *e; - - assert(n); - -@@ -354,7 +358,11 @@ bool unit_name_is_instance(const char *n) { - if (!p) - return false; - -- return p[1] != '.'; -+ e = strrchr(p+1, '.'); -+ if (!e) -+ return false; -+ -+ return e > p + 1; - } - - char *unit_name_replace_instance(const char *f, const char *i) { diff --git a/SOURCES/0355-journald-make-MaxFileSec-really-default-to-1month.patch b/SOURCES/0355-journald-make-MaxFileSec-really-default-to-1month.patch deleted file mode 100644 index 0206426..0000000 --- a/SOURCES/0355-journald-make-MaxFileSec-really-default-to-1month.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 72c01067d266a49796b5c64018b2d8c92840255a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Micha=C5=82=20Bartoszkiewicz?= -Date: Thu, 26 Jun 2014 22:11:35 +0200 -Subject: [PATCH] journald: make MaxFileSec really default to 1month - -journald.conf(5) states that the default for MaxFileSec is one month, -but the code didn't respect that. - -(cherry-picked from e150e82097211f09b911c7784a89ef9efed713ca) - -Resolves: #1147524 ---- - 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 1fcb3d5..a289a50 100644 ---- a/src/journal/journald-server.c -+++ b/src/journal/journald-server.c -@@ -67,6 +67,7 @@ - #define DEFAULT_SYNC_INTERVAL_USEC (5*USEC_PER_MINUTE) - #define DEFAULT_RATE_LIMIT_INTERVAL (30*USEC_PER_SEC) - #define DEFAULT_RATE_LIMIT_BURST 1000 -+#define DEFAULT_MAX_FILE_USEC USEC_PER_MONTH - - #define RECHECK_AVAILABLE_SPACE_USEC (30*USEC_PER_SEC) - -@@ -1476,6 +1477,8 @@ int server_init(Server *s) { - - s->forward_to_syslog = true; - -+ s->max_file_usec = DEFAULT_MAX_FILE_USEC; -+ - s->max_level_store = LOG_DEBUG; - s->max_level_syslog = LOG_DEBUG; - s->max_level_kmsg = LOG_NOTICE; diff --git a/SOURCES/0356-bootchart-it-s-not-OK-to-return-1-from-a-main-progra.patch b/SOURCES/0356-bootchart-it-s-not-OK-to-return-1-from-a-main-progra.patch deleted file mode 100644 index d999614..0000000 --- a/SOURCES/0356-bootchart-it-s-not-OK-to-return-1-from-a-main-progra.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 131d8e2cf65eb3c6dfc691676ca6f0a55ae44d71 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Mon, 11 Aug 2014 18:23:47 +0200 -Subject: [PATCH] bootchart: it's not OK to return -1 from a main program - -(cherry-picked from 4155f7d4be5053d5f34a26e5437fd85e1fe00fa3) - -Resolves: #1147524 ---- - src/bootchart/bootchart.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/bootchart/bootchart.c b/src/bootchart/bootchart.c -index 14ccd3e..4a8d6c2 100644 ---- a/src/bootchart/bootchart.c -+++ b/src/bootchart/bootchart.c -@@ -346,8 +346,8 @@ int main(int argc, char *argv[]) { - - sampledata = new0(struct list_sample_data, 1); - if (sampledata == NULL) { -- log_error("Failed to allocate memory for a node: %m"); -- return -1; -+ log_oom(); -+ return EXIT_FAILURE; - } - - sampledata->sampletime = gettime_ns(); diff --git a/SOURCES/0357-journald-Fix-off-by-one-error-in-Missed-X-kernel-mes.patch b/SOURCES/0357-journald-Fix-off-by-one-error-in-Missed-X-kernel-mes.patch deleted file mode 100644 index de08892..0000000 --- a/SOURCES/0357-journald-Fix-off-by-one-error-in-Missed-X-kernel-mes.patch +++ /dev/null @@ -1,30 +0,0 @@ -From db22c5d0a16eb30b78cdeef927df8c2d0b895ef1 Mon Sep 17 00:00:00 2001 -From: Eelco Dolstra -Date: Wed, 6 Aug 2014 13:14:51 +0200 -Subject: [PATCH] journald: Fix off-by-one error in "Missed X kernel messages" - warning - -On receiving a message, "kernel_seqnum" is set to "serial + 1". So -subtracting 1 will cause messages like "Missed 0 kernel messages", -which should be "Missed 1 kernel messages". - -(cherry-picked from b9c488f60050248b35640f28e4d00958702ba1c3) - -Resolves: #1147524 ---- - src/journal/journald-kmsg.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/journal/journald-kmsg.c b/src/journal/journald-kmsg.c -index e393cb7..0073a33 100644 ---- a/src/journal/journald-kmsg.c -+++ b/src/journal/journald-kmsg.c -@@ -152,7 +152,7 @@ static void dev_kmsg_record(Server *s, char *p, size_t l) { - /* Did we lose any? */ - if (serial > *s->kernel_seqnum) - server_driver_message(s, SD_MESSAGE_JOURNAL_MISSED, "Missed %"PRIu64" kernel messages", -- serial - *s->kernel_seqnum - 1); -+ serial - *s->kernel_seqnum); - - /* Make sure we never read this one again. Note that - * we always store the next message serial we expect diff --git a/SOURCES/0358-man-drop-references-to-removed-and-obsolete-systemct.patch b/SOURCES/0358-man-drop-references-to-removed-and-obsolete-systemct.patch deleted file mode 100644 index 66f3547..0000000 --- a/SOURCES/0358-man-drop-references-to-removed-and-obsolete-systemct.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 38786feb38a6d7b8a3fa3e5d9a184f06d8fd7802 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 15 Aug 2014 02:41:14 +0200 -Subject: [PATCH] man: drop references to removed and obsolete 'systemctl load' - command - -(cherry-picked from d0a3fb7556d77c44c2bc38a560e99d4ad0abcf33) - -Resolves: #1147524 ---- - man/systemctl.xml | 6 ++---- - 1 file changed, 2 insertions(+), 4 deletions(-) - -diff --git a/man/systemctl.xml b/man/systemctl.xml -index f68b606..d2430ee 100644 ---- a/man/systemctl.xml -+++ b/man/systemctl.xml -@@ -602,8 +602,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service - file. - - This command should not be confused with the -- daemon-reload or load -- commands. -+ daemon-reload command. - - - -@@ -1163,8 +1162,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service - tree. While the daemon is being reloaded, all sockets systemd - listens on on behalf of user configuration will stay - accessible. This command should not be confused -- with the load or -- reload commands. -+ with the reload command. - - - diff --git a/SOURCES/0359-units-fix-BindsTo-logic-when-applied-relative-to-ser.patch b/SOURCES/0359-units-fix-BindsTo-logic-when-applied-relative-to-ser.patch deleted file mode 100644 index 85804ad..0000000 --- a/SOURCES/0359-units-fix-BindsTo-logic-when-applied-relative-to-ser.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 469d48cf685bd0157fa44ff7ebd3bd0302746ab0 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Mon, 18 Aug 2014 22:21:42 +0200 -Subject: [PATCH] units: fix BindsTo= logic when applied relative to services - with Type=oneshot -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Start jobs for Type=oneshot units are successful when the unit state -transition activating → inactive took place. In such a case all units -that BindsTo= on it previously would continue to run, even though the unit -they dependet on was actually already gone. - -(cherry-picked from ff50244582bf69e8489bba6ce59a21663d7f8274) - -Resolves: #1147524 ---- - src/core/unit.c | 48 ++++++++++++++++++++++++++++++++++++++++++++---- - 1 file changed, 44 insertions(+), 4 deletions(-) - -diff --git a/src/core/unit.c b/src/core/unit.c -index b51e351..f221b9a 100644 ---- a/src/core/unit.c -+++ b/src/core/unit.c -@@ -1302,12 +1302,44 @@ static void unit_check_unneeded(Unit *u) { - if (unit_active_or_pending(other)) - return; - -- log_info_unit(u->id, "Service %s is not needed anymore. Stopping.", u->id); -+ log_info_unit(u->id, "Unit %s is not needed anymore. Stopping.", u->id); - - /* Ok, nobody needs us anymore. Sniff. Then let's commit suicide */ - manager_add_job(u->manager, JOB_STOP, u, JOB_FAIL, true, NULL, NULL); - } - -+static void unit_check_binds_to(Unit *u) { -+ bool stop = false; -+ Unit *other; -+ Iterator i; -+ -+ assert(u); -+ -+ if (u->job) -+ return; -+ -+ if (unit_active_state(u) != UNIT_ACTIVE) -+ return; -+ -+ SET_FOREACH(other, u->dependencies[UNIT_BINDS_TO], i) { -+ if (other->job) -+ continue; -+ -+ if (!UNIT_IS_INACTIVE_OR_FAILED(unit_active_state(other))) -+ continue; -+ -+ stop = true; -+ } -+ -+ if (!stop) -+ return; -+ -+ log_info_unit(u->id, "Unit %s is bound to inactive service. Stopping, too.", u->id); -+ -+ /* A unit we need to run is gone. Sniff. Let's stop this. */ -+ manager_add_job(u->manager, JOB_STOP, u, JOB_FAIL, true, NULL, NULL); -+} -+ - static void retroactively_start_dependencies(Unit *u) { - Iterator i; - Unit *other; -@@ -1611,11 +1643,19 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su - manager_recheck_journal(m); - unit_trigger_notify(u); - -- /* Maybe we finished startup and are now ready for being -- * stopped because unneeded? */ -- if (u->manager->n_reloading <= 0) -+ if (u->manager->n_reloading <= 0) { -+ /* Maybe we finished startup and are now ready for -+ * being stopped because unneeded? */ - unit_check_unneeded(u); - -+ /* Maybe we finished startup, but something we needed -+ * has vanished? Let's die then. (This happens when -+ * something BindsTo= to a Type=oneshot unit, as these -+ * units go directly from starting to inactive, -+ * without ever entering started.) */ -+ unit_check_binds_to(u); -+ } -+ - unit_add_to_dbus_queue(u); - unit_add_to_gc_queue(u); - } diff --git a/SOURCES/0360-core-don-t-allow-enabling-if-unit-is-masked.patch b/SOURCES/0360-core-don-t-allow-enabling-if-unit-is-masked.patch deleted file mode 100644 index 37ebbf8..0000000 --- a/SOURCES/0360-core-don-t-allow-enabling-if-unit-is-masked.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 0fb9d07643a9e9e84c61a6a62f4c2b7d52e4d96f Mon Sep 17 00:00:00 2001 -From: Jan Synacek -Date: Tue, 7 Oct 2014 13:27:38 +0200 -Subject: [PATCH] core: don't allow enabling if unit is masked - -(cherry-picked from f7101b7368dfe41dbc8b7203e06133cccb589c01) - -Resolves: #1149299 ---- - src/shared/install.c | 13 +++++++++++++ - 1 file changed, 13 insertions(+) - -diff --git a/src/shared/install.c b/src/shared/install.c -index 1662c5f..7a29798 100644 ---- a/src/shared/install.c -+++ b/src/shared/install.c -@@ -1520,6 +1520,19 @@ int unit_file_enable( - return r; - - STRV_FOREACH(i, files) { -+ UnitFileState state; -+ -+ state = unit_file_get_state(scope, root_dir, *i); -+ if (state < 0) { -+ log_error("Failed to get unit file state for %s: %s", *i, strerror(-state)); -+ return state; -+ } -+ -+ if (state == UNIT_FILE_MASKED || state == UNIT_FILE_MASKED_RUNTIME) { -+ log_error("Failed to enable unit: Unit %s is masked", *i); -+ return -ENOTSUP; -+ } -+ - r = install_info_add_auto(&c, *i); - if (r < 0) - return r; diff --git a/SOURCES/0361-man-systemctl-document-enable-on-masked-units.patch b/SOURCES/0361-man-systemctl-document-enable-on-masked-units.patch deleted file mode 100644 index adeb1d9..0000000 --- a/SOURCES/0361-man-systemctl-document-enable-on-masked-units.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 091b32bd93acd3e7be844684771ab2248b97637b Mon Sep 17 00:00:00 2001 -From: Jan Synacek -Date: Wed, 8 Oct 2014 13:43:02 +0200 -Subject: [PATCH] man/systemctl: document enable on masked units - -Related: #1149299 ---- - man/systemctl.xml | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/man/systemctl.xml b/man/systemctl.xml -index d2430ee..b894511 100644 ---- a/man/systemctl.xml -+++ b/man/systemctl.xml -@@ -862,6 +862,9 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service - the system, or for all future logins of all users, or only this - boot. Note that in the last case, no systemd daemon - configuration is reloaded. -+ -+ Using enable on masked units -+ results in an error. - - - -@@ -999,8 +1002,8 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service - /dev/null, making it impossible to - start them. This is a stronger version of - disable, since it prohibits all kinds of -- activation of the unit, including manual activation. Use -- this option with care. This honors the -+ activation of the unit, including enablement and manual -+ activation. Use this option with care. This honors the - option, to only mask temporarily - until the next reoobt of the system. - diff --git a/SOURCES/0362-core-do-not-segfault-if-proc-swaps-cannot-be-opened.patch b/SOURCES/0362-core-do-not-segfault-if-proc-swaps-cannot-be-opened.patch deleted file mode 100644 index 20d9792..0000000 --- a/SOURCES/0362-core-do-not-segfault-if-proc-swaps-cannot-be-opened.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 4537b962be32aa0a2f49741454f168801ed7c683 Mon Sep 17 00:00:00 2001 -From: Matt Mullins -Date: Mon, 24 Feb 2014 15:03:52 -0800 -Subject: [PATCH] core: do not segfault if /proc/swaps cannot be opened - -The refactoring in f84b1b1ff9b1261 ('core: do not segfault if swap -activity happens when /proc/swaps is not open') caused -swap_dispatch_reload and swap_enumerate to continue even if fopen() -failed with ENOENT. - -This should instead be modified to return from swap_dispatch_reload and -swap_enumerate, rather than continuing to load the list of swaps when -m->proc_swaps is NULL. - -https://bugzilla.redhat.com/show_bug.cgi?id=1069393 - -RHEL (and fedora) only - -Resolves: #1151239 ---- - src/core/swap.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/core/swap.c b/src/core/swap.c -index b72034f..36ef88b 100644 ---- a/src/core/swap.c -+++ b/src/core/swap.c -@@ -1075,7 +1075,7 @@ static int open_proc_swaps(Manager *m) { - - m->proc_swaps = fopen("/proc/swaps", "re"); - if (!m->proc_swaps) -- return (errno == ENOENT) ? 0 : -errno; -+ return -errno; - - m->swap_watch.type = WATCH_SWAP; - m->swap_watch.fd = fileno(m->proc_swaps); -@@ -1098,7 +1098,7 @@ int swap_dispatch_reload(Manager *m) { - - r = open_proc_swaps(m); - if (r < 0) -- return r; -+ return (r == -ENOENT) ? 0 : r; - - return swap_fd_event(m, EPOLLPRI); - } -@@ -1251,7 +1251,7 @@ static int swap_enumerate(Manager *m) { - - r = open_proc_swaps(m); - if (r < 0) -- return r; -+ return (r == -ENOENT) ? 0 : r; - - r = swap_load_proc_swaps(m, false); - if (r < 0) diff --git a/SOURCES/0363-man-we-don-t-have-Wanted-dependency.patch b/SOURCES/0363-man-we-don-t-have-Wanted-dependency.patch deleted file mode 100644 index ca23995..0000000 --- a/SOURCES/0363-man-we-don-t-have-Wanted-dependency.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 49beb7d21d269f0feeea6a80145e1cde0d499548 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Wed, 15 Oct 2014 09:28:31 +0200 -Subject: [PATCH] man: we don't have 'Wanted' dependency - -(Cherry-picked from 3e883473a0f36c220fc45ecf61d6878c9ac308b4) - -Resolves: #1152487 ---- - man/systemd.unit.xml | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml -index c500953..62db219 100644 ---- a/man/systemd.unit.xml -+++ b/man/systemd.unit.xml -@@ -175,10 +175,10 @@ - foo.service.wants/ may exist. All - unit files symlinked from such a directory are - implicitly added as dependencies of type -- Wanted= to the unit. This is useful -+ Wants= to the unit. This is useful - to hook units into the start-up of other units, - without having to modify their unit files. For details -- about the semantics of Wanted=, see -+ about the semantics of Wants=, see - below. The preferred way to create symlinks in the - .wants/ directory of a unit file - is with the enable command of the diff --git a/SOURCES/0364-environment-append-unit_id-to-error-messages-regardi.patch b/SOURCES/0364-environment-append-unit_id-to-error-messages-regardi.patch deleted file mode 100644 index c06f01d..0000000 --- a/SOURCES/0364-environment-append-unit_id-to-error-messages-regardi.patch +++ /dev/null @@ -1,132 +0,0 @@ -From 432496f644241d282d706285181a0b94c7c788f5 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Fri, 17 Oct 2014 11:46:01 +0200 -Subject: [PATCH] environment: append unit_id to error messages regarding - EnvironmentFile - -(cherry-picked from 7491ccf2cb237a2a88b831b2c7374ba2bb255cba) -Conflicts: - src/core/execute.c - -Resolves: #1147691 ---- - src/core/execute.c | 6 +++--- - src/core/execute.h | 2 +- - src/shared/env-util.c | 13 ++++++++++--- - src/shared/env-util.h | 2 +- - src/test/test-fileio.c | 2 +- - 5 files changed, 16 insertions(+), 9 deletions(-) - -diff --git a/src/core/execute.c b/src/core/execute.c -index 0894156..be99149 100644 ---- a/src/core/execute.c -+++ b/src/core/execute.c -@@ -1071,7 +1071,7 @@ int exec_spawn(ExecCommand *command, - } else - socket_fd = -1; - -- r = exec_context_load_environment(context, &files_env); -+ r = exec_context_load_environment(context, unit_id, &files_env); - if (r < 0) { - log_struct_unit(LOG_ERR, - unit_id, -@@ -1776,7 +1776,7 @@ void exec_command_free_array(ExecCommand **c, unsigned n) { - } - } - --int exec_context_load_environment(const ExecContext *c, char ***l) { -+int exec_context_load_environment(const ExecContext *c, const char *unit_id, char ***l) { - char **i, **r = NULL; - - assert(c); -@@ -1833,7 +1833,7 @@ int exec_context_load_environment(const ExecContext *c, char ***l) { - } - /* Log invalid environment variables with filename */ - if (p) -- p = strv_env_clean_log(p, pglob.gl_pathv[n]); -+ p = strv_env_clean_log(p, unit_id, pglob.gl_pathv[n]); - - if (r == NULL) - r = p; -diff --git a/src/core/execute.h b/src/core/execute.h -index 5055890..b66bd5f 100644 ---- a/src/core/execute.h -+++ b/src/core/execute.h -@@ -200,7 +200,7 @@ void exec_context_tmp_dirs_done(ExecContext *c); - void exec_context_dump(ExecContext *c, FILE* f, const char *prefix); - void exec_context_tty_reset(const ExecContext *context); - --int exec_context_load_environment(const ExecContext *c, char ***l); -+int exec_context_load_environment(const ExecContext *c, const char *unit_id, char ***l); - - bool exec_context_may_touch_console(ExecContext *c); - void exec_context_serialize(const ExecContext *c, Unit *u, FILE *f); -diff --git a/src/shared/env-util.c b/src/shared/env-util.c -index 7976881..5b5da48 100644 ---- a/src/shared/env-util.c -+++ b/src/shared/env-util.c -@@ -29,6 +29,13 @@ - #include "env-util.h" - #include "def.h" - -+#define log_full_unit(level, unit, ...) log_meta_object(level, __FILE__, __LINE__, __func__, getpid() == 1 ? "UNIT=" : "USER_UNIT=", unit, __VA_ARGS__) -+#define log_debug_unit(unit, ...) log_full_unit(LOG_DEBUG, unit, __VA_ARGS__) -+#define log_info_unit(unit, ...) log_full_unit(LOG_INFO, unit, __VA_ARGS__) -+#define log_notice_unit(unit, ...) log_full_unit(LOG_NOTICE, unit, __VA_ARGS__) -+#define log_warning_unit(unit, ...) log_full_unit(LOG_WARNING, unit, __VA_ARGS__) -+#define log_error_unit(unit, ...) log_full_unit(LOG_ERR, unit, __VA_ARGS__) -+ - #define VALID_CHARS_ENV_NAME \ - DIGITS LETTERS \ - "_" -@@ -375,7 +382,7 @@ char *strv_env_get(char **l, const char *name) { - return strv_env_get_n(l, name, strlen(name)); - } - --char **strv_env_clean_log(char **e, const char *message) { -+char **strv_env_clean_log(char **e, const char *unit_id, const char *message) { - char **p, **q; - int k = 0; - -@@ -385,7 +392,7 @@ char **strv_env_clean_log(char **e, const char *message) { - - if (!env_assignment_is_valid(*p)) { - if (message) -- log_error("Ignoring invalid environment '%s': %s", *p, message); -+ log_error_unit(unit_id, "Ignoring invalid environment '%s': %s", *p, message); - free(*p); - continue; - } -@@ -412,5 +419,5 @@ char **strv_env_clean_log(char **e, const char *message) { - } - - char **strv_env_clean(char **e) { -- return strv_env_clean_log(e, NULL); -+ return strv_env_clean_log(e, NULL, NULL); - } -diff --git a/src/shared/env-util.h b/src/shared/env-util.h -index 8d2114b..5ea82ad 100644 ---- a/src/shared/env-util.h -+++ b/src/shared/env-util.h -@@ -30,7 +30,7 @@ bool env_assignment_is_valid(const char *e); - - bool strv_env_is_valid(char **e); - char **strv_env_clean(char **l); --char **strv_env_clean_log(char **e, const char *message); -+char **strv_env_clean_log(char **e, const char *unit_id, const char *message); - - bool strv_env_name_or_assignment_is_valid(char **l); - -diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c -index 06f3e28..c92bb6e 100644 ---- a/src/test/test-fileio.c -+++ b/src/test/test-fileio.c -@@ -88,7 +88,7 @@ static void test_parse_env_file(void) { - assert_se(streq(a[9], "ten=")); - assert_se(a[10] == NULL); - -- strv_env_clean_log(a, "test"); -+ strv_env_clean_log(a, NULL, "test"); - - k = 0; - STRV_FOREACH(i, b) { diff --git a/SOURCES/0365-udevd-add-event-timeout-commandline-option.patch b/SOURCES/0365-udevd-add-event-timeout-commandline-option.patch deleted file mode 100644 index 67e1048..0000000 --- a/SOURCES/0365-udevd-add-event-timeout-commandline-option.patch +++ /dev/null @@ -1,125 +0,0 @@ -From 3f13db324c715ab9dd0a514490160448ed3ae7ee Mon Sep 17 00:00:00 2001 -From: Hannes Reinecke -Date: Tue, 29 Jul 2014 09:06:14 +0200 -Subject: [PATCH] udevd: add --event-timeout commandline option - -Some events take longer than the default 30 seconds. Killing those -events will leave the machine halfway configured. - -Add a commandline option '--event-timeout' to handle these cases. - -(cherry-picked from 9719859c07aa13539ed2cd4b31972cd30f678543) - -Conflicts: - src/udev/udevd.c - -Resolves: #1154778 ---- - man/systemd-udevd.service.xml | 19 +++++++++++++++++++ - src/udev/udevd.c | 14 ++++++++++++-- - 2 files changed, 31 insertions(+), 2 deletions(-) - -diff --git a/man/systemd-udevd.service.xml b/man/systemd-udevd.service.xml -index 7fce300..c3a2cb9 100644 ---- a/man/systemd-udevd.service.xml -+++ b/man/systemd-udevd.service.xml -@@ -42,6 +42,7 @@ - - - -+ - - - -@@ -90,6 +91,15 @@ - - - -+ -+ -+ Wait for the event to finish up to the given -+ number of seconds. After this time the event will -+ be terminated. Default is 30. -+ -+ -+ -+ - - - Specify when systemd-udevd should resolve names of users and groups. -@@ -155,6 +165,15 @@ - - - -+ udev.event-timeout= -+ rd.udev.event-timeout= -+ -+ Wait for events to finish up to the given number -+ of seconds. This option might be useful if events are -+ terminated due to a timeout in large configurations. -+ -+ -+ - net.ifnames= - - Network interfaces are renamed to give them predictable names -diff --git a/src/udev/udevd.c b/src/udev/udevd.c -index 3d5feb4..6241549 100644 ---- a/src/udev/udevd.c -+++ b/src/udev/udevd.c -@@ -72,6 +72,7 @@ static bool reload; - static int children; - static int children_max; - static int exec_delay; -+static int event_timeout = 30; - static sigset_t sigmask_orig; - static UDEV_LIST(event_list); - static UDEV_LIST(worker_list); -@@ -287,6 +288,9 @@ static void worker_new(struct event *event) - if (exec_delay > 0) - udev_event->exec_delay = exec_delay; - -+ if (event_timeout != 30) -+ udev_event->timeout_usec = event_timeout * USEC_PER_SEC; -+ - /* apply rules, create node, symlinks */ - udev_event_execute_rules(udev_event, rules, &sigmask_orig); - -@@ -884,6 +888,8 @@ static void kernel_cmdline_options(struct udev *udev) - children_max = strtoul(opt + 18, NULL, 0); - } else if (startswith(opt, "udev.exec-delay=")) { - exec_delay = strtoul(opt + 16, NULL, 0); -+ } else if (startswith(opt, "udev.event-timeout=")) { -+ event_timeout = strtoul(opt + 16, NULL, 0); - } - - free(s); -@@ -903,6 +909,7 @@ int main(int argc, char *argv[]) - { "debug", no_argument, NULL, 'D' }, - { "children-max", required_argument, NULL, 'c' }, - { "exec-delay", required_argument, NULL, 'e' }, -+ { "event-timeout", required_argument, NULL, 't' }, - { "resolve-names", required_argument, NULL, 'N' }, - { "help", no_argument, NULL, 'h' }, - { "version", no_argument, NULL, 'V' }, -@@ -946,6 +953,9 @@ int main(int argc, char *argv[]) - case 'e': - exec_delay = strtoul(optarg, NULL, 0); - break; -+ case 't': -+ event_timeout = strtoul(optarg, NULL, 0); -+ break; - case 'D': - debug = true; - log_set_max_level(LOG_DEBUG); -@@ -1278,8 +1288,8 @@ int main(int argc, char *argv[]) - if (worker->state != WORKER_RUNNING) - continue; - -- if ((now(CLOCK_MONOTONIC) - worker->event_start_usec) > 30 * 1000 * 1000) { -- log_error("worker [%u] %s timeout; kill it\n", worker->pid, -+ if ((now(CLOCK_MONOTONIC) - worker->event_start_usec) > event_timeout * USEC_PER_SEC) { -+ log_error("worker [%u] %s timeout; kill it", worker->pid, - worker->event ? worker->event->devpath : ""); - kill(worker->pid, SIGKILL); - worker->state = WORKER_KILLED; diff --git a/SOURCES/0366-selinux-fix-potential-double-free-crash-in-child-pro.patch b/SOURCES/0366-selinux-fix-potential-double-free-crash-in-child-pro.patch deleted file mode 100644 index 389e24f..0000000 --- a/SOURCES/0366-selinux-fix-potential-double-free-crash-in-child-pro.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 161ad7deb00e31cb47fdc29f2e795690ffa66be4 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Mon, 13 Oct 2014 13:41:06 +0200 -Subject: [PATCH] selinux: fix potential double free crash in child process - -Before returning from function we should reset ret to NULL, thus cleanup -function is nop. - -Also context_str() returns pointer to a string containing context but not a -copy, hence we must make copy it explicitly. - -Related: #1113790 ---- - src/shared/label.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/src/shared/label.c b/src/shared/label.c -index 8f7dfb4..52aea4f 100644 ---- a/src/shared/label.c -+++ b/src/shared/label.c -@@ -270,7 +270,8 @@ int label_get_child_mls_label(int socket_fd, const char *exe, char **label) { - } - - freecon(mycon); -- mycon = context_str(bcon); -+ mycon = NULL; -+ mycon = strdup(context_str(bcon)); - if (!mycon) { - r = -errno; - goto out; -@@ -284,8 +285,8 @@ int label_get_child_mls_label(int socket_fd, const char *exe, char **label) { - } - - *label = ret; -+ ret = NULL; - r = 0; -- - out: - if (r < 0 && security_getenforce() == 1) - return r; diff --git a/SOURCES/0367-selinux-pass-flag-to-correct-exec_spawn.patch b/SOURCES/0367-selinux-pass-flag-to-correct-exec_spawn.patch deleted file mode 100644 index ccdb2c0..0000000 --- a/SOURCES/0367-selinux-pass-flag-to-correct-exec_spawn.patch +++ /dev/null @@ -1,42 +0,0 @@ -From c230e5e8efe72cf4137bf29a197059e5a23bb532 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Mon, 13 Oct 2014 13:57:08 +0200 -Subject: [PATCH] selinux: pass flag to correct exec_spawn - -We want to spawn service with label passed by remote peer and not processes -spawned by socket unit itself. - -RHEL-only patch - -Related: #1113790 ---- - src/core/service.c | 2 +- - src/core/socket.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/core/service.c b/src/core/service.c -index 7ef2b3a..635a953 100644 ---- a/src/core/service.c -+++ b/src/core/service.c -@@ -1867,7 +1867,7 @@ static int service_spawn( - apply_chroot, - apply_tty_stdin, - UNIT(s)->manager->confirm_spawn, -- false, -+ s->socket_fd_selinux_context_net, - UNIT(s)->manager->cgroup_supported, - path, - UNIT(s)->id, -diff --git a/src/core/socket.c b/src/core/socket.c -index 958d063..1a91700 100644 ---- a/src/core/socket.c -+++ b/src/core/socket.c -@@ -1234,7 +1234,7 @@ static int socket_spawn(Socket *s, ExecCommand *c, pid_t *_pid) { - true, - true, - UNIT(s)->manager->confirm_spawn, -- s->selinux_context_from_net, -+ false, - UNIT(s)->manager->cgroup_supported, - UNIT(s)->cgroup_path, - UNIT(s)->id, diff --git a/SOURCES/0368-selinux-set-selinux-context-applied-on-exec-before-c.patch b/SOURCES/0368-selinux-set-selinux-context-applied-on-exec-before-c.patch deleted file mode 100644 index 2cffafb..0000000 --- a/SOURCES/0368-selinux-set-selinux-context-applied-on-exec-before-c.patch +++ /dev/null @@ -1,89 +0,0 @@ -From e7c4dc07d35a10dc90f013572da6d25d17311d0a Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Mon, 13 Oct 2014 16:12:30 +0200 -Subject: [PATCH] selinux: set selinux context applied on exec() before closing - all fds - -We need original socket_fd around otherwise label_get_child_mls_label fails with --EINVAL return code. - -Related: #1113790 ---- - src/core/execute.c | 56 +++++++++++++++++++++++++++++------------------------- - 1 file changed, 30 insertions(+), 26 deletions(-) - -diff --git a/src/core/execute.c b/src/core/execute.c -index be99149..06713cc 100644 ---- a/src/core/execute.c -+++ b/src/core/execute.c -@@ -1401,6 +1401,36 @@ int exec_spawn(ExecCommand *command, - } - } - -+#ifdef HAVE_SELINUX -+ if (apply_permissions) { -+ if (use_selinux()) { -+ if (context->selinux_context) { -+ err = setexeccon(context->selinux_context); -+ if (err < 0 && !context->selinux_context_ignore) { -+ r = EXIT_SELINUX_CONTEXT; -+ goto fail_child; -+ } -+ } -+ -+ if (selinux_context_net && socket_fd >= 0) { -+ _cleanup_free_ char *label = NULL; -+ -+ err = label_get_child_mls_label(socket_fd, command->path, &label); -+ if (err < 0) { -+ r = EXIT_SELINUX_CONTEXT; -+ goto fail_child; -+ } -+ -+ err = setexeccon(label); -+ if (err < 0) { -+ r = EXIT_SELINUX_CONTEXT; -+ goto fail_child; -+ } -+ } -+ } -+ } -+#endif -+ - /* We repeat the fd closing here, to make sure that - * nothing is leaked from the PAM modules */ - err = close_all_fds(fds, n_fds); -@@ -1474,33 +1504,7 @@ int exec_spawn(ExecCommand *command, - goto fail_child; - } - } --#ifdef HAVE_SELINUX -- if (use_selinux()) { -- if (context->selinux_context) { -- err = setexeccon(context->selinux_context); -- if (err < 0 && !context->selinux_context_ignore) { -- r = EXIT_SELINUX_CONTEXT; -- goto fail_child; -- } -- } -- -- if (selinux_context_net && socket_fd >= 0) { -- _cleanup_free_ char *label = NULL; - -- err = label_get_child_mls_label(socket_fd, command->path, &label); -- if (err < 0) { -- r = EXIT_SELINUX_CONTEXT; -- goto fail_child; -- } -- -- err = setexeccon(label); -- if (err < 0) { -- r = EXIT_SELINUX_CONTEXT; -- goto fail_child; -- } -- } -- } --#endif - } - - our_env = new0(char*, 7); diff --git a/SOURCES/0369-logind-use-correct-who-enum-values-with-KillUnit.patch b/SOURCES/0369-logind-use-correct-who-enum-values-with-KillUnit.patch deleted file mode 100644 index ca40c6e..0000000 --- a/SOURCES/0369-logind-use-correct-who-enum-values-with-KillUnit.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 53e9be6b9c38a7a7d943b01da6898355c535991e 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. - -rhel-only (in upstream fixed during dbus rewrite) - -Resolves: #1155502 ---- - src/login/logind-dbus.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c -index 6cabb7b..4137522 100644 ---- a/src/login/logind-dbus.c -+++ b/src/login/logind-dbus.c -@@ -116,7 +116,7 @@ - " \n" \ - " \n" \ - " \n" \ -- " \n" \ -+ " \n" \ - " \n" \ - " \n" \ - " \n" \ -@@ -2814,7 +2814,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 ? "main" : "all"; - assert_cc(sizeof(signo) == sizeof(int32_t)); - - r = bus_method_call_with_reply( -@@ -2830,7 +2830,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/SOURCES/0370-logind-always-kill-session-when-termination-is-reque.patch b/SOURCES/0370-logind-always-kill-session-when-termination-is-reque.patch deleted file mode 100644 index f4b8ed3..0000000 --- a/SOURCES/0370-logind-always-kill-session-when-termination-is-reque.patch +++ /dev/null @@ -1,291 +0,0 @@ -From c4e4ad079d6c3c18b6f08722ce30796e8c53346b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Sat, 8 Feb 2014 20:29:56 -0500 -Subject: [PATCH] logind: always kill session when termination is requested - -KillUserProcesses=yes/no should be ignored when termination is -explicitly requested. - -Conflicts: - src/login/logind-dbus.c - src/login/logind-seat-dbus.c - src/login/logind-session-dbus.c - src/login/logind-session.c - src/login/logind-user-dbus.c - src/login/logind.c - -(cherry-picked (or better say rewritten) from 9bb69af4f2823fdd30902f5ffd959e9b041feb53) - -Resolves: #1155502 ---- - src/login/logind-dbus.c | 6 +++--- - src/login/logind-seat-dbus.c | 2 +- - src/login/logind-seat.c | 8 ++++---- - src/login/logind-seat.h | 4 ++-- - src/login/logind-session-dbus.c | 2 +- - src/login/logind-session.c | 8 ++++---- - src/login/logind-session.h | 2 +- - src/login/logind-user-dbus.c | 2 +- - src/login/logind-user.c | 4 ++-- - src/login/logind-user.h | 2 +- - src/login/logind.c | 10 +++++----- - 11 files changed, 25 insertions(+), 25 deletions(-) - -diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c -index 4137522..8a463f9 100644 ---- a/src/login/logind-dbus.c -+++ b/src/login/logind-dbus.c -@@ -1927,7 +1927,7 @@ static DBusHandlerResult manager_message_handler( - if (!session) - return bus_send_error_reply(connection, message, &error, -ENOENT); - -- r = session_stop(session); -+ r = session_stop(session, true); - if (r < 0) - return bus_send_error_reply(connection, message, NULL, r); - -@@ -1950,7 +1950,7 @@ static DBusHandlerResult manager_message_handler( - if (!user) - return bus_send_error_reply(connection, message, &error, -ENOENT); - -- r = user_stop(user); -+ r = user_stop(user, true); - if (r < 0) - return bus_send_error_reply(connection, message, NULL, r); - -@@ -1973,7 +1973,7 @@ static DBusHandlerResult manager_message_handler( - if (!seat) - return bus_send_error_reply(connection, message, &error, -ENOENT); - -- r = seat_stop_sessions(seat); -+ r = seat_stop_sessions(seat, true); - if (r < 0) - return bus_send_error_reply(connection, message, NULL, r); - -diff --git a/src/login/logind-seat-dbus.c b/src/login/logind-seat-dbus.c -index 230f7f0..c87c1de 100644 ---- a/src/login/logind-seat-dbus.c -+++ b/src/login/logind-seat-dbus.c -@@ -261,7 +261,7 @@ static DBusHandlerResult seat_message_dispatch( - - if (dbus_message_is_method_call(message, "org.freedesktop.login1.Seat", "Terminate")) { - -- r = seat_stop_sessions(s); -+ r = seat_stop_sessions(s, true); - if (r < 0) - return bus_send_error_reply(connection, message, NULL, r); - -diff --git a/src/login/logind-seat.c b/src/login/logind-seat.c -index feebcf4..d3b999d 100644 ---- a/src/login/logind-seat.c -+++ b/src/login/logind-seat.c -@@ -369,7 +369,7 @@ int seat_start(Seat *s) { - return 0; - } - --int seat_stop(Seat *s) { -+int seat_stop(Seat *s, bool force) { - int r = 0; - - assert(s); -@@ -381,7 +381,7 @@ int seat_stop(Seat *s) { - "MESSAGE=Removed seat %s.", s->id, - NULL); - -- seat_stop_sessions(s); -+ seat_stop_sessions(s, force); - - unlink(s->state_file); - seat_add_to_gc_queue(s); -@@ -394,14 +394,14 @@ int seat_stop(Seat *s) { - return r; - } - --int seat_stop_sessions(Seat *s) { -+int seat_stop_sessions(Seat *s, bool force) { - Session *session; - int r = 0, k; - - assert(s); - - LIST_FOREACH(sessions_by_seat, session, s->sessions) { -- k = session_stop(session); -+ k = session_stop(session, force); - if (k < 0) - r = k; - } -diff --git a/src/login/logind-seat.h b/src/login/logind-seat.h -index be6db6e..bf496b3 100644 ---- a/src/login/logind-seat.h -+++ b/src/login/logind-seat.h -@@ -72,8 +72,8 @@ bool seat_can_graphical(Seat *s); - int seat_get_idle_hint(Seat *s, dual_timestamp *t); - - int seat_start(Seat *s); --int seat_stop(Seat *s); --int seat_stop_sessions(Seat *s); -+int seat_stop(Seat *s, bool force); -+int seat_stop_sessions(Seat *s, bool force); - - int seat_check_gc(Seat *s, bool drop_not_started); - void seat_add_to_gc_queue(Seat *s); -diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c -index 86b0746..76e16e7 100644 ---- a/src/login/logind-session-dbus.c -+++ b/src/login/logind-session-dbus.c -@@ -311,7 +311,7 @@ static DBusHandlerResult session_message_dispatch( - - if (dbus_message_is_method_call(message, "org.freedesktop.login1.Session", "Terminate")) { - -- r = session_stop(s); -+ r = session_stop(s, true); - if (r < 0) - return bus_send_error_reply(connection, message, NULL, r); - -diff --git a/src/login/logind-session.c b/src/login/logind-session.c -index 0fa290b..669a027 100644 ---- a/src/login/logind-session.c -+++ b/src/login/logind-session.c -@@ -609,7 +609,7 @@ int session_start(Session *s) { - return 0; - } - --static int session_stop_scope(Session *s) { -+static int session_stop_scope(Session *s, bool force) { - DBusError error; - char *job; - int r; -@@ -621,7 +621,7 @@ static int session_stop_scope(Session *s) { - if (!s->scope) - return 0; - -- if (manager_shall_kill(s->manager, s->user->name)) { -+ if (force || manager_shall_kill(s->manager, s->user->name)) { - r = manager_stop_unit(s->manager, s->scope, &error, &job); - if (r < 0) { - log_error("Failed to stop session scope: %s", bus_error(&error, r)); -@@ -676,7 +676,7 @@ static void session_close_timer_fd(Session *s) { - s->timer_fd = -1; - } - --int session_stop(Session *s) { -+int session_stop(Session *s, bool force) { - int r; - - assert(s); -@@ -690,7 +690,7 @@ int session_stop(Session *s) { - session_remove_fifo(s); - - /* Kill cgroup */ -- r = session_stop_scope(s); -+ r = session_stop_scope(s, force); - - s->stopping = true; - -diff --git a/src/login/logind-session.h b/src/login/logind-session.h -index 9b76582..3659872 100644 ---- a/src/login/logind-session.h -+++ b/src/login/logind-session.h -@@ -131,7 +131,7 @@ void session_set_idle_hint(Session *s, bool b); - int session_create_fifo(Session *s); - void session_remove_fifo(Session *s); - int session_start(Session *s); --int session_stop(Session *s); -+int session_stop(Session *s, bool force); - int session_finalize(Session *s); - void session_release(Session *s); - int session_save(Session *s); -diff --git a/src/login/logind-user-dbus.c b/src/login/logind-user-dbus.c -index fa2ecba..72dd5d0 100644 ---- a/src/login/logind-user-dbus.c -+++ b/src/login/logind-user-dbus.c -@@ -242,7 +242,7 @@ static DBusHandlerResult user_message_dispatch( - - if (dbus_message_is_method_call(message, "org.freedesktop.login1.User", "Terminate")) { - -- r = user_stop(u); -+ r = user_stop(u, true); - if (r < 0) - return bus_send_error_reply(connection, message, NULL, r); - -diff --git a/src/login/logind-user.c b/src/login/logind-user.c -index 653574e..6ddda54 100644 ---- a/src/login/logind-user.c -+++ b/src/login/logind-user.c -@@ -466,13 +466,13 @@ static int user_remove_runtime_path(User *u) { - return r; - } - --int user_stop(User *u) { -+int user_stop(User *u, bool force) { - Session *s; - int r = 0, k; - assert(u); - - LIST_FOREACH(sessions_by_user, s, u->sessions) { -- k = session_stop(s); -+ k = session_stop(s, force); - if (k < 0) - r = k; - } -diff --git a/src/login/logind-user.h b/src/login/logind-user.h -index a12532e..13513fa 100644 ---- a/src/login/logind-user.h -+++ b/src/login/logind-user.h -@@ -72,7 +72,7 @@ void user_free(User *u); - int user_check_gc(User *u, bool drop_not_started); - void user_add_to_gc_queue(User *u); - int user_start(User *u); --int user_stop(User *u); -+int user_stop(User *u, bool force); - int user_finalize(User *u); - UserState user_get_state(User *u); - int user_get_idle_hint(User *u, dual_timestamp *t); -diff --git a/src/login/logind.c b/src/login/logind.c -index 5180be7..da3c099 100644 ---- a/src/login/logind.c -+++ b/src/login/logind.c -@@ -618,14 +618,14 @@ static void manager_dispatch_other(Manager *m, int fd) { - if (s) { - assert(s->fifo_fd == fd); - session_remove_fifo(s); -- session_stop(s); -+ session_stop(s, false); - return; - } - - s = hashmap_get(m->timer_fds, INT_TO_PTR(fd + 1)); - if (s) { - assert(s->timer_fd == fd); -- session_stop(s); -+ session_stop(s, false); - return; - } - -@@ -942,7 +942,7 @@ void manager_gc(Manager *m, bool drop_not_started) { - seat->in_gc_queue = false; - - if (seat_check_gc(seat, drop_not_started) == 0) { -- seat_stop(seat); -+ seat_stop(seat, false); - seat_free(seat); - } - } -@@ -954,7 +954,7 @@ void manager_gc(Manager *m, bool drop_not_started) { - /* First, if we are not closing yet, initiate stopping */ - if (!session_check_gc(session, drop_not_started) && - session_get_state(session) != SESSION_CLOSING) -- session_stop(session); -+ session_stop(session, false); - - if (!session_check_gc(session, drop_not_started)) { - session_finalize(session); -@@ -968,7 +968,7 @@ void manager_gc(Manager *m, bool drop_not_started) { - - if (!user_check_gc(user, drop_not_started) && - user_get_state(user) != USER_CLOSING) -- user_stop(user); -+ user_stop(user, false); - - if (!user_check_gc(user, drop_not_started)) { - user_finalize(user); diff --git a/SOURCES/0371-udev-net_id-correctly-name-netdevs-based-on-dev_port.patch b/SOURCES/0371-udev-net_id-correctly-name-netdevs-based-on-dev_port.patch deleted file mode 100644 index a094bee..0000000 --- a/SOURCES/0371-udev-net_id-correctly-name-netdevs-based-on-dev_port.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 74888db37748c20b144a7cb117fb35f5c9804bcb Mon Sep 17 00:00:00 2001 -From: Tom Gundersen -Date: Sat, 25 Oct 2014 17:10:11 +0200 -Subject: [PATCH] udev: net_id - correctly name netdevs based on dev_port when - set - -Upstream, dev_id was replaced by dev_port, and the same happened for some kernel -drivers. This logic is not in the RHEL7 kernel, except for one new driver which -uses dev_port, but never used dev_id in the past. - -To give proper names to these devices, fall back to using dev_port when dev_id -is not set. This does not affect any existing drivers. - -(rhel only) - -Resolves: #1155996 ---- - src/udev/udev-builtin-net_id.c | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c -index b3cb04b..b5b5909 100644 ---- a/src/udev/udev-builtin-net_id.c -+++ b/src/udev/udev-builtin-net_id.c -@@ -36,7 +36,7 @@ - * o -- on-board device index number - * s[f][d] -- hotplug slot index number - * x -- MAC address -- * [P]ps[f][d] -+ * [P]ps[f][d/] - * -- PCI geographical location - * [P]ps[f][u][..][c][i] - * -- USB port number chain -@@ -185,8 +185,14 @@ static int dev_pci_slot(struct udev_device *dev, struct netnames *names) { - - /* kernel provided multi-device index */ - attr = udev_device_get_sysattr_value(dev, "dev_id"); -- if (attr) -+ if (attr) { - dev_id = strtol(attr, NULL, 16); -+ if (dev_id == 0) { -+ attr = udev_device_get_sysattr_value(dev, "dev_port"); -+ if (attr) -+ dev_id = strtol(attr, NULL, 16); -+ } -+ } - - /* compose a name based on the raw kernel's PCI bus, slot numbers */ - s = names->pci_path; diff --git a/SOURCES/0372-udev-net_id-dev_port-is-base-10.patch b/SOURCES/0372-udev-net_id-dev_port-is-base-10.patch deleted file mode 100644 index d3dce5e..0000000 --- a/SOURCES/0372-udev-net_id-dev_port-is-base-10.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 6aba16d2932457f516a3153d85b147f3d962f4a2 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Tue, 4 Nov 2014 17:59:28 +0100 -Subject: [PATCH] udev: net_id dev_port is base 10 - -Related: #1155996 ---- - src/udev/udev-builtin-net_id.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c -index b5b5909..4e6ca96 100644 ---- a/src/udev/udev-builtin-net_id.c -+++ b/src/udev/udev-builtin-net_id.c -@@ -190,7 +190,7 @@ static int dev_pci_slot(struct udev_device *dev, struct netnames *names) { - if (dev_id == 0) { - attr = udev_device_get_sysattr_value(dev, "dev_port"); - if (attr) -- dev_id = strtol(attr, NULL, 16); -+ dev_id = strtol(attr, NULL, 10); - } - } - diff --git a/SOURCES/0373-udev-Fix-parsing-of-udev.event-timeout-kernel-parame.patch b/SOURCES/0373-udev-Fix-parsing-of-udev.event-timeout-kernel-parame.patch deleted file mode 100644 index 2a30e1a..0000000 --- a/SOURCES/0373-udev-Fix-parsing-of-udev.event-timeout-kernel-parame.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 1949cb6f5ff8cccecfab4eca5a4e697d5c55dbdf Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Wed, 5 Nov 2014 10:50:01 +0100 -Subject: [PATCH] udev: Fix parsing of udev.event-timeout kernel parameter - -(rhel-only, will be fixed in upstream differently) - -Related: #1154778 ---- - src/udev/udevd.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/udev/udevd.c b/src/udev/udevd.c -index 6241549..8d3f64f 100644 ---- a/src/udev/udevd.c -+++ b/src/udev/udevd.c -@@ -889,7 +889,7 @@ static void kernel_cmdline_options(struct udev *udev) - } else if (startswith(opt, "udev.exec-delay=")) { - exec_delay = strtoul(opt + 16, NULL, 0); - } else if (startswith(opt, "udev.event-timeout=")) { -- event_timeout = strtoul(opt + 16, NULL, 0); -+ event_timeout = strtoul(opt + 19, NULL, 0); - } - - free(s); diff --git a/SOURCES/0374-login-rerun-vconsole-setup-when-switching-from-vgaco.patch b/SOURCES/0374-login-rerun-vconsole-setup-when-switching-from-vgaco.patch deleted file mode 100644 index b97447c..0000000 --- a/SOURCES/0374-login-rerun-vconsole-setup-when-switching-from-vgaco.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 8659757c045dcdb6fcf628fa76025f1a2f533e8a Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Wed, 5 Nov 2014 08:30:52 -0500 -Subject: [PATCH] login: rerun vconsole-setup when switching from vgacon to - fbcon - -The initialization performed by systemd-vconsole-setup is reset -when changing console drivers (say from vgacon to fbcon), so we -need to run it in that case. - -See -http://lists.freedesktop.org/archives/systemd-devel/2014-October/023919.html -http://lists.freedesktop.org/archives/systemd-devel/2014-October/024423.html -http://lists.freedesktop.org/archives/systemd-devel/2014-November/024881.html - -This commit adds a udev rule to make systemd-vconsole-setup get run when -the fbcon device becomes available. - -(david: moved into new file 90-vconsole.rules instead of 71-seats.rules; - build-failures are on me, not on Ray) - -(cherry-picked from f6ba8671d83f9fce9a00045d8fa399a1c07ba7fc) - -Related: #1002450 ---- - Makefile.am | 3 +++ - src/vconsole/90-vconsole.rules | 11 +++++++++++ - 2 files changed, 14 insertions(+) - create mode 100644 src/vconsole/90-vconsole.rules - -diff --git a/Makefile.am b/Makefile.am -index dab55ba..faf2a32 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -3258,6 +3258,9 @@ rootlibexec_PROGRAMS += \ - nodist_systemunit_DATA += \ - units/systemd-vconsole-setup.service - -+dist_udevrules_DATA += \ -+ src/vconsole/90-vconsole.rules -+ - SYSINIT_TARGET_WANTS += \ - systemd-vconsole-setup.service - endif -diff --git a/src/vconsole/90-vconsole.rules b/src/vconsole/90-vconsole.rules -new file mode 100644 -index 0000000..bf6a9ef ---- /dev/null -+++ b/src/vconsole/90-vconsole.rules -@@ -0,0 +1,11 @@ -+# This file is part of systemd. -+# -+# systemd is free software; you can redistribute it and/or modify it -+# under the terms of the GNU Lesser General Public License as published by -+# the Free Software Foundation; either version 2.1 of the License, or -+# (at your option) any later version. -+ -+# Kernel resets vconsole state when changing console drivers so run -+# systemd-vconsole-setup when fbcon loads -+ -+ACTION=="add", SUBSYSTEM=="graphics", KERNEL=="fbcon", RUN+="/usr/lib/systemd/systemd-vconsole-setup" diff --git a/SOURCES/0375-cgroups-agent-really-down-grade-log-level.patch b/SOURCES/0375-cgroups-agent-really-down-grade-log-level.patch deleted file mode 100644 index f3e9852..0000000 --- a/SOURCES/0375-cgroups-agent-really-down-grade-log-level.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 6b8650a2e10a00088b977467bf0c79dd7044fcd9 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Mon, 10 Nov 2014 17:00:20 +0100 -Subject: [PATCH] cgroups-agent: really down-grade log level - -(rhel-only, fix for broken backport b0010d76a8c56900d15fab8ac1ed94d364d1e566) - -Related: #1044386 ---- - src/cgroups-agent/cgroups-agent.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/src/cgroups-agent/cgroups-agent.c b/src/cgroups-agent/cgroups-agent.c -index 43b9b3a..57db147 100644 ---- a/src/cgroups-agent/cgroups-agent.c -+++ b/src/cgroups-agent/cgroups-agent.c -@@ -50,11 +50,10 @@ int main(int argc, char *argv[]) { - - bus = dbus_connection_open_private("unix:path=/run/systemd/private", &error); - if (!bus) { -- log_warning("Failed to get D-Bus connection: %s", strerror(-r)); - /* If we couldn't connect we assume this was triggered - * while systemd got restarted/transitioned from - * initrd to the system, so let's ignore this */ -- log_debug("Failed to get D-Bus connection: %s", strerror(-r)); -+ log_debug("Failed to get D-Bus connection: %s", bus_error_message(&error)); - goto finish; - } - diff --git a/SOURCES/0376-core-introduce-new-Delegate-yes-no-property-controll.patch b/SOURCES/0376-core-introduce-new-Delegate-yes-no-property-controll.patch deleted file mode 100644 index ab61ded..0000000 --- a/SOURCES/0376-core-introduce-new-Delegate-yes-no-property-controll.patch +++ /dev/null @@ -1,385 +0,0 @@ -From 310c5654023cd224f4c016872e39335b1b3ac603 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Thu, 13 Nov 2014 14:34:42 +0100 -Subject: [PATCH] core: introduce new Delegate=yes/no property controlling - creation of cgroup subhierarchies - -For priviliged units this resource control property ensures that the -processes have all controllers systemd manages enabled. - -For unpriviliged services (those with User= set) this ensures that -access rights to the service cgroup is granted to the user in question, -to create further subgroups. Note that this only applies to the -name=systemd hierarchy though, as access to other controllers is not -safe for unpriviliged processes. - -Delegate=yes should be set for container scopes where a systemd instance -inside the container shall manage the hierarchies below its own cgroup -and have access to all controllers. - -Delegate=yes should also be set for user@.service, so that systemd ---user can run, controlling its own cgroup tree. - -This commit changes machined, systemd-nspawn@.service and user@.service -to set this boolean, in order to ensure that container management will -just work, and the user systemd instance can run fine. - -(cherry picked from a931ad47a8623163a29d898224d8a8c1177ffdaf) - -Resolves: #1139223 ---- - man/systemd.resource-control.xml | 14 ++++++++++++ - src/core/cgroup.c | 19 +++++++++++++++-- - src/core/cgroup.h | 2 ++ - src/core/dbus-cgroup.c | 40 +++++++++++++++++++++++++++++++++++ - src/core/execute.c | 23 +++++++++++++++++--- - src/core/execute.h | 2 ++ - src/core/load-fragment-gperf.gperf.m4 | 3 ++- - src/core/mount.c | 1 + - src/core/service.c | 1 + - src/core/socket.c | 1 + - src/core/swap.c | 1 + - src/machine/machined-dbus.c | 10 +++++++++ - src/shared/cgroup-util.h | 3 ++- - units/systemd-nspawn@.service.in | 1 + - 14 files changed, 114 insertions(+), 7 deletions(-) - -diff --git a/man/systemd.resource-control.xml b/man/systemd.resource-control.xml -index 8688905..3748c0c 100644 ---- a/man/systemd.resource-control.xml -+++ b/man/systemd.resource-control.xml -@@ -327,6 +327,20 @@ along with systemd; If not, see . - - - -+ -+ Delegate= -+ -+ -+ Turns on delegation of further resource control -+ partitioning to processes of the unit. For unpriviliged -+ services (i.e. those using the User= -+ setting) this allows processes to create a subhierarchy -+ beneath its control group path. For priviliged services and -+ scopes this ensures the processes will have all control -+ group controllers enabled. -+ -+ -+ - - - -diff --git a/src/core/cgroup.c b/src/core/cgroup.c -index c215a86..443937b 100644 ---- a/src/core/cgroup.c -+++ b/src/core/cgroup.c -@@ -94,14 +94,16 @@ void cgroup_context_dump(CGroupContext *c, FILE* f, const char *prefix) { - "%sCPUShares=%lu\n" - "%sBlockIOWeight=%lu\n" - "%sMemoryLimit=%" PRIu64 "\n" -- "%sDevicePolicy=%s\n", -+ "%sDevicePolicy=%s\n" -+ "%sDelegate=%s\n", - prefix, yes_no(c->cpu_accounting), - prefix, yes_no(c->blockio_accounting), - prefix, yes_no(c->memory_accounting), - prefix, c->cpu_shares, - prefix, c->blockio_weight, - prefix, c->memory_limit, -- prefix, cgroup_device_policy_to_string(c->device_policy)); -+ prefix, cgroup_device_policy_to_string(c->device_policy), -+ prefix, yes_no(c->delegate)); - - LIST_FOREACH(device_allow, a, c->device_allow) - fprintf(f, -@@ -342,6 +344,19 @@ static CGroupControllerMask unit_get_cgroup_mask(Unit *u) { - if (!c) - return 0; - -+ /* If delegation is turned on, then turn on all cgroups, -+ * unless the process we fork into it is known to drop -+ * privileges anyway, and shouldn't get access to the -+ * controllers anyway. */ -+ -+ if (c->delegate) { -+ ExecContext *e; -+ -+ e = unit_get_exec_context(u); -+ if (!e || exec_context_maintains_privileges(e)) -+ return _CGROUP_CONTROLLER_MASK_ALL; -+ } -+ - return cgroup_context_get_mask(c); - } - -diff --git a/src/core/cgroup.h b/src/core/cgroup.h -index 0a079e9..d00bcac 100644 ---- a/src/core/cgroup.h -+++ b/src/core/cgroup.h -@@ -80,6 +80,8 @@ struct CGroupContext { - - CGroupDevicePolicy device_policy; - LIST_HEAD(CGroupDeviceAllow, device_allow); -+ -+ bool delegate; - }; - - #include "unit.h" -diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c -index 9ebcad9..a13c869 100644 ---- a/src/core/dbus-cgroup.c -+++ b/src/core/dbus-cgroup.c -@@ -124,6 +124,7 @@ static int bus_cgroup_append_device_allow(DBusMessageIter *i, const char *proper - } - - const BusProperty bus_cgroup_context_properties[] = { -+ { "Delegate", bus_property_append_bool, "b", offsetof(CGroupContext, delegate) }, - { "CPUAccounting", bus_property_append_bool, "b", offsetof(CGroupContext, cpu_accounting) }, - { "CPUShares", bus_property_append_ul, "t", offsetof(CGroupContext, cpu_shares) }, - { "BlockIOAccounting", bus_property_append_bool, "b", offsetof(CGroupContext, blockio_accounting) }, -@@ -138,6 +139,38 @@ const BusProperty bus_cgroup_context_properties[] = { - {} - }; - -+static int bus_cgroup_set_transient_property( -+ Unit *u, -+ CGroupContext *c, -+ const char *name, -+ DBusMessageIter *i, -+ UnitSetPropertiesMode mode, -+ DBusError *error) { -+ -+ assert(u); -+ assert(c); -+ assert(name); -+ assert(i); -+ -+ if (streq(name, "Delegate")) { -+ -+ if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_BOOLEAN) -+ return -EINVAL; -+ -+ if (mode != UNIT_CHECK) { -+ dbus_bool_t b; -+ -+ dbus_message_iter_get_basic(i, &b); -+ c->delegate = b; -+ unit_write_drop_in_private(u, mode, name, b ? "Delegate=yes" : "Delegate=no"); -+ } -+ -+ return 1; -+ } -+ -+ return 0; -+} -+ - int bus_cgroup_set_property( - Unit *u, - CGroupContext *c, -@@ -550,5 +583,12 @@ int bus_cgroup_set_property( - return 1; - } - -+ if (u->transient && u->load_state == UNIT_STUB) { -+ int r; -+ r = bus_cgroup_set_transient_property(u, c, name, i, mode, error); -+ if (r != 0) -+ return r; -+ } -+ - return 0; - } -diff --git a/src/core/execute.c b/src/core/execute.c -index 06713cc..d814c39 100644 ---- a/src/core/execute.c -+++ b/src/core/execute.c -@@ -1042,6 +1042,7 @@ int exec_spawn(ExecCommand *command, - bool selinux_context_net, - CGroupControllerMask cgroup_supported, - const char *cgroup_path, -+ bool cgroup_delegate, - const char *unit_id, - int idle_pipe[4], - pid_t *ret) { -@@ -1306,8 +1307,10 @@ int exec_spawn(ExecCommand *command, - } - } - --#ifdef HAVE_PAM -- if (cgroup_path && context->user && context->pam_name) { -+ /* If delegation is enabled we'll pass ownership of the cgroup -+ * (but only in systemd's own controller hierarchy!) to the -+ * user of the new process. */ -+ if (cgroup_path && context->user && cgroup_delegate) { - err = cg_set_task_access(SYSTEMD_CGROUP_CONTROLLER, cgroup_path, 0644, uid, gid); - if (err < 0) { - r = EXIT_CGROUP; -@@ -1321,7 +1324,6 @@ int exec_spawn(ExecCommand *command, - goto fail_child; - } - } --#endif - - if (apply_permissions) { - err = enforce_groups(context, username, gid); -@@ -2116,6 +2118,21 @@ void exec_context_dump(ExecContext *c, FILE* f, const char *prefix) { - - } - -+bool exec_context_maintains_privileges(ExecContext *c) { -+ assert(c); -+ -+ /* Returns true if the process forked off would run under -+ * an unchanged UID or as root. */ -+ -+ if (!c->user) -+ return true; -+ -+ if (streq(c->user, "root") || streq(c->user, "0")) -+ return true; -+ -+ return false; -+} -+ - void exec_status_start(ExecStatus *s, pid_t pid) { - assert(s); - -diff --git a/src/core/execute.h b/src/core/execute.h -index b66bd5f..03afdf3 100644 ---- a/src/core/execute.h -+++ b/src/core/execute.h -@@ -177,6 +177,7 @@ int exec_spawn(ExecCommand *command, - bool selinux_context_net, - CGroupControllerMask cgroup_mask, - const char *cgroup_path, -+ bool cgroup_delegate, - const char *unit_id, - int pipe_fd[2], - pid_t *ret); -@@ -203,6 +204,7 @@ void exec_context_tty_reset(const ExecContext *context); - int exec_context_load_environment(const ExecContext *c, const char *unit_id, char ***l); - - bool exec_context_may_touch_console(ExecContext *c); -+bool exec_context_maintains_privileges(ExecContext *c); - void exec_context_serialize(const ExecContext *c, Unit *u, FILE *f); - - void exec_status_start(ExecStatus *s, pid_t pid); -diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4 -index ee7cd5d..c6eb757 100644 ---- a/src/core/load-fragment-gperf.gperf.m4 -+++ b/src/core/load-fragment-gperf.gperf.m4 -@@ -96,7 +96,8 @@ $1.BlockIOAccounting, config_parse_bool, 0, - $1.BlockIOWeight, config_parse_blockio_weight, 0, offsetof($1, cgroup_context) - $1.BlockIODeviceWeight, config_parse_blockio_device_weight, 0, offsetof($1, cgroup_context) - $1.BlockIOReadBandwidth, config_parse_blockio_bandwidth, 0, offsetof($1, cgroup_context) --$1.BlockIOWriteBandwidth, config_parse_blockio_bandwidth, 0, offsetof($1, cgroup_context)' -+$1.BlockIOWriteBandwidth, config_parse_blockio_bandwidth, 0, offsetof($1, cgroup_context) -+$1.Delegate, config_parse_bool, 0, offsetof($1, cgroup_context.delegate)' - )m4_dnl - Unit.Description, config_parse_unit_string_printf, 0, offsetof(Unit, description) - Unit.Documentation, config_parse_documentation, 0, offsetof(Unit, documentation) -diff --git a/src/core/mount.c b/src/core/mount.c -index bbceb92..a9cd28b 100644 ---- a/src/core/mount.c -+++ b/src/core/mount.c -@@ -794,6 +794,7 @@ static int mount_spawn(Mount *m, ExecCommand *c, pid_t *_pid) { - false, - UNIT(m)->manager->cgroup_supported, - UNIT(m)->cgroup_path, -+ m->cgroup_context.delegate, - UNIT(m)->id, - NULL, - &pid); -diff --git a/src/core/service.c b/src/core/service.c -index 635a953..5fd69cf 100644 ---- a/src/core/service.c -+++ b/src/core/service.c -@@ -1870,6 +1870,7 @@ static int service_spawn( - s->socket_fd_selinux_context_net, - UNIT(s)->manager->cgroup_supported, - path, -+ s->cgroup_context.delegate, - UNIT(s)->id, - s->type == SERVICE_IDLE ? UNIT(s)->manager->idle_pipe : NULL, - &pid); -diff --git a/src/core/socket.c b/src/core/socket.c -index 1a91700..f7fffbe 100644 ---- a/src/core/socket.c -+++ b/src/core/socket.c -@@ -1237,6 +1237,7 @@ static int socket_spawn(Socket *s, ExecCommand *c, pid_t *_pid) { - false, - UNIT(s)->manager->cgroup_supported, - UNIT(s)->cgroup_path, -+ s->cgroup_context.delegate, - UNIT(s)->id, - NULL, - &pid); -diff --git a/src/core/swap.c b/src/core/swap.c -index 36ef88b..152a080 100644 ---- a/src/core/swap.c -+++ b/src/core/swap.c -@@ -592,6 +592,7 @@ static int swap_spawn(Swap *s, ExecCommand *c, pid_t *_pid) { - false, - UNIT(s)->manager->cgroup_supported, - UNIT(s)->cgroup_path, -+ s->cgroup_context.delegate, - UNIT(s)->id, - NULL, - &pid); -diff --git a/src/machine/machined-dbus.c b/src/machine/machined-dbus.c -index 22caadf..0cebdc5 100644 ---- a/src/machine/machined-dbus.c -+++ b/src/machine/machined-dbus.c -@@ -739,9 +739,11 @@ int manager_start_scope( - DBusMessageIter iter, sub, sub2, sub3, sub4; - const char *timeout_stop_property = "TimeoutStopUSec"; - const char *pids_property = "PIDs"; -+ const char *delegate_property = "Delegate"; - uint64_t timeout = 500 * USEC_PER_MSEC; - const char *fail = "fail"; - uint32_t u; -+ dbus_bool_t b = 1; - int r; - - assert(manager); -@@ -814,6 +816,14 @@ int manager_start_scope( - !dbus_message_iter_close_container(&sub, &sub2)) - return log_oom(); - -+ if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) || -+ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &delegate_property) || -+ !dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, "b", &sub3) || -+ !dbus_message_iter_append_basic(&sub3, DBUS_TYPE_BOOLEAN, &b) || -+ !dbus_message_iter_close_container(&sub2, &sub3) || -+ !dbus_message_iter_close_container(&sub, &sub2)) -+ return log_oom(); -+ - if (more_properties) { - r = copy_many_fields(&sub, more_properties); - if (r < 0) -diff --git a/src/shared/cgroup-util.h b/src/shared/cgroup-util.h -index 0963450..0608b9a 100644 ---- a/src/shared/cgroup-util.h -+++ b/src/shared/cgroup-util.h -@@ -34,7 +34,8 @@ typedef enum CGroupControllerMask { - CGROUP_CPUACCT = 2, - CGROUP_BLKIO = 4, - CGROUP_MEMORY = 8, -- CGROUP_DEVICE = 16 -+ CGROUP_DEVICE = 16, -+ _CGROUP_CONTROLLER_MASK_ALL = 31 - } CGroupControllerMask; - - /* -diff --git a/units/systemd-nspawn@.service.in b/units/systemd-nspawn@.service.in -index 8e00736..bdfa89f 100644 ---- a/units/systemd-nspawn@.service.in -+++ b/units/systemd-nspawn@.service.in -@@ -12,6 +12,7 @@ Documentation=man:systemd-nspawn(1) - [Service] - ExecStart=@bindir@/systemd-nspawn -bjD /var/lib/container/%i - Type=notify -+Delegate=yes - - [Install] - WantedBy=multi-user.target diff --git a/SOURCES/0377-core-don-t-migrate-PIDs-for-units-that-may-contain-s.patch b/SOURCES/0377-core-don-t-migrate-PIDs-for-units-that-may-contain-s.patch deleted file mode 100644 index c2bbe4b..0000000 --- a/SOURCES/0377-core-don-t-migrate-PIDs-for-units-that-may-contain-s.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 4d554c7c1b5373f854cdfd3b8c7d6804225c752e Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Wed, 10 Dec 2014 20:38:24 +0100 -Subject: [PATCH] core: don't migrate PIDs for units that may contain - subcgroups, do this only for leaf units - -Otherwise a slice or delegation unit might move PIDs around ignoring the -fact that it is attached to a subcgroup. - -(cherry picked from commit 0cd385d31814c8c1bc0c81d11ef321036b8b0921) - -Resolves: #1139223 ---- - src/core/cgroup.c | 11 +++++++++-- - 1 file changed, 9 insertions(+), 2 deletions(-) - -diff --git a/src/core/cgroup.c b/src/core/cgroup.c -index 443937b..5163ee4 100644 ---- a/src/core/cgroup.c -+++ b/src/core/cgroup.c -@@ -392,11 +392,16 @@ static CGroupControllerMask unit_get_siblings_mask(Unit *u) { - - static int unit_create_cgroups(Unit *u, CGroupControllerMask mask) { - _cleanup_free_ char *path; -+ CGroupContext *c; - int r; - bool was_in_hash = false; - - assert(u); - -+ c = unit_get_cgroup_context(u); -+ if (!c) -+ return 0; -+ - path = unit_default_cgroup_path(u); - if (!path) - return log_oom(); -@@ -416,8 +421,10 @@ static int unit_create_cgroups(Unit *u, CGroupControllerMask mask) { - if (r < 0) - log_error("Failed to create cgroup %s: %s", path, strerror(-r)); - -- /* Then, possibly move things over */ -- if (u->cgroup_path) { -+ /* Then, possibly move things over, but not if -+ * subgroups may contain processes, which is the case -+ * for slice and delegation units. */ -+ if (u->cgroup_path && u->type != UNIT_SLICE && !c->delegate) { - r = cg_migrate_everywhere(u->manager->cgroup_supported, u->cgroup_path, path); - if (r < 0) - log_error("Failed to migrate cgroup from %s to %s: %s", diff --git a/SOURCES/0378-mount-use-libmount-to-enumerate-proc-self-mountinfo.patch b/SOURCES/0378-mount-use-libmount-to-enumerate-proc-self-mountinfo.patch deleted file mode 100644 index 9c76eac..0000000 --- a/SOURCES/0378-mount-use-libmount-to-enumerate-proc-self-mountinfo.patch +++ /dev/null @@ -1,204 +0,0 @@ -From 53b2695b96c6e8717a375cc2a17fcc4384d04790 Mon Sep 17 00:00:00 2001 -From: Chris Leech -Date: Sun, 23 Nov 2014 20:33:37 -0800 -Subject: [PATCH] mount: use libmount to enumerate /proc/self/mountinfo - -This lets libmount add in user options from /run/mount/utab, like -_netdev which is needed to get proper ordering against remote-fs.target - -Conflicts: - Makefile.am - README - configure.ac - src/core/mount.c - -(cherry-picked from 8d3ae2bd4c9bf9fc2e57f7b3776325a1c750ca30) - -Related: #1161417 ---- - .travis.yml | 2 +- - Makefile.am | 4 +++- - README | 1 + - configure.ac | 10 +++++++++ - src/core/mount.c | 65 ++++++++++++++++++++++++++------------------------------ - 5 files changed, 45 insertions(+), 37 deletions(-) - -diff --git a/.travis.yml b/.travis.yml -index 7e5251c..4ea2bc2 100644 ---- a/.travis.yml -+++ b/.travis.yml -@@ -3,7 +3,7 @@ compiler: - - gcc - before_install: - - sudo apt-get update -qq -- - sudo apt-get install autotools-dev automake autoconf libtool libdbus-1-dev libcap-dev libblkid-dev libpam-dev libcryptsetup-dev libaudit-dev libacl1-dev libattr1-dev libselinux-dev liblzma-dev libgcrypt-dev libqrencode-dev libmicrohttpd-dev gtk-doc-tools gperf python2.7-dev -+ - sudo apt-get install autotools-dev automake autoconf libtool libdbus-1-dev libcap-dev libblkid-dev libmount-dev libpam-dev libcryptsetup-dev libaudit-dev libacl1-dev libattr1-dev libselinux-dev liblzma-dev libgcrypt-dev libqrencode-dev libmicrohttpd-dev gtk-doc-tools gperf python2.7-dev - script: ./autogen.sh && ./configure --enable-gtk-doc --enable-gtk-doc-pdf && make V=1 && sudo ./systemd-machine-id-setup && make check && make distcheck - after_failure: cat test-suite.log - notifications: -diff --git a/Makefile.am b/Makefile.am -index faf2a32..0891bca 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -997,6 +997,7 @@ libsystemd_core_la_CFLAGS = \ - $(PAM_CFLAGS) \ - $(AUDIT_CFLAGS) \ - $(KMOD_CFLAGS) \ -+ $(MOUNT_CFLAGS) \ - -pthread - - libsystemd_core_la_LIBADD = \ -@@ -1013,7 +1014,8 @@ libsystemd_core_la_LIBADD = \ - $(PAM_LIBS) \ - $(AUDIT_LIBS) \ - $(CAP_LIBS) \ -- $(KMOD_LIBS) -+ $(KMOD_LIBS) \ -+ $(MOUNT_LIBS) - - src/core/load-fragment-gperf-nulstr.c: src/core/load-fragment-gperf.gperf - $(AM_V_at)$(MKDIR_P) $(dir $@) -diff --git a/README b/README -index b39cd37..42487dd 100644 ---- a/README -+++ b/README -@@ -94,6 +94,7 @@ REQUIREMENTS: - - dbus >= 1.4.0 - libcap -+ libmount >= 2.20 (from util-linux) - libblkid >= 2.20 (from util-linux) (optional) - libkmod >= 14 (optional) - PAM >= 1.1.2 (optional) -diff --git a/configure.ac b/configure.ac -index 4f26092..b7dfc5f 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -292,6 +292,15 @@ fi - AM_CONDITIONAL(HAVE_BLKID, [test "$have_blkid" = "yes"]) - - # ------------------------------------------------------------------------------ -+have_libmount=no -+PKG_CHECK_MODULES(MOUNT, [ mount >= 2.20 ], -+ [AC_DEFINE(HAVE_LIBMOUNT, 1, [Define if libmount is available]) have_libmount=yes], have_libmount=no) -+if test "x$have_libmount" = xno; then -+ AC_MSG_ERROR([*** libmount support required but libraries not found]) -+fi -+AM_CONDITIONAL(HAVE_LIBMOUNT, [test "$have_libmount" = "yes"]) -+ -+# ------------------------------------------------------------------------------ - have_ima=yes - AC_ARG_ENABLE([ima], AS_HELP_STRING([--disable-ima],[Disable optional IMA support]), - [case "${enableval}" in -@@ -1046,6 +1055,7 @@ AC_MSG_RESULT([ - efi: ${have_efi} - kmod: ${have_kmod} - blkid: ${have_blkid} -+ libmount: ${have_libmount} - nss-myhostname: ${have_myhostname} - gudev: ${enable_gudev} - gintrospection: ${enable_introspection} -diff --git a/src/core/mount.c b/src/core/mount.c -index bbceb92..d78269c 100644 ---- a/src/core/mount.c -+++ b/src/core/mount.c -@@ -24,6 +24,7 @@ - #include - #include - #include -+#include - - #include "manager.h" - #include "unit.h" -@@ -1563,55 +1564,47 @@ fail: - return r; - } - -+static inline void mnt_free_table_p(struct libmnt_table **tb) { -+ mnt_free_table(*tb); -+} -+ -+static inline void mnt_free_iter_p(struct libmnt_iter **itr) { -+ mnt_free_iter(*itr); -+} -+ - static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) { -+ _cleanup_(mnt_free_table_p) struct libmnt_table *tb = NULL; -+ _cleanup_(mnt_free_iter_p) struct libmnt_iter *itr = NULL; -+ struct libmnt_fs *fs; - int r = 0; -- unsigned i; - - assert(m); - -- rewind(m->proc_self_mountinfo); -+ tb = mnt_new_table(); -+ itr = mnt_new_iter(MNT_ITER_FORWARD); -+ if (!tb || !itr) -+ return log_oom(); - -- for (i = 1;; i++) { -- _cleanup_free_ char *device = NULL, *path = NULL, *options = NULL, *options2 = NULL, *fstype = NULL, *d = NULL, *p = NULL, *o = NULL; -- int k; -+ mnt_table_parse_mtab(tb, NULL); -+ if (r) -+ return r; - -- k = fscanf(m->proc_self_mountinfo, -- "%*s " /* (1) mount id */ -- "%*s " /* (2) parent id */ -- "%*s " /* (3) major:minor */ -- "%*s " /* (4) root */ -- "%ms " /* (5) mount point */ -- "%ms" /* (6) mount options */ -- "%*[^-]" /* (7) optional fields */ -- "- " /* (8) separator */ -- "%ms " /* (9) file system type */ -- "%ms" /* (10) mount source */ -- "%ms" /* (11) mount options 2 */ -- "%*[^\n]", /* some rubbish at the end */ -- &path, -- &options, -- &fstype, -- &device, -- &options2); -- -- if (k == EOF) -- break; -- -- if (k != 5) { -- log_warning("Failed to parse /proc/self/mountinfo:%u.", i); -- continue; -- } -+ while (mnt_table_next_fs(tb, itr, &fs) == 0) { -+ const char *device, *path, *options, *fstype; -+ _cleanup_free_ const char *d = NULL, *p = NULL; -+ int k; - -- o = strjoin(options, ",", options2, NULL); -- if (!o) -- return log_oom(); -+ device = mnt_fs_get_source(fs); -+ path = mnt_fs_get_target(fs); -+ options = mnt_fs_get_options(fs); -+ fstype = mnt_fs_get_fstype(fs); - - d = cunescape(device); - p = cunescape(path); - if (!d || !p) - return log_oom(); - -- k = mount_add_one(m, d, p, o, fstype, 0, set_flags); -+ k = mount_add_one(m, d, p, options, fstype, 0, set_flags); - if (k < 0) - r = k; - } -@@ -1632,6 +1625,8 @@ static int mount_enumerate(Manager *m) { - int r; - assert(m); - -+ mnt_init_debug(0); -+ - if (!m->proc_self_mountinfo) { - struct epoll_event ev = { - .events = EPOLLPRI, diff --git a/SOURCES/0379-mount-monitor-for-utab-changes-with-inotify.patch b/SOURCES/0379-mount-monitor-for-utab-changes-with-inotify.patch deleted file mode 100644 index 54f4c80..0000000 --- a/SOURCES/0379-mount-monitor-for-utab-changes-with-inotify.patch +++ /dev/null @@ -1,209 +0,0 @@ -From 3c567125dd6e3f0f3a460d79701554ea4198c07b Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Thu, 18 Dec 2014 14:13:26 +0100 -Subject: [PATCH] mount: monitor for utab changes with inotify - -Parsing the mount table with libmount races against the mount command, -which will handle the actual mounting before updating utab. This means -the poll event on /proc/self/mountinfo can kick of a reparse in systemd -before the utab information is available. - -This change adds in an additional event source using inotify to watch -for changes to utab. It only watches for IN_MOVED_TO events, matching -libmount behavior of always overwriting this file using rename(2). - -This does add a second pass through the mount table parsing when utab is -updated. - -(based-on befb6d54948480f836d53d633bef27e3505818c1) - -Related: #1161417 ---- - src/core/manager.c | 3 ++- - src/core/manager.h | 2 ++ - src/core/mount.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++--- - src/core/mount.h | 2 +- - src/shared/util.h | 7 +++++ - 5 files changed, 88 insertions(+), 5 deletions(-) - -diff --git a/src/core/manager.c b/src/core/manager.c -index e48ea36..b0772ba 100644 ---- a/src/core/manager.c -+++ b/src/core/manager.c -@@ -1732,8 +1732,9 @@ static int process_event(Manager *m, struct epoll_event *ev) { - } - - case WATCH_MOUNT: -+ case WATCH_MOUNT_UTAB: - /* Some mount table change, intended for the mount subsystem */ -- mount_fd_event(m, ev->events); -+ mount_fd_event(m, w, ev->events); - break; - - case WATCH_SWAP: -diff --git a/src/core/manager.h b/src/core/manager.h -index 0133ea5..af66598 100644 ---- a/src/core/manager.h -+++ b/src/core/manager.h -@@ -58,6 +58,7 @@ enum WatchType { - WATCH_UNIT_TIMER, - WATCH_JOB_TIMER, - WATCH_MOUNT, -+ WATCH_MOUNT_UTAB, - WATCH_SWAP, - WATCH_UDEV, - WATCH_DBUS_WATCH, -@@ -178,6 +179,7 @@ struct Manager { - /* Data specific to the mount subsystem */ - FILE *proc_self_mountinfo; - Watch mount_watch; -+ Watch mount_watch_utab; - - /* Data specific to the swap filesystem */ - FILE *proc_swaps; -diff --git a/src/core/mount.c b/src/core/mount.c -index d78269c..efa46da 100644 ---- a/src/core/mount.c -+++ b/src/core/mount.c -@@ -25,6 +25,7 @@ - #include - #include - #include -+#include - - #include "manager.h" - #include "unit.h" -@@ -1619,6 +1620,11 @@ static void mount_shutdown(Manager *m) { - fclose(m->proc_self_mountinfo); - m->proc_self_mountinfo = NULL; - } -+ -+ if (m->mount_watch_utab.fd) { -+ close_nointr(m->mount_watch_utab.fd); -+ m->mount_watch_utab.fd=0; -+ } - } - - static int mount_enumerate(Manager *m) { -@@ -1644,6 +1650,35 @@ static int mount_enumerate(Manager *m) { - return -errno; - } - -+ if (!m->mount_watch_utab.fd) { -+ -+ struct epoll_event ev = { -+ .events = EPOLLIN, -+ .data.ptr = &m->mount_watch_utab, -+ }; -+ -+ m->mount_watch_utab.fd = inotify_init1(IN_NONBLOCK|IN_CLOEXEC); -+ if (m->mount_watch_utab.fd < 0) { -+ r = -errno; -+ goto fail; -+ } -+ -+ (void) mkdir_p_label("/run/mount", 0755); -+ -+ r = inotify_add_watch(m->mount_watch_utab.fd, "/run/mount", IN_MOVED_TO); -+ if (r < 0) { -+ r = -errno; -+ goto fail; -+ } -+ -+ m->mount_watch_utab.type = WATCH_MOUNT_UTAB; -+ -+ if (epoll_ctl(m->epoll_fd, EPOLL_CTL_ADD, m->mount_watch_utab.fd, &ev) < 0) { -+ r = -errno; -+ goto fail; -+ } -+ } -+ - r = mount_load_proc_self_mountinfo(m, false); - if (r < 0) - goto fail; -@@ -1655,16 +1690,54 @@ fail: - return r; - } - --void mount_fd_event(Manager *m, int events) { -+void mount_fd_event(Manager *m, Watch *w, int events) { - Unit *u; - int r; - - assert(m); -- assert(events & EPOLLPRI); -+ assert(w); -+ assert(events & (EPOLLPRI|EPOLLIN)); - - /* The manager calls this for every fd event happening on the - * /proc/self/mountinfo file, which informs us about mounting -- * table changes */ -+ * table changes -+ * This may also be called for /run/mount events */ -+ -+ if (w->type == WATCH_MOUNT_UTAB) { -+ bool rescan = false; -+ -+ /* FIXME: We *really* need to replace this with -+ * libmount's own API for this, we should not hardcode -+ * internal behaviour of libmount here. */ -+ -+ for (;;) { -+ uint8_t buffer[INOTIFY_EVENT_MAX] _alignas_(struct inotify_event); -+ struct inotify_event *e; -+ ssize_t l; -+ -+ l = read(w->fd, buffer, sizeof(buffer)); -+ if (l < 0) { -+ if (errno == EAGAIN || errno == EINTR) -+ break; -+ -+ log_error("Failed to read utab inotify: %s", strerror(errno)); -+ break; -+ } -+ -+ FOREACH_INOTIFY_EVENT(e, buffer, l) { -+ /* Only care about changes to utab, -+ * but we have to monitor the -+ * directory to reliably get -+ * notifications about when utab is -+ * replaced using rename(2) */ -+ if ((e->mask & IN_Q_OVERFLOW) || streq(e->name, "utab")) -+ rescan = true; -+ } -+ } -+ -+ if (!rescan) -+ return; -+ } - - r = mount_load_proc_self_mountinfo(m, true); - if (r < 0) { -diff --git a/src/core/mount.h b/src/core/mount.h -index 7cd4320..df0e541 100644 ---- a/src/core/mount.h -+++ b/src/core/mount.h -@@ -113,7 +113,7 @@ struct Mount { - - extern const UnitVTable mount_vtable; - --void mount_fd_event(Manager *m, int events); -+void mount_fd_event(Manager *m, Watch *w, int events); - - const char* mount_state_to_string(MountState i) _const_; - MountState mount_state_from_string(const char *s) _pure_; -diff --git a/src/shared/util.h b/src/shared/util.h -index d68f385..c5ef8b6 100644 ---- a/src/shared/util.h -+++ b/src/shared/util.h -@@ -791,3 +791,10 @@ static inline void qsort_safe(void *base, size_t nmemb, size_t size, - qsort(base, nmemb, size, compar); - } - } -+ -+#define INOTIFY_EVENT_MAX (sizeof(struct inotify_event) + NAME_MAX + 1) -+ -+#define FOREACH_INOTIFY_EVENT(e, buffer, sz) \ -+ for ((e) = (struct inotify_event*) (buffer); \ -+ (uint8_t*) (e) < (uint8_t*) (buffer) + (sz); \ -+ (e) = (struct inotify_event*) ((uint8_t*) (e) + sizeof(struct inotify_event) + (e)->len)) diff --git a/SOURCES/0380-mount-add-remote-fs-dependencies-if-needed-after-cha.patch b/SOURCES/0380-mount-add-remote-fs-dependencies-if-needed-after-cha.patch deleted file mode 100644 index 227a08d..0000000 --- a/SOURCES/0380-mount-add-remote-fs-dependencies-if-needed-after-cha.patch +++ /dev/null @@ -1,44 +0,0 @@ -From ebbcce68c7383217ad93537ef023e85b913d0478 Mon Sep 17 00:00:00 2001 -From: Chris Leech -Date: Sun, 23 Nov 2014 20:33:40 -0800 -Subject: [PATCH] mount: add remote-fs dependencies if needed after change - -This is an attempt to add it the remote-fs dependencies to a mount unit -if the options change, like when the utab options are picked up after -mountinfo has already been processed. It just adds the remote-fs -dependencies, leaving the local-fs ones in place. - -With this change I always get mount units with proper remote-fs -dependencies when mounted with the _netdev option. - -(cherry-picked from a6d305f91d722e136c29222070efed5c5d8b120b) - -Resolves: #1161417 ---- - src/core/mount.c | 13 +++++++++++++ - 1 file changed, 13 insertions(+) - -diff --git a/src/core/mount.c b/src/core/mount.c -index efa46da..a7987bf 100644 ---- a/src/core/mount.c -+++ b/src/core/mount.c -@@ -1499,6 +1499,19 @@ static int mount_add_one( - } - } - -+ if (m->running_as == SYSTEMD_SYSTEM) { -+ const char* target; -+ -+ target = mount_needs_network(options, fstype) ? SPECIAL_REMOTE_FS_TARGET : NULL; -+ /* _netdev option may have shown up late, or on a -+ * remount. Add remote-fs dependencies, even though -+ * local-fs ones may already be there */ -+ if (target) { -+ unit_add_dependency_by_name(u, UNIT_BEFORE, target, NULL, true); -+ load_extras = true; -+ } -+ } -+ - if (u->load_state == UNIT_NOT_FOUND) { - u->load_state = UNIT_LOADED; - u->load_error = 0; diff --git a/SOURCES/0381-mount-check-options-as-well-as-fstype-for-network-mo.patch b/SOURCES/0381-mount-check-options-as-well-as-fstype-for-network-mo.patch deleted file mode 100644 index bba353f..0000000 --- a/SOURCES/0381-mount-check-options-as-well-as-fstype-for-network-mo.patch +++ /dev/null @@ -1,87 +0,0 @@ -From 4971e2c8438da1a95cdc306e01e9a3c2349342ad Mon Sep 17 00:00:00 2001 -From: Chris Leech -Date: Sun, 23 Nov 2014 20:33:38 -0800 -Subject: [PATCH] mount: check options as well as fstype for network mounts - -When creating a new mount unit after an event on /proc/self/mountinfo, -check the mount options as well as the fstype to determine if this is a -remote mount that requires network access. - -Conflicts: - src/core/mount.c - -(cherry-picked from affc3d834347076e8616948978e70ed1fca84db4) - -Resolves: #1161417 ---- - src/core/mount.c | 33 ++++++++++++++++++++------------- - 1 file changed, 20 insertions(+), 13 deletions(-) - -diff --git a/src/core/mount.c b/src/core/mount.c -index a7987bf..6c3c7be 100644 ---- a/src/core/mount.c -+++ b/src/core/mount.c -@@ -75,18 +75,22 @@ static char* mount_test_option(const char *haystack, const char *needle) { - return hasmntopt(&me, needle); - } - --static bool mount_is_network(MountParameters *p) { -- assert(p); -- -- if (mount_test_option(p->options, "_netdev")) -+static bool mount_needs_network(const char *options, const char *fstype) { -+ if (mount_test_option(options, "_netdev")) - return true; - -- if (p->fstype && fstype_is_network(p->fstype)) -+ if (fstype && fstype_is_network(fstype)) - return true; - - return false; - } - -+static bool mount_is_network(MountParameters *p) { -+ assert(p); -+ -+ return mount_needs_network(p->options, p->fstype); -+} -+ - static bool mount_is_bind(MountParameters *p) { - assert(p); - -@@ -1446,9 +1450,6 @@ static int mount_add_one( - - u = manager_get_unit(m, e); - if (!u) { -- const char* const target = -- fstype_is_network(fstype) ? SPECIAL_REMOTE_FS_TARGET : SPECIAL_LOCAL_FS_TARGET; -- - delete = true; - - u = unit_new(m, sizeof(Mount)); -@@ -1475,14 +1476,20 @@ static int mount_add_one( - goto fail; - } - -- r = unit_add_dependency_by_name(u, UNIT_BEFORE, target, NULL, true); -- if (r < 0) -- goto fail; - -- if (should_umount(MOUNT(u))) { -- r = unit_add_dependency_by_name(u, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true); -+ if (m->running_as == SYSTEMD_SYSTEM) { -+ const char* target; -+ -+ target = mount_needs_network(options, fstype) ? SPECIAL_REMOTE_FS_TARGET : SPECIAL_LOCAL_FS_TARGET; -+ r = unit_add_dependency_by_name(u, UNIT_BEFORE, target, NULL, true); - if (r < 0) - goto fail; -+ -+ if (should_umount(MOUNT(u))) { -+ r = unit_add_dependency_by_name(u, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true); -+ if (r < 0) -+ goto fail; -+ } - } - - unit_add_to_load_queue(u); diff --git a/SOURCES/0382-rules-don-t-enable-usb-pm-for-Avocent-devices.patch b/SOURCES/0382-rules-don-t-enable-usb-pm-for-Avocent-devices.patch deleted file mode 100644 index b2c5291..0000000 --- a/SOURCES/0382-rules-don-t-enable-usb-pm-for-Avocent-devices.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 35b8533914a82d2ee8a667ec2afac0499dcbfb28 Mon Sep 17 00:00:00 2001 -From: Tom Hirst -Date: Wed, 25 Jun 2014 11:57:11 +0000 -Subject: [PATCH] rules: don't enable usb pm for Avocent devices - -The Avocent KVM over IP devices doesn't work correctly with USB power -management enabled. - -(cherry-picked from 52fb538361053f8c4abce0e40cd0bae3d28ceb16) - -Resolves: #1155370 ---- - rules/42-usb-hid-pm.rules | 4 ---- - 1 file changed, 4 deletions(-) - -diff --git a/rules/42-usb-hid-pm.rules b/rules/42-usb-hid-pm.rules -index 3fd6e8a..483a781 100644 ---- a/rules/42-usb-hid-pm.rules -+++ b/rules/42-usb-hid-pm.rules -@@ -11,10 +11,6 @@ ACTION=="add", SUBSYSTEM=="usb", ATTR{product}=="QEMU USB Mouse", ATTR{serial}== - ACTION=="add", SUBSYSTEM=="usb", ATTR{product}=="QEMU USB Tablet", ATTR{serial}=="42", TEST=="power/control", ATTR{power/control}="auto" - ACTION=="add", SUBSYSTEM=="usb", ATTR{product}=="QEMU USB Keyboard", ATTR{serial}=="42", TEST=="power/control", ATTR{power/control}="auto" - --# Catch-all for Avocent HID devices. Keyed off interface in order to only --# trigger on HID class devices. --ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0624", ATTR{bInterfaceClass}=="03", TEST=="../power/control", ATTR{../power/control}="auto" -- - # Dell DRAC 4 - ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="413c", ATTR{idProduct}=="2500", TEST=="power/control", ATTR{power/control}="auto" - diff --git a/SOURCES/0383-shared-install-avoid-prematurely-rejecting-missing-u.patch b/SOURCES/0383-shared-install-avoid-prematurely-rejecting-missing-u.patch deleted file mode 100644 index d524a12..0000000 --- a/SOURCES/0383-shared-install-avoid-prematurely-rejecting-missing-u.patch +++ /dev/null @@ -1,40 +0,0 @@ -From be49ecd6ee3af4aa83572ca413aa457058e3573d Mon Sep 17 00:00:00 2001 -From: Dave Reisner -Date: Thu, 30 Oct 2014 20:12:05 -0400 -Subject: [PATCH] shared/install: avoid prematurely rejecting "missing" units - -f7101b7368df copied some logic to prevent enabling masked units, but -also added a check which causes attempts to enable templated units to -fail. Since we know the logic beyond this check will properly handle -units which truly do not exist, we can rely on the unit file state -comparison to suffice for expressing the intent of f7101b7368df. - -ref: https://bugs.archlinux.org/task/42616 - -(Cherry-picked from 0ffce503cd6e5a5ff5ba5cd1cc23684cfb8bb9e3) - -Resolves: #1199981 ---- - src/shared/install.c | 8 +++----- - 1 file changed, 3 insertions(+), 5 deletions(-) - -diff --git a/src/shared/install.c b/src/shared/install.c -index 7a29798..13db732 100644 ---- a/src/shared/install.c -+++ b/src/shared/install.c -@@ -1522,12 +1522,10 @@ int unit_file_enable( - STRV_FOREACH(i, files) { - UnitFileState state; - -+ /* We only want to know if this unit is masked, so we ignore -+ * errors from unit_file_get_state, deferring other checks. -+ * This allows templated units to be enabled on the fly. */ - state = unit_file_get_state(scope, root_dir, *i); -- if (state < 0) { -- log_error("Failed to get unit file state for %s: %s", *i, strerror(-state)); -- return state; -- } -- - if (state == UNIT_FILE_MASKED || state == UNIT_FILE_MASKED_RUNTIME) { - log_error("Failed to enable unit: Unit %s is masked", *i); - return -ENOTSUP; diff --git a/SOURCES/0384-core-fix-enabling-units-via-their-absolute-paths.patch b/SOURCES/0384-core-fix-enabling-units-via-their-absolute-paths.patch deleted file mode 100644 index 257ade4..0000000 --- a/SOURCES/0384-core-fix-enabling-units-via-their-absolute-paths.patch +++ /dev/null @@ -1,36 +0,0 @@ -From a13006e07ad1c8f3de577b8b64f22a0e044784e7 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Tue, 10 Feb 2015 10:34:20 +0100 -Subject: [PATCH] core: fix enabling units via their absolute paths - -In case when client requests enable but gives us full path to unit file we -should call manager_load_unit with 2nd and 3rd argument swapped because we -don't want to search for unit file in usual places but rather load it directly. - -Related: #1199981 ---- - src/core/dbus-manager.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c -index cebc730..f35f23b 100644 ---- a/src/core/dbus-manager.c -+++ b/src/core/dbus-manager.c -@@ -1603,7 +1603,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, - STRV_FOREACH(i, l) { - Unit *u; - -- r = manager_load_unit(m, *i, NULL, NULL, &u); -+ r = path_is_absolute(*i) ? manager_load_unit(m, NULL, *i, NULL, &u) : manager_load_unit(m, *i, NULL, NULL, &u); - if (r < 0) { - dbus_set_error(&error, BUS_ERROR_NO_SUCH_UNIT, "Unit %s does not exist.", *i); - return bus_send_error_reply(connection, message, &error, -ENOENT); -@@ -1681,7 +1681,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, - STRV_FOREACH(i, l) { - Unit *u; - -- r = manager_load_unit(m, *i, NULL, NULL, &u); -+ r = path_is_absolute(*i) ? manager_load_unit(m, NULL, *i, NULL, &u) : manager_load_unit(m, *i, NULL, NULL, &u); - if (r < 0) { - dbus_set_error(&error, BUS_ERROR_NO_SUCH_UNIT, "Unit %s does not exist.", *i); - return bus_send_error_reply(connection, message, &error, -ENOENT); diff --git a/SOURCES/0385-Revert-units-fix-BindsTo-logic-when-applied-relative.patch b/SOURCES/0385-Revert-units-fix-BindsTo-logic-when-applied-relative.patch deleted file mode 100644 index a52830e..0000000 --- a/SOURCES/0385-Revert-units-fix-BindsTo-logic-when-applied-relative.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 1f4f34eb7592ec54f86040529c96d35efe97b219 Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Wed, 11 Mar 2015 11:29:40 +0100 -Subject: [PATCH] Revert "units: fix BindsTo= logic when applied relative to - services with Type=oneshot" - -This reverts commit 469d48cf685bd0157fa44ff7ebd3bd0302746ab0. - -Resolves: #1203803 ---- - src/core/unit.c | 48 ++++-------------------------------------------- - 1 file changed, 4 insertions(+), 44 deletions(-) - -diff --git a/src/core/unit.c b/src/core/unit.c -index f221b9a..b51e351 100644 ---- a/src/core/unit.c -+++ b/src/core/unit.c -@@ -1302,44 +1302,12 @@ static void unit_check_unneeded(Unit *u) { - if (unit_active_or_pending(other)) - return; - -- log_info_unit(u->id, "Unit %s is not needed anymore. Stopping.", u->id); -+ log_info_unit(u->id, "Service %s is not needed anymore. Stopping.", u->id); - - /* Ok, nobody needs us anymore. Sniff. Then let's commit suicide */ - manager_add_job(u->manager, JOB_STOP, u, JOB_FAIL, true, NULL, NULL); - } - --static void unit_check_binds_to(Unit *u) { -- bool stop = false; -- Unit *other; -- Iterator i; -- -- assert(u); -- -- if (u->job) -- return; -- -- if (unit_active_state(u) != UNIT_ACTIVE) -- return; -- -- SET_FOREACH(other, u->dependencies[UNIT_BINDS_TO], i) { -- if (other->job) -- continue; -- -- if (!UNIT_IS_INACTIVE_OR_FAILED(unit_active_state(other))) -- continue; -- -- stop = true; -- } -- -- if (!stop) -- return; -- -- log_info_unit(u->id, "Unit %s is bound to inactive service. Stopping, too.", u->id); -- -- /* A unit we need to run is gone. Sniff. Let's stop this. */ -- manager_add_job(u->manager, JOB_STOP, u, JOB_FAIL, true, NULL, NULL); --} -- - static void retroactively_start_dependencies(Unit *u) { - Iterator i; - Unit *other; -@@ -1643,19 +1611,11 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su - manager_recheck_journal(m); - unit_trigger_notify(u); - -- if (u->manager->n_reloading <= 0) { -- /* Maybe we finished startup and are now ready for -- * being stopped because unneeded? */ -+ /* Maybe we finished startup and are now ready for being -+ * stopped because unneeded? */ -+ if (u->manager->n_reloading <= 0) - unit_check_unneeded(u); - -- /* Maybe we finished startup, but something we needed -- * has vanished? Let's die then. (This happens when -- * something BindsTo= to a Type=oneshot unit, as these -- * units go directly from starting to inactive, -- * without ever entering started.) */ -- unit_check_binds_to(u); -- } -- - unit_add_to_dbus_queue(u); - unit_add_to_gc_queue(u); - } diff --git a/SOURCES/0386-run-drop-mistakenly-committed-test-code.patch b/SOURCES/0386-run-drop-mistakenly-committed-test-code.patch deleted file mode 100644 index 9ae34fa..0000000 --- a/SOURCES/0386-run-drop-mistakenly-committed-test-code.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 5fa9c2729f673aca07741506a5e490b58534ded8 Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 31 Jan 2014 18:03:15 +0100 -Subject: [PATCH] run: drop mistakenly committed test code - -Conflicts: - src/run/run.c - -Resolves: #1220272 ---- - src/run/run.c | 8 -------- - 1 file changed, 8 deletions(-) - -diff --git a/src/run/run.c b/src/run/run.c -index 93e3f88..a6abead 100644 ---- a/src/run/run.c -+++ b/src/run/run.c -@@ -315,14 +315,6 @@ static int start_transient_scope( - if (r < 0) - return r; - -- { -- const char *unique_id; -- sd_bus_get_unique_name(bus, &unique_id); -- r = sd_bus_message_append(m, "(sv)", "Controller", "s", unique_id); -- if (r < 0) -- return r; -- } -- - r = sd_bus_message_append(m, "(sv)", "PIDs", "au", 1, (uint32_t) getpid()); - if (r < 0) - return r; diff --git a/SOURCES/0387-cgroup-downgrade-log-messages-when-we-cannot-write-t.patch b/SOURCES/0387-cgroup-downgrade-log-messages-when-we-cannot-write-t.patch deleted file mode 100644 index 6e60fa7..0000000 --- a/SOURCES/0387-cgroup-downgrade-log-messages-when-we-cannot-write-t.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 4557f90ba7c744e5240e6b494f1eb1ef66ae6ea6 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Mon, 11 May 2015 13:17:03 +0200 -Subject: [PATCH] cgroup: downgrade log messages when we cannot write to cgroup - trees that are mounted read-only - -rhel-only (fixed in upstream differently) - -Resolves: #1220298 ---- - src/core/cgroup.c | 13 +++++++------ - 1 file changed, 7 insertions(+), 6 deletions(-) - -diff --git a/src/core/cgroup.c b/src/core/cgroup.c -index 5163ee4..71d64a1 100644 ---- a/src/core/cgroup.c -+++ b/src/core/cgroup.c -@@ -188,7 +188,7 @@ static int whitelist_device(const char *path, const char *node, const char *acc) - - r = cg_set_attribute("devices", path, "devices.allow", buf); - if (r < 0) -- log_warning("Failed to set devices.allow on %s: %s", path, strerror(-r)); -+ log_full(IN_SET(r, -ENOENT, -EROFS, -EINVAL) ? LOG_DEBUG : LOG_WARNING, "Failed to set devices.allow on %s: %s", path, strerror(-r)); - - return r; - } -@@ -208,7 +208,8 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha - sprintf(buf, "%lu\n", c->cpu_shares); - r = cg_set_attribute("cpu", path, "cpu.shares", buf); - if (r < 0) -- log_warning("Failed to set cpu.shares on %s: %s", path, strerror(-r)); -+ log_full(IN_SET(r, -ENOENT, -EROFS) ? LOG_DEBUG : LOG_WARNING, "Failed to set cpu.shares on %s: %s", path, strerror(-r)); -+ - } - - if (mask & CGROUP_BLKIO) { -@@ -221,7 +222,7 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha - sprintf(buf, "%lu\n", c->blockio_weight); - r = cg_set_attribute("blkio", path, "blkio.weight", buf); - if (r < 0) -- log_warning("Failed to set blkio.weight on %s: %s", path, strerror(-r)); -+ log_full(IN_SET(r, -ENOENT, -EROFS) ? LOG_DEBUG : LOG_WARNING, "Failed to set blkio.weight on %s: %s", path, strerror(-r)); - - /* FIXME: no way to reset this list */ - LIST_FOREACH(device_weights, w, c->blockio_device_weights) { -@@ -234,7 +235,7 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha - sprintf(buf, "%u:%u %lu", major(dev), minor(dev), w->weight); - r = cg_set_attribute("blkio", path, "blkio.weight_device", buf); - if (r < 0) -- log_error("Failed to set blkio.weight_device on %s: %s", path, strerror(-r)); -+ log_full(IN_SET(r, -ENOENT, -EROFS) ? LOG_DEBUG : LOG_WARNING, "Failed to set blkio.weight_device on %s: %s", path, strerror(-r)); - } - - /* FIXME: no way to reset this list */ -@@ -251,7 +252,7 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha - sprintf(buf, "%u:%u %" PRIu64 "\n", major(dev), minor(dev), b->bandwidth); - r = cg_set_attribute("blkio", path, a, buf); - if (r < 0) -- log_error("Failed to set %s on %s: %s", a, path, strerror(-r)); -+ log_full(IN_SET(r, -ENOENT, -EROFS) ? LOG_DEBUG : LOG_WARNING, "Failed to set %s on %s: %s", a, path, strerror(-r)); - } - } - -@@ -265,7 +266,7 @@ void cgroup_context_apply(CGroupContext *c, CGroupControllerMask mask, const cha - r = cg_set_attribute("memory", path, "memory.limit_in_bytes", "-1"); - - if (r < 0) -- log_error("Failed to set memory.limit_in_bytes on %s: %s", path, strerror(-r)); -+ log_full(IN_SET(r, -ENOENT, -EROFS) ? LOG_DEBUG : LOG_WARNING, "Failed to set memory.limit_in_bytes on %s: %s", path, strerror(-r)); - } - - if (mask & CGROUP_DEVICE) { diff --git a/SOURCES/0388-rules-load-sg-module.patch b/SOURCES/0388-rules-load-sg-module.patch deleted file mode 100644 index 9165218..0000000 --- a/SOURCES/0388-rules-load-sg-module.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 6d5b6bff86bca5db72a859330a29783fc5676935 Mon Sep 17 00:00:00 2001 -From: Lukas Nykryn -Date: Thu, 21 May 2015 09:23:04 +0200 -Subject: [PATCH] rules: load sg module - -Revert of 09637f743414e2c36d6c5b032d77d76dbeb86b31 -RHEL-only - -Resolves: #1223340 ---- - rules/40-redhat.rules | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/rules/40-redhat.rules b/rules/40-redhat.rules -index 2b494e5..b14f8a9 100644 ---- a/rules/40-redhat.rules -+++ b/rules/40-redhat.rules -@@ -1,3 +1,6 @@ - # do not edit this file, it will be overwritten on update - - SUBSYSTEM=="cpu", ACTION=="add", TEST=="online", ATTR{online}=="0", ATTR{online}="1" -+ -+# load SCSI generic (sg) driver -+SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST!="[module/sg]", RUN+="/sbin/modprobe -bv sg" diff --git a/SOURCES/0389-machined-force-machined-to-dispatch-messages.patch b/SOURCES/0389-machined-force-machined-to-dispatch-messages.patch deleted file mode 100644 index 8ebbf12..0000000 --- a/SOURCES/0389-machined-force-machined-to-dispatch-messages.patch +++ /dev/null @@ -1,95 +0,0 @@ -From 1ed560ffff6753d79f2f1da81447e5f8d3628ec1 Mon Sep 17 00:00:00 2001 -From: Alexander Solganik -Date: Wed, 29 Apr 2015 10:06:40 +0300 -Subject: [PATCH] machined: force machined to dispatch messages - -Fixes https://bugzilla.redhat.com/show_bug.cgi?format=multiple&id=1172387. - -Machined works in the follwing way : - -loop : - 1) perform GC (Note at the end) - 2) read messages from DBUS and dispatch one - 3) if more messages pending goto (1) - 3) perform GC (NOTE at the end) - 4) poll on DBUS fd - 5) goto step 1 - -This works fine, except that in step (3) and (1) -there is a message send/reply receive of - r = bus_method_call_with_reply( - manager->bus, - "org.freedesktop.systemd1", - "/org/freedesktop/systemd1", - "org.freedesktop.systemd1.Manager", - "StopUnit", - &reply, - error, - DBUS_TYPE_STRING, &unit, - DBUS_TYPE_STRING, &fail, - DBUS_TYPE_INVALID); - -which causes network layer to read/write messages to DBUS fd. In case that any -other message gets in during this send/receive cycle it wont be processed till -next stage (2) which will occur only in case that more messages are received -by machined. - -Cherry-picked from: rhel-only -Resolves: #1243401 ---- - src/machine/machined.c | 8 ++++++-- - src/machine/machined.h | 2 +- - 2 files changed, 7 insertions(+), 3 deletions(-) - -diff --git a/src/machine/machined.c b/src/machine/machined.c -index ad804a1..531e7ad 100644 ---- a/src/machine/machined.c -+++ b/src/machine/machined.c -@@ -243,20 +243,23 @@ fail: - return r; - } - --void manager_gc(Manager *m, bool drop_not_started) { -+bool manager_gc(Manager *m, bool drop_not_started) { - Machine *machine; -+ bool dbus_send_receive_performed = false; - - assert(m); - - while ((machine = m->machine_gc_queue)) { - LIST_REMOVE(Machine, gc_queue, m->machine_gc_queue, machine); - machine->in_gc_queue = false; -+ dbus_send_receive_performed = true; - - if (machine_check_gc(machine, drop_not_started) == 0) { - machine_stop(machine); - machine_free(machine); - } - } -+ return dbus_send_receive_performed; - } - - int manager_startup(Manager *m) { -@@ -301,7 +304,8 @@ int manager_run(Manager *m) { - if (dbus_connection_dispatch(m->bus) != DBUS_DISPATCH_COMPLETE) - continue; - -- manager_gc(m, true); -+ if (manager_gc(m, true)) -+ continue; - - n = epoll_wait(m->epoll_fd, &event, 1, -1); - if (n < 0) { -diff --git a/src/machine/machined.h b/src/machine/machined.h -index 780f516..3245e05 100644 ---- a/src/machine/machined.h -+++ b/src/machine/machined.h -@@ -59,7 +59,7 @@ int manager_enumerate_machines(Manager *m); - int manager_startup(Manager *m); - int manager_run(Manager *m); - --void manager_gc(Manager *m, bool drop_not_started); -+bool manager_gc(Manager *m, bool drop_not_started); - - int manager_get_machine_by_pid(Manager *m, pid_t pid, Machine **machine); - diff --git a/SPECS/systemd.spec b/SPECS/systemd.spec index 7d2e7c8..28af519 100644 --- a/SPECS/systemd.spec +++ b/SPECS/systemd.spec @@ -1,422 +1,291 @@ -%global _hardened_build 1 - # We ship a .pc file but don't want to have a dep on pkg-config. We # strip the automatically generated dep here and instead co-own the # directory. %global __requires_exclude pkg-config +%global _hardened_build 1 Name: systemd Url: http://www.freedesktop.org/wiki/Software/systemd -Version: 208 -Release: 20%{?dist}.6 +Version: 219 +Release: 19%{?dist} # For a breakdown of the licensing, see README License: LGPLv2+ and MIT and GPLv2+ Summary: A System and Service Manager Source0: http://www.freedesktop.org/software/systemd/%{name}-%{version}.tar.xz -# RHEL7 default preset policy +# Preset policy is in rhel-release package +# we are just disabling everything Source1: 99-default-disable.preset -# SysV convert script. -Source2: systemd-sysv-convert -# Stop-gap, just to ensure things work fine with rsyslog without having to change the package right-away -Source3: listen.conf # Prevent accidental removal of the systemd package -Source4: yum-protect-systemd.conf +Source2: yum-protect-systemd.conf +# SysV convert script. +Source3: systemd-sysv-convert # ship /etc/rc.d/rc.local https://bugzilla.redhat.com/show_bug.cgi?id=968401 -Source5: rc.local +Source4: rc.local #https://bugzilla.redhat.com/show_bug.cgi?id=1032711 -Source6: 60-alias-kmsg.rules - -# RHEL-specific: -Patch0001: 0001-units-add-Install-section-to-tmp.mount.patch -Patch0002: 0002-man-explain-NAME-in-systemctl-man-page.patch -Patch0003: 0003-fix-lingering-references-to-var-lib-backlight-random.patch -Patch0004: 0004-cryptsetup-fix-OOM-handling-when-parsing-mount-optio.patch -Patch0005: 0005-journald-add-missing-error-check.patch -Patch0006: 0006-bus-fix-potentially-uninitialized-memory-access.patch -Patch0007: 0007-dbus-fix-return-value-of-dispatch_rqueue.patch -Patch0008: 0008-modules-load-fix-error-handling.patch -Patch0009: 0009-efi-never-call-qsort-on-potentially-NULL-arrays.patch -Patch0010: 0010-strv-don-t-access-potentially-NULL-string-arrays.patch -Patch0011: 0011-mkdir-pass-a-proper-function-pointer-to-mkdir_safe_i.patch -Patch0012: 0012-tmpfiles.d-include-setgid-perms-for-run-log-journal.patch -Patch0013: 0013-gpt-auto-generator-exit-immediately-if-in-container.patch -Patch0014: 0014-systemd-order-remote-mounts-from-mountinfo-before-re.patch -Patch0015: 0015-manager-when-verifying-whether-clients-may-change-en.patch -Patch0016: 0016-mount-check-for-NULL-before-reading-pm-what.patch -Patch0017: 0017-core-do-not-add-what-to-RequiresMountsFor-for-networ.patch -Patch0018: 0018-systemd-serialize-deserialize-forbid_restart-value.patch -Patch0019: 0019-core-unify-the-way-we-denote-serialization-attribute.patch -Patch0020: 0020-journald-fix-minor-memory-leak.patch -Patch0021: 0021-journald-remove-rotated-file-from-hashmap-when-rotat.patch -Patch0022: 0022-udevadm.xml-document-resolve-names-option-for-test.patch -Patch0023: 0023-dbus-common-avoid-leak-in-error-path.patch -Patch0024: 0024-drop-ins-check-return-value.patch -Patch0025: 0025-shared-util-Fix-glob_extend-argument.patch -Patch0026: 0026-Fix-for-SIGSEGV-in-systemd-bootchart-on-short-living.patch -Patch0027: 0027-man-document-the-b-special-boot-option.patch -Patch0028: 0028-tmpfiles-log-unaccessible-FUSE-mount-points-only-as-.patch -Patch0029: 0029-shared-util-fix-off-by-one-error-in-tag_to_udev_node.patch -Patch0030: 0030-Configurable-Timeouts-Restarts-default-values.patch -Patch0031: 0031-manager-configurable-StartLimit-default-values.patch -Patch0032: 0032-sysctl-bring-back-etc-sysctl.conf.patch -Patch0033: 0033-systemd-treat-reload-failure-as-failure.patch -Patch0034: 0034-journal-when-appending-to-journal-file-allocate-larg.patch -Patch0035: 0035-journal-optimize-bisection-logic-a-bit-by-caching-th.patch -Patch0036: 0036-journal-fix-iteration-when-we-go-backwards-from-the-.patch -Patch0037: 0037-journal-allow-journal_file_copy_entry-to-work-on-non.patch -Patch0038: 0038-journal-simplify-pre-allocation-logic.patch -Patch0039: 0039-journald-mention-how-long-we-needed-to-flush-to-var-.patch -Patch0040: 0040-Never-call-qsort-on-potentially-NULL-arrays.patch -Patch0041: 0041-localed-match-converted-keymaps-before-legacy.patch -Patch0042: 0042-core-socket-fix-SO_REUSEPORT.patch -Patch0043: 0043-activate-fix-crash-when-s-is-passed.patch -Patch0044: 0044-systemd-python-fix-booted-and-add-two-functions-to-d.patch -Patch0045: 0045-util.c-check-if-return-value-from-ttyname_r-is-0-ins.patch -Patch0046: 0046-activate-mention-E-in-the-help-text.patch -Patch0047: 0047-docs-remove-unneeded-the-s-in-gudev-docs.patch -Patch0048: 0048-man-explicitly-say-when-multiple-units-can-be-specif.patch -Patch0049: 0049-util-fix-handling-of-trailing-whitespace-in-split_qu.patch -Patch0050: 0050-man-Improve-the-description-of-parameter-X-in-tmpfil.patch -Patch0051: 0051-coredumpctl-in-case-of-error-free-pattern-after-prin.patch -Patch0052: 0052-udev-net_id-Introduce-predictable-network-names-for-.patch -Patch0053: 0053-tmpfiles-don-t-allow-label_fix-to-print-ENOENT-when-.patch -Patch0054: 0054-delta-ensure-that-d_type-will-be-set-on-every-fs.patch -Patch0055: 0055-shell-completion-dump-has-moved-to-systemd-analyze.patch -Patch0056: 0056-shell-completion-remove-load-from-systemctl.patch -Patch0057: 0057-Fix-SELinux-check-for-transient-units.-1008864.patch -Patch0058: 0058-acpi-fptd-fix-memory-leak-in-acpi_get_boot_usec.patch -Patch0059: 0059-acpi-make-sure-we-never-free-an-uninitialized-pointe.patch -Patch0060: 0060-systemctl-fix-name-mangling-for-sysv-units.patch -Patch0061: 0061-execute-more-debugging-messages.patch -Patch0062: 0062-logind-fix-bus-introspection-data-for-TakeControl.patch -Patch0063: 0063-utf8-fix-utf8_is_printable.patch -Patch0064: 0064-keymap-Fix-Samsung-900X-34-C.patch -Patch0065: 0065-do-not-accept-garbage-from-acpi-firmware-performance.patch -Patch0066: 0066-login-fix-invalid-free-in-sd_session_get_vt.patch -Patch0067: 0067-login-make-sd_session_get_vt-actually-work.patch -Patch0068: 0068-Make-sure-that-we-don-t-dereference-NULL.patch -Patch0069: 0069-gitignore-ignore-clang-analyze-output.patch -Patch0070: 0070-man-add-more-markup-to-udevadm-8.patch -Patch0071: 0071-Fix-bad-assert-in-show_pid_array.patch -Patch0072: 0072-Never-call-qsort-on-potentially-NULL-arrays.patch -Patch0073: 0073-rules-expose-loop-block-devices-to-systemd.patch -Patch0074: 0074-rules-don-t-limit-some-of-the-rules-to-the-add-actio.patch -Patch0075: 0075-hwdb-update.patch -Patch0076: 0076-rules-remove-pointless-MODE-settings.patch -Patch0077: 0077-catalog-remove-links-to-non-existent-wiki-pages.patch -Patch0078: 0078-udev-builtin-path_id-add-support-for-bcma-bus.patch -Patch0079: 0079-libudev-default-log_priority-to-INFO.patch -Patch0080: 0080-nspawn-only-pass-in-slice-setting-if-it-is-set.patch -Patch0081: 0081-zsh-completion-add-systemd-run.patch -Patch0082: 0082-systemctl-fix-typo-in-help-text.patch -Patch0083: 0083-detect_virtualization-returns-NULL-pass-empty-string.patch -Patch0084: 0084-udev-builtin-keyboard-Fix-large-scan-codes-on-32-bit.patch -Patch0085: 0085-nspawn-log-out-of-memory-errors.patch -Patch0086: 0086-man-fix-typo.patch -Patch0087: 0087-man-do-not-use-term-in-para.patch -Patch0088: 0088-shutdown-trim-the-cgroup-tree-on-loop-iteration.patch -Patch0089: 0089-run-support-system-to-match-other-commands-even-if-r.patch -Patch0090: 0090-acpi-fpdt-break-on-zero-or-negative-length-read.patch -Patch0091: 0091-man-add-rationale-into-systemd-halt-8.patch -Patch0092: 0092-systemd-python-convert-keyword-value-to-string.patch -Patch0093: 0093-Make-hibernation-test-work-for-swap-files.patch -Patch0094: 0094-man-add-docs-for-sd_is_special-and-some-man-page-sym.patch -Patch0095: 0095-systemctl-return-r-instead-of-always-returning-0.patch -Patch0096: 0096-journal-fix-minor-memory-leak.patch -Patch0097: 0097-man-units-fix-installation-of-systemd-nspawn-.servic.patch -Patch0098: 0098-systemd-fix-memory-leak-in-cgroup-code.patch -Patch0099: 0099-button-don-t-exit-if-we-cannot-handle-a-button-press.patch -Patch0100: 0100-timer-properly-format-relative-timestamps-in-the-fut.patch -Patch0101: 0101-timer-consider-usec_t-1-an-invalid-timestamp.patch -Patch0102: 0102-Resolve-dev-console-to-the-active-tty-instead-of-jus.patch -Patch0103: 0103-Only-disable-output-on-console-during-boot-if-needed.patch -Patch0104: 0104-Fix-possible-lack-of-status-messages-on-shutdown-reb.patch -Patch0105: 0105-random-seed-improve-debugging-messages-a-bit.patch -Patch0106: 0106-Fix-RemainAfterExit-services-keeping-a-hold-on-conso.patch -Patch0107: 0107-keymap-Add-Toshiba-Satellite-U940.patch -Patch0108: 0108-calendar-support-yearly-and-annually-names-the-same-.patch -Patch0109: 0109-hashmap-be-a-bit-more-conservative-with-pre-allocati.patch -Patch0110: 0110-manager-don-t-do-plymouth-in-a-container.patch -Patch0111: 0111-hwdb-Update-database-of-Bluetooth-company-identifier.patch -Patch0112: 0112-automount-log-info-about-triggering-process.patch -Patch0113: 0113-hwdb-Update-database-of-Bluetooth-company-identifier.patch -Patch0114: 0114-journal-fail-silently-in-sd_j_sendv-if-journal-is-un.patch -Patch0115: 0115-Fix-memory-leak-in-stdout-journal-streams.patch -Patch0116: 0116-man-document-is-enabled-output.patch -Patch0117: 0117-hostnamed-avoid-using-NULL-in-error-path.patch -Patch0118: 0118-core-do-not-segfault-if-swap-activity-happens-when-p.patch -Patch0119: 0119-kernel-install-add-h-help.patch -Patch0120: 0120-kernel-install-fix-help-output.patch -Patch0121: 0121-man-improve-wording-and-comma-usage-in-systemd.journ.patch -Patch0122: 0122-drop-several-entries-from-kbd-model-map-whose-kbd-la.patch -Patch0123: 0123-correct-name-of-Tajik-kbd-layout-in-kbd-model-map.patch -Patch0124: 0124-hwdb-Update-database-of-Bluetooth-company-identifier.patch -Patch0125: 0125-Ensure-unit-is-journaled-for-short-lived-or-oneshot-.patch -Patch0126: 0126-core-manager-remove-infinite-loop.patch -Patch0127: 0127-util-check-for-overflow-in-greedy_realloc.patch -Patch0128: 0128-journald-use-a-bit-more-cleanup-magic.patch -Patch0129: 0129-activate-clean-up-inherited-descriptors.patch -Patch0130: 0130-man-explain-in-more-detail-how-SYSTEMD_READY-influen.patch -Patch0131: 0131-units-don-t-run-readahead-done-timers-in-containers.patch -Patch0132: 0132-nspawn-complain-and-continue-if-machine-has-same-id.patch -Patch0133: 0133-man-beef-up-ExecStart-description.patch -Patch0134: 0134-man-remove-advice-to-avoid-setting-the-same-var-more.patch -Patch0135: 0135-systemctl-add-the-plain-option-to-the-help-message.patch -Patch0136: 0136-Fix-a-few-resource-leaks-in-error-paths.patch -Patch0137: 0137-Fix-a-few-signed-unsigned-format-string-issues.patch -Patch0138: 0138-journal-file-protect-against-alloca-0.patch -Patch0139: 0139-man-describe-journalctl-show-cursor.patch -Patch0140: 0140-journal-fix-against-theoretical-undefined-behavior.patch -Patch0141: 0141-journald-downgrade-warning-message-when-dev-kmsg-doe.patch -Patch0142: 0142-journal-file.c-remove-redundant-assignment-of-variab.patch -Patch0143: 0143-login-Don-t-stop-a-running-user-manager-from-garbage.patch -Patch0144: 0144-log-when-we-log-to-dev-console-and-got-disconnected-.patch -Patch0145: 0145-loginctl-when-showing-device-tree-of-seats-with-no-d.patch -Patch0146: 0146-man-be-more-explicit-about-option-arguments-that-tak.patch -Patch0147: 0147-man-add-DOI-for-refereed-article-on-Forward-Secure-S.patch -Patch0148: 0148-keymap-Refactor-Acer-tables.patch -Patch0149: 0149-logind-remove-dead-variable.patch -Patch0150: 0150-hwdb-update.patch -Patch0151: 0151-delta-replace-readdir_r-with-readdir.patch -Patch0152: 0152-delta-fix-delta-for-drop-ins.patch -Patch0153: 0153-delta-if-prefix-is-specified-only-show-overrides-the.patch -Patch0154: 0154-man-units-tmpfiles.d-5-cleanup.patch -Patch0155: 0155-tmpfiles-introduce-the-concept-of-unsafe-operations.patch -Patch0156: 0156-sleep-config-fix-useless-check-for-swapfile-type.patch -Patch0157: 0157-man-resolve-word-omissions.patch -Patch0158: 0158-man-improvements-to-comma-placement.patch -Patch0159: 0159-man-grammar-and-wording-improvements.patch -Patch0160: 0160-man-document-fail-nofail-auto-noauto.patch -Patch0161: 0161-man-fix-description-of-is-enabled-returned-value.patch -Patch0162: 0162-man-fix-Type-reference.patch -Patch0163: 0163-man-fix-Type-reference-v2.patch -Patch0164: 0164-hwdb-Update-database-of-Bluetooth-company-identifier.patch -Patch0165: 0165-man-add-a-note-about-propagating-signals.patch -Patch0166: 0166-man-include-autoconf-snippet-in-daemon-7.patch -Patch0167: 0167-systemd-python-fix-setting-of-exception-codes.patch -Patch0168: 0168-systemd-python-fix-listen_fds-under-Python-2.patch -Patch0169: 0169-man-expand-on-some-more-subtle-points-in-systemd.soc.patch -Patch0170: 0170-tmpfiles-rename-unsafe-to-boot.patch -Patch0171: 0171-sleep-config-Dereference-pointer-before-check-for-NU.patch -Patch0172: 0172-sleep-config-fix-double-free.patch -Patch0173: 0173-core-service-check-if-mainpid-matches-only-if-it-is-.patch -Patch0174: 0174-man-typo-fix.patch -Patch0175: 0175-swap-remove-if-else-with-the-same-data-path.patch -Patch0176: 0176-hwdb-update.patch -Patch0177: 0177-journal-Add-missing-byte-order-conversions.patch -Patch0178: 0178-hwdb-change-key-mappings-for-Samsung-90X3A.patch -Patch0179: 0179-hwdb-add-Samsung-700G.patch -Patch0180: 0180-hwdb-remove-duplicate-entry-for-Samsung-700Z.patch -Patch0181: 0181-hwdb-fix-match-for-Thinkpad-X201-tablet.patch -Patch0182: 0182-keymap-Recognize-different-Toshiba-Satellite-capital.patch -Patch0183: 0183-sleep.c-fix-typo.patch -Patch0184: 0184-man-mention-which-variables-will-be-expanded-in-Exec.patch -Patch0185: 0185-hwdb-Add-support-for-Toshiba-Satellite-P75-A7200-key.patch -Patch0186: 0186-journal-fix-access-to-munmapped-memory-in-sd_journal.patch -Patch0187: 0187-gpt-auto-generator-skip-nonexistent-devices.patch -Patch0188: 0188-gpt-auto-generator-use-EBADSLT-code-when-unable-to-d.patch -Patch0189: 0189-nspawn-explicitly-terminate-machines-when-we-exit-ns.patch -Patch0190: 0190-bash-completion-journalctl-file.patch -Patch0191: 0191-journalctl-zsh-completion-fix-several-issues-in-help.patch -Patch0192: 0192-cgroup-run-PID-1-in-the-root-cgroup.patch -Patch0193: 0193-pam-retrieve-value-of-debug-param-first.patch -Patch0194: 0194-utils-silence-the-compiler-warning.patch -Patch0195: 0195-s390-getty-generator-initialize-essential-system-ter.patch -Patch0196: 0196-pam-use-correct-log-level.patch -Patch0197: 0197-pam-do-not-set-XDG_RUNTIME_DIR-unconditionally.patch -Patch0198: 0198-selinux-Don-t-attempt-to-load-policy-in-initramfs-if.patch -Patch0199: 0199-kernel-install-add-fedora-specific-callouts-to-new-k.patch -Patch0200: 0200-remove-user-.service.patch -Patch0201: 0201-Fix-bad-assert-in-show_pid_array.patch -Patch0202: 0202-mount-don-t-send-out-PropertiesChanged-message-if-ac.patch -Patch0203: 0203-udev-rules-setup-tty-permissions-and-group-for-sclp_.patch -Patch0204: 0204-cdrom_id-use-the-old-MMC-fallback.patch -Patch0205: 0205-core-introduce-new-stop-protocol-for-unit-scopes.patch -Patch0206: 0206-core-watch-SIGCHLD-more-closely-to-track-processes-o.patch -Patch0207: 0207-logind-rework-session-shutdown-logic.patch -Patch0208: 0208-logind-order-all-scopes-after-both-systemd-logind.se.patch -Patch0209: 0209-logind-given-that-we-can-now-relatively-safely-shutd.patch -Patch0210: 0210-utmp-make-sure-we-don-t-write-the-utmp-reboot-record.patch -Patch0211: 0211-rules-mark-loop-device-as-SYSTEMD_READY-0-if-no-file.patch -Patch0212: 0212-logind-fix-reference-to-systemd-user-sessions.servic.patch -Patch0213: 0213-logind-add-forgotten-call-to-user_send_changed.patch -Patch0214: 0214-logind-save-session-after-setting-the-stopping-flag.patch -Patch0215: 0215-logind-save-user-state-after-stopping-the-session.patch -Patch0216: 0216-logind-initialize-timer_fd.patch -Patch0217: 0217-service-don-t-create-extra-cgroup-for-control-proces.patch -Patch0218: 0218-logind-pass-pointer-to-User-object-to-user_save.patch -Patch0219: 0219-fstab-generator-When-parsing-the-root-cmdline-option.patch -Patch0220: 0220-gpt-auto-generator-Generate-explicit-dependencies-on.patch -Patch0221: 0221-fstab-generator-Generate-explicit-dependencies-on-sy.patch -Patch0222: 0222-fsck-root-only-run-when-requested-in-fstab.patch -Patch0223: 0223-core-allow-PIDs-to-be-watched-by-two-units-at-the-sa.patch -Patch0224: 0224-core-correctly-unregister-PIDs-from-PID-hashtables.patch -Patch0225: 0225-logind-uninitialized-timer_fd-is-set-to-1.patch -Patch0226: 0226-logind-add-forgotten-return-statement.patch -Patch0227: 0227-core-remove-extra-semicolon-and-make-gcc-shut-up.patch -Patch0228: 0228-core-fix-detection-of-dead-processes.patch -Patch0229: 0229-Fix-prototype-of-get_process_state.patch -Patch0230: 0230-core-check-for-return-value-from-get_process_state.patch -Patch0231: 0231-unit-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch -Patch0232: 0232-logind-session-save-stopping-flag.patch -Patch0233: 0233-units-serial-getty-.service-add-Install-section.patch -Patch0234: 0234-units-order-network-online.target-after-network.targ.patch -Patch0235: 0235-util-consider-both-fuse.glusterfs-and-glusterfs-netw.patch -Patch0236: 0236-core-make-StopWhenUnneeded-work-in-conjunction-with-.patch -Patch0237: 0237-cgroups-agent-down-grade-log-level.patch -Patch0238: 0238-random-seed-raise-POOL_SIZE_MIN-constant-to-1024.patch -Patch0239: 0239-delta-do-not-use-unicode-chars-in-C-locale.patch -Patch0240: 0240-core-print-debug-instead-of-error-message.patch -Patch0241: 0241-journald-always-add-syslog-facility-for-messages-com.patch -Patch0242: 0242-Introduce-_cleanup_endmntent_.patch -Patch0243: 0243-Introduce-_cleanup_fdset_free_.patch -Patch0244: 0244-Introduce-udev-object-cleanup-functions.patch -Patch0245: 0245-fsck-modernization.patch -Patch0246: 0246-fsck-fstab-generator-be-lenient-about-missing-fsck.-.patch -Patch0247: 0247-rules-60-persistent-storage-add-nvme-pcie-ssd-scsi_i.patch -Patch0248: 0248-cgls-fix-running-with-M-option.patch -Patch0249: 0249-units-when-spawning-a-getty-configure-TERM-explicitl.patch -Patch0250: 0250-getty-Start-getty-on-3270-terminals-available-on-Lin.patch -Patch0251: 0251-core-Added-support-for-ERRNO-NOTIFY_SOCKET-message-p.patch -Patch0252: 0252-service-don-t-accept-negative-ERRNO-notification-mes.patch -Patch0253: 0253-socket-add-SocketUser-and-SocketGroup-for-chown-ing-.patch -Patch0254: 0254-selinux-Check-access-vector-for-enable-and-disable-p.patch -Patch0255: 0255-systemctl-show-StatusErrno-value-in-systemctl-status.patch -Patch0256: 0256-service-flush-status-text-and-errno-values-each-time.patch -Patch0257: 0257-service-don-t-free-status_text-twice.patch -Patch0258: 0258-util-add-files_same-helper-function.patch -Patch0259: 0259-systemctl-for-switch-root-check-if-we-switch-to-a-sy.patch -Patch0260: 0260-shared-include-root-when-canonicalizing-conf-paths.patch -Patch0261: 0261-shared-add-root-argument-to-search_and_fopen.patch -Patch0262: 0262-machine-id-add-root-option-to-operate-on-an-alternat.patch -Patch0263: 0263-conf-files-fix-when-for-root-logic.patch -Patch0264: 0264-Make-systemctl-root-look-for-files-in-the-proper-pla.patch -Patch0265: 0265-tmpfiles-fix-memory-leak-of-exclude_prefixes.patch -Patch0266: 0266-tmpfiles-add-root-option-to-operate-on-an-alternate-.patch -Patch0267: 0267-conf-files-include-root-in-returned-file-paths.patch -Patch0268: 0268-install-make-sure-that-root-mode-doesn-t-make-us-con.patch -Patch0269: 0269-shared-install-do-not-prefix-created-symlink-with-ro.patch -Patch0270: 0270-systemctl-fail-in-the-case-that-no-unit-files-were-f.patch -Patch0271: 0271-units-make-ExecStopPost-action-part-of-ExecStart.patch -Patch0272: 0272-systemctl-fix-broken-list-unit-files-with-root.patch -Patch0273: 0273-machine-id-only-look-into-KVM-uuid-when-we-are-not-r.patch -Patch0274: 0274-util-reset-signals-when-we-fork-off-agents.patch -Patch0275: 0275-util-fix-minimal-race-where-we-might-miss-SIGTERMs-w.patch -Patch0276: 0276-udev-do-not-skip-the-execution-of-RUN-when-renaming-.patch -Patch0277: 0277-man-mention-System-Administrator-s-Guide-in-systemct.patch -Patch0278: 0278-vconsole-also-copy-character-maps-not-just-fonts-fro.patch -Patch0279: 0279-vconsole-setup-run-setfont-before-loadkeys.patch -Patch0280: 0280-vconsole-setup-fix-inverted-error-messages.patch -Patch0281: 0281-localed-consider-an-unset-model-as-a-wildcard.patch -Patch0282: 0282-systemd-detect-virt-detect-s390-virtualization.patch -Patch0283: 0283-systemctl-unbreak-switchroot.patch -Patch0284: 0284-systemd-detect-virt-fix-detect-s390-virtualization.patch -Patch0285: 0285-exec-Add-SELinuxContext-configuration-item.patch -Patch0286: 0286-exec-Ignore-the-setting-SELinuxContext-if-selinux-is.patch -Patch0287: 0287-exec-Add-support-for-ignoring-errors-on-SELinuxConte.patch -Patch0288: 0288-core-store-and-expose-SELinuxContext-field-normalize.patch -Patch0289: 0289-socket-introduce-SELinuxContextFromNet-option.patch -Patch0290: 0290-sysctl-make-prefix-allow-all-kinds-of-sysctl-paths.patch -Patch0291: 0291-core-make-sure-to-serialize-jobs-for-all-units.patch -Patch0292: 0292-man-mention-localectl-in-locale.conf.patch -Patch0293: 0293-rules-automatically-online-hot-added-CPUs.patch -Patch0294: 0294-rules-add-rule-for-naming-Dell-iDRAC-USB-Virtual-NIC.patch -Patch0295: 0295-bash-completion-add-verb-set-property.patch -Patch0296: 0296-man-update-journald-rate-limit-defaults.patch -Patch0297: 0297-core-don-t-try-to-connect-to-d-bus-after-switchroot.patch -Patch0298: 0298-localed-log-locale-keymap-changes-in-detail.patch -Patch0299: 0299-localed-introduce-helper-function-to-simplify-matchi.patch -Patch0300: 0300-localed-check-for-partially-matching-converted-keyma.patch -Patch0301: 0301-fileio-make-parse_env_file-return-number-of-parsed-i.patch -Patch0302: 0302-localectl-print-warning-when-there-are-options-given.patch -Patch0303: 0303-dbus-fix-crash-when-appending-selinux-context.patch -Patch0304: 0304-tmpfiles-minor-modernizations.patch -Patch0305: 0305-install-when-looking-for-a-unit-file-for-enabling-se.patch -Patch0306: 0306-install-remove-unused-variable.patch -Patch0307: 0307-bootctl-typo-fix-in-help-message.patch -Patch0308: 0308-logind-ignore-failing-close-on-session-devices.patch -Patch0309: 0309-sysfs-show.c-return-negative-error.patch -Patch0310: 0310-core-only-send-SIGHUP-when-doing-first-kill-not-when.patch -Patch0311: 0311-cgroup-make-sure-to-properly-send-SIGCONT-to-all-pro.patch -Patch0312: 0312-core-don-t-send-duplicate-SIGCONT-when-killing-units.patch -Patch0313: 0313-efi-fix-Undefined-reference-efi_loader_get_boot_usec.patch -Patch0314: 0314-macro-better-make-IN_SET-macro-use-const-arrays.patch -Patch0315: 0315-macro-make-sure-we-can-use-IN_SET-also-with-complex-.patch -Patch0316: 0316-core-fix-property-changes-in-transient-units.patch -Patch0317: 0317-load-modules-properly-return-a-failing-error-code-if.patch -Patch0318: 0318-core-unit-fix-unit_add_target_dependencies-for-units.patch -Patch0319: 0319-man-there-is-no-ExecStopPre-for-service-units.patch -Patch0320: 0320-man-document-that-per-interface-sysctl-variables-are.patch -Patch0321: 0321-journal-downgrade-vaccuum-message-to-debug-level.patch -Patch0322: 0322-logs-show-fix-corrupt-output-with-empty-messages.patch -Patch0323: 0323-journalctl-refuse-extra-arguments-with-verify-and-si.patch -Patch0324: 0324-journal-assume-that-next-entry-is-after-previous-ent.patch -Patch0325: 0325-journal-forget-file-after-encountering-an-error.patch -Patch0326: 0326-man-update-link-to-LSB.patch -Patch0327: 0327-man-systemd-bootchart-fix-spacing-in-command.patch -Patch0328: 0328-man-add-missing-comma.patch -Patch0329: 0329-units-Do-not-unescape-instance-name-in-systemd-backl.patch -Patch0330: 0330-manager-flush-memory-stream-before-using-the-buffer.patch -Patch0331: 0331-man-multiple-sleep-modes-are-to-be-separated-by-whit.patch -Patch0332: 0332-man-fix-description-of-systemctl-after-before.patch -Patch0333: 0333-udev-properly-detect-reference-to-unexisting-part-of.patch -Patch0334: 0334-gpt-auto-generator-don-t-return-OOM-on-parentless-de.patch -Patch0335: 0335-man-improve-wording-of-systemctl-s-after-before.patch -Patch0336: 0336-cgroup-it-s-not-OK-to-invoke-alloca-in-loops.patch -Patch0337: 0337-core-don-t-try-to-relabel-mounts-before-we-loaded-th.patch -Patch0338: 0338-systemctl-kill-mode-is-long-long-gone-don-t-mention-.patch -Patch0339: 0339-ask-password-when-the-user-types-a-overly-long-passw.patch -Patch0340: 0340-logind-don-t-print-error-if-devices-vanish-during-AC.patch -Patch0341: 0341-tty-ask-password-agent-return-negative-errno.patch -Patch0342: 0342-journal-cleanup-up-error-handling-in-update_catalog.patch -Patch0343: 0343-bash-completion-fix-__get_startable_units.patch -Patch0344: 0344-core-check-the-right-variable-for-failed-open.patch -Patch0345: 0345-util-allow-trailing-semicolons-on-define_trivial_cle.patch -Patch0346: 0346-man-sd_journal_send-does-nothing-when-journald-is-no.patch -Patch0347: 0347-man-clarify-that-the-ExecReload-command-should-be-sy.patch -Patch0348: 0348-conf-parser-never-consider-it-an-error-if-we-cannot-.patch -Patch0349: 0349-socket-properly-handle-if-our-service-vanished-durin.patch -Patch0350: 0350-Do-not-unescape-unit-names-in-Install-section.patch -Patch0351: 0351-util-ignore_file-should-not-allow-files-ending-with.patch -Patch0352: 0352-core-fix-invalid-free-in-killall.patch -Patch0353: 0353-install-fix-invalid-free-in-unit_file_mask.patch -Patch0354: 0354-unit-name-fix-detection-of-unit-templates-instances.patch -Patch0355: 0355-journald-make-MaxFileSec-really-default-to-1month.patch -Patch0356: 0356-bootchart-it-s-not-OK-to-return-1-from-a-main-progra.patch -Patch0357: 0357-journald-Fix-off-by-one-error-in-Missed-X-kernel-mes.patch -Patch0358: 0358-man-drop-references-to-removed-and-obsolete-systemct.patch -Patch0359: 0359-units-fix-BindsTo-logic-when-applied-relative-to-ser.patch -Patch0360: 0360-core-don-t-allow-enabling-if-unit-is-masked.patch -Patch0361: 0361-man-systemctl-document-enable-on-masked-units.patch -Patch0362: 0362-core-do-not-segfault-if-proc-swaps-cannot-be-opened.patch -Patch0363: 0363-man-we-don-t-have-Wanted-dependency.patch -Patch0364: 0364-environment-append-unit_id-to-error-messages-regardi.patch -Patch0365: 0365-udevd-add-event-timeout-commandline-option.patch -Patch0366: 0366-selinux-fix-potential-double-free-crash-in-child-pro.patch -Patch0367: 0367-selinux-pass-flag-to-correct-exec_spawn.patch -Patch0368: 0368-selinux-set-selinux-context-applied-on-exec-before-c.patch -Patch0369: 0369-logind-use-correct-who-enum-values-with-KillUnit.patch -Patch0370: 0370-logind-always-kill-session-when-termination-is-reque.patch -Patch0371: 0371-udev-net_id-correctly-name-netdevs-based-on-dev_port.patch -Patch0372: 0372-udev-net_id-dev_port-is-base-10.patch -Patch0373: 0373-udev-Fix-parsing-of-udev.event-timeout-kernel-parame.patch -Patch0374: 0374-login-rerun-vconsole-setup-when-switching-from-vgaco.patch -Patch0375: 0375-cgroups-agent-really-down-grade-log-level.patch -Patch0376: 0376-core-introduce-new-Delegate-yes-no-property-controll.patch -Patch0377: 0377-core-don-t-migrate-PIDs-for-units-that-may-contain-s.patch -Patch0378: 0378-mount-use-libmount-to-enumerate-proc-self-mountinfo.patch -Patch0379: 0379-mount-monitor-for-utab-changes-with-inotify.patch -Patch0380: 0380-mount-add-remote-fs-dependencies-if-needed-after-cha.patch -Patch0381: 0381-mount-check-options-as-well-as-fstype-for-network-mo.patch -Patch0382: 0382-rules-don-t-enable-usb-pm-for-Avocent-devices.patch -Patch0383: 0383-shared-install-avoid-prematurely-rejecting-missing-u.patch -Patch0384: 0384-core-fix-enabling-units-via-their-absolute-paths.patch -Patch0385: 0385-Revert-units-fix-BindsTo-logic-when-applied-relative.patch -Patch0386: 0386-run-drop-mistakenly-committed-test-code.patch -Patch0387: 0387-cgroup-downgrade-log-messages-when-we-cannot-write-t.patch -Patch0388: 0388-rules-load-sg-module.patch -Patch0389: 0389-machined-force-machined-to-dispatch-messages.patch +Source5: 60-alias-kmsg.rules +# Stop-gap, just to ensure things work fine with rsyslog without having to change the package right-away +Source6: listen.conf + +# RHEL-specific +Patch0001: 0001-kernel-install-add-fedora-specific-callouts-to-new-k.patch +Patch0002: 0002-Revert-fsck-re-enable-fsck-l.patch +Patch0003: 0003-sysctl-bring-back-etc-sysctl.conf.patch +Patch0004: 0004-remove-user-.service.patch +Patch0005: 0005-logind-session-save-stopping-flag.patch +Patch0006: 0006-man-mention-System-Administrator-s-Guide-in-systemct.patch +Patch0007: 0007-rules-automatically-online-hot-added-CPUs.patch +Patch0008: 0008-Revert-remove-references-of-readahead.patch +Patch0009: 0009-Revert-missing-remove-fanotify.patch +Patch0010: 0010-Revert-readahead-wipe-out-readahead.patch +Patch0011: 0011-rules-add-rule-for-naming-Dell-iDRAC-USB-Virtual-NIC.patch +Patch0012: 0012-udev-net_id-correctly-name-netdevs-based-on-dev_port.patch +Patch0013: 0013-Revert-blkid-Warn-when-rejecting-a-superblock-with-a.patch +Patch0014: 0014-journald-audit-exit-gracefully-in-the-case-we-can-t-.patch +Patch0015: 0015-fedora-disable-resolv.conf-symlink.patch +Patch0016: 0016-Revert-timedated-manage-systemd-timesyncd-directly-i.patch +Patch0017: 0017-journal-remote-fix-certificate-status-memory-leak.patch +Patch0018: 0018-journal-remote-fix-client_cert-memory-leak.patch +Patch0019: 0019-tmpfiles-Fix-parse_acl-error-message.patch +Patch0020: 0020-test-utf8-fix-utf16-tests-on-BE-machines.patch +Patch0021: 0021-tmpfiles-avoid-creating-duplicate-acl-entries.patch +Patch0022: 0022-shared-time-util-fix-gcc5-warning.patch +Patch0023: 0023-test-time-test-infinity-parsing-in-nanoseconds.patch +Patch0024: 0024-bootchart-fix-default-init-path.patch +Patch0025: 0025-systemctl-bump-NOFILE-only-for-systemctl_main.patch +Patch0026: 0026-acl-util-avoid-freeing-uninitialized-pointer.patch +Patch0027: 0027-bootchart-svg-fix-checking-of-list-end.patch +Patch0028: 0028-systemd-add-getrandom-syscall-numbers-for-MIPS.patch +Patch0029: 0029-unit-use-weaker-dependencies-between-mount-and-devic.patch +Patch0030: 0030-unit-When-stopping-due-to-BindsTo-log-which-unit-cau.patch +Patch0031: 0031-sysctl-downgrade-message-about-sysctl-overrides-to-d.patch +Patch0032: 0032-sysctl-add-some-hints-how-to-override-settings.patch +Patch0033: 0033-core-rework-device-state-logic.patch +Patch0034: 0034-core-fix-return-value-on-OOM.patch +Patch0035: 0035-machined-use-x-machine-unix-prefix-for-the-container.patch +Patch0036: 0036-shared-AFS-is-also-a-network-filesystem.patch +Patch0037: 0037-core-downgrade-unit-type-not-supported-message.patch +Patch0038: 0038-journal-remote-fix-saving-of-binary-fields.patch +Patch0039: 0039-journal-fix-Inappropriate-ioctl-for-device-on-ext4.patch +Patch0040: 0040-sd-daemon-replace-VLA-with-alloca-to-make-llvm-happy.patch +Patch0041: 0041-tmpfiles-quietly-ignore-ACLs-on-unsupported-filesyst.patch +Patch0042: 0042-shared-util-assume-ac-when-sys-class-power_supply-is.patch +Patch0043: 0043-import-remove-unused-variable.patch +Patch0044: 0044-hwdb-fix-ThinkPad-X-Tablet-special-keys.patch +Patch0045: 0045-man-add-newlines-to-the-pull-raw-example-in-machinec.patch +Patch0046: 0046-core-shared-in-deserializing-match-same-files-reache.patch +Patch0047: 0047-shared-use-SocketAddress-in-socket_address_matches_f.patch +Patch0048: 0048-shared-avoid-semi-duplicating-socket_address_equal.patch +Patch0049: 0049-shared-handle-unnamed-sockets-in-socket_address_equa.patch +Patch0050: 0050-man-make-bootup-graph-consistent.patch +Patch0051: 0051-nspawn-fix-whitespace-and-typo-in-partition-table-bl.patch +Patch0052: 0052-man-explain-time-units-in-tmpfiles.patch +Patch0053: 0053-systemctl-check-validity-of-PID-we-received.patch +Patch0054: 0054-systemctl-support-auditd.service-better.patch +Patch0055: 0055-shared-unit-name-fix-gcc5-warning.patch +Patch0056: 0056-test-hashmap-fix-gcc5-warning.patch +Patch0057: 0057-shared-fix-wrong-assertion-in-barrier_set_role.patch +Patch0058: 0058-hwdb-Update-database-of-Bluetooth-company-identifier.patch +Patch0059: 0059-journal-make-skipping-of-exhausted-journal-files-eff.patch +Patch0060: 0060-shared-condition-fix-gcc5-warning.patch +Patch0061: 0061-man-correct-description-of-systemd-user-sessions.patch +Patch0062: 0062-build-sys-allow-lto-and-FORTIFY_SOURCE-with-O-sz.patch +Patch0063: 0063-man-fix-typo.patch +Patch0064: 0064-bus-proxyd-avoid-logging-oom-twice.patch +Patch0065: 0065-Do-not-run-sysv-generator-test-when-sysv-compat-is-d.patch +Patch0066: 0066-README-mention-ACLs-more.patch +Patch0067: 0067-Do-not-advertise-.d-snippets-over-main-config-file.patch +Patch0068: 0068-hwdb-add-pnpid-for-the-T450s-touchpad.patch +Patch0069: 0069-networkd-netdev-inform-when-we-take-over-an-existing.patch +Patch0070: 0070-man-replace-obsolete-wiki-link-with-man-page.patch +Patch0071: 0071-Use-correct-uname-identifiers-in-arch_map-for-SuperH.patch +Patch0072: 0072-hwdb-fix-Dell-XPS12-9Q33-key-name.patch +Patch0073: 0073-Remove-the-cap-on-epoll-events.patch +Patch0074: 0074-Allow-up-to-4096-simultaneous-connections.patch +Patch0075: 0075-hwdb-add-Logitech-G5-Laser-Mouse.patch +Patch0076: 0076-tmpfiles-Fix-handling-of-duplicate-lines.patch +Patch0077: 0077-hwdb-add-Lenovo-W451-to-TOUCHPAD_HAS_TRACKPOINT_BUTT.patch +Patch0078: 0078-vconsole-match-on-vtcon-events-not-fbcon-ones.patch +Patch0079: 0079-core-do-not-spawn-jobs-or-touch-other-units-during-c.patch +Patch0080: 0080-firstboot-set-all-spwd-fields-to-1-for-consistency-w.patch +Patch0081: 0081-sysusers-do-not-reject-users-with-already-present-et.patch +Patch0082: 0082-nspawn-fix-use-after-free-and-leak-in-error-paths.patch +Patch0083: 0083-login-fix-copy-pasto-in-error-path.patch +Patch0084: 0084-journalctl-update-hint-now-that-we-set-ACL-everywher.patch +Patch0085: 0085-sd-journal-return-error-when-we-cannot-open-a-file.patch +Patch0086: 0086-missing.h-add-NDA_.patch +Patch0087: 0087-udevd-close-race-in-udev-settle.patch +Patch0088: 0088-man-document-that-ExecStartPre-is-not-the-place-to-s.patch +Patch0089: 0089-journal-fix-return-code.patch +Patch0090: 0090-console-fix-error-code-inversion.patch +Patch0091: 0091-bus-proxy-complain-only-once-about-queue-overflows.patch +Patch0092: 0092-cgtop-fix-assert-when-not-on-tty.patch +Patch0093: 0093-man-split-paragraph.patch +Patch0094: 0094-hwdb-update.patch +Patch0095: 0095-networkd-Begin-with-serial-number-1-for-netlink-requ.patch +Patch0096: 0096-journal-remote-downgrade-routine-messages-to-debug.patch +Patch0097: 0097-journal-remote-process-events-without-delay.patch +Patch0098: 0098-man-update-example-2-in-systemd.network-5.patch +Patch0099: 0099-gpt-auto-generator-fix-detection-of-srv.patch +Patch0100: 0100-sd-rtnl-never-set-serial-to-0.patch +Patch0101: 0101-gpt-auto-generator-allow-type-check-to-fail.patch +Patch0102: 0102-man-fix-a-bunch-of-links.patch +Patch0103: 0103-man-link-to-fd.o-for-dbus-stuff.patch +Patch0104: 0104-man-fix-name-of-systemd.resource-control-5.patch +Patch0105: 0105-selinux-fix-SEGV-during-switch-root-if-SELinux-polic.patch +Patch0106: 0106-service-don-t-add-After-dependencies-on-.busname-uni.patch +Patch0107: 0107-libudev-monitor-fix-error-path-in-send_device.patch +Patch0108: 0108-core-remove-left-over-debug-message.patch +Patch0109: 0109-units-there-is-no-systemd-udev-hwdb-update.service.patch +Patch0110: 0110-util-remove-redundant-debug-message.patch +Patch0111: 0111-tmpfiles-remove-redundant-debug-message.patch +Patch0112: 0112-sysv-generator-initialize-LookupPaths-just-once.patch +Patch0113: 0113-core-do-not-use-quotes-around-virt-and-arch.patch +Patch0114: 0114-udev-downgrade-has-devpath-and-filled-with-db-file-m.patch +Patch0115: 0115-cryptsetup-generator-remove-warning-about-crypttab-a.patch +Patch0116: 0116-sysctl-tweak-debug-message.patch +Patch0117: 0117-journald-add-syslog-fields-for-audit-messages.patch +Patch0118: 0118-core-remove-useless-debug-message.patch +Patch0119: 0119-man-standard-conf-change-directory-reference-to-wild.patch +Patch0120: 0120-core-don-t-change-removed-devices-to-state-tentative.patch +Patch0121: 0121-fstab-generator-ignore-invalid-swap-priority.patch +Patch0122: 0122-missing.h-add-more-btrfs-types-and-defines.patch +Patch0123: 0123-build-sys-add-configure-option-to-disableLTO-gold.patch +Patch0124: 0124-rules-bring-back-80-net-name-slot.rules.patch +Patch0125: 0125-Revert-journald-allow-restarting-journald-without-lo.patch +Patch0126: 0126-Revert-man-switch-yum-to-dnf-for-Fedora.patch +Patch0127: 0127-journal-remove-audit-socket-unit-files.patch +Patch0128: 0128-factory-we-don-t-want-that.patch +Patch0129: 0129-timedated-flip-internal-status-after-executing-opera.patch +Patch0130: 0130-timedated-fix-enable-disable-reversal.patch +Patch0131: 0131-core-make-SELinux-enable-disable-check-symmetric.patch +Patch0132: 0132-shared-add-path_compare-an-ordering-path-comparison.patch +Patch0133: 0133-core-namespace-fix-path-sorting.patch +Patch0134: 0134-machine-do-not-rely-on-asprintf-setting-arg-on-error.patch +Patch0135: 0135-some-compilators-don-t-support-__INCLUDE_LEVEL__.patch +Patch0136: 0136-udev-net_id-support-multi-port-enpo-device-names.patch +Patch0137: 0137-udev-net_id-improve-comments.patch +Patch0138: 0138-udev-restore-udevadm-settle-timeout.patch +Patch0139: 0139-udev-settle-should-return-immediately-when-timeout-i.patch +Patch0140: 0140-udev-Fix-ping-timeout-when-settle-timeout-is-0.patch +Patch0141: 0141-detect-virt-use-proc-device-tree.patch +Patch0142: 0142-ARM-detect-virt-detect-Xen.patch +Patch0143: 0143-ARM-detect-virt-detect-QEMU-KVM.patch +Patch0144: 0144-Persistent-by_path-links-for-ata-devices.patch +Patch0145: 0145-man-document-forwarding-to-syslog-better.patch +Patch0146: 0146-man-fix-typos-in-previous-comimt.patch +Patch0147: 0147-LSB-always-add-network-online.target-to-services-wit.patch +Patch0148: 0148-rules-enable-memory-hotplug.patch +Patch0149: 0149-rules-reload-sysctl-settings-when-the-bridge-module-.patch +Patch0150: 0150-console-getty.service-don-t-start-when-dev-console-i.patch +Patch0151: 0151-resolved-Do-not-add-.busname-dependencies-when-compi.patch +Patch0152: 0152-man-add-journal-remote.conf-5.patch +Patch0153: 0153-mount-don-t-run-quotaon-only-for-network-filesystems.patch +Patch0154: 0154-mount-fix-up-wording-in-the-comment.patch +Patch0155: 0155-udev-net_id-fix-copy-paste-error.patch +Patch0156: 0156-man-don-t-mention-journalctl-dev-sda.patch +Patch0157: 0157-units-move-After-systemd-hwdb-update.service-depende.patch +Patch0158: 0158-units-explicitly-order-systemd-user-sessions.service.patch +Patch0159: 0159-zsh-completion-update-loginctl.patch +Patch0160: 0160-zsh-completion-add-missing-M-completion-for-journalc.patch +Patch0161: 0161-zsh-completion-update-hostnamectl.patch +Patch0162: 0162-shell-completion-systemctl-switch-root-verb.patch +Patch0163: 0163-core-automount-beef-up-error-message.patch +Patch0164: 0164-man-remove-fs-from-rootfsflags.patch +Patch0165: 0165-shared-fix-memleak.patch +Patch0166: 0166-udevd-fix-synchronization-with-settle-when-handling-.patch +Patch0167: 0167-python-systemd-fix-is_socket_inet-to-cope-with-ports.patch +Patch0168: 0168-man-fix-examples-indentation-in-tmpfiles.d-5.patch +Patch0169: 0169-systemctl-avoid-bumping-NOFILE-rlimit-unless-needed.patch +Patch0170: 0170-exit-status-Fix-NOTINSSTALLED-typo.patch +Patch0171: 0171-tmpfiles-there-s-no-systemd-forbid-user-logins.servi.patch +Patch0172: 0172-kmod-setup-load-ip_tables-kmod-at-boot.patch +Patch0173: 0173-util-Fix-assertion-in-split-on-missing.patch +Patch0174: 0174-units-set-KillMode-mixed-for-our-daemons-that-fork-w.patch +Patch0175: 0175-unit-don-t-add-automatic-dependencies-on-device-unit.patch +Patch0176: 0176-update-done-ignore-nanosecond-file-timestamp-compone.patch +Patch0177: 0177-sd-daemon-simplify-sd_pid_notify_with_fds.patch +Patch0178: 0178-fstab-generator-add-x-systemd.requires-and-x-systemd.patch +Patch0179: 0179-core-Fix-assertion-with-empty-Exec-paths.patch +Patch0180: 0180-rules-load-sg-module.patch +Patch0181: 0181-util-add-shell_maybe_quote-call-for-preparing-a-stri.patch +Patch0182: 0182-bus-util-be-more-verbose-if-dbus-job-fails.patch +Patch0183: 0183-notify-fix-badly-backported-help-message.patch +Patch0184: 0184-cryptsetup-craft-a-unique-ID-with-the-source-device.patch +Patch0185: 0185-systemctl-introduce-now-for-enable-disable-and-mask.patch +Patch0186: 0186-udev-also-create-old-sas-paths.patch +Patch0187: 0187-journald-do-not-strip-leading-whitespace-from-messag.patch +Patch0188: 0188-Revert-core-one-step-back-again-for-nspawn-we-actual.patch +Patch0189: 0189-bus-creds-always-set-SD_BUS_CREDS_PID-when-we-set-pi.patch +Patch0190: 0190-sd-bus-do-not-use-per-datagram-auxiliary-information.patch +Patch0191: 0191-sd-bus-store-selinux-context-at-connection-time.patch +Patch0192: 0192-journald-simplify-context-handling.patch +Patch0193: 0193-bash-completion-add-verb-set-property.patch +Patch0194: 0194-sd-bus-don-t-inherit-connection-creds-into-message-c.patch +Patch0195: 0195-udev-fix-crash-in-path_id-builtin.patch +Patch0196: 0196-sysv-generator-test-Fix-assertion.patch +Patch0197: 0197-man-avoid-line-break-in-url.patch +Patch0198: 0198-Add-VARIANT-as-a-standard-value-for-etc-os-release.patch +Patch0199: 0199-Fix-permissions-on-run-systemd-nspawn-locks.patch +Patch0200: 0200-generators-rename-add_-root-usr-_mount-to-add_-sysro.patch +Patch0201: 0201-Generate-systemd-fsck-root.service-in-the-initramfs.patch +Patch0202: 0202-units-fix-typo-in-systemd-resolved.service.patch +Patch0203: 0203-core-don-t-consider-umask-for-SocketMode.patch +Patch0204: 0204-timedate-fix-memory-leak-in-timedated.patch +Patch0205: 0205-coredump-make-sure-we-vacuum-by-default.patch +Patch0206: 0206-tmpfiles-don-t-fail-if-we-cannot-create-a-subvolume-.patch +Patch0207: 0207-resolved-fix-crash-when-shutting-down.patch +Patch0208: 0208-resolved-allow-DnsAnswer-objects-with-no-space-for-R.patch +Patch0209: 0209-id128-add-new-sd_id128_is_null-call.patch +Patch0210: 0210-journalctl-Improve-boot-ID-lookup.patch +Patch0211: 0211-test-hashmap-fix-an-assert.patch +Patch0212: 0212-units-make-sure-systemd-nspawn-.slice-instances-are-.patch +Patch0213: 0213-Revert-journald-audit-exit-gracefully-in-the-case-we.patch +Patch0214: 0214-journald-handle-more-gracefully-when-bind-fails-on-a.patch +Patch0215: 0215-udev-link-config-fix-corruption.patch +Patch0216: 0216-udev-net_id-Only-read-the-first-64-bytes-of-PCI-conf.patch +Patch0217: 0217-shared-generator-correct-path-to-systemd-fsck.patch +Patch0218: 0218-logind-Save-the-user-s-state-when-a-session-enters-S.patch +Patch0219: 0219-small-fix-ru-translation.patch +Patch0220: 0220-kmod-setup-don-t-warn-when-ipv6-can-t-be-loaded.patch +Patch0221: 0221-Partially-revert-ma-setup-simplify.patch +Patch0222: 0222-ima-setup-write-policy-one-line-at-a-time.patch +Patch0223: 0223-ata_id-unbotch-format-specifier.patch +Patch0224: 0224-install-explicitly-return-0-on-success.patch +Patch0225: 0225-systemd.service.xml-document-that-systemd-removes-th.patch +Patch0226: 0226-core-handle-log-target-null-when-calling-systemd-shu.patch +Patch0227: 0227-man-ProtectHome-protects-root-as-well.patch +Patch0228: 0228-timedatectl-trim-non-local-RTC-warning-to-80-chars-w.patch +Patch0229: 0229-escape-fix-exit-code.patch +Patch0230: 0230-man-information-about-available-properties.patch +Patch0231: 0231-journal-in-persistent-mode-create-var-log-journal-wi.patch +Patch0232: 0232-sysv-generator-fix-wrong-Overwriting-existing-symlin.patch +Patch0233: 0233-mount-don-t-claim-a-device-is-gone-from-proc-self-mo.patch +Patch0234: 0234-mount-properly-check-for-mounts-currently-in-proc-se.patch +Patch0235: 0235-units-add-Install-section-to-tmp.mount.patch +Patch0236: 0236-bus-util-add-articles-to-explanation-messages.patch +Patch0237: 0237-bus-util-print-correct-warnings-for-units-that-fail-.patch +Patch0238: 0238-Revert-journald-move-dev-log-socket-to-run.patch +Patch0239: 0239-journald-server-don-t-read-audit-events.patch +Patch0240: 0240-everything-remove-traces-of-user.patch +Patch0241: 0241-selinux-fix-check-for-transient-units.patch +Patch0242: 0242-socket-fix-setsockopt-call.-SOL_SOCKET-changed-to-SO.patch +Patch0243: 0243-selinux-fix-missing-SELinux-unit-access-check.patch +Patch0244: 0244-selinux-always-use-_raw-API-from-libselinux.patch +Patch0245: 0245-udev-net_id-support-predictable-ifnames-on-virtio-bu.patch +Patch0246: 0246-Revert-sysctl.d-default-to-fq_codel-fight-bufferbloa.patch +Patch0247: 0247-loginctl-print-nontrivial-properties-in-logictl-show.patch +Patch0248: 0248-login-fix-label-on-run-nologin.patch +Patch0249: 0249-udev-rules-prandom-character-device-node-permissions.patch +Patch0250: 0250-login-fix-gcc-warning-include-missing-header-file.patch +Patch0251: 0251-shutdown-make-sure-run-nologin-has-correct-label.patch +Patch0252: 0252-sd-event-fix-prepare-priority-queue-comparison-funct.patch +Patch0253: 0253-units-run-ldconfig-also-when-cache-is-unpopulated.patch +Patch0254: 0254-selinux-fix-regression-of-systemctl-subcommands-when.patch +Patch0255: 0255-tmpfiles.d-don-t-clean-SAP-lockfiles-and-logs.patch +Patch0256: 0256-udev-make-naming-for-virtio-devices-opt-in.patch +Patch0257: 0257-tmpfiles.d-don-t-clean-SAP-sockets-either.patch + %global num_patches %{lua: c=0; for i,p in ipairs(patches) do c=c+1; end; print(c);} @@ -433,8 +302,12 @@ BuildRequires: glib2-devel BuildRequires: gobject-introspection-devel BuildRequires: libblkid-devel BuildRequires: xz-devel +BuildRequires: libidn-devel +BuildRequires: libcurl-devel BuildRequires: kmod-devel +BuildRequires: elfutils-devel BuildRequires: libgcrypt-devel +BuildRequires: gnutls-devel BuildRequires: qrencode-devel BuildRequires: libmicrohttpd-devel BuildRequires: libxslt @@ -442,8 +315,13 @@ BuildRequires: docbook-style-xsl BuildRequires: pkgconfig BuildRequires: intltool BuildRequires: gperf +BuildRequires: gawk BuildRequires: gtk-doc BuildRequires: python2-devel +BuildRequires: python-lxml +%ifarch x86_64 i686 +#BuildRequires: libseccomp-devel +%endif BuildRequires: automake BuildRequires: autoconf BuildRequires: libtool @@ -458,29 +336,18 @@ Requires(pre): coreutils Requires(pre): /usr/bin/getent Requires(pre): /usr/sbin/groupadd Requires: dbus -Requires: nss-myhostname Requires: %{name}-libs = %{version}-%{release} -Requires: kmod >= 14 +Requires: kmod >= 18-4 Requires: redhat-release >= 7.0 - +Requires: diffutils Provides: /bin/systemctl Provides: /sbin/shutdown Provides: syslog Provides: systemd-units = %{version}-%{release} -# part of system since f18, drop at f20 Provides: udev = %{version} Obsoletes: udev < 183 -Conflicts: dracut < 027 -# f18 version, drop at f20 -Conflicts: plymouth < 0.8.5.1 -# For the journal-gateway split in F20, drop at F22 -Obsoletes: systemd < 204-10 -# Ensures correct multilib updates added F18, drop at F20 -Conflicts: systemd < 185-4 -# added F18, drop at F20 Obsoletes: system-setup-keyboard < 0.9 Provides: system-setup-keyboard = 0.9 -# nss-myhostname got integrated in F19, drop at F21 Obsoletes: nss-myhostname < 0.4 Provides: nss-myhostname = 0.4 # systemd-analyze got merged in F19, drop at F21 @@ -491,6 +358,8 @@ Obsoletes: upstart-sysvinit < 1.2-3 Conflicts: upstart-sysvinit Obsoletes: hal Obsoletes: ConsoleKit +Conflicts: dracut < 033-243 +Conflicts: initscripts < 9.49.28-1 %description systemd is a system and service manager for Linux, compatible with @@ -531,18 +400,19 @@ Requires: %{name} = %{version}-%{release} SysV compatibility tools for systemd %package python -Summary: Python Bindings for systemd +Summary: Python 2 bindings for systemd License: LGPLv2+ Requires: %{name} = %{version}-%{release} %description python -This package contains python binds for systemd APIs +This package contains bindings which allow Python 2 programs to use +systemd APIs %package -n libgudev1 Summary: Libraries for adding libudev support to applications that use glib Conflicts: filesystem < 3 License: LGPLv2+ -Requires: %{name} = %{version}-%{release} +Requires: %{name}-libs = %{version}-%{release} %description -n libgudev1 This package contains the libraries that make it easier to use libudev @@ -565,72 +435,116 @@ Requires(pre): /usr/bin/getent Requires(post): systemd Requires(preun): systemd Requires(postun): systemd -# For the journal-gateway split in F20, drop at F22 -Obsoletes: systemd < 204-10 %description journal-gateway systemd-journal-gatewayd serves journal events over the network using HTTP. +%package networkd +Summary: System service that manages networks. +Requires: %{name} = %{version}-%{release} +License: LGPLv2+ +Requires(pre): /usr/bin/getent +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd + +%description networkd +systemd-networkd is a system service that manages networks. +It detects and configures network devices as they appear, as well as creating virtual network devices. + +%package resolved +Summary: Network Name Resolution manager. +Requires: %{name} = %{version}-%{release} +License: LGPLv2+ +Requires(pre): /usr/bin/getent +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd + +%description resolved +systemd-resolved is a system service that manages network name resolution. +It implements a caching DNS stub resolver and an LLMNR resolver and responder. + %prep %setup -q +%if %{num_patches} git init git config user.email "systemd-maint@redhat.com" -git config user.name "Fedora systemd team" +git config user.name "systemd team" git add . git commit -a -q -m "%{version} baseline." # Apply all the patches. git am \ - --exclude .gitignore \ - --exclude docs/.gitignore \ - --exclude docs/gudev/.gitignore \ - --exclude docs/libudev/.gitignore \ - --exclude docs/sysvinit/.gitignore \ - --exclude docs/var-log/.gitignore \ - --exclude hwdb/.gitignore \ - --exclude m4/.gitignore \ - --exclude man/.gitignore \ - --exclude po/.gitignore \ - --exclude rules/.gitignore \ - --exclude src/.gitignore \ - --exclude src/analyze/.gitignore \ - --exclude src/core/.gitignore \ - --exclude src/gudev/.gitignore \ - --exclude src/hostname/.gitignore \ - --exclude src/journal/.gitignore \ - --exclude src/libsystemd-daemon/.gitignore \ - --exclude src/libsystemd-id128/.gitignore \ - --exclude src/libudev/.gitignore \ - --exclude src/locale/.gitignore \ - --exclude src/login/.gitignore \ - --exclude src/python-systemd/.gitignore \ - --exclude src/python-systemd/docs/* \ - --exclude src/timedate/.gitignore \ - --exclude src/udev/.gitignore \ - --exclude src/udev/scsi_id/.gitignore \ - --exclude sysctl.d/.gitignore \ - --exclude test/.gitignore \ - --exclude units/.gitignore \ - --exclude units/user/.gitignore \ - --exclude .travis.yml \ - %{patches} - +--exclude .gitignore \ +--exclude docs/.gitignore \ +--exclude docs/gudev/.gitignore \ +--exclude docs/libudev/.gitignore \ +--exclude docs/sysvinit/.gitignore \ +--exclude docs/var-log/.gitignore \ +--exclude hwdb/.gitignore \ +--exclude m4/.gitignore \ +--exclude man/.gitignore \ +--exclude po/.gitignore \ +--exclude rules/.gitignore \ +--exclude src/.gitignore \ +--exclude src/analyze/.gitignore \ +--exclude src/core/.gitignore \ +--exclude src/gudev/.gitignore \ +--exclude src/hostname/.gitignore \ +--exclude src/journal/.gitignore \ +--exclude src/libsystemd-daemon/.gitignore \ +--exclude src/libsystemd-id128/.gitignore \ +--exclude src/libudev/.gitignore \ +--exclude src/locale/.gitignore \ +--exclude src/login/.gitignore \ +--exclude src/python-systemd/.gitignore \ +--exclude tmpfiles.d/systemd.conf.m4 \ +--exclude src/python-systemd/docs/.gitignore \ +--exclude src/timedate/.gitignore \ +--exclude src/udev/.gitignore \ +--exclude src/udev/scsi_id/.gitignore \ +--exclude sysctl.d/.gitignore \ +--exclude test/.gitignore \ +--exclude units/.gitignore \ +--exclude units/user/.gitignore \ +--exclude src/libsystemd/sd-bus/PORTING-DBUS1 \ +--exclude CODING_STYLE \ +--exclude src/readahead/Makefile \ +--exclude src/libsystemd-terminal/unifont-def.h \ +--exclude hwdb/sdio.ids \ +%{patches} +%endif %build -autoreconf - -%configure \ - --libexecdir=%{_prefix}/lib \ - --enable-gtk-doc \ - --disable-static \ - --with-sysvinit-path=/etc/rc.d/init.d \ - --with-rc-local-script-path-start=/etc/rc.d/rc.local -make %{?_smp_mflags} V=1 +autoreconf -i + +CONFIGURE_OPTS=( +--libexecdir=%{_prefix}/lib +--with-sysvinit-path=/etc/rc.d/init.d +--with-rc-local-script-path-start=/etc/rc.d/rc.local +--disable-timesyncd +--disable-kdbus +--disable-terminal +--disable-importd +--enable-gtk-doc +--enable-compat-libs +--disable-sysusers +%ifarch s390 s390x ppc %{power64} aarch64 +--disable-lto +%endif +) + + +%configure "${CONFIGURE_OPTS[@]}" +make %{?_smp_mflags} GCC_COLORS="" V=1 %install %make_install + find %{buildroot} \( -name '*.a' -o -name '*.la' \) -delete +sed -i 's/L+/#/' %{buildroot}/usr/lib/tmpfiles.d/etc.conf # udev links mkdir -p %{buildroot}/%{_sbindir} @@ -648,9 +562,10 @@ ln -s ../bin/systemctl %{buildroot}%{_sbindir}/runlevel # legacy links ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl +ln -s coredumpctl %{buildroot}%{_bindir}/systemd-coredumpctl # We create all wants links manually at installation time to make sure -# they are not owned and hence overriden by rpm after the used deleted +# they are not owned and hence overriden by rpm after the user deleted # them. rm -r %{buildroot}%{_sysconfdir}/systemd/system/*.target.wants @@ -666,6 +581,22 @@ mkdir -p %{buildroot}%{_prefix}/lib/systemd/system/default.target.wants mkdir -p %{buildroot}%{_prefix}/lib/systemd/system/dbus.target.wants mkdir -p %{buildroot}%{_prefix}/lib/systemd/system/syslog.target.wants +# Temporary workaround for #1002806 +mkdir -p %{buildroot}%{_prefix}/lib/systemd/system/poweroff.target.wants +mkdir -p %{buildroot}%{_prefix}/lib/systemd/system/rescue.target.wants +mkdir -p %{buildroot}%{_prefix}/lib/systemd/system/multi-user.target.wants +mkdir -p %{buildroot}%{_prefix}/lib/systemd/system/graphical.target.wants +mkdir -p %{buildroot}%{_prefix}/lib/systemd/system/reboot.target.wants +ln -s ../systemd-update-utmp-runlevel.service %{buildroot}%{_prefix}/lib/systemd/system/poweroff.target.wants/ +ln -s ../systemd-update-utmp-runlevel.service %{buildroot}%{_prefix}/lib/systemd/system/rescue.target.wants/ +ln -s ../systemd-update-utmp-runlevel.service %{buildroot}%{_prefix}/lib/systemd/system/multi-user.target.wants/ +ln -s ../systemd-update-utmp-runlevel.service %{buildroot}%{_prefix}/lib/systemd/system/graphical.target.wants/ +ln -s ../systemd-update-utmp-runlevel.service %{buildroot}%{_prefix}/lib/systemd/system/reboot.target.wants/ + +mkdir -p %{buildroot}%{_localstatedir}/{run,log}/ +touch %{buildroot}%{_localstatedir}/run/utmp +touch %{buildroot}%{_localstatedir}/log/{w,b}tmp + # Make sure the user generators dir exists too mkdir -p %{buildroot}%{_prefix}/lib/systemd/system-generators mkdir -p %{buildroot}%{_prefix}/lib/systemd/user-generators @@ -695,25 +626,35 @@ mkdir -p %{buildroot}%{_prefix}/lib/systemd/ntp-units.d/ # Make sure directories in /var exist mkdir -p %{buildroot}%{_localstatedir}/lib/systemd/coredump mkdir -p %{buildroot}%{_localstatedir}/lib/systemd/catalog +mkdir -p %{buildroot}%{_localstatedir}/lib/systemd/backlight +mkdir -p %{buildroot}%{_localstatedir}/lib/systemd/rfkill touch %{buildroot}%{_localstatedir}/lib/systemd/catalog/database touch %{buildroot}%{_sysconfdir}/udev/hwdb.bin +touch %{buildroot}%{_localstatedir}/lib/systemd/random-seed +touch %{buildroot}%{_localstatedir}/lib/systemd/clock -# Install SysV conversion tool for systemd -install -m 0755 %{SOURCE2} %{buildroot}%{_bindir}/ -# Install rsyslog fragment -mkdir -p %{buildroot}%{_sysconfdir}/rsyslog.d/ -install -m 0644 %{SOURCE3} %{buildroot}%{_sysconfdir}/rsyslog.d/ +# Install SysV conversion tool for systemd +install -m 0755 %{SOURCE3} %{buildroot}%{_bindir}/ # Install yum protection fragment mkdir -p %{buildroot}%{_sysconfdir}/yum/protected.d/ -install -m 0644 %{SOURCE4} %{buildroot}%{_sysconfdir}/yum/protected.d/systemd.conf +install -m 0644 %{SOURCE2} %{buildroot}%{_sysconfdir}/yum/protected.d/systemd.conf # Install rc.local mkdir -p %{buildroot}%{_sysconfdir}/rc.d/ -install -m 0644 %{SOURCE5} %{buildroot}%{_sysconfdir}/rc.d/rc.local +install -m 0644 %{SOURCE4} %{buildroot}%{_sysconfdir}/rc.d/rc.local ln -s rc.d/rc.local %{buildroot}%{_sysconfdir}/rc.local +# Install rsyslog fragment +mkdir -p %{buildroot}%{_sysconfdir}/rsyslog.d/ +install -m 0644 %{SOURCE6} %{buildroot}%{_sysconfdir}/rsyslog.d/ + +# Delete LICENSE files from _docdir (we'll get them in as %%license) +rm -rf %{buildroot}%{_docdir}/LICENSE* + +%find_lang %{name} + # To avoid making life hard for Rawhide-using developers, don't package the # kernel.core_pattern setting until systemd-coredump is a part of an actual # systemd release and it's made clear how to get the core dumps out of the @@ -730,57 +671,29 @@ rm -f %{buildroot}%{_prefix}/lib/systemd/system/local-fs.target.wants/tmp.mount # No gpt-auto-generator in RHEL7 rm -f %{buildroot}%{_prefix}/lib/systemd/system-generators/systemd-gpt-auto-generator -install -m 0644 %{SOURCE6} $RPM_BUILD_ROOT/%{_udevrulesdir}/ +# 50-bridge.conf rules are in intscripts +rm -f %{buildroot}%{_prefix}/lib/sysctl.d/50-bridge.conf + +# no networkd in rhel7 +rm -f %{buildroot}%{_prefix}/lib/systemd/network/* + +install -m 0644 %{SOURCE5} $RPM_BUILD_ROOT/%{_udevrulesdir}/ %pre getent group cdrom >/dev/null 2>&1 || groupadd -r -g 11 cdrom >/dev/null 2>&1 || : +getent group utmp >/dev/null 2>&1 || groupadd -r -g 22 utmp >/dev/null 2>&1 || : getent group tape >/dev/null 2>&1 || groupadd -r -g 33 tape >/dev/null 2>&1 || : getent group dialout >/dev/null 2>&1 || groupadd -r -g 18 dialout >/dev/null 2>&1 || : +getent group input >/dev/null 2>&1 || groupadd -r input >/dev/null 2>&1 || : getent group floppy >/dev/null 2>&1 || groupadd -r -g 19 floppy >/dev/null 2>&1 || : getent group systemd-journal >/dev/null 2>&1 || groupadd -r -g 190 systemd-journal 2>&1 || : +getent group systemd-bus-proxy >/dev/null 2>&1 || groupadd -r systemd-bus-proxy 2>&1 || : +getent passwd systemd-bus-proxy >/dev/null 2>&1 || useradd -r -l -g systemd-bus-proxy -d / -s /sbin/nologin -c "systemd Bus Proxy" systemd-bus-proxy >/dev/null 2>&1 || : +getent group systemd-network >/dev/null 2>&1 || groupadd -r systemd-network 2>&1 || : +getent passwd systemd-network >/dev/null 2>&1 || useradd -r -l -g systemd-network -d / -s /sbin/nologin -c "systemd Network Management" systemd-network >/dev/null 2>&1 || : systemctl stop systemd-udevd-control.socket systemd-udevd-kernel.socket systemd-udevd.service >/dev/null 2>&1 || : -# Rename configuration files that changed their names -mv -n %{_sysconfdir}/systemd/systemd-logind.conf %{_sysconfdir}/systemd/logind.conf >/dev/null 2>&1 || : -mv -n %{_sysconfdir}/systemd/systemd-journald.conf %{_sysconfdir}/systemd/journald.conf >/dev/null 2>&1 || : - -%pretrans -p ---# Migrate away from systemd-timedated-ntp.target. ---# Take note which ntp services, if any, were pulled in by it. ---# We'll enable them the usual way in %%post. ---# Remove this after upgrades from F17 are no longer supported. -function migrate_ntp() - --# Are we upgrading from a version that had systemd-timedated-ntp.target? - t = posix.stat("/usr/lib/systemd/system/systemd-timedated-ntp.target", "type") - if t ~= "regular" then return end - - --# Was the target enabled? - t = posix.stat("/etc/systemd/system/multi-user.target.wants/systemd-timedated-ntp.target", "type") - if t ~= "link" then return end - - --# filesystem provides /var/lib/rpm-state since F17 GA - r,msg,errno = posix.mkdir("/var/lib/rpm-state/systemd") - if r == nil and errno ~= 17 then return end --# EEXIST is fine. - - --# Save the list of ntp services pulled by the target. - f = io.open("/var/lib/rpm-state/systemd/ntp-units", "w") - if f == nil then return end - - files = posix.dir("/usr/lib/systemd/system/systemd-timedated-ntp.target.wants") - for i,name in ipairs(files) do - if name ~= "." and name ~= ".." then - s = string.format("%s\n", name) - f:write(s) - end - end - - f:close() -end - -migrate_ntp() -return 0 - %post systemd-machine-id-setup >/dev/null 2>&1 || : /usr/lib/systemd/systemd-random-seed save >/dev/null 2>&1 || : @@ -790,173 +703,190 @@ udevadm hwdb --update >/dev/null 2>&1 || : journalctl --update-catalog >/dev/null 2>&1 || : systemd-tmpfiles --create >/dev/null 2>&1 || : +# Make sure new journal files will be owned by the "systemd-journal" group +chgrp systemd-journal /run/log/journal/ /run/log/journal/`cat /etc/machine-id 2> /dev/null` /var/log/journal/ /var/log/journal/`cat /etc/machine-id 2> /dev/null` >/dev/null 2>&1 || : +chmod g+s /run/log/journal/ /run/log/journal/`cat /etc/machine-id 2> /dev/null` /var/log/journal/ /var/log/journal/`cat /etc/machine-id 2> /dev/null` >/dev/null 2>&1 || : + if [ $1 -eq 1 ] ; then - # Try to read default runlevel from the old inittab if it exists - runlevel=$(awk -F ':' '$3 == "initdefault" && $1 !~ "^#" { print $2 }' /etc/inittab 2> /dev/null) - if [ -z "$runlevel" ] ; then - target="/usr/lib/systemd/system/graphical.target" - else - target="/usr/lib/systemd/system/runlevel$runlevel.target" - fi - - # And symlink what we found to the new-style default.target - ln -sf "$target" /etc/systemd/system/default.target >/dev/null 2>&1 || : - - # Services we install by default, and which are controlled by presets. - systemctl preset \ - getty@tty1.service \ - remote-fs.target \ - systemd-readahead-replay.service \ - systemd-readahead-collect.service >/dev/null 2>&1 || : +# Try to read default runlevel from the old inittab if it exists +runlevel=$(awk -F ':' '$3 == "initdefault" && $1 !~ "^#" { print $2 }' /etc/inittab 2> /dev/null) +if [ -z "$runlevel" ] ; then +target="/usr/lib/systemd/system/graphical.target" else - # This systemd service does not exist anymore, we now do it - # internally in PID 1 - rm -f /etc/systemd/system/sysinit.target.wants/hwclock-load.service >/dev/null 2>&1 || : - - # This systemd target does not exist anymore. It's been replaced - # by ntp-units.d. - rm -f /etc/systemd/system/multi-user.target.wants/systemd-timedated-ntp.target >/dev/null 2>&1 || : - - # Enable the units recorded by %%pretrans - if [ -e /var/lib/rpm-state/systemd/ntp-units ] ; then - while read service; do - systemctl enable "$service" >/dev/null 2>&1 || : - done < /var/lib/rpm-state/systemd/ntp-units - rm -r /var/lib/rpm-state/systemd/ntp-units >/dev/null 2>&1 || : - fi +target="/usr/lib/systemd/system/runlevel$runlevel.target" fi +# And symlink what we found to the new-style default.target +ln -sf "$target" /etc/systemd/system/default.target >/dev/null 2>&1 || : + +# Services we install by default, and which are controlled by presets. +systemctl preset \ +remote-fs.target \ +getty@.service \ +serial-getty@.service \ +console-getty.service \ +console-shell.service \ +debug-shell.service \ +systemd-readahead-replay.service \ +systemd-readahead-collect.service \ +>/dev/null 2>&1 || : +else +# This systemd service does not exist anymore, we now do it +# internally in PID 1 +rm -f /etc/systemd/system/sysinit.target.wants/hwclock-load.service >/dev/null 2>&1 || : + +# This systemd target does not exist anymore. It's been replaced +# by ntp-units.d. +rm -f /etc/systemd/system/multi-user.target.wants/systemd-timedated-ntp.target >/dev/null 2>&1 || : + +# Enable the units recorded by %%pretrans +if [ -e /var/lib/rpm-state/systemd/ntp-units ] ; then +while read service; do +systemctl enable "$service" >/dev/null 2>&1 || : +done < /var/lib/rpm-state/systemd/ntp-units +rm -r /var/lib/rpm-state/systemd/ntp-units >/dev/null 2>&1 || : +fi +fi + +# Move old stuff around in /var/lib +mv %{_localstatedir}/lib/random-seed %{_localstatedir}/lib/systemd/random-seed >/dev/null 2>&1 || : +mv %{_localstatedir}/lib/backlight %{_localstatedir}/lib/systemd/backlight >/dev/null 2>&1 || : + # Migrate /etc/sysconfig/clock if [ ! -L /etc/localtime -a -e /etc/sysconfig/clock ] ; then - . /etc/sysconfig/clock >/dev/null 2>&1 || : - if [ -n "$ZONE" -a -e "/usr/share/zoneinfo/$ZONE" ] ; then - ln -sf "../usr/share/zoneinfo/$ZONE" /etc/localtime >/dev/null 2>&1 || : - fi +. /etc/sysconfig/clock >/dev/null 2>&1 || : +if [ -n "$ZONE" -a -e "/usr/share/zoneinfo/$ZONE" ] ; then +ln -sf "../usr/share/zoneinfo/$ZONE" /etc/localtime >/dev/null 2>&1 || : +fi fi rm -f /etc/sysconfig/clock >/dev/null 2>&1 || : # Migrate /etc/sysconfig/i18n if [ -e /etc/sysconfig/i18n -a ! -e /etc/locale.conf ]; then - unset LANG - unset LC_CTYPE - unset LC_NUMERIC - unset LC_TIME - unset LC_COLLATE - unset LC_MONETARY - unset LC_MESSAGES - unset LC_PAPER - unset LC_NAME - unset LC_ADDRESS - unset LC_TELEPHONE - unset LC_MEASUREMENT - unset LC_IDENTIFICATION - . /etc/sysconfig/i18n >/dev/null 2>&1 || : - [ -n "$LANG" ] && echo LANG=$LANG > /etc/locale.conf 2>&1 || : - [ -n "$LC_CTYPE" ] && echo LC_CTYPE=$LC_CTYPE >> /etc/locale.conf 2>&1 || : - [ -n "$LC_NUMERIC" ] && echo LC_NUMERIC=$LC_NUMERIC >> /etc/locale.conf 2>&1 || : - [ -n "$LC_TIME" ] && echo LC_TIME=$LC_TIME >> /etc/locale.conf 2>&1 || : - [ -n "$LC_COLLATE" ] && echo LC_COLLATE=$LC_COLLATE >> /etc/locale.conf 2>&1 || : - [ -n "$LC_MONETARY" ] && echo LC_MONETARY=$LC_MONETARY >> /etc/locale.conf 2>&1 || : - [ -n "$LC_MESSAGES" ] && echo LC_MESSAGES=$LC_MESSAGES >> /etc/locale.conf 2>&1 || : - [ -n "$LC_PAPER" ] && echo LC_PAPER=$LC_PAPER >> /etc/locale.conf 2>&1 || : - [ -n "$LC_NAME" ] && echo LC_NAME=$LC_NAME >> /etc/locale.conf 2>&1 || : - [ -n "$LC_ADDRESS" ] && echo LC_ADDRESS=$LC_ADDRESS >> /etc/locale.conf 2>&1 || : - [ -n "$LC_TELEPHONE" ] && echo LC_TELEPHONE=$LC_TELEPHONE >> /etc/locale.conf 2>&1 || : - [ -n "$LC_MEASUREMENT" ] && echo LC_MEASUREMENT=$LC_MEASUREMENT >> /etc/locale.conf 2>&1 || : - [ -n "$LC_IDENTIFICATION" ] && echo LC_IDENTIFICATION=$LC_IDENTIFICATION >> /etc/locale.conf 2>&1 || : +unset LANG +unset LC_CTYPE +unset LC_NUMERIC +unset LC_TIME +unset LC_COLLATE +unset LC_MONETARY +unset LC_MESSAGES +unset LC_PAPER +unset LC_NAME +unset LC_ADDRESS +unset LC_TELEPHONE +unset LC_MEASUREMENT +unset LC_IDENTIFICATION +. /etc/sysconfig/i18n >/dev/null 2>&1 || : +[ -n "$LANG" ] && echo LANG=$LANG > /etc/locale.conf 2>&1 || : +[ -n "$LC_CTYPE" ] && echo LC_CTYPE=$LC_CTYPE >> /etc/locale.conf 2>&1 || : +[ -n "$LC_NUMERIC" ] && echo LC_NUMERIC=$LC_NUMERIC >> /etc/locale.conf 2>&1 || : +[ -n "$LC_TIME" ] && echo LC_TIME=$LC_TIME >> /etc/locale.conf 2>&1 || : +[ -n "$LC_COLLATE" ] && echo LC_COLLATE=$LC_COLLATE >> /etc/locale.conf 2>&1 || : +[ -n "$LC_MONETARY" ] && echo LC_MONETARY=$LC_MONETARY >> /etc/locale.conf 2>&1 || : +[ -n "$LC_MESSAGES" ] && echo LC_MESSAGES=$LC_MESSAGES >> /etc/locale.conf 2>&1 || : +[ -n "$LC_PAPER" ] && echo LC_PAPER=$LC_PAPER >> /etc/locale.conf 2>&1 || : +[ -n "$LC_NAME" ] && echo LC_NAME=$LC_NAME >> /etc/locale.conf 2>&1 || : +[ -n "$LC_ADDRESS" ] && echo LC_ADDRESS=$LC_ADDRESS >> /etc/locale.conf 2>&1 || : +[ -n "$LC_TELEPHONE" ] && echo LC_TELEPHONE=$LC_TELEPHONE >> /etc/locale.conf 2>&1 || : +[ -n "$LC_MEASUREMENT" ] && echo LC_MEASUREMENT=$LC_MEASUREMENT >> /etc/locale.conf 2>&1 || : +[ -n "$LC_IDENTIFICATION" ] && echo LC_IDENTIFICATION=$LC_IDENTIFICATION >> /etc/locale.conf 2>&1 || : fi # Migrate /etc/sysconfig/keyboard if [ -e /etc/sysconfig/keyboard -a ! -e /etc/vconsole.conf ]; then - unset SYSFONT - unset SYSFONTACM - unset UNIMAP - unset KEYMAP - [ -e /etc/sysconfig/i18n ] && . /etc/sysconfig/i18n >/dev/null 2>&1 || : - . /etc/sysconfig/keyboard >/dev/null 2>&1 || : - [ -n "$SYSFONT" ] && echo FONT=$SYSFONT > /etc/vconsole.conf 2>&1 || : - [ -n "$SYSFONTACM" ] && echo FONT_MAP=$SYSFONTACM >> /etc/vconsole.conf 2>&1 || : - [ -n "$UNIMAP" ] && echo FONT_UNIMAP=$UNIMAP >> /etc/vconsole.conf 2>&1 || : - [ -n "$KEYTABLE" ] && echo KEYMAP=$KEYTABLE >> /etc/vconsole.conf 2>&1 || : +unset SYSFONT +unset SYSFONTACM +unset UNIMAP +unset KEYMAP +[ -e /etc/sysconfig/i18n ] && . /etc/sysconfig/i18n >/dev/null 2>&1 || : +. /etc/sysconfig/keyboard >/dev/null 2>&1 || : +[ -n "$SYSFONT" ] && echo FONT=$SYSFONT > /etc/vconsole.conf 2>&1 || : +[ -n "$SYSFONTACM" ] && echo FONT_MAP=$SYSFONTACM >> /etc/vconsole.conf 2>&1 || : +[ -n "$UNIMAP" ] && echo FONT_UNIMAP=$UNIMAP >> /etc/vconsole.conf 2>&1 || : +[ -n "$KEYTABLE" ] && echo KEYMAP=$KEYTABLE >> /etc/vconsole.conf 2>&1 || : fi rm -f /etc/sysconfig/i18n >/dev/null 2>&1 || : rm -f /etc/sysconfig/keyboard >/dev/null 2>&1 || : # Migrate HOSTNAME= from /etc/sysconfig/network if [ -e /etc/sysconfig/network -a ! -e /etc/hostname ]; then - unset HOSTNAME - . /etc/sysconfig/network >/dev/null 2>&1 || : - [ -n "$HOSTNAME" ] && echo $HOSTNAME > /etc/hostname 2>&1 || : +unset HOSTNAME +. /etc/sysconfig/network >/dev/null 2>&1 || : +[ -n "$HOSTNAME" ] && echo $HOSTNAME > /etc/hostname 2>&1 || : fi sed -i '/^HOSTNAME=/d' /etc/sysconfig/network >/dev/null 2>&1 || : # Migrate the old systemd-setup-keyboard X11 configuration fragment if [ ! -e /etc/X11/xorg.conf.d/00-keyboard.conf ] ; then - mv /etc/X11/xorg.conf.d/00-system-setup-keyboard.conf /etc/X11/xorg.conf.d/00-keyboard.conf >/dev/null 2>&1 || : +mv /etc/X11/xorg.conf.d/00-system-setup-keyboard.conf /etc/X11/xorg.conf.d/00-keyboard.conf >/dev/null 2>&1 || : else - rm -f /etc/X11/xorg.conf.d/00-system-setup-keyboard.conf >/dev/null 2>&1 || : +rm -f /etc/X11/xorg.conf.d/00-system-setup-keyboard.conf >/dev/null 2>&1 || : fi # sed-fu to add myhostname to the hosts line of /etc/nsswitch.conf if [ -f /etc/nsswitch.conf ] ; then - sed -i.bak -e ' - /^hosts:/ !b - /\/ b - s/[[:blank:]]*$/ myhostname/ - ' /etc/nsswitch.conf >/dev/null 2>&1 || : +sed -i.bak -e ' +/^hosts:/ !b +/\/ b +s/[[:blank:]]*$/ myhostname/ +' /etc/nsswitch.conf >/dev/null 2>&1 || : fi %posttrans # Convert old /etc/sysconfig/desktop settings preferred= if [ -f /etc/sysconfig/desktop ]; then - . /etc/sysconfig/desktop - if [ "$DISPLAYMANAGER" = GNOME ]; then - preferred=gdm - elif [ "$DISPLAYMANAGER" = KDE ]; then - preferred=kdm - elif [ "$DISPLAYMANAGER" = WDM ]; then - preferred=wdm - elif [ "$DISPLAYMANAGER" = XDM ]; then - preferred=xdm - elif [ -n "$DISPLAYMANAGER" ]; then - preferred=${DISPLAYMANAGER##*/} - fi +. /etc/sysconfig/desktop +if [ "$DISPLAYMANAGER" = GNOME ]; then +preferred=gdm +elif [ "$DISPLAYMANAGER" = KDE ]; then +preferred=kdm +elif [ "$DISPLAYMANAGER" = WDM ]; then +preferred=wdm +elif [ "$DISPLAYMANAGER" = XDM ]; then +preferred=xdm +elif [ -n "$DISPLAYMANAGER" ]; then +preferred=${DISPLAYMANAGER##*/} +fi fi if [ -z "$preferred" ]; then - if [ -x /usr/sbin/gdm ]; then - preferred=gdm - elif [ -x /usr/bin/kdm ]; then - preferred=kdm - fi +if [ -x /usr/sbin/gdm ]; then +preferred=gdm +elif [ -x /usr/bin/kdm ]; then +preferred=kdm +fi fi if [ -n "$preferred" -a -r "/usr/lib/systemd/system/$preferred.service" ]; then - # This is supposed to fail when the symlink already exists - ln -s "/usr/lib/systemd/system/$preferred.service" /etc/systemd/system/display-manager.service >/dev/null 2>&1 || : +# This is supposed to fail when the symlink already exists +ln -s "/usr/lib/systemd/system/$preferred.service" /etc/systemd/system/display-manager.service >/dev/null 2>&1 || : fi %postun if [ $1 -ge 1 ] ; then - systemctl daemon-reload > /dev/null 2>&1 || : - systemctl try-restart systemd-logind.service >/dev/null 2>&1 || : +systemctl daemon-reload > /dev/null 2>&1 || : fi %preun if [ $1 -eq 0 ] ; then - systemctl disable \ - getty@.service \ - remote-fs.target \ - systemd-readahead-replay.service \ - systemd-readahead-collect.service >/dev/null 2>&1 || : - - rm -f /etc/systemd/system/default.target >/dev/null 2>&1 || : - - if [ -f /etc/nsswitch.conf ] ; then - sed -i.bak -e ' - /^hosts:/ !b - s/[[:blank:]]\+myhostname\>// - ' /etc/nsswitch.conf >/dev/null 2>&1 || : - fi +systemctl disable \ +remote-fs.target \ +getty@.service \ +serial-getty@.service \ +console-getty.service \ +console-shell.service \ +debug-shell.service \ +systemd-readahead-replay.service \ +systemd-readahead-collect.service \ +>/dev/null 2>&1 || : + +rm -f /etc/systemd/system/default.target >/dev/null 2>&1 || : + +if [ -f /etc/nsswitch.conf ] ; then +sed -i.bak -e ' +/^hosts:/ !b +s/[[:blank:]]\+myhostname\>// +' /etc/nsswitch.conf >/dev/null 2>&1 || : +fi fi %post libs -p /sbin/ldconfig @@ -967,19 +897,53 @@ fi %pre journal-gateway getent group systemd-journal-gateway >/dev/null 2>&1 || groupadd -r -g 191 systemd-journal-gateway 2>&1 || : -getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g systemd-journal-gateway -d %{_prefix}/lib/systemd -s /sbin/nologin -c "Journal Gateway" systemd-journal-gateway >/dev/null 2>&1 || : +getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g systemd-journal-gateway -d %{_localstatedir}/log/journal -s /sbin/nologin -c "Journal Gateway" systemd-journal-gateway >/dev/null 2>&1 || : +getent group systemd-journal-remote >/dev/null 2>&1 || groupadd -r systemd-journal-remote 2>&1 || : +getent passwd systemd-journal-remote >/dev/null 2>&1 || useradd -r -l -g systemd-journal-remote -d /%{_localstatedir}/log/journal/remote -s /sbin/nologin -c "Journal Remote" systemd-journal-remote >/dev/null 2>&1 || : +getent group systemd-journal-upload >/dev/null 2>&1 || groupadd -r systemd-journal-upload 2>&1 || : +getent passwd systemd-journal-upload >/dev/null 2>&1 || useradd -r -l -g systemd-journal-upload -d /%{_localstatedir}/log/journal/upload -s /sbin/nologin -c "Journal Upload" systemd-journal-upload >/dev/null 2>&1 || : %post journal-gateway %systemd_post systemd-journal-gatewayd.socket systemd-journal-gatewayd.service +%systemd_post systemd-journal-remote.socket systemd-journal-remote.service +%systemd_post systemd-journal-upload.service %preun journal-gateway %systemd_preun systemd-journal-gatewayd.socket systemd-journal-gatewayd.service +%systemd_preun systemd-journal-remote.socket systemd-journal-remote.service +%systemd_preun systemd-journal-upload.service %postun journal-gateway %systemd_postun_with_restart systemd-journal-gatewayd.service +%systemd_postun_with_restart systemd-journal-remote.service +%systemd_postun_with_restart systemd-journal-upload.service + +%post networkd +%systemd_post systemd-networkd.service systemd-networkd-wait-online.service + +%preun networkd +%systemd_preun systemd-networkd.service systemd-networkd-wait-online.service + +%postun networkd +%systemd_postun_with_restart systemd-networkd.service systemd-networkd-wait-online.service + +%pre resolved +getent group systemd-resolve >/dev/null 2>&1 || groupadd -r systemd-resolve 2>&1 || : +getent passwd systemd-resolve >/dev/null 2>&1 || useradd -r -l -g systemd-resolve -d / -s /sbin/nologin -c "systemd Resolver" systemd-resolve >/dev/null 2>&1 || : + +%post resolved +%systemd_post systemd-resolved.service + +%preun resolved +%systemd_preun systemd-resolved.service + +%postun resolved +%systemd_postun_with_restart systemd-resolved.service -%files +%files -f %{name}.lang %doc %{_docdir}/systemd +%{!?_licensedir:%global license %%doc} +%license LICENSE.GPL2 LICENSE.LGPL2.1 LICENSE.MIT %dir %{_sysconfdir}/systemd %dir %{_sysconfdir}/systemd/system %dir %{_sysconfdir}/systemd/user @@ -990,8 +954,8 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g %dir %{_sysconfdir}/udev %dir %{_sysconfdir}/udev/rules.d %dir %{_prefix}/lib/systemd -%dir %{_prefix}/lib/systemd/system-generators -%dir %{_prefix}/lib/systemd/user-generators +%{_prefix}/lib/systemd/system-generators +%{_prefix}/lib/systemd/user-generators %dir %{_prefix}/lib/systemd/system-preset %dir %{_prefix}/lib/systemd/user-preset %dir %{_prefix}/lib/systemd/system-shutdown @@ -999,14 +963,28 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g %dir %{_prefix}/lib/systemd/catalog %dir %{_prefix}/lib/systemd/ntp-units.d %dir %{_prefix}/lib/tmpfiles.d +#%dir %{_prefix}/lib/sysusers.d %dir %{_prefix}/lib/sysctl.d %dir %{_prefix}/lib/modules-load.d %dir %{_prefix}/lib/binfmt.d +%dir %{_prefix}/lib/kernel +%dir %{_prefix}/lib/kernel/install.d %dir %{_datadir}/systemd %dir %{_datadir}/pkgconfig +%dir %{_datadir}/zsh +%dir %{_datadir}/zsh/site-functions +%ghost %dir %{_localstatedir}/log/journal %dir %{_localstatedir}/lib/systemd %dir %{_localstatedir}/lib/systemd/catalog -%dir %{_localstatedir}/lib/systemd/coredump +%ghost %dir %{_localstatedir}/lib/systemd/coredump +%ghost %dir %{_localstatedir}/lib/systemd/backlight +%ghost %dir %{_localstatedir}/lib/systemd/rfkill +%ghost %{_localstatedir}/lib/systemd/random-seed +%ghost %{_localstatedir}/lib/systemd/clock +%ghost %{_localstatedir}/lib/systemd/catalog/database +%ghost %attr(0664,root,utmp) %{_localstatedir}/run/utmp +%ghost %attr(0664,root,utmp) %{_localstatedir}/log/wtmp +%ghost %attr(0600,root,utmp) %{_localstatedir}/log/btmp %config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.systemd1.conf %config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.hostname1.conf %config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.login1.conf @@ -1018,6 +996,7 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g %config(noreplace) %{_sysconfdir}/systemd/logind.conf %config(noreplace) %{_sysconfdir}/systemd/journald.conf %config(noreplace) %{_sysconfdir}/systemd/bootchart.conf +%config(noreplace) %{_sysconfdir}/systemd/coredump.conf %config(noreplace) %{_sysconfdir}/udev/udev.conf %config(noreplace) %{_sysconfdir}/rsyslog.d/listen.conf %config(noreplace) %{_sysconfdir}/yum/protected.d/systemd.conf @@ -1032,12 +1011,12 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g %ghost %config(noreplace) %{_sysconfdir}/locale.conf %ghost %config(noreplace) %{_sysconfdir}/machine-id %ghost %config(noreplace) %{_sysconfdir}/machine-info +%dir %{_sysconfdir}/X11/xorg.conf.d %ghost %config(noreplace) %{_sysconfdir}/X11/xorg.conf.d/00-keyboard.conf -%ghost %config(noreplace) %{_sysconfdir}/X11/xorg.conf.d/00-system-setup-keyboard.conf -%ghost %{_localstatedir}/lib/systemd/catalog/database %{_bindir}/systemctl %{_bindir}/systemd-notify %{_bindir}/systemd-analyze +%{_bindir}/systemd-escape %{_bindir}/systemd-ask-password %{_bindir}/systemd-tty-ask-password-agent %{_bindir}/systemd-machine-id-setup @@ -1045,6 +1024,9 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g %{_bindir}/systemd-loginctl %{_bindir}/journalctl %{_bindir}/machinectl +%{_bindir}/busctl +%{_bindir}/coredumpctl +%{_bindir}/systemd-coredumpctl %{_bindir}/systemd-tmpfiles %{_bindir}/systemd-nspawn %{_bindir}/systemd-stdio-bridge @@ -1053,34 +1035,50 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g %{_bindir}/systemd-cgtop %{_bindir}/systemd-delta %{_bindir}/systemd-run -%caps(cap_dac_override,cap_sys_ptrace=pe) %{_bindir}/systemd-detect-virt +%{_bindir}/systemd-detect-virt %{_bindir}/systemd-inhibit +%{_bindir}/systemd-path +#%{_bindir}/systemd-sysusers +%{_bindir}/systemd-firstboot %{_bindir}/hostnamectl %{_bindir}/localectl %{_bindir}/timedatectl %{_bindir}/bootctl -%{_bindir}/systemd-coredumpctl %{_bindir}/udevadm %{_bindir}/kernel-install +%{_bindir}/systemd-hwdb %{_prefix}/lib/systemd/systemd %exclude %{_prefix}/lib/systemd/system/systemd-journal-gatewayd.* +%exclude %{_prefix}/lib/systemd/system/systemd-journal-remote.* +%exclude %{_prefix}/lib/systemd/system/systemd-journal-upload.* +%exclude %{_prefix}/lib/systemd/system/systemd-networkd.service +%exclude %{_prefix}/lib/systemd/system/systemd-networkd-wait-online.service +%exclude %{_prefix}/lib/systemd/system/systemd-resolved.service +%exclude %{_prefix}/lib/systemd/system/dbus-org.freedesktop.resolve1.service %{_prefix}/lib/systemd/system %{_prefix}/lib/systemd/user %exclude %{_prefix}/lib/systemd/systemd-journal-gatewayd +%exclude %{_prefix}/lib/systemd/systemd-journal-remote +%exclude %{_prefix}/lib/systemd/systemd-networkd +%exclude %{_prefix}/lib/systemd/systemd-networkd-wait-online +%exclude %{_prefix}/lib/systemd/systemd-resolved +%exclude %{_prefix}/lib/systemd/systemd-resolve-host +%exclude %{_prefix}/lib/systemd/systemd-journal-upload %{_prefix}/lib/systemd/systemd-* %{_prefix}/lib/udev -%{_prefix}/lib/systemd/system-generators/systemd-cryptsetup-generator -%{_prefix}/lib/systemd/system-generators/systemd-getty-generator -%{_prefix}/lib/systemd/system-generators/systemd-rc-local-generator -%{_prefix}/lib/systemd/system-generators/systemd-fstab-generator -%{_prefix}/lib/systemd/system-generators/systemd-system-update-generator -%{_prefix}/lib/systemd/system-generators/systemd-efi-boot-generator +%exclude %{_sysconfdir}/udev/rules.d/80-net-setup-link.rules %{_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 -%{_prefix}/lib/tmpfiles.d/systemd-nologin.conf +%{_prefix}/lib/tmpfiles.d/var.conf +%{_prefix}/lib/tmpfiles.d/etc.conf +%{_prefix}/lib/tmpfiles.d/sap.conf %{_prefix}/lib/sysctl.d/50-default.conf +#%{_prefix}/lib/sysusers.d/basic.conf +#%{_prefix}/lib/sysusers.d/systemd.conf +%{_prefix}/lib/systemd/system-preset/90-systemd.preset %{_prefix}/lib/systemd/system-preset/99-default-disable.preset %{_prefix}/lib/systemd/catalog/systemd.catalog %{_prefix}/lib/kernel/install.d/50-depmod.install @@ -1094,10 +1092,20 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g %{_sbindir}/runlevel %{_sbindir}/udevadm %{_mandir}/man1/* +%exclude %{_mandir}/man5/systemd.network.* +%exclude %{_mandir}/man5/systemd.netdev.* +%exclude %{_mandir}/man5/systemd.link.* +%exclude %{_mandir}/man5/resolved.conf.* %{_mandir}/man5/* %{_mandir}/man7/* %exclude %{_mandir}/man8/systemd-journal-gatewayd.* +%exclude %{_mandir}/man8/systemd-journal-remote.* +%exclude %{_mandir}/man8/systemd-networkd.* +%exclude %{_mandir}/man8/systemd-resolved.* %{_mandir}/man8/* +#%{_datadir}/factory/etc/nsswitch.conf +#%{_datadir}/factory/etc/pam.d/other +#%{_datadir}/factory/etc/pam.d/system-auth %{_datadir}/systemd/kbd-model-map %{_datadir}/dbus-1/services/org.freedesktop.systemd1.service %{_datadir}/dbus-1/system-services/org.freedesktop.systemd1.service @@ -1106,37 +1114,22 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g %{_datadir}/dbus-1/system-services/org.freedesktop.locale1.service %{_datadir}/dbus-1/system-services/org.freedesktop.timedate1.service %{_datadir}/dbus-1/system-services/org.freedesktop.machine1.service -%{_datadir}/dbus-1/interfaces/org.freedesktop.systemd1.*.xml -%{_datadir}/dbus-1/interfaces/org.freedesktop.hostname1.xml -%{_datadir}/dbus-1/interfaces/org.freedesktop.locale1.xml -%{_datadir}/dbus-1/interfaces/org.freedesktop.timedate1.xml +%dir %{_datadir}/polkit-1 +%dir %{_datadir}/polkit-1/actions %{_datadir}/polkit-1/actions/org.freedesktop.systemd1.policy %{_datadir}/polkit-1/actions/org.freedesktop.hostname1.policy %{_datadir}/polkit-1/actions/org.freedesktop.login1.policy %{_datadir}/polkit-1/actions/org.freedesktop.locale1.policy %{_datadir}/polkit-1/actions/org.freedesktop.timedate1.policy -%{_datadir}/pkgconfig/systemd.pc +%{_datadir}/polkit-1/actions/org.freedesktop.machine1.policy +%{_libdir}/pkgconfig/systemd.pc %{_datadir}/pkgconfig/udev.pc -%{_datadir}/bash-completion/completions/hostnamectl -%{_datadir}/bash-completion/completions/journalctl -%{_datadir}/bash-completion/completions/localectl -%{_datadir}/bash-completion/completions/loginctl -%{_datadir}/bash-completion/completions/systemctl -%{_datadir}/bash-completion/completions/systemd-coredumpctl -%{_datadir}/bash-completion/completions/timedatectl -%{_datadir}/bash-completion/completions/udevadm -%{_datadir}/bash-completion/completions/systemd-analyze -%{_datadir}/bash-completion/completions/kernel-install -%{_datadir}/bash-completion/completions/systemd-run +%{_datadir}/bash-completion/completions/* %{_datadir}/zsh/site-functions/* -%ghost %{_localstatedir}/lib/random-seed -%ghost %dir %{_localstatedir}/var/lib/systemd/ -%ghost %dir %{_localstatedir}/var/lib/systemd/coredump -%ghost %dir %{_localstatedir}/var/lib/systemd/catalog -%ghost %{_localstatedir}/var/lib/systemd/catalog/database -%ghost %dir %{_localstatedir}/var/lib/backlight/ +%{_prefix}/lib/systemd/catalog/systemd.*.catalog %config(noreplace) %{_sysconfdir}/rc.d/rc.local %{_sysconfdir}/rc.local +%{_datadir}/systemd/language-fallback-map # Make sure we don't remove runlevel targets from F14 alpha installs, # but make sure we don't create then anew. @@ -1148,31 +1141,35 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g %files libs %{_libdir}/security/pam_systemd.so %{_libdir}/libnss_myhostname.so.2 +%{_libdir}/libnss_mymachines.so.2 +%{_libdir}/libudev.so.* +%{_libdir}/libsystemd.so.* %{_libdir}/libsystemd-daemon.so.* %{_libdir}/libsystemd-login.so.* %{_libdir}/libsystemd-journal.so.* %{_libdir}/libsystemd-id128.so.* -%{_libdir}/libudev.so.* %files devel %dir %{_includedir}/systemd +%{_libdir}/libudev.so +%{_libdir}/libsystemd.so %{_libdir}/libsystemd-daemon.so %{_libdir}/libsystemd-login.so %{_libdir}/libsystemd-journal.so %{_libdir}/libsystemd-id128.so -%{_libdir}/libudev.so %{_includedir}/systemd/sd-daemon.h %{_includedir}/systemd/sd-login.h %{_includedir}/systemd/sd-journal.h %{_includedir}/systemd/sd-id128.h %{_includedir}/systemd/sd-messages.h -%{_includedir}/systemd/sd-shutdown.h +%{_includedir}/systemd/_sd-common.h %{_includedir}/libudev.h +%{_libdir}/pkgconfig/libudev.pc +%{_libdir}/pkgconfig/libsystemd.pc %{_libdir}/pkgconfig/libsystemd-daemon.pc %{_libdir}/pkgconfig/libsystemd-login.pc %{_libdir}/pkgconfig/libsystemd-journal.pc %{_libdir}/pkgconfig/libsystemd-id128.pc -%{_libdir}/pkgconfig/libudev.pc %{_mandir}/man3/* %dir %{_datadir}/gtk-doc/html/libudev %{_datadir}/gtk-doc/html/libudev/* @@ -1181,20 +1178,7 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g %{_bindir}/systemd-sysv-convert %files python -%{python_sitearch}/systemd/__init__.py -%{python_sitearch}/systemd/__init__.pyc -%{python_sitearch}/systemd/__init__.pyo -%{python_sitearch}/systemd/_journal.so -%{python_sitearch}/systemd/_reader.so -%{python_sitearch}/systemd/_daemon.so -%{python_sitearch}/systemd/id128.so -%{python_sitearch}/systemd/login.so -%{python_sitearch}/systemd/journal.py -%{python_sitearch}/systemd/journal.pyc -%{python_sitearch}/systemd/journal.pyo -%{python_sitearch}/systemd/daemon.py -%{python_sitearch}/systemd/daemon.pyc -%{python_sitearch}/systemd/daemon.pyo +%{python_sitearch}/systemd %files -n libgudev1 %{_libdir}/libgudev-1.0.so.* @@ -1211,40 +1195,238 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g %{_libdir}/pkgconfig/gudev-1.0* %files journal-gateway +%config(noreplace) %{_sysconfdir}/systemd/journal-remote.conf +%config(noreplace) %{_sysconfdir}/systemd/journal-upload.conf %{_prefix}/lib/systemd/system/systemd-journal-gatewayd.* +%{_prefix}/lib/systemd/system/systemd-journal-remote.* +%{_prefix}/lib/systemd/system/systemd-journal-upload.* %{_prefix}/lib/systemd/systemd-journal-gatewayd +%{_prefix}/lib/systemd/systemd-journal-upload +%{_prefix}/lib/systemd/systemd-journal-remote +%{_prefix}/lib/tmpfiles.d/systemd-remote.conf +#%{_prefix}/lib/sysusers.d/systemd-remote.conf %{_mandir}/man8/systemd-journal-gatewayd.* +%{_mandir}/man8/systemd-journal-remote.* %{_datadir}/systemd/gatewayd -%changelog -* Thu Jul 16 2015 Lukas Nykryn - 208-20.6 -- machined: force machined to dispatch messages (#1243401) - -* Thu May 21 2015 Lukas Nykryn - 208-20.5 -- rules: load sg module (#1223340) - -* Mon May 11 2015 Lukas Nykryn - 208-20.4 -- run: drop mistakenly committed test code (#1220272) -- cgroup: downgrade log messages when we cannot write to cgroup trees that are mounted read-only (#1220298) - -* Wed Apr 08 2015 Lukáš Nykrýn - 208-20.3 -- Revert "conditionalize hardening away on s390(x)" - -* Thu Mar 19 2015 Lukas Nykryn - 208-20.2 -- Revert "units: fix BindsTo= logic when applied relative to services with Type=oneshot" (#1203803) - -* Mon Mar 09 2015 Lukas Nykryn - 208-20.1 -- shared/install: avoid prematurely rejecting "missing" units (#1199981) -- core: fix enabling units via their absolute paths (#1199981) +%files networkd +%dir %{_prefix}/lib/systemd/network +%{_bindir}/networkctl +#%{_prefix}/lib/systemd/network/99-default.link +#%{_prefix}/lib/systemd/network/80-container-host0.network +#%{_prefix}/lib/systemd/network/80-container-ve.network +%{_prefix}/lib/systemd/system/systemd-networkd.service +%{_prefix}/lib/systemd/system/systemd-networkd-wait-online.service +%{_prefix}/lib/systemd/systemd-networkd +%{_prefix}/lib/systemd/systemd-networkd-wait-online +%{_mandir}/man8/systemd-journal-gatewayd.* +%{_mandir}/man8/systemd-journal-remote.* +%{_mandir}/man8/systemd-networkd.* +%{_mandir}/man5/systemd.network.* +%{_mandir}/man5/systemd.netdev.* +%{_mandir}/man5/systemd.link.* +%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.network1.conf +%{_datadir}/dbus-1/system-services/org.freedesktop.network1.service +#%{_datadir}/polkit-1/actions/org.freedesktop.network1.policy +%{_prefix}/lib/udev/rules.d/80-net-setup-link.rules + +%files resolved +%{_prefix}/lib/systemd/systemd-resolved +%{_prefix}/lib/systemd/systemd-resolve-host +%{_sysconfdir}/systemd/resolved.conf +%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.resolve1.conf +%{_datadir}/dbus-1/system-services/org.freedesktop.resolve1.service +%{_libdir}/libnss_resolve.so.2 +%{_prefix}/lib/systemd/system/systemd-resolved.service +%{_prefix}/lib/systemd/system/dbus-org.freedesktop.resolve1.service +%{_mandir}/man5/resolved.conf.* +%{_mandir}/man8/systemd-resolved.* -* Mon Dec 22 2014 Lukas Nykryn - 208-20 -- core: introduce new Delegate=yes/no property controlling creation of cgroup subhierarchies (#1139223) -- core: don't migrate PIDs for units that may contain subcgroups, do this only for leaf units (#1139223) -- mount: use libmount to enumerate /proc/self/mountinfo (#1161417) -- mount: monitor for utab changes with inotify (#1161417) -- mount: add remote-fs dependencies if needed after change (#1161417) -- mount: check options as well as fstype for network mounts (#1161417) -- rules: don't enable usb pm for Avocent devices (#1155370) +%changelog +* Mon Oct 12 2015 Lukas Nykryn - 219-19 +- udev: make naming for virtio devices opt-in (#1269216) +- tmpfiles.d: don't clean SAP sockets either (#1186044) + +* Tue Oct 06 2015 Lukas Nykryn - 219-18 +- tmpfiles.d: don't clean SAP lockfiles and logs (#1186044) + +* Mon Sep 28 2015 Lukas Nykryn - 219-17 +- sd-event: fix prepare priority queue comparison function (#1266479) +- units: run ldconfig also when cache is unpopulated (#1265539) +- selinux: fix regression of systemctl subcommands when absolute unit file paths are specified (#1185120) + +* Wed Sep 23 2015 Lukas Nykryn - 219-16 +- login: fix gcc warning, include missing header file (#1264073) +- shutdown: make sure /run/nologin has correct label (#1264073) + +* Tue Sep 22 2015 Lukas Nykryn - 219-15 +- login: fix label on /run/nologin (#1264073) +- udev-rules: prandom character device node permissions (#1264112) + +* Tue Sep 15 2015 Lukas Nykryn - 219-14 +- Revert "sysctl.d: default to fq_codel, fight bufferbloat" (#1263158) +- loginctl: print nontrivial properties in logictl show-* (#1260465) + +* Wed Sep 02 2015 Lukas Nykryn - 219-13 +- udev: net_id - support predictable ifnames on virtio buses (#1259015) + +* Tue Sep 01 2015 Lukas Nykryn - 219-12 +- selinux: fix check for transient units (#1255129) +- socket: fix setsockopt call. SOL_SOCKET changed to SOL_TCP. (#1135599) +- selinux: fix missing SELinux unit access check (#1185120) +- selinux: always use *_raw API from libselinux (#1256888) + +* Wed Aug 12 2015 Lukas Nykryn - 219-11 +- journald-server: don't read audit events (#1252409) +- everything: remove traces of --user (#1071363) + +* Fri Aug 07 2015 Lukas Nykryn - 219-10 +- Revert "journald: move /dev/log socket to /run" (#1249968) + +* Fri Jul 31 2015 Lukas Nykryn - 219-9 +- units: add [Install] section to tmp.mount +- bus-util: add articles to explanation messages (#1016680) +- bus-util: print correct warnings for units that fail but for which we have a NULL result only (#1016680) + +* Thu Jul 16 2015 Lukas Nykryn - 219-8 +- sysv-generator test: Fix assertion (#1222517) +- man: avoid line break in url (#1222517) +- Add VARIANT as a standard value for /etc/os-release (#1222517) +- Fix permissions on /run/systemd/nspawn/locks (#1222517) +- generators: rename add_{root,usr}_mount to add_{sysroot,sysroot_usr}_mount (#1222517) +- Generate systemd-fsck-root.service in the initramfs (#1222517) +- units: fix typo in systemd-resolved.service (#1222517) +- core: don't consider umask for SocketMode= (#1222517) +- timedate: fix memory leak in timedated (#1222517) +- coredump: make sure we vacuum by default (#1222517) +- tmpfiles: don't fail if we cannot create a subvolume because a file system is read-only but a dir already exists anyway (#1222517) +- resolved: fix crash when shutting down (#1222517) +- resolved: allow DnsAnswer objects with no space for RRs (#1222517) +- id128: add new sd_id128_is_null() call (#1222517) +- journalctl: Improve boot ID lookup (#1222517) +- test-hashmap: fix an assert (#1222517) +- units: make sure systemd-nspawn@.slice instances are actually located in machine.slice (#1222517) +- Revert "journald-audit: exit gracefully in the case we can't join audit multicast group" (#1222517) +- journald: handle more gracefully when bind() fails on audit sockets (#1222517) +- udev: link-config - fix corruption (#1222517) +- udev/net_id: Only read the first 64 bytes of PCI config space (#1222517) +- shared: generator - correct path to systemd-fsck (#1222517) +- logind: Save the user’s state when a session enters SESSION_ACTIVE (#1222517) +- small fix ru translation (#1222517) +- kmod-setup: don't warn when ipv6 can't be loaded (#1222517) +- Partially revert "ma-setup: simplify" (#1222517) +- ima-setup: write policy one line at a time (#1222517) +- ata_id: unbotch format specifier (#1222517) +- install: explicitly return 0 on success (#1222517) +- systemd.service.xml: document that systemd removes the PIDFile (#1222517) +- core: handle --log-target=null when calling systemd-shutdown (#1222517) +- man: ProtectHome= protects /root as well (#1222517) +- timedatectl: trim non-local RTC warning to 80 chars wide (#1222517) +- escape: fix exit code (#1222517) +- man: information about available properties (#1222517) +- journal: in persistent mode create /var/log/journal, with all parents. (#1222517) +- sysv-generator: fix wrong "Overwriting existing symlink" warnings (#1222517) +- mount: don't claim a device is gone from /proc/self/mountinfo before it is gone from *all* lines (#1222517) +- mount: properly check for mounts currently in /proc/self/mountinfo (#1222517) + +* Tue Jul 14 2015 Lukas Nykryn - 219-7 +- udev: fix crash in path_id builtin (#957112) + +* Fri Jul 10 2015 Lukas Nykryn - 219-6 +- sd-bus: don't inherit connection creds into message creds when we have a direct connection (#1230190) + +* Tue Jun 30 2015 Lukas Nykryn - 219-5 +- Revert "core: one step back again, for nspawn we actually can't wait for cgroups running empty since systemd will get exactly zero notifications about it" (#1199644) +- bus-creds: always set SD_BUS_CREDS_PID when we set pid in the mask (#1230190) +- sd-bus: do not use per-datagram auxiliary information (#1230190) +- sd-bus: store selinux context at connection time (#1230190) +- journald: simplify context handling (#1230190) +- bash-completion: add verb set-property (#1235635) + +* Fri Jun 19 2015 Lukas Nykryn - 219-4 +- core: Fix assertion with empty Exec*= paths (#1222517) +- rules: load sg module (#1186462) +- util: add shell_maybe_quote() call for preparing a string for shell cmdline inclusion (#1016680) +- bus-util: be more verbose if dbus job fails (#1016680) +- notify: fix badly backported help message (#1199644) +- cryptsetup: craft a unique ID with the source device (#1226333) +- systemctl: introduce --now for enable, disable and mask (#1233081) +- udev: also create old sas paths (#957112) +- journald: do not strip leading whitespace from messages (#1227396) + +* Mon May 18 2015 Lukas Nykryn - 219-3 +- console-getty.service: don't start when /dev/console is missing (#1222517) +- resolved: Do not add .busname dependencies, when compiling without kdbus. (#1222517) +- man: add journal-remote.conf(5) (#1222517) +- mount: don't run quotaon only for network filesystems (#1222517) +- mount: fix up wording in the comment (#1222517) +- udev: net_id - fix copy-paste error (#1222517) +- man: don't mention "journalctl /dev/sda" (#1222517) +- units: move After=systemd-hwdb-update.service dependency from udev to udev-trigger (#1222517) +- units: explicitly order systemd-user-sessions.service after nss-user-lookup.target (#1222517) +- zsh-completion: update loginctl (#1222517) +- zsh-completion: add missing -M completion for journalctl (#1222517) +- zsh-completion: update hostnamectl (#1222517) +- shell-completion: systemctl switch-root verb (#1222517) +- core/automount: beef up error message (#1222517) +- man: remove 'fs' from 'rootfsflags' (#1222517) +- shared: fix memleak (#1222517) +- udevd: fix synchronization with settle when handling inotify events (#1222517) +- python-systemd: fix is_socket_inet to cope with ports (#1222517) +- man: fix examples indentation in tmpfiles.d(5) (#1222517) +- systemctl: avoid bumping NOFILE rlimit unless needed (#1222517) +- exit-status: Fix "NOTINSSTALLED" typo (#1222517) +- tmpfiles: there's no systemd-forbid-user-logins.service service (#1222517) +- kmod-setup: load ip_tables kmod at boot (#1222517) +- util: Fix assertion in split() on missing ' (#1222517) +- units: set KillMode=mixed for our daemons that fork worker processes (#1222517) +- unit: don't add automatic dependencies on device units if they aren't supported (#1222517) +- update-done: ignore nanosecond file timestamp components, they are not reliable (#1222517) +- sd-daemon: simplify sd_pid_notify_with_fds (#1222517) +- fstab-generator: add x-systemd.requires and x-systemd.requires-mounts-for (#1164334) + +* Thu May 14 2015 Lukas Nykryn - 219-2 +- udev: restore udevadm settle timeout (#1210981) +- udev: settle should return immediately when timeout is 0 (#1210981) +- udev: Fix ping timeout when settle timeout is 0 (#1210981) +- detect-virt: use /proc/device-tree (#1207773) +- ARM: detect-virt: detect Xen (#1207773) +- ARM: detect-virt: detect QEMU/KVM (#1207773) +- Persistent by_path links for ata devices (#1045498) +- man: document forwarding to syslog better (#1177336) +- man: fix typos in previous comimt (#1177336) +- LSB: always add network-online.target to services with priority over 10 (#1189253) +- rules: enable memory hotplug (#1105020) +- rules: reload sysctl settings when the bridge module is loaded (#1182105) + +* Tue Apr 14 2015 Lukáš Nykrýn - 219-1 +- workaround build issues on ppc and s390 +- some more patches + +* Tue Mar 17 2015 Lukáš Nykrýn - 219-0.4 +- steal more patches from fedora + +* Fri Mar 13 2015 Lukáš Nykrýn - 219-0.3 +- steal patches from fedora + +* Fri Mar 06 2015 Lukáš Nykrýn - 219-0.1 +- rebase to 219 + +* Mon Dec 15 2014 Lukáš Nykrýn - 218-0.3 +- rebase to 218 +- remove networkd tmpfiles snipets due to packaging issues +- add resolved subpackage +- backport some nspawn features from upstream + +* Thu Nov 20 2014 Lukáš Nykrýn - 217-0.3 +- split systemd and networkd tmpfiles snippets + +* Thu Nov 20 2014 Lukáš Nykrýn - 217-0.2 +- spec fixes +- core: introduce new Delegate=yes/no property controlling creation of cgroup subhierarchies + +* Mon Nov 17 2014 Lukáš Nykrýn - 217-0.1 +- rebase to 217 * Mon Nov 10 2014 Lukas Nykryn - 208-19 - cgroups-agent: really down-grade log level (#1044386) @@ -1541,7 +1723,7 @@ Resolves: rhbz#995197 * Tue Jul 23 2013 Kay Sievers - 206-1 - New upstream release - Resolves (#984152) +Resolves (#984152) * Wed Jul 3 2013 Lennart Poettering - 205-1 - New upstream release @@ -1554,7 +1736,7 @@ Resolves: rhbz#995197 * Fri Jun 14 2013 Harald Hoyer 204-8 - fix, which helps to sucessfully browse journals with - duplicated seqnums +duplicated seqnums * Fri Jun 14 2013 Harald Hoyer 204-7 - fix duplicate message ID bug @@ -1600,7 +1782,7 @@ Resolves: rhbz#974132 * Tue Apr 09 2013 Michal Schmidt - 201-2 - Automatically discover whether to run autoreconf and add autotools and git - BuildRequires based on the presence of patches to be applied. +BuildRequires based on the presence of patches to be applied. - Use find -delete. * Mon Apr 8 2013 Lennart Poettering - 201-1 @@ -1662,12 +1844,12 @@ Resolves: rhbz#974132 * Mon Dec 10 2012 Michal Schmidt - 196-3 - Disable hardening on s390(x) because PIE is broken there and produces - text relocations with __thread (#868839). +text relocations with __thread (#868839). * Wed Dec 05 2012 Michal Schmidt - 196-2 - added spice-vdagentd.service to presets (Lennart, #876237) - BR cryptsetup-devel instead of the legacy cryptsetup-luks-devel provide name - (requested by Milan Brož). +(requested by Milan Brož). - verbose make to see the actual build flags * Wed Nov 21 2012 Lennart Poettering - 196-1 @@ -1698,7 +1880,7 @@ Resolves: rhbz#974132 * Wed Oct 24 2012 Kay Sievers - 195-3 - Migrate /etc/sysconfig/ i18n, keyboard, network files/variables to - systemd native files +systemd native files * Tue Oct 23 2012 Lennart Poettering - 195-2 - Provide syslog because the journal is fine as a syslog implementation @@ -1792,9 +1974,9 @@ Resolves: rhbz#974132 * Thu Aug 16 2012 Ray Strode 188-4 - more scriptlet fixes - (move dm migration logic to %posttrans so the service - files it's looking for are available at the time - the logic is run) +(move dm migration logic to %%posttrans so the service +files it's looking for are available at the time +the logic is run) * Sat Aug 11 2012 Lennart Poettering - 188-3 - Remount file systems MS_PRIVATE before switching roots @@ -1835,8 +2017,8 @@ Resolves: rhbz#974132 * Wed Jun 06 2012 Michal Schmidt - 185-4.gita2368a3 - Update to current git snapshot - - Add systemd-readahead-analyze - - Drop upstream patch +- Add systemd-readahead-analyze +- Drop upstream patch - Split systemd-libs - Drop duplicate doc files - Fixed License headers of subpackages @@ -1851,9 +2033,9 @@ Resolves: rhbz#974132 * Mon Jun 04 2012 Kay Sievers - 185-1 - New upstream release - - udev selinux labeling fixes - - new man pages - - systemctl help +- udev selinux labeling fixes +- new man pages +- systemctl help * Thu May 31 2012 Lennart Poettering - 184-1 - New upstream release @@ -1863,7 +2045,7 @@ Resolves: rhbz#974132 * Wed Mar 28 2012 Michal Schmidt - 44-4 - Add triggers from Bill Nottingham to correct the damage done by - the obsoleted systemd-units's preun scriptlet (#807457). +the obsoleted systemd-units's preun scriptlet (#807457). * Mon Mar 26 2012 Dennis Gilmore - 44-3 - apply patch from upstream so we can build systemd on arm and ppc @@ -1907,7 +2089,7 @@ Resolves: rhbz#974132 * Wed Jan 25 2012 Kay Sievers - 39-1.1 - install everything in /usr - https://fedoraproject.org/wiki/Features/UsrMove +https://fedoraproject.org/wiki/Features/UsrMove * Wed Jan 25 2012 Lennart Poettering - 39-1 - New upstream release