struct kr_query *kr_rplan_resolved(struct kr_rplan *);
struct kr_query *kr_rplan_last(struct kr_rplan *);
int kr_forward_add_target(struct kr_request *, const struct sockaddr *);
+_Bool kr_log_is_debug_fun(enum kr_log_group, const struct kr_request *);
void kr_log_req1(const struct kr_request * const, uint32_t, const unsigned int, enum kr_log_group, const char *, const char *, ...);
void kr_log_q1(const struct kr_query * const, enum kr_log_group, const char *, const char *, ...);
const char *kr_log_grp2name(enum kr_log_group);
struct kr_query *kr_rplan_resolved(struct kr_rplan *);
struct kr_query *kr_rplan_last(struct kr_rplan *);
int kr_forward_add_target(struct kr_request *, const struct sockaddr *);
+_Bool kr_log_is_debug_fun(enum kr_log_group, const struct kr_request *);
void kr_log_req1(const struct kr_request * const, uint32_t, const unsigned int, enum kr_log_group, const char *, const char *, ...);
void kr_log_q1(const struct kr_query * const, enum kr_log_group, const char *, const char *, ...);
const char *kr_log_grp2name(enum kr_log_group);
return sock
end
+-- Debug logging for taken policy actions
+local function log_policy_action(req, name)
+ if ffi.C.kr_log_is_debug_fun(ffi.C.LOG_GRP_POLICY, req) then
+ local qry = req:current()
+ ffi.C.kr_log_req1(
+ req, qry.uid, 2, ffi.C.LOG_GRP_POLICY, LOG_GRP_POLICY_TAG,
+ "%s applied for %s %s\n",
+ name, kres.dname2str(qry.sname), kres.tostring.type[qry.stype])
+ end
+end
+
-- policy functions are defined below
local policy = {}
else
mkauth_soa(answer, kres.dname2wire(qry.sname), nil, ttl)
end
+ log_policy_action(req, 'ANSWER (nodata)')
else
answer:begin(kres.section.ANSWER)
if type(data.rdata) == 'table' then
else
answer:put(qry.sname, ttl, qry.sclass, qry.stype, data.rdata)
end
+ log_policy_action(req, 'ANSWER (forged)')
end
return kres.DONE
end
if extended_error == nil then
extended_error = kres.extended_error.BLOCKED
end
+ local action_name = msg and 'DENY_MSG' or 'DENY'
return function (_, req)
-- Write authority information
end
req:set_extended_error(extended_error, "CR36")
+ log_policy_action(req, action_name)
return kres.DONE
end
end
local answer = answer_clear(req)
if answer == nil then return nil end
req:set_extended_error(kres.extended_error.PROHIBITED, "U5KL")
+ log_policy_action(req, 'DROP')
return kres.FAIL
end
answer:rcode(kres.rcode.REFUSED)
answer:ad(false)
req:set_extended_error(kres.extended_error.PROHIBITED, "EIM4")
+ log_policy_action(req, 'REFUSE')
return kres.DONE
end
if answer == nil then return nil end
answer:tc(1)
answer:ad(false)
+ log_policy_action(req, 'TC')
return kres.DONE
end