xref: /freebsd/contrib/unbound/util/fptr_wlist.c (revision be771a7b7f4580a30d99e41a5bb1b93a385a119d)
1b7579f77SDag-Erling Smørgrav /*
2b7579f77SDag-Erling Smørgrav  * util/fptr_wlist.c - function pointer whitelists.
3b7579f77SDag-Erling Smørgrav  *
4b7579f77SDag-Erling Smørgrav  * Copyright (c) 2007, NLnet Labs. All rights reserved.
5b7579f77SDag-Erling Smørgrav  *
6b7579f77SDag-Erling Smørgrav  * This software is open source.
7b7579f77SDag-Erling Smørgrav  *
8b7579f77SDag-Erling Smørgrav  * Redistribution and use in source and binary forms, with or without
9b7579f77SDag-Erling Smørgrav  * modification, are permitted provided that the following conditions
10b7579f77SDag-Erling Smørgrav  * are met:
11b7579f77SDag-Erling Smørgrav  *
12b7579f77SDag-Erling Smørgrav  * Redistributions of source code must retain the above copyright notice,
13b7579f77SDag-Erling Smørgrav  * this list of conditions and the following disclaimer.
14b7579f77SDag-Erling Smørgrav  *
15b7579f77SDag-Erling Smørgrav  * Redistributions in binary form must reproduce the above copyright notice,
16b7579f77SDag-Erling Smørgrav  * this list of conditions and the following disclaimer in the documentation
17b7579f77SDag-Erling Smørgrav  * and/or other materials provided with the distribution.
18b7579f77SDag-Erling Smørgrav  *
19b7579f77SDag-Erling Smørgrav  * Neither the name of the NLNET LABS nor the names of its contributors may
20b7579f77SDag-Erling Smørgrav  * be used to endorse or promote products derived from this software without
21b7579f77SDag-Erling Smørgrav  * specific prior written permission.
22b7579f77SDag-Erling Smørgrav  *
23b7579f77SDag-Erling Smørgrav  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2417d15b25SDag-Erling Smørgrav  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2517d15b25SDag-Erling Smørgrav  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2617d15b25SDag-Erling Smørgrav  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2717d15b25SDag-Erling Smørgrav  * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2817d15b25SDag-Erling Smørgrav  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
2917d15b25SDag-Erling Smørgrav  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
3017d15b25SDag-Erling Smørgrav  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
3117d15b25SDag-Erling Smørgrav  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
3217d15b25SDag-Erling Smørgrav  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
3317d15b25SDag-Erling Smørgrav  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34b7579f77SDag-Erling Smørgrav  */
35b7579f77SDag-Erling Smørgrav 
36b7579f77SDag-Erling Smørgrav /**
37b7579f77SDag-Erling Smørgrav  * \file
38b7579f77SDag-Erling Smørgrav  *
39b7579f77SDag-Erling Smørgrav  * This file contains functions that check function pointers.
40b7579f77SDag-Erling Smørgrav  * The functions contain a whitelist of known good callback values.
41b7579f77SDag-Erling Smørgrav  * Any other values lead to an error.
42b7579f77SDag-Erling Smørgrav  *
43b7579f77SDag-Erling Smørgrav  * Due to the listing nature, this file violates all the modularization
44b7579f77SDag-Erling Smørgrav  * boundaries in the program.
45b7579f77SDag-Erling Smørgrav  */
46b7579f77SDag-Erling Smørgrav #include "config.h"
47b7579f77SDag-Erling Smørgrav #include "util/fptr_wlist.h"
48b7579f77SDag-Erling Smørgrav #include "util/mini_event.h"
49b7579f77SDag-Erling Smørgrav #include "services/outside_network.h"
5046d2f618SCy Schubert #include "services/listen_dnsport.h"
51b7579f77SDag-Erling Smørgrav #include "services/mesh.h"
52b7579f77SDag-Erling Smørgrav #include "services/localzone.h"
53c7f4d7adSDag-Erling Smørgrav #include "services/authzone.h"
54b7579f77SDag-Erling Smørgrav #include "services/cache/infra.h"
55b7579f77SDag-Erling Smørgrav #include "services/cache/rrset.h"
56bc892140SDag-Erling Smørgrav #include "services/view.h"
57ff825849SDag-Erling Smørgrav #include "dns64/dns64.h"
58b7579f77SDag-Erling Smørgrav #include "iterator/iterator.h"
59b7579f77SDag-Erling Smørgrav #include "iterator/iter_fwd.h"
60b7579f77SDag-Erling Smørgrav #include "validator/validator.h"
61b7579f77SDag-Erling Smørgrav #include "validator/val_anchor.h"
62b7579f77SDag-Erling Smørgrav #include "validator/val_nsec3.h"
63b7579f77SDag-Erling Smørgrav #include "validator/val_sigcrypt.h"
64b7579f77SDag-Erling Smørgrav #include "validator/val_kentry.h"
65b7579f77SDag-Erling Smørgrav #include "validator/val_neg.h"
66b7579f77SDag-Erling Smørgrav #include "validator/autotrust.h"
67b7579f77SDag-Erling Smørgrav #include "util/data/msgreply.h"
68b7579f77SDag-Erling Smørgrav #include "util/data/packed_rrset.h"
69b7579f77SDag-Erling Smørgrav #include "util/storage/slabhash.h"
70b7579f77SDag-Erling Smørgrav #include "util/storage/dnstree.h"
71b7579f77SDag-Erling Smørgrav #include "util/locks.h"
72b7579f77SDag-Erling Smørgrav #include "libunbound/libworker.h"
73b7579f77SDag-Erling Smørgrav #include "libunbound/context.h"
7469d86e3fSDag-Erling Smørgrav #include "libunbound/worker.h"
75b7579f77SDag-Erling Smørgrav #include "util/tube.h"
76b7579f77SDag-Erling Smørgrav #include "util/config_file.h"
77*be771a7bSCy Schubert #include "daemon/remote.h"
78b7579f77SDag-Erling Smørgrav #ifdef UB_ON_WINDOWS
79b7579f77SDag-Erling Smørgrav #include "winrc/win_svc.h"
80b7579f77SDag-Erling Smørgrav #endif
8165b390aaSDag-Erling Smørgrav #include "respip/respip.h"
82b7579f77SDag-Erling Smørgrav 
83b7579f77SDag-Erling Smørgrav #ifdef WITH_PYTHONMODULE
84b7579f77SDag-Erling Smørgrav #include "pythonmod/pythonmod.h"
85b7579f77SDag-Erling Smørgrav #endif
8625039b37SCy Schubert #ifdef WITH_DYNLIBMODULE
8725039b37SCy Schubert #include "dynlibmod/dynlibmod.h"
8825039b37SCy Schubert #endif
89e2d15004SDag-Erling Smørgrav #ifdef USE_CACHEDB
90e2d15004SDag-Erling Smørgrav #include "cachedb/cachedb.h"
91e2d15004SDag-Erling Smørgrav #endif
92c7f4d7adSDag-Erling Smørgrav #ifdef USE_IPSECMOD
93c7f4d7adSDag-Erling Smørgrav #include "ipsecmod/ipsecmod.h"
94c7f4d7adSDag-Erling Smørgrav #endif
9565b390aaSDag-Erling Smørgrav #ifdef CLIENT_SUBNET
9665b390aaSDag-Erling Smørgrav #include "edns-subnet/subnetmod.h"
9765b390aaSDag-Erling Smørgrav #endif
980eefd307SCy Schubert #ifdef USE_IPSET
990eefd307SCy Schubert #include "ipset/ipset.h"
1000eefd307SCy Schubert #endif
10125039b37SCy Schubert #ifdef USE_DNSTAP
10225039b37SCy Schubert #include "dnstap/dtstream.h"
10325039b37SCy Schubert #endif
104b7579f77SDag-Erling Smørgrav 
105b7579f77SDag-Erling Smørgrav int
1063005e0a3SDag-Erling Smørgrav fptr_whitelist_comm_point(comm_point_callback_type *fptr)
107b7579f77SDag-Erling Smørgrav {
108b7579f77SDag-Erling Smørgrav 	if(fptr == &worker_handle_request) return 1;
109b7579f77SDag-Erling Smørgrav 	else if(fptr == &outnet_udp_cb) return 1;
110b7579f77SDag-Erling Smørgrav 	else if(fptr == &outnet_tcp_cb) return 1;
111b7579f77SDag-Erling Smørgrav 	else if(fptr == &tube_handle_listen) return 1;
11257bddd21SDag-Erling Smørgrav 	else if(fptr == &auth_xfer_probe_udp_callback) return 1;
11357bddd21SDag-Erling Smørgrav 	else if(fptr == &auth_xfer_transfer_tcp_callback) return 1;
11457bddd21SDag-Erling Smørgrav 	else if(fptr == &auth_xfer_transfer_http_callback) return 1;
115b7579f77SDag-Erling Smørgrav 	return 0;
116b7579f77SDag-Erling Smørgrav }
117b7579f77SDag-Erling Smørgrav 
118b7579f77SDag-Erling Smørgrav int
1193005e0a3SDag-Erling Smørgrav fptr_whitelist_comm_point_raw(comm_point_callback_type *fptr)
120b7579f77SDag-Erling Smørgrav {
121b7579f77SDag-Erling Smørgrav 	if(fptr == &tube_handle_listen) return 1;
122b7579f77SDag-Erling Smørgrav 	else if(fptr == &tube_handle_write) return 1;
123b7579f77SDag-Erling Smørgrav 	else if(fptr == &remote_accept_callback) return 1;
124b7579f77SDag-Erling Smørgrav 	else if(fptr == &remote_control_callback) return 1;
125*be771a7bSCy Schubert 	else if(fptr == &fast_reload_client_callback) return 1;
126b7579f77SDag-Erling Smørgrav 	return 0;
127b7579f77SDag-Erling Smørgrav }
128b7579f77SDag-Erling Smørgrav 
129b7579f77SDag-Erling Smørgrav int
130b7579f77SDag-Erling Smørgrav fptr_whitelist_comm_timer(void (*fptr)(void*))
131b7579f77SDag-Erling Smørgrav {
132b7579f77SDag-Erling Smørgrav 	if(fptr == &pending_udp_timer_cb) return 1;
133b7579f77SDag-Erling Smørgrav 	else if(fptr == &outnet_tcptimer) return 1;
13417d15b25SDag-Erling Smørgrav 	else if(fptr == &pending_udp_timer_delay_cb) return 1;
135b7579f77SDag-Erling Smørgrav 	else if(fptr == &worker_stat_timer_cb) return 1;
136b7579f77SDag-Erling Smørgrav 	else if(fptr == &worker_probe_timer_cb) return 1;
137b76ef9a7SCy Schubert 	else if(fptr == &validate_suspend_timer_cb) return 1;
13846d2f618SCy Schubert #ifdef HAVE_NGTCP2
13946d2f618SCy Schubert 	else if(fptr == &doq_timer_cb) return 1;
14046d2f618SCy Schubert #endif
141b7579f77SDag-Erling Smørgrav #ifdef UB_ON_WINDOWS
142b7579f77SDag-Erling Smørgrav 	else if(fptr == &wsvc_cron_cb) return 1;
143b7579f77SDag-Erling Smørgrav #endif
14457bddd21SDag-Erling Smørgrav 	else if(fptr == &auth_xfer_timer) return 1;
14557bddd21SDag-Erling Smørgrav 	else if(fptr == &auth_xfer_probe_timer_callback) return 1;
146e86b9096SDag-Erling Smørgrav 	else if(fptr == &auth_xfer_transfer_timer_callback) return 1;
147091e9e46SCy Schubert 	else if(fptr == &mesh_serve_expired_callback) return 1;
1489cf5bc93SCy Schubert 	else if(fptr == &serviced_timer_cb) return 1;
149c0caa2e2SCy Schubert #ifdef USE_DNSTAP
150c0caa2e2SCy Schubert 	else if(fptr == &mq_wakeup_cb) return 1;
151c0caa2e2SCy Schubert #endif
152b7579f77SDag-Erling Smørgrav 	return 0;
153b7579f77SDag-Erling Smørgrav }
154b7579f77SDag-Erling Smørgrav 
155b7579f77SDag-Erling Smørgrav int
156b7579f77SDag-Erling Smørgrav fptr_whitelist_comm_signal(void (*fptr)(int, void*))
157b7579f77SDag-Erling Smørgrav {
158b7579f77SDag-Erling Smørgrav 	if(fptr == &worker_sighandler) return 1;
159b7579f77SDag-Erling Smørgrav 	return 0;
160b7579f77SDag-Erling Smørgrav }
161b7579f77SDag-Erling Smørgrav 
162b7579f77SDag-Erling Smørgrav int fptr_whitelist_start_accept(void (*fptr)(void*))
163b7579f77SDag-Erling Smørgrav {
164b7579f77SDag-Erling Smørgrav 	if(fptr == &worker_start_accept) return 1;
165b7579f77SDag-Erling Smørgrav 	return 0;
166b7579f77SDag-Erling Smørgrav }
167b7579f77SDag-Erling Smørgrav 
168b7579f77SDag-Erling Smørgrav int fptr_whitelist_stop_accept(void (*fptr)(void*))
169b7579f77SDag-Erling Smørgrav {
170b7579f77SDag-Erling Smørgrav 	if(fptr == &worker_stop_accept) return 1;
171b7579f77SDag-Erling Smørgrav 	return 0;
172b7579f77SDag-Erling Smørgrav }
173b7579f77SDag-Erling Smørgrav 
174b7579f77SDag-Erling Smørgrav int
175b7579f77SDag-Erling Smørgrav fptr_whitelist_event(void (*fptr)(int, short, void *))
176b7579f77SDag-Erling Smørgrav {
177b7579f77SDag-Erling Smørgrav 	if(fptr == &comm_point_udp_callback) return 1;
178103ba509SCy Schubert #if defined(AF_INET6) && defined(IPV6_PKTINFO) && defined(HAVE_RECVMSG)
179b7579f77SDag-Erling Smørgrav 	else if(fptr == &comm_point_udp_ancil_callback) return 1;
180103ba509SCy Schubert #endif
181b7579f77SDag-Erling Smørgrav 	else if(fptr == &comm_point_tcp_accept_callback) return 1;
182b7579f77SDag-Erling Smørgrav 	else if(fptr == &comm_point_tcp_handle_callback) return 1;
183b7579f77SDag-Erling Smørgrav 	else if(fptr == &comm_timer_callback) return 1;
184b7579f77SDag-Erling Smørgrav 	else if(fptr == &comm_signal_callback) return 1;
185b7579f77SDag-Erling Smørgrav 	else if(fptr == &comm_point_local_handle_callback) return 1;
186b7579f77SDag-Erling Smørgrav 	else if(fptr == &comm_point_raw_handle_callback) return 1;
187b7579f77SDag-Erling Smørgrav 	else if(fptr == &tube_handle_signal) return 1;
188b7579f77SDag-Erling Smørgrav 	else if(fptr == &comm_base_handle_slow_accept) return 1;
18957bddd21SDag-Erling Smørgrav 	else if(fptr == &comm_point_http_handle_callback) return 1;
19046d2f618SCy Schubert #ifdef HAVE_NGTCP2
19146d2f618SCy Schubert 	else if(fptr == &comm_point_doq_callback) return 1;
19246d2f618SCy Schubert #endif
193*be771a7bSCy Schubert 	else if(fptr == &fast_reload_service_cb) return 1;
19425039b37SCy Schubert #ifdef USE_DNSTAP
19525039b37SCy Schubert 	else if(fptr == &dtio_output_cb) return 1;
19625039b37SCy Schubert 	else if(fptr == &dtio_cmd_cb) return 1;
19725039b37SCy Schubert 	else if(fptr == &dtio_reconnect_timeout_cb) return 1;
19825039b37SCy Schubert 	else if(fptr == &dtio_stop_timer_cb) return 1;
19925039b37SCy Schubert 	else if(fptr == &dtio_stop_ev_cb) return 1;
20025039b37SCy Schubert 	else if(fptr == &dtio_tap_callback) return 1;
20125039b37SCy Schubert 	else if(fptr == &dtio_mainfdcallback) return 1;
20225039b37SCy Schubert #endif
20346d2f618SCy Schubert #ifdef HAVE_NGTCP2
20446d2f618SCy Schubert 	else if(fptr == &doq_client_event_cb) return 1;
20546d2f618SCy Schubert 	else if(fptr == &doq_client_timer_cb) return 1;
20646d2f618SCy Schubert #endif
207b7579f77SDag-Erling Smørgrav #ifdef UB_ON_WINDOWS
208b7579f77SDag-Erling Smørgrav 	else if(fptr == &worker_win_stop_cb) return 1;
209b7579f77SDag-Erling Smørgrav #endif
210b7579f77SDag-Erling Smørgrav 	return 0;
211b7579f77SDag-Erling Smørgrav }
212b7579f77SDag-Erling Smørgrav 
213b7579f77SDag-Erling Smørgrav int
2143005e0a3SDag-Erling Smørgrav fptr_whitelist_pending_udp(comm_point_callback_type *fptr)
215b7579f77SDag-Erling Smørgrav {
216b7579f77SDag-Erling Smørgrav 	if(fptr == &serviced_udp_callback) return 1;
217b7579f77SDag-Erling Smørgrav 	return 0;
218b7579f77SDag-Erling Smørgrav }
219b7579f77SDag-Erling Smørgrav 
220b7579f77SDag-Erling Smørgrav int
2213005e0a3SDag-Erling Smørgrav fptr_whitelist_pending_tcp(comm_point_callback_type *fptr)
222b7579f77SDag-Erling Smørgrav {
223b7579f77SDag-Erling Smørgrav 	if(fptr == &serviced_tcp_callback) return 1;
224b7579f77SDag-Erling Smørgrav 	return 0;
225b7579f77SDag-Erling Smørgrav }
226b7579f77SDag-Erling Smørgrav 
227b7579f77SDag-Erling Smørgrav int
2283005e0a3SDag-Erling Smørgrav fptr_whitelist_serviced_query(comm_point_callback_type *fptr)
229b7579f77SDag-Erling Smørgrav {
230b7579f77SDag-Erling Smørgrav 	if(fptr == &worker_handle_service_reply) return 1;
231b7579f77SDag-Erling Smørgrav 	else if(fptr == &libworker_handle_service_reply) return 1;
232b7579f77SDag-Erling Smørgrav 	return 0;
233b7579f77SDag-Erling Smørgrav }
234b7579f77SDag-Erling Smørgrav 
235b7579f77SDag-Erling Smørgrav int
236b7579f77SDag-Erling Smørgrav fptr_whitelist_rbtree_cmp(int (*fptr) (const void *, const void *))
237b7579f77SDag-Erling Smørgrav {
238b7579f77SDag-Erling Smørgrav 	if(fptr == &mesh_state_compare) return 1;
239b7579f77SDag-Erling Smørgrav 	else if(fptr == &mesh_state_ref_compare) return 1;
240b7579f77SDag-Erling Smørgrav 	else if(fptr == &addr_tree_compare) return 1;
241865f46b2SCy Schubert 	else if(fptr == &addr_tree_addrport_compare) return 1;
242b7579f77SDag-Erling Smørgrav 	else if(fptr == &local_zone_cmp) return 1;
243b7579f77SDag-Erling Smørgrav 	else if(fptr == &local_data_cmp) return 1;
244b7579f77SDag-Erling Smørgrav 	else if(fptr == &fwd_cmp) return 1;
245b7579f77SDag-Erling Smørgrav 	else if(fptr == &pending_cmp) return 1;
246b7579f77SDag-Erling Smørgrav 	else if(fptr == &serviced_cmp) return 1;
247369c6923SCy Schubert 	else if(fptr == &reuse_cmp) return 1;
248369c6923SCy Schubert 	else if(fptr == &reuse_id_cmp) return 1;
249b7579f77SDag-Erling Smørgrav 	else if(fptr == &name_tree_compare) return 1;
250b7579f77SDag-Erling Smørgrav 	else if(fptr == &order_lock_cmp) return 1;
251b7579f77SDag-Erling Smørgrav 	else if(fptr == &codeline_cmp) return 1;
252b7579f77SDag-Erling Smørgrav 	else if(fptr == &nsec3_hash_cmp) return 1;
253b7579f77SDag-Erling Smørgrav 	else if(fptr == &mini_ev_cmp) return 1;
254b7579f77SDag-Erling Smørgrav 	else if(fptr == &anchor_cmp) return 1;
255b7579f77SDag-Erling Smørgrav 	else if(fptr == &canonical_tree_compare) return 1;
256b7579f77SDag-Erling Smørgrav 	else if(fptr == &context_query_cmp) return 1;
257b7579f77SDag-Erling Smørgrav 	else if(fptr == &val_neg_data_compare) return 1;
258b7579f77SDag-Erling Smørgrav 	else if(fptr == &val_neg_zone_compare) return 1;
259b7579f77SDag-Erling Smørgrav 	else if(fptr == &probetree_cmp) return 1;
260b7579f77SDag-Erling Smørgrav 	else if(fptr == &replay_var_compare) return 1;
261bc892140SDag-Erling Smørgrav 	else if(fptr == &view_cmp) return 1;
262c7f4d7adSDag-Erling Smørgrav 	else if(fptr == &auth_zone_cmp) return 1;
263c7f4d7adSDag-Erling Smørgrav 	else if(fptr == &auth_data_cmp) return 1;
26457bddd21SDag-Erling Smørgrav 	else if(fptr == &auth_xfer_cmp) return 1;
26546d2f618SCy Schubert #ifdef HAVE_NGTCP2
26646d2f618SCy Schubert 	else if(fptr == &doq_conn_cmp) return 1;
26746d2f618SCy Schubert 	else if(fptr == &doq_conid_cmp) return 1;
26846d2f618SCy Schubert 	else if(fptr == &doq_timer_cmp) return 1;
26946d2f618SCy Schubert 	else if(fptr == &doq_stream_cmp) return 1;
27046d2f618SCy Schubert #endif
271b7579f77SDag-Erling Smørgrav 	return 0;
272b7579f77SDag-Erling Smørgrav }
273b7579f77SDag-Erling Smørgrav 
274b7579f77SDag-Erling Smørgrav int
2753005e0a3SDag-Erling Smørgrav fptr_whitelist_hash_sizefunc(lruhash_sizefunc_type fptr)
276b7579f77SDag-Erling Smørgrav {
277b7579f77SDag-Erling Smørgrav 	if(fptr == &msgreply_sizefunc) return 1;
278b7579f77SDag-Erling Smørgrav 	else if(fptr == &ub_rrset_sizefunc) return 1;
279b7579f77SDag-Erling Smørgrav 	else if(fptr == &infra_sizefunc) return 1;
280b7579f77SDag-Erling Smørgrav 	else if(fptr == &key_entry_sizefunc) return 1;
28109a3aaf3SDag-Erling Smørgrav 	else if(fptr == &rate_sizefunc) return 1;
2823005e0a3SDag-Erling Smørgrav 	else if(fptr == &ip_rate_sizefunc) return 1;
283b7579f77SDag-Erling Smørgrav 	else if(fptr == &test_slabhash_sizefunc) return 1;
28465b390aaSDag-Erling Smørgrav #ifdef CLIENT_SUBNET
28565b390aaSDag-Erling Smørgrav 	else if(fptr == &msg_cache_sizefunc) return 1;
28665b390aaSDag-Erling Smørgrav #endif
287971980c3SDag-Erling Smørgrav #ifdef USE_DNSCRYPT
288971980c3SDag-Erling Smørgrav 	else if(fptr == &dnsc_shared_secrets_sizefunc) return 1;
2898a384985SDag-Erling Smørgrav 	else if(fptr == &dnsc_nonces_sizefunc) return 1;
290971980c3SDag-Erling Smørgrav #endif
291b7579f77SDag-Erling Smørgrav 	return 0;
292b7579f77SDag-Erling Smørgrav }
293b7579f77SDag-Erling Smørgrav 
294b7579f77SDag-Erling Smørgrav int
2953005e0a3SDag-Erling Smørgrav fptr_whitelist_hash_compfunc(lruhash_compfunc_type fptr)
296b7579f77SDag-Erling Smørgrav {
297b7579f77SDag-Erling Smørgrav 	if(fptr == &query_info_compare) return 1;
298b7579f77SDag-Erling Smørgrav 	else if(fptr == &ub_rrset_compare) return 1;
299b7579f77SDag-Erling Smørgrav 	else if(fptr == &infra_compfunc) return 1;
300b7579f77SDag-Erling Smørgrav 	else if(fptr == &key_entry_compfunc) return 1;
30109a3aaf3SDag-Erling Smørgrav 	else if(fptr == &rate_compfunc) return 1;
3023005e0a3SDag-Erling Smørgrav 	else if(fptr == &ip_rate_compfunc) return 1;
303b7579f77SDag-Erling Smørgrav 	else if(fptr == &test_slabhash_compfunc) return 1;
304971980c3SDag-Erling Smørgrav #ifdef USE_DNSCRYPT
305971980c3SDag-Erling Smørgrav 	else if(fptr == &dnsc_shared_secrets_compfunc) return 1;
3068a384985SDag-Erling Smørgrav 	else if(fptr == &dnsc_nonces_compfunc) return 1;
307971980c3SDag-Erling Smørgrav #endif
308b7579f77SDag-Erling Smørgrav 	return 0;
309b7579f77SDag-Erling Smørgrav }
310b7579f77SDag-Erling Smørgrav 
311b7579f77SDag-Erling Smørgrav int
3123005e0a3SDag-Erling Smørgrav fptr_whitelist_hash_delkeyfunc(lruhash_delkeyfunc_type fptr)
313b7579f77SDag-Erling Smørgrav {
314b7579f77SDag-Erling Smørgrav 	if(fptr == &query_entry_delete) return 1;
315b7579f77SDag-Erling Smørgrav 	else if(fptr == &ub_rrset_key_delete) return 1;
316b7579f77SDag-Erling Smørgrav 	else if(fptr == &infra_delkeyfunc) return 1;
317b7579f77SDag-Erling Smørgrav 	else if(fptr == &key_entry_delkeyfunc) return 1;
31809a3aaf3SDag-Erling Smørgrav 	else if(fptr == &rate_delkeyfunc) return 1;
3193005e0a3SDag-Erling Smørgrav 	else if(fptr == &ip_rate_delkeyfunc) return 1;
320b7579f77SDag-Erling Smørgrav 	else if(fptr == &test_slabhash_delkey) return 1;
321971980c3SDag-Erling Smørgrav #ifdef USE_DNSCRYPT
322971980c3SDag-Erling Smørgrav 	else if(fptr == &dnsc_shared_secrets_delkeyfunc) return 1;
3238a384985SDag-Erling Smørgrav 	else if(fptr == &dnsc_nonces_delkeyfunc) return 1;
324971980c3SDag-Erling Smørgrav #endif
325b7579f77SDag-Erling Smørgrav 	return 0;
326b7579f77SDag-Erling Smørgrav }
327b7579f77SDag-Erling Smørgrav 
328b7579f77SDag-Erling Smørgrav int
3293005e0a3SDag-Erling Smørgrav fptr_whitelist_hash_deldatafunc(lruhash_deldatafunc_type fptr)
330b7579f77SDag-Erling Smørgrav {
331b7579f77SDag-Erling Smørgrav 	if(fptr == &reply_info_delete) return 1;
332b7579f77SDag-Erling Smørgrav 	else if(fptr == &rrset_data_delete) return 1;
333b7579f77SDag-Erling Smørgrav 	else if(fptr == &infra_deldatafunc) return 1;
334b7579f77SDag-Erling Smørgrav 	else if(fptr == &key_entry_deldatafunc) return 1;
33509a3aaf3SDag-Erling Smørgrav 	else if(fptr == &rate_deldatafunc) return 1;
336b7579f77SDag-Erling Smørgrav 	else if(fptr == &test_slabhash_deldata) return 1;
33765b390aaSDag-Erling Smørgrav #ifdef CLIENT_SUBNET
33865b390aaSDag-Erling Smørgrav 	else if(fptr == &subnet_data_delete) return 1;
33965b390aaSDag-Erling Smørgrav #endif
340971980c3SDag-Erling Smørgrav #ifdef USE_DNSCRYPT
341971980c3SDag-Erling Smørgrav 	else if(fptr == &dnsc_shared_secrets_deldatafunc) return 1;
3428a384985SDag-Erling Smørgrav 	else if(fptr == &dnsc_nonces_deldatafunc) return 1;
343971980c3SDag-Erling Smørgrav #endif
344b7579f77SDag-Erling Smørgrav 	return 0;
345b7579f77SDag-Erling Smørgrav }
346b7579f77SDag-Erling Smørgrav 
347b7579f77SDag-Erling Smørgrav int
3483005e0a3SDag-Erling Smørgrav fptr_whitelist_hash_markdelfunc(lruhash_markdelfunc_type fptr)
349b7579f77SDag-Erling Smørgrav {
350b7579f77SDag-Erling Smørgrav 	if(fptr == NULL) return 1;
351b7579f77SDag-Erling Smørgrav 	else if(fptr == &rrset_markdel) return 1;
352e86b9096SDag-Erling Smørgrav #ifdef CLIENT_SUBNET
353e86b9096SDag-Erling Smørgrav 	else if(fptr == &subnet_markdel) return 1;
354e86b9096SDag-Erling Smørgrav #endif
355b7579f77SDag-Erling Smørgrav 	return 0;
356b7579f77SDag-Erling Smørgrav }
357b7579f77SDag-Erling Smørgrav 
358b7579f77SDag-Erling Smørgrav /** whitelist env->send_query callbacks */
359b7579f77SDag-Erling Smørgrav int
360b7579f77SDag-Erling Smørgrav fptr_whitelist_modenv_send_query(struct outbound_entry* (*fptr)(
361bc892140SDag-Erling Smørgrav 	struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec,
3629cf5bc93SCy Schubert 	int nocaps, int check_ratelimit, struct sockaddr_storage* addr,
3639cf5bc93SCy Schubert 	socklen_t addrlen, uint8_t* zone, size_t zonelen, int tcp_upstream,
3649cf5bc93SCy Schubert 	int ssl_upstream, char* tls_auth_name, struct module_qstate* q,
3659cf5bc93SCy Schubert 	int* was_ratelimited))
366b7579f77SDag-Erling Smørgrav {
367b7579f77SDag-Erling Smørgrav 	if(fptr == &worker_send_query) return 1;
368b7579f77SDag-Erling Smørgrav 	else if(fptr == &libworker_send_query) return 1;
369b7579f77SDag-Erling Smørgrav 	return 0;
370b7579f77SDag-Erling Smørgrav }
371b7579f77SDag-Erling Smørgrav 
372b7579f77SDag-Erling Smørgrav int
373b7579f77SDag-Erling Smørgrav fptr_whitelist_modenv_detach_subs(void (*fptr)(
374b7579f77SDag-Erling Smørgrav         struct module_qstate* qstate))
375b7579f77SDag-Erling Smørgrav {
376b7579f77SDag-Erling Smørgrav 	if(fptr == &mesh_detach_subs) return 1;
377b7579f77SDag-Erling Smørgrav 	return 0;
378b7579f77SDag-Erling Smørgrav }
379b7579f77SDag-Erling Smørgrav 
380b7579f77SDag-Erling Smørgrav int
381b7579f77SDag-Erling Smørgrav fptr_whitelist_modenv_attach_sub(int (*fptr)(
382b7579f77SDag-Erling Smørgrav         struct module_qstate* qstate, struct query_info* qinfo,
383ff825849SDag-Erling Smørgrav         uint16_t qflags, int prime, int valrec, struct module_qstate** newq))
384b7579f77SDag-Erling Smørgrav {
385b7579f77SDag-Erling Smørgrav 	if(fptr == &mesh_attach_sub) return 1;
386b7579f77SDag-Erling Smørgrav 	return 0;
387b7579f77SDag-Erling Smørgrav }
388b7579f77SDag-Erling Smørgrav 
389b7579f77SDag-Erling Smørgrav int
390c7f4d7adSDag-Erling Smørgrav fptr_whitelist_modenv_add_sub(int (*fptr)(
391c7f4d7adSDag-Erling Smørgrav         struct module_qstate* qstate, struct query_info* qinfo,
392c7f4d7adSDag-Erling Smørgrav         uint16_t qflags, int prime, int valrec, struct module_qstate** newq,
393c7f4d7adSDag-Erling Smørgrav 	struct mesh_state** sub))
394c7f4d7adSDag-Erling Smørgrav {
395c7f4d7adSDag-Erling Smørgrav 	if(fptr == &mesh_add_sub) return 1;
396c7f4d7adSDag-Erling Smørgrav 	return 0;
397c7f4d7adSDag-Erling Smørgrav }
398c7f4d7adSDag-Erling Smørgrav 
399c7f4d7adSDag-Erling Smørgrav int
400b7579f77SDag-Erling Smørgrav fptr_whitelist_modenv_kill_sub(void (*fptr)(struct module_qstate* newq))
401b7579f77SDag-Erling Smørgrav {
402b7579f77SDag-Erling Smørgrav 	if(fptr == &mesh_state_delete) return 1;
403b7579f77SDag-Erling Smørgrav 	return 0;
404b7579f77SDag-Erling Smørgrav }
405b7579f77SDag-Erling Smørgrav 
406b7579f77SDag-Erling Smørgrav int
407b7579f77SDag-Erling Smørgrav fptr_whitelist_modenv_detect_cycle(int (*fptr)(
408b7579f77SDag-Erling Smørgrav 	struct module_qstate* qstate, struct query_info* qinfo,
409ff825849SDag-Erling Smørgrav 	uint16_t flags, int prime, int valrec))
410b7579f77SDag-Erling Smørgrav {
411b7579f77SDag-Erling Smørgrav 	if(fptr == &mesh_detect_cycle) return 1;
412b7579f77SDag-Erling Smørgrav 	return 0;
413b7579f77SDag-Erling Smørgrav }
414b7579f77SDag-Erling Smørgrav 
415b7579f77SDag-Erling Smørgrav int
416b7579f77SDag-Erling Smørgrav fptr_whitelist_mod_init(int (*fptr)(struct module_env* env, int id))
417b7579f77SDag-Erling Smørgrav {
418b7579f77SDag-Erling Smørgrav 	if(fptr == &iter_init) return 1;
419b7579f77SDag-Erling Smørgrav 	else if(fptr == &val_init) return 1;
420ff825849SDag-Erling Smørgrav 	else if(fptr == &dns64_init) return 1;
42165b390aaSDag-Erling Smørgrav 	else if(fptr == &respip_init) return 1;
422b7579f77SDag-Erling Smørgrav #ifdef WITH_PYTHONMODULE
423b7579f77SDag-Erling Smørgrav 	else if(fptr == &pythonmod_init) return 1;
424b7579f77SDag-Erling Smørgrav #endif
42525039b37SCy Schubert #ifdef WITH_DYNLIBMODULE
42625039b37SCy Schubert 	else if(fptr == &dynlibmod_init) return 1;
42725039b37SCy Schubert #endif
428e2d15004SDag-Erling Smørgrav #ifdef USE_CACHEDB
429e2d15004SDag-Erling Smørgrav 	else if(fptr == &cachedb_init) return 1;
430e2d15004SDag-Erling Smørgrav #endif
431c7f4d7adSDag-Erling Smørgrav #ifdef USE_IPSECMOD
432c7f4d7adSDag-Erling Smørgrav 	else if(fptr == &ipsecmod_init) return 1;
433c7f4d7adSDag-Erling Smørgrav #endif
43465b390aaSDag-Erling Smørgrav #ifdef CLIENT_SUBNET
43565b390aaSDag-Erling Smørgrav 	else if(fptr == &subnetmod_init) return 1;
43665b390aaSDag-Erling Smørgrav #endif
4370eefd307SCy Schubert #ifdef USE_IPSET
4380eefd307SCy Schubert 	else if(fptr == &ipset_init) return 1;
4390eefd307SCy Schubert #endif
440b7579f77SDag-Erling Smørgrav 	return 0;
441b7579f77SDag-Erling Smørgrav }
442b7579f77SDag-Erling Smørgrav 
443b7579f77SDag-Erling Smørgrav int
444b7579f77SDag-Erling Smørgrav fptr_whitelist_mod_deinit(void (*fptr)(struct module_env* env, int id))
445b7579f77SDag-Erling Smørgrav {
446b7579f77SDag-Erling Smørgrav 	if(fptr == &iter_deinit) return 1;
447b7579f77SDag-Erling Smørgrav 	else if(fptr == &val_deinit) return 1;
448ff825849SDag-Erling Smørgrav 	else if(fptr == &dns64_deinit) return 1;
44965b390aaSDag-Erling Smørgrav 	else if(fptr == &respip_deinit) return 1;
450b7579f77SDag-Erling Smørgrav #ifdef WITH_PYTHONMODULE
451b7579f77SDag-Erling Smørgrav 	else if(fptr == &pythonmod_deinit) return 1;
452b7579f77SDag-Erling Smørgrav #endif
45325039b37SCy Schubert #ifdef WITH_DYNLIBMODULE
45425039b37SCy Schubert 	else if(fptr == &dynlibmod_deinit) return 1;
45525039b37SCy Schubert #endif
456e2d15004SDag-Erling Smørgrav #ifdef USE_CACHEDB
457e2d15004SDag-Erling Smørgrav 	else if(fptr == &cachedb_deinit) return 1;
458e2d15004SDag-Erling Smørgrav #endif
459c7f4d7adSDag-Erling Smørgrav #ifdef USE_IPSECMOD
460c7f4d7adSDag-Erling Smørgrav 	else if(fptr == &ipsecmod_deinit) return 1;
461c7f4d7adSDag-Erling Smørgrav #endif
46265b390aaSDag-Erling Smørgrav #ifdef CLIENT_SUBNET
46365b390aaSDag-Erling Smørgrav 	else if(fptr == &subnetmod_deinit) return 1;
46465b390aaSDag-Erling Smørgrav #endif
4650eefd307SCy Schubert #ifdef USE_IPSET
4660eefd307SCy Schubert 	else if(fptr == &ipset_deinit) return 1;
46756850988SCy Schubert #endif
46856850988SCy Schubert 	return 0;
46956850988SCy Schubert }
47056850988SCy Schubert 
47156850988SCy Schubert int
47256850988SCy Schubert fptr_whitelist_mod_startup(int (*fptr)(struct module_env* env, int id))
47356850988SCy Schubert {
47456850988SCy Schubert #ifdef USE_IPSET
47556850988SCy Schubert 	if(fptr == &ipset_startup) return 1;
47656850988SCy Schubert #else
47756850988SCy Schubert 	(void)fptr;
47856850988SCy Schubert #endif
47956850988SCy Schubert 	return 0;
48056850988SCy Schubert }
48156850988SCy Schubert 
48256850988SCy Schubert int
48356850988SCy Schubert fptr_whitelist_mod_destartup(void (*fptr)(struct module_env* env, int id))
48456850988SCy Schubert {
48556850988SCy Schubert #ifdef USE_IPSET
48656850988SCy Schubert 	if(fptr == &ipset_destartup) return 1;
48756850988SCy Schubert #else
48856850988SCy Schubert 	(void)fptr;
4890eefd307SCy Schubert #endif
490b7579f77SDag-Erling Smørgrav 	return 0;
491b7579f77SDag-Erling Smørgrav }
492b7579f77SDag-Erling Smørgrav 
493b7579f77SDag-Erling Smørgrav int
494b7579f77SDag-Erling Smørgrav fptr_whitelist_mod_operate(void (*fptr)(struct module_qstate* qstate,
495b7579f77SDag-Erling Smørgrav         enum module_ev event, int id, struct outbound_entry* outbound))
496b7579f77SDag-Erling Smørgrav {
497b7579f77SDag-Erling Smørgrav 	if(fptr == &iter_operate) return 1;
498b7579f77SDag-Erling Smørgrav 	else if(fptr == &val_operate) return 1;
499ff825849SDag-Erling Smørgrav 	else if(fptr == &dns64_operate) return 1;
50065b390aaSDag-Erling Smørgrav 	else if(fptr == &respip_operate) return 1;
501b7579f77SDag-Erling Smørgrav #ifdef WITH_PYTHONMODULE
502b7579f77SDag-Erling Smørgrav 	else if(fptr == &pythonmod_operate) return 1;
503b7579f77SDag-Erling Smørgrav #endif
50425039b37SCy Schubert #ifdef WITH_DYNLIBMODULE
50525039b37SCy Schubert 	else if(fptr == &dynlibmod_operate) return 1;
50625039b37SCy Schubert #endif
507e2d15004SDag-Erling Smørgrav #ifdef USE_CACHEDB
508e2d15004SDag-Erling Smørgrav 	else if(fptr == &cachedb_operate) return 1;
509e2d15004SDag-Erling Smørgrav #endif
510c7f4d7adSDag-Erling Smørgrav #ifdef USE_IPSECMOD
511c7f4d7adSDag-Erling Smørgrav 	else if(fptr == &ipsecmod_operate) return 1;
512c7f4d7adSDag-Erling Smørgrav #endif
51365b390aaSDag-Erling Smørgrav #ifdef CLIENT_SUBNET
51465b390aaSDag-Erling Smørgrav 	else if(fptr == &subnetmod_operate) return 1;
51565b390aaSDag-Erling Smørgrav #endif
5160eefd307SCy Schubert #ifdef USE_IPSET
5170eefd307SCy Schubert 	else if(fptr == &ipset_operate) return 1;
5180eefd307SCy Schubert #endif
519b7579f77SDag-Erling Smørgrav 	return 0;
520b7579f77SDag-Erling Smørgrav }
521b7579f77SDag-Erling Smørgrav 
522b7579f77SDag-Erling Smørgrav int
523b7579f77SDag-Erling Smørgrav fptr_whitelist_mod_inform_super(void (*fptr)(
524b7579f77SDag-Erling Smørgrav         struct module_qstate* qstate, int id, struct module_qstate* super))
525b7579f77SDag-Erling Smørgrav {
526b7579f77SDag-Erling Smørgrav 	if(fptr == &iter_inform_super) return 1;
527b7579f77SDag-Erling Smørgrav 	else if(fptr == &val_inform_super) return 1;
528ff825849SDag-Erling Smørgrav 	else if(fptr == &dns64_inform_super) return 1;
52965b390aaSDag-Erling Smørgrav 	else if(fptr == &respip_inform_super) return 1;
530b7579f77SDag-Erling Smørgrav #ifdef WITH_PYTHONMODULE
531b7579f77SDag-Erling Smørgrav 	else if(fptr == &pythonmod_inform_super) return 1;
532b7579f77SDag-Erling Smørgrav #endif
53325039b37SCy Schubert #ifdef WITH_DYNLIBMODULE
53425039b37SCy Schubert 	else if(fptr == &dynlibmod_inform_super) return 1;
53525039b37SCy Schubert #endif
536e2d15004SDag-Erling Smørgrav #ifdef USE_CACHEDB
537e2d15004SDag-Erling Smørgrav 	else if(fptr == &cachedb_inform_super) return 1;
538e2d15004SDag-Erling Smørgrav #endif
539c7f4d7adSDag-Erling Smørgrav #ifdef USE_IPSECMOD
540c7f4d7adSDag-Erling Smørgrav 	else if(fptr == &ipsecmod_inform_super) return 1;
541c7f4d7adSDag-Erling Smørgrav #endif
54265b390aaSDag-Erling Smørgrav #ifdef CLIENT_SUBNET
54365b390aaSDag-Erling Smørgrav 	else if(fptr == &subnetmod_inform_super) return 1;
54465b390aaSDag-Erling Smørgrav #endif
5450eefd307SCy Schubert #ifdef USE_IPSET
5460eefd307SCy Schubert 	else if(fptr == &ipset_inform_super) return 1;
5470eefd307SCy Schubert #endif
548b7579f77SDag-Erling Smørgrav 	return 0;
549b7579f77SDag-Erling Smørgrav }
550b7579f77SDag-Erling Smørgrav 
551b7579f77SDag-Erling Smørgrav int
552b7579f77SDag-Erling Smørgrav fptr_whitelist_mod_clear(void (*fptr)(struct module_qstate* qstate,
553b7579f77SDag-Erling Smørgrav         int id))
554b7579f77SDag-Erling Smørgrav {
555b7579f77SDag-Erling Smørgrav 	if(fptr == &iter_clear) return 1;
556b7579f77SDag-Erling Smørgrav 	else if(fptr == &val_clear) return 1;
557ff825849SDag-Erling Smørgrav 	else if(fptr == &dns64_clear) return 1;
55865b390aaSDag-Erling Smørgrav 	else if(fptr == &respip_clear) return 1;
559b7579f77SDag-Erling Smørgrav #ifdef WITH_PYTHONMODULE
560b7579f77SDag-Erling Smørgrav 	else if(fptr == &pythonmod_clear) return 1;
561b7579f77SDag-Erling Smørgrav #endif
56225039b37SCy Schubert #ifdef WITH_DYNLIBMODULE
56325039b37SCy Schubert 	else if(fptr == &dynlibmod_clear) return 1;
56425039b37SCy Schubert #endif
565e2d15004SDag-Erling Smørgrav #ifdef USE_CACHEDB
566e2d15004SDag-Erling Smørgrav 	else if(fptr == &cachedb_clear) return 1;
567e2d15004SDag-Erling Smørgrav #endif
568c7f4d7adSDag-Erling Smørgrav #ifdef USE_IPSECMOD
569c7f4d7adSDag-Erling Smørgrav 	else if(fptr == &ipsecmod_clear) return 1;
570c7f4d7adSDag-Erling Smørgrav #endif
57165b390aaSDag-Erling Smørgrav #ifdef CLIENT_SUBNET
57265b390aaSDag-Erling Smørgrav 	else if(fptr == &subnetmod_clear) return 1;
57365b390aaSDag-Erling Smørgrav #endif
5740eefd307SCy Schubert #ifdef USE_IPSET
5750eefd307SCy Schubert 	else if(fptr == &ipset_clear) return 1;
5760eefd307SCy Schubert #endif
577b7579f77SDag-Erling Smørgrav 	return 0;
578b7579f77SDag-Erling Smørgrav }
579b7579f77SDag-Erling Smørgrav 
580b7579f77SDag-Erling Smørgrav int
581b7579f77SDag-Erling Smørgrav fptr_whitelist_mod_get_mem(size_t (*fptr)(struct module_env* env, int id))
582b7579f77SDag-Erling Smørgrav {
583b7579f77SDag-Erling Smørgrav 	if(fptr == &iter_get_mem) return 1;
584b7579f77SDag-Erling Smørgrav 	else if(fptr == &val_get_mem) return 1;
585ff825849SDag-Erling Smørgrav 	else if(fptr == &dns64_get_mem) return 1;
58665b390aaSDag-Erling Smørgrav 	else if(fptr == &respip_get_mem) return 1;
587b7579f77SDag-Erling Smørgrav #ifdef WITH_PYTHONMODULE
588b7579f77SDag-Erling Smørgrav 	else if(fptr == &pythonmod_get_mem) return 1;
589b7579f77SDag-Erling Smørgrav #endif
59025039b37SCy Schubert #ifdef WITH_DYNLIBMODULE
59125039b37SCy Schubert 	else if(fptr == &dynlibmod_get_mem) return 1;
59225039b37SCy Schubert #endif
593e2d15004SDag-Erling Smørgrav #ifdef USE_CACHEDB
594e2d15004SDag-Erling Smørgrav 	else if(fptr == &cachedb_get_mem) return 1;
595e2d15004SDag-Erling Smørgrav #endif
596c7f4d7adSDag-Erling Smørgrav #ifdef USE_IPSECMOD
597c7f4d7adSDag-Erling Smørgrav 	else if(fptr == &ipsecmod_get_mem) return 1;
598c7f4d7adSDag-Erling Smørgrav #endif
59965b390aaSDag-Erling Smørgrav #ifdef CLIENT_SUBNET
60065b390aaSDag-Erling Smørgrav 	else if(fptr == &subnetmod_get_mem) return 1;
60165b390aaSDag-Erling Smørgrav #endif
6020eefd307SCy Schubert #ifdef USE_IPSET
6030eefd307SCy Schubert 	else if(fptr == &ipset_get_mem) return 1;
6040eefd307SCy Schubert #endif
605b7579f77SDag-Erling Smørgrav 	return 0;
606b7579f77SDag-Erling Smørgrav }
607b7579f77SDag-Erling Smørgrav 
608b7579f77SDag-Erling Smørgrav int
609b7579f77SDag-Erling Smørgrav fptr_whitelist_alloc_cleanup(void (*fptr)(void*))
610b7579f77SDag-Erling Smørgrav {
611b7579f77SDag-Erling Smørgrav 	if(fptr == &worker_alloc_cleanup) return 1;
612b7579f77SDag-Erling Smørgrav 	return 0;
613b7579f77SDag-Erling Smørgrav }
614b7579f77SDag-Erling Smørgrav 
6153005e0a3SDag-Erling Smørgrav int fptr_whitelist_tube_listen(tube_callback_type* fptr)
616b7579f77SDag-Erling Smørgrav {
617b7579f77SDag-Erling Smørgrav 	if(fptr == &worker_handle_control_cmd) return 1;
618b7579f77SDag-Erling Smørgrav 	else if(fptr == &libworker_handle_control_cmd) return 1;
619b7579f77SDag-Erling Smørgrav 	return 0;
620b7579f77SDag-Erling Smørgrav }
621b7579f77SDag-Erling Smørgrav 
6223005e0a3SDag-Erling Smørgrav int fptr_whitelist_mesh_cb(mesh_cb_func_type fptr)
623b7579f77SDag-Erling Smørgrav {
624b7579f77SDag-Erling Smørgrav 	if(fptr == &libworker_fg_done_cb) return 1;
625b7579f77SDag-Erling Smørgrav 	else if(fptr == &libworker_bg_done_cb) return 1;
62617d15b25SDag-Erling Smørgrav 	else if(fptr == &libworker_event_done_cb) return 1;
627b7579f77SDag-Erling Smørgrav 	else if(fptr == &probe_answer_cb) return 1;
62857bddd21SDag-Erling Smørgrav 	else if(fptr == &auth_xfer_probe_lookup_callback) return 1;
62957bddd21SDag-Erling Smørgrav 	else if(fptr == &auth_xfer_transfer_lookup_callback) return 1;
6305469a995SCy Schubert 	else if(fptr == &auth_zonemd_dnskey_lookup_callback) return 1;
631b7579f77SDag-Erling Smørgrav 	return 0;
632b7579f77SDag-Erling Smørgrav }
633b7579f77SDag-Erling Smørgrav 
634b7579f77SDag-Erling Smørgrav int fptr_whitelist_print_func(void (*fptr)(char*,void*))
635b7579f77SDag-Erling Smørgrav {
636b7579f77SDag-Erling Smørgrav 	if(fptr == &config_print_func) return 1;
637b7579f77SDag-Erling Smørgrav 	else if(fptr == &config_collate_func) return 1;
638b7579f77SDag-Erling Smørgrav 	else if(fptr == &remote_get_opt_ssl) return 1;
639b7579f77SDag-Erling Smørgrav 	return 0;
640b7579f77SDag-Erling Smørgrav }
641bc892140SDag-Erling Smørgrav 
6423005e0a3SDag-Erling Smørgrav int fptr_whitelist_inplace_cb_reply_generic(inplace_cb_reply_func_type* fptr,
643bc892140SDag-Erling Smørgrav 	enum inplace_cb_list_type type)
644bc892140SDag-Erling Smørgrav {
645bc892140SDag-Erling Smørgrav #ifndef WITH_PYTHONMODULE
646bc892140SDag-Erling Smørgrav 	(void)fptr;
647bc892140SDag-Erling Smørgrav #endif
648bc892140SDag-Erling Smørgrav 	if(type == inplace_cb_reply) {
649bc892140SDag-Erling Smørgrav #ifdef WITH_PYTHONMODULE
650bc892140SDag-Erling Smørgrav 		if(fptr == &python_inplace_cb_reply_generic) return 1;
651bc892140SDag-Erling Smørgrav #endif
65225039b37SCy Schubert #ifdef WITH_DYNLIBMODULE
65325039b37SCy Schubert 		if(fptr == &dynlib_inplace_cb_reply_generic) return 1;
65425039b37SCy Schubert #endif
655bc892140SDag-Erling Smørgrav 	} else if(type == inplace_cb_reply_cache) {
656bc892140SDag-Erling Smørgrav #ifdef WITH_PYTHONMODULE
657bc892140SDag-Erling Smørgrav 		if(fptr == &python_inplace_cb_reply_generic) return 1;
658bc892140SDag-Erling Smørgrav #endif
65925039b37SCy Schubert #ifdef WITH_DYNLIBMODULE
66025039b37SCy Schubert 		if(fptr == &dynlib_inplace_cb_reply_generic) return 1;
66125039b37SCy Schubert #endif
662bc892140SDag-Erling Smørgrav 	} else if(type == inplace_cb_reply_local) {
663bc892140SDag-Erling Smørgrav #ifdef WITH_PYTHONMODULE
664bc892140SDag-Erling Smørgrav 		if(fptr == &python_inplace_cb_reply_generic) return 1;
665bc892140SDag-Erling Smørgrav #endif
66625039b37SCy Schubert #ifdef WITH_DYNLIBMODULE
66725039b37SCy Schubert 		if(fptr == &dynlib_inplace_cb_reply_generic) return 1;
66825039b37SCy Schubert #endif
669bc892140SDag-Erling Smørgrav 	} else if(type == inplace_cb_reply_servfail) {
670bc892140SDag-Erling Smørgrav #ifdef WITH_PYTHONMODULE
671bc892140SDag-Erling Smørgrav 		if(fptr == &python_inplace_cb_reply_generic) return 1;
672bc892140SDag-Erling Smørgrav #endif
67325039b37SCy Schubert #ifdef WITH_DYNLIBMODULE
67425039b37SCy Schubert 		if(fptr == &dynlib_inplace_cb_reply_generic) return 1;
67525039b37SCy Schubert #endif
676bc892140SDag-Erling Smørgrav 	}
677bc892140SDag-Erling Smørgrav 	return 0;
678bc892140SDag-Erling Smørgrav }
679bc892140SDag-Erling Smørgrav 
68065b390aaSDag-Erling Smørgrav int fptr_whitelist_inplace_cb_query(inplace_cb_query_func_type* fptr)
681bc892140SDag-Erling Smørgrav {
68265b390aaSDag-Erling Smørgrav #ifdef CLIENT_SUBNET
68365b390aaSDag-Erling Smørgrav 	if(fptr == &ecs_whitelist_check)
68465b390aaSDag-Erling Smørgrav 		return 1;
68565b390aaSDag-Erling Smørgrav #endif
686e86b9096SDag-Erling Smørgrav #ifdef WITH_PYTHONMODULE
687e86b9096SDag-Erling Smørgrav         if(fptr == &python_inplace_cb_query_generic)
688e86b9096SDag-Erling Smørgrav                 return 1;
689e86b9096SDag-Erling Smørgrav #endif
69025039b37SCy Schubert #ifdef WITH_DYNLIBMODULE
69125039b37SCy Schubert         if(fptr == &dynlib_inplace_cb_query_generic)
69225039b37SCy Schubert                 return 1;
69325039b37SCy Schubert #endif
694e86b9096SDag-Erling Smørgrav 	(void)fptr;
69565b390aaSDag-Erling Smørgrav 	return 0;
69665b390aaSDag-Erling Smørgrav }
69765b390aaSDag-Erling Smørgrav 
69865b390aaSDag-Erling Smørgrav int fptr_whitelist_inplace_cb_edns_back_parsed(
69965b390aaSDag-Erling Smørgrav 	inplace_cb_edns_back_parsed_func_type* fptr)
70065b390aaSDag-Erling Smørgrav {
70165b390aaSDag-Erling Smørgrav #ifdef CLIENT_SUBNET
70265b390aaSDag-Erling Smørgrav 	if(fptr == &ecs_edns_back_parsed)
70365b390aaSDag-Erling Smørgrav 		return 1;
70465b390aaSDag-Erling Smørgrav #else
70565b390aaSDag-Erling Smørgrav 	(void)fptr;
70665b390aaSDag-Erling Smørgrav #endif
7078f76bb7dSCy Schubert #ifdef WITH_PYTHONMODULE
7088f76bb7dSCy Schubert     if(fptr == &python_inplace_cb_edns_back_parsed_call)
7098f76bb7dSCy Schubert         return 1;
7108f76bb7dSCy Schubert #endif
71125039b37SCy Schubert #ifdef WITH_DYNLIBMODULE
71225039b37SCy Schubert     if(fptr == &dynlib_inplace_cb_edns_back_parsed)
71325039b37SCy Schubert             return 1;
71425039b37SCy Schubert #endif
71565b390aaSDag-Erling Smørgrav 	return 0;
71665b390aaSDag-Erling Smørgrav }
71765b390aaSDag-Erling Smørgrav 
71865b390aaSDag-Erling Smørgrav int fptr_whitelist_inplace_cb_query_response(
71965b390aaSDag-Erling Smørgrav 	inplace_cb_query_response_func_type* fptr)
72065b390aaSDag-Erling Smørgrav {
72165b390aaSDag-Erling Smørgrav #ifdef CLIENT_SUBNET
72265b390aaSDag-Erling Smørgrav 	if(fptr == &ecs_query_response)
72365b390aaSDag-Erling Smørgrav 		return 1;
72465b390aaSDag-Erling Smørgrav #else
72565b390aaSDag-Erling Smørgrav 	(void)fptr;
72665b390aaSDag-Erling Smørgrav #endif
7278f76bb7dSCy Schubert #ifdef WITH_PYTHONMODULE
7288f76bb7dSCy Schubert     if(fptr == &python_inplace_cb_query_response)
7298f76bb7dSCy Schubert         return 1;
7308f76bb7dSCy Schubert #endif
73125039b37SCy Schubert #ifdef WITH_DYNLIBMODULE
73225039b37SCy Schubert     if(fptr == &dynlib_inplace_cb_query_response)
73325039b37SCy Schubert             return 1;
73425039b37SCy Schubert #endif
735bc892140SDag-Erling Smørgrav 	return 0;
736bc892140SDag-Erling Smørgrav }
7370eefd307SCy Schubert 
738091e9e46SCy Schubert int fptr_whitelist_serve_expired_lookup(serve_expired_lookup_func_type* fptr)
739091e9e46SCy Schubert {
740091e9e46SCy Schubert 	if(fptr == &mesh_serve_expired_lookup)
741091e9e46SCy Schubert 		return 1;
742091e9e46SCy Schubert 	return 0;
743091e9e46SCy Schubert }
744