aboutsummaryrefslogtreecommitdiff
path: root/edns-subnet/subnetmod.c
diff options
context:
space:
mode:
Diffstat (limited to 'edns-subnet/subnetmod.c')
-rw-r--r--edns-subnet/subnetmod.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/edns-subnet/subnetmod.c b/edns-subnet/subnetmod.c
index 4008004e4a32..9e76cefdf3b6 100644
--- a/edns-subnet/subnetmod.c
+++ b/edns-subnet/subnetmod.c
@@ -135,7 +135,7 @@ ecs_opt_list_append(struct ecs_data* ecs, struct edns_option** list,
}
}
-int ecs_whitelist_check(struct query_info* ATTR_UNUSED(qinfo),
+int ecs_whitelist_check(struct query_info* qinfo,
uint16_t ATTR_UNUSED(flags), struct module_qstate* qstate,
struct sockaddr_storage* addr, socklen_t addrlen,
uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen),
@@ -154,8 +154,9 @@ int ecs_whitelist_check(struct query_info* ATTR_UNUSED(qinfo),
if(sq->ecs_server_out.subnet_validdata && ((sq->subnet_downstream &&
qstate->env->cfg->client_subnet_always_forward) ||
- upstream_is_whitelisted(sn_env->edns_subnet_upstreams,
- addr, addrlen))) {
+ ecs_is_whitelisted(sn_env->whitelist,
+ addr, addrlen, qinfo->qname, qinfo->qname_len,
+ qinfo->qclass))) {
/* Address on whitelist or client query contains ECS option, we
* want to sent out ECS. Only add option if it is not already
* set. */
@@ -199,9 +200,9 @@ subnetmod_init(struct module_env *env, int id)
return 0;
}
/* whitelist for edns subnet capable servers */
- sn_env->edns_subnet_upstreams = upstream_create();
- if(!sn_env->edns_subnet_upstreams ||
- !upstream_apply_cfg(sn_env->edns_subnet_upstreams, env->cfg)) {
+ sn_env->whitelist = ecs_whitelist_create();
+ if(!sn_env->whitelist ||
+ !ecs_whitelist_apply_cfg(sn_env->whitelist, env->cfg)) {
log_err("subnet: could not create ECS whitelist");
slabhash_delete(sn_env->subnet_msg_cache);
free(sn_env);
@@ -217,7 +218,7 @@ subnetmod_init(struct module_env *env, int id)
env->cfg->client_subnet_always_forward /* bypass cache */,
0 /* no aggregation */, env)) {
log_err("subnet: could not register opcode");
- upstream_delete(sn_env->edns_subnet_upstreams);
+ ecs_whitelist_delete(sn_env->whitelist);
slabhash_delete(sn_env->subnet_msg_cache);
free(sn_env);
env->modinfo[id] = NULL;
@@ -243,7 +244,8 @@ subnetmod_deinit(struct module_env *env, int id)
lock_rw_destroy(&sn_env->biglock);
inplace_cb_delete(env, inplace_cb_edns_back_parsed, id);
inplace_cb_delete(env, inplace_cb_query, id);
- upstream_delete(sn_env->edns_subnet_upstreams);
+ inplace_cb_delete(env, inplace_cb_query_response, id);
+ ecs_whitelist_delete(sn_env->whitelist);
slabhash_delete(sn_env->subnet_msg_cache);
alloc_clear(&sn_env->alloc);
free(sn_env);
@@ -781,7 +783,7 @@ subnetmod_get_mem(struct module_env *env, int id)
if (!sn_env) return 0;
return sizeof(*sn_env) +
slabhash_get_mem(sn_env->subnet_msg_cache) +
- upstream_get_mem(sn_env->edns_subnet_upstreams);
+ ecs_whitelist_get_mem(sn_env->whitelist);
}
/**