Support force not CNAME records
This commit is contained in:
@@ -111,7 +111,7 @@ int dns_conf_rr_ttl_reply_max;
|
|||||||
int dns_conf_rr_ttl_min = 600;
|
int dns_conf_rr_ttl_min = 600;
|
||||||
int dns_conf_rr_ttl_max;
|
int dns_conf_rr_ttl_max;
|
||||||
int dns_conf_force_AAAA_SOA;
|
int dns_conf_force_AAAA_SOA;
|
||||||
|
int dns_conf_force_no_cname;
|
||||||
int dns_conf_ipset_timeout_enable;
|
int dns_conf_ipset_timeout_enable;
|
||||||
|
|
||||||
/* ECS */
|
/* ECS */
|
||||||
@@ -1872,6 +1872,7 @@ static struct config_item _config_item[] = {
|
|||||||
CONF_INT("rr-ttl-reply-max", &dns_conf_rr_ttl_reply_max, 0, CONF_INT_MAX),
|
CONF_INT("rr-ttl-reply-max", &dns_conf_rr_ttl_reply_max, 0, CONF_INT_MAX),
|
||||||
CONF_INT("max-reply-ip-num", &dns_conf_max_reply_ip_num, 1, CONF_INT_MAX),
|
CONF_INT("max-reply-ip-num", &dns_conf_max_reply_ip_num, 1, CONF_INT_MAX),
|
||||||
CONF_YESNO("force-AAAA-SOA", &dns_conf_force_AAAA_SOA),
|
CONF_YESNO("force-AAAA-SOA", &dns_conf_force_AAAA_SOA),
|
||||||
|
CONF_YESNO("force-no-CNAME", &dns_conf_force_no_cname),
|
||||||
CONF_CUSTOM("force-qtype-SOA", _config_qtype_soa, NULL),
|
CONF_CUSTOM("force-qtype-SOA", _config_qtype_soa, NULL),
|
||||||
CONF_CUSTOM("blacklist-ip", _config_blacklist_ip, NULL),
|
CONF_CUSTOM("blacklist-ip", _config_blacklist_ip, NULL),
|
||||||
CONF_CUSTOM("whitelist-ip", _conf_whitelist_ip, NULL),
|
CONF_CUSTOM("whitelist-ip", _conf_whitelist_ip, NULL),
|
||||||
|
|||||||
@@ -299,6 +299,8 @@ extern int dns_conf_rr_ttl_max;
|
|||||||
extern int dns_conf_force_AAAA_SOA;
|
extern int dns_conf_force_AAAA_SOA;
|
||||||
extern int dns_conf_ipset_timeout_enable;
|
extern int dns_conf_ipset_timeout_enable;
|
||||||
|
|
||||||
|
extern int dns_conf_force_no_cname;
|
||||||
|
|
||||||
extern struct dns_edns_client_subnet dns_conf_ipv4_ecs;
|
extern struct dns_edns_client_subnet dns_conf_ipv4_ecs;
|
||||||
extern struct dns_edns_client_subnet dns_conf_ipv6_ecs;
|
extern struct dns_edns_client_subnet dns_conf_ipv6_ecs;
|
||||||
|
|
||||||
|
|||||||
@@ -1372,13 +1372,17 @@ static int _dns_ip_address_check_add(struct dns_request *request, char *cname, u
|
|||||||
tlog(TLOG_ERROR, "malloc failed");
|
tlog(TLOG_ERROR, "malloc failed");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
memset(addr_map, 0, sizeof(*addr_map));
|
||||||
|
|
||||||
addr_map->addr_type = addr_type;
|
addr_map->addr_type = addr_type;
|
||||||
addr_map->hitnum = 1;
|
addr_map->hitnum = 1;
|
||||||
addr_map->recv_tick = get_tick_count();
|
addr_map->recv_tick = get_tick_count();
|
||||||
addr_map->ping_ttl = -1;
|
addr_map->ping_ttl = -1;
|
||||||
memcpy(addr_map->addr, addr, addr_len);
|
memcpy(addr_map->addr, addr, addr_len);
|
||||||
safe_strncpy(addr_map->cname, cname, DNS_MAX_CNAME_LEN);
|
if (dns_conf_force_no_cname == 0) {
|
||||||
|
safe_strncpy(addr_map->cname, cname, DNS_MAX_CNAME_LEN);
|
||||||
|
}
|
||||||
|
|
||||||
hash_add(request->ip_map, &addr_map->node, key);
|
hash_add(request->ip_map, &addr_map->node, key);
|
||||||
pthread_mutex_unlock(&request->ip_map_lock);
|
pthread_mutex_unlock(&request->ip_map_lock);
|
||||||
|
|
||||||
@@ -1969,7 +1973,7 @@ static int _dns_server_process_answer_A(struct dns_rrs *rrs, struct dns_request
|
|||||||
request->has_ipv4 = 1;
|
request->has_ipv4 = 1;
|
||||||
memcpy(request->ipv4_addr, addr, DNS_RR_A_LEN);
|
memcpy(request->ipv4_addr, addr, DNS_RR_A_LEN);
|
||||||
request->ttl_v4 = _dns_server_get_conf_ttl(ttl);
|
request->ttl_v4 = _dns_server_get_conf_ttl(ttl);
|
||||||
if (cname[0] != 0 && request->has_cname == 0) {
|
if (cname[0] != 0 && request->has_cname == 0 && dns_conf_force_no_cname == 0) {
|
||||||
request->has_cname = 1;
|
request->has_cname = 1;
|
||||||
safe_strncpy(request->cname, cname, DNS_MAX_CNAME_LEN);
|
safe_strncpy(request->cname, cname, DNS_MAX_CNAME_LEN);
|
||||||
}
|
}
|
||||||
@@ -2045,7 +2049,7 @@ static int _dns_server_process_answer_AAAA(struct dns_rrs *rrs, struct dns_reque
|
|||||||
request->has_ipv6 = 1;
|
request->has_ipv6 = 1;
|
||||||
memcpy(request->ipv6_addr, addr, DNS_RR_AAAA_LEN);
|
memcpy(request->ipv6_addr, addr, DNS_RR_AAAA_LEN);
|
||||||
request->ttl_v6 = _dns_server_get_conf_ttl(ttl);
|
request->ttl_v6 = _dns_server_get_conf_ttl(ttl);
|
||||||
if (cname[0] != 0 && request->has_cname == 0) {
|
if (cname[0] != 0 && request->has_cname == 0 && dns_conf_force_no_cname == 0) {
|
||||||
request->has_cname = 1;
|
request->has_cname = 1;
|
||||||
safe_strncpy(request->cname, cname, DNS_MAX_CNAME_LEN);
|
safe_strncpy(request->cname, cname, DNS_MAX_CNAME_LEN);
|
||||||
}
|
}
|
||||||
@@ -2317,6 +2321,10 @@ static int _dns_server_get_answer(struct dns_server_post_context *context)
|
|||||||
} break;
|
} break;
|
||||||
case DNS_T_CNAME: {
|
case DNS_T_CNAME: {
|
||||||
char cname[DNS_MAX_CNAME_LEN];
|
char cname[DNS_MAX_CNAME_LEN];
|
||||||
|
if (dns_conf_force_no_cname) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
dns_get_CNAME(rrs, name, DNS_MAX_CNAME_LEN, &ttl, cname, DNS_MAX_CNAME_LEN);
|
dns_get_CNAME(rrs, name, DNS_MAX_CNAME_LEN, &ttl, cname, DNS_MAX_CNAME_LEN);
|
||||||
tlog(TLOG_DEBUG, "name:%s ttl: %d cname: %s\n", name, ttl, cname);
|
tlog(TLOG_DEBUG, "name:%s ttl: %d cname: %s\n", name, ttl, cname);
|
||||||
safe_strncpy(request->cname, cname, DNS_MAX_CNAME_LEN);
|
safe_strncpy(request->cname, cname, DNS_MAX_CNAME_LEN);
|
||||||
|
|||||||
Reference in New Issue
Block a user