83 lines
2.7 KiB
Diff
83 lines
2.7 KiB
Diff
From bf1eaf46611bdbfcc2a6f6f77871eebf8351a629 Mon Sep 17 00:00:00 2001
|
|
From: Mark Andrews <marka@isc.org>
|
|
Date: Thu, 25 Nov 2021 13:16:56 +1100
|
|
Subject: [PATCH] Exercise ISC_R_NOSPACE path in dns_sdlz_putrr
|
|
|
|
Use relative names when adding SOA record and a long domain
|
|
name to create SOA RR where the wire format is longer than
|
|
the initial buffer allocation in dns_sdlz_putrr.
|
|
|
|
(cherry picked from commit 6dc524860622277bd24fe17d4a82454b30f5f1b5)
|
|
Conflict: NA
|
|
Reference: https://gitlab.isc.org/isc-projects/bind9/-/commit/bf1eaf46611bdbfcc2a6f6f77871eebf8351a629
|
|
---
|
|
bin/tests/system/dlzexternal/driver.c | 23 +++++++++----------
|
|
bin/tests/system/dlzexternal/ns1/dlzs.conf.in | 5 ++++
|
|
2 files changed, 16 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/bin/tests/system/dlzexternal/driver.c b/bin/tests/system/dlzexternal/driver.c
|
|
index 26da9c5deb..9c8ed0080f 100644
|
|
--- a/bin/tests/system/dlzexternal/driver.c
|
|
+++ b/bin/tests/system/dlzexternal/driver.c
|
|
@@ -238,10 +238,9 @@ dlz_create(const char *dlzname, unsigned int argc, char *argv[], void **dbdata,
|
|
struct dlz_example_data *state;
|
|
const char *helper_name;
|
|
va_list ap;
|
|
- char soa_data[1024];
|
|
- const char *extra;
|
|
+ char soa_data[sizeof("@ hostmaster.root 123 900 600 86400 3600")];
|
|
isc_result_t result;
|
|
- int n;
|
|
+ size_t n;
|
|
|
|
UNUSED(dlzname);
|
|
|
|
@@ -275,19 +274,19 @@ dlz_create(const char *dlzname, unsigned int argc, char *argv[], void **dbdata,
|
|
sprintf(state->zone_name, "%s.", argv[1]);
|
|
}
|
|
|
|
+ /*
|
|
+ * Use relative names to trigger ISC_R_NOSPACE in dns_sdlz_putrr.
|
|
+ */
|
|
if (strcmp(state->zone_name, ".") == 0) {
|
|
- extra = ".root";
|
|
+ n = strlcpy(soa_data,
|
|
+ "@ hostmaster.root 123 900 600 86400 3600",
|
|
+ sizeof(soa_data));
|
|
} else {
|
|
- extra = ".";
|
|
+ n = strlcpy(soa_data, "@ hostmaster 123 900 600 86400 3600",
|
|
+ sizeof(soa_data));
|
|
}
|
|
|
|
- n = sprintf(soa_data, "%s hostmaster%s%s 123 900 600 86400 3600",
|
|
- state->zone_name, extra, state->zone_name);
|
|
-
|
|
- if (n < 0) {
|
|
- CHECK(ISC_R_FAILURE);
|
|
- }
|
|
- if ((unsigned)n >= sizeof(soa_data)) {
|
|
+ if (n >= sizeof(soa_data)) {
|
|
CHECK(ISC_R_NOSPACE);
|
|
}
|
|
|
|
diff --git a/bin/tests/system/dlzexternal/ns1/dlzs.conf.in b/bin/tests/system/dlzexternal/ns1/dlzs.conf.in
|
|
index 07bf329b50..c679498118 100644
|
|
--- a/bin/tests/system/dlzexternal/ns1/dlzs.conf.in
|
|
+++ b/bin/tests/system/dlzexternal/ns1/dlzs.conf.in
|
|
@@ -21,6 +21,11 @@ dlz "example three" {
|
|
database "dlopen ../driver.@SO@ example.org";
|
|
};
|
|
|
|
+dlz "example four" {
|
|
+ // Long zone name to trigger ISC_R_NOSPACE in dns_sdlz_putrr.
|
|
+ database "dlopen ../driver.@SO@ 123456789.123456789.123456789.123456789.123456789.example.foo";
|
|
+};
|
|
+
|
|
dlz "unsearched1" {
|
|
database "dlopen ../driver.@SO@ other.nil";
|
|
search no;
|
|
--
|
|
2.23.0
|
|
|