When used, named processes RPZ zones slowly. Useful for system tests.
static bool nonearest = false;
static bool nosoa = false;
static bool notcp = false;
+static bool rpzslow = false;
static bool sigvalinsecs = false;
static bool transferinsecs = false;
static bool transferslowly = false;
if (dns_zone_mkey_month < dns_zone_mkey_day) {
named_main_earlyfatal("bad mkeytimer");
}
+ } else if (!strcmp(option, "rpzslow")) {
+ rpzslow = true;
} else if (!strcmp(option, "sigvalinsecs")) {
sigvalinsecs = true;
} else if (!strcmp(option, "transferinsecs")) {
if (notcp) {
ns_server_setoption(sctx, NS_SERVER_NOTCP, true);
}
+ if (rpzslow) {
+ ns_server_setoption(sctx, NS_SERVER_RPZSLOW, true);
+ }
if (sigvalinsecs) {
ns_server_setoption(sctx, NS_SERVER_SIGVALINSECS, true);
}
zones->p.nsip_on = nsip_on;
zones->p.nsdname_on = nsdname_on;
+ zones->p.slow_mode = ns_server_getoption(named_g_server->sctx,
+ NS_SERVER_RPZSLOW);
sub_obj = cfg_tuple_get(rpz_obj, "recursive-only");
if (!cfg_obj_isvoid(sub_obj) && !cfg_obj_asboolean(sub_obj)) {
bool nsip_wait_recurse;
bool nsdname_wait_recurse;
bool servfail_until_ready;
+ bool slow_mode; /* Used for system tests with '-T rpzslow' */
unsigned int min_ns_labels;
dns_rpz_num_t num_zones;
};
#include <isc/rwlock.h>
#include <isc/string.h>
#include <isc/util.h>
+#include <isc/uv.h>
#include <isc/work.h>
#include <dns/db.h>
dns_name_t *name = NULL;
dns_fixedname_t fixname;
char domain[DNS_NAME_FORMATSIZE];
+ bool slow_mode;
dns_name_format(&rpz->origin, domain, DNS_NAME_FORMATSIZE);
goto cleanup;
}
+ LOCK(&rpz->rpzs->maint_lock);
+ slow_mode = rpz->rpzs->p.slow_mode;
+ UNLOCK(&rpz->rpzs->maint_lock);
+
while (result == ISC_R_SUCCESS) {
char namebuf[DNS_NAME_FORMATSIZE];
dns_rdatasetiter_t *rdsiter = NULL;
next:
result = dns_dbiterator_next(updbit);
+
+ if (slow_mode) {
+ uv_sleep(100);
+ }
}
INSIST(result != ISC_R_SUCCESS);
if (result == ISC_R_NOMORE) {
#define NS_SERVER_TRANSFERSTUCK 0x00020000U /*%< -T transferstuck */
#define NS_SERVER_LOGRESPONSES 0x00040000U /*%< log responses */
#define NS_SERVER_COOKIEALWAYSVALID 0x00080000U /*%< -T cookiealwaysvalid */
+#define NS_SERVER_RPZSLOW 0x00100000U /*%< -T rpzslow */
/*%
* Type for callback function to get hostname.