aboutsummaryrefslogtreecommitdiff
path: root/services/rpz.c
diff options
context:
space:
mode:
Diffstat (limited to 'services/rpz.c')
-rw-r--r--services/rpz.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/services/rpz.c b/services/rpz.c
index 13304652cc02..2b6b0ac3fccf 100644
--- a/services/rpz.c
+++ b/services/rpz.c
@@ -668,7 +668,8 @@ rpz_find_zone(struct rpz* r, uint8_t* qname, size_t qname_len, uint16_t qclass,
int only_exact, int wr, int zones_keep_lock)
{
uint8_t* ce;
- size_t ce_len, ce_labs;
+ size_t ce_len;
+ int ce_labs;
uint8_t wc[LDNS_MAX_DOMAINLEN+1];
int exact;
struct local_zone* z = NULL;
@@ -963,8 +964,8 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env,
for(a = az->rpz_first; a; a = a->rpz_az_next) {
lock_rw_rdlock(&a->lock);
r = a->rpz;
- if(!r->taglist || taglist_intersect(r->taglist,
- r->taglistlen, taglist, taglen)) {
+ if(!r->disabled && (!r->taglist || taglist_intersect(r->taglist,
+ r->taglistlen, taglist, taglen))) {
z = rpz_find_zone(r, qinfo->qname, qinfo->qname_len,
qinfo->qclass, 0, 0, 0);
if(z && r->action_override == RPZ_DISABLED_ACTION) {
@@ -1044,3 +1045,17 @@ rpz_apply_qname_trigger(struct auth_zones* az, struct module_env* env,
return ret;
}
+
+void rpz_enable(struct rpz* r)
+{
+ if(!r)
+ return;
+ r->disabled = 0;
+}
+
+void rpz_disable(struct rpz* r)
+{
+ if(!r)
+ return;
+ r->disabled = 1;
+}