resolve: Move two functions from resolved-conf.h to resolved-dns-server.h
Preparation for getting rid of circular header dependencies.
This commit is contained in:
@@ -23,111 +23,6 @@
|
||||
|
||||
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,
|
||||
|
||||
@@ -15,9 +15,6 @@ typedef enum ResolveConfigSource {
|
||||
|
||||
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);
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#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"
|
||||
@@ -847,6 +848,111 @@ DnsServer *dns_server_find(DnsServer *first, int family, const union in_addr_uni
|
||||
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);
|
||||
|
||||
|
||||
@@ -159,6 +159,9 @@ void dns_server_unlink_on_reload(DnsServer *server);
|
||||
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);
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
#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"
|
||||
|
||||
Reference in New Issue
Block a user