summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-08-20 03:32:50 +0000
committerCoprDistGit <infra@openeuler.org>2023-08-20 03:32:50 +0000
commit2847c413880322cd66177f0edbd1d8c2bb8c2733 (patch)
tree1450935150f579bab832ca5ef012fed37e173311
parenta0619d67dc05822e0ba3e196a8d7ebc1c4c25bff (diff)
automatic import of bind
-rw-r--r--.gitignore1
-rw-r--r--CVE-2022-2906.patch138
-rw-r--r--bind-9.10-dist-native-pkcs11.patch541
-rw-r--r--bind-9.11-fips-tests.patch921
-rw-r--r--bind-9.11-kyua-pkcs11.patch58
-rw-r--r--bind-9.11-rh1666814.patch29
-rw-r--r--bind-9.14-config-pkcs11.patch83
-rw-r--r--bind-9.16-redhat_doc.patch60
-rw-r--r--bind-9.16.43.tar.xz.asc16
-rw-r--r--bind-9.18-zt-include-rwlock.patch26
-rw-r--r--bind-9.5-PIE.patch30
-rw-r--r--bind-9.5-dlz-64bit.patch53
-rw-r--r--bind-9.9.1-P2-dlz-libdb.patch31
-rw-r--r--bind.spec1407
-rw-r--r--bind.tmpfiles.d1
-rw-r--r--bind93-rh490837.patch34
-rw-r--r--bind97-rh645544.patch31
-rw-r--r--bugfix-limit-numbers-of-test-threads.patch39
-rw-r--r--codesign2021.txt534
-rwxr-xr-xgenerate-rndc-key.sh33
-rw-r--r--named-chroot-setup.service12
-rw-r--r--named-chroot.files26
-rw-r--r--named-chroot.service30
-rw-r--r--named-pkcs11.service26
-rw-r--r--named-setup-rndc.service7
-rw-r--r--named.conf57
-rw-r--r--named.conf.sample241
-rw-r--r--named.empty10
-rw-r--r--named.localhost10
-rw-r--r--named.logrotate12
-rw-r--r--named.loopback11
-rw-r--r--named.rfc1912.zones45
-rw-r--r--named.root61
-rw-r--r--named.root.key13
-rw-r--r--named.rwtab6
-rw-r--r--named.service25
-rw-r--r--named.sysconfig17
-rwxr-xr-xsetup-named-chroot.sh117
-rwxr-xr-xsetup-named-softhsm.sh124
-rw-r--r--sources1
-rw-r--r--trusted-key.key1
41 files changed, 4918 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..d2f5c67 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/bind-9.16.43.tar.xz
diff --git a/CVE-2022-2906.patch b/CVE-2022-2906.patch
new file mode 100644
index 0000000..a7a12eb
--- /dev/null
+++ b/CVE-2022-2906.patch
@@ -0,0 +1,138 @@
+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
+
diff --git a/bind-9.10-dist-native-pkcs11.patch b/bind-9.10-dist-native-pkcs11.patch
new file mode 100644
index 0000000..e4f1ebd
--- /dev/null
+++ b/bind-9.10-dist-native-pkcs11.patch
@@ -0,0 +1,541 @@
+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
+
diff --git a/bind-9.11-fips-tests.patch b/bind-9.11-fips-tests.patch
new file mode 100644
index 0000000..19f91b1
--- /dev/null
+++ b/bind-9.11-fips-tests.patch
@@ -0,0 +1,921 @@
+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
+
diff --git a/bind-9.11-kyua-pkcs11.patch b/bind-9.11-kyua-pkcs11.patch
new file mode 100644
index 0000000..ea9a51a
--- /dev/null
+++ b/bind-9.11-kyua-pkcs11.patch
@@ -0,0 +1,58 @@
+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
+
diff --git a/bind-9.11-rh1666814.patch b/bind-9.11-rh1666814.patch
new file mode 100644
index 0000000..533781d
--- /dev/null
+++ b/bind-9.11-rh1666814.patch
@@ -0,0 +1,29 @@
+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
+
diff --git a/bind-9.14-config-pkcs11.patch b/bind-9.14-config-pkcs11.patch
new file mode 100644
index 0000000..0d62df6
--- /dev/null
+++ b/bind-9.14-config-pkcs11.patch
@@ -0,0 +1,83 @@
+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
+
diff --git a/bind-9.16-redhat_doc.patch b/bind-9.16-redhat_doc.patch
new file mode 100644
index 0000000..ef76e16
--- /dev/null
+++ b/bind-9.16-redhat_doc.patch
@@ -0,0 +1,60 @@
+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
+
diff --git a/bind-9.16.43.tar.xz.asc b/bind-9.16.43.tar.xz.asc
new file mode 100644
index 0000000..68f10c4
--- /dev/null
+++ b/bind-9.16.43.tar.xz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAABCgAdFiEE2ZzOr4eXRwFPA41jGC4jV5Ri76oFAmTQ2eUACgkQGC4jV5Ri
+76ob/Q//ce7Ds8ULf6MetaLG4zjlYchxVRru3hVula5KOQj5K2cM8L0idmgLUz1u
+kQjDDwG4SLFHiAgdsAo9U34nkgOWGnBqwaUL8xdEfo9d+jgduJVGFZM7Ww3wQ0d1
+vJcm2d9Mk2+1CQuWhg3yiu8m+O+6bDXThiH29KbRVRQB+Vv65j/wVm/pJ50jWwOS
+zT0bZnIkzOU2g6vGwo9zwZqVMnaxJcY31aSaqNcAE/0Ty5rzokreMZrukMSJiyB+
+4b9xI5EGuzg4s+4T1wJO4RBSJMnKF1w8vtPkJV/iVA+2N4aDh523htLxO8rJAUnr
+uUvN4UdkvjCT0FXMRb3rDOHe4VAI+iWMlFUSZxR3QVd48bPU9Gc6HcEaCMBJojkK
+3XzFsdRFYeWDsEpdWMb3q2AwIhHt5HkqNqNTsQK2EOnAiigYPJbyg8+x4fXzi2VV
+UtoierGlSjAHVRNiH6dw/dKBug1mQgbI3vJyty/h5gkh5Gp6+9IE8wD7XRa4fq5l
+0rVB5Rf+wgElErp62Puhy9ePZ3eAZjhVhw5lH3mxSwUXkgyJoRFp/YS7aWmsB5vJ
+3+A0B/ITGAxoE+SsiLNfnb6aaL7tlsaJ72w2h/ifvBx/Pg2o1XwSw22WXVQMqAoj
+JNY1tbWYyaziqMz5F9gEgq+Nxq3wi+RomGLz608WCPZN3ukKql4=
+=KUbX
+-----END PGP SIGNATURE-----
diff --git a/bind-9.18-zt-include-rwlock.patch b/bind-9.18-zt-include-rwlock.patch
new file mode 100644
index 0000000..4375a2f
--- /dev/null
+++ b/bind-9.18-zt-include-rwlock.patch
@@ -0,0 +1,26 @@
+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
diff --git a/bind-9.5-PIE.patch b/bind-9.5-PIE.patch
new file mode 100644
index 0000000..d3c73ee
--- /dev/null
+++ b/bind-9.5-PIE.patch
@@ -0,0 +1,30 @@
+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 \
diff --git a/bind-9.5-dlz-64bit.patch b/bind-9.5-dlz-64bit.patch
new file mode 100644
index 0000000..ec064c6
--- /dev/null
+++ b/bind-9.5-dlz-64bit.patch
@@ -0,0 +1,53 @@
+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
diff --git a/bind-9.9.1-P2-dlz-libdb.patch b/bind-9.9.1-P2-dlz-libdb.patch
new file mode 100644
index 0000000..866ed8f
--- /dev/null
+++ b/bind-9.9.1-P2-dlz-libdb.patch
@@ -0,0 +1,31 @@
+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
diff --git a/bind.spec b/bind.spec
new file mode 100644
index 0000000..79e891f
--- /dev/null
+++ b/bind.spec
@@ -0,0 +1,1407 @@
+%bcond_with SYSTEMTEST
+%bcond_without GSSTSIG
+%bcond_without PKCS11
+%bcond_without JSON
+%bcond_with DLZ
+%bcond_with GEOIP2
+%bcond_without UNITTEST
+%bcond_with DNSTAP
+%bcond_without LMDB
+%bcond_with DOC
+%bcond_with TSAN
+
+%{?!bind_uid: %global bind_uid 25}
+%{?!bind_gid: %global bind_gid 25}
+%{!?_pkgdocdir:%global _pkgdocdir %{_docdir}/%{name}-%{version}}
+%global bind_dir /var/named
+%global _unitdir /usr/lib/systemd/system
+%global _tmpfilesdir /usr/lib/tmpfiles.d
+%global chroot_prefix %{bind_dir}/chroot
+%global chroot_create_directories /dev /run/named %{_localstatedir}/{log,named,tmp} \\\
+ %{_sysconfdir}/{crypto-policies/back-ends,pki/dnssec-keys,named} \\\
+ %{_libdir}/bind %{_libdir}/named %{_datadir}/GeoIP /proc/sys/net/ipv4
+
+%global selinuxbooleans named_write_master_zones=1
+%define bind_export_libs isc dns isccfg irs
+%{!?_export_dir:%global _export_dir /bind9-export/}
+%undefine _strict_symbol_defs_build
+
+Summary: The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server
+Name: bind
+License: MPLv2.0
+Version: 9.16.43
+Release: 1
+Epoch: 32
+Url: https://www.isc.org/downloads/bind/
+#
+Source0: https://downloads.isc.org/isc/bind9/%{version}/bind-%{version}.tar.xz
+Source1: named.sysconfig
+Source2: https://downloads.isc.org/isc/bind9/%{version}/bind-%{version}.tar.xz.asc
+Source3: named.logrotate
+Source4: https://downloads.isc.org/isc/pgpkeys/codesign2021.txt
+Source16: named.conf
+# Refresh by command: dig @a.root-servers.net. +tcp +norec
+# or from URL
+Source17: https://www.internic.net/domain/named.root
+Source18: named.localhost
+Source19: named.loopback
+Source20: named.empty
+Source23: named.rfc1912.zones
+Source25: named.conf.sample
+Source27: named.root.key
+Source35: bind.tmpfiles.d
+Source36: trusted-key.key
+Source37: named.service
+Source38: named-chroot.service
+Source41: setup-named-chroot.sh
+Source42: generate-rndc-key.sh
+Source43: named.rwtab
+Source44: named-chroot-setup.service
+Source46: named-setup-rndc.service
+Source47: named-pkcs11.service
+Source48: setup-named-softhsm.sh
+Source49: named-chroot.files
+
+Patch1: bind-9.14-config-pkcs11.patch
+Patch2: bind-9.10-dist-native-pkcs11.patch
+Patch3: bind-9.11-kyua-pkcs11.patch
+# 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
+
+Patch9000: bugfix-limit-numbers-of-test-threads.patch
+
+%{?systemd_ordering}
+Requires: coreutils
+Requires: shadow-utils
+Requires: glibc-common
+Requires: grep
+Requires: bind-libs%{?_isa} = %{epoch}:%{version}-%{release}
+Requires: systemd
+# This wild require should satisfy %%selinux_set_boolean macro only
+# in case it needs to be used
+Requires: policycoreutils-python-utils libselinux-utils
+Requires: selinux-policy selinux-policy-base libuv
+Recommends: bind-utils bind-dnssec-utils
+BuildRequires: gcc, make
+BuildRequires: openssl-devel, libtool, autoconf, pkgconfig, libcap-devel
+BuildRequires: libidn2-devel, libxml2-devel
+#BuildRequires: systemd-rpm-macros
+BuildRequires: selinux-policy
+# needed for %%{__python3} macro
+BuildRequires: python3-devel
+BuildRequires: python3-ply
+BuildRequires: findutils sed
+BuildRequires: libuv-devel
+BuildRequires: systemd
+BuildRequires: libnsl2
+%if %{with DLZ}
+BuildRequires: openldap-devel, libpq-devel, sqlite-devel, mariadb-connector-c-devel
+%endif
+%if %{with UNITTEST}
+# make unit dependencies
+BuildRequires: libcmocka-devel kyua
+%endif
+%if %{with PKCS11} && (%{with UNITTEST} || %{with SYSTEMTEST})
+BuildRequires: softhsm
+%endif
+%if %{with SYSTEMTEST}
+# bin/tests/system dependencies
+BuildRequires: perl(Net::DNS) perl(Net::DNS::Nameserver) perl(Time::HiRes) perl(Getopt::Long)
+# manual configuration requires this tool
+BuildRequires: iproute
+%endif
+%if %{with GSSTSIG}
+BuildRequires: krb5-devel
+%endif
+%if %{with LMDB}
+BuildRequires: lmdb-devel
+%endif
+%if %{with JSON}
+BuildRequires: json-c-devel
+%endif
+%if %{with GEOIP2}
+BuildRequires: libmaxminddb-devel
+%endif
+%if %{with DNSTAP}
+BuildRequires: fstrm-devel protobuf-c-devel
+%endif
+# Needed to regenerate dig.1 manpage
+%if %{with DOC}
+BuildRequires: python3-sphinx python3-sphinx_rtd_theme
+BuildRequires: doxygen
+%endif
+%if %{with DOCPDF}
+# Because remaining issues with COPR, allow turning off PDF (re)generation
+BuildRequires: python3-sphinx-latex latexmk texlive-xetex texlive-xindy
+%endif
+%if %{with TSAN}
+BuildRequires: libtsan
+%endif
+
+%description
+BIND (Berkeley Internet Name Domain) is an implementation of the DNS
+(Domain Name System) protocols. BIND includes a DNS server (named),
+which resolves host names to IP addresses; a resolver library
+(routines for applications to use when interfacing with DNS); and
+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
+Summary: Libraries used by the BIND DNS packages
+Requires: bind-license = %{epoch}:%{version}-%{release}
+Provides: bind-libs-lite = %{epoch}:%{version}-%{release}
+Obsoletes: bind-libs-lite < 32:9.16.13
+
+%description libs
+Contains heavyweight version of BIND suite libraries used by both named DNS
+server and utilities in bind-utils package.
+
+%package license
+Summary: License of the BIND DNS suite
+BuildArch:noarch
+
+%description license
+Contains license of the BIND DNS suite.
+
+%package utils
+Summary: Utilities for querying DNS name servers
+Requires: bind-libs%{?_isa} = %{epoch}:%{version}-%{release}
+# For compatibility with Debian package
+Provides: dnsutils = %{epoch}:%{version}-%{release}
+
+%description utils
+Bind-utils contains a collection of utilities for querying DNS (Domain
+Name System) name servers to find out information about Internet
+hosts. These tools will provide you with the IP addresses for given
+host names, as well as other information about registered domains and
+network addresses.
+
+You should install bind-utils if you need to get information from DNS name
+servers.
+
+%package dnssec-utils
+Summary: DNSSEC keys and zones management utilities
+Requires: bind-libs%{?_isa} = %{epoch}:%{version}-%{release}
+Recommends: bind-utils
+Requires: python3-bind = %{epoch}:%{version}-%{release}
+Requires: bind-dnssec-doc = %{epoch}:%{version}-%{release}
+
+%description dnssec-utils
+Bind-dnssec-utils contains a collection of utilities for editing
+DNSSEC keys and BIND zone files. These tools provide generation,
+revocation and verification of keys and DNSSEC signatures in zone files.
+
+You should install bind-dnssec-utils if you need to sign a DNS zone
+or maintain keys for it.
+
+%package dnssec-doc
+Summary: Manual pages of DNSSEC utilities
+Requires: bind-license = %{epoch}:%{version}-%{release}
+BuildArch:noarch
+Conflicts: %{name}-utils < %{epoch}:%{version}-%{release}
+
+%description dnssec-doc
+Bind-dnssec-doc contains manual pages for bind-dnssec-utils.
+
+%package devel
+Summary: Header files and libraries needed for bind-dyndb-ldap
+Provides: bind-lite-devel = %{epoch}:%{version}-%{release}
+Obsoletes: bind-lite-devel < 32:9.16.6-3
+Requires: bind-libs%{?_isa} = %{epoch}:%{version}-%{release}
+Requires: openssl-devel%{?_isa} libxml2-devel%{?_isa}
+Requires: libcap-devel%{?_isa}
+%if %{with GSSTSIG}
+Requires: krb5-devel%{?_isa}
+%endif
+%if %{with LMDB}
+Requires: lmdb-devel%{?_isa}
+%endif
+%if %{with JSON}
+Requires: json-c-devel%{?_isa}
+%endif
+%if %{with DNSTAP}
+Requires: fstrm-devel%{?_isa} protobuf-c-devel%{?_isa}
+%endif
+%if %{with GEOIP2}
+Requires: libmaxminddb-devel%{?_isa}
+%endif
+
+%description devel
+The bind-devel package contains full version of the header files and libraries
+required for building bind-dyndb-ldap. Upstream no longer supports nor recommends
+bind libraries for third party applications.
+
+%package chroot
+Summary: A chroot runtime environment for the ISC BIND DNS server, named(8)
+Prefix: %{chroot_prefix}
+# grep is required due to setup-named-chroot.sh script
+Requires: grep
+Requires: bind%{?_isa} = %{epoch}:%{version}-%{release}
+
+%description chroot
+This package contains a tree of files which can be used as a
+chroot(2) jail for the named(8) program from the BIND package.
+Based on the code from Jan "Yenya" Kasprzak <kas@fi.muni.cz>
+
+
+%if %{with DLZ}
+%package dlz-filesystem
+Summary: BIND server filesystem DLZ module
+Requires: bind%{?_isa} = %{epoch}:%{version}-%{release}
+
+%description dlz-filesystem
+Dynamic Loadable Zones filesystem module for BIND server.
+
+%package dlz-ldap
+Summary: BIND server ldap DLZ module
+Requires: bind%{?_isa} = %{epoch}:%{version}-%{release}
+
+%description dlz-ldap
+Dynamic Loadable Zones LDAP module for BIND server.
+
+%package dlz-mysql
+Summary: BIND server mysql and mysqldyn DLZ modules
+Requires: bind%{?_isa} = %{epoch}:%{version}-%{release}
+Provides: %{name}-dlz-mysqldyn = %{epoch}:%{version}-%{release}
+Obsoletes: %{name}-dlz-mysqldyn < 32:9.16.6-3
+
+%description dlz-mysql
+Dynamic Loadable Zones MySQL module for BIND server.
+Contains also mysqldyn module with dynamic DNS updates (DDNS) support.
+
+%package dlz-sqlite3
+Summary: BIND server sqlite3 DLZ module
+Requires: bind%{?_isa} = %{epoch}:%{version}-%{release}
+
+%description dlz-sqlite3
+Dynamic Loadable Zones sqlite3 module for BIND server.
+%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}
+%package doc
+Summary: BIND 9 Administrator Reference Manual
+Requires: bind-license = %{epoch}:%{version}-%{release}
+Requires: python3-sphinx_rtd_theme
+BuildArch: noarch
+
+%description doc
+BIND (Berkeley Internet Name Domain) is an implementation of the DNS
+(Domain Name System) protocols. BIND includes a DNS server (named),
+which resolves host names to IP addresses; a resolver library
+(routines for applications to use when interfacing with DNS); and
+tools for verifying that the DNS server is operating properly.
+
+This package contains BIND 9 Administrator Reference Manual
+in HTML and PDF format.
+%end
+
+%endif
+
+%prep
+%autosetup -n %{name}-%{version} -N
+
+# Common patches
+%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
+%ifarch sparcv9 sparc64 s390 s390x
+for i in bin/named/{,unix}/Makefile.in; do
+ sed -i 's|fpie|fPIE|g' $i
+done
+%endif
+
+sed -e 's|"$TOP/config.guess"|"$TOP_SRCDIR/config.guess"|' -i bin/tests/system/ifconfig.sh
+:;
+
+
+%build
+## We use out of tree configure/build for export libs
+%define _configure "../configure"
+
+# normal and pkcs11 unit tests
+%define unit_prepare_build() \
+ cp -uv Kyuafile "%{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 'testkeys' -type d -exec cp -Tav '{}' "%{1}/{}" ';' \
+
+%define systemtest_prepare_build() \
+ cp -Tuav bin/tests "%{1}/bin/tests/" \
+ cp -uv version "%{1}" \
+
+CFLAGS="$CFLAGS $RPM_OPT_FLAGS"
+%if %{with TSAN}
+ CFLAGS+=" -O1 -fsanitize=thread -fPIE -pie"
+%endif
+export CFLAGS
+export STD_CDEFINES="$CPPFLAGS"
+
+
+#sed -i -e \
+#'s/RELEASEVER=\(.*\)/RELEASEVER=\1-RH/' \
+#version
+
+libtoolize -c -f; aclocal -I libtool.m4 --force; autoconf -f
+
+mkdir build
+
+%if %{with DLZ}
+# DLZ modules do not support oot builds. Copy files into build
+mkdir -p build/contrib/dlz
+cp -frp contrib/dlz/modules build/contrib/dlz/modules
+%endif
+
+pushd build
+LIBDIR_SUFFIX=
+export LIBDIR_SUFFIX
+%configure \
+ --with-python=%{__python3} \
+ --with-libtool \
+ --localstatedir=%{_var} \
+ --with-pic \
+ --disable-static \
+ --includedir=%{_includedir}/bind9 \
+ --with-tuning=large \
+ --with-libidn2 \
+%if %{with GEOIP2}
+ --with-maxminddb \
+%endif
+%if %{with PKCS11}
+ --enable-native-pkcs11 \
+ --with-pkcs11=%{_libdir}/pkcs11/libsofthsm2.so \
+%endif
+ --with-dlopen=yes \
+%if %{with GSSTSIG}
+ --with-gssapi=yes \
+%endif
+%if %{with LMDB}
+ --with-lmdb=yes \
+%else
+ --with-lmdb=no \
+%endif
+%if %{with JSON}
+ --without-libjson --with-json-c \
+%endif
+%if %{with DNSTAP}
+ --enable-dnstap \
+%endif
+%if %{with UNITTEST}
+ --with-cmocka \
+%endif
+ --enable-fixed-rrset \
+ --enable-full-report \
+;
+%if %{with DNSTAP}
+ pushd lib
+ SRCLIB="../../../lib"
+ (cd dns && ln -s ${SRCLIB}/dns/dnstap.proto)
+%if %{with PKCS11}
+ (cd dns-pkcs11 && ln -s ${SRCLIB}/dns-pkcs11/dnstap.proto)
+%endif
+ popd
+%endif
+
+%if %{with DOCPDF}
+# avoid using home for pdf latex files
+export TEXMFVAR="`pwd`"
+export TEXMFCONFIG="`pwd`"
+fmtutil-user --listcfg || :
+fmtutil-user --missing || :
+%endif
+
+%make_build
+
+# Regenerate dig.1 manpage
+pushd bin/dig
+make man
+popd
+pushd bin/python
+make man
+popd
+
+%if %{with DOC}
+ make doc
+%endif
+
+%if %{with DLZ}
+ pushd contrib/dlz/modules
+ for DIR in mysql mysqldyn; do
+ sed -e 's/@DLZ_DRIVER_MYSQL_INCLUDES@/$(shell mysql_config --cflags)/' \
+ -e 's/@DLZ_DRIVER_MYSQL_LIBS@/$(shell mysql_config --libs)/' \
+ $DIR/Makefile.in > $DIR/Makefile
+ done
+ for DIR in filesystem ldap mysql mysqldyn sqlite3; do
+ make -C $DIR CFLAGS="-fPIC -I../include $CFLAGS $LDFLAGS"
+ done
+ popd
+%endif
+popd # build
+
+%unit_prepare_build build
+%systemtest_prepare_build build
+
+%check
+%if %{with PKCS11} && (%{with UNITTEST} || %{with SYSTEMTEST})
+ # Tests require initialization of pkcs11 token
+ eval "$(bash %{SOURCE48} -A "`pwd`/softhsm-tokens")"
+%endif
+
+%if %{with TSAN}
+export TSAN_OPTIONS="log_exe_name=true log_path=ThreadSanitizer exitcode=0"
+%endif
+
+%if %{with UNITTEST}
+ pushd build
+ CPUS=$(lscpu -p=cpu,core | grep -v '^#' | wc -l)
+ if [ "$CPUS" -gt 16 ]; then
+ ORIGFILES=$(ulimit -n)
+ ulimit -n 4096 || : # Requires on some machines with many cores
+ fi
+ export ISC_TASK_WORKERS=8
+ make unit
+ e=$?
+ if [ "$e" -ne 0 ]; then
+ echo "ERROR: this build of BIND failed 'make unit'. Aborting."
+ exit $e;
+ fi;
+
+ [ "$CPUS" -gt 16 ] && ulimit -n $ORIGFILES || :
+ popd
+## End of UNITTEST
+%endif
+
+%if %{with SYSTEMTEST}
+# Runs system test if ip addresses are already configured
+# or it is able to configure them
+if perl bin/tests/system/testsock.pl
+then
+ 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;
+else
+ echo 'SKIPPED: tests require root, CAP_NET_ADMIN or already configured test addresses.'
+fi
+%endif
+:
+
+%install
+# Build directory hierarchy
+mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/logrotate.d
+mkdir -p ${RPM_BUILD_ROOT}%{_libdir}/{bind,named}
+mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/named/{slaves,data,dynamic}
+mkdir -p ${RPM_BUILD_ROOT}%{_mandir}/{man1,man5,man8}
+mkdir -p ${RPM_BUILD_ROOT}/run/named
+mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/log
+
+#chroot
+for D in %{chroot_create_directories}
+do
+ mkdir -p ${RPM_BUILD_ROOT}/%{chroot_prefix}${D}
+done
+
+# create symlink as it is on real filesystem
+pushd ${RPM_BUILD_ROOT}/%{chroot_prefix}/var
+ln -s ../run run
+popd
+
+# these are required to prevent them being erased during upgrade of previous
+touch ${RPM_BUILD_ROOT}/%{chroot_prefix}%{_sysconfdir}/named.conf
+#end chroot
+
+pushd build
+%make_install
+popd
+rpm -E %{_unitdir}
+
+# Remove unwanted files
+rm -f ${RPM_BUILD_ROOT}/etc/bind.keys
+
+# Systemd unit files
+mkdir -p ${RPM_BUILD_ROOT}%{_unitdir}
+install -m 644 %{SOURCE37} ${RPM_BUILD_ROOT}%{_unitdir}
+install -m 644 %{SOURCE38} ${RPM_BUILD_ROOT}%{_unitdir}
+install -m 644 %{SOURCE44} ${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}
+install -m 755 %{SOURCE41} ${RPM_BUILD_ROOT}%{_libexecdir}/setup-named-chroot.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
+%endif
+
+install -m 644 %SOURCE3 ${RPM_BUILD_ROOT}/etc/logrotate.d/named
+mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig
+install -m 644 %{SOURCE1} ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig/named
+install -m 644 %{SOURCE49} ${RPM_BUILD_ROOT}%{_sysconfdir}/named-chroot.files
+
+%if %{with DLZ}
+ pushd build
+ pushd contrib/dlz/modules
+ for DIR in filesystem ldap mysql mysqldyn sqlite3; do
+ %make_install -C $DIR libdir=%{_libdir}/named
+ done
+ pushd ${RPM_BUILD_ROOT}/%{_libdir}/bind
+ cp -s ../named/dlz_*.so .
+ popd
+ mkdir -p doc/{mysql,mysqldyn}
+ cp -p mysqldyn/testing/README doc/mysqldyn/README.testing
+ cp -p mysqldyn/testing/* doc/mysqldyn
+ cp -p mysql/testing/* doc/mysql
+ popd
+ popd
+%endif
+
+# Install isc/errno2result.h header
+install -m 644 lib/isc/unix/errno2result.h ${RPM_BUILD_ROOT}%{_includedir}/bind9/isc
+
+# Remove libtool .la files:
+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
+%if %{without DNSTAP}
+rm -f ${RPM_BUILD_ROOT}%{_mandir}/man1/dnstap-read.1* || true
+%endif
+%if %{without LMDB}
+rm -f ${RPM_BUILD_ROOT}%{_mandir}/man8/named-nzd2nzf.8* || true
+%endif
+
+pushd ${RPM_BUILD_ROOT}%{_mandir}/man8
+ln -s ddns-confgen.8.gz tsig-keygen.8.gz
+ln -s named-checkzone.8.gz named-compilezone.8.gz
+popd
+
+%if %{with DOC}
+mkdir -p ${RPM_BUILD_ROOT}%{_pkgdocdir}
+cp -a build/doc/arm/_build/html ${RPM_BUILD_ROOT}%{_pkgdocdir}
+rm -rf ${RPM_BUILD_ROOT}%{_pkgdocdir}/html/.{buildinfo,doctrees}
+# Backward compatible link to 9.11 documentation
+(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"
+ ln -s "$DIR" "$BINDTHEMEDIR"
+ fi
+done
+%endif
+%if %{with DOCPDF}
+cp -a build/doc/arm/Bv9ARM.pdf ${RPM_BUILD_ROOT}%{_pkgdocdir}
+%endif
+
+# Ghost config files:
+touch ${RPM_BUILD_ROOT}%{_localstatedir}/log/named.log
+
+# configuration files:
+install -m 640 %{SOURCE16} ${RPM_BUILD_ROOT}%{_sysconfdir}/named.conf
+touch ${RPM_BUILD_ROOT}%{_sysconfdir}/rndc.{key,conf}
+install -m 644 %{SOURCE27} ${RPM_BUILD_ROOT}%{_sysconfdir}/named.root.key
+install -m 644 %{SOURCE36} ${RPM_BUILD_ROOT}%{_sysconfdir}/trusted-key.key
+mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/named
+
+# data files:
+mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/named
+install -m 640 %{SOURCE17} ${RPM_BUILD_ROOT}%{_localstatedir}/named/named.ca
+install -m 640 %{SOURCE18} ${RPM_BUILD_ROOT}%{_localstatedir}/named/named.localhost
+install -m 640 %{SOURCE19} ${RPM_BUILD_ROOT}%{_localstatedir}/named/named.loopback
+install -m 640 %{SOURCE20} ${RPM_BUILD_ROOT}%{_localstatedir}/named/named.empty
+install -m 640 %{SOURCE23} ${RPM_BUILD_ROOT}%{_sysconfdir}/named.rfc1912.zones
+
+# sample bind configuration files for %%doc:
+mkdir -p sample/etc sample/var/named/{data,slaves}
+install -m 644 %{SOURCE25} sample/etc/named.conf
+# Copy default configuration to %%doc to make it usable from system-config-bind
+install -m 644 %{SOURCE16} named.conf.default
+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
+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
+ ns localhost.' > sample/var/named/$f;
+done
+:;
+
+mkdir -p ${RPM_BUILD_ROOT}%{_tmpfilesdir}
+install -m 644 %{SOURCE35} ${RPM_BUILD_ROOT}%{_tmpfilesdir}/named.conf
+
+mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/rwtab.d
+install -m 644 %{SOURCE43} ${RPM_BUILD_ROOT}%{_sysconfdir}/rwtab.d/named
+
+%pre
+if [ "$1" -eq 1 ]; then
+ /usr/sbin/groupadd -g %{bind_gid} -f -r named >/dev/null 2>&1 || :;
+ /usr/sbin/useradd -u %{bind_uid} -r -N -M -g named -s /sbin/nologin -d /var/named -c Named named >/dev/null 2>&1 || :;
+fi;
+:;
+
+%post
+%?ldconfig
+if [ -e "%{_sysconfdir}/selinux/config" ]; then
+ %selinux_set_booleans -s targeted %{selinuxbooleans}
+ %selinux_set_booleans -s mls %{selinuxbooleans}
+fi
+if [ "$1" -eq 1 ]; then
+ # Initial installation
+ [ -x /sbin/restorecon ] && /sbin/restorecon /etc/rndc.* /etc/named.* >/dev/null 2>&1 ;
+ # rndc.key has to have correct perms and ownership, CVE-2007-6283
+ [ -e /etc/rndc.key ] && chown root:named /etc/rndc.key
+ [ -e /etc/rndc.key ] && chmod 0640 /etc/rndc.key
+else
+ # Upgrade, use invalid shell
+ if getent passwd named | grep ':/bin/false$' >/dev/null; then
+ /sbin/usermod -s /sbin/nologin named
+ fi
+ # Checkconf will parse out comments
+ if /usr/sbin/named-checkconf -p /etc/named.conf 2>/dev/null | grep -q named.iscdlv.key
+ then
+ 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
+ sed -e 's/named\.iscdlv\.key/named.root.key/' \
+ /etc/named.conf.rpmbackup > /etc/named.conf || \
+ mv /etc/named.conf.rpmbackup /etc/named.conf
+ fi
+ fi
+fi
+%systemd_post named.service
+:;
+
+%preun
+# Package removal, not upgrade
+%systemd_preun named.service
+
+%postun
+%?ldconfig
+# Package upgrade, not uninstall
+%systemd_postun_with_restart named.service
+if [ -e "%{_sysconfdir}/selinux/config" ]; then
+ %selinux_unset_booleans -s targeted %{selinuxbooleans}
+ %selinux_unset_booleans -s mls %{selinuxbooleans}
+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
+%define chroot_fix_devices() \
+if [ $1 -gt 1 ]; then \
+ for DEV in "%{1}/dev"/{null,random,zero}; do \
+ if [ -e "$DEV" ] && [ "$(/bin/stat --printf="%G %a" "$DEV")" = "root 644" ]; \
+ then \
+ /bin/chmod 0664 "$DEV" \
+ /bin/chgrp named "$DEV" \
+ fi \
+ done \
+fi
+
+%triggerun -- bind < 32:9.9.0-0.6.rc1
+/sbin/chkconfig --del named >/dev/null 2>&1 || :
+/bin/systemctl try-restart named.service >/dev/null 2>&1 || :
+
+%ldconfig_scriptlets libs
+
+%if %{with PKCS11}
+%ldconfig_scriptlets pkcs11-libs
+%endif
+
+%post chroot
+%systemd_post named-chroot.service
+%chroot_fix_devices %{chroot_prefix}
+:;
+
+%posttrans chroot
+if [ -x /usr/sbin/selinuxenabled ] && /usr/sbin/selinuxenabled; then
+ [ -x /sbin/restorecon ] && /sbin/restorecon %{chroot_prefix}/dev/* > /dev/null 2>&1;
+fi;
+
+%preun chroot
+# wait for stop of both named-chroot and named-chroot-setup services
+# on uninstall
+%systemd_preun named-chroot.service named-chroot-setup.service
+:;
+
+%postun chroot
+# Package upgrade, not uninstall
+%systemd_postun_with_restart named-chroot.service
+
+
+%files
+%dir %{_libdir}/bind
+%dir %{_libdir}/named
+%{_libdir}/named/*.so
+%config(noreplace) %verify(not md5 size mtime) %{_sysconfdir}/sysconfig/named
+%config(noreplace) %attr(0644,root,named) %{_sysconfdir}/named.root.key
+%config(noreplace) %{_sysconfdir}/logrotate.d/named
+%{_tmpfilesdir}/named.conf
+%{_sysconfdir}/rwtab.d/named
+%{_unitdir}/named.service
+%{_unitdir}/named-setup-rndc.service
+%{_sbindir}/named-journalprint
+%{_sbindir}/named-checkconf
+%{_bindir}/named-rrchecker
+%{_bindir}/mdig
+%{_sbindir}/named
+%{_sbindir}/rndc*
+%{_libexecdir}/generate-rndc-key.sh
+%{_mandir}/man1/mdig.1*
+%{_mandir}/man1/named-rrchecker.1*
+%{_mandir}/man5/named.conf.5*
+%{_mandir}/man5/rndc.conf.5*
+%{_mandir}/man8/rndc.8*
+%{_mandir}/man8/named.8*
+%{_mandir}/man8/named-checkconf.8*
+%{_mandir}/man8/rndc-confgen.8*
+%{_mandir}/man8/named-journalprint.8*
+%{_mandir}/man8/filter-aaaa.8.gz
+%doc CHANGES README named.conf.default
+%doc sample/
+
+# Hide configuration
+%defattr(0640,root,named,0750)
+%dir %{_sysconfdir}/named
+%config(noreplace) %verify(not link) %{_sysconfdir}/named.conf
+%config(noreplace) %verify(not link) %{_sysconfdir}/named.rfc1912.zones
+%defattr(0660,root,named,01770)
+%dir %{_localstatedir}/named
+%defattr(0660,named,named,0770)
+%dir %{_localstatedir}/named/slaves
+%dir %{_localstatedir}/named/data
+%dir %{_localstatedir}/named/dynamic
+%ghost %{_localstatedir}/log/named.log
+%defattr(0640,root,named,0750)
+%config %verify(not link) %{_localstatedir}/named/named.ca
+%config %verify(not link) %{_localstatedir}/named/named.localhost
+%config %verify(not link) %{_localstatedir}/named/named.loopback
+%config %verify(not link) %{_localstatedir}/named/named.empty
+%ghost %config(noreplace) %{_sysconfdir}/rndc.key
+# ^- rndc.key now created on first install only if it does not exist
+%ghost %config(noreplace) %{_sysconfdir}/rndc.conf
+# ^- The default rndc.conf which uses rndc.key is in named's default internal config -
+# so rndc.conf is not necessary.
+%defattr(-,named,named,-)
+%dir /run/named
+
+%files libs
+%{_libdir}/libbind9-%{version}*.so
+%{_libdir}/libisccc-%{version}*.so
+%{_libdir}/libns-%{version}*.so
+%{_libdir}/libdns-%{version}*.so
+%{_libdir}/libirs-%{version}*.so
+%{_libdir}/libisc-%{version}*.so
+%{_libdir}/libisccfg-%{version}*.so
+
+%files license
+%{!?_licensedir:%global license %%doc}
+%license COPYRIGHT
+
+%files utils
+%{_bindir}/dig
+%{_bindir}/delv
+%{_bindir}/host
+%{_bindir}/nslookup
+%{_bindir}/nsupdate
+%{_bindir}/arpaname
+%{_sbindir}/ddns-confgen
+%{_sbindir}/tsig-keygen
+%{_sbindir}/nsec3hash
+%{_sbindir}/named-checkzone
+%{_sbindir}/named-compilezone
+%if %{with DNSTAP}
+%{_bindir}/dnstap-read
+%{_mandir}/man1/dnstap-read.1*
+%endif
+%if %{with LMDB}
+%{_sbindir}/named-nzd2nzf
+%{_mandir}/man8/named-nzd2nzf.8*
+%endif
+%{_mandir}/man1/host.1*
+%{_mandir}/man1/nsupdate.1*
+%{_mandir}/man1/dig.1*
+%{_mandir}/man1/delv.1*
+%{_mandir}/man1/nslookup.1*
+%{_mandir}/man1/arpaname.1*
+%{_mandir}/man8/ddns-confgen.8*
+%{_mandir}/man8/tsig-keygen.8*
+%{_mandir}/man8/nsec3hash.8*
+%{_mandir}/man8/named-checkzone.8*
+%{_mandir}/man8/named-compilezone.8*
+%{_sysconfdir}/trusted-key.key
+
+%files dnssec-utils
+%{_sbindir}/dnssec*
+%if %{with PKCS11}
+%exclude %{_sbindir}/dnssec*pkcs11
+%endif
+
+%files dnssec-doc
+%{_mandir}/man8/dnssec*.8*
+%if %{with PKCS11}
+%exclude %{_mandir}/man8/dnssec*-pkcs11.8*
+%endif
+
+%files devel
+%{_libdir}/libbind9.so
+%{_libdir}/libisccc.so
+%{_libdir}/libns.so
+%{_libdir}/libdns.so
+%{_libdir}/libirs.so
+%{_libdir}/libisc.so
+%{_libdir}/libisccfg.so
+%dir %{_includedir}/bind9
+%{_includedir}/bind9/bind9
+%{_includedir}/bind9/isccc
+%{_includedir}/bind9/ns
+%{_includedir}/bind9/dns
+%{_includedir}/bind9/dst
+%{_includedir}/bind9/irs
+%{_includedir}/bind9/isc
+%dir %{_includedir}/bind9/pk11
+%{_includedir}/bind9/pk11/site.h
+%{_includedir}/bind9/isccfg
+
+%files chroot
+%config(noreplace) %{_sysconfdir}/named-chroot.files
+%{_unitdir}/named-chroot.service
+%{_unitdir}/named-chroot-setup.service
+%{_libexecdir}/setup-named-chroot.sh
+%defattr(0664,root,named,-)
+%ghost %dev(c,1,3) %verify(not mtime) %{chroot_prefix}/dev/null
+%ghost %dev(c,1,8) %verify(not mtime) %{chroot_prefix}/dev/random
+%ghost %dev(c,1,9) %verify(not mtime) %{chroot_prefix}/dev/urandom
+%ghost %dev(c,1,5) %verify(not mtime) %{chroot_prefix}/dev/zero
+%defattr(0640,root,named,0750)
+%dir %{chroot_prefix}
+%dir %{chroot_prefix}/dev
+%dir %{chroot_prefix}%{_sysconfdir}
+%dir %{chroot_prefix}%{_sysconfdir}/named
+%dir %{chroot_prefix}%{_sysconfdir}/pki
+%dir %{chroot_prefix}%{_sysconfdir}/pki/dnssec-keys
+%dir %{chroot_prefix}%{_sysconfdir}/crypto-policies
+%dir %{chroot_prefix}%{_sysconfdir}/crypto-policies/back-ends
+%dir %{chroot_prefix}%{_localstatedir}
+%dir %{chroot_prefix}/run
+%ghost %config(noreplace) %{chroot_prefix}%{_sysconfdir}/named.conf
+%defattr(-,root,root,-)
+%dir %{chroot_prefix}/usr
+%dir %{chroot_prefix}/%{_libdir}
+%dir %{chroot_prefix}/%{_libdir}/bind
+%dir %{chroot_prefix}/%{_datadir}/GeoIP
+%{chroot_prefix}/proc
+%defattr(0660,root,named,01770)
+%dir %{chroot_prefix}%{_localstatedir}/named
+%defattr(0660,named,named,0770)
+%dir %{chroot_prefix}%{_localstatedir}/tmp
+%dir %{chroot_prefix}%{_localstatedir}/log
+%defattr(-,named,named,-)
+%dir %{chroot_prefix}/run/named
+%{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}
+%files dlz-filesystem
+%{_libdir}/{named,bind}/dlz_filesystem_dynamic.so
+
+%files dlz-mysql
+%{_libdir}/{named,bind}/dlz_mysql_dynamic.so
+%doc build/contrib/dlz/modules/doc/mysql
+%{_libdir}/{named,bind}/dlz_mysqldyn_mod.so
+%doc build/contrib/dlz/modules/doc/mysqldyn
+
+%files dlz-ldap
+%{_libdir}/{named,bind}/dlz_ldap_dynamic.so
+%doc contrib/dlz/modules/ldap/testing/*
+
+%files dlz-sqlite3
+%{_libdir}/{named,bind}/dlz_sqlite3_dynamic.so
+%doc contrib/dlz/modules/sqlite3/testing/*
+
+%endif
+
+%files -n python3-bind
+%{python3_sitelib}/*.egg-info
+%{python3_sitelib}/isc/
+
+%if %{with DOC}
+%files doc
+%dir %{_pkgdocdir}
+%doc %{_pkgdocdir}/Bv9ARM.html
+%doc %{_pkgdocdir}/html
+%endif
+%if %{with DOCPDF}
+%doc %{_pkgdocdir}/Bv9ARM.pdf
+%endif
+
+%changelog
+* Sun Aug 20 2023 Funda Wang <fundawang@yeah.net> - 32:9.16.43-1
+- update to 9.16.43
+
+* Tue Feb 14 2023 zhanghao<zhanghao383@huawei.com> - 32:9.16.37-4
+- Type:requirement
+- CVE:NA
+- SUG:NA
+- DESC:fix two patch from 9.16.23 and delete useless Patches
+
+* Mon Feb 13 2023 zhanghao<zhanghao383@huawei.com> - 32:9.16.37-3
+- Type:bugfix
+- CVE:NA
+- SUG:NA
+- DESC:fix bind-9.18-zt-include-rwlock.patch
+
+* Thu Feb 09 2023 zhanghao<zhanghao383@huawei.com> - 32:9.16.37-2
+- Type:bugfix
+- CVE:NA
+- SUG:NA
+- DESC:fix output expected information when install bing-sdborbind-sdb-chroot
+
+* Tue Feb 07 2023 zhanghao<zhanghao383@huawei.com> - 32:9.16.37-1
+- Type:requirement
+- CVE:NA
+- SUG:NA
+- DESC: update to 9.16.37
+
+* Sat Nov 26 2022 jiangheng <jiangheng14@huawei.com> - 32:9.16.23-12
+- Type:bugfix
+- CVE:NA
+- SUG:NA
+- DESC: backport some patches from community
+
+* Thu Sep 29 2022 huangyu <huangyu106@huawei.com> - 32:9.16.23-11
+- Type:bugfix
+- CVE:NA
+- SUG:NA
+- DESC: Fix catalog zone reconfiguration crash
+Improve the logging on failed TCP accept
+Separate the locked parts of dns_zone_catz_enable-di
+Check if key-metadata is modified before writing
+Fix CID-352776 Concurrent data access violations
+Require valid key for dst_key functions
+
+* Wed Sep 28 2022 huangyu <huangyu106@huawei.com> - 32:9.16.23-10
+- DESC: fix CVE-2022-2795 CVE-2022-38177 CVE-2022-38178
+CVE-2022-3080 CVE-2022-2906 CVE-2022-2881
+
+* Wed Aug 31 2022 yangchenguang <yangchenguang@uniontech.com> - 32:9.16.23-9
+- DESC: fix downgrade bind-utils conflict bind-dnssec-doc
+
+* Mon Aug 01 2022 jiangheng<jiangheng14@huawei.com> - 32:9.16.23-8
+- Type:bugfix
+- CVE:
+- SUG:NA
+- DESC:update version number to maximum and keep it same as 22.03
+
+* Mon Jul 25 2022 jiangheng<jiangheng14@huawei.com> - 32:9.16.23-6
+- Type:bugfix
+- CVE:
+- SUG:NA
+- DESC:add missing dependencies
+ remove geopip-directory in named.conf
+
+* Mon Jun 13 2022 jiangheng<jiangheng14@huawei.com> - 9.16.23-5
+- Type:bugfix
+- CVE:
+- SUG:NA
+- DESC:fix test cases timeout
+
+* Thu Mar 31 2022 jiangheng<jiangheng12@huawei.com> - 9.16.23-4
+- Type:bugfix
+- CVE:
+- SUG:NA
+- DESC:add bind.yaml to master branch
+
+* Wed Mar 30 2022 jiangheng<jiangheng12@huawei.com> - 9.16.23-3
+- Type:CVE
+- CVE:CVE-2021-25220
+- SUG:NA
+- DESC:fix CVE-2021-25220
+
+* Wed Mar 30 2022 jiangheng<jiangheng12@huawei.com> - 9.16.23-2
+- Type:CVE
+- CVE:CVE-2022-0396
+- SUG:NA
+- DESC:fix CVE-2022-0396
+
+* Thu Dec 02 2021 jiangheng<jiangheng12@huawei.com> - 9.16.23-1
+- DESC:update to 9.16.23
+
+* Wed Nov 17 2021 jiangheng<jiangheng12@huawei.com> - 9.11.21-4.h9
+- Type:CVE
+- CVE:CVE-2021-25219
+- SUG:NA
+- DESC:fix CVE-2021-25219
+
+* Wed Nov 03 2021 jiangheng<jiangheng12@huawei.com> - 9.11.21-4.h8
+- Type:CVE
+- CVE:CVE-2021-25219
+- SUG:NA
+- DESC:fix CVE-2021-25219
+
+* Tue Aug 03 2021 jiangheng<jiangheng12@huawei.com> - 9.11.21-4.h7
+- Type:bugfix
+- CVE:NA
+- SUG:NA
+- DESC:give zspill its own lock
+ fix tasan error
+ fix data race
+ Correctly encode LOC records with non integer negative
+ isc_ratelimiter needs to hold a reference to its task
+ dig +bufsize=0 failed to disable EDNS as a side effect
+ Lock access to ctx->blocked as it is updated by multiple threads
+ Only read dns_master_indent and dns_master_indentstr in named
+ Defer read of zl->server and zl->reconfig
+ Break lock order loop by sending TAT in an event
+ Handle DNS_R_NCACHENXRRSET in fetch_callback_{dnskey,validator}()
+ Unload a zone if a transfer breaks its SOA record
+ Address inconsistencies in checking added RRsets
+ dns_rdata_tostruct() should reject rdata with DNS_RDATA_UPDATE set
+
+* Fri Jun 04 2021 jiangheng<jiangheng12@huawei.com> - 9.11.21-4.h6
+- Type:bugfix
+- CVE:
+- SUG:NA
+- DESC:set print-time default to yes
+
+* Wed May 19 2021 jiangheng<jiangheng12@huawei.com> - 9.11.21-4.h5
+- Type:CVE
+- CVE:CVE-2021-25214 CVE-2021-25215
+- SUG:NA
+- DESC:fix CVE-2021-25214 CVE-2021-25215
+
+* Mon Apr 26 2021 jiangheng<jiangheng12@huawei.com> - 9.11.21-4.h4
+- Type:bugfix
+- CVE:NA
+- SUG:NA
+- DESC:fix no response when execute rndc addzone command
+
+* Mon Apr 12 2021 zhujunhao<zhujunhao8@huawei.com> - 9.11.21-4.h3
+- Type:bugfix
+- CVE:NA
+- SUG:NA
+- DESC:remove GeoIP and libdb
+
+* Mon Apr 12 2021 jiangheng<jiangheng12@huawei.com> - 9.11.21-4.h2
+- Type:bugfix
+- CVE:NA
+- SUG:NA
+- DESC:fix the upgrade installtion failure
+
+* Wed Apr 07 2021 jiangheng<jiangheng12@huawei.com> - 9.11.21-4.h1
+- Type:bugfix
+- CVE:NA
+- SUG:NA
+- DESC:update version to 9.11.21-4.h1
+
+* Wed Mar 10 2021 zhouyihang<zhouyihang3@huawei.com> - 9.11.4-17.h11
+- Type:bugfix
+- CVE:NA
+- SUG:NA
+- DESC:set geoip-use-ecs default to no
+
+* Tue Mar 09 2021 yuboyun<yuboyun@huawei.com> - 9.11.4-17.h10
+- Type:bugfix
+- CVE:NA
+- SUG:NA
+- DESC:free rbuf
+ mempool didn t work for sizes less than sizeof void
+ Reset dig exit code after a TCP connection is establ
+ Prevent a race after zone load
+ Fix isc_buffer_copyregion for auto reallocated buffe
+ free tmpzonename and restart_master
+ errors initalizing badcaches were not caught or clea
+ set freed pointers to NULL
+ cleanup allocated memory on error
+ Fix a small memleak in delv
+ pass the correct object to cfg_obj_log
+ Try to fix crash at sigchase topdown
+ Do not fail on NULL passed to OpenSSL_free
+ error out if there are extra command line options
+ correct errno to result translation
+ properly detect period as last character in filename
+ fail if ctime output is truncted
+ Fix a race in fctx_cancelquery
+ add missing MAYBE_UNLOCK
+ Fix race in unix socket code when closing a socket t
+ fix Ed448 length values for precomputed ASN.1 prefix
+ don t overwrite the dns_master_loadfile result befor
+ address NULL pointer dereferences
+ address potential NULL pointer dereference
+ Prevent query loops for misbehaving servers
+ Lock di manager buffer_lock before accessing b
+ Request exclusive access when crashing via fatal
+ Assign fctx client when fctx is created rather when
+ lock access to fctx nqueries
+ acquire task lock before calling push_readyq for tas
+ Call dns_dbiterator_destroy earlier to prevent poten
+ Handle catopen errors
+ Fixed crash when querying for non existing domain in
+ Fixed rebinding protection bug when using forwarder
+ initialize sockaddrdscp to prevent spurious output f
+ Lock access to answer to silence TSAN
+ Fix a data access race in resolver
+ Address race between zone_maintenance and dns_zone_s
+ rbtdb cleanup_dead_nodes should ignore alive nodes o
+ make sure new_zone_lock is locked before unlocking i
+ Prevent crash on dst initialization failure
+ IPSECKEY require non zero length public keys
+ NSEC3PARAM check that saltlen is consistent with the
+ A6 return FORMERR in fromwire if bits are non zero
+ Cast the original rcode to dns_ttl_t when setting ex
+ Lock on msg SELECT_POKE_CLOSE as it triggers a tsan
+ Lock access when updating reading manager epoll_even
+ Take complete ownership of aclp before calling destr
+ Take complete ownership of validatorp before calling
+ Address lock order inversion
+ It appears that you can t change what you are pollin
+ counter used was read without the lock being held
+ Missing locks in ns_lwresd_shutdown
+ Use atomics to update counters
+ Obtain a lock on the quota structure
+ The node lock was released too early
+ Address lock order inversion between the keytable an
+ Pause dbiterator to release rwlock to prevent lock o
+ Address lock order reversals when shutting down a vi
+ Hold qid lock when calling deref_portentry as
+ Lock zone before calling zone_namerd_tostr
+ Address TSAN error between dns_rbt_findnode and subt
+ Address data race in dns_stats_detach over reference
+ Lock check of DNS_ZONEFLG_EXITING flag
+
+* Mon Feb 22 2021 zhouyihang<zhouyihang3@huawei.com> - 9.11.4-17.h9
+- Type:CVE
+- CVE:CVE-2020-8625
+- SUG:NA
+- DESC:fix CVE-2020-8625
+
+* Mon Jan 4 2021 zhouyihang<zhouyihang3@huawei.com> - 9.11.4-17.h8
+- Type:CVE
+- CVE:CVE-2020-8619
+- SUG:NA
+- DESC:fix CVE-2020-8619
+
+* Mon Dec 21 2020 xihaochen<xihaochen@huawei.com> - 9.11.4-17.h7
+- Type:CVE
+- CVE:CVE-2020-8624
+- SUG:NA
+- DESC:fix CVE-2020-8624
+
+* Wed Dec 02 2020 yuboyun<yuboyun@huawei.com> - 9.11.4-17.h6
+- Type:bugfix
+- CVE:NA
+- SUG:restart
+- DESC:fix the difference at the macro definition using clock gettime instead of gettimeofday
+
+* Wed Nov 18 2020 yuboyun<yuboyun@huawei.com> - 9.11.4-17.h5
+- Type:CVE
+- CVE:CVE-2020-8623
+- SUG:restart
+- DESC:fix CVE-2020-8623
+
+* Tue Sep 22 2020 yuboyun<yuboyun@huawei.com> - 9.11.4-17.h4
+- Type:CVE
+- CVE:CVE-2020-8622
+- SUG:NA
+- DESC:add %patch6032 -p1 to fix CVE-2020-8622
+
+* Wed Sep 16 2020 yuboyun<yuboyun@huawei.com> - 9.11.4-17.h3
+- Type:CVE
+- CVE:CVE-2020-8622
+- SUG:restart
+- DESC:fix CVE-2020-8622
+
+* Tue Jun 09 2020 gaihuiying<gaihuiying1@huawei.com> - 9.11.4-17.h2
+- Type:cves
+- ID:CVE-2018-5744 CVE-2019-6467 CVE-2019-6471 CVE-2019-6477
+- SUG:restart
+- DESC:backport patch to fix CVE-2018-5744 CVE-2019-6467 CVE-2019-6471 CVE-2019-6477
+
+* Thu May 28 2020 gaihuiying<gaihuiying1@huawei.com> - 9.11.4-17.h1
+- Type:cves
+- ID:CVE-2020-8616 CVE-2020-8617
+- SUG:restart
+- DESC:backport patch to fix CVE-2020-8616 CVE-2020-8617
+
+* Tue Mar 31 2020 liaichun<liaichun@huawei.com> - 9.11.4-17
+- Type:bugfix
+- ID:NA
+- SUG:restart
+- DESC: modify named.root.key permissions from 600 to 644
+
+* Thu Mar 26 2020 liaichun<liaichun@huawei.com> - 9.11.4-16
+- Type:bugfix
+- ID:NA
+- SUG:restart
+- DESC:fix named service hangs and crashes
+
+* Sat Mar 21 2020 liaichun<liaichun@huawei.com> - 9.11.4-15
+- Type:bugfix
+- ID:NA
+- SUG:NA
+- DESC: modify key file permissions from 644 to 600
+
+* Fri Mar 20 2020 wangli<wangli221@huawei.com> - 9.11.4-14
+- Type:bugfix
+- ID:NA
+- SUG:restart
+- DESC:Reenable crypto rand for DHCP, disable just entropy check
+
+* Thu Mar 19 2020 songnannan <songnannan2@huawei.com> - 9.11.4-13
+- add gdb in buildrequires
+
+* Sat Dec 21 2019 openEuler Buildteam <buildteam@openeuler.org> - 9.11.4-12
+- Package init
diff --git a/bind.tmpfiles.d b/bind.tmpfiles.d
new file mode 100644
index 0000000..640a656
--- /dev/null
+++ b/bind.tmpfiles.d
@@ -0,0 +1 @@
+d /run/named 0755 named named -
diff --git a/bind93-rh490837.patch b/bind93-rh490837.patch
new file mode 100644
index 0000000..4b32b4d
--- /dev/null
+++ b/bind93-rh490837.patch
@@ -0,0 +1,34 @@
+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);
diff --git a/bind97-rh645544.patch b/bind97-rh645544.patch
new file mode 100644
index 0000000..e2ae978
--- /dev/null
+++ b/bind97-rh645544.patch
@@ -0,0 +1,31 @@
+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);
+ }
diff --git a/bugfix-limit-numbers-of-test-threads.patch b/bugfix-limit-numbers-of-test-threads.patch
new file mode 100644
index 0000000..6115096
--- /dev/null
+++ b/bugfix-limit-numbers-of-test-threads.patch
@@ -0,0 +1,39 @@
+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
+
diff --git a/codesign2021.txt b/codesign2021.txt
new file mode 100644
index 0000000..d021b56
--- /dev/null
+++ b/codesign2021.txt
@@ -0,0 +1,534 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=fX+D
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQINBF/u5KMBEAC0hPiTonjYEe5FqNzFn73KmcN8KGD2wzujmWWLnFXGEVDEpFcS
+ULQDshhCclwNeXUArUey4nficwpqUe+Xl2h4dP4z7yh3WiL5nA5JRjJjw8KJQGVW
+AkgiZTnJHH8DrzNt9LnDL516qMDJarTHemDUUUZLNxnuv0RDEhDxsXWiVCQZZcw/
+41yIY97uCf30dsDwnckVl3iEmYaGTYavWbKP60S8WaxO0YG57RI1etmlIQ0nMmka
+4bvFnwwb9Jdnwle4LIiRMCGymsheaKCKrEZgIJY+idyBuExLLykiL8iNBj2Pzi7z
+XSCniH9qcEwfqgZlP/KZwujLhGOc4c4peNwpuDGcmYZoAsUD8CZ8H/LU1FIR2A1u
+/UrRREtC8nNTDGxCckSMEquHNURfMk1QmDbJ9gaa9aOk0AArxuTxyj6Cn+KQd5l5
+0mN0R1sDVQq9xWdvnB7N0d3MDhnV7f19iUhi3KYvjVTkCMXjhNXjDH/KXFKoFhKa
+9SkxYGfW25inwSQoqbP1TE5+rESf57bo+XFxfVQuYfVJ5BlZobz+sRl2iDQyBJDM
+uDFyXE/t+E76BmwyHeOI1weqUMYebqHgu0x76dTYj9yWgWdQAC1pXi15/MTIaOtQ
+hWezb5rkI2yZqaZLaRBOIRBIPM5C5AOjL2XbfwUuSr2W4+TvxLocxi48DwARAQAB
+tE1JbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKFNpZ25pbmcga2V5
+LCAyMDIxLTIwMjIpIDxjb2Rlc2lnbkBpc2Mub3JnPokCVAQTAQgAPhYhBH4ckayA
+MKWlnR76uXUPPIdyPkASBQJf7uSjAhsPBQkD60WABQsJCAcCBhUKCQgLAgQWAgMB
+Ah4BAheAAAoJEHUPPIdyPkAS0lMP/2IgMErScBUaXrZXqYXoluR8xU0p9DyZEBx+
+ZGNAcJ2CTPAbn3FrkNGNpK4SOCLXEZPKOQ09umaIxl8H6uEGaTut1JLj1qGaZ8ID
+4gAeQcTIN9OQA5ElQo+ci20XE9JSvzqY1zb04EkMuVL678xPCYJhUSLS0MAQkcDJ
+JQLN17SwNi4vGqzVhnwKUviQU9/s+LRUkThsTg4qT0fNnmGoVJXqrshxJa2ZWM6J
+QtOWBgJiC6xZ+zRiZS898L0tekU4o9yxtnnDWry2bI+mJbxAp94ZAXgKahOU7LKV
+3SPxkx7TAng24nOWi1EaP51pe7usTFH1BR3CUHZdoIQ4xruZGkt/qPumskofzl+1
+8bw1bEFbq8S6jC+twT3JUcE02HbEIbrd6l2T8pYBXaojFggGjUTSv9d5YUN5N9U/
+/Qy0o3xZwHNdXLx6xSrUO+NT5JU1Nh/0sutEH7ru/YqFZof9vfCbV86y8fIOPgk8
+LkJNUSu4QCJ1PHKB+fJp7yAhlPkOXNG1b9+W/hVp96rdkovpCUkLD83s+suQyJGk
+QB7Qpem7nS4zp7/Naui+g3M3p/uRSzZgELTnXNyY//bw9fOqx5SDLjSUslUMz+TH
+sFTwfo/Mot70MPHMe6aE6tdTDoJTcv4Iim/8MDhJ6yqKt8sxprataZoWwFi6zAF9
+BzWkJcrbuQINBF/u5P4BEACso8iLzFJ+M1wqcsCDup+GtRMzte04CAlLmaLgyzfL
+3xxBo4AUgX6UbUCGycG878JVn52S6Nsl6FlasmyH00MGjZt1CuNz4htfSmLGcBMj
+IwQv1CYR8bm9EPwR15NaWdgzJHShCduMHv4HdfqSa6UQfzO/P8mwioER19fkDQSE
+U1KsY0yl//ipWiW3ZJGShGHLnn4YbxogQtsRPESKUsQ9MtzuMt3ehGtkN4RguOXC
+6pCWP8J4F9lgjSZ+uLOQKV4rmpbSMXntOJi2nu+14Zj36enW8xyAXO/w5z/wci2G
+LN/aa/v2a3GM3WJQsPNzpDwB+pr1n0Kp+wK6K7siVmDoV+WecD2KNNgOuSyUve7h
+BjWRM9W13LsgLGhKJA8yUpPvhXk91vLRUhwFJ2GUirxLPLs2TSTjHlHvhcPy6aX2
+HxbHkcOt53n2h0zx7ntl1N7XHozMWmHphPsSvOZ5StuQRAFvfE63EyfR84KUPIbZ
+kvftbAJPKCJC8W6GqhfORzYZqldDNNva5iYHF1OItF79ZLGI56diNsBV9SOVKk4d
+f9Qp6urYOd+9RGQGmCQte/WSFaU9z9QYPEGl1NlmGAWt7KKyB6QXZH1oEMwXtPd8
+4GQX3XGtyggEp6BGwkFFWRQzF1EZ0maRPrpN4bpQqLXSJiqQxsX+FAcOkhpo6X7b
+8QARAQABiQRyBBgBCAAmFiEEfhyRrIAwpaWdHvq5dQ88h3I+QBIFAl/u5P4CGwIF
+CQPrRYACQAkQdQ88h3I+QBLBdCAEGQEIAB0WIQTpq255IzwEFuiZP0UMA6+pClln
+xAUCX+7k/gAKCRAMA6+pCllnxDtmD/0YCUccmKudW9PiQw7mI1HSuwL6aS+MlG6/
+LJ79nmi6TTpe87NDcEv2bBpVWYcQK87smCxIYyuj4SCZuBQivjyuecipRoG14PUh
+KU8UiqdF+vKDvUAA7huOBlR4dgr7/KvjirnbwO3mGouwZszDOLvaHuO403+TPm1b
+mJtEA9y6Wbk/+PTtfPymQwnaiJkPhQ6Q7ZbyasRIisO3MRPacUjt2DXFi5VV/Mya
+8o5Pae3zY+5SjMyE2siPnVE4/nzp424jDzSq4DGEUip/x+QYHFwxhCJmdZlRIFmn
+vSCAGXBpyPVbckC0Gw8kZ8HsGzNbMbx/VjDG3LFT8TR2Djsh99/6icO1J+jDkPNn
+IFEsYjAw7Tos5IPhIT1XkSCW84KqBG5pGI5h7fJzf19sR7Ki6XyFe6VYvggeQIS7
+VN1ISl3tRN/dk0GbrKkUKr0OVfaRD0wXQHTzbec8Fs43G0z/DKoFutGB/J3yjAmw
+IOcP5R6rqjhVp4APQpsB51XCaaqEXaXZyMWrKILbPIjlE6FHeh1qd+zdIjullnF2
+YZv89HU9dIXxKr35CM8f3BWm4D4cRjsUOWoGhMNwdHzHYOdys6T72KBK9D2irz8C
+L0bycjN+SIpde/auo+dQKqKD3/ipr4dyKJyOUsls9cyhxkFp031cZ5rWbXcLJ8/s
+1BeVPjFCngqPD/9rMKA6kCSnTo+rSqZRxo9RlQwy4K6xfPPdHZvBi3A4UYCsurgl
+qLtFtGG8SMWigmUZWLT6uhsi0orR5wfG7vzajF0Hcd8yuWa4zGeu0rFJXgG64Pyj
+nJHtv2Tzi8DNY5Y+8mfXqUewyEUXQLxnLqpGlPjNUAJKvjm4SstNadewgWeb6F8x
+UQJc8owGmK5+yZQ5LZj6bjt9Dr3SCM3Og/iS5XK5POGUJgtgXLXp3uy7p9SzsJ73
+qhrDII/YqSwToMu8tUv4xEGxyceVPDm+ywde5SXYmtvMYrq5DBdlalZ9kBlC5fyc
+IIzKoIOOkKKpa/YAyKdLTk8ZByjDk1RrdcOyP4VNpCvyisf6JPwWfKdM5mxf47hb
+s7zioUH7miUGA6i5TNi1e+DU2mL92sJwQ0WkHw6KaUez2Y9CaD8hZnQw/h/JcNq6
+nb8y0GR8h7qWms3K0rtSs8SuDXUsdZrFAeURivccmohXddtt0FDzkheKGXs27SSl
+8oOCh+jl/hEUzz2mJGFwRBo0FI5ipN51IfjhMJ8zzSmvfrtdwT2Tu6wSY9DLsYR7
+0tWGOc2HA6o7kdcC1V0p2jvQct281FrC9dTXFgcDuGUBYhzEZeWwjuYQXBzMquF6
+ersVnPo/Z5l1SnkK+wVBQbf4igHOaobl0AQxnb86W4CXBTZ3CvRq6o8vWbkCDQRf
+7uUlARAA7oTlVZXhdVlPnSQlnI5JwovG2jEIrRifpbyavlhlosX+rgtQ5EILn0DS
+PJ35CNfOAeOcLQeRrJAZj6w/x9FHWfKRAHUeiTTsVDzTrDyJBCVuC40ck587KVUc
+GuB3vee03/y8qAczj5TZNaDdl+4qAzOFQuV4MjwJOx5fsXZw3dUAS7pw1mTkAYTh
+nz557buc8JJCxrebT6FvN8bugk7LJ8SYmI154Q5wCdXB6Q42sdSMFlKKPYRRmIvX
+vI4Ytl/J35v43gCLbXccTWQpBX+ra75sndS2hYGQhcC+WdNtt4THgU6Sb7ErpJK7
+7A1r1Wf0WSioQ2VWjT0QbUE+6IXD1J8duh6ZgzuqppMm13aDdMDZGwdcxlFw+vlo
+bM+IAX+QgzPjslM3FHVvvfCLka+ctMO+lL0bz1G4njNEXcIAILhmoqRI4ItVH7Nl
+ZI3pAfLLB4qbhTKTIiS+uIoA82RU86ozr5oJZCsJa5N5EpJnYxnjv2tYhU42eh+j
+hyM+5ra1dXtveKvL5SkVuRUlPZvgOuwQ14Qnj6sv8CmtBpyVpupHmY2RbNtLVLdH
+Ix3lyQbgVo9iMJIoXiPXmcRWCgLgOeuETjFXsEcFLxuN+D0My0dtwWcg+271vtPn
+0orTObxkctFK+V32ByJYxVvytNCW245bICpxCicxmh5kYEmQCnMAEQEAAYkEcgQY
+AQgAJhYhBH4ckayAMKWlnR76uXUPPIdyPkASBQJf7uUlAhsCBQkD60WAAkAJEHUP
+PIdyPkASwXQgBBkBCAAdFiEEqtu6UHTxQC97adVrxbTukxqfnf0FAl/u5SUACgkQ
+xbTukxqfnf2aeg//ZspIr4ETVf3ai0dXCm2Pf6gpM7QUfI9fPUHymvBhNrNhfZqN
+ADpzbJefzLif8as7kUr904zTc5Jse5a0MzCrMyEwTDIoCKDv2ktLq1L20bwflZs+
+oP27CYC5FkJYgLYPrQZ/7hRC8EWjgn6v3seJtEo8G73kiVEBOnxVEfGZ8zxmX1Cp
+aOWfhiFYCmkEe6Ck9hG+OaWt7+WW0wWT1UFiluzRRAEMROcCUtyB5IPCqCH/Rz/m
+/bE6G+lHZo6OY/wY2q/oW2f9JB/4QyJeSI+fkjY/wDjfNQjiPMLfZctv25IeZYVY
+ZvIKrdnjbzRe+GwYLg5G/SbpSOEb5O55Ps8mNUpYFaMCfefW+DG48a4WyUGzFr52
+BMKvHKtc6c7P3+muBAqcNZYxRqyLIQiYiV9CCjpIV1WgUeedroHUXvJF/SAvNVvB
+ZR00I/D2hsD9BFh3B1FEYbw7GuYuG27Z6fgRolOQUeTabjQLI386SV3IxZ1KFwm4
+GU8BTbUA2zwT3hu/BaaCI5jTSLyBpdo10b1wgMEnqmXG6AbNdxFVEWwE+CE++BHW
+0YBhKp8fghHwwN1fwTCV+QyA4Qn6EBVDkTrUPKqTeCmHzt3AQh8WVrsmrodyr5Yp
+69LoRnlkLcGJiOCKMOmkop9Z32ckGieYHrl24Dw6hmUSWDG+pBn0ezbSPit3FhAA
+qD2y1VzqxsaCOD634Ltq8AbvphP8XZPrrsC3DIA36ITaCQDa5Cn7madLCXy/uP6N
++tojtzXf4tUzumwGJGFLtdMXNmuEuXrj++NrU1xcscbvDn5O4NDMadwI1EDlQo7w
+uWK9jaQAVhF7iDEBEazZe26knQFxC0my4SyO1uQaEg3BKHj6z7dkAjzWJaQZhzql
+yrRzbCiVUUI8ZkrgM/+/6NJohUG/had6DoefgK6H8/yjgVx1Wtx+XAuBQ2cvclhc
+TAmHs128dWduNHxI2Yx+uM4kuHYpPKBwdEh91ZNeNqtBJURfSVjBCjKkTYiS7kiv
+XyvQOBdZVeSVpj/QoAfaUlQoBVm7aF6xf7GtYlVzjMsLYdpjXhy4ZbQQVUuPI+1f
+yFkw8PpASZ3gvO6KQ4V2w3hOYAxYQ1kSwTtaA7+18nyv65VolTmAotmLun94UKn7
+zjopByBnC/XEqsU3tibg9A7xQ2KUpWkpmG35f4ZR9aEIxSe2Jmm+Se0JfiAq6Szf
+dyWvr/TzaS/BZL4WEPk2Vw/mzWEPZOscpIkBFGK+Ul7yuXvbrbwr+zmAikHmTb1V
+XfPb9eBnwDDuRHhLBym4FMrPjzeziAxxkScTfDjWq6rvMmaEe1CX+dj6ldx9Jp9d
+iUngol89eSgAQOtptjcit5o0Y0Mu/RF6KIBG89ghFly5Ag0EX+7lVAEQAKFx5asK
+W7A9BNKPkaXgym0AlW2szQR1nwxi3APLVLS0Al9Y/3mnBbYyO84HDr82AtMSWSMY
+UZIKtkUj2sVqUb+xHOPkY/MenyoBrCl2qaTVJ89nnWMUjtrX2qk0O09+ByoYXTit
+BVPAIZ/qZfGNB+Dsp1haNKRdowkf6WXkw7A9dHB5isVmaM/Z0THNJRHwc6mcqbEV
+M4fDL+OCx6m2KQHTHirk+OE9Nwral82IIqj3d5UBHmjHAbQNXTDzZbWg6tYbLN3I
+EYxSRQpkJZIVheyBmWFZuivm4hCDZxJlZ1sgxQeIZk6wR2LBR6ccTW6PH11PhIpr
+6O8aQh8JUMg+/aJK2eQXINozYdjOTUjnWAUeUqML7Pg/vERRAgHXO9Z+NTIEWEOo
+Ee+8WOFmrmfjb9Uz27DtymhUjOl0ryiG6F1b90t1rZvVKWR2OaCUhICm88o3MCgb
+HFeOh7v3tnQb2Uot7kY1hgch6j1MNYWGb8LjwoTAmx9okEv9mh119k+SdVJP6wsX
+ZtL4860vTfTw6RQM7rkZBzTyf4qCvU5uRSd2u6JqtUhw4m/gkKQyW8jLEkqX7JaT
++iEBgPzjALvfSWDbDgst0szqU5jltYpgjG3On7/ZGFFJrkB06orUvovxLThWWvm1
+iugw4/av3n64hl/yfxvKQHLQA3Kfkjjzc3oPABEBAAGJBHIEGAEIACYWIQR+HJGs
+gDClpZ0e+rl1DzyHcj5AEgUCX+7lVAIbAgUJA+tFgAJACRB1DzyHcj5AEsF0IAQZ
+AQgAHRYhBGFPhWcuJXtdQn6ZBiGZBzrXgrS4BQJf7uVUAAoJECGZBzrXgrS4jfkP
+/ApYZIRnBL+LdTPYdbZDYXotkE6RO6ZsPdcV1G6na5jJ7igdVuvoz5nP3rX+oQoH
+6k9DysQzyh/SkXRPnbOOyvQsI7atmH7SkhNn7ke8zmEJLzApHA0ZMGXtBJHQkZwA
+5LDWIQb8HbtJTBr2DyJcQdpRmP3hHDgyYgwg0AUG/2JEwYqps+/pqJCrLSP+GLOA
+ia+wRH9xwv1Vl2gIxWXqEO6U3puqUg+0z1Av4Gj/xzuw1F3eLrOfgklhpASc8QtC
+89kx1nhFS+OybQfRAH7YN9DKE5L1kJxQ4t+uW8TiXf9r+MdcVMEI3LATZRtgowFc
+493g7EkTppmqabFns9OamyxXdIzLAKoKvykr7HPCBWUnZn2I2RrcGQltRBQlR0Mb
+jO+sFi89XnFPwXIw/t/9zoq1bXCGTt7H5RtrfxC1wTYXqLEdV9pptNj7j5mlff9g
+DMw1v3MfUxbz9gIDzs7ANnw3SkWi+d0v0bLadWdItkq2WKvvgB58NJtKPc8Jwilh
+nO7W31U/kv8FR9JcFXzS9+Y6ejIClF4FAwr5tK07N/xSFAKEs5kyAYEKxP6vI59m
+5h+tO8cws+pi4gqfWa3t3b+dVzKl9AIkWAYjq9FvbfiqZgKTlTviSUMpmK5qJVld
+72+NiolUVniJbw9Z10ps4G4zmXSl1ZxyKnehUzcKyPieEEsP/1/tctQx1LhVu0TJ
+RLtWrE523hqxpqDdF8/QrNp9dX3YVoEkMQW3YYir2oERtaosWXmRjldq5dNfgtwc
+lhG+/CP5rxNeCJlI+b64pC/yQMCrbz/V74aAipuv7ZZMflgr7ZD5i3jyM/7/AunS
+qOUPwkKrjetNF85eibeO7c0Y9/HhILkLQ8EoNfJshdc0/scwMZEpLHTMAHSrxCAV
+FuhLsF9epenA6IbtuMsp43aSxshX05RH7F94uj4VCMUSs/90viB5njItpPdZCqUH
+eXSvLSjxqsmS4Tz9Dn+uWvxleBLRRcpZykuNLGgwVXafWftWbA+U9KaJnDWFdzjJ
++gAsWfHfFBOa1RfXYP++e+VJflcHaEZ4byLG5Zf1HqAvvcaShAVuMXY1hoYJinvh
+uk1zJRW9dP7apZx7BXWxbWcn8LMR5GFfunl/M2iNASmkqxJ9gvy6TBRWJu2QeNbN
+5Ks0/GDUawQqvhmM3V6zFQWVsPwaHpufIaGqnKC2gXaIHXPP0ldyXdLXwgZ+6A7D
+IEqHQB2BDbiJtovk6GaK8PUCEHTiDmRF/mBzlpBJOn+Hc5ELufgr9E2lkrKJzFag
+CBCucNhVEaUedFrycxfSALing7DJPWb5cobu9K+3T9L3k57XgxSAj+g6vOxHuxHL
+ve1IPheCWfkKpJH5faFDWKpJYYPauQINBF/u5YABEADgWTS7wFA39XvpWNHSfAAR
+2/nlGWuTvD7zoirzUwOd2+I2XYwgl910KsznhlqDrHZlqKuGRjQlbpyTbsOH2N5k
+IE+0uEXidU3iwslSZ33RLL0h9+czDnlgijYXLCg5ScswBEC1E/kXX685AUCTPX2n
+D1+Ymxxgov3AvItVxKDd3N5ERsy6hYWPK4ACXt47hJFqPfPtnQe2IdFkRm3bOuX/
+X79Kb5N6cAoao65Tpsix1pm6tTNww0+THzIWzK/yhi1/tUOv/QJMEVAxeBAPr+Pm
+mvjHvsI9RNQt7VnoHVkqJhPDxyQZR2IOVQXvlYyCtkPA4WQlyxLzWM24TG8xhD1v
+zZzA8qs//o9QI8OLg2ZYxplC4lW6GEZk3GnrTXs7bW6HUq+RlayIbDw7oMs30jAv
+YyDdQpZrYuZvsWKbKu+65Yi3M5kW0v96LT3ueMJaL/RanL9JhAWuEqyezffsBZ5a
+88/i0n9FJ8cQ1fZq2/GLq/mN2JZ3e/HSWynTnlmk+qGk2bq0cRFJNHAs2HNAm0Id
+pjSFCPmek9j30wp2c2knML+SsSw5h6570mwILuKwFr6i2hyFlPk4H7nP04vPQ8P2
+Pu5O/Cfg9rPSBjIi9FsNS8/a29sSuOmsSGHZnMrVUpGw+iKmx/jVejOtqe6hYydu
+MSQtIU59E2fq5TM4tub6qwARAQABiQRyBBgBCAAmFiEEfhyRrIAwpaWdHvq5dQ88
+h3I+QBIFAl/u5YACGwIFCQPrRYACQAkQdQ88h3I+QBLBdCAEGQEIAB0WIQQjoUGa
+YHzyVyZWN3UsTffOV4ELlAUCX+7lgAAKCRAsTffOV4ELlDerEACBP9kAH17GHloL
+XJjd1IHttRWU2Qs/VV0H14g14hgRz2/Qa7KRR4mGrXPKS/ctMkDXwlvs4HPUTeO4
+MMT38hwxv54AjW7CtF8DR3EQFXKR51roICQognvqpPe1auNERdLzAdcn+NoHEQB7
+eyPqjQM3OGGq0SVRwNnv777o+Kd8Ncv/4fR1xvA20Ds94G5vCYpHB6J+lPPVXBmz
+rOYSf+QZWsXjAZdnAAYkpEjfJhNrqvqSoRxZ0dweCqieenm8Nzt/vdL9nT3+4AGy
+5hmaAG2ENj5AhI194gtgACvKwCl5hF0VKMhtm5d9SWS+1quHzgn3UFh3VZrfjPid
+CR64mIu3RpZe7EcR+lMl7gCJxdFlHVD3z1lbz2V6u+xH4ZsLrTY+v8kDxzY8ojM/
+zDbnlEK+xzA9akhlaD3D3wKXRVuSlrxfEVv14mwKN5AYHN7bLL3bjOo9WYtLznH6
+Av4GqXSQ+LOl0+6bLKmD68/N0q2IiZwUSOsxTE1fUdYPF8eiN8L+35Qt0jwybieU
+a3JYtmO8EW4ZEmjJGwKgyrf+eigJN2/0AeBwcJyUw1YfzaqqS35NNyn5eKANyFQ2
+ZhIjuXRyBOoUMBAx2TSm7FGeFOIw+aQgap6HuGbZ0EZBz6hr9ogNC9FVXCPENKo+
+GdTGoIEs0n6gGOPP5ssp7xUK3420AM3HEACSmYaNC1Gfq2d81fI0TBJ9ATCRPo14
+MjJGiWaFaXoVp/lQeOvlX2JyBG2I6fhMGPGKntCfX+/MERLNAiahQgOjvnOCQdlL
+hbq+6loQ1eSTX2AXpRlQpvyxLuebbM+HX3N/9mqAksgQdljmqoJQbiE/HqXqjmKe
+16ylU3Rjabyc2p/31p7hm0IJ/3yqDsM06FUBJ108SALQyVvKqRA6q1t/Odb3xgt2
+isbCEgvhJ8kYz3LQkvTW75rSa1cM53Udd1rbyo1t0PaOSGeUZw73/nY1+6LtUEg7
+Q0x4ohL1UE7z7+14mAtn4OvGDuZJil7Lf4cPszf0SFoHPs8iUFpSorBwn3u+5ZXW
+NYFblPU2WK3O52qZqsjuQI/gK7uQhXjJO5nA5M8Yv7bVrbLMOj64hdOpNbd56Ycc
+qwYbHZL3WyRAN7TNg5ZlHgIVac22StawjXiHWDGaAXpCaHJn8ryM3LY+LTz16R2M
+bi+HVaw+0fY9f/mIcOdT6AyDg+V200GkGXL6aw0LZkBZmDin+OMmL7AS8TZ4dvZt
+zj+sykcT8DsaFj5Au6zHJoCnsuShMquHOA/vcUkhoe8/E2Y2QdiX7zwDM8vFM8tX
+DujFLNPIZuItcVEpE3ysFV2ZfVgBXoxTlZUQxdgJBQ0zg6Ez7rDYEAhVqo2gY9sk
+XtN80X/unsjGSbkCDQRf7uWiARAA3i7pu8/QvukeIBoIk1V0GHGPjX+GeV3fR4fu
+ciYgx+NKTXT/oJ/89KVeetT4CSnGEZcEpAvsBL3hsiblJYyLVmeoCniFlU+rMem4
+zYP2PnEX70Q56d6SjBArs3K1FZK25S5qqv5ceM10NVRwPufV1RIuui6mQLm2ZwlY
+JyyANZZXMrHMJdaHpK9mMBSSF42MFQZhcauQCrhMhcpmZKn0D2+PpRveYwSr43Qi
+qBWR2INTDmj/V3ERMviE7vLajWQcmDdcrBp4u3miAJcJSn3XR5SiuL5W77jFEzgJ
+zR8yTC4hWE60nWJOk8UrEbpLyr7mBE0Tr7+1IBMgVXh8WHyzLE2ENREFvtp8KlSS
+y47Ky9n+5aqPI4M7epMNwU/ZGQnC8o3yX0zZL1tKq0fTAw1Ly4NGE1gRbmzrQcCh
+qUHg/J4KFYBMg8eCAzuPp4CRk8wUzu4fRWrOraoz/7bvhH8ilgPu1teLLKzDdOdx
+QAaiz/nGy00ICNbYqifR5m73K/rDdjtIqgsMp9Az0mEpgVNq8SPzM5grqAnP/iww
+QxwFftiXq/pEP2d8rn65e8NikN42Q28PH1D/uBYnOuVdZUvjU9wwywmfyr+NZMaH
+X9sN8R3Kk990W9VxwdOTITpAjz0qMtpE7i/GwPEtpZPTIfl54+cVKvyUjBuTXkWn
+vXN+6MkAEQEAAYkEcgQYAQgAJhYhBH4ckayAMKWlnR76uXUPPIdyPkASBQJf7uWi
+AhsCBQkD60WAAkAJEHUPPIdyPkASwXQgBBkBCAAdFiEEBjEqvVaiYb6sKxATk1aQ
+aqvQi4MFAl/u5aIACgkQk1aQaqvQi4P2Mg/9FXfsIZAgPN/Dq95y1fHG8jsPXEoY
+VNY1codxxAaNqvBXZkfJbFwSYpLY3xIbyxHuGuOtC9NpIy9M1+PR7MsxtZAvSjP+
+flP/12x+6nP2H3NWOICpsY1tNOnQe2SjKJxZXHFnDqDBgKpv3QfKUHmYEdExJe3p
+NQrjZAgmdbEHeoj+P2VV5vqRrJoqNV/pUbM9czfEHeMVMm/mwWNOi/paCh1y/PxZ
+Mkj2bqLMRFfML9O/7QOJRxu3wQwl6jJHj4o6CHks6t237FSB+qZhhQP+vR2CZl5w
+lQ4trw0wpNgbZRIMlU3tUfFQ+KdFsM7UqwzwrVgWFur5r7KrFzJN88EKSplrIY0q
+se6S5b58H7Tw1jtfjb/xF6jQz5aoZ9xemd8roLReRpKPq70o2eIP1HkjCtqmd5Xc
+RQaVEUvlv34WZQ5w2eA1bEBESjbrKhX+H0Un0msUS0JpnpegRNZqW3Bedeos0usy
+MsfqMYmZEcZb3hw51XnSb8B/WhkSmcoEuECRxeCu1tw0pn7o4GemAeqT5ng8LXeE
+RJhrUTlCIyRab8TIQZvmf6XjneT0stZLKCoZUXO+7FH7F7nPsew1dU+WFIauQX71
+PkZp2JMT7W57HKPuEillF8v5+H1k9Jq/2k+ZdgmT1Gd27nALBOc7q8rr00Lf6BU3
+K+XsfWo+p08CXKudfQ/+JFzzpyKeX5nVqiqbxqUakPy/Ot010/7457YVpvcLmcvT
+Yn4cR0dottl96lp5wT1jN7VXfZu/tsHEtTg1ofeExNuCL8DZVsSN836idRmObhLP
+dnYmThZcXBJ3RgSniQNwvuuGUtpH7OXb5vnAOe42+n3yucxhPI9Gzo5g6fTqWwb+
+qwh39ydxtiv3v3jgFixJLj/HH3MsxTm6cNUTWNLzvX+HugBeuOfyDG9++fe3UmZe
+MczAF9N9tDFP+0b1diXywJWfSdVLBmMARYeh0Swjud60SQLTqaqXVfPSECGo9LVc
+wot2u4q67QhUC2OTKiTkF6QVE05iKoPEPkCTmMvSpbHF3ERZE3J6YsVg17Uc7LrZ
+7DRRF+03mu4njS8LvIoeBuqsB96mNQNH/PwLSANWTtclCwj2C9W1HKy3zKjnu3kC
+PHLzwQFEO28TE5EsblnBdA8ozNIV887V7yw89MxPhpuXRn8BVAU1S9Dj7j3mNHLj
+rVAgZmr/nx3oDt8VfOZpK8u3u1voZdC+cnTBdcG2gzM8Ya+h8C60Y8dFzykr8hr4
+b5gDeDI1OkQ2vOQHtnQPdscYKl0v1ntHq2wrFuCIol4WneKh3Jrvdb37cL971u4g
+dpw0jTO/ykCvLlipxjJ/NrnXFb6TriZRgWZqiIwY2lKEfZDXqc/iOa2L0yBr21a5
+Ag0EX+7luwEQAM/CQdinTzIHaEJsCe42g6tt4dBC/UC4wD367rJcyJbEd+qaLJwS
+CQUbg/wrEdRT+aROHVKLwrvXxtgJs0x15vvFTurkn1BnNMh7p8woYwip7PKrNn2+
+96Yg7Aqc3a3gkDQeF8Q7uipOH/5feJh6l7Iu718pvnDUw4UFZt/RUrdqseFXVwr/
+ffSalLx7gJhL3mYuU1qpJZxsonNwAS43eViagI0FHSqixB5kPgFcbBf3BIiisOCy
+a1L9a+zSt1y1aEFC7m+9YlGJA3C0/X8s+dK0VWOrJlP/WmKUp3Epxpu6srsBItcT
+YMuGA82/03YAJ+jpGMRb+X1Dq9vuOUxvDjG+G10Cgew2EjiAkXpVg/1NsCrQWRbs
+KtFf5PXGfKCO0i8hEzwmJLd5OlNIIiup450iX4eS77Tey69hGyweLIC4YDPDwFpp
+bkDdRG6nDvePbEHi5z1L41NaWNa0wEyh28OqrmD0FCcGukk24pBVemVEx0En4siQ
+la6/1QXQlG/wTi7Yi71V/4oz7iZ4lSPWs0ACFGD9W5InlRykiRXC1cV27f+qMw9u
+Y6UbgvN70cWflK5C7e2h/eAQfxj+seYFUjMnJTkXiZE85m63p1Yu2A1c9+jqJ0L3
+Lfn5YIQdtWdY3Qc1RIQYPVRl5NcgXIPV7TwjvnjowuHjWX0IQbhv61lNABEBAAGJ
+BHIEGAEIACYWIQR+HJGsgDClpZ0e+rl1DzyHcj5AEgUCX+7luwIbAgUJA+tFgAJA
+CRB1DzyHcj5AEsF0IAQZAQgAHRYhBOJesM8c6ASdR/HZpjPhDkoYOo5GBQJf7uW7
+AAoJEDPhDkoYOo5GhpcQALowCpZ8UowMWlQFfZ2ySJalnZM6S2RxCFiss4W9pGuu
+9PKuN2wdXW3HGkBGDAuQgLwanSfhGSt/urT3+DT40OlDMzanRwEK0qiSaSs/xBtK
+dNL7JmGbcWTXpNP3aHhfYhVOg7NJnsfZ8Ti3dfuv3ZrjcLvgdnZ/s6O9S3gU8DtH
+fpnOfE3hxjUEHEw9hs9Otc6foCqMDZDvfU3emYduD5AvTiXYdeD/mZBD4OmF99II
+XWNuQexAJ+xgOPdvXaYt0lBuXmfMcn/1hrU3RJqguwnPZ2cU5zo41/uSbdsFrTHK
+yEOLTn0XYYk07mZGdscljzmXbpsbAC4Jp8CDBhUfdzfi1n3AOyblk1nywfionLlz
+HDtfWQYCxp16N8S2MU7tA1w8rFNwVDVwmxIfgjLrjPAgvqSpCmLHTXNBfdLUYRAv
+SpY9TR+U4YOOuEx2Niwnprdjm1qilN+fmPR3tWvVChlD3kHmSpi1+9ix+xizlBjN
+eZ08Eq5rDBPsTpqJmoNS8pHE0EL3IVpcB1pZ5rd6UBSa7LoMLeWwWm7Ap5VZALfp
+jMNws4SA2q5OTRY2or/+m1+cfDWIP+2XQV4YaNFMbO7XKr3vnUOxY9gyADqfRJiv
+DljHiw5iLzbkaHs7dYJOPNMGMlRzZfkkxg6Patx44TQ2rO7LnyCgVdFZWDHNevgR
+Z8AP/152xfh3qsOnT+R32Rt8CcwXmKFxLylgpjegcUmbutow9zdlX26qZ67cJ/3p
+hNLZgAYKPrGecGA0BJ2UzsPEKKz8I/dAp96LpHo/24WqUamh1z2PRAgyJGC43zm0
+rA/KAlcht8bbI/VuZ5eAYXjH01QfPS7i7fFOryYYFqfH+BTp3ZEr/A7FkcOZXmNV
+Gg4+oC2t6cJnzDsM0MUJ7dgNAHTLGx6RZZahdE3LJ8oVJ8Vek9KtjJbPr143EZLt
+ymkiy93pzLUaKWfCZJCCI9nfJnNZnvoQXv0l3wnrQIFE14Fv0jbTALHRgRJlB4cZ
+i3teEuf7shSDsd13JDdfmxMsxnfeVsIUPa+J0GBSbe14JHXlcd0t03cpbzO547Qb
+rFpD98XO6Y7OefWD3pwDF2Izjnn4Cny/hpUIEO1A2j4qHhUkqmnFmBO6yIFic637
+CJnYe3uU7ss/TNIUKLhujqlcNl8WeOMVPbhnCuOhyQh2aioAKn1yiQ1EgNSIGIVD
+LwqMt0kxI52/aDkZgCcEfBFC1c17IeUH+G0HMGm49/acFHkhX61S4efXhvzH5J0l
+Dr+0qk4aVKNwqkUNp56GSMLhiiSYivX9Xa4qQGNlmrki1pC2DamlTXDLB67XQcRp
+dAc+4nNTK4E/czrr0+wlkgz7pC1MAllCLilyTSPGnKIPlOd2uQINBF/u5d0BEADF
++6hDuKvzbmKWZNXjJK6Em/5nnzBOa155YQLN91zMs6COI4p+YuIVPPzVWZYR0yHs
+gTWw45cMV+RYwuL/P+1Z84bgOyPloIVF9VQjOC+wB3Gn4qmTzobr6q+UfQVvUiUQ
+8fGG11teWvYpWiG91uialjHZmrpAOQxjHRxHPpi0cZtTFEqinCIy6c942xbtZnzf
+nzPpxkKl0a8s1eKZ0KlDK6Ab59nxAinilohXRg/U6sqypsyLl41L0qMZek5dEt4C
+r3spdSkZgxqJpLTqQy/5VB4pcfEaIaank3sLxhpil/oQiq+38WA0VkICQyeiCsvf
+eEKyt1C6COBNH+olegUxudTKDHFthyGMPRz3McI5jHxCyru0mfLJag2hHXzgGoaD
+VkYIwkvyVsHWDqrZMMXcCIUVlpphxtHo1M32AATnWFe4K1nFdbejR9XC5xWOgwbT
+zCblqporHzU0c8WBbfJ0Y10IDrHsa/F08PkFvVN48Ydik6rcwowSPxP+59Q9AKLh
+Isd2hzfWU2zAbG5Ph1wecwlYR3tp/0i3uSTDXfuuaY+vrqpoECN6fnSg8NxiBbjU
+JR0Ju6KDM2SeBUz5hp9BzL8+OPTogRZoinxBogrRAvdGLOnLG5hMjBezzF8UEvp6
+IMisGHBZgXoX4Juvf78RE8JOwHa+HUejj5kYiQW6TwARAQABiQRyBBgBCAAmFiEE
+fhyRrIAwpaWdHvq5dQ88h3I+QBIFAl/u5d0CGwIFCQPrRYACQAkQdQ88h3I+QBLB
+dCAEGQEIAB0WIQT2AU9wN9W7TuO6I3E56nu98JFFWwUCX+7l3QAKCRA56nu98JFF
+W5whD/9Hu5cnJ0hnzqk3MQsdMXbTNLsv+KePV71kcMRat4hjw2Li/TUaC8xtA81d
+O/1obmsuoDAgv82KlQ7DLDXjFk2q45lJdgZxAkN3dEoYakdTIEi11FvwbhV+qxZK
+jTq3jFQho4i3GDLgrvBMG4B1TGMH0IPux9fmBGpxYKmp1GjhpgoMXp9bqzsV/mPZ
+TxPlmIpeJEO2jeCWKhHHw6rzwGjF68G3HiJ0TqvjdCtcNrwd3GTDsdEJtUl49aqF
+M7VfoqKjVdRO/YDL//+TJNOYz5EBGjIZxbhgZJ9Qz+geSBx9GJtDWdq193ofFi39
+oleTFnEMj+OeIr1Bc2pc8Z3HJttFknicJDkeze3mM0CZAkhVkLFy6DvAQkXrgvfp
+AUYFACQW8E2XmRBiKd4huojWYz5QGSEIk2fYRVhse2HAUZ9gTODSX2L13nls+BEi
+sArsmSFA/RQslDXW+Jl+P0e37BzN51uk2Dg4ylJUBgcpTRUn4Q8c1DgHDhkEVnBI
+ny2H/MFuhImw9g5xqlBfCEKh5D8D0e4fX28MhSsBlOCeIKJoY85U3GNY0tlIwAt8
+M7IIHe1n1qncPbAMmq0K48J1lfyTEbXpnSfArzEdbnosjBUaiQX5EwA656eZ6wb3
+Vq02UDei6KPuOosl4Voy+Ffq5MCkanVMA97/0wV3CeCvQYGbsvsUD/9fLYc3yH7A
+0xksK7PImztDR8MLsUPoiv/vnfZ+WJJ+YJ0TKAHm1ZO3NqeZmD7XoWHKwh83zsK8
+x/JUASCBN16isC+Ym6IwF83/HXJfKNvvotkr2WG6Dv8Vg1Hhk2Iv5y3EMbFa9rfv
+6vjxho+0sYrraJH8qQAM08IIOi7+afrkR/ikgA8V7ymqmdxtMMHZqG+h5R0VGTVw
+QBxZ5/ZiY56Qn5UH2m0Tc2AHOcAQTvCEwyb19IPyhif+rek3npSvKtDc6WBJioyi
+gvDhl+jgIfcIo77w6GthgbFc9k68Je56Peu2J30zWj76Z+Di1OJhAj1wFr4/XT5o
+c1MB/Vfyx3hEPRDNz7dRaDqoVnYVdoI0blyCiSkD9I4/axb4X3xN2SK4XA/zv+Lb
+1FbCM1XFL2aF+09tk+77EVdWsBmQpOArD0d54E1YulBGaxVm5QKfov23KiqHIFVF
+8WYqJqNJwbJRZii7klczkVm3wFte3NWK7HW8kfF147lv0z3AiZYnk0O6Mj1ip3R8
+Qm5yiv57DbbgIMkSPWCpEtFGHIoK2msJ2bQcizh2WGxLos00RTx3IVAeSAS54+kr
+rMBg50wNczcGHKPDUKLwkYczgHonUtljAkeXnTl69rifChI+KpjHNtF6dFgC1aSt
+MOud6HhAcd0f3lmuPzCGGp4YOQx9tV139bkCDQRf7uX4ARAAxaybudQK4fMIzLiV
+grIzthhb3/DK83PNohTNMemM2V2z1Ij5Dlu2XNDypMdR0rKM/QI3zWud1+vd2h/l
+QZlg58FspvrY6I7hI+cbdRldVaAKDGQHo5Bi0a7BkonZvS/0wnNUPIhy/znzXtXR
+f4L7ePZMofH/2shz4TZ1yNpU8zaomY6eNjSc51P4vVxtDQ4QofQeJEn8aO9a4whu
+O0TVEAPKRYBRgjM8faDuUJtLfiC3OrhLg+B7JVSF3di4JITAyafPbZACLjV7Umxb
+SUL3qTJZVpIuhF0xQOCE+WRx3Xs7lkPdHMqP2OaJ8Y4ymR08cSfIP2XFKsQFtoqT
+VyMQgGgI6VXF8OfnCnGgx0Do1vJNoL0neFzVXpCPPzh1RbcrtndZWum/1R4egkYg
+J8TPQH5X391J58Uwd5l9/ZDdoSeeQYdtTR4YQ8//ATFO3hoSRvES4U6ZwO8LM6di
+ra6pqb6j0liT+DdcBwE4C1bGJMJ6d93S5SfH3llDIMJo7uJDbKILFMES9rg7S6I8
++SW75TjKUk4Y7L8R8qwURqEyuOOGfaQXirqvji4PdcGDBiIk2Oq69Ky6lmlJgyIH
+SZ7SO1JXk0yAJTXb+a6FJTLFxidkIZzu+LhLBn/MhAPjVyv3qCTQ7O0lu8Mfcqg5
+8hhJ6IE79PBHS3z8ok+mFK0iGrcAEQEAAYkEcgQYAQgAJhYhBH4ckayAMKWlnR76
+uXUPPIdyPkASBQJf7uX4AhsCBQkD60WAAkAJEHUPPIdyPkASwXQgBBkBCAAdFiEE
+JFV3TUL9/mucOD64/hACvFlwgR8FAl/u5fgACgkQ/hACvFlwgR+LoRAAgtIgaKb4
+ZY8qoAFZeph+Syg+mMKfPJkBuGUedJl6IxbHBSg2mhnCjJ0bmdqxsAXgtcSUqmtZ
+Yw9NyoGgiVjs+gu5sQp1Oxc2/keQXaVksTkoXwdnf+2iXyp1WPeeLGySHmzuwy9c
+eExt+h0mVmBgFls2wNdFGPbVfiT3PvFkwqsnta6HebDTN4pMzvG1IIGV7L5KRo1E
+dmkrt3lXQWmdgHl3JoNQ9v/Jgf4jo6gDw53YvJFKJcaOOAS3d4CzPWmcLzcy4mf0
+9YI3DoQCbYL3cRNelUwzUF2L6QyPCwonXemLCmfkBgsSVqvW4fq8qbEHGF2fK7x3
+d7bZEsUiGCt/tXOkDkNJ31T/mC35nxZfcj8AMPixO+BnAeKeYC37LbQD76jrw526
+tUXsAF+QON5DPeot+e8bIx9qSbvdqpXDkK4lGcRTuS2OVC8J9XfDTch4wm3Kd4P4
+lDdRAJWnLfVay0m05LGlekWdEzcjP8KDaICH9rEs6f9e1gy6mTEBnBW//41BxELT
+KxoTGlcX3yEhCmK36g5C/+d6b7Ji5arGGTCa96v/xG32KYc1zfn3TYkCx06pPUbz
+iAl2l0MTpGeqz2hJMOGA3JuxwlksJKqnPYy0hHKdVW4Pnn25NeXcBp8wpkt8VZOR
+bzjw/TJB7qvJHoRo1tat85Uij9rAXqTyO8Ea0hAAi/EfuiDDy3GV7bvjFSA1XEjL
+d+F40g2X0QG/PHTScYB4rFJwV0GFUxLHr4g7iypAVI+BB4EYikx8gpee6B0g3J+r
+aCFDDrRPDKdqrpZK53oYcBPkdSBbCr5MAa/M3DerKBEgoBVUbaSHWN7OH2ae+5R6
+X2ERmYZdW4PCj6lw7a+RhkAsgKo8RjonjV61ehQPZh20noI19Q80BYYSCfHHvzy5
+vwvByhmTMJNrl3PDpBy9/TwBR5DpnHfOPJX6bnl3pdu65F2TRM6yoFbfoUiEqrXV
+4wC1I++N9VjrQvXSp0ik/XaMWq87wLIg+1owElJIzwyZWukQkZMAYtesVFz20YwC
+7Nu8SNr/NTSCH1EqLsS4YhBTsjpc2T8AqUlgxKrilmLbrj64PXgMsQ9WYm5zwlC5
+UA5eky5YhETFJ25dIaplMm47aIbPSH5f9y5eYPkfOCoMu5oDzDzoXdH9V1YfsHqa
+8bboSgTdariC23x38E9PaWQNyY2MFKL6cFt2ilIsMSSD6JAm1x8kBtn1bBopG588
+7mTDtlqHCw/QrTuLreJG9KJ1dQFJ/Q42+csH09l081wlv4BBuVlN1Xmj+c2sWn90
+l1BPZfYHd9jhggI96yTZhfTfFbSMSuGPQyqHnwDYdA3cNj5BYievBkO5FZaCe9SZ
+4xcYgqlVpv15O7VrD+I=
+=Uugw
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/generate-rndc-key.sh b/generate-rndc-key.sh
new file mode 100755
index 0000000..956bb8e
--- /dev/null
+++ b/generate-rndc-key.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+
+if [ -r /etc/rc.d/init.d/functions ]; then
+ . /etc/rc.d/init.d/functions
+else
+success() {
+ echo $" OK "
+}
+
+failure() {
+ echo -n " "
+ echo $"FAILED"
+}
+fi
+
+# This script generates /etc/rndc.key if doesn't exist AND if there is no rndc.conf
+
+if [ ! -s /etc/rndc.key -a ! -s /etc/rndc.conf ]; then
+ echo -n $"Generating /etc/rndc.key:"
+ if /usr/sbin/rndc-confgen -a -A hmac-sha256 > /dev/null 2>&1
+ then
+ chmod 640 /etc/rndc.key
+ chown root:named /etc/rndc.key
+ [ -x /sbin/restorecon ] && /sbin/restorecon /etc/rndc.key
+ success $"/etc/rndc.key generation"
+ echo
+ else
+ rc=$?
+ failure $"/etc/rndc.key generation"
+ echo
+ exit $rc
+ fi
+fi
diff --git a/named-chroot-setup.service b/named-chroot-setup.service
new file mode 100644
index 0000000..237a909
--- /dev/null
+++ b/named-chroot-setup.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Set-up/destroy chroot environment for named (DNS)
+BindsTo=named-chroot.service
+Wants=named-setup-rndc.service
+After=named-setup-rndc.service
+
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/libexec/setup-named-chroot.sh /var/named/chroot on /etc/named-chroot.files
+ExecStop=/usr/libexec/setup-named-chroot.sh /var/named/chroot off /etc/named-chroot.files
diff --git a/named-chroot.files b/named-chroot.files
new file mode 100644
index 0000000..9a768e4
--- /dev/null
+++ b/named-chroot.files
@@ -0,0 +1,26 @@
+# Configuration of files used in chroot
+# Following files are made available after named-chroot.service start
+# if they are missing or empty in target directory.
+/etc/localtime
+/etc/named.root.key
+/etc/named.conf
+/etc/named.rfc1912.zones
+/etc/rndc.conf
+/etc/rndc.key
+/etc/named.iscdlv.key
+/etc/crypto-policies/back-ends/bind.config
+/etc/protocols
+/etc/services
+/etc/named.dnssec.keys
+/etc/pki/dnssec-keys
+/etc/named
+/usr/lib64/bind
+/usr/lib/bind
+/usr/lib64/named
+/usr/lib/named
+/usr/share/GeoIP
+/run/named
+# Warning: the order is important
+# If a directory containing $ROOTDIR is listed here,
+# it MUST be listed last. (/var/named contains /var/named/chroot)
+/var/named
diff --git a/named-chroot.service b/named-chroot.service
new file mode 100644
index 0000000..a49df15
--- /dev/null
+++ b/named-chroot.service
@@ -0,0 +1,30 @@
+# Don't forget to add "$AddUnixListenSocket /var/named/chroot/dev/log"
+# line to your /etc/rsyslog.conf file. Otherwise your logging becomes
+# broken when rsyslogd daemon is restarted (due update, for example).
+
+[Unit]
+Description=Berkeley Internet Name Domain (DNS)
+Wants=nss-lookup.target
+Requires=named-chroot-setup.service
+Before=nss-lookup.target
+After=named-chroot-setup.service
+After=network.target
+
+[Service]
+Type=forking
+Environment=NAMEDCONF=/etc/named.conf
+EnvironmentFile=-/etc/sysconfig/named
+Environment=KRB5_KTNAME=/etc/named.keytab
+PIDFile=/var/named/chroot/run/named/named.pid
+
+ExecStartPre=/bin/bash -c 'if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -t /var/named/chroot -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi'
+ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} -t /var/named/chroot $OPTIONS
+
+ExecReload=/bin/sh -c 'if /usr/sbin/rndc null > /dev/null 2>&1; then /usr/sbin/rndc reload; else /bin/kill -HUP $MAINPID; fi'
+
+ExecStop=/bin/sh -c '/usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID'
+
+PrivateTmp=false
+
+[Install]
+WantedBy=multi-user.target
diff --git a/named-pkcs11.service b/named-pkcs11.service
new file mode 100644
index 0000000..27e0693
--- /dev/null
+++ b/named-pkcs11.service
@@ -0,0 +1,26 @@
+[Unit]
+Description=Berkeley Internet Name Domain (DNS) with native PKCS#11
+Wants=nss-lookup.target
+Wants=named-setup-rndc.service
+Before=nss-lookup.target
+After=network.target
+After=named-setup-rndc.service
+
+[Service]
+Type=forking
+Environment=NAMEDCONF=/etc/named.conf
+EnvironmentFile=-/etc/sysconfig/named
+Environment=KRB5_KTNAME=/etc/named.keytab
+PIDFile=/run/named/named.pid
+
+ExecStartPre=/bin/bash -c 'if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi'
+ExecStart=/usr/sbin/named-pkcs11 -u named -c ${NAMEDCONF} $OPTIONS
+
+ExecReload=/bin/sh -c 'if /usr/sbin/rndc null > /dev/null 2>&1; then /usr/sbin/rndc reload; else /bin/kill -HUP $MAINPID; fi'
+
+ExecStop=/bin/sh -c '/usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID'
+
+PrivateTmp=true
+
+[Install]
+WantedBy=multi-user.target
diff --git a/named-setup-rndc.service b/named-setup-rndc.service
new file mode 100644
index 0000000..ff85e3c
--- /dev/null
+++ b/named-setup-rndc.service
@@ -0,0 +1,7 @@
+[Unit]
+Description=Generate rndc key for BIND (DNS)
+
+[Service]
+Type=oneshot
+
+ExecStart=/usr/libexec/generate-rndc-key.sh
diff --git a/named.conf b/named.conf
new file mode 100644
index 0000000..d62d389
--- /dev/null
+++ b/named.conf
@@ -0,0 +1,57 @@
+//
+// named.conf
+//
+// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
+// server as a caching only nameserver (as a localhost DNS resolver only).
+//
+// See /usr/share/doc/bind*/sample/ for example named configuration files.
+//
+
+options {
+ listen-on port 53 { 127.0.0.1; };
+ listen-on-v6 port 53 { ::1; };
+ directory "/var/named";
+ dump-file "/var/named/data/cache_dump.db";
+ statistics-file "/var/named/data/named_stats.txt";
+ memstatistics-file "/var/named/data/named_mem_stats.txt";
+ secroots-file "/var/named/data/named.secroots";
+ recursing-file "/var/named/data/named.recursing";
+ allow-query { localhost; };
+
+ /*
+ - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
+ - If you are building a RECURSIVE (caching) DNS server, you need to enable
+ recursion.
+ - If your recursive DNS server has a public IP address, you MUST enable access
+ control to limit queries to your legitimate users. Failing to do so will
+ cause your server to become part of large scale DNS amplification
+ attacks. Implementing BCP38 within your network would greatly
+ reduce such attack surface
+ */
+ recursion yes;
+
+ dnssec-validation yes;
+
+ managed-keys-directory "/var/named/dynamic";
+
+ pid-file "/run/named/named.pid";
+ session-keyfile "/run/named/session.key";
+
+ include "/etc/crypto-policies/back-ends/bind.config";
+};
+
+logging {
+ channel default_debug {
+ file "data/named.run";
+ severity dynamic;
+ };
+};
+
+zone "." IN {
+ type hint;
+ file "named.ca";
+};
+
+include "/etc/named.rfc1912.zones";
+include "/etc/named.root.key";
+
diff --git a/named.conf.sample b/named.conf.sample
new file mode 100644
index 0000000..a49004e
--- /dev/null
+++ b/named.conf.sample
@@ -0,0 +1,241 @@
+/*
+ Sample named.conf BIND DNS server 'named' configuration file
+ for the Red Hat BIND distribution.
+
+ See the BIND Administrator's Reference Manual (ARM) for details, in:
+ file:///usr/share/doc/bind-{version}/arm/Bv9ARM.html
+ Also see the BIND Configuration GUI : /usr/bin/system-config-bind and
+ its manual.
+*/
+
+options
+{
+ // Put files that named is allowed to write in the data/ directory:
+ directory "/var/named"; // "Working" directory
+ dump-file "data/cache_dump.db";
+ statistics-file "data/named_stats.txt";
+ memstatistics-file "data/named_mem_stats.txt";
+ secroots-file "data/named.secroots";
+ recursing-file "data/named.recursing";
+
+
+ /*
+ Specify listenning interfaces. You can use list of addresses (';' is
+ delimiter) or keywords "any"/"none"
+ */
+ //listen-on port 53 { any; };
+ listen-on port 53 { 127.0.0.1; };
+
+ //listen-on-v6 port 53 { any; };
+ listen-on-v6 port 53 { ::1; };
+
+ /*
+ Access restrictions
+
+ There are two important options:
+ allow-query { argument; };
+ - allow queries for authoritative data
+
+ allow-query-cache { argument; };
+ - allow queries for non-authoritative data (mostly cached data)
+
+ You can use address, network address or keywords "any"/"localhost"/"none" as argument
+ Examples:
+ allow-query { localhost; 10.0.0.1; 192.168.1.0/8; };
+ allow-query-cache { ::1; fe80::5c63:a8ff:fe2f:4526; 10.0.0.1; };
+ */
+
+ allow-query { localhost; };
+ allow-query-cache { localhost; };
+
+ /* Enable/disable recursion - recursion yes/no;
+
+ - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
+ - If you are building a RECURSIVE (caching) DNS server, you need to enable
+ recursion.
+ - If your recursive DNS server has a public IP address, you MUST enable access
+ control to limit queries to your legitimate users. Failing to do so will
+ cause your server to become part of large scale DNS amplification
+ attacks. Implementing BCP38 within your network would greatly
+ reduce such attack surface
+ */
+ recursion yes;
+
+ /* DNSSEC related options. See information about keys ("Trusted keys", bellow) */
+
+ /* Enable DNSSEC validation on recursive servers */
+ dnssec-validation yes;
+
+ /* In Fedora we use /run/named instead of default /var/run/named
+ so we have to configure paths properly. */
+ pid-file "/run/named/named.pid";
+ session-keyfile "/run/named/session.key";
+
+ managed-keys-directory "/var/named/dynamic";
+
+ include "/etc/crypto-policies/back-ends/bind.config";
+};
+
+logging
+{
+/* If you want to enable debugging, eg. using the 'rndc trace' command,
+ * named will try to write the 'named.run' file in the $directory (/var/named).
+ * By default, SELinux policy does not allow named to modify the /var/named directory,
+ * so put the default debug log file in data/ :
+ */
+ channel default_debug {
+ file "data/named.run";
+ severity dynamic;
+ };
+};
+
+/*
+ Views let a name server answer a DNS query differently depending on who is asking.
+
+ By default, if named.conf contains no "view" clauses, all zones are in the
+ "default" view, which matches all clients.
+
+ Views are processed sequentially. The first match is used so the last view should
+ match "any" - it's fallback and the most restricted view.
+
+ If named.conf contains any "view" clause, then all zones MUST be in a view.
+*/
+
+view "localhost_resolver"
+{
+/* This view sets up named to be a localhost resolver ( caching only nameserver ).
+ * If all you want is a caching-only nameserver, then you need only define this view:
+ */
+ match-clients { localhost; };
+ recursion yes;
+
+ # all views must contain the root hints zone:
+ zone "." IN {
+ type hint;
+ file "/var/named/named.ca";
+ };
+
+ /* these are zones that contain definitions for all the localhost
+ * names and addresses, as recommended in RFC1912 - these names should
+ * not leak to the other nameservers:
+ */
+ include "/etc/named.rfc1912.zones";
+};
+view "internal"
+{
+/* This view will contain zones you want to serve only to "internal" clients
+ that connect via your directly attached LAN interfaces - "localnets" .
+ */
+ match-clients { localnets; };
+ recursion yes;
+
+ zone "." IN {
+ type hint;
+ file "/var/named/named.ca";
+ };
+
+ /* these are zones that contain definitions for all the localhost
+ * names and addresses, as recommended in RFC1912 - these names should
+ * not leak to the other nameservers:
+ */
+ include "/etc/named.rfc1912.zones";
+
+ // These are your "authoritative" internal zones, and would probably
+ // also be included in the "localhost_resolver" view above :
+
+ /*
+ NOTE for dynamic DNS zones and secondary zones:
+
+ DO NOT USE SAME FILES IN MULTIPLE VIEWS!
+
+ If you are using views and DDNS/secondary zones it is strongly
+ recommended to read FAQ on ISC site (www.isc.org), section
+ "Configuration and Setup Questions", questions
+ "How do I share a dynamic zone between multiple views?" and
+ "How can I make a server a slave for both an internal and an external
+ view at the same time?"
+ */
+
+ zone "my.internal.zone" {
+ type master;
+ file "my.internal.zone.db";
+ };
+ zone "my.slave.internal.zone" {
+ type slave;
+ file "slaves/my.slave.internal.zone.db";
+ masters { /* put master nameserver IPs here */ 127.0.0.1; } ;
+ // put slave zones in the slaves/ directory so named can update them
+ };
+ zone "my.ddns.internal.zone" {
+ type master;
+ allow-update { key ddns_key; };
+ file "dynamic/my.ddns.internal.zone.db";
+ // put dynamically updateable zones in the slaves/ directory so named can update them
+ };
+};
+
+key ddns_key
+{
+ algorithm hmac-sha256;
+ secret "use /usr/sbin/ddns-confgen to generate TSIG keys";
+};
+
+view "external"
+{
+/* This view will contain zones you want to serve only to "external" clients
+ * that have addresses that are not match any above view:
+ */
+ match-clients { any; };
+
+ zone "." IN {
+ type hint;
+ file "/var/named/named.ca";
+ };
+
+ recursion no;
+ // you'd probably want to deny recursion to external clients, so you don't
+ // end up providing free DNS service to all takers
+
+ // These are your "authoritative" external zones, and would probably
+ // contain entries for just your web and mail servers:
+
+ zone "my.external.zone" {
+ type master;
+ file "my.external.zone.db";
+ };
+};
+
+/* Trusted keys
+
+ This statement contains DNSSEC keys. If you want DNSSEC aware resolver you
+ should configure at least one trusted key.
+
+ Note that no key written below is valid. Especially root key because root zone
+ is not signed yet.
+*/
+/*
+trust-anchors {
+// Root Key
+. initial-key 257 3 8 "AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3
+ +/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kv
+ ArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF
+ 0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+e
+ oZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfd
+ RUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwN
+ R1AkUTV74bU=";
+
+// Key for forward zone
+example.com. static-key 257 3 8 "AwEAAZ0aqu1rJ6orJynrRfNpPmayJZoAx9Ic2/Rl9VQW
+ LMHyjxxem3VUSoNUIFXERQbj0A9Ogp0zDM9YIccKLRd6
+ LmWiDCt7UJQxVdD+heb5Ec4qlqGmyX9MDabkvX2NvMws
+ UecbYBq8oXeTT9LRmCUt9KUt/WOi6DKECxoG/bWTykrX
+ yBR8elD+SQY43OAVjlWrVltHxgp4/rhBCvRbmdflunaP
+ Igu27eE2U4myDSLT8a4A0rB5uHG4PkOa9dIRs9y00M2m
+ Wf4lyPee7vi5few2dbayHXmieGcaAHrx76NGAABeY393
+ xjlmDNcUkF1gpNWUla4fWZbbaYQzA93mLdrng+M=";
+
+
+// Key for reverse zone.
+2.0.192.IN-ADDRPA.NET. initial-ds 31406 8 2 "F78CF3344F72137235098ECBBD08947C2C9001C7F6A085A17F518B5D8F6B916D";
+};
+*/
diff --git a/named.empty b/named.empty
new file mode 100644
index 0000000..8e271e7
--- /dev/null
+++ b/named.empty
@@ -0,0 +1,10 @@
+$TTL 3H
+@ IN SOA @ rname.invalid. (
+ 0 ; serial
+ 1D ; refresh
+ 1H ; retry
+ 1W ; expire
+ 3H ) ; minimum
+ NS @
+ A 127.0.0.1
+ AAAA ::1
diff --git a/named.localhost b/named.localhost
new file mode 100644
index 0000000..6fe6a52
--- /dev/null
+++ b/named.localhost
@@ -0,0 +1,10 @@
+$TTL 1D
+@ IN SOA @ rname.invalid. (
+ 0 ; serial
+ 1D ; refresh
+ 1H ; retry
+ 1W ; expire
+ 3H ) ; minimum
+ NS @
+ A 127.0.0.1
+ AAAA ::1
diff --git a/named.logrotate b/named.logrotate
new file mode 100644
index 0000000..5df448f
--- /dev/null
+++ b/named.logrotate
@@ -0,0 +1,12 @@
+/var/named/data/named.run {
+ missingok
+ su named named
+ create 0644 named named
+ postrotate
+ /usr/bin/systemctl reload named.service > /dev/null 2>&1 || true
+ /usr/bin/systemctl reload named-chroot.service > /dev/null 2>&1 || true
+ /usr/bin/systemctl reload named-sdb.service > /dev/null 2>&1 || true
+ /usr/bin/systemctl reload named-sdb-chroot.service > /dev/null 2>&1 || true
+ /usr/bin/systemctl reload named-pkcs11.service > /dev/null 2>&1 || true
+ endscript
+}
diff --git a/named.loopback b/named.loopback
new file mode 100644
index 0000000..7f3d862
--- /dev/null
+++ b/named.loopback
@@ -0,0 +1,11 @@
+$TTL 1D
+@ IN SOA @ rname.invalid. (
+ 0 ; serial
+ 1D ; refresh
+ 1H ; retry
+ 1W ; expire
+ 3H ) ; minimum
+ NS @
+ A 127.0.0.1
+ AAAA ::1
+ PTR localhost.
diff --git a/named.rfc1912.zones b/named.rfc1912.zones
new file mode 100644
index 0000000..fa8caf5
--- /dev/null
+++ b/named.rfc1912.zones
@@ -0,0 +1,45 @@
+// named.rfc1912.zones:
+//
+// Provided by Red Hat caching-nameserver package
+//
+// ISC BIND named zone configuration for zones recommended by
+// RFC 1912 section 4.1 : localhost TLDs and address zones
+// and https://tools.ietf.org/html/rfc6303
+// (c)2007 R W Franks
+//
+// See /usr/share/doc/bind*/sample/ for example named configuration files.
+//
+// Note: empty-zones-enable yes; option is default.
+// If private ranges should be forwarded, add
+// disable-empty-zone "."; into options
+//
+
+zone "localhost.localdomain" IN {
+ type master;
+ file "named.localhost";
+ allow-update { none; };
+};
+
+zone "localhost" IN {
+ type master;
+ file "named.localhost";
+ allow-update { none; };
+};
+
+zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
+ type master;
+ file "named.loopback";
+ allow-update { none; };
+};
+
+zone "1.0.0.127.in-addr.arpa" IN {
+ type master;
+ file "named.loopback";
+ allow-update { none; };
+};
+
+zone "0.in-addr.arpa" IN {
+ type master;
+ file "named.empty";
+ allow-update { none; };
+};
diff --git a/named.root b/named.root
new file mode 100644
index 0000000..532d4ff
--- /dev/null
+++ b/named.root
@@ -0,0 +1,61 @@
+
+; <<>> DiG 9.11.3-RedHat-9.11.3-3.fc27 <<>> +bufsize=1200 +norec @a.root-servers.net
+; (2 servers found)
+;; global options: +cmd
+;; Got answer:
+;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46900
+;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 27
+
+;; OPT PSEUDOSECTION:
+; EDNS: version: 0, flags:; udp: 1472
+;; QUESTION SECTION:
+;. IN NS
+
+;; ANSWER SECTION:
+. 518400 IN NS a.root-servers.net.
+. 518400 IN NS b.root-servers.net.
+. 518400 IN NS c.root-servers.net.
+. 518400 IN NS d.root-servers.net.
+. 518400 IN NS e.root-servers.net.
+. 518400 IN NS f.root-servers.net.
+. 518400 IN NS g.root-servers.net.
+. 518400 IN NS h.root-servers.net.
+. 518400 IN NS i.root-servers.net.
+. 518400 IN NS j.root-servers.net.
+. 518400 IN NS k.root-servers.net.
+. 518400 IN NS l.root-servers.net.
+. 518400 IN NS m.root-servers.net.
+
+;; ADDITIONAL SECTION:
+a.root-servers.net. 518400 IN A 198.41.0.4
+b.root-servers.net. 518400 IN A 199.9.14.201
+c.root-servers.net. 518400 IN A 192.33.4.12
+d.root-servers.net. 518400 IN A 199.7.91.13
+e.root-servers.net. 518400 IN A 192.203.230.10
+f.root-servers.net. 518400 IN A 192.5.5.241
+g.root-servers.net. 518400 IN A 192.112.36.4
+h.root-servers.net. 518400 IN A 198.97.190.53
+i.root-servers.net. 518400 IN A 192.36.148.17
+j.root-servers.net. 518400 IN A 192.58.128.30
+k.root-servers.net. 518400 IN A 193.0.14.129
+l.root-servers.net. 518400 IN A 199.7.83.42
+m.root-servers.net. 518400 IN A 202.12.27.33
+a.root-servers.net. 518400 IN AAAA 2001:503:ba3e::2:30
+b.root-servers.net. 518400 IN AAAA 2001:500:200::b
+c.root-servers.net. 518400 IN AAAA 2001:500:2::c
+d.root-servers.net. 518400 IN AAAA 2001:500:2d::d
+e.root-servers.net. 518400 IN AAAA 2001:500:a8::e
+f.root-servers.net. 518400 IN AAAA 2001:500:2f::f
+g.root-servers.net. 518400 IN AAAA 2001:500:12::d0d
+h.root-servers.net. 518400 IN AAAA 2001:500:1::53
+i.root-servers.net. 518400 IN AAAA 2001:7fe::53
+j.root-servers.net. 518400 IN AAAA 2001:503:c27::2:30
+k.root-servers.net. 518400 IN AAAA 2001:7fd::1
+l.root-servers.net. 518400 IN AAAA 2001:500:9f::42
+m.root-servers.net. 518400 IN AAAA 2001:dc3::35
+
+;; Query time: 24 msec
+;; SERVER: 198.41.0.4#53(198.41.0.4)
+;; WHEN: Thu Apr 05 15:57:34 CEST 2018
+;; MSG SIZE rcvd: 811
+
diff --git a/named.root.key b/named.root.key
new file mode 100644
index 0000000..fbcb5d3
--- /dev/null
+++ b/named.root.key
@@ -0,0 +1,13 @@
+trust-anchors {
+ # ROOT KEYS: See https://data.iana.org/root-anchors/root-anchors.xml
+ # for current trust anchor information.
+ #
+ # This key (20326) was published in the root zone in 2017.
+ # Servers which were already using the old key (19036) should
+ # roll seamlessly to this new one via RFC 5011 rollover. Servers
+ # being set up for the first time can use the contents of this
+ # file as initializing keys; thereafter, the keys in the
+ # managed key database will be trusted and maintained
+ # automatically.
+ . initial-ds 20326 8 2 "E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D";
+};
diff --git a/named.rwtab b/named.rwtab
new file mode 100644
index 0000000..2cb3a41
--- /dev/null
+++ b/named.rwtab
@@ -0,0 +1,6 @@
+dirs /var/named
+
+files /var/named/named.ca
+files /var/named/named.empty
+files /var/named/named.localhost
+files /var/named/named.loopback
diff --git a/named.service b/named.service
new file mode 100644
index 0000000..7cd6d34
--- /dev/null
+++ b/named.service
@@ -0,0 +1,25 @@
+[Unit]
+Description=Berkeley Internet Name Domain (DNS)
+Wants=nss-lookup.target
+Wants=named-setup-rndc.service
+Before=nss-lookup.target
+After=named-setup-rndc.service
+After=network.target
+
+[Service]
+Type=forking
+Environment=NAMEDCONF=/etc/named.conf
+EnvironmentFile=-/etc/sysconfig/named
+Environment=KRB5_KTNAME=/etc/named.keytab
+PIDFile=/run/named/named.pid
+
+ExecStartPre=/bin/bash -c 'if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi'
+ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS
+ExecReload=/bin/sh -c 'if /usr/sbin/rndc null > /dev/null 2>&1; then /usr/sbin/rndc reload; else /bin/kill -HUP $MAINPID; fi'
+
+ExecStop=/bin/sh -c '/usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID'
+
+PrivateTmp=true
+
+[Install]
+WantedBy=multi-user.target
diff --git a/named.sysconfig b/named.sysconfig
new file mode 100644
index 0000000..5f6f817
--- /dev/null
+++ b/named.sysconfig
@@ -0,0 +1,17 @@
+# BIND named process options
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# OPTIONS="whatever" -- These additional options will be passed to named
+# at startup. Don't add -t here, enable proper
+# -chroot.service unit file.
+#
+# NAMEDCONF=/etc/named/alternate.conf
+# -- Don't use -c to change configuration file.
+# Extend systemd named.service instead or use this
+# variable.
+#
+# DISABLE_ZONE_CHECKING -- By default, service file calls named-checkzone
+# utility for every zone to ensure all zones are
+# valid before named starts. If you set this option
+# to 'yes' then service file doesn't perform those
+# checks.
diff --git a/setup-named-chroot.sh b/setup-named-chroot.sh
new file mode 100755
index 0000000..5e68915
--- /dev/null
+++ b/setup-named-chroot.sh
@@ -0,0 +1,117 @@
+#!/bin/bash
+
+ROOTDIR="$1"
+CONFIG_FILES="${3:-/etc/named-chroot.files}"
+
+usage()
+{
+ echo
+ echo 'This script setups chroot environment for BIND'
+ echo 'Usage: setup-named-chroot.sh ROOTDIR <on|off> [chroot.files]'
+}
+
+if ! [ "$#" -ge 2 -a "$#" -le 3 ]; then
+ echo 'Wrong number of arguments'
+ usage
+ exit 1
+fi
+
+# Exit if ROOTDIR doesn't exist
+if ! [ -d "$ROOTDIR" ]; then
+ echo "Root directory $ROOTDIR doesn't exist"
+ usage
+ exit 1
+fi
+
+if ! [ -r "$CONFIG_FILES" ]; then
+ echo "Files list $CONFIG_FILES doesn't exist" 2>&1
+ usage
+ exit 1
+fi
+
+dev_create()
+{
+ DEVNAME="$ROOTDIR/dev/$1"
+ shift
+ if ! [ -e "$DEVNAME" ]; then
+ /bin/mknod -m 0664 "$DEVNAME" $@
+ /bin/chgrp named "$DEVNAME"
+ if [ -x /usr/sbin/selinuxenabled -a -x /sbin/restorecon ]; then
+ /usr/sbin/selinuxenabled && /sbin/restorecon "$DEVNAME" > /dev/null || :
+ fi
+ fi
+}
+
+dev_chroot_prep()
+{
+ dev_create random c 1 8
+ dev_create urandom c 1 9
+ dev_create zero c 1 5
+ dev_create null c 1 3
+}
+
+files_comment_filter()
+{
+ if [ -d "$1" ]; then
+ grep -v '^[[:space:]]*#' "$1"/*.files
+ else
+ grep -v '^[[:space:]]*#' "$1"
+ fi
+}
+
+mount_chroot_conf()
+{
+ if [ -n "$ROOTDIR" ]; then
+ # Check devices are prepared
+ dev_chroot_prep
+ files_comment_filter "$CONFIG_FILES" | while read -r all; do
+ # Skip nonexistant files
+ [ -e "$all" ] || continue
+
+ # If mount source is a file
+ if ! [ -d "$all" ]; then
+ # mount it only if it is not present in chroot or it is empty
+ if ! [ -e "$ROOTDIR$all" ] || [ `stat -c'%s' "$ROOTDIR$all"` -eq 0 ]; then
+ touch "$ROOTDIR$all"
+ mount --bind "$all" "$ROOTDIR$all"
+ fi
+ else
+ # Mount source is a directory. Mount it only if directory in chroot is
+ # empty.
+ if [ -e "$all" ] && [ `ls -1A $ROOTDIR$all | wc -l` -eq 0 ]; then
+ mount --bind --make-private "$all" "$ROOTDIR$all"
+ fi
+ fi
+ done
+ fi
+}
+
+umount_chroot_conf()
+{
+ if [ -n "$ROOTDIR" ]; then
+ files_comment_filter "$CONFIG_FILES" | while read -r all; do
+ # Check if file is mount target. Do not use /proc/mounts because detecting
+ # of modified mounted files can fail.
+ if mount | grep -q '.* on '"$ROOTDIR$all"' .*'; then
+ umount "$ROOTDIR$all"
+ # Remove temporary created files
+ [ -f "$all" ] && rm -f "$ROOTDIR$all"
+ fi
+ done
+ fi
+}
+
+case "$2" in
+ on)
+ mount_chroot_conf
+ ;;
+ off)
+ umount_chroot_conf
+ ;;
+ *)
+ echo 'Second argument has to be "on" or "off"'
+ usage
+ exit 1
+esac
+
+exit 0
diff --git a/setup-named-softhsm.sh b/setup-named-softhsm.sh
new file mode 100755
index 0000000..c0f8445
--- /dev/null
+++ b/setup-named-softhsm.sh
@@ -0,0 +1,124 @@
+#!/bin/sh
+#
+# This script will initialise token storage of softhsm PKCS11 provider
+# in custom location. Is useful to store tokens in non-standard location.
+#
+# Output can be evaluated from bash, it will prepare it for usage of temporary tokens.
+# Quotes around eval are mandatory!
+# Recommended use:
+# eval "$(bash setup-named-softhsm.sh -A)"
+#
+
+SOFTHSM2_CONF="$1"
+TOKENPATH="$2"
+GROUPNAME="$3"
+# Do not use this script for real keys worth protection
+# This is intended for crypto accelerators using PKCS11 interface.
+# Uninitialized token would fail any crypto operation.
+PIN=1234
+SO_PIN=1234
+LABEL=rpm
+
+set -e
+
+echo_i()
+{
+ echo "#" $@
+}
+
+random()
+{
+ if [ -x "$(which openssl 2>/dev/null)" ]; then
+ openssl rand -base64 $1
+ else
+ dd if=/dev/urandom bs=1c count=$1 | base64
+ fi
+}
+
+usage()
+{
+ echo "Usage: $0 -A [token directory] [group]"
+ echo " or: $0 <config file> <token directory> [group]"
+}
+
+if [ "$SOFTHSM2_CONF" = "-A" -a -z "$TOKENPATH" ]; then
+ TOKENPATH=$(mktemp -d /var/tmp/softhsm-XXXXXX)
+fi
+
+if [ -z "$SOFTHSM2_CONF" -o -z "$TOKENPATH" ]; then
+ usage >&2
+ exit 1
+fi
+
+if [ "$SOFTHSM2_CONF" = "-A" ]; then
+ # Automagic mode instead
+ MODE=secure
+ SOFTHSM2_CONF="$TOKENPATH/softhsm2.conf"
+ PIN_SOURCE="$TOKENPATH/pin"
+ SOPIN_SOURCE="$TOKENPATH/so-pin"
+ TOKENPATH="$TOKENPATH/tokens"
+else
+ MODE=legacy
+fi
+
+[ -d "$TOKENPATH" ] || mkdir -p "$TOKENPATH"
+
+umask 0022
+
+if ! [ -f "$SOFTHSM2_CONF" ]; then
+cat << SED > "$SOFTHSM2_CONF"
+# SoftHSM v2 configuration file
+
+directories.tokendir = ${TOKENPATH}
+objectstore.backend = file
+
+# ERROR, WARNING, INFO, DEBUG
+log.level = ERROR
+
+# If CKF_REMOVABLE_DEVICE flag should be set
+slots.removable = false
+SED
+else
+ echo_i "Config file $SOFTHSM2_CONF already exists" >&2
+fi
+
+if [ -n "$PIN_SOURCE" ]; then
+ touch "$PIN_SOURCE" "$SOPIN_SOURCE"
+ chmod 0600 "$PIN_SOURCE" "$SOPIN_SOURCE"
+ if [ -n "$GROUPNAME" ]; then
+ chgrp "$GROUPNAME" "$PIN_SOURCE" "$SOPIN_SOURCE"
+ chmod g+r "$PIN_SOURCE" "$SOPIN_SOURCE"
+ fi
+fi
+
+export SOFTHSM2_CONF
+
+if softhsm2-util --show-slots | grep 'Initialized:[[:space:]]*yes' > /dev/null
+then
+ echo_i "Token in ${TOKENPATH} is already initialized" >&2
+
+ [ -f "$PIN_SOURCE" ] && PIN=$(cat "$PIN_SOURCE")
+ [ -f "$SOPIN_SOURCE" ] && SO_PIN=$(cat "$SOPIN_SOURCE")
+else
+ PIN=$(random 6)
+ SO_PIN=$(random 18)
+ if [ -n "$PIN_SOURCE" ]; then
+ echo -n "$PIN" > "$PIN_SOURCE"
+ echo -n "$SO_PIN" > "$SOPIN_SOURCE"
+ fi
+
+ echo_i "Initializing tokens to ${TOKENPATH}..."
+ softhsm2-util --init-token --free --label "$LABEL" --pin "$PIN" --so-pin "$SO_PIN" | sed -e 's/^/# /'
+
+ if [ -n "$GROUPNAME" ]; then
+ chgrp -R -- "$GROUPNAME" "$TOKENPATH"
+ chmod -R -- g=rX,o= "$TOKENPATH"
+ fi
+fi
+
+echo "export SOFTHSM2_CONF=\"$SOFTHSM2_CONF\""
+echo "export PIN_SOURCE=\"$PIN_SOURCE\""
+echo "export SOPIN_SOURCE=\"$SOPIN_SOURCE\""
+# These are intentionaly not exported
+echo "PIN=\"$PIN\""
+echo "SO_PIN=\"$SO_PIN\""
diff --git a/sources b/sources
new file mode 100644
index 0000000..526bd49
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+73ed2379c28446da7a9ad4d3ecc70016 bind-9.16.43.tar.xz
diff --git a/trusted-key.key b/trusted-key.key
new file mode 100644
index 0000000..7b845f3
--- /dev/null
+++ b/trusted-key.key
@@ -0,0 +1 @@
+. 3600 IN DNSKEY 257 3 8 AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3+/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kvArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+eoZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfdRUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwNR1AkUTV74bU=