From 1ff7829b49f489dc56532cf960f8df4f40239743 Mon Sep 17 00:00:00 2001 From: Nick Peng Date: Sat, 9 Sep 2023 17:20:42 +0800 Subject: [PATCH] dns: simple make DDR request SOA. --- src/dns.h | 1 + src/dns_server.c | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/dns.h b/src/dns.h index 0ed573a5d3..f52dceb6bd 100644 --- a/src/dns.h +++ b/src/dns.h @@ -72,6 +72,7 @@ typedef enum dns_type { DNS_T_SRV = 33, DNS_T_OPT = 41, DNS_T_SSHFP = 44, + DNS_T_SVCB = 64, DNS_T_HTTPS = 65, DNS_T_SPF = 99, DNS_T_AXFR = 252, diff --git a/src/dns_server.c b/src/dns_server.c index 256d66f94b..e630e61b6c 100644 --- a/src/dns_server.c +++ b/src/dns_server.c @@ -3961,6 +3961,20 @@ static int _dns_server_process_ptr(struct dns_request *request) return 0; } +static int _dns_server_process_DDR(struct dns_request *request) +{ + return _dns_server_reply_SOA(DNS_RC_NOERROR, request); +} + +static int _dns_server_process_srv(struct dns_request *request) +{ + if (strncmp("_dns.resolver.arpa", request->domain, DNS_MAX_CNAME_LEN) == 0) { + return _dns_server_process_DDR(request); + } + + return -1; +} + static void _dns_server_log_rule(const char *domain, enum domain_rule rule_type, unsigned char *rule_key, int rule_key_len) { @@ -5147,6 +5161,15 @@ static int _dns_server_process_special_query(struct dns_request *request) request->passthrough = 1; } break; + case DNS_T_SVCB: + ret = _dns_server_process_srv(request); + if (ret == 0) { + goto clean_exit; + } else { + /* pass to upstream server */ + request->passthrough = 1; + } + break; case DNS_T_A: break; case DNS_T_AAAA: