Deleted Added
full compact
config_file.c (307729) config_file.c (356345)
1/*
2 * util/config_file.c - reads and stores the config file for unbound.
3 *
4 * Copyright (c) 2007, NLnet Labs. All rights reserved.
5 *
6 * This software is open source.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 45 unchanged lines hidden (view full) ---

54#include "util/module.h"
55#include "util/regional.h"
56#include "util/fptr_wlist.h"
57#include "util/data/dname.h"
58#include "util/rtt.h"
59#include "services/cache/infra.h"
60#include "sldns/wire2str.h"
61#include "sldns/parseutil.h"
1/*
2 * util/config_file.c - reads and stores the config file for unbound.
3 *
4 * Copyright (c) 2007, NLnet Labs. All rights reserved.
5 *
6 * This software is open source.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 45 unchanged lines hidden (view full) ---

54#include "util/module.h"
55#include "util/regional.h"
56#include "util/fptr_wlist.h"
57#include "util/data/dname.h"
58#include "util/rtt.h"
59#include "services/cache/infra.h"
60#include "sldns/wire2str.h"
61#include "sldns/parseutil.h"
62#include "iterator/iterator.h"
62#ifdef HAVE_GLOB_H
63# include <glob.h>
64#endif
63#ifdef HAVE_GLOB_H
64# include <glob.h>
65#endif
66#ifdef CLIENT_SUBNET
67#include "edns-subnet/edns-subnet.h"
68#endif
65#ifdef HAVE_PWD_H
66#include <pwd.h>
67#endif
68
69#ifdef HAVE_PWD_H
70#include <pwd.h>
71#endif
72
69/** from cfg username, after daemonise setup performed */
73/** from cfg username, after daemonize setup performed */
70uid_t cfg_uid = (uid_t)-1;
74uid_t cfg_uid = (uid_t)-1;
71/** from cfg username, after daemonise setup performed */
75/** from cfg username, after daemonize setup performed */
72gid_t cfg_gid = (gid_t)-1;
73/** for debug allow small timeout values for fast rollovers */
74int autr_permit_small_holddown = 0;
76gid_t cfg_gid = (gid_t)-1;
77/** for debug allow small timeout values for fast rollovers */
78int autr_permit_small_holddown = 0;
79/** size (in bytes) of stream wait buffers max */
80size_t stream_wait_max = 4 * 1024 * 1024;
75
76/** global config during parsing */
77struct config_parser_state* cfg_parser = 0;
78
79/** init ports possible for use */
80static void init_outgoing_availports(int* array, int num);
81
82struct config_file*

--- 10 unchanged lines hidden (view full) ---

93 cfg->stat_extended = 0;
94 cfg->num_threads = 1;
95 cfg->port = UNBOUND_DNS_PORT;
96 cfg->do_ip4 = 1;
97 cfg->do_ip6 = 1;
98 cfg->do_udp = 1;
99 cfg->do_tcp = 1;
100 cfg->tcp_upstream = 0;
81
82/** global config during parsing */
83struct config_parser_state* cfg_parser = 0;
84
85/** init ports possible for use */
86static void init_outgoing_availports(int* array, int num);
87
88struct config_file*

--- 10 unchanged lines hidden (view full) ---

