From de49c204a318fbb0d1c9f69ca3cd0dbfef34ed6a Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 14 Mar 2014 18:31:32 +0000 Subject: [PATCH] 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