unbound: util/config_file.c File Reference

unbound 0.1

Data Structures | Macros | Functions | Variables
config_file.c File Reference

This file contains functions for the config file. More...

`#include "config.h"`
`#include <ctype.h>`
`#include <stdarg.h>`
`#include <errno.h>`
`#include "util/log.h"`
`#include "util/configyyrename.h"`
`#include "util/config_file.h"`
`#include "util/configparser.h"`
`#include "util/net_help.h"`
`#include "util/data/msgparse.h"`
`#include "util/module.h"`
`#include "util/regional.h"`
`#include "util/fptr_wlist.h"`
`#include "util/data/dname.h"`
`#include "util/random.h"`
`#include "util/rtt.h"`
`#include "services/cache/infra.h"`
`#include "sldns/wire2str.h"`
`#include "sldns/parseutil.h"`
`#include "iterator/iterator.h"`
`#include "util/iana_ports.inc"`

## Data Structures
struct | config_collate_arg
| collate func arg More...

## Macros
#define | IS_NUMBER_OR_ZERO if(atoi(val) == 0 && strcmp(val, "0") != 0) return 0
| check that the value passed is >= 0
#define | IS_NONZERO_NUMBER if(atoi(val) == 0) return 0
| check that the value passed is > 0
#define | IS_POW2_NUMBER if(atoi(val) == 0 || !is_pow2((size_t)atoi(val))) return 0
| check that the value passed is not 0 and a power of 2
#define | IS_YES_OR_NO if(strcmp(val, "yes") != 0 && strcmp(val, "no") != 0) return 0
| check that the value passed is yes or no
#define | S_NUMBER_OR_ZERO(str, var)
| put integer_or_zero into variable
#define | S_NUMBER_NONZERO(str, var)
| put integer_nonzero into variable
#define | S_UNSIGNED_OR_ZERO(str, var)
| put integer_or_zero into unsigned
#define | S_SIZET_OR_ZERO(str, var)
| put integer_or_zero into size_t
#define | S_SIZET_NONZERO(str, var)
| put integer_nonzero into size_t
#define | S_YNO(str, var)
| put yesno into variable
#define | S_MEMSIZE(str, var)
| put memsize into variable
#define | S_POW2(str, var)
| put pow2 number into variable
#define | S_STR(str, var)
| put string into variable
#define | S_STRLIST(str, var)
| put string into strlist
#define | S_STRLIST_UNIQ(str, var)
| put string into strlist if not present yet
#define | S_STRLIST_APPEND(str, var)
| append string to strlist
#define | O_DEC(opt, str, var)
| compare and print decimal option
#define | O_UNS(opt, str, var)
| compare and print unsigned option
#define | O_YNO(opt, str, var)
| compare and print yesno option
#define | O_STR(opt, str, var)
| compare and print string option
#define | O_IFC(opt, str, num, arr)
| compare and print array option
#define | O_MEM(opt, str, var)
| compare and print memorysize option
#define | O_LST(opt, name, lst)
| compare and print list option
#define | O_LS2(opt, name, lst)
| compare and print list option
#define | O_LS3(opt, name, lst)
| compare and print list option
#define | O_LTG(opt, name, lst)
| compare and print taglist option

## Functions
static void | init_outgoing_availports (int *array, int num)
| init ports possible for use
static void | init_cookie_secret (uint8_t *cookie_secret, size_t cookie_secret_len)
| init cookie with random data
struct config_file * | config_create (void)
| Create config file structure.
struct config_file * | config_create_forlib (void)
| Create config file structure for library use.
int | config_set_option (struct config_file *cfg, const char *opt, const char *val)
| Set the given keyword to the given value.
void | config_print_func (char *line, void *arg)
| function to print to a file, use as func with config_get_option.
void | config_collate_func (char *line, void *arg)
| function to collate the text strings into a strlist_head.
int | config_get_option_list (struct config_file *cfg, const char *opt, struct config_strlist **list)
| Get an option and return strlist.
int | config_get_option_collate (struct config_file *cfg, const char *opt, char **str)
| Get an option and collate results into string.
char * | config_collate_cat (struct config_strlist *list)
| take a strlist_head list and return a malloc string.
int | config_get_option (struct config_file *cfg, const char *opt, void(*func)(char *, void *), void *arg)
| Call print routine for the given option.
static void | create_cfg_parser (struct config_file *cfg, char *filename, const char *chroot)
| initialize the global cfg_parser object
int | config_read (struct config_file *cfg, const char *filename, const char *chroot)
| Read the config file from the specified filename.
struct config_stub * | cfg_stub_find (struct config_stub ***pp, const char *nm)
| Find stub in config list, also returns prevptr (for deletion).
void | config_delstrlist (struct config_strlist *p)
| Delete items in config string list.
void | config_deldblstrlist (struct config_str2list *p)
| Delete items in config double string list.
void | config_deltrplstrlist (struct config_str3list *p)
| Delete items in config triple string list.
void | config_delauth (struct config_auth *p)
| Delete an auth item.
void | config_delauths (struct config_auth *p)
| Delete items in config auth list.
void | config_delstub (struct config_stub *p)
| Delete a stub item.
void | config_delstubs (struct config_stub *p)
| Delete items in config stub list.
void | config_delview (struct config_view *p)
| Delete a view item.
void | config_delviews (struct config_view *p)
| Delete items in config view list.
void | config_del_strarray (char **array, int num)
| delete string array
void | config_del_strbytelist (struct config_strbytelist *p)
| delete stringbytelist
void | config_delete (struct config_file *cfg)
| Destroy the config file structure.
static int | extract_port_from_str (const char *str, int max_port)
int | cfg_mark_ports (const char *str, int allow, int *avail, int num)
| Mark "number" or "low-high" as available or not in ports array.
int | cfg_scan_ports (int *avail, int num)
| Scan ports available.
int | cfg_condense_ports (struct config_file *cfg, int **avail)
| Get a condensed list of ports returned.
void | cfg_apply_local_port_policy (struct config_file *cfg, int num)
| Apply system specific port range policy.
static void | ub_c_error_va_list (const char *fmt, va_list args)
| print error with file and line number
void | ub_c_error_msg (const char *fmt,...)
| print error with file and line number
void | ub_c_error (const char *str)
| parsing helpers: print error with file and line numbers
int | ub_c_wrap (void)
| wrap function
int | cfg_strlist_append (struct config_strlist_head *list, char *item)
| Append text at end of list.
int | cfg_region_strlist_insert (struct regional *region, struct config_strlist **head, char *item)
| insert with region for allocation.
struct config_strlist * | cfg_strlist_find (struct config_strlist *head, const char *item)
| Find string in strlist.
int | cfg_strlist_insert (struct config_strlist **head, char *item)
| Insert string into strlist.
int | cfg_strlist_append_ex (struct config_strlist **head, char *item)
| Searches the end of a string list and appends the given text.
int | cfg_str2list_insert (struct config_str2list **head, char *item, char *i2)
| Insert string into str2list.
int | cfg_str3list_insert (struct config_str3list **head, char *item, char *i2, char *i3)
| Insert string into str3list.
int | cfg_strbytelist_insert (struct config_strbytelist **head, char *item, uint8_t *i2, size_t i2len)
| Insert string into strbytelist.
time_t | cfg_convert_timeval (const char *str)
| Convert 14digit to time value.
int | cfg_count_numbers (const char *s)
| Count number of values in the string.
static int | isalldigit (const char *str, size_t l)
| all digit number
int | cfg_parse_memsize (const char *str, size_t *res)
| Convert a 'nice' memory or file size into a bytecount From '100k' to 102400.
int | find_tag_id (struct config_file *cfg, const char *tag)
| Find tag ID in the tag list.
int | config_add_tag (struct config_file *cfg, const char *tag)
| Add a tag name to the config.
static void | cfg_set_bit (uint8_t *bitlist, size_t len, int id)
| set a bit in a bit array
uint8_t * | config_parse_taglist (struct config_file *cfg, char *str, size_t *listlen)
| parse taglist from string into bytestring with bitlist.
uint8_t * | cfg_parse_nsid (const char *str, uint16_t *nsid_len)
| Parse nsid from string into binary nsid.
char * | config_taglist2str (struct config_file *cfg, uint8_t *taglist, size_t taglen)
| convert tag bitlist to a malloced string with tag names.
int | taglist_intersect (uint8_t *list1, size_t list1len, const uint8_t *list2, size_t list2len)
| see if two taglists intersect (have tags in common).
void | config_apply (struct config_file *config)
| Apply config to global constants; this routine is called in single thread.
void | config_lookup_uid (struct config_file *cfg)
| Find username, sets cfg_uid and cfg_gid.
static size_t | strlen_after_chroot (const char *fname, struct config_file *cfg, int use_chdir)
| Calculate string length of full pathname in original filesys.
char * | fname_after_chroot (const char *fname, struct config_file *cfg, int use_chdir)
| Convert a filename to full pathname in original filesys.
static char * | next_space_pos (const char *str)
| return next space character in string
static char * | last_space_pos (const char *str)
| return last space character in string
int | cfg_parse_local_zone (struct config_file *cfg, const char *val)
| Parse local-zone directive into two strings and register it in the config.
char * | cfg_ptr_reverse (char *str)
| Convert a ptr shorthand into a full reverse-notation PTR record.
int | options_remote_is_address (struct config_file *cfg)
| check if config for remote control turns on IP-address interface with certificates or a named pipe without certificates.
int | if_is_https (const char *ifname, const char *port, int https_port)
| see if interface is https, its port number == the https port number
int | cfg_has_https (struct config_file *cfg)
| see if config contains https turned on
int | if_is_pp2 (const char *ifname, const char *port, struct config_strlist *proxy_protocol_port)
| see if interface is PROXYv2, its port number == the proxy port number
int | if_is_dnscrypt (const char *ifname, const char *port, int dnscrypt_port)
| see if interface is DNSCRYPT, its port number == the dnscrypt port number

