dns_conf: update smartdns.conf and add -no-ip-alias for bind
This commit is contained in:
@@ -2084,6 +2084,7 @@ static int _config_bind_ip(int argc, char *argv[], DNS_BIND_TYPE type)
|
||||
{"no-speed-check", no_argument, NULL, 'S'},
|
||||
{"no-cache", no_argument, NULL, 'C'},
|
||||
{"no-dualstack-selection", no_argument, NULL, 'D'},
|
||||
{"no-ip-alias", no_argument, NULL, 'a'},
|
||||
{"force-aaaa-soa", no_argument, NULL, 'F'},
|
||||
{"ipset", required_argument, NULL, 255},
|
||||
{"nftset", required_argument, NULL, 256},
|
||||
@@ -2138,6 +2139,10 @@ static int _config_bind_ip(int argc, char *argv[], DNS_BIND_TYPE type)
|
||||
server_flag |= BIND_FLAG_NO_RULE_ADDR;
|
||||
break;
|
||||
}
|
||||
case 'a': {
|
||||
server_flag |= BIND_FLAG_NO_IP_ALIAS;
|
||||
break;
|
||||
}
|
||||
case 'N': {
|
||||
server_flag |= BIND_FLAG_NO_RULE_NAMESERVER;
|
||||
break;
|
||||
@@ -2509,6 +2514,7 @@ static void _dns_ip_rule_put(struct dns_ip_rule *rule)
|
||||
struct ip_rule_alias *alias = container_of(rule, struct ip_rule_alias, head);
|
||||
if (alias->ip_alias.ipaddr) {
|
||||
free(alias->ip_alias.ipaddr);
|
||||
alias->ip_alias.ipaddr = NULL;
|
||||
alias->ip_alias.ipaddr_num = 0;
|
||||
}
|
||||
}
|
||||
@@ -2861,7 +2867,7 @@ static int _config_ip_rules_free(struct dns_ip_rules *ip_rules)
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < DOMAIN_RULE_MAX; i++) {
|
||||
for (i = 0; i < IP_RULE_MAX; i++) {
|
||||
if (ip_rules->rules[i] == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -144,6 +144,7 @@ typedef enum {
|
||||
#define BIND_FLAG_FORCE_AAAA_SOA (1 << 8)
|
||||
#define BIND_FLAG_NO_RULE_CNAME (1 << 9)
|
||||
#define BIND_FLAG_NO_RULE_NFTSET (1 << 10)
|
||||
#define BIND_FLAG_NO_IP_ALIAS (1 << 11)
|
||||
|
||||
enum response_mode_type {
|
||||
DNS_RESPONSE_MODE_FIRST_PING_IP = 0,
|
||||
|
||||
@@ -4121,6 +4121,19 @@ static void _dns_server_get_domain_rule(struct dns_request *request)
|
||||
_dns_server_get_domain_rule_by_domain(request, request->domain, 1);
|
||||
}
|
||||
|
||||
static int _dns_server_pre_process_server_flags(struct dns_request *request)
|
||||
{
|
||||
if (_dns_server_has_bind_flag(request, BIND_FLAG_NO_CACHE) == 0) {
|
||||
request->no_cache = 1;
|
||||
}
|
||||
|
||||
if (_dns_server_has_bind_flag(request, BIND_FLAG_NO_IP_ALIAS) == 0) {
|
||||
request->no_ipalias = 1;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int _dns_server_pre_process_rule_flags(struct dns_request *request)
|
||||
{
|
||||
struct dns_rule_flags *rule_flag = NULL;
|
||||
@@ -4141,7 +4154,7 @@ static int _dns_server_pre_process_rule_flags(struct dns_request *request)
|
||||
request->no_serve_expired = 1;
|
||||
}
|
||||
|
||||
if ((flags & DOMAIN_FLAG_NO_CACHE) || (_dns_server_has_bind_flag(request, BIND_FLAG_NO_CACHE) == 0)) {
|
||||
if (flags & DOMAIN_FLAG_NO_CACHE) {
|
||||
request->no_cache = 1;
|
||||
}
|
||||
|
||||
@@ -5356,6 +5369,10 @@ static int _dns_server_do_query(struct dns_request *request, int skip_notify_eve
|
||||
goto clean_exit;
|
||||
}
|
||||
|
||||
if (_dns_server_pre_process_server_flags(request) == 0) {
|
||||
goto clean_exit;
|
||||
}
|
||||
|
||||
/* process domain flag */
|
||||
if (_dns_server_pre_process_rule_flags(request) == 0) {
|
||||
goto clean_exit;
|
||||
|
||||
Reference in New Issue
Block a user