basebuilder_pel7ppc64bebuilder0
7 years ago
630 changed files with 81145 additions and 0 deletions
@ -0,0 +1,60 @@
@@ -0,0 +1,60 @@
|
||||
From 139d2c57d86203e421b17a4b6ec168c49fcb9893 Mon Sep 17 00:00:00 2001 |
||||
From: Harald Hoyer <harald@redhat.com> |
||||
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 3ae1d77e3..f1c74de27 |
||||
--- 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 |
@ -0,0 +1,55 @@
@@ -0,0 +1,55 @@
|
||||
From 42026958cced6fe111bbaccad04d24d8ca3d6c55 Mon Sep 17 00:00:00 2001 |
||||
From: Lukas Nykryn <lnykryn@redhat.com> |
||||
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 c72209262..5f5783a68 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 78ceeb6fa..d8976809d 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/<diskname>.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"; |
@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
|
||||
From d2deeea1d5aa1d13139b9e9f70c6655abb589530 Mon Sep 17 00:00:00 2001 |
||||
From: Harald Hoyer <harald@redhat.com> |
||||
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 275a5b74a..d007c932c 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); |
@ -0,0 +1,88 @@
@@ -0,0 +1,88 @@
|
||||
From cd37b8d217cc240074f8ff77f1986551f6c8834a Mon Sep 17 00:00:00 2001 |
||||
From: Lukas Nykryn <lnykryn@redhat.com> |
||||
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 bf04d3184..75459f74d 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 f4c4490e8..97eb4feca 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); |
||||
|
@ -0,0 +1,63 @@
@@ -0,0 +1,63 @@
|
||||
From 932ae09a155ef463d99d4b4e7cf04aafbcd78a19 Mon Sep 17 00:00:00 2001 |
||||
From: Lukas Nykryn <lnykryn@redhat.com> |
||||
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 a02a537f7..d2e7b4012 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; |
||||
} |
||||
|
@ -0,0 +1,33 @@
@@ -0,0 +1,33 @@
|
||||
From d4582346f47064de24470b5f92e418966004925f Mon Sep 17 00:00:00 2001 |
||||
From: Lukas Nykryn <lnykryn@redhat.com> |
||||
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 338c1d328..6f30474c3 100644 |
||||
--- a/man/systemctl.xml |
||||
+++ b/man/systemctl.xml |
||||
@@ -1713,6 +1713,17 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service |
||||
<xi:include href="less-variables.xml" xpointer="less"/> |
||||
</refsect1> |
||||
|
||||
+ <refsect1> |
||||
+ <title>Examples</title> |
||||
+ <para> |
||||
+ For examples how to use systemctl in comparsion |
||||
+ with old service and chkconfig command please see: |
||||
+ <ulink url="https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Managing_Services_with_systemd-Services.html"> |
||||
+ Managing System Services |
||||
+ </ulink> |
||||
+ </para> |
||||
+ </refsect1> |
||||
+ |
||||
<refsect1> |
||||
<title>See Also</title> |
||||
<para> |
@ -0,0 +1,40 @@
@@ -0,0 +1,40 @@
|
||||
From cb0c7e5445624b7bc67fc4c10a91d5cf3dd6ce6f Mon Sep 17 00:00:00 2001 |
||||
From: Michal Sekletar <msekleta@redhat.com> |
||||
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 75459f74d..a734e9c48 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 000000000..2b494e57c |
||||
--- /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" |
@ -0,0 +1,54 @@
@@ -0,0 +1,54 @@
|
||||
From 1b83fbe90a241c6d5c4ab0dc8a3f97215fb277bf Mon Sep 17 00:00:00 2001 |
||||
From: Lukas Nykryn <lnykryn@redhat.com> |
||||
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 e8a4085a3..0360f7c6b 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 5f5783a68..287d05c9b 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 255a4f2d0..90b2c4b30 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: |
@ -0,0 +1,220 @@
@@ -0,0 +1,220 @@
|
||||
From 66d06bd0a577ddb2461e8d1e5c8c2fbf6845227d Mon Sep 17 00:00:00 2001 |
||||
From: Lukas Nykryn <lnykryn@redhat.com> |
||||
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 a734e9c48..70e4fbc6d 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 97a29d63f..3f50887a8 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 000000000..5cc1a7e67 |
||||
--- /dev/null |
||||
+++ b/src/shared/linux/fanotify.h |
||||
@@ -0,0 +1,98 @@ |
||||
+#ifndef _LINUX_FANOTIFY_H |
||||
+#define _LINUX_FANOTIFY_H |
||||
+ |
||||
+#include <linux/types.h> |
||||
+ |
||||
+/* the following events that user-space can register for */ |
||||
+#define FAN_ACCESS 0x00000001 /* File was accessed */ |
||||
+#define FAN_MODIFY 0x00000002 /* File was modified */ |
||||
+#define FAN_CLOSE_WRITE 0x00000008 /* Unwrittable file closed */ |
||||
+#define FAN_CLOSE_NOWRITE 0x00000010 /* Writtable file closed */ |
||||
+#define FAN_OPEN 0x00000020 /* File was opened */ |
||||
+ |
||||
+#define FAN_EVENT_ON_CHILD 0x08000000 /* interested in child events */ |
||||
+ |
||||
+/* FIXME currently Q's have no limit.... */ |
||||
+#define FAN_Q_OVERFLOW 0x00004000 /* Event queued overflowed */ |
||||
+ |
||||
+#define FAN_OPEN_PERM 0x00010000 /* File open in perm check */ |
||||
+#define FAN_ACCESS_PERM 0x00020000 /* File accessed in perm check */ |
||||
+ |
||||
+/* helper events */ |
||||
+#define FAN_CLOSE (FAN_CLOSE_WRITE | FAN_CLOSE_NOWRITE) /* close */ |
||||
+ |
||||
+/* flags used for fanotify_init() */ |
||||
+#define FAN_CLOEXEC 0x00000001 |
||||
+#define FAN_NONBLOCK 0x00000002 |
||||
+ |
||||
+#define FAN_ALL_INIT_FLAGS (FAN_CLOEXEC | FAN_NONBLOCK) |
||||
+ |
||||
+/* flags used for fanotify_modify_mark() */ |
||||
+#define FAN_MARK_ADD 0x00000001 |
||||
+#define FAN_MARK_REMOVE 0x00000002 |
||||
+#define FAN_MARK_DONT_FOLLOW 0x00000004 |
||||
+#define FAN_MARK_ONLYDIR 0x00000008 |
||||
+#define FAN_MARK_MOUNT 0x00000010 |
||||
+#define FAN_MARK_IGNORED_MASK 0x00000020 |
||||
+#define FAN_MARK_IGNORED_SURV_MODIFY 0x00000040 |
||||
+#define FAN_MARK_FLUSH 0x00000080 |
||||
+ |
||||
+#define FAN_ALL_MARK_FLAGS (FAN_MARK_ADD |\ |
||||
+ FAN_MARK_REMOVE |\ |
||||
+ FAN_MARK_DONT_FOLLOW |\ |
||||
+ FAN_MARK_ONLYDIR |\ |
||||
+ FAN_MARK_MOUNT |\ |
||||
+ FAN_MARK_IGNORED_MASK |\ |
||||
+ FAN_MARK_IGNORED_SURV_MODIFY) |
||||
+ |
||||
+/* |
||||
+ * All of the events - we build the list by hand so that we can add flags in |
||||
+ * the future and not break backward compatibility. Apps will get only the |
||||
+ * events that they originally wanted. Be sure to add new events here! |
||||
+ */ |
||||
+#define FAN_ALL_EVENTS (FAN_ACCESS |\ |
||||
+ FAN_MODIFY |\ |
||||
+ FAN_CLOSE |\ |
||||
+ FAN_OPEN) |
||||
+ |
||||
+/* |
||||
+ * All events which require a permission response from userspace |
||||
+ */ |
||||
+#define FAN_ALL_PERM_EVENTS (FAN_OPEN_PERM |\ |
||||
+ FAN_ACCESS_PERM) |
||||
+ |
||||
+#define FAN_ALL_OUTGOING_EVENTS (FAN_ALL_EVENTS |\ |
||||
+ FAN_ALL_PERM_EVENTS |\ |
||||
+ FAN_Q_OVERFLOW) |
||||
+ |
||||
+#define FANOTIFY_METADATA_VERSION 2 |
||||
+ |
||||
+struct fanotify_event_metadata { |
||||
+ __u32 event_len; |
||||
+ __u32 vers; |
||||
+ __u64 mask; |
||||
+ __s32 fd; |
||||
+ __s32 pid; |
||||
+} __attribute__ ((packed)); |
||||
+ |
||||
+struct fanotify_response { |
||||
+ __s32 fd; |
||||
+ __u32 response; |
||||
+} __attribute__ ((packed)); |
||||
+ |
||||
+/* Legit userspace responses to a _PERM event */ |
||||
+#define FAN_ALLOW 0x01 |
||||
+#define FAN_DENY 0x02 |
||||
+ |
||||
+/* Helper functions to deal with fanotify_event_metadata buffers */ |
||||
+#define FAN_EVENT_METADATA_LEN (sizeof(struct fanotify_event_metadata)) |
||||
+ |
||||
+#define FAN_EVENT_NEXT(meta, len) ((len) -= (meta)->event_len, \ |
||||
+ (struct fanotify_event_metadata*)(((char *)(meta)) + \ |
||||
+ (meta)->event_len)) |
||||
+ |
||||
+#define FAN_EVENT_OK(meta, len) ((long)(len) >= (long)FAN_EVENT_METADATA_LEN && \ |
||||
+ (long)(meta)->event_len >= (long)FAN_EVENT_METADATA_LEN && \ |
||||
+ (long)(meta)->event_len <= (long)(len)) |
||||
+ |
||||
+#endif /* _LINUX_FANOTIFY_H */ |
||||
diff --git a/src/shared/missing.h b/src/shared/missing.h |
||||
index b33a70cb2..06a55769a 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); |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
From 2411be37e26457c5e6734dbf08feb4b8375c13a2 Mon Sep 17 00:00:00 2001 |
||||
From: Michal Sekletar <msekleta@redhat.com> |
||||
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 b0e4b5a42..9e64d6f98 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 000000000..d67fc425b |
||||
--- /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" |
@ -0,0 +1,91 @@
@@ -0,0 +1,91 @@
|
||||
From 74b66951fcd54e6ab51023f60cc021fe355be1a8 Mon Sep 17 00:00:00 2001 |
||||
From: Tom Gundersen <teg@jklm.no> |
||||
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 37ff1b800..99caa0a2a 100644 |
||||
--- a/src/udev/udev-builtin-net_id.c |
||||
+++ b/src/udev/udev-builtin-net_id.c |
||||
@@ -38,7 +38,7 @@ |
||||
* o<index> -- on-board device index number |
||||
* s<slot>[f<function>][d<dev_port>] -- hotplug slot index number |
||||
* x<MAC> -- MAC address |
||||
- * [P<domain>]p<bus>s<slot>[f<function>][d<dev_port>] |
||||
+ * [P<domain>]p<bus>s<slot>[f<function>][d<dev_id>/<dev_port>] |
||||
* -- PCI geographical location |
||||
* [P<domain>]p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>] |
||||
* -- 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'; |
||||
} |
@ -0,0 +1,77 @@
@@ -0,0 +1,77 @@
|
||||
From f1faa24b260222e70d38492e5e3f126700dbd9f8 Mon Sep 17 00:00:00 2001 |
||||
From: Lukas Nykryn <lnykryn@redhat.com> |
||||
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 287d05c9b..ac2a81c0c 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 f701bcf71..9c25c3c6f 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 03e3dc286..89995831b 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 */ |
@ -0,0 +1,27 @@
@@ -0,0 +1,27 @@
|
||||
From 9b5e05005e534fc7fb6dc56c94e3296bb17fe122 Mon Sep 17 00:00:00 2001 |
||||
From: Lukas Nykryn <lnykryn@redhat.com> |
||||
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 c2f1545cc..151097a6e 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); |
||||
|
@ -0,0 +1,24 @@
@@ -0,0 +1,24 @@
|
||||
From 634aa6447d365af61b6cd78651eb80c32da966dc Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 9b0e080e6..125d6e0a1 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 - - - - |
@ -0,0 +1,358 @@
@@ -0,0 +1,358 @@
|
||||
From 1a3dd33f98312421e0f3d654e8f5d56554557a8c Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 9e64d6f98..bf65b2406 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 753c3d1d6..66097ef74 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( |
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
From fb1115e5738b798bb99e5a699838395ca463e29d Mon Sep 17 00:00:00 2001 |
||||
From: Michal Schmidt <mschmidt@redhat.com> |
||||
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 34d93379d..de9c6ab32 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; |
||||
} |
@ -0,0 +1,32 @@
@@ -0,0 +1,32 @@
|
||||
From 0488761858a3bfbf06a25fbf3bc0e28fdfc28234 Mon Sep 17 00:00:00 2001 |
||||
From: Michal Schmidt <mschmidt@redhat.com> |
||||
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 de9c6ab32..a95fff18f 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; |
||||
|
@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
|
||||
From 3d9f88326fefe4bf8f5ed4b1210c6b563a3eecff Mon Sep 17 00:00:00 2001 |
||||
From: Martin Pitt <martin.pitt@ubuntu.com> |
||||
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 c948d4d21..88ba7e46a 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"); |
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
From c49cced2ef923522398695531363de2eb3940273 Mon Sep 17 00:00:00 2001 |
||||
From: Tom Gundersen <teg@jklm.no> |
||||
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 befa38575..346f8524c 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); |
@ -0,0 +1,128 @@
@@ -0,0 +1,128 @@
|
||||
From c7d4f7a5a6cef5a46f905141e2ac27da3c96d2b7 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 a4ff1ab87..cbe09d7ab 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 90e88ffa2..fdb90063f 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 |
@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
|
||||
From 15bfa13aa624e1f2a15571ad5278acec643c0489 Mon Sep 17 00:00:00 2001 |
||||
From: Daniel Mack <daniel@zonque.org> |
||||
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 947ac1fcf..1c36c577c 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; |
@ -0,0 +1,33 @@
@@ -0,0 +1,33 @@
|
||||
From 33d01e64bc4e286e4eb772de8b3781686c2d3a3a Mon Sep 17 00:00:00 2001 |
||||
From: Daniel Mack <daniel@zonque.org> |
||||
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 8cfc4cc4f..3840fff06 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) { |
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
From 685ddafd9e3c5f548e02e38633f366ff453f918b Mon Sep 17 00:00:00 2001 |
||||
From: Martin Pitt <martin.pitt@ubuntu.com> |
||||
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 bf65b2406..2e6455f6e 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 64a384bac..175be6868 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 */ |
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
From 4581f8d1cde9b6fac4320e5cdf5234c96bbd60ae Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 21cb898b9..6b93ec844 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); |
||||
|
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
From 86592a27154d8da0e695304a75ae1458c574c962 Mon Sep 17 00:00:00 2001 |
||||
From: Thomas Hindoe Paaboel Andersen <phomes@gmail.com> |
||||
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 cbe09d7ab..e67e9acb6 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) |
@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
|
||||
From 93ac68f5225bc0cf63ead3a3212539586d1fffb7 Mon Sep 17 00:00:00 2001 |
||||
From: Aaro Koskinen <aaro.koskinen@nokia.com> |
||||
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 e111fa9cc..144177cd4 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 */ |
@ -0,0 +1,35 @@
@@ -0,0 +1,35 @@
|
||||
From 32213f2f1d98bf851a570ecc35c018001e5d5ac4 Mon Sep 17 00:00:00 2001 |
||||
From: Aaro Koskinen <aaro.koskinen@nokia.com> |
||||
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 06a55769a..8cb0b2c96 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 |
@ -0,0 +1,30 @@
@@ -0,0 +1,30 @@
|
||||
From 1c0e8e9ce84cd74a20a60b98ab3a39d75d05b45f Mon Sep 17 00:00:00 2001 |
||||
From: Lennart Poettering <lennart@poettering.net> |
||||
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 ee8e607c2..9f1e55e2f 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; |
||||
|
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
From 95216d7246fe5e8ac404cc9d432072eb59f2af04 Mon Sep 17 00:00:00 2001 |
||||
From: Colin Walters <walters@verbum.org> |
||||
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 9f1e55e2f..563f6fe85 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); |
@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
|
||||
From 24e82cb7aa809bb8d50f40957cfed51dc48e0d72 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 d007c932c..b6945eda5 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); |
||||
} |
@ -0,0 +1,36 @@
@@ -0,0 +1,36 @@
|
||||
From 66d069acb953ed8f2bfc6d76561d594520b5c67b Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 f18923399..def151bb8 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 |
@ -0,0 +1,909 @@
@@ -0,0 +1,909 @@
|
||||
From 30ced6a8c742e1c798fff439b28a9800ca43f3e7 Mon Sep 17 00:00:00 2001 |
||||
From: Lennart Poettering <lennart@poettering.net> |
||||
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 d3deac393..75b9a4628 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 bb7ae0783..0609b20fd 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 f3977e62d..c971330af 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 6997921fd..5c19af5d9 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 73e64d87a..914a2dbcc 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 563f6fe85..a6558ee23 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; |
||||
|
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
From 8cbaef2f9e08dc14e827445de76072e31aa6cce7 Mon Sep 17 00:00:00 2001 |
||||
From: Thomas Hindoe Paaboel Andersen <phomes@gmail.com> |
||||
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 75b9a4628..1cc103c29 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 |
@ -0,0 +1,30 @@
@@ -0,0 +1,30 @@
|
||||
From e02e6845a4c4abe7d79df4305810703af5e6ec21 Mon Sep 17 00:00:00 2001 |
||||
From: Benjamin Franzke <benjaminfranzke@googlemail.com> |
||||
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 b46f0a8da..b0f0f66e0 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; |
@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
|
||||
From 46392c1d8f433ee44fc5bacb085879779a662468 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Cristian=20Rodr=C3=ADguez?= <crrodriguez@opensuse.org> |
||||
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 ba035caed..f24b5b4ec 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" |
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
From 0b78cbf29f02adc3cc490bf2b4e9365057ed7d7b Mon Sep 17 00:00:00 2001 |
||||
From: Umut Tezduyar Lindskog <umut.tezduyar@axis.com> |
||||
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 4775219e4..bc9b7ec62 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; |
||||
} |
||||
|
@ -0,0 +1,94 @@
@@ -0,0 +1,94 @@
|
||||
From 608259be892c532d0afaeb81de3a5ee578d7658a Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 d9dea8deb..afded7e38 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 8499f4eb8..22db55091 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; |
||||
|
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
From b3df4af4258e3285704f9622b9655084439c6f5e Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Cristian=20Rodr=C3=ADguez?= <crrodriguez@opensuse.org> |
||||
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 2845e05ce..0f28718b0 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 |
@ -0,0 +1,49 @@
@@ -0,0 +1,49 @@
|
||||
From 529c94b47f886f99796cff0f5827d6c2ebdcea19 Mon Sep 17 00:00:00 2001 |
||||
From: Lennart Poettering <lennart@poettering.net> |
||||
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 028c2a7a5..22a3a5347 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) |
@ -0,0 +1,80 @@
@@ -0,0 +1,80 @@
|
||||
From 6ad61c838992d17f5faa94faa8f17967083a4226 Mon Sep 17 00:00:00 2001 |
||||
From: Hans-Peter Deifel <hpd@hpdeifel.de> |
||||
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 88ba7e46a..187997e1f 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) { |
@ -0,0 +1,27 @@
@@ -0,0 +1,27 @@
|
||||
From a2911c593e9d69a2aa01d89d876e313f90e7db17 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 f24b5b4ec..85487230a 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; |
@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
|
||||
From 2bbdb63f7e5f125e1259b0fcfcea8226c5ae4e58 Mon Sep 17 00:00:00 2001 |
||||
From: Thomas Hindoe Paaboel Andersen <phomes@gmail.com> |
||||
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 999aa8ab5..493252a13 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; |
||||
|
@ -0,0 +1,44 @@
@@ -0,0 +1,44 @@
|
||||
From 61d5dff976f33ec7189eae58641c49088e166479 Mon Sep 17 00:00:00 2001 |
||||
From: Lubomir Rintel <lkundrak@v3.sk> |
||||
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 1b7d87101..2cb976923 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 |
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
From e411ef694a09d001cdb97e139af6884b01be4aba Mon Sep 17 00:00:00 2001 |
||||
From: Benjamin Franzke <benjaminfranzke@googlemail.com> |
||||
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 9b07af422..640cb8b7d 100644 |
||||
--- a/man/machinectl.xml |
||||
+++ b/man/machinectl.xml |
||||
@@ -715,11 +715,12 @@ |
||||
<title>Download a Fedora image, set a root password in it, start |
||||
it as service</title> |
||||
|
||||
- <programlisting># 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</programlisting> |
||||
+ <programlisting># 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</programlisting> |
||||
|
||||
<para>This downloads the specified <filename>.raw</filename> |
||||
image with verification disabled. Then a shell is opened in it |
@ -0,0 +1,133 @@
@@ -0,0 +1,133 @@
|
||||
From 5d66d4942090a971de8df2c3de9ce143a208eb37 Mon Sep 17 00:00:00 2001 |
||||
From: Michal Schmidt <mschmidt@redhat.com> |
||||
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 48c43a288..88aae4815 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 b9db7f104..70bc1caa2 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 bd0d32473..bcf116ed3 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 c6f64876b..c278d6f9d 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; |
||||
|
@ -0,0 +1,83 @@
@@ -0,0 +1,83 @@
|
||||
From 73cbcbaf7e04d42816ada8ee44b5fbc6b7f0bdb4 Mon Sep 17 00:00:00 2001 |
||||
From: Michal Schmidt <mschmidt@redhat.com> |
||||
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 c278d6f9d..c31f60ec7 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; |
||||
|
||||
} |
||||
|
@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
|
||||
From ea81ddfdc0eadfb62e28ed998d33c5e1d3b3abab Mon Sep 17 00:00:00 2001 |
||||
From: Michal Schmidt <mschmidt@redhat.com> |
||||
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 c31f60ec7..deecce8a8 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) { |
@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
|
||||
From 394185c013c15e47ffa1bdc5948ac6010c329728 Mon Sep 17 00:00:00 2001 |
||||
From: Michal Schmidt <mschmidt@redhat.com> |
||||
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 deecce8a8..a4e26b1d8 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; |
||||
|
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
From d65ce525915a604d31cda80b5d7a8d639fb5cbb9 Mon Sep 17 00:00:00 2001 |
||||
From: Chris Morin <chris.morin2@gmail.com> |
||||
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 d97d55023..b92057af2 100644 |
||||
--- a/man/bootup.xml |
||||
+++ b/man/bootup.xml |
||||
@@ -134,7 +134,7 @@ |
||||
v v | v <emphasis>rescue.target</emphasis> |
||||
timers.target paths.target | sockets.target |
||||
| | | | |
||||
- v |_________________ | ___________________/ |
||||
+ v \_________________ | ___________________/ |
||||
\|/ |
||||
v |
||||
basic.target |
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
From 3af8c723aebecb5d220fdb5b1fb80a097c366db1 Mon Sep 17 00:00:00 2001 |
||||
From: Jan Synacek <jsynacek@redhat.com> |
||||
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 fb672510b..7724df96b 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." |
@ -0,0 +1,53 @@
@@ -0,0 +1,53 @@
|
||||
From 6995221c988db99faa5de5ed948466e1982d9d9d Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 8815bf997..4bd0fcf75 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:</para> |
||||
- |
||||
- <variablelist> |
||||
- <varlistentry> |
||||
- <term><varname>s</varname></term> |
||||
- <term><varname>min</varname></term> |
||||
- <term><varname>h</varname></term> |
||||
- <term><varname>d</varname></term> |
||||
- <term><varname>w</varname></term> |
||||
- <term><varname>ms</varname></term> |
||||
- <term><varname>m</varname></term> |
||||
- <term><varname>us</varname></term></varlistentry> |
||||
- </variablelist> |
||||
+ following postfixes for the respective time units: |
||||
+ <constant>s</constant>, |
||||
+ <constant>m</constant> or <constant>min</constant>, |
||||
+ <constant>h</constant>, |
||||
+ <constant>d</constant>, |
||||
+ <constant>w</constant>, |
||||
+ <constant>ms</constant>, |
||||
+ <constant>us</constant>, |
||||
+ respectively meaning seconds, minutes, hours, days, weeks, |
||||
+ milliseconds, and microseconds. Full names of the time units can |
||||
+ be used too. |
||||
+ </para> |
||||
|
||||
<para>If multiple integers and units are specified, the time |
||||
- values are summed up. If an integer is given without a unit, |
||||
- <varname>s</varname> is assumed. |
||||
+ values are summed. If an integer is given without a unit, |
||||
+ <constant>s</constant> is assumed. |
||||
</para> |
||||
|
||||
<para>When the age is set to zero, the files are cleaned |
@ -0,0 +1,33 @@
@@ -0,0 +1,33 @@
|
||||
From 3b573e5c39f452f98084b3d36486369882455b72 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 6b93ec844..3da4d3d4f 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++; |
||||
} |
@ -0,0 +1,85 @@
@@ -0,0 +1,85 @@
|
||||
From 98d1fe84e1eac91563bff326539465cd34e971c0 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 3da4d3d4f..4ec0cff21 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); |
||||
} |
||||
} |
||||
|
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
From 10cfa6f617fdc2b9d85823163b4445f5ae9058c5 Mon Sep 17 00:00:00 2001 |
||||
From: Daniel Mack <daniel@zonque.org> |
||||
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 21b66913c..f728af4a8 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; |
||||
} |
||||
|
@ -0,0 +1,32 @@
@@ -0,0 +1,32 @@
|
||||
From a4409b8ae6b80acffc9a4f89df2d06c498b8c8f9 Mon Sep 17 00:00:00 2001 |
||||
From: Daniel Mack <daniel@zonque.org> |
||||
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 6900da9e8..351563b96 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); |
||||
} |
||||
|
@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
|
||||
From 5acd5e264d53cf293ac5d2e57371690120fb7119 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Cristian=20Rodr=C3=ADguez?= <crrodriguez@opensuse.org> |
||||
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 f65363a67..b7dca7509 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]); |
@ -0,0 +1,60 @@
@@ -0,0 +1,60 @@
|
||||
From 7958951ba84f870c624b4d2ab452b12c844bde20 Mon Sep 17 00:00:00 2001 |
||||
From: Marcel Holtmann <marcel@holtmann.org> |
||||
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 fb789fd49..4fd951a58 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 |
@ -0,0 +1,114 @@
@@ -0,0 +1,114 @@
|
||||
From 0ad01db952718d3437fa8f077a065d17efe5279b Mon Sep 17 00:00:00 2001 |
||||
From: Michal Schmidt <mschmidt@redhat.com> |
||||
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 0f28718b0..24c49b916 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 2526e14d6..403c8f760 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 94891cdf3..9b57e5945 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); |
||||
} |
||||
} |
||||
|
@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
|
||||
From 2ee0903b0a00dd4a13af8a26ee5fb435c9895568 Mon Sep 17 00:00:00 2001 |
||||
From: Daniel Mack <daniel@zonque.org> |
||||
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 da7560f05..796cc520d 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) |
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
From 3104b6659b1405d25cdb5cad68e2bb2c9f8b5980 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 9d796b1ae..e75ef11c4 100644 |
||||
--- a/man/systemd-user-sessions.service.xml |
||||
+++ b/man/systemd-user-sessions.service.xml |
||||
@@ -55,13 +55,12 @@ |
||||
<title>Description</title> |
||||
|
||||
<para><filename>systemd-user-sessions.service</filename> is a |
||||
- service that controls user logins. After basic system |
||||
- initialization is complete it removes |
||||
+ service that controls user logins through |
||||
+ <citerefentry project='man-pages'><refentrytitle>pam_nologin</refentrytitle><manvolnum>8</manvolnum></citerefentry>. |
||||
+ After basic system initialization is complete it removes |
||||
<filename>/run/nologin</filename>, thus permitting logins. Before |
||||
system shutdown it creates <filename>/run/nologin</filename>, 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.</para> |
||||
+ prohibiting further logins.</para> |
||||
</refsect1> |
||||
|
||||
<refsect1> |
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
From 21511551c7d49424a202b25ffe76cf1371dfc0c1 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 9c25c3c6f..3201428c4 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])]) |
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
From 3f4c4af890ff655bf409875d0775f436e6d63353 Mon Sep 17 00:00:00 2001 |
||||
From: Lennart Poettering <lennart@poettering.net> |
||||
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 4480e1999..ef58887dc 100644 |
||||
--- a/man/systemd.netdev.xml |
||||
+++ b/man/systemd.netdev.xml |
||||
@@ -108,7 +108,7 @@ |
||||
<entry>A bond device is an aggregation of all its slave devices. See <ulink url="https://www.kernel.org/doc/Documentation/networking/bonding.txt">Linux Ethernet Bonding Driver HOWTO</ulink> for details.Local configuration</entry></row> |
||||
|
||||
<row><entry><varname>bridge</varname></entry> |
||||
- <entry>A bridge devcie is a software switch, each of its slave devices and the bridge itself are ports of the switch.</entry></row> |
||||
+ <entry>A bridge device is a software switch, each of its slave devices and the bridge itself are ports of the switch.</entry></row> |
||||
|
||||
<row><entry><varname>dummy</varname></entry> |
||||
<entry>A dummy device drops all packets sent to it.</entry></row> |
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
From 61dd027666b40102bc9463217264f1deaab4cc8a Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 b6b005636..b6550ed3c 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; |
||||
|
@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
|
||||
From c11c73fc4541bf0ea5a418ebea53e58668100f82 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 2e6455f6e..4933f76bd 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 \ |
@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
|
||||
From b1e53a9d3cc7c6fbe4447e201c8f6348ffcd7b6a Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 ac2a81c0c..ffc2cf9f2 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 |
@ -0,0 +1,333 @@
@@ -0,0 +1,333 @@
|
||||
From b72201257216f687bf3462ad7539612cccbbce75 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 8d9700d30..bf6ca0bf9 100644 |
||||
--- a/man/bootchart.conf.xml |
||||
+++ b/man/bootchart.conf.xml |
||||
@@ -68,8 +68,7 @@ |
||||
parameters and graph output.</para> |
||||
</refsect1> |
||||
|
||||
- <xi:include href="standard-conf.xml" xpointer="confd" /> |
||||
- <xi:include href="standard-conf.xml" xpointer="conf" /> |
||||
+ <xi:include href="standard-conf.xml" xpointer="main-conf" /> |
||||
|
||||
<refsect1> |
||||
<title>Options</title> |
||||
diff --git a/man/coredump.conf.xml b/man/coredump.conf.xml |
||||
index 3d325e6ad..0b7329bf5 100644 |
||||
--- a/man/coredump.conf.xml |
||||
+++ b/man/coredump.conf.xml |
||||
@@ -63,8 +63,7 @@ |
||||
a handler for core dumps invoked by the kernel.</para> |
||||
</refsect1> |
||||
|
||||
- <xi:include href="standard-conf.xml" xpointer="confd" /> |
||||
- <xi:include href="standard-conf.xml" xpointer="conf" /> |
||||
+ <xi:include href="standard-conf.xml" xpointer="main-conf" /> |
||||
|
||||
<refsect1> |
||||
<title>Options</title> |
||||
diff --git a/man/journald.conf.xml b/man/journald.conf.xml |
||||
index 364b58f07..85146b0d8 100644 |
||||
--- a/man/journald.conf.xml |
||||
+++ b/man/journald.conf.xml |
||||
@@ -64,8 +64,7 @@ |
||||
|
||||
</refsect1> |
||||
|
||||
- <xi:include href="standard-conf.xml" xpointer="confd" /> |
||||
- <xi:include href="standard-conf.xml" xpointer="conf" /> |
||||
+ <xi:include href="standard-conf.xml" xpointer="main-conf" /> |
||||
|
||||
<refsect1> |
||||
<title>Options</title> |
||||
diff --git a/man/logind.conf.xml b/man/logind.conf.xml |
||||
index ffaec5035..ca2b18783 100644 |
||||
--- a/man/logind.conf.xml |
||||
+++ b/man/logind.conf.xml |
||||
@@ -58,11 +58,13 @@ |
||||
<refsect1> |
||||
<title>Description</title> |
||||
|
||||
- <para>These files configure various parameters of the systemd login manager, <citerefentry><refentrytitle>systemd-logind.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para> |
||||
+ <para>These files configure various parameters of the systemd |
||||
+ login manager, |
||||
+ <citerefentry><refentrytitle>systemd-logind.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>. |
||||
+ </para> |
||||
</refsect1> |
||||
|
||||
- <xi:include href="standard-conf.xml" xpointer="confd" /> |
||||
- <xi:include href="standard-conf.xml" xpointer="conf" /> |
||||
+ <xi:include href="standard-conf.xml" xpointer="main-conf" /> |
||||
|
||||
<refsect1> |
||||
<title>Options</title> |
||||
diff --git a/man/resolved.conf.xml b/man/resolved.conf.xml |
||||
index 36cae2706..8047a4ea7 100644 |
||||
--- a/man/resolved.conf.xml |
||||
+++ b/man/resolved.conf.xml |
||||
@@ -63,8 +63,7 @@ |
||||
|
||||
</refsect1> |
||||
|
||||
- <xi:include href="standard-conf.xml" xpointer="confd" /> |
||||
- <xi:include href="standard-conf.xml" xpointer="conf" /> |
||||
+ <xi:include href="standard-conf.xml" xpointer="main-conf" /> |
||||
|
||||
<refsect1> |
||||
<title>Options</title> |
||||
diff --git a/man/standard-conf.xml b/man/standard-conf.xml |
||||
index b87d7e955..36af45927 100644 |
||||
--- a/man/standard-conf.xml |
||||
+++ b/man/standard-conf.xml |
||||
@@ -33,13 +33,39 @@ |
||||
configuration file.</para> |
||||
</refsection> |
||||
|
||||
- <refsection id='conf'> |
||||
- <title>Configuration File</title> |
||||
- |
||||
- <para>Configuration is also read from a single configuration file in |
||||
- <filename>/etc/</filename>. 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.</para> |
||||
+ <refsection id='main-conf'> |
||||
+ <title>Configuration Directories and Precedence</title> |
||||
+ |
||||
+ <para>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 |
||||
+ <filename>/etc/systemd/</filename> contains commented out entries |
||||
+ showing the defaults as a guide to the administrator. This file |
||||
+ can be edited to create local overrides. |
||||
+ </para> |
||||
+ |
||||
+ <para>When packages need to customize the configuration, they can |
||||
+ install configuration snippets in |
||||
+ <filename>/usr/lib/systemd/*.conf.d/</filename>. Files in |
||||
+ <filename>/etc/</filename> 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 |
||||
+ <filename>logind.conf.d/</filename> 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.</para> |
||||
+ |
||||
+ <para>To disable a configuration file supplied by the vendor, the |
||||
+ recommended way is to place a symlink to |
||||
+ <filename>/dev/null</filename> in the configuration directory in |
||||
+ <filename>/etc/</filename>, with the same filename as the vendor |
||||
+ configuration file.</para> |
||||
</refsection> |
||||
</refsection> |
||||
diff --git a/man/systemd-sleep.conf.xml b/man/systemd-sleep.conf.xml |
||||
index 433f2f83a..bb17ec866 100644 |
||||
--- a/man/systemd-sleep.conf.xml |
||||
+++ b/man/systemd-sleep.conf.xml |
||||
@@ -112,8 +112,7 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>. |
||||
attempts to suspend or hibernate the machine.</para> |
||||
</refsect1> |
||||
|
||||
- <xi:include href="standard-conf.xml" xpointer="confd" /> |
||||
- <xi:include href="standard-conf.xml" xpointer="conf" /> |
||||
+ <xi:include href="standard-conf.xml" xpointer="main-conf" /> |
||||
|
||||
<refsect1> |
||||
<title>Options</title> |
||||
diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml |
||||
index 7c3f23756..c7bcfaee4 100644 |
||||
--- a/man/systemd-system.conf.xml |
||||
+++ b/man/systemd-system.conf.xml |
||||
@@ -74,8 +74,7 @@ |
||||
operations.</para> |
||||
</refsect1> |
||||
|
||||
- <xi:include href="standard-conf.xml" xpointer="confd" /> |
||||
- <xi:include href="standard-conf.xml" xpointer="conf" /> |
||||
+ <xi:include href="standard-conf.xml" xpointer="main-conf" /> |
||||
|
||||
<refsect1> |
||||
<title>Options</title> |
||||
diff --git a/man/timesyncd.conf.xml b/man/timesyncd.conf.xml |
||||
index 1127970a1..89a651c66 100644 |
||||
--- a/man/timesyncd.conf.xml |
||||
+++ b/man/timesyncd.conf.xml |
||||
@@ -63,8 +63,7 @@ |
||||
|
||||
</refsect1> |
||||
|
||||
- <xi:include href="standard-conf.xml" xpointer="confd" /> |
||||
- <xi:include href="standard-conf.xml" xpointer="conf" /> |
||||
+ <xi:include href="standard-conf.xml" xpointer="main-conf" /> |
||||
|
||||
<refsect1> |
||||
<title>Options</title> |
||||
diff --git a/src/bootchart/bootchart.conf b/src/bootchart/bootchart.conf |
||||
index 2d7cb6121..4f5e50936 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 a3727200d..231609033 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 0fe9fe801..c2f0643e0 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 29bdf8f18..47eefe91c 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 6b1943a2d..834c4c2eb 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 e5a19ee47..3eb19e42b 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 fc3c6c49c..b6a2ada27 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= |
@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
|
||||
From 48b8df6ea51021e6624bdc45ff371dd033d379df Mon Sep 17 00:00:00 2001 |
||||
From: Peter Hutterer <peter.hutterer@who-t.net> |
||||
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 bbf44db77..9fcb5fdb9 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 |
@ -0,0 +1,30 @@
@@ -0,0 +1,30 @@
|
||||
From fab00ed4a9ce8a1d579028c2fc39db3717b454da Mon Sep 17 00:00:00 2001 |
||||
From: Tom Gundersen <teg@jklm.no> |
||||
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 8119205dd..7d193d088 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); |
@ -0,0 +1,181 @@
@@ -0,0 +1,181 @@
|
||||
From d3a45e70ee215646cdfbe19f514be08ae95e12eb Mon Sep 17 00:00:00 2001 |
||||
From: Zachary Cook <zachcook1991@gmail.com> |
||||
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 0e48e7934..1974cd7a2 100644 |
||||
--- a/man/systemd-cryptsetup-generator.xml |
||||
+++ b/man/systemd-cryptsetup-generator.xml |
||||
@@ -59,10 +59,8 @@ |
||||
<citerefentry><refentrytitle>systemd-cryptsetup@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> |
||||
units as necessary.</para> |
||||
|
||||
- <para><filename>systemd-cryptsetup-generator</filename> |
||||
- implements the <ulink |
||||
- url="http://www.freedesktop.org/wiki/Software/systemd/Generators">generator |
||||
- specification</ulink>.</para> |
||||
+ <para><filename>systemd-cryptsetup-generator</filename> implements |
||||
+ <citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para> |
||||
</refsect1> |
||||
|
||||
<refsect1> |
||||
diff --git a/man/systemd-debug-generator.xml b/man/systemd-debug-generator.xml |
||||
index 74c3b2620..5c5e9fc4a 100644 |
||||
--- a/man/systemd-debug-generator.xml |
||||
+++ b/man/systemd-debug-generator.xml |
||||
@@ -79,10 +79,8 @@ |
||||
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s |
||||
<command>enable</command> command.</para> |
||||
|
||||
- <para><filename>systemd-debug-generator</filename> implements the |
||||
- <ulink |
||||
- url="http://www.freedesktop.org/wiki/Software/systemd/Generators">generator |
||||
- specification</ulink>.</para> |
||||
+ <para><filename>systemd-debug-generator</filename> implements |
||||
+ <citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para> |
||||
</refsect1> |
||||
|
||||
<refsect1> |
||||
diff --git a/man/systemd-efi-boot-generator.xml b/man/systemd-efi-boot-generator.xml |
||||
index b2d8d65e3..fd7ba7983 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.</para> |
||||
|
||||
<para><filename>systemd-efi-boot-generator</filename> implements |
||||
- the <ulink |
||||
- url="http://www.freedesktop.org/wiki/Software/systemd/Generators">generator |
||||
- specification</ulink>.</para> |
||||
+ <citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para> |
||||
</refsect1> |
||||
|
||||
<refsect1> |
||||
diff --git a/man/systemd-fstab-generator.xml b/man/systemd-fstab-generator.xml |
||||
index 8f82e3330..022efb413 100644 |
||||
--- a/man/systemd-fstab-generator.xml |
||||
+++ b/man/systemd-fstab-generator.xml |
||||
@@ -71,10 +71,8 @@ |
||||
for more information about special <filename>/etc/fstab</filename> |
||||
mount options this generator understands.</para> |
||||
|
||||
- <para><filename>systemd-fstab-generator</filename> implements the |
||||
- <ulink |
||||
- url="http://www.freedesktop.org/wiki/Software/systemd/Generators">generator |
||||
- specification</ulink>.</para> |
||||
+ <para><filename>systemd-fstab-generator</filename> implements |
||||
+ <citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para> |
||||
</refsect1> |
||||
|
||||
<refsect1> |
||||
diff --git a/man/systemd-getty-generator.xml b/man/systemd-getty-generator.xml |
||||
index 0b5b2f2a7..338925964 100644 |
||||
--- a/man/systemd-getty-generator.xml |
||||
+++ b/man/systemd-getty-generator.xml |
||||
@@ -75,9 +75,8 @@ |
||||
for more information on the <varname>console=</varname> kernel |
||||
parameter.</para> |
||||
|
||||
- <para><filename>systemd-getty-generator</filename> implements the |
||||
- <ulink url="http://www.freedesktop.org/wiki/Software/systemd/Generators">generator |
||||
- specification</ulink>.</para> |
||||
+ <para><filename>systemd-getty-generator</filename> implements |
||||
+ <citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para> |
||||
|
||||
<para>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 9c706df24..8d2eaca4f 100644 |
||||
--- a/man/systemd-gpt-auto-generator.xml |
||||
+++ b/man/systemd-gpt-auto-generator.xml |
||||
@@ -157,9 +157,7 @@ |
||||
using <command>btrfs subvolume set-default</command>.</para> |
||||
|
||||
<para><filename>systemd-gpt-auto-generator</filename> implements |
||||
- the |
||||
- <ulink url="http://www.freedesktop.org/wiki/Software/systemd/Generators">Generator |
||||
- Specification</ulink>.</para> |
||||
+ <citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para> |
||||
</refsect1> |
||||
|
||||
<refsect1> |
||||
diff --git a/man/systemd-system-update-generator.xml b/man/systemd-system-update-generator.xml |
||||
index 3eec1d7b9..e7fc95c74 100644 |
||||
--- a/man/systemd-system-update-generator.xml |
||||
+++ b/man/systemd-system-update-generator.xml |
||||
@@ -61,10 +61,8 @@ |
||||
Updates Specification</ulink>. |
||||
</para> |
||||
|
||||
- <para><filename>systemd-system-update-generator</filename> |
||||
- implements the |
||||
- <ulink url="http://www.freedesktop.org/wiki/Software/systemd/Generators">generator |
||||
- specification</ulink>.</para> |
||||
+ <para><filename>systemd-system-update-generator</filename> implements |
||||
+ <citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para> |
||||
</refsect1> |
||||
|
||||
<refsect1> |
||||
diff --git a/man/systemd-sysv-generator.xml b/man/systemd-sysv-generator.xml |
||||
index e619b1bc2..f2d56cbcd 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 |
||||
<filename>basic.target</filename>.</para> |
||||
|
||||
- <para><filename>systemd-sysv-generator</filename> |
||||
- implements the <ulink |
||||
- url="http://www.freedesktop.org/wiki/Software/systemd/Generators">generator |
||||
- specification</ulink>.</para> |
||||
+ <para><filename>systemd-sysv-generator</filename> implements |
||||
+ <citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para> |
||||
</refsect1> |
||||
|
||||
<refsect1> |
||||
diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml |
||||
index 09e11b471..a452f87ba 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 |
||||
<command>link</command> command for |
||||
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>. |
||||
- Also, some units are dynamically created via generators <ulink |
||||
- url="http://www.freedesktop.org/wiki/Software/systemd/Generators/">Generators</ulink>. |
||||
+ Also, some units are dynamically created via a |
||||
+ <citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>. |
||||
</para> |
||||
</refsect1> |
||||
|
||||
diff --git a/man/systemd.xml b/man/systemd.xml |
||||
index 80591dc73..9b92140e6 100644 |
||||
--- a/man/systemd.xml |
||||
+++ b/man/systemd.xml |
||||
@@ -415,9 +415,8 @@ |
||||
|
||||
<para>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 |
||||
- <ulink url="http://www.freedesktop.org/wiki/Software/systemd/Generators">Generators Specification</ulink>.</para> |
||||
+ files or parameters passed on the kernel command line. For details see |
||||
+ <citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para> |
||||
|
||||
<para>Systems which invoke systemd in a container or initrd |
||||
environment should implement the |
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
From 3df99b05df12b73e4d081ee223f9b35ed33f47ca Mon Sep 17 00:00:00 2001 |
||||
From: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> |
||||
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 34c5a53fa..884abdd3e 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__) |
@ -0,0 +1,24 @@
@@ -0,0 +1,24 @@
|
||||
From e43361ab55a61ebfaf16e1c78be1bce1fdf84c67 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 2cb976923..88906655e 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* |
@ -0,0 +1,36 @@
@@ -0,0 +1,36 @@
|
||||
From f5ce5e24f9cf18a37ef6aedb149891d07767b045 Mon Sep 17 00:00:00 2001 |
||||
From: Hannes Reinecke <hare@suse.de> |
||||
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 25089a033..c6350be9f 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, |
@ -0,0 +1,30 @@
@@ -0,0 +1,30 @@
|
||||
From b4ea0d8280135b7eabb1bb70e24d62c86e065db3 Mon Sep 17 00:00:00 2001 |
||||
From: Hannes Reinecke <hare@suse.de> |
||||
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 260775cd8..85b517486 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); |
||||
|
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
From b9c441e4f5e7049c23d3f5d0a5a874b13e0356fc Mon Sep 17 00:00:00 2001 |
||||
From: Jonathon Gilbert <coroutines@gmail.com> |
||||
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 a62ebc497..93ee4d9fa 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 |
@ -0,0 +1,32 @@
@@ -0,0 +1,32 @@
|
||||
From 339b62c8f336bb51dc7a925062abeb3ce76145e6 Mon Sep 17 00:00:00 2001 |
||||
From: Martin Pitt <martin.pitt@ubuntu.com> |
||||
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 187997e1f..1e1096816 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); |
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
From 01dd8dc414460df51940c64e73cf318a9f587270 Mon Sep 17 00:00:00 2001 |
||||
From: Peter Hutterer <peter.hutterer@who-t.net> |
||||
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 9fcb5fdb9..8a324466b 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 |
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
From 5e6503d0d2efb5cbff945df42423640ffb138073 Mon Sep 17 00:00:00 2001 |
||||
From: Jan Engelhardt <jengelh@inai.de> |
||||
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 062009640..35b9ad515 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" |
@ -0,0 +1,375 @@
@@ -0,0 +1,375 @@
|
||||
From f997080b4d17a40b59b398e4354b6368d9c85f69 Mon Sep 17 00:00:00 2001 |
||||
From: Ivan Shapovalov <intelfx100@gmail.com> |
||||
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 9f6bd84b2..e4c79415d 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 1d77292f9..43d7607a3 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 1cc103c29..4ff882721 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 bc9b7ec62..203a6a0a1 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 c971330af..3ae0eb462 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 e5ea79fec..51e36fa8b 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 b41db7872..ae6614fbf 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 15e29be14..7781b4e62 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 ae9819d01..61ff9d331 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 b70c3beb6..b1d844877 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 88aae4815..760de0203 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 5c19af5d9..369abf0f5 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 33fb66bc3..2411a8e75 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 45744c7de..48cf9c16a 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 a6558ee23..565455bd6 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 291bc77a7..7ebc489c8 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); |
||||
|
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
From 5857b7843b35d84f976a399765f1c9a5365742a2 Mon Sep 17 00:00:00 2001 |
||||
From: Ivan Shapovalov <intelfx100@gmail.com> |
||||
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 a765d6d21..a37ca170f 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 ... */ |
@ -0,0 +1,77 @@
@@ -0,0 +1,77 @@
|
||||
From 169e74d772eac561a24f461ac65118d3d83a5980 Mon Sep 17 00:00:00 2001 |
||||
From: Ivan Shapovalov <intelfx100@gmail.com> |
||||
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 e47bcb4dc..76b5962c5 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 */ |
@ -0,0 +1,40 @@
@@ -0,0 +1,40 @@
|
||||
From 28b5692e9ab3dbb07e4d6b8e44b370637c04ba86 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 7724df96b..78bd58483 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; |
||||
|
@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
|
||||
From d67968957aece7a1d4da581d86ad719c9a7fad21 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 44bda34af..88af23e35 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; |
||||
} |
||||
|
@ -0,0 +1,63 @@
@@ -0,0 +1,63 @@
|
||||
From cf04c51fb2d5ce08a8b8aafec999e2007ef53c83 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 55c778633..12c869f5a 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) |
@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
|
||||
From 5633544097b9c3bf3d63ef3be9e7db5d4e1f49dc Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 9b57e5945..9b9e8ac85 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) { |
@ -0,0 +1,70 @@
@@ -0,0 +1,70 @@
|
||||
From eceb99d70a7c0916cb626dfbcb50894e1f4e9431 Mon Sep 17 00:00:00 2001 |
||||
From: Michael Olbrich <m.olbrich@pengutronix.de> |
||||
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 3201428c4..081ed0f6e 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 <inttypes.h> |
||||
#include <netinet/in.h> |
||||
@@ -345,6 +346,7 @@ AC_CHECK_DECLS([IFLA_INET6_ADDR_GEN_MODE, |
||||
#include <linux/if_tunnel.h> |
||||
#include <linux/if_link.h> |
||||
#include <linux/if_bridge.h> |
||||
+#include <linux/neighbour.h> |
||||
]]) |
||||
|
||||
# This makes sure pkg.m4 is available. |
||||
diff --git a/src/shared/missing.h b/src/shared/missing.h |
||||
index 8cb0b2c96..6ef4dbdf4 100644 |
||||
--- a/src/shared/missing.h |
||||
+++ b/src/shared/missing.h |
||||
@@ -35,6 +35,7 @@ |
||||
#include <linux/loop.h> |
||||
#include <linux/audit.h> |
||||
#include <linux/capability.h> |
||||
+#include <linux/neighbour.h> |
||||
|
||||
#ifdef HAVE_AUDIT |
||||
#include <libaudit.h> |
||||
@@ -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 |
@ -0,0 +1,85 @@
@@ -0,0 +1,85 @@
|
||||
From 175c446fc5ca6adbeeb25dfe0ef725e2f1914259 Mon Sep 17 00:00:00 2001 |
||||
From: Tom Gundersen <teg@jklm.no> |
||||
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 <drake@endlessm.com> |
||||
(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 99d4c8983..e98c1fd6d 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 |
@ -0,0 +1,27 @@
@@ -0,0 +1,27 @@
|
||||
From 1c8b76caab7d5164ac2d0d09aff9e4ffecdf205e Mon Sep 17 00:00:00 2001 |
||||
From: Lennart Poettering <lennart@poettering.net> |
||||
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 c03b4e8a5..f59870563 100644 |
||||
--- a/man/systemd.service.xml |
||||
+++ b/man/systemd.service.xml |
||||
@@ -334,6 +334,11 @@ |
||||
<para>If any of those commands (not prefixed with |
||||
<literal>-</literal>) fail, the rest are not executed and the |
||||
unit is considered failed.</para> |
||||
+ |
||||
+ <para>Note that <varname>ExecStartPre=</varname> may not be |
||||
+ used to start long-running processes. All processes forked |
||||
+ off by processes invoked via <varname>ExecStartPre=</varname> will |
||||
+ be killed before the next service process is run.</para> |
||||
</listitem> |
||||
</varlistentry> |
||||
|
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
From 185e6b251907bdf6adc63866f38722e9fb3d3715 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 24c49b916..f500568fe 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; |
||||
|
@ -0,0 +1,27 @@
@@ -0,0 +1,27 @@
|
||||
From 6e2893aa4e1d6471b174e56c5132da31f890d620 Mon Sep 17 00:00:00 2001 |
||||
From: David Herrmann <dh.herrmann@gmail.com> |
||||
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 9dd62f04a..25de0a218 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; |
@ -0,0 +1,72 @@
@@ -0,0 +1,72 @@
|
||||
From 4c6c21f92a8204abf031e42bb4949a0ecf039f7a Mon Sep 17 00:00:00 2001 |
||||
From: David Herrmann <dh.herrmann@gmail.com> |
||||
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 3dea908f5..e13cf5e2e 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 913d47071..782c4e60b 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); |
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
From 33088d83ecaf03611e3d20a893e675e4d7c3ae9a Mon Sep 17 00:00:00 2001 |
||||
From: Umut Tezduyar Lindskog <umut.tezduyar@axis.com> |
||||
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 3c7ad4060..f951c37cb 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); |
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
From 682a699e71147673f8de5fa12dbec8f2a4c28d9c Mon Sep 17 00:00:00 2001 |
||||
From: David Herrmann <dh.herrmann@gmail.com> |
||||
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 11b160e58..fdb157864 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).</para> |
||||
+ |
||||
+ <para>Settings from these |
||||
files override settings made with |
||||
<varname>Environment=</varname>. If the same variable is set |
||||
twice from these files, the files will be read in the order |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,45 @@
@@ -0,0 +1,45 @@
|
||||
From 0dd3b68d80bd32ecc5db65d634072390dad581aa Mon Sep 17 00:00:00 2001 |
||||
From: Richard Maw <richard.maw@codethink.co.uk> |
||||
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 ae49c77e0..7cdcc5d96 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; |
||||
|
@ -0,0 +1,179 @@
@@ -0,0 +1,179 @@
|
||||
From c546fffcff0d2e3522738aac30391d5996bdf4a6 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 afded7e38..6c096de03 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 df3004939..99820fa7b 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 8f32a9a98..d1486e7cd 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 a95fff18f..b45c38d68 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; |
@ -0,0 +1,156 @@
@@ -0,0 +1,156 @@
|
||||
From 47ac92420da9ecbffaf3aa0046d170be358639a2 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 6c096de03..7e6295435 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 22db55091..06a50296a 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 d1486e7cd..b7cc6d717 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, |
@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
|
||||
From 131de4184e86e7096d987973d7c4918f8303fa4b Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
||||
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 485876b6a..24f8416ef 100644 |
||||
--- a/man/systemd.network.xml |
||||
+++ b/man/systemd.network.xml |
||||
@@ -643,7 +643,7 @@ Gateway=192.168.0.1</programlisting> |
||||
Name=en* |
||||
|
||||
[Network] |
||||
-DHCP=both</programlisting> |
||||
+DHCP=yes</programlisting> |
||||
</example> |
||||
|
||||
<example> |
@ -0,0 +1,24 @@
@@ -0,0 +1,24 @@
|
||||
From a9c2be5c2e43bd5fb37dd45f84e6787f4abec23f Mon Sep 17 00:00:00 2001 |
||||
From: Mathieu Chevrier <chevrier.mathieu@gmail.com> |
||||
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 7d5a6c650..cceeeb845 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(); |
||||
} |
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
From fc9d7a3891dc293cccd4e127cfb1e2355f4e93da Mon Sep 17 00:00:00 2001 |
||||
From: Tom Gundersen <teg@jklm.no> |
||||
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 7cdcc5d96..5df39e117 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); |
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue