From b770ea976d96fb089d88cc940782e97ffe83e05c Mon Sep 17 00:00:00 2001 From: Tony Finch Date: Wed, 2 Oct 2019 19:43:09 +0100 Subject: [PATCH] cleanup: more consistent abbreviated DS digest type mnemonics BIND supports the non-standard DNSKEY algorithm mnemonic ECDSA256 everywhere ECDSAP256SHA256 is allowed, and allows algorithm numbers interchangeably with mnemonics. This is all done in one place by the dns_secalg_fromtext() function. DS digest types were less consistent: the rdata parser does not allow abbreviations like SHA1, but the dnssec-* command line tools do; and the command line tools do not alow numeric types though that is the norm in rdata. The command line tools now use the dns_dsdigest_fromtext() function instead of rolling their own variant, and dns_dsdigest_fromtext() now knows about abbreviated digest type mnemonics. --- bin/dnssec/dnssectool.c | 33 ++++++++++++++------------------- lib/dns/rcode.c | 3 +++ 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/bin/dnssec/dnssectool.c b/bin/dnssec/dnssectool.c index 5ba2cc1266..d409965fed 100644 --- a/bin/dnssec/dnssectool.c +++ b/bin/dnssec/dnssectool.c @@ -314,35 +314,30 @@ dns_rdataclass_t strtoclass(const char *str) { isc_textregion_t r; dns_rdataclass_t rdclass; - isc_result_t ret; + isc_result_t result; if (str == NULL) return dns_rdataclass_in; DE_CONST(str, r.base); r.length = strlen(str); - ret = dns_rdataclass_fromtext(&rdclass, &r); - if (ret != ISC_R_SUCCESS) + result = dns_rdataclass_fromtext(&rdclass, &r); + if (result != ISC_R_SUCCESS) fatal("unknown class %s", str); return (rdclass); } unsigned int -strtodsdigest(const char *algname) { - if (strcasecmp(algname, "SHA1") == 0 || - strcasecmp(algname, "SHA-1") == 0) - { - return (DNS_DSDIGEST_SHA1); - } else if (strcasecmp(algname, "SHA256") == 0 || - strcasecmp(algname, "SHA-256") == 0) - { - return (DNS_DSDIGEST_SHA256); - } else if (strcasecmp(algname, "SHA384") == 0 || - strcasecmp(algname, "SHA-384") == 0) - { - return (DNS_DSDIGEST_SHA384); - } else { - fatal("unknown algorithm %s", algname); - } +strtodsdigest(const char *str) { + isc_textregion_t r; + dns_dsdigest_t alg; + isc_result_t result; + + DE_CONST(str, r.base); + r.length = strlen(str); + result = dns_dsdigest_fromtext(&alg, &r); + if (result != ISC_R_SUCCESS) + fatal("unknown DS algorithm %s", str); + return (alg); } static int diff --git a/lib/dns/rcode.c b/lib/dns/rcode.c index 2853671d2c..f9fe07cb04 100644 --- a/lib/dns/rcode.c +++ b/lib/dns/rcode.c @@ -141,9 +141,12 @@ #define DSDIGESTNAMES \ { DNS_DSDIGEST_SHA1, "SHA-1", 0 }, \ + { DNS_DSDIGEST_SHA1, "SHA1", 0 }, \ { DNS_DSDIGEST_SHA256, "SHA-256", 0 }, \ + { DNS_DSDIGEST_SHA256, "SHA256", 0 }, \ { DNS_DSDIGEST_GOST, "GOST", 0 }, \ { DNS_DSDIGEST_SHA384, "SHA-384", 0 }, \ + { DNS_DSDIGEST_SHA384, "SHA384", 0 }, \ { 0, NULL, 0} struct tbl {