From 43ff24caabe4ac862916c15c26cce3d171736b28 Mon Sep 17 00:00:00 2001 From: Zbigniew Jędrzejewski-Szmek Date: Jul 19 2014 19:47:59 +0000 Subject: Pull bugfixes and some small features from upstream --- diff --git a/0001-man-add-link-to-Open-Group-Base-Specifications.patch b/0001-man-add-link-to-Open-Group-Base-Specifications.patch new file mode 100644 index 0000000..14f2d75 --- /dev/null +++ b/0001-man-add-link-to-Open-Group-Base-Specifications.patch @@ -0,0 +1,35 @@ +From ff14f3b995bfa85af05eb3108c96568eadf9d99c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 30 Jun 2014 20:10:16 -0400 +Subject: [PATCH] man: add link to Open Group Base Specifications + +(cherry picked from commit 9c5dcb68b058b6bde056fc1ece768ba74a120091) +--- + man/file-hierarchy.xml | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/man/file-hierarchy.xml b/man/file-hierarchy.xml +index ed6e0e9a05..408042ee6e 100644 +--- a/man/file-hierarchy.xml ++++ b/man/file-hierarchy.xml +@@ -190,7 +190,9 @@ + should prefer using the directory + specified in it over directly + referencing +- /tmp (see environ7 for details). ++ /tmp (see environ7 ++ and ++ IEEE Std 1003.1 for details). + + + +@@ -461,7 +463,8 @@ + set they should prefer using the + directory specified in it over + directly referencing +- /var/tmp (see environ7 for details). ++ /var/tmp (see environ7 ++ for details). + + + diff --git a/0002-sd-path-add-missing-header.patch b/0002-sd-path-add-missing-header.patch new file mode 100644 index 0000000..8a1f679 --- /dev/null +++ b/0002-sd-path-add-missing-header.patch @@ -0,0 +1,22 @@ +From b1177a14132cb362a50f3ee8b79fab65ec6796dd Mon Sep 17 00:00:00 2001 +From: Umut Tezduyar Lindskog +Date: Thu, 3 Jul 2014 22:28:29 +0200 +Subject: [PATCH] sd-path: add missing header + +(cherry picked from commit 0c7448867271180e8ac5795ebdff4bee0c0acd0c) +--- + src/libsystemd/sd-path/sd-path.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/libsystemd/sd-path/sd-path.c b/src/libsystemd/sd-path/sd-path.c +index 7ade915c2b..360c85405b 100644 +--- a/src/libsystemd/sd-path/sd-path.c ++++ b/src/libsystemd/sd-path/sd-path.c +@@ -22,6 +22,7 @@ + #include "path-util.h" + #include "strv.h" + #include "sd-path.h" ++#include "missing.h" + + static int from_environment(const char *envname, const char *fallback, const char **ret) { + assert(ret); diff --git a/0003-architecture-remove-cris-from-uname-list.patch b/0003-architecture-remove-cris-from-uname-list.patch new file mode 100644 index 0000000..1890d34 --- /dev/null +++ b/0003-architecture-remove-cris-from-uname-list.patch @@ -0,0 +1,25 @@ +From eda7cab62bcd8ba26a4a8681527684a7c4495357 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 3 Jul 2014 22:52:44 +0200 +Subject: [PATCH] architecture: remove "cris" from uname list + +the only correct name appears to be "crisv32"... + +http://lists.freedesktop.org/archives/systemd-devel/2014-July/020899.html +(cherry picked from commit bc4bc52bc3de56405045b0437e145a7067fb085d) +--- + src/shared/architecture.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/shared/architecture.c b/src/shared/architecture.c +index 7dd049a36a..6cdca4e7e5 100644 +--- a/src/shared/architecture.c ++++ b/src/shared/architecture.c +@@ -115,7 +115,6 @@ Architecture uname_architecture(void) { + #elif defined(__tilegx__) + { "tilegx", ARCHITECTURE_TILEGX }, + #elif defined(__cris__) +- { "cris", ARCHITECTURE_CRIS }, + { "crisv32", ARCHITECTURE_CRIS }, + #else + #error "Please register your architecture here!" diff --git a/0004-networkd-link-improve-link-tracking-logging.patch b/0004-networkd-link-improve-link-tracking-logging.patch new file mode 100644 index 0000000..f22f3ff --- /dev/null +++ b/0004-networkd-link-improve-link-tracking-logging.patch @@ -0,0 +1,50 @@ +From a8e0b3dcb6cb021193f7ab71e94bcc554cfd0348 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Thu, 3 Jul 2014 21:35:03 +0200 +Subject: [PATCH] networkd: link - improve link tracking logging + +(cherry picked from commit 393c0c5e64d0cb85ce14f25a06fa8958c9e119e7) +--- + src/network/networkd-link.c | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c +index 14c0417d83..961c1ab8ad 100644 +--- a/src/network/networkd-link.c ++++ b/src/network/networkd-link.c +@@ -2140,7 +2140,7 @@ int link_rtnl_process_address(sd_rtnl *rtnl, sd_rtnl_message *message, void *use + + r = address_new_dynamic(&address); + if (r < 0) +- return 0; ++ return r; + + r = sd_rtnl_message_addr_get_family(message, &address->family); + if (r < 0 || !IN_SET(address->family, AF_INET, AF_INET6)) { +@@ -2204,7 +2204,10 @@ int link_rtnl_process_address(sd_rtnl *rtnl, sd_rtnl_message *message, void *use + case RTM_NEWADDR: + if (!address_dropped) + log_debug_link(link, "added address: %s/%u", buf, +- address->prefixlen); ++ address->prefixlen); ++ else ++ log_debug_link(link, "updated address: %s/%u", buf, ++ address->prefixlen); + + LIST_PREPEND(addresses, link->addresses, address); + address = NULL; +@@ -2215,10 +2218,12 @@ int link_rtnl_process_address(sd_rtnl *rtnl, sd_rtnl_message *message, void *use + case RTM_DELADDR: + if (address_dropped) { + log_debug_link(link, "removed address: %s/%u", buf, +- address->prefixlen); ++ address->prefixlen); + + link_save(link); +- } ++ } else ++ log_warning_link(link, "removing non-existent address: %s/%u", ++ buf, address->prefixlen); + + break; + default: diff --git a/0005-networkd-properly-track-addresses-when-first-added.patch b/0005-networkd-properly-track-addresses-when-first-added.patch new file mode 100644 index 0000000..c760ff7 --- /dev/null +++ b/0005-networkd-properly-track-addresses-when-first-added.patch @@ -0,0 +1,103 @@ +From f49887cbe75da56dc8555d56c66daad78400b2b3 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Thu, 3 Jul 2014 22:47:51 +0200 +Subject: [PATCH] networkd: properly track addresses when first added + +When doing a NEWADDR, the reply we get back is the NEWADDR itself, rather +than just an empty ack (unlike how NEWLINK works). For this reason, the +process that did the NEWADDR does not get the broadcast message. + +We were only listening for broadcast messages, and hence not tracking the +addresses we added ourselves. This went unnoticed as the kernel will usually +send NEWADDR messages from time to time anyway, so things would mostly work, +but in the worst case we would not notice that a routable address was available +and consider ourselves offline. + +(cherry picked from commit 4958aee4977f325be19f0e1e4b424922c3cada5f) +--- + src/network/networkd-link.c | 54 +++++++++++++++++++++++++-------------------- + 1 file changed, 30 insertions(+), 24 deletions(-) + +diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c +index 961c1ab8ad..6257372ffd 100644 +--- a/src/network/networkd-link.c ++++ b/src/network/networkd-link.c +@@ -599,10 +599,35 @@ static int route_drop_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) + return 0; + } + ++static int link_get_address_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) { ++ _cleanup_link_unref_ Link *link = userdata; ++ int r; ++ ++ assert(rtnl); ++ assert(m); ++ assert(link); ++ assert(link->manager); ++ ++ for (; m; m = sd_rtnl_message_next(m)) { ++ r = sd_rtnl_message_get_errno(m); ++ if (r < 0) { ++ log_debug_link(link, "getting address failed: %s", strerror(-r)); ++ continue; ++ } ++ ++ r = link_rtnl_process_address(rtnl, m, link->manager); ++ if (r < 0) ++ log_warning_link(link, "could not process address: %s", strerror(-r)); ++ } ++ ++ return 1; ++} ++ + static int address_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) { + _cleanup_link_unref_ Link *link = userdata; + int r; + ++ assert(rtnl); + assert(m); + assert(link); + assert(link->ifname); +@@ -623,6 +648,11 @@ static int address_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) { + link->ifname, strerror(-r), + "ERRNO=%d", -r, + NULL); ++ if (r >= 0) { ++ /* calling handler directly so take a ref */ ++ link_ref(link); ++ link_get_address_handler(rtnl, m, link); ++ } + + if (link->addr_messages == 0) { + log_debug_link(link, "addresses set"); +@@ -2233,30 +2263,6 @@ int link_rtnl_process_address(sd_rtnl *rtnl, sd_rtnl_message *message, void *use + return 1; + } + +-static int link_get_address_handler(sd_rtnl *rtnl, sd_rtnl_message *m, void *userdata) { +- _cleanup_link_unref_ Link *link = userdata; +- int r; +- +- assert(rtnl); +- assert(m); +- assert(link); +- assert(link->manager); +- +- for (; m; m = sd_rtnl_message_next(m)) { +- r = sd_rtnl_message_get_errno(m); +- if (r < 0) { +- log_debug_link(link, "getting address failed: %s", strerror(-r)); +- continue; +- } +- +- r = link_rtnl_process_address(rtnl, m, link->manager); +- if (r < 0) +- log_warning_link(link, "could not process address: %s", strerror(-r)); +- } +- +- return 1; +-} +- + int link_add(Manager *m, sd_rtnl_message *message, Link **ret) { + Link *link; + _cleanup_rtnl_message_unref_ sd_rtnl_message *req = NULL; diff --git a/0006-man-netdev-mention-tun-and-tap.patch b/0006-man-netdev-mention-tun-and-tap.patch new file mode 100644 index 0000000..82e4bac --- /dev/null +++ b/0006-man-netdev-mention-tun-and-tap.patch @@ -0,0 +1,26 @@ +From 9cb3134113680e868cd116944c8d6f0d21c1e939 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Fri, 4 Jul 2014 01:26:19 +0200 +Subject: [PATCH] man: netdev - mention tun and tap + +Reported by Moviuro + +(cherry picked from commit 54f601debc07addbed803fb847cd5bd3e91e021e) +--- + man/systemd.netdev.xml | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml +index c90bd8f98c..857221fdb0 100644 +--- a/man/systemd.netdev.xml ++++ b/man/systemd.netdev.xml +@@ -163,7 +163,8 @@ + macvlan, vxlan, + ipip, gre, + sit, vti, +- veth, and dummy ++ veth, tun, ++ tap and dummy + are supported. This option is compulsory. + + diff --git a/0007-units-conditionalize-static-device-node-logic-on-CAP.patch b/0007-units-conditionalize-static-device-node-logic-on-CAP.patch new file mode 100644 index 0000000..4c5bad9 --- /dev/null +++ b/0007-units-conditionalize-static-device-node-logic-on-CAP.patch @@ -0,0 +1,47 @@ +From fce5e80589911d813dd13d1d0d64df96e0ab7939 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 4 Jul 2014 03:07:20 +0200 +Subject: [PATCH] units: conditionalize static device node logic on + CAP_SYS_MODULES instead of CAP_MKNOD + +npsawn containers generally have CAP_MKNOD, since this is required +to make PrviateDevices= work. Thus, it's not useful anymore to +conditionalize the kmod static device node units. + +Use CAP_SYS_MODULES instead which is not available for nspawn +containers. However, the static device node logic is only done for being +able to autoload modules with it, and if we can't do that there's no +point in doing it. + +(cherry picked from commit e0c74691c41a204eba2fd5f39615049fc9ff1648) +--- + units/kmod-static-nodes.service.in | 2 +- + units/systemd-tmpfiles-setup-dev.service.in | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/units/kmod-static-nodes.service.in b/units/kmod-static-nodes.service.in +index 368f980fd1..0934a8751f 100644 +--- a/units/kmod-static-nodes.service.in ++++ b/units/kmod-static-nodes.service.in +@@ -9,7 +9,7 @@ + Description=Create list of required static device nodes for the current kernel + DefaultDependencies=no + Before=sysinit.target systemd-tmpfiles-setup-dev.service +-ConditionCapability=CAP_MKNOD ++ConditionCapability=CAP_SYS_MODULE + ConditionPathExists=/lib/modules/%v/modules.devname + + [Service] +diff --git a/units/systemd-tmpfiles-setup-dev.service.in b/units/systemd-tmpfiles-setup-dev.service.in +index b9cfc53bd1..06346d3b7c 100644 +--- a/units/systemd-tmpfiles-setup-dev.service.in ++++ b/units/systemd-tmpfiles-setup-dev.service.in +@@ -12,7 +12,7 @@ DefaultDependencies=no + Conflicts=shutdown.target + After=systemd-readahead-collect.service systemd-readahead-replay.service systemd-sysusers.service + Before=sysinit.target local-fs-pre.target systemd-udevd.service shutdown.target +-ConditionCapability=CAP_MKNOD ++ConditionCapability=CAP_SYS_MODULE + + [Service] + Type=oneshot diff --git a/0008-units-conditionalize-configfs-and-debugfs-with-CAP_S.patch b/0008-units-conditionalize-configfs-and-debugfs-with-CAP_S.patch new file mode 100644 index 0000000..1ff7dec --- /dev/null +++ b/0008-units-conditionalize-configfs-and-debugfs-with-CAP_S.patch @@ -0,0 +1,42 @@ +From b654a1065f278c93b3891cc5993645026e0d3702 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 4 Jul 2014 03:10:09 +0200 +Subject: [PATCH] units: conditionalize configfs and debugfs with CAP_SYS_RAWIO + +We really don't want these in containers as they provide a too lowlevel +look on the system. + +Conditionalize them with CAP_SYS_RAWIO since that's required to access +/proc/kcore, /dev/kmem and similar, which feel similar in style. Also, +npsawn containers lack that capability. + +(cherry picked from commit fa229d09281d435153b4cfd138a2a62fa66d889b) +--- + units/sys-kernel-config.mount | 1 + + units/sys-kernel-debug.mount | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/units/sys-kernel-config.mount b/units/sys-kernel-config.mount +index 020101c0d8..21648eff6a 100644 +--- a/units/sys-kernel-config.mount ++++ b/units/sys-kernel-config.mount +@@ -11,6 +11,7 @@ Documentation=https://www.kernel.org/doc/Documentation/filesystems/configfs/conf + Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems + DefaultDependencies=no + ConditionPathExists=/sys/kernel/config ++ConditionCapability=CAP_SYS_RAWIO + After=systemd-modules-load.service + Before=sysinit.target + +diff --git a/units/sys-kernel-debug.mount b/units/sys-kernel-debug.mount +index 5369728a9f..1e94387bac 100644 +--- a/units/sys-kernel-debug.mount ++++ b/units/sys-kernel-debug.mount +@@ -11,6 +11,7 @@ Documentation=https://www.kernel.org/doc/Documentation/filesystems/debugfs.txt + Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems + DefaultDependencies=no + ConditionPathExists=/sys/kernel/debug ++ConditionCapability=CAP_SYS_RAWIO + Before=sysinit.target + + [Mount] diff --git a/0009-main-change-check-whether-etc-is-unpopulated-to-look.patch b/0009-main-change-check-whether-etc-is-unpopulated-to-look.patch new file mode 100644 index 0000000..ade4725 --- /dev/null +++ b/0009-main-change-check-whether-etc-is-unpopulated-to-look.patch @@ -0,0 +1,32 @@ +From 59afe82145260430e426cf4ac999e8fc69e2a288 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 4 Jul 2014 03:13:05 +0200 +Subject: [PATCH] main: change check whether /etc is unpopulated to look for + /etc/machine-id + +Previously, we checked whether /etc was completely empty. This makes it +difficult though for container managers such as nspawn to install a +small number of files (such as /etc/timezone), and have the system +otherwise populate its own tree. + +Hence, change this by looking for /etc/machine-id, which should be a +good sign whether /etc is populated or not. + +(cherry picked from commit baa1bdf70f21848fbe01d3f383ae0f59d86a9bf3) +--- + src/core/main.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/main.c b/src/core/main.c +index 38835fc620..1ca899998e 100644 +--- a/src/core/main.c ++++ b/src/core/main.c +@@ -1543,7 +1543,7 @@ int main(int argc, char *argv[]) { + if (in_initrd()) + log_info("Running in initial RAM disk."); + +- empty_etc = dir_is_empty("/etc") > 0; ++ empty_etc = access("/etc/machine-id", F_OK) < 0; + if (empty_etc) + log_info("Running with unpopulated /etc."); + } else { diff --git a/0010-networkd-don-t-clear-dhcpv6-lease-timers-if-there-s-.patch b/0010-networkd-don-t-clear-dhcpv6-lease-timers-if-there-s-.patch new file mode 100644 index 0000000..284ce5e --- /dev/null +++ b/0010-networkd-don-t-clear-dhcpv6-lease-timers-if-there-s-.patch @@ -0,0 +1,28 @@ +From 1b74050afb9b407eaa59c67b6015611c9113f7e4 Mon Sep 17 00:00:00 2001 +From: Steven Noonan +Date: Thu, 3 Jul 2014 19:43:56 -0700 +Subject: [PATCH] networkd: don't clear dhcpv6 lease timers if there's no + previous lease + +If client->lease is NULL, dhcp6_lease_clear_timers will cause a segmentation +fault. + +(cherry picked from commit b1e1238fb3af77419eca704fb64f68a313954734) +--- + src/libsystemd-network/sd-dhcp6-client.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c +index 8fdbbfe320..a83778e938 100644 +--- a/src/libsystemd-network/sd-dhcp6-client.c ++++ b/src/libsystemd-network/sd-dhcp6-client.c +@@ -708,7 +708,8 @@ static int client_receive_reply(sd_dhcp6_client *client, DHCP6Message *reply, + return 0; + } + +- dhcp6_lease_clear_timers(&client->lease->ia); ++ if (client->lease) ++ dhcp6_lease_clear_timers(&client->lease->ia); + + client->lease = sd_dhcp6_lease_unref(client->lease); + client->lease = lease; diff --git a/0011-networkd-accept-section-DHCP-in-systemd.network-file.patch b/0011-networkd-accept-section-DHCP-in-systemd.network-file.patch new file mode 100644 index 0000000..42d1cb4 --- /dev/null +++ b/0011-networkd-accept-section-DHCP-in-systemd.network-file.patch @@ -0,0 +1,23 @@ +From 18aa6c0119fbcad1e569f1d178c4f1691d4e3b90 Mon Sep 17 00:00:00 2001 +From: Steven Noonan +Date: Thu, 3 Jul 2014 19:42:19 -0700 +Subject: [PATCH] networkd: accept section DHCP in systemd.network files + +(cherry picked from commit c38d2eb828f1a62ae9052c9db45ccc70f98fdb47) +--- + src/network/networkd-network.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c +index 9ab4f23068..9f6de18538 100644 +--- a/src/network/networkd-network.c ++++ b/src/network/networkd-network.c +@@ -92,7 +92,7 @@ static int network_load_one(Manager *manager, const char *filename) { + network->dhcp_routes = true; + network->dhcp_sendhost = true; + +- r = config_parse(NULL, filename, file, "Match\0Network\0Address\0Route\0DHCPv4\0", config_item_perf_lookup, ++ r = config_parse(NULL, filename, file, "Match\0Network\0Address\0Route\0DHCP\0DHCPv4\0", config_item_perf_lookup, + (void*) network_network_gperf_lookup, false, false, network); + if (r < 0) { + log_warning("Could not parse config file %s: %s", filename, strerror(-r)); diff --git a/0012-machine-don-t-return-uninitialized-variable.patch b/0012-machine-don-t-return-uninitialized-variable.patch new file mode 100644 index 0000000..ea3e6e4 --- /dev/null +++ b/0012-machine-don-t-return-uninitialized-variable.patch @@ -0,0 +1,25 @@ +From 6e07a1c070376b7c2bcc8d57e8adbc8f6f78e8d5 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Sun, 6 Jul 2014 14:12:28 +0200 +Subject: [PATCH] machine: don't return uninitialized variable + +Repotred by Ronny Chevalier + +(cherry picked from commit f14aa1f1b2e4e99ee20393871b5f64f1378ed6c3) +--- + src/machine/machine.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/machine/machine.c b/src/machine/machine.c +index c0fa1b24b6..cf38e3fb94 100644 +--- a/src/machine/machine.c ++++ b/src/machine/machine.c +@@ -371,7 +371,7 @@ static int machine_stop_scope(Machine *m) { + free(m->scope_job); + m->scope_job = job; + +- return r; ++ return 0; + } + + int machine_stop(Machine *m) { diff --git a/0013-sysusers-fix-uninitialized-warning.patch b/0013-sysusers-fix-uninitialized-warning.patch new file mode 100644 index 0000000..909093f --- /dev/null +++ b/0013-sysusers-fix-uninitialized-warning.patch @@ -0,0 +1,23 @@ +From e41d164c532fa4345bc2dd1c5e1daaaec76b787c Mon Sep 17 00:00:00 2001 +From: Ronny Chevalier +Date: Sun, 6 Jul 2014 13:33:38 +0200 +Subject: [PATCH] sysusers: fix uninitialized warning + +(cherry picked from commit bce415edcae8e7af8327de8265d621f95fa5426f) +--- + src/sysusers/sysusers.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c +index 1209a5a8b4..c0af69300a 100644 +--- a/src/sysusers/sysusers.c ++++ b/src/sysusers/sysusers.c +@@ -1312,6 +1312,8 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { + + h = groups; + break; ++ default: ++ return -EBADMSG; + } + + i->type = action[0]; diff --git a/0014-vconsole-setup-run-setfont-before-loadkeys.patch b/0014-vconsole-setup-run-setfont-before-loadkeys.patch new file mode 100644 index 0000000..ea58eb2 --- /dev/null +++ b/0014-vconsole-setup-run-setfont-before-loadkeys.patch @@ -0,0 +1,92 @@ +From 20a575e8935cf5d2d078bbe3acf21fff56f2345c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 1 Jul 2014 22:20:11 -0400 +Subject: [PATCH] vconsole-setup: run setfont before loadkeys + +https://bugs.freedesktop.org/show_bug.cgi?id=80685 +(cherry picked from commit abee28c56d523e55751b0c007d0bf812cc285c00) +--- + src/vconsole/vconsole-setup.c | 48 +++++++++++++++++++++---------------------- + 1 file changed, 23 insertions(+), 25 deletions(-) + +diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c +index e0c4050611..25d15afd5c 100644 +--- a/src/vconsole/vconsole-setup.c ++++ b/src/vconsole/vconsole-setup.c +@@ -238,12 +238,10 @@ static void font_copy_to_all_vcs(int fd) { + + int main(int argc, char **argv) { + const char *vc; +- char *vc_keymap = NULL; +- char *vc_keymap_toggle = NULL; +- char *vc_font = NULL; +- char *vc_font_map = NULL; +- char *vc_font_unimap = NULL; +- int fd = -1; ++ _cleanup_free_ char ++ *vc_keymap = NULL, *vc_keymap_toggle = NULL, ++ *vc_font = NULL, *vc_font_map = NULL, *vc_font_unimap = NULL; ++ _cleanup_close_ int fd = -1; + bool utf8; + pid_t font_pid = 0, keymap_pid = 0; + bool font_copy = false; +@@ -265,12 +263,12 @@ int main(int argc, char **argv) { + fd = open_terminal(vc, O_RDWR|O_CLOEXEC); + if (fd < 0) { + log_error("Failed to open %s: %m", vc); +- goto finish; ++ return EXIT_FAILURE; + } + + if (!is_vconsole(fd)) { + log_error("Device %s is not a virtual console.", vc); +- goto finish; ++ return EXIT_FAILURE; + } + + utf8 = is_locale_utf8(); +@@ -305,27 +303,27 @@ int main(int argc, char **argv) { + else + disable_utf8(fd); + +- r = EXIT_FAILURE; +- if (keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid) >= 0 && +- font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid) >= 0) +- r = EXIT_SUCCESS; +- +-finish: +- if (keymap_pid > 0) +- wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid); ++ r = font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid); ++ if (r < 0) { ++ log_error("Failed to start " KBD_LOADKEYS ": %s", strerror(-r)); ++ return EXIT_FAILURE; ++ } + +- if (font_pid > 0) { ++ if (font_pid > 0) + wait_for_terminate_and_warn(KBD_SETFONT, font_pid); +- if (font_copy) +- font_copy_to_all_vcs(fd); ++ ++ r = keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid); ++ if (r < 0) { ++ log_error("Failed to start " KBD_SETFONT ": %s", strerror(-r)); ++ return EXIT_FAILURE; + } + +- free(vc_keymap); +- free(vc_font); +- free(vc_font_map); +- free(vc_font_unimap); ++ if (keymap_pid > 0) ++ wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid); + +- safe_close(fd); ++ /* Only copy the font when we started setfont successfully */ ++ if (font_copy && font_pid > 0) ++ font_copy_to_all_vcs(fd); + +- return r; ++ return EXIT_SUCCESS; + } diff --git a/0015-coredumpctl-show-a-useful-error-on-permission-proble.patch b/0015-coredumpctl-show-a-useful-error-on-permission-proble.patch new file mode 100644 index 0000000..9235cd3 --- /dev/null +++ b/0015-coredumpctl-show-a-useful-error-on-permission-proble.patch @@ -0,0 +1,33 @@ +From 34156047f4e34b0d3c621b0641ec3444f2b37f8d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 6 Jul 2014 18:35:46 -0400 +Subject: [PATCH] coredumpctl: show a useful error on permission problems + +(cherry picked from commit 31cda3d1759dee3e48c8ed4a949d99f041bdca1c) +--- + src/journal/coredumpctl.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/journal/coredumpctl.c b/src/journal/coredumpctl.c +index 2158d73771..ecde54744d 100644 +--- a/src/journal/coredumpctl.c ++++ b/src/journal/coredumpctl.c +@@ -595,7 +595,8 @@ static int save_core(sd_journal *j, int fd, char **path, bool *unlink_temp) { + retrieve(data, len, "COREDUMP_FILENAME", &filename); + + if (filename && access(filename, R_OK) < 0) { +- log_debug("File %s is not readable: %m", filename); ++ log_full(errno == ENOENT ? LOG_DEBUG : LOG_WARNING, ++ "File %s is not readable: %m", filename); + free(filename); + filename = NULL; + } +@@ -668,7 +669,7 @@ static int save_core(sd_journal *j, int fd, char **path, bool *unlink_temp) { + #endif + } else { + if (r == -ENOENT) +- log_error("Coredump neither in journal file nor stored externally on disk."); ++ log_error("Cannot retrieve coredump from journal nor disk."); + else + log_error("Failed to retrieve COREDUMP field: %s", strerror(-r)); + goto error; diff --git a/0016-networkd-netdev-add-missing-refs.patch b/0016-networkd-netdev-add-missing-refs.patch new file mode 100644 index 0000000..c282e2b --- /dev/null +++ b/0016-networkd-netdev-add-missing-refs.patch @@ -0,0 +1,68 @@ +From 65b8b293a6a8560fc1d6eecf7712f870d597965b Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Mon, 7 Jul 2014 14:18:26 +0200 +Subject: [PATCH] networkd: netdev - add missing refs + +Without this, the underlying device would get freed (and hence +fail). + +(cherry picked from commit e04468dec04a968c523ee09da7d2163a1d1a5a15) +--- + src/network/networkd-macvlan.c | 2 ++ + src/network/networkd-tunnel.c | 2 ++ + src/network/networkd-vlan.c | 2 ++ + src/network/networkd-vxlan.c | 2 ++ + 4 files changed, 8 insertions(+) + +diff --git a/src/network/networkd-macvlan.c b/src/network/networkd-macvlan.c +index 9227144531..7c234264ac 100644 +--- a/src/network/networkd-macvlan.c ++++ b/src/network/networkd-macvlan.c +@@ -150,6 +150,8 @@ int netdev_create_macvlan(NetDev *netdev, Link *link, sd_rtnl_message_handler_t + return r; + } + ++ link_ref(link); ++ + log_debug_netdev(netdev, "creating netdev"); + + netdev->state = NETDEV_STATE_CREATING; +diff --git a/src/network/networkd-tunnel.c b/src/network/networkd-tunnel.c +index 7341487795..5a244f61b0 100644 +--- a/src/network/networkd-tunnel.c ++++ b/src/network/networkd-tunnel.c +@@ -529,6 +529,8 @@ int netdev_create_tunnel(NetDev *netdev, Link *link, sd_rtnl_message_handler_t c + return r; + } + ++ link_ref(link); ++ + log_debug_netdev(netdev, "Creating tunnel netdev: %s", + netdev_kind_to_string(netdev->kind)); + +diff --git a/src/network/networkd-vlan.c b/src/network/networkd-vlan.c +index 1d812fdcaa..8727b9f103 100644 +--- a/src/network/networkd-vlan.c ++++ b/src/network/networkd-vlan.c +@@ -139,6 +139,8 @@ int netdev_create_vlan(NetDev *netdev, Link *link, sd_rtnl_message_handler_t cal + return r; + } + ++ link_ref(link); ++ + log_debug_netdev(netdev, "creating netdev"); + + netdev->state = NETDEV_STATE_CREATING; +diff --git a/src/network/networkd-vxlan.c b/src/network/networkd-vxlan.c +index 8832024ef1..160459450d 100644 +--- a/src/network/networkd-vxlan.c ++++ b/src/network/networkd-vxlan.c +@@ -154,6 +154,8 @@ int netdev_create_vxlan(NetDev *netdev, Link *link, sd_rtnl_message_handler_t ca + return r; + } + ++ link_ref(link); ++ + log_debug_netdev(netdev, "Creating vxlan netdev: %s", + netdev_kind_to_string(netdev->kind)); + diff --git a/0017-vconsole-setup-fix-inverted-error-messages.patch b/0017-vconsole-setup-fix-inverted-error-messages.patch new file mode 100644 index 0000000..206529f --- /dev/null +++ b/0017-vconsole-setup-fix-inverted-error-messages.patch @@ -0,0 +1,35 @@ +From 14c30a407a7599c96af2e9998c3038574005c368 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 7 Jul 2014 08:55:30 -0400 +Subject: [PATCH] vconsole-setup: fix inverted error messages + +Introduced in abee28c56d. + +Pointed-out-by: Werner Fink +(cherry picked from commit 3dde3f819732aaa66ab8e881305488adaea17641) +--- + src/vconsole/vconsole-setup.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c +index 25d15afd5c..645b1e6994 100644 +--- a/src/vconsole/vconsole-setup.c ++++ b/src/vconsole/vconsole-setup.c +@@ -305,7 +305,7 @@ int main(int argc, char **argv) { + + r = font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid); + if (r < 0) { +- log_error("Failed to start " KBD_LOADKEYS ": %s", strerror(-r)); ++ log_error("Failed to start " KBD_SETFONT ": %s", strerror(-r)); + return EXIT_FAILURE; + } + +@@ -314,7 +314,7 @@ int main(int argc, char **argv) { + + r = keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid); + if (r < 0) { +- log_error("Failed to start " KBD_SETFONT ": %s", strerror(-r)); ++ log_error("Failed to start " KBD_LOADKEYS ": %s", strerror(-r)); + return EXIT_FAILURE; + } + diff --git a/0018-udev-link_config-ignore-errors-due-to-missing-MAC-ad.patch b/0018-udev-link_config-ignore-errors-due-to-missing-MAC-ad.patch new file mode 100644 index 0000000..8d1e277 --- /dev/null +++ b/0018-udev-link_config-ignore-errors-due-to-missing-MAC-ad.patch @@ -0,0 +1,40 @@ +From 0afeabd2abb0f86c17f04558d84e39528d3eb9ee Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Mon, 7 Jul 2014 14:50:16 +0200 +Subject: [PATCH] udev: link_config - ignore errors due to missing MAC address + +Otherwis, we get misleading error messages on links with MACs. + +Reported by Leonid Isaev. + +(cherry picked from commit a669ea9860900d5cdebbc4cb9aaea72db7e28a02) +--- + src/udev/net/link-config.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c +index b8650a6c6c..5a45c53cc6 100644 +--- a/src/udev/net/link-config.c ++++ b/src/udev/net/link-config.c +@@ -383,7 +383,9 @@ int link_config_apply(link_config_ctx *ctx, link_config *config, struct udev_dev + case MACPOLICY_PERSISTENT: + if (mac_is_random(device)) { + r = get_mac(device, false, &generated_mac); +- if (r < 0) ++ if (r == -ENOENT) ++ break; ++ else if (r < 0) + return r; + mac = &generated_mac; + } +@@ -391,7 +393,9 @@ int link_config_apply(link_config_ctx *ctx, link_config *config, struct udev_dev + case MACPOLICY_RANDOM: + if (!mac_is_random(device)) { + r = get_mac(device, true, &generated_mac); +- if (r < 0) ++ if (r == -ENOENT) ++ break; ++ else if (r < 0) + return r; + mac = &generated_mac; + } diff --git a/0019-util-consider-0x7F-a-control-chracter-which-it-is-DE.patch b/0019-util-consider-0x7F-a-control-chracter-which-it-is-DE.patch new file mode 100644 index 0000000..4253b00 --- /dev/null +++ b/0019-util-consider-0x7F-a-control-chracter-which-it-is-DE.patch @@ -0,0 +1,53 @@ +From a71b7b7e52f312c7a9fc19154ac0d444e057e1d4 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 7 Jul 2014 11:47:10 +0200 +Subject: [PATCH] util: consider 0x7F a control chracter (which it is: DEL) + +Let's better be safe than sorry. + +(cherry picked from commit 3a8a916338d8446b938f3cf40f6aae0c611892e3) +--- + src/shared/util.c | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 3d875c72b3..d25ee6652f 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -1608,8 +1608,9 @@ int read_one_char(FILE *f, char *ret, usec_t t, bool *need_nl) { + return -ETIMEDOUT; + } + ++ errno = 0; + if (!fgets(line, sizeof(line), f)) +- return -EIO; ++ return errno ? -errno : -EIO; + + truncate_nl(line); + +@@ -5355,6 +5356,9 @@ bool string_is_safe(const char *p) { + if (*t > 0 && *t < ' ') + return false; + ++ if (*t == 127) ++ return false; ++ + if (strchr("\\\"\'", *t)) + return false; + } +@@ -5371,10 +5375,14 @@ bool string_has_cc(const char *p) { + + assert(p); + +- for (t = p; *t; t++) ++ for (t = p; *t; t++) { + if (*t > 0 && *t < ' ' && *t != '\t') + return true; + ++ if (*t == 127) ++ return true; ++ } ++ + return false; + } + diff --git a/0020-main-explain-our-etc-empty-check-a-bit-in-a-comment.patch b/0020-main-explain-our-etc-empty-check-a-bit-in-a-comment.patch new file mode 100644 index 0000000..470c9b7 --- /dev/null +++ b/0020-main-explain-our-etc-empty-check-a-bit-in-a-comment.patch @@ -0,0 +1,29 @@ +From a821499e679a2d76c96ea6fda76e7847ba57a565 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 7 Jul 2014 11:47:46 +0200 +Subject: [PATCH] main: explain our /etc empty check a bit in a comment + +(cherry picked from commit 3408ba015aee3a88c91962c028738be757779519) +--- + src/core/main.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/src/core/main.c b/src/core/main.c +index 1ca899998e..a732c6945a 100644 +--- a/src/core/main.c ++++ b/src/core/main.c +@@ -1543,6 +1543,14 @@ int main(int argc, char *argv[]) { + if (in_initrd()) + log_info("Running in initial RAM disk."); + ++ /* Let's check whether /etc is already populated. We ++ * don't actually really check for that, but use ++ * /etc/machine-id as flag file. This allows container ++ * managers and installers to provision a couple of ++ * files already. If the container manager wants to ++ * provision the machine ID itself it should pass ++ * $container_uuid to PID 1.*/ ++ + empty_etc = access("/etc/machine-id", F_OK) < 0; + if (empty_etc) + log_info("Running with unpopulated /etc."); diff --git a/0021-man-add-missing-archs-to-ConditionArchitecture-descr.patch b/0021-man-add-missing-archs-to-ConditionArchitecture-descr.patch new file mode 100644 index 0000000..84e01e0 --- /dev/null +++ b/0021-man-add-missing-archs-to-ConditionArchitecture-descr.patch @@ -0,0 +1,45 @@ +From 8606ef2e22777f167a528c41fc15371bfe934f45 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 7 Jul 2014 14:58:13 +0200 +Subject: [PATCH] man: add missing archs to ConditionArchitecture= description + +(cherry picked from commit f1e4d93f573087655ab1d0adb725102d5d2c1960) +--- + man/systemd.unit.xml | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml +index 960fb90dbd..be0873c344 100644 +--- a/man/systemd.unit.xml ++++ b/man/systemd.unit.xml +@@ -931,7 +931,9 @@ + x86, + x86-64, + ppc, ++ ppc-le, + ppc64, ++ ppc64-le, + ia64, + parisc, + parisc64, +@@ -940,7 +942,9 @@ + sparc, + sparc64, + mips, ++ mips-le, + mips64, ++ mips64-le, + alpha, + arm, + arm-be, +@@ -948,7 +952,9 @@ + arm64-be, + sh, + sh64, +- m86k to test ++ m86k, ++ tilegx, ++ cris to test + against a specific architecture. The + architecture is determined from the + information returned by diff --git a/0022-man-chroot-jails-are-no-longer-detected-by-Condition.patch b/0022-man-chroot-jails-are-no-longer-detected-by-Condition.patch new file mode 100644 index 0000000..1055098 --- /dev/null +++ b/0022-man-chroot-jails-are-no-longer-detected-by-Condition.patch @@ -0,0 +1,23 @@ +From 3fe1ea74a50b7815816157da93c60379e8328821 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 7 Jul 2014 14:58:36 +0200 +Subject: [PATCH] man: chroot jails are no longer detected by + ConditionVirtualization= + +(cherry picked from commit ac8ddf8c964f813464ef32cad1fcb7b61b692a01) +--- + man/systemd.unit.xml | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml +index be0873c344..cd3279c192 100644 +--- a/man/systemd.unit.xml ++++ b/man/systemd.unit.xml +@@ -990,7 +990,6 @@ + oracle, + xen, + bochs, +- chroot, + uml, + openvz, + lxc, diff --git a/0023-architecture-add-string-table-entries-for-mips-le-ar.patch b/0023-architecture-add-string-table-entries-for-mips-le-ar.patch new file mode 100644 index 0000000..1c69cae --- /dev/null +++ b/0023-architecture-add-string-table-entries-for-mips-le-ar.patch @@ -0,0 +1,25 @@ +From 384bcccd9d6557a7543a21a44fce57ca06efcfdd Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 7 Jul 2014 14:59:06 +0200 +Subject: [PATCH] architecture: add string table entries for mips-le archs + which were missing + +(cherry picked from commit 037c26d0aeb750ca9c8d605884ea1db7baecfea8) +--- + src/shared/architecture.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/shared/architecture.c b/src/shared/architecture.c +index 6cdca4e7e5..dc45f3589d 100644 +--- a/src/shared/architecture.c ++++ b/src/shared/architecture.c +@@ -153,7 +153,9 @@ static const char *const architecture_table[_ARCHITECTURE_MAX] = { + [ARCHITECTURE_SPARC] = "sparc", + [ARCHITECTURE_SPARC64] = "sparc64", + [ARCHITECTURE_MIPS] = "mips", ++ [ARCHITECTURE_MIPS_LE] = "mips-le", + [ARCHITECTURE_MIPS64] = "mips64", ++ [ARCHITECTURE_MIPS64_LE] = "mips64-le", + [ARCHITECTURE_ALPHA] = "alpha", + [ARCHITECTURE_ARM] = "arm", + [ARCHITECTURE_ARM_BE] = "arm-be", diff --git a/0024-service-flush-status-text-and-errno-values-each-time.patch b/0024-service-flush-status-text-and-errno-values-each-time.patch new file mode 100644 index 0000000..c695719 --- /dev/null +++ b/0024-service-flush-status-text-and-errno-values-each-time.patch @@ -0,0 +1,27 @@ +From 853896f09d35f8c2db3bf25376d1c3ab240287ed Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 7 Jul 2014 17:33:46 +0200 +Subject: [PATCH] service: flush status text and errno values each time a + service is started + +We shouldn't show status texts from previous service starts + +(cherry picked from commit 8cfdb077b8e3da1c47fc1d735d051f21f33144c1) +--- + src/core/service.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/core/service.c b/src/core/service.c +index 0b19767d9e..2d8aa01445 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -1699,6 +1699,9 @@ static int service_start(Unit *u) { + s->main_pid_alien = false; + s->forbid_restart = false; + ++ free(s->status_text); ++ s->status_text = NULL; ++ + service_enter_start_pre(s); + return 0; + } diff --git a/0025-base-filesystem.c-terminate-string-array-elements-wi.patch b/0025-base-filesystem.c-terminate-string-array-elements-wi.patch new file mode 100644 index 0000000..3e90355 --- /dev/null +++ b/0025-base-filesystem.c-terminate-string-array-elements-wi.patch @@ -0,0 +1,36 @@ +From 313b57468fae9e3d4b762326c46e82afe6ec1c36 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Mon, 7 Jul 2014 17:45:53 +0200 +Subject: [PATCH] base-filesystem.c: terminate string array elements with \0 + +NULSTR_FOREACH() looks for a terminating zero and the element also needs +one. + +(cherry picked from commit 30d7c9c472bd7be1b6a09d3bd5afd939988de990) +--- + src/shared/base-filesystem.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +diff --git a/src/shared/base-filesystem.c b/src/shared/base-filesystem.c +index daaeaca515..addd26ca39 100644 +--- a/src/shared/base-filesystem.c ++++ b/src/shared/base-filesystem.c +@@ -42,12 +42,13 @@ typedef struct BaseFilesystem { + } BaseFilesystem; + + static const BaseFilesystem table[] = { +- { "bin", 0, "usr/bin", NULL }, +- { "lib", 0, "usr/lib", NULL }, +- { "root", 0755, NULL, NULL }, +- { "sbin", 0, "usr/sbin", NULL }, ++ { "bin", 0, "usr/bin\0", NULL }, ++ { "lib", 0, "usr/lib\0", NULL }, ++ { "root", 0755, NULL, NULL }, ++ { "sbin", 0, "usr/sbin\0", NULL }, + #if defined(__i386__) || defined(__x86_64__) +- { "lib64", 0, "usr/lib/x86_64-linux-gnu\0usr/lib64", "ld-linux-x86-64.so.2" }, ++ { "lib64", 0, "usr/lib/x86_64-linux-gnu\0" ++ "usr/lib64\0", "ld-linux-x86-64.so.2" }, + #endif + }; + diff --git a/0026-man-drop-references-to-the-priviliged-command-line-o.patch b/0026-man-drop-references-to-the-priviliged-command-line-o.patch new file mode 100644 index 0000000..7db254d --- /dev/null +++ b/0026-man-drop-references-to-the-priviliged-command-line-o.patch @@ -0,0 +1,50 @@ +From 13191f413a4dbff98094fe407cb592ae9723f956 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 7 Jul 2014 18:45:07 +0200 +Subject: [PATCH] man: drop references to the --priviliged command line option + which has been removed a while back + +(cherry picked from commit ed3e4a3fd96891b5e7015723978e78cd21efd4fe) +--- + man/hostnamectl.xml | 8 -------- + man/localectl.xml | 8 -------- + 2 files changed, 16 deletions(-) + +diff --git a/man/hostnamectl.xml b/man/hostnamectl.xml +index 71973fde91..4e456eb8f9 100644 +--- a/man/hostnamectl.xml ++++ b/man/hostnamectl.xml +@@ -102,14 +102,6 @@ + + + +- +- +- +- Acquire privileges via PolicyKit +- before executing the operation. +- +- +- + + + +diff --git a/man/localectl.xml b/man/localectl.xml +index c2e79a2d71..9c32c794aa 100644 +--- a/man/localectl.xml ++++ b/man/localectl.xml +@@ -90,14 +90,6 @@ + + + +- +- +- +- Acquire privileges via PolicyKit +- before executing the operation. +- +- +- + + + If diff --git a/0027-fstab-generator-add-comma-when-removed-option-is-in-.patch b/0027-fstab-generator-add-comma-when-removed-option-is-in-.patch new file mode 100644 index 0000000..c3ceaa7 --- /dev/null +++ b/0027-fstab-generator-add-comma-when-removed-option-is-in-.patch @@ -0,0 +1,27 @@ +From 06d46a47eb13907a597a0e67cd8142321a81494e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 7 Jul 2014 16:10:38 -0400 +Subject: [PATCH] fstab-generator: add comma when removed option is in the + middle + +xxx,x-systemd.default-timeout=y,zzz was filtered to xxxzzz, +but should be xxx,zzz, of course. + +(cherry picked from commit 36a259d22c450fbf3f696df0161db50275a98667) +--- + src/shared/generator.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/generator.c b/src/shared/generator.c +index 5d5b6a0a61..2f9e5954c2 100644 +--- a/src/shared/generator.c ++++ b/src/shared/generator.c +@@ -125,7 +125,7 @@ int generator_write_timeouts(const char *dir, const char *what, const char *wher + char *prefix, *postfix; + + prefix = strndupa(opts, start - opts - (start != opts)); +- postfix = timeout + len + (timeout[len] != '\0'); ++ postfix = timeout + len + (start == opts && timeout[len] != '\0'); + *filtered = strjoin(prefix, *postfix ? postfix : NULL, NULL); + if (!*filtered) + return log_oom(); diff --git a/0028-dropin-add-format-attribute-and-fix-a-wrong-caller.patch b/0028-dropin-add-format-attribute-and-fix-a-wrong-caller.patch new file mode 100644 index 0000000..734825a --- /dev/null +++ b/0028-dropin-add-format-attribute-and-fix-a-wrong-caller.patch @@ -0,0 +1,43 @@ +From 5cec192e0c86a24bad9c3b24eca7d655470382df Mon Sep 17 00:00:00 2001 +From: Thomas Hindoe Paaboel Andersen +Date: Mon, 7 Jul 2014 21:40:00 +0200 +Subject: [PATCH] dropin: add format attribute and fix a wrong caller + +(cherry picked from commit f5a4b0d3534bb13ef734a857647ab04be236c6f3) +--- + src/shared/dropin.h | 4 +++- + src/shared/generator.c | 2 +- + 2 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/shared/dropin.h b/src/shared/dropin.h +index 27a2b2953f..9c9742d0e4 100644 +--- a/src/shared/dropin.h ++++ b/src/shared/dropin.h +@@ -21,6 +21,8 @@ + along with systemd; If not, see . + ***/ + ++#include "macro.h" ++ + int drop_in_file(const char *dir, const char *unit, unsigned level, + const char *name, char **_p, char **_q); + +@@ -28,4 +30,4 @@ int write_drop_in(const char *dir, const char *unit, unsigned level, + const char *name, const char *data); + + int write_drop_in_format(const char *dir, const char *unit, unsigned level, +- const char *name, const char *format, ...); ++ const char *name, const char *format, ...) _printf_(5, 6); +diff --git a/src/shared/generator.c b/src/shared/generator.c +index 2f9e5954c2..5d4cb5d54f 100644 +--- a/src/shared/generator.c ++++ b/src/shared/generator.c +@@ -148,7 +148,7 @@ int generator_write_timeouts(const char *dir, const char *what, const char *wher + + return write_drop_in_format(dir, unit, 50, "device-timeout", + "# Automatically generated by %s\n\n" +- "[Unit]\nJobTimeoutSec=%u", ++ "[Unit]\nJobTimeoutSec=%lu", + program_invocation_short_name, + u / USEC_PER_SEC); + } diff --git a/0029-add-new-systemd-escape-tool.patch b/0029-add-new-systemd-escape-tool.patch new file mode 100644 index 0000000..89da584 --- /dev/null +++ b/0029-add-new-systemd-escape-tool.patch @@ -0,0 +1,92 @@ +From af50ff78b93b683687464e45dee14033f494fcbe Mon Sep 17 00:00:00 2001 +From: Michael Biebl +Date: Wed, 4 Jun 2014 01:57:11 +0200 +Subject: [PATCH] add new systemd-escape tool + +(cherry picked from commit b1a5a9989ada9b3738d71605f051ff393d41f2ff) +--- + Makefile.am | 10 +++++++++- + src/escape/escape.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 55 insertions(+), 1 deletion(-) + create mode 100644 src/escape/escape.c + +diff --git a/Makefile.am b/Makefile.am +index e238cdeebf..c856d822de 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -347,7 +347,8 @@ bin_PROGRAMS = \ + systemd-delta \ + systemd-analyze \ + systemd-run \ +- systemd-path ++ systemd-path \ ++ systemd-escape + + dist_bin_SCRIPTS = \ + src/kernel-install/kernel-install +@@ -2079,6 +2080,13 @@ systemd_cgroups_agent_LDADD = \ + libsystemd-shared.la + + # ------------------------------------------------------------------------------ ++systemd_escape_SOURCES = \ ++ src/escape/escape.c ++ ++systemd_escape_LDADD = \ ++ libsystemd-shared.la ++ ++# ----------------------------------------------------------------------------- + systemctl_SOURCES = \ + src/systemctl/systemctl.c + +diff --git a/src/escape/escape.c b/src/escape/escape.c +new file mode 100644 +index 0000000000..0a59a05e28 +--- /dev/null ++++ b/src/escape/escape.c +@@ -0,0 +1,46 @@ ++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ ++ ++/*** ++ This file is part of systemd. ++ ++ Copyright 2014 Michael Biebl ++ ++ systemd is free software; you can redistribute it and/or modify it ++ under the terms of the GNU Lesser General Public License as published by ++ the Free Software Foundation; either version 2.1 of the License, or ++ (at your option) any later version. ++ ++ systemd is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with systemd; If not, see . ++***/ ++ ++#include ++#include ++ ++#include "log.h" ++#include "unit-name.h" ++ ++int main(int argc, char *argv[]) { ++ char *escaped_name = NULL; ++ ++ if (argc != 2) { ++ log_error("This program requires on argument."); ++ return EXIT_FAILURE; ++ } ++ ++ escaped_name = unit_name_escape(argv[1]); ++ ++ if (!escaped_name) { ++ log_error("Failed to escape name."); ++ return EXIT_FAILURE; ++ } ++ ++ printf("%s", escaped_name); ++ ++ return EXIT_SUCCESS; ++} diff --git a/0030-escape-beef-up-new-systemd-escape-tool.patch b/0030-escape-beef-up-new-systemd-escape-tool.patch new file mode 100644 index 0000000..e50b64b --- /dev/null +++ b/0030-escape-beef-up-new-systemd-escape-tool.patch @@ -0,0 +1,274 @@ +From ee228789816679b6fff19c7c2f637eb0a1a3fcc4 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 7 Jul 2014 22:23:00 +0200 +Subject: [PATCH] escape: beef up new systemd-escape tool + +Add various options for making it easy unescape, or mangle, or format as +template instance or append a suffix. + +(cherry picked from commit a1948c7bfeb87b54bc7715a44490c01593ee6e23) + +Conflicts: + .gitignore +--- + .gitignore | 1 + + src/escape/Makefile | 1 + + src/escape/escape.c | 215 +++++++++++++++++++++++++++++++++++++++++++++++++--- + 3 files changed, 206 insertions(+), 11 deletions(-) + create mode 120000 src/escape/Makefile + +diff --git a/.gitignore b/.gitignore +index 9523ea027e..e08aa52aee 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -64,6 +64,7 @@ + /systemd-delta + /systemd-detect-virt + /systemd-efi-boot-generator ++/systemd-escape + /systemd-fsck + /systemd-fstab-generator + /systemd-getty-generator +diff --git a/src/escape/Makefile b/src/escape/Makefile +new file mode 120000 +index 0000000000..d0b0e8e008 +--- /dev/null ++++ b/src/escape/Makefile +@@ -0,0 +1 @@ ++../Makefile +\ No newline at end of file +diff --git a/src/escape/escape.c b/src/escape/escape.c +index 0a59a05e28..ae0c183eca 100644 +--- a/src/escape/escape.c ++++ b/src/escape/escape.c +@@ -21,26 +21,219 @@ + + #include + #include ++#include + + #include "log.h" + #include "unit-name.h" ++#include "build.h" ++#include "strv.h" + +-int main(int argc, char *argv[]) { +- char *escaped_name = NULL; ++static enum { ++ ACTION_ESCAPE, ++ ACTION_UNESCAPE, ++ ACTION_MANGLE ++} arg_action = ACTION_ESCAPE; ++static const char *arg_suffix = NULL; ++static const char *arg_template = NULL; ++static bool arg_path = false; ++ ++static int help(void) { ++ ++ printf("%s [OPTIONS...] [NAME...]\n\n" ++ "Show system and user paths.\n\n" ++ " -h --help Show this help\n" ++ " --version Show package version\n" ++ " --suffix=SUFFIX Unit suffix to append to escaped strings\n" ++ " --template=TEMPLATE Insert strings as instance into template\n" ++ " -u --unescape Unescape strings\n" ++ " -m --mangle Mangle strings\n" ++ " -p --path When escaping/unescaping assume the string is a path\n", ++ program_invocation_short_name); ++ ++ return 0; ++} ++ ++static int parse_argv(int argc, char *argv[]) { ++ ++ enum { ++ ARG_VERSION = 0x100, ++ ARG_SUFFIX, ++ ARG_TEMPLATE ++ }; ++ ++ static const struct option options[] = { ++ { "help", no_argument, NULL, 'h' }, ++ { "version", no_argument, NULL, ARG_VERSION }, ++ { "suffix", required_argument, NULL, ARG_SUFFIX }, ++ { "template", required_argument, NULL, ARG_TEMPLATE }, ++ { "unescape", no_argument, NULL, 'u' }, ++ { "mangle", no_argument, NULL, 'm' }, ++ { "path", no_argument, NULL, 'p' }, ++ {} ++ }; ++ ++ int c; ++ ++ assert(argc >= 0); ++ assert(argv); ++ ++ while ((c = getopt_long(argc, argv, "hump", options, NULL)) >= 0) { ++ ++ switch (c) { ++ ++ case 'h': ++ return help(); ++ ++ case ARG_VERSION: ++ puts(PACKAGE_STRING); ++ puts(SYSTEMD_FEATURES); ++ return 0; ++ ++ case ARG_SUFFIX: ++ ++ if (unit_type_from_string(optarg) < 0) { ++ log_error("Invalid unit suffix type %s.", optarg); ++ return -EINVAL; ++ } ++ ++ arg_suffix = optarg; ++ break; ++ ++ case ARG_TEMPLATE: ++ ++ if (!unit_name_is_valid(optarg, true) || !unit_name_is_template(optarg)) { ++ log_error("Template name %s is not valid.", optarg); ++ return -EINVAL; ++ } ++ ++ arg_template = optarg; ++ break; ++ ++ case 'u': ++ arg_action = ACTION_UNESCAPE; ++ break; ++ ++ case 'm': ++ arg_action = ACTION_MANGLE; ++ break; ++ ++ case 'p': ++ arg_path = true; ++ break; ++ ++ case '?': ++ return -EINVAL; ++ ++ default: ++ assert_not_reached("Unhandled option"); ++ } ++ } + +- if (argc != 2) { +- log_error("This program requires on argument."); +- return EXIT_FAILURE; ++ if (optind >= argc) { ++ log_error("Not enough arguments."); ++ return -EINVAL; + } + +- escaped_name = unit_name_escape(argv[1]); ++ if (arg_template && arg_suffix) { ++ log_error("--suffix= and --template= may not be combined."); ++ return -EINVAL; ++ } ++ ++ if ((arg_template || arg_suffix) && arg_action != ACTION_ESCAPE) { ++ log_error("--suffix= and --template= are not compatible with --unescape or --mangle."); ++ return -EINVAL; ++ } ++ ++ if (arg_path && !IN_SET(arg_action, ACTION_ESCAPE, ACTION_UNESCAPE)) { ++ log_error("--path may not be combined with --mangle."); ++ return -EINVAL; ++ } ++ ++ return 1; ++} ++ ++int main(int argc, char *argv[]) { ++ char **i; ++ int r; ++ ++ log_parse_environment(); ++ log_open(); ++ ++ r = parse_argv(argc, argv); ++ if (r <= 0) ++ goto finish; ++ ++ STRV_FOREACH(i, argv + optind) { ++ _cleanup_free_ char *e = NULL; ++ ++ switch (arg_action) { ++ ++ case ACTION_ESCAPE: ++ if (arg_path) ++ e = unit_name_path_escape(*i); ++ else ++ e = unit_name_escape(*i); ++ ++ if (!e) { ++ r = log_oom(); ++ goto finish; ++ } ++ ++ if (arg_template) { ++ char *x; ++ ++ x = unit_name_replace_instance(arg_template, e); ++ if (!x) { ++ r = log_oom(); ++ goto finish; ++ } ++ ++ free(e); ++ e = x; ++ } else if (arg_suffix) { ++ char *x; ++ ++ x = strjoin(e, ".", arg_suffix, NULL); ++ if (!x) { ++ r = log_oom(); ++ goto finish; ++ } ++ ++ free(e); ++ e = x; ++ } ++ ++ break; ++ ++ case ACTION_UNESCAPE: ++ if (arg_path) ++ e = unit_name_path_unescape(*i); ++ else ++ e = unit_name_unescape(*i); ++ ++ if (!e) { ++ r = log_oom(); ++ goto finish; ++ } ++ break; ++ ++ case ACTION_MANGLE: ++ e = unit_name_mangle(*i, MANGLE_NOGLOB); ++ if (!e) { ++ r = log_oom(); ++ goto finish; ++ } ++ break; ++ } ++ ++ if (i != argv+optind) ++ fputc(' ', stdout); + +- if (!escaped_name) { +- log_error("Failed to escape name."); +- return EXIT_FAILURE; ++ fputs(e, stdout); + } + +- printf("%s", escaped_name); ++ fputc('\n', stdout); + +- return EXIT_SUCCESS; ++finish: ++ return r ? EXIT_FAILURE : EXIT_SUCCESS; + } diff --git a/0031-man-document-systemd-escape-1.patch b/0031-man-document-systemd-escape-1.patch new file mode 100644 index 0000000..da4c358 --- /dev/null +++ b/0031-man-document-systemd-escape-1.patch @@ -0,0 +1,234 @@ +From 9045c9cedb155255e4dd55b988a39093364efbac Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 7 Jul 2014 22:48:25 +0200 +Subject: [PATCH] man: document systemd-escape(1) + +(cherry picked from commit 9869e75929acd9377aa460074334d8523cf8e822) + +Conflicts: + Makefile-man.am +--- + Makefile-man.am | 2 + + man/systemd-escape.xml | 193 +++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 195 insertions(+) + create mode 100644 man/systemd-escape.xml + +diff --git a/Makefile-man.am b/Makefile-man.am +index 5c289dda2a..4238c21710 100644 +--- a/Makefile-man.am ++++ b/Makefile-man.am +@@ -63,6 +63,7 @@ MANPAGES += \ + man/systemd-delta.1 \ + man/systemd-detect-virt.1 \ + man/systemd-efi-boot-generator.8 \ ++ man/systemd-escape.1 \ + man/systemd-fsck@.service.8 \ + man/systemd-fstab-generator.8 \ + man/systemd-getty-generator.8 \ +@@ -1600,6 +1601,7 @@ EXTRA_DIST += \ + man/systemd-delta.xml \ + man/systemd-detect-virt.xml \ + man/systemd-efi-boot-generator.xml \ ++ man/systemd-escape.xml \ + man/systemd-fsck@.service.xml \ + man/systemd-fstab-generator.xml \ + man/systemd-getty-generator.xml \ +diff --git a/man/systemd-escape.xml b/man/systemd-escape.xml +new file mode 100644 +index 0000000000..b2a4a9ce8c +--- /dev/null ++++ b/man/systemd-escape.xml +@@ -0,0 +1,193 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ systemd-escape ++ systemd ++ ++ ++ ++ Developer ++ Lennart ++ Poettering ++ lennart@poettering.net ++ ++ ++ ++ ++ ++ systemd-escape ++ 1 ++ ++ ++ ++ systemd-escape ++ Escape strings for usage in system unit names ++ ++ ++ ++ ++ systemd-escape OPTIONS STRING ++ ++ ++ ++ ++ Description ++ ++ systemd-escape may be used to ++ escape strings for inclusion in systemd unit ++ names. The command may be used to escape and to undo ++ escaping of strings. ++ ++ The command takes any number of strings on the ++ command line, and will process them individually, one ++ after the other. It will output them separated by ++ spaces to stdout. ++ ++ By default this command will escape the strings ++ passed, unless is passed ++ which results in the inverse operation being ++ applied. If a special mode ++ of escaping is applied instead, which assumes a string ++ to be already escaped but will escape everything that ++ appears obviously non-escaped. ++ ++ ++ ++ Options ++ ++ The following options are understood: ++ ++ ++ ++ ++ ++ Appends the specified ++ unit type suffix to the escaped ++ string. Takes one of the unit types ++ supported by systemd, such as ++ .service or ++ .mount. May not be ++ used in conjunction with ++ , ++ or ++ . ++ ++ ++ ++ ++ ++ Inserts the escaped ++ strings in a unit name template. Takes ++ a unit name template such as ++ foobar@.service ++ May not be used in conjunction with ++ , ++ or ++ . ++ ++ ++ ++ ++ ++ ++ When escaping or ++ unescaping a string, assume it refers ++ to a file system path. This enables ++ special processing of the initial ++ / of the ++ path. ++ ++ ++ ++ ++ ++ Instead of escaping ++ the specified strings, undo the ++ escaping, reversing the operation. May ++ not be used in conjunction with ++ , ++ or ++ . ++ ++ ++ ++ ++ ++ Like ++ , but only ++ escape characters that are obviously ++ not escaped yet, and possibly ++ automatically append an appropriate ++ unit type suffix to the string. May ++ not be used in conjunction with ++ , ++ or ++ . ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Examples ++ ++ Escape a single string: ++ $ systemd-escape 'Hallöchen, Meister' ++Hall\xc3\xb6chen\x2c\x20Meister ++ ++ To undo escaping on a single string: ++ $ systemd-escape -u 'Hall\xc3\xb6chen\x2c\x20Meister' ++Hallöchen, Meister ++ ++ To generate the mount unit for a path: ++ $ systemd-escape -p --suffix=mount "/tmp//waldi/foobar/" ++tmp-waldi-foobar.mount ++ ++ To generate instance names of three strings ++ $ systemd-escape --template=systemd-nspawn@.service 'My Container 1' 'containerb' 'container/III' ++systemd-nspawn@My\x20Container\x201.service systemd-nspawn@containerb.service systemd-nspawn@container-III.service ++ ++ ++ ++ Exit status ++ ++ On success, 0 is returned, a non-zero failure ++ code otherwise. ++ ++ ++ ++ See Also ++ ++ systemd1, ++ systemctl1 ++ ++ ++ ++ diff --git a/0032-shared-fix-format-string-for-usec_t-type.patch b/0032-shared-fix-format-string-for-usec_t-type.patch new file mode 100644 index 0000000..4d95808 --- /dev/null +++ b/0032-shared-fix-format-string-for-usec_t-type.patch @@ -0,0 +1,23 @@ +From 539fc6acb23fb2928a2443d1e27db95d7084d41a Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 7 Jul 2014 22:49:59 +0200 +Subject: [PATCH] shared: fix format string for usec_t type + +(cherry picked from commit de48d5ab62e452b596d6f2762422d0ab32c4d313) +--- + src/shared/generator.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/generator.c b/src/shared/generator.c +index 5d4cb5d54f..414470be1c 100644 +--- a/src/shared/generator.c ++++ b/src/shared/generator.c +@@ -148,7 +148,7 @@ int generator_write_timeouts(const char *dir, const char *what, const char *wher + + return write_drop_in_format(dir, unit, 50, "device-timeout", + "# Automatically generated by %s\n\n" +- "[Unit]\nJobTimeoutSec=%lu", ++ "[Unit]\nJobTimeoutSec=" USEC_FMT, + program_invocation_short_name, + u / USEC_PER_SEC); + } diff --git a/0033-logind-allow-switching-to-unused-VTs-via-SwitchTo.patch b/0033-logind-allow-switching-to-unused-VTs-via-SwitchTo.patch new file mode 100644 index 0000000..f78bf4f --- /dev/null +++ b/0033-logind-allow-switching-to-unused-VTs-via-SwitchTo.patch @@ -0,0 +1,35 @@ +From a1a46db86071388fcfeb35d06147f673c6c58c6d Mon Sep 17 00:00:00 2001 +From: David Herrmann +Date: Tue, 8 Jul 2014 12:56:55 +0200 +Subject: [PATCH] logind: allow switching to unused VTs via SwitchTo() + +If compositors use the new SwitchTo() logic to map F1-F12, we should allow +them to switch to unregistered VTs, too. Otherwise, the auto-spawn logic +of gettys won't trigger. + +Reported-by: Jasper St. Pierre +Signed-off-by: David Herrmann +(cherry picked from commit 154034270c4643b7cfe61c0be1676d78bb1b7b07) +--- + src/login/logind-seat.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/src/login/logind-seat.c b/src/login/logind-seat.c +index 3114de84de..9992195151 100644 +--- a/src/login/logind-seat.c ++++ b/src/login/logind-seat.c +@@ -275,8 +275,13 @@ int seat_switch_to(Seat *s, unsigned int num) { + if (!num) + return -EINVAL; + +- if (num >= s->position_count || !s->positions[num]) ++ if (num >= s->position_count || !s->positions[num]) { ++ /* allow switching to unused VTs to trigger auto-activate */ ++ if (seat_has_vts(s) && num < 64) ++ return chvt(num); ++ + return -EINVAL; ++ } + + return session_activate(s->positions[num]); + } diff --git a/0034-systemctl-fix-visual-alignment-for-lines-prefixed-wi.patch b/0034-systemctl-fix-visual-alignment-for-lines-prefixed-wi.patch new file mode 100644 index 0000000..e90e53b --- /dev/null +++ b/0034-systemctl-fix-visual-alignment-for-lines-prefixed-wi.patch @@ -0,0 +1,24 @@ +From bcb94736047823194fcfc98e23c4ed4e392eb3d3 Mon Sep 17 00:00:00 2001 +From: Michal Schmidt +Date: Tue, 8 Jul 2014 15:17:36 +0200 +Subject: [PATCH] systemctl: fix visual alignment for lines prefixed with color + dots + +(cherry picked from commit b7bbdabeb4a5b66fdbcdfed0d097109cfb39c43e) +--- + src/systemctl/systemctl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c +index 03720f411d..8086e1e296 100644 +--- a/src/systemctl/systemctl.c ++++ b/src/systemctl/systemctl.c +@@ -456,7 +456,7 @@ static int output_units_list(const UnitInfo *unit_infos, unsigned c) { + } + + if (circle_len > 0) +- printf("%s%s%s", on_circle, circle ? draw_special_char(DRAW_BLACK_CIRCLE) : " ", off_circle); ++ printf("%s%s%s ", on_circle, circle ? draw_special_char(DRAW_BLACK_CIRCLE) : " ", off_circle); + + printf("%s%-*s%s %s%-*s%s %s%-*s %-*s%s %-*s", + on_active, id_len, id, off_active, diff --git a/0035-accelerometer-Don-t-wait-for-new-data-from-the-senso.patch b/0035-accelerometer-Don-t-wait-for-new-data-from-the-senso.patch new file mode 100644 index 0000000..5d02ff3 --- /dev/null +++ b/0035-accelerometer-Don-t-wait-for-new-data-from-the-senso.patch @@ -0,0 +1,74 @@ +From e27bfc22bba932950a398b32bf57be6f825438ee Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Tue, 8 Jul 2014 18:29:06 +0200 +Subject: [PATCH] accelerometer: Don't wait for new data from the sensor + +Instead of waiting for new data from the sensor, which might be +a long time coming, depending on the sensor device, ask the kernel +for the last state for that particular input device. + +(cherry picked from commit a545c6e1aa31b4d7e80c9d3609d9fc4fc9921498) +--- + src/udev/accelerometer/accelerometer.c | 33 ++++++--------------------------- + 1 file changed, 6 insertions(+), 27 deletions(-) + +diff --git a/src/udev/accelerometer/accelerometer.c b/src/udev/accelerometer/accelerometer.c +index 925d38de1f..32adf27777 100644 +--- a/src/udev/accelerometer/accelerometer.c ++++ b/src/udev/accelerometer/accelerometer.c +@@ -180,7 +180,7 @@ get_prev_orientation(struct udev_device *dev) + return string_to_orientation(value); + } + +-#define SET_AXIS(axis, code_) if (ev[i].code == code_) { if (got_##axis == 0) { axis = ev[i].value; got_##axis = true; } } ++#define READ_AXIS(axis, var) { memzero(&abs_info, sizeof(abs_info)); r = ioctl(fd, EVIOCGABS(axis), &abs_info); if (r < 0) return; var = abs_info.value; } + + /* accelerometers */ + static void test_orientation(struct udev *udev, +@@ -189,10 +189,9 @@ static void test_orientation(struct udev *udev, + { + OrientationUp old, new; + _cleanup_close_ int fd = -1; +- struct input_event ev[64]; +- bool got_syn = false; +- bool got_x = false, got_y = false, got_z = false; ++ struct input_absinfo abs_info; + int x = 0, y = 0, z = 0; ++ int r; + char text[64]; + + old = get_prev_orientation(dev); +@@ -201,30 +200,10 @@ static void test_orientation(struct udev *udev, + if (fd < 0) + return; + +- while (1) { +- int i, r; +- +- r = read(fd, ev, sizeof(struct input_event) * 64); +- +- if (r < (int) sizeof(struct input_event)) +- return; +- +- for (i = 0; i < r / (int) sizeof(struct input_event); i++) { +- if (got_syn) { +- if (ev[i].type == EV_ABS) { +- SET_AXIS(x, ABS_X); +- SET_AXIS(y, ABS_Y); +- SET_AXIS(z, ABS_Z); +- } +- } +- if (ev[i].type == EV_SYN && ev[i].code == SYN_REPORT) +- got_syn = true; +- if (got_x && got_y && got_z) +- goto read_dev; +- } +- } ++ READ_AXIS(ABS_X, x); ++ READ_AXIS(ABS_Y, y); ++ READ_AXIS(ABS_Z, z); + +-read_dev: + new = orientation_calc(old, x, y, z); + snprintf(text, sizeof(text), + "ID_INPUT_ACCELEROMETER_ORIENTATION=%s", orientation_to_string(new)); diff --git a/0036-escape-move-to-rootbindir.patch b/0036-escape-move-to-rootbindir.patch new file mode 100644 index 0000000..b950053 --- /dev/null +++ b/0036-escape-move-to-rootbindir.patch @@ -0,0 +1,38 @@ +From f6431973ef3d681c1c0c3e6850c7906a22ee7ec7 Mon Sep 17 00:00:00 2001 +From: Michael Biebl +Date: Tue, 8 Jul 2014 21:06:07 +0200 +Subject: [PATCH] escape: move to rootbindir + +The systemd-escape utility might be used during early boot (e.g. when +being triggered from udev rules), so move it to rootbindir to support +systems with a split /usr setup. + +(cherry picked from commit 2945a452b084879c6885efe51aefea00c179aa5f) +--- + Makefile.am | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index c856d822de..7210ab70be 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -337,7 +337,8 @@ rootbin_PROGRAMS = \ + systemd-notify \ + systemd-ask-password \ + systemd-tty-ask-password-agent \ +- systemd-machine-id-setup ++ systemd-machine-id-setup \ ++ systemd-escape + + bin_PROGRAMS = \ + systemd-cgls \ +@@ -347,8 +348,7 @@ bin_PROGRAMS = \ + systemd-delta \ + systemd-analyze \ + systemd-run \ +- systemd-path \ +- systemd-escape ++ systemd-path + + dist_bin_SCRIPTS = \ + src/kernel-install/kernel-install diff --git a/0037-journal-compress-improve-xz-compression-performance.patch b/0037-journal-compress-improve-xz-compression-performance.patch new file mode 100644 index 0000000..976e175 --- /dev/null +++ b/0037-journal-compress-improve-xz-compression-performance.patch @@ -0,0 +1,67 @@ +From 00464ad8a698fe7735737fab57420f8a44013890 Mon Sep 17 00:00:00 2001 +From: Jon Severinsson +Date: Tue, 8 Jul 2014 18:29:46 +0200 +Subject: [PATCH] journal/compress: improve xz compression performance + +The new lzma2 compression options at the top of compress_blob_xz are +equivalent to using preset "0", exept for using a 1 MiB dictionary +(the same as preset "1"). This makes the memory usage at most 7.5 MiB +in the compressor, and 1 MiB in the decompressor, instead of the +previous 92 MiB in the compressor and 8 MiB in the decompressor. + +According to test-compress-benchmark this commit makes XZ compression +20 times faster, with no increase in compressed data size. +Using more realistic test data (an ELF binary rather than repeating +ASCII letters 'a' through 'z' in order) it only provides a factor 10 +speedup, and at a cost if a 10% increase in compressed data size. +But that is still a worthwhile trade-off. + +According to test-compress-benchmark XZ compression is still 25 times +slower than LZ4, but the compressed data is one eighth the size. +Using more realistic test data XZ compression is only 18 times slower +than LZ4, and the compressed data is only one quarter the size. + +$ ./test-compress-benchmark +XZ: compressed & decompressed 2535300963 bytes in 42.30s (57.15MiB/s), mean compresion 99.95%, skipped 3570 bytes +LZ4: compressed & decompressed 2535303543 bytes in 1.60s (1510.60MiB/s), mean compresion 99.60%, skipped 990 bytes + +(cherry picked from commit 1930eed2a7855d2df06ccf51f9e394428bf547e2) + +Conflicts: + src/journal/compress.c +--- + src/journal/compress.c | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +diff --git a/src/journal/compress.c b/src/journal/compress.c +index 1fc62ead2a..9c0b74c455 100644 +--- a/src/journal/compress.c ++++ b/src/journal/compress.c +@@ -30,6 +30,13 @@ + #include "util.h" + + bool compress_blob(const void *src, uint64_t src_size, void *dst, uint64_t *dst_size) { ++ static const lzma_options_lzma opt = { ++ 1u << 20u, NULL, 0, LZMA_LC_DEFAULT, LZMA_LP_DEFAULT, ++ LZMA_PB_DEFAULT, LZMA_MODE_FAST, 128, LZMA_MF_HC3, 4}; ++ static const lzma_filter filters[2] = { ++ {LZMA_FILTER_LZMA2, (lzma_options_lzma*) &opt}, ++ {LZMA_VLI_UNKNOWN, NULL} ++ }; + lzma_ret ret; + size_t out_pos = 0; + +@@ -41,8 +48,11 @@ bool compress_blob(const void *src, uint64_t src_size, void *dst, uint64_t *dst_ + /* Returns false if we couldn't compress the data or the + * compressed result is longer than the original */ + +- ret = lzma_easy_buffer_encode(LZMA_PRESET_DEFAULT, LZMA_CHECK_NONE, NULL, +- src, src_size, dst, &out_pos, src_size); ++ if (src_size < 80) ++ return -ENOBUFS; ++ ++ ret = lzma_stream_buffer_encode((lzma_filter*) filters, LZMA_CHECK_NONE, NULL, ++ src, src_size, dst, &out_pos, src_size - 1); + if (ret != LZMA_OK) + return false; + diff --git a/0038-hostnamed-add-a-new-chassis-type-for-watches.patch b/0038-hostnamed-add-a-new-chassis-type-for-watches.patch new file mode 100644 index 0000000..1fc4a40 --- /dev/null +++ b/0038-hostnamed-add-a-new-chassis-type-for-watches.patch @@ -0,0 +1,24 @@ +From 6f977a8c14c4cec72a85f20d0986daa391dd3319 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 9 Jul 2014 13:20:05 +0200 +Subject: [PATCH] hostnamed: add a new chassis type for watches + +(cherry picked from commit c49e59c1831f20fe02276d7bc6ba7d23d24c4ab3) +--- + src/hostname/hostnamed.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c +index 14629dd3a9..8127b688c4 100644 +--- a/src/hostname/hostnamed.c ++++ b/src/hostname/hostnamed.c +@@ -144,7 +144,8 @@ static bool valid_chassis(const char *chassis) { + "laptop\0" + "server\0" + "tablet\0" +- "handset\0", ++ "handset\0" ++ "watch\0", + chassis); + } + diff --git a/0039-hostnamed-update-documentation-with-new-watch-chassi.patch b/0039-hostnamed-update-documentation-with-new-watch-chassi.patch new file mode 100644 index 0000000..00ad15a --- /dev/null +++ b/0039-hostnamed-update-documentation-with-new-watch-chassi.patch @@ -0,0 +1,39 @@ +From 710348ce7349b224ba58bae765611455320f68d1 Mon Sep 17 00:00:00 2001 +From: Tomasz Torcz +Date: Wed, 9 Jul 2014 13:37:50 +0200 +Subject: [PATCH] hostnamed: update documentation with new "watch" chassis type + +(cherry picked from commit efab8d0b0ebf6d715949b7af66fecaf5e5e5d77b) +--- + man/hostnamectl.xml | 3 ++- + man/machine-info.xml | 3 ++- + 2 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/man/hostnamectl.xml b/man/hostnamectl.xml +index 4e456eb8f9..001bfced03 100644 +--- a/man/hostnamectl.xml ++++ b/man/hostnamectl.xml +@@ -205,7 +205,8 @@ + laptop, + server, + tablet, +- handset, as well as ++ handset, ++ watch, as well as + the special chassis types + vm and + container for +diff --git a/man/machine-info.xml b/man/machine-info.xml +index 7448e68fd4..244e9b69cf 100644 +--- a/man/machine-info.xml ++++ b/man/machine-info.xml +@@ -138,7 +138,8 @@ + laptop, + server, + tablet, +- handset, as well as ++ handset, ++ watch, as well as + the special chassis types + vm and + container for diff --git a/0040-units-make-ExecStopPost-action-part-of-ExecStart.patch b/0040-units-make-ExecStopPost-action-part-of-ExecStart.patch new file mode 100644 index 0000000..6b9fbea --- /dev/null +++ b/0040-units-make-ExecStopPost-action-part-of-ExecStart.patch @@ -0,0 +1,51 @@ +From 7a4ab10135c2b8fdeedb53c0585c67a0d6448ce6 Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Tue, 8 Jul 2014 17:42:23 +0200 +Subject: [PATCH] units: make ExecStopPost action part of ExecStart + +Currently after exiting rescue shell we isolate default target. User +might want to isolate to some other target than default one. However +issuing systemctl isolate command to desired target would bring system +to default target as a consequence of running ExecStopPost action. + +Having common ancestor for rescue shell and possible followup systemctl +default command should fix this. If user exits rescue shell we will +proceed with isolating default target, otherwise, on manual isolate, +parent shell process is terminated and we don't isolate default target, +but target chosen by user. + +Suggested-by: Michal Schmidt +(cherry picked from commit d3381512282f2ca1c7669f77fb736a90fdce6982) +--- + units/emergency.service.in | 3 +-- + units/rescue.service.m4.in | 3 +-- + 2 files changed, 2 insertions(+), 4 deletions(-) + +diff --git a/units/emergency.service.in b/units/emergency.service.in +index 94c090f654..91fc1bbf51 100644 +--- a/units/emergency.service.in ++++ b/units/emergency.service.in +@@ -17,8 +17,7 @@ Environment=HOME=/root + WorkingDirectory=/root + ExecStartPre=-/bin/plymouth quit + ExecStartPre=-/bin/echo -e 'Welcome to emergency mode! After logging in, type "journalctl -xb" to view\\nsystem logs, "systemctl reboot" to reboot, "systemctl default" to try again\\nto boot into default mode.' +-ExecStart=-/sbin/sulogin +-ExecStopPost=@SYSTEMCTL@ --fail --no-block default ++ExecStart=-/bin/sh -c "/sbin/sulogin; @SYSTEMCTL@ --fail --no-block default" + Type=idle + StandardInput=tty-force + StandardOutput=inherit +diff --git a/units/rescue.service.m4.in b/units/rescue.service.m4.in +index 552ef8981b..ef5436960f 100644 +--- a/units/rescue.service.m4.in ++++ b/units/rescue.service.m4.in +@@ -18,8 +18,7 @@ Environment=HOME=/root + WorkingDirectory=/root + ExecStartPre=-/bin/plymouth quit + ExecStartPre=-/bin/echo -e 'Welcome to rescue mode! Type "systemctl default" or ^D to enter default mode.\\nType "journalctl -xb" to view system logs. Type "systemctl reboot" to reboot.' +-ExecStart=-/sbin/sulogin +-ExecStopPost=-@SYSTEMCTL@ --fail --no-block default ++ExecStart=-/bin/sh -c "/sbin/sulogin; @SYSTEMCTL@ --fail --no-block default" + Type=idle + StandardInput=tty-force + StandardOutput=inherit diff --git a/0041-util-don-t-consider-tabs-special-in-string_has_cc-an.patch b/0041-util-don-t-consider-tabs-special-in-string_has_cc-an.patch new file mode 100644 index 0000000..df43802 --- /dev/null +++ b/0041-util-don-t-consider-tabs-special-in-string_has_cc-an.patch @@ -0,0 +1,119 @@ +From 15dbdbd90db21bea19e48194a485bbaaa9501b9b Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 7 Jul 2014 12:04:55 +0200 +Subject: [PATCH] util: don't consider tabs special in string_has_cc() anymore + +Instead, take a list of exceptions to our usual CC check + +(cherry picked from commit 6294aa76d818e831de4592b41a37e225fd0871f9) +--- + src/hostname/hostnamed.c | 3 +-- + src/shared/env-util.c | 4 +++- + src/shared/fileio.c | 2 +- + src/shared/util.c | 19 ++++++++++--------- + src/shared/util.h | 2 +- + 5 files changed, 16 insertions(+), 14 deletions(-) + +diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c +index 8127b688c4..eaae1139fa 100644 +--- a/src/hostname/hostnamed.c ++++ b/src/hostname/hostnamed.c +@@ -551,8 +551,7 @@ static int set_machine_info(Context *c, sd_bus *bus, sd_bus_message *m, int prop + + if (prop == PROP_ICON_NAME && !filename_is_safe(name)) + return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid icon name '%s'", name); +- if (prop == PROP_PRETTY_HOSTNAME && +- (string_has_cc(name) || chars_intersect(name, "\t"))) ++ if (prop == PROP_PRETTY_HOSTNAME && string_has_cc(name, NULL)) + return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid pretty host name '%s'", name); + if (prop == PROP_CHASSIS && !valid_chassis(name)) + return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid chassis '%s'", name); +diff --git a/src/shared/env-util.c b/src/shared/env-util.c +index b2e45531ab..20b208f63c 100644 +--- a/src/shared/env-util.c ++++ b/src/shared/env-util.c +@@ -78,7 +78,9 @@ bool env_value_is_valid(const char *e) { + if (!utf8_is_valid(e)) + return false; + +- if (string_has_cc(e)) ++ /* bash allows tabs in environment variables, and so should ++ * we */ ++ if (string_has_cc(e, "\t")) + return false; + + /* POSIX says the overall size of the environment block cannot +diff --git a/src/shared/fileio.c b/src/shared/fileio.c +index fb1c1bcf9f..b1de5908c5 100644 +--- a/src/shared/fileio.c ++++ b/src/shared/fileio.c +@@ -738,7 +738,7 @@ static void write_env_var(FILE *f, const char *v) { + p++; + fwrite(v, 1, p-v, f); + +- if (string_has_cc(p) || chars_intersect(p, WHITESPACE "\'\"\\`$")) { ++ if (string_has_cc(p, NULL) || chars_intersect(p, WHITESPACE "\'\"\\`$")) { + fputc('\"', f); + + for (; *p; p++) { +diff --git a/src/shared/util.c b/src/shared/util.c +index d25ee6652f..d223ecf711 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -5350,16 +5350,14 @@ bool filename_is_safe(const char *p) { + bool string_is_safe(const char *p) { + const char *t; + +- assert(p); ++ if (!p) ++ return false; + + for (t = p; *t; t++) { + if (*t > 0 && *t < ' ') + return false; + +- if (*t == 127) +- return false; +- +- if (strchr("\\\"\'", *t)) ++ if (strchr("\\\"\'\0x7f", *t)) + return false; + } + +@@ -5367,16 +5365,19 @@ bool string_is_safe(const char *p) { + } + + /** +- * Check if a string contains control characters. +- * Spaces and tabs are not considered control characters. ++ * Check if a string contains control characters. If 'ok' is non-NULL ++ * it may be a string containing additional CCs to be considered OK. + */ +-bool string_has_cc(const char *p) { ++bool string_has_cc(const char *p, const char *ok) { + const char *t; + + assert(p); + + for (t = p; *t; t++) { +- if (*t > 0 && *t < ' ' && *t != '\t') ++ if (ok && strchr(ok, *t)) ++ return false; ++ ++ if (*t > 0 && *t < ' ') + return true; + + if (*t == 127) +diff --git a/src/shared/util.h b/src/shared/util.h +index e23069c016..7124e51d90 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -692,7 +692,7 @@ _alloc_(2, 3) static inline void *memdup_multiply(const void *p, size_t a, size_ + bool filename_is_safe(const char *p) _pure_; + bool path_is_safe(const char *p) _pure_; + bool string_is_safe(const char *p) _pure_; +-bool string_has_cc(const char *p) _pure_; ++bool string_has_cc(const char *p, const char *ok) _pure_; + + /** + * Check if a string contains any glob patterns. diff --git a/0042-util-fix-has-cc-check-and-add-test.patch b/0042-util-fix-has-cc-check-and-add-test.patch new file mode 100644 index 0000000..901a6aa --- /dev/null +++ b/0042-util-fix-has-cc-check-and-add-test.patch @@ -0,0 +1,56 @@ +From 10242a06bf0b1cd3bde58cada79c8a1aae5d8caa Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 11 Jul 2014 09:21:15 -0400 +Subject: [PATCH] util: fix has cc check and add test + +--- + src/shared/util.c | 2 +- + src/test/test-util.c | 15 +++++++++++++++ + 2 files changed, 16 insertions(+), 1 deletion(-) + +diff --git a/src/shared/util.c b/src/shared/util.c +index d223ecf711..03a5860a62 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -5375,7 +5375,7 @@ bool string_has_cc(const char *p, const char *ok) { + + for (t = p; *t; t++) { + if (ok && strchr(ok, *t)) +- return false; ++ continue; + + if (*t > 0 && *t < ' ') + return true; +diff --git a/src/test/test-util.c b/src/test/test-util.c +index 44921bd156..ed91a67d10 100644 +--- a/src/test/test-util.c ++++ b/src/test/test-util.c +@@ -731,6 +731,20 @@ static void test_filename_is_safe(void) { + assert_se(filename_is_safe("o.o")); + } + ++static void test_string_has_cc(void) { ++ assert_se(string_has_cc("abc\1", NULL)); ++ assert_se(string_has_cc("abc\x7f", NULL)); ++ assert_se(string_has_cc("abc\x7f", NULL)); ++ assert_se(string_has_cc("abc\t\x7f", "\t")); ++ assert_se(string_has_cc("abc\t\x7f", "\t")); ++ assert_se(string_has_cc("\x7f", "\t")); ++ assert_se(string_has_cc("\x7f", "\t\a")); ++ ++ assert_se(!string_has_cc("abc\t\t", "\t")); ++ assert_se(!string_has_cc("abc\t\t\a", "\t\a")); ++ assert_se(!string_has_cc("a\ab\tc", "\t\a")); ++} ++ + static void test_ascii_strlower(void) { + char a[] = "AabBcC Jk Ii Od LKJJJ kkd LK"; + assert_se(streq(ascii_strlower(a), "aabbcc jk ii od lkjjj kkd lk")); +@@ -937,6 +951,7 @@ int main(int argc, char *argv[]) { + test_log2i(); + test_foreach_string(); + test_filename_is_safe(); ++ test_string_has_cc(); + test_ascii_strlower(); + test_files_same(); + test_is_valid_documentation_url(); diff --git a/0043-sysusers-don-t-allow-user-names-longer-than-UT_NAMES.patch b/0043-sysusers-don-t-allow-user-names-longer-than-UT_NAMES.patch new file mode 100644 index 0000000..1ab8523 --- /dev/null +++ b/0043-sysusers-don-t-allow-user-names-longer-than-UT_NAMES.patch @@ -0,0 +1,52 @@ +From e17ff7ab5115b80f0d2bd4989cd31889bd54fbb1 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 9 Jul 2014 19:20:58 +0200 +Subject: [PATCH] sysusers: don't allow user names longer than UT_NAMESIZE +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +As pointed out by Miloslav Trmač it might be a good idea to make sure +that usernames stay with in the utmp-defined limits. + +(cherry picked from commit 932ad62b84165b0acf690ea34c4b8083657ae244) +--- + man/sysusers.d.xml | 2 +- + src/sysusers/sysusers.c | 4 ++++ + 2 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/man/sysusers.d.xml b/man/sysusers.d.xml +index 549b3f6351..40f8715bc0 100644 +--- a/man/sysusers.d.xml ++++ b/man/sysusers.d.xml +@@ -142,7 +142,7 @@ m authd input + Name + + The name field specifies the user or +- group name. It should be be shorter than 256 ++ group name. It should be be shorter than 31 + characters and avoid any non-ASCII characters, + and not begin with a numeric character. It is + strongly recommended to pick user and group +diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c +index c0af69300a..f3ba8cf7b3 100644 +--- a/src/sysusers/sysusers.c ++++ b/src/sysusers/sysusers.c +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + + #include "util.h" + #include "hashmap.h" +@@ -1095,6 +1096,9 @@ static bool valid_user_group_name(const char *u) { + if ((size_t) (i-u) > (size_t) sz) + return false; + ++ if ((size_t) (i-u) > UT_NAMESIZE - 1) ++ return false; ++ + return true; + } + diff --git a/0044-sysusers-don-t-allow-control-characters-in-gecos-fie.patch b/0044-sysusers-don-t-allow-control-characters-in-gecos-fie.patch new file mode 100644 index 0000000..9c9195c --- /dev/null +++ b/0044-sysusers-don-t-allow-control-characters-in-gecos-fie.patch @@ -0,0 +1,27 @@ +From b374a6f62172bf5352cc1ad825ace44d78430e0c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 9 Jul 2014 19:21:42 +0200 +Subject: [PATCH] sysusers: don't allow control characters in gecos fields + +(cherry picked from commit 38c74dad1c3d605018e61074e0b80f6b9523b1c8) +--- + src/sysusers/sysusers.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c +index f3ba8cf7b3..16ea0c9c57 100644 +--- a/src/sysusers/sysusers.c ++++ b/src/sysusers/sysusers.c +@@ -1107,7 +1107,11 @@ static bool valid_gecos(const char *d) { + if (!utf8_is_valid(d)) + return false; + +- if (strpbrk(d, ":\n")) ++ if (string_has_cc(d, NULL)) ++ return false; ++ ++ /* Colons are used as field separators, and hence not OK */ ++ if (strchr(d, ':')) + return false; + + return true; diff --git a/0045-sysusers-allow-overrides-in-etc-and-run.patch b/0045-sysusers-allow-overrides-in-etc-and-run.patch new file mode 100644 index 0000000..1468430 --- /dev/null +++ b/0045-sysusers-allow-overrides-in-etc-and-run.patch @@ -0,0 +1,122 @@ +From e65cf4e9d68dd4526524b33709bd16afb95f374a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 10 Jul 2014 08:50:32 -0400 +Subject: [PATCH] sysusers: allow overrides in /etc and /run + +An administrator might want to block a certain sysusers config file from +being executed, e.g. to block the creation of a certain user. + +Only a relatively short description is added in the man page, since +overrides should be relatively rare. + +(cherry picked from commit 938a560b7608e8906134ed7d717c3f5aa459a760) +--- + man/sysusers.d.xml | 63 ++++++++++++++++++++++++++++++++++--------------- + src/sysusers/sysusers.c | 2 ++ + 2 files changed, 46 insertions(+), 19 deletions(-) + +diff --git a/man/sysusers.d.xml b/man/sysusers.d.xml +index 40f8715bc0..00eb7ec942 100644 +--- a/man/sysusers.d.xml ++++ b/man/sysusers.d.xml +@@ -53,32 +53,28 @@ + Description + + systemd-sysusers uses the +- files from /usr/lib/sysusers.d/ ++ files from sysusers.d directory + to create system users and groups at package +- installation or boot time. This tool may be used for +- allocating system users and groups only, it is not ++ installation or boot time. This tool may be used to ++ allocate system users and groups only, it is not + useful for creating non-system users and groups, as it +- accessed /etc/passwd and ++ accesses /etc/passwd and + /etc/group directly, bypassing +- any more complex user database, for example any ++ any more complex user databases, for example any + database involving NIS or LDAP. +- + + + +- File Format +- +- Each file shall be named in the style of +- package.conf. ++ Configuration Format + +- All files are sorted by their filename in +- lexicographic order, regardless of which of the +- directories they reside in. If multiple files specify +- the same user or group, the entry in the file with the +- lexicographically earliest name will be applied, all +- all other conflicting entries will be logged as +- errors. Users and groups are +- processed in the order they are listed. ++ Each configuration file shall be named in the ++ style of ++ package.conf ++ or ++ package-part.conf. ++ The second variant should be used when it is desirable ++ to make it easy to override just this part of ++ configuration. + + The file format is one line per user or group + containing name, ID and GECOS field description: +@@ -193,10 +189,39 @@ m authd input + + + ++ Overriding vendor configuration ++ ++ Note that systemd-sysusers ++ will do nothing if the specified users or groups ++ already exist, so normally there no reason to override ++ sysusers.d vendor configuration, ++ except to block certain users or groups from being ++ created. ++ ++ Files in /etc/sysusers.d ++ override files with the same name in ++ /usr/lib/sysusers.d and ++ /run/sysusers.d. Files in ++ /run/sysusers.d override files ++ with the same name in ++ /usr/lib/sysusers.d. The scheme is the same as for ++ tmpfiles.d5, ++ except for the directory name. ++ ++ If the administrator wants to disable a ++ configuration file supplied by the vendor, the ++ recommended way is to place a symlink to ++ /dev/null in ++ /etc/sysusers.d/ bearing the ++ same filename. ++ ++ ++ + See Also + + systemd1, +- systemd-sysusers8 ++ systemd-sysusers8, ++ tmpfiles.d5 + + + +diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c +index 16ea0c9c57..61c9bb5efb 100644 +--- a/src/sysusers/sysusers.c ++++ b/src/sysusers/sysusers.c +@@ -62,6 +62,8 @@ typedef struct Item { + static char *arg_root = NULL; + + static const char conf_file_dirs[] = ++ "/etc/sysusers.d\0" ++ "/run/sysusers.d\0" + "/usr/local/lib/sysusers.d\0" + "/usr/lib/sysusers.d\0" + #ifdef HAVE_SPLIT_USR diff --git a/0046-man-document-x-systemd.device-timeout-for-crypttab.patch b/0046-man-document-x-systemd.device-timeout-for-crypttab.patch new file mode 100644 index 0000000..8b735af --- /dev/null +++ b/0046-man-document-x-systemd.device-timeout-for-crypttab.patch @@ -0,0 +1,37 @@ +From 634ddd73f790dd779e97edd1491178897858f7c0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 10 Jul 2014 22:34:43 -0400 +Subject: [PATCH] man: document x-systemd.device-timeout for crypttab + +https://bugs.freedesktop.org/show_bug.cgi?id=54210 +(cherry picked from commit dc5cd2b77288dc85c82cb95810cd14caee311e7e) +--- + man/crypttab.xml | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +diff --git a/man/crypttab.xml b/man/crypttab.xml +index 9dbf1546b1..d658a6ff20 100644 +--- a/man/crypttab.xml ++++ b/man/crypttab.xml +@@ -319,6 +319,21 @@ + + + ++ ++ ++ Specifies how long ++ systemd should wait for a device to ++ show up before giving up on the ++ entry. The argument is a time in ++ seconds or explicitly specifified ++ units of s, ++ min, ++ h, ++ ms. ++ ++ ++ ++ + + + The encrypted block device will diff --git a/0047-shell-completion-man-beef-up-chassis-completions-and.patch b/0047-shell-completion-man-beef-up-chassis-completions-and.patch new file mode 100644 index 0000000..45693b1 --- /dev/null +++ b/0047-shell-completion-man-beef-up-chassis-completions-and.patch @@ -0,0 +1,224 @@ +From ba838f7f9b3de1777f3528c0fe211f9bedbd2a8b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 11 Jul 2014 08:25:20 -0400 +Subject: [PATCH] shell-completion,man: beef up chassis completions and + description + +Parameters to hostnamectl command are not optional and should not be marked +as such in the man page. + +(cherry picked from commit 1ed774956406941d4812a3fb4493d2915f130f12) +--- + man/hostnamectl.xml | 73 +++++++++++++++++++++------------------ + shell-completion/bash/hostnamectl | 3 ++ + shell-completion/zsh/_hostnamectl | 32 +++++++++++++++-- + shell-completion/zsh/_localectl | 4 +-- + 4 files changed, 75 insertions(+), 37 deletions(-) + +diff --git a/man/hostnamectl.xml b/man/hostnamectl.xml +index 001bfced03..13e5bd57f2 100644 +--- a/man/hostnamectl.xml ++++ b/man/hostnamectl.xml +@@ -141,13 +141,14 @@ + + + +- set-hostname [NAME] ++ set-hostname NAME + + Set the system +- hostname. By default, this will alter +- the pretty, the static, and the +- transient hostname alike; however, if +- one or more of ++ hostname to ++ NAME. By ++ default, this will alter the pretty, ++ the static, and the transient hostname ++ alike; however, if one or more of + , + , + are used, +@@ -168,55 +169,61 @@ + the hostname string is not done if + only the transient and/or static host + names are set, and the pretty host +- name is left untouched. Pass the empty +- string as the +- hostname to reset the selected +- hostnames to their default (usually ++ name is left untouched. ++ ++ Pass the empty string ++ as the hostname to ++ reset the selected hostnames to their ++ default (usually + localhost). + + + +- set-icon-name [NAME] ++ set-icon-name NAME + + Set the system icon +- name. The icon name is used by some +- graphical applications to visualize +- this host. The icon name should follow +- the NAME. The ++ icon name is used by some graphical ++ applications to visualize this host. ++ The icon name should follow the Icon +- Naming Specification. Pass an +- empty string to this operation to +- reset the icon name to the default +- value, which is determined from chassis +- type (see below) and possibly other ++ Naming Specification. ++ ++ Pass an empty string to reset ++ the icon name to the default value, ++ which is determined from chassis type ++ (see below) and possibly other + parameters. + + + +- set-chassis [TYPE] ++ set-chassis TYPE + +- Set the chassis +- type. The chassis type is used by some ++ Set the chassis type ++ to TYPE. ++ The chassis type is used by some + graphical applications to visualize +- the host or alter user +- interaction. Currently, the following +- chassis types are defined: ++ the host or alter user interaction. ++ Currently, the following chassis types ++ are defined: + desktop, + laptop, + server, + tablet, +- handset, +- watch, as well as ++ handset, ++ watch, as well as + the special chassis types + vm and + container for + virtualized systems that lack an +- immediate physical chassis. Pass an +- empty string to this operation to +- reset the chassis type to the default +- value which is determined from the +- firmware and possibly other +- parameters. ++ immediate physical chassis. ++ ++ Pass an empty string to reset ++ the chassis type to the default value ++ which is determined from the firmware ++ and possibly other parameters. ++ + + + +diff --git a/shell-completion/bash/hostnamectl b/shell-completion/bash/hostnamectl +index 9c75da9e7f..22f8f06b69 100644 +--- a/shell-completion/bash/hostnamectl ++++ b/shell-completion/bash/hostnamectl +@@ -39,6 +39,7 @@ _hostnamectl() { + [STANDALONE]='status' + [ICONS]='set-icon-name' + [NAME]='set-hostname' ++ [CHASSIS]='set-chassis' + ) + + for ((i=0; i < COMP_CWORD; i++)); do +@@ -50,6 +51,8 @@ _hostnamectl() { + + if [[ -z $verb ]]; then + comps=${VERBS[*]} ++ elif __contains_word "$verb" ${VERBS[CHASSIS]}; then ++ comps='desktop laptop server tablet handset watch vm container' + elif __contains_word "$verb" ${VERBS[STANDALONE]} ${VERBS[ICONS]} ${VERBS[NAME]}; then + comps='' + fi +diff --git a/shell-completion/zsh/_hostnamectl b/shell-completion/zsh/_hostnamectl +index 7effa0489e..be8687609e 100644 +--- a/shell-completion/zsh/_hostnamectl ++++ b/shell-completion/zsh/_hostnamectl +@@ -1,5 +1,30 @@ + #compdef hostnamectl + ++_hostnamectl_set-hostname() { ++ if (( CURRENT <= 3 )); then ++ _message "new hostname" ++ else ++ _message "no more options" ++ fi ++} ++ ++_hostnamectl_set-icon-name() { ++ if (( CURRENT <= 3 )); then ++ _message "new icon name" ++ else ++ _message "no more options" ++ fi ++} ++ ++_hostnamectl_set-chassis() { ++ if (( CURRENT <= 3 )); then ++ _chassis=( desktop laptop server tablet handset watch vm container ) ++ _describe chassis _chassis ++ else ++ _message "no more options" ++ fi ++} ++ + _hostnamectl_command() { + local -a _hostnamectl_cmds + _hostnamectl_cmds=( +@@ -14,8 +39,11 @@ _hostnamectl_command() { + local curcontext="$curcontext" + cmd="${${_hostnamectl_cmds[(r)$words[1]:*]%%:*}}" + if (( $#cmd )); then +- [[ $cmd == status ]] && msg="no options" || msg="options for $cmd" +- _message "$msg" ++ if [[ $cmd == status ]]; then ++ _message "no options" ++ else ++ _hostnamectl_$cmd ++ fi + else + _message "unknown hostnamectl command: $words[1]" + fi +diff --git a/shell-completion/zsh/_localectl b/shell-completion/zsh/_localectl +index 87432da1dc..d8af4d1863 100644 +--- a/shell-completion/zsh/_localectl ++++ b/shell-completion/zsh/_localectl +@@ -22,8 +22,8 @@ _localectl_set-locale() { + + _localectl_set-keymap() { + local -a _keymaps +- _keymaps=( ${(f)"$(_call_program locales "$service" list-keymaps)"} ) + if (( CURRENT <= 3 )); then ++ _keymaps=( ${(f)"$(_call_program locales "$service" list-keymaps)"} ) + _describe keymaps _keymaps + else + _message "no more options" +@@ -77,7 +77,7 @@ _localectl_command() { + if (( $+functions[_localectl_$cmd] )); then + _localectl_$cmd + else +- _message "no more options" ++ _message "unknown localectl command: $words[1]" + fi + fi + } diff --git a/0048-Revert-build-sys-include-PolicyKit-files-as-part-of-.patch b/0048-Revert-build-sys-include-PolicyKit-files-as-part-of-.patch new file mode 100644 index 0000000..d984e24 --- /dev/null +++ b/0048-Revert-build-sys-include-PolicyKit-files-as-part-of-.patch @@ -0,0 +1,33 @@ +From 33def81ef9cbfd7827e5239c1389c571db600f98 Mon Sep 17 00:00:00 2001 +From: Mike Gilbert +Date: Fri, 4 Jul 2014 14:43:14 -0400 +Subject: [PATCH] Revert "build-sys: include PolicyKit files as part of + distribution" + +This reverts commit 0c26bfc3d21fdb3963f1248c237e2f1a33b5566d. + +src/core/org.freedesktop.systemd1.policy.in.in depends on values which +are specified at configure time, so we cannot ship the corresponding +policy file in the tarball. + +Since we need to regenerate one policy file, we might as well generate +them all. + +(cherry picked from commit 3ce142490907d31c33ac03d72554f92459192f92) +--- + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index 7210ab70be..9525e748cf 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -5224,7 +5224,7 @@ units/user/%: units/%.m4 + $(AM_V_M4)$(M4) -P $(M4_DEFINES) -DFOR_USER=1 < $< > $@ + + if ENABLE_POLKIT +-dist_polkitpolicy_DATA = \ ++nodist_polkitpolicy_DATA = \ + $(polkitpolicy_files) \ + $(polkitpolicy_in_in_files:.policy.in.in=.policy) + endif diff --git a/0049-build-sys-Do-not-distribute-generated-emergency.serv.patch b/0049-build-sys-Do-not-distribute-generated-emergency.serv.patch new file mode 100644 index 0000000..1fa221b --- /dev/null +++ b/0049-build-sys-Do-not-distribute-generated-emergency.serv.patch @@ -0,0 +1,27 @@ +From 8147d2f97abd8460541fdb0ba961f3fac5ca86ae Mon Sep 17 00:00:00 2001 +From: Jon Severinsson +Date: Fri, 11 Jul 2014 14:37:36 +0200 +Subject: [PATCH] build-sys: Do not distribute generated emergency.service + +It is already in nodist_systemunit_DATA and if it is +shipped, it contains the hardcoded path to systemctl +which will cause it to fail to start when +rootprefix != prefix and rootbindir != bindir. + +(cherry picked from commit 3864c28549d742427fdf33026e522e9f10a7e4ec) +--- + Makefile.am | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index 9525e748cf..025461b497 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -413,7 +413,6 @@ dist_sysctl_DATA = \ + dist_systemunit_DATA = \ + units/graphical.target \ + units/multi-user.target \ +- units/emergency.service \ + units/emergency.target \ + units/sysinit.target \ + units/basic.target \ diff --git a/0050-sysusers-preserve-label-of-etc-passwd-group.patch b/0050-sysusers-preserve-label-of-etc-passwd-group.patch new file mode 100644 index 0000000..3fc1784 --- /dev/null +++ b/0050-sysusers-preserve-label-of-etc-passwd-group.patch @@ -0,0 +1,54 @@ +From 2d258d4a029f43d22050cab56c3dfae36a8ace45 Mon Sep 17 00:00:00 2001 +From: Colin Walters +Date: Sun, 13 Jul 2014 13:35:33 -0700 +Subject: [PATCH] sysusers: preserve label of /etc/{passwd, group} + +These files are specially labeled on SELinux systems, and we need to +preserve that label. + +(cherry picked from commit a334cbba7222d3d7d886c17c828fa4227c656535) +--- + src/sysusers/sysusers.c | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c +index 61c9bb5efb..6ec22ccc73 100644 +--- a/src/sysusers/sysusers.c ++++ b/src/sysusers/sysusers.c +@@ -312,7 +312,11 @@ static int write_files(void) { + _cleanup_fclose_ FILE *original = NULL; + + group_path = fix_root("/etc/group"); ++ r = label_context_set("/etc/group", S_IFREG); ++ if (r < 0) ++ goto finish; + r = fopen_temporary(group_path, &group, &group_tmp); ++ label_context_clear(); + if (r < 0) + goto finish; + +@@ -388,9 +392,14 @@ static int write_files(void) { + _cleanup_fclose_ FILE *original = NULL; + + passwd_path = fix_root("/etc/passwd"); +- r = fopen_temporary(passwd_path, &passwd, &passwd_tmp); ++ r = label_context_set("/etc/passwd", S_IFREG); + if (r < 0) + goto finish; ++ r = fopen_temporary(passwd_path, &passwd, &passwd_tmp); ++ label_context_clear(); ++ if (r < 0) { ++ goto finish; ++ } + + if (fchmod(fileno(passwd), 0644) < 0) { + r = -errno; +@@ -1527,6 +1536,8 @@ int main(int argc, char *argv[]) { + + umask(0022); + ++ label_init(NULL); ++ + r = 0; + + if (optind < argc) { diff --git a/0051-Add-function-to-open-temp-files-in-selinux-mode.patch b/0051-Add-function-to-open-temp-files-in-selinux-mode.patch new file mode 100644 index 0000000..733e906 --- /dev/null +++ b/0051-Add-function-to-open-temp-files-in-selinux-mode.patch @@ -0,0 +1,111 @@ +From 8aa593f9b9c68d27a9722d1c80c39b9ff65bc2de Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 13 Jul 2014 21:10:38 -0400 +Subject: [PATCH] Add function to open temp files in selinux mode + +(cherry picked from commit f7f628b5db770feb8b18990436baefaec55c460b) +--- + src/shared/fileio-label.c | 20 ++++++++++++++++++-- + src/shared/fileio-label.h | 2 ++ + src/sysusers/sysusers.c | 15 ++++----------- + 3 files changed, 24 insertions(+), 13 deletions(-) + +diff --git a/src/shared/fileio-label.c b/src/shared/fileio-label.c +index 0711826e85..417ca5695a 100644 +--- a/src/shared/fileio-label.c ++++ b/src/shared/fileio-label.c +@@ -25,12 +25,13 @@ + + #include "fileio-label.h" + #include "label.h" ++#include "util.h" + + int write_string_file_atomic_label(const char *fn, const char *line) { + int r; + + r = label_context_set(fn, S_IFREG); +- if (r < 0) ++ if (r < 0) + return r; + + write_string_file_atomic(fn, line); +@@ -44,7 +45,7 @@ int write_env_file_label(const char *fname, char **l) { + int r; + + r = label_context_set(fname, S_IFREG); +- if (r < 0) ++ if (r < 0) + return r; + + write_env_file(fname, l); +@@ -53,3 +54,18 @@ int write_env_file_label(const char *fname, char **l) { + + return r; + } ++ ++int fopen_temporary_label(const char *target, ++ const char *path, FILE **f, char **temp_path) { ++ int r; ++ ++ r = label_context_set("/etc/passwd", S_IFREG); ++ if (r < 0) ++ return r; ++ ++ r = fopen_temporary(path, f, temp_path); ++ ++ label_context_clear(); ++ ++ return r; ++} +diff --git a/src/shared/fileio-label.h b/src/shared/fileio-label.h +index fce4fe0d73..25fa351be2 100644 +--- a/src/shared/fileio-label.h ++++ b/src/shared/fileio-label.h +@@ -27,3 +27,5 @@ + + int write_string_file_atomic_label(const char *fn, const char *line); + int write_env_file_label(const char *fname, char **l); ++int fopen_temporary_label(const char *target, ++ const char *path, FILE **f, char **temp_path); +diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c +index 6ec22ccc73..bf2fbbc252 100644 +--- a/src/sysusers/sysusers.c ++++ b/src/sysusers/sysusers.c +@@ -35,6 +35,8 @@ + #include "conf-files.h" + #include "copy.h" + #include "utf8.h" ++#include "label.h" ++#include "fileio-label.h" + + typedef enum ItemType { + ADD_USER = 'u', +@@ -312,11 +314,7 @@ static int write_files(void) { + _cleanup_fclose_ FILE *original = NULL; + + group_path = fix_root("/etc/group"); +- r = label_context_set("/etc/group", S_IFREG); +- if (r < 0) +- goto finish; +- r = fopen_temporary(group_path, &group, &group_tmp); +- label_context_clear(); ++ r = fopen_temporary_label("/etc/group", group_path, &group, &group_tmp); + if (r < 0) + goto finish; + +@@ -392,14 +390,9 @@ static int write_files(void) { + _cleanup_fclose_ FILE *original = NULL; + + passwd_path = fix_root("/etc/passwd"); +- r = label_context_set("/etc/passwd", S_IFREG); ++ r = fopen_temporary_label("/etc/passwd", passwd_path, &passwd, &passwd_tmp); + if (r < 0) + goto finish; +- r = fopen_temporary(passwd_path, &passwd, &passwd_tmp); +- label_context_clear(); +- if (r < 0) { +- goto finish; +- } + + if (fchmod(fileno(passwd), 0644) < 0) { + r = -errno; diff --git a/0052-man-add-systemd-coredump-8-and-a-bunch-of-links.patch b/0052-man-add-systemd-coredump-8-and-a-bunch-of-links.patch new file mode 100644 index 0000000..f5ed3ca --- /dev/null +++ b/0052-man-add-systemd-coredump-8-and-a-bunch-of-links.patch @@ -0,0 +1,200 @@ +From e6751d628bdc96c751517e9b6680d3a3a5cd8f2f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 13 Jul 2014 20:32:46 -0400 +Subject: [PATCH] man: add systemd-coredump(8) and a bunch of links + +(cherry picked from commit 5146e7e8aec2d394c06771d4c9d0d03fc2cd911c) +--- + Makefile-man.am | 4 +- + man/coredumpctl.xml | 2 + + man/journalctl.xml | 1 + + man/systemd-coredump.xml | 105 +++++++++++++++++++++++++++++++++++++++ + man/systemd-journald.service.xml | 1 + + sysctl.d/50-coredump.conf.in | 4 +- + 6 files changed, 115 insertions(+), 2 deletions(-) + create mode 100644 man/systemd-coredump.xml + +diff --git a/Makefile-man.am b/Makefile-man.am +index 4238c21710..a02ef733aa 100644 +--- a/Makefile-man.am ++++ b/Makefile-man.am +@@ -681,7 +681,8 @@ endif + if ENABLE_COREDUMP + MANPAGES += \ + man/coredump.conf.5 \ +- man/coredumpctl.1 ++ man/coredumpctl.1 \ ++ man/systemd-coredump.8 + MANPAGES_ALIAS += \ + # + +@@ -1595,6 +1596,7 @@ EXTRA_DIST += \ + man/systemd-cat.xml \ + man/systemd-cgls.xml \ + man/systemd-cgtop.xml \ ++ man/systemd-coredump.xml \ + man/systemd-cryptsetup-generator.xml \ + man/systemd-cryptsetup@.service.xml \ + man/systemd-debug-generator.xml \ +diff --git a/man/coredumpctl.xml b/man/coredumpctl.xml +index 73d1b8435f..327ef6e859 100644 +--- a/man/coredumpctl.xml ++++ b/man/coredumpctl.xml +@@ -210,6 +210,8 @@ + + See Also + ++ systemd-coredump8, ++ coredump.conf5, + systemd-journald.service8, + gdb1 + +diff --git a/man/journalctl.xml b/man/journalctl.xml +index 78fc6f6160..de7741c819 100644 +--- a/man/journalctl.xml ++++ b/man/journalctl.xml +@@ -908,6 +908,7 @@ + systemd1, + systemd-journald.service8, + systemctl1, ++ coredumpctl1, + systemd.journal-fields7, + journald.conf5 + +diff --git a/man/systemd-coredump.xml b/man/systemd-coredump.xml +new file mode 100644 +index 0000000000..b83b278620 +--- /dev/null ++++ b/man/systemd-coredump.xml +@@ -0,0 +1,105 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ systemd-coredump ++ systemd ++ ++ ++ ++ Developer ++ Lennart ++ Poettering ++ lennart@poettering.net ++ ++ ++ ++ ++ ++ systemd-coredump ++ 8 ++ ++ ++ ++ systemd-coredump ++ Log and store core dumps ++ ++ ++ ++ /usr/lib/systemd/systemd-coredump ++ ++ ++ ++ Description ++ ++ systemd-coredump can be used as a helper ++ binary by the kernel when a user space program receives a fatal ++ signal and dumps core. For it to be used in this capacity, it must ++ be specified by the ++ kernel.core_pattern sysctl8 ++ setting. Systemd installs ++ /usr/lib/sysctl.d/50-coredump.conf which ++ configures kernel.core_pattern to invoke ++ systemd-coredump. This file may be masked or ++ overriden to use a different setting following normal ++ sysctl.d5 rules. ++ ++ The behaviour of a specific program upon reception of a ++ signal is governed by a few factors which are described in detail ++ in core5. ++ In particular, the coredump will only be processed when the ++ related resource limits are high enough. For programs started by ++ systemd those may be set using ++ LimitCore= (see ++ systemd.exec5). ++ ++ ++ systemd-coredump will log the coredump ++ including a backtrace if possible, and store the core (contents of ++ process' memory contents) in an external file on disk in ++ /var/lib/systemd/coredump, or directly in ++ the journal. This behaviour may be modified using ++ coredump.conf5. ++ ++ Apart from the ++ journalctl1 ++ log viewer, ++ coredumpctl1 ++ may be used to list and extract coredumps. ++ ++ ++ ++ See Also ++ ++ coredump.conf5, ++ coredumpctl1, ++ systemd-journald.service8, ++ core5, ++ sysctl.d5, ++ systemd-sysctl.service8. ++ ++ ++ +diff --git a/man/systemd-journald.service.xml b/man/systemd-journald.service.xml +index 7ac73ed66d..eb16118afd 100644 +--- a/man/systemd-journald.service.xml ++++ b/man/systemd-journald.service.xml +@@ -248,6 +248,7 @@ + journald.conf5, + systemd.journal-fields7, + sd-journal3, ++ systemd-coredump8, + setfacl1, + pydoc systemd.journal. + +diff --git a/sysctl.d/50-coredump.conf.in b/sysctl.d/50-coredump.conf.in +index d5795a37d5..d5f600ef45 100644 +--- a/sysctl.d/50-coredump.conf.in ++++ b/sysctl.d/50-coredump.conf.in +@@ -5,6 +5,8 @@ + # 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) for the description of the files in this directory, ++# and systemd-coredump(8) and core(5) for the explanation of the ++# setting below. + + kernel.core_pattern=|@rootlibexecdir@/systemd-coredump %p %u %g %s %t %e diff --git a/0053-man-sysusers.d-correct-default-user-shell.patch b/0053-man-sysusers.d-correct-default-user-shell.patch new file mode 100644 index 0000000..feced97 --- /dev/null +++ b/0053-man-sysusers.d-correct-default-user-shell.patch @@ -0,0 +1,26 @@ +From 508627c15e7f98b1169810a2998c1707305fd58c Mon Sep 17 00:00:00 2001 +From: Sjoerd Simons +Date: Sun, 13 Jul 2014 16:56:16 +0200 +Subject: [PATCH] man: sysusers.d correct default user shell + +For the non-root user sysusers uses nologin as the default shell, not +login. Correct the documentation to match the code. + +(cherry picked from commit eb34cba76323ea673471e226f97721bd6bdbcbf6) +--- + man/sysusers.d.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/sysusers.d.xml b/man/sysusers.d.xml +index 00eb7ec942..1e079b2111 100644 +--- a/man/sysusers.d.xml ++++ b/man/sysusers.d.xml +@@ -102,7 +102,7 @@ m authd input + group will be set to the group + bearing the same name. The + user's shell will be set to +- /sbin/login, ++ /sbin/nologin, + the home directory to + /. The + account will be created diff --git a/0054-man-mention-XDG_DATA_HOME-in-systemd.unit.patch b/0054-man-mention-XDG_DATA_HOME-in-systemd.unit.patch new file mode 100644 index 0000000..b843b86 --- /dev/null +++ b/0054-man-mention-XDG_DATA_HOME-in-systemd.unit.patch @@ -0,0 +1,41 @@ +From 7dd741b242fef522190d6a1412ca9b422286a879 Mon Sep 17 00:00:00 2001 +From: Tanu Kaskinen +Date: Sat, 12 Jul 2014 19:36:16 +0300 +Subject: [PATCH] man: mention XDG_DATA_HOME in systemd.unit + +(cherry picked from commit 91acdc17a5b47e775369c6b907601f44fab07dcb) +--- + man/systemd.unit.xml | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml +index cd3279c192..f66c580a37 100644 +--- a/man/systemd.unit.xml ++++ b/man/systemd.unit.xml +@@ -74,6 +74,8 @@ + $HOME/.config/systemd/user/* + /etc/systemd/user/* + /run/systemd/user/* ++$XDG_DATA_HOME/systemd/user/* ++$HOME/.local/share/systemd/user/* + /usr/lib/systemd/user/* + ... + +@@ -339,8 +341,16 @@ + Runtime units + + ++ $XDG_DATA_HOME/systemd/user ++ Units of packages that have been installed in the home directory (only used when $XDG_DATA_HOME is set) ++ ++ ++ $HOME/.local/share/systemd/user ++ Units of packages that have been installed in the home directory (only used when $XDG_DATA_HOME is not set) ++ ++ + /usr/lib/systemd/user +- Units of installed packages ++ Units of packages that have been installed system-wide + + + diff --git a/0055-path-lookup-don-t-make-.local-share-systemd-user-a-s.patch b/0055-path-lookup-don-t-make-.local-share-systemd-user-a-s.patch new file mode 100644 index 0000000..773aea1 --- /dev/null +++ b/0055-path-lookup-don-t-make-.local-share-systemd-user-a-s.patch @@ -0,0 +1,49 @@ +From d8f6518b91f3c493471fa73b7ca98759e895a3d7 Mon Sep 17 00:00:00 2001 +From: Tanu Kaskinen +Date: Sat, 12 Jul 2014 18:59:19 +0300 +Subject: [PATCH] path-lookup: don't make ~/.local/share/systemd/user a symlink + +We already encourage upstreams to keep the default configuration +separate from user customizations for software that is installed in +the system location. Let's allow that separation also for software +that is installed in the home directory. + +Some discussion: +http://thread.gmane.org/gmane.comp.sysutils.systemd.devel/19627 + +(cherry picked from commit 667a1cd645c9402921dedff08a86bb35cddbcbf9) +--- + src/shared/path-lookup.c | 18 ------------------ + 1 file changed, 18 deletions(-) + +diff --git a/src/shared/path-lookup.c b/src/shared/path-lookup.c +index e0aaf4431f..7d53d859b6 100644 +--- a/src/shared/path-lookup.c ++++ b/src/shared/path-lookup.c +@@ -125,26 +125,8 @@ static char** user_dirs( + goto fail; + + } else if (home) { +- _cleanup_free_ char *data_home_parent = NULL; +- + if (asprintf(&data_home, "%s/.local/share/systemd/user", home) < 0) + goto fail; +- +- /* There is really no need for two unit dirs in $HOME, +- * except to be fully compliant with the XDG spec. We +- * now try to link the two dirs, so that we can +- * minimize disk seeks a little. Further down we'll +- * then filter out this link, if it is actually is +- * one. */ +- +- if (path_get_parent(data_home, &data_home_parent) >= 0) { +- _cleanup_free_ char *config_home_relative = NULL; +- +- if (path_make_relative(data_home_parent, config_home, &config_home_relative) >= 0) { +- mkdir_parents_label(data_home, 0777); +- (void) symlink(config_home_relative, data_home); +- } +- } + } + + e = getenv("XDG_DATA_DIRS"); diff --git a/0056-fileio-quote-more-shell-characters-in-envfiles.patch b/0056-fileio-quote-more-shell-characters-in-envfiles.patch new file mode 100644 index 0000000..b983470 --- /dev/null +++ b/0056-fileio-quote-more-shell-characters-in-envfiles.patch @@ -0,0 +1,53 @@ +From b91985eca0db632daecf6e20b1d3718f0f884389 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Mantas=20Mikul=C4=97nas?= +Date: Sun, 13 Jul 2014 18:49:00 +0300 +Subject: [PATCH] fileio: quote more shell characters in envfiles + +Turns out, making strings shell-proof is harder than expected: + + # machinectl set-hostname "foo|poweroff" && . /etc/machine-info + +(This could be simplified by quoting *and* escaping all characters, +which is harmless in shell but unnecessary.) + +(cherry picked from commit 0ce5a80601597fe4d1a715a8f70ce8d5ccaa2d86) +--- + src/shared/fileio.c | 4 ++-- + src/shared/util.h | 6 ++++++ + 2 files changed, 8 insertions(+), 2 deletions(-) + +diff --git a/src/shared/fileio.c b/src/shared/fileio.c +index b1de5908c5..d22770b772 100644 +--- a/src/shared/fileio.c ++++ b/src/shared/fileio.c +@@ -738,11 +738,11 @@ static void write_env_var(FILE *f, const char *v) { + p++; + fwrite(v, 1, p-v, f); + +- if (string_has_cc(p, NULL) || chars_intersect(p, WHITESPACE "\'\"\\`$")) { ++ if (string_has_cc(p, NULL) || chars_intersect(p, WHITESPACE SHELL_NEED_QUOTES)) { + fputc('\"', f); + + for (; *p; p++) { +- if (strchr("\'\"\\`$", *p)) ++ if (strchr(SHELL_NEED_ESCAPE, *p)) + fputc('\\', f); + + fputc(*p, f); +diff --git a/src/shared/util.h b/src/shared/util.h +index 7124e51d90..64b9fc6884 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -93,6 +93,12 @@ + #define COMMENTS "#;" + #define GLOB_CHARS "*?[" + ++/* What characters are special in the shell? */ ++/* must be escaped outside and inside double-quotes */ ++#define SHELL_NEED_ESCAPE "\"\\`$" ++/* can be escaped or double-quoted */ ++#define SHELL_NEED_QUOTES SHELL_NEED_ESCAPE GLOB_CHARS "'()<>|&;" ++ + #define FORMAT_BYTES_MAX 8 + + #define ANSI_HIGHLIGHT_ON "\x1B[1;39m" diff --git a/0057-man-systemd.netdev-make-it-clear-that-we-do-not-touc.patch b/0057-man-systemd.netdev-make-it-clear-that-we-do-not-touc.patch new file mode 100644 index 0000000..3d99e39 --- /dev/null +++ b/0057-man-systemd.netdev-make-it-clear-that-we-do-not-touc.patch @@ -0,0 +1,30 @@ +From f096a48e2195d0189742f8ed2e61cb0091d8fc62 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Mon, 14 Jul 2014 12:25:42 +0200 +Subject: [PATCH] man: systemd.netdev - make it clear that we do not touch + preexisting netdevs + +We will happily use bridges/bonds as master devices, but we will not change their settings if they were created by +someone else. + +(cherry picked from commit 7c1cff4ff79f3121189403a8c1b7c350925b3aaa) +--- + man/systemd.netdev.xml | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml +index 857221fdb0..347f80e692 100644 +--- a/man/systemd.netdev.xml ++++ b/man/systemd.netdev.xml +@@ -60,7 +60,10 @@ + + Virtual Network Device files must have the extension + .netdev; other extensions are ignored. Virtual +- network devices are created as soon as networkd is started. ++ network devices are created as soon as networkd is started. If a netdev ++ with the specified name already exists, networkd will use that as-is ++ rather than create its own. Note that the settings of the pre-existing ++ netdev will not be changed by networkd. + + The .netdev files are read from the files located in the + system network directory /usr/lib/systemd/network, diff --git a/0058-rules-consistently-use-instead-of.patch b/0058-rules-consistently-use-instead-of.patch new file mode 100644 index 0000000..7e8fd6a --- /dev/null +++ b/0058-rules-consistently-use-instead-of.patch @@ -0,0 +1,67 @@ +From 9221fcfe485a71dd206691f25fc7db3b02076bf3 Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Tue, 15 Jul 2014 02:04:47 +0200 +Subject: [PATCH] rules: consistently use "?*" instead of "*?" + +(cherry picked from commit 64dfe7b74446bd56e2d0e1588f900372ac13ae42) +--- + rules/99-systemd.rules.in | 2 +- + src/login/70-uaccess.rules | 12 ++++++------ + 2 files changed, 7 insertions(+), 7 deletions(-) + +diff --git a/rules/99-systemd.rules.in b/rules/99-systemd.rules.in +index db72373c16..c3ef81b178 100644 +--- a/rules/99-systemd.rules.in ++++ b/rules/99-systemd.rules.in +@@ -43,7 +43,7 @@ SUBSYSTEM=="net", KERNEL!="lo", TAG+="systemd", ENV{SYSTEMD_ALIAS}+="/sys/subsys + SUBSYSTEM=="bluetooth", TAG+="systemd", ENV{SYSTEMD_ALIAS}+="/sys/subsystem/bluetooth/devices/%k" + + SUBSYSTEM=="bluetooth", TAG+="systemd", ENV{SYSTEMD_WANTS}+="bluetooth.target" +-ENV{ID_SMARTCARD_READER}=="*?", TAG+="systemd", ENV{SYSTEMD_WANTS}+="smartcard.target" ++ENV{ID_SMARTCARD_READER}=="?*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="smartcard.target" + SUBSYSTEM=="sound", KERNEL=="card*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sound.target" + + SUBSYSTEM=="printer", TAG+="systemd", ENV{SYSTEMD_WANTS}+="printer.target" +diff --git a/src/login/70-uaccess.rules b/src/login/70-uaccess.rules +index e1cf897acd..57f619d5eb 100644 +--- a/src/login/70-uaccess.rules ++++ b/src/login/70-uaccess.rules +@@ -12,7 +12,7 @@ ENV{MAJOR}=="", GOTO="uaccess_end" + SUBSYSTEM=="usb", ENV{ID_USB_INTERFACES}=="*:060101:*", TAG+="uaccess" + + # Digicams with proprietary protocol +-ENV{ID_GPHOTO2}=="*?", TAG+="uaccess" ++ENV{ID_GPHOTO2}=="?*", TAG+="uaccess" + + # SCSI and USB scanners + ENV{libsane_matched}=="yes", TAG+="uaccess" +@@ -49,13 +49,13 @@ SUBSYSTEM=="drm", KERNEL=="card*|renderD*", TAG+="uaccess" + SUBSYSTEM=="misc", KERNEL=="kvm", TAG+="uaccess" + + # smart-card readers +-ENV{ID_SMARTCARD_READER}=="*?", TAG+="uaccess" ++ENV{ID_SMARTCARD_READER}=="?*", TAG+="uaccess" + + # (USB) authentication devices +-ENV{ID_SECURITY_TOKEN}=="*?", TAG+="uaccess" ++ENV{ID_SECURITY_TOKEN}=="?*", TAG+="uaccess" + + # PDA devices +-ENV{ID_PDA}=="*?", TAG+="uaccess" ++ENV{ID_PDA}=="?*", TAG+="uaccess" + + # Programmable remote control + ENV{ID_REMOTE_CONTROL}=="1", TAG+="uaccess" +@@ -64,10 +64,10 @@ ENV{ID_REMOTE_CONTROL}=="1", TAG+="uaccess" + SUBSYSTEM=="input", ENV{ID_INPUT_JOYSTICK}=="?*", TAG+="uaccess" + + # color measurement devices +-ENV{COLOR_MEASUREMENT_DEVICE}=="*?", TAG+="uaccess" ++ENV{COLOR_MEASUREMENT_DEVICE}=="?*", TAG+="uaccess" + + # DDC/CI device, usually high-end monitors such as the DreamColor +-ENV{DDC_DEVICE}=="*?", TAG+="uaccess" ++ENV{DDC_DEVICE}=="?*", TAG+="uaccess" + + # media player raw devices (for user-mode drivers, Android SDK, etc.) + SUBSYSTEM=="usb", ENV{ID_MEDIA_PLAYER}=="?*", TAG+="uaccess" diff --git a/0059-timesyncd-suppress-resync-at-system-time-change-when.patch b/0059-timesyncd-suppress-resync-at-system-time-change-when.patch new file mode 100644 index 0000000..49ce70a --- /dev/null +++ b/0059-timesyncd-suppress-resync-at-system-time-change-when.patch @@ -0,0 +1,31 @@ +From 5c34306656dbcc8932f3dd992cf7e3e1d78c8a80 Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Tue, 15 Jul 2014 02:24:35 +0200 +Subject: [PATCH] timesyncd: suppress resync at system time change when not + connected + +Jul 04 17:46:03 orchid systemd[1]: Starting Network Time Synchronization... +Jul 04 17:46:03 orchid systemd[1]: Started Network Time Synchronization. +Jul 04 17:46:22 orchid systemd-timesyncd[301]: System time changed. Resyncing. +Jul 04 17:46:22 orchid systemd-timesyncd[301]: Assertion 'm->current_server_name' + +https://bugs.freedesktop.org/show_bug.cgi?id=80932 +(cherry picked from commit afc7b1b9c170b9d23a3d91367e00f33b2ee2e89e) +--- + src/timesync/timesyncd.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/timesync/timesyncd.c b/src/timesync/timesyncd.c +index 27f6b2d226..9bc773ce5f 100644 +--- a/src/timesync/timesyncd.c ++++ b/src/timesync/timesyncd.c +@@ -331,6 +331,9 @@ static int manager_clock_watch(sd_event_source *source, int fd, uint32_t revents + /* rearm timer */ + manager_clock_watch_setup(m); + ++ if (!m->current_server_address) ++ return 0; ++ + /* skip our own jumps */ + if (m->jumped) { + m->jumped = false; diff --git a/0060-timesyncd-only-listen-to-clock-changes-when-connecte.patch b/0060-timesyncd-only-listen-to-clock-changes-when-connecte.patch new file mode 100644 index 0000000..16b8880 --- /dev/null +++ b/0060-timesyncd-only-listen-to-clock-changes-when-connecte.patch @@ -0,0 +1,45 @@ +From 1e673f08f3299f4704e26cb983f046091881dc01 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 15 Jul 2014 09:52:17 -0400 +Subject: [PATCH] timesyncd: only listen to clock changes when connected + +This reverts previous commit and applies a different fix. + +manager_clock_watch() callback calls manager_send_request() to kick +off a resync. We can only do that when we're actually connected to +something. It is not useful to setup the callback from manager_new(). + +Now the callback will be dropped in manager_connect() and requested +in manager_begin(). + +https://bugs.freedesktop.org/show_bug.cgi?id=80932 +(cherry picked from commit c566ee3253132cc2ec37ed04c5bccbadf8e60c58) +--- + src/timesync/timesyncd.c | 7 ------- + 1 file changed, 7 deletions(-) + +diff --git a/src/timesync/timesyncd.c b/src/timesync/timesyncd.c +index 9bc773ce5f..19af9f9b61 100644 +--- a/src/timesync/timesyncd.c ++++ b/src/timesync/timesyncd.c +@@ -331,9 +331,6 @@ static int manager_clock_watch(sd_event_source *source, int fd, uint32_t revents + /* rearm timer */ + manager_clock_watch_setup(m); + +- if (!m->current_server_address) +- return 0; +- + /* skip our own jumps */ + if (m->jumped) { + m->jumped = false; +@@ -1047,10 +1044,6 @@ static int manager_new(Manager **ret) { + if (r < 0) + return r; + +- r = manager_clock_watch_setup(m); +- if (r < 0) +- return r; +- + *ret = m; + m = NULL; + diff --git a/0061-shell-completion-restore-completion-for-p.patch b/0061-shell-completion-restore-completion-for-p.patch new file mode 100644 index 0000000..26a9545 --- /dev/null +++ b/0061-shell-completion-restore-completion-for-p.patch @@ -0,0 +1,140 @@ +From 49323e421a0fad064e3258ca26ae8c80a3386666 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 14 Jul 2014 19:24:46 -0400 +Subject: [PATCH] shell-completion: restore completion for -p + +It was broken since systemd was moved out of /bin. + +For zsh it was never there. + +(cherry picked from commit c0a67aef31bb9716617ffe150ca8be19c5df203e) +--- + Makefile.am | 19 +++++++++++++++++-- + shell-completion/bash/.gitignore | 1 + + shell-completion/bash/{systemctl => systemctl.in} | 4 ++-- + shell-completion/zsh/.gitignore | 1 + + shell-completion/zsh/{_systemctl => _systemctl.in} | 15 ++++++++++++++- + 5 files changed, 35 insertions(+), 5 deletions(-) + create mode 100644 shell-completion/bash/.gitignore + rename shell-completion/bash/{systemctl => systemctl.in} (98%) + create mode 100644 shell-completion/zsh/.gitignore + rename shell-completion/zsh/{_systemctl => _systemctl.in} (95%) + +diff --git a/Makefile.am b/Makefile.am +index 025461b497..9847ff50bc 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -383,7 +383,6 @@ systemgenerator_PROGRAMS = \ + dist_bashcompletion_DATA = \ + shell-completion/bash/busctl \ + shell-completion/bash/journalctl \ +- shell-completion/bash/systemctl \ + shell-completion/bash/systemd-analyze \ + shell-completion/bash/systemd-cat \ + shell-completion/bash/systemd-cgls \ +@@ -395,8 +394,10 @@ dist_bashcompletion_DATA = \ + shell-completion/bash/udevadm \ + shell-completion/bash/kernel-install + ++nodist_bashcompletion_DATA = \ ++ shell-completion/bash/systemctl ++ + dist_zshcompletion_DATA = \ +- shell-completion/zsh/_systemctl \ + shell-completion/zsh/_journalctl \ + shell-completion/zsh/_udevadm \ + shell-completion/zsh/_kernel-install \ +@@ -407,6 +408,17 @@ dist_zshcompletion_DATA = \ + shell-completion/zsh/_systemd-delta \ + shell-completion/zsh/_systemd + ++nodist_zshcompletion_DATA = \ ++ shell-completion/zsh/_systemctl ++ ++EXTRA_DIST += \ ++ shell-completion/bash/systemctl.in \ ++ shell-completion/zsh/_systemctl.in ++ ++CLEANFILES += \ ++ $(nodist_bashcompletion_DATA) \ ++ $(nodist_zshcompletion_DATA) ++ + dist_sysctl_DATA = \ + sysctl.d/50-default.conf + +@@ -5196,6 +5208,9 @@ src/core/macros.%: src/core/macros.%.in + src/%.policy.in: src/%.policy.in.in + $(SED_PROCESS) + ++shell-completion/%: shell-completion/%.in ++ $(SED_PROCESS) ++ + %.rules: %.rules.in + $(SED_PROCESS) + +diff --git a/shell-completion/bash/.gitignore b/shell-completion/bash/.gitignore +new file mode 100644 +index 0000000000..016e09d1e7 +--- /dev/null ++++ b/shell-completion/bash/.gitignore +@@ -0,0 +1 @@ ++/systemctl +diff --git a/shell-completion/bash/systemctl b/shell-completion/bash/systemctl.in +similarity index 98% +rename from shell-completion/bash/systemctl +rename to shell-completion/bash/systemctl.in +index e1c842006e..4beec4e13f 100644 +--- a/shell-completion/bash/systemctl ++++ b/shell-completion/bash/systemctl.in +@@ -24,8 +24,8 @@ __systemctl() { + + __systemd_properties() { + local mode=$1 +- { __systemctl -a $mode show; +- systemd --dump-configuration-items; } | ++ { __systemctl $mode show --all; ++ @rootlibexecdir@/systemd --dump-configuration-items; } | + while IFS='=' read -r key value; do + [[ $value ]] && echo "$key" + done +diff --git a/shell-completion/zsh/.gitignore b/shell-completion/zsh/.gitignore +new file mode 100644 +index 0000000000..75f13ad6d1 +--- /dev/null ++++ b/shell-completion/zsh/.gitignore +@@ -0,0 +1 @@ ++/_systemctl +diff --git a/shell-completion/zsh/_systemctl b/shell-completion/zsh/_systemctl.in +similarity index 95% +rename from shell-completion/zsh/_systemctl +rename to shell-completion/zsh/_systemctl.in +index b6cf664587..d9b8d1c0e3 100644 +--- a/shell-completion/zsh/_systemctl ++++ b/shell-completion/zsh/_systemctl.in +@@ -301,12 +301,25 @@ _unit_types() { + _values -s , "${_types[@]}" + } + ++_unit_properties() { ++ if ( [[ ${+_sys_all_properties} -eq 0 ]] || _cache_invalid SYS_ALL_PROPERTIES ) && ++ ! _retrieve_cache SYS_ALL_PROPERTIES; ++ then ++ _sys_all_properties=( $( {__systemctl show --all; ++ @rootlibexecdir@/systemd --dump-configuration-items; } | { ++ while IFS='=' read -r a b; do [ -n "$b" ] && echo "$a"; done ++ }) ) ++ _store_cache SYS_ALL_PROPRTIES _sys_all_properties ++ fi ++ _values -s , "${_sys_all_properties[@]}" ++} ++ + _arguments -s \ + {-h,--help}'[Show help]' \ + '--version[Show package version]' \ + {-t+,--type=}'[List only units of a particular type]:unit type:_unit_types' \ + '--state=[Display units in the specifyied state]:unit state:_unit_states' \ +- \*{-p+,--property=}'[Show only properties by specific name]:unit property' \ ++ {-p+,--property=}'[Show only properties by specific name]:unit property:_unit_properties' \ + {-a,--all}'[Show all units/properties, including dead/empty ones]' \ + '--reverse[Show reverse dependencies]' \ + '--after[Show units ordered after]' \ diff --git a/0062-core-fix-oneshot-service-resource-control.patch b/0062-core-fix-oneshot-service-resource-control.patch new file mode 100644 index 0000000..057e4b0 --- /dev/null +++ b/0062-core-fix-oneshot-service-resource-control.patch @@ -0,0 +1,27 @@ +From 5ad965069574badd35f79ecb8e6def133de8bd8b Mon Sep 17 00:00:00 2001 +From: Umut Tezduyar Lindskog +Date: Tue, 15 Jul 2014 08:36:29 +0200 +Subject: [PATCH] core: fix oneshot service resource control + +Oneshot services's cgroup is removed when the service +exits. An assert is hit otherwise. + +(cherry picked from commit 285cd771cbe275265e165bdb5650b92b31eeab47) +--- + src/core/manager.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/core/manager.c b/src/core/manager.c +index 0cb2044325..edcde31ec1 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -2539,7 +2539,8 @@ void manager_check_finished(Manager *m) { + } + + SET_FOREACH(u, m->startup_units, i) +- cgroup_context_apply(unit_get_cgroup_context(u), unit_get_cgroup_mask(u), u->cgroup_path, manager_state(m)); ++ if (u->cgroup_path) ++ cgroup_context_apply(unit_get_cgroup_context(u), unit_get_cgroup_mask(u), u->cgroup_path, manager_state(m)); + + bus_manager_send_finished(m, firmware_usec, loader_usec, kernel_usec, initrd_usec, userspace_usec, total_usec); + diff --git a/0063-rules-uaccess-add-ID_SOFTWARE_RADIO.patch b/0063-rules-uaccess-add-ID_SOFTWARE_RADIO.patch new file mode 100644 index 0000000..e25ac9d --- /dev/null +++ b/0063-rules-uaccess-add-ID_SOFTWARE_RADIO.patch @@ -0,0 +1,44 @@ +From 4e0d085ff52a7d7858a30c651e37b18f3e92618b Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Tue, 15 Jul 2014 17:35:53 +0200 +Subject: [PATCH] rules: uaccess - add ID_SOFTWARE_RADIO + +On Tue, Jul 15, 2014 at 1:52 PM, Alick Zhao wrote: +>>> +>>> So maybe ID_SOFTWARE_RADIO ? +>> +>> Hmm, SDR is more a term for a generic technology than for a device +>> class. To me it does not really sound like an administrator would know +>> what this is. +>> +>> What exactly is the device or subsystem you want to make accessible to +>> locally logged-in users only? +> +> Initially it is bladeRF, but many more are of interest: USRP, rtl-sdr, +> HackRF, ... [1] +> +> I agree an administrator might not know what SDR is, since it is +> currently still not widely known, and makes sense only for amateurs +> and researchers. But as a SDR fan, I see many new SDR peripherals +> are created recently, and expect to see more. So a generic ID seems +> reasonable to me. +> +> [1] http://en.wikipedia.org/wiki/List_of_software-defined_radios + +(cherry picked from commit 30632d97d9d68c8202e562f34afae8f8d6e9c377) +--- + src/login/70-uaccess.rules | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/login/70-uaccess.rules b/src/login/70-uaccess.rules +index 57f619d5eb..694df2cfc8 100644 +--- a/src/login/70-uaccess.rules ++++ b/src/login/70-uaccess.rules +@@ -72,4 +72,7 @@ ENV{DDC_DEVICE}=="?*", TAG+="uaccess" + # media player raw devices (for user-mode drivers, Android SDK, etc.) + SUBSYSTEM=="usb", ENV{ID_MEDIA_PLAYER}=="?*", TAG+="uaccess" + ++# software-defined radio communication devices ++ENV{ID_SOFTWARE_RADIO}=="?*", TAG+="uaccess" ++ + LABEL="uaccess_end" diff --git a/0064-journal-allow-files-with-no-data-whatsoever.patch b/0064-journal-allow-files-with-no-data-whatsoever.patch new file mode 100644 index 0000000..0c8382b --- /dev/null +++ b/0064-journal-allow-files-with-no-data-whatsoever.patch @@ -0,0 +1,32 @@ +From ae1d412f96829802688194e6957f75d37da9d7e9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 30 Mar 2014 14:20:34 -0400 +Subject: [PATCH] journal: allow files with no data whatsoever + +If a file was opened for writing, and then closed immediately without +actually writing any entries, on subsequent opening, it would be +considered "corrupted". This should be totally fine, and even in +read mode, an empty file can become non-empty later on. + +(cherry picked from commit b3306e9c3c1e036396bc6bf74555eecea3f45ad9) +--- + src/journal/journal-file.c | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c +index b3b1ffc3c0..ef54af4558 100644 +--- a/src/journal/journal-file.c ++++ b/src/journal/journal-file.c +@@ -271,12 +271,6 @@ static int journal_file_verify_header(JournalFile *f) { + !VALID64(le64toh(f->header->entry_array_offset))) + return -ENODATA; + +- if (le64toh(f->header->data_hash_table_offset) < le64toh(f->header->header_size) || +- le64toh(f->header->field_hash_table_offset) < le64toh(f->header->header_size) || +- le64toh(f->header->tail_object_offset) < le64toh(f->header->header_size) || +- le64toh(f->header->entry_array_offset) < le64toh(f->header->header_size)) +- return -ENODATA; +- + if (f->writable) { + uint8_t state; + sd_id128_t machine_id; diff --git a/0065-units-serial-getty-.service-use-the-default-RestartS.patch b/0065-units-serial-getty-.service-use-the-default-RestartS.patch new file mode 100644 index 0000000..fa1cf0c --- /dev/null +++ b/0065-units-serial-getty-.service-use-the-default-RestartS.patch @@ -0,0 +1,33 @@ +From 89b958ef6a43400d1f7b25c58b02f4b5c3c59b36 Mon Sep 17 00:00:00 2001 +From: Michael Olbrich +Date: Tue, 15 Jul 2014 18:28:10 +0200 +Subject: [PATCH] units/serial-getty@.service: use the default RestartSec + +For pluggable ttys such as USB serial devices, the getty is restarted +and exits in a loop until the remove event reaches systemd. Under +certain circumstances the restart loop can overload the system in a +way that prevents the remove event from reaching systemd for a long +time (e.g. at least several minutes on a small embedded system). + +Use the default RestartSec to prevent the restart loop from +overloading the system. Serial gettys are interactive units, so +waiting an extra 100ms really doesn't make a difference anyways +compared to the time it takes the user to log in. + +(cherry picked from commit 4bf04322b8b7ecca4f3d65cfc642d0ac16356129) +--- + units/serial-getty@.service.m4 | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/units/serial-getty@.service.m4 b/units/serial-getty@.service.m4 +index 4ac51e768d..4522d0d2be 100644 +--- a/units/serial-getty@.service.m4 ++++ b/units/serial-getty@.service.m4 +@@ -25,7 +25,6 @@ IgnoreOnIsolate=yes + ExecStart=-/sbin/agetty --keep-baud 115200,38400,9600 %I $TERM + Type=idle + Restart=always +-RestartSec=0 + UtmpIdentifier=%I + TTYPath=/dev/%I + TTYReset=yes diff --git a/0066-build-sys-don-t-move-libgudev-to-lib.patch b/0066-build-sys-don-t-move-libgudev-to-lib.patch new file mode 100644 index 0000000..30a1700 --- /dev/null +++ b/0066-build-sys-don-t-move-libgudev-to-lib.patch @@ -0,0 +1,33 @@ +From c46cee9156e8785fc70e8528d6deb402bef06ca0 Mon Sep 17 00:00:00 2001 +From: Michael Biebl +Date: Wed, 16 Jul 2014 12:09:47 +0200 +Subject: [PATCH] build-sys: don't move libgudev to /lib + +It depends on libgobject and libgmodule which are installed in /usr/lib. + +(cherry picked from commit 5c059d2ead0787a90732d27ed1b485d236abf641) +--- + Makefile.am | 10 ---------- + 1 file changed, 10 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 9847ff50bc..2b0c855da2 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -3338,16 +3338,6 @@ typelibs_DATA = \ + + CLEANFILES += $(gir_DATA) $(typelibs_DATA) + endif # HAVE_INTROSPECTION +- +-# move lib from $(libdir) to $(rootlibdir) and update devel link, if needed +-libgudev-install-hook: +- libname=libgudev-1.0.so && $(move-to-rootlibdir) +- +-libgudev-uninstall-hook: +- rm -f $(DESTDIR)$(rootlibdir)/libgudev-1.0.so* +- +-INSTALL_EXEC_HOOKS += libgudev-install-hook +-UNINSTALL_EXEC_HOOKS += libgudev-uninstall-hook + endif + + EXTRA_DIST += \ diff --git a/0067-shared-include-stdbool.h-in-mkdir.h.patch b/0067-shared-include-stdbool.h-in-mkdir.h.patch new file mode 100644 index 0000000..a61177a --- /dev/null +++ b/0067-shared-include-stdbool.h-in-mkdir.h.patch @@ -0,0 +1,22 @@ +From a6874d3be0e08b17cc62b84e4dde2abebe035d81 Mon Sep 17 00:00:00 2001 +From: Sjoerd Simons +Date: Wed, 16 Jul 2014 12:09:56 +0200 +Subject: [PATCH] shared: include stdbool.h in mkdir.h + +(cherry picked from commit 4e4877d96c8afd0818176a472080986bbf28ea3a) +--- + src/shared/mkdir.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/shared/mkdir.h b/src/shared/mkdir.h +index d15ede6064..dd5b41ec6f 100644 +--- a/src/shared/mkdir.h ++++ b/src/shared/mkdir.h +@@ -22,6 +22,7 @@ + along with systemd; If not, see . + ***/ + ++#include + #include + + int mkdir_safe(const char *path, mode_t mode, uid_t uid, gid_t gid); diff --git a/0068-missing.h-add-IFLA_MACVLAN_FLAGS.patch b/0068-missing.h-add-IFLA_MACVLAN_FLAGS.patch new file mode 100644 index 0000000..88ebc54 --- /dev/null +++ b/0068-missing.h-add-IFLA_MACVLAN_FLAGS.patch @@ -0,0 +1,48 @@ +From 5a263a734350a1f2de6b3e6ac8813b51280a9794 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 16 Jul 2014 16:44:45 -0400 +Subject: [PATCH] missing.h: add IFLA_MACVLAN_FLAGS + +Now we are getting into kernel < 3.4 territory... + +https://bugs.freedesktop.org/show_bug.cgi?id=80095 +(cherry picked from commit 75616a1332aff00d27db713cda3bd93c508a5b59) +--- + configure.ac | 3 ++- + src/shared/missing.h | 9 +++++++++ + 2 files changed, 11 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index ae88382e21..df6b3571d1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -310,7 +310,8 @@ AC_CHECK_DECLS([gettid, pivot_root, name_to_handle_at, setns, LO_FLAGS_PARTSCAN] + #include + ]]) + +-AC_CHECK_DECLS([IFLA_PHYS_PORT_ID, ++AC_CHECK_DECLS([IFLA_MACVLAN_FLAGS, ++ IFLA_PHYS_PORT_ID, + IFLA_BOND_AD_INFO, + IFLA_VLAN_PROTOCOL, + IFLA_VXLAN_LOCAL6, +diff --git a/src/shared/missing.h b/src/shared/missing.h +index f129f0b2d3..818d704f92 100644 +--- a/src/shared/missing.h ++++ b/src/shared/missing.h +@@ -371,6 +371,15 @@ static inline int setns(int fd, int nstype) { + #define LOOP_CTL_GET_FREE 0x4C82 + #endif + ++#if !HAVE_DECL_IFLA_MACVLAN_FLAGS ++#define IFLA_MACVLAN_UNSPEC 0 ++#define IFLA_MACVLAN_MODE 1 ++#define IFLA_MACVLAN_FLAGS 2 ++#define __IFLA_MACVLAN_MAX 3 ++ ++#define IFLA_MACVLAN_MAX (__IFLA_MACVLAN_MAX - 1) ++#endif ++ + #if !HAVE_DECL_IFLA_PHYS_PORT_ID + #undef IFLA_PROMISCUITY + #define IFLA_PROMISCUITY 30 diff --git a/0069-man-document-yearly-and-annually-in-systemd.time-7.patch b/0069-man-document-yearly-and-annually-in-systemd.time-7.patch new file mode 100644 index 0000000..ee6f890 --- /dev/null +++ b/0069-man-document-yearly-and-annually-in-systemd.time-7.patch @@ -0,0 +1,47 @@ +From 6941ea3fb076b8abc3e4e1759f448e2532ed14a5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 16 Jul 2014 22:17:29 -0400 +Subject: [PATCH] man: document yearly and annually in systemd.time(7) + +https://bugs.freedesktop.org/show_bug.cgi?id=81158 +(cherry picked from commit 8c275eef38bf7e3e592e4cb35a497522d1f15bb6) +--- + man/systemd.time.xml | 18 ++++++++++++------ + 1 file changed, 12 insertions(+), 6 deletions(-) + +diff --git a/man/systemd.time.xml b/man/systemd.time.xml +index 0706cdf54a..02431a5a1e 100644 +--- a/man/systemd.time.xml ++++ b/man/systemd.time.xml +@@ -243,12 +243,16 @@ + + The special expressions + hourly, daily, +- monthly and weekly +- may be used as calendar events which refer to +- *-*-* *:00:00, *-*-* +- 00:00:00, *-*-01 00:00:00 and +- Mon *-*-* 00:00:00, +- respectively. ++ monthly, weekly, ++ and yearly or ++ annually may be used as calendar ++ events which refer to ++ *-*-* *:00:00, ++ *-*-* 00:00:00, ++ *-*-01 00:00:00, ++ Mon *-*-* 00:00:00, and ++ *-01-01 00:00:00 respectively. ++ + + Examples for valid timestamps and their + normalized form: +@@ -277,6 +281,8 @@ Wed-Sat,Tue 12-10-15 1:2:3 → Tue-Sat 2012-10-15 01:02:03 + daily → *-*-* 00:00:00 + monthly → *-*-01 00:00:00 + weekly → Mon *-*-* 00:00:00 ++ yearly → *-01-01 00:00:00 ++ annually → *-01-01 00:00:00 + *:2/3 → *-*-* *:02/3:00 + + Calendar events are used by timer units, see diff --git a/0070-core-nicer-message-when-inotify-watches-are-exhauste.patch b/0070-core-nicer-message-when-inotify-watches-are-exhauste.patch new file mode 100644 index 0000000..f797a5f --- /dev/null +++ b/0070-core-nicer-message-when-inotify-watches-are-exhauste.patch @@ -0,0 +1,28 @@ +From fe85271fb6090e58b36e182ce3e20a388f0ca006 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 16 Jul 2014 22:52:53 -0400 +Subject: [PATCH] core: nicer message when inotify watches are exhausted + +inotify_add_watch returns ENOSPC, which translates to +"No space left on device", which is misleading. + +https://bugs.freedesktop.org/show_bug.cgi?id=73628 +(cherry picked from commit 18abe7bd3e13525b257da69ac49ff7841c289567) +--- + src/core/path.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/core/path.c b/src/core/path.c +index 20e454d96f..f54c77f6c3 100644 +--- a/src/core/path.c ++++ b/src/core/path.c +@@ -99,7 +99,8 @@ int path_spec_watch(PathSpec *s, sd_event_io_handler_t handler) { + break; + } + +- log_warning("Failed to add watch on %s: %m", s->path); ++ log_warning("Failed to add watch on %s: %s", s->path, ++ errno == ENOSPC ? "too many watches" : strerror(-r)); + r = -errno; + if (cut) + *cut = tmp; diff --git a/0071-detect-virt-Fix-Xen-domU-discovery.patch b/0071-detect-virt-Fix-Xen-domU-discovery.patch new file mode 100644 index 0000000..de03de5 --- /dev/null +++ b/0071-detect-virt-Fix-Xen-domU-discovery.patch @@ -0,0 +1,31 @@ +From be8dbe82ba453b40e119010454e30237e6d02b12 Mon Sep 17 00:00:00 2001 +From: Thomas Blume +Date: Thu, 17 Jul 2014 11:25:37 +0200 +Subject: [PATCH] detect-virt: Fix Xen domU discovery + +The conditional for detection xen virtualization contained a little mistake. +It is checking for i to be empty: 'if (!i) {', but it must check for cap instead, +because: 'cap = strsep(&i, ",")' will set cap to the discovered value and i to +the next value after the separator. +Hence, i would be empty, if there is only control_d in domcap, leading to a wrong +domU detection. + +https://bugs.freedesktop.org/show_bug.cgi?id=77271 +(cherry picked from commit a71516dfd1858f37712ef52a288bf5fb274383e0) +--- + src/shared/virt.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/virt.c b/src/shared/virt.c +index 774915f4be..20a8d7c5bf 100644 +--- a/src/shared/virt.c ++++ b/src/shared/virt.c +@@ -173,7 +173,7 @@ int detect_vm(const char **id) { + if (streq(cap, "control_d")) + break; + +- if (!i) { ++ if (!cap) { + _id = "xen"; + r = 1; + } diff --git a/0072-journal-reduce-test-journal-send-timeout-from-10s-to.patch b/0072-journal-reduce-test-journal-send-timeout-from-10s-to.patch new file mode 100644 index 0000000..29857b5 --- /dev/null +++ b/0072-journal-reduce-test-journal-send-timeout-from-10s-to.patch @@ -0,0 +1,27 @@ +From 918af53be96fe4284538ebf8eb4fac1aa8839529 Mon Sep 17 00:00:00 2001 +From: David Herrmann +Date: Fri, 18 Jul 2014 12:58:00 +0200 +Subject: [PATCH] journal: reduce test-journal-send timeout from 10s to 1s + +The sleep(10) in test-journal-send is quite aggressive. We need it only +for the journal to get our cgroup information. But even that information +is not vital to the test, so a sleep(1) should be just fine. + +(cherry picked from commit 037ee337f0f64bd35ced765f2e2d97f496d4e7c7) +--- + src/journal/test-journal-send.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/journal/test-journal-send.c b/src/journal/test-journal-send.c +index 3e986ed99a..45eb327609 100644 +--- a/src/journal/test-journal-send.c ++++ b/src/journal/test-journal-send.c +@@ -72,7 +72,7 @@ int main(int argc, char *argv[]) { + "N_CPUS=%li", sysconf(_SC_NPROCESSORS_ONLN), + NULL); + +- sleep(10); ++ sleep(1); + + return 0; + } diff --git a/0073-systemd-detect-virt-detect-s390-virtualization.patch b/0073-systemd-detect-virt-detect-s390-virtualization.patch new file mode 100644 index 0000000..dcd3f75 --- /dev/null +++ b/0073-systemd-detect-virt-detect-s390-virtualization.patch @@ -0,0 +1,71 @@ +From 4b41b0d24b5efe70a5d6a39ff7b1f6571a7315b5 Mon Sep 17 00:00:00 2001 +From: Thomas Blume +Date: Fri, 18 Jul 2014 09:13:36 -0400 +Subject: [PATCH] systemd-detect-virt: detect s390 virtualization + +A system that is running on a logical partition (LPAR) provided by +PR/SM has access to physical hardware (except CPU). It is true that +PR/SM abstracts the hardware, but only for sharing purposes. + +Details are statet at: + +http://publib.boulder.ibm.com/infocenter/eserver/v1r2/topic/eicaz/eicazzlpar.htm + +-->-- +In other words, PR/SM transforms physical resources into virtual resources so +that many logical partitions can share the same physical resources. +--<-- + +Still, from the OS point of view, the shared virtual resource is real +hardware. ConditionVirtualization must be set to false if the OS runs +directly on PR/SM (e.g. in an LPAR). + +[zj: reorder code so that variables are not allocated when #if-def is +false. Add commit message.] + +(cherry picked from commit f41925b4e442a34c93ad120ef1426c974a047ed1) +--- + man/systemd.unit.xml | 1 + + src/shared/virt.c | 17 +++++++++++++++++ + 2 files changed, 18 insertions(+) + +diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml +index f66c580a37..e66be4ee51 100644 +--- a/man/systemd.unit.xml ++++ b/man/systemd.unit.xml +@@ -995,6 +995,7 @@ + virtualization solution, or one of + qemu, + kvm, ++ zvm, + vmware, + microsoft, + oracle, +diff --git a/src/shared/virt.c b/src/shared/virt.c +index 20a8d7c5bf..b4368952ff 100644 +--- a/src/shared/virt.c ++++ b/src/shared/virt.c +@@ -220,6 +220,23 @@ int detect_vm(const char **id) { + goto finish; + } + ++#if defined(__s390__) ++ { ++ _cleanup_free_ char *t = NULL; ++ ++ r = get_status_field("/proc/sysinfo", "VM00 Control Program:", &t); ++ if (r >= 0) { ++ if (streq(t, "z/VM")) ++ _id = "zvm"; ++ else ++ _id = "kvm"; ++ r = 1; ++ ++ goto finish; ++ } ++ } ++#endif ++ + r = 0; + + finish: diff --git a/0074-man-journal-add-note-about-sd_journal_get_cutoff_mon.patch b/0074-man-journal-add-note-about-sd_journal_get_cutoff_mon.patch new file mode 100644 index 0000000..608cefa --- /dev/null +++ b/0074-man-journal-add-note-about-sd_journal_get_cutoff_mon.patch @@ -0,0 +1,116 @@ +From 634a6893abd524b5ccae0c9b8cd0957fa00abb24 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 18 Jul 2014 21:44:36 -0400 +Subject: [PATCH] man,journal: add note about + sd_journal_get_cutoff_monotonic_usec return value + +Also modify the function itself to be a bit simpler to read. + +(cherry picked from commit 1651e2c61e544de9ca947c8b3202552b1272ef57) +--- + man/sd_journal_get_cutoff_realtime_usec.xml | 36 ++++++++++++++++++----------- + src/journal/sd-journal.c | 16 ++++++------- + 2 files changed, 31 insertions(+), 21 deletions(-) + +diff --git a/man/sd_journal_get_cutoff_realtime_usec.xml b/man/sd_journal_get_cutoff_realtime_usec.xml +index 6df4b26e6f..ef987d85b0 100644 +--- a/man/sd_journal_get_cutoff_realtime_usec.xml ++++ b/man/sd_journal_get_cutoff_realtime_usec.xml +@@ -74,25 +74,29 @@ + Description + + sd_journal_get_cutoff_realtime_usec() +- gets the realtime (wallclock) timestamps of the first +- and last entries accessible in the journal. It takes +- three arguments: the journal context object and two +- pointers to 64-bit unsigned integers to store the +- timestamps in. The timestamps are in microseconds +- since the epoch, ++ retrieves the realtime (wallclock) timestamps of the ++ first and last entries accessible in the journal. It ++ takes three arguments: the journal context object ++ j and two pointers ++ from and ++ to pointing at 64-bit unsigned ++ integers to store the timestamps in. The timestamps ++ are in microseconds since the epoch, + i.e. CLOCK_REALTIME. Either one + of the two timestamp arguments may be passed as + NULL in case the timestamp is not + needed, but not both. + + sd_journal_get_cutoff_monotonic_usec() +- gets the monotonic timestamps of the first and last +- entries accessible in the journal. It takes three +- arguments: the journal context object, a 128-bit +- identifier for the boot, and two pointers to 64-bit +- unsigned integers to store the timestamps. The +- timestamps are in microseconds since boot-up of the +- specific boot, ++ retrieves the monotonic timestamps of the first and ++ last entries accessible in the journal. It takes three ++ arguments: the journal context object ++ j, a 128-bit identifier for the ++ boot boot_id, and two pointers ++ to 64-bit unsigned integers to store the timestamps, ++ from and ++ to. The timestamps are in ++ microseconds since boot-up of the specific boot, + i.e. CLOCK_MONOTONIC. Since the + monotonic clock begins new with every reboot it only + defines a well-defined point in time when used +@@ -113,6 +117,12 @@ + sd_journal_get_cutoff_monotonic_usec() + return 1 on success, 0 if not suitable entries are in + the journal or a negative errno-style error code. ++ ++ Locations pointed to by parameters ++ from and ++ to will be set only if the ++ return value is positive, and obviously, the ++ parameters are non-null. + + + +diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c +index ca805f83fe..15dae90925 100644 +--- a/src/journal/sd-journal.c ++++ b/src/journal/sd-journal.c +@@ -2390,7 +2390,7 @@ _public_ int sd_journal_get_cutoff_realtime_usec(sd_journal *j, uint64_t *from, + _public_ int sd_journal_get_cutoff_monotonic_usec(sd_journal *j, sd_id128_t boot_id, uint64_t *from, uint64_t *to) { + Iterator i; + JournalFile *f; +- bool first = true; ++ bool found = false; + int r; + + assert_return(j, -EINVAL); +@@ -2409,21 +2409,21 @@ _public_ int sd_journal_get_cutoff_monotonic_usec(sd_journal *j, sd_id128_t boot + if (r == 0) + continue; + +- if (first) { ++ if (found) { + if (from) +- *from = fr; ++ *from = MIN(fr, *from); + if (to) +- *to = t; +- first = false; ++ *to = MAX(t, *to); + } else { + if (from) +- *from = MIN(fr, *from); ++ *from = fr; + if (to) +- *to = MAX(t, *to); ++ *to = t; ++ found = true; + } + } + +- return first ? 0 : 1; ++ return found; + } + + void journal_print_header(sd_journal *j) { diff --git a/0075-Be-more-verbose-when-bind-or-listen-fails.patch b/0075-Be-more-verbose-when-bind-or-listen-fails.patch new file mode 100644 index 0000000..bb1c8e7 --- /dev/null +++ b/0075-Be-more-verbose-when-bind-or-listen-fails.patch @@ -0,0 +1,106 @@ +From 1d9614d1e6086b6b5c0e08ebdb4df3c66d59ab6f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 3 Mar 2014 19:49:40 -0500 +Subject: [PATCH] Be more verbose when bind or listen fails + +Also be more verbose in devnode_acl_all(). + +(cherry picked from commit 6b9732b2bf0499c5e4ea8a9d4f6051d98033f680) +--- + src/core/manager.c | 2 +- + src/journal/journald-native.c | 2 +- + src/journal/journald-stream.c | 4 ++-- + src/journal/journald-syslog.c | 2 +- + src/login/logind-acl.c | 5 ++++- + src/shared/ask-password-api.c | 2 +- + 6 files changed, 10 insertions(+), 7 deletions(-) + +diff --git a/src/core/manager.c b/src/core/manager.c +index edcde31ec1..9b754d8f02 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -554,7 +554,7 @@ static int manager_setup_notify(Manager *m) { + strncpy(sa.un.sun_path, m->notify_socket, sizeof(sa.un.sun_path)-1); + r = bind(fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + strlen(sa.un.sun_path)); + if (r < 0) { +- log_error("bind() failed: %m"); ++ log_error("bind(@%s) failed: %m", sa.un.sun_path+1); + return -errno; + } + +diff --git a/src/journal/journald-native.c b/src/journal/journald-native.c +index c54f6475d3..666cbd2102 100644 +--- a/src/journal/journald-native.c ++++ b/src/journal/journald-native.c +@@ -387,7 +387,7 @@ int server_open_native_socket(Server*s) { + + r = bind(s->native_fd, &sa.sa, offsetof(union sockaddr_union, un.sun_path) + strlen(sa.un.sun_path)); + if (r < 0) { +- log_error("bind() failed: %m"); ++ log_error("bind(%s) failed: %m", sa.un.sun_path); + return -errno; + } + +diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c +index 89da150a60..8a983d84d9 100644 +--- a/src/journal/journald-stream.c ++++ b/src/journal/journald-stream.c +@@ -450,14 +450,14 @@ int server_open_stdout_socket(Server *s) { + + r = bind(s->stdout_fd, &sa.sa, offsetof(union sockaddr_union, un.sun_path) + strlen(sa.un.sun_path)); + if (r < 0) { +- log_error("bind() failed: %m"); ++ log_error("bind(%s) failed: %m", sa.un.sun_path); + return -errno; + } + + chmod(sa.un.sun_path, 0666); + + if (listen(s->stdout_fd, SOMAXCONN) < 0) { +- log_error("listen() failed: %m"); ++ log_error("listen(%s) failed: %m", sa.un.sun_path); + return -errno; + } + } else +diff --git a/src/journal/journald-syslog.c b/src/journal/journald-syslog.c +index b826e23c01..f97e0d2ba9 100644 +--- a/src/journal/journald-syslog.c ++++ b/src/journal/journald-syslog.c +@@ -441,7 +441,7 @@ int server_open_syslog_socket(Server *s) { + + r = bind(s->syslog_fd, &sa.sa, offsetof(union sockaddr_union, un.sun_path) + strlen(sa.un.sun_path)); + if (r < 0) { +- log_error("bind() failed: %m"); ++ log_error("bind(%s) failed: %m", sa.un.sun_path); + return -errno; + } + +diff --git a/src/login/logind-acl.c b/src/login/logind-acl.c +index 4bbeb64e8b..af7c352ce5 100644 +--- a/src/login/logind-acl.c ++++ b/src/login/logind-acl.c +@@ -277,7 +277,10 @@ int devnode_acl_all(struct udev *udev, + SET_FOREACH(n, nodes, i) { + int k; + +- log_debug("Fixing up ACLs at %s for seat %s", n, seat); ++ log_debug("Changing ACLs at %s for seat %s (uid "UID_FMT"→"UID_FMT"%s%s)", ++ n, seat, old_uid, new_uid, ++ del ? " del" : "", add ? " add" : ""); ++ + k = devnode_acl(n, flush, del, old_uid, add, new_uid); + if (k == -ENOENT) + log_debug("Device %s disappeared while setting ACLs", n); +diff --git a/src/shared/ask-password-api.c b/src/shared/ask-password-api.c +index 5997a03fb2..8d03f4ad09 100644 +--- a/src/shared/ask-password-api.c ++++ b/src/shared/ask-password-api.c +@@ -270,7 +270,7 @@ static int create_socket(char **name) { + + if (r < 0) { + r = -errno; +- log_error("bind() failed: %m"); ++ log_error("bind(%s) failed: %m", sa.un.sun_path); + goto fail; + } + diff --git a/0076-core-show-timeouts-when-watchdog-howls.patch b/0076-core-show-timeouts-when-watchdog-howls.patch new file mode 100644 index 0000000..161bab1 --- /dev/null +++ b/0076-core-show-timeouts-when-watchdog-howls.patch @@ -0,0 +1,31 @@ +From 51a993c94f70e1d18838dae05e10047a7b25c2f4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 27 Dec 2013 17:14:24 -0500 +Subject: [PATCH] core: show timeouts when watchdog howls + +(cherry picked from commit a7850c7d1339b490ac021ff82c2081285ea28503) +--- + src/core/service.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/src/core/service.c b/src/core/service.c +index 2d8aa01445..73a0e849e8 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2550,11 +2550,15 @@ static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *us + + static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) { + Service *s = SERVICE(userdata); ++ char t[FORMAT_TIMESPAN_MAX]; + + assert(s); + assert(source == s->watchdog_event_source); + +- log_error_unit(UNIT(s)->id, "%s watchdog timeout!", UNIT(s)->id); ++ log_error_unit(UNIT(s)->id, ++ "%s watchdog timeout (limit %s)!", ++ UNIT(s)->id, ++ format_timespan(t, sizeof(t), s->watchdog_usec, 1)); + service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_WATCHDOG); + + return 0; diff --git a/0077-escape-fix-return-code.patch b/0077-escape-fix-return-code.patch new file mode 100644 index 0000000..2f80590 --- /dev/null +++ b/0077-escape-fix-return-code.patch @@ -0,0 +1,21 @@ +From e8aa845bcf37e9ec7709c49af77c906332225c93 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 19 Jul 2014 15:35:48 -0400 +Subject: [PATCH] escape: fix return code + +(cherry picked from commit 91a81d93b569a98e04566eef1753a0956ba035f3) +--- + src/escape/escape.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/escape/escape.c b/src/escape/escape.c +index ae0c183eca..ba2fb4789f 100644 +--- a/src/escape/escape.c ++++ b/src/escape/escape.c +@@ -235,5 +235,5 @@ int main(int argc, char *argv[]) { + fputc('\n', stdout); + + finish: +- return r ? EXIT_FAILURE : EXIT_SUCCESS; ++ return r <= 0 ? EXIT_FAILURE : EXIT_SUCCESS; + } diff --git a/systemd.spec b/systemd.spec index c5c8de1..bae4ed3 100644 --- a/systemd.spec +++ b/systemd.spec @@ -16,7 +16,7 @@ Name: systemd Url: http://www.freedesktop.org/wiki/Software/systemd Version: 215 -Release: 3%{?gitcommit:.git%{gitcommit}}%{?dist} +Release: 4%{?gitcommit:.git%{gitcommit}}%{?dist} # For a breakdown of the licensing, see README License: LGPLv2+ and MIT and GPLv2+ Summary: A System and Service Manager @@ -39,6 +39,83 @@ Source6: yum-protect-systemd.conf # Patch series is available from http://cgit.freedesktop.org/systemd/systemd-stable/log/?h=v215-stable # GIT_DIR=~/src/systemd/.git git format-patch-ab -M -N --no-signature v215..v215-stable # i=1; for p in 0*patch;do printf "Patch%03d: %s\n" $i $p; ((i++));done +Patch001: 0001-man-add-link-to-Open-Group-Base-Specifications.patch +Patch002: 0002-sd-path-add-missing-header.patch +Patch003: 0003-architecture-remove-cris-from-uname-list.patch +Patch004: 0004-networkd-link-improve-link-tracking-logging.patch +Patch005: 0005-networkd-properly-track-addresses-when-first-added.patch +Patch006: 0006-man-netdev-mention-tun-and-tap.patch +Patch007: 0007-units-conditionalize-static-device-node-logic-on-CAP.patch +Patch008: 0008-units-conditionalize-configfs-and-debugfs-with-CAP_S.patch +Patch009: 0009-main-change-check-whether-etc-is-unpopulated-to-look.patch +Patch010: 0010-networkd-don-t-clear-dhcpv6-lease-timers-if-there-s-.patch +Patch011: 0011-networkd-accept-section-DHCP-in-systemd.network-file.patch +Patch012: 0012-machine-don-t-return-uninitialized-variable.patch +Patch013: 0013-sysusers-fix-uninitialized-warning.patch +Patch014: 0014-vconsole-setup-run-setfont-before-loadkeys.patch +Patch015: 0015-coredumpctl-show-a-useful-error-on-permission-proble.patch +Patch016: 0016-networkd-netdev-add-missing-refs.patch +Patch017: 0017-vconsole-setup-fix-inverted-error-messages.patch +Patch018: 0018-udev-link_config-ignore-errors-due-to-missing-MAC-ad.patch +Patch019: 0019-util-consider-0x7F-a-control-chracter-which-it-is-DE.patch +Patch020: 0020-main-explain-our-etc-empty-check-a-bit-in-a-comment.patch +Patch021: 0021-man-add-missing-archs-to-ConditionArchitecture-descr.patch +Patch022: 0022-man-chroot-jails-are-no-longer-detected-by-Condition.patch +Patch023: 0023-architecture-add-string-table-entries-for-mips-le-ar.patch +Patch024: 0024-service-flush-status-text-and-errno-values-each-time.patch +Patch025: 0025-base-filesystem.c-terminate-string-array-elements-wi.patch +Patch026: 0026-man-drop-references-to-the-priviliged-command-line-o.patch +Patch027: 0027-fstab-generator-add-comma-when-removed-option-is-in-.patch +Patch028: 0028-dropin-add-format-attribute-and-fix-a-wrong-caller.patch +Patch029: 0029-add-new-systemd-escape-tool.patch +Patch030: 0030-escape-beef-up-new-systemd-escape-tool.patch +Patch031: 0031-man-document-systemd-escape-1.patch +Patch032: 0032-shared-fix-format-string-for-usec_t-type.patch +Patch033: 0033-logind-allow-switching-to-unused-VTs-via-SwitchTo.patch +Patch034: 0034-systemctl-fix-visual-alignment-for-lines-prefixed-wi.patch +Patch035: 0035-accelerometer-Don-t-wait-for-new-data-from-the-senso.patch +Patch036: 0036-escape-move-to-rootbindir.patch +Patch037: 0037-journal-compress-improve-xz-compression-performance.patch +Patch038: 0038-hostnamed-add-a-new-chassis-type-for-watches.patch +Patch039: 0039-hostnamed-update-documentation-with-new-watch-chassi.patch +Patch040: 0040-units-make-ExecStopPost-action-part-of-ExecStart.patch +Patch041: 0041-util-don-t-consider-tabs-special-in-string_has_cc-an.patch +Patch042: 0042-util-fix-has-cc-check-and-add-test.patch +Patch043: 0043-sysusers-don-t-allow-user-names-longer-than-UT_NAMES.patch +Patch044: 0044-sysusers-don-t-allow-control-characters-in-gecos-fie.patch +Patch045: 0045-sysusers-allow-overrides-in-etc-and-run.patch +Patch046: 0046-man-document-x-systemd.device-timeout-for-crypttab.patch +Patch047: 0047-shell-completion-man-beef-up-chassis-completions-and.patch +Patch048: 0048-Revert-build-sys-include-PolicyKit-files-as-part-of-.patch +Patch049: 0049-build-sys-Do-not-distribute-generated-emergency.serv.patch +Patch050: 0050-sysusers-preserve-label-of-etc-passwd-group.patch +Patch051: 0051-Add-function-to-open-temp-files-in-selinux-mode.patch +Patch052: 0052-man-add-systemd-coredump-8-and-a-bunch-of-links.patch +Patch053: 0053-man-sysusers.d-correct-default-user-shell.patch +Patch054: 0054-man-mention-XDG_DATA_HOME-in-systemd.unit.patch +Patch055: 0055-path-lookup-don-t-make-.local-share-systemd-user-a-s.patch +Patch056: 0056-fileio-quote-more-shell-characters-in-envfiles.patch +Patch057: 0057-man-systemd.netdev-make-it-clear-that-we-do-not-touc.patch +Patch058: 0058-rules-consistently-use-instead-of.patch +Patch059: 0059-timesyncd-suppress-resync-at-system-time-change-when.patch +Patch060: 0060-timesyncd-only-listen-to-clock-changes-when-connecte.patch +Patch061: 0061-shell-completion-restore-completion-for-p.patch +Patch062: 0062-core-fix-oneshot-service-resource-control.patch +Patch063: 0063-rules-uaccess-add-ID_SOFTWARE_RADIO.patch +Patch064: 0064-journal-allow-files-with-no-data-whatsoever.patch +Patch065: 0065-units-serial-getty-.service-use-the-default-RestartS.patch +Patch066: 0066-build-sys-don-t-move-libgudev-to-lib.patch +Patch067: 0067-shared-include-stdbool.h-in-mkdir.h.patch +Patch068: 0068-missing.h-add-IFLA_MACVLAN_FLAGS.patch +Patch069: 0069-man-document-yearly-and-annually-in-systemd.time-7.patch +Patch070: 0070-core-nicer-message-when-inotify-watches-are-exhauste.patch +Patch071: 0071-detect-virt-Fix-Xen-domU-discovery.patch +Patch072: 0072-journal-reduce-test-journal-send-timeout-from-10s-to.patch +Patch073: 0073-systemd-detect-virt-detect-s390-virtualization.patch +Patch074: 0074-man-journal-add-note-about-sd_journal_get_cutoff_mon.patch +Patch075: 0075-Be-more-verbose-when-bind-or-listen-fails.patch +Patch076: 0076-core-show-timeouts-when-watchdog-howls.patch +Patch077: 0077-escape-fix-return-code.patch # Presently not accepted upstream, but we disable systemd-resolved in # the presets anyways, and this unbreaks anaconda/lorax/livecd-creator @@ -593,6 +670,7 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g %{_bindir}/systemctl %{_bindir}/systemd-notify %{_bindir}/systemd-analyze +%{_bindir}/systemd-escape %{_bindir}/systemd-ask-password %{_bindir}/systemd-tty-ask-password-agent %{_bindir}/systemd-machine-id-setup @@ -765,10 +843,25 @@ getent passwd systemd-journal-gateway >/dev/null 2>&1 || useradd -r -l -u 191 -g %{_datadir}/systemd/gatewayd %changelog +* Sat Jul 19 2014 Zbigniew Jędrzejewski-Szmek - 215-4 +- Various man page updates +- Static device node logic is conditionalized on CAP_SYS_MODULES instead of CAP_MKNOD + for better behaviour in containers +- Some small networkd link handling fixes +- vconsole-setup runs setfont before loadkeys (https://bugs.freedesktop.org/show_bug.cgi?id=80685) +- New systemd-escape tool +- XZ compression settings are tweaked to greatly improve journald performance +- "watch" is accepted as chassis type +- Various sysusers fixes, most importantly correct selinux labels +- systemd-timesyncd bug fix (https://bugs.freedesktop.org/show_bug.cgi?id=80932) +- Shell completion improvements +- New udev tag ID_SOFTWARE_RADIO can be used to instruct logind to allow user access +- XEN and s390 virtualization is properly detected + * Mon Jul 07 2014 Colin Walters - 215-3 - Add patch to disable resolve.conf symlink (#1043119) -* Sat Jul 06 2014 Zbigniew Jędrzejewski-Szmek - 215-2 +* Sun Jul 06 2014 Zbigniew Jędrzejewski-Szmek - 215-2 - Move systemd-journal-remote to systemd-journal-gateway package (#1114688) - Disable /etc/mtab handling temporarily (#1116158)