]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add support for parsing DSYNC scheme mnemonics
authorMark Andrews <marka@isc.org>
Sat, 26 Jul 2025 04:17:20 +0000 (06:17 +0200)
committerMark Andrews <marka@isc.org>
Wed, 6 Aug 2025 03:08:11 +0000 (13:08 +1000)
Adds dns_dsyncscheme_fromtext, dns_dsyncscheme_totext and
dns_dsyncscheme_format.  Adds type dns_dsyncscheme_t.

(cherry picked from commit 6e1311c624d15e6c4d0184deea3bb670e8a5785d)

lib/dns/Makefile.am
lib/dns/include/dns/dsync.h [new file with mode: 0644]
lib/dns/include/dns/types.h
lib/dns/rcode.c

index ef8e9f242ee32cfa5605278f85f77f29df2f4b14..aea644ebedff00f4b115e7b8b8d94da0c78cf9fc 100644 (file)
@@ -67,9 +67,10 @@ libdns_la_HEADERS =                  \
        include/dns/dns64.h             \
        include/dns/dnsrps.h            \
        include/dns/dnssec.h            \
+       include/dns/dnstap.h            \
        include/dns/ds.h                \
        include/dns/dsdigest.h          \
-       include/dns/dnstap.h            \
+       include/dns/dsync.h             \
        include/dns/dyndb.h             \
        include/dns/ecs.h               \
        include/dns/edns.h              \
@@ -87,8 +88,8 @@ libdns_la_HEADERS =                   \
        include/dns/keytable.h          \
        include/dns/keyvalues.h         \
        include/dns/librpz.h            \
-       include/dns/lookup.h            \
        include/dns/log.h               \
+       include/dns/lookup.h            \
        include/dns/master.h            \
        include/dns/masterdump.h        \
        include/dns/message.h           \
@@ -125,8 +126,8 @@ libdns_la_HEADERS =                 \
        include/dns/ssu.h               \
        include/dns/stats.h             \
        include/dns/time.h              \
-       include/dns/transport.h         \
        include/dns/tkey.h              \
+       include/dns/transport.h         \
        include/dns/tsec.h              \
        include/dns/tsig.h              \
        include/dns/ttl.h               \
diff --git a/lib/dns/include/dns/dsync.h b/lib/dns/include/dns/dsync.h
new file mode 100644 (file)
index 0000000..9533d4c
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, you can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * See the COPYRIGHT file distributed with this work for additional
+ * information regarding copyright ownership.
+ */
+
+#pragma once
+
+#define DNS_DSYNCSCHEME_NOTIFY (1)
+
+#define DNS_DSYNCSCHEMEFORMAT_SIZE (7)
+
+isc_result_t
+dns_dsyncscheme_fromtext(dns_dsyncscheme_t *schemep, isc_textregion_t *source);
+
+isc_result_t
+dns_dsyncscheme_totext(dns_dsyncscheme_t scheme, isc_buffer_t *target);
+
+void
+dns_dsyncscheme_format(dns_dsyncscheme_t scheme, char *cp, unsigned int size);
index 6465962bd4119454d9271674cbc2c1a6cd5994d0..8ddcbeb4e2437125a9f5d4cf2e09d4fd0d9028fb 100644 (file)
@@ -76,6 +76,7 @@ typedef ISC_LIST(dns_dns64_t) dns_dns64list_t;
 typedef struct dns_dnsseckey dns_dnsseckey_t;
 typedef ISC_LIST(dns_dnsseckey_t) dns_dnsseckeylist_t;
 typedef uint8_t                           dns_dsdigest_t;
+typedef uint8_t                           dns_dsyncscheme_t;
 typedef struct dns_dtdata         dns_dtdata_t;
 typedef struct dns_dtenv          dns_dtenv_t;
 typedef struct dns_dtmsg          dns_dtmsg_t;
index a89aa2e631b9b814064188364a9d88c264e11deb..a60997873ca173a3045e64a7ca4058c354c69e6a 100644 (file)
@@ -29,6 +29,7 @@
 #include <dns/cert.h>
 #include <dns/ds.h>
 #include <dns/dsdigest.h>
+#include <dns/dsync.h>
 #include <dns/keyflags.h>
 #include <dns/keyvalues.h>
 #include <dns/rcode.h>
 
 #define TOTEXTONLY 0x01
 
+/* clang-format off */
+#define SENTINEL { 0, NULL, 0 }
+/* clang-format on */
+
 #define RCODENAMES                                     \
        /* standard rcodes */                          \
        { dns_rcode_noerror, "NOERROR", 0 },           \
                { DNS_DSDIGEST_SHA384, "SHA-384", 0 },                       \
                { DNS_DSDIGEST_SHA384, "SHA384", 0 }, { 0, NULL, 0 }
 
+#define DSYNCSCHEMES { DNS_DSYNCSCHEME_NOTIFY, "NOTIFY", 0 }, SENTINEL
+
 struct tbl {
        unsigned int value;
        const char *name;
@@ -142,6 +149,7 @@ static struct tbl secalgs[] = { SECALGNAMES };
 static struct tbl secprotos[] = { SECPROTONAMES };
 static struct tbl hashalgs[] = { HASHALGNAMES };
 static struct tbl dsdigests[] = { DSDIGESTNAMES };
+static struct tbl dsyncschemes[] = { DSYNCSCHEMES };
 
 static struct keyflag {
        const char *name;
@@ -449,6 +457,41 @@ dns_dsdigest_format(dns_dsdigest_t typ, char *cp, unsigned int size) {
        }
 }
 
+/*
+ * DSYNC Scheme
+ */
+
+isc_result_t
+dns_dsyncscheme_fromtext(dns_dsyncscheme_t *schemep, isc_textregion_t *source) {
+       unsigned int value;
+
+       REQUIRE(schemep != NULL);
+       RETERR(dns_mnemonic_fromtext(&value, source, dsyncschemes, 0xff));
+       *schemep = value;
+       return ISC_R_SUCCESS;
+}
+
+isc_result_t
+dns_dsyncscheme_totext(dns_dsyncscheme_t scheme, isc_buffer_t *target) {
+       return dns_mnemonic_totext(scheme, target, dsyncschemes);
+}
+
+void
+dns_dsyncscheme_format(dns_dsyncscheme_t scheme, char *cp, unsigned int size) {
+       isc_buffer_t b;
+       isc_region_t r;
+       isc_result_t result;
+
+       REQUIRE(cp != NULL && size > 0);
+       isc_buffer_init(&b, cp, size - 1);
+       result = dns_dsyncscheme_totext(scheme, &b);
+       isc_buffer_usedregion(&b, &r);
+       r.base[r.length] = 0;
+       if (result != ISC_R_SUCCESS) {
+               r.base[0] = 0;
+       }
+}
+
 /*
  * This uses lots of hard coded values, but how often do we actually
  * add classes?