## Variables
uid_t | cfg_uid = (uid_t)-1
| from cfg username, after daemonize setup performed
gid_t | cfg_gid = (gid_t)-1
| from cfg username, after daemonize setup performed
int | autr_permit_small_holddown = 0
| for debug allow small timeout values for fast rollovers
size_t | stream_wait_max = 4 * 1024 * 1024
| size (in bytes) of stream wait buffers max
size_t | http2_query_buffer_max = 4 * 1024 * 1024
| size (in bytes) of all total HTTP2 query buffers max
size_t | http2_response_buffer_max = 4 * 1024 * 1024
| size (in bytes) of all total HTTP2 response buffers max
struct config_parser_state * | cfg_parser = 0
| global config during parsing

## Detailed Description

This file contains functions for the config file.

## Macro Definition Documentation

## ◆ S_NUMBER_OR_ZERO

#define S_NUMBER_OR_ZERO | ( |  | str,
|  |  | var )

Value:
if(strcmp(opt, str) == 0) \
{ IS_NUMBER_OR_ZERO; cfg->var = atoi(val); }
IS_NUMBER_OR_ZERO
#define IS_NUMBER_OR_ZERO
check that the value passed is >= 0
Definition config_file.c:447

put integer_or_zero into variable

Referenced by config_set_option().

## ◆ S_NUMBER_NONZERO

#define S_NUMBER_NONZERO | ( |  | str,
|  |  | var )

Value:
if(strcmp(opt, str) == 0) \
{ IS_NONZERO_NUMBER; cfg->var = atoi(val); }
IS_NONZERO_NUMBER
#define IS_NONZERO_NUMBER
check that the value passed is > 0
Definition config_file.c:450

put integer_nonzero into variable

Referenced by config_set_option().

## ◆ S_UNSIGNED_OR_ZERO

#define S_UNSIGNED_OR_ZERO | ( |  | str,
|  |  | var )

Value:
if(strcmp(opt, str) == 0) \
{ IS_NUMBER_OR_ZERO; cfg->var = (unsigned)atoi(val); }

put integer_or_zero into unsigned

Referenced by config_set_option().

## ◆ S_SIZET_OR_ZERO

#define S_SIZET_OR_ZERO | ( |  | str,
|  |  | var )

Value:
if(strcmp(opt, str) == 0) \
{ IS_NUMBER_OR_ZERO; cfg->var = (size_t)atoi(val); }

put integer_or_zero into size_t

Referenced by config_set_option().

## ◆ S_SIZET_NONZERO

#define S_SIZET_NONZERO | ( |  | str,
|  |  | var )

Value:
if(strcmp(opt, str) == 0) \
{ IS_NONZERO_NUMBER; cfg->var = (size_t)atoi(val); }

put integer_nonzero into size_t

Referenced by config_set_option().

## ◆ S_YNO

#define S_YNO | ( |  | str,
|  |  | var )

Value:
if(strcmp(opt, str) == 0) \
{ IS_YES_OR_NO; cfg->var = (strcmp(val, "yes") == 0); }
IS_YES_OR_NO
#define IS_YES_OR_NO
check that the value passed is yes or no
Definition config_file.c:456

put yesno into variable

Referenced by config_set_option().

## ◆ S_MEMSIZE

#define S_MEMSIZE | ( |  | str,
|  |  | var )

Value:
if(strcmp(opt, str)==0) \
{ return cfg_parse_memsize(val, &cfg->var); }
cfg_parse_memsize
int cfg_parse_memsize(const char *str, size_t *res)
Convert a 'nice' memory or file size into a bytecount From '100k' to 102400.
Definition config_file.c:2183

put memsize into variable

Referenced by config_set_option().

## ◆ S_POW2

#define S_POW2 | ( |  | str,
|  |  | var )

Value:
if(strcmp(opt, str)==0) \
{ IS_POW2_NUMBER; cfg->var = (size_t)atoi(val); }
IS_POW2_NUMBER
#define IS_POW2_NUMBER
check that the value passed is not 0 and a power of 2
Definition config_file.c:453

put pow2 number into variable

Referenced by config_set_option().

## ◆ S_STR

#define S_STR | ( |  | str,
|  |  | var )

Value:
if(strcmp(opt, str)==0) \
{ free(cfg->var); return (cfg->var = strdup(val)) != NULL; }

put string into variable

Referenced by config_set_option().

## ◆ S_STRLIST

#define S_STRLIST | ( |  | str,
|  |  | var )

Value:
if(strcmp(opt, str)==0) \
{ return cfg_strlist_insert(&cfg->var, strdup(val)); }
cfg_strlist_insert
int cfg_strlist_insert(struct config_strlist **head, char *item)
Insert string into strlist.
Definition config_file.c:2021

put string into strlist

Referenced by config_set_option().

## ◆ S_STRLIST_UNIQ

#define S_STRLIST_UNIQ | ( |  | str,
|  |  | var )

Value:
if(strcmp(opt, str)==0) \
{ if(cfg_strlist_find(cfg->var, val)) { return 0;} \
return cfg_strlist_insert(&cfg->var, strdup(val)); }
cfg_strlist_find
struct config_strlist * cfg_strlist_find(struct config_strlist *head, const char *item)
Find string in strlist.
Definition config_file.c:2005

put string into strlist if not present yet

Referenced by config_set_option().

## ◆ S_STRLIST_APPEND

#define S_STRLIST_APPEND | ( |  | str,
|  |  | var )

Value:
if(strcmp(opt, str)==0) \
{ return cfg_strlist_append(&cfg->var, strdup(val)); }
cfg_strlist_append
int cfg_strlist_append(struct config_strlist_head *list, char *item)
Append text at end of list.
Definition config_file.c:1965

append string to strlist

Referenced by config_set_option().

## ◆ O_DEC

#define O_DEC | ( |  | opt,
|  |  | str,
|  |  | var )

Value:
if(strcmp(opt, str)==0) \
{snprintf(buf, len, "%d", (int)cfg->var); \
func(buf, arg);}

compare and print decimal option

Referenced by config_get_option().

## ◆ O_UNS

#define O_UNS | ( |  | opt,
|  |  | str,
|  |  | var )

Value:
if(strcmp(opt, str)==0) \
{snprintf(buf, len, "%u", (unsigned)cfg->var); \
func(buf, arg);}

compare and print unsigned option

Referenced by config_get_option().

## ◆ O_YNO

#define O_YNO | ( |  | opt,
|  |  | str,
|  |  | var )

Value:
if(strcmp(opt, str)==0) \
{func(cfg->var?"yes":"no", arg);}

compare and print yesno option

Referenced by config_get_option().

## ◆ O_STR

#define O_STR | ( |  | opt,
|  |  | str,
|  |  | var )

Value:
if(strcmp(opt, str)==0) \
{func(cfg->var?cfg->var:"", arg);}

compare and print string option

Referenced by config_get_option().

## ◆ O_IFC

#define O_IFC | ( |  | opt,
|  |  | str,
|  |  | num,
|  |  | arr )

Value:
if(strcmp(opt, str)==0) \
{int i; for(i=0; i<cfg->num; i++) func(cfg->arr[i], arg);}

compare and print array option

Referenced by config_get_option().

## ◆ O_MEM

#define O_MEM | ( |  | opt,
|  |  | str,
|  |  | var )

Value:
if(strcmp(opt, str)==0) { \
if(cfg->var > 1024*1024*1024) { \
size_t f=cfg->var/(size_t)1000000, b=cfg->var%(size_t)1000000; \
snprintf(buf, len, "%u%6.6u", (unsigned)f, (unsigned)b); \
} else snprintf(buf, len, "%u", (unsigned)cfg->var); \
func(buf, arg);}

compare and print memorysize option

Referenced by config_get_option().

## ◆ O_LST

#define O_LST | ( |  | opt,
|  |  | name,
|  |  | lst )

Value:
if(strcmp(opt, name)==0) { \
struct config_strlist* p = cfg->lst; \
for(p = cfg->lst; p; p = p->next) \
func(p->str, arg); \
}
config_strlist
List of strings for config options.
Definition config_file.h:878
config_strlist::str
char * str
config option string
Definition config_file.h:882
config_strlist::next
struct config_strlist * next
next item in list
Definition config_file.h:880

compare and print list option

Referenced by config_get_option().

## ◆ O_LS2

#define O_LS2 | ( |  | opt,
|  |  | name,
|  |  | lst )

Value:
if(strcmp(opt, name)==0) { \
struct config_str2list* p = cfg->lst; \
for(p = cfg->lst; p; p = p->next) { \
snprintf(buf, len, "%s %s", p->str, p->str2); \
func(buf, arg); \
} \
}
config_str2list
List of two strings for config options.
Definition config_file.h:888
config_str2list::str
char * str
first string
Definition config_file.h:892
config_str2list::str2
char * str2
second string
Definition config_file.h:894
config_str2list::next
struct config_str2list * next
next item in list
Definition config_file.h:890

compare and print list option

Referenced by config_get_option().

## ◆ O_LS3

#define O_LS3 | ( |  | opt,
|  |  | name,
|  |  | lst )

Value:
if(strcmp(opt, name)==0) { \
struct config_str3list* p = cfg->lst; \
for(p = cfg->lst; p; p = p->next) { \
snprintf(buf, len, "%s %s %s", p->str, p->str2, p->str3); \
func(buf, arg); \
} \
}
config_str3list
List of three strings for config options.
Definition config_file.h:900
config_str3list::next
struct config_str3list * next
next item in list
Definition config_file.h:902
config_str3list::str2
char * str2
second string
Definition config_file.h:906
config_str3list::str3
char * str3
third string
Definition config_file.h:908
config_str3list::str
char * str
first string
Definition config_file.h:904

compare and print list option

Referenced by config_get_option().

## ◆ O_LTG

#define O_LTG | ( |  | opt,
|  |  | name,
|  |  | lst )

Value:
if(strcmp(opt, name)==0) { \
char* tmpstr = NULL; \
struct config_strbytelist *p = cfg->lst; \
for(p = cfg->lst; p; p = p->next) {\
tmpstr = config_taglist2str(cfg, p->str2, p->str2len); \
if(tmpstr) {\
snprintf(buf, len, "%s %s", p->str, tmpstr); \
func(buf, arg); \
free(tmpstr); \
} \
} \
}
config_taglist2str
char * config_taglist2str(struct config_file *cfg, uint8_t *taglist, size_t taglen)
convert tag bitlist to a malloced string with tag names.
Definition config_file.c:2341
config_strbytelist
List of string, bytestring for config options.
Definition config_file.h:915
config_strbytelist::str
char * str
first string
Definition config_file.h:919
config_strbytelist::next
struct config_strbytelist * next
next item in list
Definition config_file.h:917
config_strbytelist::str2
uint8_t * str2
second bytestring
Definition config_file.h:921

compare and print taglist option

Referenced by config_get_option().

## Function Documentation

## ◆ config_create()

struct config_file * config_create | ( | void |  | ) |

Create config file structure.

Filled with default values.

Returns
  : the new structure or NULL on memory error.

References config_file::acls, config_file::add_holddown, config_file::aggressive_nsec, config_file::auths, config_file::auto_trust_anchor_file_list, config_file::bogus_ttl, config_file::caps_whitelist, config_file::chrootdir, config_delete(), config_file::control_cert_file, config_file::control_ifs, config_file::control_key_file, config_file::control_port, config_file::control_use_cert, config_file::cookie_secret, config_file::cookie_secret_file, config_file::cookie_secret_len, config_file::del_holddown, config_file::delay_close, config_file::deny_any, config_file::directory, config_file::disable_dnssec_lame_check, config_file::disable_edns_do, config_file::discard_timeout, config_file::dnscrypt, config_file::dnscrypt_nonce_cache_size, config_file::dnscrypt_nonce_cache_slabs, config_file::dnscrypt_port, config_file::dnscrypt_provider, config_file::dnscrypt_provider_cert, config_file::dnscrypt_provider_cert_rotated, config_file::dnscrypt_secret_key, config_file::dnscrypt_shared_secret_cache_size, config_file::dnscrypt_shared_secret_cache_slabs, config_file::dnstap_bidirectional, config_file::dnstap_socket_path, config_file::dnstap_tls, config_file::do_answer_cookie, config_file::do_daemonize, config_file::do_ip4, config_file::do_ip6, config_file::do_tcp, config_file::do_tcp_keepalive, config_file::do_udp, config_file::domain_insecure, config_file::donotquery_localhost, config_file::donotqueryaddrs, config_file::dynlib_file, config_file::ede, config_file::ede_serve_expired, config_file::edns_buffer_size, config_file::edns_client_string_opcode, config_file::edns_client_strings, config_file::fast_server_num, config_file::fast_server_permil, config_strlist_head::first, config_file::forwards, config_file::harden_algo_downgrade, config_file::harden_below_nxdomain, config_file::harden_dnssec_stripped, config_file::harden_glue, config_file::harden_large_queries, config_file::harden_referral_path, config_file::harden_short_bufsize, config_file::harden_unknown_additional, config_file::hide_http_user_agent, config_file::hide_identity, config_file::hide_trustanchor, config_file::hide_version, config_file::host_ttl, config_file::http_endpoint, config_file::http_max_streams, config_file::http_nodelay, config_file::http_query_buffer_size, config_file::http_response_buffer_size, config_file::http_user_agent, config_file::https_port, config_file::identity, config_file::if_automatic, config_file::if_automatic_ports, config_file::ifs, config_file::ignore_cd, config_file::incoming_num_tcp, config_file::infra_cache_max_rtt, config_file::infra_cache_min_rtt, config_file::infra_cache_numhosts, config_file::infra_cache_slabs, config_file::infra_keep_probing, init_cookie_secret(), init_outgoing_availports(), config_file::insecure_lan_zones, config_file::ip_dscp, config_file::ip_freebind, config_file::ip_ratelimit, config_file::ip_ratelimit_backoff, config_file::ip_ratelimit_cookie, config_file::ip_ratelimit_factor, config_file::ip_ratelimit_size, config_file::ip_ratelimit_slabs, config_file::ip_transparent, config_file::jostle_time, config_file::keep_missing, config_file::key_cache_size, config_file::key_cache_slabs, config_strlist_head::last, config_file::local_data, config_file::local_zone_overrides, config_file::local_zones, config_file::local_zones_disable_default, config_file::local_zones_nodefault, config_file::log_destaddr, config_file::log_identity, config_file::log_local_actions, config_file::log_queries, config_file::log_replies, config_file::log_servfail, config_file::log_tag_queryreply, config_file::log_time_ascii, config_file::logfile, config_file::max_negative_ttl, config_file::max_query_restarts, config_file::max_reuse_tcp_queries, config_file::max_sent_count, config_file::max_ttl, config_file::min_negative_ttl, config_file::min_ttl, config_file::module_conf, config_file::msg_buffer_size, config_file::msg_cache_size, config_file::msg_cache_slabs, config_file::neg_cache_size, config_file::nsid_cfg_str, config_file::num_ifs, config_file::num_out_ifs, config_file::num_queries_per_thread, config_file::num_threads, config_file::out_ifs, config_file::outbound_msg_retry, config_file::outgoing_avail_ports, config_file::outgoing_num_ports, config_file::outgoing_num_tcp, config_file::outgoing_tcp_mss, config_file::pad_queries, config_file::pad_queries_block_size, config_file::pad_responses, config_file::pad_responses_block_size, config_file::permit_small_holddown, config_file::pidfile, config_file::port, config_file::prefetch, config_file::prefetch_key, config_file::private_address, config_file::private_domain, config_file::python_script, config_file::qname_minimisation, config_file::qname_minimisation_strict, config_file::ratelimit, config_file::ratelimit_backoff, config_file::ratelimit_below_domain, config_file::ratelimit_factor, config_file::ratelimit_for_domain, config_file::ratelimit_size, config_file::ratelimit_slabs, config_file::remote_control_enable, config_file::root_hints, config_file::root_key_sentinel, config_file::rrset_cache_size, config_file::rrset_cache_slabs, config_file::serve_expired, config_file::serve_expired_client_timeout, config_file::serve_expired_reply_ttl, config_file::serve_expired_ttl, config_file::serve_expired_ttl_reset, config_file::serve_original_ttl, config_file::server_cert_file, config_file::server_key_file, config_file::shm_enable, config_file::shm_key, config_file::so_rcvbuf, config_file::so_reuseport, config_file::so_sndbuf, config_file::sock_queue_timeout, config_file::ssl_port, config_file::ssl_service_key, config_file::ssl_service_pem, config_file::ssl_upstream, config_file::stat_cumulative, config_file::stat_extended, config_file::stat_inhibit_zero, config_file::stat_interval, config_file::stream_wait_size, config_file::stubs, config_file::target_fetch_policy, config_file::tcp_auth_query_timeout, config_file::tcp_connection_limits, config_file::tcp_idle_timeout, config_file::tcp_keepalive_timeout, config_file::tcp_mss, config_file::tcp_reuse_timeout, config_file::tcp_upstream, config_file::tls_cert_bundle, config_file::tls_use_sni, config_file::tls_win_cert, config_file::trust_anchor_file_list, config_file::trust_anchor_list, config_file::trust_anchor_signaling, config_file::trusted_keys_file_list, config_file::udp_connect, config_file::udp_upstream_without_downstream, config_file::unblock_lan_zones, config_file::unwanted_threshold, config_file::use_caps_bits_for_id, config_file::use_syslog, config_file::use_systemd, config_file::username, config_file::val_clean_additional, config_file::val_date_override, config_file::val_log_level, config_file::val_log_squelch, config_file::val_max_restart, config_file::val_nsec3_key_iterations, config_file::val_permissive_mode, config_file::val_sig_skew_max, config_file::val_sig_skew_min, config_file::verbosity, config_file::version, config_file::views, config_file::wait_limit, config_file::wait_limit_cookie, config_file::wait_limit_cookie_netblock, config_file::wait_limit_netblock, and config_file::zonemd_permissive_mode.

Referenced by authtest_addzone(), checkconf(), config_create_forlib(), go(), infra_test(), print_stats_shm(), run_daemon(), service_init(), and zonemd_verify_test().

## ◆ config_create_forlib()

struct config_file * config_create_forlib | ( | void |  | ) |

Create config file structure for library use.

Filled with default values.

Returns
  : the new structure or NULL on memory error.

References config_file::chrootdir, config_create(), config_file::donotquery_localhost, config_file::harden_short_bufsize, config_file::infra_cache_slabs, config_file::key_cache_size, config_file::key_cache_slabs, config_file::msg_cache_size, config_file::msg_cache_slabs, config_file::neg_cache_size, config_file::outgoing_num_ports, config_file::outgoing_num_tcp, config_file::rrset_cache_size, config_file::rrset_cache_slabs, config_file::use_syslog, config_file::val_log_level, config_file::val_log_squelch, and config_file::verbosity.

Referenced by ub_ctx_create_nopipe().

## ◆ config_set_option()

int config_set_option | ( | struct config_file * | config,
|  | const char * | option,
|  | const char * | value )

Set the given keyword to the given value.

Parameters

  config | where to store config
  option | option name, including the ':' character.
  value | value, this string is copied if needed, or parsed. The caller owns the value string.

Returns
  0 on error (malloc or syntax error).

References config_file::add_holddown, config_file::aggressive_nsec, config_file::auto_trust_anchor_file_list, autr_permit_small_holddown, BLACKLIST_PENALTY, config_file::bogus_ttl, config_file::caps_whitelist, cfg_convert_timeval(), cfg_mark_ports(), cfg_parse_local_zone(), cfg_parse_nsid(), cfg_ptr_reverse(), cfg_strlist_insert(), config_file::chrootdir, config_add_tag(), config_file::control_cert_file, config_file::control_ifs, config_file::control_key_file, config_file::control_port, config_file::cookie_secret_file, config_file::del_holddown, config_file::delay_close, config_file::deny_any, config_file::directory, config_file::disable_dnssec_lame_check, config_file::disable_edns_do, config_file::discard_timeout, config_file::dnscrypt, config_file::dnscrypt_nonce_cache_size, config_file::dnscrypt_nonce_cache_slabs, config_file::dnscrypt_port, config_file::dnscrypt_provider, config_file::dnscrypt_provider_cert, config_file::dnscrypt_provider_cert_rotated, config_file::dnscrypt_secret_key, config_file::dnscrypt_shared_secret_cache_size, config_file::dnscrypt_shared_secret_cache_slabs, config_file::dnstap, config_file::dnstap_bidirectional, config_file::dnstap_identity, config_file::dnstap_ip, config_file::dnstap_log_client_query_messages, config_file::dnstap_log_client_response_messages, config_file::dnstap_log_forwarder_query_messages, config_file::dnstap_log_forwarder_response_messages, config_file::dnstap_log_resolver_query_messages, config_file::dnstap_log_resolver_response_messages, config_file::dnstap_sample_rate, config_file::dnstap_send_identity, config_file::dnstap_send_version, config_file::dnstap_socket_path, config_file::dnstap_tls, config_file::dnstap_tls_cert_bundle, config_file::dnstap_tls_client_cert_file, config_file::dnstap_tls_client_key_file, config_file::dnstap_tls_server_name, config_file::dnstap_version, config_file::do_answer_cookie, config_file::do_daemonize, config_file::do_ip4, config_file::do_ip6, config_file::do_tcp, config_file::do_tcp_keepalive, config_file::do_udp, config_file::domain_insecure, config_file::donotquery_localhost, config_file::donotqueryaddrs, config_file::dynlib_file, config_file::ede, config_file::ede_serve_expired, config_file::edns_buffer_size, config_file::fast_server_num, config_file::fast_server_permil, config_file::harden_algo_downgrade, config_file::harden_below_nxdomain, config_file::harden_dnssec_stripped, config_file::harden_glue, config_file::harden_large_queries, config_file::harden_referral_path, config_file::harden_short_bufsize, config_file::harden_unknown_additional, config_file::hide_http_user_agent, config_file::hide_identity, config_file::hide_trustanchor, config_file::hide_version, config_file::host_ttl, config_file::http_endpoint, config_file::http_max_streams, config_file::http_nodelay, config_file::http_notls_downstream, config_file::http_query_buffer_size, config_file::http_response_buffer_size, config_file::http_user_agent, config_file::https_port, config_file::identity, config_file::if_automatic, config_file::if_automatic_ports, config_file::ignore_cd, config_file::incoming_num_tcp, config_file::infra_cache_max_rtt, config_file::infra_cache_min_rtt, config_file::infra_cache_numhosts, config_file::infra_cache_slabs, infra_dp_ratelimit, infra_ip_ratelimit, infra_ip_ratelimit_cookie, config_file::infra_keep_probing, config_file::insecure_lan_zones, config_file::ip_dscp, config_file::ip_freebind, config_file::ip_ratelimit, config_file::ip_ratelimit_backoff, config_file::ip_ratelimit_cookie, config_file::ip_ratelimit_factor, config_file::ip_ratelimit_size, config_file::ip_ratelimit_slabs, config_file::ip_transparent, IS_NUMBER_OR_ZERO, IS_YES_OR_NO, config_file::jostle_time, config_file::keep_missing, config_file::key_cache_size, config_file::key_cache_slabs, config_file::local_data, config_file::log_destaddr, config_file::log_identity, config_file::log_local_actions, config_file::log_queries, config_file::log_replies, config_file::log_servfail, log_set_time_asc(), config_file::log_tag_queryreply, config_file::log_time_ascii, config_file::logfile, MAX_NEG_TTL, config_file::max_negative_ttl, config_file::max_query_restarts, config_file::max_reuse_tcp_queries, config_file::max_sent_count, MAX_TTL, config_file::max_ttl, MIN_NEG_TTL, config_file::min_negative_ttl, MIN_TTL, config_file::min_ttl, config_file::module_conf, config_file::msg_buffer_size, config_file::msg_cache_size, config_file::msg_cache_slabs, config_file::neg_cache_size, config_file::nsid_cfg_str, config_file::num_out_ifs, config_file::num_queries_per_thread, config_file::out_ifs, config_file::outbound_msg_retry, config_file::outgoing_avail_ports, config_file::outgoing_num_ports, config_file::outgoing_num_tcp, config_file::outgoing_tcp_mss, config_file::pad_queries, config_file::pad_queries_block_size, config_file::pad_responses, config_file::pad_responses_block_size, config_file::permit_small_holddown, config_file::pidfile, config_file::port, config_file::prefer_ip4, config_file::prefer_ip6, config_file::prefetch, config_file::prefetch_key, config_file::private_address, config_file::private_domain, config_file::proxy_protocol_port, config_file::python_script, config_file::qname_minimisation, config_file::qname_minimisation_strict, config_file::ratelimit, config_file::ratelimit_backoff, config_file::ratelimit_factor, config_file::ratelimit_size, config_file::ratelimit_slabs, config_file::remote_control_enable, config_file::root_hints, config_file::root_key_sentinel, config_file::rrset_cache_size, config_file::rrset_cache_slabs, RTT_MAX_TIMEOUT, RTT_MIN_TIMEOUT, S_MEMSIZE, S_NUMBER_NONZERO, S_NUMBER_OR_ZERO, S_POW2, S_SIZET_NONZERO, S_SIZET_OR_ZERO, S_STR, S_STRLIST, S_STRLIST_APPEND, S_STRLIST_UNIQ, S_UNSIGNED_OR_ZERO, S_YNO, SERVE_EXPIRED, config_file::serve_expired, config_file::serve_expired_client_timeout, SERVE_EXPIRED_REPLY_TTL, config_file::serve_expired_reply_ttl, SERVE_EXPIRED_TTL, config_file::serve_expired_ttl, config_file::serve_expired_ttl_reset, config_file::serve_original_ttl, config_file::server_cert_file, config_file::server_key_file, config_file::shm_enable, config_file::shm_key, config_file::so_rcvbuf, config_file::so_reuseport, config_file::so_sndbuf, config_file::sock_queue_timeout, config_file::ssl_port, config_file::ssl_service_key, config_file::ssl_service_pem, config_file::ssl_upstream, config_file::stat_cumulative, config_file::stat_extended, config_file::stat_inhibit_zero, config_file::stat_interval, config_file::stream_wait_size, config_file::target_fetch_policy, config_file::tcp_auth_query_timeout, config_file::tcp_idle_timeout, config_file::tcp_keepalive_timeout, config_file::tcp_mss, config_file::tcp_reuse_timeout, config_file::tcp_upstream, config_file::tls_additional_port, config_file::tls_cert_bundle, config_file::tls_ciphers, config_file::tls_ciphersuites, config_file::tls_session_ticket_keys, config_file::tls_use_sni, config_file::tls_win_cert, config_file::trust_anchor_file_list, config_file::trust_anchor_list, config_file::trust_anchor_signaling, config_file::trusted_keys_file_list, config_file::udp_connect, config_file::udp_upstream_without_downstream, config_file::unblock_lan_zones, config_file::unwanted_threshold, config_file::use_caps_bits_for_id, config_file::use_syslog, config_file::use_systemd, USEFUL_SERVER_TOP_TIMEOUT, config_file::username, config_file::val_clean_additional, config_file::val_date_override, config_file::val_log_level, config_file::val_log_squelch, config_file::val_max_restart, config_file::val_nsec3_key_iterations, config_file::val_permissive_mode, config_file::val_sig_skew_max, config_file::val_sig_skew_min, verbosity, config_file::version, config_file::wait_limit, config_file::wait_limit_cookie, and config_file::zonemd_permissive_mode.

Referenced by do_set_option(), and ub_ctx_set_option().

## ◆ config_print_func()

void config_print_func | ( | char * | line,
|  | void * | arg )

function to print to a file, use as func with config_get_option.

Parameters

  line | text to print. appended.
  arg | pass a FILE*, like stdout.

Referenced by fptr_whitelist_print_func(), and print_option().

## ◆ config_collate_func()

void config_collate_func | ( | char * | line,
|  | void * | arg )

function to collate the text strings into a strlist_head.

Parameters

  line | text to append.
  arg | pass a strlist_head structure. zeroed on start.

References cfg_strlist_append(), config_collate_arg::list, and config_collate_arg::status.

Referenced by config_get_option_list(), and fptr_whitelist_print_func().

## ◆ config_get_option_list()

int config_get_option_list | ( | struct config_file * | cfg,
|  | const char * | opt,
|  | struct config_strlist ** | list )

Get an option and return strlist.

Parameters

  cfg | config file
  opt | option name.
  list | list is returned here. malloced, caller must free it.

Returns
  0=OK, 1=syntax error, 2=malloc failed.

References config_collate_func(), config_delstrlist(), config_get_option(), config_strlist_head::first, config_collate_arg::list, and config_collate_arg::status.

Referenced by config_get_option_collate().

## ◆ config_get_option_collate()

int config_get_option_collate | ( | struct config_file * | cfg,
|  | const char * | opt,
|  | char ** | str )

Get an option and collate results into string.

Parameters

  cfg | config file
  opt | option name.
  str | string. malloced, caller must free it.

Returns
  0=OK, 1=syntax error, 2=malloc failed.

References config_collate_cat(), config_delstrlist(), config_get_option_list(), and config_strlist::str.

Referenced by ub_ctx_get_option().

## ◆ config_collate_cat()

char * config_collate_cat | ( | struct config_strlist * | list | ) |

take a strlist_head list and return a malloc string.

separated with newline.

Parameters

  list | strlist first to collate. zeroes return "".

Returns
  NULL on malloc failure. Or if malloc failure happened in strlist.

References config_strlist::next, and config_strlist::str.

Referenced by config_get_option_collate().

## ◆ config_get_option()

int config_get_option | ( | struct config_file * | cfg,
|  | const char * | opt,
|  | void(* | func )(char *, void *),
|  | void * | arg )

Call print routine for the given option.

Parameters

  cfg | config.
  opt | option name without trailing :. This is different from config_set_option.
  func | print func, called as (str, arg) for every data element.
  arg | user argument for print func.

Returns
  false if the option name is not supported (syntax error).

References fptr_ok, fptr_whitelist_print_func(), logfile, O_DEC, O_IFC, O_LS2, O_LS3, O_LST, O_LTG, O_MEM, O_STR, O_UNS, O_YNO, and verbosity.

Referenced by config_get_option_list(), do_get_option(), and print_option().

## ◆ config_read()

int config_read | ( | struct config_file * | config,
|  | const char * | filename,
|  | const char * | chroot )

Read the config file from the specified filename.

Parameters

  config | where options are stored into, must be freshly created.
  filename | name of configfile. If NULL nothing is done.
  chroot | if not NULL, the chroot dir currently in use (for include).

Returns
  : false on error. In that case errno is set, ENOENT means file not found.

References config_parser_state::cfg, cfg_parser, config_parser_state::chroot, config_read(), create_cfg_parser(), config_file::dnscrypt, config_file::dnscrypt_port, config_parser_state::errors, config_parser_state::filename, log_err(), ub_c_in, ub_c_parse(), VERB_QUERY, and verbose().

Referenced by checkconf(), config_read(), go(), print_stats_shm(), run_daemon(), service_init(), and ub_ctx_config().

## ◆ cfg_stub_find()

struct config_stub * cfg_stub_find | ( | struct config_stub *** | pp,
|  | const char * | nm )

Find stub in config list, also returns prevptr (for deletion).

Parameters

  pp | call routine with pointer to a pointer to the start of the list, if the stub is found, on exit, the value contains a pointer to the next pointer that points to the found element (or to the list start pointer if it is the first element).
  nm | name of stub to find.

Returns
  : pointer to config_stub if found, or NULL if not found.

References config_stub::name, and config_stub::next.

Referenced by ub_ctx_set_stub().

## ◆ config_delstrlist()

void config_delstrlist | ( | struct config_strlist * | list | ) |

Delete items in config string list.

Parameters

  list | list.

References config_strlist::next, and config_strlist::str.

Referenced by config_delauth(), config_delete(), config_delstub(), config_delview(), config_get_option_collate(), config_get_option_list(), lz_freeup_cfg(), main(), remove_configfile(), and replay_moment_delete().

## ◆ config_deldblstrlist()

void config_deldblstrlist | ( | struct config_str2list * | list | ) |

Delete items in config double string list.

Parameters

  list | list.

References config_str2list::next, config_str2list::str, and config_str2list::str2.

Referenced by config_delete(), config_delview(), lz_freeup_cfg(), read_acl_interface_view(), read_acl_view(), and respip_conf_actions_test().

## ◆ config_deltrplstrlist()

void config_deltrplstrlist | ( | struct config_str3list * | list | ) |

Delete items in config triple string list.

Parameters

  list | list.

References config_str3list::next, config_str3list::str, config_str3list::str2, and config_str3list::str3.

Referenced by config_delete(), read_acl_interface_tag_actions(), read_acl_interface_tag_datas(), read_acl_tag_actions(), and read_acl_tag_datas().

## ◆ config_delauth()

void config_delauth | ( | struct config_auth * | p | ) |

Delete an auth item.

Parameters

  p | auth item

References config_auth::allow_notify, config_delstrlist(), config_auth::masters, config_auth::name, config_auth::rpz_action_override, config_auth::rpz_cname, config_auth::rpz_log_name, config_auth::rpz_taglist, config_auth::urls, and config_auth::zonefile.

Referenced by config_delauths().

## ◆ config_delauths()

void config_delauths | ( | struct config_auth * | list | ) |

Delete items in config auth list.

Parameters

  list | list.

References config_delauth(), and config_auth::next.

Referenced by config_delete().

## ◆ config_delstub()

void config_delstub | ( | struct config_stub * | p | ) |

Delete a stub item.

Parameters

  p | stub item

References config_stub::addrs, config_delstrlist(), config_stub::hosts, and config_stub::name.

Referenced by config_delstubs(), and ub_ctx_set_stub().

## ◆ config_delstubs()

void config_delstubs | ( | struct config_stub * | list | ) |

Delete items in config stub list.

Parameters

  list | list.

References config_delstub(), and config_stub::next.

Referenced by config_delete(), and ub_ctx_set_fwd().

## ◆ config_delview()

void config_delview | ( | struct config_view * | p | ) |

Delete a view item.

Parameters

  p | view item

References config_deldblstrlist(), config_delstrlist(), config_view::local_data, config_view::local_zones, config_view::local_zones_nodefault, and config_view::name.

Referenced by config_delviews().

## ◆ config_delviews()

void config_delviews | ( | struct config_view * | list | ) |

Delete items in config view list.

Parameters

  list | list.

References config_delview(), and config_view::next.

Referenced by config_delete().

## ◆ config_delete()

void config_delete | ( | struct config_file * | config | ) |

Destroy the config file structure.

Parameters

  config | to delete.

References config_file::acl_tag_actions, config_file::acl_tag_datas, config_file::acl_tags, config_file::acl_view, config_file::acls, config_file::auths, config_file::auto_trust_anchor_file_list, config_file::caps_whitelist, config_file::chrootdir, config_del_strarray(), config_del_strbytelist(), config_delauths(), config_deldblstrlist(), config_delstrlist(), config_delstubs(), config_deltrplstrlist(), config_delviews(), config_file::control_cert_file, config_file::control_ifs, config_file::control_key_file, config_file::cookie_secret_file, config_file::directory, config_file::dns64_ignore_aaaa, config_file::dnstap_identity, config_file::dnstap_ip, config_file::dnstap_socket_path, config_file::dnstap_tls_cert_bundle, config_file::dnstap_tls_client_cert_file, config_file::dnstap_tls_client_key_file, config_file::dnstap_tls_server_name, config_file::dnstap_version, config_file::domain_insecure, config_file::donotqueryaddrs, config_file::dynlib_file, config_file::edns_client_strings, config_strlist_head::first, config_file::forwards, config_file::http_endpoint, config_file::http_user_agent, config_file::identity, config_file::if_automatic_ports, config_file::ifs, config_file::interface_actions, config_file::interface_tag_actions, config_file::interface_tag_datas, config_file::interface_tags, config_file::interface_view, config_file::local_data, config_file::local_zone_overrides, config_file::local_zone_tags, config_file::local_zones, config_file::local_zones_nodefault, log_ident_revert_to_default(), config_file::log_identity, config_file::logfile, config_file::module_conf, config_file::nsid_cfg_str, config_file::num_ifs, config_file::num_out_ifs, config_file::num_tags, config_file::out_ifs, config_file::outgoing_avail_ports, config_file::pidfile, config_file::private_address, config_file::private_domain, config_file::proxy_protocol_port, config_file::python_script, config_file::ratelimit_below_domain, config_file::ratelimit_for_domain, config_file::respip_tags, config_file::root_hints, config_file::server_cert_file, config_file::server_key_file, config_file::ssl_service_key, config_file::ssl_service_pem, config_file::stubs, config_file::tagname, config_file::target_fetch_policy, config_file::tcp_connection_limits, config_file::tls_additional_port, config_file::tls_cert_bundle, config_file::tls_ciphers, config_file::tls_ciphersuites, config_file::tls_session_ticket_keys, config_file::trust_anchor_file_list, config_file::trust_anchor_list, config_file::trusted_keys_file_list, config_file::username, config_file::val_nsec3_key_iterations, config_file::version, config_file::views, config_file::wait_limit_cookie_netblock, and config_file::wait_limit_netblock.

Referenced by authtest_addzone(), checkconf(), config_create(), go(), infra_test(), print_stats_shm(), run_daemon(), service_deinit(), service_init(), service_main(), ub_ctx_create(), ub_ctx_create_nopipe(), ub_ctx_delete(), and zonemd_verify_test().

## ◆ cfg_mark_ports()

int cfg_mark_ports | ( | const char * | str,
|  | int | allow,
|  | int * | avail,
|  | int | num )

Mark "number" or "low-high" as available or not in ports array.

Parameters

  str | string in input
  allow | give true if this range is permitted.
  avail | the array from cfg.
  num | size of the array (65536).

Returns
  : true if parsed correctly, or 0 on a parse error (and an error is logged).

References log_err(), and log_warn().

Referenced by config_set_option().

## ◆ cfg_scan_ports()

int cfg_scan_ports | ( | int * | avail,
|  | int | num )

Scan ports available.

Parameters

  avail | the array from cfg.
  num | size of the array (65536).

Returns
  the number of ports available for use.

Referenced by cfg_condense_ports().

## ◆ cfg_condense_ports()

int cfg_condense_ports | ( | struct config_file * | cfg,
|  | int ** | avail )

Get a condensed list of ports returned.

allocated.

Parameters

  cfg | config file.
  avail | the available ports array is returned here.

Returns
  : number of ports in array or 0 on error.

References cfg_scan_ports(), log_assert, and config_file::outgoing_avail_ports.

Referenced by libworker_setup().

## ◆ cfg_apply_local_port_policy()

void cfg_apply_local_port_policy | ( | struct config_file * | cfg,
|  | int | num )

Apply system specific port range policy.

Parameters

  cfg | config file.
  num | size of the array (65536).

References log_err(), and config_file::outgoing_avail_ports.

Referenced by context_finalize().

## ◆ cfg_strlist_append()

int cfg_strlist_append | ( | struct config_strlist_head * | list,
|  | char * | item )

Append text at end of list.

Parameters

  list | list head. zeroed at start.
  item | new item. malloced by caller. if NULL the insertion fails.

Returns
  true on success. on fail the item is free()ed.

References config_strlist_head::first, config_strlist_head::last, config_strlist::next, and config_strlist::str.

Referenced by config_collate_func(), and main().

## ◆ cfg_strlist_find()

struct config_strlist * cfg_strlist_find | ( | struct config_strlist * | head,
|  | const char * | item )

Find string in strlist.

Parameters

  head | pointer to strlist head variable.
  item | the item to search for.

Returns
  : the element in the list when found, NULL otherwise.

References config_strlist::next, and config_strlist::str.

## ◆ cfg_strlist_insert()

int cfg_strlist_insert | ( | struct config_strlist ** | head,
|  | char * | item )

Insert string into strlist.

Parameters

  head | pointer to strlist head variable.
  item | new item. malloced by caller. If NULL the insertion fails.

Returns
  : true on success. on fail, the item is free()d.

References config_strlist::next, and config_strlist::str.

Referenced by cfg_parse_local_zone(), config_set_option(), dnsc_load_local_data(), read_file_content(), setup_config(), spool_auto_file(), spool_temp_file(), ub_ctx_add_ta(), ub_ctx_add_ta_autr(), ub_ctx_add_ta_file(), ub_ctx_hosts(), ub_ctx_set_fwd(), ub_ctx_set_stub(), ub_ctx_trustedkeys(), and zonemd_verify_test().

## ◆ cfg_strlist_append_ex()

int cfg_strlist_append_ex | ( | struct config_strlist ** | head,
|  | char * | item )

Searches the end of a string list and appends the given text.

Parameters

  head | pointer to strlist head variable.
  item | new item. malloced by caller. if NULL the insertion fails.

Returns
  true on success.

References config_strlist::next, and config_strlist::str.

## ◆ cfg_str2list_insert()

int cfg_str2list_insert | ( | struct config_str2list ** | head,
|  | char * | item,
|  | char * | i2 )

Insert string into str2list.

Parameters

  head | pointer to str2list head variable.
  item | new item. malloced by caller. If NULL the insertion fails.
  i2 | 2nd string, malloced by caller. If NULL the insertion fails.

Returns
  : true on success. on fail, the item and i2 are free()d.

References config_str2list::next, config_str2list::str, and config_str2list::str2.

Referenced by cfg_insert_respip_data(), cfg_parse_local_zone(), dnsc_load_local_data(), respip_conf_actions_test(), respip_view_conf_actions_test(), and views_apply_cfg().

## ◆ cfg_str3list_insert()

int cfg_str3list_insert | ( | struct config_str3list ** | head,
|  | char * | item,
|  | char * | i2,
|  | char * | i3 )

Insert string into str3list.

Parameters

  head | pointer to str3list head variable.
  item | new item. malloced by caller. If NULL the insertion fails.
  i2 | 2nd string, malloced by caller. If NULL the insertion fails.
  i3 | 3rd string, malloced by caller. If NULL the insertion fails.

Returns
  : true on success.

References config_str3list::next, config_str3list::str, config_str3list::str2, and config_str3list::str3.

## ◆ cfg_strbytelist_insert()

int cfg_strbytelist_insert | ( | struct config_strbytelist ** | head,
|  | char * | item,
|  | uint8_t * | i2,
|  | size_t | i2len )

Insert string into strbytelist.

Parameters

  head | pointer to strbytelist head variable.
  item | new item. malloced by caller. If NULL the insertion fails.
  i2 | 2nd string, malloced by caller. If NULL the insertion fails.
  i2len | length of the i2 bytestring.

Returns
  : true on success.

References config_strbytelist::next, config_strbytelist::str, and config_strbytelist::str2.

## ◆ cfg_convert_timeval()

time_t cfg_convert_timeval | ( | const char * | str | ) |

Convert 14digit to time value.

Parameters

  str | string of 14 digits

Returns
  time value or 0 for error.

References sldns_mktime_from_utc().

Referenced by config_set_option(), verifytest_file(), and zonemd_verify_test().

## ◆ cfg_count_numbers()

int cfg_count_numbers | ( | const char * | str | ) |

Count number of values in the string.

format ::= (sp num)+ sp num ::= [-](0-9)+ sp ::= (space|tab)*

Parameters

  str | string

Returns
  : 0 on parse error, or empty string, else number of integer values in the string.

Referenced by read_fetch_policy(), and val_apply_cfg().

## ◆ cfg_parse_memsize()

int cfg_parse_memsize | ( | const char * | str,
|  | size_t * | res )

Convert a 'nice' memory or file size into a bytecount From '100k' to 102400.

and so on. Understands kKmMgG. k=1024, m=1024*1024, g=1024*1024*1024.

Parameters

  str | string
  res | result is stored here, size in bytes.

Returns
  : true if parsed correctly, or 0 on a parse error (and an error is logged).

References isalldigit(), and log_err().

Referenced by config_memsize_test(), and main().

## ◆ find_tag_id()

int find_tag_id | ( | struct config_file * | cfg,
|  | const char * | tag )

Find tag ID in the tag list.

Parameters

  cfg | the config structure.
  tag | string with tag name to search for.

Returns
  : 0..(num_tags-1) with tag ID, or -1 if tagname is not found.

References config_file::num_tags, and config_file::tagname.

Referenced by acl_list_tag_action_cfg(), acl_list_tag_data_cfg(), acl_view_tag_checks(), config_add_tag(), and config_parse_taglist().

## ◆ config_add_tag()

int config_add_tag | ( | struct config_file * | cfg,
|  | const char * | tag )

Add a tag name to the config.

It is added at the end with a new ID value.

Parameters

  cfg | the config structure.
  tag | string (which is copied) with the name.

Returns
  : false on alloc failure.

References find_tag_id(), config_file::num_tags, and config_file::tagname.

Referenced by config_set_option().

## ◆ config_parse_taglist()

uint8_t * config_parse_taglist | ( | struct config_file * | cfg,
|  | char * | str,
|  | size_t * | listlen )

parse taglist from string into bytestring with bitlist.

Parameters

  cfg | the config structure (with tagnames)
  str | the string to parse. Parse puts 0 bytes in string.
  listlen | returns length of in bytes.

Returns
  malloced bytes with a bitlist of the tags. or NULL on parse error or malloc failure.

References cfg_set_bit(), find_tag_id(), log_err(), and config_file::num_tags.

## ◆ cfg_parse_nsid()

uint8_t * cfg_parse_nsid | ( | const char * | str,
|  | uint16_t * | nsid_len )

Parse nsid from string into binary nsid.

nsid is either a hexadecimal string or an ascii string prepended with ascii_ in which case the characters after ascii_ are simply copied.

Parameters

  str | the string to parse.
  nsid_len | returns length of nsid in bytes.

Returns
  malloced bytes or NULL on parse error or malloc failure.

References sldns_hexdigit_to_int().

Referenced by config_set_option().

## ◆ config_taglist2str()

char * config_taglist2str | ( | struct config_file * | cfg,
|  | uint8_t * | taglist,
|  | size_t | len )

convert tag bitlist to a malloced string with tag names.

For debug output.

Parameters

  cfg | the config structure (with tagnames)
  taglist | the tag bitlist.
  len | length of the tag bitlist.

Returns
  malloced string or NULL.

References config_file::tagname.

## ◆ taglist_intersect()

int taglist_intersect | ( | uint8_t * | list1,
|  | size_t | list1len,
|  | const uint8_t * | list2,
|  | size_t | list2len )

see if two taglists intersect (have tags in common).

Parameters

  list1 | first tag bitlist.
  list1len | length in bytes of first list.
  list2 | second tag bitlist.
  list2len | length in bytes of second list.

Returns
  true if there are tags in common, 0 if not.

Referenced by config_tag_test(), local_zones_tags_lookup(), respip_rewrite_reply(), rpz_callback_from_iterator_cname(), and rpz_callback_from_iterator_module().

## ◆ config_apply()

void config_apply | ( | struct config_file * | config | ) |

Apply config to global constants; this routine is called in single thread.

Parameters

  config | to apply. Side effect: global constants change.

References autr_permit_small_holddown, BLACKLIST_PENALTY, EDNS_ADVERTISED_SIZE, config_file::edns_buffer_size, http2_query_buffer_max, http2_response_buffer_max, config_file::http_query_buffer_size, config_file::http_response_buffer_size, config_file::infra_cache_max_rtt, config_file::infra_cache_min_rtt, log_set_time_asc(), LOG_TAG_QUERYREPLY, config_file::log_tag_queryreply, config_file::log_time_ascii, MAX_NEG_TTL, config_file::max_negative_ttl, MAX_TTL, config_file::max_ttl, MIN_NEG_TTL, config_file::min_negative_ttl, MIN_TTL, config_file::min_ttl, MINIMAL_RESPONSES, config_file::permit_small_holddown, RRSET_ROUNDROBIN, RTT_MAX_TIMEOUT, RTT_MIN_TIMEOUT, SERVE_EXPIRED, config_file::serve_expired, SERVE_EXPIRED_REPLY_TTL, config_file::serve_expired_reply_ttl, SERVE_EXPIRED_TTL, config_file::serve_expired_ttl, SERVE_ORIGINAL_TTL, config_file::serve_original_ttl, stream_wait_max, config_file::stream_wait_size, UNKNOWN_SERVER_NICENESS, and USEFUL_SERVER_TOP_TIMEOUT.

Referenced by context_finalize(), and daemon_apply_cfg().

## ◆ config_lookup_uid()

void config_lookup_uid | ( | struct config_file * | config | ) |

Find username, sets cfg_uid and cfg_gid.

Parameters

  config | the config structure.

References cfg_gid, cfg_uid, and config_file::username.

Referenced by run_daemon().

## ◆ strlen_after_chroot()

static size_t strlen_after_chroot | ( | const char * | fname,
|  | struct config_file * | cfg,
|  | int | use_chdir )
| static

Calculate string length of full pathname in original filesys.

Parameters

  fname | the path name to convert. Must not be null or empty.
  cfg | config struct for chroot and chdir (if set).
  use_chdir | if false, only chroot is applied.

Returns
  length of string. remember to allocate one more for 0 at end in mallocs.

References config_file::chrootdir, and config_file::directory.

Referenced by fname_after_chroot().

## ◆ fname_after_chroot()

char * fname_after_chroot | ( | const char * | fname,
|  | struct config_file * | cfg,
|  | int | use_chdir )

Convert a filename to full pathname in original filesys.

Parameters

  fname | the path name to convert. Must not be null or empty.
  cfg | config struct for chroot and chdir (if set).
  use_chdir | if false, only chroot is applied.

Returns
  pointer to malloced buffer which is: [chroot][chdir]fname or NULL on malloc failure.

References config_file::chrootdir, config_file::directory, and strlen_after_chroot().

Referenced by check_chroot_filelist_wild(), check_chroot_string(), morechecks(), perform_setup(), print_option(), and setup_ctx().

## ◆ cfg_parse_local_zone()

int cfg_parse_local_zone | ( | struct config_file * | cfg,
|  | const char * | val )

Parse local-zone directive into two strings and register it in the config.

Parameters

  cfg | to put it in.
  val | argument strings to local-zone, "example.com nodefault".

Returns
  : false on failure

References cfg_str2list_insert(), cfg_strlist_insert(), last_space_pos(), config_file::local_zones, config_file::local_zones_nodefault, log_err(), and next_space_pos().

Referenced by config_set_option().

## ◆ cfg_ptr_reverse()

char * cfg_ptr_reverse | ( | char * | str | ) |

Convert a ptr shorthand into a full reverse-notation PTR record.

Parameters

  str | input string, "IP name"

Returns
  : malloced string "reversed-ip-name PTR name"

References addr_is_ip6(), ipstrtoaddr(), last_space_pos(), log_err(), and next_space_pos().

Referenced by config_set_option().

## ◆ cfg_has_https()

int cfg_has_https | ( | struct config_file * | cfg | ) |

see if config contains https turned on

Return true if the config contains settings that enable https.

References config_file::https_port, if_is_https(), config_file::ifs, config_file::num_ifs, and config_file::port.

Referenced by checkrlimits().

## Variable Documentation

## ◆ autr_permit_small_holddown

int autr_permit_small_holddown = 0

for debug allow small timeout values for fast rollovers

debug and enable small timeouts

Referenced by autr_probe_timer(), calc_next_probe(), config_apply(), config_set_option(), and set_tp_times().

## ◆ cfg_parser

struct config_parser_state* cfg_parser = 0

global config during parsing

global config parser object used during config parsing

Referenced by config_read(), create_cfg_parser(), ub_c_error(), and ub_c_error_va_list().