99 cfg->stat_extended = 0;
100 cfg->num_threads = 1;
101 cfg->port = UNBOUND_DNS_PORT;
102 cfg->do_ip4 = 1;
103 cfg->do_ip6 = 1;
104 cfg->do_udp = 1;
105 cfg->do_tcp = 1;
106 cfg->tcp_upstream = 0;
107 cfg->udp_upstream_without_downstream = 0;
101 cfg->tcp_mss = 0;
102 cfg->outgoing_tcp_mss = 0;
108 cfg->tcp_mss = 0;
109 cfg->outgoing_tcp_mss = 0;
110 cfg->tcp_idle_timeout = 30 * 1000; /* 30s in millisecs */
111 cfg->do_tcp_keepalive = 0;
112 cfg->tcp_keepalive_timeout = 120 * 1000; /* 120s in millisecs */
103 cfg->ssl_service_key = NULL;
104 cfg->ssl_service_pem = NULL;
113 cfg->ssl_service_key = NULL;
114 cfg->ssl_service_pem = NULL;
105 cfg->ssl_port = 853;
115 cfg->ssl_port = UNBOUND_DNS_OVER_TLS_PORT;
106 cfg->ssl_upstream = 0;
116 cfg->ssl_upstream = 0;
117 cfg->tls_cert_bundle = NULL;
118 cfg->tls_win_cert = 0;
107 cfg->use_syslog = 1;
119 cfg->use_syslog = 1;
120 cfg->log_identity = NULL; /* changed later with argv[0] */
108 cfg->log_time_ascii = 0;
109 cfg->log_queries = 0;
121 cfg->log_time_ascii = 0;
122 cfg->log_queries = 0;
123 cfg->log_replies = 0;
124 cfg->log_tag_queryreply = 0;
125 cfg->log_local_actions = 0;
126 cfg->log_servfail = 0;
110#ifndef USE_WINSOCK
111# ifdef USE_MINI_EVENT
112 /* select max 1024 sockets */
113 cfg->outgoing_num_ports = 960;
114 cfg->num_queries_per_thread = 512;
115# else
116 /* libevent can use many sockets */
117 cfg->outgoing_num_ports = 4096;
118 cfg->num_queries_per_thread = 1024;
119# endif
120 cfg->outgoing_num_tcp = 10;
121 cfg->incoming_num_tcp = 10;
122#else
123 cfg->outgoing_num_ports = 48; /* windows is limited in num fds */
124 cfg->num_queries_per_thread = 24;
125 cfg->outgoing_num_tcp = 2; /* leaves 64-52=12 for: 4if,1stop,thread4 */
126 cfg->incoming_num_tcp = 2;
127#endif
127#ifndef USE_WINSOCK
128# ifdef USE_MINI_EVENT
129 /* select max 1024 sockets */
130 cfg->outgoing_num_ports = 960;
131 cfg->num_queries_per_thread = 512;
132# else
133 /* libevent can use many sockets */
134 cfg->outgoing_num_ports = 4096;
135 cfg->num_queries_per_thread = 1024;
136# endif
137 cfg->outgoing_num_tcp = 10;
138 cfg->incoming_num_tcp = 10;
139#else
140 cfg->outgoing_num_ports = 48; /* windows is limited in num fds */
141 cfg->num_queries_per_thread = 24;
142 cfg->outgoing_num_tcp = 2; /* leaves 64-52=12 for: 4if,1stop,thread4 */
143 cfg->incoming_num_tcp = 2;
144#endif
145 cfg->stream_wait_size = 4 * 1024 * 1024;
128 cfg->edns_buffer_size = 4096; /* 4k from rfc recommendation */
129 cfg->msg_buffer_size = 65552; /* 64 k + a small margin */
130 cfg->msg_cache_size = 4 * 1024 * 1024;
131 cfg->msg_cache_slabs = 4;
132 cfg->jostle_time = 200;
133 cfg->rrset_cache_size = 4 * 1024 * 1024;
134 cfg->rrset_cache_slabs = 4;
135 cfg->host_ttl = 900;
136 cfg->bogus_ttl = 60;
137 cfg->min_ttl = 0;
138 cfg->max_ttl = 3600 * 24;
139 cfg->max_negative_ttl = 3600;
140 cfg->prefetch = 0;
141 cfg->prefetch_key = 0;
146 cfg->edns_buffer_size = 4096; /* 4k from rfc recommendation */
147 cfg->msg_buffer_size = 65552; /* 64 k + a small margin */
148 cfg->msg_cache_size = 4 * 1024 * 1024;
149 cfg->msg_cache_slabs = 4;
150 cfg->jostle_time = 200;
151 cfg->rrset_cache_size = 4 * 1024 * 1024;
152 cfg->rrset_cache_slabs = 4;
153 cfg->host_ttl = 900;
154 cfg->bogus_ttl = 60;
155 cfg->min_ttl = 0;
156 cfg->max_ttl = 3600 * 24;
157 cfg->max_negative_ttl = 3600;
158 cfg->prefetch = 0;
159 cfg->prefetch_key = 0;
160 cfg->deny_any = 0;
142 cfg->infra_cache_slabs = 4;
143 cfg->infra_cache_numhosts = 10000;
144 cfg->infra_cache_min_rtt = 50;
145 cfg->delay_close = 0;
146 if(!(cfg->outgoing_avail_ports = (int*)calloc(65536, sizeof(int))))
147 goto error_exit;
148 init_outgoing_availports(cfg->outgoing_avail_ports, 65536);
149 if(!(cfg->username = strdup(UB_USERNAME))) goto error_exit;
150#ifdef HAVE_CHROOT
151 if(!(cfg->chrootdir = strdup(CHROOT_DIR))) goto error_exit;
152#endif
153 if(!(cfg->directory = strdup(RUN_DIR))) goto error_exit;
154 if(!(cfg->logfile = strdup(""))) goto error_exit;
155 if(!(cfg->pidfile = strdup(PIDFILE))) goto error_exit;
156 if(!(cfg->target_fetch_policy = strdup("3 2 1 0 0"))) goto error_exit;
161 cfg->infra_cache_slabs = 4;
162 cfg->infra_cache_numhosts = 10000;
163 cfg->infra_cache_min_rtt = 50;
164 cfg->delay_close = 0;
165 if(!(cfg->outgoing_avail_ports = (int*)calloc(65536, sizeof(int))))
166 goto error_exit;
167 init_outgoing_availports(cfg->outgoing_avail_ports, 65536);
168 if(!(cfg->username = strdup(UB_USERNAME))) goto error_exit;
169#ifdef HAVE_CHROOT
170 if(!(cfg->chrootdir = strdup(CHROOT_DIR))) goto error_exit;
171#endif
172 if(!(cfg->directory = strdup(RUN_DIR))) goto error_exit;
173 if(!(cfg->logfile = strdup(""))) goto error_exit;
174 if(!(cfg->pidfile = strdup(PIDFILE))) goto error_exit;
175 if(!(cfg->target_fetch_policy = strdup("3 2 1 0 0"))) goto error_exit;
176 cfg->fast_server_permil = 0;
177 cfg->fast_server_num = 3;
157 cfg->donotqueryaddrs = NULL;
158 cfg->donotquery_localhost = 1;
159 cfg->root_hints = NULL;
178 cfg->donotqueryaddrs = NULL;
179 cfg->donotquery_localhost = 1;
180 cfg->root_hints = NULL;
181 cfg->use_systemd = 0;
160 cfg->do_daemonize = 1;
161 cfg->if_automatic = 0;
162 cfg->so_rcvbuf = 0;
163 cfg->so_sndbuf = 0;
182 cfg->do_daemonize = 1;
183 cfg->if_automatic = 0;
184 cfg->so_rcvbuf = 0;
185 cfg->so_sndbuf = 0;
164 cfg->so_reuseport = 0;
186 cfg->so_reuseport = REUSEPORT_DEFAULT;
165 cfg->ip_transparent = 0;
166 cfg->ip_freebind = 0;
167 cfg->num_ifs = 0;
168 cfg->ifs = NULL;
169 cfg->num_out_ifs = 0;
170 cfg->out_ifs = NULL;
171 cfg->stubs = NULL;
172 cfg->forwards = NULL;
187 cfg->ip_transparent = 0;
188 cfg->ip_freebind = 0;
189 cfg->num_ifs = 0;
190 cfg->ifs = NULL;
191 cfg->num_out_ifs = 0;
192 cfg->out_ifs = NULL;
193 cfg->stubs = NULL;
194 cfg->forwards = NULL;
195 cfg->auths = NULL;
196#ifdef CLIENT_SUBNET
197 cfg->client_subnet = NULL;
198 cfg->client_subnet_zone = NULL;
199 cfg->client_subnet_opcode = LDNS_EDNS_CLIENT_SUBNET;
200 cfg->client_subnet_always_forward = 0;
201 cfg->max_client_subnet_ipv4 = 24;
202 cfg->max_client_subnet_ipv6 = 56;
203 cfg->min_client_subnet_ipv4 = 0;
204 cfg->min_client_subnet_ipv6 = 0;
205 cfg->max_ecs_tree_size_ipv4 = 100;
206 cfg->max_ecs_tree_size_ipv6 = 100;
207#endif
208 cfg->views = NULL;
173 cfg->acls = NULL;
209 cfg->acls = NULL;
210 cfg->tcp_connection_limits = NULL;
174 cfg->harden_short_bufsize = 0;
175 cfg->harden_large_queries = 0;
176 cfg->harden_glue = 1;
177 cfg->harden_dnssec_stripped = 1;
211 cfg->harden_short_bufsize = 0;
212 cfg->harden_large_queries = 0;
213 cfg->harden_glue = 1;
214 cfg->harden_dnssec_stripped = 1;
178 cfg->harden_below_nxdomain = 0;
215 cfg->harden_below_nxdomain = 1;
179 cfg->harden_referral_path = 0;
180 cfg->harden_algo_downgrade = 0;
181 cfg->use_caps_bits_for_id = 0;
182 cfg->caps_whitelist = NULL;
183 cfg->private_address = NULL;
184 cfg->private_domain = NULL;
185 cfg->unwanted_threshold = 0;
186 cfg->hide_identity = 0;
187 cfg->hide_version = 0;
216 cfg->harden_referral_path = 0;
217 cfg->harden_algo_downgrade = 0;
218 cfg->use_caps_bits_for_id = 0;
219 cfg->caps_whitelist = NULL;
220 cfg->private_address = NULL;
221 cfg->private_domain = NULL;
222 cfg->unwanted_threshold = 0;
223 cfg->hide_identity = 0;
224 cfg->hide_version = 0;
225 cfg->hide_trustanchor = 0;
188 cfg->identity = NULL;
189 cfg->version = NULL;
190 cfg->auto_trust_anchor_file_list = NULL;
191 cfg->trust_anchor_file_list = NULL;
192 cfg->trust_anchor_list = NULL;
193 cfg->trusted_keys_file_list = NULL;
226 cfg->identity = NULL;
227 cfg->version = NULL;
228 cfg->auto_trust_anchor_file_list = NULL;
229 cfg->trust_anchor_file_list = NULL;
230 cfg->trust_anchor_list = NULL;
231 cfg->trusted_keys_file_list = NULL;
232 cfg->trust_anchor_signaling = 1;
233 cfg->root_key_sentinel = 1;
194 cfg->dlv_anchor_file = NULL;
195 cfg->dlv_anchor_list = NULL;
196 cfg->domain_insecure = NULL;
197 cfg->val_date_override = 0;
198 cfg->val_sig_skew_min = 3600; /* at least daylight savings trouble */
199 cfg->val_sig_skew_max = 86400; /* at most timezone settings trouble */
200 cfg->val_clean_additional = 1;
201 cfg->val_log_level = 0;
202 cfg->val_log_squelch = 0;
203 cfg->val_permissive_mode = 0;
234 cfg->dlv_anchor_file = NULL;
235 cfg->dlv_anchor_list = NULL;
236 cfg->domain_insecure = NULL;
237 cfg->val_date_override = 0;
238 cfg->val_sig_skew_min = 3600; /* at least daylight savings trouble */
239 cfg->val_sig_skew_max = 86400; /* at most timezone settings trouble */
240 cfg->val_clean_additional = 1;
241 cfg->val_log_level = 0;
242 cfg->val_log_squelch = 0;
243 cfg->val_permissive_mode = 0;
244 cfg->aggressive_nsec = 0;
204 cfg->ignore_cd = 0;
245 cfg->ignore_cd = 0;
246 cfg->serve_expired = 0;
247 cfg->serve_expired_ttl = 0;
248 cfg->serve_expired_ttl_reset = 0;
205 cfg->add_holddown = 30*24*3600;
206 cfg->del_holddown = 30*24*3600;
207 cfg->keep_missing = 366*24*3600; /* one year plus a little leeway */
208 cfg->permit_small_holddown = 0;
209 cfg->key_cache_size = 4 * 1024 * 1024;
210 cfg->key_cache_slabs = 4;
211 cfg->neg_cache_size = 1 * 1024 * 1024;
212 cfg->local_zones = NULL;
213 cfg->local_zones_nodefault = NULL;
249 cfg->add_holddown = 30*24*3600;
250 cfg->del_holddown = 30*24*3600;
251 cfg->keep_missing = 366*24*3600; /* one year plus a little leeway */
252 cfg->permit_small_holddown = 0;
253 cfg->key_cache_size = 4 * 1024 * 1024;
254 cfg->key_cache_slabs = 4;
255 cfg->neg_cache_size = 1 * 1024 * 1024;
256 cfg->local_zones = NULL;
257 cfg->local_zones_nodefault = NULL;
258#ifdef USE_IPSET
259 cfg->local_zones_ipset = NULL;
260#endif
261 cfg->local_zones_disable_default = 0;
214 cfg->local_data = NULL;
215 cfg->local_zone_overrides = NULL;
216 cfg->unblock_lan_zones = 0;
217 cfg->insecure_lan_zones = 0;
218 cfg->python_script = NULL;
219 cfg->remote_control_enable = 0;
262 cfg->local_data = NULL;
263 cfg->local_zone_overrides = NULL;
264 cfg->unblock_lan_zones = 0;
265 cfg->insecure_lan_zones = 0;
266 cfg->python_script = NULL;
267 cfg->remote_control_enable = 0;
220 cfg->control_ifs = NULL;
268 cfg->control_ifs.first = NULL;
269 cfg->control_ifs.last = NULL;
221 cfg->control_port = UNBOUND_CONTROL_PORT;
270 cfg->control_port = UNBOUND_CONTROL_PORT;
222 cfg->remote_control_use_cert = 1;
223 cfg->minimal_responses = 0;
271 cfg->control_use_cert = 1;
272 cfg->minimal_responses = 1;
224 cfg->rrset_roundrobin = 0;
273 cfg->rrset_roundrobin = 0;
274 cfg->unknown_server_time_limit = 376;
225 cfg->max_udp_size = 4096;
226 if(!(cfg->server_key_file = strdup(RUN_DIR"/unbound_server.key")))
227 goto error_exit;
228 if(!(cfg->server_cert_file = strdup(RUN_DIR"/unbound_server.pem")))
229 goto error_exit;
230 if(!(cfg->control_key_file = strdup(RUN_DIR"/unbound_control.key")))
231 goto error_exit;
232 if(!(cfg->control_cert_file = strdup(RUN_DIR"/unbound_control.pem")))
233 goto error_exit;
234
275 cfg->max_udp_size = 4096;
276 if(!(cfg->server_key_file = strdup(RUN_DIR"/unbound_server.key")))
277 goto error_exit;
278 if(!(cfg->server_cert_file = strdup(RUN_DIR"/unbound_server.pem")))
279 goto error_exit;
280 if(!(cfg->control_key_file = strdup(RUN_DIR"/unbound_control.key")))
281 goto error_exit;
282 if(!(cfg->control_cert_file = strdup(RUN_DIR"/unbound_control.pem")))
283 goto error_exit;
284
285#ifdef CLIENT_SUBNET
286 if(!(cfg->module_conf = strdup("subnetcache validator iterator"))) goto error_exit;
287#else
235 if(!(cfg->module_conf = strdup("validator iterator"))) goto error_exit;
288 if(!(cfg->module_conf = strdup("validator iterator"))) goto error_exit;
289#endif
236 if(!(cfg->val_nsec3_key_iterations =
237 strdup("1024 150 2048 500 4096 2500"))) goto error_exit;
238#if defined(DNSTAP_SOCKET_PATH)
239 if(!(cfg->dnstap_socket_path = strdup(DNSTAP_SOCKET_PATH)))
240 goto error_exit;
241#endif
242 cfg->disable_dnssec_lame_check = 0;
290 if(!(cfg->val_nsec3_key_iterations =
291 strdup("1024 150 2048 500 4096 2500"))) goto error_exit;
292#if defined(DNSTAP_SOCKET_PATH)
293 if(!(cfg->dnstap_socket_path = strdup(DNSTAP_SOCKET_PATH)))
294 goto error_exit;
295#endif
296 cfg->disable_dnssec_lame_check = 0;
297 cfg->ip_ratelimit = 0;
243 cfg->ratelimit = 0;
298 cfg->ratelimit = 0;
299 cfg->ip_ratelimit_slabs = 4;
244 cfg->ratelimit_slabs = 4;
300 cfg->ratelimit_slabs = 4;
301 cfg->ip_ratelimit_size = 4*1024*1024;
245 cfg->ratelimit_size = 4*1024*1024;
246 cfg->ratelimit_for_domain = NULL;
247 cfg->ratelimit_below_domain = NULL;
302 cfg->ratelimit_size = 4*1024*1024;
303 cfg->ratelimit_for_domain = NULL;
304 cfg->ratelimit_below_domain = NULL;
305 cfg->ip_ratelimit_factor = 10;
248 cfg->ratelimit_factor = 10;
306 cfg->ratelimit_factor = 10;
249 cfg->qname_minimisation = 0;
307 cfg->qname_minimisation = 1;
308 cfg->qname_minimisation_strict = 0;
309 cfg->shm_enable = 0;
310 cfg->shm_key = 11777;
311 cfg->dnscrypt = 0;
312 cfg->dnscrypt_port = 0;
313 cfg->dnscrypt_provider = NULL;
314 cfg->dnscrypt_provider_cert = NULL;
315 cfg->dnscrypt_provider_cert_rotated = NULL;
316 cfg->dnscrypt_secret_key = NULL;
317 cfg->dnscrypt_shared_secret_cache_size = 4*1024*1024;
318 cfg->dnscrypt_shared_secret_cache_slabs = 4;
319 cfg->dnscrypt_nonce_cache_size = 4*1024*1024;
320 cfg->dnscrypt_nonce_cache_slabs = 4;
321#ifdef USE_IPSECMOD
322 cfg->ipsecmod_enabled = 1;
323 cfg->ipsecmod_ignore_bogus = 0;
324 cfg->ipsecmod_hook = NULL;
325 cfg->ipsecmod_max_ttl = 3600;
326 cfg->ipsecmod_whitelist = NULL;
327 cfg->ipsecmod_strict = 0;
328#endif
329#ifdef USE_CACHEDB
330 cfg->cachedb_backend = NULL;
331 cfg->cachedb_secret = NULL;
332#endif
333#ifdef USE_IPSET
334 cfg->ipset_name_v4 = NULL;
335 cfg->ipset_name_v6 = NULL;
336#endif
250 return cfg;
251error_exit:
337 return cfg;
338error_exit:
252 config_delete(cfg);
339 config_delete(cfg);
253 return NULL;
254}
255
256struct config_file* config_create_forlib(void)
257{
258 struct config_file* cfg = config_create();
259 if(!cfg) return NULL;
260 /* modifications for library use, less verbose, less memory */

--- 11 unchanged lines hidden (view full) ---

272 cfg->use_syslog = 0;
273 cfg->key_cache_size = 1024*1024;
274 cfg->key_cache_slabs = 1;
275 cfg->neg_cache_size = 100 * 1024;
276 cfg->donotquery_localhost = 0; /* allow, so that you can ask a
277 forward nameserver running on localhost */
278 cfg->val_log_level = 2; /* to fill why_bogus with */
279 cfg->val_log_squelch = 1;
340 return NULL;
341}
342
343struct config_file* config_create_forlib(void)
344{
345 struct config_file* cfg = config_create();
346 if(!cfg) return NULL;
347 /* modifications for library use, less verbose, less memory */

--- 11 unchanged lines hidden (view full) ---

359 cfg->use_syslog = 0;
360 cfg->key_cache_size = 1024*1024;
361 cfg->key_cache_slabs = 1;
362 cfg->neg_cache_size = 100 * 1024;
363 cfg->donotquery_localhost = 0; /* allow, so that you can ask a
364 forward nameserver running on localhost */
365 cfg->val_log_level = 2; /* to fill why_bogus with */
366 cfg->val_log_squelch = 1;
367 cfg->minimal_responses = 0;
280 return cfg;
281}
282
283/** check that the value passed is >= 0 */
284#define IS_NUMBER_OR_ZERO \
285 if(atoi(val) == 0 && strcmp(val, "0") != 0) return 0
286/** check that the value passed is > 0 */
287#define IS_NONZERO_NUMBER \

--- 29 unchanged lines hidden (view full) ---

317#define S_POW2(str, var) if(strcmp(opt, str)==0) \
318 { IS_POW2_NUMBER; cfg->var = (size_t)atoi(val); }
319/** put string into variable */
320#define S_STR(str, var) if(strcmp(opt, str)==0) \
321 { free(cfg->var); return (cfg->var = strdup(val)) != NULL; }
322/** put string into strlist */
323#define S_STRLIST(str, var) if(strcmp(opt, str)==0) \
324 { return cfg_strlist_insert(&cfg->var, strdup(val)); }
368 return cfg;
369}
370
371/** check that the value passed is >= 0 */
372#define IS_NUMBER_OR_ZERO \
373 if(atoi(val) == 0 && strcmp(val, "0") != 0) return 0
374/** check that the value passed is > 0 */
375#define IS_NONZERO_NUMBER \

--- 29 unchanged lines hidden (view full) ---

