From 422f98256e08a9ccfbcc369c851d1f7332847c27 Mon Sep 17 00:00:00 2001 From: Nick Peng Date: Wed, 10 Jan 2024 22:35:39 +0800 Subject: [PATCH] dns_conf: add -enable-cache for domain-rules --- src/dns_conf.c | 14 ++++++++++++++ src/dns_conf.h | 1 + src/dns_server.c | 4 ++++ 3 files changed, 19 insertions(+) diff --git a/src/dns_conf.c b/src/dns_conf.c index 69cce82b11..d2e8595f82 100644 --- a/src/dns_conf.c +++ b/src/dns_conf.c @@ -4393,6 +4393,11 @@ static int _conf_domain_rule_no_cache(const char *domain) return _config_domain_rule_flag_set(domain, DOMAIN_FLAG_NO_CACHE, 0); } +static int _conf_domain_rule_enable_cache(const char *domain) +{ + return _config_domain_rule_flag_set(domain, DOMAIN_FLAG_ENABLE_CACHE, 0); +} + static int _conf_domain_rule_no_ipalias(const char *domain) { return _config_domain_rule_flag_set(domain, DOMAIN_FLAG_NO_IPALIAS, 0); @@ -4427,6 +4432,7 @@ static int _conf_domain_rules(void *data, int argc, char *argv[]) {"delete", no_argument, NULL, 255}, {"no-cache", no_argument, NULL, 256}, {"no-ip-alias", no_argument, NULL, 257}, + {"enable-cache", no_argument, NULL, 258}, {NULL, no_argument, NULL, 0} }; /* clang-format on */ @@ -4616,6 +4622,14 @@ static int _conf_domain_rules(void *data, int argc, char *argv[]) break; } + case 258: { + if (_conf_domain_rule_enable_cache(domain) != 0) { + tlog(TLOG_ERROR, "set enable-cache rule failed."); + goto errout; + } + + break; + } default: tlog(TLOG_WARN, "unknown domain-rules option: %s at '%s:%d'.", argv[optind - 1], conf_get_conf_file(), conf_get_current_lineno()); diff --git a/src/dns_conf.h b/src/dns_conf.h index dd4d4a7987..767e432afb 100644 --- a/src/dns_conf.h +++ b/src/dns_conf.h @@ -135,6 +135,7 @@ typedef enum { #define DOMAIN_FLAG_NO_CACHE (1 << 17) #define DOMAIN_FLAG_NO_IPALIAS (1 << 18) #define DOMAIN_FLAG_GROUP_IGNORE (1 << 19) +#define DOMAIN_FLAG_ENABLE_CACHE (1 << 20) #define IP_RULE_FLAG_BLACKLIST (1 << 0) #define IP_RULE_FLAG_WHITELIST (1 << 1) diff --git a/src/dns_server.c b/src/dns_server.c index 07de6fdc5d..0b8a64a398 100644 --- a/src/dns_server.c +++ b/src/dns_server.c @@ -4792,6 +4792,10 @@ static int _dns_server_pre_process_rule_flags(struct dns_request *request) request->no_cache = 1; } + if (flags & DOMAIN_FLAG_ENABLE_CACHE) { + request->no_cache = 0; + } + if (flags & DOMAIN_FLAG_NO_IPALIAS) { request->no_ipalias = 1; }