]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add DNS_PRIVATE_BUFFERSIZE and use it
authorMark Andrews <marka@isc.org>
Fri, 15 May 2026 01:06:38 +0000 (11:06 +1000)
committerMark Andrews <marka@isc.org>
Thu, 2 Jul 2026 00:08:52 +0000 (10:08 +1000)
The size of a private records is 1 byte more than the corresponding
NSEC3PARAM record.

lib/dns/include/dns/private.h
lib/dns/nsec3.c
lib/ns/update.c
tests/dns/private_test.c

index 8f3d5a32ad541d7fc761452e92c0b51e66fb49b2..883ddc746ac6209c290bd5257db0c8c46009ebee 100644 (file)
 #include <isc/types.h>
 
 #include <dns/db.h>
+#include <dns/nsec.h>
 #include <dns/types.h>
 
+/*
+ * The private record has one extra byte, containing a 0, in front of
+ * an NSEC3PARAM record.
+ */
+#define DNS_PRIVATE_BUFFERSIZE (DNS_NSEC3PARAM_BUFFERSIZE + 1)
+
 #pragma once
 
 isc_result_t
index e889b877c29919fd9eb41d491491ce7b62917611..6b8d3b8f522412eecaa5939138548add7e4d75f5 100644 (file)
@@ -32,6 +32,7 @@
 #include <dns/fixedname.h>
 #include <dns/nsec.h>
 #include <dns/nsec3.h>
+#include <dns/private.h>
 #include <dns/rdata.h>
 #include <dns/rdatalist.h>
 #include <dns/rdataset.h>
@@ -1064,7 +1065,7 @@ dns_nsec3param_deletechains(dns_db_t *db, dns_dbversion_t *ver,
        dns_rdataset_t rdataset;
        bool flag;
        isc_result_t result = ISC_R_SUCCESS;
-       unsigned char buf[DNS_NSEC3PARAM_BUFFERSIZE + 1];
+       unsigned char buf[DNS_PRIVATE_BUFFERSIZE];
        dns_name_t *origin = dns_zone_getorigin(zone);
        dns_rdatatype_t privatetype = dns_zone_getprivatetype(zone);
 
index 12bcf5a2c14d6d2eec052b25b160d8bedce0e569..7cfc75dbe1ce30beb68ea1b57c7c66002c9246a1 100644 (file)
@@ -2323,7 +2323,7 @@ add_nsec3param_records(ns_client_t *client, dns_zone_t *zone, dns_db_t *db,
        isc_result_t result = ISC_R_SUCCESS;
        dns_difftuple_t *newtuple = NULL;
        dns_rdata_t rdata = DNS_RDATA_INIT;
-       unsigned char buf[DNS_NSEC3PARAM_BUFFERSIZE + 1];
+       unsigned char buf[DNS_PRIVATE_BUFFERSIZE];
        dns_diff_t temp_diff;
        dns_diffop_t op;
        bool flag;
index ff851996a3ed1d5ea3be0f30c7efdb3060b3bfd0..c4669ced4e31075b4f3cacc27fa7fe2be1a93fc5 100644 (file)
@@ -74,7 +74,7 @@ make_signing(signing_testcase_t *testcase, dns_rdata_t *private,
 
 static void
 make_nsec3(nsec3_testcase_t *testcase, dns_rdata_t *private,
-          unsigned char *pbuf) {
+          unsigned char *pbuf, size_t pbufsize) {
        isc_result_t result;
        dns_rdata_nsec3param_t params;
        dns_rdata_t nsec3param = DNS_RDATA_INIT;
@@ -119,7 +119,7 @@ make_nsec3(nsec3_testcase_t *testcase, dns_rdata_t *private,
        dns_rdata_init(private);
 
        dns_nsec3param_toprivate(&nsec3param, private, privatetype, pbuf,
-                                DNS_NSEC3PARAM_BUFFERSIZE + 1);
+                                pbufsize);
 }
 
 /* convert private signing records to text */
@@ -179,13 +179,13 @@ ISC_RUN_TEST_IMPL(private_nsec3_totext) {
        UNUSED(state);
 
        for (i = 0; i < ncases; i++) {
-               unsigned char data[DNS_NSEC3PARAM_BUFFERSIZE + 1];
+               unsigned char data[DNS_PRIVATE_BUFFERSIZE];
                char output[BUFSIZ];
                isc_buffer_t buf;
 
                isc_buffer_init(&buf, output, sizeof(output));
 
-               make_nsec3(&testcases[i], &private, data);
+               make_nsec3(&testcases[i], &private, data, sizeof(data));
                dns_private_totext(&private, &buf);
                assert_string_equal(output, results[i]);
        }