From 80f310e2a4f59c12a17aafc28c6659cf4bbb893a Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Mon, 28 Aug 2017 07:49:42 +0000 Subject: [PATCH] - Fix #1415: patch to free dnscrypt environment on reload. git-svn-id: file:///svn/unbound/trunk@4310 be551aaa-1e26-0410-a405-d3ace91eadb9 --- daemon/daemon.c | 3 +++ dnscrypt/dnscrypt.c | 16 +++++++++++++++- dnscrypt/dnscrypt.h | 10 ++++++++-- doc/Changelog | 3 +++ 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/daemon/daemon.c b/daemon/daemon.c index e90bcdd1a..7411fabe7 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -692,6 +692,9 @@ daemon_cleanup(struct daemon* daemon) daemon->num = 0; #ifdef USE_DNSTAP dt_delete(daemon->dtenv); +#endif +#ifdef USE_DNSCRYPT + dnsc_delete(daemon->dnscenv); #endif daemon->cfg = NULL; } diff --git a/dnscrypt/dnscrypt.c b/dnscrypt/dnscrypt.c index 9e858c3fb..51308e375 100644 --- a/dnscrypt/dnscrypt.c +++ b/dnscrypt/dnscrypt.c @@ -450,6 +450,7 @@ dnsc_load_local_data(struct dnsc_env* dnscenv, struct config_file *cfg) snprintf(rr + strlen(rr), rrlen - 1 - strlen(rr), "\\%03d", c); } } + verbose(VERB_OPS, "DNSCrypt: adding local data to config: %s", rr); snprintf(rr + strlen(rr), rrlen - 1 - strlen(rr), "\""); cfg_strlist_insert(&cfg->local_data, strdup(rr)); free(rr); @@ -502,7 +503,7 @@ dnsc_parse_keys(struct dnsc_env *env, struct config_file *cfg) env->keypairs = sodium_allocarray(env->keypairs_count, sizeof *env->keypairs); - env->certs = sodium_allocarray(env->signed_certs_count, + env->certs = sodium_allocarray(env->signed_certs_count, sizeof *env->certs); cert_id = 0U; @@ -649,3 +650,16 @@ dnsc_apply_cfg(struct dnsc_env *env, struct config_file *cfg) } return 0; } + +void +dnsc_delete(struct dnsc_env *env) +{ + if(!env) { + return; + } + verbose(VERB_OPS, "DNSCrypt: Freeing environment."); + sodium_free(env->signed_certs); + sodium_free(env->certs); + sodium_free(env->keypairs); + free(env); +} diff --git a/dnscrypt/dnscrypt.h b/dnscrypt/dnscrypt.h index 26c2bb21d..189dca54e 100644 --- a/dnscrypt/dnscrypt.h +++ b/dnscrypt/dnscrypt.h @@ -52,7 +52,7 @@ typedef struct cert_ { struct dnsc_env { struct SignedCert *signed_certs; - dnsccert *certs; + dnsccert *certs; size_t signed_certs_count; uint8_t provider_publickey[crypto_sign_ed25519_PUBLICKEYBYTES]; uint8_t provider_secretkey[crypto_sign_ed25519_SECRETKEYBYTES]; @@ -71,7 +71,7 @@ struct dnscrypt_query_header { }; /** - * Initialize DNSCrypt enviroment. + * Initialize DNSCrypt environment. * Initialize sodium library and allocate the dnsc_env structure. * \return an uninitialized struct dnsc_env. */ @@ -88,6 +88,12 @@ struct dnsc_env * dnsc_create(void); */ int dnsc_apply_cfg(struct dnsc_env *env, struct config_file *cfg); +/** + * Delete DNSCrypt environment + * + */ +void dnsc_delete(struct dnsc_env *env); + /** * handle a crypted dnscrypt request. * Determine wether or not a query is coming over the dnscrypt listener and diff --git a/doc/Changelog b/doc/Changelog index e9f7eed3d..8168e145f 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +28 August 2017: Wouter + - Fix #1415: patch to free dnscrypt environment on reload. + 23 August 2017: Wouter - Fix #1407: Add ECS options check to unbound-checkconf. - make depend -- 2.47.3