From ce43942cbe7f18d14f8beefe348965cec63d150d Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Mon, 26 Jun 2017 16:57:23 +0200 Subject: [PATCH 01/10] Respond to socket errors --- src/extension/poll_eventloop.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/extension/poll_eventloop.c b/src/extension/poll_eventloop.c index cb629d18..e796de10 100644 --- a/src/extension/poll_eventloop.c +++ b/src/extension/poll_eventloop.c @@ -435,13 +435,13 @@ poll_eventloop_run_once(getdns_eventloop *loop, int blocking) poll_loop->pfds[i].fd = -1; } if (poll_loop->fd_events[j].event->write_cb && - poll_loop->pfds[j].revents & POLLOUT) + poll_loop->pfds[j].revents & (POLLOUT|POLLERR|POLLHUP|POLLNVAL)) poll_write_cb( poll_loop->pfds[j].fd , poll_loop->fd_events[j].event); if (poll_loop->fd_events[j].event && poll_loop->fd_events[j].event->read_cb && - poll_loop->pfds[j].revents & POLLIN) + poll_loop->pfds[j].revents & (POLLIN|POLLERR|POLLHUP|POLLNVAL)) poll_read_cb( poll_loop->pfds[j].fd , poll_loop->fd_events[j].event); } From 04e554086a82a4fea5f96862798500ae899eee14 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Tue, 27 Jun 2017 00:23:22 +0200 Subject: [PATCH 02/10] A configurable log function Currently used only for DAEMON_DEBUG --- src/context.c | 73 +++++++++++++++++++++++++++++++----- src/context.h | 19 +++++++++- src/getdns/getdns_extra.h.in | 32 +++++++++++++--- src/libgetdns.symbols | 1 + src/stub.c | 67 ++++++++++++++------------------- src/tools/getdns_query.c | 11 ++++++ 6 files changed, 148 insertions(+), 55 deletions(-) diff --git a/src/context.c b/src/context.c index 2bfefe7d..737436b8 100644 --- a/src/context.c +++ b/src/context.c @@ -61,6 +61,7 @@ typedef unsigned short in_port_t; #include #include +#include #ifdef HAVE_PTHREAD #include @@ -655,6 +656,7 @@ upstreams_create(getdns_context *context, size_t size) r->current_stateful = 0; r->tls_backoff_time = context->tls_backoff_time; r->tls_connection_retries = context->tls_connection_retries; + r->log = context->log; return r; } @@ -719,6 +721,22 @@ _getdns_upstreams_dereference(getdns_upstreams *upstreams) GETDNS_FREE(upstreams->mf, upstreams); } +void _getdns_upstream_log(getdns_upstream *upstream, uint64_t system, + getdns_loglevel_type level, const char *fmt, ...) +{ + va_list args; + + if (!upstream || !upstream->upstreams || !upstream->upstreams->log.func + || !(upstream->upstreams->log.system & system) + || level > upstream->upstreams->log.level) + return; + + va_start(args, fmt); + upstream->upstreams->log.func( + upstream->upstreams->log.userarg, system, level, fmt, args); + va_end(args); +} + void _getdns_upstream_shutdown(getdns_upstream *upstream) { @@ -732,23 +750,24 @@ _getdns_upstream_shutdown(getdns_upstream *upstream) /* Keep track of the best auth state this upstream has had*/ if (upstream->tls_auth_state > upstream->best_tls_auth_state) upstream->best_tls_auth_state = upstream->tls_auth_state; -#if defined(DAEMON_DEBUG) && DAEMON_DEBUG - DEBUG_DAEMON("%s %-40s : Conn closed : Transport=%s - Resp=%d,Timeouts=%d,Auth=%s,Keepalive(ms)=%d\n", + _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + "%s %-40s : Conn closed : Transport=%s - Resp=%d,Timeouts=%d,Auth=%s,Keepalive(ms)=%d\n", STUB_DEBUG_DAEMON, upstream->addr_str, (upstream->transport == GETDNS_TRANSPORT_TLS ? "TLS" : "TCP"), (int)upstream->responses_received, (int)upstream->responses_timeouts, _getdns_auth_str(upstream->tls_auth_state), (int)upstream->keepalive_timeout); - DEBUG_DAEMON("%s %-40s : Upstream stats: Transport=%s - Resp=%d,Timeouts=%d,Best_auth=%s\n", + _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + "%s %-40s : Upstream stats: Transport=%s - Resp=%d,Timeouts=%d,Best_auth=%s\n", STUB_DEBUG_DAEMON, upstream->addr_str, (upstream->transport == GETDNS_TRANSPORT_TLS ? "TLS" : "TCP"), (int)upstream->total_responses, (int)upstream->total_timeouts, _getdns_auth_str(upstream->best_tls_auth_state)); - DEBUG_DAEMON("%s %-40s : Upstream stats: Transport=%s - Conns=%d,Conn_fails=%d,Conn_shutdowns=%d,Backoffs=%d\n", + _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + "%s %-40s : Upstream stats: Transport=%s - Conns=%d,Conn_fails=%d,Conn_shutdowns=%d,Backoffs=%d\n", STUB_DEBUG_DAEMON, upstream->addr_str, (upstream->transport == GETDNS_TRANSPORT_TLS ? "TLS" : "TCP"), (int)upstream->conn_completed, (int)upstream->conn_setup_failed, (int)upstream->conn_shutdowns, (int)upstream->conn_backoffs); -#endif /* Back off connections that never got up service at all (probably no TCP service or incompatible TLS version/cipher). @@ -771,11 +790,11 @@ _getdns_upstream_shutdown(getdns_upstream *upstream) upstream->conn_setup_failed = 0; upstream->conn_shutdowns = 0; upstream->conn_backoffs++; -#if defined(DAEMON_DEBUG) && DAEMON_DEBUG - DEBUG_DAEMON("%s %-40s : !Backing off this upstream - Will retry as new upstream at %s", + + _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + "%s %-40s : !Backing off this upstream - Will retry as new upstream at %s", STUB_DEBUG_DAEMON, upstream->addr_str, asctime(gmtime(&upstream->conn_retry_time))); -#endif } // Reset per connection counters upstream->queries_sent = 0; @@ -1366,6 +1385,11 @@ getdns_context_create_with_extended_memory_functions( result->update_callback2 = NULL_update_callback; result->update_userarg = NULL; + result->log.func = NULL; + result->log.userarg = NULL; + result->log.system = 0; + result->log.level = GETDNS_LOG_ERR; + result->mf.mf_arg = userarg; result->mf.mf.ext.malloc = malloc; result->mf.mf.ext.realloc = realloc; @@ -1681,7 +1705,7 @@ getdns_return_t getdns_context_get_update_callback(getdns_context *context, void **userarg, void (**cb)(getdns_context *, getdns_context_code_t, void *)) { - if (!context || !userarg || !cb) + if (!context || userarg || !cb) return GETDNS_RETURN_INVALID_PARAMETER; *userarg = context->update_userarg; @@ -1689,6 +1713,37 @@ getdns_context_get_update_callback(getdns_context *context, void **userarg, return GETDNS_RETURN_GOOD; } +getdns_return_t +getdns_context_set_logfunc(getdns_context *context, void *userarg, + uint64_t system, getdns_loglevel_type level, getdns_logfunc_type log) +{ + if (!context) + return GETDNS_RETURN_INVALID_PARAMETER; + + context->log.func = log; + context->log.userarg = userarg; + context->log.system = system; + context->log.level = level; + if (context->upstreams) { + context->upstreams->log = context->log; + } + return GETDNS_RETURN_GOOD; +} + +void _getdns_context_log(getdns_context *context, uint64_t system, + getdns_loglevel_type level, const char *fmt, ...) +{ + va_list args; + + if (!context || !context->log.func || !(context->log.system & system) + || level > context->log.level) + return; + + va_start(args, fmt); + context->log.func(context->log.userarg, system, level, fmt, args); + va_end(args); +} + #ifdef HAVE_LIBUNBOUND /* * Helpers to set options on the unbound ctx diff --git a/src/context.h b/src/context.h index 21090da1..03164522 100644 --- a/src/context.h +++ b/src/context.h @@ -127,9 +127,7 @@ typedef struct getdns_upstream { socklen_t addr_len; struct sockaddr_storage addr; -#if defined(DAEMON_DEBUG) && DAEMON_DEBUG char addr_str[INET6_ADDRSTRLEN]; -#endif /** * How is this upstream doing over UDP? @@ -238,6 +236,13 @@ typedef struct getdns_upstream { } getdns_upstream; +typedef struct getdns_log_config { + getdns_logfunc_type func; + void *userarg; + uint64_t system; + getdns_loglevel_type level; +} getdns_log_config; + typedef struct getdns_upstreams { struct mem_funcs mf; size_t referenced; @@ -246,6 +251,7 @@ typedef struct getdns_upstreams { size_t current_stateful; uint16_t tls_backoff_time; uint16_t tls_connection_retries; + getdns_log_config log; getdns_upstream upstreams[]; } getdns_upstreams; @@ -296,6 +302,8 @@ struct getdns_context { getdns_update_callback2 update_callback2; void *update_userarg; + getdns_log_config log; + int processing; int destroying; @@ -395,6 +403,13 @@ struct getdns_context { #endif /* HAVE_MDNS_SUPPORT */ }; /* getdns_context */ +void _getdns_upstream_log(getdns_upstream *upstream, uint64_t system, + getdns_loglevel_type level, const char *fmt, ...); + +void _getdns_context_log(getdns_context *context, uint64_t system, + getdns_loglevel_type level, const char *fmt, ...); + + /** internal functions **/ /** * Sets up the unbound contexts with stub or recursive behavior diff --git a/src/getdns/getdns_extra.h.in b/src/getdns/getdns_extra.h.in index 34af7135..91423ffc 100644 --- a/src/getdns/getdns_extra.h.in +++ b/src/getdns/getdns_extra.h.in @@ -39,6 +39,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { @@ -501,13 +502,32 @@ getdns_context_set_tls_query_padding_blocksize(getdns_context *context, uint16_t */ getdns_return_t getdns_context_unset_edns_maximum_udp_payload_size(getdns_context *context); -/** @} - */ - /** - * \addtogroup getdns_context - * @{ - */ + +typedef enum getdns_loglevel_type { + GETDNS_LOG_EMERG = 0, + GETDNS_LOG_ALERT = 1, + GETDNS_LOG_CRIT = 2, + GETDNS_LOG_ERR = 3, + GETDNS_LOG_WARNING = 4, + GETDNS_LOG_NOTICE = 5, + GETDNS_LOG_INFO = 6, + GETDNS_LOG_DEBUG = 7 +} getdns_loglevel_type; + +#define GETDNS_SYSTEM_DAEMON 0x100 +#define GETDNS_SYSTEM_STUB 0x200 +#define GETDNS_SYSTEM_MDNS 0x400 + +typedef void (*getdns_logfunc_type) (void *userarg, uint64_t system, + getdns_loglevel_type, const char *, va_list ap); + +/** + * + */ +getdns_return_t +getdns_context_set_logfunc(getdns_context *context, void *userarg, + uint64_t system, getdns_loglevel_type level, getdns_logfunc_type func); /** * Get the current resolution type setting from this context. diff --git a/src/libgetdns.symbols b/src/libgetdns.symbols index 4df6a989..00b26848 100644 --- a/src/libgetdns.symbols +++ b/src/libgetdns.symbols @@ -55,6 +55,7 @@ getdns_context_set_follow_redirects getdns_context_set_idle_timeout getdns_context_set_limit_outstanding_queries getdns_context_set_listen_addresses +getdns_context_set_logfunc getdns_context_set_memory_functions getdns_context_set_namespaces getdns_context_set_resolution_type diff --git a/src/stub.c b/src/stub.c index f900d35c..5815eff8 100644 --- a/src/stub.c +++ b/src/stub.c @@ -607,12 +607,11 @@ stub_timeout_cb(void *userarg) close(netreq->fd); #endif netreq->upstream->udp_timeouts++; -#if defined(DAEMON_DEBUG) && DAEMON_DEBUG if (netreq->upstream->udp_timeouts % 100 == 0) - DEBUG_DAEMON("%s %-40s : Upstream stats: Transport=UDP - Resp=%d,Timeouts=%d\n", + _getdns_upstream_log(netreq->upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + "%s %-40s : Upstream stats: Transport=UDP - Resp=%d,Timeouts=%d\n", STUB_DEBUG_DAEMON, netreq->upstream->addr_str, (int)netreq->upstream->udp_responses, (int)netreq->upstream->udp_timeouts); -#endif stub_next_upstream(netreq); } else { netreq->upstream->responses_timeouts++; @@ -908,12 +907,11 @@ tls_verify_callback(int preverify_ok, X509_STORE_CTX *ctx) STUB_DEBUG_SETUP_TLS, __FUNC__, upstream->fd, err, X509_verify_cert_error_string(err)); #endif -#if defined(DAEMON_DEBUG) && DAEMON_DEBUG if (!preverify_ok && !upstream->tls_fallback_ok) - DEBUG_DAEMON("%s %-40s : Verify failed : Transport=TLS - *Failure* - (%d) \"%s\"\n", - STUB_DEBUG_DAEMON, upstream->addr_str, err, - X509_verify_cert_error_string(err)); -#endif + _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + "%s %-40s : Verify failed : Transport=TLS - *Failure* - (%d) \"%s\"\n", + STUB_DEBUG_DAEMON, upstream->addr_str, err, + X509_verify_cert_error_string(err)); /* First deal with the hostname authentication done by OpenSSL. */ #ifdef X509_V_ERR_HOSTNAME_MISMATCH @@ -945,11 +943,10 @@ tls_verify_callback(int preverify_ok, X509_STORE_CTX *ctx) if (upstream->tls_fallback_ok) DEBUG_STUB("%s %-35s: FD: %d, WARNING: Proceeding even though pinset validation failed!\n", STUB_DEBUG_SETUP_TLS, __FUNC__, upstream->fd); -#if defined(DAEMON_DEBUG) && DAEMON_DEBUG else - DEBUG_DAEMON("%s %-40s : Conn failed : Transport=TLS - *Failure* - Pinset validation failure\n", - STUB_DEBUG_DAEMON, upstream->addr_str); -#endif + _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + "%s %-40s : Conn failed : Transport=TLS - *Failure* - Pinset validation failure\n", + STUB_DEBUG_DAEMON, upstream->addr_str); } else { /* If we _only_ had a pinset and it is good then force succesful authentication when the cert self-signed @@ -960,10 +957,9 @@ tls_verify_callback(int preverify_ok, X509_STORE_CTX *ctx) preverify_ok = 1; DEBUG_STUB("%s %-35s: FD: %d, Allowing self-signed (%d) cert since pins match\n", STUB_DEBUG_SETUP_TLS, __FUNC__, upstream->fd, err); -#if defined(DAEMON_DEBUG) && DAEMON_DEBUG - DEBUG_DAEMON("%s %-40s : Verify passed : Transport=TLS - Allowing self-signed cert since pins match\n", - STUB_DEBUG_DAEMON, upstream->addr_str); -#endif + _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + "%s %-40s : Verify passed : Transport=TLS - Allowing self-signed cert since pins match\n", + STUB_DEBUG_DAEMON, upstream->addr_str); } } @@ -1474,13 +1470,12 @@ stub_udp_read_cb(void *userarg) netreq->debug_end_time = _getdns_get_time_as_uintt64(); _getdns_netreq_change_state(netreq, NET_REQ_FINISHED); upstream->udp_responses++; -#if defined(DAEMON_DEBUG) && DAEMON_DEBUG if (upstream->udp_responses == 1 || upstream->udp_responses % 100 == 0) - DEBUG_DAEMON("%s %-40s : Upstream stats: Transport=UDP - Resp=%d,Timeouts=%d\n", - STUB_DEBUG_DAEMON, upstream->addr_str, - (int)upstream->udp_responses, (int)upstream->udp_timeouts); -#endif + _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + "%s %-40s : Upstream stats: Transport=UDP - Resp=%d,Timeouts=%d\n", + STUB_DEBUG_DAEMON, upstream->addr_str, + (int)upstream->udp_responses, (int)upstream->udp_timeouts); _getdns_check_dns_req_complete(dnsreq); } @@ -1734,11 +1729,10 @@ upstream_write_cb(void *userarg) case STUB_NO_AUTH: /* Cleaning up after connection or auth check failure. Need to fallback. */ stub_cleanup(netreq); -#if defined(DAEMON_DEBUG) && DAEMON_DEBUG - DEBUG_DAEMON("%s %-40s : Conn closed : Transport=%s - *Failure*\n", - STUB_DEBUG_DAEMON, upstream->addr_str, - (upstream->transport == GETDNS_TRANSPORT_TLS ? "TLS" : "TCP")); -#endif + _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + "%s %-40s : Conn closed : Transport=%s - *Failure*\n", + STUB_DEBUG_DAEMON, upstream->addr_str, + (upstream->transport == GETDNS_TRANSPORT_TLS ? "TLS" : "TCP")); if (fallback_on_write(netreq) == STUB_TCP_ERROR) { /* TODO: Need new state to report transport unavailable*/ _getdns_netreq_change_state(netreq, NET_REQ_ERRORED); @@ -1890,10 +1884,9 @@ upstream_select_stateful(getdns_network_req *netreq, getdns_transport_list_t tra if (upstreams->upstreams[i].conn_state == GETDNS_CONN_BACKOFF && upstreams->upstreams[i].conn_retry_time < now) { upstreams->upstreams[i].conn_state = GETDNS_CONN_CLOSED; -#if defined(DAEMON_DEBUG) && DAEMON_DEBUG - DEBUG_DAEMON("%s %-40s : Re-instating upstream\n", + _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + "%s %-40s : Re-instating upstream\n", STUB_DEBUG_DAEMON, upstreams->upstreams[i].addr_str); -#endif } } @@ -2024,11 +2017,10 @@ upstream_connect(getdns_upstream *upstream, getdns_transport_list_t transport, upstream->tls_hs_state = GETDNS_HS_WRITE; } upstream->conn_state = GETDNS_CONN_SETUP; -#if defined(DAEMON_DEBUG) && DAEMON_DEBUG - DEBUG_DAEMON("%s %-40s : Conn init : Transport=%s - Profile=%s\n", STUB_DEBUG_DAEMON, - upstream->addr_str, transport == GETDNS_TRANSPORT_TLS ? "TLS":"TCP", - dnsreq->context->tls_auth_min == GETDNS_AUTHENTICATION_NONE ? "Opportunistic":"Strict"); -#endif + _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + "%s %-40s : Conn init : Transport=%s - Profile=%s\n", STUB_DEBUG_DAEMON, + upstream->addr_str, transport == GETDNS_TRANSPORT_TLS ? "TLS":"TCP", + dnsreq->context->tls_auth_min == GETDNS_AUTHENTICATION_NONE ? "Opportunistic":"Strict"); break; default: return -1; @@ -2094,10 +2086,9 @@ upstream_find_for_netreq(getdns_network_req *netreq) } /* Handle better, will give generic error*/ DEBUG_STUB("%s %-35s: MSG: %p No valid upstream! \n", STUB_DEBUG_SCHEDULE, __FUNC__, (void*)netreq); -#if defined(DAEMON_DEBUG) && DAEMON_DEBUG - DEBUG_DAEMON("%s *FAILURE* no valid transports or upstreams available!\n", - STUB_DEBUG_DAEMON); -#endif + _getdns_context_log(netreq->owner->context, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + "%s *FAILURE* no valid transports or upstreams available!\n", + STUB_DEBUG_DAEMON); return -1; } diff --git a/src/tools/getdns_query.c b/src/tools/getdns_query.c index ef7bd1b5..76548d32 100644 --- a/src/tools/getdns_query.c +++ b/src/tools/getdns_query.c @@ -1619,6 +1619,14 @@ error: getdns_dict_destroy(response); } +static void stubby_log(void *userarg, uint64_t system, + getdns_loglevel_type level, const char *fmt, va_list ap) +{ + (void)userarg; (void)system; (void)level; + (void) vfprintf(stderr, fmt, ap); +} + + /** * \brief A wrapper script for command line testing of getdns * getdns_query -h provides details of the available options (the syntax is @@ -1668,6 +1676,9 @@ main(int argc, char **argv) (void) parse_config_file(home_stubby_conf_fn, 0); } clear_listen_list_on_arg = 1; + + (void) getdns_context_set_logfunc(context, NULL, + GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, stubby_log); } if ((r = parse_args(argc, argv))) goto done_destroy_context; From b0c55d540f2a3293282bc7bb6557acee10fa4378 Mon Sep 17 00:00:00 2001 From: Melinda Shore Date: Mon, 26 Jun 2017 17:17:16 -0800 Subject: [PATCH 03/10] Basic Dockerfile for stubby. --- src/tools/Dockerfile | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/tools/Dockerfile diff --git a/src/tools/Dockerfile b/src/tools/Dockerfile new file mode 100644 index 00000000..9ae731a3 --- /dev/null +++ b/src/tools/Dockerfile @@ -0,0 +1,42 @@ +FROM ubuntu:16.04 +MAINTAINER Melinda Shore + +RUN set -ex \ + && apt-get update \ + && apt-get install -y curl \ + && apt-get install -y git \ + && apt-get install -y wget \ + && apt-get install -y libssl-dev \ + && curl -fOSL "https://unbound.net/downloads/unbound-1.6.3.tar.gz" \ + && mkdir -p /usr/src/unbound \ + && tar -xzC /usr/src/unbound --strip-components=1 -f unbound-1.6.3.tar.gz \ + && rm unbound-1.6.3.tar.gz \ + && apt-get -y install libidn11-dev \ + && apt-get -y install python-dev \ + && apt-get -y install make \ + && apt-get install -y automake autoconf libtool \ + && apt-get install -y shtool \ + && cd /usr/src/unbound \ + && ./configure \ + && make \ + && make install \ + && ldconfig \ + && cd /usr/src \ + && git clone https://github.com/getdnsapi/getdns.git \ + && cd /usr/src/getdns \ + && git checkout release/1.1.1 \ + && git submodule update --init \ + && libtoolize -ci \ + && autoreconf -fi \ + && ./configure --enable-debug-daemon \ + && make \ + && make install \ + && ldconfig \ + && cp src/tools/stubby.conf /etc \ + && mkdir -p /etc/unbound \ + && cd /etc/unbound \ + && wget http://www.nomountain.net/getdns-root.key + +EXPOSE 53 + +CMD ["/usr/local/bin/stubby"] From 195f4c59c850c0abd3995cfac26e5f7a3e78f275 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Tue, 27 Jun 2017 07:49:01 +0200 Subject: [PATCH 04/10] Fix for the constants declaration issue --- src/const-info.c | 196 +++++++++++++++++++---------------- src/getdns/getdns_extra.h.in | 19 +++- src/mk-const-info.c.sh | 2 +- 3 files changed, 125 insertions(+), 92 deletions(-) diff --git a/src/const-info.c b/src/const-info.c index 563574d1..25716cdf 100644 --- a/src/const-info.c +++ b/src/const-info.c @@ -9,94 +9,103 @@ static struct const_info consts_info[] = { { -1, NULL, "/* */" }, - { 0, "GETDNS_RETURN_GOOD", GETDNS_RETURN_GOOD_TEXT }, - { 1, "GETDNS_RETURN_GENERIC_ERROR", GETDNS_RETURN_GENERIC_ERROR_TEXT }, - { 300, "GETDNS_RETURN_BAD_DOMAIN_NAME", GETDNS_RETURN_BAD_DOMAIN_NAME_TEXT }, - { 301, "GETDNS_RETURN_BAD_CONTEXT", GETDNS_RETURN_BAD_CONTEXT_TEXT }, - { 302, "GETDNS_RETURN_CONTEXT_UPDATE_FAIL", GETDNS_RETURN_CONTEXT_UPDATE_FAIL_TEXT }, - { 303, "GETDNS_RETURN_UNKNOWN_TRANSACTION", GETDNS_RETURN_UNKNOWN_TRANSACTION_TEXT }, - { 304, "GETDNS_RETURN_NO_SUCH_LIST_ITEM", GETDNS_RETURN_NO_SUCH_LIST_ITEM_TEXT }, - { 305, "GETDNS_RETURN_NO_SUCH_DICT_NAME", GETDNS_RETURN_NO_SUCH_DICT_NAME_TEXT }, - { 306, "GETDNS_RETURN_WRONG_TYPE_REQUESTED", GETDNS_RETURN_WRONG_TYPE_REQUESTED_TEXT }, - { 307, "GETDNS_RETURN_NO_SUCH_EXTENSION", GETDNS_RETURN_NO_SUCH_EXTENSION_TEXT }, - { 308, "GETDNS_RETURN_EXTENSION_MISFORMAT", GETDNS_RETURN_EXTENSION_MISFORMAT_TEXT }, - { 309, "GETDNS_RETURN_DNSSEC_WITH_STUB_DISALLOWED", GETDNS_RETURN_DNSSEC_WITH_STUB_DISALLOWED_TEXT }, - { 310, "GETDNS_RETURN_MEMORY_ERROR", GETDNS_RETURN_MEMORY_ERROR_TEXT }, - { 311, "GETDNS_RETURN_INVALID_PARAMETER", GETDNS_RETURN_INVALID_PARAMETER_TEXT }, - { 312, "GETDNS_RETURN_NOT_IMPLEMENTED", GETDNS_RETURN_NOT_IMPLEMENTED_TEXT }, - { 398, "GETDNS_RETURN_NO_UPSTREAM_AVAILABLE", GETDNS_RETURN_NO_UPSTREAM_AVAILABLE_TEXT }, - { 399, "GETDNS_RETURN_NEED_MORE_SPACE", GETDNS_RETURN_NEED_MORE_SPACE_TEXT }, - { 400, "GETDNS_DNSSEC_SECURE", GETDNS_DNSSEC_SECURE_TEXT }, - { 401, "GETDNS_DNSSEC_BOGUS", GETDNS_DNSSEC_BOGUS_TEXT }, - { 402, "GETDNS_DNSSEC_INDETERMINATE", GETDNS_DNSSEC_INDETERMINATE_TEXT }, - { 403, "GETDNS_DNSSEC_INSECURE", GETDNS_DNSSEC_INSECURE_TEXT }, - { 404, "GETDNS_DNSSEC_NOT_PERFORMED", GETDNS_DNSSEC_NOT_PERFORMED_TEXT }, - { 500, "GETDNS_NAMESPACE_DNS", GETDNS_NAMESPACE_DNS_TEXT }, - { 501, "GETDNS_NAMESPACE_LOCALNAMES", GETDNS_NAMESPACE_LOCALNAMES_TEXT }, - { 502, "GETDNS_NAMESPACE_NETBIOS", GETDNS_NAMESPACE_NETBIOS_TEXT }, - { 503, "GETDNS_NAMESPACE_MDNS", GETDNS_NAMESPACE_MDNS_TEXT }, - { 504, "GETDNS_NAMESPACE_NIS", GETDNS_NAMESPACE_NIS_TEXT }, - { 520, "GETDNS_RESOLUTION_STUB", GETDNS_RESOLUTION_STUB_TEXT }, - { 521, "GETDNS_RESOLUTION_RECURSING", GETDNS_RESOLUTION_RECURSING_TEXT }, - { 530, "GETDNS_REDIRECTS_FOLLOW", GETDNS_REDIRECTS_FOLLOW_TEXT }, - { 531, "GETDNS_REDIRECTS_DO_NOT_FOLLOW", GETDNS_REDIRECTS_DO_NOT_FOLLOW_TEXT }, - { 540, "GETDNS_TRANSPORT_UDP_FIRST_AND_FALL_BACK_TO_TCP", GETDNS_TRANSPORT_UDP_FIRST_AND_FALL_BACK_TO_TCP_TEXT }, - { 541, "GETDNS_TRANSPORT_UDP_ONLY", GETDNS_TRANSPORT_UDP_ONLY_TEXT }, - { 542, "GETDNS_TRANSPORT_TCP_ONLY", GETDNS_TRANSPORT_TCP_ONLY_TEXT }, - { 543, "GETDNS_TRANSPORT_TCP_ONLY_KEEP_CONNECTIONS_OPEN", GETDNS_TRANSPORT_TCP_ONLY_KEEP_CONNECTIONS_OPEN_TEXT }, - { 544, "GETDNS_TRANSPORT_TLS_ONLY_KEEP_CONNECTIONS_OPEN", GETDNS_TRANSPORT_TLS_ONLY_KEEP_CONNECTIONS_OPEN_TEXT }, - { 545, "GETDNS_TRANSPORT_TLS_FIRST_AND_FALL_BACK_TO_TCP_KEEP_CONNECTIONS_OPEN", GETDNS_TRANSPORT_TLS_FIRST_AND_FALL_BACK_TO_TCP_KEEP_CONNECTIONS_OPEN_TEXT }, - { 550, "GETDNS_APPEND_NAME_ALWAYS", GETDNS_APPEND_NAME_ALWAYS_TEXT }, - { 551, "GETDNS_APPEND_NAME_ONLY_TO_SINGLE_LABEL_AFTER_FAILURE", GETDNS_APPEND_NAME_ONLY_TO_SINGLE_LABEL_AFTER_FAILURE_TEXT }, - { 552, "GETDNS_APPEND_NAME_ONLY_TO_MULTIPLE_LABEL_NAME_AFTER_FAILURE", GETDNS_APPEND_NAME_ONLY_TO_MULTIPLE_LABEL_NAME_AFTER_FAILURE_TEXT }, - { 553, "GETDNS_APPEND_NAME_NEVER", GETDNS_APPEND_NAME_NEVER_TEXT }, - { 554, "GETDNS_APPEND_NAME_TO_SINGLE_LABEL_FIRST", GETDNS_APPEND_NAME_TO_SINGLE_LABEL_FIRST_TEXT }, - { 600, "GETDNS_CONTEXT_CODE_NAMESPACES", GETDNS_CONTEXT_CODE_NAMESPACES_TEXT }, - { 601, "GETDNS_CONTEXT_CODE_RESOLUTION_TYPE", GETDNS_CONTEXT_CODE_RESOLUTION_TYPE_TEXT }, - { 602, "GETDNS_CONTEXT_CODE_FOLLOW_REDIRECTS", GETDNS_CONTEXT_CODE_FOLLOW_REDIRECTS_TEXT }, - { 603, "GETDNS_CONTEXT_CODE_UPSTREAM_RECURSIVE_SERVERS", GETDNS_CONTEXT_CODE_UPSTREAM_RECURSIVE_SERVERS_TEXT }, - { 604, "GETDNS_CONTEXT_CODE_DNS_ROOT_SERVERS", GETDNS_CONTEXT_CODE_DNS_ROOT_SERVERS_TEXT }, - { 605, "GETDNS_CONTEXT_CODE_DNS_TRANSPORT", GETDNS_CONTEXT_CODE_DNS_TRANSPORT_TEXT }, - { 606, "GETDNS_CONTEXT_CODE_LIMIT_OUTSTANDING_QUERIES", GETDNS_CONTEXT_CODE_LIMIT_OUTSTANDING_QUERIES_TEXT }, - { 607, "GETDNS_CONTEXT_CODE_APPEND_NAME", GETDNS_CONTEXT_CODE_APPEND_NAME_TEXT }, - { 608, "GETDNS_CONTEXT_CODE_SUFFIX", GETDNS_CONTEXT_CODE_SUFFIX_TEXT }, - { 609, "GETDNS_CONTEXT_CODE_DNSSEC_TRUST_ANCHORS", GETDNS_CONTEXT_CODE_DNSSEC_TRUST_ANCHORS_TEXT }, - { 610, "GETDNS_CONTEXT_CODE_EDNS_MAXIMUM_UDP_PAYLOAD_SIZE", GETDNS_CONTEXT_CODE_EDNS_MAXIMUM_UDP_PAYLOAD_SIZE_TEXT }, - { 611, "GETDNS_CONTEXT_CODE_EDNS_EXTENDED_RCODE", GETDNS_CONTEXT_CODE_EDNS_EXTENDED_RCODE_TEXT }, - { 612, "GETDNS_CONTEXT_CODE_EDNS_VERSION", GETDNS_CONTEXT_CODE_EDNS_VERSION_TEXT }, - { 613, "GETDNS_CONTEXT_CODE_EDNS_DO_BIT", GETDNS_CONTEXT_CODE_EDNS_DO_BIT_TEXT }, - { 614, "GETDNS_CONTEXT_CODE_DNSSEC_ALLOWED_SKEW", GETDNS_CONTEXT_CODE_DNSSEC_ALLOWED_SKEW_TEXT }, - { 615, "GETDNS_CONTEXT_CODE_MEMORY_FUNCTIONS", GETDNS_CONTEXT_CODE_MEMORY_FUNCTIONS_TEXT }, - { 616, "GETDNS_CONTEXT_CODE_TIMEOUT", GETDNS_CONTEXT_CODE_TIMEOUT_TEXT }, - { 617, "GETDNS_CONTEXT_CODE_IDLE_TIMEOUT", GETDNS_CONTEXT_CODE_IDLE_TIMEOUT_TEXT }, - { 618, "GETDNS_CONTEXT_CODE_TLS_AUTHENTICATION", GETDNS_CONTEXT_CODE_TLS_AUTHENTICATION_TEXT }, - { 619, "GETDNS_CONTEXT_CODE_EDNS_CLIENT_SUBNET_PRIVATE", GETDNS_CONTEXT_CODE_EDNS_CLIENT_SUBNET_PRIVATE_TEXT }, - { 620, "GETDNS_CONTEXT_CODE_TLS_QUERY_PADDING_BLOCKSIZE", GETDNS_CONTEXT_CODE_TLS_QUERY_PADDING_BLOCKSIZE_TEXT }, - { 621, "GETDNS_CONTEXT_CODE_PUBKEY_PINSET", GETDNS_CONTEXT_CODE_PUBKEY_PINSET_TEXT }, - { 622, "GETDNS_CONTEXT_CODE_ROUND_ROBIN_UPSTREAMS", GETDNS_CONTEXT_CODE_ROUND_ROBIN_UPSTREAMS_TEXT }, - { 623, "GETDNS_CONTEXT_CODE_TLS_BACKOFF_TIME", GETDNS_CONTEXT_CODE_TLS_BACKOFF_TIME_TEXT }, - { 624, "GETDNS_CONTEXT_CODE_TLS_CONNECTION_RETRIES", GETDNS_CONTEXT_CODE_TLS_CONNECTION_RETRIES_TEXT }, - { 700, "GETDNS_CALLBACK_COMPLETE", GETDNS_CALLBACK_COMPLETE_TEXT }, - { 701, "GETDNS_CALLBACK_CANCEL", GETDNS_CALLBACK_CANCEL_TEXT }, - { 702, "GETDNS_CALLBACK_TIMEOUT", GETDNS_CALLBACK_TIMEOUT_TEXT }, - { 703, "GETDNS_CALLBACK_ERROR", GETDNS_CALLBACK_ERROR_TEXT }, - { 800, "GETDNS_NAMETYPE_DNS", GETDNS_NAMETYPE_DNS_TEXT }, - { 801, "GETDNS_NAMETYPE_WINS", GETDNS_NAMETYPE_WINS_TEXT }, - { 900, "GETDNS_RESPSTATUS_GOOD", GETDNS_RESPSTATUS_GOOD_TEXT }, - { 901, "GETDNS_RESPSTATUS_NO_NAME", GETDNS_RESPSTATUS_NO_NAME_TEXT }, - { 902, "GETDNS_RESPSTATUS_ALL_TIMEOUT", GETDNS_RESPSTATUS_ALL_TIMEOUT_TEXT }, - { 903, "GETDNS_RESPSTATUS_NO_SECURE_ANSWERS", GETDNS_RESPSTATUS_NO_SECURE_ANSWERS_TEXT }, - { 904, "GETDNS_RESPSTATUS_ALL_BOGUS_ANSWERS", GETDNS_RESPSTATUS_ALL_BOGUS_ANSWERS_TEXT }, - { 1000, "GETDNS_EXTENSION_TRUE", GETDNS_EXTENSION_TRUE_TEXT }, - { 1001, "GETDNS_EXTENSION_FALSE", GETDNS_EXTENSION_FALSE_TEXT }, - { 1100, "GETDNS_BAD_DNS_CNAME_IN_TARGET", GETDNS_BAD_DNS_CNAME_IN_TARGET_TEXT }, - { 1101, "GETDNS_BAD_DNS_ALL_NUMERIC_LABEL", GETDNS_BAD_DNS_ALL_NUMERIC_LABEL_TEXT }, - { 1102, "GETDNS_BAD_DNS_CNAME_RETURNED_FOR_OTHER_TYPE", GETDNS_BAD_DNS_CNAME_RETURNED_FOR_OTHER_TYPE_TEXT }, - { 1200, "GETDNS_TRANSPORT_UDP", GETDNS_TRANSPORT_UDP_TEXT }, - { 1201, "GETDNS_TRANSPORT_TCP", GETDNS_TRANSPORT_TCP_TEXT }, - { 1202, "GETDNS_TRANSPORT_TLS", GETDNS_TRANSPORT_TLS_TEXT }, - { 1300, "GETDNS_AUTHENTICATION_NONE", GETDNS_AUTHENTICATION_NONE_TEXT }, - { 1301, "GETDNS_AUTHENTICATION_REQUIRED", GETDNS_AUTHENTICATION_REQUIRED_TEXT }, + { 0, "GETDNS_RETURN_GOOD", GETDNS_RETURN_GOOD_TEXT }, + { 1, "GETDNS_RETURN_GENERIC_ERROR", GETDNS_RETURN_GENERIC_ERROR_TEXT }, + { 2, "GETDNS_LOG_CRIT", GETDNS_LOG_CRIT_TEXT }, + { 3, "GETDNS_LOG_ERR", GETDNS_LOG_ERR_TEXT }, + { 4, "GETDNS_LOG_WARNING", GETDNS_LOG_WARNING_TEXT }, + { 5, "GETDNS_LOG_NOTICE", GETDNS_LOG_NOTICE_TEXT }, + { 6, "GETDNS_LOG_INFO", GETDNS_LOG_INFO_TEXT }, + { 7, "GETDNS_LOG_DEBUG", GETDNS_LOG_DEBUG_TEXT }, + { 300, "GETDNS_RETURN_BAD_DOMAIN_NAME", GETDNS_RETURN_BAD_DOMAIN_NAME_TEXT }, + { 301, "GETDNS_RETURN_BAD_CONTEXT", GETDNS_RETURN_BAD_CONTEXT_TEXT }, + { 302, "GETDNS_RETURN_CONTEXT_UPDATE_FAIL", GETDNS_RETURN_CONTEXT_UPDATE_FAIL_TEXT }, + { 303, "GETDNS_RETURN_UNKNOWN_TRANSACTION", GETDNS_RETURN_UNKNOWN_TRANSACTION_TEXT }, + { 304, "GETDNS_RETURN_NO_SUCH_LIST_ITEM", GETDNS_RETURN_NO_SUCH_LIST_ITEM_TEXT }, + { 305, "GETDNS_RETURN_NO_SUCH_DICT_NAME", GETDNS_RETURN_NO_SUCH_DICT_NAME_TEXT }, + { 306, "GETDNS_RETURN_WRONG_TYPE_REQUESTED", GETDNS_RETURN_WRONG_TYPE_REQUESTED_TEXT }, + { 307, "GETDNS_RETURN_NO_SUCH_EXTENSION", GETDNS_RETURN_NO_SUCH_EXTENSION_TEXT }, + { 308, "GETDNS_RETURN_EXTENSION_MISFORMAT", GETDNS_RETURN_EXTENSION_MISFORMAT_TEXT }, + { 309, "GETDNS_RETURN_DNSSEC_WITH_STUB_DISALLOWED", GETDNS_RETURN_DNSSEC_WITH_STUB_DISALLOWED_TEXT }, + { 310, "GETDNS_RETURN_MEMORY_ERROR", GETDNS_RETURN_MEMORY_ERROR_TEXT }, + { 311, "GETDNS_RETURN_INVALID_PARAMETER", GETDNS_RETURN_INVALID_PARAMETER_TEXT }, + { 312, "GETDNS_RETURN_NOT_IMPLEMENTED", GETDNS_RETURN_NOT_IMPLEMENTED_TEXT }, + { 398, "GETDNS_RETURN_NO_UPSTREAM_AVAILABLE", GETDNS_RETURN_NO_UPSTREAM_AVAILABLE_TEXT }, + { 399, "GETDNS_RETURN_NEED_MORE_SPACE", GETDNS_RETURN_NEED_MORE_SPACE_TEXT }, + { 400, "GETDNS_DNSSEC_SECURE", GETDNS_DNSSEC_SECURE_TEXT }, + { 401, "GETDNS_DNSSEC_BOGUS", GETDNS_DNSSEC_BOGUS_TEXT }, + { 402, "GETDNS_DNSSEC_INDETERMINATE", GETDNS_DNSSEC_INDETERMINATE_TEXT }, + { 403, "GETDNS_DNSSEC_INSECURE", GETDNS_DNSSEC_INSECURE_TEXT }, + { 404, "GETDNS_DNSSEC_NOT_PERFORMED", GETDNS_DNSSEC_NOT_PERFORMED_TEXT }, + { 500, "GETDNS_NAMESPACE_DNS", GETDNS_NAMESPACE_DNS_TEXT }, + { 501, "GETDNS_NAMESPACE_LOCALNAMES", GETDNS_NAMESPACE_LOCALNAMES_TEXT }, + { 502, "GETDNS_NAMESPACE_NETBIOS", GETDNS_NAMESPACE_NETBIOS_TEXT }, + { 503, "GETDNS_NAMESPACE_MDNS", GETDNS_NAMESPACE_MDNS_TEXT }, + { 504, "GETDNS_NAMESPACE_NIS", GETDNS_NAMESPACE_NIS_TEXT }, + { 520, "GETDNS_RESOLUTION_STUB", GETDNS_RESOLUTION_STUB_TEXT }, + { 521, "GETDNS_RESOLUTION_RECURSING", GETDNS_RESOLUTION_RECURSING_TEXT }, + { 530, "GETDNS_REDIRECTS_FOLLOW", GETDNS_REDIRECTS_FOLLOW_TEXT }, + { 531, "GETDNS_REDIRECTS_DO_NOT_FOLLOW", GETDNS_REDIRECTS_DO_NOT_FOLLOW_TEXT }, + { 540, "GETDNS_TRANSPORT_UDP_FIRST_AND_FALL_BACK_TO_TCP", GETDNS_TRANSPORT_UDP_FIRST_AND_FALL_BACK_TO_TCP_TEXT }, + { 541, "GETDNS_TRANSPORT_UDP_ONLY", GETDNS_TRANSPORT_UDP_ONLY_TEXT }, + { 542, "GETDNS_TRANSPORT_TCP_ONLY", GETDNS_TRANSPORT_TCP_ONLY_TEXT }, + { 543, "GETDNS_TRANSPORT_TCP_ONLY_KEEP_CONNECTIONS_OPEN", GETDNS_TRANSPORT_TCP_ONLY_KEEP_CONNECTIONS_OPEN_TEXT }, + { 544, "GETDNS_TRANSPORT_TLS_ONLY_KEEP_CONNECTIONS_OPEN", GETDNS_TRANSPORT_TLS_ONLY_KEEP_CONNECTIONS_OPEN_TEXT }, + { 545, "GETDNS_TRANSPORT_TLS_FIRST_AND_FALL_BACK_TO_TCP_KEEP_CONNECTIONS_OPEN", GETDNS_TRANSPORT_TLS_FIRST_AND_FALL_BACK_TO_TCP_KEEP_CONNECTIONS_OPEN_TEXT }, + { 550, "GETDNS_APPEND_NAME_ALWAYS", GETDNS_APPEND_NAME_ALWAYS_TEXT }, + { 551, "GETDNS_APPEND_NAME_ONLY_TO_SINGLE_LABEL_AFTER_FAILURE", GETDNS_APPEND_NAME_ONLY_TO_SINGLE_LABEL_AFTER_FAILURE_TEXT }, + { 552, "GETDNS_APPEND_NAME_ONLY_TO_MULTIPLE_LABEL_NAME_AFTER_FAILURE", GETDNS_APPEND_NAME_ONLY_TO_MULTIPLE_LABEL_NAME_AFTER_FAILURE_TEXT }, + { 553, "GETDNS_APPEND_NAME_NEVER", GETDNS_APPEND_NAME_NEVER_TEXT }, + { 554, "GETDNS_APPEND_NAME_TO_SINGLE_LABEL_FIRST", GETDNS_APPEND_NAME_TO_SINGLE_LABEL_FIRST_TEXT }, + { 600, "GETDNS_CONTEXT_CODE_NAMESPACES", GETDNS_CONTEXT_CODE_NAMESPACES_TEXT }, + { 601, "GETDNS_CONTEXT_CODE_RESOLUTION_TYPE", GETDNS_CONTEXT_CODE_RESOLUTION_TYPE_TEXT }, + { 602, "GETDNS_CONTEXT_CODE_FOLLOW_REDIRECTS", GETDNS_CONTEXT_CODE_FOLLOW_REDIRECTS_TEXT }, + { 603, "GETDNS_CONTEXT_CODE_UPSTREAM_RECURSIVE_SERVERS", GETDNS_CONTEXT_CODE_UPSTREAM_RECURSIVE_SERVERS_TEXT }, + { 604, "GETDNS_CONTEXT_CODE_DNS_ROOT_SERVERS", GETDNS_CONTEXT_CODE_DNS_ROOT_SERVERS_TEXT }, + { 605, "GETDNS_CONTEXT_CODE_DNS_TRANSPORT", GETDNS_CONTEXT_CODE_DNS_TRANSPORT_TEXT }, + { 606, "GETDNS_CONTEXT_CODE_LIMIT_OUTSTANDING_QUERIES", GETDNS_CONTEXT_CODE_LIMIT_OUTSTANDING_QUERIES_TEXT }, + { 607, "GETDNS_CONTEXT_CODE_APPEND_NAME", GETDNS_CONTEXT_CODE_APPEND_NAME_TEXT }, + { 608, "GETDNS_CONTEXT_CODE_SUFFIX", GETDNS_CONTEXT_CODE_SUFFIX_TEXT }, + { 609, "GETDNS_CONTEXT_CODE_DNSSEC_TRUST_ANCHORS", GETDNS_CONTEXT_CODE_DNSSEC_TRUST_ANCHORS_TEXT }, + { 610, "GETDNS_CONTEXT_CODE_EDNS_MAXIMUM_UDP_PAYLOAD_SIZE", GETDNS_CONTEXT_CODE_EDNS_MAXIMUM_UDP_PAYLOAD_SIZE_TEXT }, + { 611, "GETDNS_CONTEXT_CODE_EDNS_EXTENDED_RCODE", GETDNS_CONTEXT_CODE_EDNS_EXTENDED_RCODE_TEXT }, + { 612, "GETDNS_CONTEXT_CODE_EDNS_VERSION", GETDNS_CONTEXT_CODE_EDNS_VERSION_TEXT }, + { 613, "GETDNS_CONTEXT_CODE_EDNS_DO_BIT", GETDNS_CONTEXT_CODE_EDNS_DO_BIT_TEXT }, + { 614, "GETDNS_CONTEXT_CODE_DNSSEC_ALLOWED_SKEW", GETDNS_CONTEXT_CODE_DNSSEC_ALLOWED_SKEW_TEXT }, + { 615, "GETDNS_CONTEXT_CODE_MEMORY_FUNCTIONS", GETDNS_CONTEXT_CODE_MEMORY_FUNCTIONS_TEXT }, + { 616, "GETDNS_CONTEXT_CODE_TIMEOUT", GETDNS_CONTEXT_CODE_TIMEOUT_TEXT }, + { 617, "GETDNS_CONTEXT_CODE_IDLE_TIMEOUT", GETDNS_CONTEXT_CODE_IDLE_TIMEOUT_TEXT }, + { 618, "GETDNS_CONTEXT_CODE_TLS_AUTHENTICATION", GETDNS_CONTEXT_CODE_TLS_AUTHENTICATION_TEXT }, + { 619, "GETDNS_CONTEXT_CODE_EDNS_CLIENT_SUBNET_PRIVATE", GETDNS_CONTEXT_CODE_EDNS_CLIENT_SUBNET_PRIVATE_TEXT }, + { 620, "GETDNS_CONTEXT_CODE_TLS_QUERY_PADDING_BLOCKSIZE", GETDNS_CONTEXT_CODE_TLS_QUERY_PADDING_BLOCKSIZE_TEXT }, + { 621, "GETDNS_CONTEXT_CODE_PUBKEY_PINSET", GETDNS_CONTEXT_CODE_PUBKEY_PINSET_TEXT }, + { 622, "GETDNS_CONTEXT_CODE_ROUND_ROBIN_UPSTREAMS", GETDNS_CONTEXT_CODE_ROUND_ROBIN_UPSTREAMS_TEXT }, + { 623, "GETDNS_CONTEXT_CODE_TLS_BACKOFF_TIME", GETDNS_CONTEXT_CODE_TLS_BACKOFF_TIME_TEXT }, + { 624, "GETDNS_CONTEXT_CODE_TLS_CONNECTION_RETRIES", GETDNS_CONTEXT_CODE_TLS_CONNECTION_RETRIES_TEXT }, + { 700, "GETDNS_CALLBACK_COMPLETE", GETDNS_CALLBACK_COMPLETE_TEXT }, + { 701, "GETDNS_CALLBACK_CANCEL", GETDNS_CALLBACK_CANCEL_TEXT }, + { 702, "GETDNS_CALLBACK_TIMEOUT", GETDNS_CALLBACK_TIMEOUT_TEXT }, + { 703, "GETDNS_CALLBACK_ERROR", GETDNS_CALLBACK_ERROR_TEXT }, + { 800, "GETDNS_NAMETYPE_DNS", GETDNS_NAMETYPE_DNS_TEXT }, + { 801, "GETDNS_NAMETYPE_WINS", GETDNS_NAMETYPE_WINS_TEXT }, + { 900, "GETDNS_RESPSTATUS_GOOD", GETDNS_RESPSTATUS_GOOD_TEXT }, + { 901, "GETDNS_RESPSTATUS_NO_NAME", GETDNS_RESPSTATUS_NO_NAME_TEXT }, + { 902, "GETDNS_RESPSTATUS_ALL_TIMEOUT", GETDNS_RESPSTATUS_ALL_TIMEOUT_TEXT }, + { 903, "GETDNS_RESPSTATUS_NO_SECURE_ANSWERS", GETDNS_RESPSTATUS_NO_SECURE_ANSWERS_TEXT }, + { 904, "GETDNS_RESPSTATUS_ALL_BOGUS_ANSWERS", GETDNS_RESPSTATUS_ALL_BOGUS_ANSWERS_TEXT }, + { 1000, "GETDNS_EXTENSION_TRUE", GETDNS_EXTENSION_TRUE_TEXT }, + { 1001, "GETDNS_EXTENSION_FALSE", GETDNS_EXTENSION_FALSE_TEXT }, + { 1100, "GETDNS_BAD_DNS_CNAME_IN_TARGET", GETDNS_BAD_DNS_CNAME_IN_TARGET_TEXT }, + { 1101, "GETDNS_BAD_DNS_ALL_NUMERIC_LABEL", GETDNS_BAD_DNS_ALL_NUMERIC_LABEL_TEXT }, + { 1102, "GETDNS_BAD_DNS_CNAME_RETURNED_FOR_OTHER_TYPE", GETDNS_BAD_DNS_CNAME_RETURNED_FOR_OTHER_TYPE_TEXT }, + { 1200, "GETDNS_TRANSPORT_UDP", GETDNS_TRANSPORT_UDP_TEXT }, + { 1201, "GETDNS_TRANSPORT_TCP", GETDNS_TRANSPORT_TCP_TEXT }, + { 1202, "GETDNS_TRANSPORT_TLS", GETDNS_TRANSPORT_TLS_TEXT }, + { 1300, "GETDNS_AUTHENTICATION_NONE", GETDNS_AUTHENTICATION_NONE_TEXT }, + { 1301, "GETDNS_AUTHENTICATION_REQUIRED", GETDNS_AUTHENTICATION_REQUIRED_TEXT }, + { 4096, "GETDNS_SYSTEM_DAEMON", GETDNS_SYSTEM_DAEMON_TEXT }, + { 8192, "GETDNS_SYSTEM_STUB", GETDNS_SYSTEM_STUB_TEXT }, + { 16384, "GETDNS_SYSTEM_MDNS", GETDNS_SYSTEM_MDNS_TEXT }, }; static int const_info_cmp(const void *a, const void *b) @@ -175,6 +184,14 @@ static struct const_name_info consts_name_info[] = { { "GETDNS_DNSSEC_SECURE", 400 }, { "GETDNS_EXTENSION_FALSE", 1001 }, { "GETDNS_EXTENSION_TRUE", 1000 }, + { "GETDNS_LOG_ALERT", 1 }, + { "GETDNS_LOG_CRIT", 2 }, + { "GETDNS_LOG_DEBUG", 7 }, + { "GETDNS_LOG_EMERG", 0 }, + { "GETDNS_LOG_ERR", 3 }, + { "GETDNS_LOG_INFO", 6 }, + { "GETDNS_LOG_NOTICE", 5 }, + { "GETDNS_LOG_WARNING", 4 }, { "GETDNS_NAMESPACE_DNS", 500 }, { "GETDNS_NAMESPACE_LOCALNAMES", 501 }, { "GETDNS_NAMESPACE_MDNS", 503 }, @@ -314,6 +331,9 @@ static struct const_name_info consts_name_info[] = { { "GETDNS_RRTYPE_UNSPEC", 103 }, { "GETDNS_RRTYPE_URI", 256 }, { "GETDNS_RRTYPE_WKS", 11 }, + { "GETDNS_SYSTEM_DAEMON", 4096 }, + { "GETDNS_SYSTEM_MDNS", 16384 }, + { "GETDNS_SYSTEM_STUB", 8192 }, { "GETDNS_TRANSPORT_TCP", 1201 }, { "GETDNS_TRANSPORT_TCP_ONLY", 542 }, { "GETDNS_TRANSPORT_TCP_ONLY_KEEP_CONNECTIONS_OPEN", 543 }, diff --git a/src/getdns/getdns_extra.h.in b/src/getdns/getdns_extra.h.in index 91423ffc..49ebc904 100644 --- a/src/getdns/getdns_extra.h.in +++ b/src/getdns/getdns_extra.h.in @@ -515,9 +515,22 @@ typedef enum getdns_loglevel_type { GETDNS_LOG_DEBUG = 7 } getdns_loglevel_type; -#define GETDNS_SYSTEM_DAEMON 0x100 -#define GETDNS_SYSTEM_STUB 0x200 -#define GETDNS_SYSTEM_MDNS 0x400 +#define GETDNS_LOG_EMERG_TEXT "System is unusable" +#define GETDNS_LOG_ALERT_TEXT "Action must be taken immediately" +#define GETDNS_LOG_CRIT_TEXT "Critical conditions" +#define GETDNS_LOG_ERR_TEXT "Error conditions" +#define GETDNS_LOG_WARNING_TEXT "Warning conditions" +#define GETDNS_LOG_NOTICE_TEXT "normal, but significant, condition" +#define GETDNS_LOG_INFO_TEXT "Informational message" +#define GETDNS_LOG_DEBUG_TEXT "Debug-level message" + +#define GETDNS_SYSTEM_DAEMON 4096 +#define GETDNS_SYSTEM_STUB 8192 +#define GETDNS_SYSTEM_MDNS 16384 + +#define GETDNS_SYSTEM_DAEMON_TEXT "Log messages regarding the daemon system" +#define GETDNS_SYSTEM_STUB_TEXT "Log messages regarding the stub system" +#define GETDNS_SYSTEM_MDNS_TEXT "Log messages regarding the mdns system" typedef void (*getdns_logfunc_type) (void *userarg, uint64_t system, getdns_loglevel_type, const char *, va_list ap); diff --git a/src/mk-const-info.c.sh b/src/mk-const-info.c.sh index f9c54323..715719ef 100755 --- a/src/mk-const-info.c.sh +++ b/src/mk-const-info.c.sh @@ -14,7 +14,7 @@ cat > const-info.c << END_OF_HEAD static struct const_info consts_info[] = { { -1, NULL, "/* */" }, END_OF_HEAD -gawk '/^[ ]+GETDNS_[A-Z_]+[ ]+=[ ]+[0-9]+/{ key = sprintf("%4d", $3); consts[key] = $1; }/^#define GETDNS_[A-Z_]+[ ]+[0-9]+/ && !/^#define GETDNS_RRTYPE/ && !/^#define GETDNS_RRCLASS/ && !/^#define GETDNS_OPCODE/ && !/^#define GETDNS_RCODE/ && !/_TEXT/{ key = sprintf("%4d", $3); consts[key] = $2; }/^#define GETDNS_[A-Z_]+[ ]+\(\(getdns_(return|append_name)_t) [0-9]+ \)/{ key = sprintf("%4d", $4); consts[key] = $2; }END{ n = asorti(consts, const_vals); for ( i = 1; i <= n; i++) { val = const_vals[i]; name = consts[val]; print "\t{ "val", \""name"\", "name"_TEXT },"}}' getdns/getdns.h.in getdns/getdns_extra.h.in | sed 's/,,/,/g' >> const-info.c +gawk '/^[ ]+GETDNS_[A-Z_]+[ ]+=[ ]+[0-9]+/{ key = sprintf("%7d", $3); consts[key] = $1; }/^#define GETDNS_[A-Z_]+[ ]+[0-9]+/ && !/^#define GETDNS_RRTYPE/ && !/^#define GETDNS_RRCLASS/ && !/^#define GETDNS_OPCODE/ && !/^#define GETDNS_RCODE/ && !/_TEXT/{ key = sprintf("%7d", $3); consts[key] = $2; }/^#define GETDNS_[A-Z_]+[ ]+\(\(getdns_(return|append_name)_t) [0-9]+ \)/{ key = sprintf("%7d", $4); consts[key] = $2; }END{ n = asorti(consts, const_vals); for ( i = 1; i <= n; i++) { val = const_vals[i]; name = consts[val]; print "\t{ "val", \""name"\", "name"_TEXT },"}}' getdns/getdns_extra.h.in getdns/getdns.h.in | sed 's/,,/,/g' >> const-info.c cat >> const-info.c << END_OF_TAIL }; From 55acf6662c5fa1f0aab077a4d9de05ae97748819 Mon Sep 17 00:00:00 2001 From: Sara Dickinson Date: Wed, 28 Jun 2017 17:58:38 +0100 Subject: [PATCH 05/10] Fix for outputting the address string in the DAEMON log --- src/context.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/context.c b/src/context.c index 737436b8..16aed307 100644 --- a/src/context.c +++ b/src/context.c @@ -242,7 +242,6 @@ add_WIN_cacerts_to_openssl_store(SSL_CTX* tls_ctx) } #endif -#if !defined(STUB_NATIVE_DNSSEC) || (defined(DAEMON_DEBUG) && DAEMON_DEBUG) static uint8_t* upstream_addr(getdns_upstream *upstream) { @@ -250,8 +249,6 @@ upstream_addr(getdns_upstream *upstream) ? (void *)&((struct sockaddr_in*)&upstream->addr)->sin_addr : (void *)&((struct sockaddr_in6*)&upstream->addr)->sin6_addr; } -#endif - static in_port_t upstream_port(getdns_upstream *upstream) @@ -939,10 +936,8 @@ upstream_init(getdns_upstream *upstream, upstream->addr_len = ai->ai_addrlen; (void) memcpy(&upstream->addr, ai->ai_addr, ai->ai_addrlen); -#if defined(DAEMON_DEBUG) && DAEMON_DEBUG inet_ntop(upstream->addr.ss_family, upstream_addr(upstream), upstream->addr_str, INET6_ADDRSTRLEN); -#endif /* How is this upstream doing on connections? */ upstream->conn_completed = 0; From 8235250fb69a32ff9ac82e3bfe68dd0df6e5f780 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Wed, 28 Jun 2017 20:57:53 +0200 Subject: [PATCH 06/10] Rename SYSTEM_DAEMON in LOG_UPSTREAM_STATS --- src/const-info.c | 8 ++------ src/context.c | 8 ++++---- src/getdns/getdns_extra.h.in | 11 +++-------- src/stub.c | 18 +++++++++--------- src/tools/getdns_query.c | 2 +- 5 files changed, 19 insertions(+), 28 deletions(-) diff --git a/src/const-info.c b/src/const-info.c index 25716cdf..d2b5a007 100644 --- a/src/const-info.c +++ b/src/const-info.c @@ -103,9 +103,7 @@ static struct const_info consts_info[] = { { 1202, "GETDNS_TRANSPORT_TLS", GETDNS_TRANSPORT_TLS_TEXT }, { 1300, "GETDNS_AUTHENTICATION_NONE", GETDNS_AUTHENTICATION_NONE_TEXT }, { 1301, "GETDNS_AUTHENTICATION_REQUIRED", GETDNS_AUTHENTICATION_REQUIRED_TEXT }, - { 4096, "GETDNS_SYSTEM_DAEMON", GETDNS_SYSTEM_DAEMON_TEXT }, - { 8192, "GETDNS_SYSTEM_STUB", GETDNS_SYSTEM_STUB_TEXT }, - { 16384, "GETDNS_SYSTEM_MDNS", GETDNS_SYSTEM_MDNS_TEXT }, + { 4096, "GETDNS_LOG_UPSTREAM_STATS", GETDNS_LOG_UPSTREAM_STATS_TEXT }, }; static int const_info_cmp(const void *a, const void *b) @@ -191,6 +189,7 @@ static struct const_name_info consts_name_info[] = { { "GETDNS_LOG_ERR", 3 }, { "GETDNS_LOG_INFO", 6 }, { "GETDNS_LOG_NOTICE", 5 }, + { "GETDNS_LOG_UPSTREAM_STATS", 4096 }, { "GETDNS_LOG_WARNING", 4 }, { "GETDNS_NAMESPACE_DNS", 500 }, { "GETDNS_NAMESPACE_LOCALNAMES", 501 }, @@ -331,9 +330,6 @@ static struct const_name_info consts_name_info[] = { { "GETDNS_RRTYPE_UNSPEC", 103 }, { "GETDNS_RRTYPE_URI", 256 }, { "GETDNS_RRTYPE_WKS", 11 }, - { "GETDNS_SYSTEM_DAEMON", 4096 }, - { "GETDNS_SYSTEM_MDNS", 16384 }, - { "GETDNS_SYSTEM_STUB", 8192 }, { "GETDNS_TRANSPORT_TCP", 1201 }, { "GETDNS_TRANSPORT_TCP_ONLY", 542 }, { "GETDNS_TRANSPORT_TCP_ONLY_KEEP_CONNECTIONS_OPEN", 543 }, diff --git a/src/context.c b/src/context.c index 16aed307..ac01c612 100644 --- a/src/context.c +++ b/src/context.c @@ -747,19 +747,19 @@ _getdns_upstream_shutdown(getdns_upstream *upstream) /* Keep track of the best auth state this upstream has had*/ if (upstream->tls_auth_state > upstream->best_tls_auth_state) upstream->best_tls_auth_state = upstream->tls_auth_state; - _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, "%s %-40s : Conn closed : Transport=%s - Resp=%d,Timeouts=%d,Auth=%s,Keepalive(ms)=%d\n", STUB_DEBUG_DAEMON, upstream->addr_str, (upstream->transport == GETDNS_TRANSPORT_TLS ? "TLS" : "TCP"), (int)upstream->responses_received, (int)upstream->responses_timeouts, _getdns_auth_str(upstream->tls_auth_state), (int)upstream->keepalive_timeout); - _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, "%s %-40s : Upstream stats: Transport=%s - Resp=%d,Timeouts=%d,Best_auth=%s\n", STUB_DEBUG_DAEMON, upstream->addr_str, (upstream->transport == GETDNS_TRANSPORT_TLS ? "TLS" : "TCP"), (int)upstream->total_responses, (int)upstream->total_timeouts, _getdns_auth_str(upstream->best_tls_auth_state)); - _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, "%s %-40s : Upstream stats: Transport=%s - Conns=%d,Conn_fails=%d,Conn_shutdowns=%d,Backoffs=%d\n", STUB_DEBUG_DAEMON, upstream->addr_str, (upstream->transport == GETDNS_TRANSPORT_TLS ? "TLS" : "TCP"), @@ -788,7 +788,7 @@ _getdns_upstream_shutdown(getdns_upstream *upstream) upstream->conn_shutdowns = 0; upstream->conn_backoffs++; - _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, "%s %-40s : !Backing off this upstream - Will retry as new upstream at %s", STUB_DEBUG_DAEMON, upstream->addr_str, asctime(gmtime(&upstream->conn_retry_time))); diff --git a/src/getdns/getdns_extra.h.in b/src/getdns/getdns_extra.h.in index 49ebc904..dbb8eab4 100644 --- a/src/getdns/getdns_extra.h.in +++ b/src/getdns/getdns_extra.h.in @@ -524,15 +524,10 @@ typedef enum getdns_loglevel_type { #define GETDNS_LOG_INFO_TEXT "Informational message" #define GETDNS_LOG_DEBUG_TEXT "Debug-level message" -#define GETDNS_SYSTEM_DAEMON 4096 -#define GETDNS_SYSTEM_STUB 8192 -#define GETDNS_SYSTEM_MDNS 16384 +#define GETDNS_LOG_UPSTREAM_STATS 4096 +#define GETDNS_LOG_UPSTREAM_STATS_TEXT "Log messages about upstream statistics" -#define GETDNS_SYSTEM_DAEMON_TEXT "Log messages regarding the daemon system" -#define GETDNS_SYSTEM_STUB_TEXT "Log messages regarding the stub system" -#define GETDNS_SYSTEM_MDNS_TEXT "Log messages regarding the mdns system" - -typedef void (*getdns_logfunc_type) (void *userarg, uint64_t system, +typedef void (*getdns_logfunc_type) (void *userarg, uint64_t log_systems, getdns_loglevel_type, const char *, va_list ap); /** diff --git a/src/stub.c b/src/stub.c index 5815eff8..f1ddade3 100644 --- a/src/stub.c +++ b/src/stub.c @@ -608,7 +608,7 @@ stub_timeout_cb(void *userarg) #endif netreq->upstream->udp_timeouts++; if (netreq->upstream->udp_timeouts % 100 == 0) - _getdns_upstream_log(netreq->upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + _getdns_upstream_log(netreq->upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, "%s %-40s : Upstream stats: Transport=UDP - Resp=%d,Timeouts=%d\n", STUB_DEBUG_DAEMON, netreq->upstream->addr_str, (int)netreq->upstream->udp_responses, (int)netreq->upstream->udp_timeouts); @@ -908,7 +908,7 @@ tls_verify_callback(int preverify_ok, X509_STORE_CTX *ctx) X509_verify_cert_error_string(err)); #endif if (!preverify_ok && !upstream->tls_fallback_ok) - _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, "%s %-40s : Verify failed : Transport=TLS - *Failure* - (%d) \"%s\"\n", STUB_DEBUG_DAEMON, upstream->addr_str, err, X509_verify_cert_error_string(err)); @@ -944,7 +944,7 @@ tls_verify_callback(int preverify_ok, X509_STORE_CTX *ctx) DEBUG_STUB("%s %-35s: FD: %d, WARNING: Proceeding even though pinset validation failed!\n", STUB_DEBUG_SETUP_TLS, __FUNC__, upstream->fd); else - _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, "%s %-40s : Conn failed : Transport=TLS - *Failure* - Pinset validation failure\n", STUB_DEBUG_DAEMON, upstream->addr_str); } else { @@ -957,7 +957,7 @@ tls_verify_callback(int preverify_ok, X509_STORE_CTX *ctx) preverify_ok = 1; DEBUG_STUB("%s %-35s: FD: %d, Allowing self-signed (%d) cert since pins match\n", STUB_DEBUG_SETUP_TLS, __FUNC__, upstream->fd, err); - _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, "%s %-40s : Verify passed : Transport=TLS - Allowing self-signed cert since pins match\n", STUB_DEBUG_DAEMON, upstream->addr_str); } @@ -1472,7 +1472,7 @@ stub_udp_read_cb(void *userarg) upstream->udp_responses++; if (upstream->udp_responses == 1 || upstream->udp_responses % 100 == 0) - _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, "%s %-40s : Upstream stats: Transport=UDP - Resp=%d,Timeouts=%d\n", STUB_DEBUG_DAEMON, upstream->addr_str, (int)upstream->udp_responses, (int)upstream->udp_timeouts); @@ -1729,7 +1729,7 @@ upstream_write_cb(void *userarg) case STUB_NO_AUTH: /* Cleaning up after connection or auth check failure. Need to fallback. */ stub_cleanup(netreq); - _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, "%s %-40s : Conn closed : Transport=%s - *Failure*\n", STUB_DEBUG_DAEMON, upstream->addr_str, (upstream->transport == GETDNS_TRANSPORT_TLS ? "TLS" : "TCP")); @@ -1884,7 +1884,7 @@ upstream_select_stateful(getdns_network_req *netreq, getdns_transport_list_t tra if (upstreams->upstreams[i].conn_state == GETDNS_CONN_BACKOFF && upstreams->upstreams[i].conn_retry_time < now) { upstreams->upstreams[i].conn_state = GETDNS_CONN_CLOSED; - _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, "%s %-40s : Re-instating upstream\n", STUB_DEBUG_DAEMON, upstreams->upstreams[i].addr_str); } @@ -2017,7 +2017,7 @@ upstream_connect(getdns_upstream *upstream, getdns_transport_list_t transport, upstream->tls_hs_state = GETDNS_HS_WRITE; } upstream->conn_state = GETDNS_CONN_SETUP; - _getdns_upstream_log(upstream, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, "%s %-40s : Conn init : Transport=%s - Profile=%s\n", STUB_DEBUG_DAEMON, upstream->addr_str, transport == GETDNS_TRANSPORT_TLS ? "TLS":"TCP", dnsreq->context->tls_auth_min == GETDNS_AUTHENTICATION_NONE ? "Opportunistic":"Strict"); @@ -2086,7 +2086,7 @@ upstream_find_for_netreq(getdns_network_req *netreq) } /* Handle better, will give generic error*/ DEBUG_STUB("%s %-35s: MSG: %p No valid upstream! \n", STUB_DEBUG_SCHEDULE, __FUNC__, (void*)netreq); - _getdns_context_log(netreq->owner->context, GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, + _getdns_context_log(netreq->owner->context, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, "%s *FAILURE* no valid transports or upstreams available!\n", STUB_DEBUG_DAEMON); return -1; diff --git a/src/tools/getdns_query.c b/src/tools/getdns_query.c index 76548d32..a5c8c7dd 100644 --- a/src/tools/getdns_query.c +++ b/src/tools/getdns_query.c @@ -1678,7 +1678,7 @@ main(int argc, char **argv) clear_listen_list_on_arg = 1; (void) getdns_context_set_logfunc(context, NULL, - GETDNS_SYSTEM_DAEMON, GETDNS_LOG_DEBUG, stubby_log); + GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, stubby_log); } if ((r = parse_args(argc, argv))) goto done_destroy_context; From 264135e7993bb7b7f6085ce7935722f1f6836833 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Wed, 28 Jun 2017 21:09:40 +0200 Subject: [PATCH 07/10] Reintroduct timestamps and replace GETDNS_DAEMON: with STUBBY: --- src/context.c | 16 ++++++++-------- src/debug.h | 1 - src/stub.c | 33 ++++++++++++++++----------------- src/tools/getdns_query.c | 15 +++++++++++++++ 4 files changed, 39 insertions(+), 26 deletions(-) diff --git a/src/context.c b/src/context.c index ac01c612..4d99ce98 100644 --- a/src/context.c +++ b/src/context.c @@ -748,20 +748,20 @@ _getdns_upstream_shutdown(getdns_upstream *upstream) if (upstream->tls_auth_state > upstream->best_tls_auth_state) upstream->best_tls_auth_state = upstream->tls_auth_state; _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, - "%s %-40s : Conn closed : Transport=%s - Resp=%d,Timeouts=%d,Auth=%s,Keepalive(ms)=%d\n", - STUB_DEBUG_DAEMON, upstream->addr_str, + "%-40s : Conn closed : Transport=%s - Resp=%d,Timeouts=%d,Auth=%s,Keepalive(ms)=%d\n", + upstream->addr_str, (upstream->transport == GETDNS_TRANSPORT_TLS ? "TLS" : "TCP"), (int)upstream->responses_received, (int)upstream->responses_timeouts, _getdns_auth_str(upstream->tls_auth_state), (int)upstream->keepalive_timeout); _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, - "%s %-40s : Upstream stats: Transport=%s - Resp=%d,Timeouts=%d,Best_auth=%s\n", - STUB_DEBUG_DAEMON, upstream->addr_str, + "%-40s : Upstream stats: Transport=%s - Resp=%d,Timeouts=%d,Best_auth=%s\n", + upstream->addr_str, (upstream->transport == GETDNS_TRANSPORT_TLS ? "TLS" : "TCP"), (int)upstream->total_responses, (int)upstream->total_timeouts, _getdns_auth_str(upstream->best_tls_auth_state)); _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, - "%s %-40s : Upstream stats: Transport=%s - Conns=%d,Conn_fails=%d,Conn_shutdowns=%d,Backoffs=%d\n", - STUB_DEBUG_DAEMON, upstream->addr_str, + "%-40s : Upstream stats: Transport=%s - Conns=%d,Conn_fails=%d,Conn_shutdowns=%d,Backoffs=%d\n", + upstream->addr_str, (upstream->transport == GETDNS_TRANSPORT_TLS ? "TLS" : "TCP"), (int)upstream->conn_completed, (int)upstream->conn_setup_failed, (int)upstream->conn_shutdowns, (int)upstream->conn_backoffs); @@ -789,8 +789,8 @@ _getdns_upstream_shutdown(getdns_upstream *upstream) upstream->conn_backoffs++; _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, - "%s %-40s : !Backing off this upstream - Will retry as new upstream at %s", - STUB_DEBUG_DAEMON, upstream->addr_str, + "%-40s : !Backing off this upstream - Will retry as new upstream at %s", + upstream->addr_str, asctime(gmtime(&upstream->conn_retry_time))); } // Reset per connection counters diff --git a/src/debug.h b/src/debug.h index fb74527c..f779840b 100644 --- a/src/debug.h +++ b/src/debug.h @@ -44,7 +44,6 @@ #define STUB_DEBUG_READ "------- READ: " #define STUB_DEBUG_WRITE "------- WRITE: " #define STUB_DEBUG_CLEANUP "--- CLEANUP: " -#define STUB_DEBUG_DAEMON "GETDNS_DAEMON: " #ifdef GETDNS_ON_WINDOWS #define DEBUG_ON(...) do { \ diff --git a/src/stub.c b/src/stub.c index f1ddade3..c6f25c79 100644 --- a/src/stub.c +++ b/src/stub.c @@ -609,8 +609,8 @@ stub_timeout_cb(void *userarg) netreq->upstream->udp_timeouts++; if (netreq->upstream->udp_timeouts % 100 == 0) _getdns_upstream_log(netreq->upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, - "%s %-40s : Upstream stats: Transport=UDP - Resp=%d,Timeouts=%d\n", - STUB_DEBUG_DAEMON, netreq->upstream->addr_str, + "%-40s : Upstream stats: Transport=UDP - Resp=%d,Timeouts=%d\n", + netreq->upstream->addr_str, (int)netreq->upstream->udp_responses, (int)netreq->upstream->udp_timeouts); stub_next_upstream(netreq); } else { @@ -909,8 +909,8 @@ tls_verify_callback(int preverify_ok, X509_STORE_CTX *ctx) #endif if (!preverify_ok && !upstream->tls_fallback_ok) _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, - "%s %-40s : Verify failed : Transport=TLS - *Failure* - (%d) \"%s\"\n", - STUB_DEBUG_DAEMON, upstream->addr_str, err, + "%-40s : Verify failed : Transport=TLS - *Failure* - (%d) \"%s\"\n", + upstream->addr_str, err, X509_verify_cert_error_string(err)); /* First deal with the hostname authentication done by OpenSSL. */ @@ -945,8 +945,8 @@ tls_verify_callback(int preverify_ok, X509_STORE_CTX *ctx) STUB_DEBUG_SETUP_TLS, __FUNC__, upstream->fd); else _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, - "%s %-40s : Conn failed : Transport=TLS - *Failure* - Pinset validation failure\n", - STUB_DEBUG_DAEMON, upstream->addr_str); + "%-40s : Conn failed : Transport=TLS - *Failure* - Pinset validation failure\n", + upstream->addr_str); } else { /* If we _only_ had a pinset and it is good then force succesful authentication when the cert self-signed @@ -958,8 +958,8 @@ tls_verify_callback(int preverify_ok, X509_STORE_CTX *ctx) DEBUG_STUB("%s %-35s: FD: %d, Allowing self-signed (%d) cert since pins match\n", STUB_DEBUG_SETUP_TLS, __FUNC__, upstream->fd, err); _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, - "%s %-40s : Verify passed : Transport=TLS - Allowing self-signed cert since pins match\n", - STUB_DEBUG_DAEMON, upstream->addr_str); + "%-40s : Verify passed : Transport=TLS - Allowing self-signed cert since pins match\n", + upstream->addr_str); } } @@ -1473,8 +1473,8 @@ stub_udp_read_cb(void *userarg) if (upstream->udp_responses == 1 || upstream->udp_responses % 100 == 0) _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, - "%s %-40s : Upstream stats: Transport=UDP - Resp=%d,Timeouts=%d\n", - STUB_DEBUG_DAEMON, upstream->addr_str, + "%-40s : Upstream stats: Transport=UDP - Resp=%d,Timeouts=%d\n", + upstream->addr_str, (int)upstream->udp_responses, (int)upstream->udp_timeouts); _getdns_check_dns_req_complete(dnsreq); } @@ -1730,8 +1730,8 @@ upstream_write_cb(void *userarg) /* Cleaning up after connection or auth check failure. Need to fallback. */ stub_cleanup(netreq); _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, - "%s %-40s : Conn closed : Transport=%s - *Failure*\n", - STUB_DEBUG_DAEMON, upstream->addr_str, + "%-40s : Conn closed : Transport=%s - *Failure*\n", + upstream->addr_str, (upstream->transport == GETDNS_TRANSPORT_TLS ? "TLS" : "TCP")); if (fallback_on_write(netreq) == STUB_TCP_ERROR) { /* TODO: Need new state to report transport unavailable*/ @@ -1885,8 +1885,8 @@ upstream_select_stateful(getdns_network_req *netreq, getdns_transport_list_t tra upstreams->upstreams[i].conn_retry_time < now) { upstreams->upstreams[i].conn_state = GETDNS_CONN_CLOSED; _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, - "%s %-40s : Re-instating upstream\n", - STUB_DEBUG_DAEMON, upstreams->upstreams[i].addr_str); + "%-40s : Re-instating upstream\n", + upstreams->upstreams[i].addr_str); } } @@ -2018,7 +2018,7 @@ upstream_connect(getdns_upstream *upstream, getdns_transport_list_t transport, } upstream->conn_state = GETDNS_CONN_SETUP; _getdns_upstream_log(upstream, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, - "%s %-40s : Conn init : Transport=%s - Profile=%s\n", STUB_DEBUG_DAEMON, + "%-40s : Conn init : Transport=%s - Profile=%s\n", upstream->addr_str, transport == GETDNS_TRANSPORT_TLS ? "TLS":"TCP", dnsreq->context->tls_auth_min == GETDNS_AUTHENTICATION_NONE ? "Opportunistic":"Strict"); break; @@ -2087,8 +2087,7 @@ upstream_find_for_netreq(getdns_network_req *netreq) /* Handle better, will give generic error*/ DEBUG_STUB("%s %-35s: MSG: %p No valid upstream! \n", STUB_DEBUG_SCHEDULE, __FUNC__, (void*)netreq); _getdns_context_log(netreq->owner->context, GETDNS_LOG_UPSTREAM_STATS, GETDNS_LOG_DEBUG, - "%s *FAILURE* no valid transports or upstreams available!\n", - STUB_DEBUG_DAEMON); + "*FAILURE* no valid transports or upstreams available!\n"); return -1; } diff --git a/src/tools/getdns_query.c b/src/tools/getdns_query.c index a5c8c7dd..a28ffe54 100644 --- a/src/tools/getdns_query.c +++ b/src/tools/getdns_query.c @@ -1622,7 +1622,22 @@ error: static void stubby_log(void *userarg, uint64_t system, getdns_loglevel_type level, const char *fmt, va_list ap) { + struct timeval tv; + struct tm tm; + char buf[10]; +#ifdef GETDNS_ON_WINDOWS + time_t tsec; + + gettimeofday(&tv, NULL); + tsec = (time_t) tv.tv_sec; + gmtime_s(&tm, (const time_t *) &tsec); +#else + gettimeofday(&tv, NULL); + gmtime_r(&tv.tv_sec, &tm); +#endif + strftime(buf, 10, "%H:%M:%S", &tm); (void)userarg; (void)system; (void)level; + (void) fprintf(stderr, "[%s.%.6d] STUBBY: ", buf, (int)tv.tv_usec); (void) vfprintf(stderr, fmt, ap); } From f47606b643d5e79940799a4194df66c9335a4786 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Wed, 28 Jun 2017 21:21:15 +0200 Subject: [PATCH 08/10] Bump version --- ChangeLog | 7 +++++++ configure.ac | 11 ++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index fab12d74..670a1bde 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +* 2017-07-??: Version 1.1.2 + * Bugfix for parallel make install + * A getdns_context_set_logfunc() function with which one may + register a callback log function for certain library subsystems + at certain levels. Currently this can only be used for + upstream stastistics subsystem. + * 2017-06-15: Version 1.1.1 * Bugfix #306 hanging/segfaulting on certain (IPv6) upstream failures * Spelling fix s/receive/receive. Thanks Andreas Schulze. diff --git a/configure.ac b/configure.ac index 708a3979..be5c86e7 100644 --- a/configure.ac +++ b/configure.ac @@ -36,12 +36,12 @@ sinclude(./m4/acx_getaddrinfo.m4) sinclude(./m4/ax_check_compile_flag.m4) sinclude(./m4/pkg.m4) -AC_INIT([getdns], [1.1.1], [users@getdnsapi.net], [], [https://getdnsapi.net]) +AC_INIT([getdns], [1.1.2], [users@getdnsapi.net], [], [https://getdnsapi.net]) # Dont forget to put a dash in front of the release candidate!!! # That is how it is done with semantic versioning! # -AC_SUBST(RELEASE_CANDIDATE, []) +AC_SUBST(RELEASE_CANDIDATE, [-rc1]) # Set current date from system if not set AC_ARG_WITH([current-date], @@ -51,7 +51,7 @@ AC_ARG_WITH([current-date], [CURRENT_DATE="`date -u +%Y-%m-%dT%H:%M:%SZ`"]) AC_SUBST(GETDNS_VERSION, ["AC_PACKAGE_VERSION$RELEASE_CANDIDATE"]) -AC_SUBST(GETDNS_NUMERIC_VERSION, [0x01010100]) +AC_SUBST(GETDNS_NUMERIC_VERSION, [0x010101c1]) AC_SUBST(API_VERSION, ["December 2015"]) AC_SUBST(API_NUMERIC_VERSION, [0x07df0c00]) GETDNS_COMPILATION_COMMENT="AC_PACKAGE_NAME $GETDNS_VERSION configured on $CURRENT_DATE for the $API_VERSION version of the API" @@ -83,9 +83,10 @@ GETDNS_COMPILATION_COMMENT="AC_PACKAGE_NAME $GETDNS_VERSION configured on $CURRE # getdns-0.9.0 had libversion 5:0:4 # getdns-1.0.0 had libversion 5:1:4 # getdns-1.1.0 had libversion 6:0:0 -# getdns-1.1.1 has libversion 6:1:0 +# getdns-1.1.1 had libversion 6:1:0 +# getdns-1.1.2 will have libversion 7:0:1 # -GETDNS_LIBVERSION=6:1:0 +GETDNS_LIBVERSION=7:0:1 AC_SUBST(GETDNS_COMPILATION_COMMENT) AC_SUBST(GETDNS_LIBVERSION) From 78f027aaabec58a31bb81f07332c8173f3b797c4 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Wed, 28 Jun 2017 21:24:35 +0200 Subject: [PATCH 09/10] The event loop bugfix --- ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog b/ChangeLog index 670a1bde..7249b4a6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,6 @@ * 2017-07-??: Version 1.1.2 * Bugfix for parallel make install + * Bugfix to trigger event callbacks on socket errors * A getdns_context_set_logfunc() function with which one may register a callback log function for certain library subsystems at certain levels. Currently this can only be used for From 91ccbcd7df093bfb7a2b3c677462cc4d56c42252 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Wed, 28 Jun 2017 21:45:54 +0200 Subject: [PATCH 10/10] Typo? --- src/context.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/context.c b/src/context.c index 4d99ce98..49fc7859 100644 --- a/src/context.c +++ b/src/context.c @@ -1700,7 +1700,7 @@ getdns_return_t getdns_context_get_update_callback(getdns_context *context, void **userarg, void (**cb)(getdns_context *, getdns_context_code_t, void *)) { - if (!context || userarg || !cb) + if (!context || !userarg || !cb) return GETDNS_RETURN_INVALID_PARAMETER; *userarg = context->update_userarg;