mirror of
https://github.com/flatcar/scripts.git
synced 2026-05-04 03:41:05 +02:00
feat(sys-apps/systemd) add support for multiple dns servers
As requested by @polvi
This commit is contained in:
parent
756bae743a
commit
de49c204a3
@ -0,0 +1,130 @@
|
||||
From 06f021a8048583d66202e3ac5cd0a12386d33ac2 Mon Sep 17 00:00:00 2001
|
||||
From: Tom Gundersen <teg@jklm.no>
|
||||
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 @@
|
||||
<term><varname>DNS=</varname></term>
|
||||
<listitem>
|
||||
<para>A DNS server address, which must be in the format described in
|
||||
- <citerefentry><refentrytitle>inet_pton</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
||||
- .</para>
|
||||
+ <citerefentry><refentrytitle>inet_pton</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
|
||||
+ This option may be specified repeatedly.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
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);
|
||||
};
|
||||
|
||||
@ -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
|
||||
Loading…
x
Reference in New Issue
Block a user