From 799d19f233dd9ae48a0a5d4809213821063a8706 Mon Sep 17 00:00:00 2001 From: Nick Peng Date: Wed, 28 Sep 2022 00:53:39 +0800 Subject: [PATCH] conf: add option resolv-hostname to skip resolve local hostname --- etc/smartdns/smartdns.conf | 3 +++ src/dns_conf.c | 10 ++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/etc/smartdns/smartdns.conf b/etc/smartdns/smartdns.conf index 5723256..64fdac3 100644 --- a/etc/smartdns/smartdns.conf +++ b/etc/smartdns/smartdns.conf @@ -4,6 +4,9 @@ # server-name smartdns # +# whether resolv local hostname to ip address +# resolv-hostname yes + # dns server run user # user [username] # example: run as nobody diff --git a/src/dns_conf.c b/src/dns_conf.c index 10b1c30..31d1178 100644 --- a/src/dns_conf.c +++ b/src/dns_conf.c @@ -83,6 +83,7 @@ int dns_conf_serve_expired_reply_ttl = 3; struct dns_servers dns_conf_servers[DNS_MAX_SERVERS]; char dns_conf_server_name[DNS_MAX_SERVER_NAME_LEN]; int dns_conf_server_num; +int dns_conf_resolv_hostname = 1; struct dns_domain_check_orders dns_conf_check_orders = { .orders = @@ -518,7 +519,8 @@ static void _config_address_destroy(radix_node_t *node, void *cbctx) node->data = NULL; } -static int _config_domain_set_rule_add_ext(char *set_name, enum domain_rule type, void *rule, unsigned int flags, int is_clear_flag) +static int _config_domain_set_rule_add_ext(char *set_name, enum domain_rule type, void *rule, unsigned int flags, + int is_clear_flag) { struct dns_domain_set_rule *set_rule = NULL; struct dns_domain_set_rule_list *set_rule_list = NULL; @@ -2136,7 +2138,7 @@ static void _config_setup_smartdns_domain(void) safe_strncpy(hostname, "smartdns", DNS_MAX_CNAME_LEN); } - if (hostname[0] != '\0') { + if (dns_conf_resolv_hostname == 1 && hostname[0] != '\0') { _config_domain_rule_flag_set(hostname, DOMAIN_FLAG_SMARTDNS_DOMAIN, 0); } @@ -2149,6 +2151,7 @@ static void _config_setup_smartdns_domain(void) static struct config_item _config_item[] = { CONF_STRING("server-name", (char *)dns_conf_server_name, DNS_MAX_SERVER_NAME_LEN), + CONF_YESNO("resolv-hostname", &dns_conf_resolv_hostname), CONF_CUSTOM("bind", _config_bind_ip_udp, NULL), CONF_CUSTOM("bind-tcp", _config_bind_ip_tcp, NULL), CONF_CUSTOM("server", _config_server_udp, NULL), @@ -2372,8 +2375,6 @@ static int _dns_server_load_conf_init(void) hash_init(dns_domain_set_rule_table.rule_list); hash_init(dns_domain_set_name_table.names); - _config_setup_smartdns_domain(); - return 0; } @@ -2456,6 +2457,7 @@ errout: static int _dns_conf_load_post(void) { + _config_setup_smartdns_domain(); _dns_conf_speed_check_mode_verify(); if (dns_conf_cachesize == 0 && dns_conf_response_mode == DNS_RESPONSE_MODE_FASTEST_RESPONSE) {