if ffi.C.kr_view_select_action(req, view_action_buf) == 0 then
local act_str = ffi.string(view_action_buf[0].data, view_action_buf[0].len)
- loadstring('return ' .. act_str)()(state, req)
+ local new_state = loadstring('return '..act_str)()(state, req)
+ -- We still respect the chain-rule notion, i.e. we skip
+ -- lua-configured policy rules iff the action was "final"
+ -- (`refused` and `noanswer` in the current 6.x)
+ if new_state ~= nil then return new_state end
end
+ if ffi.C.ratelimiting_request_begin(req) then return end
+
local qry = req:initial() -- same as :current() but more descriptive
return policy.evaluate(policy.rules, req, qry, state)
or state
import logging
import os
import socket
- from typing import Any, Dict, List, Optional, Tuple, Union
-
- from typing_extensions import Literal
-
- from knot_resolver_manager.constants import MAX_WORKERS
- from knot_resolver_manager.datamodel.cache_schema import CacheSchema
- from knot_resolver_manager.datamodel.dns64_schema import Dns64Schema
- from knot_resolver_manager.datamodel.dnssec_schema import DnssecSchema
- from knot_resolver_manager.datamodel.forward_schema import ForwardSchema
- from knot_resolver_manager.datamodel.local_data_schema import LocalDataSchema, RPZSchema, RuleSchema
- from knot_resolver_manager.datamodel.logging_schema import LoggingSchema
- from knot_resolver_manager.datamodel.lua_schema import LuaSchema
- from knot_resolver_manager.datamodel.management_schema import ManagementSchema
- from knot_resolver_manager.datamodel.monitoring_schema import MonitoringSchema
- from knot_resolver_manager.datamodel.network_schema import NetworkSchema
- from knot_resolver_manager.datamodel.options_schema import OptionsSchema
- from knot_resolver_manager.datamodel.templates import POLICY_CONFIG_TEMPLATE, WORKER_CONFIG_TEMPLATE
- from knot_resolver_manager.datamodel.types import Dir, EscapedStr, IntPositive
- from knot_resolver_manager.datamodel.view_schema import ViewSchema
- from knot_resolver_manager.datamodel.webmgmt_schema import WebmgmtSchema
+ from typing import Any, Dict, List, Literal, Optional, Tuple, Union
+from knot_resolver_manager.datamodel.rate_limiting_schema import RateLimitingSchema
- from knot_resolver_manager.utils.modeling import ConfigSchema
- from knot_resolver_manager.utils.modeling.base_schema import lazy_default
- from knot_resolver_manager.utils.modeling.exceptions import AggregateDataValidationError, DataValidationError
- _DEFAULT_RUNDIR = "/var/run/knot-resolver"
-
- DEFAULT_MANAGER_API_SOCK = _DEFAULT_RUNDIR + "/manager.sock"
+ from knot_resolver.constants import API_SOCK_FILE, RUN_DIR, VERSION
+ from knot_resolver.datamodel.cache_schema import CacheSchema
+ from knot_resolver.datamodel.dns64_schema import Dns64Schema
+ from knot_resolver.datamodel.dnssec_schema import DnssecSchema
+ from knot_resolver.datamodel.forward_schema import ForwardSchema
+ from knot_resolver.datamodel.globals import Context, get_global_validation_context, set_global_validation_context
+ from knot_resolver.datamodel.local_data_schema import LocalDataSchema, RPZSchema, RuleSchema
+ from knot_resolver.datamodel.logging_schema import LoggingSchema
+ from knot_resolver.datamodel.lua_schema import LuaSchema
+ from knot_resolver.datamodel.management_schema import ManagementSchema
+ from knot_resolver.datamodel.monitoring_schema import MonitoringSchema
+ from knot_resolver.datamodel.network_schema import NetworkSchema
+ from knot_resolver.datamodel.options_schema import OptionsSchema
+ from knot_resolver.datamodel.templates import POLICY_CONFIG_TEMPLATE, WORKER_CONFIG_TEMPLATE
+ from knot_resolver.datamodel.types import EscapedStr, IntPositive, WritableDir
+ from knot_resolver.datamodel.view_schema import ViewSchema
+ from knot_resolver.datamodel.webmgmt_schema import WebmgmtSchema
+ from knot_resolver.utils.modeling import ConfigSchema
+ from knot_resolver.utils.modeling.base_schema import lazy_default
+ from knot_resolver.utils.modeling.exceptions import AggregateDataValidationError, DataValidationError
+
+ WORKERS_MAX = 256
logger = logging.getLogger(__name__)