diff options
| author | Dag-Erling Smørgrav <des@FreeBSD.org> | 2019-02-06 12:31:02 +0000 |
|---|---|---|
| committer | Dag-Erling Smørgrav <des@FreeBSD.org> | 2019-02-06 12:31:02 +0000 |
| commit | 9c9d011eed674ddd7e4a0a148691887afb9e75cd (patch) | |
| tree | cd45bceeed24e66e5b2838e8589d2c111cf691c6 /daemon | |
| parent | 089d83fbd0b24f957b753d440f188ddadaabf4ff (diff) | |
Vendor import of Unbound 1.9.0.vendor/unbound/1.9.0
Diffstat (limited to 'daemon')
| -rw-r--r-- | daemon/daemon.c | 1 | ||||
| -rw-r--r-- | daemon/remote.c | 36 | ||||
| -rw-r--r-- | daemon/stats.c | 13 | ||||
| -rw-r--r-- | daemon/unbound.c | 18 | ||||
| -rw-r--r-- | daemon/worker.c | 9 |
5 files changed, 67 insertions, 10 deletions
diff --git a/daemon/daemon.c b/daemon/daemon.c index 4c3d5f1c1a17..e14edb99df05 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -749,6 +749,7 @@ daemon_delete(struct daemon* daemon) free(daemon->pidfile); free(daemon->env); #ifdef HAVE_SSL + listen_sslctx_delete_ticket_keys(); SSL_CTX_free((SSL_CTX*)daemon->listen_sslctx); SSL_CTX_free((SSL_CTX*)daemon->connect_sslctx); #endif diff --git a/daemon/remote.c b/daemon/remote.c index 3971e4540510..48efba7409c8 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -789,7 +789,8 @@ print_longnum(RES* ssl, const char* desc, size_t x) /** print mem stats */ static int -print_mem(RES* ssl, struct worker* worker, struct daemon* daemon) +print_mem(RES* ssl, struct worker* worker, struct daemon* daemon, + struct ub_stats_info* s) { size_t msg, rrset, val, iter, respip; #ifdef CLIENT_SUBNET @@ -847,6 +848,9 @@ print_mem(RES* ssl, struct worker* worker, struct daemon* daemon) dnscrypt_nonce)) return 0; #endif /* USE_DNSCRYPT */ + if(!print_longnum(ssl, "mem.streamwait"SQ, + (size_t)s->svr.mem_stream_wait)) + return 0; return 1; } @@ -969,6 +973,8 @@ print_ext(RES* ssl, struct ub_stats_info* s) (unsigned long)s->svr.qtcp_outgoing)) return 0; if(!ssl_printf(ssl, "num.query.tls"SQ"%lu\n", (unsigned long)s->svr.qtls)) return 0; + if(!ssl_printf(ssl, "num.query.tls.resume"SQ"%lu\n", + (unsigned long)s->svr.qtls_resume)) return 0; if(!ssl_printf(ssl, "num.query.ipv6"SQ"%lu\n", (unsigned long)s->svr.qipv6)) return 0; /* flags */ @@ -1088,7 +1094,7 @@ do_stats(RES* ssl, struct daemon_remote* rc, int reset) if(!print_uptime(ssl, rc->worker, reset)) return; if(daemon->cfg->stat_extended) { - if(!print_mem(ssl, rc->worker, daemon)) + if(!print_mem(ssl, rc->worker, daemon, &total)) return; if(!print_hist(ssl, &total)) return; @@ -1428,6 +1434,28 @@ do_view_data_add(RES* ssl, struct worker* worker, char* arg) lock_rw_unlock(&v->lock); } +/** Add new RR data from stdin to view */ +static void +do_view_datas_add(RES* ssl, struct worker* worker, char* arg) +{ + struct view* v; + v = views_find_view(worker->daemon->views, + arg, 1 /* get write lock*/); + if(!v) { + ssl_printf(ssl,"no view with name: %s\n", arg); + return; + } + if(!v->local_zones) { + if(!(v->local_zones = local_zones_create())){ + lock_rw_unlock(&v->lock); + ssl_printf(ssl,"error out of memory\n"); + return; + } + } + do_datas_add(ssl, v->local_zones); + lock_rw_unlock(&v->lock); +} + /** Remove RR data from view */ static void do_view_data_remove(RES* ssl, struct worker* worker, char* arg) @@ -2456,7 +2484,7 @@ do_auth_zone_reload(RES* ssl, struct worker* worker, char* arg) (void)ssl_printf(ssl, "error no auth-zone %s\n", arg); return; } - if(!auth_zone_read_zonefile(z)) { + if(!auth_zone_read_zonefile(z, worker->env.cfg)) { lock_rw_unlock(&z->lock); (void)ssl_printf(ssl, "error failed to read %s\n", arg); return; @@ -2963,6 +2991,8 @@ execute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd, do_view_data_remove(ssl, worker, skipwhite(p+22)); } else if(cmdcmp(p, "view_local_data", 15)) { do_view_data_add(ssl, worker, skipwhite(p+15)); + } else if(cmdcmp(p, "view_local_datas", 16)) { + do_view_datas_add(ssl, worker, skipwhite(p+16)); } else if(cmdcmp(p, "flush_zone", 10)) { do_flush_zone(ssl, worker, skipwhite(p+10)); } else if(cmdcmp(p, "flush_type", 10)) { diff --git a/daemon/stats.c b/daemon/stats.c index cff01d90342f..504b0efccc4a 100644 --- a/daemon/stats.c +++ b/daemon/stats.c @@ -66,6 +66,9 @@ #ifdef CLIENT_SUBNET #include "edns-subnet/subnetmod.h" #endif +#ifdef HAVE_SSL +#include <openssl/ssl.h> +#endif /** add timers and the values do not overflow or become negative */ static void @@ -328,6 +331,8 @@ server_stats_compile(struct worker* worker, struct ub_stats_info* s, int reset) } lock_rw_unlock(&worker->env.auth_zones->lock); } + s->svr.mem_stream_wait = + (long long)tcp_req_info_get_stream_buffer_size(); /* Set neg cache usage numbers */ set_neg_cache_stats(worker, &s->svr, reset); @@ -412,6 +417,7 @@ void server_stats_add(struct ub_stats_info* total, struct ub_stats_info* a) total->svr.qtcp += a->svr.qtcp; total->svr.qtcp_outgoing += a->svr.qtcp_outgoing; total->svr.qtls += a->svr.qtls; + total->svr.qtls_resume += a->svr.qtls_resume; total->svr.qipv6 += a->svr.qipv6; total->svr.qbit_QR += a->svr.qbit_QR; total->svr.qbit_AA += a->svr.qbit_AA; @@ -468,8 +474,13 @@ void server_stats_insquery(struct ub_server_stats* stats, struct comm_point* c, stats->qopcode[ LDNS_OPCODE_WIRE(sldns_buffer_begin(c->buffer)) ]++; if(c->type != comm_udp) { stats->qtcp++; - if(c->ssl != NULL) + if(c->ssl != NULL) { stats->qtls++; +#ifdef HAVE_SSL + if(SSL_session_reused(c->ssl)) + stats->qtls_resume++; +#endif + } } if(repinfo && addr_is_ip6(&repinfo->addr, repinfo->addrlen)) stats->qipv6++; diff --git a/daemon/unbound.c b/daemon/unbound.c index 020e453034ad..4a508c13878b 100644 --- a/daemon/unbound.c +++ b/daemon/unbound.c @@ -67,6 +67,7 @@ #ifdef HAVE_GRP_H #include <grp.h> #endif +#include <openssl/ssl.h> #ifndef S_SPLINT_S /* splint chokes on this system header file */ @@ -430,6 +431,23 @@ perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode, if(!(daemon->listen_sslctx = listen_sslctx_create( cfg->ssl_service_key, cfg->ssl_service_pem, NULL))) fatal_exit("could not set up listen SSL_CTX"); + if(cfg->tls_ciphers && cfg->tls_ciphers[0]) { + if (!SSL_CTX_set_cipher_list(daemon->listen_sslctx, cfg->tls_ciphers)) { + fatal_exit("failed to set tls-cipher %s", cfg->tls_ciphers); + } + } +#ifdef HAVE_SSL_CTX_SET_CIPHERSUITES + if(cfg->tls_ciphersuites && cfg->tls_ciphersuites[0]) { + if (!SSL_CTX_set_ciphersuites(daemon->listen_sslctx, cfg->tls_ciphersuites)) { + fatal_exit("failed to set tls-ciphersuites %s", cfg->tls_ciphersuites); + } + } +#endif + if(cfg->tls_session_ticket_keys.first) { + if(!listen_sslctx_setup_ticket_keys(daemon->listen_sslctx, cfg->tls_session_ticket_keys.first)) { + fatal_exit("could not set session ticket SSL_CTX"); + } + } } if(!(daemon->connect_sslctx = connect_sslctx_create(NULL, NULL, cfg->tls_cert_bundle, cfg->tls_win_cert))) diff --git a/daemon/worker.c b/daemon/worker.c index 2697ea6534f1..c9504dd207be 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1088,7 +1088,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, struct ub_packed_rrset_key* alias_rrset = NULL; struct reply_info* partial_rep = NULL; struct query_info* lookup_qinfo = &qinfo; - struct query_info qinfo_tmp; /* placeholdoer for lookup_qinfo */ + struct query_info qinfo_tmp; /* placeholder for lookup_qinfo */ struct respip_client_info* cinfo = NULL, cinfo_tmp; memset(&qinfo, 0, sizeof(qinfo)); @@ -1175,7 +1175,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, /* See if we are passed through with slip factor */ if(worker->env.cfg->ip_ratelimit_factor != 0 && ub_random_max(worker->env.rnd, - worker->env.cfg->ip_ratelimit_factor) == 1) { + worker->env.cfg->ip_ratelimit_factor) == 0) { char addrbuf[128]; addr_to_str(&repinfo->addr, repinfo->addrlen, @@ -1208,7 +1208,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, if(worker->env.cfg->log_queries) { char ip[128]; addr_to_str(&repinfo->addr, repinfo->addrlen, ip, sizeof(ip)); - log_nametypeclass(0, ip, qinfo.qname, qinfo.qtype, qinfo.qclass); + log_query_in(ip, qinfo.qname, qinfo.qtype, qinfo.qclass); } if(qinfo.qtype == LDNS_RR_TYPE_AXFR || qinfo.qtype == LDNS_RR_TYPE_IXFR) { @@ -1802,8 +1802,6 @@ worker_init(struct worker* worker, struct config_file *cfg, alloc_set_id_cleanup(&worker->alloc, &worker_alloc_cleanup, worker); worker->env = *worker->daemon->env; comm_base_timept(worker->base, &worker->env.now, &worker->env.now_tv); - if(worker->thread_num == 0) - log_set_time(worker->env.now); worker->env.worker = worker; worker->env.worker_base = worker->base; worker->env.send_query = &worker_send_query; @@ -1909,7 +1907,6 @@ worker_delete(struct worker* worker) comm_timer_delete(worker->env.probe_timer); free(worker->ports); if(worker->thread_num == 0) { - log_set_time(NULL); #ifdef UB_ON_WINDOWS wsvc_desetup_worker(worker); #endif /* UB_ON_WINDOWS */ |
