Compare commits
11 Commits
e6cd397843
...
eb093537ba
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eb093537ba | ||
|
|
009f9b8749 | ||
|
|
e972ab95cd | ||
|
|
9a7d2022b6 | ||
|
|
34c65e95b9 | ||
|
|
1ade067ea8 | ||
|
|
ed53d67d48 | ||
|
|
0e1b233c47 | ||
|
|
4526a97458 | ||
|
|
69141dd877 | ||
|
|
8e58afbe91 |
@ -1,138 +0,0 @@
|
|||||||
From 73df5c80538970ee1fbc4fe3348109bdc281e197 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Aram Sargsyan <aram@isc.org>
|
|
||||||
Date: Thu, 18 Aug 2022 08:59:09 +0000
|
|
||||||
Subject: [PATCH] Fix memory leaks in DH code
|
|
||||||
|
|
||||||
When used with OpenSSL v3.0.0+, the `openssldh_compare()`,
|
|
||||||
`openssldh_paramcompare()`, and `openssldh_todns()` functions
|
|
||||||
fail to cleanup the used memory on some error paths.
|
|
||||||
|
|
||||||
Use `DST_RET` instead of `return`, when there is memory to be
|
|
||||||
released before returning from the functions.
|
|
||||||
|
|
||||||
Conflict: NA
|
|
||||||
Reference: https://gitlab.isc.org/isc-projects/bind9/-/commit/73df5c80538970ee1fbc4fe3348109bdc281e197
|
|
||||||
|
|
||||||
(cherry picked from commit 73d6bbff4e1df583810126fe58eac39bb52bc0d9)
|
|
||||||
---
|
|
||||||
lib/dns/openssldh_link.c | 45 +++++++++++++++++++++++-----------------
|
|
||||||
1 file changed, 26 insertions(+), 19 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/dns/openssldh_link.c b/lib/dns/openssldh_link.c
|
|
||||||
index 72b8209..ece97ea 100644
|
|
||||||
--- a/lib/dns/openssldh_link.c
|
|
||||||
+++ b/lib/dns/openssldh_link.c
|
|
||||||
@@ -68,6 +68,12 @@
|
|
||||||
"83655D23DCA3AD961C62F356208552BB9ED529077096966D" \
|
|
||||||
"670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF"
|
|
||||||
|
|
||||||
+#define DST_RET(a) \
|
|
||||||
+ { \
|
|
||||||
+ ret = a; \
|
|
||||||
+ goto err; \
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
static BIGNUM *bn2 = NULL, *bn768 = NULL, *bn1024 = NULL, *bn1536 = NULL;
|
|
||||||
|
|
||||||
#if !HAVE_DH_GET0_KEY
|
|
||||||
@@ -180,7 +186,8 @@ openssldh_computesecret(const dst_key_t *pub, const dst_key_t *priv,
|
|
||||||
|
|
||||||
static bool
|
|
||||||
openssldh_compare(const dst_key_t *key1, const dst_key_t *key2) {
|
|
||||||
- DH *dh1, *dh2;
|
|
||||||
+ bool ret = true;
|
|
||||||
+ DH *dh1, *dh2;
|
|
||||||
const BIGNUM *pub_key1 = NULL, *pub_key2 = NULL;
|
|
||||||
const BIGNUM *priv_key1 = NULL, *priv_key2 = NULL;
|
|
||||||
const BIGNUM *p1 = NULL, *g1 = NULL, *p2 = NULL, *g2 = NULL;
|
|
||||||
@@ -202,23 +209,24 @@ openssldh_compare(const dst_key_t *key1, const dst_key_t *key2) {
|
|
||||||
if (BN_cmp(p1, p2) != 0 || BN_cmp(g1, g2) != 0 ||
|
|
||||||
BN_cmp(pub_key1, pub_key2) != 0)
|
|
||||||
{
|
|
||||||
- return (false);
|
|
||||||
+ DST_RET(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (priv_key1 != NULL || priv_key2 != NULL) {
|
|
||||||
- if (priv_key1 == NULL || priv_key2 == NULL) {
|
|
||||||
- return (false);
|
|
||||||
- }
|
|
||||||
- if (BN_cmp(priv_key1, priv_key2) != 0) {
|
|
||||||
- return (false);
|
|
||||||
+ if (priv_key1 == NULL || priv_key2 == NULL ||
|
|
||||||
+ BN_cmp(priv_key1, priv_key2) != 0) {
|
|
||||||
+ DST_RET(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- return (true);
|
|
||||||
+
|
|
||||||
+err:
|
|
||||||
+ return (ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
|
||||||
openssldh_paramcompare(const dst_key_t *key1, const dst_key_t *key2) {
|
|
||||||
- DH *dh1, *dh2;
|
|
||||||
+ bool ret = true;
|
|
||||||
+ DH *dh1, *dh2;
|
|
||||||
const BIGNUM *p1 = NULL, *g1 = NULL, *p2 = NULL, *g2 = NULL;
|
|
||||||
|
|
||||||
dh1 = key1->keydata.dh;
|
|
||||||
@@ -234,9 +242,11 @@ openssldh_paramcompare(const dst_key_t *key1, const dst_key_t *key2) {
|
|
||||||
DH_get0_pqg(dh2, &p2, NULL, &g2);
|
|
||||||
|
|
||||||
if (BN_cmp(p1, p2) != 0 || BN_cmp(g1, g2) != 0) {
|
|
||||||
- return (false);
|
|
||||||
+ DST_RET(false);
|
|
||||||
}
|
|
||||||
- return (true);
|
|
||||||
+
|
|
||||||
+err:
|
|
||||||
+ return (ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
@@ -386,7 +396,8 @@ uint16_fromregion(isc_region_t *region) {
|
|
||||||
|
|
||||||
static isc_result_t
|
|
||||||
openssldh_todns(const dst_key_t *key, isc_buffer_t *data) {
|
|
||||||
- DH *dh;
|
|
||||||
+ isc_result_t ret = ISC_R_SUCCESS;
|
|
||||||
+ DH *dh;
|
|
||||||
const BIGNUM *pub_key = NULL, *p = NULL, *g = NULL;
|
|
||||||
isc_region_t r;
|
|
||||||
uint16_t dnslen, plen, glen, publen;
|
|
||||||
@@ -412,7 +423,7 @@ openssldh_todns(const dst_key_t *key, isc_buffer_t *data) {
|
|
||||||
publen = BN_num_bytes(pub_key);
|
|
||||||
dnslen = plen + glen + publen + 6;
|
|
||||||
if (r.length < (unsigned int)dnslen) {
|
|
||||||
- return (ISC_R_NOSPACE);
|
|
||||||
+ DST_RET(ISC_R_NOSPACE);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_toregion(plen, &r);
|
|
||||||
@@ -441,7 +452,8 @@ openssldh_todns(const dst_key_t *key, isc_buffer_t *data) {
|
|
||||||
|
|
||||||
isc_buffer_add(data, dnslen);
|
|
||||||
|
|
||||||
- return (ISC_R_SUCCESS);
|
|
||||||
+err:
|
|
||||||
+ return (ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
static isc_result_t
|
|
||||||
@@ -659,11 +671,6 @@ openssldh_parse(dst_key_t *key, isc_lex_t *lexer, dst_key_t *pub) {
|
|
||||||
DH *dh = NULL;
|
|
||||||
BIGNUM *pub_key = NULL, *priv_key = NULL, *p = NULL, *g = NULL;
|
|
||||||
isc_mem_t *mctx;
|
|
||||||
-#define DST_RET(a) \
|
|
||||||
- { \
|
|
||||||
- ret = a; \
|
|
||||||
- goto err; \
|
|
||||||
- }
|
|
||||||
|
|
||||||
UNUSED(pub);
|
|
||||||
mctx = key->mctx;
|
|
||||||
--
|
|
||||||
2.23.0
|
|
||||||
|
|
||||||
@ -1,107 +0,0 @@
|
|||||||
From 240caa32b9cab90a38ab863fd64e6becf5d1393c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Evan Hunt <each@isc.org>
|
|
||||||
Date: Thu, 25 May 2023 23:53:50 -0700
|
|
||||||
Subject: [PATCH] Stale answer lookups could loop when over recursion quota
|
|
||||||
|
|
||||||
When a query was aborted because of the recursion quota being exceeded,
|
|
||||||
but triggered a stale answer response and a stale data refresh query,
|
|
||||||
it could cause named to loop back where we are iterating and following
|
|
||||||
a delegation. Having no good answer in cache, we would fall back to
|
|
||||||
using serve-stale again, use the stale data, try to refresh the RRset,
|
|
||||||
and loop back again, without ever terminating until crashing due to
|
|
||||||
stack overflow.
|
|
||||||
|
|
||||||
This happens because in the functions 'query_notfound()' and
|
|
||||||
'query_delegation_recurse()', we check whether we can fall back to
|
|
||||||
serving stale data. We shouldn't do so if we are already refreshing
|
|
||||||
an RRset due to having prioritized stale data in cache.
|
|
||||||
|
|
||||||
In other words, we need to add an extra check to 'query_usestale()' to
|
|
||||||
disallow serving stale data if we are currently refreshing a stale
|
|
||||||
RRset.
|
|
||||||
|
|
||||||
As an additional mitigation to prevent looping, we now use the result
|
|
||||||
code ISC_R_ALREADYRUNNING rather than ISC_R_FAILURE when a recursion
|
|
||||||
loop is encountered, and we check for that condition in
|
|
||||||
'query_usestale()' as well.
|
|
||||||
|
|
||||||
---
|
|
||||||
lib/ns/query.c | 30 ++++++++++++++++++++++--------
|
|
||||||
1 file changed, 22 insertions(+), 8 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/ns/query.c b/lib/ns/query.c
|
|
||||||
index 1444de5..3ce6742 100644
|
|
||||||
--- a/lib/ns/query.c
|
|
||||||
+++ b/lib/ns/query.c
|
|
||||||
@@ -5696,6 +5696,7 @@ query_refresh_rrset(query_ctx_t *orig_qctx) {
|
|
||||||
qctx.client->query.dboptions &= ~(DNS_DBFIND_STALETIMEOUT |
|
|
||||||
DNS_DBFIND_STALEOK |
|
|
||||||
DNS_DBFIND_STALEENABLED);
|
|
||||||
+ qctx.client->nodetach = false;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We'll need some resources...
|
|
||||||
@@ -5920,7 +5921,14 @@ query_lookup(query_ctx_t *qctx) {
|
|
||||||
"%s stale answer used, an attempt to "
|
|
||||||
"refresh the RRset will still be made",
|
|
||||||
namebuf);
|
|
||||||
+
|
|
||||||
qctx->refresh_rrset = STALE(qctx->rdataset);
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * If we are refreshing the RRSet, we must not
|
|
||||||
+ * detach from the client in query_send().
|
|
||||||
+ */
|
|
||||||
+ qctx->client->nodetach = qctx->refresh_rrset;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/*
|
|
||||||
@@ -6272,7 +6280,7 @@ ns_query_recurse(ns_client_t *client, dns_rdatatype_t qtype, dns_name_t *qname,
|
|
||||||
if (recparam_match(&client->query.recparam, qtype, qname, qdomain)) {
|
|
||||||
ns_client_log(client, NS_LOGCATEGORY_CLIENT, NS_LOGMODULE_QUERY,
|
|
||||||
ISC_LOG_INFO, "recursion loop detected");
|
|
||||||
- return (ISC_R_FAILURE);
|
|
||||||
+ return (ISC_R_ALREADYRUNNING);
|
|
||||||
}
|
|
||||||
|
|
||||||
recparam_update(&client->query.recparam, qtype, qname, qdomain);
|
|
||||||
@@ -7235,10 +7243,21 @@ query_usestale(query_ctx_t *qctx, isc_result_t result) {
|
|
||||||
return (false);
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (result == DNS_R_DUPLICATE || result == DNS_R_DROP) {
|
|
||||||
+ if (qctx->refresh_rrset) {
|
|
||||||
+ /*
|
|
||||||
+ * This is a refreshing query, we have already prioritized
|
|
||||||
+ * stale data, so don't enable serve-stale again.
|
|
||||||
+ */
|
|
||||||
+ return (false);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (result == DNS_R_DUPLICATE || result == DNS_R_DROP ||
|
|
||||||
+ result == ISC_R_ALREADYRUNNING)
|
|
||||||
+ {
|
|
||||||
/*
|
|
||||||
* Don't enable serve-stale if the result signals a duplicate
|
|
||||||
- * query or query that is being dropped.
|
|
||||||
+ * query or a query that is being dropped or can't proceed
|
|
||||||
+ * because of a recursion loop.
|
|
||||||
*/
|
|
||||||
return (false);
|
|
||||||
}
|
|
||||||
@@ -11490,12 +11509,7 @@ ns_query_done(query_ctx_t *qctx) {
|
|
||||||
/*
|
|
||||||
* Client may have been detached after query_send(), so
|
|
||||||
* we test and store the flag state here, for safety.
|
|
||||||
- * If we are refreshing the RRSet, we must not detach from the client
|
|
||||||
- * in the query_send(), so we need to override the flag.
|
|
||||||
*/
|
|
||||||
- if (qctx->refresh_rrset) {
|
|
||||||
- qctx->client->nodetach = true;
|
|
||||||
- }
|
|
||||||
nodetach = qctx->client->nodetach;
|
|
||||||
query_send(qctx->client);
|
|
||||||
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
901
backport-CVE-2023-4408.patch
Normal file
901
backport-CVE-2023-4408.patch
Normal file
@ -0,0 +1,901 @@
|
|||||||
|
From 608707b4f5b473e416563bfe0d43e26d6dc4a5c6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= <ondrej@isc.org>
|
||||||
|
Date: Mon, 11 Sep 2023 10:35:28 +0200
|
||||||
|
Subject: [PATCH] Use hashtable when parsing a message
|
||||||
|
|
||||||
|
When parsing messages use a hashtable instead of a linear search to
|
||||||
|
reduce the amount of work done in findname when there's more than one
|
||||||
|
name in the section.
|
||||||
|
|
||||||
|
There are two hashtables:
|
||||||
|
|
||||||
|
1) hashtable for owner names - that's constructed for each section when
|
||||||
|
we hit the second name in the section and destroyed right after parsing
|
||||||
|
that section;
|
||||||
|
|
||||||
|
2) per-name hashtable - for each name in the section, we construct a new
|
||||||
|
hashtable for that name if there are more than one rdataset for that
|
||||||
|
particular name.
|
||||||
|
|
||||||
|
Conflict:NA
|
||||||
|
Reference:https://downloads.isc.org/isc/bind/9.18.24/patches/0001-CVE-2023-4408.patch
|
||||||
|
|
||||||
|
(cherry picked from commit b8a96317544c7b310b4f74360825a87b6402ddc2)
|
||||||
|
|
||||||
|
---
|
||||||
|
lib/dns/include/dns/message.h | 38 ----
|
||||||
|
lib/dns/include/dns/name.h | 37 ++--
|
||||||
|
lib/dns/message.c | 374 ++++++++++++++++++++++------------
|
||||||
|
lib/dns/name.c | 1 +
|
||||||
|
lib/isc/ht.c | 55 ++++-
|
||||||
|
5 files changed, 309 insertions(+), 196 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/dns/include/dns/message.h b/lib/dns/include/dns/message.h
|
||||||
|
index 940c9b1..f15884a 100644
|
||||||
|
--- a/lib/dns/include/dns/message.h
|
||||||
|
+++ b/lib/dns/include/dns/message.h
|
||||||
|
@@ -856,44 +856,6 @@ dns_message_findtype(const dns_name_t *name, dns_rdatatype_t type,
|
||||||
|
*\li #ISC_R_NOTFOUND -- the desired type does not exist.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-isc_result_t
|
||||||
|
-dns_message_find(const dns_name_t *name, dns_rdataclass_t rdclass,
|
||||||
|
- dns_rdatatype_t type, dns_rdatatype_t covers,
|
||||||
|
- dns_rdataset_t **rdataset);
|
||||||
|
-/*%<
|
||||||
|
- * Search the name for the specified rdclass and type. If it is found,
|
||||||
|
- * *rdataset is filled in with a pointer to that rdataset.
|
||||||
|
- *
|
||||||
|
- * Requires:
|
||||||
|
- *\li if '**rdataset' is non-NULL, *rdataset needs to be NULL.
|
||||||
|
- *
|
||||||
|
- *\li 'type' be a valid type, and NOT dns_rdatatype_any.
|
||||||
|
- *
|
||||||
|
- *\li If 'type' is dns_rdatatype_rrsig, 'covers' must be a valid type.
|
||||||
|
- * Otherwise it should be 0.
|
||||||
|
- *
|
||||||
|
- * Returns:
|
||||||
|
- *\li #ISC_R_SUCCESS -- all is well.
|
||||||
|
- *\li #ISC_R_NOTFOUND -- the desired type does not exist.
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
-void
|
||||||
|
-dns_message_movename(dns_message_t *msg, dns_name_t *name,
|
||||||
|
- dns_section_t fromsection, dns_section_t tosection);
|
||||||
|
-/*%<
|
||||||
|
- * Move a name from one section to another.
|
||||||
|
- *
|
||||||
|
- * Requires:
|
||||||
|
- *
|
||||||
|
- *\li 'msg' be valid.
|
||||||
|
- *
|
||||||
|
- *\li 'name' must be a name already in 'fromsection'.
|
||||||
|
- *
|
||||||
|
- *\li 'fromsection' must be a valid section.
|
||||||
|
- *
|
||||||
|
- *\li 'tosection' must be a valid section.
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
void
|
||||||
|
dns_message_addname(dns_message_t *msg, dns_name_t *name,
|
||||||
|
dns_section_t section);
|
||||||
|
diff --git a/lib/dns/include/dns/name.h b/lib/dns/include/dns/name.h
|
||||||
|
index a758c4d..199856a 100644
|
||||||
|
--- a/lib/dns/include/dns/name.h
|
||||||
|
+++ b/lib/dns/include/dns/name.h
|
||||||
|
@@ -68,6 +68,7 @@
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
+#include <isc/ht.h>
|
||||||
|
#include <isc/lang.h>
|
||||||
|
#include <isc/magic.h>
|
||||||
|
#include <isc/region.h> /* Required for storage size of dns_label_t. */
|
||||||
|
@@ -111,6 +112,7 @@ struct dns_name {
|
||||||
|
isc_buffer_t *buffer;
|
||||||
|
ISC_LINK(dns_name_t) link;
|
||||||
|
ISC_LIST(dns_rdataset_t) list;
|
||||||
|
+ isc_ht_t *ht;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define DNS_NAME_MAGIC ISC_MAGIC('D', 'N', 'S', 'n')
|
||||||
|
@@ -166,30 +168,24 @@ extern const dns_name_t *dns_wildcardname;
|
||||||
|
* unsigned char offsets[] = { 0, 6 };
|
||||||
|
* dns_name_t value = DNS_NAME_INITABSOLUTE(data, offsets);
|
||||||
|
*/
|
||||||
|
-#define DNS_NAME_INITNONABSOLUTE(A, B) \
|
||||||
|
- { \
|
||||||
|
- DNS_NAME_MAGIC, A, (sizeof(A) - 1), sizeof(B), \
|
||||||
|
- DNS_NAMEATTR_READONLY, B, NULL, \
|
||||||
|
- { (void *)-1, (void *)-1 }, { \
|
||||||
|
- NULL, NULL \
|
||||||
|
- } \
|
||||||
|
+#define DNS_NAME_INITNONABSOLUTE(A, B) \
|
||||||
|
+ { \
|
||||||
|
+ DNS_NAME_MAGIC, A, (sizeof(A) - 1), sizeof(B), \
|
||||||
|
+ DNS_NAMEATTR_READONLY, B, NULL, \
|
||||||
|
+ { (void *)-1, (void *)-1 }, { NULL, NULL }, NULL \
|
||||||
|
}
|
||||||
|
|
||||||
|
-#define DNS_NAME_INITABSOLUTE(A, B) \
|
||||||
|
- { \
|
||||||
|
- DNS_NAME_MAGIC, A, sizeof(A), sizeof(B), \
|
||||||
|
- DNS_NAMEATTR_READONLY | DNS_NAMEATTR_ABSOLUTE, B, \
|
||||||
|
- NULL, { (void *)-1, (void *)-1 }, { \
|
||||||
|
- NULL, NULL \
|
||||||
|
- } \
|
||||||
|
+#define DNS_NAME_INITABSOLUTE(A, B) \
|
||||||
|
+ { \
|
||||||
|
+ DNS_NAME_MAGIC, A, sizeof(A), sizeof(B), \
|
||||||
|
+ DNS_NAMEATTR_READONLY | DNS_NAMEATTR_ABSOLUTE, B, \
|
||||||
|
+ NULL, { (void *)-1, (void *)-1 }, { NULL, NULL }, NULL \
|
||||||
|
}
|
||||||
|
|
||||||
|
-#define DNS_NAME_INITEMPTY \
|
||||||
|
- { \
|
||||||
|
- DNS_NAME_MAGIC, NULL, 0, 0, 0, NULL, NULL, \
|
||||||
|
- { (void *)-1, (void *)-1 }, { \
|
||||||
|
- NULL, NULL \
|
||||||
|
- } \
|
||||||
|
+#define DNS_NAME_INITEMPTY \
|
||||||
|
+ { \
|
||||||
|
+ DNS_NAME_MAGIC, NULL, 0, 0, 0, NULL, NULL, \
|
||||||
|
+ { (void *)-1, (void *)-1 }, { NULL, NULL }, NULL \
|
||||||
|
}
|
||||||
|
|
||||||
|
/*%
|
||||||
|
@@ -1330,6 +1326,7 @@ ISC_LANG_ENDDECLS
|
||||||
|
_n->buffer = NULL; \
|
||||||
|
ISC_LINK_INIT(_n, link); \
|
||||||
|
ISC_LIST_INIT(_n->list); \
|
||||||
|
+ _n->ht = NULL; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define DNS_NAME_RESET(n) \
|
||||||
|
diff --git a/lib/dns/message.c b/lib/dns/message.c
|
||||||
|
index 761a8e1..8654e92 100644
|
||||||
|
--- a/lib/dns/message.c
|
||||||
|
+++ b/lib/dns/message.c
|
||||||
|
@@ -22,6 +22,8 @@
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#include <isc/buffer.h>
|
||||||
|
+#include <isc/hash.h>
|
||||||
|
+#include <isc/ht.h>
|
||||||
|
#include <isc/mem.h>
|
||||||
|
#include <isc/print.h>
|
||||||
|
#include <isc/result.h>
|
||||||
|
@@ -493,9 +495,11 @@ msgresetsigs(dns_message_t *msg, bool replying) {
|
||||||
|
} else {
|
||||||
|
dns_rdataset_disassociate(msg->tsig);
|
||||||
|
isc_mempool_put(msg->rdspool, msg->tsig);
|
||||||
|
+ msg->tsig = NULL;
|
||||||
|
if (msg->querytsig != NULL) {
|
||||||
|
dns_rdataset_disassociate(msg->querytsig);
|
||||||
|
isc_mempool_put(msg->rdspool, msg->querytsig);
|
||||||
|
+ msg->querytsig = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dns_message_puttempname(msg, &msg->tsigname);
|
||||||
|
@@ -790,6 +794,18 @@ dns_message_detach(dns_message_t **messagep) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+static isc_result_t
|
||||||
|
+name_hash_add(isc_ht_t *ht, dns_name_t *name, dns_name_t **foundp) {
|
||||||
|
+ isc_result_t result = isc_ht_find(ht, name->ndata, name->length,
|
||||||
|
+ (void **)foundp);
|
||||||
|
+ if (result == ISC_R_SUCCESS) {
|
||||||
|
+ return (ISC_R_EXISTS);
|
||||||
|
+ }
|
||||||
|
+ result = isc_ht_add(ht, name->ndata, name->length, (void *)name);
|
||||||
|
+ INSIST(result == ISC_R_SUCCESS);
|
||||||
|
+ return (ISC_R_SUCCESS);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static isc_result_t
|
||||||
|
findname(dns_name_t **foundname, const dns_name_t *target,
|
||||||
|
dns_namelist_t *section) {
|
||||||
|
@@ -809,29 +825,26 @@ findname(dns_name_t **foundname, const dns_name_t *target,
|
||||||
|
return (ISC_R_NOTFOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
-isc_result_t
|
||||||
|
-dns_message_find(const dns_name_t *name, dns_rdataclass_t rdclass,
|
||||||
|
- dns_rdatatype_t type, dns_rdatatype_t covers,
|
||||||
|
- dns_rdataset_t **rdataset) {
|
||||||
|
- dns_rdataset_t *curr;
|
||||||
|
-
|
||||||
|
- REQUIRE(name != NULL);
|
||||||
|
- REQUIRE(rdataset == NULL || *rdataset == NULL);
|
||||||
|
-
|
||||||
|
- for (curr = ISC_LIST_TAIL(name->list); curr != NULL;
|
||||||
|
- curr = ISC_LIST_PREV(curr, link))
|
||||||
|
- {
|
||||||
|
- if (curr->rdclass == rdclass && curr->type == type &&
|
||||||
|
- curr->covers == covers)
|
||||||
|
- {
|
||||||
|
- if (rdataset != NULL) {
|
||||||
|
- *rdataset = curr;
|
||||||
|
- }
|
||||||
|
- return (ISC_R_SUCCESS);
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
+typedef struct __attribute__((__packed__)) rds_key {
|
||||||
|
+ dns_rdataclass_t rdclass;
|
||||||
|
+ dns_rdatatype_t type;
|
||||||
|
+ dns_rdatatype_t covers;
|
||||||
|
+} rds_key_t;
|
||||||
|
|
||||||
|
- return (ISC_R_NOTFOUND);
|
||||||
|
+static isc_result_t
|
||||||
|
+rds_hash_add(isc_ht_t *ht, dns_rdataset_t *rds, dns_rdataset_t **foundp) {
|
||||||
|
+ rds_key_t key = { .rdclass = rds->rdclass,
|
||||||
|
+ .type = rds->type,
|
||||||
|
+ .covers = rds->covers };
|
||||||
|
+ isc_result_t result = isc_ht_find(ht, (const unsigned char *)&key,
|
||||||
|
+ sizeof(key), (void **)foundp);
|
||||||
|
+ if (result == ISC_R_SUCCESS) {
|
||||||
|
+ return (ISC_R_EXISTS);
|
||||||
|
+ }
|
||||||
|
+ result = isc_ht_add(ht, (const unsigned char *)&key, sizeof(key),
|
||||||
|
+ (void *)rds);
|
||||||
|
+ INSIST(result == ISC_R_SUCCESS);
|
||||||
|
+ return (ISC_R_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
isc_result_t
|
||||||
|
@@ -958,6 +971,18 @@ getrdata(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+cleanup_name_hashmaps(dns_namelist_t *section) {
|
||||||
|
+ dns_name_t *name = NULL;
|
||||||
|
+ for (name = ISC_LIST_HEAD(*section); name != NULL;
|
||||||
|
+ name = ISC_LIST_NEXT(name, link))
|
||||||
|
+ {
|
||||||
|
+ if (name->ht != NULL) {
|
||||||
|
+ isc_ht_destroy(&name->ht);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static isc_result_t
|
||||||
|
getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
unsigned int options) {
|
||||||
|
@@ -967,13 +992,19 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
dns_name_t *name2 = NULL;
|
||||||
|
dns_rdataset_t *rdataset = NULL;
|
||||||
|
dns_rdatalist_t *rdatalist = NULL;
|
||||||
|
- isc_result_t result;
|
||||||
|
+ isc_result_t result = ISC_R_SUCCESS;
|
||||||
|
dns_rdatatype_t rdtype;
|
||||||
|
dns_rdataclass_t rdclass;
|
||||||
|
dns_namelist_t *section = &msg->sections[DNS_SECTION_QUESTION];
|
||||||
|
bool best_effort = ((options & DNS_MESSAGEPARSE_BESTEFFORT) != 0);
|
||||||
|
bool seen_problem = false;
|
||||||
|
bool free_name = false;
|
||||||
|
+ bool free_ht = false;
|
||||||
|
+ isc_ht_t *name_map = NULL;
|
||||||
|
+
|
||||||
|
+ if (msg->counts[DNS_SECTION_QUESTION] > 1) {
|
||||||
|
+ isc_ht_init(&name_map, msg->mctx, 1, ISC_HT_CASE_INSENSITIVE);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
for (count = 0; count < msg->counts[DNS_SECTION_QUESTION]; count++) {
|
||||||
|
name = NULL;
|
||||||
|
@@ -994,13 +1025,19 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* If there is only one QNAME, skip the duplicity checks */
|
||||||
|
+ if (name_map == NULL) {
|
||||||
|
+ result = ISC_R_SUCCESS;
|
||||||
|
+ goto skip_name_check;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Run through the section, looking to see if this name
|
||||||
|
* is already there. If it is found, put back the allocated
|
||||||
|
* name since we no longer need it, and set our name pointer
|
||||||
|
* to point to the name we found.
|
||||||
|
*/
|
||||||
|
- result = findname(&name2, name, section);
|
||||||
|
+ result = name_hash_add(name_map, name, &name2);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If it is the first name in the section, accept it.
|
||||||
|
@@ -1012,19 +1049,25 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
* this should be legal or not. In either case we no longer
|
||||||
|
* need this name pointer.
|
||||||
|
*/
|
||||||
|
- if (result != ISC_R_SUCCESS) {
|
||||||
|
+ skip_name_check:
|
||||||
|
+ switch (result) {
|
||||||
|
+ case ISC_R_SUCCESS:
|
||||||
|
if (!ISC_LIST_EMPTY(*section)) {
|
||||||
|
DO_ERROR(DNS_R_FORMERR);
|
||||||
|
}
|
||||||
|
ISC_LIST_APPEND(*section, name, link);
|
||||||
|
- free_name = false;
|
||||||
|
- } else {
|
||||||
|
+ break;
|
||||||
|
+ case ISC_R_EXISTS:
|
||||||
|
dns_message_puttempname(msg, &name);
|
||||||
|
name = name2;
|
||||||
|
name2 = NULL;
|
||||||
|
- free_name = false;
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ UNREACHABLE();
|
||||||
|
}
|
||||||
|
|
||||||
|
+ free_name = false;
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Get type and class.
|
||||||
|
*/
|
||||||
|
@@ -1054,14 +1097,6 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
msg->tkey = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
- /*
|
||||||
|
- * Can't ask the same question twice.
|
||||||
|
- */
|
||||||
|
- result = dns_message_find(name, rdclass, rdtype, 0, NULL);
|
||||||
|
- if (result == ISC_R_SUCCESS) {
|
||||||
|
- DO_ERROR(DNS_R_FORMERR);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
/*
|
||||||
|
* Allocate a new rdatalist.
|
||||||
|
*/
|
||||||
|
@@ -1071,6 +1106,7 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
rdataset = isc_mempool_get(msg->rdspool);
|
||||||
|
+ dns_rdataset_init(rdataset);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert rdatalist to rdataset, and attach the latter to
|
||||||
|
@@ -1078,8 +1114,6 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
*/
|
||||||
|
rdatalist->type = rdtype;
|
||||||
|
rdatalist->rdclass = rdclass;
|
||||||
|
-
|
||||||
|
- dns_rdataset_init(rdataset);
|
||||||
|
result = dns_rdatalist_tordataset(rdatalist, rdataset);
|
||||||
|
if (result != ISC_R_SUCCESS) {
|
||||||
|
goto cleanup;
|
||||||
|
@@ -1087,24 +1121,66 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
|
||||||
|
rdataset->attributes |= DNS_RDATASETATTR_QUESTION;
|
||||||
|
|
||||||
|
+ /*
|
||||||
|
+ * Skip the duplicity check for first rdataset
|
||||||
|
+ */
|
||||||
|
+ if (ISC_LIST_EMPTY(name->list)) {
|
||||||
|
+ result = ISC_R_SUCCESS;
|
||||||
|
+ goto skip_rds_check;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Can't ask the same question twice.
|
||||||
|
+ */
|
||||||
|
+ if (name->ht == NULL) {
|
||||||
|
+ isc_ht_init(&name->ht, msg->mctx, 1,
|
||||||
|
+ ISC_HT_CASE_SENSITIVE);
|
||||||
|
+ free_ht = true;
|
||||||
|
+
|
||||||
|
+ INSIST(ISC_LIST_HEAD(name->list) ==
|
||||||
|
+ ISC_LIST_TAIL(name->list));
|
||||||
|
+
|
||||||
|
+ dns_rdataset_t *old_rdataset =
|
||||||
|
+ ISC_LIST_HEAD(name->list);
|
||||||
|
+
|
||||||
|
+ result = rds_hash_add(name->ht, old_rdataset, NULL);
|
||||||
|
+
|
||||||
|
+ INSIST(result == ISC_R_SUCCESS);
|
||||||
|
+ }
|
||||||
|
+ result = rds_hash_add(name->ht, rdataset, NULL);
|
||||||
|
+ if (result == ISC_R_EXISTS) {
|
||||||
|
+ DO_ERROR(DNS_R_FORMERR);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ skip_rds_check:
|
||||||
|
ISC_LIST_APPEND(name->list, rdataset, link);
|
||||||
|
+
|
||||||
|
rdataset = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (seen_problem) {
|
||||||
|
- return (DNS_R_RECOVERABLE);
|
||||||
|
+ result = DNS_R_RECOVERABLE;
|
||||||
|
}
|
||||||
|
- return (ISC_R_SUCCESS);
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
if (rdataset != NULL) {
|
||||||
|
- INSIST(!dns_rdataset_isassociated(rdataset));
|
||||||
|
+ if (dns_rdataset_isassociated(rdataset)) {
|
||||||
|
+ dns_rdataset_disassociate(rdataset);
|
||||||
|
+ }
|
||||||
|
isc_mempool_put(msg->rdspool, rdataset);
|
||||||
|
}
|
||||||
|
if (free_name) {
|
||||||
|
dns_message_puttempname(msg, &name);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (free_ht) {
|
||||||
|
+ cleanup_name_hashmaps(section);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (name_map != NULL) {
|
||||||
|
+ isc_ht_destroy(&name_map);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1184,17 +1260,24 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
dns_name_t *name = NULL;
|
||||||
|
dns_name_t *name2 = NULL;
|
||||||
|
dns_rdataset_t *rdataset = NULL;
|
||||||
|
+ dns_rdataset_t *found_rdataset = NULL;
|
||||||
|
dns_rdatalist_t *rdatalist = NULL;
|
||||||
|
- isc_result_t result;
|
||||||
|
+ isc_result_t result = ISC_R_SUCCESS;
|
||||||
|
dns_rdatatype_t rdtype, covers;
|
||||||
|
dns_rdataclass_t rdclass;
|
||||||
|
dns_rdata_t *rdata = NULL;
|
||||||
|
dns_ttl_t ttl;
|
||||||
|
dns_namelist_t *section = &msg->sections[sectionid];
|
||||||
|
- bool free_name = false, free_rdataset = false, seen_problem = false;
|
||||||
|
+ bool free_name = false, seen_problem = false;
|
||||||
|
+ bool free_ht = false;
|
||||||
|
bool preserve_order = ((options & DNS_MESSAGEPARSE_PRESERVEORDER) != 0);
|
||||||
|
bool best_effort = ((options & DNS_MESSAGEPARSE_BESTEFFORT) != 0);
|
||||||
|
bool isedns, issigzero, istsig;
|
||||||
|
+ isc_ht_t *name_map = NULL;
|
||||||
|
+
|
||||||
|
+ if (msg->counts[sectionid] > 1) {
|
||||||
|
+ isc_ht_init(&name_map, msg->mctx, 1, ISC_HT_CASE_INSENSITIVE);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
for (count = 0; count < msg->counts[sectionid]; count++) {
|
||||||
|
int recstart = source->current;
|
||||||
|
@@ -1202,10 +1285,10 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
|
||||||
|
skip_name_search = false;
|
||||||
|
skip_type_search = false;
|
||||||
|
- free_rdataset = false;
|
||||||
|
isedns = false;
|
||||||
|
issigzero = false;
|
||||||
|
istsig = false;
|
||||||
|
+ found_rdataset = NULL;
|
||||||
|
|
||||||
|
name = NULL;
|
||||||
|
result = dns_message_gettempname(msg, &name);
|
||||||
|
@@ -1245,8 +1328,8 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
if (msg->rdclass_set == 0 &&
|
||||||
|
rdtype != dns_rdatatype_opt && /* class is UDP SIZE */
|
||||||
|
rdtype != dns_rdatatype_tsig && /* class is ANY */
|
||||||
|
- rdtype != dns_rdatatype_tkey)
|
||||||
|
- { /* class is undefined */
|
||||||
|
+ rdtype != dns_rdatatype_tkey) /* class is undefined */
|
||||||
|
+ {
|
||||||
|
msg->rdclass = rdclass;
|
||||||
|
msg->rdclass_set = 1;
|
||||||
|
}
|
||||||
|
@@ -1353,10 +1436,6 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
* Then put the meta-class back into the finished rdata.
|
||||||
|
*/
|
||||||
|
rdata = newrdata(msg);
|
||||||
|
- if (rdata == NULL) {
|
||||||
|
- result = ISC_R_NOMEMORY;
|
||||||
|
- goto cleanup;
|
||||||
|
- }
|
||||||
|
if (msg->opcode == dns_opcode_update &&
|
||||||
|
update(sectionid, rdclass))
|
||||||
|
{
|
||||||
|
@@ -1445,34 +1524,62 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
free_name = false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
+ if (name_map == NULL) {
|
||||||
|
+ result = ISC_R_SUCCESS;
|
||||||
|
+ goto skip_name_check;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Run through the section, looking to see if this name
|
||||||
|
* is already there. If it is found, put back the
|
||||||
|
* allocated name since we no longer need it, and set
|
||||||
|
* our name pointer to point to the name we found.
|
||||||
|
*/
|
||||||
|
- result = findname(&name2, name, section);
|
||||||
|
+ result = name_hash_add(name_map, name, &name2);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If it is a new name, append to the section.
|
||||||
|
*/
|
||||||
|
- if (result == ISC_R_SUCCESS) {
|
||||||
|
+ skip_name_check:
|
||||||
|
+ switch (result) {
|
||||||
|
+ case ISC_R_SUCCESS:
|
||||||
|
+ ISC_LIST_APPEND(*section, name, link);
|
||||||
|
+ break;
|
||||||
|
+ case ISC_R_EXISTS:
|
||||||
|
dns_message_puttempname(msg, &name);
|
||||||
|
name = name2;
|
||||||
|
- } else {
|
||||||
|
- ISC_LIST_APPEND(*section, name, link);
|
||||||
|
+ name2 = NULL;
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ UNREACHABLE();
|
||||||
|
}
|
||||||
|
free_name = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ rdatalist = newrdatalist(msg);
|
||||||
|
+ rdatalist->type = rdtype;
|
||||||
|
+ rdatalist->covers = covers;
|
||||||
|
+ rdatalist->rdclass = rdclass;
|
||||||
|
+ rdatalist->ttl = ttl;
|
||||||
|
+
|
||||||
|
+ dns_message_gettemprdataset(msg, &rdataset);
|
||||||
|
+ RUNTIME_CHECK(dns_rdatalist_tordataset(rdatalist, rdataset) ==
|
||||||
|
+ ISC_R_SUCCESS);
|
||||||
|
+ dns_rdataset_setownercase(rdataset, name);
|
||||||
|
+ rdatalist = NULL;
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Search name for the particular type and class.
|
||||||
|
* Skip this stage if in update mode or this is a meta-type.
|
||||||
|
*/
|
||||||
|
- if (preserve_order || msg->opcode == dns_opcode_update ||
|
||||||
|
- skip_type_search)
|
||||||
|
+ if (isedns || istsig || issigzero) {
|
||||||
|
+ /* Skip adding the rdataset to the tables */
|
||||||
|
+ } else if (preserve_order || msg->opcode == dns_opcode_update ||
|
||||||
|
+ skip_type_search)
|
||||||
|
{
|
||||||
|
- result = ISC_R_NOTFOUND;
|
||||||
|
+ result = ISC_R_SUCCESS;
|
||||||
|
+
|
||||||
|
+ ISC_LIST_APPEND(name->list, rdataset, link);
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* If this is a type that can only occur in
|
||||||
|
@@ -1482,59 +1589,71 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
DO_ERROR(DNS_R_FORMERR);
|
||||||
|
}
|
||||||
|
|
||||||
|
- rdataset = NULL;
|
||||||
|
- result = dns_message_find(name, rdclass, rdtype, covers,
|
||||||
|
- &rdataset);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /*
|
||||||
|
- * If we found an rdataset that matches, we need to
|
||||||
|
- * append this rdata to that set. If we did not, we need
|
||||||
|
- * to create a new rdatalist, store the important bits there,
|
||||||
|
- * convert it to an rdataset, and link the latter to the name.
|
||||||
|
- * Yuck. When appending, make certain that the type isn't
|
||||||
|
- * a singleton type, such as SOA or CNAME.
|
||||||
|
- *
|
||||||
|
- * Note that this check will be bypassed when preserving order,
|
||||||
|
- * the opcode is an update, or the type search is skipped.
|
||||||
|
- */
|
||||||
|
- if (result == ISC_R_SUCCESS) {
|
||||||
|
- if (dns_rdatatype_issingleton(rdtype)) {
|
||||||
|
- dns_rdata_t *first;
|
||||||
|
- dns_rdatalist_fromrdataset(rdataset,
|
||||||
|
- &rdatalist);
|
||||||
|
- first = ISC_LIST_HEAD(rdatalist->rdata);
|
||||||
|
- INSIST(first != NULL);
|
||||||
|
- if (dns_rdata_compare(rdata, first) != 0) {
|
||||||
|
- DO_ERROR(DNS_R_FORMERR);
|
||||||
|
- }
|
||||||
|
+ if (ISC_LIST_EMPTY(name->list)) {
|
||||||
|
+ result = ISC_R_SUCCESS;
|
||||||
|
+ goto skip_rds_check;
|
||||||
|
}
|
||||||
|
- }
|
||||||
|
|
||||||
|
- if (result == ISC_R_NOTFOUND) {
|
||||||
|
- rdataset = isc_mempool_get(msg->rdspool);
|
||||||
|
- free_rdataset = true;
|
||||||
|
+ if (name->ht == NULL) {
|
||||||
|
+ isc_ht_init(&name->ht, msg->mctx, 1,
|
||||||
|
+ ISC_HT_CASE_SENSITIVE);
|
||||||
|
+ free_ht = true;
|
||||||
|
|
||||||
|
- rdatalist = newrdatalist(msg);
|
||||||
|
- if (rdatalist == NULL) {
|
||||||
|
- result = ISC_R_NOMEMORY;
|
||||||
|
- goto cleanup;
|
||||||
|
+ INSIST(ISC_LIST_HEAD(name->list) ==
|
||||||
|
+ ISC_LIST_TAIL(name->list));
|
||||||
|
+
|
||||||
|
+ dns_rdataset_t *old_rdataset =
|
||||||
|
+ ISC_LIST_HEAD(name->list);
|
||||||
|
+
|
||||||
|
+ result = rds_hash_add(name->ht, old_rdataset,
|
||||||
|
+ NULL);
|
||||||
|
+
|
||||||
|
+ INSIST(result == ISC_R_SUCCESS);
|
||||||
|
}
|
||||||
|
+ found_rdataset = NULL;
|
||||||
|
+ result = rds_hash_add(name->ht, rdataset,
|
||||||
|
+ &found_rdataset);
|
||||||
|
|
||||||
|
- rdatalist->type = rdtype;
|
||||||
|
- rdatalist->covers = covers;
|
||||||
|
- rdatalist->rdclass = rdclass;
|
||||||
|
- rdatalist->ttl = ttl;
|
||||||
|
+ /*
|
||||||
|
+ * If we found an rdataset that matches, we need to
|
||||||
|
+ * append this rdata to that set. If we did not, we
|
||||||
|
+ * need to create a new rdatalist, store the important
|
||||||
|
+ * bits there, convert it to an rdataset, and link the
|
||||||
|
+ * latter to the name. Yuck. When appending, make
|
||||||
|
+ * certain that the type isn't a singleton type, such as
|
||||||
|
+ * SOA or CNAME.
|
||||||
|
+ *
|
||||||
|
+ * Note that this check will be bypassed when preserving
|
||||||
|
+ * order, the opcode is an update, or the type search is
|
||||||
|
+ * skipped.
|
||||||
|
+ */
|
||||||
|
+ skip_rds_check:
|
||||||
|
+ switch (result) {
|
||||||
|
+ case ISC_R_EXISTS:
|
||||||
|
+ /* Free the rdataset we used as the key */
|
||||||
|
+ dns_rdataset_disassociate(rdataset);
|
||||||
|
+ isc_mempool_put(msg->rdspool, rdataset);
|
||||||
|
+ result = ISC_R_SUCCESS;
|
||||||
|
+ rdataset = found_rdataset;
|
||||||
|
|
||||||
|
- dns_rdataset_init(rdataset);
|
||||||
|
- RUNTIME_CHECK(
|
||||||
|
- dns_rdatalist_tordataset(rdatalist, rdataset) ==
|
||||||
|
- ISC_R_SUCCESS);
|
||||||
|
- dns_rdataset_setownercase(rdataset, name);
|
||||||
|
+ if (!dns_rdatatype_issingleton(rdtype)) {
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- if (!isedns && !istsig && !issigzero) {
|
||||||
|
+ dns_rdatalist_fromrdataset(rdataset,
|
||||||
|
+ &rdatalist);
|
||||||
|
+ dns_rdata_t *first =
|
||||||
|
+ ISC_LIST_HEAD(rdatalist->rdata);
|
||||||
|
+ INSIST(first != NULL);
|
||||||
|
+ if (dns_rdata_compare(rdata, first) != 0) {
|
||||||
|
+ DO_ERROR(DNS_R_FORMERR);
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
+ case ISC_R_SUCCESS:
|
||||||
|
ISC_LIST_APPEND(name->list, rdataset, link);
|
||||||
|
- free_rdataset = false;
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ UNREACHABLE();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1569,8 +1688,6 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
dns_rcode_t ercode;
|
||||||
|
|
||||||
|
msg->opt = rdataset;
|
||||||
|
- rdataset = NULL;
|
||||||
|
- free_rdataset = false;
|
||||||
|
ercode = (dns_rcode_t)((msg->opt->ttl &
|
||||||
|
DNS_MESSAGE_EDNSRCODE_MASK) >>
|
||||||
|
20);
|
||||||
|
@@ -1581,8 +1698,6 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
msg->sig0 = rdataset;
|
||||||
|
msg->sig0name = name;
|
||||||
|
msg->sigstart = recstart;
|
||||||
|
- rdataset = NULL;
|
||||||
|
- free_rdataset = false;
|
||||||
|
free_name = false;
|
||||||
|
} else if (istsig) {
|
||||||
|
msg->tsig = rdataset;
|
||||||
|
@@ -1592,22 +1707,17 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
* Windows doesn't like TSIG names to be compressed.
|
||||||
|
*/
|
||||||
|
msg->tsigname->attributes |= DNS_NAMEATTR_NOCOMPRESS;
|
||||||
|
- rdataset = NULL;
|
||||||
|
- free_rdataset = false;
|
||||||
|
free_name = false;
|
||||||
|
}
|
||||||
|
+ rdataset = NULL;
|
||||||
|
|
||||||
|
if (seen_problem) {
|
||||||
|
if (free_name) {
|
||||||
|
dns_message_puttempname(msg, &name);
|
||||||
|
}
|
||||||
|
- if (free_rdataset) {
|
||||||
|
- isc_mempool_put(msg->rdspool, rdataset);
|
||||||
|
- }
|
||||||
|
- free_name = free_rdataset = false;
|
||||||
|
+ free_name = false;
|
||||||
|
}
|
||||||
|
INSIST(!free_name);
|
||||||
|
- INSIST(!free_rdataset);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -1625,16 +1735,24 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
||||||
|
}
|
||||||
|
|
||||||
|
if (seen_problem) {
|
||||||
|
- return (DNS_R_RECOVERABLE);
|
||||||
|
+ result = DNS_R_RECOVERABLE;
|
||||||
|
}
|
||||||
|
- return (ISC_R_SUCCESS);
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
+ if (rdataset != NULL && rdataset != found_rdataset) {
|
||||||
|
+ dns_rdataset_disassociate(rdataset);
|
||||||
|
+ isc_mempool_put(msg->rdspool, rdataset);
|
||||||
|
+ }
|
||||||
|
if (free_name) {
|
||||||
|
dns_message_puttempname(msg, &name);
|
||||||
|
}
|
||||||
|
- if (free_rdataset) {
|
||||||
|
- isc_mempool_put(msg->rdspool, rdataset);
|
||||||
|
+
|
||||||
|
+ if (free_ht) {
|
||||||
|
+ cleanup_name_hashmaps(section);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (name_map != NULL) {
|
||||||
|
+ isc_ht_destroy(&name_map);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (result);
|
||||||
|
@@ -2452,7 +2570,7 @@ dns_message_findname(dns_message_t *msg, dns_section_t section,
|
||||||
|
const dns_name_t *target, dns_rdatatype_t type,
|
||||||
|
dns_rdatatype_t covers, dns_name_t **name,
|
||||||
|
dns_rdataset_t **rdataset) {
|
||||||
|
- dns_name_t *foundname;
|
||||||
|
+ dns_name_t *foundname = NULL;
|
||||||
|
isc_result_t result;
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -2499,22 +2617,6 @@ dns_message_findname(dns_message_t *msg, dns_section_t section,
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
-void
|
||||||
|
-dns_message_movename(dns_message_t *msg, dns_name_t *name,
|
||||||
|
- dns_section_t fromsection, dns_section_t tosection) {
|
||||||
|
- REQUIRE(msg != NULL);
|
||||||
|
- REQUIRE(msg->from_to_wire == DNS_MESSAGE_INTENTRENDER);
|
||||||
|
- REQUIRE(name != NULL);
|
||||||
|
- REQUIRE(VALID_NAMED_SECTION(fromsection));
|
||||||
|
- REQUIRE(VALID_NAMED_SECTION(tosection));
|
||||||
|
-
|
||||||
|
- /*
|
||||||
|
- * Unlink the name from the old section
|
||||||
|
- */
|
||||||
|
- ISC_LIST_UNLINK(msg->sections[fromsection], name, link);
|
||||||
|
- ISC_LIST_APPEND(msg->sections[tosection], name, link);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
void
|
||||||
|
dns_message_addname(dns_message_t *msg, dns_name_t *name,
|
||||||
|
dns_section_t section) {
|
||||||
|
@@ -2591,6 +2693,10 @@ dns_message_puttempname(dns_message_t *msg, dns_name_t **itemp) {
|
||||||
|
REQUIRE(!ISC_LINK_LINKED(item, link));
|
||||||
|
REQUIRE(ISC_LIST_HEAD(item->list) == NULL);
|
||||||
|
|
||||||
|
+ if (item->ht != NULL) {
|
||||||
|
+ isc_ht_destroy(&item->ht);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* we need to check this in case dns_name_dup() was used.
|
||||||
|
*/
|
||||||
|
diff --git a/lib/dns/name.c b/lib/dns/name.c
|
||||||
|
index 8a258a2..90044ba 100644
|
||||||
|
--- a/lib/dns/name.c
|
||||||
|
+++ b/lib/dns/name.c
|
||||||
|
@@ -188,6 +188,7 @@ dns_name_invalidate(dns_name_t *name) {
|
||||||
|
name->offsets = NULL;
|
||||||
|
name->buffer = NULL;
|
||||||
|
ISC_LINK_INIT(name, link);
|
||||||
|
+ INSIST(name->ht == NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
diff --git a/lib/isc/ht.c b/lib/isc/ht.c
|
||||||
|
index eaf2b3c..e11050f 100644
|
||||||
|
--- a/lib/isc/ht.c
|
||||||
|
+++ b/lib/isc/ht.c
|
||||||
|
@@ -93,11 +93,54 @@ maybe_rehash(isc_ht_t *ht, size_t newcount);
|
||||||
|
static isc_result_t
|
||||||
|
isc__ht_iter_next(isc_ht_iter_t *it);
|
||||||
|
|
||||||
|
+static uint8_t maptolower[] = {
|
||||||
|
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
|
||||||
|
+ 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
|
||||||
|
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,
|
||||||
|
+ 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
|
||||||
|
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b,
|
||||||
|
+ 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
|
||||||
|
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73,
|
||||||
|
+ 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
|
||||||
|
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b,
|
||||||
|
+ 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
|
||||||
|
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83,
|
||||||
|
+ 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
|
||||||
|
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b,
|
||||||
|
+ 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
|
||||||
|
+ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3,
|
||||||
|
+ 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
|
||||||
|
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb,
|
||||||
|
+ 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
|
||||||
|
+ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3,
|
||||||
|
+ 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
|
||||||
|
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb,
|
||||||
|
+ 0xfc, 0xfd, 0xfe, 0xff
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static int
|
||||||
|
+memcasecmp(const void *vs1, const void *vs2, size_t len) {
|
||||||
|
+ uint8_t const *s1 = vs1;
|
||||||
|
+ uint8_t const *s2 = vs2;
|
||||||
|
+ for (size_t i = 0; i < len; i++) {
|
||||||
|
+ uint8_t u1 = s1[i];
|
||||||
|
+ uint8_t u2 = s2[i];
|
||||||
|
+ int U1 = maptolower[u1];
|
||||||
|
+ int U2 = maptolower[u2];
|
||||||
|
+ int diff = U1 - U2;
|
||||||
|
+ if (diff) {
|
||||||
|
+ return diff;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static bool
|
||||||
|
isc__ht_node_match(isc_ht_node_t *node, const uint32_t hashval,
|
||||||
|
- const uint8_t *key, uint32_t keysize) {
|
||||||
|
+ const uint8_t *key, uint32_t keysize, bool case_sensitive) {
|
||||||
|
return (node->hashval == hashval && node->keysize == keysize &&
|
||||||
|
- memcmp(node->key, key, keysize) == 0);
|
||||||
|
+ (case_sensitive ? (memcmp(node->key, key, keysize) == 0)
|
||||||
|
+ : (memcasecmp(node->key, key, keysize) == 0)));
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint32_t
|
||||||
|
@@ -341,7 +384,9 @@ nexttable:
|
||||||
|
for (isc_ht_node_t *node = ht->table[findex][hash]; node != NULL;
|
||||||
|
node = node->next)
|
||||||
|
{
|
||||||
|
- if (isc__ht_node_match(node, hashval, key, keysize)) {
|
||||||
|
+ if (isc__ht_node_match(node, hashval, key, keysize,
|
||||||
|
+ ht->case_sensitive))
|
||||||
|
+ {
|
||||||
|
return (node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -390,7 +435,9 @@ isc__ht_delete(isc_ht_t *ht, const unsigned char *key, const uint32_t keysize,
|
||||||
|
for (isc_ht_node_t *node = ht->table[idx][hash]; node != NULL;
|
||||||
|
prev = node, node = node->next)
|
||||||
|
{
|
||||||
|
- if (isc__ht_node_match(node, hashval, key, keysize)) {
|
||||||
|
+ if (isc__ht_node_match(node, hashval, key, keysize,
|
||||||
|
+ ht->case_sensitive))
|
||||||
|
+ {
|
||||||
|
if (prev == NULL) {
|
||||||
|
ht->table[idx][hash] = node->next;
|
||||||
|
} else {
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
600
backport-CVE-2023-50387-CVE-2023-50868.patch
Normal file
600
backport-CVE-2023-50387-CVE-2023-50868.patch
Normal file
@ -0,0 +1,600 @@
|
|||||||
|
From c12608ca934c0433d280e65fe6c631013e200cfe Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= <ondrej@isc.org>
|
||||||
|
Date: Thu, 11 Jan 2024 12:03:24 +0100
|
||||||
|
Subject: [PATCH] Split fast and slow task queues
|
||||||
|
|
||||||
|
Change the taskmgr (and thus netmgr) in a way that it supports fast and
|
||||||
|
slow task queues. The fast queue is used for incoming DNS traffic and
|
||||||
|
it will pass the processing to the slow queue for sending outgoing DNS
|
||||||
|
messages and processing resolver messages.
|
||||||
|
|
||||||
|
In the future, more tasks might get moved to the slow queues, so the
|
||||||
|
cached and authoritative DNS traffic can be handled without being slowed
|
||||||
|
down by operations that take longer time to process.
|
||||||
|
|
||||||
|
Conflict:NA
|
||||||
|
Reference:https://downloads.isc.org/isc/bind/9.18.24/patches/0004-CVE-2023-50387-CVE-2023-50868.patch
|
||||||
|
|
||||||
|
(cherry picked from commit 1b3b0cef224e7a9e8279c5cfe2f7e188e3777cc7)
|
||||||
|
---
|
||||||
|
lib/dns/dst_api.c | 27 +++++++++----
|
||||||
|
lib/dns/include/dns/validator.h | 1 +
|
||||||
|
lib/dns/include/dst/dst.h | 4 ++
|
||||||
|
lib/dns/resolver.c | 4 +-
|
||||||
|
lib/dns/validator.c | 67 +++++++++++++++------------------
|
||||||
|
lib/isc/include/isc/netmgr.h | 3 ++
|
||||||
|
lib/isc/netmgr/http.c | 18 ++++-----
|
||||||
|
lib/isc/netmgr/netmgr-int.h | 1 +
|
||||||
|
lib/isc/netmgr/netmgr.c | 38 ++++++++++++-------
|
||||||
|
lib/isc/netmgr/tcp.c | 6 +--
|
||||||
|
lib/isc/netmgr/tcpdns.c | 4 +-
|
||||||
|
lib/isc/netmgr/tlsdns.c | 4 +-
|
||||||
|
lib/isc/netmgr/tlsstream.c | 12 +++---
|
||||||
|
lib/isc/netmgr/udp.c | 6 +--
|
||||||
|
14 files changed, 109 insertions(+), 86 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/dns/dst_api.c b/lib/dns/dst_api.c
|
||||||
|
index 4ffda8b..0658c69 100644
|
||||||
|
--- a/lib/dns/dst_api.c
|
||||||
|
+++ b/lib/dns/dst_api.c
|
||||||
|
@@ -164,7 +164,8 @@ computeid(dst_key_t *key);
|
||||||
|
static isc_result_t
|
||||||
|
frombuffer(const dns_name_t *name, unsigned int alg, unsigned int flags,
|
||||||
|
unsigned int protocol, dns_rdataclass_t rdclass,
|
||||||
|
- isc_buffer_t *source, isc_mem_t *mctx, dst_key_t **keyp);
|
||||||
|
+ isc_buffer_t *source, isc_mem_t *mctx, bool no_rdata,
|
||||||
|
+ dst_key_t **keyp);
|
||||||
|
|
||||||
|
static isc_result_t
|
||||||
|
algorithm_status(unsigned int alg);
|
||||||
|
@@ -753,6 +754,13 @@ dst_key_todns(const dst_key_t *key, isc_buffer_t *target) {
|
||||||
|
isc_result_t
|
||||||
|
dst_key_fromdns(const dns_name_t *name, dns_rdataclass_t rdclass,
|
||||||
|
isc_buffer_t *source, isc_mem_t *mctx, dst_key_t **keyp) {
|
||||||
|
+ return (dst_key_fromdns_ex(name, rdclass, source, mctx, false, keyp));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+isc_result_t
|
||||||
|
+dst_key_fromdns_ex(const dns_name_t *name, dns_rdataclass_t rdclass,
|
||||||
|
+ isc_buffer_t *source, isc_mem_t *mctx, bool no_rdata,
|
||||||
|
+ dst_key_t **keyp) {
|
||||||
|
uint8_t alg, proto;
|
||||||
|
uint32_t flags, extflags;
|
||||||
|
dst_key_t *key = NULL;
|
||||||
|
@@ -783,7 +791,7 @@ dst_key_fromdns(const dns_name_t *name, dns_rdataclass_t rdclass,
|
||||||
|
}
|
||||||
|
|
||||||
|
result = frombuffer(name, alg, flags, proto, rdclass, source, mctx,
|
||||||
|
- &key);
|
||||||
|
+ no_rdata, &key);
|
||||||
|
if (result != ISC_R_SUCCESS) {
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
@@ -804,7 +812,7 @@ dst_key_frombuffer(const dns_name_t *name, unsigned int alg, unsigned int flags,
|
||||||
|
REQUIRE(dst_initialized);
|
||||||
|
|
||||||
|
result = frombuffer(name, alg, flags, protocol, rdclass, source, mctx,
|
||||||
|
- &key);
|
||||||
|
+ false, &key);
|
||||||
|
if (result != ISC_R_SUCCESS) {
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
@@ -2351,7 +2359,8 @@ computeid(dst_key_t *key) {
|
||||||
|
static isc_result_t
|
||||||
|
frombuffer(const dns_name_t *name, unsigned int alg, unsigned int flags,
|
||||||
|
unsigned int protocol, dns_rdataclass_t rdclass,
|
||||||
|
- isc_buffer_t *source, isc_mem_t *mctx, dst_key_t **keyp) {
|
||||||
|
+ isc_buffer_t *source, isc_mem_t *mctx, bool no_rdata,
|
||||||
|
+ dst_key_t **keyp) {
|
||||||
|
dst_key_t *key;
|
||||||
|
isc_result_t ret;
|
||||||
|
|
||||||
|
@@ -2376,10 +2385,12 @@ frombuffer(const dns_name_t *name, unsigned int alg, unsigned int flags,
|
||||||
|
return (DST_R_UNSUPPORTEDALG);
|
||||||
|
}
|
||||||
|
|
||||||
|
- ret = key->func->fromdns(key, source);
|
||||||
|
- if (ret != ISC_R_SUCCESS) {
|
||||||
|
- dst_key_free(&key);
|
||||||
|
- return (ret);
|
||||||
|
+ if (!no_rdata) {
|
||||||
|
+ ret = key->func->fromdns(key, source);
|
||||||
|
+ if (ret != ISC_R_SUCCESS) {
|
||||||
|
+ dst_key_free(&key);
|
||||||
|
+ return (ret);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/lib/dns/include/dns/validator.h b/lib/dns/include/dns/validator.h
|
||||||
|
index 383dcb4..352a60a 100644
|
||||||
|
--- a/lib/dns/include/dns/validator.h
|
||||||
|
+++ b/lib/dns/include/dns/validator.h
|
||||||
|
@@ -148,6 +148,7 @@ struct dns_validator {
|
||||||
|
unsigned int depth;
|
||||||
|
unsigned int authcount;
|
||||||
|
unsigned int authfail;
|
||||||
|
+ bool failed;
|
||||||
|
isc_stdtime_t start;
|
||||||
|
};
|
||||||
|
|
||||||
|
diff --git a/lib/dns/include/dst/dst.h b/lib/dns/include/dst/dst.h
|
||||||
|
index ca292b0..f845e9b 100644
|
||||||
|
--- a/lib/dns/include/dst/dst.h
|
||||||
|
+++ b/lib/dns/include/dst/dst.h
|
||||||
|
@@ -482,6 +482,10 @@ dst_key_tofile(const dst_key_t *key, int type, const char *directory);
|
||||||
|
*/
|
||||||
|
|
||||||
|
isc_result_t
|
||||||
|
+dst_key_fromdns_ex(const dns_name_t *name, dns_rdataclass_t rdclass,
|
||||||
|
+ isc_buffer_t *source, isc_mem_t *mctx, bool no_rdata,
|
||||||
|
+ dst_key_t **keyp);
|
||||||
|
+isc_result_t
|
||||||
|
dst_key_fromdns(const dns_name_t *name, dns_rdataclass_t rdclass,
|
||||||
|
isc_buffer_t *source, isc_mem_t *mctx, dst_key_t **keyp);
|
||||||
|
/*%<
|
||||||
|
diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c
|
||||||
|
index 4b3d1c0..60cac29 100644
|
||||||
|
--- a/lib/dns/resolver.c
|
||||||
|
+++ b/lib/dns/resolver.c
|
||||||
|
@@ -10408,8 +10408,8 @@ dns_resolver_create(dns_view_t *view, isc_taskmgr_t *taskmgr,
|
||||||
|
* Since we have a pool of tasks we bind them to task
|
||||||
|
* queues to spread the load evenly
|
||||||
|
*/
|
||||||
|
- result = isc_task_create_bound(taskmgr, 0,
|
||||||
|
- &res->buckets[i].task, i);
|
||||||
|
+ result = isc_task_create_bound(
|
||||||
|
+ taskmgr, 0, &res->buckets[i].task, ISC_NM_TASK_SLOW(i));
|
||||||
|
if (result != ISC_R_SUCCESS) {
|
||||||
|
ntasks = i;
|
||||||
|
isc_mutex_destroy(&res->buckets[i].lock);
|
||||||
|
diff --git a/lib/dns/validator.c b/lib/dns/validator.c
|
||||||
|
index 56a0ced..47c4813 100644
|
||||||
|
--- a/lib/dns/validator.c
|
||||||
|
+++ b/lib/dns/validator.c
|
||||||
|
@@ -1104,8 +1104,8 @@ create_validator(dns_validator_t *val, dns_name_t *name, dns_rdatatype_t type,
|
||||||
|
* 'rdataset'. If found, build a dst_key_t for it and point val->key at
|
||||||
|
* it.
|
||||||
|
*
|
||||||
|
- * If val->key is already non-NULL, locate it in the rdataset and then
|
||||||
|
- * search past it for the *next* key that could have signed 'siginfo', then
|
||||||
|
+ * If val->key is already non-NULL, start searching from the next position in
|
||||||
|
+ * 'rdataset' to find the *next* key that could have signed 'siginfo', then
|
||||||
|
* set val->key to that.
|
||||||
|
*
|
||||||
|
* Returns ISC_R_SUCCESS if a possible matching key has been found,
|
||||||
|
@@ -1118,59 +1118,59 @@ select_signing_key(dns_validator_t *val, dns_rdataset_t *rdataset) {
|
||||||
|
isc_buffer_t b;
|
||||||
|
dns_rdata_t rdata = DNS_RDATA_INIT;
|
||||||
|
dst_key_t *oldkey = val->key;
|
||||||
|
- bool foundold;
|
||||||
|
+ bool no_rdata = false;
|
||||||
|
|
||||||
|
if (oldkey == NULL) {
|
||||||
|
- foundold = true;
|
||||||
|
+ result = dns_rdataset_first(rdataset);
|
||||||
|
} else {
|
||||||
|
- foundold = false;
|
||||||
|
+ dst_key_free(&oldkey);
|
||||||
|
val->key = NULL;
|
||||||
|
+ result = dns_rdataset_next(rdataset);
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- result = dns_rdataset_first(rdataset);
|
||||||
|
if (result != ISC_R_SUCCESS) {
|
||||||
|
- goto failure;
|
||||||
|
+ goto done;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
do {
|
||||||
|
dns_rdataset_current(rdataset, &rdata);
|
||||||
|
|
||||||
|
isc_buffer_init(&b, rdata.data, rdata.length);
|
||||||
|
isc_buffer_add(&b, rdata.length);
|
||||||
|
INSIST(val->key == NULL);
|
||||||
|
- result = dst_key_fromdns(&siginfo->signer, rdata.rdclass, &b,
|
||||||
|
- val->view->mctx, &val->key);
|
||||||
|
+ result = dst_key_fromdns_ex(&siginfo->signer, rdata.rdclass, &b,
|
||||||
|
+ val->view->mctx, no_rdata,
|
||||||
|
+ &val->key);
|
||||||
|
if (result == ISC_R_SUCCESS) {
|
||||||
|
if (siginfo->algorithm ==
|
||||||
|
(dns_secalg_t)dst_key_alg(val->key) &&
|
||||||
|
siginfo->keyid ==
|
||||||
|
(dns_keytag_t)dst_key_id(val->key) &&
|
||||||
|
+ (dst_key_flags(val->key) & DNS_KEYFLAG_REVOKE) ==
|
||||||
|
+ 0 &&
|
||||||
|
dst_key_iszonekey(val->key))
|
||||||
|
{
|
||||||
|
- if (foundold) {
|
||||||
|
- /*
|
||||||
|
- * This is the key we're looking for.
|
||||||
|
- */
|
||||||
|
- return (ISC_R_SUCCESS);
|
||||||
|
- } else if (dst_key_compare(oldkey, val->key)) {
|
||||||
|
- foundold = true;
|
||||||
|
- dst_key_free(&oldkey);
|
||||||
|
+ if (no_rdata) {
|
||||||
|
+ /* Retry with full key */
|
||||||
|
+ dns_rdata_reset(&rdata);
|
||||||
|
+ dst_key_free(&val->key);
|
||||||
|
+ no_rdata = false;
|
||||||
|
+ continue;
|
||||||
|
}
|
||||||
|
+ /* This is the key we're looking for. */
|
||||||
|
+ goto done;
|
||||||
|
}
|
||||||
|
dst_key_free(&val->key);
|
||||||
|
}
|
||||||
|
dns_rdata_reset(&rdata);
|
||||||
|
result = dns_rdataset_next(rdataset);
|
||||||
|
+ no_rdata = true;
|
||||||
|
} while (result == ISC_R_SUCCESS);
|
||||||
|
|
||||||
|
+done:
|
||||||
|
if (result == ISC_R_NOMORE) {
|
||||||
|
result = ISC_R_NOTFOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
-failure:
|
||||||
|
- if (oldkey != NULL) {
|
||||||
|
- dst_key_free(&oldkey);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1589,20 +1589,9 @@ validate_answer(dns_validator_t *val, bool resume) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
- do {
|
||||||
|
- isc_result_t tresult;
|
||||||
|
- vresult = verify(val, val->key, &rdata,
|
||||||
|
- val->siginfo->keyid);
|
||||||
|
- if (vresult == ISC_R_SUCCESS) {
|
||||||
|
- break;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- tresult = select_signing_key(val, val->keyset);
|
||||||
|
- if (tresult != ISC_R_SUCCESS) {
|
||||||
|
- break;
|
||||||
|
- }
|
||||||
|
- } while (1);
|
||||||
|
+ vresult = verify(val, val->key, &rdata, val->siginfo->keyid);
|
||||||
|
if (vresult != ISC_R_SUCCESS) {
|
||||||
|
+ val->failed = true;
|
||||||
|
validator_log(val, ISC_LOG_DEBUG(3),
|
||||||
|
"failed to verify rdataset");
|
||||||
|
} else {
|
||||||
|
@@ -1639,9 +1628,13 @@ validate_answer(dns_validator_t *val, bool resume) {
|
||||||
|
} else {
|
||||||
|
validator_log(val, ISC_LOG_DEBUG(3),
|
||||||
|
"verify failure: %s",
|
||||||
|
- isc_result_totext(result));
|
||||||
|
+ isc_result_totext(vresult));
|
||||||
|
resume = false;
|
||||||
|
}
|
||||||
|
+ if (val->failed) {
|
||||||
|
+ result = ISC_R_NOMORE;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
if (result != ISC_R_NOMORE) {
|
||||||
|
validator_log(val, ISC_LOG_DEBUG(3),
|
||||||
|
diff --git a/lib/isc/include/isc/netmgr.h b/lib/isc/include/isc/netmgr.h
|
||||||
|
index eff33f6..d42cfe9 100644
|
||||||
|
--- a/lib/isc/include/isc/netmgr.h
|
||||||
|
+++ b/lib/isc/include/isc/netmgr.h
|
||||||
|
@@ -750,6 +750,9 @@ isc_nm_verify_tls_peer_result_string(const isc_nmhandle_t *handle);
|
||||||
|
* \li 'handle' is a valid netmgr handle object.
|
||||||
|
*/
|
||||||
|
|
||||||
|
+#define ISC_NM_TASK_SLOW_OFFSET -2
|
||||||
|
+#define ISC_NM_TASK_SLOW(i) (ISC_NM_TASK_SLOW_OFFSET - 1 - i)
|
||||||
|
+
|
||||||
|
void
|
||||||
|
isc_nm_task_enqueue(isc_nm_t *mgr, isc_task_t *task, int threadid);
|
||||||
|
/*%<
|
||||||
|
diff --git a/lib/isc/netmgr/http.c b/lib/isc/netmgr/http.c
|
||||||
|
index d7a33d5..2220edf 100644
|
||||||
|
--- a/lib/isc/netmgr/http.c
|
||||||
|
+++ b/lib/isc/netmgr/http.c
|
||||||
|
@@ -2969,7 +2969,7 @@ isc__nm_http_set_max_streams(isc_nmsocket_t *listener,
|
||||||
|
void
|
||||||
|
isc_nm_http_set_endpoints(isc_nmsocket_t *listener,
|
||||||
|
isc_nm_http_endpoints_t *eps) {
|
||||||
|
- size_t nworkers;
|
||||||
|
+ size_t nlisteners;
|
||||||
|
|
||||||
|
REQUIRE(VALID_NMSOCK(listener));
|
||||||
|
REQUIRE(listener->type == isc_nm_httplistener);
|
||||||
|
@@ -2977,8 +2977,8 @@ isc_nm_http_set_endpoints(isc_nmsocket_t *listener,
|
||||||
|
|
||||||
|
atomic_store(&eps->in_use, true);
|
||||||
|
|
||||||
|
- nworkers = (size_t)listener->mgr->nworkers;
|
||||||
|
- for (size_t i = 0; i < nworkers; i++) {
|
||||||
|
+ nlisteners = (size_t)listener->mgr->nlisteners;
|
||||||
|
+ for (size_t i = 0; i < nlisteners; i++) {
|
||||||
|
isc__netievent__http_eps_t *ievent =
|
||||||
|
isc__nm_get_netievent_httpendpoints(listener->mgr,
|
||||||
|
listener, eps);
|
||||||
|
@@ -3003,20 +3003,20 @@ isc__nm_async_httpendpoints(isc__networker_t *worker, isc__netievent_t *ev0) {
|
||||||
|
static void
|
||||||
|
http_init_listener_endpoints(isc_nmsocket_t *listener,
|
||||||
|
isc_nm_http_endpoints_t *epset) {
|
||||||
|
- size_t nworkers;
|
||||||
|
+ size_t nlisteners;
|
||||||
|
|
||||||
|
REQUIRE(VALID_NMSOCK(listener));
|
||||||
|
REQUIRE(VALID_NM(listener->mgr));
|
||||||
|
REQUIRE(VALID_HTTP_ENDPOINTS(epset));
|
||||||
|
|
||||||
|
- nworkers = (size_t)listener->mgr->nworkers;
|
||||||
|
- INSIST(nworkers > 0);
|
||||||
|
+ nlisteners = (size_t)listener->mgr->nlisteners;
|
||||||
|
+ INSIST(nlisteners > 0);
|
||||||
|
|
||||||
|
listener->h2.listener_endpoints =
|
||||||
|
isc_mem_get(listener->mgr->mctx,
|
||||||
|
- sizeof(isc_nm_http_endpoints_t *) * nworkers);
|
||||||
|
- listener->h2.n_listener_endpoints = nworkers;
|
||||||
|
- for (size_t i = 0; i < nworkers; i++) {
|
||||||
|
+ sizeof(isc_nm_http_endpoints_t *) * nlisteners);
|
||||||
|
+ listener->h2.n_listener_endpoints = nlisteners;
|
||||||
|
+ for (size_t i = 0; i < nlisteners; i++) {
|
||||||
|
listener->h2.listener_endpoints[i] = NULL;
|
||||||
|
isc_nm_http_endpoints_attach(
|
||||||
|
epset, &listener->h2.listener_endpoints[i]);
|
||||||
|
diff --git a/lib/isc/netmgr/netmgr-int.h b/lib/isc/netmgr/netmgr-int.h
|
||||||
|
index 364a933..6aca9ab 100644
|
||||||
|
--- a/lib/isc/netmgr/netmgr-int.h
|
||||||
|
+++ b/lib/isc/netmgr/netmgr-int.h
|
||||||
|
@@ -776,6 +776,7 @@ struct isc_nm {
|
||||||
|
isc_refcount_t references;
|
||||||
|
isc_mem_t *mctx;
|
||||||
|
int nworkers;
|
||||||
|
+ int nlisteners;
|
||||||
|
isc_mutex_t lock;
|
||||||
|
isc_condition_t wkstatecond;
|
||||||
|
isc_condition_t wkpausecond;
|
||||||
|
diff --git a/lib/isc/netmgr/netmgr.c b/lib/isc/netmgr/netmgr.c
|
||||||
|
index b19d468..2310b4b 100644
|
||||||
|
--- a/lib/isc/netmgr/netmgr.c
|
||||||
|
+++ b/lib/isc/netmgr/netmgr.c
|
||||||
|
@@ -189,12 +189,12 @@ isc__nm_force_tid(int tid) {
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
-isc__nm_threadpool_initialize(uint32_t workers) {
|
||||||
|
+isc__nm_threadpool_initialize(uint32_t nworkers) {
|
||||||
|
char buf[11];
|
||||||
|
int r = uv_os_getenv("UV_THREADPOOL_SIZE", buf,
|
||||||
|
&(size_t){ sizeof(buf) });
|
||||||
|
if (r == UV_ENOENT) {
|
||||||
|
- snprintf(buf, sizeof(buf), "%" PRIu32, workers);
|
||||||
|
+ snprintf(buf, sizeof(buf), "%" PRIu32, nworkers);
|
||||||
|
uv_os_setenv("UV_THREADPOOL_SIZE", buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -212,11 +212,11 @@ isc__nm_threadpool_initialize(uint32_t workers) {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
|
-isc__netmgr_create(isc_mem_t *mctx, uint32_t workers, isc_nm_t **netmgrp) {
|
||||||
|
+isc__netmgr_create(isc_mem_t *mctx, uint32_t nworkers, isc_nm_t **netmgrp) {
|
||||||
|
isc_nm_t *mgr = NULL;
|
||||||
|
char name[32];
|
||||||
|
|
||||||
|
- REQUIRE(workers > 0);
|
||||||
|
+ REQUIRE(nworkers > 0);
|
||||||
|
|
||||||
|
#ifdef MAXIMAL_UV_VERSION
|
||||||
|
if (uv_version() > MAXIMAL_UV_VERSION) {
|
||||||
|
@@ -234,10 +234,13 @@ isc__netmgr_create(isc_mem_t *mctx, uint32_t workers, isc_nm_t **netmgrp) {
|
||||||
|
uv_version_string(), UV_VERSION_STRING);
|
||||||
|
}
|
||||||
|
|
||||||
|
- isc__nm_threadpool_initialize(workers);
|
||||||
|
+ isc__nm_threadpool_initialize(nworkers);
|
||||||
|
|
||||||
|
mgr = isc_mem_get(mctx, sizeof(*mgr));
|
||||||
|
- *mgr = (isc_nm_t){ .nworkers = workers };
|
||||||
|
+ *mgr = (isc_nm_t){
|
||||||
|
+ .nworkers = nworkers * 2,
|
||||||
|
+ .nlisteners = nworkers,
|
||||||
|
+ };
|
||||||
|
|
||||||
|
isc_mem_attach(mctx, &mgr->mctx);
|
||||||
|
isc_mutex_init(&mgr->lock);
|
||||||
|
@@ -272,11 +275,12 @@ isc__netmgr_create(isc_mem_t *mctx, uint32_t workers, isc_nm_t **netmgrp) {
|
||||||
|
atomic_init(&mgr->keepalive, 30000);
|
||||||
|
atomic_init(&mgr->advertised, 30000);
|
||||||
|
|
||||||
|
- isc_barrier_init(&mgr->pausing, workers);
|
||||||
|
- isc_barrier_init(&mgr->resuming, workers);
|
||||||
|
+ isc_barrier_init(&mgr->pausing, mgr->nworkers);
|
||||||
|
+ isc_barrier_init(&mgr->resuming, mgr->nworkers);
|
||||||
|
|
||||||
|
- mgr->workers = isc_mem_get(mctx, workers * sizeof(isc__networker_t));
|
||||||
|
- for (size_t i = 0; i < workers; i++) {
|
||||||
|
+ mgr->workers = isc_mem_get(mctx,
|
||||||
|
+ mgr->nworkers * sizeof(isc__networker_t));
|
||||||
|
+ for (int i = 0; i < mgr->nworkers; i++) {
|
||||||
|
isc__networker_t *worker = &mgr->workers[i];
|
||||||
|
int r;
|
||||||
|
|
||||||
|
@@ -310,7 +314,7 @@ isc__netmgr_create(isc_mem_t *mctx, uint32_t workers, isc_nm_t **netmgrp) {
|
||||||
|
mgr->workers_running++;
|
||||||
|
isc_thread_create(nm_thread, &mgr->workers[i], &worker->thread);
|
||||||
|
|
||||||
|
- snprintf(name, sizeof(name), "isc-net-%04zu", i);
|
||||||
|
+ snprintf(name, sizeof(name), "isc-net-%04d", i);
|
||||||
|
isc_thread_setname(worker->thread, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -817,9 +821,15 @@ isc_nm_task_enqueue(isc_nm_t *nm, isc_task_t *task, int threadid) {
|
||||||
|
isc__networker_t *worker = NULL;
|
||||||
|
|
||||||
|
if (threadid == -1) {
|
||||||
|
- tid = (int)isc_random_uniform(nm->nworkers);
|
||||||
|
+ tid = (int)isc_random_uniform(nm->nlisteners);
|
||||||
|
+ } else if (threadid == ISC_NM_TASK_SLOW_OFFSET) {
|
||||||
|
+ tid = nm->nlisteners +
|
||||||
|
+ (int)isc_random_uniform(nm->nworkers - nm->nlisteners);
|
||||||
|
+ } else if (threadid < ISC_NM_TASK_SLOW_OFFSET) {
|
||||||
|
+ tid = nm->nlisteners + (ISC_NM_TASK_SLOW(threadid) %
|
||||||
|
+ (nm->nworkers - nm->nlisteners));
|
||||||
|
} else {
|
||||||
|
- tid = threadid % nm->nworkers;
|
||||||
|
+ tid = threadid % nm->nlisteners;
|
||||||
|
}
|
||||||
|
|
||||||
|
worker = &nm->workers[tid];
|
||||||
|
@@ -3778,7 +3788,7 @@ isc__nm_async_settlsctx(isc__networker_t *worker, isc__netievent_t *ev0) {
|
||||||
|
static void
|
||||||
|
set_tlsctx_workers(isc_nmsocket_t *listener, isc_tlsctx_t *tlsctx) {
|
||||||
|
/* Update the TLS context reference for every worker thread. */
|
||||||
|
- for (size_t i = 0; i < (size_t)listener->mgr->nworkers; i++) {
|
||||||
|
+ for (size_t i = 0; i < (size_t)listener->mgr->nlisteners; i++) {
|
||||||
|
isc__netievent__tlsctx_t *ievent =
|
||||||
|
isc__nm_get_netievent_settlsctx(listener->mgr, listener,
|
||||||
|
tlsctx);
|
||||||
|
diff --git a/lib/isc/netmgr/tcp.c b/lib/isc/netmgr/tcp.c
|
||||||
|
index 2a644fe..16b53cc 100644
|
||||||
|
--- a/lib/isc/netmgr/tcp.c
|
||||||
|
+++ b/lib/isc/netmgr/tcp.c
|
||||||
|
@@ -341,7 +341,7 @@ isc_nm_tcpconnect(isc_nm_t *mgr, isc_sockaddr_t *local, isc_sockaddr_t *peer,
|
||||||
|
isc__nm_connectcb(sock, req, result, false);
|
||||||
|
} else {
|
||||||
|
isc__nmsocket_clearcb(sock);
|
||||||
|
- sock->tid = isc_random_uniform(mgr->nworkers);
|
||||||
|
+ sock->tid = isc_random_uniform(mgr->nlisteners);
|
||||||
|
isc__nm_connectcb(sock, req, result, true);
|
||||||
|
}
|
||||||
|
atomic_store(&sock->closed, true);
|
||||||
|
@@ -362,7 +362,7 @@ isc_nm_tcpconnect(isc_nm_t *mgr, isc_sockaddr_t *local, isc_sockaddr_t *peer,
|
||||||
|
isc__nm_put_netievent_tcpconnect(mgr, ievent);
|
||||||
|
} else {
|
||||||
|
atomic_init(&sock->active, false);
|
||||||
|
- sock->tid = isc_random_uniform(mgr->nworkers);
|
||||||
|
+ sock->tid = isc_random_uniform(mgr->nlisteners);
|
||||||
|
isc__nm_enqueue_ievent(&mgr->workers[sock->tid],
|
||||||
|
(isc__netievent_t *)ievent);
|
||||||
|
}
|
||||||
|
@@ -457,7 +457,7 @@ isc_nm_listentcp(isc_nm_t *mgr, isc_sockaddr_t *iface,
|
||||||
|
isc__nmsocket_init(sock, mgr, isc_nm_tcplistener, iface);
|
||||||
|
|
||||||
|
atomic_init(&sock->rchildren, 0);
|
||||||
|
- sock->nchildren = mgr->nworkers;
|
||||||
|
+ sock->nchildren = mgr->nlisteners;
|
||||||
|
children_size = sock->nchildren * sizeof(sock->children[0]);
|
||||||
|
sock->children = isc_mem_get(mgr->mctx, children_size);
|
||||||
|
memset(sock->children, 0, children_size);
|
||||||
|
diff --git a/lib/isc/netmgr/tcpdns.c b/lib/isc/netmgr/tcpdns.c
|
||||||
|
index eda6aa6..46958d0 100644
|
||||||
|
--- a/lib/isc/netmgr/tcpdns.c
|
||||||
|
+++ b/lib/isc/netmgr/tcpdns.c
|
||||||
|
@@ -324,7 +324,7 @@ isc_nm_tcpdnsconnect(isc_nm_t *mgr, isc_sockaddr_t *local, isc_sockaddr_t *peer,
|
||||||
|
isc__nm_put_netievent_tcpdnsconnect(mgr, ievent);
|
||||||
|
} else {
|
||||||
|
atomic_init(&sock->active, false);
|
||||||
|
- sock->tid = isc_random_uniform(mgr->nworkers);
|
||||||
|
+ sock->tid = isc_random_uniform(mgr->nlisteners);
|
||||||
|
isc__nm_enqueue_ievent(&mgr->workers[sock->tid],
|
||||||
|
(isc__netievent_t *)ievent);
|
||||||
|
}
|
||||||
|
@@ -422,7 +422,7 @@ isc_nm_listentcpdns(isc_nm_t *mgr, isc_sockaddr_t *iface,
|
||||||
|
isc__nmsocket_init(sock, mgr, isc_nm_tcpdnslistener, iface);
|
||||||
|
|
||||||
|
atomic_init(&sock->rchildren, 0);
|
||||||
|
- sock->nchildren = mgr->nworkers;
|
||||||
|
+ sock->nchildren = mgr->nlisteners;
|
||||||
|
children_size = sock->nchildren * sizeof(sock->children[0]);
|
||||||
|
sock->children = isc_mem_get(mgr->mctx, children_size);
|
||||||
|
memset(sock->children, 0, children_size);
|
||||||
|
diff --git a/lib/isc/netmgr/tlsdns.c b/lib/isc/netmgr/tlsdns.c
|
||||||
|
index d30e33f..40e6fc8 100644
|
||||||
|
--- a/lib/isc/netmgr/tlsdns.c
|
||||||
|
+++ b/lib/isc/netmgr/tlsdns.c
|
||||||
|
@@ -419,7 +419,7 @@ isc_nm_tlsdnsconnect(isc_nm_t *mgr, isc_sockaddr_t *local, isc_sockaddr_t *peer,
|
||||||
|
isc__nm_put_netievent_tlsdnsconnect(mgr, ievent);
|
||||||
|
} else {
|
||||||
|
atomic_init(&sock->active, false);
|
||||||
|
- sock->tid = isc_random_uniform(mgr->nworkers);
|
||||||
|
+ sock->tid = isc_random_uniform(mgr->nlisteners);
|
||||||
|
isc__nm_enqueue_ievent(&mgr->workers[sock->tid],
|
||||||
|
(isc__netievent_t *)ievent);
|
||||||
|
}
|
||||||
|
@@ -532,7 +532,7 @@ isc_nm_listentlsdns(isc_nm_t *mgr, isc_sockaddr_t *iface,
|
||||||
|
isc__nmsocket_init(sock, mgr, isc_nm_tlsdnslistener, iface);
|
||||||
|
|
||||||
|
atomic_init(&sock->rchildren, 0);
|
||||||
|
- sock->nchildren = mgr->nworkers;
|
||||||
|
+ sock->nchildren = mgr->nlisteners;
|
||||||
|
children_size = sock->nchildren * sizeof(sock->children[0]);
|
||||||
|
sock->children = isc_mem_get(mgr->mctx, children_size);
|
||||||
|
memset(sock->children, 0, children_size);
|
||||||
|
diff --git a/lib/isc/netmgr/tlsstream.c b/lib/isc/netmgr/tlsstream.c
|
||||||
|
index 7b49071..a3fc6d2 100644
|
||||||
|
--- a/lib/isc/netmgr/tlsstream.c
|
||||||
|
+++ b/lib/isc/netmgr/tlsstream.c
|
||||||
|
@@ -1264,18 +1264,18 @@ isc__nm_tls_verify_tls_peer_result_string(const isc_nmhandle_t *handle) {
|
||||||
|
|
||||||
|
static void
|
||||||
|
tls_init_listener_tlsctx(isc_nmsocket_t *listener, isc_tlsctx_t *ctx) {
|
||||||
|
- size_t nworkers;
|
||||||
|
+ size_t nlisteners;
|
||||||
|
|
||||||
|
REQUIRE(VALID_NM(listener->mgr));
|
||||||
|
REQUIRE(ctx != NULL);
|
||||||
|
|
||||||
|
- nworkers = (size_t)listener->mgr->nworkers;
|
||||||
|
- INSIST(nworkers > 0);
|
||||||
|
+ nlisteners = (size_t)listener->mgr->nlisteners;
|
||||||
|
+ INSIST(nlisteners > 0);
|
||||||
|
|
||||||
|
listener->tlsstream.listener_tls_ctx = isc_mem_get(
|
||||||
|
- listener->mgr->mctx, sizeof(isc_tlsctx_t *) * nworkers);
|
||||||
|
- listener->tlsstream.n_listener_tls_ctx = nworkers;
|
||||||
|
- for (size_t i = 0; i < nworkers; i++) {
|
||||||
|
+ listener->mgr->mctx, sizeof(isc_tlsctx_t *) * nlisteners);
|
||||||
|
+ listener->tlsstream.n_listener_tls_ctx = nlisteners;
|
||||||
|
+ for (size_t i = 0; i < nlisteners; i++) {
|
||||||
|
listener->tlsstream.listener_tls_ctx[i] = NULL;
|
||||||
|
isc_tlsctx_attach(ctx,
|
||||||
|
&listener->tlsstream.listener_tls_ctx[i]);
|
||||||
|
diff --git a/lib/isc/netmgr/udp.c b/lib/isc/netmgr/udp.c
|
||||||
|
index 476c799..661de96 100644
|
||||||
|
--- a/lib/isc/netmgr/udp.c
|
||||||
|
+++ b/lib/isc/netmgr/udp.c
|
||||||
|
@@ -157,14 +157,14 @@ isc_nm_listenudp(isc_nm_t *mgr, isc_sockaddr_t *iface, isc_nm_recv_cb_t cb,
|
||||||
|
REQUIRE(VALID_NM(mgr));
|
||||||
|
|
||||||
|
/*
|
||||||
|
- * We are creating mgr->nworkers duplicated sockets, one
|
||||||
|
+ * We are creating mgr->nlisteners duplicated sockets, one
|
||||||
|
* socket for each worker thread.
|
||||||
|
*/
|
||||||
|
sock = isc_mem_get(mgr->mctx, sizeof(isc_nmsocket_t));
|
||||||
|
isc__nmsocket_init(sock, mgr, isc_nm_udplistener, iface);
|
||||||
|
|
||||||
|
atomic_init(&sock->rchildren, 0);
|
||||||
|
- sock->nchildren = mgr->nworkers;
|
||||||
|
+ sock->nchildren = mgr->nlisteners;
|
||||||
|
children_size = sock->nchildren * sizeof(sock->children[0]);
|
||||||
|
sock->children = isc_mem_get(mgr->mctx, children_size);
|
||||||
|
memset(sock->children, 0, children_size);
|
||||||
|
@@ -1037,7 +1037,7 @@ isc_nm_udpconnect(isc_nm_t *mgr, isc_sockaddr_t *local, isc_sockaddr_t *peer,
|
||||||
|
isc__nm_put_netievent_udpconnect(mgr, event);
|
||||||
|
} else {
|
||||||
|
atomic_init(&sock->active, false);
|
||||||
|
- sock->tid = isc_random_uniform(mgr->nworkers);
|
||||||
|
+ sock->tid = isc_random_uniform(mgr->nlisteners);
|
||||||
|
isc__nm_enqueue_ievent(&mgr->workers[sock->tid],
|
||||||
|
(isc__netievent_t *)event);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
108
backport-CVE-2023-5517.patch
Normal file
108
backport-CVE-2023-5517.patch
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
From c73262493658cb8623927ef6cc2f023501f7e809 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mark Andrews <marka@isc.org>
|
||||||
|
Date: Tue, 10 Oct 2023 10:58:18 +1100
|
||||||
|
Subject: [PATCH] Save the correct result value to resume with
|
||||||
|
nxdomain-redirect
|
||||||
|
|
||||||
|
The wrong result value was being saved for resumption with
|
||||||
|
nxdomain-redirect when performing the fetch. This lead to an assert
|
||||||
|
when checking that RFC 1918 reverse queries where not leaking to
|
||||||
|
the global internet.
|
||||||
|
|
||||||
|
Conflict:NA
|
||||||
|
Reference:https://downloads.isc.org/isc/bind/9.18.24/patches/0002-CVE-2023-5517.patch
|
||||||
|
|
||||||
|
(cherry picked from commit 9d0fa07c5e7a39db89862a4f843d2190059afb4b)
|
||||||
|
---
|
||||||
|
lib/ns/query.c | 22 ++++++++++------------
|
||||||
|
1 file changed, 10 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/ns/query.c b/lib/ns/query.c
|
||||||
|
index c1e9148..61749c8 100644
|
||||||
|
--- a/lib/ns/query.c
|
||||||
|
+++ b/lib/ns/query.c
|
||||||
|
@@ -465,10 +465,10 @@ static void
|
||||||
|
query_addnxrrsetnsec(query_ctx_t *qctx);
|
||||||
|
|
||||||
|
static isc_result_t
|
||||||
|
-query_nxdomain(query_ctx_t *qctx, isc_result_t res);
|
||||||
|
+query_nxdomain(query_ctx_t *qctx, isc_result_t result);
|
||||||
|
|
||||||
|
static isc_result_t
|
||||||
|
-query_redirect(query_ctx_t *qctx);
|
||||||
|
+query_redirect(query_ctx_t *qctx, isc_result_t result);
|
||||||
|
|
||||||
|
static isc_result_t
|
||||||
|
query_ncache(query_ctx_t *qctx, isc_result_t result);
|
||||||
|
@@ -7718,8 +7718,7 @@ query_usestale(query_ctx_t *qctx, isc_result_t result) {
|
||||||
|
* result from the search.
|
||||||
|
*/
|
||||||
|
static isc_result_t
|
||||||
|
-query_gotanswer(query_ctx_t *qctx, isc_result_t res) {
|
||||||
|
- isc_result_t result = res;
|
||||||
|
+query_gotanswer(query_ctx_t *qctx, isc_result_t result) {
|
||||||
|
char errmsg[256];
|
||||||
|
|
||||||
|
CCTRACE(ISC_LOG_DEBUG(3), "query_gotanswer");
|
||||||
|
@@ -7795,7 +7794,7 @@ root_key_sentinel:
|
||||||
|
return (query_coveringnsec(qctx));
|
||||||
|
|
||||||
|
case DNS_R_NCACHENXDOMAIN:
|
||||||
|
- result = query_redirect(qctx);
|
||||||
|
+ result = query_redirect(qctx, result);
|
||||||
|
if (result != ISC_R_COMPLETE) {
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
@@ -9612,11 +9611,10 @@ query_addnxrrsetnsec(query_ctx_t *qctx) {
|
||||||
|
* Handle NXDOMAIN and empty wildcard responses.
|
||||||
|
*/
|
||||||
|
static isc_result_t
|
||||||
|
-query_nxdomain(query_ctx_t *qctx, isc_result_t res) {
|
||||||
|
+query_nxdomain(query_ctx_t *qctx, isc_result_t result) {
|
||||||
|
dns_section_t section;
|
||||||
|
uint32_t ttl;
|
||||||
|
- isc_result_t result = res;
|
||||||
|
- bool empty_wild = (res == DNS_R_EMPTYWILD);
|
||||||
|
+ bool empty_wild = (result == DNS_R_EMPTYWILD);
|
||||||
|
|
||||||
|
CCTRACE(ISC_LOG_DEBUG(3), "query_nxdomain");
|
||||||
|
|
||||||
|
@@ -9625,7 +9623,7 @@ query_nxdomain(query_ctx_t *qctx, isc_result_t res) {
|
||||||
|
INSIST(qctx->is_zone || REDIRECT(qctx->client));
|
||||||
|
|
||||||
|
if (!empty_wild) {
|
||||||
|
- result = query_redirect(qctx);
|
||||||
|
+ result = query_redirect(qctx, result);
|
||||||
|
if (result != ISC_R_COMPLETE) {
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
@@ -9713,7 +9711,7 @@ cleanup:
|
||||||
|
* redirecting, so query processing should continue past it.
|
||||||
|
*/
|
||||||
|
static isc_result_t
|
||||||
|
-query_redirect(query_ctx_t *qctx) {
|
||||||
|
+query_redirect(query_ctx_t *qctx, isc_result_t saved_result) {
|
||||||
|
isc_result_t result;
|
||||||
|
|
||||||
|
CCTRACE(ISC_LOG_DEBUG(3), "query_redirect");
|
||||||
|
@@ -9754,7 +9752,7 @@ query_redirect(query_ctx_t *qctx) {
|
||||||
|
SAVE(qctx->client->query.redirect.rdataset, qctx->rdataset);
|
||||||
|
SAVE(qctx->client->query.redirect.sigrdataset,
|
||||||
|
qctx->sigrdataset);
|
||||||
|
- qctx->client->query.redirect.result = DNS_R_NCACHENXDOMAIN;
|
||||||
|
+ qctx->client->query.redirect.result = saved_result;
|
||||||
|
dns_name_copy(qctx->fname, qctx->client->query.redirect.fname);
|
||||||
|
qctx->client->query.redirect.authoritative =
|
||||||
|
qctx->authoritative;
|
||||||
|
@@ -10415,7 +10413,7 @@ query_coveringnsec(query_ctx_t *qctx) {
|
||||||
|
* We now have the proof that we have an NXDOMAIN. Apply
|
||||||
|
* NXDOMAIN redirection if configured.
|
||||||
|
*/
|
||||||
|
- result = query_redirect(qctx);
|
||||||
|
+ result = query_redirect(qctx, DNS_R_COVERINGNSEC);
|
||||||
|
if (result != ISC_R_COMPLETE) {
|
||||||
|
redirected = true;
|
||||||
|
goto cleanup;
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
38
backport-CVE-2023-5679.patch
Normal file
38
backport-CVE-2023-5679.patch
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
From 7db2796507127b40e2f091dafb842c6a7e86b9a8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mark Andrews <marka@isc.org>
|
||||||
|
Date: Thu, 12 Oct 2023 12:01:46 +1100
|
||||||
|
Subject: [PATCH] Restore dns64 state during serve-stale processing
|
||||||
|
|
||||||
|
If we are in the process of looking for the A records as part of
|
||||||
|
dns64 processing and the server-stale timeout triggers, redo the
|
||||||
|
dns64 changes that had been made to the orignal qctx.
|
||||||
|
|
||||||
|
Conflict:NA
|
||||||
|
Reference:https://downloads.isc.org/isc/bind/9.18.24/patches/0003-CVE-2023-5679.patch
|
||||||
|
|
||||||
|
(cherry picked from commit 1fcc483df13e049b96f620e515f0d4d45f3680b7)
|
||||||
|
---
|
||||||
|
lib/ns/query.c | 7 +++++++
|
||||||
|
1 file changed, 7 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/lib/ns/query.c b/lib/ns/query.c
|
||||||
|
index 61749c8..40e1232 100644
|
||||||
|
--- a/lib/ns/query.c
|
||||||
|
+++ b/lib/ns/query.c
|
||||||
|
@@ -6228,6 +6228,13 @@ query_lookup_stale(ns_client_t *client) {
|
||||||
|
query_ctx_t qctx;
|
||||||
|
|
||||||
|
qctx_init(client, NULL, client->query.qtype, &qctx);
|
||||||
|
+ if (DNS64(client)) {
|
||||||
|
+ qctx.qtype = qctx.type = dns_rdatatype_a;
|
||||||
|
+ qctx.dns64 = true;
|
||||||
|
+ }
|
||||||
|
+ if (DNS64EXCLUDE(client)) {
|
||||||
|
+ qctx.dns64_exclude = true;
|
||||||
|
+ }
|
||||||
|
dns_db_attach(client->view->cachedb, &qctx.db);
|
||||||
|
client->query.attributes &= ~NS_QUERYATTR_RECURSIONOK;
|
||||||
|
client->query.dboptions |= DNS_DBFIND_STALETIMEOUT;
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
981
backport-CVE-2024-0760.patch
Normal file
981
backport-CVE-2024-0760.patch
Normal file
@ -0,0 +1,981 @@
|
|||||||
|
From c33b3d26f695d342af3fa81ab404a366bb8ce873 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Artem Boldariev <artem@boldariev.com>
|
||||||
|
Date: Wed, 3 Jul 2024 13:58:32 +0300
|
||||||
|
Subject: [PATCH] TCP/TLS DNS: unthrottle only when all input data processing
|
||||||
|
|
||||||
|
This commit ensures that we restart reading only when all DNS data in
|
||||||
|
the input buffer is processed so the we will not get into the
|
||||||
|
situation when the buffer is overrun.
|
||||||
|
|
||||||
|
Conflict:NA
|
||||||
|
Reference:https://downloads.isc.org/isc/bind9/9.18.28/patches/0001-CVE-2024-0760.patch
|
||||||
|
|
||||||
|
---
|
||||||
|
lib/isc/netmgr/netmgr-int.h | 27 +++++--
|
||||||
|
lib/isc/netmgr/netmgr.c | 79 ++++++++++++++----
|
||||||
|
lib/isc/netmgr/tcp.c | 71 +++++++++++++++-
|
||||||
|
lib/isc/netmgr/tcpdns.c | 59 +++++++++++++-
|
||||||
|
lib/isc/netmgr/tlsdns.c | 120 ++++++++++++++++++++-------
|
||||||
|
lib/ns/client.c | 156 +++++++++++++++++-------------------
|
||||||
|
lib/ns/include/ns/client.h | 6 +-
|
||||||
|
7 files changed, 379 insertions(+), 139 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/isc/netmgr/netmgr-int.h b/lib/isc/netmgr/netmgr-int.h
|
||||||
|
index 6aca9ab..bc1ba73 100644
|
||||||
|
--- a/lib/isc/netmgr/netmgr-int.h
|
||||||
|
+++ b/lib/isc/netmgr/netmgr-int.h
|
||||||
|
@@ -62,9 +62,10 @@
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
- * The TCP receive buffer can fit one maximum sized DNS message plus its size,
|
||||||
|
- * the receive buffer here affects TCP, DoT and DoH.
|
||||||
|
+ * The TCP send and receive buffers can fit one maximum sized DNS message plus
|
||||||
|
+ * its size, the receive buffer here affects TCP, DoT and DoH.
|
||||||
|
*/
|
||||||
|
+#define ISC_NETMGR_TCP_SENDBUF_SIZE (sizeof(uint16_t) + UINT16_MAX)
|
||||||
|
#define ISC_NETMGR_TCP_RECVBUF_SIZE (sizeof(uint16_t) + UINT16_MAX)
|
||||||
|
|
||||||
|
/* Pick the larger buffer */
|
||||||
|
@@ -377,9 +378,10 @@ struct isc__nm_uvreq {
|
||||||
|
int magic;
|
||||||
|
isc_nmsocket_t *sock;
|
||||||
|
isc_nmhandle_t *handle;
|
||||||
|
- char tcplen[2]; /* The TCP DNS message length */
|
||||||
|
- uv_buf_t uvbuf; /* translated isc_region_t, to be
|
||||||
|
- * sent or received */
|
||||||
|
+ char tcplen[2]; /* The TCP DNS message length */
|
||||||
|
+ uv_buf_t uvbuf; /* translated isc_region_t, to be
|
||||||
|
+ * sent or received */
|
||||||
|
+ isc_region_t userbuf;
|
||||||
|
isc_sockaddr_t local; /* local address */
|
||||||
|
isc_sockaddr_t peer; /* peer address */
|
||||||
|
isc__nm_cb_t cb; /* callback */
|
||||||
|
@@ -998,7 +1000,6 @@ struct isc_nmsocket {
|
||||||
|
TLS_STATE_ERROR,
|
||||||
|
TLS_STATE_CLOSING
|
||||||
|
} state;
|
||||||
|
- isc_region_t senddata;
|
||||||
|
ISC_LIST(isc__nm_uvreq_t) sendreqs;
|
||||||
|
bool cycle;
|
||||||
|
isc_result_t pending_error;
|
||||||
|
@@ -1063,6 +1064,12 @@ struct isc_nmsocket {
|
||||||
|
*/
|
||||||
|
uint64_t write_timeout;
|
||||||
|
|
||||||
|
+ /*
|
||||||
|
+ * Reading was throttled over TCP as the peer does not read the
|
||||||
|
+ * data we are sending back.
|
||||||
|
+ */
|
||||||
|
+ bool reading_throttled;
|
||||||
|
+
|
||||||
|
/*% outer socket is for 'wrapped' sockets - e.g. tcpdns in tcp */
|
||||||
|
isc_nmsocket_t *outer;
|
||||||
|
|
||||||
|
@@ -2265,6 +2272,14 @@ isc__nmsocket_readtimeout_cb(uv_timer_t *timer);
|
||||||
|
void
|
||||||
|
isc__nmsocket_writetimeout_cb(void *data, isc_result_t eresult);
|
||||||
|
|
||||||
|
+/*%<
|
||||||
|
+ *
|
||||||
|
+ * Maximum number of simultaneous handles in flight supported for a single
|
||||||
|
+ * connected TCPDNS socket. This value was chosen arbitrarily, and may be
|
||||||
|
+ * changed in the future.
|
||||||
|
+ */
|
||||||
|
+#define STREAM_CLIENTS_PER_CONN 23
|
||||||
|
+
|
||||||
|
#define UV_RUNTIME_CHECK(func, ret) \
|
||||||
|
if (ret != 0) { \
|
||||||
|
FATAL_ERROR("%s failed: %s\n", #func, uv_strerror(ret)); \
|
||||||
|
diff --git a/lib/isc/netmgr/netmgr.c b/lib/isc/netmgr/netmgr.c
|
||||||
|
index 2310b4b..f9e3b70 100644
|
||||||
|
--- a/lib/isc/netmgr/netmgr.c
|
||||||
|
+++ b/lib/isc/netmgr/netmgr.c
|
||||||
|
@@ -49,8 +49,15 @@
|
||||||
|
* How many isc_nmhandles and isc_nm_uvreqs will we be
|
||||||
|
* caching for reuse in a socket.
|
||||||
|
*/
|
||||||
|
-#define ISC_NM_HANDLES_STACK_SIZE 600
|
||||||
|
-#define ISC_NM_REQS_STACK_SIZE 600
|
||||||
|
+#define ISC_NM_HANDLES_STACK_SIZE 16
|
||||||
|
+#define ISC_NM_REQS_STACK_SIZE 16
|
||||||
|
+
|
||||||
|
+/*%
|
||||||
|
+ * Same, but for UDP sockets which tend to need larger values as they
|
||||||
|
+ * process many requests per socket.
|
||||||
|
+ */
|
||||||
|
+#define ISC_NM_HANDLES_STACK_SIZE_UDP 64
|
||||||
|
+#define ISC_NM_REQS_STACK_SIZE_UDP 64
|
||||||
|
|
||||||
|
/*%
|
||||||
|
* Shortcut index arrays to get access to statistics counters.
|
||||||
|
@@ -1506,16 +1513,25 @@ void
|
||||||
|
isc___nmsocket_init(isc_nmsocket_t *sock, isc_nm_t *mgr, isc_nmsocket_type type,
|
||||||
|
isc_sockaddr_t *iface FLARG) {
|
||||||
|
uint16_t family;
|
||||||
|
+ size_t inactive_handles_stack_size = ISC_NM_HANDLES_STACK_SIZE;
|
||||||
|
+ size_t inactive_reqs_stack_size = ISC_NM_REQS_STACK_SIZE;
|
||||||
|
|
||||||
|
REQUIRE(sock != NULL);
|
||||||
|
REQUIRE(mgr != NULL);
|
||||||
|
|
||||||
|
- *sock = (isc_nmsocket_t){ .type = type,
|
||||||
|
- .fd = -1,
|
||||||
|
- .inactivehandles = isc_astack_new(
|
||||||
|
- mgr->mctx, ISC_NM_HANDLES_STACK_SIZE),
|
||||||
|
- .inactivereqs = isc_astack_new(
|
||||||
|
- mgr->mctx, ISC_NM_REQS_STACK_SIZE) };
|
||||||
|
+ if (type == isc_nm_udpsocket) {
|
||||||
|
+ inactive_handles_stack_size = ISC_NM_HANDLES_STACK_SIZE_UDP;
|
||||||
|
+ inactive_reqs_stack_size = ISC_NM_REQS_STACK_SIZE_UDP;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ *sock = (isc_nmsocket_t){
|
||||||
|
+ .type = type,
|
||||||
|
+ .fd = -1,
|
||||||
|
+ .inactivehandles = isc_astack_new(mgr->mctx,
|
||||||
|
+ inactive_handles_stack_size),
|
||||||
|
+ .inactivereqs = isc_astack_new(mgr->mctx,
|
||||||
|
+ inactive_reqs_stack_size)
|
||||||
|
+ };
|
||||||
|
|
||||||
|
ISC_LIST_INIT(sock->tls.sendreqs);
|
||||||
|
|
||||||
|
@@ -2084,6 +2100,7 @@ isc__nmsocket_writetimeout_cb(void *data, isc_result_t eresult) {
|
||||||
|
|
||||||
|
sock = req->sock;
|
||||||
|
|
||||||
|
+ isc__nm_start_reading(sock);
|
||||||
|
isc__nmsocket_reset(sock);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -2093,7 +2110,6 @@ isc__nmsocket_readtimeout_cb(uv_timer_t *timer) {
|
||||||
|
|
||||||
|
REQUIRE(VALID_NMSOCK(sock));
|
||||||
|
REQUIRE(sock->tid == isc_nm_tid());
|
||||||
|
- REQUIRE(atomic_load(&sock->reading));
|
||||||
|
|
||||||
|
if (atomic_load(&sock->client)) {
|
||||||
|
uv_timer_stop(timer);
|
||||||
|
@@ -2340,8 +2356,10 @@ processbuffer(isc_nmsocket_t *sock) {
|
||||||
|
* timers. If we do have a full message, reset the timer.
|
||||||
|
*
|
||||||
|
* Stop reading if this is a client socket, or if the server socket
|
||||||
|
- * has been set to sequential mode. In this case we'll be called again
|
||||||
|
- * later by isc__nm_resume_processing().
|
||||||
|
+ * has been set to sequential mode, or the number of queries we are
|
||||||
|
+ * processing simultaneously has reached the clients-per-connection
|
||||||
|
+ * limit. In this case we'll be called again later by
|
||||||
|
+ * isc__nm_resume_processing().
|
||||||
|
*/
|
||||||
|
isc_result_t
|
||||||
|
isc__nm_process_sock_buffer(isc_nmsocket_t *sock) {
|
||||||
|
@@ -2349,14 +2367,41 @@ isc__nm_process_sock_buffer(isc_nmsocket_t *sock) {
|
||||||
|
int_fast32_t ah = atomic_load(&sock->ah);
|
||||||
|
isc_result_t result = processbuffer(sock);
|
||||||
|
switch (result) {
|
||||||
|
- case ISC_R_NOMORE:
|
||||||
|
+ case ISC_R_NOMORE: {
|
||||||
|
/*
|
||||||
|
* Don't reset the timer until we have a
|
||||||
|
* full DNS message.
|
||||||
|
*/
|
||||||
|
- result = isc__nm_start_reading(sock);
|
||||||
|
- if (result != ISC_R_SUCCESS) {
|
||||||
|
- return (result);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Restart reading if we have less data in the send
|
||||||
|
+ * queue than the send buffer size, this means that the
|
||||||
|
+ * TCP client has started reading some data again.
|
||||||
|
+ * Starting reading when we go under the limit instead
|
||||||
|
+ * of waiting for all data has been flushed allows
|
||||||
|
+ * faster recovery (in case there was a congestion and
|
||||||
|
+ * now there isn't).
|
||||||
|
+ */
|
||||||
|
+ size_t write_queue_size =
|
||||||
|
+ uv_stream_get_write_queue_size(
|
||||||
|
+ &sock->uv_handle.stream);
|
||||||
|
+ if (write_queue_size < ISC_NETMGR_TCP_SENDBUF_SIZE) {
|
||||||
|
+ if (sock->reading_throttled) {
|
||||||
|
+ isc_log_write(isc_lctx,
|
||||||
|
+ ISC_LOGCATEGORY_GENERAL,
|
||||||
|
+ ISC_LOGMODULE_NETMGR,
|
||||||
|
+ ISC_LOG_DEBUG(3),
|
||||||
|
+ "resuming TCP "
|
||||||
|
+ "connection, the other "
|
||||||
|
+ "side is reading the "
|
||||||
|
+ "data again (%zu)",
|
||||||
|
+ write_queue_size);
|
||||||
|
+ sock->reading_throttled = false;
|
||||||
|
+ }
|
||||||
|
+ result = isc__nm_start_reading(sock);
|
||||||
|
+ if (result != ISC_R_SUCCESS) {
|
||||||
|
+ return (result);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Start the timer only if there are no externally used
|
||||||
|
@@ -2368,6 +2413,7 @@ isc__nm_process_sock_buffer(isc_nmsocket_t *sock) {
|
||||||
|
isc__nmsocket_timer_start(sock);
|
||||||
|
}
|
||||||
|
goto done;
|
||||||
|
+ }
|
||||||
|
case ISC_R_CANCELED:
|
||||||
|
isc__nmsocket_timer_stop(sock);
|
||||||
|
isc__nm_stop_reading(sock);
|
||||||
|
@@ -2381,7 +2427,8 @@ isc__nm_process_sock_buffer(isc_nmsocket_t *sock) {
|
||||||
|
isc__nmsocket_timer_stop(sock);
|
||||||
|
|
||||||
|
if (atomic_load(&sock->client) ||
|
||||||
|
- atomic_load(&sock->sequential))
|
||||||
|
+ atomic_load(&sock->sequential) ||
|
||||||
|
+ atomic_load(&sock->ah) >= STREAM_CLIENTS_PER_CONN)
|
||||||
|
{
|
||||||
|
isc__nm_stop_reading(sock);
|
||||||
|
goto done;
|
||||||
|
diff --git a/lib/isc/netmgr/tcp.c b/lib/isc/netmgr/tcp.c
|
||||||
|
index 16b53cc..37d44bd 100644
|
||||||
|
--- a/lib/isc/netmgr/tcp.c
|
||||||
|
+++ b/lib/isc/netmgr/tcp.c
|
||||||
|
@@ -766,7 +766,7 @@ isc__nm_async_tcpstartread(isc__networker_t *worker, isc__netievent_t *ev0) {
|
||||||
|
isc__netievent_tcpstartread_t *ievent =
|
||||||
|
(isc__netievent_tcpstartread_t *)ev0;
|
||||||
|
isc_nmsocket_t *sock = ievent->sock;
|
||||||
|
- isc_result_t result;
|
||||||
|
+ isc_result_t result = ISC_R_SUCCESS;
|
||||||
|
|
||||||
|
REQUIRE(VALID_NMSOCK(sock));
|
||||||
|
REQUIRE(sock->tid == isc_nm_tid());
|
||||||
|
@@ -774,7 +774,7 @@ isc__nm_async_tcpstartread(isc__networker_t *worker, isc__netievent_t *ev0) {
|
||||||
|
|
||||||
|
if (isc__nmsocket_closing(sock)) {
|
||||||
|
result = ISC_R_CANCELED;
|
||||||
|
- } else {
|
||||||
|
+ } else if (!sock->reading_throttled) {
|
||||||
|
result = isc__nm_start_reading(sock);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -905,6 +905,32 @@ isc__nm_tcp_read_cb(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf) {
|
||||||
|
|
||||||
|
/* The readcb could have paused the reading */
|
||||||
|
if (atomic_load(&sock->reading)) {
|
||||||
|
+ if (!sock->client) {
|
||||||
|
+ /*
|
||||||
|
+ * Stop reading if we have accumulated enough bytes in
|
||||||
|
+ * the send queue; this means that the TCP client is not
|
||||||
|
+ * reading back the data we sending to it, and there's
|
||||||
|
+ * no reason to continue processing more incoming DNS
|
||||||
|
+ * messages, if the client is not reading back the
|
||||||
|
+ * responses.
|
||||||
|
+ */
|
||||||
|
+ size_t write_queue_size =
|
||||||
|
+ uv_stream_get_write_queue_size(
|
||||||
|
+ &sock->uv_handle.stream);
|
||||||
|
+
|
||||||
|
+ if (write_queue_size >= ISC_NETMGR_TCP_SENDBUF_SIZE) {
|
||||||
|
+ isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
|
||||||
|
+ ISC_LOGMODULE_NETMGR,
|
||||||
|
+ ISC_LOG_DEBUG(3),
|
||||||
|
+ "throttling TCP connection, "
|
||||||
|
+ "the other side is "
|
||||||
|
+ "not reading the data (%zu)",
|
||||||
|
+ write_queue_size);
|
||||||
|
+ sock->reading_throttled = true;
|
||||||
|
+ isc__nm_stop_reading(sock);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* The timer will be updated */
|
||||||
|
isc__nmsocket_timer_restart(sock);
|
||||||
|
}
|
||||||
|
@@ -1095,6 +1121,34 @@ isc__nm_tcp_send(isc_nmhandle_t *handle, const isc_region_t *region,
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+tcp_maybe_restart_reading(isc_nmsocket_t *sock) {
|
||||||
|
+ if (!sock->client && sock->reading_throttled &&
|
||||||
|
+ !uv_is_active(&sock->uv_handle.handle))
|
||||||
|
+ {
|
||||||
|
+ /*
|
||||||
|
+ * Restart reading if we have less data in the send queue than
|
||||||
|
+ * the send buffer size, this means that the TCP client has
|
||||||
|
+ * started reading some data again. Starting reading when we go
|
||||||
|
+ * under the limit instead of waiting for all data has been
|
||||||
|
+ * flushed allows faster recovery (in case there was a
|
||||||
|
+ * congestion and now there isn't).
|
||||||
|
+ */
|
||||||
|
+ size_t write_queue_size =
|
||||||
|
+ uv_stream_get_write_queue_size(&sock->uv_handle.stream);
|
||||||
|
+ if (write_queue_size < ISC_NETMGR_TCP_SENDBUF_SIZE) {
|
||||||
|
+ isc_log_write(
|
||||||
|
+ isc_lctx, ISC_LOGCATEGORY_GENERAL,
|
||||||
|
+ ISC_LOGMODULE_NETMGR, ISC_LOG_DEBUG(3),
|
||||||
|
+ "resuming TCP connection, the other side "
|
||||||
|
+ "is reading the data again (%zu)",
|
||||||
|
+ write_queue_size);
|
||||||
|
+ sock->reading_throttled = false;
|
||||||
|
+ isc__nm_start_reading(sock);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
tcp_send_cb(uv_write_t *req, int status) {
|
||||||
|
isc__nm_uvreq_t *uvreq = (isc__nm_uvreq_t *)req->data;
|
||||||
|
@@ -1112,10 +1166,23 @@ tcp_send_cb(uv_write_t *req, int status) {
|
||||||
|
isc__nm_incstats(sock, STATID_SENDFAIL);
|
||||||
|
isc__nm_failed_send_cb(sock, uvreq,
|
||||||
|
isc__nm_uverr2result(status));
|
||||||
|
+
|
||||||
|
+ if (!sock->client &&
|
||||||
|
+ (atomic_load(&sock->reading) || sock->reading_throttled))
|
||||||
|
+ {
|
||||||
|
+ /*
|
||||||
|
+ * As we are resuming reading, it is not throttled
|
||||||
|
+ * anymore (technically).
|
||||||
|
+ */
|
||||||
|
+ sock->reading_throttled = false;
|
||||||
|
+ isc__nm_start_reading(sock);
|
||||||
|
+ isc__nmsocket_reset(sock);
|
||||||
|
+ }
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
isc__nm_sendcb(sock, uvreq, ISC_R_SUCCESS, false);
|
||||||
|
+ tcp_maybe_restart_reading(sock);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
diff --git a/lib/isc/netmgr/tcpdns.c b/lib/isc/netmgr/tcpdns.c
|
||||||
|
index 46958d0..6d417f7 100644
|
||||||
|
--- a/lib/isc/netmgr/tcpdns.c
|
||||||
|
+++ b/lib/isc/netmgr/tcpdns.c
|
||||||
|
@@ -733,7 +733,7 @@ isc__nm_async_tcpdnsread(isc__networker_t *worker, isc__netievent_t *ev0) {
|
||||||
|
isc__netievent_tcpdnsread_t *ievent =
|
||||||
|
(isc__netievent_tcpdnsread_t *)ev0;
|
||||||
|
isc_nmsocket_t *sock = ievent->sock;
|
||||||
|
- isc_result_t result;
|
||||||
|
+ isc_result_t result = ISC_R_SUCCESS;
|
||||||
|
|
||||||
|
UNUSED(worker);
|
||||||
|
|
||||||
|
@@ -742,7 +742,7 @@ isc__nm_async_tcpdnsread(isc__networker_t *worker, isc__netievent_t *ev0) {
|
||||||
|
|
||||||
|
if (isc__nmsocket_closing(sock)) {
|
||||||
|
result = ISC_R_CANCELED;
|
||||||
|
- } else {
|
||||||
|
+ } else if (!sock->reading_throttled) {
|
||||||
|
result = isc__nm_process_sock_buffer(sock);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -905,6 +905,28 @@ isc__nm_tcpdns_read_cb(uv_stream_t *stream, ssize_t nread,
|
||||||
|
result = isc__nm_process_sock_buffer(sock);
|
||||||
|
if (result != ISC_R_SUCCESS) {
|
||||||
|
isc__nm_failed_read_cb(sock, result, true);
|
||||||
|
+ } else if (!sock->client) {
|
||||||
|
+ /*
|
||||||
|
+ * Stop reading if we have accumulated enough bytes in
|
||||||
|
+ * the send queue; this means that the TCP client is not
|
||||||
|
+ * reading back the data we sending to it, and there's
|
||||||
|
+ * no reason to continue processing more incoming DNS
|
||||||
|
+ * messages, if the client is not reading back the
|
||||||
|
+ * responses.
|
||||||
|
+ */
|
||||||
|
+ size_t write_queue_size =
|
||||||
|
+ uv_stream_get_write_queue_size(&sock->uv_handle.stream);
|
||||||
|
+
|
||||||
|
+ if (write_queue_size >= ISC_NETMGR_TCP_SENDBUF_SIZE) {
|
||||||
|
+ isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
|
||||||
|
+ ISC_LOGMODULE_NETMGR, ISC_LOG_DEBUG(3),
|
||||||
|
+ "throttling TCP connection, "
|
||||||
|
+ "the other side is "
|
||||||
|
+ "not reading the data (%zu)",
|
||||||
|
+ write_queue_size);
|
||||||
|
+ sock->reading_throttled = true;
|
||||||
|
+ isc__nm_stop_reading(sock);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
free:
|
||||||
|
if (nread < 0) {
|
||||||
|
@@ -1125,6 +1147,19 @@ isc__nm_tcpdns_send(isc_nmhandle_t *handle, isc_region_t *region,
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+tcpdns_maybe_restart_reading(isc_nmsocket_t *sock) {
|
||||||
|
+ if (!sock->client && sock->reading_throttled &&
|
||||||
|
+ !uv_is_active(&sock->uv_handle.handle))
|
||||||
|
+ {
|
||||||
|
+ isc_result_t result = isc__nm_process_sock_buffer(sock);
|
||||||
|
+ if (result != ISC_R_SUCCESS) {
|
||||||
|
+ atomic_store(&sock->reading, true);
|
||||||
|
+ isc__nm_failed_read_cb(sock, result, false);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
tcpdns_send_cb(uv_write_t *req, int status) {
|
||||||
|
isc__nm_uvreq_t *uvreq = (isc__nm_uvreq_t *)req->data;
|
||||||
|
@@ -1142,10 +1177,23 @@ tcpdns_send_cb(uv_write_t *req, int status) {
|
||||||
|
isc__nm_incstats(sock, STATID_SENDFAIL);
|
||||||
|
isc__nm_failed_send_cb(sock, uvreq,
|
||||||
|
isc__nm_uverr2result(status));
|
||||||
|
+
|
||||||
|
+ if (!sock->client &&
|
||||||
|
+ (atomic_load(&sock->reading) || sock->reading_throttled))
|
||||||
|
+ {
|
||||||
|
+ /*
|
||||||
|
+ * As we are resuming reading, it is not throttled
|
||||||
|
+ * anymore (technically).
|
||||||
|
+ */
|
||||||
|
+ sock->reading_throttled = false;
|
||||||
|
+ isc__nm_start_reading(sock);
|
||||||
|
+ isc__nmsocket_reset(sock);
|
||||||
|
+ }
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
isc__nm_sendcb(sock, uvreq, ISC_R_SUCCESS, false);
|
||||||
|
+ tcpdns_maybe_restart_reading(sock);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -1211,6 +1259,13 @@ isc__nm_async_tcpdnssend(isc__networker_t *worker, isc__netievent_t *ev0) {
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, ISC_LOGMODULE_NETMGR,
|
||||||
|
+ ISC_LOG_DEBUG(3),
|
||||||
|
+ "throttling TCP connection, the other side is not "
|
||||||
|
+ "reading the data, switching to uv_write()");
|
||||||
|
+ sock->reading_throttled = true;
|
||||||
|
+ isc__nm_stop_reading(sock);
|
||||||
|
+
|
||||||
|
r = uv_write(&uvreq->uv_req.write, &sock->uv_handle.stream, bufs, nbufs,
|
||||||
|
tcpdns_send_cb);
|
||||||
|
if (r < 0) {
|
||||||
|
diff --git a/lib/isc/netmgr/tlsdns.c b/lib/isc/netmgr/tlsdns.c
|
||||||
|
index 40e6fc8..f62dfd4 100644
|
||||||
|
--- a/lib/isc/netmgr/tlsdns.c
|
||||||
|
+++ b/lib/isc/netmgr/tlsdns.c
|
||||||
|
@@ -88,6 +88,9 @@ tlsdns_set_tls_shutdown(isc_tls_t *tls) {
|
||||||
|
(void)SSL_set_shutdown(tls, SSL_SENT_SHUTDOWN);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+tlsdns_maybe_restart_reading(isc_nmsocket_t *sock);
|
||||||
|
+
|
||||||
|
static bool
|
||||||
|
peer_verification_has_failed(isc_nmsocket_t *sock) {
|
||||||
|
if (sock->tls.tls != NULL && sock->tls.state == TLS_STATE_HANDSHAKE &&
|
||||||
|
@@ -1076,6 +1079,19 @@ tls_cycle_input(isc_nmsocket_t *sock) {
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
+ /*
|
||||||
|
+ * There is a similar branch in
|
||||||
|
+ * isc__nm_process_sock_buffer() which is sufficient to
|
||||||
|
+ * stop excessive processing in TCP. However, as we wrap
|
||||||
|
+ * this call in a loop, we need to have it here in order
|
||||||
|
+ * to limit the number of loop iterations (and,
|
||||||
|
+ * consequently, the number of messages processed).
|
||||||
|
+ */
|
||||||
|
+ if (atomic_load(&sock->ah) >= STREAM_CLIENTS_PER_CONN) {
|
||||||
|
+ isc__nm_stop_reading(sock);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
(void)SSL_peek(sock->tls.tls, &(char){ '\0' }, 0);
|
||||||
|
|
||||||
|
int pending = SSL_pending(sock->tls.tls);
|
||||||
|
@@ -1253,17 +1269,17 @@ call_pending_send_callbacks(isc_nmsocket_t *sock, const isc_result_t result) {
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
-free_senddata(isc_nmsocket_t *sock, const isc_result_t result) {
|
||||||
|
+free_senddata(isc_nmsocket_t *sock, isc__nm_uvreq_t *req,
|
||||||
|
+ const isc_result_t result) {
|
||||||
|
REQUIRE(VALID_NMSOCK(sock));
|
||||||
|
- REQUIRE(sock->tls.senddata.base != NULL);
|
||||||
|
- REQUIRE(sock->tls.senddata.length > 0);
|
||||||
|
+ REQUIRE(req != NULL && req->userbuf.base != NULL &&
|
||||||
|
+ req->userbuf.length > 0);
|
||||||
|
|
||||||
|
- isc_mem_put(sock->mgr->mctx, sock->tls.senddata.base,
|
||||||
|
- sock->tls.senddata.length);
|
||||||
|
- sock->tls.senddata.base = NULL;
|
||||||
|
- sock->tls.senddata.length = 0;
|
||||||
|
+ isc_mem_put(sock->mgr->mctx, req->userbuf.base, req->userbuf.length);
|
||||||
|
|
||||||
|
call_pending_send_callbacks(sock, result);
|
||||||
|
+
|
||||||
|
+ isc__nm_uvreq_put(&req, sock);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
@@ -1276,11 +1292,19 @@ tls_write_cb(uv_write_t *req, int status) {
|
||||||
|
isc_nm_timer_stop(uvreq->timer);
|
||||||
|
isc_nm_timer_detach(&uvreq->timer);
|
||||||
|
|
||||||
|
- free_senddata(sock, result);
|
||||||
|
-
|
||||||
|
- isc__nm_uvreq_put(&uvreq, sock);
|
||||||
|
+ free_senddata(sock, uvreq, result);
|
||||||
|
|
||||||
|
if (status != 0) {
|
||||||
|
+ if (!sock->client &&
|
||||||
|
+ (atomic_load(&sock->reading) || sock->reading_throttled))
|
||||||
|
+ {
|
||||||
|
+ /*
|
||||||
|
+ * As we are resuming reading, it is not throttled
|
||||||
|
+ * anymore (technically).
|
||||||
|
+ */
|
||||||
|
+ sock->reading_throttled = false;
|
||||||
|
+ isc__nm_start_reading(sock);
|
||||||
|
+ }
|
||||||
|
tls_error(sock, result);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
@@ -1290,6 +1314,8 @@ tls_write_cb(uv_write_t *req, int status) {
|
||||||
|
tls_error(sock, result);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ tlsdns_maybe_restart_reading(sock);
|
||||||
|
}
|
||||||
|
|
||||||
|
static isc_result_t
|
||||||
|
@@ -1303,23 +1329,18 @@ tls_cycle_output(isc_nmsocket_t *sock) {
|
||||||
|
int rv;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
- if (sock->tls.senddata.base != NULL ||
|
||||||
|
- sock->tls.senddata.length > 0)
|
||||||
|
- {
|
||||||
|
- break;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
if (pending > (int)ISC_NETMGR_TCP_RECVBUF_SIZE) {
|
||||||
|
pending = (int)ISC_NETMGR_TCP_RECVBUF_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
- sock->tls.senddata.base = isc_mem_get(sock->mgr->mctx, pending);
|
||||||
|
- sock->tls.senddata.length = pending;
|
||||||
|
-
|
||||||
|
/* It's a bit misnomer here, but it does the right thing */
|
||||||
|
req = isc__nm_get_read_req(sock, NULL);
|
||||||
|
- req->uvbuf.base = (char *)sock->tls.senddata.base;
|
||||||
|
- req->uvbuf.len = sock->tls.senddata.length;
|
||||||
|
+
|
||||||
|
+ req->userbuf.base = isc_mem_get(sock->mgr->mctx, pending);
|
||||||
|
+ req->userbuf.length = (size_t)pending;
|
||||||
|
+
|
||||||
|
+ req->uvbuf.base = (char *)req->userbuf.base;
|
||||||
|
+ req->uvbuf.len = (size_t)req->userbuf.length;
|
||||||
|
|
||||||
|
rv = BIO_read_ex(sock->tls.app_rbio, req->uvbuf.base,
|
||||||
|
req->uvbuf.len, &bytes);
|
||||||
|
@@ -1331,32 +1352,36 @@ tls_cycle_output(isc_nmsocket_t *sock) {
|
||||||
|
|
||||||
|
if (r == pending) {
|
||||||
|
/* Wrote everything, restart */
|
||||||
|
- isc__nm_uvreq_put(&req, sock);
|
||||||
|
- free_senddata(sock, ISC_R_SUCCESS);
|
||||||
|
+ free_senddata(sock, req, ISC_R_SUCCESS);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (r > 0) {
|
||||||
|
/* Partial write, send rest asynchronously */
|
||||||
|
- memmove(req->uvbuf.base, req->uvbuf.base + r,
|
||||||
|
- req->uvbuf.len - r);
|
||||||
|
- req->uvbuf.len = req->uvbuf.len - r;
|
||||||
|
+ req->uvbuf.base += r;
|
||||||
|
+ req->uvbuf.len -= r;
|
||||||
|
} else if (r == UV_ENOSYS || r == UV_EAGAIN) {
|
||||||
|
/* uv_try_write is not supported, send
|
||||||
|
* asynchronously */
|
||||||
|
} else {
|
||||||
|
result = isc__nm_uverr2result(r);
|
||||||
|
- isc__nm_uvreq_put(&req, sock);
|
||||||
|
- free_senddata(sock, result);
|
||||||
|
+ free_senddata(sock, req, result);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ isc_log_write(
|
||||||
|
+ isc_lctx, ISC_LOGCATEGORY_GENERAL, ISC_LOGMODULE_NETMGR,
|
||||||
|
+ ISC_LOG_DEBUG(3),
|
||||||
|
+ "throttling TCP connection, the other side is not "
|
||||||
|
+ "reading the data, switching to uv_write()");
|
||||||
|
+ sock->reading_throttled = true;
|
||||||
|
+ isc__nm_stop_reading(sock);
|
||||||
|
+
|
||||||
|
r = uv_write(&req->uv_req.write, &sock->uv_handle.stream,
|
||||||
|
&req->uvbuf, 1, tls_write_cb);
|
||||||
|
if (r < 0) {
|
||||||
|
result = isc__nm_uverr2result(r);
|
||||||
|
- isc__nm_uvreq_put(&req, sock);
|
||||||
|
- free_senddata(sock, result);
|
||||||
|
+ free_senddata(sock, req, result);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1525,6 +1550,28 @@ isc__nm_tlsdns_read_cb(uv_stream_t *stream, ssize_t nread,
|
||||||
|
result = tls_cycle(sock);
|
||||||
|
if (result != ISC_R_SUCCESS) {
|
||||||
|
isc__nm_failed_read_cb(sock, result, true);
|
||||||
|
+ } else if (!sock->client) {
|
||||||
|
+ /*
|
||||||
|
+ * Stop reading if we have accumulated enough bytes in
|
||||||
|
+ * the send queue; this means that the TCP client is not
|
||||||
|
+ * reading back the data we sending to it, and there's
|
||||||
|
+ * no reason to continue processing more incoming DNS
|
||||||
|
+ * messages, if the client is not reading back the
|
||||||
|
+ * responses.
|
||||||
|
+ */
|
||||||
|
+ size_t write_queue_size =
|
||||||
|
+ uv_stream_get_write_queue_size(&sock->uv_handle.stream);
|
||||||
|
+
|
||||||
|
+ if (write_queue_size >= ISC_NETMGR_TCP_SENDBUF_SIZE) {
|
||||||
|
+ isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
|
||||||
|
+ ISC_LOGMODULE_NETMGR, ISC_LOG_DEBUG(3),
|
||||||
|
+ "throttling TCP connection, "
|
||||||
|
+ "the other side is "
|
||||||
|
+ "not reading the data (%zu)",
|
||||||
|
+ write_queue_size);
|
||||||
|
+ sock->reading_throttled = true;
|
||||||
|
+ isc__nm_stop_reading(sock);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
free:
|
||||||
|
async_tlsdns_cycle(sock);
|
||||||
|
@@ -1766,6 +1813,19 @@ isc__nm_tlsdns_send(isc_nmhandle_t *handle, isc_region_t *region,
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+tlsdns_maybe_restart_reading(isc_nmsocket_t *sock) {
|
||||||
|
+ if (!sock->client && sock->reading_throttled &&
|
||||||
|
+ !uv_is_active(&sock->uv_handle.handle))
|
||||||
|
+ {
|
||||||
|
+ isc_result_t result = isc__nm_process_sock_buffer(sock);
|
||||||
|
+ if (result != ISC_R_SUCCESS) {
|
||||||
|
+ atomic_store(&sock->reading, true);
|
||||||
|
+ isc__nm_failed_read_cb(sock, result, false);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Handle 'tcpsend' async event - send a packet on the socket
|
||||||
|
*/
|
||||||
|
diff --git a/lib/ns/client.c b/lib/ns/client.c
|
||||||
|
index a62343b..8981222 100644
|
||||||
|
--- a/lib/ns/client.c
|
||||||
|
+++ b/lib/ns/client.c
|
||||||
|
@@ -101,6 +101,9 @@
|
||||||
|
#define COOKIE_SIZE 24U /* 8 + 4 + 4 + 8 */
|
||||||
|
#define ECS_SIZE 20U /* 2 + 1 + 1 + [0..16] */
|
||||||
|
|
||||||
|
+#define TCPBUFFERS_FILLCOUNT 1U
|
||||||
|
+#define TCPBUFFERS_FREEMAX 8U
|
||||||
|
+
|
||||||
|
#define WANTNSID(x) (((x)->attributes & NS_CLIENTATTR_WANTNSID) != 0)
|
||||||
|
#define WANTEXPIRE(x) (((x)->attributes & NS_CLIENTATTR_WANTEXPIRE) != 0)
|
||||||
|
#define WANTPAD(x) (((x)->attributes & NS_CLIENTATTR_WANTPAD) != 0)
|
||||||
|
@@ -330,12 +333,36 @@ client_senddone(isc_nmhandle_t *handle, isc_result_t result, void *cbarg) {
|
||||||
|
NS_LOGMODULE_CLIENT, ISC_LOG_DEBUG(3),
|
||||||
|
"send failed: %s",
|
||||||
|
isc_result_totext(result));
|
||||||
|
+ isc_nm_bad_request(handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
isc_nmhandle_detach(&handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+client_setup_tcp_buffer(ns_client_t *client) {
|
||||||
|
+ REQUIRE(client->tcpbuf == NULL);
|
||||||
|
+
|
||||||
|
+ client->tcpbuf = client->manager->tcp_buffer;
|
||||||
|
+ client->tcpbuf_size = NS_CLIENT_TCP_BUFFER_SIZE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+client_put_tcp_buffer(ns_client_t *client) {
|
||||||
|
+ if (client->tcpbuf == NULL) {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (client->tcpbuf != client->manager->tcp_buffer) {
|
||||||
|
+ isc_mem_put(client->manager->mctx, client->tcpbuf,
|
||||||
|
+ client->tcpbuf_size);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ client->tcpbuf = NULL;
|
||||||
|
+ client->tcpbuf_size = 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
client_allocsendbuf(ns_client_t *client, isc_buffer_t *buffer,
|
||||||
|
unsigned char **datap) {
|
||||||
|
@@ -345,12 +372,9 @@ client_allocsendbuf(ns_client_t *client, isc_buffer_t *buffer,
|
||||||
|
REQUIRE(datap != NULL);
|
||||||
|
|
||||||
|
if (TCP_CLIENT(client)) {
|
||||||
|
- INSIST(client->tcpbuf == NULL);
|
||||||
|
- client->tcpbuf = isc_mem_get(client->manager->send_mctx,
|
||||||
|
- NS_CLIENT_TCP_BUFFER_SIZE);
|
||||||
|
- client->tcpbuf_size = NS_CLIENT_TCP_BUFFER_SIZE;
|
||||||
|
+ client_setup_tcp_buffer(client);
|
||||||
|
data = client->tcpbuf;
|
||||||
|
- isc_buffer_init(buffer, data, NS_CLIENT_TCP_BUFFER_SIZE);
|
||||||
|
+ isc_buffer_init(buffer, data, client->tcpbuf_size);
|
||||||
|
} else {
|
||||||
|
data = client->sendbuf;
|
||||||
|
if ((client->attributes & NS_CLIENTATTR_HAVECOOKIE) == 0) {
|
||||||
|
@@ -383,11 +407,49 @@ client_sendpkg(ns_client_t *client, isc_buffer_t *buffer) {
|
||||||
|
|
||||||
|
if (isc_buffer_base(buffer) == client->tcpbuf) {
|
||||||
|
size_t used = isc_buffer_usedlength(buffer);
|
||||||
|
- client->tcpbuf = isc_mem_reget(client->manager->send_mctx,
|
||||||
|
- client->tcpbuf,
|
||||||
|
- client->tcpbuf_size, used);
|
||||||
|
- client->tcpbuf_size = used;
|
||||||
|
- r.base = client->tcpbuf;
|
||||||
|
+ INSIST(client->tcpbuf_size == NS_CLIENT_TCP_BUFFER_SIZE);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Copy the data into a smaller buffer before sending,
|
||||||
|
+ * and keep the original big TCP send buffer for reuse
|
||||||
|
+ * by other clients.
|
||||||
|
+ */
|
||||||
|
+ if (used > NS_CLIENT_SEND_BUFFER_SIZE) {
|
||||||
|
+ /*
|
||||||
|
+ * We can save space by allocating a new buffer with a
|
||||||
|
+ * correct size and freeing the big buffer.
|
||||||
|
+ */
|
||||||
|
+ unsigned char *new_tcpbuf =
|
||||||
|
+ isc_mem_get(client->manager->mctx, used);
|
||||||
|
+ memmove(new_tcpbuf, buffer->base, used);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Put the big buffer so we can replace the pointer
|
||||||
|
+ * and the size with the new ones.
|
||||||
|
+ */
|
||||||
|
+ client_put_tcp_buffer(client);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Keep the new buffer's information so it can be freed.
|
||||||
|
+ */
|
||||||
|
+ client->tcpbuf = new_tcpbuf;
|
||||||
|
+ client->tcpbuf_size = used;
|
||||||
|
+
|
||||||
|
+ r.base = new_tcpbuf;
|
||||||
|
+ } else {
|
||||||
|
+ /*
|
||||||
|
+ * The data fits in the available space in
|
||||||
|
+ * 'sendbuf', there is no need for a new buffer.
|
||||||
|
+ */
|
||||||
|
+ memmove(client->sendbuf, buffer->base, used);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Put the big buffer, we don't need a dynamic buffer.
|
||||||
|
+ */
|
||||||
|
+ client_put_tcp_buffer(client);
|
||||||
|
+
|
||||||
|
+ r.base = client->sendbuf;
|
||||||
|
+ }
|
||||||
|
r.length = used;
|
||||||
|
} else {
|
||||||
|
isc_buffer_usedregion(buffer, &r);
|
||||||
|
@@ -461,8 +523,7 @@ ns_client_sendraw(ns_client_t *client, dns_message_t *message) {
|
||||||
|
return;
|
||||||
|
done:
|
||||||
|
if (client->tcpbuf != NULL) {
|
||||||
|
- isc_mem_put(client->manager->send_mctx, client->tcpbuf,
|
||||||
|
- client->tcpbuf_size);
|
||||||
|
+ client_put_tcp_buffer(client);
|
||||||
|
}
|
||||||
|
|
||||||
|
ns_client_drop(client, result);
|
||||||
|
@@ -746,8 +807,7 @@ renderend:
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
if (client->tcpbuf != NULL) {
|
||||||
|
- isc_mem_put(client->manager->send_mctx, client->tcpbuf,
|
||||||
|
- client->tcpbuf_size);
|
||||||
|
+ client_put_tcp_buffer(client);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cleanup_cctx) {
|
||||||
|
@@ -1629,8 +1689,7 @@ ns__client_reset_cb(void *client0) {
|
||||||
|
|
||||||
|
ns_client_endrequest(client);
|
||||||
|
if (client->tcpbuf != NULL) {
|
||||||
|
- isc_mem_put(client->manager->send_mctx, client->tcpbuf,
|
||||||
|
- client->tcpbuf_size);
|
||||||
|
+ client_put_tcp_buffer(client);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (client->keytag != NULL) {
|
||||||
|
@@ -1661,8 +1720,6 @@ ns__client_put_cb(void *client0) {
|
||||||
|
client->magic = 0;
|
||||||
|
client->shuttingdown = true;
|
||||||
|
|
||||||
|
- isc_mem_put(client->manager->send_mctx, client->sendbuf,
|
||||||
|
- NS_CLIENT_SEND_BUFFER_SIZE);
|
||||||
|
if (client->opt != NULL) {
|
||||||
|
INSIST(dns_rdataset_isassociated(client->opt));
|
||||||
|
dns_rdataset_disassociate(client->opt);
|
||||||
|
@@ -2339,8 +2396,6 @@ ns__client_setup(ns_client_t *client, ns_clientmgr_t *mgr, bool new) {
|
||||||
|
dns_message_create(client->mctx, DNS_MESSAGE_INTENTPARSE,
|
||||||
|
&client->message);
|
||||||
|
|
||||||
|
- client->sendbuf = isc_mem_get(client->manager->send_mctx,
|
||||||
|
- NS_CLIENT_SEND_BUFFER_SIZE);
|
||||||
|
/*
|
||||||
|
* Set magic earlier than usual because ns_query_init()
|
||||||
|
* and the functions it calls will require it.
|
||||||
|
@@ -2357,7 +2412,6 @@ ns__client_setup(ns_client_t *client, ns_clientmgr_t *mgr, bool new) {
|
||||||
|
ns_clientmgr_t *oldmgr = client->manager;
|
||||||
|
ns_server_t *sctx = client->sctx;
|
||||||
|
isc_task_t *task = client->task;
|
||||||
|
- unsigned char *sendbuf = client->sendbuf;
|
||||||
|
dns_message_t *message = client->message;
|
||||||
|
isc_mem_t *oldmctx = client->mctx;
|
||||||
|
ns_query_t query = client->query;
|
||||||
|
@@ -2372,7 +2426,6 @@ ns__client_setup(ns_client_t *client, ns_clientmgr_t *mgr, bool new) {
|
||||||
|
.manager = oldmgr,
|
||||||
|
.sctx = sctx,
|
||||||
|
.task = task,
|
||||||
|
- .sendbuf = sendbuf,
|
||||||
|
.message = message,
|
||||||
|
.query = query,
|
||||||
|
.tid = tid };
|
||||||
|
@@ -2397,8 +2450,6 @@ ns__client_setup(ns_client_t *client, ns_clientmgr_t *mgr, bool new) {
|
||||||
|
return (ISC_R_SUCCESS);
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
- isc_mem_put(client->manager->send_mctx, client->sendbuf,
|
||||||
|
- NS_CLIENT_SEND_BUFFER_SIZE);
|
||||||
|
dns_message_detach(&client->message);
|
||||||
|
isc_task_detach(&client->task);
|
||||||
|
ns_clientmgr_detach(&client->manager);
|
||||||
|
@@ -2461,8 +2512,6 @@ clientmgr_destroy(ns_clientmgr_t *manager) {
|
||||||
|
isc_task_detach(&manager->task);
|
||||||
|
ns_server_detach(&manager->sctx);
|
||||||
|
|
||||||
|
- isc_mem_detach(&manager->send_mctx);
|
||||||
|
-
|
||||||
|
isc_mem_putanddetach(&manager->mctx, manager, sizeof(*manager));
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -2499,61 +2548,6 @@ ns_clientmgr_create(ns_server_t *sctx, isc_taskmgr_t *taskmgr,
|
||||||
|
|
||||||
|
ISC_LIST_INIT(manager->recursing);
|
||||||
|
|
||||||
|
- /*
|
||||||
|
- * We create specialised per-worker memory context specifically
|
||||||
|
- * dedicated and tuned for allocating send buffers as it is a very
|
||||||
|
- * common operation. Not doing so may result in excessive memory
|
||||||
|
- * use in certain workloads.
|
||||||
|
- *
|
||||||
|
- * Please see this thread for more details:
|
||||||
|
- *
|
||||||
|
- * https://github.com/jemalloc/jemalloc/issues/2483
|
||||||
|
- *
|
||||||
|
- * In particular, this information from the jemalloc developers is
|
||||||
|
- * of the most interest:
|
||||||
|
- *
|
||||||
|
- * https://github.com/jemalloc/jemalloc/issues/2483#issuecomment-1639019699
|
||||||
|
- * https://github.com/jemalloc/jemalloc/issues/2483#issuecomment-1698173849
|
||||||
|
- *
|
||||||
|
- * In essence, we use the following memory management strategy:
|
||||||
|
- *
|
||||||
|
- * 1. We use a per-worker memory arena for send buffers memory
|
||||||
|
- * allocation to reduce lock contention (In reality, we create a
|
||||||
|
- * per-client manager arena, but we have one client manager per
|
||||||
|
- * worker).
|
||||||
|
- *
|
||||||
|
- * 2. The automatically created arenas settings remain unchanged
|
||||||
|
- * and may be controlled by users (e.g. by setting the
|
||||||
|
- * "MALLOC_CONF" variable).
|
||||||
|
- *
|
||||||
|
- * 3. We attune the arenas to not use dirty pages cache as the
|
||||||
|
- * cache would have a poor reuse rate, and that is known to
|
||||||
|
- * significantly contribute to excessive memory use.
|
||||||
|
- *
|
||||||
|
- * 4. There is no strict need for the dirty cache, as there is a
|
||||||
|
- * per arena bin for each allocation size, so because we initially
|
||||||
|
- * allocate strictly 64K per send buffer (enough for a DNS
|
||||||
|
- * message), allocations would get directed to one bin (an "object
|
||||||
|
- * pool" or a "slab") maintained within an arena. That is, there
|
||||||
|
- * is an object pool already, specifically to optimise for the
|
||||||
|
- * case of frequent allocations of objects of the given size. The
|
||||||
|
- * object pool should suffice our needs, as we will end up
|
||||||
|
- * recycling the objects from there without the need to back it by
|
||||||
|
- * an additional layer of dirty pages cache. The dirty pages cache
|
||||||
|
- * would have worked better in the case when there are more
|
||||||
|
- * allocation bins involved due to a higher reuse rate (the case
|
||||||
|
- * of a more "generic" memory management).
|
||||||
|
- */
|
||||||
|
- isc_mem_create_arena(&manager->send_mctx);
|
||||||
|
- isc_mem_setname(manager->send_mctx, "sendbufs");
|
||||||
|
- (void)isc_mem_arena_set_dirty_decay_ms(manager->send_mctx, 0);
|
||||||
|
- /*
|
||||||
|
- * Disable muzzy pages cache too, as versions < 5.2.0 have it
|
||||||
|
- * enabled by default. The muzzy pages cache goes right below the
|
||||||
|
- * dirty pages cache and backs it.
|
||||||
|
- */
|
||||||
|
- (void)isc_mem_arena_set_muzzy_decay_ms(manager->send_mctx, 0);
|
||||||
|
-
|
||||||
|
manager->magic = MANAGER_MAGIC;
|
||||||
|
|
||||||
|
MTRACE("create");
|
||||||
|
diff --git a/lib/ns/include/ns/client.h b/lib/ns/include/ns/client.h
|
||||||
|
index 7a7196f..ea2d83e 100644
|
||||||
|
--- a/lib/ns/include/ns/client.h
|
||||||
|
+++ b/lib/ns/include/ns/client.h
|
||||||
|
@@ -144,7 +144,6 @@ struct ns_clientmgr {
|
||||||
|
unsigned int magic;
|
||||||
|
|
||||||
|
isc_mem_t *mctx;
|
||||||
|
- isc_mem_t *send_mctx;
|
||||||
|
ns_server_t *sctx;
|
||||||
|
isc_taskmgr_t *taskmgr;
|
||||||
|
isc_timermgr_t *timermgr;
|
||||||
|
@@ -159,6 +158,8 @@ struct ns_clientmgr {
|
||||||
|
/* Lock covers the recursing list */
|
||||||
|
isc_mutex_t reclock;
|
||||||
|
client_list_t recursing; /*%< Recursing clients */
|
||||||
|
+
|
||||||
|
+ uint8_t tcp_buffer[NS_CLIENT_TCP_BUFFER_SIZE];
|
||||||
|
};
|
||||||
|
|
||||||
|
/*% nameserver client structure */
|
||||||
|
@@ -187,7 +188,6 @@ struct ns_client {
|
||||||
|
unsigned char *tcpbuf;
|
||||||
|
size_t tcpbuf_size;
|
||||||
|
dns_message_t *message;
|
||||||
|
- unsigned char *sendbuf;
|
||||||
|
dns_rdataset_t *opt;
|
||||||
|
dns_ednsopt_t *ede;
|
||||||
|
uint16_t udpsize;
|
||||||
|
@@ -240,6 +240,8 @@ struct ns_client {
|
||||||
|
* bits will be used as the rcode in the response message.
|
||||||
|
*/
|
||||||
|
int32_t rcode_override;
|
||||||
|
+
|
||||||
|
+ uint8_t sendbuf[NS_CLIENT_SEND_BUFFER_SIZE];
|
||||||
|
};
|
||||||
|
|
||||||
|
#define NS_CLIENT_MAGIC ISC_MAGIC('N', 'S', 'C', 'c')
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
257
backport-CVE-2024-11187.patch
Normal file
257
backport-CVE-2024-11187.patch
Normal file
@ -0,0 +1,257 @@
|
|||||||
|
From fa7b7973e36056440dd688c7f312c89600d4f8cf Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= <ondrej@isc.org>
|
||||||
|
Date: Thu, 14 Nov 2024 10:37:29 +0100
|
||||||
|
Subject: [PATCH] Limit the additional processing for large RDATA sets
|
||||||
|
|
||||||
|
When answering queries, don't add data to the additional section if
|
||||||
|
the answer has more than 13 names in the RDATA. This limits the
|
||||||
|
number of lookups into the database(s) during a single client query,
|
||||||
|
reducing query processing load.
|
||||||
|
|
||||||
|
Also, don't append any additional data to type=ANY queries. The
|
||||||
|
answer to ANY is already big enough.
|
||||||
|
|
||||||
|
(cherry picked from commit a1982cf1bb95c818aa7b58988b5611dec80f2408)
|
||||||
|
|
||||||
|
Conflict:Context adaptation
|
||||||
|
Reference:https://downloads.isc.org/isc/bind9/9.18.33/patches/0002-CVE-2024-11187.patch
|
||||||
|
|
||||||
|
---
|
||||||
|
bin/tests/system/additional/tests.sh | 2 +-
|
||||||
|
bin/tests/system/resolver/tests.sh | 8 ++++++++
|
||||||
|
lib/dns/include/dns/rdataset.h | 10 +++++++++-
|
||||||
|
lib/dns/rbtdb.c | 2 +-
|
||||||
|
lib/dns/rdataset.c | 7 ++++++-
|
||||||
|
lib/dns/resolver.c | 19 ++++++++++++-------
|
||||||
|
lib/ns/query.c | 12 ++++++++----
|
||||||
|
7 files changed, 45 insertions(+), 15 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/bin/tests/system/additional/tests.sh b/bin/tests/system/additional/tests.sh
|
||||||
|
index 193c9f9..e1b0cfb 100644
|
||||||
|
--- a/bin/tests/system/additional/tests.sh
|
||||||
|
+++ b/bin/tests/system/additional/tests.sh
|
||||||
|
@@ -279,7 +279,7 @@ n=$((n + 1))
|
||||||
|
echo_i "testing with 'minimal-any no;' ($n)"
|
||||||
|
ret=0
|
||||||
|
$DIG $DIGOPTS -t ANY www.rt.example @10.53.0.1 >dig.out.$n || ret=1
|
||||||
|
-grep "ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 2" dig.out.$n >/dev/null || ret=1
|
||||||
|
+grep "ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 1" dig.out.$n >/dev/null || ret=1
|
||||||
|
if [ $ret -eq 1 ]; then
|
||||||
|
echo_i "failed"
|
||||||
|
status=$((status + 1))
|
||||||
|
diff --git a/bin/tests/system/resolver/tests.sh b/bin/tests/system/resolver/tests.sh
|
||||||
|
index 1ec5f86..e1a5bbd 100755
|
||||||
|
--- a/bin/tests/system/resolver/tests.sh
|
||||||
|
+++ b/bin/tests/system/resolver/tests.sh
|
||||||
|
@@ -311,6 +311,10 @@ done
|
||||||
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||||
|
status=$((status + ret))
|
||||||
|
|
||||||
|
+stop_server ns4
|
||||||
|
+touch ns4/named.noaa
|
||||||
|
+start_server --noclean --restart --port ${PORT} ns4 || ret=1
|
||||||
|
+
|
||||||
|
n=$((n + 1))
|
||||||
|
echo_i "RT21594 regression test check setup ($n)"
|
||||||
|
ret=0
|
||||||
|
@@ -347,6 +351,10 @@ grep "status: NXDOMAIN" dig.ns5.out.${n} >/dev/null || ret=1
|
||||||
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||||
|
status=$((status + ret))
|
||||||
|
|
||||||
|
+stop_server ns4
|
||||||
|
+rm ns4/named.noaa
|
||||||
|
+start_server --noclean --restart --port ${PORT} ns4 || ret=1
|
||||||
|
+
|
||||||
|
n=$((n + 1))
|
||||||
|
echo_i "check that replacement of additional data by a negative cache no data entry clears the additional RRSIGs ($n)"
|
||||||
|
ret=0
|
||||||
|
diff --git a/lib/dns/include/dns/rdataset.h b/lib/dns/include/dns/rdataset.h
|
||||||
|
index 566ea44..3294f63 100644
|
||||||
|
--- a/lib/dns/include/dns/rdataset.h
|
||||||
|
+++ b/lib/dns/include/dns/rdataset.h
|
||||||
|
@@ -54,6 +54,8 @@
|
||||||
|
#include <dns/rdatastruct.h>
|
||||||
|
#include <dns/types.h>
|
||||||
|
|
||||||
|
+#define DNS_RDATASET_MAXADDITIONAL 13
|
||||||
|
+
|
||||||
|
ISC_LANG_BEGINDECLS
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
@@ -454,7 +456,8 @@ dns_rdataset_towirepartial(dns_rdataset_t *rdataset,
|
||||||
|
isc_result_t
|
||||||
|
dns_rdataset_additionaldata(dns_rdataset_t *rdataset,
|
||||||
|
const dns_name_t *owner_name,
|
||||||
|
- dns_additionaldatafunc_t add, void *arg);
|
||||||
|
+ dns_additionaldatafunc_t add, void *arg,
|
||||||
|
+ size_t limit);
|
||||||
|
/*%<
|
||||||
|
* For each rdata in rdataset, call 'add' for each name and type in the
|
||||||
|
* rdata which is subject to additional section processing.
|
||||||
|
@@ -473,10 +476,15 @@ dns_rdataset_additionaldata(dns_rdataset_t *rdataset,
|
||||||
|
*\li If a call to dns_rdata_additionaldata() is not successful, the
|
||||||
|
* result returned will be the result of dns_rdataset_additionaldata().
|
||||||
|
*
|
||||||
|
+ *\li If 'limit' is non-zero and the number of the rdatasets is larger
|
||||||
|
+ * than 'limit', no additional data will be processed.
|
||||||
|
+ *
|
||||||
|
* Returns:
|
||||||
|
*
|
||||||
|
*\li #ISC_R_SUCCESS
|
||||||
|
*
|
||||||
|
+ *\li #DNS_R_TOOMANYRECORDS in case rdataset count is larger than 'limit'
|
||||||
|
+ *
|
||||||
|
*\li Any error that dns_rdata_additionaldata() can return.
|
||||||
|
*/
|
||||||
|
|
||||||
|
diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c
|
||||||
|
index c22e021..2d32571 100644
|
||||||
|
--- a/lib/dns/rbtdb.c
|
||||||
|
+++ b/lib/dns/rbtdb.c
|
||||||
|
@@ -10188,7 +10188,7 @@ no_glue:
|
||||||
|
idx = hash_32(hash, rbtversion->glue_table_bits);
|
||||||
|
|
||||||
|
(void)dns_rdataset_additionaldata(rdataset, dns_rootname,
|
||||||
|
- glue_nsdname_cb, &ctx);
|
||||||
|
+ glue_nsdname_cb, &ctx, 0);
|
||||||
|
|
||||||
|
cur = isc_mem_get(rbtdb->common.mctx, sizeof(*cur));
|
||||||
|
|
||||||
|
diff --git a/lib/dns/rdataset.c b/lib/dns/rdataset.c
|
||||||
|
index 4d48203..0b450a9 100644
|
||||||
|
--- a/lib/dns/rdataset.c
|
||||||
|
+++ b/lib/dns/rdataset.c
|
||||||
|
@@ -577,7 +577,8 @@ dns_rdataset_towire(dns_rdataset_t *rdataset, const dns_name_t *owner_name,
|
||||||
|
isc_result_t
|
||||||
|
dns_rdataset_additionaldata(dns_rdataset_t *rdataset,
|
||||||
|
const dns_name_t *owner_name,
|
||||||
|
- dns_additionaldatafunc_t add, void *arg) {
|
||||||
|
+ dns_additionaldatafunc_t add, void *arg,
|
||||||
|
+ size_t limit) {
|
||||||
|
dns_rdata_t rdata = DNS_RDATA_INIT;
|
||||||
|
isc_result_t result;
|
||||||
|
|
||||||
|
@@ -589,6 +590,10 @@ dns_rdataset_additionaldata(dns_rdataset_t *rdataset,
|
||||||
|
REQUIRE(DNS_RDATASET_VALID(rdataset));
|
||||||
|
REQUIRE((rdataset->attributes & DNS_RDATASETATTR_QUESTION) == 0);
|
||||||
|
|
||||||
|
+ if (limit != 0 && dns_rdataset_count(rdataset) > limit) {
|
||||||
|
+ return DNS_R_TOOMANYRECORDS;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
result = dns_rdataset_first(rdataset);
|
||||||
|
if (result != ISC_R_SUCCESS) {
|
||||||
|
return (result);
|
||||||
|
diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c
|
||||||
|
index 60cac29..e879ec8 100644
|
||||||
|
--- a/lib/dns/resolver.c
|
||||||
|
+++ b/lib/dns/resolver.c
|
||||||
|
@@ -8844,7 +8844,7 @@ rctx_answer_any(respctx_t *rctx) {
|
||||||
|
rdataset->trust = rctx->trust;
|
||||||
|
|
||||||
|
(void)dns_rdataset_additionaldata(rdataset, rctx->aname,
|
||||||
|
- check_related, rctx);
|
||||||
|
+ check_related, rctx, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (ISC_R_SUCCESS);
|
||||||
|
@@ -8892,7 +8892,7 @@ rctx_answer_match(respctx_t *rctx) {
|
||||||
|
rctx->ardataset->attributes |= DNS_RDATASETATTR_CACHE;
|
||||||
|
rctx->ardataset->trust = rctx->trust;
|
||||||
|
(void)dns_rdataset_additionaldata(rctx->ardataset, rctx->aname,
|
||||||
|
- check_related, rctx);
|
||||||
|
+ check_related, rctx, 0);
|
||||||
|
|
||||||
|
for (sigrdataset = ISC_LIST_HEAD(rctx->aname->list);
|
||||||
|
sigrdataset != NULL;
|
||||||
|
@@ -9099,7 +9099,7 @@ rctx_authority_positive(respctx_t *rctx) {
|
||||||
|
*/
|
||||||
|
(void)dns_rdataset_additionaldata(
|
||||||
|
rdataset, name, check_related,
|
||||||
|
- rctx);
|
||||||
|
+ rctx, 0);
|
||||||
|
done = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -9606,8 +9606,12 @@ rctx_referral(respctx_t *rctx) {
|
||||||
|
*/
|
||||||
|
INSIST(rctx->ns_rdataset != NULL);
|
||||||
|
FCTX_ATTR_SET(fctx, FCTX_ATTR_GLUING);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Mark the glue records in the additional section to be cached.
|
||||||
|
+ */
|
||||||
|
(void)dns_rdataset_additionaldata(rctx->ns_rdataset, rctx->ns_name,
|
||||||
|
- check_related, rctx);
|
||||||
|
+ check_related, rctx, 0);
|
||||||
|
#if CHECK_FOR_GLUE_IN_ANSWER
|
||||||
|
/*
|
||||||
|
* Look in the answer section for "glue" that is incorrectly
|
||||||
|
@@ -9619,8 +9623,9 @@ rctx_referral(respctx_t *rctx) {
|
||||||
|
if (rctx->glue_in_answer &&
|
||||||
|
(fctx->type == dns_rdatatype_aaaa || fctx->type == dns_rdatatype_a))
|
||||||
|
{
|
||||||
|
- (void)dns_rdataset_additionaldata(
|
||||||
|
- rctx->ns_rdataset, rctx->ns_name, check_answer, fctx);
|
||||||
|
+ (void)dns_rdataset_additionaldata(rctx->ns_rdataset,
|
||||||
|
+ rctx->ns_name, check_answer,
|
||||||
|
+ fctx, 0);
|
||||||
|
}
|
||||||
|
#endif /* if CHECK_FOR_GLUE_IN_ANSWER */
|
||||||
|
FCTX_ATTR_CLR(fctx, FCTX_ATTR_GLUING);
|
||||||
|
@@ -9722,7 +9727,7 @@ again:
|
||||||
|
if (CHASE(rdataset)) {
|
||||||
|
rdataset->attributes &= ~DNS_RDATASETATTR_CHASE;
|
||||||
|
(void)dns_rdataset_additionaldata(
|
||||||
|
- rdataset, name, check_related, rctx);
|
||||||
|
+ rdataset, name, check_related, rctx, 0);
|
||||||
|
rescan = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/lib/ns/query.c b/lib/ns/query.c
|
||||||
|
index 7884514..516396c 100644
|
||||||
|
--- a/lib/ns/query.c
|
||||||
|
+++ b/lib/ns/query.c
|
||||||
|
@@ -2098,7 +2098,8 @@ addname:
|
||||||
|
if (trdataset != NULL && dns_rdatatype_followadditional(type)) {
|
||||||
|
if (client->additionaldepth++ < MAX_RESTARTS) {
|
||||||
|
eresult = dns_rdataset_additionaldata(
|
||||||
|
- trdataset, fname, query_additional_cb, qctx);
|
||||||
|
+ trdataset, fname, query_additional_cb, qctx,
|
||||||
|
+ DNS_RDATASET_MAXADDITIONAL);
|
||||||
|
}
|
||||||
|
client->additionaldepth--;
|
||||||
|
}
|
||||||
|
@@ -2198,7 +2199,7 @@ regular:
|
||||||
|
* We don't care if dns_rdataset_additionaldata() fails.
|
||||||
|
*/
|
||||||
|
(void)dns_rdataset_additionaldata(rdataset, name, query_additional_cb,
|
||||||
|
- qctx);
|
||||||
|
+ qctx, DNS_RDATASET_MAXADDITIONAL);
|
||||||
|
CTRACE(ISC_LOG_DEBUG(3), "query_additional: done");
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -2224,7 +2225,8 @@ query_addrrset(query_ctx_t *qctx, dns_name_t **namep,
|
||||||
|
* To the current response for 'client', add the answer RRset
|
||||||
|
* '*rdatasetp' and an optional signature set '*sigrdatasetp', with
|
||||||
|
* owner name '*namep', to section 'section', unless they are
|
||||||
|
- * already there. Also add any pertinent additional data.
|
||||||
|
+ * already there. Also add any pertinent additional data, unless
|
||||||
|
+ * the query was for type ANY.
|
||||||
|
*
|
||||||
|
* If 'dbuf' is not NULL, then '*namep' is the name whose data is
|
||||||
|
* stored in 'dbuf'. In this case, query_addrrset() guarantees that
|
||||||
|
@@ -2279,7 +2281,9 @@ query_addrrset(query_ctx_t *qctx, dns_name_t **namep,
|
||||||
|
*/
|
||||||
|
query_addtoname(mname, rdataset);
|
||||||
|
query_setorder(qctx, mname, rdataset);
|
||||||
|
- query_additional(qctx, mname, rdataset);
|
||||||
|
+ if (qctx->qtype != dns_rdatatype_any) {
|
||||||
|
+ query_additional(qctx, mname, rdataset);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Note: we only add SIGs if we've added the type they cover, so
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
1319
backport-CVE-2024-12705.patch
Normal file
1319
backport-CVE-2024-12705.patch
Normal file
File diff suppressed because it is too large
Load Diff
1500
backport-CVE-2024-1737.patch
Normal file
1500
backport-CVE-2024-1737.patch
Normal file
File diff suppressed because it is too large
Load Diff
352
backport-CVE-2024-1975.patch
Normal file
352
backport-CVE-2024-1975.patch
Normal file
@ -0,0 +1,352 @@
|
|||||||
|
From bef3d2cca3552100bbe44790c8c1a4f5bef06798 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Petr=20=C5=A0pa=C4=8Dek?= <pspacek@isc.org>
|
||||||
|
Date: Thu, 16 May 2024 12:10:41 +0200
|
||||||
|
Subject: [PATCH] Remove support for SIG(0) message verification
|
||||||
|
|
||||||
|
Conflict:Case adaptation
|
||||||
|
Reference:https://downloads.isc.org/isc/bind9/9.18.28/patches/0003-CVE-2024-1975.patch
|
||||||
|
|
||||||
|
---
|
||||||
|
bin/tests/system/tsiggss/authsock.pl | 5 ++
|
||||||
|
bin/tests/system/tsiggss/tests.sh | 12 ++--
|
||||||
|
bin/tests/system/upforwd/tests.sh | 9 ++-
|
||||||
|
doc/arm/general.rst | 6 +-
|
||||||
|
doc/arm/intro-security.inc.rst | 2 +-
|
||||||
|
doc/arm/reference.rst | 4 +-
|
||||||
|
doc/arm/security.inc.rst | 4 +-
|
||||||
|
doc/arm/sig0.inc.rst | 16 +----
|
||||||
|
lib/dns/message.c | 99 ++--------------------------
|
||||||
|
lib/ns/client.c | 7 ++
|
||||||
|
10 files changed, 40 insertions(+), 124 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/bin/tests/system/tsiggss/authsock.pl b/bin/tests/system/tsiggss/authsock.pl
|
||||||
|
index 4c76bf8..972252a 100644
|
||||||
|
--- a/bin/tests/system/tsiggss/authsock.pl
|
||||||
|
+++ b/bin/tests/system/tsiggss/authsock.pl
|
||||||
|
@@ -33,6 +33,10 @@ if (!defined($path)) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
+# Enable output autoflush so that it's not lost when the parent sends TERM.
|
||||||
|
+select STDOUT;
|
||||||
|
+$| = 1;
|
||||||
|
+
|
||||||
|
unlink($path);
|
||||||
|
my $server = IO::Socket::UNIX->new(Local => $path, Type => SOCK_STREAM, Listen => 8) or
|
||||||
|
die "unable to create socket $path";
|
||||||
|
@@ -50,6 +54,7 @@ if ($timeout != 0) {
|
||||||
|
}
|
||||||
|
|
||||||
|
while (my $client = $server->accept()) {
|
||||||
|
+ printf("accept()\n");
|
||||||
|
$client->recv(my $buf, 8, 0);
|
||||||
|
my ($version, $req_len) = unpack('N N', $buf);
|
||||||
|
|
||||||
|
diff --git a/bin/tests/system/tsiggss/tests.sh b/bin/tests/system/tsiggss/tests.sh
|
||||||
|
index c37f32e..004ad83 100644
|
||||||
|
--- a/bin/tests/system/tsiggss/tests.sh
|
||||||
|
+++ b/bin/tests/system/tsiggss/tests.sh
|
||||||
|
@@ -117,7 +117,7 @@ status=$((status + ret))
|
||||||
|
|
||||||
|
echo_i "testing external update policy (CNAME) with auth sock ($n)"
|
||||||
|
ret=0
|
||||||
|
-$PERL ./authsock.pl --type=CNAME --path=ns1/auth.sock --pidfile=authsock.pid --timeout=120 >/dev/null 2>&1 &
|
||||||
|
+$PERL ./authsock.pl --type=CNAME --path=ns1/auth.sock --pidfile=authsock.pid --timeout=120 >authsock.log 2>&1 &
|
||||||
|
sleep 1
|
||||||
|
test_update $n testcname.example.nil. CNAME "86400 CNAME testdenied.example.nil" "testdenied" || ret=1
|
||||||
|
n=$((n + 1))
|
||||||
|
@@ -131,17 +131,19 @@ n=$((n + 1))
|
||||||
|
if [ "$ret" -ne 0 ]; then echo_i "failed"; fi
|
||||||
|
status=$((status + ret))
|
||||||
|
|
||||||
|
-echo_i "testing external policy with SIG(0) key ($n)"
|
||||||
|
+echo_i "testing external policy with unsupported SIG(0) key ($n)"
|
||||||
|
ret=0
|
||||||
|
-$NSUPDATE -k ns1/Kkey.example.nil.*.private <<END >/dev/null 2>&1 || ret=1
|
||||||
|
+$NSUPDATE -d -k ns1/Kkey.example.nil.*.private <<END >nsupdate.out${n} 2>&1 || true
|
||||||
|
+debug
|
||||||
|
server 10.53.0.1 ${PORT}
|
||||||
|
zone example.nil
|
||||||
|
update add fred.example.nil 120 cname foo.bar.
|
||||||
|
send
|
||||||
|
END
|
||||||
|
output=$($DIG $DIGOPTS +short cname fred.example.nil.)
|
||||||
|
-[ -n "$output" ] || ret=1
|
||||||
|
-[ $ret -eq 0 ] || echo_i "failed"
|
||||||
|
+# update must have failed - SIG(0) signer is not supported
|
||||||
|
+[ -n "$output" ] && ret=1
|
||||||
|
+grep -F "signer=key.example.nil" authsock.log >/dev/null && ret=1
|
||||||
|
n=$((n + 1))
|
||||||
|
if [ "$ret" -ne 0 ]; then echo_i "failed"; fi
|
||||||
|
status=$((status + ret))
|
||||||
|
diff --git a/bin/tests/system/upforwd/tests.sh b/bin/tests/system/upforwd/tests.sh
|
||||||
|
index 518eac6..d231d0f 100644
|
||||||
|
--- a/bin/tests/system/upforwd/tests.sh
|
||||||
|
+++ b/bin/tests/system/upforwd/tests.sh
|
||||||
|
@@ -229,10 +229,12 @@ fi
|
||||||
|
n=$((n + 1))
|
||||||
|
|
||||||
|
if test -f keyname; then
|
||||||
|
- echo_i "checking update forwarding to with sig0 ($n)"
|
||||||
|
+ echo_i "checking update forwarding to with sig0 (expected to fail) ($n)"
|
||||||
|
ret=0
|
||||||
|
keyname=$(cat keyname)
|
||||||
|
- $NSUPDATE -k $keyname.private -- - <<EOF
|
||||||
|
+ # SIG(0) is removed, update is expected to fail.
|
||||||
|
+ {
|
||||||
|
+ $NSUPDATE -k $keyname.private -- - <<EOF
|
||||||
|
local 10.53.0.1
|
||||||
|
server 10.53.0.3 ${PORT}
|
||||||
|
zone example2
|
||||||
|
@@ -240,8 +242,9 @@ if test -f keyname; then
|
||||||
|
update add unsigned.example2. 600 TXT Foo
|
||||||
|
send
|
||||||
|
EOF
|
||||||
|
+ } >nsupdate.out.$n 2>&1 && ret=1
|
||||||
|
$DIG -p ${PORT} unsigned.example2 A @10.53.0.1 >dig.out.ns1.test$n
|
||||||
|
- grep "status: NOERROR" dig.out.ns1.test$n >/dev/null || ret=1
|
||||||
|
+ grep "status: NOERROR" dig.out.ns1.test$n >/dev/null && ret=1
|
||||||
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||||
|
status=$((status + ret))
|
||||||
|
n=$((n + 1))
|
||||||
|
diff --git a/doc/arm/general.rst b/doc/arm/general.rst
|
||||||
|
index 5b65f6a..35f74b3 100644
|
||||||
|
--- a/doc/arm/general.rst
|
||||||
|
+++ b/doc/arm/general.rst
|
||||||
|
@@ -379,10 +379,8 @@ Notes
|
||||||
|
.. [#rfc1035_2] CLASS ANY queries are not supported. This is considered a
|
||||||
|
feature.
|
||||||
|
|
||||||
|
-.. [#rfc2931] When receiving a query signed with a SIG(0), the server is
|
||||||
|
- only able to verify the signature if it has the key in its local
|
||||||
|
- authoritative data; it cannot do recursion or validation to
|
||||||
|
- retrieve unknown keys.
|
||||||
|
+.. [#rfc2931] Support for SIG(0) message verification was removed
|
||||||
|
+ as part of the mitigation of CVE-2024-1975.
|
||||||
|
|
||||||
|
.. [#rfc2874] Compliance is with loading and serving of A6 records only.
|
||||||
|
A6 records were moved to the experimental category by :rfc:`3363`.
|
||||||
|
diff --git a/doc/arm/intro-security.inc.rst b/doc/arm/intro-security.inc.rst
|
||||||
|
index 87db970..996e910 100644
|
||||||
|
--- a/doc/arm/intro-security.inc.rst
|
||||||
|
+++ b/doc/arm/intro-security.inc.rst
|
||||||
|
@@ -47,7 +47,7 @@ or ports come preconfigured with local (loopback address) security preconfigured
|
||||||
|
If ``rndc`` is being invoked from a remote host, further configuration is required.
|
||||||
|
The ``nsupdate`` tool uses **Dynamic DNS (DDNS)** features and allows users to dynamically
|
||||||
|
change the contents of the zone file(s). ``nsupdate`` access and security may be controlled
|
||||||
|
-using ``named.conf`` :ref:`statements or using TSIG or SIG(0) cryptographic methods <dynamic_update_security>`.
|
||||||
|
+using ``named.conf`` :ref:`statements or via the TSIG cryptographic method <dynamic_update_security>`.
|
||||||
|
Clearly, if the remote hosts used for either ``rndc`` or DDNS lie within a network entirely
|
||||||
|
under the user's control, the security threat may be regarded as non-existent. Any implementation requirements,
|
||||||
|
therefore, depend on the site's security policy.
|
||||||
|
diff --git a/doc/arm/reference.rst b/doc/arm/reference.rst
|
||||||
|
index 29e246b..157ab30 100644
|
||||||
|
--- a/doc/arm/reference.rst
|
||||||
|
+++ b/doc/arm/reference.rst
|
||||||
|
@@ -7417,7 +7417,7 @@ the zone's filename, unless :any:`inline-signing` is enabled.
|
||||||
|
updates are allowed. It specifies a set of rules, in which each rule
|
||||||
|
either grants or denies permission for one or more names in the zone to
|
||||||
|
be updated by one or more identities. Identity is determined by the key
|
||||||
|
- that signed the update request, using either TSIG or SIG(0). In most
|
||||||
|
+ that signed the update request, using TSIG. In most
|
||||||
|
cases, :any:`update-policy` rules only apply to key-based identities. There
|
||||||
|
is no way to specify update permissions based on the client source address.
|
||||||
|
|
||||||
|
@@ -7474,7 +7474,7 @@ the zone's filename, unless :any:`inline-signing` is enabled.
|
||||||
|
field. Details for each rule type are described below.
|
||||||
|
|
||||||
|
The ``identity`` field must be set to a fully qualified domain name. In
|
||||||
|
- most cases, this represents the name of the TSIG or SIG(0) key that
|
||||||
|
+ most cases, this represents the name of the TSIG key that
|
||||||
|
must be used to sign the update request. If the specified name is a
|
||||||
|
wildcard, it is subject to DNS wildcard expansion, and the rule may
|
||||||
|
apply to multiple identities. When a TKEY exchange has been used to
|
||||||
|
diff --git a/doc/arm/security.inc.rst b/doc/arm/security.inc.rst
|
||||||
|
index 878fa37..8fc65d3 100644
|
||||||
|
--- a/doc/arm/security.inc.rst
|
||||||
|
+++ b/doc/arm/security.inc.rst
|
||||||
|
@@ -85,7 +85,7 @@ Limiting access to the server by outside parties can help prevent
|
||||||
|
spoofing and denial of service (DoS) attacks against the server.
|
||||||
|
|
||||||
|
ACLs match clients on the basis of up to three characteristics: 1) The
|
||||||
|
-client's IP address; 2) the TSIG or SIG(0) key that was used to sign the
|
||||||
|
+client's IP address; 2) the TSIG key that was used to sign the
|
||||||
|
request, if any; and 3) an address prefix encoded in an EDNS
|
||||||
|
Client-Subnet option, if any.
|
||||||
|
|
||||||
|
@@ -126,7 +126,7 @@ and no queries at all from the networks specified in ``bogusnets``.
|
||||||
|
|
||||||
|
In addition to network addresses and prefixes, which are matched against
|
||||||
|
the source address of the DNS request, ACLs may include ``key``
|
||||||
|
-elements, which specify the name of a TSIG or SIG(0) key.
|
||||||
|
+elements, which specify the name of a TSIG key.
|
||||||
|
|
||||||
|
When BIND 9 is built with GeoIP support, ACLs can also be used for
|
||||||
|
geographic access restrictions. This is done by specifying an ACL
|
||||||
|
diff --git a/doc/arm/sig0.inc.rst b/doc/arm/sig0.inc.rst
|
||||||
|
index 048dbea..6e6fc32 100644
|
||||||
|
--- a/doc/arm/sig0.inc.rst
|
||||||
|
+++ b/doc/arm/sig0.inc.rst
|
||||||
|
@@ -12,17 +12,5 @@
|
||||||
|
SIG(0)
|
||||||
|
------
|
||||||
|
|
||||||
|
-BIND partially supports DNSSEC SIG(0) transaction signatures as
|
||||||
|
-specified in :rfc:`2535` and :rfc:`2931`. SIG(0) uses public/private keys to
|
||||||
|
-authenticate messages. Access control is performed in the same manner as with
|
||||||
|
-TSIG keys; privileges can be granted or denied in ACL directives based
|
||||||
|
-on the key name.
|
||||||
|
-
|
||||||
|
-When a SIG(0) signed message is received, it is only verified if
|
||||||
|
-the key is known and trusted by the server. The server does not attempt
|
||||||
|
-to recursively fetch or validate the key.
|
||||||
|
-
|
||||||
|
-SIG(0) signing of multiple-message TCP streams is not supported.
|
||||||
|
-
|
||||||
|
-The only tool shipped with BIND 9 that generates SIG(0) signed messages
|
||||||
|
-is :iscman:`nsupdate`.
|
||||||
|
+Support for DNSSEC SIG(0) transaction signatures has been removed.
|
||||||
|
+This is a countermeasure for CVE-2024-1975.
|
||||||
|
diff --git a/lib/dns/message.c b/lib/dns/message.c
|
||||||
|
index 8654e92..a379125 100644
|
||||||
|
--- a/lib/dns/message.c
|
||||||
|
+++ b/lib/dns/message.c
|
||||||
|
@@ -3288,111 +3288,24 @@ dns_message_dumpsig(dns_message_t *msg, char *txt1) {
|
||||||
|
|
||||||
|
isc_result_t
|
||||||
|
dns_message_checksig(dns_message_t *msg, dns_view_t *view) {
|
||||||
|
- isc_buffer_t b, msgb;
|
||||||
|
+ isc_buffer_t msgb;
|
||||||
|
|
||||||
|
REQUIRE(DNS_MESSAGE_VALID(msg));
|
||||||
|
|
||||||
|
- if (msg->tsigkey == NULL && msg->tsig == NULL && msg->sig0 == NULL) {
|
||||||
|
+ if (msg->tsigkey == NULL && msg->tsig == NULL) {
|
||||||
|
return (ISC_R_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
INSIST(msg->saved.base != NULL);
|
||||||
|
isc_buffer_init(&msgb, msg->saved.base, msg->saved.length);
|
||||||
|
isc_buffer_add(&msgb, msg->saved.length);
|
||||||
|
- if (msg->tsigkey != NULL || msg->tsig != NULL) {
|
||||||
|
#ifdef SKAN_MSG_DEBUG
|
||||||
|
- dns_message_dumpsig(msg, "dns_message_checksig#1");
|
||||||
|
+ dns_message_dumpsig(msg, "dns_message_checksig#1");
|
||||||
|
#endif /* ifdef SKAN_MSG_DEBUG */
|
||||||
|
- if (view != NULL) {
|
||||||
|
- return (dns_view_checksig(view, &msgb, msg));
|
||||||
|
- } else {
|
||||||
|
- return (dns_tsig_verify(&msgb, msg, NULL, NULL));
|
||||||
|
- }
|
||||||
|
+ if (view != NULL) {
|
||||||
|
+ return (dns_view_checksig(view, &msgb, msg));
|
||||||
|
} else {
|
||||||
|
- dns_rdata_t rdata = DNS_RDATA_INIT;
|
||||||
|
- dns_rdata_sig_t sig;
|
||||||
|
- dns_rdataset_t keyset;
|
||||||
|
- isc_result_t result;
|
||||||
|
-
|
||||||
|
- result = dns_rdataset_first(msg->sig0);
|
||||||
|
- INSIST(result == ISC_R_SUCCESS);
|
||||||
|
- dns_rdataset_current(msg->sig0, &rdata);
|
||||||
|
-
|
||||||
|
- /*
|
||||||
|
- * This can occur when the message is a dynamic update, since
|
||||||
|
- * the rdata length checking is relaxed. This should not
|
||||||
|
- * happen in a well-formed message, since the SIG(0) is only
|
||||||
|
- * looked for in the additional section, and the dynamic update
|
||||||
|
- * meta-records are in the prerequisite and update sections.
|
||||||
|
- */
|
||||||
|
- if (rdata.length == 0) {
|
||||||
|
- return (ISC_R_UNEXPECTEDEND);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- result = dns_rdata_tostruct(&rdata, &sig, NULL);
|
||||||
|
- if (result != ISC_R_SUCCESS) {
|
||||||
|
- return (result);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- dns_rdataset_init(&keyset);
|
||||||
|
- if (view == NULL) {
|
||||||
|
- result = DNS_R_KEYUNAUTHORIZED;
|
||||||
|
- goto freesig;
|
||||||
|
- }
|
||||||
|
- result = dns_view_simplefind(view, &sig.signer,
|
||||||
|
- dns_rdatatype_key /* SIG(0) */, 0,
|
||||||
|
- 0, false, &keyset, NULL);
|
||||||
|
-
|
||||||
|
- if (result != ISC_R_SUCCESS) {
|
||||||
|
- /* XXXBEW Should possibly create a fetch here */
|
||||||
|
- result = DNS_R_KEYUNAUTHORIZED;
|
||||||
|
- goto freesig;
|
||||||
|
- } else if (keyset.trust < dns_trust_secure) {
|
||||||
|
- /* XXXBEW Should call a validator here */
|
||||||
|
- result = DNS_R_KEYUNAUTHORIZED;
|
||||||
|
- goto freesig;
|
||||||
|
- }
|
||||||
|
- result = dns_rdataset_first(&keyset);
|
||||||
|
- INSIST(result == ISC_R_SUCCESS);
|
||||||
|
- for (; result == ISC_R_SUCCESS;
|
||||||
|
- result = dns_rdataset_next(&keyset))
|
||||||
|
- {
|
||||||
|
- dst_key_t *key = NULL;
|
||||||
|
-
|
||||||
|
- dns_rdata_reset(&rdata);
|
||||||
|
- dns_rdataset_current(&keyset, &rdata);
|
||||||
|
- isc_buffer_init(&b, rdata.data, rdata.length);
|
||||||
|
- isc_buffer_add(&b, rdata.length);
|
||||||
|
-
|
||||||
|
- result = dst_key_fromdns(&sig.signer, rdata.rdclass, &b,
|
||||||
|
- view->mctx, &key);
|
||||||
|
- if (result != ISC_R_SUCCESS) {
|
||||||
|
- continue;
|
||||||
|
- }
|
||||||
|
- if (dst_key_alg(key) != sig.algorithm ||
|
||||||
|
- dst_key_id(key) != sig.keyid ||
|
||||||
|
- !(dst_key_proto(key) == DNS_KEYPROTO_DNSSEC ||
|
||||||
|
- dst_key_proto(key) == DNS_KEYPROTO_ANY))
|
||||||
|
- {
|
||||||
|
- dst_key_free(&key);
|
||||||
|
- continue;
|
||||||
|
- }
|
||||||
|
- result = dns_dnssec_verifymessage(&msgb, msg, key);
|
||||||
|
- dst_key_free(&key);
|
||||||
|
- if (result == ISC_R_SUCCESS) {
|
||||||
|
- break;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- if (result == ISC_R_NOMORE) {
|
||||||
|
- result = DNS_R_KEYUNAUTHORIZED;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- freesig:
|
||||||
|
- if (dns_rdataset_isassociated(&keyset)) {
|
||||||
|
- dns_rdataset_disassociate(&keyset);
|
||||||
|
- }
|
||||||
|
- dns_rdata_freestruct(&sig);
|
||||||
|
- return (result);
|
||||||
|
+ return (dns_tsig_verify(&msgb, msg, NULL, NULL));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/lib/ns/client.c b/lib/ns/client.c
|
||||||
|
index 8981222..5d2ad0b 100644
|
||||||
|
--- a/lib/ns/client.c
|
||||||
|
+++ b/lib/ns/client.c
|
||||||
|
@@ -2168,6 +2168,13 @@ ns__client_request(isc_nmhandle_t *handle, isc_result_t eresult,
|
||||||
|
ns_client_log(client, DNS_LOGCATEGORY_SECURITY,
|
||||||
|
NS_LOGMODULE_CLIENT, ISC_LOG_DEBUG(3),
|
||||||
|
"request is signed by a nonauthoritative key");
|
||||||
|
+ } else if (result == DNS_R_NOTVERIFIEDYET &&
|
||||||
|
+ client->message->sig0 != NULL)
|
||||||
|
+ {
|
||||||
|
+ ns_client_log(client, DNS_LOGCATEGORY_SECURITY,
|
||||||
|
+ NS_LOGMODULE_CLIENT, ISC_LOG_DEBUG(3),
|
||||||
|
+ "request has a SIG(0) signature but its support "
|
||||||
|
+ "was removed (CVE-2024-1975)");
|
||||||
|
} else {
|
||||||
|
char tsigrcode[64];
|
||||||
|
isc_buffer_t b;
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
34
backport-CVE-2024-4076.patch
Normal file
34
backport-CVE-2024-4076.patch
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
From 9cfd20cd90fab4c97fe91f68555b7a2e05b808e8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mark Andrews <marka@isc.org>
|
||||||
|
Date: Tue, 16 Jan 2024 14:25:27 +1100
|
||||||
|
Subject: [PATCH] Clear qctx->zversion
|
||||||
|
|
||||||
|
Clear qctx->zversion when clearing qctx->zrdataset et al in
|
||||||
|
lib/ns/query.c:qctx_freedata. The uncleared pointer could lead to
|
||||||
|
an assertion failure if zone data needed to be re-saved which could
|
||||||
|
happen with stale data support enabled.
|
||||||
|
|
||||||
|
(cherry picked from commit 179fb3532ab8d4898ab070b2db54c0ce872ef709)
|
||||||
|
|
||||||
|
Conflict:NA
|
||||||
|
Reference:https://downloads.isc.org/isc/bind9/9.18.28/patches/0004-CVE-2024-4076.patch
|
||||||
|
|
||||||
|
---
|
||||||
|
lib/ns/query.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/lib/ns/query.c b/lib/ns/query.c
|
||||||
|
index 40e1232..7884514 100644
|
||||||
|
--- a/lib/ns/query.c
|
||||||
|
+++ b/lib/ns/query.c
|
||||||
|
@@ -5323,6 +5323,7 @@ qctx_freedata(query_ctx_t *qctx) {
|
||||||
|
ns_client_releasename(qctx->client, &qctx->zfname);
|
||||||
|
dns_db_detachnode(qctx->zdb, &qctx->znode);
|
||||||
|
dns_db_detach(&qctx->zdb);
|
||||||
|
+ qctx->zversion = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (qctx->event != NULL && !qctx->client->nodetach) {
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
@ -0,0 +1,98 @@
|
|||||||
|
From 8ef414a7f38a04cfc11df44adaedaf3126fa3878 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= <ondrej@isc.org>
|
||||||
|
Date: Mon, 29 Jan 2024 16:36:30 +0100
|
||||||
|
Subject: [PATCH] Optimize the slabheader placement for certain RRTypes
|
||||||
|
|
||||||
|
Mark the infrastructure RRTypes as "priority" types and place them at
|
||||||
|
the beginning of the rdataslab header data graph. The non-priority
|
||||||
|
types either go right after the priority types (if any).
|
||||||
|
|
||||||
|
(cherry picked from commit 3ac482be7fd058d284e89873021339579fad0615)
|
||||||
|
|
||||||
|
Conflict:NA
|
||||||
|
Reference:https://gitlab.isc.org/isc-projects/bind9/-/commit/8ef414a7f38a04cfc11df44adaedaf3126fa3878
|
||||||
|
|
||||||
|
---
|
||||||
|
lib/dns/rbtdb.c | 44 ++++++++++++++++++++++++++++++++++++++++++--
|
||||||
|
1 file changed, 42 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c
|
||||||
|
index 7793be8..bc0f8d8 100644
|
||||||
|
--- a/lib/dns/rbtdb.c
|
||||||
|
+++ b/lib/dns/rbtdb.c
|
||||||
|
@@ -906,6 +906,30 @@ set_ttl(dns_rbtdb_t *rbtdb, rdatasetheader_t *header, dns_ttl_t newttl) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+static bool
|
||||||
|
+prio_type(rbtdb_rdatatype_t type) {
|
||||||
|
+ switch (type) {
|
||||||
|
+ case dns_rdatatype_soa:
|
||||||
|
+ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_soa):
|
||||||
|
+ case dns_rdatatype_a:
|
||||||
|
+ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_a):
|
||||||
|
+ case dns_rdatatype_aaaa:
|
||||||
|
+ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_aaaa):
|
||||||
|
+ case dns_rdatatype_nsec:
|
||||||
|
+ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_nsec):
|
||||||
|
+ case dns_rdatatype_nsec3:
|
||||||
|
+ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_nsec3):
|
||||||
|
+ case dns_rdatatype_ns:
|
||||||
|
+ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_ns):
|
||||||
|
+ case dns_rdatatype_ds:
|
||||||
|
+ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_ds):
|
||||||
|
+ case dns_rdatatype_cname:
|
||||||
|
+ case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_cname):
|
||||||
|
+ return (true);
|
||||||
|
+ }
|
||||||
|
+ return (false);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/*%
|
||||||
|
* These functions allow the heap code to rank the priority of each
|
||||||
|
* element. It returns true if v1 happens "sooner" than v2.
|
||||||
|
@@ -6167,6 +6191,7 @@ add32(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, const dns_name_t *nodename,
|
||||||
|
rbtdb_changed_t *changed = NULL;
|
||||||
|
rdatasetheader_t *topheader = NULL, *topheader_prev = NULL;
|
||||||
|
rdatasetheader_t *header = NULL, *sigheader = NULL;
|
||||||
|
+ rdatasetheader_t *prioheader = NULL;
|
||||||
|
unsigned char *merged = NULL;
|
||||||
|
isc_result_t result;
|
||||||
|
bool header_nx;
|
||||||
|
@@ -6313,6 +6338,9 @@ add32(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, const dns_name_t *nodename,
|
||||||
|
for (topheader = rbtnode->data; topheader != NULL;
|
||||||
|
topheader = topheader->next)
|
||||||
|
{
|
||||||
|
+ if (prio_type(topheader->type)) {
|
||||||
|
+ prioheader = topheader;
|
||||||
|
+ }
|
||||||
|
if (topheader->type == newheader->type ||
|
||||||
|
topheader->type == negtype)
|
||||||
|
{
|
||||||
|
@@ -6679,9 +6707,21 @@ find_header:
|
||||||
|
/*
|
||||||
|
* No rdatasets of the given type exist at the node.
|
||||||
|
*/
|
||||||
|
- newheader->next = rbtnode->data;
|
||||||
|
newheader->down = NULL;
|
||||||
|
- rbtnode->data = newheader;
|
||||||
|
+
|
||||||
|
+ if (prio_type(newheader->type)) {
|
||||||
|
+ /* This is a priority type, prepend it */
|
||||||
|
+ newheader->next = rbtnode->data;
|
||||||
|
+ rbtnode->data = newheader;
|
||||||
|
+ } else if (prioheader != NULL) {
|
||||||
|
+ /* Append after the priority headers */
|
||||||
|
+ newheader->next = prioheader->next;
|
||||||
|
+ prioheader->next = newheader;
|
||||||
|
+ } else {
|
||||||
|
+ /* There were no priority headers */
|
||||||
|
+ newheader->next = rbtnode->data;
|
||||||
|
+ rbtnode->data = newheader;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
@ -1,541 +0,0 @@
|
|||||||
From 1cbffe7e8b5bced9134abbae23a2a20c83d39a6a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Petr Mensik <pemensik@redhat.com>
|
|
||||||
Date: Thu, 21 Jan 2021 10:46:20 +0100
|
|
||||||
Subject: [PATCH] Enable custom pkcs11 native build
|
|
||||||
|
|
||||||
Share common parts like libisc, libcc and others. But provide native
|
|
||||||
pkcs11 libraries as a new copy of libdns and libns.
|
|
||||||
---
|
|
||||||
bin/Makefile.in | 2 +-
|
|
||||||
bin/confgen/Makefile.in | 2 +-
|
|
||||||
bin/dnssec-pkcs11/Makefile.in | 39 +++++++++++++++++---------------
|
|
||||||
bin/named-pkcs11/Makefile.in | 31 +++++++++++++------------
|
|
||||||
configure.ac | 19 ++++++++++++++++
|
|
||||||
lib/Makefile.in | 2 +-
|
|
||||||
lib/dns-pkcs11/Makefile.in | 22 +++++++++---------
|
|
||||||
lib/dns-pkcs11/tests/Makefile.in | 8 +++----
|
|
||||||
lib/ns-pkcs11/Makefile.in | 26 ++++++++++-----------
|
|
||||||
lib/ns-pkcs11/tests/Makefile.in | 12 +++++-----
|
|
||||||
make/includes.in | 7 ++++++
|
|
||||||
11 files changed, 100 insertions(+), 70 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/bin/Makefile.in b/bin/Makefile.in
|
|
||||||
index 9ad7f62..094775a 100644
|
|
||||||
--- a/bin/Makefile.in
|
|
||||||
+++ b/bin/Makefile.in
|
|
||||||
@@ -11,7 +11,7 @@ srcdir = @srcdir@
|
|
||||||
VPATH = @srcdir@
|
|
||||||
top_srcdir = @top_srcdir@
|
|
||||||
|
|
||||||
-SUBDIRS = named rndc dig delv dnssec tools nsupdate check confgen \
|
|
||||||
+SUBDIRS = named named-pkcs11 rndc dig delv dnssec dnssec-pkcs11 tools nsupdate check confgen \
|
|
||||||
@NZD_TOOLS@ @PYTHON_TOOLS@ @PKCS11_TOOLS@ plugins tests
|
|
||||||
TARGETS =
|
|
||||||
|
|
||||||
diff --git a/bin/confgen/Makefile.in b/bin/confgen/Makefile.in
|
|
||||||
index c126bf3..1b7512d 100644
|
|
||||||
--- a/bin/confgen/Makefile.in
|
|
||||||
+++ b/bin/confgen/Makefile.in
|
|
||||||
@@ -22,7 +22,7 @@ VERSION=@BIND9_VERSION@
|
|
||||||
CINCLUDES = -I${srcdir}/include ${ISC_INCLUDES} ${ISCCC_INCLUDES} \
|
|
||||||
${ISCCFG_INCLUDES} ${DNS_INCLUDES} ${BIND9_INCLUDES}
|
|
||||||
|
|
||||||
-CDEFINES = @USE_PKCS11@
|
|
||||||
+CDEFINES =
|
|
||||||
CWARNINGS =
|
|
||||||
|
|
||||||
ISCCFGLIBS = ../../lib/isccfg/libisccfg.@A@
|
|
||||||
diff --git a/bin/dnssec-pkcs11/Makefile.in b/bin/dnssec-pkcs11/Makefile.in
|
|
||||||
index ace0e5a..e0f6a00 100644
|
|
||||||
--- a/bin/dnssec-pkcs11/Makefile.in
|
|
||||||
+++ b/bin/dnssec-pkcs11/Makefile.in
|
|
||||||
@@ -15,18 +15,18 @@ VERSION=@BIND9_VERSION@
|
|
||||||
|
|
||||||
@BIND9_MAKE_INCLUDES@
|
|
||||||
|
|
||||||
-CINCLUDES = ${DNS_INCLUDES} ${ISC_INCLUDES} ${ISCCFG_INCLUDES} \
|
|
||||||
+CINCLUDES = ${DNS_PKCS11_INCLUDES} ${ISC_INCLUDES} ${ISCCFG_INCLUDES} \
|
|
||||||
${OPENSSL_CFLAGS}
|
|
||||||
|
|
||||||
-CDEFINES = -DVERSION=\"${VERSION}\" -DNAMED_CONFFILE=\"${sysconfdir}/named.conf\"
|
|
||||||
+CDEFINES = -DVERSION=\"${VERSION}\" -DNAMED_CONFFILE=\"${sysconfdir}/named.conf\" -DUSE_PKCS11=1
|
|
||||||
CWARNINGS =
|
|
||||||
|
|
||||||
-DNSLIBS = ../../lib/dns/libdns.@A@ @NO_LIBTOOL_DNSLIBS@
|
|
||||||
+DNSLIBS = ../../lib/dns-pkcs11/libdns-pkcs11.@A@ @NO_LIBTOOL_DNSLIBS@
|
|
||||||
ISCCFGLIBS = ../../lib/isccfg/libisccfg.@A@
|
|
||||||
ISCLIBS = ../../lib/isc/libisc.@A@ @NO_LIBTOOL_ISCLIBS@
|
|
||||||
ISCNOSYMLIBS = ../../lib/isc/libisc-nosymtbl.@A@ @NO_LIBTOOL_ISCLIBS@
|
|
||||||
|
|
||||||
-DNSDEPLIBS = ../../lib/dns/libdns.@A@
|
|
||||||
+DNSDEPLIBS = ../../lib/dns-pkcs11/libdns-pkcs11.@A@
|
|
||||||
ISCDEPLIBS = ../../lib/isc/libisc.@A@
|
|
||||||
ISCCFGDEPLIBS = ../../lib/isccfg/libisccfg.@A@
|
|
||||||
|
|
||||||
@@ -36,12 +36,15 @@ LIBS = ${DNSLIBS} ${ISCCFGLIBS} ${ISCLIBS} @LIBS@
|
|
||||||
|
|
||||||
NOSYMLIBS = ${DNSLIBS} ${ISCCFGLIBS} ${ISCNOSYMLIBS} @LIBS@
|
|
||||||
|
|
||||||
+# Add suffix to all targets
|
|
||||||
+EXEEXT = -pkcs11@EXEEXT@
|
|
||||||
+
|
|
||||||
# Alphabetically
|
|
||||||
-TARGETS = dnssec-cds@EXEEXT@ dnssec-dsfromkey@EXEEXT@ \
|
|
||||||
- dnssec-importkey@EXEEXT@ dnssec-keyfromlabel@EXEEXT@ \
|
|
||||||
- dnssec-keygen@EXEEXT@ dnssec-revoke@EXEEXT@ \
|
|
||||||
- dnssec-settime@EXEEXT@ dnssec-signzone@EXEEXT@ \
|
|
||||||
- dnssec-verify@EXEEXT@
|
|
||||||
+TARGETS = dnssec-cds${EXEEXT} dnssec-dsfromkey${EXEEXT} \
|
|
||||||
+ dnssec-importkey${EXEEXT} dnssec-keyfromlabel${EXEEXT} \
|
|
||||||
+ dnssec-keygen${EXEEXT} dnssec-revoke${EXEEXT} \
|
|
||||||
+ dnssec-settime${EXEEXT} dnssec-signzone${EXEEXT} \
|
|
||||||
+ dnssec-verify${EXEEXT}
|
|
||||||
|
|
||||||
OBJS = dnssectool.@O@
|
|
||||||
|
|
||||||
@@ -52,19 +55,19 @@ SRCS = dnssec-cds.c dnssec-dsfromkey.c dnssec-importkey.c \
|
|
||||||
|
|
||||||
@BIND9_MAKE_RULES@
|
|
||||||
|
|
||||||
-dnssec-cds@EXEEXT@: dnssec-cds.@O@ ${OBJS} ${DEPLIBS}
|
|
||||||
+dnssec-cds-pkcs11@EXEEXT@: dnssec-cds.@O@ ${OBJS} ${DEPLIBS}
|
|
||||||
export BASEOBJS="dnssec-cds.@O@ ${OBJS}"; \
|
|
||||||
${FINALBUILDCMD}
|
|
||||||
|
|
||||||
-dnssec-dsfromkey@EXEEXT@: dnssec-dsfromkey.@O@ ${OBJS} ${DEPLIBS}
|
|
||||||
+dnssec-dsfromkey-pkcs11@EXEEXT@: dnssec-dsfromkey.@O@ ${OBJS} ${DEPLIBS}
|
|
||||||
export BASEOBJS="dnssec-dsfromkey.@O@ ${OBJS}"; \
|
|
||||||
${FINALBUILDCMD}
|
|
||||||
|
|
||||||
-dnssec-keyfromlabel@EXEEXT@: dnssec-keyfromlabel.@O@ ${OBJS} ${DEPLIBS}
|
|
||||||
+dnssec-keyfromlabel-pkcs11@EXEEXT@: dnssec-keyfromlabel.@O@ ${OBJS} ${DEPLIBS}
|
|
||||||
export BASEOBJS="dnssec-keyfromlabel.@O@ ${OBJS}"; \
|
|
||||||
${FINALBUILDCMD}
|
|
||||||
|
|
||||||
-dnssec-keygen@EXEEXT@: dnssec-keygen.@O@ ${OBJS} ${DEPLIBS}
|
|
||||||
+dnssec-keygen-pkcs11@EXEEXT@: dnssec-keygen.@O@ ${OBJS} ${DEPLIBS}
|
|
||||||
export BASEOBJS="dnssec-keygen.@O@ ${OBJS}"; \
|
|
||||||
${FINALBUILDCMD}
|
|
||||||
|
|
||||||
@@ -72,7 +75,7 @@ dnssec-signzone.@O@: dnssec-signzone.c
|
|
||||||
${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -DVERSION=\"${VERSION}\" \
|
|
||||||
-c ${srcdir}/dnssec-signzone.c
|
|
||||||
|
|
||||||
-dnssec-signzone@EXEEXT@: dnssec-signzone.@O@ ${OBJS} ${DEPLIBS}
|
|
||||||
+dnssec-signzone-pkcs11@EXEEXT@: dnssec-signzone.@O@ ${OBJS} ${DEPLIBS}
|
|
||||||
export BASEOBJS="dnssec-signzone.@O@ ${OBJS}"; \
|
|
||||||
${FINALBUILDCMD}
|
|
||||||
|
|
||||||
@@ -80,19 +83,19 @@ dnssec-verify.@O@: dnssec-verify.c
|
|
||||||
${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} -DVERSION=\"${VERSION}\" \
|
|
||||||
-c ${srcdir}/dnssec-verify.c
|
|
||||||
|
|
||||||
-dnssec-verify@EXEEXT@: dnssec-verify.@O@ ${OBJS} ${DEPLIBS}
|
|
||||||
+dnssec-verify-pkcs11@EXEEXT@: dnssec-verify.@O@ ${OBJS} ${DEPLIBS}
|
|
||||||
export BASEOBJS="dnssec-verify.@O@ ${OBJS}"; \
|
|
||||||
${FINALBUILDCMD}
|
|
||||||
|
|
||||||
-dnssec-revoke@EXEEXT@: dnssec-revoke.@O@ ${OBJS} ${DEPLIBS}
|
|
||||||
+dnssec-revoke-pkcs11@EXEEXT@: dnssec-revoke.@O@ ${OBJS} ${DEPLIBS}
|
|
||||||
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \
|
|
||||||
dnssec-revoke.@O@ ${OBJS} ${LIBS}
|
|
||||||
|
|
||||||
-dnssec-settime@EXEEXT@: dnssec-settime.@O@ ${OBJS} ${DEPLIBS}
|
|
||||||
+dnssec-settime-pkcs11@EXEEXT@: dnssec-settime.@O@ ${OBJS} ${DEPLIBS}
|
|
||||||
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \
|
|
||||||
dnssec-settime.@O@ ${OBJS} ${LIBS}
|
|
||||||
|
|
||||||
-dnssec-importkey@EXEEXT@: dnssec-importkey.@O@ ${OBJS} ${DEPLIBS}
|
|
||||||
+dnssec-importkey-pkcs11@EXEEXT@: dnssec-importkey.@O@ ${OBJS} ${DEPLIBS}
|
|
||||||
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \
|
|
||||||
dnssec-importkey.@O@ ${OBJS} ${LIBS}
|
|
||||||
|
|
||||||
diff --git a/bin/named-pkcs11/Makefile.in b/bin/named-pkcs11/Makefile.in
|
|
||||||
index debb906..ecfdb6c 100644
|
|
||||||
--- a/bin/named-pkcs11/Makefile.in
|
|
||||||
+++ b/bin/named-pkcs11/Makefile.in
|
|
||||||
@@ -37,13 +37,14 @@ DBDRIVER_LIBS =
|
|
||||||
|
|
||||||
DLZ_DRIVER_DIR = ${top_srcdir}/contrib/dlz/drivers
|
|
||||||
|
|
||||||
-DLZDRIVER_OBJS = @DLZ_DRIVER_OBJS@
|
|
||||||
-DLZDRIVER_SRCS = @DLZ_DRIVER_SRCS@
|
|
||||||
-DLZDRIVER_INCLUDES = @DLZ_DRIVER_INCLUDES@
|
|
||||||
-DLZDRIVER_LIBS = @DLZ_DRIVER_LIBS@
|
|
||||||
+# Skip building on PKCS11 variant
|
|
||||||
+DLZDRIVER_OBJS =
|
|
||||||
+DLZDRIVER_SRCS =
|
|
||||||
+DLZDRIVER_INCLUDES =
|
|
||||||
+DLZDRIVER_LIBS =
|
|
||||||
|
|
||||||
CINCLUDES = -I${srcdir}/include -I${srcdir}/unix/include -I. \
|
|
||||||
- ${NS_INCLUDES} ${DNS_INCLUDES} \
|
|
||||||
+ ${NS_PKCS11_INCLUDES} ${DNS_PKCS11_INCLUDES} \
|
|
||||||
${BIND9_INCLUDES} ${ISCCFG_INCLUDES} ${ISCCC_INCLUDES} \
|
|
||||||
${ISC_INCLUDES} ${DLZDRIVER_INCLUDES} \
|
|
||||||
${DBDRIVER_INCLUDES} \
|
|
||||||
@@ -56,24 +57,24 @@ CINCLUDES = -I${srcdir}/include -I${srcdir}/unix/include -I. \
|
|
||||||
${LIBXML2_CFLAGS} \
|
|
||||||
${MAXMINDDB_CFLAGS}
|
|
||||||
|
|
||||||
-CDEFINES = @CONTRIB_DLZ@
|
|
||||||
+CDEFINES =
|
|
||||||
|
|
||||||
CWARNINGS =
|
|
||||||
|
|
||||||
-DNSLIBS = ../../lib/dns/libdns.@A@ @NO_LIBTOOL_DNSLIBS@
|
|
||||||
+DNSLIBS = ../../lib/dns-pkcs11/libdns-pkcs11.@A@ @NO_LIBTOOL_DNSLIBS@
|
|
||||||
ISCCFGLIBS = ../../lib/isccfg/libisccfg.@A@
|
|
||||||
ISCCCLIBS = ../../lib/isccc/libisccc.@A@
|
|
||||||
ISCLIBS = ../../lib/isc/libisc.@A@ @NO_LIBTOOL_ISCLIBS@
|
|
||||||
ISCNOSYMLIBS = ../../lib/isc/libisc-nosymtbl.@A@ @NO_LIBTOOL_ISCLIBS@
|
|
||||||
BIND9LIBS = ../../lib/bind9/libbind9.@A@
|
|
||||||
-NSLIBS = ../../lib/ns/libns.@A@
|
|
||||||
+NSLIBS = ../../lib/ns-pkcs11/libns-pkcs11.@A@
|
|
||||||
|
|
||||||
-DNSDEPLIBS = ../../lib/dns/libdns.@A@
|
|
||||||
+DNSDEPLIBS = ../../lib/dns-pkcs11/libdns-pkcs11.@A@
|
|
||||||
ISCCFGDEPLIBS = ../../lib/isccfg/libisccfg.@A@
|
|
||||||
ISCCCDEPLIBS = ../../lib/isccc/libisccc.@A@
|
|
||||||
ISCDEPLIBS = ../../lib/isc/libisc.@A@
|
|
||||||
BIND9DEPLIBS = ../../lib/bind9/libbind9.@A@
|
|
||||||
-NSDEPLIBS = ../../lib/ns/libns.@A@
|
|
||||||
+NSDEPLIBS = ../../lib/ns-pkcs11/libns-pkcs11.@A@
|
|
||||||
|
|
||||||
DEPLIBS = ${NSDEPLIBS} ${DNSDEPLIBS} ${BIND9DEPLIBS} \
|
|
||||||
${ISCCFGDEPLIBS} ${ISCCCDEPLIBS} ${ISCDEPLIBS}
|
|
||||||
@@ -93,7 +94,7 @@ NOSYMLIBS = ${NSLIBS} ${DNSLIBS} ${BIND9LIBS} \
|
|
||||||
|
|
||||||
SUBDIRS = unix
|
|
||||||
|
|
||||||
-TARGETS = named@EXEEXT@
|
|
||||||
+TARGETS = named-pkcs11@EXEEXT@
|
|
||||||
|
|
||||||
GEOIP2LINKOBJS = geoip.@O@
|
|
||||||
|
|
||||||
@@ -151,7 +152,7 @@ server.@O@: server.c
|
|
||||||
-DPRODUCT=\"${PRODUCT}\" \
|
|
||||||
-DVERSION=\"${VERSION}\" -c ${srcdir}/server.c
|
|
||||||
|
|
||||||
-named@EXEEXT@: ${OBJS} ${DEPLIBS}
|
|
||||||
+named-pkcs11@EXEEXT@: ${OBJS} ${DEPLIBS}
|
|
||||||
export MAKE_SYMTABLE="yes"; \
|
|
||||||
export BASEOBJS="${OBJS} ${UOBJS}"; \
|
|
||||||
${FINALBUILDCMD}
|
|
||||||
@@ -170,11 +171,11 @@ statschannel.@O@: bind9.xsl.h
|
|
||||||
installdirs:
|
|
||||||
$(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${sbindir}
|
|
||||||
|
|
||||||
-install:: named@EXEEXT@ installdirs
|
|
||||||
- ${LIBTOOL_MODE_INSTALL} ${INSTALL_PROGRAM} named@EXEEXT@ ${DESTDIR}${sbindir}
|
|
||||||
+install:: named-pkcs11@EXEEXT@ installdirs
|
|
||||||
+ ${LIBTOOL_MODE_INSTALL} ${INSTALL_PROGRAM} named-pkcs11@EXEEXT@ ${DESTDIR}${sbindir}
|
|
||||||
|
|
||||||
uninstall::
|
|
||||||
- ${LIBTOOL_MODE_UNINSTALL} rm -f ${DESTDIR}${sbindir}/named@EXEEXT@
|
|
||||||
+ ${LIBTOOL_MODE_UNINSTALL} rm -f ${DESTDIR}${sbindir}/named-pkcs11@EXEEXT@
|
|
||||||
|
|
||||||
@DLZ_DRIVER_RULES@
|
|
||||||
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
|
||||||
index e405eaf..efaa5a7 100644
|
|
||||||
--- a/configure.ac
|
|
||||||
+++ b/configure.ac
|
|
||||||
@@ -1269,12 +1269,14 @@ AC_SUBST(USE_GSSAPI)
|
|
||||||
AC_SUBST(DST_GSSAPI_INC)
|
|
||||||
AC_SUBST(DNS_GSSAPI_LIBS)
|
|
||||||
DNS_CRYPTO_LIBS="$DNS_GSSAPI_LIBS"
|
|
||||||
+DNS_CRYPTO_PK11_LIBS="$DNS_GSSAPI_LIBS $DNS_CRYPTO_PK11_LIBS"
|
|
||||||
|
|
||||||
#
|
|
||||||
# Applications linking with libdns also need to link with these libraries.
|
|
||||||
#
|
|
||||||
|
|
||||||
AC_SUBST(DNS_CRYPTO_LIBS)
|
|
||||||
+AC_SUBST(DNS_CRYPTO_PK11_LIBS)
|
|
||||||
|
|
||||||
#
|
|
||||||
# was --with-lmdb specified?
|
|
||||||
@@ -2345,6 +2347,8 @@ AC_SUBST(BIND9_DNS_BUILDINCLUDE)
|
|
||||||
AC_SUBST(BIND9_NS_BUILDINCLUDE)
|
|
||||||
AC_SUBST(BIND9_BIND9_BUILDINCLUDE)
|
|
||||||
AC_SUBST(BIND9_IRS_BUILDINCLUDE)
|
|
||||||
+AC_SUBST(BIND9_DNS_PKCS11_BUILDINCLUDE)
|
|
||||||
+AC_SUBST(BIND9_NS_PKCS11_BUILDINCLUDE)
|
|
||||||
if test "X$srcdir" != "X"; then
|
|
||||||
BIND9_ISC_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/isc/include"
|
|
||||||
BIND9_ISCCC_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/isccc/include"
|
|
||||||
@@ -2353,6 +2357,8 @@ if test "X$srcdir" != "X"; then
|
|
||||||
BIND9_NS_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/ns/include"
|
|
||||||
BIND9_BIND9_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/bind9/include"
|
|
||||||
BIND9_IRS_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/irs/include"
|
|
||||||
+ BIND9_DNS_PKCS11_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/dns-pkcs11/include"
|
|
||||||
+ BIND9_NS_PKCS11_BUILDINCLUDE="-I${BIND9_TOP_BUILDDIR}/lib/ns-pkcs11/include"
|
|
||||||
else
|
|
||||||
BIND9_ISC_BUILDINCLUDE=""
|
|
||||||
BIND9_ISCCC_BUILDINCLUDE=""
|
|
||||||
@@ -2361,6 +2367,8 @@ else
|
|
||||||
BIND9_NS_BUILDINCLUDE=""
|
|
||||||
BIND9_BIND9_BUILDINCLUDE=""
|
|
||||||
BIND9_IRS_BUILDINCLUDE=""
|
|
||||||
+ BIND9_DNS_PKCS11_BUILDINCLUDE=""
|
|
||||||
+ BIND9_NS_PKCS11_BUILDINCLUDE=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_SUBST_FILE(BIND9_MAKE_INCLUDES)
|
|
||||||
@@ -2816,8 +2824,11 @@ AC_CONFIG_FILES([
|
|
||||||
bin/delv/Makefile
|
|
||||||
bin/dig/Makefile
|
|
||||||
bin/dnssec/Makefile
|
|
||||||
+ bin/dnssec-pkcs11/Makefile
|
|
||||||
bin/named/Makefile
|
|
||||||
bin/named/unix/Makefile
|
|
||||||
+ bin/named-pkcs11/Makefile
|
|
||||||
+ bin/named-pkcs11/unix/Makefile
|
|
||||||
bin/nsupdate/Makefile
|
|
||||||
bin/pkcs11/Makefile
|
|
||||||
bin/plugins/Makefile
|
|
||||||
@@ -2879,6 +2890,10 @@ AC_CONFIG_FILES([
|
|
||||||
lib/dns/include/dns/Makefile
|
|
||||||
lib/dns/include/dst/Makefile
|
|
||||||
lib/dns/tests/Makefile
|
|
||||||
+ lib/dns-pkcs11/Makefile
|
|
||||||
+ lib/dns-pkcs11/include/Makefile
|
|
||||||
+ lib/dns-pkcs11/include/dns/Makefile
|
|
||||||
+ lib/dns-pkcs11/include/dst/Makefile
|
|
||||||
lib/irs/Makefile
|
|
||||||
lib/irs/include/Makefile
|
|
||||||
lib/irs/include/irs/Makefile
|
|
||||||
@@ -2911,6 +2926,10 @@ AC_CONFIG_FILES([
|
|
||||||
lib/ns/include/Makefile
|
|
||||||
lib/ns/include/ns/Makefile
|
|
||||||
lib/ns/tests/Makefile
|
|
||||||
+ lib/ns-pkcs11/Makefile
|
|
||||||
+ lib/ns-pkcs11/include/Makefile
|
|
||||||
+ lib/ns-pkcs11/include/ns/Makefile
|
|
||||||
+ lib/ns-pkcs11/tests/Makefile
|
|
||||||
make/Makefile
|
|
||||||
make/mkdep
|
|
||||||
unit/unittest.sh
|
|
||||||
diff --git a/lib/Makefile.in b/lib/Makefile.in
|
|
||||||
index 833964e..058ba2f 100644
|
|
||||||
--- a/lib/Makefile.in
|
|
||||||
+++ b/lib/Makefile.in
|
|
||||||
@@ -15,7 +15,7 @@ top_srcdir = @top_srcdir@
|
|
||||||
# Attempt to disable parallel processing.
|
|
||||||
.NOTPARALLEL:
|
|
||||||
.NO_PARALLEL:
|
|
||||||
-SUBDIRS = isc isccc dns ns isccfg bind9 irs
|
|
||||||
+SUBDIRS = isc isccc dns dns-pkcs11 ns ns-pkcs11 isccfg bind9 irs
|
|
||||||
TARGETS =
|
|
||||||
|
|
||||||
@BIND9_MAKE_RULES@
|
|
||||||
diff --git a/lib/dns-pkcs11/Makefile.in b/lib/dns-pkcs11/Makefile.in
|
|
||||||
index 58bda3c..d6a45df 100644
|
|
||||||
--- a/lib/dns-pkcs11/Makefile.in
|
|
||||||
+++ b/lib/dns-pkcs11/Makefile.in
|
|
||||||
@@ -22,7 +22,7 @@ VERSION=@BIND9_VERSION@
|
|
||||||
|
|
||||||
@BIND9_MAKE_INCLUDES@
|
|
||||||
|
|
||||||
-CINCLUDES = -I. -I${top_srcdir}/lib/dns -Iinclude ${DNS_INCLUDES} \
|
|
||||||
+CINCLUDES = -I. -I${top_srcdir}/lib/dns-pkcs11 -Iinclude ${DNS_PKCS11_INCLUDES} \
|
|
||||||
${ISC_INCLUDES} \
|
|
||||||
${FSTRM_CFLAGS} \
|
|
||||||
${OPENSSL_CFLAGS} @DST_GSSAPI_INC@ \
|
|
||||||
@@ -32,7 +32,7 @@ CINCLUDES = -I. -I${top_srcdir}/lib/dns -Iinclude ${DNS_INCLUDES} \
|
|
||||||
${LMDB_CFLAGS} \
|
|
||||||
${MAXMINDDB_CFLAGS}
|
|
||||||
|
|
||||||
-CDEFINES = @USE_GSSAPI@
|
|
||||||
+CDEFINES = @USE_GSSAPI@ @USE_PKCS11@
|
|
||||||
|
|
||||||
CWARNINGS =
|
|
||||||
|
|
||||||
@@ -135,15 +135,15 @@ version.@O@: version.c
|
|
||||||
-DMAPAPI=\"${MAPAPI}\" \
|
|
||||||
-c ${srcdir}/version.c
|
|
||||||
|
|
||||||
-libdns.@SA@: ${OBJS}
|
|
||||||
+libdns-pkcs11.@SA@: ${OBJS}
|
|
||||||
${AR} ${ARFLAGS} $@ ${OBJS}
|
|
||||||
${RANLIB} $@
|
|
||||||
|
|
||||||
-libdns.la: ${OBJS}
|
|
||||||
+libdns-pkcs11.la: ${OBJS}
|
|
||||||
${LIBTOOL_MODE_LINK} \
|
|
||||||
- ${CC} ${ALL_CFLAGS} ${LDFLAGS} -o libdns.la -rpath ${libdir} \
|
|
||||||
+ ${CC} ${ALL_CFLAGS} ${LDFLAGS} -o libdns-pkcs11.la -rpath ${libdir} \
|
|
||||||
-release "${VERSION}" \
|
|
||||||
- ${OBJS} ${ISCLIBS} @DNS_CRYPTO_LIBS@ ${LIBS}
|
|
||||||
+ ${OBJS} ${ISCLIBS} @DNS_CRYPTO_PK11_LIBS@ ${LIBS}
|
|
||||||
|
|
||||||
include: gen
|
|
||||||
${MAKE} include/dns/enumtype.h
|
|
||||||
@@ -174,22 +174,22 @@ gen: gen.c
|
|
||||||
${BUILD_CPPFLAGS} ${BUILD_LDFLAGS} -o $@ ${srcdir}/gen.c \
|
|
||||||
${BUILD_LIBS} ${LFS_LIBS}
|
|
||||||
|
|
||||||
-timestamp: include libdns.@A@
|
|
||||||
+timestamp: include libdns-pkcs11.@A@
|
|
||||||
touch timestamp
|
|
||||||
|
|
||||||
-testdirs: libdns.@A@
|
|
||||||
+testdirs: libdns-pkcs11.@A@
|
|
||||||
|
|
||||||
installdirs:
|
|
||||||
$(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${libdir}
|
|
||||||
|
|
||||||
install:: timestamp installdirs
|
|
||||||
- ${LIBTOOL_MODE_INSTALL} ${INSTALL_LIBRARY} libdns.@A@ ${DESTDIR}${libdir}
|
|
||||||
+ ${LIBTOOL_MODE_INSTALL} ${INSTALL_LIBRARY} libdns-pkcs11.@A@ ${DESTDIR}${libdir}
|
|
||||||
|
|
||||||
uninstall::
|
|
||||||
- ${LIBTOOL_MODE_UNINSTALL} rm -f ${DESTDIR}${libdir}/libdns.@A@
|
|
||||||
+ ${LIBTOOL_MODE_UNINSTALL} rm -f ${DESTDIR}${libdir}/libdns-pkcs11.@A@
|
|
||||||
|
|
||||||
clean distclean::
|
|
||||||
- rm -f libdns.@A@ timestamp
|
|
||||||
+ rm -f libdns-pkcs11.@A@ timestamp
|
|
||||||
rm -f gen code.h include/dns/enumtype.h include/dns/enumclass.h
|
|
||||||
rm -f include/dns/rdatastruct.h
|
|
||||||
rm -f dnstap.pb-c.c dnstap.pb-c.h
|
|
||||||
diff --git a/lib/dns-pkcs11/tests/Makefile.in b/lib/dns-pkcs11/tests/Makefile.in
|
|
||||||
index da91394..aadb73f 100644
|
|
||||||
--- a/lib/dns-pkcs11/tests/Makefile.in
|
|
||||||
+++ b/lib/dns-pkcs11/tests/Makefile.in
|
|
||||||
@@ -15,15 +15,15 @@ VERSION=@BIND9_VERSION@
|
|
||||||
|
|
||||||
@BIND9_MAKE_INCLUDES@
|
|
||||||
|
|
||||||
-CINCLUDES = -I. -Iinclude ${DNS_INCLUDES} ${ISC_INCLUDES} \
|
|
||||||
+CINCLUDES = -I. -Iinclude ${DNS_PKCS11_INCLUDES} ${ISC_INCLUDES} \
|
|
||||||
${FSTRM_CFLAGS} ${OPENSSL_CFLAGS} \
|
|
||||||
${PROTOBUF_C_CFLAGS} ${MAXMINDDB_CFLAGS} @CMOCKA_CFLAGS@
|
|
||||||
-CDEFINES = -DTESTS="\"${top_builddir}/lib/dns/tests/\""
|
|
||||||
+CDEFINES = @USE_PKCS11@ -DTESTS="\"${top_builddir}/lib/dns-pkcs11/tests/\""
|
|
||||||
|
|
||||||
ISCLIBS = ../../isc/libisc.@A@ @NO_LIBTOOL_ISCLIBS@
|
|
||||||
ISCDEPLIBS = ../../isc/libisc.@A@
|
|
||||||
-DNSLIBS = ../libdns.@A@ @NO_LIBTOOL_DNSLIBS@
|
|
||||||
-DNSDEPLIBS = ../libdns.@A@
|
|
||||||
+DNSLIBS = ../libdns-pkcs11.@A@ @NO_LIBTOOL_DNSLIBS@
|
|
||||||
+DNSDEPLIBS = ../libdns-pkcs11.@A@
|
|
||||||
|
|
||||||
LIBS = @LIBS@ @CMOCKA_LIBS@
|
|
||||||
|
|
||||||
diff --git a/lib/ns-pkcs11/Makefile.in b/lib/ns-pkcs11/Makefile.in
|
|
||||||
index bc683ce..7a9d2f2 100644
|
|
||||||
--- a/lib/ns-pkcs11/Makefile.in
|
|
||||||
+++ b/lib/ns-pkcs11/Makefile.in
|
|
||||||
@@ -16,12 +16,12 @@ VERSION=@BIND9_VERSION@
|
|
||||||
|
|
||||||
@BIND9_MAKE_INCLUDES@
|
|
||||||
|
|
||||||
-CINCLUDES = -I. -I${top_srcdir}/lib/ns -Iinclude \
|
|
||||||
- ${NS_INCLUDES} ${DNS_INCLUDES} ${ISC_INCLUDES} \
|
|
||||||
+CINCLUDES = -I. -I${top_srcdir}/lib/ns-pkcs11 -Iinclude \
|
|
||||||
+ ${NS_PKCS11_INCLUDES} ${DNS_PKCS11_INCLUDES} ${ISC_INCLUDES} \
|
|
||||||
${OPENSSL_CFLAGS} @DST_GSSAPI_INC@ \
|
|
||||||
${FSTRM_CFLAGS}
|
|
||||||
|
|
||||||
-CDEFINES = -DNAMED_PLUGINDIR=\"${plugindir}\"
|
|
||||||
+CDEFINES = @USE_PKCS11@ -DNAMED_PLUGINDIR=\"${plugindir}\"
|
|
||||||
|
|
||||||
CWARNINGS =
|
|
||||||
|
|
||||||
@@ -29,9 +29,9 @@ ISCLIBS = ../../lib/isc/libisc.@A@
|
|
||||||
|
|
||||||
ISCDEPLIBS = ../../lib/isc/libisc.@A@
|
|
||||||
|
|
||||||
-DNSLIBS = ../../lib/dns/libdns.@A@ @NO_LIBTOOL_DNSLIBS@
|
|
||||||
+DNSLIBS = ../../lib/dns-pkcs11/libdns-pkcs11.@A@ @NO_LIBTOOL_DNSLIBS@
|
|
||||||
|
|
||||||
-DNSDEPLIBS = ../../lib/dns/libdns.@A@
|
|
||||||
+DNSDEPLIBS = ../../lib/dns-pkcs11/libdns-pkcs11.@A@
|
|
||||||
|
|
||||||
LIBS = @LIBS@
|
|
||||||
|
|
||||||
@@ -60,28 +60,28 @@ version.@O@: version.c
|
|
||||||
-DMAJOR=\"${MAJOR}\" \
|
|
||||||
-c ${srcdir}/version.c
|
|
||||||
|
|
||||||
-libns.@SA@: ${OBJS}
|
|
||||||
+libns-pkcs11.@SA@: ${OBJS}
|
|
||||||
${AR} ${ARFLAGS} $@ ${OBJS}
|
|
||||||
${RANLIB} $@
|
|
||||||
|
|
||||||
-libns.la: ${OBJS}
|
|
||||||
+libns-pkcs11.la: ${OBJS}
|
|
||||||
${LIBTOOL_MODE_LINK} \
|
|
||||||
- ${CC} ${ALL_CFLAGS} ${LDFLAGS} -o libns.la -rpath ${libdir} \
|
|
||||||
+ ${CC} ${ALL_CFLAGS} ${LDFLAGS} -o libns-pkcs11.la -rpath ${libdir} \
|
|
||||||
-release "${VERSION}" \
|
|
||||||
- ${OBJS} ${ISCLIBS} ${DNSLIBS} @DNS_CRYPTO_LIBS@ ${LIBS}
|
|
||||||
+ ${OBJS} ${ISCLIBS} ${DNSLIBS} @DNS_CRYPTO_PK11_LIBS@ ${LIBS}
|
|
||||||
|
|
||||||
-timestamp: libns.@A@
|
|
||||||
+timestamp: libns-pkcs11.@A@
|
|
||||||
touch timestamp
|
|
||||||
|
|
||||||
installdirs:
|
|
||||||
$(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${libdir}
|
|
||||||
|
|
||||||
install:: timestamp installdirs
|
|
||||||
- ${LIBTOOL_MODE_INSTALL} ${INSTALL_LIBRARY} libns.@A@ \
|
|
||||||
+ ${LIBTOOL_MODE_INSTALL} ${INSTALL_LIBRARY} libns-pkcs11.@A@ \
|
|
||||||
${DESTDIR}${libdir}
|
|
||||||
|
|
||||||
uninstall::
|
|
||||||
- ${LIBTOOL_MODE_UNINSTALL} rm -f ${DESTDIR}${libdir}/libns.@A@
|
|
||||||
+ ${LIBTOOL_MODE_UNINSTALL} rm -f ${DESTDIR}${libdir}/libns-pkcs11.@A@
|
|
||||||
|
|
||||||
clean distclean::
|
|
||||||
- rm -f libns.@A@ timestamp
|
|
||||||
+ rm -f libns-pkcs11.@A@ timestamp
|
|
||||||
diff --git a/lib/ns-pkcs11/tests/Makefile.in b/lib/ns-pkcs11/tests/Makefile.in
|
|
||||||
index 4c3e694..c1b6d99 100644
|
|
||||||
--- a/lib/ns-pkcs11/tests/Makefile.in
|
|
||||||
+++ b/lib/ns-pkcs11/tests/Makefile.in
|
|
||||||
@@ -17,17 +17,17 @@ VERSION=@BIND9_VERSION@
|
|
||||||
|
|
||||||
WRAP_OPTIONS = -Wl,--wrap=isc__nmhandle_detach -Wl,--wrap=isc__nmhandle_attach
|
|
||||||
|
|
||||||
-CINCLUDES = -I. -Iinclude ${NS_INCLUDES} ${DNS_INCLUDES} ${ISC_INCLUDES} \
|
|
||||||
+CINCLUDES = -I. -Iinclude ${NS_PKCS11_INCLUDES} ${DNS_PKCS11_INCLUDES} ${ISC_INCLUDES} \
|
|
||||||
${OPENSSL_CFLAGS} \
|
|
||||||
@CMOCKA_CFLAGS@
|
|
||||||
-CDEFINES = -DTESTS="\"${top_builddir}/lib/ns/tests/\"" -DNAMED_PLUGINDIR=\"${plugindir}\"
|
|
||||||
+CDEFINES = -DTESTS="\"${top_builddir}/lib/ns-pkcs11/tests/\"" -DNAMED_PLUGINDIR=\"${plugindir}\" @USE_PKCS11@
|
|
||||||
|
|
||||||
ISCLIBS = ../../isc/libisc.@A@ @NO_LIBTOOL_ISCLIBS@
|
|
||||||
ISCDEPLIBS = ../../isc/libisc.@A@
|
|
||||||
-DNSLIBS = ../../dns/libdns.@A@ @NO_LIBTOOL_DNSLIBS@
|
|
||||||
-DNSDEPLIBS = ../../dns/libdns.@A@
|
|
||||||
-NSLIBS = ../libns.@A@
|
|
||||||
-NSDEPLIBS = ../libns.@A@
|
|
||||||
+DNSLIBS = ../../dns-pkcs11/libdns-pkcs11.@A@ @NO_LIBTOOL_DNSLIBS@
|
|
||||||
+DNSDEPLIBS = ../../dns-pkcs11/libdns-pkcs11.@A@
|
|
||||||
+NSLIBS = ../libns-pkcs11.@A@
|
|
||||||
+NSDEPLIBS = ../libns-pkcs11.@A@
|
|
||||||
|
|
||||||
LIBS = @LIBS@ @CMOCKA_LIBS@
|
|
||||||
|
|
||||||
diff --git a/make/includes.in b/make/includes.in
|
|
||||||
index b8317d3..b73b0c4 100644
|
|
||||||
--- a/make/includes.in
|
|
||||||
+++ b/make/includes.in
|
|
||||||
@@ -39,3 +39,10 @@ BIND9_INCLUDES = @BIND9_BIND9_BUILDINCLUDE@ \
|
|
||||||
|
|
||||||
TEST_INCLUDES = \
|
|
||||||
-I${top_srcdir}/lib/tests/include
|
|
||||||
+
|
|
||||||
+DNS_PKCS11_INCLUDES = @BIND9_DNS_PKCS11_BUILDINCLUDE@ \
|
|
||||||
+ -I${top_srcdir}/lib/dns-pkcs11/include
|
|
||||||
+
|
|
||||||
+NS_PKCS11_INCLUDES = @BIND9_NS_PKCS11_BUILDINCLUDE@ \
|
|
||||||
+ -I${top_srcdir}/lib/ns-pkcs11/include
|
|
||||||
+
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
||||||
@ -1,65 +0,0 @@
|
|||||||
From 2b0dce163a119f5f62eb4428b485f7575f321d6f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Petr Mensik <pemensik@redhat.com>
|
|
||||||
Date: Mon, 5 Aug 2019 11:54:03 +0200
|
|
||||||
Subject: [PATCH] Allow explicit disabling of autodisabled MD5
|
|
||||||
|
|
||||||
Default security policy might include explicitly disabled RSAMD5
|
|
||||||
algorithm. Current FIPS code automatically disables in FIPS mode. But if
|
|
||||||
RSAMD5 is included in security policy, it fails to start, because that
|
|
||||||
algorithm is not recognized. Allow it disabled, but fail on any
|
|
||||||
other usage.
|
|
||||||
---
|
|
||||||
bin/named/server.c | 4 ++--
|
|
||||||
lib/bind9/check.c | 4 ++++
|
|
||||||
lib/dns/rcode.c | 1 +
|
|
||||||
3 files changed, 7 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/bin/named/server.c b/bin/named/server.c
|
|
||||||
index ee23f10..22a5c01 100644
|
|
||||||
--- a/bin/named/server.c
|
|
||||||
+++ b/bin/named/server.c
|
|
||||||
@@ -1689,12 +1689,12 @@ disable_algorithms(const cfg_obj_t *disabled, dns_resolver_t *resolver) {
|
|
||||||
r.length = strlen(r.base);
|
|
||||||
|
|
||||||
result = dns_secalg_fromtext(&alg, &r);
|
|
||||||
- if (result != ISC_R_SUCCESS) {
|
|
||||||
+ if (result != ISC_R_SUCCESS && result != ISC_R_DISABLED) {
|
|
||||||
uint8_t ui;
|
|
||||||
result = isc_parse_uint8(&ui, r.base, 10);
|
|
||||||
alg = ui;
|
|
||||||
}
|
|
||||||
- if (result != ISC_R_SUCCESS) {
|
|
||||||
+ if (result != ISC_R_SUCCESS && result != ISC_R_DISABLED) {
|
|
||||||
cfg_obj_log(cfg_listelt_value(element), named_g_lctx,
|
|
||||||
ISC_LOG_ERROR, "invalid algorithm");
|
|
||||||
CHECK(result);
|
|
||||||
diff --git a/lib/bind9/check.c b/lib/bind9/check.c
|
|
||||||
index f49a346..dbf9ddb 100644
|
|
||||||
--- a/lib/bind9/check.c
|
|
||||||
+++ b/lib/bind9/check.c
|
|
||||||
@@ -317,6 +317,10 @@ disabled_algorithms(const cfg_obj_t *disabled, isc_log_t *logctx) {
|
|
||||||
r.length = strlen(r.base);
|
|
||||||
|
|
||||||
tresult = dns_secalg_fromtext(&alg, &r);
|
|
||||||
+ if (tresult == ISC_R_DISABLED) {
|
|
||||||
+ // Recognize disabled algorithms, disable it explicitly
|
|
||||||
+ tresult = ISC_R_SUCCESS;
|
|
||||||
+ }
|
|
||||||
if (tresult != ISC_R_SUCCESS) {
|
|
||||||
cfg_obj_log(cfg_listelt_value(element), logctx,
|
|
||||||
ISC_LOG_ERROR, "invalid algorithm '%s'",
|
|
||||||
diff --git a/lib/dns/rcode.c b/lib/dns/rcode.c
|
|
||||||
index 327248e..78adf63 100644
|
|
||||||
--- a/lib/dns/rcode.c
|
|
||||||
+++ b/lib/dns/rcode.c
|
|
||||||
@@ -152,6 +152,7 @@ static struct tbl rcodes[] = { RCODENAMES ERCODENAMES };
|
|
||||||
static struct tbl tsigrcodes[] = { RCODENAMES TSIGRCODENAMES };
|
|
||||||
static struct tbl certs[] = { CERTNAMES };
|
|
||||||
static struct tbl secalgs[] = { SECALGNAMES };
|
|
||||||
+static struct tbl md5_secalgs[] = { MD5_SECALGNAMES };
|
|
||||||
static struct tbl secprotos[] = { SECPROTONAMES };
|
|
||||||
static struct tbl hashalgs[] = { HASHALGNAMES };
|
|
||||||
static struct tbl dsdigests[] = { DSDIGESTNAMES };
|
|
||||||
--
|
|
||||||
2.21.1
|
|
||||||
|
|
||||||
@ -1,921 +0,0 @@
|
|||||||
From 3f04cf343dbeb8819197702ce1be737e26e0638a Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= <pemensik@redhat.com>
|
|
||||||
Date: Thu, 2 Aug 2018 23:46:45 +0200
|
|
||||||
Subject: [PATCH] FIPS tests changes
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
Squashed commit of the following:
|
|
||||||
|
|
||||||
commit 09e5eb48698d4fef2fc1031870de86c553b6bfaa
|
|
||||||
Author: Petr Menšík <pemensik@redhat.com>
|
|
||||||
Date: Wed Mar 7 20:35:13 2018 +0100
|
|
||||||
|
|
||||||
Fix nsupdate test. Do not use md5 by default for rndc, skip gracefully md5 if not available.
|
|
||||||
|
|
||||||
commit ab303db70082db76ecf36493d0b82ef3e8750cad
|
|
||||||
Author: Petr Menšík <pemensik@redhat.com>
|
|
||||||
Date: Wed Mar 7 18:11:10 2018 +0100
|
|
||||||
|
|
||||||
Changed root key to be RSASHA256
|
|
||||||
|
|
||||||
Change bad trusted key to be the same algorithm.
|
|
||||||
|
|
||||||
commit 88ab07c0e14cc71247e1f9d11a1ea832b64c1ee8
|
|
||||||
Author: Petr Menšík <pemensik@redhat.com>
|
|
||||||
Date: Wed Mar 7 16:56:17 2018 +0100
|
|
||||||
|
|
||||||
Change used key to not use hmac-md5
|
|
||||||
|
|
||||||
Fix upforwd test, do not use hmac-md5
|
|
||||||
|
|
||||||
commit aec891571626f053acfb4d0a247240cbc21a84e9
|
|
||||||
Author: Petr Menšík <pemensik@redhat.com>
|
|
||||||
Date: Wed Mar 7 15:54:11 2018 +0100
|
|
||||||
|
|
||||||
Increase bitsize of DSA key to pass FIPS 140-2 mode.
|
|
||||||
|
|
||||||
commit bca8e164fa0d9aff2f946b8b4eb0f1f7e0bf6696
|
|
||||||
Author: Petr Menšík <pemensik@redhat.com>
|
|
||||||
Date: Wed Mar 7 15:41:08 2018 +0100
|
|
||||||
|
|
||||||
Fix tsig and rndc tests for disabled md5
|
|
||||||
|
|
||||||
Use hmac-sha256 instead of hmac-md5.
|
|
||||||
|
|
||||||
commit 0d314c1ab6151aa13574a21ad22f28d3b7f42a67
|
|
||||||
Author: Petr Menšík <pemensik@redhat.com>
|
|
||||||
Date: Wed Mar 7 13:21:00 2018 +0100
|
|
||||||
|
|
||||||
Add md5 availability detection to featuretest
|
|
||||||
|
|
||||||
commit f389a918803e2853e4b55fed62765dc4a492e34f
|
|
||||||
Author: Petr Menšík <pemensik@redhat.com>
|
|
||||||
Date: Wed Mar 7 10:44:23 2018 +0100
|
|
||||||
|
|
||||||
Change tests to not use hmac-md5 algorithms if not required
|
|
||||||
|
|
||||||
Use hmac-sha256 instead of default hmac-md5 for allow-query
|
|
||||||
---
|
|
||||||
bin/tests/system/acl/ns2/named1.conf.in | 4 +-
|
|
||||||
bin/tests/system/acl/ns2/named2.conf.in | 4 +-
|
|
||||||
bin/tests/system/acl/ns2/named3.conf.in | 6 +-
|
|
||||||
bin/tests/system/acl/ns2/named4.conf.in | 4 +-
|
|
||||||
bin/tests/system/acl/ns2/named5.conf.in | 4 +-
|
|
||||||
bin/tests/system/acl/tests.sh | 32 ++++-----
|
|
||||||
.../system/allow-query/ns2/named10.conf.in | 2 +-
|
|
||||||
.../system/allow-query/ns2/named11.conf.in | 4 +-
|
|
||||||
.../system/allow-query/ns2/named12.conf.in | 2 +-
|
|
||||||
.../system/allow-query/ns2/named30.conf.in | 2 +-
|
|
||||||
.../system/allow-query/ns2/named31.conf.in | 4 +-
|
|
||||||
.../system/allow-query/ns2/named32.conf.in | 2 +-
|
|
||||||
.../system/allow-query/ns2/named40.conf.in | 4 +-
|
|
||||||
bin/tests/system/allow-query/tests.sh | 18 ++---
|
|
||||||
bin/tests/system/catz/ns1/named.conf.in | 2 +-
|
|
||||||
bin/tests/system/catz/ns2/named.conf.in | 2 +-
|
|
||||||
bin/tests/system/checkconf/bad-tsig.conf | 2 +-
|
|
||||||
bin/tests/system/checkconf/good.conf | 2 +-
|
|
||||||
bin/tests/system/feature-test.c | 14 ++++
|
|
||||||
bin/tests/system/notify/ns5/named.conf.in | 6 +-
|
|
||||||
bin/tests/system/notify/tests.sh | 6 +-
|
|
||||||
bin/tests/system/nsupdate/ns1/named.conf.in | 2 +-
|
|
||||||
bin/tests/system/nsupdate/ns2/named.conf.in | 2 +-
|
|
||||||
bin/tests/system/nsupdate/setup.sh | 6 +-
|
|
||||||
bin/tests/system/nsupdate/tests.sh | 15 +++--
|
|
||||||
bin/tests/system/rndc/setup.sh | 2 +-
|
|
||||||
bin/tests/system/rndc/tests.sh | 23 ++++---
|
|
||||||
bin/tests/system/tsig/ns1/named.conf.in | 10 +--
|
|
||||||
bin/tests/system/tsig/ns1/rndc5.conf.in | 10 +++
|
|
||||||
bin/tests/system/tsig/setup.sh | 5 ++
|
|
||||||
bin/tests/system/tsig/tests.sh | 65 ++++++++++++-------
|
|
||||||
bin/tests/system/upforwd/ns1/named.conf.in | 2 +-
|
|
||||||
bin/tests/system/upforwd/tests.sh | 2 +-
|
|
||||||
33 files changed, 162 insertions(+), 108 deletions(-)
|
|
||||||
create mode 100644 bin/tests/system/tsig/ns1/rndc5.conf.in
|
|
||||||
diff --git a/bin/tests/system/acl/ns2/named1.conf.in b/bin/tests/system/acl/ns2/named1.conf.in
|
|
||||||
index 745048a..93cb411 100644
|
|
||||||
--- a/bin/tests/system/acl/ns2/named1.conf.in
|
|
||||||
+++ b/bin/tests/system/acl/ns2/named1.conf.in
|
|
||||||
@@ -35,12 +35,12 @@ options {
|
|
||||||
};
|
|
||||||
|
|
||||||
key one {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
key two {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/bin/tests/system/acl/ns2/named2.conf.in b/bin/tests/system/acl/ns2/named2.conf.in
|
|
||||||
index 21aa991..78e71cc 100644
|
|
||||||
--- a/bin/tests/system/acl/ns2/named2.conf.in
|
|
||||||
+++ b/bin/tests/system/acl/ns2/named2.conf.in
|
|
||||||
@@ -35,12 +35,12 @@ options {
|
|
||||||
};
|
|
||||||
|
|
||||||
key one {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
key two {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/bin/tests/system/acl/ns2/named3.conf.in b/bin/tests/system/acl/ns2/named3.conf.in
|
|
||||||
index 3208c92..bed6325 100644
|
|
||||||
--- a/bin/tests/system/acl/ns2/named3.conf.in
|
|
||||||
+++ b/bin/tests/system/acl/ns2/named3.conf.in
|
|
||||||
@@ -35,17 +35,17 @@ options {
|
|
||||||
};
|
|
||||||
|
|
||||||
key one {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
key two {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
key three {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/bin/tests/system/acl/ns2/named4.conf.in b/bin/tests/system/acl/ns2/named4.conf.in
|
|
||||||
index 14e82ed..a22cafe 100644
|
|
||||||
--- a/bin/tests/system/acl/ns2/named4.conf.in
|
|
||||||
+++ b/bin/tests/system/acl/ns2/named4.conf.in
|
|
||||||
@@ -35,12 +35,12 @@ options {
|
|
||||||
};
|
|
||||||
|
|
||||||
key one {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
key two {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/bin/tests/system/acl/ns2/named5.conf.in b/bin/tests/system/acl/ns2/named5.conf.in
|
|
||||||
index f43f33c..f4a865a 100644
|
|
||||||
--- a/bin/tests/system/acl/ns2/named5.conf.in
|
|
||||||
+++ b/bin/tests/system/acl/ns2/named5.conf.in
|
|
||||||
@@ -37,12 +37,12 @@ options {
|
|
||||||
};
|
|
||||||
|
|
||||||
key one {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
key two {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/bin/tests/system/acl/tests.sh b/bin/tests/system/acl/tests.sh
|
|
||||||
index e30569e..edd2155 100644
|
|
||||||
--- a/bin/tests/system/acl/tests.sh
|
|
||||||
+++ b/bin/tests/system/acl/tests.sh
|
|
||||||
@@ -24,14 +24,14 @@ echo_i "testing basic ACL processing"
|
|
||||||
# key "one" should fail
|
|
||||||
t=`expr $t + 1`
|
|
||||||
$DIG $DIGOPTS tsigzone. \
|
|
||||||
- @10.53.0.2 -b 10.53.0.1 axfr -y one:1234abcd8765 > dig.out.${t}
|
|
||||||
+ @10.53.0.2 -b 10.53.0.1 axfr -y hmac-sha256:one:1234abcd8765 > dig.out.${t}
|
|
||||||
grep "^;" dig.out.${t} > /dev/null 2>&1 || { echo_i "test $t failed" ; status=1; }
|
|
||||||
|
|
||||||
|
|
||||||
# any other key should be fine
|
|
||||||
t=`expr $t + 1`
|
|
||||||
$DIG $DIGOPTS tsigzone. \
|
|
||||||
- @10.53.0.2 -b 10.53.0.1 axfr -y two:1234abcd8765 > dig.out.${t}
|
|
||||||
+ @10.53.0.2 -b 10.53.0.1 axfr -y hmac-sha256:two:1234abcd8765 > dig.out.${t}
|
|
||||||
grep "^;" dig.out.${t} > /dev/null 2>&1 && { echo_i "test $t failed" ; status=1; }
|
|
||||||
|
|
||||||
copy_setports ns2/named2.conf.in ns2/named.conf
|
|
||||||
@@ -41,18 +41,18 @@ sleep 5
|
|
||||||
# prefix 10/8 should fail
|
|
||||||
t=`expr $t + 1`
|
|
||||||
$DIG $DIGOPTS tsigzone. \
|
|
||||||
- @10.53.0.2 -b 10.53.0.1 axfr -y one:1234abcd8765 > dig.out.${t}
|
|
||||||
+ @10.53.0.2 -b 10.53.0.1 axfr -y hmac-sha256:one:1234abcd8765 > dig.out.${t}
|
|
||||||
grep "^;" dig.out.${t} > /dev/null 2>&1 || { echo_i "test $t failed" ; status=1; }
|
|
||||||
|
|
||||||
# any other address should work, as long as it sends key "one"
|
|
||||||
t=`expr $t + 1`
|
|
||||||
$DIG $DIGOPTS tsigzone. \
|
|
||||||
- @10.53.0.2 -b 127.0.0.1 axfr -y two:1234abcd8765 > dig.out.${t}
|
|
||||||
+ @10.53.0.2 -b 127.0.0.1 axfr -y hmac-sha256:two:1234abcd8765 > dig.out.${t}
|
|
||||||
grep "^;" dig.out.${t} > /dev/null 2>&1 || { echo_i "test $t failed" ; status=1; }
|
|
||||||
|
|
||||||
t=`expr $t + 1`
|
|
||||||
$DIG $DIGOPTS tsigzone. \
|
|
||||||
- @10.53.0.2 -b 127.0.0.1 axfr -y one:1234abcd8765 > dig.out.${t}
|
|
||||||
+ @10.53.0.2 -b 127.0.0.1 axfr -y hmac-sha256:one:1234abcd8765 > dig.out.${t}
|
|
||||||
grep "^;" dig.out.${t} > /dev/null 2>&1 && { echo_i "test $t failed" ; status=1; }
|
|
||||||
|
|
||||||
echo_i "testing nested ACL processing"
|
|
||||||
@@ -64,31 +64,31 @@ sleep 5
|
|
||||||
# should succeed
|
|
||||||
t=`expr $t + 1`
|
|
||||||
$DIG $DIGOPTS tsigzone. \
|
|
||||||
- @10.53.0.2 -b 10.53.0.2 axfr -y two:1234abcd8765 > dig.out.${t}
|
|
||||||
+ @10.53.0.2 -b 10.53.0.2 axfr -y hmac-sha256:two:1234abcd8765 > dig.out.${t}
|
|
||||||
grep "^;" dig.out.${t} > /dev/null 2>&1 && { echo_i "test $t failed" ; status=1; }
|
|
||||||
|
|
||||||
# should succeed
|
|
||||||
t=`expr $t + 1`
|
|
||||||
$DIG $DIGOPTS tsigzone. \
|
|
||||||
- @10.53.0.2 -b 10.53.0.2 axfr -y one:1234abcd8765 > dig.out.${t}
|
|
||||||
+ @10.53.0.2 -b 10.53.0.2 axfr -y hmac-sha256:one:1234abcd8765 > dig.out.${t}
|
|
||||||
grep "^;" dig.out.${t} > /dev/null 2>&1 && { echo_i "test $t failed" ; status=1; }
|
|
||||||
|
|
||||||
# should succeed
|
|
||||||
t=`expr $t + 1`
|
|
||||||
$DIG $DIGOPTS tsigzone. \
|
|
||||||
- @10.53.0.2 -b 10.53.0.1 axfr -y two:1234abcd8765 > dig.out.${t}
|
|
||||||
+ @10.53.0.2 -b 10.53.0.1 axfr -y hmac-sha256:two:1234abcd8765 > dig.out.${t}
|
|
||||||
grep "^;" dig.out.${t} > /dev/null 2>&1 && { echo_i "test $t failed" ; status=1; }
|
|
||||||
|
|
||||||
# should succeed
|
|
||||||
t=`expr $t + 1`
|
|
||||||
$DIG $DIGOPTS tsigzone. \
|
|
||||||
- @10.53.0.2 -b 10.53.0.1 axfr -y two:1234abcd8765 > dig.out.${t}
|
|
||||||
+ @10.53.0.2 -b 10.53.0.1 axfr -y hmac-sha256:two:1234abcd8765 > dig.out.${t}
|
|
||||||
grep "^;" dig.out.${t} > /dev/null 2>&1 && { echo_i "test $t failed" ; status=1; }
|
|
||||||
|
|
||||||
# but only one or the other should fail
|
|
||||||
t=`expr $t + 1`
|
|
||||||
$DIG $DIGOPTS tsigzone. \
|
|
||||||
- @10.53.0.2 -b 127.0.0.1 axfr -y one:1234abcd8765 > dig.out.${t}
|
|
||||||
+ @10.53.0.2 -b 127.0.0.1 axfr -y hmac-sha256:one:1234abcd8765 > dig.out.${t}
|
|
||||||
grep "^;" dig.out.${t} > /dev/null 2>&1 || { echo_i "test $t failed" ; status=1; }
|
|
||||||
|
|
||||||
t=`expr $t + 1`
|
|
||||||
@@ -99,7 +99,7 @@ grep "^;" dig.out.${t} > /dev/null 2>&1 || { echo_i "test $tt failed" ; status=1
|
|
||||||
# and other values? right out
|
|
||||||
t=`expr $t + 1`
|
|
||||||
$DIG $DIGOPTS tsigzone. \
|
|
||||||
- @10.53.0.2 -b 127.0.0.1 axfr -y three:1234abcd8765 > dig.out.${t}
|
|
||||||
+ @10.53.0.2 -b 127.0.0.1 axfr -y hmac-sha256:three:1234abcd8765 > dig.out.${t}
|
|
||||||
grep "^;" dig.out.${t} > /dev/null 2>&1 || { echo_i "test $t failed" ; status=1; }
|
|
||||||
|
|
||||||
# now we only allow 10.53.0.1 *and* key one, or 10.53.0.2 *and* key two
|
|
||||||
@@ -110,31 +110,31 @@ sleep 5
|
|
||||||
# should succeed
|
|
||||||
t=`expr $t + 1`
|
|
||||||
$DIG $DIGOPTS tsigzone. \
|
|
||||||
- @10.53.0.2 -b 10.53.0.2 axfr -y two:1234abcd8765 > dig.out.${t}
|
|
||||||
+ @10.53.0.2 -b 10.53.0.2 axfr -y hmac-sha256:two:1234abcd8765 > dig.out.${t}
|
|
||||||
grep "^;" dig.out.${t} > /dev/null 2>&1 && { echo_i "test $t failed" ; status=1; }
|
|
||||||
|
|
||||||
# should succeed
|
|
||||||
t=`expr $t + 1`
|
|
||||||
$DIG $DIGOPTS tsigzone. \
|
|
||||||
- @10.53.0.2 -b 10.53.0.1 axfr -y one:1234abcd8765 > dig.out.${t}
|
|
||||||
+ @10.53.0.2 -b 10.53.0.1 axfr -y hmac-sha256:one:1234abcd8765 > dig.out.${t}
|
|
||||||
grep "^;" dig.out.${t} > /dev/null 2>&1 && { echo_i "test $t failed" ; status=1; }
|
|
||||||
|
|
||||||
# should fail
|
|
||||||
t=`expr $t + 1`
|
|
||||||
$DIG $DIGOPTS tsigzone. \
|
|
||||||
- @10.53.0.2 -b 10.53.0.2 axfr -y one:1234abcd8765 > dig.out.${t}
|
|
||||||
+ @10.53.0.2 -b 10.53.0.2 axfr -y hmac-sha256:one:1234abcd8765 > dig.out.${t}
|
|
||||||
grep "^;" dig.out.${t} > /dev/null 2>&1 || { echo_i "test $t failed" ; status=1; }
|
|
||||||
|
|
||||||
# should fail
|
|
||||||
t=`expr $t + 1`
|
|
||||||
$DIG $DIGOPTS tsigzone. \
|
|
||||||
- @10.53.0.2 -b 10.53.0.1 axfr -y two:1234abcd8765 > dig.out.${t}
|
|
||||||
+ @10.53.0.2 -b 10.53.0.1 axfr -y hmac-sha256:two:1234abcd8765 > dig.out.${t}
|
|
||||||
grep "^;" dig.out.${t} > /dev/null 2>&1 || { echo_i "test $t failed" ; status=1; }
|
|
||||||
|
|
||||||
# should fail
|
|
||||||
t=`expr $t + 1`
|
|
||||||
$DIG $DIGOPTS tsigzone. \
|
|
||||||
- @10.53.0.2 -b 10.53.0.3 axfr -y one:1234abcd8765 > dig.out.${t}
|
|
||||||
+ @10.53.0.2 -b 10.53.0.3 axfr -y hmac-sha256:one:1234abcd8765 > dig.out.${t}
|
|
||||||
grep "^;" dig.out.${t} > /dev/null 2>&1 || { echo_i "test $t failed" ; status=1; }
|
|
||||||
|
|
||||||
echo_i "testing allow-query-on ACL processing"
|
|
||||||
diff --git a/bin/tests/system/allow-query/ns2/named10.conf.in b/bin/tests/system/allow-query/ns2/named10.conf.in
|
|
||||||
index b91d19a..7d777c2 100644
|
|
||||||
--- a/bin/tests/system/allow-query/ns2/named10.conf.in
|
|
||||||
+++ b/bin/tests/system/allow-query/ns2/named10.conf.in
|
|
||||||
@@ -12,7 +12,7 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
key one {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/bin/tests/system/allow-query/ns2/named11.conf.in b/bin/tests/system/allow-query/ns2/named11.conf.in
|
|
||||||
index 308c4ca..00f6f40 100644
|
|
||||||
--- a/bin/tests/system/allow-query/ns2/named11.conf.in
|
|
||||||
+++ b/bin/tests/system/allow-query/ns2/named11.conf.in
|
|
||||||
@@ -12,12 +12,12 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
key one {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
key two {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234efgh8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/bin/tests/system/allow-query/ns2/named12.conf.in b/bin/tests/system/allow-query/ns2/named12.conf.in
|
|
||||||
index 6b0fe55..491e514 100644
|
|
||||||
--- a/bin/tests/system/allow-query/ns2/named12.conf.in
|
|
||||||
+++ b/bin/tests/system/allow-query/ns2/named12.conf.in
|
|
||||||
@@ -12,7 +12,7 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
key one {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/bin/tests/system/allow-query/ns2/named30.conf.in b/bin/tests/system/allow-query/ns2/named30.conf.in
|
|
||||||
index aefc474..7c06596 100644
|
|
||||||
--- a/bin/tests/system/allow-query/ns2/named30.conf.in
|
|
||||||
+++ b/bin/tests/system/allow-query/ns2/named30.conf.in
|
|
||||||
@@ -12,7 +12,7 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
key one {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/bin/tests/system/allow-query/ns2/named31.conf.in b/bin/tests/system/allow-query/ns2/named31.conf.in
|
|
||||||
index 27eccc2..eecb990 100644
|
|
||||||
--- a/bin/tests/system/allow-query/ns2/named31.conf.in
|
|
||||||
+++ b/bin/tests/system/allow-query/ns2/named31.conf.in
|
|
||||||
@@ -12,12 +12,12 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
key one {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
key two {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234efgh8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/bin/tests/system/allow-query/ns2/named32.conf.in b/bin/tests/system/allow-query/ns2/named32.conf.in
|
|
||||||
index adbb203..744d122 100644
|
|
||||||
--- a/bin/tests/system/allow-query/ns2/named32.conf.in
|
|
||||||
+++ b/bin/tests/system/allow-query/ns2/named32.conf.in
|
|
||||||
@@ -12,7 +12,7 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
key one {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/bin/tests/system/allow-query/ns2/named40.conf.in b/bin/tests/system/allow-query/ns2/named40.conf.in
|
|
||||||
index 364f94b..9518f82 100644
|
|
||||||
--- a/bin/tests/system/allow-query/ns2/named40.conf.in
|
|
||||||
+++ b/bin/tests/system/allow-query/ns2/named40.conf.in
|
|
||||||
@@ -16,12 +16,12 @@ acl accept { 10.53.0.2; };
|
|
||||||
acl badaccept { 10.53.0.1; };
|
|
||||||
|
|
||||||
key one {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
key two {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "1234efgh8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/bin/tests/system/allow-query/tests.sh b/bin/tests/system/allow-query/tests.sh
|
|
||||||
index 41c7bb7..9d121b3 100644
|
|
||||||
--- a/bin/tests/system/allow-query/tests.sh
|
|
||||||
+++ b/bin/tests/system/allow-query/tests.sh
|
|
||||||
@@ -184,7 +184,7 @@ rndc_reload ns2 10.53.0.2
|
|
||||||
|
|
||||||
echo_i "test $n: key allowed - query allowed"
|
|
||||||
ret=0
|
|
||||||
-$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 -y one:1234abcd8765 a.normal.example a > dig.out.ns2.$n || ret=1
|
|
||||||
+$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 -y hmac-sha256:one:1234abcd8765 a.normal.example a > dig.out.ns2.$n || ret=1
|
|
||||||
grep 'status: NOERROR' dig.out.ns2.$n > /dev/null || ret=1
|
|
||||||
grep '^a.normal.example' dig.out.ns2.$n > /dev/null || ret=1
|
|
||||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
||||||
@@ -197,7 +197,7 @@ rndc_reload ns2 10.53.0.2
|
|
||||||
|
|
||||||
echo_i "test $n: key not allowed - query refused"
|
|
||||||
ret=0
|
|
||||||
-$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 -y two:1234efgh8765 a.normal.example a > dig.out.ns2.$n || ret=1
|
|
||||||
+$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 -y hmac-sha256:two:1234efgh8765 a.normal.example a > dig.out.ns2.$n || ret=1
|
|
||||||
grep 'status: REFUSED' dig.out.ns2.$n > /dev/null || ret=1
|
|
||||||
grep '^a.normal.example' dig.out.ns2.$n > /dev/null && ret=1
|
|
||||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
||||||
@@ -210,7 +210,7 @@ rndc_reload ns2 10.53.0.2
|
|
||||||
|
|
||||||
echo_i "test $n: key disallowed - query refused"
|
|
||||||
ret=0
|
|
||||||
-$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 -y one:1234abcd8765 a.normal.example a > dig.out.ns2.$n || ret=1
|
|
||||||
+$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 -y hmac-sha256:one:1234abcd8765 a.normal.example a > dig.out.ns2.$n || ret=1
|
|
||||||
grep 'status: REFUSED' dig.out.ns2.$n > /dev/null || ret=1
|
|
||||||
grep '^a.normal.example' dig.out.ns2.$n > /dev/null && ret=1
|
|
||||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
||||||
@@ -343,7 +343,7 @@ rndc_reload ns2 10.53.0.2
|
|
||||||
|
|
||||||
echo_i "test $n: views key allowed - query allowed"
|
|
||||||
ret=0
|
|
||||||
-$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 -y one:1234abcd8765 a.normal.example a > dig.out.ns2.$n || ret=1
|
|
||||||
+$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 -y hmac-sha256:one:1234abcd8765 a.normal.example a > dig.out.ns2.$n || ret=1
|
|
||||||
grep 'status: NOERROR' dig.out.ns2.$n > /dev/null || ret=1
|
|
||||||
grep '^a.normal.example' dig.out.ns2.$n > /dev/null || ret=1
|
|
||||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
||||||
@@ -356,7 +356,7 @@ rndc_reload ns2 10.53.0.2
|
|
||||||
|
|
||||||
echo_i "test $n: views key not allowed - query refused"
|
|
||||||
ret=0
|
|
||||||
-$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 -y two:1234efgh8765 a.normal.example a > dig.out.ns2.$n || ret=1
|
|
||||||
+$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 -y hmac-sha256:two:1234efgh8765 a.normal.example a > dig.out.ns2.$n || ret=1
|
|
||||||
grep 'status: REFUSED' dig.out.ns2.$n > /dev/null || ret=1
|
|
||||||
grep '^a.normal.example' dig.out.ns2.$n > /dev/null && ret=1
|
|
||||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
||||||
@@ -369,7 +369,7 @@ rndc_reload ns2 10.53.0.2
|
|
||||||
|
|
||||||
echo_i "test $n: views key disallowed - query refused"
|
|
||||||
ret=0
|
|
||||||
-$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 -y one:1234abcd8765 a.normal.example a > dig.out.ns2.$n || ret=1
|
|
||||||
+$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 -y hmac-sha256:one:1234abcd8765 a.normal.example a > dig.out.ns2.$n || ret=1
|
|
||||||
grep 'status: REFUSED' dig.out.ns2.$n > /dev/null || ret=1
|
|
||||||
grep '^a.normal.example' dig.out.ns2.$n > /dev/null && ret=1
|
|
||||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
||||||
@@ -502,7 +502,7 @@ status=`expr $status + $ret`
|
|
||||||
n=`expr $n + 1`
|
|
||||||
echo_i "test $n: zone key allowed - query allowed"
|
|
||||||
ret=0
|
|
||||||
-$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 -y one:1234abcd8765 a.keyallow.example a > dig.out.ns2.$n || ret=1
|
|
||||||
+$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 -y hmac-sha256:one:1234abcd8765 a.keyallow.example a > dig.out.ns2.$n || ret=1
|
|
||||||
grep 'status: NOERROR' dig.out.ns2.$n > /dev/null || ret=1
|
|
||||||
grep '^a.keyallow.example' dig.out.ns2.$n > /dev/null || ret=1
|
|
||||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
||||||
@@ -512,7 +512,7 @@ status=`expr $status + $ret`
|
|
||||||
n=`expr $n + 1`
|
|
||||||
echo_i "test $n: zone key not allowed - query refused"
|
|
||||||
ret=0
|
|
||||||
-$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 -y two:1234efgh8765 a.keyallow.example a > dig.out.ns2.$n || ret=1
|
|
||||||
+$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 -y hmac-sha256:two:1234efgh8765 a.keyallow.example a > dig.out.ns2.$n || ret=1
|
|
||||||
grep 'status: REFUSED' dig.out.ns2.$n > /dev/null || ret=1
|
|
||||||
grep '^a.keyallow.example' dig.out.ns2.$n > /dev/null && ret=1
|
|
||||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
||||||
@@ -522,7 +522,7 @@ status=`expr $status + $ret`
|
|
||||||
n=`expr $n + 1`
|
|
||||||
echo_i "test $n: zone key disallowed - query refused"
|
|
||||||
ret=0
|
|
||||||
-$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 -y one:1234abcd8765 a.keydisallow.example a > dig.out.ns2.$n || ret=1
|
|
||||||
+$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 -y hmac-sha256:one:1234abcd8765 a.keydisallow.example a > dig.out.ns2.$n || ret=1
|
|
||||||
grep 'status: REFUSED' dig.out.ns2.$n > /dev/null || ret=1
|
|
||||||
grep '^a.keydisallow.example' dig.out.ns2.$n > /dev/null && ret=1
|
|
||||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
||||||
diff --git a/bin/tests/system/checkconf/bad-tsig.conf b/bin/tests/system/checkconf/bad-tsig.conf
|
|
||||||
index 4af25b0..9f202d5 100644
|
|
||||||
--- a/bin/tests/system/checkconf/bad-tsig.conf
|
|
||||||
+++ b/bin/tests/system/checkconf/bad-tsig.conf
|
|
||||||
@@ -13,7 +13,7 @@
|
|
||||||
|
|
||||||
/* Bad secret */
|
|
||||||
key "badtsig" {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha256;
|
|
||||||
secret "jEdD+BPKg==";
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/bin/tests/system/checkconf/good.conf b/bin/tests/system/checkconf/good.conf
|
|
||||||
index 0ecdb68..90b8ab3 100644
|
|
||||||
--- a/bin/tests/system/checkconf/good.conf
|
|
||||||
+++ b/bin/tests/system/checkconf/good.conf
|
|
||||||
@@ -284,6 +284,6 @@ dyndb "name" "library.so" {
|
|
||||||
system;
|
|
||||||
};
|
|
||||||
key "mykey" {
|
|
||||||
- algorithm "hmac-md5";
|
|
||||||
+ algorithm "hmac-sha256";
|
|
||||||
secret "qwertyuiopasdfgh";
|
|
||||||
};
|
|
||||||
diff --git a/bin/tests/system/feature-test.c b/bin/tests/system/feature-test.c
|
|
||||||
index 161a80c..c386200 100644
|
|
||||||
--- a/bin/tests/system/feature-test.c
|
|
||||||
+++ b/bin/tests/system/feature-test.c
|
|
||||||
@@ -17,6 +17,7 @@
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
+#include <isc/md.h>
|
|
||||||
#include <isc/net.h>
|
|
||||||
#include <isc/print.h>
|
|
||||||
#include <isc/util.h>
|
|
||||||
@@ -195,6 +196,19 @@ main(int argc, char **argv) {
|
|
||||||
#endif /* ifdef DLZ_FILESYSTEM */
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (strcmp(argv[1], "--md5") == 0) {
|
|
||||||
+ unsigned char digest[ISC_MAX_MD_SIZE];
|
|
||||||
+ const unsigned char test[] = "test";
|
|
||||||
+ unsigned int size = sizeof(digest);
|
|
||||||
+
|
|
||||||
+ if (isc_md(ISC_MD_MD5, test, sizeof(test),
|
|
||||||
+ digest, &size) == ISC_R_SUCCESS) {
|
|
||||||
+ return (0);
|
|
||||||
+ } else {
|
|
||||||
+ return (1);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (strcmp(argv[1], "--with-idn") == 0) {
|
|
||||||
#ifdef HAVE_LIBIDN2
|
|
||||||
return (0);
|
|
||||||
diff --git a/bin/tests/system/notify/ns5/named.conf.in b/bin/tests/system/notify/ns5/named.conf.in
|
|
||||||
index 5cab276..d4a7bf3 100644
|
|
||||||
--- a/bin/tests/system/notify/ns5/named.conf.in
|
|
||||||
+++ b/bin/tests/system/notify/ns5/named.conf.in
|
|
||||||
@@ -12,17 +12,17 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
key "a" {
|
|
||||||
- algorithm "hmac-md5";
|
|
||||||
+ algorithm "hmac-sha256";
|
|
||||||
secret "aaaaaaaaaaaaaaaaaaaa";
|
|
||||||
};
|
|
||||||
|
|
||||||
key "b" {
|
|
||||||
- algorithm "hmac-md5";
|
|
||||||
+ algorithm "hmac-sha256";
|
|
||||||
secret "bbbbbbbbbbbbbbbbbbbb";
|
|
||||||
};
|
|
||||||
|
|
||||||
key "c" {
|
|
||||||
- algorithm "hmac-md5";
|
|
||||||
+ algorithm "hmac-sha256";
|
|
||||||
secret "cccccccccccccccccccc";
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/bin/tests/system/notify/tests.sh b/bin/tests/system/notify/tests.sh
|
|
||||||
index c02654e..0453a87 100644
|
|
||||||
--- a/bin/tests/system/notify/tests.sh
|
|
||||||
+++ b/bin/tests/system/notify/tests.sh
|
|
||||||
@@ -214,16 +214,16 @@ ret=0
|
|
||||||
$NSUPDATE << EOF
|
|
||||||
server 10.53.0.5 ${PORT}
|
|
||||||
zone x21
|
|
||||||
-key a aaaaaaaaaaaaaaaaaaaa
|
|
||||||
+key hmac-sha256:a aaaaaaaaaaaaaaaaaaaa
|
|
||||||
update add added.x21 0 in txt "test string"
|
|
||||||
send
|
|
||||||
EOF
|
|
||||||
|
|
||||||
for i in 1 2 3 4 5 6 7 8 9
|
|
||||||
do
|
|
||||||
- $DIG $DIGOPTS added.x21. -y b:bbbbbbbbbbbbbbbbbbbb @10.53.0.5 \
|
|
||||||
+ $DIG $DIGOPTS added.x21. -y hmac-sha256:b:bbbbbbbbbbbbbbbbbbbb @10.53.0.5 \
|
|
||||||
txt > dig.out.b.ns5.test$n || ret=1
|
|
||||||
- $DIG $DIGOPTS added.x21. -y c:cccccccccccccccccccc @10.53.0.5 \
|
|
||||||
+ $DIG $DIGOPTS added.x21. -y hmac-sha256:c:cccccccccccccccccccc @10.53.0.5 \
|
|
||||||
txt > dig.out.c.ns5.test$n || ret=1
|
|
||||||
grep "test string" dig.out.b.ns5.test$n > /dev/null &&
|
|
||||||
grep "test string" dig.out.c.ns5.test$n > /dev/null &&
|
|
||||||
diff --git a/bin/tests/system/nsupdate/ns1/named.conf.in b/bin/tests/system/nsupdate/ns1/named.conf.in
|
|
||||||
index a5cc36d..7bb8923 100644
|
|
||||||
--- a/bin/tests/system/nsupdate/ns1/named.conf.in
|
|
||||||
+++ b/bin/tests/system/nsupdate/ns1/named.conf.in
|
|
||||||
@@ -40,7 +40,7 @@ controls {
|
|
||||||
};
|
|
||||||
|
|
||||||
key altkey {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha512;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/bin/tests/system/nsupdate/ns2/named.conf.in b/bin/tests/system/nsupdate/ns2/named.conf.in
|
|
||||||
index f1a1735..da2b3d1 100644
|
|
||||||
--- a/bin/tests/system/nsupdate/ns2/named.conf.in
|
|
||||||
+++ b/bin/tests/system/nsupdate/ns2/named.conf.in
|
|
||||||
@@ -34,7 +34,7 @@ controls {
|
|
||||||
};
|
|
||||||
|
|
||||||
key altkey {
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
+ algorithm hmac-sha512;
|
|
||||||
secret "1234abcd8765";
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/bin/tests/system/nsupdate/setup.sh b/bin/tests/system/nsupdate/setup.sh
|
|
||||||
index c9a756e..fac39d4 100644
|
|
||||||
--- a/bin/tests/system/nsupdate/setup.sh
|
|
||||||
+++ b/bin/tests/system/nsupdate/setup.sh
|
|
||||||
@@ -73,7 +73,11 @@ EOF
|
|
||||||
|
|
||||||
$DDNSCONFGEN -q -z example.nil > ns1/ddns.key
|
|
||||||
|
|
||||||
-$DDNSCONFGEN -q -a hmac-md5 -k md5-key -z keytests.nil > ns1/md5.key
|
|
||||||
+if $FEATURETEST --md5; then
|
|
||||||
+ $DDNSCONFGEN -q -a hmac-md5 -k md5-key -z keytests.nil > ns1/md5.key
|
|
||||||
+else
|
|
||||||
+ echo -n > ns1/md5.key
|
|
||||||
+fi
|
|
||||||
$DDNSCONFGEN -q -a hmac-sha1 -k sha1-key -z keytests.nil > ns1/sha1.key
|
|
||||||
$DDNSCONFGEN -q -a hmac-sha224 -k sha224-key -z keytests.nil > ns1/sha224.key
|
|
||||||
$DDNSCONFGEN -q -a hmac-sha256 -k sha256-key -z keytests.nil > ns1/sha256.key
|
|
||||||
diff --git a/bin/tests/system/nsupdate/tests.sh b/bin/tests/system/nsupdate/tests.sh
|
|
||||||
index 67ffc27..c554a3f 100755
|
|
||||||
--- a/bin/tests/system/nsupdate/tests.sh
|
|
||||||
+++ b/bin/tests/system/nsupdate/tests.sh
|
|
||||||
@@ -852,7 +852,14 @@ fi
|
|
||||||
n=$((n + 1))
|
|
||||||
ret=0
|
|
||||||
echo_i "check TSIG key algorithms (nsupdate -k) ($n)"
|
|
||||||
-for alg in md5 sha1 sha224 sha256 sha384 sha512; do
|
|
||||||
+if $FEATURETEST --md5
|
|
||||||
+then
|
|
||||||
+ ALGS="md5 sha1 sha224 sha256 sha384 sha512"
|
|
||||||
+else
|
|
||||||
+ ALGS="sha1 sha224 sha256 sha384 sha512"
|
|
||||||
+ echo_i "skipping disabled md5 algorithm"
|
|
||||||
+fi
|
|
||||||
+for alg in $ALGS; do
|
|
||||||
$NSUPDATE -k ns1/${alg}.key <<END > /dev/null || ret=1
|
|
||||||
server 10.53.0.1 ${PORT}
|
|
||||||
update add ${alg}.keytests.nil. 600 A 10.10.10.3
|
|
||||||
@@ -860,7 +867,7 @@ send
|
|
||||||
END
|
|
||||||
done
|
|
||||||
sleep 2
|
|
||||||
-for alg in md5 sha1 sha224 sha256 sha384 sha512; do
|
|
||||||
+for alg in $ALGS; do
|
|
||||||
$DIG $DIGOPTS +short @10.53.0.1 ${alg}.keytests.nil | grep 10.10.10.3 > /dev/null 2>&1 || ret=1
|
|
||||||
done
|
|
||||||
if [ $ret -ne 0 ]; then
|
|
||||||
@@ -871,7 +878,7 @@ fi
|
|
||||||
n=$((n + 1))
|
|
||||||
ret=0
|
|
||||||
echo_i "check TSIG key algorithms (nsupdate -y) ($n)"
|
|
||||||
-for alg in md5 sha1 sha224 sha256 sha384 sha512; do
|
|
||||||
+for alg in $ALGS; do
|
|
||||||
secret=$(sed -n 's/.*secret "\(.*\)";.*/\1/p' ns1/${alg}.key)
|
|
||||||
$NSUPDATE -y "hmac-${alg}:${alg}-key:$secret" <<END > /dev/null || ret=1
|
|
||||||
server 10.53.0.1 ${PORT}
|
|
||||||
@@ -880,7 +887,7 @@ send
|
|
||||||
END
|
|
||||||
done
|
|
||||||
sleep 2
|
|
||||||
-for alg in md5 sha1 sha224 sha256 sha384 sha512; do
|
|
||||||
+for alg in $ALGS; do
|
|
||||||
$DIG $DIGOPTS +short @10.53.0.1 ${alg}.keytests.nil | grep 10.10.10.50 > /dev/null 2>&1 || ret=1
|
|
||||||
done
|
|
||||||
if [ $ret -ne 0 ]; then
|
|
||||||
diff --git a/bin/tests/system/rndc/setup.sh b/bin/tests/system/rndc/setup.sh
|
|
||||||
index e7df6e4..7292818 100644
|
|
||||||
--- a/bin/tests/system/rndc/setup.sh
|
|
||||||
+++ b/bin/tests/system/rndc/setup.sh
|
|
||||||
@@ -40,7 +40,7 @@ make_key () {
|
|
||||||
sed 's/allow { 10.53.0.4/allow { any/' >> ns4/named.conf
|
|
||||||
}
|
|
||||||
|
|
||||||
-make_key 1 ${EXTRAPORT1} hmac-md5
|
|
||||||
+$FEATURETEST --md5 && make_key 1 ${EXTRAPORT1} hmac-md5
|
|
||||||
make_key 2 ${EXTRAPORT2} hmac-sha1
|
|
||||||
make_key 3 ${EXTRAPORT3} hmac-sha224
|
|
||||||
make_key 4 ${EXTRAPORT4} hmac-sha256
|
|
||||||
diff --git a/bin/tests/system/rndc/tests.sh b/bin/tests/system/rndc/tests.sh
|
|
||||||
index 43e89d3..c2ee158 100644
|
|
||||||
--- a/bin/tests/system/rndc/tests.sh
|
|
||||||
+++ b/bin/tests/system/rndc/tests.sh
|
|
||||||
@@ -351,15 +351,20 @@ if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
||||||
status=`expr $status + $ret`
|
|
||||||
|
|
||||||
n=`expr $n + 1`
|
|
||||||
-echo_i "testing rndc with hmac-md5 ($n)"
|
|
||||||
-ret=0
|
|
||||||
-$RNDC -s 10.53.0.4 -p ${EXTRAPORT1} -c ns4/key1.conf status > /dev/null 2>&1 || ret=1
|
|
||||||
-for i in 2 3 4 5 6
|
|
||||||
-do
|
|
||||||
- $RNDC -s 10.53.0.4 -p ${EXTRAPORT1} -c ns4/key${i}.conf status > /dev/null 2>&1 && ret=1
|
|
||||||
-done
|
|
||||||
-if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
||||||
-status=`expr $status + $ret`
|
|
||||||
+if $FEATURETEST --md5
|
|
||||||
+then
|
|
||||||
+ echo_i "testing rndc with hmac-md5 ($n)"
|
|
||||||
+ ret=0
|
|
||||||
+ $RNDC -s 10.53.0.4 -p ${EXTRAPORT1} -c ns4/key1.conf status > /dev/null 2>&1 || ret=1
|
|
||||||
+ for i in 2 3 4 5 6
|
|
||||||
+ do
|
|
||||||
+ $RNDC -s 10.53.0.4 -p ${EXTRAPORT1} -c ns4/key${i}.conf status > /dev/null 2>&1 && ret=1
|
|
||||||
+ done
|
|
||||||
+ if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
||||||
+ status=`expr $status + $ret`
|
|
||||||
+else
|
|
||||||
+ echo_i "skipping rndc with hmac-md5 ($n)"
|
|
||||||
+fi
|
|
||||||
|
|
||||||
n=`expr $n + 1`
|
|
||||||
echo_i "testing rndc with hmac-sha1 ($n)"
|
|
||||||
diff --git a/bin/tests/system/tsig/ns1/named.conf.in b/bin/tests/system/tsig/ns1/named.conf.in
|
|
||||||
index 76cf970..22637af 100644
|
|
||||||
--- a/bin/tests/system/tsig/ns1/named.conf.in
|
|
||||||
+++ b/bin/tests/system/tsig/ns1/named.conf.in
|
|
||||||
@@ -23,10 +23,7 @@ options {
|
|
||||||
notify no;
|
|
||||||
};
|
|
||||||
|
|
||||||
-key "md5" {
|
|
||||||
- secret "97rnFx24Tfna4mHPfgnerA==";
|
|
||||||
- algorithm hmac-md5;
|
|
||||||
-};
|
|
||||||
+# md5 key appended by setup.sh at the end
|
|
||||||
|
|
||||||
key "sha1" {
|
|
||||||
secret "FrSt77yPTFx6hTs4i2tKLB9LmE0=";
|
|
||||||
@@ -53,10 +50,7 @@ key "sha512" {
|
|
||||||
algorithm hmac-sha512;
|
|
||||||
};
|
|
||||||
|
|
||||||
-key "md5-trunc" {
|
|
||||||
- secret "97rnFx24Tfna4mHPfgnerA==";
|
|
||||||
- algorithm hmac-md5-80;
|
|
||||||
-};
|
|
||||||
+# md5-trunc key appended by setup.sh at the end
|
|
||||||
|
|
||||||
key "sha1-trunc" {
|
|
||||||
secret "FrSt77yPTFx6hTs4i2tKLB9LmE0=";
|
|
||||||
diff --git a/bin/tests/system/tsig/setup.sh b/bin/tests/system/tsig/setup.sh
|
|
||||||
index 6020947..c8b69d0 100644
|
|
||||||
--- a/bin/tests/system/tsig/setup.sh
|
|
||||||
+++ b/bin/tests/system/tsig/setup.sh
|
|
||||||
@@ -17,3 +17,8 @@ SYSTEMTESTTOP=..
|
|
||||||
$SHELL clean.sh
|
|
||||||
|
|
||||||
copy_setports ns1/named.conf.in ns1/named.conf
|
|
||||||
+
|
|
||||||
+if $FEATURETEST --md5
|
|
||||||
+then
|
|
||||||
+ cat ns1/rndc5.conf.in >> ns1/named.conf
|
|
||||||
+fi
|
|
||||||
diff --git a/bin/tests/system/tsig/tests.sh b/bin/tests/system/tsig/tests.sh
|
|
||||||
index 02199e6..bbc39ab 100644
|
|
||||||
--- a/bin/tests/system/tsig/tests.sh
|
|
||||||
+++ b/bin/tests/system/tsig/tests.sh
|
|
||||||
@@ -28,20 +28,25 @@ sha512="jI/Pa4qRu96t76Pns5Z/Ndxbn3QCkwcxLOgt9vgvnJw5wqTRvNyk3FtD6yIMd1dWVlqZ+Y4f
|
|
||||||
|
|
||||||
status=0
|
|
||||||
|
|
||||||
-echo_i "fetching using hmac-md5 (old form)"
|
|
||||||
-ret=0
|
|
||||||
-$DIG $DIGOPTS example.nil. -y "md5:$md5" @10.53.0.1 soa > dig.out.md5.old || ret=1
|
|
||||||
-grep -i "md5.*TSIG.*NOERROR" dig.out.md5.old > /dev/null || ret=1
|
|
||||||
-if [ $ret -eq 1 ] ; then
|
|
||||||
- echo_i "failed"; status=1
|
|
||||||
-fi
|
|
||||||
-
|
|
||||||
-echo_i "fetching using hmac-md5 (new form)"
|
|
||||||
-ret=0
|
|
||||||
-$DIG $DIGOPTS example.nil. -y "hmac-md5:md5:$md5" @10.53.0.1 soa > dig.out.md5.new || ret=1
|
|
||||||
-grep -i "md5.*TSIG.*NOERROR" dig.out.md5.new > /dev/null || ret=1
|
|
||||||
-if [ $ret -eq 1 ] ; then
|
|
||||||
- echo_i "failed"; status=1
|
|
||||||
+if $FEATURETEST --md5
|
|
||||||
+then
|
|
||||||
+ echo_i "fetching using hmac-md5 (old form)"
|
|
||||||
+ ret=0
|
|
||||||
+ $DIG $DIGOPTS example.nil. -y "md5:$md5" @10.53.0.1 soa > dig.out.md5.old || ret=1
|
|
||||||
+ grep -i "md5.*TSIG.*NOERROR" dig.out.md5.old > /dev/null || ret=1
|
|
||||||
+ if [ $ret -eq 1 ] ; then
|
|
||||||
+ echo_i "failed"; status=1
|
|
||||||
+ fi
|
|
||||||
+
|
|
||||||
+ echo_i "fetching using hmac-md5 (new form)"
|
|
||||||
+ ret=0
|
|
||||||
+ $DIG $DIGOPTS example.nil. -y "hmac-md5:md5:$md5" @10.53.0.1 soa > dig.out.md5.new || ret=1
|
|
||||||
+ grep -i "md5.*TSIG.*NOERROR" dig.out.md5.new > /dev/null || ret=1
|
|
||||||
+ if [ $ret -eq 1 ] ; then
|
|
||||||
+ echo_i "failed"; status=1
|
|
||||||
+ fi
|
|
||||||
+else
|
|
||||||
+ echo_i "skipping using hmac-md5"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo_i "fetching using hmac-sha1"
|
|
||||||
@@ -89,12 +94,17 @@ fi
|
|
||||||
# Truncated TSIG
|
|
||||||
#
|
|
||||||
#
|
|
||||||
-echo_i "fetching using hmac-md5 (trunc)"
|
|
||||||
-ret=0
|
|
||||||
-$DIG $DIGOPTS example.nil. -y "hmac-md5-80:md5-trunc:$md5" @10.53.0.1 soa > dig.out.md5.trunc || ret=1
|
|
||||||
-grep -i "md5-trunc.*TSIG.*NOERROR" dig.out.md5.trunc > /dev/null || ret=1
|
|
||||||
-if [ $ret -eq 1 ] ; then
|
|
||||||
- echo_i "failed"; status=1
|
|
||||||
+if $FEATURETEST --md5
|
|
||||||
+then
|
|
||||||
+ echo_i "fetching using hmac-md5 (trunc)"
|
|
||||||
+ ret=0
|
|
||||||
+ $DIG $DIGOPTS example.nil. -y "hmac-md5-80:md5-trunc:$md5" @10.53.0.1 soa > dig.out.md5.trunc || ret=1
|
|
||||||
+ grep -i "md5-trunc.*TSIG.*NOERROR" dig.out.md5.trunc > /dev/null || ret=1
|
|
||||||
+ if [ $ret -eq 1 ] ; then
|
|
||||||
+ echo_i "failed"; status=1
|
|
||||||
+ fi
|
|
||||||
+else
|
|
||||||
+ echo_i "skipping using hmac-md5 (trunc)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo_i "fetching using hmac-sha1 (trunc)"
|
|
||||||
@@ -143,12 +153,17 @@ fi
|
|
||||||
# Check for bad truncation.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
-echo_i "fetching using hmac-md5-80 (BADTRUNC)"
|
|
||||||
-ret=0
|
|
||||||
-$DIG $DIGOPTS example.nil. -y "hmac-md5-80:md5:$md5" @10.53.0.1 soa > dig.out.md5-80 || ret=1
|
|
||||||
-grep -i "md5.*TSIG.*BADTRUNC" dig.out.md5-80 > /dev/null || ret=1
|
|
||||||
-if [ $ret -eq 1 ] ; then
|
|
||||||
- echo_i "failed"; status=1
|
|
||||||
+if $FEATURETEST --md5
|
|
||||||
+then
|
|
||||||
+ echo_i "fetching using hmac-md5-80 (BADTRUNC)"
|
|
||||||
+ ret=0
|
|
||||||
+ $DIG $DIGOPTS example.nil. -y "hmac-md5-80:md5:$md5" @10.53.0.1 soa > dig.out.md5-80 || ret=1
|
|
||||||
+ grep -i "md5.*TSIG.*BADTRUNC" dig.out.md5-80 > /dev/null || ret=1
|
|
||||||
+ if [ $ret -eq 1 ] ; then
|
|
||||||
+ echo_i "failed"; status=1
|
|
||||||
+ fi
|
|
||||||
+else
|
|
||||||
+ echo_i "skipping using hmac-md5-80 (BADTRUNC)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo_i "fetching using hmac-sha1-80 (BADTRUNC)"
|
|
||||||
diff --git a/bin/tests/system/upforwd/ns1/named.conf.in b/bin/tests/system/upforwd/ns1/named.conf.in
|
|
||||||
index c2b57dd..cb13aa1 100644
|
|
||||||
--- a/bin/tests/system/upforwd/ns1/named.conf.in
|
|
||||||
+++ b/bin/tests/system/upforwd/ns1/named.conf.in
|
|
||||||
@@ -12,7 +12,7 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
key "update.example." {
|
|
||||||
- algorithm "hmac-md5";
|
|
||||||
+ algorithm "hmac-sha256";
|
|
||||||
secret "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/bin/tests/system/upforwd/tests.sh b/bin/tests/system/upforwd/tests.sh
|
|
||||||
index 35c5588..c71042c 100644
|
|
||||||
--- a/bin/tests/system/upforwd/tests.sh
|
|
||||||
+++ b/bin/tests/system/upforwd/tests.sh
|
|
||||||
@@ -81,7 +81,7 @@ if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi
|
|
||||||
|
|
||||||
echo_i "updating zone (signed) ($n)"
|
|
||||||
ret=0
|
|
||||||
-$NSUPDATE -y update.example:c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K -- - <<EOF || ret=1
|
|
||||||
+$NSUPDATE -y hmac-sha256:update.example:c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K -- - <<EOF || ret=1
|
|
||||||
local 10.53.0.1
|
|
||||||
server 10.53.0.3 ${PORT}
|
|
||||||
update add updated.example. 600 A 10.10.10.1
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
||||||
@ -1,58 +0,0 @@
|
|||||||
From 1241f2005d08673c28a595c5a6cd61350b95a929 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= <pemensik@redhat.com>
|
|
||||||
Date: Tue, 2 Jan 2018 18:13:07 +0100
|
|
||||||
Subject: [PATCH] Fix pkcs11 variants atf tests
|
|
||||||
|
|
||||||
Add dns-pkcs11 tests Makefile to configure
|
|
||||||
|
|
||||||
Add pkcs11 Kyuafile, fix dh_test to pass in pkcs11 mode
|
|
||||||
---
|
|
||||||
configure.ac | 1 +
|
|
||||||
lib/Kyuafile | 2 ++
|
|
||||||
lib/dns-pkcs11/tests/dh_test.c | 3 ++-
|
|
||||||
3 files changed, 5 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
|
||||||
index d80ae31..0fb9328 100644
|
|
||||||
--- a/configure.ac
|
|
||||||
+++ b/configure.ac
|
|
||||||
@@ -3090,6 +3090,7 @@ AC_CONFIG_FILES([
|
|
||||||
lib/dns-pkcs11/include/Makefile
|
|
||||||
lib/dns-pkcs11/include/dns/Makefile
|
|
||||||
lib/dns-pkcs11/include/dst/Makefile
|
|
||||||
+ lib/dns-pkcs11/tests/Makefile
|
|
||||||
lib/irs/Makefile
|
|
||||||
lib/irs/include/Makefile
|
|
||||||
lib/irs/include/irs/Makefile
|
|
||||||
diff --git a/lib/Kyuafile b/lib/Kyuafile
|
|
||||||
index 39ce986..037e5ef 100644
|
|
||||||
--- a/lib/Kyuafile
|
|
||||||
+++ b/lib/Kyuafile
|
|
||||||
@@ -2,8 +2,10 @@ syntax(2)
|
|
||||||
test_suite('bind9')
|
|
||||||
|
|
||||||
include('dns/Kyuafile')
|
|
||||||
+include('dns-pkcs11/Kyuafile')
|
|
||||||
include('irs/Kyuafile')
|
|
||||||
include('isc/Kyuafile')
|
|
||||||
include('isccc/Kyuafile')
|
|
||||||
include('isccfg/Kyuafile')
|
|
||||||
include('ns/Kyuafile')
|
|
||||||
+include('ns-pkcs11/Kyuafile')
|
|
||||||
diff --git a/lib/dns-pkcs11/tests/dh_test.c b/lib/dns-pkcs11/tests/dh_test.c
|
|
||||||
index 934e8fd..658d1af 100644
|
|
||||||
--- a/lib/dns-pkcs11/tests/dh_test.c
|
|
||||||
+++ b/lib/dns-pkcs11/tests/dh_test.c
|
|
||||||
@@ -87,7 +87,8 @@ dh_computesecret(void **state) {
|
|
||||||
result = dst_key_computesecret(key, key, &buf);
|
|
||||||
assert_int_equal(result, DST_R_NOTPRIVATEKEY);
|
|
||||||
result = key->func->computesecret(key, key, &buf);
|
|
||||||
- assert_int_equal(result, DST_R_COMPUTESECRETFAILURE);
|
|
||||||
+ /* PKCS11 variant gives different result, accept both */
|
|
||||||
+ assert_true(result == DST_R_COMPUTESECRETFAILURE || result == DST_R_INVALIDPRIVATEKEY);
|
|
||||||
|
|
||||||
dst_key_free(&key);
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.20.1
|
|
||||||
|
|
||||||
@ -1,29 +0,0 @@
|
|||||||
From d05d116da39c0a5c580ceaac6ba069899b82c5a0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= <pemensik@redhat.com>
|
|
||||||
Date: Wed, 16 Jan 2019 16:27:33 +0100
|
|
||||||
Subject: [PATCH] Fix possible crash when loading corrupted file
|
|
||||||
|
|
||||||
Some values passes internal triggers by coincidence. Fix the check and
|
|
||||||
check also first_node_offset before even passing it further.
|
|
||||||
---
|
|
||||||
lib/dns/rbt.c | 4 +++-
|
|
||||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/lib/dns/rbt.c b/lib/dns/rbt.c
|
|
||||||
index 5aee5f6..7f2c2d2 100644
|
|
||||||
--- a/lib/dns/rbt.c
|
|
||||||
+++ b/lib/dns/rbt.c
|
|
||||||
@@ -945,7 +945,9 @@ dns_rbt_deserialize_tree(void *base_address, size_t filesize,
|
|
||||||
rbt->root = (dns_rbtnode_t *)((char *)base_address + header_offset +
|
|
||||||
header->first_node_offset);
|
|
||||||
|
|
||||||
- if ((header->nodecount * sizeof(dns_rbtnode_t)) > filesize) {
|
|
||||||
+ if ((header->nodecount * sizeof(dns_rbtnode_t)) > filesize
|
|
||||||
+ || header->first_node_offset > filesize) {
|
|
||||||
+
|
|
||||||
result = ISC_R_INVALIDFILE;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
||||||
@ -1,83 +0,0 @@
|
|||||||
From e6ab9c67f0a14adc23c1067e03a106da1b1651b7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Petr Mensik <pemensik@redhat.com>
|
|
||||||
Date: Fri, 18 Oct 2019 21:30:52 +0200
|
|
||||||
Subject: [PATCH] Move USE_PKCS11 and USE_OPENSSL out of config.h
|
|
||||||
|
|
||||||
Building two variants with the same common code requires to unset
|
|
||||||
USE_PKCS11 on part of build. That is not possible with config.h value.
|
|
||||||
Move it as normal define to CDEFINES.
|
|
||||||
---
|
|
||||||
bin/confgen/Makefile.in | 2 +-
|
|
||||||
configure.ac | 8 ++++++--
|
|
||||||
lib/dns/dst_internal.h | 12 +++++++++---
|
|
||||||
3 files changed, 16 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/bin/confgen/Makefile.in b/bin/confgen/Makefile.in
|
|
||||||
index 1b7512d..c126bf3 100644
|
|
||||||
--- a/bin/confgen/Makefile.in
|
|
||||||
+++ b/bin/confgen/Makefile.in
|
|
||||||
@@ -22,7 +22,7 @@ VERSION=@BIND9_VERSION@
|
|
||||||
CINCLUDES = -I${srcdir}/include ${ISC_INCLUDES} ${ISCCC_INCLUDES} \
|
|
||||||
${ISCCFG_INCLUDES} ${DNS_INCLUDES} ${BIND9_INCLUDES}
|
|
||||||
|
|
||||||
-CDEFINES =
|
|
||||||
+CDEFINES = @USE_PKCS11@
|
|
||||||
CWARNINGS =
|
|
||||||
|
|
||||||
ISCCFGLIBS = ../../lib/isccfg/libisccfg.@A@
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
|
||||||
index f5483fe..08a7d8a 100644
|
|
||||||
--- a/configure.ac
|
|
||||||
+++ b/configure.ac
|
|
||||||
@@ -935,10 +935,14 @@ AC_SUBST([PKCS11_TEST])
|
|
||||||
AC_SUBST([PKCS11_TOOLS])
|
|
||||||
AC_SUBST([PKCS11_MANS])
|
|
||||||
|
|
||||||
+USE_PKCS11='-DUSE_PKCS11=0'
|
|
||||||
+USE_OPENSSL='-DUSE_OPENSSL=0'
|
|
||||||
AC_SUBST([CRYPTO])
|
|
||||||
AS_CASE([$CRYPTO],
|
|
||||||
- [pkcs11],[AC_DEFINE([USE_PKCS11], [1], [define if PKCS11 is used for Public-Key Cryptography])],
|
|
||||||
- [AC_DEFINE([USE_OPENSSL], [1], [define if OpenSSL is used for Public-Key Cryptography])])
|
|
||||||
+ [pkcs11],[USE_PKCS11='-DUSE_PKCS11=1'],
|
|
||||||
+ [USE_OPENSSL='-DUSE_OPENSSL=1'])
|
|
||||||
+AC_SUBST(USE_PKCS11)
|
|
||||||
+AC_SUBST(USE_OPENSSL)
|
|
||||||
|
|
||||||
# preparation for automake
|
|
||||||
# AM_CONDITIONAL([PKCS11_TOOLS], [test "$with_native_pkcs11" = "yes"])
|
|
||||||
diff --git a/lib/dns/dst_internal.h b/lib/dns/dst_internal.h
|
|
||||||
index 2c3b4a3..55e9dc4 100644
|
|
||||||
--- a/lib/dns/dst_internal.h
|
|
||||||
+++ b/lib/dns/dst_internal.h
|
|
||||||
@@ -38,6 +38,13 @@
|
|
||||||
#include <isc/stdtime.h>
|
|
||||||
#include <isc/types.h>
|
|
||||||
|
|
||||||
+#ifndef USE_PKCS11
|
|
||||||
+#define USE_PKCS11 0
|
|
||||||
+#endif
|
|
||||||
+#ifndef USE_OPENSSL
|
|
||||||
+#define USE_OPENSSL (! USE_PKCS11)
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#if USE_PKCS11
|
|
||||||
#include <pk11/pk11.h>
|
|
||||||
#include <pk11/site.h>
|
|
||||||
@@ -116,11 +123,10 @@ struct dst_key {
|
|
||||||
void *generic;
|
|
||||||
dns_gss_ctx_id_t gssctx;
|
|
||||||
DH *dh;
|
|
||||||
-#if USE_OPENSSL
|
|
||||||
- EVP_PKEY *pkey;
|
|
||||||
-#endif /* if USE_OPENSSL */
|
|
||||||
#if USE_PKCS11
|
|
||||||
pk11_object_t *pkey;
|
|
||||||
+#else
|
|
||||||
+ EVP_PKEY *pkey;
|
|
||||||
#endif /* if USE_PKCS11 */
|
|
||||||
dst_hmac_key_t *hmac_key;
|
|
||||||
} keydata; /*%< pointer to key in crypto pkg fmt */
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
||||||
@ -1,95 +0,0 @@
|
|||||||
From 0698eb93f6e618d2882ae2c8758c5fa87524bea6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Petr Mensik <pemensik@redhat.com>
|
|
||||||
Date: Tue, 23 Jul 2019 12:10:39 +0200
|
|
||||||
Subject: [PATCH] Allow explicitly using json-c but not libjson
|
|
||||||
|
|
||||||
Separate detection of json support. Allows explicit use of json-c when
|
|
||||||
jsoncpp package is found. Have to use --without-libjson --with-json-c.
|
|
||||||
---
|
|
||||||
configure.ac | 52 +++++++++++++++++++++++++++++++++++++++++-----------
|
|
||||||
1 file changed, 41 insertions(+), 11 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
|
||||||
index f7978e4..40b4f9f 100644
|
|
||||||
--- a/configure.ac
|
|
||||||
+++ b/configure.ac
|
|
||||||
@@ -1331,7 +1331,6 @@ AC_ARG_WITH(libjson,
|
|
||||||
use_libjson="$withval", use_libjson="auto")
|
|
||||||
|
|
||||||
have_libjson=""
|
|
||||||
-have_libjson_c=""
|
|
||||||
case "$use_libjson" in
|
|
||||||
no)
|
|
||||||
libjson_libs=""
|
|
||||||
@@ -1347,7 +1346,43 @@ case "$use_libjson" in
|
|
||||||
LIBS="$LIBS -L${d}/lib"
|
|
||||||
fi
|
|
||||||
have_libjson="yes"
|
|
||||||
- elif test -f "${d}/include/json-c/json.h"
|
|
||||||
+ fi
|
|
||||||
+ done
|
|
||||||
+ ;;
|
|
||||||
+ *)
|
|
||||||
+ if test -f "${use_libjson}/include/json/json.h"
|
|
||||||
+ then
|
|
||||||
+ libjson_cflags="-I${use_libjson}/include"
|
|
||||||
+ LIBS="$LIBS -L${use_libjson}/lib"
|
|
||||||
+ have_libjson="yes"
|
|
||||||
+ else
|
|
||||||
+ AC_MSG_ERROR([$use_libjson/include/json/json.h not found.])
|
|
||||||
+ fi
|
|
||||||
+ ;;
|
|
||||||
+esac
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# was --with-json-c specified?
|
|
||||||
+#
|
|
||||||
+AC_ARG_WITH(json-c,
|
|
||||||
+ AS_HELP_STRING([--with-json-c[=PATH]],
|
|
||||||
+ [build with json-c library [yes|no|path]]),
|
|
||||||
+ use_json_c="$withval", use_json_c="$use_libjson")
|
|
||||||
+
|
|
||||||
+if test "X${have_libjson}" != "X"
|
|
||||||
+then
|
|
||||||
+ # Do not use if libjson were found
|
|
||||||
+ use_json_c=no
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+have_libjson_c=""
|
|
||||||
+case "$use_json_c" in
|
|
||||||
+ no)
|
|
||||||
+ ;;
|
|
||||||
+ auto|yes)
|
|
||||||
+ for d in /usr /usr/local /opt/local
|
|
||||||
+ do
|
|
||||||
+ if test -f "${d}/include/json-c/json.h"
|
|
||||||
then
|
|
||||||
if test ${d} != /usr
|
|
||||||
then
|
|
||||||
@@ -1360,19 +1395,14 @@ case "$use_libjson" in
|
|
||||||
done
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
- if test -f "${use_libjson}/include/json/json.h"
|
|
||||||
- then
|
|
||||||
- libjson_cflags="-I${use_libjson}/include"
|
|
||||||
- LIBS="$LIBS -L${use_libjson}/lib"
|
|
||||||
- have_libjson="yes"
|
|
||||||
- elif test -f "${use_libjson}/include/json-c/json.h"
|
|
||||||
+ if test -f "${use_json_c}/include/json-c/json.h"
|
|
||||||
then
|
|
||||||
- libjson_cflags="-I${use_libjson}/include"
|
|
||||||
- LIBS="$LIBS -L${use_libjson}/lib"
|
|
||||||
+ libjson_cflags="-I${use_json_c}/include"
|
|
||||||
+ LIBS="$LIBS -L${use_json_c}/lib"
|
|
||||||
have_libjson="yes"
|
|
||||||
have_libjson_c="yes"
|
|
||||||
else
|
|
||||||
- AC_MSG_ERROR([$use_libjson/include/json{,-c}/json.h not found.])
|
|
||||||
+ AC_MSG_ERROR([$use_json_c/include/json-c/json.h not found.])
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
--
|
|
||||||
2.20.1
|
|
||||||
|
|
||||||
@ -1,60 +0,0 @@
|
|||||||
From 3a161af91bffcd457586ab466e32ac8484028763 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Petr Mensik <pemensik@redhat.com>
|
|
||||||
Date: Wed, 17 Jun 2020 23:17:13 +0200
|
|
||||||
Subject: [PATCH] Update man named with Red Hat specifics
|
|
||||||
|
|
||||||
This is almost unmodified text and requires revalidation. Some of those
|
|
||||||
statements are no longer correct.
|
|
||||||
---
|
|
||||||
bin/named/named.rst | 35 +++++++++++++++++++++++++++++++++++
|
|
||||||
1 file changed, 35 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/bin/named/named.rst b/bin/named/named.rst
|
|
||||||
index 6fd8f87..3cd6350 100644
|
|
||||||
--- a/bin/named/named.rst
|
|
||||||
+++ b/bin/named/named.rst
|
|
||||||
@@ -228,6 +228,41 @@ Files
|
|
||||||
``/var/run/named/named.pid``
|
|
||||||
The default process-id file.
|
|
||||||
|
|
||||||
+Notes
|
|
||||||
+~~~~~
|
|
||||||
+
|
|
||||||
+**Red Hat SELinux BIND Security Profile:**
|
|
||||||
+
|
|
||||||
+By default, Red Hat ships BIND with the most secure SELinux policy
|
|
||||||
+that will not prevent normal BIND operation and will prevent exploitation
|
|
||||||
+of all known BIND security vulnerabilities. See the selinux(8) man page
|
|
||||||
+for information about SElinux.
|
|
||||||
+
|
|
||||||
+It is not necessary to run named in a chroot environment if the Red Hat
|
|
||||||
+SELinux policy for named is enabled. When enabled, this policy is far
|
|
||||||
+more secure than a chroot environment. Users are recommended to enable
|
|
||||||
+SELinux and remove the bind-chroot package.
|
|
||||||
+
|
|
||||||
+*With this extra security comes some restrictions:*
|
|
||||||
+
|
|
||||||
+By default, the SELinux policy does not allow named to write outside directory
|
|
||||||
+/var/named. That directory used to be read-only for named, but write access is
|
|
||||||
+enabled by default now.
|
|
||||||
+
|
|
||||||
+The "named" group must be granted read privelege to
|
|
||||||
+these files in order for named to be enabled to read them.
|
|
||||||
+Any file updated by named must be writeable by named user or named group.
|
|
||||||
+
|
|
||||||
+Any file created in the zone database file directory is automatically assigned
|
|
||||||
+the SELinux file context *named_zone_t* .
|
|
||||||
+
|
|
||||||
+The Red Hat BIND distribution and SELinux policy creates three directories where
|
|
||||||
+named were allowed to create and modify files: */var/named/slaves*, */var/named/dynamic*
|
|
||||||
+*/var/named/data*. The service is able to write and file under */var/named* with appropriate
|
|
||||||
+permissions. They are used for better organisation of zones and backward compatibility.
|
|
||||||
+Files in these directories are automatically assigned the '*named_cache_t*'
|
|
||||||
+file context, which SELinux always allows named to write.
|
|
||||||
+
|
|
||||||
See Also
|
|
||||||
~~~~~~~~
|
|
||||||
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
||||||
Binary file not shown.
@ -1,26 +0,0 @@
|
|||||||
From 395d6fca2638129e1cc1f55ee4b3aa0dbba44dc0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= <pemensik@redhat.com>
|
|
||||||
Date: Mon, 16 Jan 2023 11:45:31 +0100
|
|
||||||
Subject: [PATCH] Include isc_rwlocktype_t type definition in zt.h
|
|
||||||
|
|
||||||
After changes zt.h uses rwlock type, which is not enforced to be always
|
|
||||||
defined. Ensure full type definition is ready by including appropriate
|
|
||||||
header.
|
|
||||||
---
|
|
||||||
lib/dns/include/dns/zt.h | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/lib/dns/include/dns/zt.h b/lib/dns/include/dns/zt.h
|
|
||||||
index 077b26ddea..037d0a9495 100644
|
|
||||||
--- a/lib/dns/include/dns/zt.h
|
|
||||||
+++ b/lib/dns/include/dns/zt.h
|
|
||||||
@@ -18,6 +18,7 @@
|
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
#include <isc/lang.h>
|
|
||||||
+#include <isc/rwlock.h>
|
|
||||||
|
|
||||||
#include <dns/types.h>
|
|
||||||
|
|
||||||
--
|
|
||||||
2.39.0
|
|
||||||
BIN
bind-9.18.21.tar.xz
Normal file
BIN
bind-9.18.21.tar.xz
Normal file
Binary file not shown.
16
bind-9.18.21.tar.xz.asc
Normal file
16
bind-9.18.21.tar.xz.asc
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
-----BEGIN PGP SIGNATURE-----
|
||||||
|
|
||||||
|
iQIzBAABCgAdFiEEcGtsKGIOdvkdEfffUQpkKgbFLOwFAmV3BGsACgkQUQpkKgbF
|
||||||
|
LOwu9w/+JciqKqT0JieUDwPzEhhulBCWEhbZFrHK6dFM5UkPHkaV79QkZAQEhnq1
|
||||||
|
FXVEF99ZuTbz5s79wNAZ9I4AiU0al5RK1P5MwMBbjsQrfnkhmKnPIU1jx3FSVrCP
|
||||||
|
tC9l1xEjkLNi2vf28ZQ9KED2hUdqsgTZqDvgewEnrq1NtZ0K7ozz9nHQLfooDSJT
|
||||||
|
L5U9HDp3vf5BJWONjnKAPjJJdeRf7HPqokJVSjQcVxrT06VsMNUFFmyCbEJ0UTJm
|
||||||
|
mqDrRuEXhkAKf40DwMr0qGqiq5Q4m960yADEK1Aju/9cEf6Ag4FYyy70iyICe7Tj
|
||||||
|
T8qjVzzwboUJao3m/152+6qvzGXJKdUUZqCnNcCc2wmirmg/ES4DLLFyYYXBflj7
|
||||||
|
hWCOLXeghF/785te4fmiH3gqcEZBEVcc0wl1HCL5m3q9kGutGgLJVOZgM5D6zf2T
|
||||||
|
0Sa60qIr5r+cKCS9OYowTH1+NqEsW4XhCVIe/RYEuXa3FFczIUbdGlUQ5t9ILBxi
|
||||||
|
zbZ04Tj0tecqUVkhoEYZfQzhHEa43LzxATdQ4Zc01USaxhbSFSoyG1+WP1tPD+PL
|
||||||
|
wqZA9tEuvKtngr/UP+BeLG0lWv5zbtShzM1V1cEg7JuoiI2onWstaN7NYXShiUMZ
|
||||||
|
oVYXIBbmNbXVmm2TYzt4mw9TotGWHkSNjPZGvvAYw/0mtcw6NXs=
|
||||||
|
=bzR1
|
||||||
|
-----END PGP SIGNATURE-----
|
||||||
@ -1,30 +0,0 @@
|
|||||||
diff --git a/bin/named/Makefile.in b/bin/named/Makefile.in
|
|
||||||
index eb622d1..37053a7 100644
|
|
||||||
--- a/bin/named/Makefile.in
|
|
||||||
+++ b/bin/named/Makefile.in
|
|
||||||
@@ -117,8 +117,12 @@ SRCS = builtin.c config.c control.c \
|
|
||||||
tkeyconf.c tsigconf.c zoneconf.c \
|
|
||||||
${DLZDRIVER_SRCS} ${DBDRIVER_SRCS}
|
|
||||||
|
|
||||||
+EXT_CFLAGS = -fpie
|
|
||||||
+
|
|
||||||
@BIND9_MAKE_RULES@
|
|
||||||
|
|
||||||
+LDFLAGS += -pie -Wl,-z,relro,-z,now,-z,nodlopen,-z,noexecstack
|
|
||||||
+
|
|
||||||
main.@O@: main.c
|
|
||||||
${LIBTOOL_MODE_COMPILE} ${CC} ${ALL_CFLAGS} \
|
|
||||||
-DVERSION=\"${VERSION}\" \
|
|
||||||
diff --git a/bin/named/unix/Makefile.in b/bin/named/unix/Makefile.in
|
|
||||||
index fd9ca8d..f1c102c 100644
|
|
||||||
--- a/bin/named/unix/Makefile.in
|
|
||||||
+++ b/bin/named/unix/Makefile.in
|
|
||||||
@@ -11,6 +11,8 @@ srcdir = @srcdir@
|
|
||||||
VPATH = @srcdir@
|
|
||||||
top_srcdir = @top_srcdir@
|
|
||||||
|
|
||||||
+EXT_CFLAGS = -fpie
|
|
||||||
+
|
|
||||||
@BIND9_MAKE_INCLUDES@
|
|
||||||
|
|
||||||
CINCLUDES = -I${srcdir}/include -I${srcdir}/../include \
|
|
||||||
@ -1,53 +0,0 @@
|
|||||||
diff --git a/contrib/dlz/config.dlz.in b/contrib/dlz/config.dlz.in
|
|
||||||
index 47525af..eefe3c3 100644
|
|
||||||
--- a/contrib/dlz/config.dlz.in
|
|
||||||
+++ b/contrib/dlz/config.dlz.in
|
|
||||||
@@ -17,6 +17,13 @@
|
|
||||||
#
|
|
||||||
dlzdir='${DLZ_DRIVER_DIR}'
|
|
||||||
|
|
||||||
+AC_MSG_CHECKING([for target libdir])
|
|
||||||
+AC_RUN_IFELSE([int main(void) {exit((sizeof(void *) == 8) ? 0 : 1);}],
|
|
||||||
+ [target_lib=lib64],
|
|
||||||
+ [target_lib=lib],
|
|
||||||
+)
|
|
||||||
+AC_MSG_RESULT(["$target_lib"])
|
|
||||||
+
|
|
||||||
#
|
|
||||||
# Private autoconf macro to simplify configuring drivers:
|
|
||||||
#
|
|
||||||
@@ -292,9 +299,9 @@ case "$use_dlz_bdb" in
|
|
||||||
then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
- elif test -f "$dd/lib/lib${d}.so"
|
|
||||||
+ elif test -f "$dd/${target_lib}/lib${d}.so"
|
|
||||||
then
|
|
||||||
- dlz_bdb_libs="-L${dd}/lib -l${d}"
|
|
||||||
+ dlz_bdb_libs="-L${dd}/${target_lib} -l${d}"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
@@ -396,7 +403,7 @@ case "$use_dlz_ldap" in
|
|
||||||
*)
|
|
||||||
DLZ_ADD_DRIVER(LDAP, dlz_ldap_driver,
|
|
||||||
[-I$use_dlz_ldap/include],
|
|
||||||
- [-L$use_dlz_ldap/lib -lldap -llber])
|
|
||||||
+ [-L$use_dlz_ldap/${target_lib} -lldap -llber])
|
|
||||||
|
|
||||||
AC_MSG_RESULT(
|
|
||||||
[using LDAP from $use_dlz_ldap/lib and $use_dlz_ldap/include])
|
|
||||||
@@ -432,11 +439,11 @@ then
|
|
||||||
odbcdirs="/usr /usr/local /usr/pkg"
|
|
||||||
for d in $odbcdirs
|
|
||||||
do
|
|
||||||
- if test -f $d/include/sql.h -a -f $d/lib/libodbc.a
|
|
||||||
+ if test -f $d/include/sql.h -a -f $d/${target_lib}/libodbc.a
|
|
||||||
then
|
|
||||||
use_dlz_odbc=$d
|
|
||||||
dlz_odbc_include="-I$use_dlz_odbc/include"
|
|
||||||
- dlz_odbc_libs="-L$use_dlz_odbc/lib -lodbc"
|
|
||||||
+ dlz_odbc_libs="-L$use_dlz_odbc/${target_lib} -lodbc"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
diff -up bind-9.10.1b1/contrib/dlz/config.dlz.in.libdb bind-9.10.1b1/contrib/dlz/config.dlz.in
|
|
||||||
--- bind-9.10.1b1/contrib/dlz/config.dlz.in.libdb 2014-08-04 12:33:09.320735111 +0200
|
|
||||||
+++ bind-9.10.1b1/contrib/dlz/config.dlz.in 2014-08-04 12:41:46.888241910 +0200
|
|
||||||
@@ -263,7 +263,7 @@ case "$use_dlz_bdb" in
|
|
||||||
# Check other locations for includes.
|
|
||||||
# Order is important (sigh).
|
|
||||||
|
|
||||||
- bdb_incdirs="/db53 /db51 /db48 /db47 /db46 /db45 /db44 /db43 /db42 /db41 /db4 /db"
|
|
||||||
+ bdb_incdirs="/db53 /db51 /db48 /db47 /db46 /db45 /db44 /db43 /db42 /db41 /db4 /libdb /db"
|
|
||||||
# include a blank element first
|
|
||||||
for d in "" $bdb_incdirs
|
|
||||||
do
|
|
||||||
@@ -288,16 +288,9 @@ case "$use_dlz_bdb" in
|
|
||||||
bdb_libnames="db53 db-5.3 db51 db-5.1 db48 db-4.8 db47 db-4.7 db46 db-4.6 db45 db-4.5 db44 db-4.4 db43 db-4.3 db42 db-4.2 db41 db-4.1 db"
|
|
||||||
for d in $bdb_libnames
|
|
||||||
do
|
|
||||||
- if test "$dd" = "/usr"
|
|
||||||
+ if test -f "$dd/${target_lib}/lib${d}.so"
|
|
||||||
then
|
|
||||||
- AC_CHECK_LIB($d, db_create, dlz_bdb_libs="-l${d}")
|
|
||||||
- if test $dlz_bdb_libs != "yes"
|
|
||||||
- then
|
|
||||||
- break
|
|
||||||
- fi
|
|
||||||
- elif test -f "$dd/${target_lib}/lib${d}.so"
|
|
||||||
- then
|
|
||||||
- dlz_bdb_libs="-L${dd}/${target_lib} -l${d}"
|
|
||||||
+ dlz_bdb_libs="-L${dd}/${target_lib}/libdb -l${d}"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
334
bind.spec
334
bind.spec
@ -1,6 +1,5 @@
|
|||||||
%bcond_with SYSTEMTEST
|
%bcond_with SYSTEMTEST
|
||||||
%bcond_without GSSTSIG
|
%bcond_without GSSTSIG
|
||||||
%bcond_without PKCS11
|
|
||||||
%bcond_without JSON
|
%bcond_without JSON
|
||||||
%bcond_with DLZ
|
%bcond_with DLZ
|
||||||
%bcond_with GEOIP2
|
%bcond_with GEOIP2
|
||||||
@ -29,8 +28,8 @@
|
|||||||
Summary: The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server
|
Summary: The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server
|
||||||
Name: bind
|
Name: bind
|
||||||
License: MPLv2.0
|
License: MPLv2.0
|
||||||
Version: 9.16.37
|
Version: 9.18.21
|
||||||
Release: 5
|
Release: 4
|
||||||
Epoch: 32
|
Epoch: 32
|
||||||
Url: https://www.isc.org/downloads/bind/
|
Url: https://www.isc.org/downloads/bind/
|
||||||
#
|
#
|
||||||
@ -58,29 +57,21 @@ Source42: generate-rndc-key.sh
|
|||||||
Source43: named.rwtab
|
Source43: named.rwtab
|
||||||
Source44: named-chroot-setup.service
|
Source44: named-chroot-setup.service
|
||||||
Source46: named-setup-rndc.service
|
Source46: named-setup-rndc.service
|
||||||
Source47: named-pkcs11.service
|
|
||||||
Source48: setup-named-softhsm.sh
|
Source48: setup-named-softhsm.sh
|
||||||
Source49: named-chroot.files
|
Source49: named-chroot.files
|
||||||
|
|
||||||
Patch1: bind-9.14-config-pkcs11.patch
|
Patch6000:backport-CVE-2023-4408.patch
|
||||||
Patch2: bind-9.10-dist-native-pkcs11.patch
|
Patch6001:backport-CVE-2023-5517.patch
|
||||||
Patch3: bind-9.11-kyua-pkcs11.patch
|
Patch6002:backport-CVE-2023-5679.patch
|
||||||
|
Patch6003:backport-CVE-2023-50387-CVE-2023-50868.patch
|
||||||
|
Patch6004:backport-CVE-2024-0760.patch
|
||||||
|
Patch6005:backport-optimize-the-slabheader-placement-for-certain-RRtypes.patch
|
||||||
|
Patch6006:backport-CVE-2024-1737.patch
|
||||||
|
Patch6007:backport-CVE-2024-1975.patch
|
||||||
|
Patch6008:backport-CVE-2024-4076.patch
|
||||||
|
Patch6009:backport-CVE-2024-11187.patch
|
||||||
|
Patch6010:backport-CVE-2024-12705.patch
|
||||||
# Common patches
|
# Common patches
|
||||||
Patch10: bind-9.5-PIE.patch
|
|
||||||
Patch11: bind-9.16-redhat_doc.patch
|
|
||||||
Patch12: bind-9.5-dlz-64bit.patch
|
|
||||||
Patch13: bind93-rh490837.patch
|
|
||||||
Patch14: bind97-rh645544.patch
|
|
||||||
Patch15: bind-9.9.1-P2-dlz-libdb.patch
|
|
||||||
Patch16: bind-9.11-fips-tests.patch
|
|
||||||
# https://gitlab.isc.org/isc-projects/bind9/-/merge_requests/2689
|
|
||||||
Patch17: bind-9.11-rh1666814.patch
|
|
||||||
Patch18: bind-9.18-zt-include-rwlock.patch
|
|
||||||
|
|
||||||
Patch6001: CVE-2022-2906.patch
|
|
||||||
Patch6002: backport-CVE-2023-2911.patch
|
|
||||||
|
|
||||||
Patch9000: bugfix-limit-numbers-of-test-threads.patch
|
|
||||||
|
|
||||||
%{?systemd_ordering}
|
%{?systemd_ordering}
|
||||||
Requires: coreutils
|
Requires: coreutils
|
||||||
@ -106,6 +97,9 @@ BuildRequires: findutils sed
|
|||||||
BuildRequires: libuv-devel
|
BuildRequires: libuv-devel
|
||||||
BuildRequires: systemd
|
BuildRequires: systemd
|
||||||
BuildRequires: libnsl2
|
BuildRequires: libnsl2
|
||||||
|
BuildRequires: libnghttp2-devel
|
||||||
|
BuildRequires: chrpath
|
||||||
|
|
||||||
%if %{with DLZ}
|
%if %{with DLZ}
|
||||||
BuildRequires: openldap-devel, libpq-devel, sqlite-devel, mariadb-connector-c-devel
|
BuildRequires: openldap-devel, libpq-devel, sqlite-devel, mariadb-connector-c-devel
|
||||||
%endif
|
%endif
|
||||||
@ -113,7 +107,7 @@ BuildRequires: openldap-devel, libpq-devel, sqlite-devel, mariadb-connector-c-d
|
|||||||
# make unit dependencies
|
# make unit dependencies
|
||||||
BuildRequires: libcmocka-devel kyua
|
BuildRequires: libcmocka-devel kyua
|
||||||
%endif
|
%endif
|
||||||
%if %{with PKCS11} && (%{with UNITTEST} || %{with SYSTEMTEST})
|
%if %{with UNITTEST} || %{with SYSTEMTEST}
|
||||||
BuildRequires: softhsm
|
BuildRequires: softhsm
|
||||||
%endif
|
%endif
|
||||||
%if %{with SYSTEMTEST}
|
%if %{with SYSTEMTEST}
|
||||||
@ -138,10 +132,10 @@ BuildRequires: libmaxminddb-devel
|
|||||||
BuildRequires: fstrm-devel protobuf-c-devel
|
BuildRequires: fstrm-devel protobuf-c-devel
|
||||||
%endif
|
%endif
|
||||||
# Needed to regenerate dig.1 manpage
|
# Needed to regenerate dig.1 manpage
|
||||||
%if %{with DOC}
|
|
||||||
BuildRequires: python3-sphinx python3-sphinx_rtd_theme
|
BuildRequires: python3-sphinx python3-sphinx_rtd_theme
|
||||||
BuildRequires: doxygen
|
BuildRequires: doxygen
|
||||||
%endif
|
|
||||||
%if %{with DOCPDF}
|
%if %{with DOCPDF}
|
||||||
# Because remaining issues with COPR, allow turning off PDF (re)generation
|
# Because remaining issues with COPR, allow turning off PDF (re)generation
|
||||||
BuildRequires: python3-sphinx-latex latexmk texlive-xetex texlive-xindy
|
BuildRequires: python3-sphinx-latex latexmk texlive-xetex texlive-xindy
|
||||||
@ -157,48 +151,7 @@ which resolves host names to IP addresses; a resolver library
|
|||||||
(routines for applications to use when interfacing with DNS); and
|
(routines for applications to use when interfacing with DNS); and
|
||||||
tools for verifying that the DNS server is operating properly.
|
tools for verifying that the DNS server is operating properly.
|
||||||
|
|
||||||
%if %{with PKCS11}
|
|
||||||
%package pkcs11
|
|
||||||
Summary: Bind with native PKCS#11 functionality for crypto
|
|
||||||
Requires: bind%{?_isa} = %{epoch}:%{version}-%{release}
|
|
||||||
Requires: bind-libs%{?_isa} = %{epoch}:%{version}-%{release}
|
|
||||||
Requires: bind-pkcs11-libs%{?_isa} = %{epoch}:%{version}-%{release}
|
|
||||||
Recommends: softhsm
|
|
||||||
|
|
||||||
%description pkcs11
|
|
||||||
This is a version of BIND server built with native PKCS#11 functionality.
|
|
||||||
It is important to have SoftHSM v2+ installed and some token initialized.
|
|
||||||
For other supported HSM modules please check the BIND documentation.
|
|
||||||
|
|
||||||
%package pkcs11-utils
|
|
||||||
Summary: Bind tools with native PKCS#11 for using DNSSEC
|
|
||||||
Requires: bind-pkcs11-libs%{?_isa} = %{epoch}:%{version}-%{release}
|
|
||||||
Obsoletes: bind-pkcs11 < 32:9.9.4-16.P2
|
|
||||||
Requires: bind-dnssec-doc = %{epoch}:%{version}-%{release}
|
|
||||||
|
|
||||||
%description pkcs11-utils
|
|
||||||
This is a set of PKCS#11 utilities that when used together create rsa
|
|
||||||
keys in a PKCS11 keystore. Also utilities for working with DNSSEC
|
|
||||||
compiled with native PKCS#11 functionality are included.
|
|
||||||
|
|
||||||
%package pkcs11-libs
|
|
||||||
Summary: Bind libraries compiled with native PKCS#11
|
|
||||||
Requires: bind-license = %{epoch}:%{version}-%{release}
|
|
||||||
Requires: bind-libs%{?_isa} = %{epoch}:%{version}-%{release}
|
|
||||||
|
|
||||||
%description pkcs11-libs
|
|
||||||
This is a set of BIND libraries (dns, isc) compiled with native PKCS#11
|
|
||||||
functionality.
|
|
||||||
|
|
||||||
%package pkcs11-devel
|
|
||||||
Summary: Development files for Bind libraries compiled with native PKCS#11
|
|
||||||
Requires: bind-pkcs11-libs%{?_isa} = %{epoch}:%{version}-%{release}
|
|
||||||
Requires: bind-devel%{?_isa} = %{epoch}:%{version}-%{release}
|
|
||||||
|
|
||||||
%description pkcs11-devel
|
|
||||||
This a set of development files for BIND libraries (dns, isc) compiled
|
|
||||||
with native PKCS#11 functionality.
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%package libs
|
%package libs
|
||||||
Summary: Libraries used by the BIND DNS packages
|
Summary: Libraries used by the BIND DNS packages
|
||||||
@ -237,7 +190,6 @@ servers.
|
|||||||
Summary: DNSSEC keys and zones management utilities
|
Summary: DNSSEC keys and zones management utilities
|
||||||
Requires: bind-libs%{?_isa} = %{epoch}:%{version}-%{release}
|
Requires: bind-libs%{?_isa} = %{epoch}:%{version}-%{release}
|
||||||
Recommends: bind-utils
|
Recommends: bind-utils
|
||||||
Requires: python3-bind = %{epoch}:%{version}-%{release}
|
|
||||||
Requires: bind-dnssec-doc = %{epoch}:%{version}-%{release}
|
Requires: bind-dnssec-doc = %{epoch}:%{version}-%{release}
|
||||||
|
|
||||||
%description dnssec-utils
|
%description dnssec-utils
|
||||||
@ -264,6 +216,7 @@ Obsoletes: bind-lite-devel < 32:9.16.6-3
|
|||||||
Requires: bind-libs%{?_isa} = %{epoch}:%{version}-%{release}
|
Requires: bind-libs%{?_isa} = %{epoch}:%{version}-%{release}
|
||||||
Requires: openssl-devel%{?_isa} libxml2-devel%{?_isa}
|
Requires: openssl-devel%{?_isa} libxml2-devel%{?_isa}
|
||||||
Requires: libcap-devel%{?_isa}
|
Requires: libcap-devel%{?_isa}
|
||||||
|
|
||||||
%if %{with GSSTSIG}
|
%if %{with GSSTSIG}
|
||||||
Requires: krb5-devel%{?_isa}
|
Requires: krb5-devel%{?_isa}
|
||||||
%endif
|
%endif
|
||||||
@ -331,18 +284,6 @@ Requires: bind%{?_isa} = %{epoch}:%{version}-%{release}
|
|||||||
Dynamic Loadable Zones sqlite3 module for BIND server.
|
Dynamic Loadable Zones sqlite3 module for BIND server.
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
|
||||||
%package -n python3-bind
|
|
||||||
Summary: A module allowing rndc commands to be sent from Python programs
|
|
||||||
Requires: bind-license = %{epoch}:%{version}-%{release}
|
|
||||||
Requires: python3 python3-ply %{?py3_dist:%py3_dist ply}
|
|
||||||
BuildArch: noarch
|
|
||||||
%{?python_provide:%python_provide python3-bind}
|
|
||||||
%{?python_provide:%python_provide python3-isc}
|
|
||||||
|
|
||||||
%description -n python3-bind
|
|
||||||
This package provides a module which allows commands to be sent to rndc directly from Python programs.
|
|
||||||
|
|
||||||
%if %{with DOC}
|
%if %{with DOC}
|
||||||
%package doc
|
%package doc
|
||||||
Summary: BIND 9 Administrator Reference Manual
|
Summary: BIND 9 Administrator Reference Manual
|
||||||
@ -369,23 +310,14 @@ in HTML and PDF format.
|
|||||||
# Common patches
|
# Common patches
|
||||||
%autopatch -p1 -m 10
|
%autopatch -p1 -m 10
|
||||||
|
|
||||||
%if %{with PKCS11}
|
|
||||||
%autopatch -p1 -m 1 -M 1
|
|
||||||
cp -r bin/named{,-pkcs11}
|
|
||||||
cp -r bin/dnssec{,-pkcs11}
|
|
||||||
cp -r lib/dns{,-pkcs11}
|
|
||||||
cp -r lib/ns{,-pkcs11}
|
|
||||||
%autopatch -p1 -m 2 -M 9
|
|
||||||
%endif
|
|
||||||
|
|
||||||
# Sparc and s390 arches need to use -fPIE
|
# Sparc and s390 arches need to use -fPIE
|
||||||
%ifarch sparcv9 sparc64 s390 s390x
|
%ifarch sparcv9 sparc64 s390 s390x
|
||||||
for i in bin/named/{,unix}/Makefile.in; do
|
for i in bin/named/Makefile.am; do
|
||||||
sed -i 's|fpie|fPIE|g' $i
|
sed -i 's|fpie|fPIE|g' $i
|
||||||
done
|
done
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
sed -e 's|"$TOP/config.guess"|"$TOP_SRCDIR/config.guess"|' -i bin/tests/system/ifconfig.sh
|
|
||||||
:;
|
:;
|
||||||
|
|
||||||
|
|
||||||
@ -395,15 +327,12 @@ sed -e 's|"$TOP/config.guess"|"$TOP_SRCDIR/config.guess"|' -i bin/tests/system/i
|
|||||||
|
|
||||||
# normal and pkcs11 unit tests
|
# normal and pkcs11 unit tests
|
||||||
%define unit_prepare_build() \
|
%define unit_prepare_build() \
|
||||||
cp -uv Kyuafile "%{1}/" \
|
|
||||||
find lib -name 'K*.key' -exec cp -uv '{}' "%{1}/{}" ';' \
|
find lib -name 'K*.key' -exec cp -uv '{}' "%{1}/{}" ';' \
|
||||||
find lib -name 'Kyuafile' -exec cp -uv '{}' "%{1}/{}" ';' \
|
|
||||||
find lib -name 'testdata' -type d -exec cp -Tav '{}' "%{1}/{}" ';' \
|
find lib -name 'testdata' -type d -exec cp -Tav '{}' "%{1}/{}" ';' \
|
||||||
find lib -name 'testkeys' -type d -exec cp -Tav '{}' "%{1}/{}" ';' \
|
find lib -name 'testkeys' -type d -exec cp -Tav '{}' "%{1}/{}" ';' \
|
||||||
|
|
||||||
%define systemtest_prepare_build() \
|
%define systemtest_prepare_build() \
|
||||||
cp -Tuav bin/tests "%{1}/bin/tests/" \
|
cp -Tuav bin/tests "%{1}/bin/tests/" \
|
||||||
cp -uv version "%{1}" \
|
|
||||||
|
|
||||||
CFLAGS="$CFLAGS $RPM_OPT_FLAGS"
|
CFLAGS="$CFLAGS $RPM_OPT_FLAGS"
|
||||||
%if %{with TSAN}
|
%if %{with TSAN}
|
||||||
@ -417,7 +346,7 @@ export STD_CDEFINES="$CPPFLAGS"
|
|||||||
#'s/RELEASEVER=\(.*\)/RELEASEVER=\1-RH/' \
|
#'s/RELEASEVER=\(.*\)/RELEASEVER=\1-RH/' \
|
||||||
#version
|
#version
|
||||||
|
|
||||||
libtoolize -c -f; aclocal -I libtool.m4 --force; autoconf -f
|
autoconf --force
|
||||||
|
|
||||||
mkdir build
|
mkdir build
|
||||||
|
|
||||||
@ -431,8 +360,6 @@ pushd build
|
|||||||
LIBDIR_SUFFIX=
|
LIBDIR_SUFFIX=
|
||||||
export LIBDIR_SUFFIX
|
export LIBDIR_SUFFIX
|
||||||
%configure \
|
%configure \
|
||||||
--with-python=%{__python3} \
|
|
||||||
--with-libtool \
|
|
||||||
--localstatedir=%{_var} \
|
--localstatedir=%{_var} \
|
||||||
--with-pic \
|
--with-pic \
|
||||||
--disable-static \
|
--disable-static \
|
||||||
@ -442,11 +369,6 @@ export LIBDIR_SUFFIX
|
|||||||
%if %{with GEOIP2}
|
%if %{with GEOIP2}
|
||||||
--with-maxminddb \
|
--with-maxminddb \
|
||||||
%endif
|
%endif
|
||||||
%if %{with PKCS11}
|
|
||||||
--enable-native-pkcs11 \
|
|
||||||
--with-pkcs11=%{_libdir}/pkcs11/libsofthsm2.so \
|
|
||||||
%endif
|
|
||||||
--with-dlopen=yes \
|
|
||||||
%if %{with GSSTSIG}
|
%if %{with GSSTSIG}
|
||||||
--with-gssapi=yes \
|
--with-gssapi=yes \
|
||||||
%endif
|
%endif
|
||||||
@ -456,7 +378,7 @@ export LIBDIR_SUFFIX
|
|||||||
--with-lmdb=no \
|
--with-lmdb=no \
|
||||||
%endif
|
%endif
|
||||||
%if %{with JSON}
|
%if %{with JSON}
|
||||||
--without-libjson --with-json-c \
|
--with-json-c \
|
||||||
%endif
|
%endif
|
||||||
%if %{with DNSTAP}
|
%if %{with DNSTAP}
|
||||||
--enable-dnstap \
|
--enable-dnstap \
|
||||||
@ -471,9 +393,6 @@ export LIBDIR_SUFFIX
|
|||||||
pushd lib
|
pushd lib
|
||||||
SRCLIB="../../../lib"
|
SRCLIB="../../../lib"
|
||||||
(cd dns && ln -s ${SRCLIB}/dns/dnstap.proto)
|
(cd dns && ln -s ${SRCLIB}/dns/dnstap.proto)
|
||||||
%if %{with PKCS11}
|
|
||||||
(cd dns-pkcs11 && ln -s ${SRCLIB}/dns-pkcs11/dnstap.proto)
|
|
||||||
%endif
|
|
||||||
popd
|
popd
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
@ -486,15 +405,6 @@ fmtutil-user --missing || :
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%make_build
|
%make_build
|
||||||
|
|
||||||
# Regenerate dig.1 manpage
|
|
||||||
pushd bin/dig
|
|
||||||
make man
|
|
||||||
popd
|
|
||||||
pushd bin/python
|
|
||||||
make man
|
|
||||||
popd
|
|
||||||
|
|
||||||
%if %{with DOC}
|
%if %{with DOC}
|
||||||
make doc
|
make doc
|
||||||
%endif
|
%endif
|
||||||
@ -517,7 +427,7 @@ popd # build
|
|||||||
%systemtest_prepare_build build
|
%systemtest_prepare_build build
|
||||||
|
|
||||||
%check
|
%check
|
||||||
%if %{with PKCS11} && (%{with UNITTEST} || %{with SYSTEMTEST})
|
%if %{with UNITTEST} || %{with SYSTEMTEST}
|
||||||
# Tests require initialization of pkcs11 token
|
# Tests require initialization of pkcs11 token
|
||||||
eval "$(bash %{SOURCE48} -A "`pwd`/softhsm-tokens")"
|
eval "$(bash %{SOURCE48} -A "`pwd`/softhsm-tokens")"
|
||||||
%endif
|
%endif
|
||||||
@ -552,23 +462,6 @@ export TSAN_OPTIONS="log_exe_name=true log_path=ThreadSanitizer exitcode=0"
|
|||||||
if perl bin/tests/system/testsock.pl
|
if perl bin/tests/system/testsock.pl
|
||||||
then
|
then
|
||||||
CONFIGURED=already
|
CONFIGURED=already
|
||||||
else
|
|
||||||
CONFIGURED=
|
|
||||||
sh bin/tests/system/ifconfig.sh up
|
|
||||||
perl bin/tests/system/testsock.pl && CONFIGURED=build
|
|
||||||
fi
|
|
||||||
if [ -n "$CONFIGURED" ]
|
|
||||||
then
|
|
||||||
set -e
|
|
||||||
pushd build/bin/tests
|
|
||||||
chown -R ${USER} . # Can be unknown user
|
|
||||||
%make_build test 2>&1 | tee test.log
|
|
||||||
e=$?
|
|
||||||
popd
|
|
||||||
[ "$CONFIGURED" = build ] && sh bin/tests/system/ifconfig.sh down
|
|
||||||
if [ "$e" -ne 0 ]; then
|
|
||||||
echo "ERROR: this build of BIND failed 'make test'. Aborting."
|
|
||||||
exit $e;
|
|
||||||
fi;
|
fi;
|
||||||
else
|
else
|
||||||
echo 'SKIPPED: tests require root, CAP_NET_ADMIN or already configured test addresses.'
|
echo 'SKIPPED: tests require root, CAP_NET_ADMIN or already configured test addresses.'
|
||||||
@ -603,7 +496,6 @@ touch ${RPM_BUILD_ROOT}/%{chroot_prefix}%{_sysconfdir}/named.conf
|
|||||||
pushd build
|
pushd build
|
||||||
%make_install
|
%make_install
|
||||||
popd
|
popd
|
||||||
rpm -E %{_unitdir}
|
|
||||||
|
|
||||||
# Remove unwanted files
|
# Remove unwanted files
|
||||||
rm -f ${RPM_BUILD_ROOT}/etc/bind.keys
|
rm -f ${RPM_BUILD_ROOT}/etc/bind.keys
|
||||||
@ -615,36 +507,34 @@ install -m 644 %{SOURCE38} ${RPM_BUILD_ROOT}%{_unitdir}
|
|||||||
install -m 644 %{SOURCE44} ${RPM_BUILD_ROOT}%{_unitdir}
|
install -m 644 %{SOURCE44} ${RPM_BUILD_ROOT}%{_unitdir}
|
||||||
install -m 644 %{SOURCE46} ${RPM_BUILD_ROOT}%{_unitdir}
|
install -m 644 %{SOURCE46} ${RPM_BUILD_ROOT}%{_unitdir}
|
||||||
|
|
||||||
%if %{with PKCS11}
|
|
||||||
install -m 644 %{SOURCE47} ${RPM_BUILD_ROOT}%{_unitdir}
|
|
||||||
%else
|
|
||||||
# Not packaged without PKCS11
|
|
||||||
find ${RPM_BUILD_ROOT}%{_includedir}/bind9/pk11 ${RPM_BUILD_ROOT}%{_includedir}/bind9/pkcs11 \
|
|
||||||
-name '*.h' \! -name site.h -delete
|
|
||||||
|
|
||||||
%endif
|
|
||||||
|
|
||||||
mkdir -p ${RPM_BUILD_ROOT}%{_libexecdir}
|
mkdir -p ${RPM_BUILD_ROOT}%{_libexecdir}
|
||||||
install -m 755 %{SOURCE41} ${RPM_BUILD_ROOT}%{_libexecdir}/setup-named-chroot.sh
|
install -m 755 %{SOURCE41} ${RPM_BUILD_ROOT}%{_libexecdir}/setup-named-chroot.sh
|
||||||
install -m 755 %{SOURCE42} ${RPM_BUILD_ROOT}%{_libexecdir}/generate-rndc-key.sh
|
install -m 755 %{SOURCE42} ${RPM_BUILD_ROOT}%{_libexecdir}/generate-rndc-key.sh
|
||||||
|
|
||||||
%if %{with PKCS11}
|
|
||||||
install -m 755 %{SOURCE48} ${RPM_BUILD_ROOT}%{_libexecdir}/setup-named-softhsm.sh
|
install -m 755 %{SOURCE48} ${RPM_BUILD_ROOT}%{_libexecdir}/setup-named-softhsm.sh
|
||||||
%endif
|
|
||||||
|
|
||||||
install -m 644 %SOURCE3 ${RPM_BUILD_ROOT}/etc/logrotate.d/named
|
install -m 644 %SOURCE3 ${RPM_BUILD_ROOT}/etc/logrotate.d/named
|
||||||
mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig
|
mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig
|
||||||
install -m 644 %{SOURCE1} ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig/named
|
install -m 644 %{SOURCE1} ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig/named
|
||||||
install -m 644 %{SOURCE49} ${RPM_BUILD_ROOT}%{_sysconfdir}/named-chroot.files
|
install -m 644 %{SOURCE49} ${RPM_BUILD_ROOT}%{_sysconfdir}/named-chroot.files
|
||||||
|
|
||||||
|
pushd ${RPM_BUILD_ROOT}%{_sbindir}
|
||||||
|
# Compatibility with previous major versions, only for selected binaries
|
||||||
|
for BIN in named-checkconf named-checkzone named-compilezone
|
||||||
|
do
|
||||||
|
ln -s ../bin/$BIN $BIN
|
||||||
|
done
|
||||||
|
popd
|
||||||
|
|
||||||
%if %{with DLZ}
|
%if %{with DLZ}
|
||||||
pushd build
|
pushd build
|
||||||
pushd contrib/dlz/modules
|
pushd contrib/dlz/modules
|
||||||
for DIR in filesystem ldap mysql mysqldyn sqlite3; do
|
for DIR in filesystem ldap mysql mysqldyn sqlite3; do
|
||||||
%make_install -C $DIR libdir=%{_libdir}/named
|
%make_install -C $DIR libdir=%{_libdir}/bind
|
||||||
done
|
done
|
||||||
pushd ${RPM_BUILD_ROOT}/%{_libdir}/bind
|
pushd ${RPM_BUILD_ROOT}/%{_libdir}/named
|
||||||
cp -s ../named/dlz_*.so .
|
cp -s ../bind/dlz_*.so .
|
||||||
popd
|
popd
|
||||||
mkdir -p doc/{mysql,mysqldyn}
|
mkdir -p doc/{mysql,mysqldyn}
|
||||||
cp -p mysqldyn/testing/README doc/mysqldyn/README.testing
|
cp -p mysqldyn/testing/README doc/mysqldyn/README.testing
|
||||||
@ -654,27 +544,9 @@ install -m 644 %{SOURCE49} ${RPM_BUILD_ROOT}%{_sysconfdir}/named-chroot.files
|
|||||||
popd
|
popd
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
# Install isc/errno2result.h header
|
|
||||||
install -m 644 lib/isc/unix/errno2result.h ${RPM_BUILD_ROOT}%{_includedir}/bind9/isc
|
|
||||||
|
|
||||||
# Remove libtool .la files:
|
# Remove libtool .la files:
|
||||||
find ${RPM_BUILD_ROOT}/%{_libdir} -name '*.la' -exec '/bin/rm' '-f' '{}' ';';
|
find ${RPM_BUILD_ROOT}/%{_libdir} -name '*.la' -exec '/bin/rm' '-f' '{}' ';';
|
||||||
|
|
||||||
# PKCS11 versions manpages
|
|
||||||
%if %{with PKCS11}
|
|
||||||
pushd ${RPM_BUILD_ROOT}%{_mandir}/man8
|
|
||||||
ln -s named.8.gz named-pkcs11.8.gz
|
|
||||||
ln -s dnssec-checkds.8.gz dnssec-checkds-pkcs11.8.gz
|
|
||||||
ln -s dnssec-dsfromkey.8.gz dnssec-dsfromkey-pkcs11.8.gz
|
|
||||||
ln -s dnssec-importkey.8.gz dnssec-importkey-pkcs11.8.gz
|
|
||||||
ln -s dnssec-keyfromlabel.8.gz dnssec-keyfromlabel-pkcs11.8.gz
|
|
||||||
ln -s dnssec-keygen.8.gz dnssec-keygen-pkcs11.8.gz
|
|
||||||
ln -s dnssec-revoke.8.gz dnssec-revoke-pkcs11.8.gz
|
|
||||||
ln -s dnssec-settime.8.gz dnssec-settime-pkcs11.8.gz
|
|
||||||
ln -s dnssec-signzone.8.gz dnssec-signzone-pkcs11.8.gz
|
|
||||||
ln -s dnssec-verify.8.gz dnssec-verify-pkcs11.8.gz
|
|
||||||
popd
|
|
||||||
%endif
|
|
||||||
|
|
||||||
# 9.16.4 installs even manual pages for tools not generated
|
# 9.16.4 installs even manual pages for tools not generated
|
||||||
%if %{without DNSTAP}
|
%if %{without DNSTAP}
|
||||||
@ -686,7 +558,9 @@ rm -f ${RPM_BUILD_ROOT}%{_mandir}/man8/named-nzd2nzf.8* || true
|
|||||||
|
|
||||||
pushd ${RPM_BUILD_ROOT}%{_mandir}/man8
|
pushd ${RPM_BUILD_ROOT}%{_mandir}/man8
|
||||||
ln -s ddns-confgen.8.gz tsig-keygen.8.gz
|
ln -s ddns-confgen.8.gz tsig-keygen.8.gz
|
||||||
ln -s named-checkzone.8.gz named-compilezone.8.gz
|
popd
|
||||||
|
pushd ${RPM_BUILD_ROOT}%{_mandir}/man1
|
||||||
|
ln -s named-checkzone.1.gz named-compilezone.1.gz
|
||||||
popd
|
popd
|
||||||
|
|
||||||
%if %{with DOC}
|
%if %{with DOC}
|
||||||
@ -695,19 +569,13 @@ cp -a build/doc/arm/_build/html ${RPM_BUILD_ROOT}%{_pkgdocdir}
|
|||||||
rm -rf ${RPM_BUILD_ROOT}%{_pkgdocdir}/html/.{buildinfo,doctrees}
|
rm -rf ${RPM_BUILD_ROOT}%{_pkgdocdir}/html/.{buildinfo,doctrees}
|
||||||
# Backward compatible link to 9.11 documentation
|
# Backward compatible link to 9.11 documentation
|
||||||
(cd ${RPM_BUILD_ROOT}%{_pkgdocdir} && ln -s html/index.html Bv9ARM.html)
|
(cd ${RPM_BUILD_ROOT}%{_pkgdocdir} && ln -s html/index.html Bv9ARM.html)
|
||||||
# Share static data from original sphinx package
|
|
||||||
for DIR in %{python3_sitelib}/sphinx_rtd_theme/static/*
|
|
||||||
do
|
|
||||||
BASE=$(basename -- "$DIR")
|
|
||||||
BINDTHEMEDIR="${RPM_BUILD_ROOT}%{_pkgdocdir}/html/_static/$BASE"
|
|
||||||
if [ -d "$BINDTHEMEDIR" ]; then
|
|
||||||
rm -rf "$BINDTHEMEDIR"
|
rm -rf "$BINDTHEMEDIR"
|
||||||
ln -s "$DIR" "$BINDTHEMEDIR"
|
ln -s "$DIR" "$BINDTHEMEDIR"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
%endif
|
%endif
|
||||||
%if %{with DOCPDF}
|
%if %{with DOCPDF}
|
||||||
cp -a build/doc/arm/Bv9ARM.pdf ${RPM_BUILD_ROOT}%{_pkgdocdir}
|
cp -a build/doc/arm/_build/latex/Bv9ARM.pdf ${RPM_BUILD_ROOT}%{_pkgdocdir}
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
# Ghost config files:
|
# Ghost config files:
|
||||||
@ -734,7 +602,6 @@ install -m 644 %{SOURCE25} sample/etc/named.conf
|
|||||||
# Copy default configuration to %%doc to make it usable from system-config-bind
|
# Copy default configuration to %%doc to make it usable from system-config-bind
|
||||||
install -m 644 %{SOURCE16} named.conf.default
|
install -m 644 %{SOURCE16} named.conf.default
|
||||||
install -m 644 %{SOURCE23} sample/etc/named.rfc1912.zones
|
install -m 644 %{SOURCE23} sample/etc/named.rfc1912.zones
|
||||||
install -m 644 %{SOURCE18} %{SOURCE19} %{SOURCE20} sample/var/named
|
|
||||||
install -m 644 %{SOURCE17} sample/var/named/named.ca
|
install -m 644 %{SOURCE17} sample/var/named/named.ca
|
||||||
for f in my.internal.zone.db slaves/my.slave.internal.zone.db slaves/my.ddns.internal.zone.db my.external.zone.db; do
|
for f in my.internal.zone.db slaves/my.slave.internal.zone.db slaves/my.ddns.internal.zone.db my.external.zone.db; do
|
||||||
echo '@ in soa localhost. root 1 3H 15M 1W 1D
|
echo '@ in soa localhost. root 1 3H 15M 1W 1D
|
||||||
@ -773,7 +640,7 @@ else
|
|||||||
/sbin/usermod -s /sbin/nologin named
|
/sbin/usermod -s /sbin/nologin named
|
||||||
fi
|
fi
|
||||||
# Checkconf will parse out comments
|
# Checkconf will parse out comments
|
||||||
if /usr/sbin/named-checkconf -p /etc/named.conf 2>/dev/null | grep -q named.iscdlv.key
|
if /usr/bin/named-checkconf -p /etc/named.conf 2>/dev/null | grep -q named.iscdlv.key
|
||||||
then
|
then
|
||||||
echo "Replacing obsolete named.iscdlv.key with named.root.key..."
|
echo "Replacing obsolete named.iscdlv.key with named.root.key..."
|
||||||
if cp -Rf --preserve=all --remove-destination /etc/named.conf /etc/named.conf.rpmbackup; then
|
if cp -Rf --preserve=all --remove-destination /etc/named.conf /etc/named.conf.rpmbackup; then
|
||||||
@ -799,19 +666,6 @@ if [ -e "%{_sysconfdir}/selinux/config" ]; then
|
|||||||
%selinux_unset_booleans -s mls %{selinuxbooleans}
|
%selinux_unset_booleans -s mls %{selinuxbooleans}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
%if %{with PKCS11}
|
|
||||||
%post pkcs11
|
|
||||||
# Initial installation
|
|
||||||
%systemd_post named-pkcs11.service
|
|
||||||
|
|
||||||
%preun pkcs11
|
|
||||||
# Package removal, not upgrade
|
|
||||||
%systemd_preun named-pkcs11.service
|
|
||||||
|
|
||||||
%postun pkcs11
|
|
||||||
# Package upgrade, not uninstall
|
|
||||||
%systemd_postun_with_restart named-pkcs11.service
|
|
||||||
%endif
|
|
||||||
|
|
||||||
# Fix permissions on existing device files on upgrade
|
# Fix permissions on existing device files on upgrade
|
||||||
%define chroot_fix_devices() \
|
%define chroot_fix_devices() \
|
||||||
@ -831,9 +685,7 @@ fi
|
|||||||
|
|
||||||
%ldconfig_scriptlets libs
|
%ldconfig_scriptlets libs
|
||||||
|
|
||||||
%if %{with PKCS11}
|
|
||||||
%ldconfig_scriptlets pkcs11-libs
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%post chroot
|
%post chroot
|
||||||
%systemd_post named-chroot.service
|
%systemd_post named-chroot.service
|
||||||
@ -859,7 +711,7 @@ fi;
|
|||||||
%files
|
%files
|
||||||
%dir %{_libdir}/bind
|
%dir %{_libdir}/bind
|
||||||
%dir %{_libdir}/named
|
%dir %{_libdir}/named
|
||||||
%{_libdir}/named/*.so
|
%{_libdir}/bind/filter*.so
|
||||||
%config(noreplace) %verify(not md5 size mtime) %{_sysconfdir}/sysconfig/named
|
%config(noreplace) %verify(not md5 size mtime) %{_sysconfdir}/sysconfig/named
|
||||||
%config(noreplace) %attr(0644,root,named) %{_sysconfdir}/named.root.key
|
%config(noreplace) %attr(0644,root,named) %{_sysconfdir}/named.root.key
|
||||||
%config(noreplace) %{_sysconfdir}/logrotate.d/named
|
%config(noreplace) %{_sysconfdir}/logrotate.d/named
|
||||||
@ -867,24 +719,26 @@ fi;
|
|||||||
%{_sysconfdir}/rwtab.d/named
|
%{_sysconfdir}/rwtab.d/named
|
||||||
%{_unitdir}/named.service
|
%{_unitdir}/named.service
|
||||||
%{_unitdir}/named-setup-rndc.service
|
%{_unitdir}/named-setup-rndc.service
|
||||||
%{_sbindir}/named-journalprint
|
%{_bindir}/named-journalprint
|
||||||
%{_sbindir}/named-checkconf
|
%{_bindir}/named-checkconf
|
||||||
%{_bindir}/named-rrchecker
|
%{_bindir}/named-rrchecker
|
||||||
%{_bindir}/mdig
|
%{_bindir}/mdig
|
||||||
%{_sbindir}/named
|
%{_sbindir}/named
|
||||||
%{_sbindir}/rndc*
|
%{_sbindir}/rndc*
|
||||||
|
%{_sbindir}/named-checkconf
|
||||||
%{_libexecdir}/generate-rndc-key.sh
|
%{_libexecdir}/generate-rndc-key.sh
|
||||||
|
%{_libexecdir}/setup-named-softhsm.sh
|
||||||
%{_mandir}/man1/mdig.1*
|
%{_mandir}/man1/mdig.1*
|
||||||
%{_mandir}/man1/named-rrchecker.1*
|
%{_mandir}/man1/named-rrchecker.1*
|
||||||
%{_mandir}/man5/named.conf.5*
|
%{_mandir}/man5/named.conf.5*
|
||||||
%{_mandir}/man5/rndc.conf.5*
|
%{_mandir}/man5/rndc.conf.5*
|
||||||
%{_mandir}/man8/rndc.8*
|
%{_mandir}/man8/rndc.8*
|
||||||
%{_mandir}/man8/named.8*
|
%{_mandir}/man8/named.8*
|
||||||
%{_mandir}/man8/named-checkconf.8*
|
%{_mandir}/man1/named-checkconf.1*
|
||||||
%{_mandir}/man8/rndc-confgen.8*
|
%{_mandir}/man8/rndc-confgen.8*
|
||||||
%{_mandir}/man8/named-journalprint.8*
|
%{_mandir}/man1/named-journalprint.1*
|
||||||
%{_mandir}/man8/filter-aaaa.8.gz
|
%{_mandir}/man8/filter-*.8.gz
|
||||||
%doc CHANGES README named.conf.default
|
%doc CHANGES README.md named.conf.default
|
||||||
%doc sample/
|
%doc sample/
|
||||||
|
|
||||||
# Hide configuration
|
# Hide configuration
|
||||||
@ -934,7 +788,9 @@ fi;
|
|||||||
%{_bindir}/arpaname
|
%{_bindir}/arpaname
|
||||||
%{_sbindir}/ddns-confgen
|
%{_sbindir}/ddns-confgen
|
||||||
%{_sbindir}/tsig-keygen
|
%{_sbindir}/tsig-keygen
|
||||||
%{_sbindir}/nsec3hash
|
%{_bindir}/nsec3hash
|
||||||
|
%{_bindir}/named-checkzone
|
||||||
|
%{_bindir}/named-compilezone
|
||||||
%{_sbindir}/named-checkzone
|
%{_sbindir}/named-checkzone
|
||||||
%{_sbindir}/named-compilezone
|
%{_sbindir}/named-compilezone
|
||||||
%if %{with DNSTAP}
|
%if %{with DNSTAP}
|
||||||
@ -942,8 +798,8 @@ fi;
|
|||||||
%{_mandir}/man1/dnstap-read.1*
|
%{_mandir}/man1/dnstap-read.1*
|
||||||
%endif
|
%endif
|
||||||
%if %{with LMDB}
|
%if %{with LMDB}
|
||||||
%{_sbindir}/named-nzd2nzf
|
%{_bindir}/named-nzd2nzf
|
||||||
%{_mandir}/man8/named-nzd2nzf.8*
|
%{_mandir}/man1/named-nzd2nzf.1*
|
||||||
%endif
|
%endif
|
||||||
%{_mandir}/man1/host.1*
|
%{_mandir}/man1/host.1*
|
||||||
%{_mandir}/man1/nsupdate.1*
|
%{_mandir}/man1/nsupdate.1*
|
||||||
@ -953,22 +809,17 @@ fi;
|
|||||||
%{_mandir}/man1/arpaname.1*
|
%{_mandir}/man1/arpaname.1*
|
||||||
%{_mandir}/man8/ddns-confgen.8*
|
%{_mandir}/man8/ddns-confgen.8*
|
||||||
%{_mandir}/man8/tsig-keygen.8*
|
%{_mandir}/man8/tsig-keygen.8*
|
||||||
%{_mandir}/man8/nsec3hash.8*
|
%{_mandir}/man1/nsec3hash.1*
|
||||||
%{_mandir}/man8/named-checkzone.8*
|
%{_mandir}/man1/named-checkzone.1*
|
||||||
%{_mandir}/man8/named-compilezone.8*
|
%{_mandir}/man1/named-compilezone.1*
|
||||||
%{_sysconfdir}/trusted-key.key
|
%{_sysconfdir}/trusted-key.key
|
||||||
|
|
||||||
%files dnssec-utils
|
%files dnssec-utils
|
||||||
%{_sbindir}/dnssec*
|
%{_bindir}/dnssec*
|
||||||
%if %{with PKCS11}
|
|
||||||
%exclude %{_sbindir}/dnssec*pkcs11
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%files dnssec-doc
|
%files dnssec-doc
|
||||||
%{_mandir}/man8/dnssec*.8*
|
%{_mandir}/man1/dnssec*.1*
|
||||||
%if %{with PKCS11}
|
|
||||||
%exclude %{_mandir}/man8/dnssec*-pkcs11.8*
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%files devel
|
%files devel
|
||||||
%{_libdir}/libbind9.so
|
%{_libdir}/libbind9.so
|
||||||
@ -986,8 +837,7 @@ fi;
|
|||||||
%{_includedir}/bind9/dst
|
%{_includedir}/bind9/dst
|
||||||
%{_includedir}/bind9/irs
|
%{_includedir}/bind9/irs
|
||||||
%{_includedir}/bind9/isc
|
%{_includedir}/bind9/isc
|
||||||
%dir %{_includedir}/bind9/pk11
|
|
||||||
%{_includedir}/bind9/pk11/site.h
|
|
||||||
%{_includedir}/bind9/isccfg
|
%{_includedir}/bind9/isccfg
|
||||||
|
|
||||||
%files chroot
|
%files chroot
|
||||||
@ -1027,33 +877,6 @@ fi;
|
|||||||
%dir %{chroot_prefix}/run/named
|
%dir %{chroot_prefix}/run/named
|
||||||
%{chroot_prefix}%{_localstatedir}/run
|
%{chroot_prefix}%{_localstatedir}/run
|
||||||
|
|
||||||
%if %{with PKCS11}
|
|
||||||
%files pkcs11
|
|
||||||
%{_sbindir}/named-pkcs11
|
|
||||||
%{_unitdir}/named-pkcs11.service
|
|
||||||
%{_mandir}/man8/named-pkcs11.8*
|
|
||||||
%{_libexecdir}/setup-named-softhsm.sh
|
|
||||||
|
|
||||||
%files pkcs11-utils
|
|
||||||
%{_sbindir}/dnssec*pkcs11
|
|
||||||
%{_sbindir}/pkcs11-destroy
|
|
||||||
%{_sbindir}/pkcs11-keygen
|
|
||||||
%{_sbindir}/pkcs11-list
|
|
||||||
%{_sbindir}/pkcs11-tokens
|
|
||||||
%{_mandir}/man8/pkcs11*.8*
|
|
||||||
%{_mandir}/man8/dnssec*-pkcs11.8*
|
|
||||||
|
|
||||||
%files pkcs11-libs
|
|
||||||
%{_libdir}/libdns-pkcs11-%{version}*.so
|
|
||||||
%{_libdir}/libns-pkcs11-%{version}*.so
|
|
||||||
|
|
||||||
%files pkcs11-devel
|
|
||||||
%{_includedir}/bind9/pk11/*.h
|
|
||||||
%exclude %{_includedir}/bind9/pk11/site.h
|
|
||||||
%{_includedir}/bind9/pkcs11
|
|
||||||
%{_libdir}/libdns-pkcs11.so
|
|
||||||
%{_libdir}/libns-pkcs11.so
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%if %{with DLZ}
|
%if %{with DLZ}
|
||||||
%files dlz-filesystem
|
%files dlz-filesystem
|
||||||
@ -1075,9 +898,6 @@ fi;
|
|||||||
|
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%files -n python3-bind
|
|
||||||
%{python3_sitelib}/*.egg-info
|
|
||||||
%{python3_sitelib}/isc/
|
|
||||||
|
|
||||||
%if %{with DOC}
|
%if %{with DOC}
|
||||||
%files doc
|
%files doc
|
||||||
@ -1090,6 +910,36 @@ fi;
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 08 2025 chengyechun<chengyechun1@huawei.com> - 32:9.18.21-4
|
||||||
|
- Type:CVE
|
||||||
|
- CVE:CVE-2024-11187,CVE-2024-12705
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix CVE-2024-111878 and CVE-2024-12705
|
||||||
|
|
||||||
|
* Fri Aug 02 2024 chengyechun<chengyechun1@huawei.com> - 32:9.18.21-3
|
||||||
|
- Type:CVE
|
||||||
|
- CVE:CVE-2024-0760,CVE-2024-1737,CVE-2024-1975,CVE-2024-4076
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix CVE-2024-0760,CVE-2024-1737,CVE-2024-1975,CVE-2024-4076
|
||||||
|
|
||||||
|
* Tue Mar 19 2024 chengyechun<chengyechun1@huawei.com> - 32:9.18.21-2
|
||||||
|
- Type:CVE
|
||||||
|
- CVE:CVE-2023-4408 CVE-2023-5517 CVE-2023-5679 CVE-2023-50387 CVE-2023-50868
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix CVE-2023-4408 CVE-2023-5517 CVE-2023-5679 CVE-2023-50387 CVE-2023-50868
|
||||||
|
|
||||||
|
* Sun Feb 04 2024 zhanghao<zhanghao383@huawei.com> - 32:9.18.21-1
|
||||||
|
- Type:requirement
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:version update to 9.18.21
|
||||||
|
|
||||||
|
* Tue Sep 26 2023 zhanghao<zhanghao383@huawei.com> - 32:9.16.37-6
|
||||||
|
- Type:CVE
|
||||||
|
- CVE:CVE-2023-3341
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix CVE-2023-3341
|
||||||
|
|
||||||
* Mon Sep 25 2023 zhanghao<zhanghao383@huawei.com> - 32:9.16.37-5
|
* Mon Sep 25 2023 zhanghao<zhanghao383@huawei.com> - 32:9.16.37-5
|
||||||
- Type:CVE
|
- Type:CVE
|
||||||
- CVE:CVE-2023-2911
|
- CVE:CVE-2023-2911
|
||||||
|
|||||||
@ -1,34 +0,0 @@
|
|||||||
diff --git a/lib/isc/lex.c b/lib/isc/lex.c
|
|
||||||
index cd44fe3..5b7c539 100644
|
|
||||||
--- a/lib/isc/lex.c
|
|
||||||
+++ b/lib/isc/lex.c
|
|
||||||
@@ -27,6 +27,8 @@
|
|
||||||
#include <isc/string.h>
|
|
||||||
#include <isc/util.h>
|
|
||||||
|
|
||||||
+#include "../errno2result.h"
|
|
||||||
+
|
|
||||||
typedef struct inputsource {
|
|
||||||
isc_result_t result;
|
|
||||||
bool is_file;
|
|
||||||
@@ -422,7 +424,7 @@ isc_lex_gettoken(isc_lex_t *lex, unsigned int options, isc_token_t *tokenp) {
|
|
||||||
#endif /* if defined(HAVE_FLOCKFILE) && defined(HAVE_GETC_UNLOCKED) */
|
|
||||||
if (c == EOF) {
|
|
||||||
if (ferror(stream)) {
|
|
||||||
- source->result = ISC_R_IOERROR;
|
|
||||||
+ source->result = isc__errno2result(errno);
|
|
||||||
result = source->result;
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
diff --git a/lib/isc/unix/errno2result.c b/lib/isc/unix/errno2result.c
|
|
||||||
index e3e2644..5e58600 100644
|
|
||||||
--- a/lib/isc/unix/errno2result.c
|
|
||||||
+++ b/lib/isc/unix/errno2result.c
|
|
||||||
@@ -37,6 +37,7 @@ isc___errno2result(int posixerrno, bool dolog, const char *file,
|
|
||||||
case EINVAL: /* XXX sometimes this is not for files */
|
|
||||||
case ENAMETOOLONG:
|
|
||||||
case EBADF:
|
|
||||||
+ case EISDIR:
|
|
||||||
return (ISC_R_INVALIDFILE);
|
|
||||||
case ENOENT:
|
|
||||||
return (ISC_R_FILENOTFOUND);
|
|
||||||
@ -1,226 +0,0 @@
|
|||||||
diff -up bind-9.9.3rc2/isc-config.sh.in.exportlib bind-9.9.3rc2/isc-config.sh.in
|
|
||||||
diff -up bind-9.9.3rc2/lib/export/dns/Makefile.in.exportlib bind-9.9.3rc2/lib/export/dns/Makefile.in
|
|
||||||
--- bind-9.9.3rc2/lib/export/dns/Makefile.in.exportlib 2013-04-30 08:38:46.000000000 +0200
|
|
||||||
+++ bind-9.9.3rc2/lib/export/dns/Makefile.in 2013-05-13 10:45:22.574089729 +0200
|
|
||||||
@@ -35,9 +35,9 @@ CDEFINES = -DUSE_MD5 @USE_OPENSSL@ @USE_
|
|
||||||
|
|
||||||
CWARNINGS =
|
|
||||||
|
|
||||||
-ISCLIBS = ../isc/libisc.@A@
|
|
||||||
+ISCLIBS = ../isc/libisc-export.@A@
|
|
||||||
|
|
||||||
-ISCDEPLIBS = ../isc/libisc.@A@
|
|
||||||
+ISCDEPLIBS = ../isc/libisc-export.@A@
|
|
||||||
|
|
||||||
LIBS = @LIBS@
|
|
||||||
|
|
||||||
@@ -116,29 +116,29 @@ version.@O@: ${srcdir}/version.c
|
|
||||||
-DLIBAGE=${LIBAGE} \
|
|
||||||
-c ${srcdir}/version.c
|
|
||||||
|
|
||||||
-libdns.@SA@: ${OBJS}
|
|
||||||
+libdns-export.@SA@: ${OBJS}
|
|
||||||
${AR} ${ARFLAGS} $@ ${OBJS}
|
|
||||||
${RANLIB} $@
|
|
||||||
|
|
||||||
-libdns.la: ${OBJS}
|
|
||||||
+libdns-export.la: ${OBJS}
|
|
||||||
${LIBTOOL_MODE_LINK} \
|
|
||||||
- ${CC} ${ALL_CFLAGS} ${LDFLAGS} -o libdns.la \
|
|
||||||
+ ${CC} ${ALL_CFLAGS} ${LDFLAGS} -o libdns-export.la \
|
|
||||||
-rpath ${export_libdir} \
|
|
||||||
-version-info ${LIBINTERFACE}:${LIBREVISION}:${LIBAGE} \
|
|
||||||
${OBJS} ${ISCLIBS} @DNS_CRYPTO_LIBS@ ${LIBS}
|
|
||||||
|
|
||||||
-timestamp: libdns.@A@
|
|
||||||
+timestamp: libdns-export.@A@
|
|
||||||
touch timestamp
|
|
||||||
|
|
||||||
installdirs:
|
|
||||||
$(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${export_libdir}
|
|
||||||
|
|
||||||
install:: timestamp installdirs
|
|
||||||
- ${LIBTOOL_MODE_INSTALL} ${INSTALL_DATA} libdns.@A@ \
|
|
||||||
+ ${LIBTOOL_MODE_INSTALL} ${INSTALL_PROGRAM} libdns-export.@A@ \
|
|
||||||
${DESTDIR}${export_libdir}/
|
|
||||||
|
|
||||||
clean distclean::
|
|
||||||
- rm -f libdns.@A@ timestamp
|
|
||||||
+ rm -f libdns-export.@A@ timestamp
|
|
||||||
rm -f gen code.h include/dns/enumtype.h include/dns/enumclass.h
|
|
||||||
rm -f include/dns/rdatastruct.h
|
|
||||||
|
|
||||||
diff -up bind-9.9.3rc2/lib/export/irs/Makefile.in.exportlib bind-9.9.3rc2/lib/export/irs/Makefile.in
|
|
||||||
--- bind-9.9.3rc2/lib/export/irs/Makefile.in.exportlib 2013-04-30 08:38:46.000000000 +0200
|
|
||||||
+++ bind-9.9.3rc2/lib/export/irs/Makefile.in 2013-05-13 10:45:22.575089729 +0200
|
|
||||||
@@ -43,9 +43,9 @@ SRCS = context.c \
|
|
||||||
gai_sterror.c getaddrinfo.c getnameinfo.c \
|
|
||||||
resconf.c
|
|
||||||
|
|
||||||
-ISCLIBS = ../isc/libisc.@A@
|
|
||||||
-DNSLIBS = ../dns/libdns.@A@
|
|
||||||
-ISCCFGLIBS = ../isccfg/libisccfg.@A@
|
|
||||||
+ISCLIBS = ../isc/libisc-export.@A@
|
|
||||||
+DNSLIBS = ../dns/libdns-export.@A@
|
|
||||||
+ISCCFGLIBS = ../isccfg/libisccfg-export.@A@
|
|
||||||
|
|
||||||
LIBS = @LIBS@
|
|
||||||
|
|
||||||
@@ -62,26 +62,26 @@ version.@O@: ${srcdir}/version.c
|
|
||||||
-DLIBAGE=${LIBAGE} \
|
|
||||||
-c ${srcdir}/version.c
|
|
||||||
|
|
||||||
-libirs.@SA@: ${OBJS} version.@O@
|
|
||||||
+libirs-export.@SA@: ${OBJS} version.@O@
|
|
||||||
${AR} ${ARFLAGS} $@ ${OBJS} version.@O@
|
|
||||||
${RANLIB} $@
|
|
||||||
|
|
||||||
-libirs.la: ${OBJS} version.@O@
|
|
||||||
+libirs-export.la: ${OBJS} version.@O@
|
|
||||||
${LIBTOOL_MODE_LINK} \
|
|
||||||
- ${CC} ${ALL_CFLAGS} ${LDFLAGS} -o libirs.la \
|
|
||||||
+ ${CC} ${ALL_CFLAGS} ${LDFLAGS} -o libirs-export.la \
|
|
||||||
-rpath ${export_libdir} \
|
|
||||||
-version-info ${LIBINTERFACE}:${LIBREVISION}:${LIBAGE} \
|
|
||||||
${OBJS} version.@O@ ${LIBS} ${ISCCFGLIBS} ${DNSLIBS} ${ISCLIBS}
|
|
||||||
|
|
||||||
-timestamp: libirs.@A@
|
|
||||||
+timestamp: libirs-export.@A@
|
|
||||||
touch timestamp
|
|
||||||
|
|
||||||
installdirs:
|
|
||||||
$(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${export_libdir}
|
|
||||||
|
|
||||||
install:: timestamp installdirs
|
|
||||||
- ${LIBTOOL_MODE_INSTALL} ${INSTALL_DATA} libirs.@A@ \
|
|
||||||
+ ${LIBTOOL_MODE_INSTALL} ${INSTALL_PROGRAM} libirs-export.@A@ \
|
|
||||||
${DESTDIR}${export_libdir}/
|
|
||||||
|
|
||||||
clean distclean::
|
|
||||||
- rm -f libirs.@A@ libirs.la timestamp
|
|
||||||
+ rm -f libirs-export.@A@ libirs-export.la timestamp
|
|
||||||
diff -up bind-9.9.3rc2/lib/export/isccfg/Makefile.in.exportlib bind-9.9.3rc2/lib/export/isccfg/Makefile.in
|
|
||||||
--- bind-9.9.3rc2/lib/export/isccfg/Makefile.in.exportlib 2013-04-30 08:38:46.000000000 +0200
|
|
||||||
+++ bind-9.9.3rc2/lib/export/isccfg/Makefile.in 2013-05-13 10:45:22.576089729 +0200
|
|
||||||
@@ -30,11 +30,11 @@ CINCLUDES = -I. ${DNS_INCLUDES} -I${expo
|
|
||||||
CDEFINES =
|
|
||||||
CWARNINGS =
|
|
||||||
|
|
||||||
-ISCLIBS = ../isc/libisc.@A@
|
|
||||||
-DNSLIBS = ../dns/libdns.@A@ @DNS_CRYPTO_LIBS@
|
|
||||||
+ISCLIBS = ../isc/libisc-export.@A@
|
|
||||||
+DNSLIBS = ../dns/libdns-export.@A@ @DNS_CRYPTO_LIBS@
|
|
||||||
|
|
||||||
ISCDEPLIBS = ../../lib/isc/libisc.@A@
|
|
||||||
-ISCCFGDEPLIBS = libisccfg.@A@
|
|
||||||
+ISCCFGDEPLIBS = libisccfg-export.@A@
|
|
||||||
|
|
||||||
LIBS = @LIBS@
|
|
||||||
|
|
||||||
@@ -58,26 +58,26 @@ version.@O@: ${srcdir}/version.c
|
|
||||||
-DLIBAGE=${LIBAGE} \
|
|
||||||
-c ${srcdir}/version.c
|
|
||||||
|
|
||||||
-libisccfg.@SA@: ${OBJS}
|
|
||||||
+libisccfg-export.@SA@: ${OBJS}
|
|
||||||
${AR} ${ARFLAGS} $@ ${OBJS}
|
|
||||||
${RANLIB} $@
|
|
||||||
|
|
||||||
-libisccfg.la: ${OBJS}
|
|
||||||
+libisccfg-export.la: ${OBJS}
|
|
||||||
${LIBTOOL_MODE_LINK} \
|
|
||||||
- ${CC} ${ALL_CFLAGS} ${LDFLAGS} -o libisccfg.la \
|
|
||||||
+ ${CC} ${ALL_CFLAGS} ${LDFLAGS} -o libisccfg-export.la \
|
|
||||||
-rpath ${export_libdir} \
|
|
||||||
-version-info ${LIBINTERFACE}:${LIBREVISION}:${LIBAGE} \
|
|
||||||
${OBJS} ${LIBS} ${DNSLIBS} ${ISCLIBS}
|
|
||||||
|
|
||||||
-timestamp: libisccfg.@A@
|
|
||||||
+timestamp: libisccfg-export.@A@
|
|
||||||
touch timestamp
|
|
||||||
|
|
||||||
installdirs:
|
|
||||||
$(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${export_libdir}
|
|
||||||
|
|
||||||
install:: timestamp installdirs
|
|
||||||
- ${LIBTOOL_MODE_INSTALL} ${INSTALL_DATA} libisccfg.@A@ \
|
|
||||||
+ ${LIBTOOL_MODE_INSTALL} ${INSTALL_PROGRAM} libisccfg-export.@A@ \
|
|
||||||
${DESTDIR}${export_libdir}/
|
|
||||||
|
|
||||||
clean distclean::
|
|
||||||
- rm -f libisccfg.@A@ timestamp
|
|
||||||
+ rm -f libisccfg-export.@A@ timestamp
|
|
||||||
diff -up bind-9.9.3rc2/lib/export/isc/Makefile.in.exportlib bind-9.9.3rc2/lib/export/isc/Makefile.in
|
|
||||||
--- bind-9.9.3rc2/lib/export/isc/Makefile.in.exportlib 2013-04-30 08:38:46.000000000 +0200
|
|
||||||
+++ bind-9.9.3rc2/lib/export/isc/Makefile.in 2013-05-13 10:45:22.576089729 +0200
|
|
||||||
@@ -100,6 +100,10 @@ SRCS = @ISC_EXTRA_SRCS@ \
|
|
||||||
|
|
||||||
LIBS = @LIBS@
|
|
||||||
|
|
||||||
+# Note: the order of SUBDIRS is important.
|
|
||||||
+# Attempt to disable parallel processing.
|
|
||||||
+.NOTPARALLEL:
|
|
||||||
+.NO_PARALLEL:
|
|
||||||
SUBDIRS = include unix nls @ISC_THREAD_DIR@
|
|
||||||
TARGETS = timestamp
|
|
||||||
|
|
||||||
@@ -113,26 +117,26 @@ version.@O@: ${srcdir}/version.c
|
|
||||||
-DLIBAGE=${LIBAGE} \
|
|
||||||
-c ${srcdir}/version.c
|
|
||||||
|
|
||||||
-libisc.@SA@: ${OBJS}
|
|
||||||
+libisc-export.@SA@: ${OBJS}
|
|
||||||
${AR} ${ARFLAGS} $@ ${OBJS}
|
|
||||||
${RANLIB} $@
|
|
||||||
|
|
||||||
-libisc.la: ${OBJS}
|
|
||||||
+libisc-export.la: ${OBJS}
|
|
||||||
${LIBTOOL_MODE_LINK} \
|
|
||||||
- ${CC} ${ALL_CFLAGS} ${LDFLAGS} -o libisc.la \
|
|
||||||
+ ${CC} ${ALL_CFLAGS} ${LDFLAGS} -o libisc-export.la \
|
|
||||||
-rpath ${export_libdir} \
|
|
||||||
-version-info ${LIBINTERFACE}:${LIBREVISION}:${LIBAGE} \
|
|
||||||
${OBJS} ${LIBS}
|
|
||||||
|
|
||||||
-timestamp: libisc.@A@
|
|
||||||
+timestamp: libisc-export.@A@
|
|
||||||
touch timestamp
|
|
||||||
|
|
||||||
installdirs:
|
|
||||||
$(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${export_libdir}
|
|
||||||
|
|
||||||
install:: timestamp installdirs
|
|
||||||
- ${LIBTOOL_MODE_INSTALL} ${INSTALL_DATA} libisc.@A@ \
|
|
||||||
+ ${LIBTOOL_MODE_INSTALL} ${INSTALL_PROGRAM} libisc-export.@A@ \
|
|
||||||
${DESTDIR}${export_libdir}
|
|
||||||
|
|
||||||
clean distclean::
|
|
||||||
- rm -f libisc.@A@ libisc.la timestamp
|
|
||||||
+ rm -f libisc-export.@A@ libisc-export.la timestamp
|
|
||||||
diff -up bind-9.9.3rc2/lib/export/samples/Makefile.in.exportlib bind-9.9.3rc2/lib/export/samples/Makefile.in
|
|
||||||
--- bind-9.9.3rc2/lib/export/samples/Makefile.in.exportlib 2013-04-30 08:38:46.000000000 +0200
|
|
||||||
+++ bind-9.9.3rc2/lib/export/samples/Makefile.in 2013-05-13 10:45:22.577089729 +0200
|
|
||||||
@@ -31,15 +31,15 @@ CINCLUDES = -I${srcdir}/include -I../dns
|
|
||||||
CDEFINES =
|
|
||||||
CWARNINGS =
|
|
||||||
|
|
||||||
-DNSLIBS = ../dns/libdns.@A@ @DNS_CRYPTO_LIBS@
|
|
||||||
-ISCLIBS = ../isc/libisc.@A@
|
|
||||||
-ISCCFGLIBS = ../isccfg/libisccfg.@A@
|
|
||||||
-IRSLIBS = ../irs/libirs.@A@
|
|
||||||
+DNSLIBS = ../dns/libdns-export.@A@ @DNS_CRYPTO_LIBS@
|
|
||||||
+ISCLIBS = ../isc/libisc-export.@A@
|
|
||||||
+ISCCFGLIBS = ../isccfg/libisccfg-export.@A@
|
|
||||||
+IRSLIBS = ../irs/libirs-export.@A@
|
|
||||||
|
|
||||||
-DNSDEPLIBS = ../dns/libdns.@A@
|
|
||||||
-ISCDEPLIBS = ../isc/libisc.@A@
|
|
||||||
-ISCCFGDEPLIBS = ../isccfg/libisccfg.@A@
|
|
||||||
-IRSDEPLIBS = ../irs/libirs.@A@
|
|
||||||
+DNSDEPLIBS = ../dns/libdns-export.@A@
|
|
||||||
+ISCDEPLIBS = ../isc/libisc-export.@A@
|
|
||||||
+ISCCFGDEPLIBS = ../isccfg/libisccfg-export.@A@
|
|
||||||
+IRSDEPLIBS = ../irs/libirs-export.@A@
|
|
||||||
|
|
||||||
DEPLIBS = ${DNSDEPLIBS} ${ISCCFGDEPLIBS} ${ISCDEPLIBS}
|
|
||||||
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c
|
|
||||||
index 31549c6..65a14b6 100644
|
|
||||||
--- a/lib/dns/resolver.c
|
|
||||||
+++ b/lib/dns/resolver.c
|
|
||||||
@@ -1762,7 +1762,7 @@ log_edns(fetchctx_t *fctx) {
|
|
||||||
*/
|
|
||||||
dns_name_format(&fctx->domain, domainbuf, sizeof(domainbuf));
|
|
||||||
isc_log_write(dns_lctx, DNS_LOGCATEGORY_EDNS_DISABLED,
|
|
||||||
- DNS_LOGMODULE_RESOLVER, ISC_LOG_INFO,
|
|
||||||
+ DNS_LOGMODULE_RESOLVER, ISC_LOG_DEBUG(1),
|
|
||||||
"success resolving '%s' (in '%s'?) after %s", fctx->info,
|
|
||||||
domainbuf, fctx->reason);
|
|
||||||
}
|
|
||||||
@@ -5298,7 +5298,7 @@ log_lame(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo) {
|
|
||||||
dns_name_format(&fctx->domain, domainbuf, sizeof(domainbuf));
|
|
||||||
isc_sockaddr_format(&addrinfo->sockaddr, addrbuf, sizeof(addrbuf));
|
|
||||||
isc_log_write(dns_lctx, DNS_LOGCATEGORY_LAME_SERVERS,
|
|
||||||
- DNS_LOGMODULE_RESOLVER, ISC_LOG_INFO,
|
|
||||||
+ DNS_LOGMODULE_RESOLVER, ISC_LOG_DEBUG(1),
|
|
||||||
"lame server resolving '%s' (in '%s'?): %s", namebuf,
|
|
||||||
domainbuf, addrbuf);
|
|
||||||
}
|
|
||||||
@@ -5316,7 +5316,7 @@ log_formerr(fetchctx_t *fctx, const char *format, ...) {
|
|
||||||
isc_sockaddr_format(&fctx->addrinfo->sockaddr, nsbuf, sizeof(nsbuf));
|
|
||||||
|
|
||||||
isc_log_write(dns_lctx, DNS_LOGCATEGORY_RESOLVER,
|
|
||||||
- DNS_LOGMODULE_RESOLVER, ISC_LOG_NOTICE,
|
|
||||||
+ DNS_LOGMODULE_RESOLVER, ISC_LOG_DEBUG(1),
|
|
||||||
"DNS format error from %s resolving %s for %s: %s", nsbuf,
|
|
||||||
fctx->info, fctx->clientstr, msgbuf);
|
|
||||||
}
|
|
||||||
@ -1,39 +0,0 @@
|
|||||||
From 1d9843b58800b51e1366fba5e0bdef5f0336efaf Mon Sep 17 00:00:00 2001
|
|
||||||
From: jiangheng <jiangheng12@huawei.com>
|
|
||||||
Date: Wed, 9 Feb 2022 16:21:10 +0800
|
|
||||||
Subject: [PATCH] limit numbers of test threads to reduce execution time
|
|
||||||
|
|
||||||
---
|
|
||||||
lib/dns/tests/dnstest.c | 2 +-
|
|
||||||
lib/ns/tests/nstest.c | 2 +-
|
|
||||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/dns/tests/dnstest.c b/lib/dns/tests/dnstest.c
|
|
||||||
index 465ce9f..263b0d6 100644
|
|
||||||
--- a/lib/dns/tests/dnstest.c
|
|
||||||
+++ b/lib/dns/tests/dnstest.c
|
|
||||||
@@ -114,7 +114,7 @@ cleanup_managers(void) {
|
|
||||||
static isc_result_t
|
|
||||||
create_managers(void) {
|
|
||||||
isc_result_t result;
|
|
||||||
- ncpus = isc_os_ncpus();
|
|
||||||
+ ncpus = ISC_MIN(isc_os_ncpus(), 8);
|
|
||||||
|
|
||||||
CHECK(isc_managers_create(dt_mctx, ncpus, 0, &netmgr, &taskmgr));
|
|
||||||
CHECK(isc_timermgr_create(dt_mctx, &timermgr));
|
|
||||||
diff --git a/lib/ns/tests/nstest.c b/lib/ns/tests/nstest.c
|
|
||||||
index 238450d..b5fa00c 100644
|
|
||||||
--- a/lib/ns/tests/nstest.c
|
|
||||||
+++ b/lib/ns/tests/nstest.c
|
|
||||||
@@ -243,7 +243,7 @@ create_managers(void) {
|
|
||||||
in_port_t port = 5300 + isc_random8();
|
|
||||||
ns_listenlist_t *listenon = NULL;
|
|
||||||
isc_event_t *event = NULL;
|
|
||||||
- ncpus = isc_os_ncpus();
|
|
||||||
+ ncpus = ISC_MIN(isc_os_ncpus(), 8);
|
|
||||||
|
|
||||||
CHECK(isc_managers_create(mctx, ncpus, 0, &netmgr, &taskmgr));
|
|
||||||
CHECK(isc_task_create_bound(taskmgr, 0, &maintask, 0));
|
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user