405#define S_POW2(str, var) if(strcmp(opt, str)==0) \
406 { IS_POW2_NUMBER; cfg->var = (size_t)atoi(val); }
407/** put string into variable */
408#define S_STR(str, var) if(strcmp(opt, str)==0) \
409 { free(cfg->var); return (cfg->var = strdup(val)) != NULL; }
410/** put string into strlist */
411#define S_STRLIST(str, var) if(strcmp(opt, str)==0) \
412 { return cfg_strlist_insert(&cfg->var, strdup(val)); }
413/** put string into strlist if not present yet*/
414#define S_STRLIST_UNIQ(str, var) if(strcmp(opt, str)==0) \
415 { if(cfg_strlist_find(cfg->var, val)) { return 0;} \
416 return cfg_strlist_insert(&cfg->var, strdup(val)); }
417/** append string to strlist */
418#define S_STRLIST_APPEND(str, var) if(strcmp(opt, str)==0) \
419 { return cfg_strlist_append(&cfg->var, strdup(val)); }
325
326int config_set_option(struct config_file* cfg, const char* opt,
327 const char* val)
328{
420
421int config_set_option(struct config_file* cfg, const char* opt,
422 const char* val)
423{
424 char buf[64];
425 if(!opt) return 0;
426 if(opt[strlen(opt)-1] != ':' && strlen(opt)+2<sizeof(buf)) {
427 snprintf(buf, sizeof(buf), "%s:", opt);
428 opt = buf;
429 }
329 S_NUMBER_OR_ZERO("verbosity:", verbosity)
330 else if(strcmp(opt, "statistics-interval:") == 0) {
331 if(strcmp(val, "0") == 0 || strcmp(val, "") == 0)
332 cfg->stat_interval = 0;
333 else if(atoi(val) == 0)
334 return 0;
335 else cfg->stat_interval = atoi(val);
336 } else if(strcmp(opt, "num_threads:") == 0) {

--- 25 unchanged lines hidden (view full) ---

362 free(cfg->logfile);
363 return (cfg->logfile = strdup(val)) != NULL;
364 }
365 else if(strcmp(opt, "log-time-ascii:") == 0)
366 { IS_YES_OR_NO; cfg->log_time_ascii = (strcmp(val, "yes") == 0);
367 log_set_time_asc(cfg->log_time_ascii); }
368 else S_SIZET_NONZERO("max-udp-size:", max_udp_size)
369 else S_YNO("use-syslog:", use_syslog)
430 S_NUMBER_OR_ZERO("verbosity:", verbosity)
431 else if(strcmp(opt, "statistics-interval:") == 0) {
432 if(strcmp(val, "0") == 0 || strcmp(val, "") == 0)
433 cfg->stat_interval = 0;
434 else if(atoi(val) == 0)
435 return 0;
436 else cfg->stat_interval = atoi(val);
437 } else if(strcmp(opt, "num_threads:") == 0) {

--- 25 unchanged lines hidden (view full) ---

463 free(cfg->logfile);
464 return (cfg->logfile = strdup(val)) != NULL;
465 }
466 else if(strcmp(opt, "log-time-ascii:") == 0)
467 { IS_YES_OR_NO; cfg->log_time_ascii = (strcmp(val, "yes") == 0);
468 log_set_time_asc(cfg->log_time_ascii); }
469 else S_SIZET_NONZERO("max-udp-size:", max_udp_size)
470 else S_YNO("use-syslog:", use_syslog)
471 else S_STR("log-identity:", log_identity)
370 else S_YNO("extended-statistics:", stat_extended)
371 else S_YNO("statistics-cumulative:", stat_cumulative)
472 else S_YNO("extended-statistics:", stat_extended)
473 else S_YNO("statistics-cumulative:", stat_cumulative)
474 else S_YNO("shm-enable:", shm_enable)
475 else S_NUMBER_OR_ZERO("shm-key:", shm_key)
372 else S_YNO("do-ip4:", do_ip4)
373 else S_YNO("do-ip6:", do_ip6)
374 else S_YNO("do-udp:", do_udp)
375 else S_YNO("do-tcp:", do_tcp)
376 else S_YNO("tcp-upstream:", tcp_upstream)
476 else S_YNO("do-ip4:", do_ip4)
477 else S_YNO("do-ip6:", do_ip6)
478 else S_YNO("do-udp:", do_udp)
479 else S_YNO("do-tcp:", do_tcp)
480 else S_YNO("tcp-upstream:", tcp_upstream)
481 else S_YNO("udp-upstream-without-downstream:",
482 udp_upstream_without_downstream)
377 else S_NUMBER_NONZERO("tcp-mss:", tcp_mss)
378 else S_NUMBER_NONZERO("outgoing-tcp-mss:", outgoing_tcp_mss)
483 else S_NUMBER_NONZERO("tcp-mss:", tcp_mss)
484 else S_NUMBER_NONZERO("outgoing-tcp-mss:", outgoing_tcp_mss)
485 else S_NUMBER_NONZERO("tcp-idle-timeout:", tcp_idle_timeout)
486 else S_YNO("edns-tcp-keepalive:", do_tcp_keepalive)
487 else S_NUMBER_NONZERO("edns-tcp-keepalive-timeout:", tcp_keepalive_timeout)
379 else S_YNO("ssl-upstream:", ssl_upstream)
380 else S_STR("ssl-service-key:", ssl_service_key)
381 else S_STR("ssl-service-pem:", ssl_service_pem)
382 else S_NUMBER_NONZERO("ssl-port:", ssl_port)
488 else S_YNO("ssl-upstream:", ssl_upstream)
489 else S_STR("ssl-service-key:", ssl_service_key)
490 else S_STR("ssl-service-pem:", ssl_service_pem)
491 else S_NUMBER_NONZERO("ssl-port:", ssl_port)
492 else S_STR("tls-cert-bundle:", tls_cert_bundle)
493 else S_YNO("tls-win-cert:", tls_win_cert)
494 else S_STRLIST("additional-tls-port:", tls_additional_port)
495 else S_STRLIST("tls-additional-ports:", tls_additional_port)
496 else S_STRLIST("tls-additional-port:", tls_additional_port)
497 else S_STRLIST_APPEND("tls-session-ticket-keys:", tls_session_ticket_keys)
498 else S_STR("tls-ciphers:", tls_ciphers)
499 else S_STR("tls-ciphersuites:", tls_ciphersuites)
383 else S_YNO("interface-automatic:", if_automatic)
500 else S_YNO("interface-automatic:", if_automatic)
501 else S_YNO("use-systemd:", use_systemd)
384 else S_YNO("do-daemonize:", do_daemonize)
385 else S_NUMBER_NONZERO("port:", port)
386 else S_NUMBER_NONZERO("outgoing-range:", outgoing_num_ports)
387 else S_SIZET_OR_ZERO("outgoing-num-tcp:", outgoing_num_tcp)
388 else S_SIZET_OR_ZERO("incoming-num-tcp:", incoming_num_tcp)
502 else S_YNO("do-daemonize:", do_daemonize)
503 else S_NUMBER_NONZERO("port:", port)
504 else S_NUMBER_NONZERO("outgoing-range:", outgoing_num_ports)
505 else S_SIZET_OR_ZERO("outgoing-num-tcp:", outgoing_num_tcp)
506 else S_SIZET_OR_ZERO("incoming-num-tcp:", incoming_num_tcp)
507 else S_MEMSIZE("stream-wait-size:", stream_wait_size)
389 else S_SIZET_NONZERO("edns-buffer-size:", edns_buffer_size)
390 else S_SIZET_NONZERO("msg-buffer-size:", msg_buffer_size)
391 else S_MEMSIZE("msg-cache-size:", msg_cache_size)
392 else S_POW2("msg-cache-slabs:", msg_cache_slabs)
393 else S_SIZET_NONZERO("num-queries-per-thread:",num_queries_per_thread)
394 else S_SIZET_OR_ZERO("jostle-timeout:", jostle_time)
395 else S_MEMSIZE("so-rcvbuf:", so_rcvbuf)
396 else S_MEMSIZE("so-sndbuf:", so_sndbuf)
397 else S_YNO("so-reuseport:", so_reuseport)
398 else S_YNO("ip-transparent:", ip_transparent)
399 else S_YNO("ip-freebind:", ip_freebind)
400 else S_MEMSIZE("rrset-cache-size:", rrset_cache_size)
401 else S_POW2("rrset-cache-slabs:", rrset_cache_slabs)
402 else S_YNO("prefetch:", prefetch)
403 else S_YNO("prefetch-key:", prefetch_key)
508 else S_SIZET_NONZERO("edns-buffer-size:", edns_buffer_size)
509 else S_SIZET_NONZERO("msg-buffer-size:", msg_buffer_size)
510 else S_MEMSIZE("msg-cache-size:", msg_cache_size)
511 else S_POW2("msg-cache-slabs:", msg_cache_slabs)
512 else S_SIZET_NONZERO("num-queries-per-thread:",num_queries_per_thread)
513 else S_SIZET_OR_ZERO("jostle-timeout:", jostle_time)
514 else S_MEMSIZE("so-rcvbuf:", so_rcvbuf)
515 else S_MEMSIZE("so-sndbuf:", so_sndbuf)
516 else S_YNO("so-reuseport:", so_reuseport)
517 else S_YNO("ip-transparent:", ip_transparent)
518 else S_YNO("ip-freebind:", ip_freebind)
519 else S_MEMSIZE("rrset-cache-size:", rrset_cache_size)
520 else S_POW2("rrset-cache-slabs:", rrset_cache_slabs)
521 else S_YNO("prefetch:", prefetch)
522 else S_YNO("prefetch-key:", prefetch_key)
523 else S_YNO("deny-any:", deny_any)
404 else if(strcmp(opt, "cache-max-ttl:") == 0)
405 { IS_NUMBER_OR_ZERO; cfg->max_ttl = atoi(val); MAX_TTL=(time_t)cfg->max_ttl;}
406 else if(strcmp(opt, "cache-max-negative-ttl:") == 0)
407 { IS_NUMBER_OR_ZERO; cfg->max_negative_ttl = atoi(val); MAX_NEG_TTL=(time_t)cfg->max_negative_ttl;}
408 else if(strcmp(opt, "cache-min-ttl:") == 0)
409 { IS_NUMBER_OR_ZERO; cfg->min_ttl = atoi(val); MIN_TTL=(time_t)cfg->min_ttl;}
410 else if(strcmp(opt, "infra-cache-min-rtt:") == 0) {
411 IS_NUMBER_OR_ZERO; cfg->infra_cache_min_rtt = atoi(val);

--- 4 unchanged lines hidden (view full) ---

416 else S_SIZET_NONZERO("infra-cache-numhosts:", infra_cache_numhosts)
417 else S_NUMBER_OR_ZERO("delay-close:", delay_close)
418 else S_STR("chroot:", chrootdir)
419 else S_STR("username:", username)
420 else S_STR("directory:", directory)
421 else S_STR("pidfile:", pidfile)
422 else S_YNO("hide-identity:", hide_identity)
423 else S_YNO("hide-version:", hide_version)
524 else if(strcmp(opt, "cache-max-ttl:") == 0)
525 { IS_NUMBER_OR_ZERO; cfg->max_ttl = atoi(val); MAX_TTL=(time_t)cfg->max_ttl;}
526 else if(strcmp(opt, "cache-max-negative-ttl:") == 0)
527 { IS_NUMBER_OR_ZERO; cfg->max_negative_ttl = atoi(val); MAX_NEG_TTL=(time_t)cfg->max_negative_ttl;}
528 else if(strcmp(opt, "cache-min-ttl:") == 0)
529 { IS_NUMBER_OR_ZERO; cfg->min_ttl = atoi(val); MIN_TTL=(time_t)cfg->min_ttl;}
530 else if(strcmp(opt, "infra-cache-min-rtt:") == 0) {
531 IS_NUMBER_OR_ZERO; cfg->infra_cache_min_rtt = atoi(val);

--- 4 unchanged lines hidden (view full) ---

536 else S_SIZET_NONZERO("infra-cache-numhosts:", infra_cache_numhosts)
537 else S_NUMBER_OR_ZERO("delay-close:", delay_close)
538 else S_STR("chroot:", chrootdir)
539 else S_STR("username:", username)
540 else S_STR("directory:", directory)
541 else S_STR("pidfile:", pidfile)
542 else S_YNO("hide-identity:", hide_identity)
543 else S_YNO("hide-version:", hide_version)
544 else S_YNO("hide-trustanchor:", hide_trustanchor)
424 else S_STR("identity:", identity)
425 else S_STR("version:", version)
426 else S_STRLIST("root-hints:", root_hints)
427 else S_STR("target-fetch-policy:", target_fetch_policy)
428 else S_YNO("harden-glue:", harden_glue)
429 else S_YNO("harden-short-bufsize:", harden_short_bufsize)
430 else S_YNO("harden-large-queries:", harden_large_queries)
431 else S_YNO("harden-dnssec-stripped:", harden_dnssec_stripped)
432 else S_YNO("harden-below-nxdomain:", harden_below_nxdomain)
433 else S_YNO("harden-referral-path:", harden_referral_path)
434 else S_YNO("harden-algo-downgrade:", harden_algo_downgrade)
545 else S_STR("identity:", identity)
546 else S_STR("version:", version)
547 else S_STRLIST("root-hints:", root_hints)
548 else S_STR("target-fetch-policy:", target_fetch_policy)
549 else S_YNO("harden-glue:", harden_glue)
550 else S_YNO("harden-short-bufsize:", harden_short_bufsize)
551 else S_YNO("harden-large-queries:", harden_large_queries)
552 else S_YNO("harden-dnssec-stripped:", harden_dnssec_stripped)
553 else S_YNO("harden-below-nxdomain:", harden_below_nxdomain)
554 else S_YNO("harden-referral-path:", harden_referral_path)
555 else S_YNO("harden-algo-downgrade:", harden_algo_downgrade)
435 else S_YNO("use-caps-for-id", use_caps_bits_for_id)
556 else S_YNO("use-caps-for-id:", use_caps_bits_for_id)
436 else S_STRLIST("caps-whitelist:", caps_whitelist)
437 else S_SIZET_OR_ZERO("unwanted-reply-threshold:", unwanted_threshold)
438 else S_STRLIST("private-address:", private_address)
439 else S_STRLIST("private-domain:", private_domain)
440 else S_YNO("do-not-query-localhost:", donotquery_localhost)
441 else S_STRLIST("do-not-query-address:", donotqueryaddrs)
442 else S_STRLIST("auto-trust-anchor-file:", auto_trust_anchor_file_list)
443 else S_STRLIST("trust-anchor-file:", trust_anchor_file_list)
444 else S_STRLIST("trust-anchor:", trust_anchor_list)
445 else S_STRLIST("trusted-keys-file:", trusted_keys_file_list)
557 else S_STRLIST("caps-whitelist:", caps_whitelist)
558 else S_SIZET_OR_ZERO("unwanted-reply-threshold:", unwanted_threshold)
559 else S_STRLIST("private-address:", private_address)
560 else S_STRLIST("private-domain:", private_domain)
561 else S_YNO("do-not-query-localhost:", donotquery_localhost)
562 else S_STRLIST("do-not-query-address:", donotqueryaddrs)
563 else S_STRLIST("auto-trust-anchor-file:", auto_trust_anchor_file_list)
564 else S_STRLIST("trust-anchor-file:", trust_anchor_file_list)
565 else S_STRLIST("trust-anchor:", trust_anchor_list)
566 else S_STRLIST("trusted-keys-file:", trusted_keys_file_list)
567 else S_YNO("trust-anchor-signaling:", trust_anchor_signaling)
568 else S_YNO("root-key-sentinel:", root_key_sentinel)
446 else S_STR("dlv-anchor-file:", dlv_anchor_file)
447 else S_STRLIST("dlv-anchor:", dlv_anchor_list)
448 else S_STRLIST("domain-insecure:", domain_insecure)
449 else S_NUMBER_OR_ZERO("val-bogus-ttl:", bogus_ttl)
450 else S_YNO("val-clean-additional:", val_clean_additional)
451 else S_NUMBER_OR_ZERO("val-log-level:", val_log_level)
452 else S_YNO("val-log-squelch:", val_log_squelch)
453 else S_YNO("log-queries:", log_queries)
569 else S_STR("dlv-anchor-file:", dlv_anchor_file)
570 else S_STRLIST("dlv-anchor:", dlv_anchor_list)
571 else S_STRLIST("domain-insecure:", domain_insecure)
572 else S_NUMBER_OR_ZERO("val-bogus-ttl:", bogus_ttl)
573 else S_YNO("val-clean-additional:", val_clean_additional)
574 else S_NUMBER_OR_ZERO("val-log-level:", val_log_level)
575 else S_YNO("val-log-squelch:", val_log_squelch)
576 else S_YNO("log-queries:", log_queries)
577 else S_YNO("log-replies:", log_replies)
578 else S_YNO("log-tag-queryreply:", log_tag_queryreply)
579 else S_YNO("log-local-actions:", log_local_actions)
580 else S_YNO("log-servfail:", log_servfail)
454 else S_YNO("val-permissive-mode:", val_permissive_mode)
581 else S_YNO("val-permissive-mode:", val_permissive_mode)
582 else S_YNO("aggressive-nsec:", aggressive_nsec)
455 else S_YNO("ignore-cd-flag:", ignore_cd)
583 else S_YNO("ignore-cd-flag:", ignore_cd)
584 else S_YNO("serve-expired:", serve_expired)
585 else if(strcmp(opt, "serve_expired_ttl:") == 0)
586 { IS_NUMBER_OR_ZERO; cfg->serve_expired_ttl = atoi(val); SERVE_EXPIRED_TTL=(time_t)cfg->serve_expired_ttl;}
587 else S_YNO("serve-expired-ttl-reset:", serve_expired_ttl_reset)
456 else S_STR("val-nsec3-keysize-iterations:", val_nsec3_key_iterations)
457 else S_UNSIGNED_OR_ZERO("add-holddown:", add_holddown)
458 else S_UNSIGNED_OR_ZERO("del-holddown:", del_holddown)
459 else S_UNSIGNED_OR_ZERO("keep-missing:", keep_missing)
460 else if(strcmp(opt, "permit-small-holddown:") == 0)
461 { IS_YES_OR_NO; cfg->permit_small_holddown = (strcmp(val, "yes") == 0);
462 autr_permit_small_holddown = cfg->permit_small_holddown; }
463 else S_MEMSIZE("key-cache-size:", key_cache_size)
464 else S_POW2("key-cache-slabs:", key_cache_slabs)
465 else S_MEMSIZE("neg-cache-size:", neg_cache_size)
466 else S_YNO("minimal-responses:", minimal_responses)
467 else S_YNO("rrset-roundrobin:", rrset_roundrobin)
588 else S_STR("val-nsec3-keysize-iterations:", val_nsec3_key_iterations)
589 else S_UNSIGNED_OR_ZERO("add-holddown:", add_holddown)
590 else S_UNSIGNED_OR_ZERO("del-holddown:", del_holddown)
591 else S_UNSIGNED_OR_ZERO("keep-missing:", keep_missing)
592 else if(strcmp(opt, "permit-small-holddown:") == 0)
593 { IS_YES_OR_NO; cfg->permit_small_holddown = (strcmp(val, "yes") == 0);
594 autr_permit_small_holddown = cfg->permit_small_holddown; }
595 else S_MEMSIZE("key-cache-size:", key_cache_size)
596 else S_POW2("key-cache-slabs:", key_cache_slabs)
597 else S_MEMSIZE("neg-cache-size:", neg_cache_size)
598 else S_YNO("minimal-responses:", minimal_responses)
599 else S_YNO("rrset-roundrobin:", rrset_roundrobin)
600 else S_NUMBER_OR_ZERO("unknown-server-time-limit:", unknown_server_time_limit)
468 else S_STRLIST("local-data:", local_data)
469 else S_YNO("unblock-lan-zones:", unblock_lan_zones)
470 else S_YNO("insecure-lan-zones:", insecure_lan_zones)
471 else S_YNO("control-enable:", remote_control_enable)
601 else S_STRLIST("local-data:", local_data)
602 else S_YNO("unblock-lan-zones:", unblock_lan_zones)
603 else S_YNO("insecure-lan-zones:", insecure_lan_zones)
604 else S_YNO("control-enable:", remote_control_enable)
472 else S_STRLIST("control-interface:", control_ifs)
605 else S_STRLIST_APPEND("control-interface:", control_ifs)
473 else S_NUMBER_NONZERO("control-port:", control_port)
474 else S_STR("server-key-file:", server_key_file)
475 else S_STR("server-cert-file:", server_cert_file)
476 else S_STR("control-key-file:", control_key_file)
477 else S_STR("control-cert-file:", control_cert_file)
478 else S_STR("module-config:", module_conf)
606 else S_NUMBER_NONZERO("control-port:", control_port)
607 else S_STR("server-key-file:", server_key_file)
608 else S_STR("server-cert-file:", server_cert_file)
609 else S_STR("control-key-file:", control_key_file)
610 else S_STR("control-cert-file:", control_cert_file)
611 else S_STR("module-config:", module_conf)
479 else S_STR("python-script:", python_script)
612 else S_STRLIST("python-script:", python_script)
480 else S_YNO("disable-dnssec-lame-check:", disable_dnssec_lame_check)
613 else S_YNO("disable-dnssec-lame-check:", disable_dnssec_lame_check)
614#ifdef CLIENT_SUBNET
615 /* Can't set max subnet prefix here, since that value is used when
616 * generating the address tree. */
617 /* No client-subnet-always-forward here, module registration depends on
618 * this option. */
619#endif
620#ifdef USE_DNSTAP
621 else S_YNO("dnstap-enable:", dnstap)
622 else S_STR("dnstap-socket-path:", dnstap_socket_path)
623 else S_YNO("dnstap-send-identity:", dnstap_send_identity)
624 else S_YNO("dnstap-send-version:", dnstap_send_version)
625 else S_STR("dnstap-identity:", dnstap_identity)
626 else S_STR("dnstap-version:", dnstap_version)
627 else S_YNO("dnstap-log-resolver-query-messages:",
628 dnstap_log_resolver_query_messages)
629 else S_YNO("dnstap-log-resolver-response-messages:",
630 dnstap_log_resolver_response_messages)
631 else S_YNO("dnstap-log-client-query-messages:",
632 dnstap_log_client_query_messages)
633 else S_YNO("dnstap-log-client-response-messages:",
634 dnstap_log_client_response_messages)
635 else S_YNO("dnstap-log-forwarder-query-messages:",
636 dnstap_log_forwarder_query_messages)
637 else S_YNO("dnstap-log-forwarder-response-messages:",
638 dnstap_log_forwarder_response_messages)
639#endif
640#ifdef USE_DNSCRYPT
641 else S_YNO("dnscrypt-enable:", dnscrypt)
642 else S_NUMBER_NONZERO("dnscrypt-port:", dnscrypt_port)
643 else S_STR("dnscrypt-provider:", dnscrypt_provider)
644 else S_STRLIST_UNIQ("dnscrypt-provider-cert:", dnscrypt_provider_cert)
645 else S_STRLIST("dnscrypt-provider-cert-rotated:", dnscrypt_provider_cert_rotated)
646 else S_STRLIST_UNIQ("dnscrypt-secret-key:", dnscrypt_secret_key)
647 else S_MEMSIZE("dnscrypt-shared-secret-cache-size:",
648 dnscrypt_shared_secret_cache_size)
649 else S_POW2("dnscrypt-shared-secret-cache-slabs:",
650 dnscrypt_shared_secret_cache_slabs)
651 else S_MEMSIZE("dnscrypt-nonce-cache-size:",
652 dnscrypt_nonce_cache_size)
653 else S_POW2("dnscrypt-nonce-cache-slabs:",
654 dnscrypt_nonce_cache_slabs)
655#endif
656 else if(strcmp(opt, "ip-ratelimit:") == 0) {
657 IS_NUMBER_OR_ZERO; cfg->ip_ratelimit = atoi(val);
658 infra_ip_ratelimit=cfg->ip_ratelimit;
659 }
481 else if(strcmp(opt, "ratelimit:") == 0) {
482 IS_NUMBER_OR_ZERO; cfg->ratelimit = atoi(val);
483 infra_dp_ratelimit=cfg->ratelimit;
484 }
660 else if(strcmp(opt, "ratelimit:") == 0) {
661 IS_NUMBER_OR_ZERO; cfg->ratelimit = atoi(val);
662 infra_dp_ratelimit=cfg->ratelimit;
663 }
664 else S_MEMSIZE("ip-ratelimit-size:", ip_ratelimit_size)
485 else S_MEMSIZE("ratelimit-size:", ratelimit_size)
665 else S_MEMSIZE("ratelimit-size:", ratelimit_size)
666 else S_POW2("ip-ratelimit-slabs:", ip_ratelimit_slabs)
486 else S_POW2("ratelimit-slabs:", ratelimit_slabs)
667 else S_POW2("ratelimit-slabs:", ratelimit_slabs)
668 else S_NUMBER_OR_ZERO("ip-ratelimit-factor:", ip_ratelimit_factor)
487 else S_NUMBER_OR_ZERO("ratelimit-factor:", ratelimit_factor)
669 else S_NUMBER_OR_ZERO("ratelimit-factor:", ratelimit_factor)
670 else S_SIZET_NONZERO("fast-server-num:", fast_server_num)
671 else S_NUMBER_OR_ZERO("fast-server-permil:", fast_server_permil)
488 else S_YNO("qname-minimisation:", qname_minimisation)
672 else S_YNO("qname-minimisation:", qname_minimisation)
673 else S_YNO("qname-minimisation-strict:", qname_minimisation_strict)
674#ifdef USE_IPSECMOD
675 else S_YNO("ipsecmod-enabled:", ipsecmod_enabled)
676 else S_YNO("ipsecmod-ignore-bogus:", ipsecmod_ignore_bogus)
677 else if(strcmp(opt, "ipsecmod-max-ttl:") == 0)
678 { IS_NUMBER_OR_ZERO; cfg->ipsecmod_max_ttl = atoi(val); }
679 else S_YNO("ipsecmod-strict:", ipsecmod_strict)
680#endif
489 else if(strcmp(opt, "define-tag:") ==0) {
490 return config_add_tag(cfg, val);
491 /* val_sig_skew_min and max are copied into val_env during init,
492 * so this does not update val_env with set_option */
493 } else if(strcmp(opt, "val-sig-skew-min:") == 0)
494 { IS_NUMBER_OR_ZERO; cfg->val_sig_skew_min = (int32_t)atoi(val); }
495 else if(strcmp(opt, "val-sig-skew-max:") == 0)
496 { IS_NUMBER_OR_ZERO; cfg->val_sig_skew_max = (int32_t)atoi(val); }

--- 5 unchanged lines hidden (view full) ---

502 if(cfg->out_ifs && cfg->num_out_ifs) {
503 memmove(oi, cfg->out_ifs, cfg->num_out_ifs*sizeof(char*));
504 free(cfg->out_ifs);
505 }
506 oi[cfg->num_out_ifs++] = d;
507 cfg->out_ifs = oi;
508 } else {
509 /* unknown or unsupported (from the set_option interface):
681 else if(strcmp(opt, "define-tag:") ==0) {
682 return config_add_tag(cfg, val);
683 /* val_sig_skew_min and max are copied into val_env during init,
684 * so this does not update val_env with set_option */
685 } else if(strcmp(opt, "val-sig-skew-min:") == 0)
686 { IS_NUMBER_OR_ZERO; cfg->val_sig_skew_min = (int32_t)atoi(val); }
687 else if(strcmp(opt, "val-sig-skew-max:") == 0)
688 { IS_NUMBER_OR_ZERO; cfg->val_sig_skew_max = (int32_t)atoi(val); }

--- 5 unchanged lines hidden (view full) ---

694 if(cfg->out_ifs && cfg->num_out_ifs) {
695 memmove(oi, cfg->out_ifs, cfg->num_out_ifs*sizeof(char*));
696 free(cfg->out_ifs);
697 }
698 oi[cfg->num_out_ifs++] = d;
699 cfg->out_ifs = oi;
700 } else {
701 /* unknown or unsupported (from the set_option interface):
510 * interface, outgoing-interface, access-control,
702 * interface, outgoing-interface, access-control,
511 * stub-zone, name, stub-addr, stub-host, stub-prime
703 * stub-zone, name, stub-addr, stub-host, stub-prime
512 * forward-first, stub-first,
513 * forward-zone, name, forward-addr, forward-host,
704 * forward-first, stub-first, forward-ssl-upstream,
705 * stub-ssl-upstream, forward-zone, auth-zone
706 * name, forward-addr, forward-host,
514 * ratelimit-for-domain, ratelimit-below-domain,
707 * ratelimit-for-domain, ratelimit-below-domain,
515 * local-zone-tag */
708 * local-zone-tag, access-control-view,
709 * send-client-subnet, client-subnet-always-forward,
710 * max-client-subnet-ipv4, max-client-subnet-ipv6,
711 * min-client-subnet-ipv4, min-client-subnet-ipv6,
712 * max-ecs-tree-size-ipv4, max-ecs-tree-size-ipv6, ipsecmod_hook,
713 * ipsecmod_whitelist. */
516 return 0;
517 }
518 return 1;
519}
520
521void config_print_func(char* line, void* arg)
522{
523 FILE* f = (FILE*)arg;

--- 138 unchanged lines hidden (view full) ---

662 } \
663 } \
664 }
665
666int
667config_get_option(struct config_file* cfg, const char* opt,
668 void (*func)(char*,void*), void* arg)
669{
714 return 0;
715 }
716 return 1;
717}
718
719void config_print_func(char* line, void* arg)
720{
721 FILE* f = (FILE*)arg;

--- 138 unchanged lines hidden (view full) ---

860 } \
861 } \
862 }
863
864int
865config_get_option(struct config_file* cfg, const char* opt,
866 void (*func)(char*,void*), void* arg)
867{
670 char buf[1024];
868 char buf[1024], nopt[64];
671 size_t len = sizeof(buf);
869 size_t len = sizeof(buf);
870 if(!opt) return 0;
871 if(opt && opt[strlen(opt)-1] == ':' && strlen(opt)<sizeof(nopt)) {
872 memmove(nopt, opt, strlen(opt));
873 nopt[strlen(opt)-1] = 0;
874 opt = nopt;
875 }
672 fptr_ok(fptr_whitelist_print_func(func));
673 O_DEC(opt, "verbosity", verbosity)
674 else O_DEC(opt, "statistics-interval", stat_interval)
675 else O_YNO(opt, "statistics-cumulative", stat_cumulative)
676 else O_YNO(opt, "extended-statistics", stat_extended)
876 fptr_ok(fptr_whitelist_print_func(func));
877 O_DEC(opt, "verbosity", verbosity)
878 else O_DEC(opt, "statistics-interval", stat_interval)
879 else O_YNO(opt, "statistics-cumulative", stat_cumulative)
880 else O_YNO(opt, "extended-statistics", stat_extended)
881 else O_YNO(opt, "shm-enable", shm_enable)
882 else O_DEC(opt, "shm-key", shm_key)
677 else O_YNO(opt, "use-syslog", use_syslog)
883 else O_YNO(opt, "use-syslog", use_syslog)
884 else O_STR(opt, "log-identity", log_identity)
678 else O_YNO(opt, "log-time-ascii", log_time_ascii)
679 else O_DEC(opt, "num-threads", num_threads)
680 else O_IFC(opt, "interface", num_ifs, ifs)
681 else O_IFC(opt, "outgoing-interface", num_out_ifs, out_ifs)
682 else O_YNO(opt, "interface-automatic", if_automatic)
683 else O_DEC(opt, "port", port)
684 else O_DEC(opt, "outgoing-range", outgoing_num_ports)
685 else O_DEC(opt, "outgoing-num-tcp", outgoing_num_tcp)
686 else O_DEC(opt, "incoming-num-tcp", incoming_num_tcp)
885 else O_YNO(opt, "log-time-ascii", log_time_ascii)
886 else O_DEC(opt, "num-threads", num_threads)
887 else O_IFC(opt, "interface", num_ifs, ifs)
888 else O_IFC(opt, "outgoing-interface", num_out_ifs, out_ifs)
889 else O_YNO(opt, "interface-automatic", if_automatic)
890 else O_DEC(opt, "port", port)
891 else O_DEC(opt, "outgoing-range", outgoing_num_ports)
892 else O_DEC(opt, "outgoing-num-tcp", outgoing_num_tcp)
893 else O_DEC(opt, "incoming-num-tcp", incoming_num_tcp)
894 else O_MEM(opt, "stream-wait-size", stream_wait_size)
687 else O_DEC(opt, "edns-buffer-size", edns_buffer_size)
688 else O_DEC(opt, "msg-buffer-size", msg_buffer_size)
689 else O_MEM(opt, "msg-cache-size", msg_cache_size)
690 else O_DEC(opt, "msg-cache-slabs", msg_cache_slabs)
691 else O_DEC(opt, "num-queries-per-thread", num_queries_per_thread)
692 else O_UNS(opt, "jostle-timeout", jostle_time)
693 else O_MEM(opt, "so-rcvbuf", so_rcvbuf)
694 else O_MEM(opt, "so-sndbuf", so_sndbuf)
695 else O_YNO(opt, "so-reuseport", so_reuseport)
696 else O_YNO(opt, "ip-transparent", ip_transparent)
697 else O_YNO(opt, "ip-freebind", ip_freebind)
698 else O_MEM(opt, "rrset-cache-size", rrset_cache_size)
699 else O_DEC(opt, "rrset-cache-slabs", rrset_cache_slabs)
700 else O_YNO(opt, "prefetch-key", prefetch_key)
701 else O_YNO(opt, "prefetch", prefetch)
895 else O_DEC(opt, "edns-buffer-size", edns_buffer_size)
896 else O_DEC(opt, "msg-buffer-size", msg_buffer_size)
897 else O_MEM(opt, "msg-cache-size", msg_cache_size)
898 else O_DEC(opt, "msg-cache-slabs", msg_cache_slabs)
899 else O_DEC(opt, "num-queries-per-thread", num_queries_per_thread)
900 else O_UNS(opt, "jostle-timeout", jostle_time)
901 else O_MEM(opt, "so-rcvbuf", so_rcvbuf)
902 else O_MEM(opt, "so-sndbuf", so_sndbuf)
903 else O_YNO(opt, "so-reuseport", so_reuseport)
904 else O_YNO(opt, "ip-transparent", ip_transparent)
905 else O_YNO(opt, "ip-freebind", ip_freebind)
906 else O_MEM(opt, "rrset-cache-size", rrset_cache_size)
907 else O_DEC(opt, "rrset-cache-slabs", rrset_cache_slabs)
908 else O_YNO(opt, "prefetch-key", prefetch_key)
909 else O_YNO(opt, "prefetch", prefetch)
910 else O_YNO(opt, "deny-any", deny_any)
702 else O_DEC(opt, "cache-max-ttl", max_ttl)
703 else O_DEC(opt, "cache-max-negative-ttl", max_negative_ttl)
704 else O_DEC(opt, "cache-min-ttl", min_ttl)
705 else O_DEC(opt, "infra-host-ttl", host_ttl)
706 else O_DEC(opt, "infra-cache-slabs", infra_cache_slabs)
707 else O_DEC(opt, "infra-cache-min-rtt", infra_cache_min_rtt)
708 else O_MEM(opt, "infra-cache-numhosts", infra_cache_numhosts)
709 else O_UNS(opt, "delay-close", delay_close)
710 else O_YNO(opt, "do-ip4", do_ip4)
711 else O_YNO(opt, "do-ip6", do_ip6)
712 else O_YNO(opt, "do-udp", do_udp)
713 else O_YNO(opt, "do-tcp", do_tcp)
714 else O_YNO(opt, "tcp-upstream", tcp_upstream)
911 else O_DEC(opt, "cache-max-ttl", max_ttl)
912 else O_DEC(opt, "cache-max-negative-ttl", max_negative_ttl)
913 else O_DEC(opt, "cache-min-ttl", min_ttl)
914 else O_DEC(opt, "infra-host-ttl", host_ttl)
915 else O_DEC(opt, "infra-cache-slabs", infra_cache_slabs)
916 else O_DEC(opt, "infra-cache-min-rtt", infra_cache_min_rtt)
917 else O_MEM(opt, "infra-cache-numhosts", infra_cache_numhosts)
918 else O_UNS(opt, "delay-close", delay_close)
919 else O_YNO(opt, "do-ip4", do_ip4)
920 else O_YNO(opt, "do-ip6", do_ip6)
921 else O_YNO(opt, "do-udp", do_udp)
922 else O_YNO(opt, "do-tcp", do_tcp)
923 else O_YNO(opt, "tcp-upstream", tcp_upstream)
924 else O_YNO(opt, "udp-upstream-without-downstream", udp_upstream_without_downstream)
715 else O_DEC(opt, "tcp-mss", tcp_mss)
716 else O_DEC(opt, "outgoing-tcp-mss", outgoing_tcp_mss)
925 else O_DEC(opt, "tcp-mss", tcp_mss)
926 else O_DEC(opt, "outgoing-tcp-mss", outgoing_tcp_mss)
927 else O_DEC(opt, "tcp-idle-timeout", tcp_idle_timeout)
928 else O_YNO(opt, "edns-tcp-keepalive", do_tcp_keepalive)
929 else O_DEC(opt, "edns-tcp-keepalive-timeout", tcp_keepalive_timeout)
717 else O_YNO(opt, "ssl-upstream", ssl_upstream)
718 else O_STR(opt, "ssl-service-key", ssl_service_key)
719 else O_STR(opt, "ssl-service-pem", ssl_service_pem)
720 else O_DEC(opt, "ssl-port", ssl_port)
930 else O_YNO(opt, "ssl-upstream", ssl_upstream)
931 else O_STR(opt, "ssl-service-key", ssl_service_key)
932 else O_STR(opt, "ssl-service-pem", ssl_service_pem)
933 else O_DEC(opt, "ssl-port", ssl_port)
934 else O_STR(opt, "tls-cert-bundle", tls_cert_bundle)
935 else O_YNO(opt, "tls-win-cert", tls_win_cert)
936 else O_LST(opt, "tls-additional-port", tls_additional_port)
937 else O_LST(opt, "tls-session-ticket-keys", tls_session_ticket_keys.first)
938 else O_STR(opt, "tls-ciphers", tls_ciphers)
939 else O_STR(opt, "tls-ciphersuites", tls_ciphersuites)
940 else O_YNO(opt, "use-systemd", use_systemd)
721 else O_YNO(opt, "do-daemonize", do_daemonize)
722 else O_STR(opt, "chroot", chrootdir)
723 else O_STR(opt, "username", username)
724 else O_STR(opt, "directory", directory)
725 else O_STR(opt, "logfile", logfile)
726 else O_YNO(opt, "log-queries", log_queries)
941 else O_YNO(opt, "do-daemonize", do_daemonize)
942 else O_STR(opt, "chroot", chrootdir)
943 else O_STR(opt, "username", username)
944 else O_STR(opt, "directory", directory)
945 else O_STR(opt, "logfile", logfile)
946 else O_YNO(opt, "log-queries", log_queries)
947 else O_YNO(opt, "log-replies", log_replies)
948 else O_YNO(opt, "log-tag-queryreply", log_tag_queryreply)
949 else O_YNO(opt, "log-local-actions", log_local_actions)
950 else O_YNO(opt, "log-servfail", log_servfail)
727 else O_STR(opt, "pidfile", pidfile)
728 else O_YNO(opt, "hide-identity", hide_identity)
729 else O_YNO(opt, "hide-version", hide_version)
951 else O_STR(opt, "pidfile", pidfile)
952 else O_YNO(opt, "hide-identity", hide_identity)
953 else O_YNO(opt, "hide-version", hide_version)
954 else O_YNO(opt, "hide-trustanchor", hide_trustanchor)
730 else O_STR(opt, "identity", identity)
731 else O_STR(opt, "version", version)
732 else O_STR(opt, "target-fetch-policy", target_fetch_policy)
733 else O_YNO(opt, "harden-short-bufsize", harden_short_bufsize)
734 else O_YNO(opt, "harden-large-queries", harden_large_queries)
735 else O_YNO(opt, "harden-glue", harden_glue)
736 else O_YNO(opt, "harden-dnssec-stripped", harden_dnssec_stripped)
737 else O_YNO(opt, "harden-below-nxdomain", harden_below_nxdomain)

--- 4 unchanged lines hidden (view full) ---

742 else O_DEC(opt, "unwanted-reply-threshold", unwanted_threshold)
743 else O_YNO(opt, "do-not-query-localhost", donotquery_localhost)
744 else O_STR(opt, "module-config", module_conf)
745 else O_STR(opt, "dlv-anchor-file", dlv_anchor_file)
746 else O_DEC(opt, "val-bogus-ttl", bogus_ttl)
747 else O_YNO(opt, "val-clean-additional", val_clean_additional)
748 else O_DEC(opt, "val-log-level", val_log_level)
749 else O_YNO(opt, "val-permissive-mode", val_permissive_mode)
955 else O_STR(opt, "identity", identity)
956 else O_STR(opt, "version", version)
957 else O_STR(opt, "target-fetch-policy", target_fetch_policy)
958 else O_YNO(opt, "harden-short-bufsize", harden_short_bufsize)
959 else O_YNO(opt, "harden-large-queries", harden_large_queries)
960 else O_YNO(opt, "harden-glue", harden_glue)
961 else O_YNO(opt, "harden-dnssec-stripped", harden_dnssec_stripped)
962 else O_YNO(opt, "harden-below-nxdomain", harden_below_nxdomain)

--- 4 unchanged lines hidden (view full) ---

967 else O_DEC(opt, "unwanted-reply-threshold", unwanted_threshold)
968 else O_YNO(opt, "do-not-query-localhost", donotquery_localhost)
969 else O_STR(opt, "module-config", module_conf)
970 else O_STR(opt, "dlv-anchor-file", dlv_anchor_file)
971 else O_DEC(opt, "val-bogus-ttl", bogus_ttl)
972 else O_YNO(opt, "val-clean-additional", val_clean_additional)
973 else O_DEC(opt, "val-log-level", val_log_level)
974 else O_YNO(opt, "val-permissive-mode", val_permissive_mode)
975 else O_YNO(opt, "aggressive-nsec", aggressive_nsec)
750 else O_YNO(opt, "ignore-cd-flag", ignore_cd)
976 else O_YNO(opt, "ignore-cd-flag", ignore_cd)
977 else O_YNO(opt, "serve-expired", serve_expired)
978 else O_DEC(opt, "serve-expired-ttl", serve_expired_ttl)
979 else O_YNO(opt, "serve-expired-ttl-reset", serve_expired_ttl_reset)
751 else O_STR(opt, "val-nsec3-keysize-iterations",val_nsec3_key_iterations)
752 else O_UNS(opt, "add-holddown", add_holddown)
753 else O_UNS(opt, "del-holddown", del_holddown)
754 else O_UNS(opt, "keep-missing", keep_missing)
755 else O_YNO(opt, "permit-small-holddown", permit_small_holddown)
756 else O_MEM(opt, "key-cache-size", key_cache_size)
757 else O_DEC(opt, "key-cache-slabs", key_cache_slabs)
758 else O_MEM(opt, "neg-cache-size", neg_cache_size)
759 else O_YNO(opt, "control-enable", remote_control_enable)
760 else O_DEC(opt, "control-port", control_port)
761 else O_STR(opt, "server-key-file", server_key_file)
762 else O_STR(opt, "server-cert-file", server_cert_file)
763 else O_STR(opt, "control-key-file", control_key_file)
764 else O_STR(opt, "control-cert-file", control_cert_file)
765 else O_LST(opt, "root-hints", root_hints)
766 else O_LS2(opt, "access-control", acls)
980 else O_STR(opt, "val-nsec3-keysize-iterations",val_nsec3_key_iterations)
981 else O_UNS(opt, "add-holddown", add_holddown)
982 else O_UNS(opt, "del-holddown", del_holddown)
983 else O_UNS(opt, "keep-missing", keep_missing)
984 else O_YNO(opt, "permit-small-holddown", permit_small_holddown)
985 else O_MEM(opt, "key-cache-size", key_cache_size)
986 else O_DEC(opt, "key-cache-slabs", key_cache_slabs)
987 else O_MEM(opt, "neg-cache-size", neg_cache_size)
988 else O_YNO(opt, "control-enable", remote_control_enable)
989 else O_DEC(opt, "control-port", control_port)
990 else O_STR(opt, "server-key-file", server_key_file)
991 else O_STR(opt, "server-cert-file", server_cert_file)
992 else O_STR(opt, "control-key-file", control_key_file)
993 else O_STR(opt, "control-cert-file", control_cert_file)
994 else O_LST(opt, "root-hints", root_hints)
995 else O_LS2(opt, "access-control", acls)
996 else O_LS2(opt, "tcp-connection-limit", tcp_connection_limits)
767 else O_LST(opt, "do-not-query-address", donotqueryaddrs)
768 else O_LST(opt, "private-address", private_address)
769 else O_LST(opt, "private-domain", private_domain)
770 else O_LST(opt, "auto-trust-anchor-file", auto_trust_anchor_file_list)
771 else O_LST(opt, "trust-anchor-file", trust_anchor_file_list)
772 else O_LST(opt, "trust-anchor", trust_anchor_list)
773 else O_LST(opt, "trusted-keys-file", trusted_keys_file_list)
997 else O_LST(opt, "do-not-query-address", donotqueryaddrs)
998 else O_LST(opt, "private-address", private_address)
999 else O_LST(opt, "private-domain", private_domain)
1000 else O_LST(opt, "auto-trust-anchor-file", auto_trust_anchor_file_list)
1001 else O_LST(opt, "trust-anchor-file", trust_anchor_file_list)
1002 else O_LST(opt, "trust-anchor", trust_anchor_list)
1003 else O_LST(opt, "trusted-keys-file", trusted_keys_file_list)
1004 else O_YNO(opt, "trust-anchor-signaling", trust_anchor_signaling)
1005 else O_YNO(opt, "root-key-sentinel", root_key_sentinel)
774 else O_LST(opt, "dlv-anchor", dlv_anchor_list)
1006 else O_LST(opt, "dlv-anchor", dlv_anchor_list)
775 else O_LST(opt, "control-interface", control_ifs)
1007 else O_LST(opt, "control-interface", control_ifs.first)
776 else O_LST(opt, "domain-insecure", domain_insecure)
777 else O_UNS(opt, "val-override-date", val_date_override)
778 else O_YNO(opt, "minimal-responses", minimal_responses)
779 else O_YNO(opt, "rrset-roundrobin", rrset_roundrobin)
1008 else O_LST(opt, "domain-insecure", domain_insecure)
1009 else O_UNS(opt, "val-override-date", val_date_override)
1010 else O_YNO(opt, "minimal-responses", minimal_responses)
1011 else O_YNO(opt, "rrset-roundrobin", rrset_roundrobin)
1012 else O_DEC(opt, "unknown-server-time-limit", unknown_server_time_limit)
1013#ifdef CLIENT_SUBNET
1014 else O_LST(opt, "send-client-subnet", client_subnet)
1015 else O_LST(opt, "client-subnet-zone", client_subnet_zone)
1016 else O_DEC(opt, "max-client-subnet-ipv4", max_client_subnet_ipv4)
1017 else O_DEC(opt, "max-client-subnet-ipv6", max_client_subnet_ipv6)
1018 else O_DEC(opt, "min-client-subnet-ipv4", min_client_subnet_ipv4)
1019 else O_DEC(opt, "min-client-subnet-ipv6", min_client_subnet_ipv6)
1020 else O_DEC(opt, "max-ecs-tree-size-ipv4", max_ecs_tree_size_ipv4)
1021 else O_DEC(opt, "max-ecs-tree-size-ipv6", max_ecs_tree_size_ipv6)
1022 else O_YNO(opt, "client-subnet-always-forward:",
1023 client_subnet_always_forward)
1024#endif
1025#ifdef USE_DNSTAP
1026 else O_YNO(opt, "dnstap-enable", dnstap)
1027 else O_STR(opt, "dnstap-socket-path", dnstap_socket_path)
1028 else O_YNO(opt, "dnstap-send-identity", dnstap_send_identity)
1029 else O_YNO(opt, "dnstap-send-version", dnstap_send_version)
1030 else O_STR(opt, "dnstap-identity", dnstap_identity)
1031 else O_STR(opt, "dnstap-version", dnstap_version)
1032 else O_YNO(opt, "dnstap-log-resolver-query-messages",
1033 dnstap_log_resolver_query_messages)
1034 else O_YNO(opt, "dnstap-log-resolver-response-messages",
1035 dnstap_log_resolver_response_messages)
1036 else O_YNO(opt, "dnstap-log-client-query-messages",
1037 dnstap_log_client_query_messages)
1038 else O_YNO(opt, "dnstap-log-client-response-messages",
1039 dnstap_log_client_response_messages)
1040 else O_YNO(opt, "dnstap-log-forwarder-query-messages",
1041 dnstap_log_forwarder_query_messages)
1042 else O_YNO(opt, "dnstap-log-forwarder-response-messages",
1043 dnstap_log_forwarder_response_messages)
1044#endif
1045#ifdef USE_DNSCRYPT
1046 else O_YNO(opt, "dnscrypt-enable", dnscrypt)
1047 else O_DEC(opt, "dnscrypt-port", dnscrypt_port)
1048 else O_STR(opt, "dnscrypt-provider", dnscrypt_provider)
1049 else O_LST(opt, "dnscrypt-provider-cert", dnscrypt_provider_cert)
1050 else O_LST(opt, "dnscrypt-provider-cert-rotated", dnscrypt_provider_cert_rotated)
1051 else O_LST(opt, "dnscrypt-secret-key", dnscrypt_secret_key)
1052 else O_MEM(opt, "dnscrypt-shared-secret-cache-size",
1053 dnscrypt_shared_secret_cache_size)
1054 else O_DEC(opt, "dnscrypt-shared-secret-cache-slabs",
1055 dnscrypt_shared_secret_cache_slabs)
1056 else O_MEM(opt, "dnscrypt-nonce-cache-size",
1057 dnscrypt_nonce_cache_size)
1058 else O_DEC(opt, "dnscrypt-nonce-cache-slabs",
1059 dnscrypt_nonce_cache_slabs)
1060#endif
780 else O_YNO(opt, "unblock-lan-zones", unblock_lan_zones)
781 else O_YNO(opt, "insecure-lan-zones", insecure_lan_zones)
782 else O_DEC(opt, "max-udp-size", max_udp_size)
1061 else O_YNO(opt, "unblock-lan-zones", unblock_lan_zones)
1062 else O_YNO(opt, "insecure-lan-zones", insecure_lan_zones)
1063 else O_DEC(opt, "max-udp-size", max_udp_size)
783 else O_STR(opt, "python-script", python_script)
1064 else O_LST(opt, "python-script", python_script)
784 else O_YNO(opt, "disable-dnssec-lame-check", disable_dnssec_lame_check)
1065 else O_YNO(opt, "disable-dnssec-lame-check", disable_dnssec_lame_check)
1066 else O_DEC(opt, "ip-ratelimit", ip_ratelimit)
785 else O_DEC(opt, "ratelimit", ratelimit)
1067 else O_DEC(opt, "ratelimit", ratelimit)
1068 else O_MEM(opt, "ip-ratelimit-size", ip_ratelimit_size)
786 else O_MEM(opt, "ratelimit-size", ratelimit_size)
1069 else O_MEM(opt, "ratelimit-size", ratelimit_size)
1070 else O_DEC(opt, "ip-ratelimit-slabs", ip_ratelimit_slabs)
787 else O_DEC(opt, "ratelimit-slabs", ratelimit_slabs)
788 else O_LS2(opt, "ratelimit-for-domain", ratelimit_for_domain)
789 else O_LS2(opt, "ratelimit-below-domain", ratelimit_below_domain)
1071 else O_DEC(opt, "ratelimit-slabs", ratelimit_slabs)
1072 else O_LS2(opt, "ratelimit-for-domain", ratelimit_for_domain)
1073 else O_LS2(opt, "ratelimit-below-domain", ratelimit_below_domain)
1074 else O_DEC(opt, "ip-ratelimit-factor", ip_ratelimit_factor)
790 else O_DEC(opt, "ratelimit-factor", ratelimit_factor)
1075 else O_DEC(opt, "ratelimit-factor", ratelimit_factor)
1076 else O_DEC(opt, "fast-server-num", fast_server_num)
1077 else O_DEC(opt, "fast-server-permil", fast_server_permil)
791 else O_DEC(opt, "val-sig-skew-min", val_sig_skew_min)
792 else O_DEC(opt, "val-sig-skew-max", val_sig_skew_max)
793 else O_YNO(opt, "qname-minimisation", qname_minimisation)
1078 else O_DEC(opt, "val-sig-skew-min", val_sig_skew_min)
1079 else O_DEC(opt, "val-sig-skew-max", val_sig_skew_max)
1080 else O_YNO(opt, "qname-minimisation", qname_minimisation)
1081 else O_YNO(opt, "qname-minimisation-strict", qname_minimisation_strict)
794 else O_IFC(opt, "define-tag", num_tags, tagname)
795 else O_LTG(opt, "local-zone-tag", local_zone_tags)
796 else O_LTG(opt, "access-control-tag", acl_tags)
1082 else O_IFC(opt, "define-tag", num_tags, tagname)
1083 else O_LTG(opt, "local-zone-tag", local_zone_tags)
1084 else O_LTG(opt, "access-control-tag", acl_tags)
1085 else O_LTG(opt, "response-ip-tag", respip_tags)
797 else O_LS3(opt, "local-zone-override", local_zone_overrides)
798 else O_LS3(opt, "access-control-tag-action", acl_tag_actions)
799 else O_LS3(opt, "access-control-tag-data", acl_tag_datas)
1086 else O_LS3(opt, "local-zone-override", local_zone_overrides)
1087 else O_LS3(opt, "access-control-tag-action", acl_tag_actions)
1088 else O_LS3(opt, "access-control-tag-data", acl_tag_datas)
1089 else O_LS2(opt, "access-control-view", acl_view)
1090#ifdef USE_IPSECMOD
1091 else O_YNO(opt, "ipsecmod-enabled", ipsecmod_enabled)
1092 else O_YNO(opt, "ipsecmod-ignore-bogus", ipsecmod_ignore_bogus)
1093 else O_STR(opt, "ipsecmod-hook", ipsecmod_hook)
1094 else O_DEC(opt, "ipsecmod-max-ttl", ipsecmod_max_ttl)
1095 else O_LST(opt, "ipsecmod-whitelist", ipsecmod_whitelist)
1096 else O_YNO(opt, "ipsecmod-strict", ipsecmod_strict)
1097#endif
1098#ifdef USE_CACHEDB
1099 else O_STR(opt, "backend", cachedb_backend)
1100 else O_STR(opt, "secret-seed", cachedb_secret)
1101#endif
1102#ifdef USE_IPSET
1103 else O_STR(opt, "name-v4", ipset_name_v4)
1104 else O_STR(opt, "name-v6", ipset_name_v6)
1105#endif
800 /* not here:
801 * outgoing-permit, outgoing-avoid - have list of ports
802 * local-zone - zones and nodefault variables
803 * local-data - see below
804 * local-data-ptr - converted to local-data entries
805 * stub-zone, name, stub-addr, stub-host, stub-prime
806 * forward-zone, name, forward-addr, forward-host
807 */

--- 88 unchanged lines hidden (view full) ---

896 log_err("Could not open %s: %s", fname, strerror(errno));
897 return 0;
898 }
899 create_cfg_parser(cfg, fname, chroot);
900 ub_c_in = in;
901 ub_c_parse();
902 fclose(in);
903
1106 /* not here:
1107 * outgoing-permit, outgoing-avoid - have list of ports
1108 * local-zone - zones and nodefault variables
1109 * local-data - see below
1110 * local-data-ptr - converted to local-data entries
1111 * stub-zone, name, stub-addr, stub-host, stub-prime
1112 * forward-zone, name, forward-addr, forward-host
1113 */

