chiark / gitweb /
sd-dhcp-client/networkd: add domainname support
[elogind.git] / src / network / networkd-manager.c
index 8eaf101df3956e9d4ac56f24ef9732f1544ccfdd..5ab9ba0bafd09d240e104e44970383f382808bbf 100644 (file)
@@ -55,7 +55,7 @@ int manager_new(Manager **ret) {
                 return r;
 
         r = sd_bus_default_system(&m->bus);
-        if (r < 0)
+        if (r < 0 && r != -ENOENT) /* TODO: drop when we can rely on kdbus */
                 return r;
 
         m->udev = udev_new();
@@ -288,6 +288,11 @@ int manager_rtnl_listen(Manager *m) {
 int manager_bus_listen(Manager *m) {
         int r;
 
+        assert(m->event);
+
+        if (!m->bus) /* TODO: drop when we can rely on kdbus */
+                return 0;
+
         r = sd_bus_attach_event(m->bus, m->event, 0);
         if (r < 0)
                 return r;
@@ -320,6 +325,7 @@ int manager_update_resolv_conf(Manager *m) {
         Link *link;
         Iterator i;
         unsigned count = 0;
+        const char *domainname = NULL;
         int r;
 
         assert(m);
@@ -345,12 +351,20 @@ int manager_update_resolv_conf(Manager *m) {
                         struct in_addr *nameservers;
                         size_t nameservers_size;
 
-                        r = sd_dhcp_client_get_dns(link->dhcp, &nameservers, &nameservers_size);
-                        if (r >= 0) {
-                                unsigned j;
+                        if (link->network->dhcp_dns) {
+                                r = sd_dhcp_client_get_dns(link->dhcp, &nameservers, &nameservers_size);
+                                if (r >= 0) {
+                                        unsigned j;
+
+                                        for (j = 0; j < nameservers_size; j++)
+                                                append_dns(f, &nameservers[j], AF_INET, &count);
+                                }
+                        }
 
-                                for (j = 0; j < nameservers_size; j++)
-                                        append_dns(f, &nameservers[j], AF_INET, &count);
+                        if (link->network->dhcp_domainname && !domainname) {
+                                r = sd_dhcp_client_get_domainname(link->dhcp, &domainname);
+                                if (r >= 0)
+                                       fprintf(f, "domain %s\n", domainname);
                         }
                 }
         }