config_file.h File Reference

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

#include "sldns/rrdef.h"

Data Structures

struct  config_strlist_head
 List head for strlist processing, used for append operation. More...
 
struct  config_file
 The configuration options. More...
 
struct  config_stub
 Stub config options. More...
 
struct  config_auth
 Auth config options. More...
 
struct  config_view
 View config options. More...
 
struct  config_strlist
 List of strings for config options. More...
 
struct  config_str2list
 List of two strings for config options. More...
 
struct  config_str3list
 List of three strings for config options. More...
 
struct  config_strbytelist
 List of string, bytestring for config options. More...
 
struct  config_parser_state
 Used during options parsing. More...
 

Functions

struct config_fileconfig_create (void)
 Create config file structure. More...
 
struct config_fileconfig_create_forlib (void)
 Create config file structure for library use. More...
 
int config_read (struct config_file *config, const char *filename, const char *chroot)
 Read the config file from the specified filename. More...
 
void config_delete (struct config_file *config)
 Destroy the config file structure. More...
 
void config_apply (struct config_file *config)
 Apply config to global constants; this routine is called in single thread. More...
 
void config_lookup_uid (struct config_file *config)
 Find username, sets cfg_uid and cfg_gid. More...
 
int config_set_option (struct config_file *config, const char *option, const char *value)
 Set the given keyword to the given value. More...
 
int config_get_option (struct config_file *cfg, const char *opt, void(*func)(char *, void *), void *arg)
 Call print routine for the given option. More...
 
int config_get_option_list (struct config_file *cfg, const char *opt, struct config_strlist **list)
 Get an option and return strlist. More...
 
int config_get_option_collate (struct config_file *cfg, const char *opt, char **str)
 Get an option and collate results into string. More...
 
void config_print_func (char *line, void *arg)
 function to print to a file, use as func with config_get_option. More...
 
void config_collate_func (char *line, void *arg)
 function to collate the text strings into a strlist_head. More...
 
char * config_collate_cat (struct config_strlist *list)
 take a strlist_head list and return a malloc string. More...
 
int cfg_strlist_append (struct config_strlist_head *list, char *item)
 Append text at end of list. More...
 
int cfg_strlist_append_ex (struct config_strlist **head, char *item)
 Searches the end of a string list and appends the given text. More...
 
struct config_strlistcfg_strlist_find (struct config_strlist *head, const char *item)
 Find string in strlist. More...
 
int cfg_strlist_insert (struct config_strlist **head, char *item)
 Insert string into strlist. More...
 
int cfg_region_strlist_insert (struct regional *region, struct config_strlist **head, char *item)
 insert with region for allocation.
 
int cfg_str2list_insert (struct config_str2list **head, char *item, char *i2)
 Insert string into str2list. More...
 
int cfg_str3list_insert (struct config_str3list **head, char *item, char *i2, char *i3)
 Insert string into str3list. More...
 
int cfg_strbytelist_insert (struct config_strbytelist **head, char *item, uint8_t *i2, size_t i2len)
 Insert string into strbytelist. More...
 
struct config_stubcfg_stub_find (struct config_stub ***pp, const char *nm)
 Find stub in config list, also returns prevptr (for deletion). More...
 
void config_delstrlist (struct config_strlist *list)
 Delete items in config string list. More...
 
void config_deldblstrlist (struct config_str2list *list)
 Delete items in config double string list. More...
 
void config_deltrplstrlist (struct config_str3list *list)
 Delete items in config triple string list. More...
 
void config_del_strarray (char **array, int num)
 delete string array
 
void config_del_strbytelist (struct config_strbytelist *list)
 delete stringbytelist
 
void config_delstub (struct config_stub *p)
 Delete a stub item. More...
 
void config_delstubs (struct config_stub *list)
 Delete items in config stub list. More...
 
void config_delauth (struct config_auth *p)
 Delete an auth item. More...
 
void config_delauths (struct config_auth *list)
 Delete items in config auth list. More...
 
void config_delview (struct config_view *p)
 Delete a view item. More...
 
void config_delviews (struct config_view *list)
 Delete items in config view list. More...
 
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.
 
time_t cfg_convert_timeval (const char *str)
 Convert 14digit to time value. More...
 
int cfg_count_numbers (const char *str)
 Count number of values in the string. More...
 
int cfg_parse_memsize (const char *str, size_t *res)
 Convert a 'nice' memory or file size into a bytecount From '100k' to 102400. More...
 
uint8_t * cfg_parse_nsid (const char *str, uint16_t *nsid_len)
 Parse nsid from string into binary nsid. More...
 
int config_add_tag (struct config_file *cfg, const char *tag)
 Add a tag name to the config. More...
 
int find_tag_id (struct config_file *cfg, const char *tag)
 Find tag ID in the tag list. More...
 
uint8_t * config_parse_taglist (struct config_file *cfg, char *str, size_t *listlen)
 parse taglist from string into bytestring with bitlist. More...
 
char * config_taglist2str (struct config_file *cfg, uint8_t *taglist, size_t len)
 convert tag bitlist to a malloced string with tag names. More...
 
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). More...
 
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. More...
 
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. More...
 
int cfg_condense_ports (struct config_file *cfg, int **avail)
 Get a condensed list of ports returned. More...
 
void cfg_apply_local_port_policy (struct config_file *cfg, int num)
 Apply system specific port range policy. More...
 
int cfg_scan_ports (int *avail, int num)
 Scan ports available. More...
 
char * fname_after_chroot (const char *fname, struct config_file *cfg, int use_chdir)
 Convert a filename to full pathname in original filesys. More...
 
char * cfg_ptr_reverse (char *str)
 Convert a ptr shorthand into a full reverse-notation PTR record. More...
 
void init_cfg_parse (void)
 init lex state
 
int ub_c_parse (void)
 the yacc lex generated parse function
 
int ub_c_lex (void)
 the lexer function
 
int ub_c_wrap (void)
 wrap function
 
void ub_c_error (const char *msg)
 parsing helpers: print error with file and line numbers
 
void ub_c_error_msg (const char *fmt,...) ATTR_FORMAT(printf
 parsing helpers: print error with file and line numbers
 
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)
 Return true if the config contains settings that enable https. More...
 
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
 from cfg username, after daemonize setup performed
 
gid_t cfg_gid
 from cfg username, after daemonize setup performed
 
int autr_permit_small_holddown
 debug and enable small timeouts More...
 
size_t stream_wait_max
 size (in bytes) of stream wait buffers max
 
size_t http2_query_buffer_max
 size (in bytes) of all total HTTP2 query buffers max
 
size_t http2_response_buffer_max
 size (in bytes) of all total HTTP2 response buffers max
 
struct config_parser_statecfg_parser
 global config parser object used during config parsing More...
 
FILE * ub_c_in
 lex in file
 
FILE * ub_c_out
 lex out file
 
void int fake_dsa
 debug option for unit tests. More...
 
void int fake_sha1
 

Detailed Description

This file contains functions for the config file.

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::auths, config_file::bogus_ttl, config_file::chrootdir, config_file::delay_close, config_file::deny_any, config_file::directory, 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::donotquery_localhost, config_file::donotqueryaddrs, config_file::edns_buffer_size, config_file::fast_server_num, config_file::fast_server_permil, config_file::forwards, 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::https_port, config_file::if_automatic, config_file::if_automatic_ports, config_file::ifs, 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_outgoing_availports(), config_file::ip_dscp, config_file::ip_freebind, config_file::ip_transparent, config_file::jostle_time, 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_reuse_tcp_queries, config_file::max_ttl, config_file::min_ttl, config_file::msg_buffer_size, config_file::msg_cache_size, config_file::msg_cache_slabs, 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::outgoing_avail_ports, config_file::outgoing_num_ports, config_file::outgoing_num_tcp, config_file::outgoing_tcp_mss, config_file::pidfile, config_file::port, config_file::prefetch, config_file::prefetch_key, config_file::root_hints, config_file::rrset_cache_size, config_file::rrset_cache_slabs, 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_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::udp_connect, config_file::udp_upstream_without_downstream, config_file::use_syslog, config_file::use_systemd, config_file::username, and config_file::verbosity.

Referenced by checkconf(), config_create_forlib(), go(), infra_test(), and print_stats_shm().

◆ config_create_forlib()

◆ config_read()

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

Read the config file from the specified filename.

Parameters
configwhere options are stored into, must be freshly created.
filenamename of configfile. If NULL nothing is done.
chrootif 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, 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 ub_ctx_config().

◆ config_delete()

void config_delete ( struct config_file config)

Destroy the config file structure.

Parameters
configto 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::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, and config_file::views.

Referenced by service_deinit(), ub_ctx_create(), and ub_ctx_create_nopipe().

◆ config_apply()

◆ config_lookup_uid()

void config_lookup_uid ( struct config_file config)

Find username, sets cfg_uid and cfg_gid.

Parameters
configthe config structure.

References cfg_gid, cfg_uid, and config_file::username.

◆ 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
configwhere to store config
optionoption name, including the ':' character.
valuevalue, 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::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::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_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_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, config_file::max_ttl, MAX_TTL, config_file::min_ttl, 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, config_file::serve_expired, SERVE_EXPIRED, config_file::serve_expired_client_timeout, config_file::serve_expired_reply_ttl, SERVE_EXPIRED_REPLY_TTL, config_file::serve_expired_ttl, 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, and config_file::zonemd_permissive_mode.

Referenced by do_set_option(), and ub_ctx_set_option().

◆ config_get_option()

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

Call print routine for the given option.

Parameters
cfgconfig.
optoption name without trailing :. This is different from config_set_option.
funcprint func, called as (str, arg) for every data element.
arguser 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(), and do_get_option().

◆ 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
cfgconfig file
optoption name.
listlist 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.

◆ 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
cfgconfig file
optoption name.
strstring. malloced, caller must free it.
Returns
0=OK, 1=syntax error, 2=malloc failed.

◆ 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
linetext to print.
appended.
argpass a FILE*, like stdout.

Referenced by fptr_whitelist_print_func().

◆ config_collate_func()

void config_collate_func ( char *  line,
void *  arg 
)

function to collate the text strings into a strlist_head.

Parameters
linetext to append.
argpass 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_collate_cat()

char* config_collate_cat ( struct config_strlist list)

take a strlist_head list and return a malloc string.

separated with newline.

Parameters
liststrlist 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.

◆ cfg_strlist_append()

int cfg_strlist_append ( struct config_strlist_head list,
char *  item 
)

Append text at end of list.

Parameters
listlist head. zeroed at start.
itemnew 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().

◆ 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
headpointer to strlist head variable.
itemnew item. malloced by caller. if NULL the insertion fails.
Returns
true on success.

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

◆ cfg_strlist_find()

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

Find string in strlist.

Parameters
headpointer to strlist head variable.
itemthe 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
headpointer to strlist head variable.
itemnew 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(), 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(), and ub_ctx_trustedkeys().

◆ cfg_str2list_insert()

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

Insert string into str2list.

Parameters
headpointer to str2list head variable.
itemnew item. malloced by caller. If NULL the insertion fails.
i22nd 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_parse_local_zone(), dnsc_load_local_data(), 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
headpointer to str3list head variable.
itemnew item. malloced by caller. If NULL the insertion fails.
i22nd string, malloced by caller. If NULL the insertion fails.
i33rd 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
headpointer to strbytelist head variable.
itemnew item. malloced by caller. If NULL the insertion fails.
i22nd string, malloced by caller. If NULL the insertion fails.
i2lenlength of the i2 bytestring.
Returns
: true on success.

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

◆ 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
ppcall 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).
nmname 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)

◆ config_deldblstrlist()

void config_deldblstrlist ( struct config_str2list list)

Delete items in config double string list.

Parameters
listlist.

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

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

