chiark / gitweb /
resolve: reject empty TXT records
[elogind.git] / src / resolve / resolved-conf.c
index 0def80e3a578d84276348192d3924e64f2715ff1..63e87f8df52c44cae9d49c663d2af8cb442a58da 100644 (file)
@@ -81,7 +81,6 @@ int config_parse_dnsv(
                 void *userdata) {
 
         Manager *m = userdata;
-        DnsServer **l;
         int r;
 
         assert(filename);
@@ -89,24 +88,22 @@ int config_parse_dnsv(
         assert(rvalue);
         assert(m);
 
-        if (ltype == DNS_SERVER_FALLBACK)
-                l = &m->fallback_dns_servers;
-        else
-                l = &m->dns_servers;
-
-        /* Empty assignment means clear the list */
-        if (isempty(rvalue)) {
-                while (*l)
-                        dns_server_free(*l);
-
-                return 0;
+        if (isempty(rvalue))
+                /* Empty assignment means clear the list */
+                manager_flush_dns_servers(m, ltype);
+        else {
+                /* Otherwise add to the list */
+                r = manager_parse_dns_server(m, ltype, rvalue);
+                if (r < 0) {
+                        log_syntax(unit, LOG_ERR, filename, line, -r, "Failed to parse DNS server string '%s'. Ignoring.", rvalue);
+                        return 0;
+                }
         }
 
-        r = manager_parse_dns_server(m, ltype, rvalue);
-        if (r < 0) {
-                log_syntax(unit, LOG_ERR, filename, line, -r, "Failed to parse DNS server string '%s'. Ignoring.", rvalue);
-                return 0;
-        }
+        /* If we have a manual setting, then we stop reading
+         * /etc/resolv.conf */
+        if (ltype == DNS_SERVER_SYSTEM)
+                m->read_resolv_conf = false;
 
         return 0;
 }