From e75069f79aa6b8a61034a9a4db9b6265b8be8ae4 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Fri, 22 Jan 2021 22:50:25 +0000 Subject: [PATCH] Tidy initialisation in hash_questions.c --- src/dnsmasq.c | 2 +- src/dnsmasq.h | 1 + src/hash_questions.c | 32 ++++++++++++++++---------------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/dnsmasq.c b/src/dnsmasq.c index 2306c48..14c66f6 100644 --- a/src/dnsmasq.c +++ b/src/dnsmasq.c @@ -390,8 +390,8 @@ int main (int argc, char **argv) if (daemon->port != 0) { cache_init(); - blockdata_init(); + hash_questions_init(); } #ifdef HAVE_INOTIFY diff --git a/src/dnsmasq.h b/src/dnsmasq.h index 360c226..8493285 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -1261,6 +1261,7 @@ size_t filter_rrsigs(struct dns_header *header, size_t plen); int setup_timestamp(void); /* hash_questions.c */ +void hash_questions_init(void); unsigned char *hash_questions(struct dns_header *header, size_t plen, char *name); /* crypto.c */ diff --git a/src/hash_questions.c b/src/hash_questions.c index 51d88c2..fad32d7 100644 --- a/src/hash_questions.c +++ b/src/hash_questions.c @@ -29,27 +29,24 @@ #include "dnsmasq.h" #if defined(HAVE_DNSSEC) || defined(HAVE_NETTLEHASH) + +static const struct nettle_hash *hash; +static void *ctx; +static unsigned char *digest; + +void hash_questions_init(void) +{ + if (!(hash = hash_find("sha256")) || !hash_init(hash, &ctx, &digest)) + die(_("Failed to create SHA-256 hash object"), NULL, EC_MISC); +} + unsigned char *hash_questions(struct dns_header *header, size_t plen, char *name) { int q; unsigned char *p = (unsigned char *)(header+1); - const struct nettle_hash *hash; - void *ctx; - unsigned char *digest; - - if (!(hash = hash_find("sha256")) || !hash_init(hash, &ctx, &digest)) - { - /* don't think this can ever happen. */ - static unsigned char dummy[HASH_SIZE]; - static int warned = 0; - if (!warned) - my_syslog(LOG_ERR, _("Failed to create SHA-256 hash object")); - warned = 1; - - return dummy; - } - + hash->init(ctx); + for (q = ntohs(header->qdcount); q != 0; q--) { char *cp, c; @@ -91,6 +88,9 @@ static void sha256_init(SHA256_CTX *ctx); static void sha256_update(SHA256_CTX *ctx, const BYTE data[], size_t len); static void sha256_final(SHA256_CTX *ctx, BYTE hash[]); +void hash_questions_init(void) +{ +} unsigned char *hash_questions(struct dns_header *header, size_t plen, char *name) {