--- 88 unchanged lines hidden (view full) ---

1202 log_err("Could not open %s: %s", fname, strerror(errno));
1203 return 0;
1204 }
1205 create_cfg_parser(cfg, fname, chroot);
1206 ub_c_in = in;
1207 ub_c_parse();
1208 fclose(in);
1209
1210 if(!cfg->dnscrypt) cfg->dnscrypt_port = 0;
1211
904 if(cfg_parser->errors != 0) {
905 fprintf(stderr, "read %s failed: %d errors in configuration file\n",
906 fname, cfg_parser->errors);
907 errno=EINVAL;
908 return 0;
909 }
910
911 return 1;

--- 46 unchanged lines hidden (view full) ---

958 free(p->str2);
959 free(p->str3);
960 free(p);
961 p = np;
962 }
963}
964
965void
1212 if(cfg_parser->errors != 0) {
1213 fprintf(stderr, "read %s failed: %d errors in configuration file\n",
1214 fname, cfg_parser->errors);
1215 errno=EINVAL;
1216 return 0;
1217 }
1218
1219 return 1;

--- 46 unchanged lines hidden (view full) ---

1266 free(p->str2);
1267 free(p->str3);
1268 free(p);
1269 p = np;
1270 }
1271}
1272
1273void
1274config_delauth(struct config_auth* p)
1275{
1276 if(!p) return;
1277 free(p->name);
1278 config_delstrlist(p->masters);
1279 config_delstrlist(p->urls);
1280 config_delstrlist(p->allow_notify);
1281 free(p->zonefile);
1282 free(p);
1283}
1284
1285void
1286config_delauths(struct config_auth* p)
1287{
1288 struct config_auth* np;
1289 while(p) {
1290 np = p->next;
1291 config_delauth(p);
1292 p = np;
1293 }
1294}
1295
1296void
966config_delstub(struct config_stub* p)
967{
968 if(!p) return;
969 free(p->name);
970 config_delstrlist(p->hosts);
971 config_delstrlist(p->addrs);
972 free(p);
973}