◆ config_deltrplstrlist()

void config_deltrplstrlist ( struct config_str3list list)

◆ config_delstub()

void config_delstub ( struct config_stub p)

Delete a stub item.

Parameters
pstub 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
listlist.

References config_delstub(), and config_stub::next.

Referenced by config_delete(), and ub_ctx_set_fwd().

◆ config_delauth()

◆ config_delauths()

void config_delauths ( struct config_auth list)

Delete items in config auth list.

Parameters
listlist.

References config_delauth(), and config_auth::next.

Referenced by config_delete().

◆ config_delview()

void config_delview ( struct config_view p)

◆ config_delviews()

void config_delviews ( struct config_view list)

Delete items in config view list.

Parameters
listlist.

References config_delview(), and config_view::next.

Referenced by config_delete().

◆ cfg_convert_timeval()

time_t cfg_convert_timeval ( const char *  str)

Convert 14digit to time value.

Parameters
strstring of 14 digits
Returns
time value or 0 for error.

Referenced by config_set_option().

◆ 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
strstring
Returns
: 0 on parse error, or empty string, else number of integer values in the string.

Referenced by 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
strstring
resresult is stored here, size in bytes.
Returns
: true if parsed correctly, or 0 on a parse error (and an error is logged).

Referenced by config_memsize_test(), and main().

◆ 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
strthe string to parse.
nsid_lenreturns length of nsid in bytes.
Returns
malloced bytes or NULL on parse error or malloc failure.

Referenced by config_set_option().

◆ 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
cfgthe config structure.
tagstring (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().

◆ find_tag_id()

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

Find tag ID in the tag list.

Parameters
cfgthe config structure.
tagstring 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 config_add_tag().

◆ 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
cfgthe config structure (with tagnames)
strthe string to parse. Parse puts 0 bytes in string.
listlenreturns length of in bytes.
Returns
malloced bytes with a bitlist of the tags. or NULL on parse error or malloc failure.

◆ 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
cfgthe config structure (with tagnames)
taglistthe tag bitlist.
lenlength 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
list1first tag bitlist.
list1lenlength in bytes of first list.
list2second tag bitlist.
list2lenlength 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(), and respip_rewrite_reply().

◆ 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
cfgto put it in.
valargument 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_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
strstring in input
allowgive true if this range is permitted.
availthe array from cfg.
numsize of the array (65536).
Returns
: true if parsed correctly, or 0 on a parse error (and an error is logged).

Referenced by config_set_option().

◆ cfg_condense_ports()

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

Get a condensed list of ports returned.

allocated.

Parameters
cfgconfig file.
availthe 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.

◆ cfg_apply_local_port_policy()

void cfg_apply_local_port_policy ( struct config_file cfg,
int  num 
)

Apply system specific port range policy.

Parameters
cfgconfig file.
numsize of the array (65536).

References log_err(), and config_file::outgoing_avail_ports.

Referenced by context_finalize().

◆ cfg_scan_ports()

int cfg_scan_ports ( int *  avail,
int  num 
)

Scan ports available.

Parameters
availthe array from cfg.
numsize of the array (65536).
Returns
the number of ports available for use.

Referenced by cfg_condense_ports().

◆ 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
fnamethe path name to convert. Must not be null or empty.
cfgconfig struct for chroot and chdir (if set).
use_chdirif 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(), print_option(), and setup_ctx().

◆ cfg_ptr_reverse()

char* cfg_ptr_reverse ( char *  str)

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

Parameters
strinput string, "IP name"
Returns
: malloced string "reversed-ip-name PTR name"

Referenced by config_set_option().

◆ cfg_has_https()

int cfg_has_https ( struct config_file cfg)

Return true if the config contains settings that enable https.

Parameters
cfgconfig information.
Returns
true if https ports are used for server.

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
extern

debug and enable small timeouts

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
extern

global config parser object used during config parsing

global config parser object used during config parsing

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

◆ fake_dsa

void int fake_dsa
extern

debug option for unit tests.

debug option for unit tests.