From 2cc64031dcab01c51256f6c42af47299a71b8524 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 14 Mar 2014 18:09:42 +0000 Subject: [PATCH 1/4] fix(sys-apps/systemd) pick in upstream systemd bugfixes Also add the --root= files from @marineam and me so that our initramfs scripts will work properly in the near future. --- ...or-don-t-return-OOM-on-parentless-de.patch | 25 ++ ...emory-leak-when-kdbus-is-not-enabled.patch | 26 ++ ...k-for-a-64bit-value-when-we-only-hav.patch | 181 ++++++++++ ...-allow-EEXIST-on-mkdir_safe-home-uid.patch | 28 ++ ...-creation-of-runtime-dirs-at-startup.patch | 88 +++++ ...tore-up-to-one-dhcp-lease-file-per-i.patch | 31 ++ ...-return-1-EINVAL-on-allocation-error.patch | 69 ++++ ...dd-root-argument-to-search_and_fopen.patch | 148 ++++++++ ...n-to-operate-on-an-alternate-fs-tree.patch | 116 +++++++ ...03-tmpfiles-add-root-to-the-man-page.patch | 39 +++ ...n-to-operate-on-an-alternate-fs-tree.patch | 315 ++++++++++++++++++ ...md-211-r1.ebuild => systemd-211-r2.ebuild} | 16 +- 12 files changed, 1081 insertions(+), 1 deletion(-) create mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0001-gpt-auto-generator-don-t-return-OOM-on-parentless-de.patch create mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0002-bus-fix-memory-leak-when-kdbus-is-not-enabled.patch create mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0003-sd-bus-don-t-look-for-a-64bit-value-when-we-only-hav.patch create mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0004-nspawn-allow-EEXIST-on-mkdir_safe-home-uid.patch create mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0005-networkd-fix-creation-of-runtime-dirs-at-startup.patch create mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0006-networkd-lease-store-up-to-one-dhcp-lease-file-per-i.patch create mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0007-Do-not-return-1-EINVAL-on-allocation-error.patch create mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-001-shared-add-root-argument-to-search_and_fopen.patch create mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-002-tmpfiles-add-root-option-to-operate-on-an-alternate-fs-tree.patch create mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-003-tmpfiles-add-root-to-the-man-page.patch create mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-004-machine-id-add-root-option-to-operate-on-an-alternate-fs-tree.patch rename sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/{systemd-211-r1.ebuild => systemd-211-r2.ebuild} (93%) diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0001-gpt-auto-generator-don-t-return-OOM-on-parentless-de.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0001-gpt-auto-generator-don-t-return-OOM-on-parentless-de.patch new file mode 100644 index 0000000000..64f0f84973 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0001-gpt-auto-generator-don-t-return-OOM-on-parentless-de.patch @@ -0,0 +1,25 @@ +From d6201d7653de28af38f7c84b7280302b512f4ef9 Mon Sep 17 00:00:00 2001 +From: Tomasz Torcz +Date: Wed, 12 Mar 2014 19:25:11 +0100 +Subject: gpt-auto-generator: don't return OOM on parentless devices + +--- + src/gpt-auto-generator/gpt-auto-generator.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c +index e487f6438689..19c5eea9de2f 100644 +--- a/src/gpt-auto-generator/gpt-auto-generator.c ++++ b/src/gpt-auto-generator/gpt-auto-generator.c +@@ -395,7 +395,7 @@ static int enumerate_partitions(dev_t devnum) { + + parent = udev_device_get_parent(d); + if (!parent) +- return log_oom(); ++ return 0; + + /* Does it have a devtype? */ + devtype = udev_device_get_devtype(parent); +-- +1.9.0 + diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0002-bus-fix-memory-leak-when-kdbus-is-not-enabled.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0002-bus-fix-memory-leak-when-kdbus-is-not-enabled.patch new file mode 100644 index 0000000000..570e1ef960 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0002-bus-fix-memory-leak-when-kdbus-is-not-enabled.patch @@ -0,0 +1,26 @@ +From d21c038833f621fc4328fdd75decaacdb147c396 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 13 Mar 2014 20:00:50 +0100 +Subject: bus: fix memory leak when kdbus is not enabled + +--- + src/libsystemd/sd-bus/sd-bus.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c +index ffa3369feb37..ca7c428a3162 100644 +--- a/src/libsystemd/sd-bus/sd-bus.c ++++ b/src/libsystemd/sd-bus/sd-bus.c +@@ -1189,7 +1189,8 @@ _public_ int sd_bus_open_user(sd_bus **ret) { + #ifdef ENABLE_KDBUS + asprintf(&b->address, KERNEL_USER_BUS_FMT, (unsigned long) getuid()); + #else +- return -ECONNREFUSED; ++ r = -ECONNREFUSED; ++ goto fail; + #endif + } + +-- +1.9.0 + diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0003-sd-bus-don-t-look-for-a-64bit-value-when-we-only-hav.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0003-sd-bus-don-t-look-for-a-64bit-value-when-we-only-hav.patch new file mode 100644 index 0000000000..9cc84ea410 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0003-sd-bus-don-t-look-for-a-64bit-value-when-we-only-hav.patch @@ -0,0 +1,181 @@ +From 53776069023eb1ae33acb0ae9ae1a27e8b172c25 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 13 Mar 2014 20:33:22 +0100 +Subject: sd-bus: don't look for a 64bit value when we only have 32bit value on + reply cookie hash table access + +This broke hashtable lookups for the message cookies on s390x, which is +a 64bit BE machine where accessing 32bit values as 64bit and vice versa +will explode. + +Also, while we are at it, be a bit more careful when dealing with the +64bit cookies we expose and the 32bit serial numbers dbus uses in its +payload. + +Problem identified by Fridrich Strba. +--- + src/libsystemd/sd-bus/bus-dump.c | 4 ++-- + src/libsystemd/sd-bus/bus-kernel.c | 2 +- + src/libsystemd/sd-bus/bus-message.c | 15 ++++++++++----- + src/libsystemd/sd-bus/bus-message.h | 5 +++-- + src/libsystemd/sd-bus/sd-bus.c | 12 ++++++------ + 5 files changed, 22 insertions(+), 16 deletions(-) + +diff --git a/src/libsystemd/sd-bus/bus-dump.c b/src/libsystemd/sd-bus/bus-dump.c +index 0e4154973775..ea81644d46bc 100644 +--- a/src/libsystemd/sd-bus/bus-dump.c ++++ b/src/libsystemd/sd-bus/bus-dump.c +@@ -69,10 +69,10 @@ int bus_message_dump(sd_bus_message *m, FILE *f, bool with_header) { + if (BUS_MESSAGE_COOKIE(m) == 0xFFFFFFFFULL) + fprintf(f, " Cookie=-1"); + else +- fprintf(f, " Cookie=%lu", (unsigned long) BUS_MESSAGE_COOKIE(m)); ++ fprintf(f, " Cookie=%" PRIu64, BUS_MESSAGE_COOKIE(m)); + + if (m->reply_cookie != 0) +- fprintf(f, " ReplyCookie=%lu", (unsigned long) m->reply_cookie); ++ fprintf(f, " ReplyCookie=%" PRIu64, m->reply_cookie); + + fputs("\n", f); + +diff --git a/src/libsystemd/sd-bus/bus-kernel.c b/src/libsystemd/sd-bus/bus-kernel.c +index 8a2ca0299677..80ef15bd422b 100644 +--- a/src/libsystemd/sd-bus/bus-kernel.c ++++ b/src/libsystemd/sd-bus/bus-kernel.c +@@ -266,7 +266,7 @@ static int bus_message_setup_kmsg(sd_bus *b, sd_bus_message *m) { + well_known ? 0 : + m->destination ? unique : KDBUS_DST_ID_BROADCAST; + m->kdbus->payload_type = KDBUS_PAYLOAD_DBUS; +- m->kdbus->cookie = m->header->serial; ++ m->kdbus->cookie = (uint64_t) m->header->serial; + m->kdbus->priority = m->priority; + + if (m->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED) +diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c +index fb894eff1fb4..97ab0e3beac8 100644 +--- a/src/libsystemd/sd-bus/bus-message.c ++++ b/src/libsystemd/sd-bus/bus-message.c +@@ -617,7 +617,7 @@ static int message_new_reply( + t->header->flags |= BUS_MESSAGE_NO_REPLY_EXPECTED; + t->reply_cookie = BUS_MESSAGE_COOKIE(call); + +- r = message_append_field_uint32(t, BUS_MESSAGE_HEADER_REPLY_SERIAL, t->reply_cookie); ++ r = message_append_field_uint32(t, BUS_MESSAGE_HEADER_REPLY_SERIAL, (uint32_t) t->reply_cookie); + if (r < 0) + goto fail; + +@@ -752,7 +752,7 @@ int bus_message_new_synthetic_error( + t->header->flags |= BUS_MESSAGE_NO_REPLY_EXPECTED; + t->reply_cookie = cookie; + +- r = message_append_field_uint32(t, BUS_MESSAGE_HEADER_REPLY_SERIAL, t->reply_cookie); ++ r = message_append_field_uint32(t, BUS_MESSAGE_HEADER_REPLY_SERIAL, (uint32_t) t->reply_cookie); + if (r < 0) + goto fail; + +@@ -5075,21 +5075,26 @@ int bus_message_parse_fields(sd_bus_message *m) { + break; + } + +- case BUS_MESSAGE_HEADER_REPLY_SERIAL: ++ case BUS_MESSAGE_HEADER_REPLY_SERIAL: { ++ uint32_t serial; ++ + if (m->reply_cookie != 0) + return -EBADMSG; + + if (!streq(signature, "u")) + return -EBADMSG; + +- r = message_peek_field_uint32(m, &ri, item_size, &m->reply_cookie); ++ r = message_peek_field_uint32(m, &ri, item_size, &serial); + if (r < 0) + return r; + ++ m->reply_cookie = serial; ++ + if (m->reply_cookie == 0) + return -EBADMSG; + + break; ++ } + + case BUS_MESSAGE_HEADER_UNIX_FDS: + if (unix_fds != 0) +@@ -5489,7 +5494,7 @@ int bus_message_remarshal(sd_bus *bus, sd_bus_message **m) { + return -ENOMEM; + + n->reply_cookie = (*m)->reply_cookie; +- r = message_append_field_uint32(n, BUS_MESSAGE_HEADER_REPLY_SERIAL, n->reply_cookie); ++ r = message_append_field_uint32(n, BUS_MESSAGE_HEADER_REPLY_SERIAL, (uint32_t) n->reply_cookie); + if (r < 0) + return r; + +diff --git a/src/libsystemd/sd-bus/bus-message.h b/src/libsystemd/sd-bus/bus-message.h +index 5fbe3e60307a..df792945b020 100644 +--- a/src/libsystemd/sd-bus/bus-message.h ++++ b/src/libsystemd/sd-bus/bus-message.h +@@ -84,7 +84,7 @@ struct sd_bus_message { + + sd_bus *bus; + +- uint32_t reply_cookie; ++ uint64_t reply_cookie; + + const char *path; + const char *interface; +@@ -162,7 +162,8 @@ static inline uint64_t BUS_MESSAGE_BSWAP64(sd_bus_message *m, uint64_t u) { + return BUS_MESSAGE_NEED_BSWAP(m) ? bswap_64(u) : u; + } + +-static inline uint32_t BUS_MESSAGE_COOKIE(sd_bus_message *m) { ++static inline uint64_t BUS_MESSAGE_COOKIE(sd_bus_message *m) { ++ /* Note that we return the serial converted to a 64bit value here */ + return BUS_MESSAGE_BSWAP32(m, m->header->serial); + } + +diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c +index ca7c428a3162..8e44e502f70c 100644 +--- a/src/libsystemd/sd-bus/sd-bus.c ++++ b/src/libsystemd/sd-bus/sd-bus.c +@@ -1486,15 +1486,15 @@ static int bus_write_message(sd_bus *bus, sd_bus_message *m, bool hint_sync_call + return r; + + if (bus->is_kernel || *idx >= BUS_MESSAGE_SIZE(m)) +- log_debug("Sent message type=%s sender=%s destination=%s object=%s interface=%s member=%s cookie=%lu reply_cookie=%lu error=%s", ++ log_debug("Sent message type=%s sender=%s destination=%s object=%s interface=%s member=%s cookie=%" PRIu64 " reply_cookie=%" PRIu64 " error=%s", + bus_message_type_to_string(m->header->type), + strna(sd_bus_message_get_sender(m)), + strna(sd_bus_message_get_destination(m)), + strna(sd_bus_message_get_path(m)), + strna(sd_bus_message_get_interface(m)), + strna(sd_bus_message_get_member(m)), +- (unsigned long) BUS_MESSAGE_COOKIE(m), +- (unsigned long) m->reply_cookie, ++ BUS_MESSAGE_COOKIE(m), ++ m->reply_cookie, + strna(m->error.message)); + + return r; +@@ -2253,15 +2253,15 @@ static int process_message(sd_bus *bus, sd_bus_message *m) { + bus->current = m; + bus->iteration_counter++; + +- log_debug("Got message type=%s sender=%s destination=%s object=%s interface=%s member=%s cookie=%lu reply_cookie=%lu error=%s", ++ log_debug("Got message type=%s sender=%s destination=%s object=%s interface=%s member=%s cookie=%" PRIu64 " reply_cookie=%" PRIu64 " error=%s", + bus_message_type_to_string(m->header->type), + strna(sd_bus_message_get_sender(m)), + strna(sd_bus_message_get_destination(m)), + strna(sd_bus_message_get_path(m)), + strna(sd_bus_message_get_interface(m)), + strna(sd_bus_message_get_member(m)), +- (unsigned long) BUS_MESSAGE_COOKIE(m), +- (unsigned long) m->reply_cookie, ++ BUS_MESSAGE_COOKIE(m), ++ m->reply_cookie, + strna(m->error.message)); + + r = process_hello(bus, m); +-- +1.9.0 + diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0004-nspawn-allow-EEXIST-on-mkdir_safe-home-uid.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0004-nspawn-allow-EEXIST-on-mkdir_safe-home-uid.patch new file mode 100644 index 0000000000..ecd1c5ad45 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0004-nspawn-allow-EEXIST-on-mkdir_safe-home-uid.patch @@ -0,0 +1,28 @@ +From 233bd18dd9144977cc3179a89e0449614c0e9557 Mon Sep 17 00:00:00 2001 +From: Brandon Philips +Date: Thu, 13 Mar 2014 15:19:40 -0700 +Subject: nspawn: allow -EEXIST on mkdir_safe /home/${uid} + +With systemd 211 nspawn attempts to create the home directory for the +given uid. However, if the home directory already exists then it will +fail. Don't error out on -EEXIST. +--- + src/nspawn/nspawn.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c +index b2c974d97016..6bf0a20ecae2 100644 +--- a/src/nspawn/nspawn.c ++++ b/src/nspawn/nspawn.c +@@ -2464,7 +2464,7 @@ static int change_uid_gid(char **_home) { + } + + r = mkdir_safe(home, 0755, uid, gid); +- if (r < 0) { ++ if (r < 0 && r != -EEXIST) { + log_error("Failed to make home directory: %s", strerror(-r)); + return r; + } +-- +1.9.0 + diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0005-networkd-fix-creation-of-runtime-dirs-at-startup.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0005-networkd-fix-creation-of-runtime-dirs-at-startup.patch new file mode 100644 index 0000000000..d3e1681a89 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0005-networkd-fix-creation-of-runtime-dirs-at-startup.patch @@ -0,0 +1,88 @@ +From 3a87ae6e818f875b8bd70bc09dbc173fe90f2769 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Thu, 13 Mar 2014 19:02:28 +0100 +Subject: networkd: fix creation of runtime dirs at startup + +This allows us to drop the repeated attempted creations of the runtime dirs during runtime. +--- + src/libsystemd-network/sd-dhcp-lease.c | 4 ---- + src/network/networkd-link.c | 4 ---- + src/network/networkd-manager.c | 4 ---- + src/network/networkd.c | 16 ++++++++++++++-- + 4 files changed, 14 insertions(+), 14 deletions(-) + +diff --git a/src/libsystemd-network/sd-dhcp-lease.c b/src/libsystemd-network/sd-dhcp-lease.c +index f7a204af82a9..e6d80d4c665d 100644 +--- a/src/libsystemd-network/sd-dhcp-lease.c ++++ b/src/libsystemd-network/sd-dhcp-lease.c +@@ -297,10 +297,6 @@ int dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) { + assert(lease); + assert(lease_file); + +- r = mkdir_safe_label("/run/systemd/network/leases", 0755, 0, 0); +- if (r < 0) +- goto finish; +- + r = fopen_temporary(lease_file, &f, &temp_path); + if (r < 0) + goto finish; +diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c +index fdc351fed31a..5449a1246ec7 100644 +--- a/src/network/networkd-link.c ++++ b/src/network/networkd-link.c +@@ -1367,10 +1367,6 @@ int link_save(Link *link) { + assert(link); + assert(link->state_file); + +- r = mkdir_safe_label("/run/systemd/network/links", 0755, 0, 0); +- if (r < 0) +- goto finish; +- + r = fopen_temporary(link->state_file, &f, &temp_path); + if (r < 0) + goto finish; +diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c +index f41914f8809a..8c2f5efbd341 100644 +--- a/src/network/networkd-manager.c ++++ b/src/network/networkd-manager.c +@@ -407,10 +407,6 @@ int manager_update_resolv_conf(Manager *m) { + + assert(m); + +- r = mkdir_safe_label("/run/systemd/network", 0755, 0, 0); +- if (r < 0) +- return r; +- + r = fopen_temporary("/run/systemd/network/resolv.conf", &f, &temp_path); + if (r < 0) + return r; +diff --git a/src/network/networkd.c b/src/network/networkd.c +index 2f6a12dbccfd..f0e6ad5201a5 100644 +--- a/src/network/networkd.c ++++ b/src/network/networkd.c +@@ -42,8 +42,20 @@ int main(int argc, char *argv[]) { + + /* Always create the directories people can create inotify + * watches in. */ +- mkdir_label("/run/systemd/network/links", 0755); +- mkdir_label("/run/systemd/network/leases", 0755); ++ r = mkdir_label("/run/systemd/network", 0755); ++ if (r < 0) ++ log_error("Could not create runtime directory: %s", ++ strerror(-r)); ++ ++ r = mkdir_label("/run/systemd/network/links", 0755); ++ if (r < 0) ++ log_error("Could not create runtime directory 'links': %s", ++ strerror(-r)); ++ ++ r = mkdir_label("/run/systemd/network/leases", 0755); ++ if (r < 0) ++ log_error("Could not create runtime directory 'leases': %s", ++ strerror(-r)); + + r = manager_new(&m); + if (r < 0) { +-- +1.9.0 + diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0006-networkd-lease-store-up-to-one-dhcp-lease-file-per-i.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0006-networkd-lease-store-up-to-one-dhcp-lease-file-per-i.patch new file mode 100644 index 0000000000..a6ed335855 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0006-networkd-lease-store-up-to-one-dhcp-lease-file-per-i.patch @@ -0,0 +1,31 @@ +From 2d8a2869f482e17982eb4748d82a5066497e07bb Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Thu, 13 Mar 2014 18:42:56 +0100 +Subject: networkd: lease - store (up to) one dhcp lease file per interface + +This removes an accidentally left-over test fragment. +--- + src/network/networkd-link.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c +index 5449a1246ec7..2650f863575b 100644 +--- a/src/network/networkd-link.c ++++ b/src/network/networkd-link.c +@@ -1379,7 +1379,12 @@ int link_save(Link *link) { + link_state_to_string(link->state)); + + if (link->dhcp_lease) { +- const char *lease_file = "/run/systemd/network/leases/test.lease"; ++ char *lease_file; ++ ++ r = asprintf(&lease_file, "/run/systemd/network/leases/%u", ++ (unsigned) link->ifindex); ++ if (r < 0) ++ return r; + + r = dhcp_lease_save(link->dhcp_lease, lease_file); + if (r < 0) +-- +1.9.0 + diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0007-Do-not-return-1-EINVAL-on-allocation-error.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0007-Do-not-return-1-EINVAL-on-allocation-error.patch new file mode 100644 index 0000000000..1560b75713 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-0007-Do-not-return-1-EINVAL-on-allocation-error.patch @@ -0,0 +1,69 @@ +From ca37f1e43b089e721760064b93882958e3f61485 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 14 Mar 2014 09:05:56 -0400 +Subject: Do not return -1 (EINVAL) on allocation error + +--- + src/core/socket.c | 8 +++----- + src/network/networkd-link.c | 12 ++++++------ + 2 files changed, 9 insertions(+), 11 deletions(-) + +diff --git a/src/core/socket.c b/src/core/socket.c +index 35531edb751e..ac59ce9d6a88 100644 +--- a/src/core/socket.c ++++ b/src/core/socket.c +@@ -198,16 +198,14 @@ static int socket_instantiate_service(Socket *s) { + + assert(s->accept); + +- if (!(prefix = unit_name_to_prefix(UNIT(s)->id))) ++ prefix = unit_name_to_prefix(UNIT(s)->id); ++ if (!prefix) + return -ENOMEM; + +- r = asprintf(&name, "%s@%u.service", prefix, s->n_accepted); +- +- if (r < 0) ++ if (asprintf(&name, "%s@%u.service", prefix, s->n_accepted) < 0) + return -ENOMEM; + + r = manager_load_unit(UNIT(s)->manager, name, NULL, NULL, &u); +- + if (r < 0) + return r; + +diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c +index 2650f863575b..275ad97a6307 100644 +--- a/src/network/networkd-link.c ++++ b/src/network/networkd-link.c +@@ -53,10 +53,10 @@ int link_new(Manager *manager, struct udev_device *device, Link **ret) { + if (link->ifindex <= 0) + return -EINVAL; + +- r = asprintf(&link->state_file, "/run/systemd/network/links/%u", +- (unsigned) link->ifindex); ++ r = asprintf(&link->state_file, "/run/systemd/network/links/%"PRIu64, ++ link->ifindex); + if (r < 0) +- return r; ++ return -ENOMEM; + + mac = udev_device_get_sysattr_value(device, "address"); + if (mac) { +@@ -1381,10 +1381,10 @@ int link_save(Link *link) { + if (link->dhcp_lease) { + char *lease_file; + +- r = asprintf(&lease_file, "/run/systemd/network/leases/%u", +- (unsigned) link->ifindex); ++ r = asprintf(&lease_file, "/run/systemd/network/leases/%"PRIu64, ++ link->ifindex); + if (r < 0) +- return r; ++ return -ENOMEM; + + r = dhcp_lease_save(link->dhcp_lease, lease_file); + if (r < 0) +-- +1.9.0 + diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-001-shared-add-root-argument-to-search_and_fopen.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-001-shared-add-root-argument-to-search_and_fopen.patch new file mode 100644 index 0000000000..4225d061d2 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-001-shared-add-root-argument-to-search_and_fopen.patch @@ -0,0 +1,148 @@ +From systemd-devel-bounces@lists.freedesktop.org Fri Mar 14 04:32:58 2014 +From: Michael Marineau +Date: Thu, 13 Mar 2014 21:32:12 -0700 +Subject: [systemd-devel] [PATCH 1/3] shared: add root argument to search_and_fopen +To: systemd-devel@lists.freedesktop.org +Message-ID: <1394771534-27529-1-git-send-email-michael.marineau@coreos.com> + + +This adds the same root argument to search_and_fopen that +conf_files_list already has. Tools that use those two functions as a +pair can now be easily modified to load configuration files from an +alternate root filesystem tree. +--- + src/binfmt/binfmt.c | 2 +- + src/modules-load/modules-load.c | 2 +- + src/shared/util.c | 12 ++++++------ + src/shared/util.h | 4 ++-- + src/sysctl/sysctl.c | 2 +- + src/tmpfiles/tmpfiles.c | 2 +- + 6 files changed, 12 insertions(+), 12 deletions(-) + +diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c +index a1877c4..9fc5d4e 100644 +--- a/src/binfmt/binfmt.c ++++ b/src/binfmt/binfmt.c +@@ -86,7 +86,7 @@ static int apply_file(const char *path, bool ignore_enoent) { + + assert(path); + +- r = search_and_fopen_nulstr(path, "re", conf_file_dirs, &f); ++ r = search_and_fopen_nulstr(path, "re", NULL, conf_file_dirs, &f); + if (r < 0) { + if (ignore_enoent && r == -ENOENT) + return 0; +diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c +index 49b153d..ecb84da 100644 +--- a/src/modules-load/modules-load.c ++++ b/src/modules-load/modules-load.c +@@ -145,7 +145,7 @@ static int apply_file(struct kmod_ctx *ctx, const char *path, bool ignore_enoent + assert(ctx); + assert(path); + +- r = search_and_fopen_nulstr(path, "re", conf_file_dirs, &f); ++ r = search_and_fopen_nulstr(path, "re", NULL, conf_file_dirs, &f); + if (r < 0) { + if (ignore_enoent && r == -ENOENT) + return 0; +diff --git a/src/shared/util.c b/src/shared/util.c +index 9e8cd54..8b8d2fb 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -5668,14 +5668,14 @@ int on_ac_power(void) { + return found_online || !found_offline; + } + +-static int search_and_fopen_internal(const char *path, const char *mode, char **search, FILE **_f) { ++static int search_and_fopen_internal(const char *path, const char *mode, const char *root, char **search, FILE **_f) { + char **i; + + assert(path); + assert(mode); + assert(_f); + +- if (!path_strv_canonicalize_absolute_uniq(search, NULL)) ++ if (!path_strv_canonicalize_absolute_uniq(search, root)) + return -ENOMEM; + + STRV_FOREACH(i, search) { +@@ -5699,7 +5699,7 @@ static int search_and_fopen_internal(const char *path, const char *mode, char ** + return -ENOENT; + } + +-int search_and_fopen(const char *path, const char *mode, const char **search, FILE **_f) { ++int search_and_fopen(const char *path, const char *mode, const char *root, const char **search, FILE **_f) { + _cleanup_strv_free_ char **copy = NULL; + + assert(path); +@@ -5722,10 +5722,10 @@ int search_and_fopen(const char *path, const char *mode, const char **search, FI + if (!copy) + return -ENOMEM; + +- return search_and_fopen_internal(path, mode, copy, _f); ++ return search_and_fopen_internal(path, mode, root, copy, _f); + } + +-int search_and_fopen_nulstr(const char *path, const char *mode, const char *search, FILE **_f) { ++int search_and_fopen_nulstr(const char *path, const char *mode, const char *root, const char *search, FILE **_f) { + _cleanup_strv_free_ char **s = NULL; + + if (path_is_absolute(path)) { +@@ -5744,7 +5744,7 @@ int search_and_fopen_nulstr(const char *path, const char *mode, const char *sear + if (!s) + return -ENOMEM; + +- return search_and_fopen_internal(path, mode, s, _f); ++ return search_and_fopen_internal(path, mode, root, s, _f); + } + + char *strextend(char **x, ...) { +diff --git a/src/shared/util.h b/src/shared/util.h +index 81831e2..e99f8d1 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -696,8 +696,8 @@ char *strip_tab_ansi(char **p, size_t *l); + + int on_ac_power(void); + +-int search_and_fopen(const char *path, const char *mode, const char **search, FILE **_f); +-int search_and_fopen_nulstr(const char *path, const char *mode, const char *search, FILE **_f); ++int search_and_fopen(const char *path, const char *mode, const char *root, const char **search, FILE **_f); ++int search_and_fopen_nulstr(const char *path, const char *mode, const char *root, const char *search, FILE **_f); + + #define FOREACH_LINE(line, f, on_error) \ + for (;;) \ +diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c +index 76efacb..8868732 100644 +--- a/src/sysctl/sysctl.c ++++ b/src/sysctl/sysctl.c +@@ -123,7 +123,7 @@ static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno + + assert(path); + +- r = search_and_fopen_nulstr(path, "re", conf_file_dirs, &f); ++ r = search_and_fopen_nulstr(path, "re", NULL, conf_file_dirs, &f); + if (r < 0) { + if (ignore_enoent && r == -ENOENT) + return 0; +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index 6e36dc7..3684289 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -1376,7 +1376,7 @@ static int read_config_file(const char *fn, bool ignore_enoent) { + + assert(fn); + +- r = search_and_fopen_nulstr(fn, "re", conf_file_dirs, &f); ++ r = search_and_fopen_nulstr(fn, "re", NULL, conf_file_dirs, &f); + if (r < 0) { + if (ignore_enoent && r == -ENOENT) + return 0; +-- +1.8.3.2 + +_______________________________________________ +systemd-devel mailing list +systemd-devel@lists.freedesktop.org +http://lists.freedesktop.org/mailman/listinfo/systemd-devel + diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-002-tmpfiles-add-root-option-to-operate-on-an-alternate-fs-tree.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-002-tmpfiles-add-root-option-to-operate-on-an-alternate-fs-tree.patch new file mode 100644 index 0000000000..6082d8fcd6 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-002-tmpfiles-add-root-option-to-operate-on-an-alternate-fs-tree.patch @@ -0,0 +1,116 @@ +From systemd-devel-bounces@lists.freedesktop.org Fri Mar 14 04:33:04 2014 +From: Michael Marineau +Date: Thu, 13 Mar 2014 21:32:13 -0700 +Subject: [systemd-devel] [PATCH 2/3] tmpfiles: Add --root option to operate on an alternate fs tree. +To: systemd-devel@lists.freedesktop.org +Message-ID: <1394771534-27529-2-git-send-email-michael.marineau@coreos.com> + + +This makes it possible to initialize or cleanup an arbitrary filesystem +hierarchy in the same way that it would be during system boot. +--- + src/tmpfiles/tmpfiles.c | 27 ++++++++++++++++++++++++--- + 1 file changed, 24 insertions(+), 3 deletions(-) + +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index 3684289..4ce35b5 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -111,6 +111,7 @@ static bool arg_boot = false; + + static char **include_prefixes = NULL; + static char **exclude_prefixes = NULL; ++static char *arg_root = NULL; + + static const char conf_file_dirs[] = + "/etc/tmpfiles.d\0" +@@ -1188,6 +1189,15 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { + if (!should_include_path(i->path)) + return 0; + ++ if (arg_root) { ++ char *p = strjoin(arg_root, i->path, NULL); ++ if (!p) ++ return log_oom(); ++ ++ free(i->path); ++ i->path = p; ++ } ++ + if (user && !streq(user, "-")) { + const char *u = user; + +@@ -1277,7 +1287,8 @@ static int help(void) { + " --remove Remove marked files/directories\n" + " --boot Execute actions only safe at boot\n" + " --prefix=PATH Only apply rules that apply to paths with the specified prefix\n" +- " --exclude-prefix=PATH Ignore rules that apply to paths with the specified prefix\n", ++ " --exclude-prefix=PATH Ignore rules that apply to paths with the specified prefix\n" ++ " --root=PATH Operate on an alternate filesystem root\n", + program_invocation_short_name); + + return 0; +@@ -1293,6 +1304,7 @@ static int parse_argv(int argc, char *argv[]) { + ARG_BOOT, + ARG_PREFIX, + ARG_EXCLUDE_PREFIX, ++ ARG_ROOT, + }; + + static const struct option options[] = { +@@ -1304,6 +1316,7 @@ static int parse_argv(int argc, char *argv[]) { + { "boot", no_argument, NULL, ARG_BOOT }, + { "prefix", required_argument, NULL, ARG_PREFIX }, + { "exclude-prefix", required_argument, NULL, ARG_EXCLUDE_PREFIX }, ++ { "root", required_argument, NULL, ARG_ROOT }, + {} + }; + +@@ -1350,6 +1363,13 @@ static int parse_argv(int argc, char *argv[]) { + return log_oom(); + break; + ++ case ARG_ROOT: ++ arg_root = path_make_absolute_cwd(optarg); ++ if (!arg_root) ++ return log_oom(); ++ path_kill_slashes(arg_root); ++ break; ++ + case '?': + return -EINVAL; + +@@ -1376,7 +1396,7 @@ static int read_config_file(const char *fn, bool ignore_enoent) { + + assert(fn); + +- r = search_and_fopen_nulstr(fn, "re", NULL, conf_file_dirs, &f); ++ r = search_and_fopen_nulstr(fn, "re", arg_root, conf_file_dirs, &f); + if (r < 0) { + if (ignore_enoent && r == -ENOENT) + return 0; +@@ -1477,7 +1497,7 @@ int main(int argc, char *argv[]) { + _cleanup_strv_free_ char **files = NULL; + char **f; + +- r = conf_files_list_nulstr(&files, ".conf", NULL, conf_file_dirs); ++ r = conf_files_list_nulstr(&files, ".conf", arg_root, conf_file_dirs); + if (r < 0) { + log_error("Failed to enumerate tmpfiles.d files: %s", strerror(-r)); + goto finish; +@@ -1508,6 +1528,7 @@ finish: + + free(include_prefixes); + free(exclude_prefixes); ++ free(arg_root); + + set_free_free(unix_sockets); + +-- +1.8.3.2 + +_______________________________________________ +systemd-devel mailing list +systemd-devel@lists.freedesktop.org +http://lists.freedesktop.org/mailman/listinfo/systemd-devel + diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-003-tmpfiles-add-root-to-the-man-page.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-003-tmpfiles-add-root-to-the-man-page.patch new file mode 100644 index 0000000000..257d8d087c --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-003-tmpfiles-add-root-to-the-man-page.patch @@ -0,0 +1,39 @@ +From systemd-devel-bounces@lists.freedesktop.org Fri Mar 14 04:33:02 2014 +From: Michael Marineau +Date: Thu, 13 Mar 2014 21:32:14 -0700 +Subject: [systemd-devel] [PATCH 3/3] tmpfiles: Add --root to the man page. +To: systemd-devel@lists.freedesktop.org +Message-ID: <1394771534-27529-3-git-send-email-michael.marineau@coreos.com> + + +--- + man/systemd-tmpfiles.xml | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml +index 0b62640..193acb7 100644 +--- a/man/systemd-tmpfiles.xml ++++ b/man/systemd-tmpfiles.xml +@@ -152,6 +152,14 @@ + prefix. This option can be specified + multiple times. + ++ ++ ++ Takes a directory path ++ as an argument. All paths will be ++ prefixed with the given alternate ROOT ++ path, including config search paths. ++ ++ + + + +-- +1.8.3.2 + +_______________________________________________ +systemd-devel mailing list +systemd-devel@lists.freedesktop.org +http://lists.freedesktop.org/mailman/listinfo/systemd-devel + diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-004-machine-id-add-root-option-to-operate-on-an-alternate-fs-tree.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-004-machine-id-add-root-option-to-operate-on-an-alternate-fs-tree.patch new file mode 100644 index 0000000000..609bcf2bab --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-004-machine-id-add-root-option-to-operate-on-an-alternate-fs-tree.patch @@ -0,0 +1,315 @@ +From systemd-devel-bounces@lists.freedesktop.org Fri Mar 14 04:42:13 2014 +From: Greg KH +Date: Fri, 14 Mar 2014 04:43:04 +0000 +Subject: [systemd-devel] [PATCH] machine-id: add --root option to operate on an alternate fs tree +To: systemd Mailing List +Message-ID: <20140314044304.GA24528@kroah.com> +Content-Disposition: inline + + +This makes it possible to initialize the /etc/machine-id file on an +arbitrary filesystem hierarchy. This helps systems that wish to run +this at image creation time in a subdirectory, or from initramfs before +pivot-root is called. + +diff --git a/man/systemd-machine-id-setup.xml b/man/systemd-machine-id-setup.xml +index 5c34b345d012..b879b40b997d 100644 +--- a/man/systemd-machine-id-setup.xml ++++ b/man/systemd-machine-id-setup.xml +@@ -96,6 +96,14 @@ + The following options are understood: + + ++ ++ ++ Takes a directory path ++ as an argument. All paths will be ++ prefixed with the given alternate ROOT ++ path, including config search paths. ++ ++ + + + +diff --git a/src/core/machine-id-setup.c b/src/core/machine-id-setup.c +index 1b55da7e56b8..7d52b468a11a 100644 +--- a/src/core/machine-id-setup.c ++++ b/src/core/machine-id-setup.c +@@ -59,18 +59,22 @@ static int shorten_uuid(char destination[36], const char *source) { + return -EINVAL; + } + +-static int generate(char id[34]) { +- int fd, r; ++static int generate(char id[34], const char *root) { ++ int fd, r = 0; + unsigned char *p; + sd_id128_t buf; + char *q; + ssize_t k; + const char *vm_id; ++ char *dbus_machine_id; + + assert(id); + ++ if (asprintf(&dbus_machine_id, "%s/var/lib/dbus/machine-id", root) < 0) ++ return log_oom(); ++ + /* First, try reading the D-Bus machine id, unless it is a symlink */ +- fd = open("/var/lib/dbus/machine-id", O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW); ++ fd = open(dbus_machine_id, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW); + if (fd >= 0) { + k = loop_read(fd, id, 33, false); + close_nointr_nofail(fd); +@@ -83,7 +87,7 @@ static int generate(char id[34]) { + id[33] = 0; + + log_info("Initializing machine ID from D-Bus machine ID."); +- return 0; ++ goto finish; + } + } + } +@@ -105,7 +109,8 @@ static int generate(char id[34]) { + r = shorten_uuid(id, uuid); + if (r >= 0) { + log_info("Initializing machine ID from KVM UUID."); +- return 0; ++ r = 0; ++ goto finish; + } + } + } +@@ -124,7 +129,8 @@ static int generate(char id[34]) { + r = shorten_uuid(id, e); + if (r >= 0) { + log_info("Initializing machine ID from container UUID."); +- return 0; ++ r = 0; ++ goto finish; + } + } + } +@@ -134,7 +140,7 @@ static int generate(char id[34]) { + r = sd_id128_randomize(&buf); + if (r < 0) { + log_error("Failed to open /dev/urandom: %s", strerror(-r)); +- return r; ++ goto finish; + } + + for (p = buf.bytes, q = id; p < buf.bytes + sizeof(buf); p++, q += 2) { +@@ -147,15 +153,27 @@ static int generate(char id[34]) { + + log_info("Initializing machine ID from random generator."); + +- return 0; ++finish: ++ free(dbus_machine_id); ++ return r; + } + +-int machine_id_setup(void) { ++int machine_id_setup(const char *root) { + _cleanup_close_ int fd = -1; +- int r; ++ int r = 0; + bool writable = false; + struct stat st; + char id[34]; /* 32 + \n + \0 */ ++ char *etc_machine_id = NULL; ++ char *run_machine_id = NULL; ++ ++ if (asprintf(&etc_machine_id, "%s/etc/machine-id", root) < 0) ++ return log_oom(); ++ ++ if (asprintf(&run_machine_id, "%s/run/machine-id", root) < 0) { ++ r = log_oom(); ++ goto finish; ++ } + + RUN_WITH_UMASK(0000) { + /* We create this 0444, to indicate that this isn't really +@@ -163,14 +181,15 @@ int machine_id_setup(void) { + * will be owned by root it doesn't matter much, but maybe + * people look. */ + +- fd = open("/etc/machine-id", O_RDWR|O_CREAT|O_CLOEXEC|O_NOCTTY, 0444); ++ fd = open(etc_machine_id, O_RDWR|O_CREAT|O_CLOEXEC|O_NOCTTY, 0444); + if (fd >= 0) + writable = true; + else { +- fd = open("/etc/machine-id", O_RDONLY|O_CLOEXEC|O_NOCTTY); ++ fd = open(etc_machine_id, O_RDONLY|O_CLOEXEC|O_NOCTTY); + if (fd < 0) { +- log_error("Cannot open /etc/machine-id: %m"); +- return -errno; ++ log_error("Cannot open %s: %m", etc_machine_id); ++ r = -errno; ++ goto finish; + } + + writable = false; +@@ -179,7 +198,8 @@ int machine_id_setup(void) { + + if (fstat(fd, &st) < 0) { + log_error("fstat() failed: %m"); +- return -errno; ++ r = -errno; ++ goto finish; + } + + if (S_ISREG(st.st_mode)) +@@ -187,21 +207,21 @@ int machine_id_setup(void) { + id[32] = 0; + + if (id128_is_valid(id)) +- return 0; ++ goto finish; + } + + /* Hmm, so, the id currently stored is not useful, then let's + * generate one */ + +- r = generate(id); ++ r = generate(id, root); + if (r < 0) +- return r; ++ goto finish; + + if (S_ISREG(st.st_mode) && writable) { + lseek(fd, 0, SEEK_SET); + + if (loop_write(fd, id, 33, false) == 33) +- return 0; ++ goto finish; + } + + close_nointr_nofail(fd); +@@ -211,27 +231,31 @@ int machine_id_setup(void) { + * /run/machine-id as a replacement */ + + RUN_WITH_UMASK(0022) { +- r = write_string_file("/run/machine-id", id); ++ r = write_string_file(run_machine_id, id); + } + if (r < 0) { +- log_error("Cannot write /run/machine-id: %s", strerror(-r)); +- unlink("/run/machine-id"); +- return r; ++ log_error("Cannot write %s: %s", run_machine_id, strerror(-r)); ++ unlink(run_machine_id); ++ goto finish; + } + + /* And now, let's mount it over */ +- r = mount("/run/machine-id", "/etc/machine-id", NULL, MS_BIND, NULL); ++ r = mount(run_machine_id, etc_machine_id, NULL, MS_BIND, NULL); + if (r < 0) { +- log_error("Failed to mount /etc/machine-id: %m"); +- unlink_noerrno("/run/machine-id"); +- return -errno; ++ log_error("Failed to mount %s: %m", etc_machine_id); ++ unlink_noerrno(run_machine_id); ++ r = -errno; ++ goto finish; + } + +- log_info("Installed transient /etc/machine-id file."); ++ log_info("Installed transient %s file.", etc_machine_id); + + /* Mark the mount read-only */ +- if (mount(NULL, "/etc/machine-id", NULL, MS_BIND|MS_RDONLY|MS_REMOUNT, NULL) < 0) +- log_warning("Failed to make transient /etc/machine-id read-only: %m"); ++ if (mount(NULL, etc_machine_id, NULL, MS_BIND|MS_RDONLY|MS_REMOUNT, NULL) < 0) ++ log_warning("Failed to make transient %s read-only: %m", etc_machine_id); + +- return 0; ++finish: ++ free(etc_machine_id); ++ free(run_machine_id); ++ return r; + } +diff --git a/src/core/machine-id-setup.h b/src/core/machine-id-setup.h +index b9e6b4d674a6..b0583eefc8fe 100644 +--- a/src/core/machine-id-setup.h ++++ b/src/core/machine-id-setup.h +@@ -21,4 +21,4 @@ + along with systemd; If not, see . + ***/ + +-int machine_id_setup(void); ++int machine_id_setup(const char *root); +diff --git a/src/core/main.c b/src/core/main.c +index f1b06d88803e..cc876efa9c2c 100644 +--- a/src/core/main.c ++++ b/src/core/main.c +@@ -1582,7 +1582,7 @@ int main(int argc, char *argv[]) { + kmod_setup(); + #endif + hostname_setup(); +- machine_id_setup(); ++ machine_id_setup(""); + loopback_setup(); + + test_mtab(); +diff --git a/src/machine-id-setup/machine-id-setup-main.c b/src/machine-id-setup/machine-id-setup-main.c +index 84af925f517e..a67d436dbd7c 100644 +--- a/src/machine-id-setup/machine-id-setup-main.c ++++ b/src/machine-id-setup/machine-id-setup-main.c +@@ -29,12 +29,15 @@ + #include "log.h" + #include "build.h" + ++static const char *arg_root = ""; ++ + static int help(void) { + + printf("%s [OPTIONS...]\n\n" + "Initialize /etc/machine-id from a random source.\n\n" + " -h --help Show this help\n" +- " --version Show package version\n", ++ " --version Show package version\n" ++ " --root Filesystem root\n", + program_invocation_short_name); + + return 0; +@@ -43,12 +46,14 @@ static int help(void) { + static int parse_argv(int argc, char *argv[]) { + + enum { +- ARG_VERSION = 0x100 ++ ARG_VERSION = 0x100, ++ ARG_ROOT, + }; + + static const struct option options[] = { + { "help", no_argument, NULL, 'h' }, + { "version", no_argument, NULL, ARG_VERSION }, ++ { "root", required_argument, NULL, ARG_ROOT }, + {} + }; + +@@ -69,6 +74,10 @@ static int parse_argv(int argc, char *argv[]) { + puts(SYSTEMD_FEATURES); + return 0; + ++ case ARG_ROOT: ++ arg_root = optarg; ++ break; ++ + case '?': + return -EINVAL; + +@@ -95,5 +104,5 @@ int main(int argc, char *argv[]) { + if (r <= 0) + return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; + +- return machine_id_setup() < 0 ? EXIT_FAILURE : EXIT_SUCCESS; ++ return machine_id_setup(arg_root) < 0 ? EXIT_FAILURE : EXIT_SUCCESS; + } +_______________________________________________ +systemd-devel mailing list +systemd-devel@lists.freedesktop.org +http://lists.freedesktop.org/mailman/listinfo/systemd-devel + diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-211-r1.ebuild b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-211-r2.ebuild similarity index 93% rename from sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-211-r1.ebuild rename to sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-211-r2.ebuild index d7770e34d2..3634bbc512 100644 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-211-r1.ebuild +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-211-r2.ebuild @@ -109,8 +109,22 @@ src_prepare() { epatch "${FILESDIR}"/211-handle-empty-etc-os-release.patch # upstream fixes not yet in the release + epatch "${FILESDIR}"/211-0001-gpt-auto-generator-don-t-return-OOM-on-parentless-de.patch + epatch "${FILESDIR}"/211-0002-bus-fix-memory-leak-when-kdbus-is-not-enabled.patch + epatch "${FILESDIR}"/211-0003-sd-bus-don-t-look-for-a-64bit-value-when-we-only-hav.patch + epatch "${FILESDIR}"/211-0004-nspawn-allow-EEXIST-on-mkdir_safe-home-uid.patch + epatch "${FILESDIR}"/211-0005-networkd-fix-creation-of-runtime-dirs-at-startup.patch + epatch "${FILESDIR}"/211-0006-networkd-lease-store-up-to-one-dhcp-lease-file-per-i.patch + epatch "${FILESDIR}"/211-0007-Do-not-return-1-EINVAL-on-allocation-error.patch + + # patch to make journald work at first boot epatch "${FILESDIR}"/211-tmpfiles.patch - epatch "${FILESDIR}"/211-0001-nspawn-allow-EEXIST-on-mkdir_safe-home-uid.patch + + # --root= options to some utilities needed by initramfs + epatch "${FILESDIR}"/211-001-shared-add-root-argument-to-search_and_fopen.patch + epatch "${FILESDIR}"/211-002-tmpfiles-add-root-option-to-operate-on-an-alternate-fs-tree.patch + epatch "${FILESDIR}"/211-003-tmpfiles-add-root-to-the-man-page.patch + epatch "${FILESDIR}"/211-004-machine-id-add-root-option-to-operate-on-an-alternate-fs-tree.patch if [[ ${PV} == *9999 ]]; then if use doc; then From 5cff6f999bb84ab629c3e6c3f3a2c46c29f7097b Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 14 Mar 2014 18:12:16 +0000 Subject: [PATCH 2/4] clean(sys-apps/systemd) remove unused systemd patches These are no longer used by any ebuild, so drop them to clean things up --- ...ate-file-after-generating-the-sessio.patch | 84 ----------- ...ymaps-to-localectl-supported-locatio.patch | 25 ---- ...upport-passing-prefix-multiple-times.patch | 90 ------------ ...04-tmpfiles-introduce-exclude-prefix.patch | 138 ------------------ ...les-setup-exclude-dev-prefixes-files.patch | 23 --- ...06-allow-tabs-in-configuration-files.patch | 43 ------ ...7-allow-tabs-in-configuration-files2.patch | 22 --- 7 files changed, 425 deletions(-) delete mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0001-logind-update-state-file-after-generating-the-sessio.patch delete mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0002-Add-usr-share-keymaps-to-localectl-supported-locatio.patch delete mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0003-tmpfiles-support-passing-prefix-multiple-times.patch delete mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0004-tmpfiles-introduce-exclude-prefix.patch delete mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0005-tmpfiles-setup-exclude-dev-prefixes-files.patch delete mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0006-allow-tabs-in-configuration-files.patch delete mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0007-allow-tabs-in-configuration-files2.patch diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0001-logind-update-state-file-after-generating-the-sessio.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0001-logind-update-state-file-after-generating-the-sessio.patch deleted file mode 100644 index 2d74b01293..0000000000 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0001-logind-update-state-file-after-generating-the-sessio.patch +++ /dev/null @@ -1,84 +0,0 @@ -From a7ca0f06aaa0e0ae3b5eada2cdece8c9766bff1a Mon Sep 17 00:00:00 2001 -From: Lennart Poettering -Date: Fri, 26 Jul 2013 17:32:19 +0200 -Subject: [PATCH 1/5] logind: update state file after generating the session - fifo, not before - -https://bugs.freedesktop.org/show_bug.cgi?id=67273 ---- - src/login/logind-dbus.c | 7 ++++++- - src/login/logind-session-dbus.c | 4 ++++ - src/machine/machined-dbus.c | 3 ++- - 3 files changed, 12 insertions(+), 2 deletions(-) - -diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c -index 39af637..b5e975a 100644 ---- a/src/login/logind-dbus.c -+++ b/src/login/logind-dbus.c -@@ -643,6 +643,10 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message) { - - session->create_message = dbus_message_ref(message); - -+ /* Now, let's wait until the slice unit and stuff got -+ * created. We send the reply back from -+ * session_send_create_reply().*/ -+ - return 0; - - fail: -@@ -2356,7 +2360,6 @@ DBusHandlerResult bus_message_filter( - if (streq_ptr(path, s->scope_job)) { - free(s->scope_job); - s->scope_job = NULL; -- session_save(s); - - if (s->started) { - if (streq(result, "done")) -@@ -2366,6 +2369,8 @@ DBusHandlerResult bus_message_filter( - session_send_create_reply(s, &error); - } - } -+ -+ session_save(s); - } - - session_add_to_gc_queue(s); -diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c -index 62b9ffd..210f756 100644 ---- a/src/login/logind-session-dbus.c -+++ b/src/login/logind-session-dbus.c -@@ -535,6 +535,10 @@ int session_send_create_reply(Session *s, DBusError *error) { - if (!s->create_message) - return 0; - -+ /* This is called after the session scope was successfully -+ * created, and finishes where bus_manager_create_session() -+ * left off. */ -+ - if (error) { - DBusError buffer; - -diff --git a/src/machine/machined-dbus.c b/src/machine/machined-dbus.c -index 1e8bc60..6c4d50b 100644 ---- a/src/machine/machined-dbus.c -+++ b/src/machine/machined-dbus.c -@@ -543,7 +543,6 @@ DBusHandlerResult bus_message_filter( - if (streq_ptr(path, mm->scope_job)) { - free(mm->scope_job); - mm->scope_job = NULL; -- machine_save(mm); - - if (mm->started) { - if (streq(result, "done")) -@@ -553,6 +552,8 @@ DBusHandlerResult bus_message_filter( - machine_send_create_reply(mm, &error); - } - } -+ -+ machine_save(mm); - } - - machine_add_to_gc_queue(mm); --- -1.8.3.2 - diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0002-Add-usr-share-keymaps-to-localectl-supported-locatio.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0002-Add-usr-share-keymaps-to-localectl-supported-locatio.patch deleted file mode 100644 index 79333e6eed..0000000000 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0002-Add-usr-share-keymaps-to-localectl-supported-locatio.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 64fa15a7ca9c276d28413567c74a1d360fbdc975 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= -Date: Wed, 31 Jul 2013 23:12:17 +0200 -Subject: [PATCH 2/5] Add /usr/share/keymaps to localectl supported locations. - -This is the standard upstream location where kbd installs keymaps. ---- - src/locale/localectl.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/locale/localectl.c b/src/locale/localectl.c -index cd7356a..8259c0a 100644 ---- a/src/locale/localectl.c -+++ b/src/locale/localectl.c -@@ -538,6 +538,7 @@ static int list_vconsole_keymaps(DBusConnection *bus, char **args, unsigned n) { - if (!keymaps) - return log_oom(); - -+ nftw("/usr/share/keymaps/", nftw_cb, 20, FTW_MOUNT|FTW_PHYS); - nftw("/usr/share/kbd/keymaps/", nftw_cb, 20, FTW_MOUNT|FTW_PHYS); - nftw("/usr/lib/kbd/keymaps/", nftw_cb, 20, FTW_MOUNT|FTW_PHYS); - nftw("/lib/kbd/keymaps/", nftw_cb, 20, FTW_MOUNT|FTW_PHYS); --- -1.8.3.2 - diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0003-tmpfiles-support-passing-prefix-multiple-times.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0003-tmpfiles-support-passing-prefix-multiple-times.patch deleted file mode 100644 index 02d2b26af7..0000000000 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0003-tmpfiles-support-passing-prefix-multiple-times.patch +++ /dev/null @@ -1,90 +0,0 @@ -From 9c26db4da7a474b024fcdc97ea490280d86777e1 Mon Sep 17 00:00:00 2001 -From: Dave Reisner -Date: Wed, 24 Jul 2013 11:10:05 -0400 -Subject: [PATCH 3/5] tmpfiles: support passing --prefix multiple times - ---- - man/systemd-tmpfiles.xml | 3 ++- - src/tmpfiles/tmpfiles.c | 24 +++++++++++++++++++++--- - 2 files changed, 23 insertions(+), 4 deletions(-) - -diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml -index 405a9f1..b0f2d9c 100644 ---- a/man/systemd-tmpfiles.xml -+++ b/man/systemd-tmpfiles.xml -@@ -121,7 +121,8 @@ - - Only apply rules that - apply to paths with the specified -- prefix. -+ prefix. This option can be specified -+ multiple times. - - - -diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c -index eae993e..cb15133 100644 ---- a/src/tmpfiles/tmpfiles.c -+++ b/src/tmpfiles/tmpfiles.c -@@ -105,7 +105,7 @@ static bool arg_create = false; - static bool arg_clean = false; - static bool arg_remove = false; - --static const char *arg_prefix = NULL; -+static char **include_prefixes = NULL; - - static const char conf_file_dirs[] = - "/etc/tmpfiles.d\0" -@@ -1018,6 +1018,21 @@ static bool item_equal(Item *a, Item *b) { - return true; - } - -+static bool should_include_path(const char *path) { -+ char **prefix; -+ -+ /* no explicit paths specified for inclusion, so everything is valid */ -+ if (strv_length(include_prefixes) == 0) -+ return true; -+ -+ STRV_FOREACH(prefix, include_prefixes) { -+ if (path_startswith(path, *prefix)) -+ return true; -+ } -+ -+ return false; -+} -+ - static int parse_line(const char *fname, unsigned line, const char *buffer) { - _cleanup_item_free_ Item *i = NULL; - Item *existing; -@@ -1119,7 +1134,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { - - path_kill_slashes(i->path); - -- if (arg_prefix && !path_startswith(i->path, arg_prefix)) -+ if (!should_include_path(i->path)) - return 0; - - if (user && !streq(user, "-")) { -@@ -1258,7 +1273,8 @@ static int parse_argv(int argc, char *argv[]) { - break; - - case ARG_PREFIX: -- arg_prefix = optarg; -+ if (strv_extend(&include_prefixes, optarg) < 0) -+ return log_oom(); - break; - - case '?': -@@ -1423,6 +1439,8 @@ finish: - hashmap_free(items); - hashmap_free(globs); - -+ strv_free(include_prefixes); -+ - set_free_free(unix_sockets); - - label_finish(); --- -1.8.3.2 - diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0004-tmpfiles-introduce-exclude-prefix.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0004-tmpfiles-introduce-exclude-prefix.patch deleted file mode 100644 index d314d3e06c..0000000000 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0004-tmpfiles-introduce-exclude-prefix.patch +++ /dev/null @@ -1,138 +0,0 @@ -From 059e02a48e58da81591ebd34e87f928269d77929 Mon Sep 17 00:00:00 2001 -From: Dave Reisner -Date: Wed, 24 Jul 2013 11:19:24 -0400 -Subject: [PATCH 4/5] tmpfiles: introduce --exclude-prefix - -The opposite of --prefix, allows specifying path prefixes which should -be skipped when processing rules. ---- - man/systemd-tmpfiles.xml | 7 +++++ - shell-completion/systemd-zsh-completion.zsh | 1 + - src/tmpfiles/tmpfiles.c | 44 ++++++++++++++++++----------- - 3 files changed, 36 insertions(+), 16 deletions(-) - -diff --git a/man/systemd-tmpfiles.xml b/man/systemd-tmpfiles.xml -index b0f2d9c..403592d 100644 ---- a/man/systemd-tmpfiles.xml -+++ b/man/systemd-tmpfiles.xml -@@ -124,6 +124,13 @@ - prefix. This option can be specified - multiple times. - -+ -+ -+ Ignore rules that -+ apply to paths with the specified -+ prefix. This option can be specified -+ multiple times. -+ - - - -diff --git a/shell-completion/systemd-zsh-completion.zsh b/shell-completion/systemd-zsh-completion.zsh -index c85e00e..7aebbcd 100644 ---- a/shell-completion/systemd-zsh-completion.zsh -+++ b/shell-completion/systemd-zsh-completion.zsh -@@ -249,6 +249,7 @@ _ctls() - '--clean[Clean up all files and directories with an age parameter configured.]' \ - '--remove[All files and directories marked with r, R in the configuration files are removed.]' \ - '--prefix=[Only apply rules that apply to paths with the specified prefix.]' \ -+ '--exclude-prefix=[Ignore rules that apply to paths with the specified prefix.]' \ - '--help[Prints a short help text and exits.]' \ - '*::files:_files' - ;; -diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c -index cb15133..5eca82a 100644 ---- a/src/tmpfiles/tmpfiles.c -+++ b/src/tmpfiles/tmpfiles.c -@@ -106,6 +106,7 @@ static bool arg_clean = false; - static bool arg_remove = false; - - static char **include_prefixes = NULL; -+static char **exclude_prefixes = NULL; - - static const char conf_file_dirs[] = - "/etc/tmpfiles.d\0" -@@ -1021,16 +1022,19 @@ static bool item_equal(Item *a, Item *b) { - static bool should_include_path(const char *path) { - char **prefix; - -- /* no explicit paths specified for inclusion, so everything is valid */ -- if (strv_length(include_prefixes) == 0) -- return true; -+ STRV_FOREACH(prefix, exclude_prefixes) { -+ if (path_startswith(path, *prefix)) -+ return false; -+ } - - STRV_FOREACH(prefix, include_prefixes) { - if (path_startswith(path, *prefix)) - return true; - } - -- return false; -+ /* no matches, so we should include this path only if we -+ * have no whitelist at all */ -+ return strv_length(include_prefixes) == 0; - } - - static int parse_line(const char *fname, unsigned line, const char *buffer) { -@@ -1219,11 +1223,12 @@ static int help(void) { - - printf("%s [OPTIONS...] [CONFIGURATION FILE...]\n\n" - "Creates, deletes and cleans up volatile and temporary files and directories.\n\n" -- " -h --help Show this help\n" -- " --create Create marked files/directories\n" -- " --clean Clean up marked directories\n" -- " --remove Remove marked files/directories\n" -- " --prefix=PATH Only apply rules that apply to paths with the specified prefix\n", -+ " -h --help Show this help\n" -+ " --create Create marked files/directories\n" -+ " --clean Clean up marked directories\n" -+ " --remove Remove marked files/directories\n" -+ " --prefix=PATH Only apply rules that apply to paths with the specified prefix\n" -+ " --exclude-prefix=PATH Ignore rules that apply to paths with the specified prefix\n", - program_invocation_short_name); - - return 0; -@@ -1235,16 +1240,18 @@ static int parse_argv(int argc, char *argv[]) { - ARG_CREATE, - ARG_CLEAN, - ARG_REMOVE, -- ARG_PREFIX -+ ARG_PREFIX, -+ ARG_EXCLUDE_PREFIX, - }; - - static const struct option options[] = { -- { "help", no_argument, NULL, 'h' }, -- { "create", no_argument, NULL, ARG_CREATE }, -- { "clean", no_argument, NULL, ARG_CLEAN }, -- { "remove", no_argument, NULL, ARG_REMOVE }, -- { "prefix", required_argument, NULL, ARG_PREFIX }, -- { NULL, 0, NULL, 0 } -+ { "help", no_argument, NULL, 'h' }, -+ { "create", no_argument, NULL, ARG_CREATE }, -+ { "clean", no_argument, NULL, ARG_CLEAN }, -+ { "remove", no_argument, NULL, ARG_REMOVE }, -+ { "prefix", required_argument, NULL, ARG_PREFIX }, -+ { "exclude-prefix", required_argument, NULL, ARG_EXCLUDE_PREFIX }, -+ { NULL, 0, NULL, 0 } - }; - - int c; -@@ -1277,6 +1284,11 @@ static int parse_argv(int argc, char *argv[]) { - return log_oom(); - break; - -+ case ARG_EXCLUDE_PREFIX: -+ if (strv_extend(&exclude_prefixes, optarg) < 0) -+ return log_oom(); -+ break; -+ - case '?': - return -EINVAL; - --- -1.8.3.2 - diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0005-tmpfiles-setup-exclude-dev-prefixes-files.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0005-tmpfiles-setup-exclude-dev-prefixes-files.patch deleted file mode 100644 index 9d674b2d45..0000000000 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0005-tmpfiles-setup-exclude-dev-prefixes-files.patch +++ /dev/null @@ -1,23 +0,0 @@ -From a7b85011f13bf2a90cfcfad1f3d2ca2deebaa2f1 Mon Sep 17 00:00:00 2001 -From: Dave Reisner -Date: Wed, 24 Jul 2013 11:58:35 -0400 -Subject: [PATCH 5/5] tmpfiles-setup: exclude /dev prefixes files - -Fixes Arch Linux bug: https://bugs.archlinux.org/task/36259 ---- - units/systemd-tmpfiles-setup.service.in | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/units/systemd-tmpfiles-setup.service.in b/units/systemd-tmpfiles-setup.service.in -index 67c7d4a..6f98063 100644 ---- a/units/systemd-tmpfiles-setup.service.in -+++ b/units/systemd-tmpfiles-setup.service.in -@@ -21,4 +21,4 @@ ConditionDirectoryNotEmpty=|/run/tmpfiles.d - [Service] - Type=oneshot - RemainAfterExit=yes --ExecStart=@rootbindir@/systemd-tmpfiles --create --remove -+ExecStart=@rootbindir@/systemd-tmpfiles --create --remove --exclude-prefix=/dev --- -1.8.3.2 - diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0006-allow-tabs-in-configuration-files.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0006-allow-tabs-in-configuration-files.patch deleted file mode 100644 index 2e7567ba4e..0000000000 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0006-allow-tabs-in-configuration-files.patch +++ /dev/null @@ -1,43 +0,0 @@ -From ac4c8d6da8b5ebc35f02c9c6cb7595be7b134a05 Mon Sep 17 00:00:00 2001 -From: Zbigniew Jędrzejewski-Szmek -Date: Thu, 12 Sep 2013 01:50:16 +0000 -Subject: Allow tabs in environment files - -bash allows them, and so should we. - -string_has_cc is changed to allow tabs, and if they are not wanted, -they must be now checked for explicitly. There are two other callers, -apart from the env file loaders, and one already checked anyway, and -the other is changed to check. - -https://bugs.freedesktop.org/show_bug.cgi?id=68592 -https://bugs.gentoo.org/show_bug.cgi?id=481554 ---- -diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c -index 0437e33..6a43aeb 100644 ---- a/src/hostname/hostnamed.c -+++ b/src/hostname/hostnamed.c -@@ -553,7 +553,8 @@ static DBusHandlerResult hostname_message_handler( - * safe than sorry */ - if (k == PROP_ICON_NAME && !filename_is_safe(name)) - return bus_send_error_reply(connection, message, NULL, -EINVAL); -- if (k == PROP_PRETTY_HOSTNAME && string_has_cc(name)) -+ if (k == PROP_PRETTY_HOSTNAME && -+ (string_has_cc(name) || chars_intersect(name, "\t"))) - return bus_send_error_reply(connection, message, NULL, -EINVAL); - if (k == PROP_CHASSIS && !valid_chassis(name)) - return bus_send_error_reply(connection, message, NULL, -EINVAL); -diff --git a/src/shared/util.c b/src/shared/util.c -index 1dde8af..ad463e8 100644 ---- a/src/shared/util.c -+++ b/src/shared/util.c -@@ -5311,6 +5311,10 @@ bool string_is_safe(const char *p) { - return true; - } - -+/** -+ * Check if a string contains control characters. -+ * Spaces and tabs are not considered control characters. -+ */ - bool string_has_cc(const char *p) { - const char *t; diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0007-allow-tabs-in-configuration-files2.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0007-allow-tabs-in-configuration-files2.patch deleted file mode 100644 index b7f0114421..0000000000 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/206-0007-allow-tabs-in-configuration-files2.patch +++ /dev/null @@ -1,22 +0,0 @@ -From da2620a5f878ad5c8d8d51992528cb3e637c7d1f Mon Sep 17 00:00:00 2001 -From: Zbigniew Jędrzejewski-Szmek -Date: Thu, 12 Sep 2013 14:03:16 +0000 -Subject: Actually allow tabs in environment files - -Fixup for ac4c8d6da8b5e. ---- -diff --git a/src/shared/util.c b/src/shared/util.c -index ad463e8..9a075fa 100644 ---- a/src/shared/util.c -+++ b/src/shared/util.c -@@ -5321,7 +5321,7 @@ bool string_has_cc(const char *p) { - assert(p); - - for (t = p; *t; t++) -- if (*t > 0 && *t < ' ') -+ if (*t > 0 && *t < ' ' && *t != '\t') - return true; - - return false; --- -cgit v0.9.0.2-2-gbebe From 756bae743aef24c617d149f14e6a55c9eb2663a2 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 14 Mar 2014 18:14:58 +0000 Subject: [PATCH 3/4] clean(sys-apps/systemd) remove unused 207 systemd ebuild --- .../sys-apps/systemd/systemd-207-r6.ebuild | 1 - .../sys-apps/systemd/systemd-207.ebuild | 322 ------------------ 2 files changed, 323 deletions(-) delete mode 120000 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-207-r6.ebuild delete mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-207.ebuild diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-207-r6.ebuild b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-207-r6.ebuild deleted file mode 120000 index e1713cc212..0000000000 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-207-r6.ebuild +++ /dev/null @@ -1 +0,0 @@ -systemd-207.ebuild \ No newline at end of file diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-207.ebuild b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-207.ebuild deleted file mode 100644 index 62d250e8e8..0000000000 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-207.ebuild +++ /dev/null @@ -1,322 +0,0 @@ -# Copyright 1999-2013 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/sys-apps/systemd/systemd-207.ebuild,v 1.2 2013/09/14 18:44:05 floppym Exp $ - -EAPI=5 - -AUTOTOOLS_PRUNE_LIBTOOL_FILES=all -PYTHON_COMPAT=( python2_7 ) -inherit autotools-utils bash-completion-r1 fcaps linux-info multilib \ - multilib-minimal pam python-single-r1 systemd toolchain-funcs udev \ - user - -DESCRIPTION="System and service manager for Linux" -HOMEPAGE="http://www.freedesktop.org/wiki/Software/systemd" -SRC_URI="http://www.freedesktop.org/software/systemd/${P}.tar.xz" - -LICENSE="GPL-2 LGPL-2.1 MIT public-domain" -SLOT="0" -KEYWORDS="amd64 arm ppc ppc64 x86" -IUSE="acl audit cryptsetup doc +firmware-loader gcrypt gudev http introspection - +kmod lzma openrc pam policykit python qrcode selinux tcpd test - vanilla xattr" - -MINKV="3.0" - -COMMON_DEPEND=">=sys-apps/dbus-1.6.8-r1 - >=sys-apps/util-linux-2.20 - sys-libs/libcap - acl? ( sys-apps/acl ) - audit? ( >=sys-process/audit-2 ) - cryptsetup? ( >=sys-fs/cryptsetup-1.6 ) - gcrypt? ( >=dev-libs/libgcrypt-1.4.5 ) - gudev? ( >=dev-libs/glib-2[${MULTILIB_USEDEP}] ) - http? ( net-libs/libmicrohttpd ) - introspection? ( >=dev-libs/gobject-introspection-1.31.1 ) - kmod? ( >=sys-apps/kmod-14-r1 ) - lzma? ( app-arch/xz-utils[${MULTILIB_USEDEP}] ) - pam? ( virtual/pam ) - python? ( ${PYTHON_DEPS} ) - qrcode? ( media-gfx/qrencode ) - selinux? ( sys-libs/libselinux ) - tcpd? ( sys-apps/tcp-wrappers ) - xattr? ( sys-apps/attr ) - abi_x86_32? ( !<=app-emulation/emul-linux-x86-baselibs-20130224-r9 - !app-emulation/emul-linux-x86-baselibs[-abi_x86_32(-)] )" - -# baselayout-2.2 has /run -RDEPEND="${COMMON_DEPEND} - >=sys-apps/baselayout-2.2 - openrc? ( >=sys-fs/udev-init-scripts-25 ) - || ( - >=sys-apps/util-linux-2.22 - Date: Fri, 14 Mar 2014 18:31:32 +0000 Subject: [PATCH 4/4] feat(sys-apps/systemd) add support for multiple dns servers As requested by @polvi --- ...llow-more-than-one-static-dns-server.patch | 130 ++++++++++++++++++ ...md-211-r2.ebuild => systemd-211-r3.ebuild} | 3 + 2 files changed, 133 insertions(+) create mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-networkd-allow-more-than-one-static-dns-server.patch rename sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/{systemd-211-r2.ebuild => systemd-211-r3.ebuild} (99%) diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-networkd-allow-more-than-one-static-dns-server.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-networkd-allow-more-than-one-static-dns-server.patch new file mode 100644 index 0000000000..35eb09dcf6 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-networkd-allow-more-than-one-static-dns-server.patch @@ -0,0 +1,130 @@ +From 06f021a8048583d66202e3ac5cd0a12386d33ac2 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Thu, 13 Mar 2014 20:46:45 +0100 +Subject: [PATCH] networkd: allow more than one static DNS server + + +diff --git a/man/systemd.network.xml b/man/systemd.network.xml +index 4118fc9b65d4..7609128f3f97 100644 +--- a/man/systemd.network.xml ++++ b/man/systemd.network.xml +@@ -221,8 +221,8 @@ + DNS= + + A DNS server address, which must be in the format described in +- inet_pton3 +- . ++ inet_pton3. ++ This option may be specified repeatedly. + + + +diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c +index c92418967b48..414b3bccfa64 100644 +--- a/src/network/networkd-address.c ++++ b/src/network/networkd-address.c +@@ -225,7 +225,7 @@ int config_parse_dns(const char *unit, + const char *rvalue, + void *data, + void *userdata) { +- Address **dns = data; ++ Set **dns = data; + _cleanup_address_free_ Address *n = NULL; + int r; + +@@ -246,7 +246,7 @@ int config_parse_dns(const char *unit, + return 0; + } + +- *dns = n; ++ set_put(*dns, n); + n = NULL; + + return 0; +diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c +index 8c2f5efbd341..c730e7148df3 100644 +--- a/src/network/networkd-manager.c ++++ b/src/network/networkd-manager.c +@@ -442,10 +442,17 @@ int manager_update_resolv_conf(Manager *m) { + } + } + +- HASHMAP_FOREACH(link, m->links, i) +- if (link->network && link->network->dns) +- append_dns(f, &link->network->dns->in_addr.in, +- link->network->dns->family, &count); ++ HASHMAP_FOREACH(link, m->links, i) { ++ if (link->network && link->network->dns) { ++ Address *address; ++ Iterator j; ++ ++ SET_FOREACH(address, link->network->dns, j) { ++ append_dns(f, &address->in_addr.in, ++ address->family, &count); ++ } ++ } ++ } + + fflush(f); + +diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c +index 6437ff4230f5..6e9915b75dab 100644 +--- a/src/network/networkd-network.c ++++ b/src/network/networkd-network.c +@@ -69,6 +69,10 @@ static int network_load_one(Manager *manager, const char *filename) { + if (!network->routes_by_section) + return log_oom(); + ++ network->dns = set_new(NULL, NULL); ++ if (!network->dns) ++ return log_oom(); ++ + network->filename = strdup(filename); + if (!network->filename) + return log_oom(); +@@ -136,6 +140,7 @@ int network_load(Manager *manager) { + void network_free(Network *network) { + Route *route; + Address *address; ++ Iterator i; + + if (!network) + return; +@@ -150,7 +155,10 @@ void network_free(Network *network) { + + free(network->description); + +- address_free(network->dns); ++ SET_FOREACH(address, network->dns, i) ++ address_free(address); ++ ++ set_free(network->dns); + + hashmap_free(network->vlans); + +diff --git a/src/network/networkd.h b/src/network/networkd.h +index 0c0171993d72..311350c1e2e0 100644 +--- a/src/network/networkd.h ++++ b/src/network/networkd.h +@@ -33,6 +33,7 @@ + #include "rtnl-util.h" + #include "hashmap.h" + #include "list.h" ++#include "set.h" + #include "condition-util.h" + + typedef struct NetDev NetDev; +@@ -130,11 +131,12 @@ struct Network { + + LIST_HEAD(Address, static_addresses); + LIST_HEAD(Route, static_routes); +- Address *dns; + + Hashmap *addresses_by_section; + Hashmap *routes_by_section; + ++ Set *dns; ++ + LIST_FIELDS(Network, networks); + }; + diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-211-r2.ebuild b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-211-r3.ebuild similarity index 99% rename from sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-211-r2.ebuild rename to sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-211-r3.ebuild index 3634bbc512..3a6e8d490b 100644 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-211-r2.ebuild +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-211-r3.ebuild @@ -126,6 +126,9 @@ src_prepare() { epatch "${FILESDIR}"/211-003-tmpfiles-add-root-to-the-man-page.patch epatch "${FILESDIR}"/211-004-machine-id-add-root-option-to-operate-on-an-alternate-fs-tree.patch + # dns feature for more than one server + epatch "${FILESDIR}"/211-networkd-allow-more-than-one-static-dns-server.patch + if [[ ${PV} == *9999 ]]; then if use doc; then gtkdocize --docdir docs/ || die