Preparation for getting rid of circular header dependencies.
DEFINE_CONFIG_PARSE_ENUM(config_parse_dns_stub_listener_mode, dns_stub_listener_mode, DnsStubListenerMode);
-static int manager_add_dns_server_by_string(Manager *m, DnsServerType type, const char *word) {
- _cleanup_free_ char *server_name = NULL;
- union in_addr_union address;
- int family, r, ifindex = 0;
- uint16_t port;
- DnsServer *s;
-
- assert(m);
- assert(word);
-
- r = in_addr_port_ifindex_name_from_string_auto(word, &family, &address, &port, &ifindex, &server_name);
- if (r < 0)
- return r;
-
- /* Silently filter out 0.0.0.0, 127.0.0.53, 127.0.0.54 (our own stub DNS listener) */
- if (!dns_server_address_valid(family, &address))
- return 0;
-
- /* By default, the port number is determined with the transaction feature level.
- * See dns_transaction_port() and dns_server_port(). */
- if (IN_SET(port, 53, 853))
- port = 0;
-
- /* Filter out duplicates */
- s = dns_server_find(manager_get_first_dns_server(m, type), family, &address, port, ifindex, server_name);
- if (s) {
- /* Drop the marker. This is used to find the servers that ceased to exist, see
- * manager_mark_dns_servers() and manager_flush_marked_dns_servers(). */
- dns_server_move_back_and_unmark(s);
- return 0;
- }
-
- return dns_server_new(m, NULL, type, NULL, family, &address, port, ifindex, server_name, RESOLVE_CONFIG_SOURCE_FILE);
-}
-
-int manager_parse_dns_server_string_and_warn(Manager *m, DnsServerType type, const char *string) {
- int r;
-
- assert(m);
- assert(string);
-
- for (;;) {
- _cleanup_free_ char *word = NULL;
-
- r = extract_first_word(&string, &word, NULL, 0);
- if (r <= 0)
- return r;
-
- r = manager_add_dns_server_by_string(m, type, word);
- if (r < 0)
- log_warning_errno(r, "Failed to add DNS server address '%s', ignoring: %m", word);
- }
-}
-
-static int manager_add_search_domain_by_string(Manager *m, const char *domain) {
- DnsSearchDomain *d;
- bool route_only;
- int r;
-
- assert(m);
- assert(domain);
-
- route_only = *domain == '~';
- if (route_only)
- domain++;
-
- if (dns_name_is_root(domain) || streq(domain, "*")) {
- route_only = true;
- domain = ".";
- }
-
- r = dns_search_domain_find(m->search_domains, domain, &d);
- if (r < 0)
- return r;
- if (r > 0)
- dns_search_domain_move_back_and_unmark(d);
- else {
- r = dns_search_domain_new(m, &d, DNS_SEARCH_DOMAIN_SYSTEM, NULL, domain);
- if (r < 0)
- return r;
- }
-
- d->route_only = route_only;
- return 0;
-}
-
-int manager_parse_search_domains_and_warn(Manager *m, const char *string) {
- int r;
-
- assert(m);
- assert(string);
-
- for (;;) {
- _cleanup_free_ char *word = NULL;
-
- r = extract_first_word(&string, &word, NULL, EXTRACT_UNQUOTE);
- if (r <= 0)
- return r;
-
- r = manager_add_search_domain_by_string(m, word);
- if (r < 0)
- log_warning_errno(r, "Failed to add search domain '%s', ignoring: %m", word);
- }
-}
-
int config_parse_dns_servers(
const char *unit,
const char *filename,
int manager_parse_config_file(Manager *m);
-int manager_parse_search_domains_and_warn(Manager *m, const char *string);
-int manager_parse_dns_server_string_and_warn(Manager *m, DnsServerType type, const char *string);
-
const struct ConfigPerfItem* resolved_gperf_lookup(const char *key, GPERF_LEN_TYPE length);
CONFIG_PARSER_PROTOTYPE(config_parse_dns_servers);
#include "resolved-manager.h"
#include "resolved-resolv-conf.h"
#include "siphash24.h"
+#include "socket-netlink.h"
#include "socket-util.h"
#include "string-table.h"
#include "string-util.h"
return NULL;
}
+static int manager_add_dns_server_by_string(Manager *m, DnsServerType type, const char *word) {
+ _cleanup_free_ char *server_name = NULL;
+ union in_addr_union address;
+ int family, r, ifindex = 0;
+ uint16_t port;
+ DnsServer *s;
+
+ assert(m);
+ assert(word);
+
+ r = in_addr_port_ifindex_name_from_string_auto(word, &family, &address, &port, &ifindex, &server_name);
+ if (r < 0)
+ return r;
+
+ /* Silently filter out 0.0.0.0, 127.0.0.53, 127.0.0.54 (our own stub DNS listener) */
+ if (!dns_server_address_valid(family, &address))
+ return 0;
+
+ /* By default, the port number is determined with the transaction feature level.
+ * See dns_transaction_port() and dns_server_port(). */
+ if (IN_SET(port, 53, 853))
+ port = 0;
+
+ /* Filter out duplicates */
+ s = dns_server_find(manager_get_first_dns_server(m, type), family, &address, port, ifindex, server_name);
+ if (s) {
+ /* Drop the marker. This is used to find the servers that ceased to exist, see
+ * manager_mark_dns_servers() and manager_flush_marked_dns_servers(). */
+ dns_server_move_back_and_unmark(s);
+ return 0;
+ }
+
+ return dns_server_new(m, NULL, type, NULL, family, &address, port, ifindex, server_name, RESOLVE_CONFIG_SOURCE_FILE);
+}
+
+int manager_parse_dns_server_string_and_warn(Manager *m, DnsServerType type, const char *string) {
+ int r;
+
+ assert(m);
+ assert(string);
+
+ for (;;) {
+ _cleanup_free_ char *word = NULL;
+
+ r = extract_first_word(&string, &word, NULL, 0);
+ if (r <= 0)
+ return r;
+
+ r = manager_add_dns_server_by_string(m, type, word);
+ if (r < 0)
+ log_warning_errno(r, "Failed to add DNS server address '%s', ignoring: %m", word);
+ }
+}
+
+static int manager_add_search_domain_by_string(Manager *m, const char *domain) {
+ DnsSearchDomain *d;
+ bool route_only;
+ int r;
+
+ assert(m);
+ assert(domain);
+
+ route_only = *domain == '~';
+ if (route_only)
+ domain++;
+
+ if (dns_name_is_root(domain) || streq(domain, "*")) {
+ route_only = true;
+ domain = ".";
+ }
+
+ r = dns_search_domain_find(m->search_domains, domain, &d);
+ if (r < 0)
+ return r;
+ if (r > 0)
+ dns_search_domain_move_back_and_unmark(d);
+ else {
+ r = dns_search_domain_new(m, &d, DNS_SEARCH_DOMAIN_SYSTEM, NULL, domain);
+ if (r < 0)
+ return r;
+ }
+
+ d->route_only = route_only;
+ return 0;
+}
+
+int manager_parse_search_domains_and_warn(Manager *m, const char *string) {
+ int r;
+
+ assert(m);
+ assert(string);
+
+ for (;;) {
+ _cleanup_free_ char *word = NULL;
+
+ r = extract_first_word(&string, &word, NULL, EXTRACT_UNQUOTE);
+ if (r <= 0)
+ return r;
+
+ r = manager_add_search_domain_by_string(m, word);
+ if (r < 0)
+ log_warning_errno(r, "Failed to add search domain '%s', ignoring: %m", word);
+ }
+}
+
DnsServer *manager_get_first_dns_server(Manager *m, DnsServerType t) {
assert(m);
bool dns_server_unlink_marked(DnsServer *first);
void dns_server_mark_all(DnsServer *first);
+int manager_parse_search_domains_and_warn(Manager *m, const char *string);
+int manager_parse_dns_server_string_and_warn(Manager *m, DnsServerType type, const char *string);
+
DnsServer *manager_get_first_dns_server(Manager *m, DnsServerType t);
DnsServer *manager_set_dns_server(Manager *m, DnsServer *s);
#include "resolved-util.h"
#include "resolved-varlink.h"
#include "socket-util.h"
+#include "socket-netlink.h"
#include "string-table.h"
#include "string-util.h"
#include "utf8.h"