]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: save DNS servers specified by DBus interface
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 3 Jul 2020 09:34:37 +0000 (18:34 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 20 Jul 2020 19:08:22 +0000 (04:08 +0900)
Also, filter out DNS servers which do not match link ifindex.

src/network/networkd-manager.c

index a87bf25d649d3b0df051e72c91b2e3923d0b21cb..273c00c36b91de469684a4450de38fabb8d7196d 100644 (file)
@@ -1425,13 +1425,16 @@ static int manager_connect_rtnl(Manager *m) {
         return 0;
 }
 
-static int ordered_set_put_dns_server(OrderedSet *s, struct in_addr_full *dns) {
+static int ordered_set_put_dns_server(OrderedSet *s, int ifindex, struct in_addr_full *dns) {
         const char *p;
         int r;
 
         assert(s);
         assert(dns);
 
+        if (dns->ifindex != 0 && dns->ifindex != ifindex)
+                return 0;
+
         p = in_addr_full_to_string(dns);
         if (!p)
                 return 0;
@@ -1443,7 +1446,7 @@ static int ordered_set_put_dns_server(OrderedSet *s, struct in_addr_full *dns) {
         return r;
 }
 
-static int ordered_set_put_dns_servers(OrderedSet *s, struct in_addr_full **dns, unsigned n) {
+static int ordered_set_put_dns_servers(OrderedSet *s, int ifindex, struct in_addr_full **dns, unsigned n) {
         int r, c = 0;
         unsigned i;
 
@@ -1451,7 +1454,7 @@ static int ordered_set_put_dns_servers(OrderedSet *s, struct in_addr_full **dns,
         assert(dns || n == 0);
 
         for (i = 0; i < n; i++) {
-                r = ordered_set_put_dns_server(s, dns[i]);
+                r = ordered_set_put_dns_server(s, ifindex, dns[i]);
                 if (r < 0)
                         return r;
 
@@ -1558,7 +1561,10 @@ static int manager_save(Manager *m) {
                         continue;
 
                 /* First add the static configured entries */
-                r = ordered_set_put_dns_servers(dns, link->network->dns, link->network->n_dns);
+                if (link->n_dns != (unsigned) -1)
+                        r = ordered_set_put_dns_servers(dns, link->ifindex, link->dns, link->n_dns);
+                else
+                        r = ordered_set_put_dns_servers(dns, link->ifindex, link->network->dns, link->network->n_dns);
                 if (r < 0)
                         return r;