--- 4 unchanged lines hidden (view full) ---

978 struct config_stub* np;
979 while(p) {
980 np = p->next;
981 config_delstub(p);
982 p = np;
983 }
984}
985
1297config_delstub(struct config_stub* p)
1298{
1299 if(!p) return;
1300 free(p->name);
1301 config_delstrlist(p->hosts);
1302 config_delstrlist(p->addrs);
1303 free(p);
1304}

--- 4 unchanged lines hidden (view full) ---

1309 struct config_stub* np;
1310 while(p) {
1311 np = p->next;
1312 config_delstub(p);
1313 p = np;
1314 }
1315}
1316
1317void
1318config_delview(struct config_view* p)
1319{
1320 if(!p) return;
1321 free(p->name);
1322 config_deldblstrlist(p->local_zones);
1323 config_delstrlist(p->local_zones_nodefault);
1324#ifdef USE_IPSET
1325 config_delstrlist(p->local_zones_ipset);
1326#endif
1327 config_delstrlist(p->local_data);
1328 free(p);
1329}
1330
1331void
1332config_delviews(struct config_view* p)
1333{
1334 struct config_view* np;
1335 while(p) {
1336 np = p->next;
1337 config_delview(p);
1338 p = np;
1339 }
1340}
986/** delete string array */
987static void
988config_del_strarray(char** array, int num)
989{
990 int i;
991 if(!array)
992 return;
993 for(i=0; i<num; i++) {

--- 22 unchanged lines hidden (view full) ---

1016 free(cfg->username);
1017 free(cfg->chrootdir);
1018 free(cfg->directory);
1019 free(cfg->logfile);
1020 free(cfg->pidfile);
1021 free(cfg->target_fetch_policy);
1022 free(cfg->ssl_service_key);
1023 free(cfg->ssl_service_pem);
1341/** delete string array */
1342static void
1343config_del_strarray(char** array, int num)
1344{
1345 int i;
1346 if(!array)
1347 return;
1348 for(i=0; i<num; i++) {

--- 22 unchanged lines hidden (view full) ---

1371 free(cfg->username);
1372 free(cfg->chrootdir);
1373 free(cfg->directory);
1374 free(cfg->logfile);
1375 free(cfg->pidfile);
1376 free(cfg->target_fetch_policy);
1377 free(cfg->ssl_service_key);
1378 free(cfg->ssl_service_pem);
1379 free(cfg->tls_cert_bundle);
1380 config_delstrlist(cfg->tls_additional_port);
1381 config_delstrlist(cfg->tls_session_ticket_keys.first);
1382 free(cfg->tls_ciphers);
1383 free(cfg->tls_ciphersuites);
1384 free(cfg->log_identity);
1024 config_del_strarray(cfg->ifs, cfg->num_ifs);
1025 config_del_strarray(cfg->out_ifs, cfg->num_out_ifs);
1026 config_delstubs(cfg->stubs);
1027 config_delstubs(cfg->forwards);
1385 config_del_strarray(cfg->ifs, cfg->num_ifs);
1386 config_del_strarray(cfg->out_ifs, cfg->num_out_ifs);
1387 config_delstubs(cfg->stubs);
1388 config_delstubs(cfg->forwards);
1389 config_delauths(cfg->auths);
1390 config_delviews(cfg->views);
1028 config_delstrlist(cfg->donotqueryaddrs);
1029 config_delstrlist(cfg->root_hints);
1391 config_delstrlist(cfg->donotqueryaddrs);
1392 config_delstrlist(cfg->root_hints);
1393#ifdef CLIENT_SUBNET
1394 config_delstrlist(cfg->client_subnet);
1395 config_delstrlist(cfg->client_subnet_zone);
1396#endif
1030 free(cfg->identity);
1031 free(cfg->version);
1032 free(cfg->module_conf);
1033 free(cfg->outgoing_avail_ports);
1034 config_delstrlist(cfg->caps_whitelist);
1035 config_delstrlist(cfg->private_address);
1036 config_delstrlist(cfg->private_domain);
1037 config_delstrlist(cfg->auto_trust_anchor_file_list);
1038 config_delstrlist(cfg->trust_anchor_file_list);
1039 config_delstrlist(cfg->trusted_keys_file_list);
1040 config_delstrlist(cfg->trust_anchor_list);
1041 config_delstrlist(cfg->domain_insecure);
1042 free(cfg->dlv_anchor_file);
1043 config_delstrlist(cfg->dlv_anchor_list);
1044 config_deldblstrlist(cfg->acls);
1397 free(cfg->identity);
1398 free(cfg->version);
1399 free(cfg->module_conf);
1400 free(cfg->outgoing_avail_ports);
1401 config_delstrlist(cfg->caps_whitelist);
1402 config_delstrlist(cfg->private_address);
1403 config_delstrlist(cfg->private_domain);
1404 config_delstrlist(cfg->auto_trust_anchor_file_list);
1405 config_delstrlist(cfg->trust_anchor_file_list);
1406 config_delstrlist(cfg->trusted_keys_file_list);
1407 config_delstrlist(cfg->trust_anchor_list);
1408 config_delstrlist(cfg->domain_insecure);
1409 free(cfg->dlv_anchor_file);
1410 config_delstrlist(cfg->dlv_anchor_list);
1411 config_deldblstrlist(cfg->acls);
1412 config_deldblstrlist(cfg->tcp_connection_limits);
1045 free(cfg->val_nsec3_key_iterations);
1046 config_deldblstrlist(cfg->local_zones);
1047 config_delstrlist(cfg->local_zones_nodefault);
1413 free(cfg->val_nsec3_key_iterations);
1414 config_deldblstrlist(cfg->local_zones);
1415 config_delstrlist(cfg->local_zones_nodefault);
1416#ifdef USE_IPSET
1417 config_delstrlist(cfg->local_zones_ipset);
1418#endif
1048 config_delstrlist(cfg->local_data);
1049 config_deltrplstrlist(cfg->local_zone_overrides);
1050 config_del_strarray(cfg->tagname, cfg->num_tags);
1051 config_del_strbytelist(cfg->local_zone_tags);
1052 config_del_strbytelist(cfg->acl_tags);
1419 config_delstrlist(cfg->local_data);
1420 config_deltrplstrlist(cfg->local_zone_overrides);
1421 config_del_strarray(cfg->tagname, cfg->num_tags);
1422 config_del_strbytelist(cfg->local_zone_tags);
1423 config_del_strbytelist(cfg->acl_tags);
1424 config_del_strbytelist(cfg->respip_tags);
1053 config_deltrplstrlist(cfg->acl_tag_actions);
1054 config_deltrplstrlist(cfg->acl_tag_datas);
1425 config_deltrplstrlist(cfg->acl_tag_actions);
1426 config_deltrplstrlist(cfg->acl_tag_datas);
1055 config_delstrlist(cfg->control_ifs);
1427 config_delstrlist(cfg->control_ifs.first);
1056 free(cfg->server_key_file);
1057 free(cfg->server_cert_file);
1058 free(cfg->control_key_file);
1059 free(cfg->control_cert_file);
1060 free(cfg->dns64_prefix);
1428 free(cfg->server_key_file);
1429 free(cfg->server_cert_file);
1430 free(cfg->control_key_file);
1431 free(cfg->control_cert_file);
1432 free(cfg->dns64_prefix);
1433 config_delstrlist(cfg->dns64_ignore_aaaa);
1061 free(cfg->dnstap_socket_path);
1062 free(cfg->dnstap_identity);
1063 free(cfg->dnstap_version);
1064 config_deldblstrlist(cfg->ratelimit_for_domain);
1065 config_deldblstrlist(cfg->ratelimit_below_domain);
1434 free(cfg->dnstap_socket_path);
1435 free(cfg->dnstap_identity);
1436 free(cfg->dnstap_version);
1437 config_deldblstrlist(cfg->ratelimit_for_domain);
1438 config_deldblstrlist(cfg->ratelimit_below_domain);
1439 config_delstrlist(cfg->python_script);
1440#ifdef USE_IPSECMOD
1441 free(cfg->ipsecmod_hook);
1442 config_delstrlist(cfg->ipsecmod_whitelist);
1443#endif
1444#ifdef USE_CACHEDB
1445 free(cfg->cachedb_backend);
1446 free(cfg->cachedb_secret);
1447#endif
1448#ifdef USE_IPSET
1449 free(cfg->ipset_name_v4);
1450 free(cfg->ipset_name_v6);
1451#endif
1066 free(cfg);
1067}
1068
1069static void
1070init_outgoing_availports(int* a, int num)
1071{
1072 /* generated with make iana_update */
1073 const int iana_assigned[] = {

--- 115 unchanged lines hidden (view full) ---

1189int ub_c_wrap(void)
1190{
1191 return 1;
1192}
1193
1194int cfg_strlist_append(struct config_strlist_head* list, char* item)
1195{
1196 struct config_strlist *s;
1452 free(cfg);
1453}
1454
1455static void
1456init_outgoing_availports(int* a, int num)
1457{
1458 /* generated with make iana_update */
1459 const int iana_assigned[] = {

--- 115 unchanged lines hidden (view full) ---

1575int ub_c_wrap(void)
1576{
1577 return 1;
1578}
1579
1580int cfg_strlist_append(struct config_strlist_head* list, char* item)
1581{
1582 struct config_strlist *s;
1197 if(!item || !list)
1583 if(!item || !list) {
1584 free(item);
1198 return 0;
1585 return 0;
1586 }
1199 s = (struct config_strlist*)calloc(1, sizeof(struct config_strlist));
1587 s = (struct config_strlist*)calloc(1, sizeof(struct config_strlist));
1200 if(!s)
1588 if(!s) {
1589 free(item);
1201 return 0;
1590 return 0;
1591 }
1202 s->str = item;
1203 s->next = NULL;
1204 if(list->last)
1205 list->last->next = s;
1206 else
1207 list->first = s;
1208 list->last = s;
1209 return 1;

--- 11 unchanged lines hidden (view full) ---

1221 if(!s)
1222 return 0;
1223 s->str = item;
1224 s->next = *head;
1225 *head = s;
1226 return 1;
1227}
1228
1592 s->str = item;
1593 s->next = NULL;
1594 if(list->last)
1595 list->last->next = s;
1596 else
1597 list->first = s;
1598 list->last = s;
1599 return 1;

--- 11 unchanged lines hidden (view full) ---

1611 if(!s)
1612 return 0;
1613 s->str = item;
1614 s->next = *head;
1615 *head = s;
1616 return 1;
1617}
1618
1619struct config_strlist*
1620cfg_strlist_find(struct config_strlist* head, const char *item)
1621{
1622 struct config_strlist *s = head;
1623 if(!head){
1624 return NULL;
1625 }
1626 while(s) {
1627 if(strcmp(s->str, item) == 0) {
1628 return s;
1629 }
1630 s = s->next;
1631 }
1632 return NULL;
1633}
1634
1229int
1230cfg_strlist_insert(struct config_strlist** head, char* item)
1231{
1232 struct config_strlist *s;
1635int
1636cfg_strlist_insert(struct config_strlist** head, char* item)
1637{
1638 struct config_strlist *s;
1233 if(!item || !head)
1639 if(!item || !head) {
1640 free(item);
1234 return 0;
1641 return 0;
1642 }
1235 s = (struct config_strlist*)calloc(1, sizeof(struct config_strlist));
1643 s = (struct config_strlist*)calloc(1, sizeof(struct config_strlist));
1236 if(!s)
1644 if(!s) {
1645 free(item);
1237 return 0;
1646 return 0;
1647 }
1238 s->str = item;
1239 s->next = *head;
1240 *head = s;
1241 return 1;
1242}
1243
1648 s->str = item;
1649 s->next = *head;
1650 *head = s;
1651 return 1;
1652}
1653
1654int
1655cfg_strlist_append_ex(struct config_strlist** head, char* item)
1656{
1657 struct config_strlist *s;
1658 if(!item || !head)
1659 return 0;
1660 s = (struct config_strlist*)calloc(1, sizeof(struct config_strlist));
1661 if(!s)
1662 return 0;
1663 s->str = item;
1664 s->next = NULL;
1665
1666 if (*head==NULL) {
1667 *head = s;
1668 } else {
1669 struct config_strlist *last = *head;
1670 while (last->next!=NULL) {
1671 last = last->next;
1672 }
1673 last->next = s;
1674 }
1675
1676 return 1;
1677}
1678
1244int
1245cfg_str2list_insert(struct config_str2list** head, char* item, char* i2)
1246{
1247 struct config_str2list *s;
1679int
1680cfg_str2list_insert(struct config_str2list** head, char* item, char* i2)
1681{
1682 struct config_str2list *s;
1248 if(!item || !i2 || !head)
1683 if(!item || !i2 || !head) {
1684 free(item);
1685 free(i2);
1249 return 0;
1686 return 0;
1687 }
1250 s = (struct config_str2list*)calloc(1, sizeof(struct config_str2list));
1688 s = (struct config_str2list*)calloc(1, sizeof(struct config_str2list));
1251 if(!s)
1689 if(!s) {
1690 free(item);
1691 free(i2);
1252 return 0;
1692 return 0;
1693 }
1253 s->str = item;
1254 s->str2 = i2;
1255 s->next = *head;
1256 *head = s;
1257 return 1;
1258}
1259
1260int

--- 253 unchanged lines hidden (view full) ---

1514 return 0;
1515}
1516
1517void
1518config_apply(struct config_file* config)
1519{
1520 MAX_TTL = (time_t)config->max_ttl;
1521 MIN_TTL = (time_t)config->min_ttl;
1694 s->str = item;
1695 s->str2 = i2;
1696 s->next = *head;
1697 *head = s;
1698 return 1;
1699}
1700
1701int

--- 253 unchanged lines hidden (view full) ---

1955 return 0;
1956}
1957
1958void
1959config_apply(struct config_file* config)
1960{
1961 MAX_TTL = (time_t)config->max_ttl;
1962 MIN_TTL = (time_t)config->min_ttl;
1963 SERVE_EXPIRED_TTL = (time_t)config->serve_expired_ttl;
1522 MAX_NEG_TTL = (time_t)config->max_negative_ttl;
1523 RTT_MIN_TIMEOUT = config->infra_cache_min_rtt;
1524 EDNS_ADVERTISED_SIZE = (uint16_t)config->edns_buffer_size;
1525 MINIMAL_RESPONSES = config->minimal_responses;
1526 RRSET_ROUNDROBIN = config->rrset_roundrobin;
1964 MAX_NEG_TTL = (time_t)config->max_negative_ttl;
1965 RTT_MIN_TIMEOUT = config->infra_cache_min_rtt;
1966 EDNS_ADVERTISED_SIZE = (uint16_t)config->edns_buffer_size;
1967 MINIMAL_RESPONSES = config->minimal_responses;
1968 RRSET_ROUNDROBIN = config->rrset_roundrobin;
1969 LOG_TAG_QUERYREPLY = config->log_tag_queryreply;
1970 UNKNOWN_SERVER_NICENESS = config->unknown_server_time_limit;
1527 log_set_time_asc(config->log_time_ascii);
1528 autr_permit_small_holddown = config->permit_small_holddown;
1971 log_set_time_asc(config->log_time_ascii);
1972 autr_permit_small_holddown = config->permit_small_holddown;
1973 stream_wait_max = config->stream_wait_size;
1529}
1530
1531void config_lookup_uid(struct config_file* cfg)
1532{
1533#ifdef HAVE_GETPWNAM
1534 /* translate username into uid and gid */
1535 if(cfg->username && cfg->username[0]) {
1536 struct passwd *pwd;

--- 166 unchanged lines hidden (view full) ---

1703 if(!type || !*type) {
1704 log_err("syntax error: expected zone type: %s", val);
1705 return 0;
1706 }
1707
1708 if(strcmp(type, "nodefault")==0) {
1709 return cfg_strlist_insert(&cfg->local_zones_nodefault,
1710 strdup(name));
1974}
1975
1976void config_lookup_uid(struct config_file* cfg)
1977{
1978#ifdef HAVE_GETPWNAM
1979 /* translate username into uid and gid */
1980 if(cfg->username && cfg->username[0]) {
1981 struct passwd *pwd;

--- 166 unchanged lines hidden (view full) ---

2148 if(!type || !*type) {
2149 log_err("syntax error: expected zone type: %s", val);
2150 return 0;
2151 }
2152
2153 if(strcmp(type, "nodefault")==0) {
2154 return cfg_strlist_insert(&cfg->local_zones_nodefault,
2155 strdup(name));
2156#ifdef USE_IPSET
2157 } else if(strcmp(type, "ipset")==0) {
2158 return cfg_strlist_insert(&cfg->local_zones_ipset,
2159 strdup(name));
2160#endif
1711 } else {
1712 return cfg_str2list_insert(&cfg->local_zones, strdup(buf),
1713 strdup(type));
1714 }
1715}
1716
1717char* cfg_ptr_reverse(char* str)
1718{

--- 133 unchanged lines hidden (view full) ---

1852 }
1853 }
1854}
1855#endif /* UB_ON_WINDOWS */
1856
1857void errinf(struct module_qstate* qstate, const char* str)
1858{
1859 struct config_strlist* p;
2161 } else {
2162 return cfg_str2list_insert(&cfg->local_zones, strdup(buf),
2163 strdup(type));
2164 }
2165}
2166
2167char* cfg_ptr_reverse(char* str)
2168{

--- 133 unchanged lines hidden (view full) ---

2302 }
2303 }
2304}
2305#endif /* UB_ON_WINDOWS */
2306
2307void errinf(struct module_qstate* qstate, const char* str)
2308{
2309 struct config_strlist* p;
1860 if(qstate->env->cfg->val_log_level < 2 || !str)
2310 if((qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail) || !str)
1861 return;
1862 p = (struct config_strlist*)regional_alloc(qstate->region, sizeof(*p));
1863 if(!p) {
1864 log_err("malloc failure in validator-error-info string");
1865 return;
1866 }
1867 p->next = NULL;
1868 p->str = regional_strdup(qstate->region, str);

--- 8 unchanged lines hidden (view full) ---

1877 q = q->next;
1878 q->next = p;
1879 } else qstate->errinf = p;
1880}
1881
1882void errinf_origin(struct module_qstate* qstate, struct sock_list *origin)
1883{
1884 struct sock_list* p;
2311 return;
2312 p = (struct config_strlist*)regional_alloc(qstate->region, sizeof(*p));
2313 if(!p) {
2314 log_err("malloc failure in validator-error-info string");
2315 return;
2316 }
2317 p->next = NULL;
2318 p->str = regional_strdup(qstate->region, str);

--- 8 unchanged lines hidden (view full) ---

2327 q = q->next;
2328 q->next = p;
2329 } else qstate->errinf = p;
2330}
2331
2332void errinf_origin(struct module_qstate* qstate, struct sock_list *origin)
2333{
2334 struct sock_list* p;
1885 if(qstate->env->cfg->val_log_level < 2)
2335 if(qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail)
1886 return;
1887 for(p=origin; p; p=p->next) {
1888 char buf[256];
1889 if(p == origin)
1890 snprintf(buf, sizeof(buf), "from ");
1891 else snprintf(buf, sizeof(buf), "and ");
1892 if(p->len == 0)
1893 snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf),
1894 "cache");
1895 else
1896 addr_to_str(&p->addr, p->len, buf+strlen(buf),
1897 sizeof(buf)-strlen(buf));
1898 errinf(qstate, buf);
1899 }
1900}
1901
2336 return;
2337 for(p=origin; p; p=p->next) {
2338 char buf[256];
2339 if(p == origin)
2340 snprintf(buf, sizeof(buf), "from ");
2341 else snprintf(buf, sizeof(buf), "and ");
2342 if(p->len == 0)
2343 snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf),
2344 "cache");
2345 else
2346 addr_to_str(&p->addr, p->len, buf+strlen(buf),
2347 sizeof(buf)-strlen(buf));
2348 errinf(qstate, buf);
2349 }
2350}
2351
1902char* errinf_to_str(struct module_qstate* qstate)
2352char* errinf_to_str_bogus(struct module_qstate* qstate)
1903{
1904 char buf[20480];
1905 char* p = buf;
1906 size_t left = sizeof(buf);
1907 struct config_strlist* s;
1908 char dname[LDNS_MAX_DOMAINLEN+1];
1909 char t[16], c[16];
1910 sldns_wire2str_type_buf(qstate->qinfo.qtype, t, sizeof(t));

--- 8 unchanged lines hidden (view full) ---

1919 left -= strlen(p); p += strlen(p);
1920 }
1921 p = strdup(buf);
1922 if(!p)
1923 log_err("malloc failure in errinf_to_str");
1924 return p;
1925}
1926
2353{
2354 char buf[20480];
2355 char* p = buf;
2356 size_t left = sizeof(buf);
2357 struct config_strlist* s;
2358 char dname[LDNS_MAX_DOMAINLEN+1];
2359 char t[16], c[16];
2360 sldns_wire2str_type_buf(qstate->qinfo.qtype, t, sizeof(t));

--- 8 unchanged lines hidden (view full) ---

2369 left -= strlen(p); p += strlen(p);
2370 }
2371 p = strdup(buf);
2372 if(!p)
2373 log_err("malloc failure in errinf_to_str");
2374 return p;
2375}
2376
2377char* errinf_to_str_servfail(struct module_qstate* qstate)
2378{
2379 char buf[20480];
2380 char* p = buf;
2381 size_t left = sizeof(buf);
2382 struct config_strlist* s;
2383 char dname[LDNS_MAX_DOMAINLEN+1];
2384 char t[16], c[16];
2385 sldns_wire2str_type_buf(qstate->qinfo.qtype, t, sizeof(t));
2386 sldns_wire2str_class_buf(qstate->qinfo.qclass, c, sizeof(c));
2387 dname_str(qstate->qinfo.qname, dname);
2388 snprintf(p, left, "SERVFAIL <%s %s %s>:", dname, t, c);
2389 left -= strlen(p); p += strlen(p);
2390 if(!qstate->errinf)
2391 snprintf(p, left, " misc failure");
2392 else for(s=qstate->errinf; s; s=s->next) {
2393 snprintf(p, left, " %s", s->str);
2394 left -= strlen(p); p += strlen(p);
2395 }
2396 p = strdup(buf);
2397 if(!p)
2398 log_err("malloc failure in errinf_to_str");
2399 return p;
2400}
2401
1927void errinf_rrset(struct module_qstate* qstate, struct ub_packed_rrset_key *rr)
1928{
1929 char buf[1024];
1930 char dname[LDNS_MAX_DOMAINLEN+1];
1931 char t[16], c[16];
2402void errinf_rrset(struct module_qstate* qstate, struct ub_packed_rrset_key *rr)
2403{
2404 char buf[1024];
2405 char dname[LDNS_MAX_DOMAINLEN+1];
2406 char t[16], c[16];
1932 if(qstate->env->cfg->val_log_level < 2 || !rr)
2407 if((qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail) || !rr)
1933 return;
1934 sldns_wire2str_type_buf(ntohs(rr->rk.type), t, sizeof(t));
1935 sldns_wire2str_class_buf(ntohs(rr->rk.rrset_class), c, sizeof(c));
1936 dname_str(rr->rk.dname, dname);
1937 snprintf(buf, sizeof(buf), "for <%s %s %s>", dname, t, c);
1938 errinf(qstate, buf);
1939}
1940
1941void errinf_dname(struct module_qstate* qstate, const char* str, uint8_t* dname)
1942{
1943 char b[1024];
1944 char buf[LDNS_MAX_DOMAINLEN+1];
2408 return;
2409 sldns_wire2str_type_buf(ntohs(rr->rk.type), t, sizeof(t));
2410 sldns_wire2str_class_buf(ntohs(rr->rk.rrset_class), c, sizeof(c));
2411 dname_str(rr->rk.dname, dname);
2412 snprintf(buf, sizeof(buf), "for <%s %s %s>", dname, t, c);
2413 errinf(qstate, buf);
2414}
2415
2416void errinf_dname(struct module_qstate* qstate, const char* str, uint8_t* dname)
2417{
2418 char b[1024];
2419 char buf[LDNS_MAX_DOMAINLEN+1];
1945 if(qstate->env->cfg->val_log_level < 2 || !str || !dname)
2420 if((qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail) || !str || !dname)
1946 return;
1947 dname_str(dname, buf);
1948 snprintf(b, sizeof(b), "%s %s", str, buf);
1949 errinf(qstate, b);
1950}
2421 return;
2422 dname_str(dname, buf);
2423 snprintf(b, sizeof(b), "%s %s", str, buf);
2424 errinf(qstate, b);
2425}
2426
2427int options_remote_is_address(struct config_file* cfg)
2428{
2429 if(!cfg->remote_control_enable) return 0;
2430 if(!cfg->control_ifs.first) return 1;
2431 if(!cfg->control_ifs.first->str) return 1;
2432 if(cfg->control_ifs.first->str[0] == 0) return 1;
2433 return (cfg->control_ifs.first->str[0] != '/');
2434}
2435