]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Refactor findzonekeys
authorMatthijs Mekking <matthijs@isc.org>
Tue, 20 Jun 2023 13:44:17 +0000 (15:44 +0200)
committerMatthijs Mekking <matthijs@isc.org>
Thu, 25 Jan 2024 13:48:07 +0000 (14:48 +0100)
Move dns_dnssec_findzonekeys from the dnssec.{c,h} source code to
zone.{c,h} (the header file already commented that this should be done
inside dns_zone_t).

Alter the function in such a way, that keys are searched for in the
key stores if a 'dnssec-policy' (kasp) is attached to the zone,
otherwise keep using the zone's key-directory.

bin/named/server.c
bin/tests/system/multisigner/tests.sh
lib/dns/dnssec.c
lib/dns/include/dns/dnssec.h
lib/dns/include/dns/zone.h
lib/dns/zone.c
lib/dns/zone_p.h
tests/dns/sigs_test.c

index 304e1f3e2e1ac26567d45cb6d8c140b14b92921b..64fbd5dc99b86968a1b4ddc23c04a76f35af503c 100644 (file)
@@ -2793,8 +2793,8 @@ catz_addmodzone_cb(void *arg) {
        result = configure_zone(cfg->config, zoneobj, cfg->vconfig, cz->view,
                                &cz->cbd->server->viewlist,
                                &cz->cbd->server->kasplist,
-                               &cz->cbd->server->keystorelist,
-                               cfg->actx, true, false, cz->mod);
+                               &cz->cbd->server->keystorelist, cfg->actx, true,
+                               false, cz->mod);
        dns_view_freeze(cz->view);
        isc_loopmgr_resume(named_g_loopmgr);
 
@@ -9137,11 +9137,10 @@ load_configuration(const char *filename, named_server_t *server,
                        goto cleanup_cachelist;
                }
 
-               result = configure_view(view, &viewlist, config, vconfig,
-                                       &cachelist, &server->kasplist,
-                                       &server->keystorelist, bindkeys,
-                                       named_g_mctx, named_g_aclconfctx,
-                                       false);
+               result = configure_view(
+                       view, &viewlist, config, vconfig, &cachelist,
+                       &server->kasplist, &server->keystorelist, bindkeys,
+                       named_g_mctx, named_g_aclconfctx, false);
                if (result != ISC_R_SUCCESS) {
                        dns_view_detach(&view);
                        goto cleanup_cachelist;
index 36d6252902034bc08b3c3cf9d60acb5c4f8150d1..abe19ff21548432fc5294e2a3bbf146728994634 100644 (file)
@@ -147,7 +147,7 @@ status=$((status + ret))
 n=$((n + 1))
 echo_i "make sure we did not try to sign with the keys added with nsupdate for zone ${ZONE} ($n)"
 ret=0
-grep "dns_dnssec_findzonekeys: error reading ./K${ZONE}.*\.private: file not found" "${DIR}/named.run" && ret=1
+grep "dns_zone_findkeys: error reading ./K${ZONE}.*\.private: file not found" "${DIR}/named.run" && ret=1
 test "$ret" -eq 0 || echo_i "failed"
 status=$((status + ret))
 # Verify again.
@@ -176,7 +176,7 @@ status=$((status + ret))
 n=$((n + 1))
 echo_i "make sure we did not try to sign with the keys added with nsupdate for zone ${ZONE} ($n)"
 ret=0
-grep "dns_dnssec_findzonekeys: error reading ./K${ZONE}.*\.private: file not found" "${DIR}/named.run" && ret=1
+grep "dns_zone_findkeys: error reading ./K${ZONE}.*\.private: file not found" "${DIR}/named.run" && ret=1
 test "$ret" -eq 0 || echo_i "failed"
 status=$((status + ret))
 # Verify again.
@@ -521,7 +521,7 @@ test "$ret" -eq 0 || echo_i "failed"
 status=$((status + ret))
 dnssec_verify
 no_dnssec_in_journal
-grep "dns_dnssec_findzonekeys: error reading ./K${ZONE}.*\.private: file not found" "${DIR}/named.run" && ret=1
+grep "dns_zone_findkeys: error reading ./K${ZONE}.*\.private: file not found" "${DIR}/named.run" && ret=1
 test "$ret" -eq 0 || echo_i "failed"
 status=$((status + ret))
 # NS4
@@ -534,7 +534,7 @@ test "$ret" -eq 0 || echo_i "failed"
 status=$((status + ret))
 dnssec_verify
 no_dnssec_in_journal
-grep "dns_dnssec_findzonekeys: error reading ./K${ZONE}.*\.private: file not found" "${DIR}/named.run" && ret=1
+grep "dns_zone_findkeys: error reading ./K${ZONE}.*\.private: file not found" "${DIR}/named.run" && ret=1
 test "$ret" -eq 0 || echo_i "failed"
 status=$((status + ret))
 
index 90234daa27da9daea7b62e8d1e13b066b1947272..c1b1beedfad311d023da7d81abc8dfa5a5616ae2 100644 (file)
@@ -759,177 +759,6 @@ syncdelete(dst_key_t *key, isc_stdtime_t now) {
 #define is_zone_key(key) \
        ((dst_key_flags(key) & DNS_KEYFLAG_OWNERMASK) == DNS_KEYOWNER_ZONE)
 
-isc_result_t
-dns_dnssec_findzonekeys(dns_db_t *db, dns_dbversion_t *ver, dns_dbnode_t *node,
-                       const dns_name_t *name, const char *directory,
-                       isc_stdtime_t now, isc_mem_t *mctx,
-                       unsigned int maxkeys, dst_key_t **keys,
-                       unsigned int *nkeys) {
-       dns_rdataset_t rdataset;
-       dns_rdata_t rdata = DNS_RDATA_INIT;
-       isc_result_t result;
-       dst_key_t *pubkey = NULL;
-       unsigned int count = 0;
-
-       REQUIRE(nkeys != NULL);
-       REQUIRE(keys != NULL);
-
-       *nkeys = 0;
-       memset(keys, 0, sizeof(*keys) * maxkeys);
-       dns_rdataset_init(&rdataset);
-       RETERR(dns_db_findrdataset(db, node, ver, dns_rdatatype_dnskey, 0, 0,
-                                  &rdataset, NULL));
-       RETERR(dns_rdataset_first(&rdataset));
-       while (result == ISC_R_SUCCESS && count < maxkeys) {
-               pubkey = NULL;
-               dns_rdataset_current(&rdataset, &rdata);
-               RETERR(dns_dnssec_keyfromrdata(name, &rdata, mctx, &pubkey));
-               dst_key_setttl(pubkey, rdataset.ttl);
-
-               if (!is_zone_key(pubkey) ||
-                   (dst_key_flags(pubkey) & DNS_KEYTYPE_NOAUTH) != 0)
-               {
-                       goto next;
-               }
-               /* Corrupted .key file? */
-               if (!dns_name_equal(name, dst_key_name(pubkey))) {
-                       goto next;
-               }
-               keys[count] = NULL;
-               result = dst_key_fromfile(
-                       dst_key_name(pubkey), dst_key_id(pubkey),
-                       dst_key_alg(pubkey),
-                       DST_TYPE_PUBLIC | DST_TYPE_PRIVATE | DST_TYPE_STATE,
-                       directory, mctx, &keys[count]);
-
-               /*
-                * If the key was revoked and the private file
-                * doesn't exist, maybe it was revoked internally
-                * by named.  Try loading the unrevoked version.
-                */
-               if (result == ISC_R_FILENOTFOUND) {
-                       uint32_t flags;
-                       flags = dst_key_flags(pubkey);
-                       if ((flags & DNS_KEYFLAG_REVOKE) != 0) {
-                               dst_key_setflags(pubkey,
-                                                flags & ~DNS_KEYFLAG_REVOKE);
-                               result = dst_key_fromfile(
-                                       dst_key_name(pubkey),
-                                       dst_key_id(pubkey), dst_key_alg(pubkey),
-                                       DST_TYPE_PUBLIC | DST_TYPE_PRIVATE |
-                                               DST_TYPE_STATE,
-                                       directory, mctx, &keys[count]);
-                               if (result == ISC_R_SUCCESS &&
-                                   dst_key_pubcompare(pubkey, keys[count],
-                                                      false))
-                               {
-                                       dst_key_setflags(keys[count], flags);
-                               }
-                               dst_key_setflags(pubkey, flags);
-                       }
-               }
-
-               if (result != ISC_R_SUCCESS) {
-                       char filename[DNS_NAME_FORMATSIZE +
-                                     DNS_SECALG_FORMATSIZE +
-                                     sizeof("key file for //65535")];
-                       isc_result_t result2;
-                       isc_buffer_t buf;
-
-                       isc_buffer_init(&buf, filename, NAME_MAX);
-                       result2 = dst_key_getfilename(
-                               dst_key_name(pubkey), dst_key_id(pubkey),
-                               dst_key_alg(pubkey),
-                               (DST_TYPE_PUBLIC | DST_TYPE_PRIVATE |
-                                DST_TYPE_STATE),
-                               directory, mctx, &buf);
-                       if (result2 != ISC_R_SUCCESS) {
-                               char namebuf[DNS_NAME_FORMATSIZE];
-                               char algbuf[DNS_SECALG_FORMATSIZE];
-
-                               dns_name_format(dst_key_name(pubkey), namebuf,
-                                               sizeof(namebuf));
-                               dns_secalg_format(dst_key_alg(pubkey), algbuf,
-                                                 sizeof(algbuf));
-                               snprintf(filename, sizeof(filename) - 1,
-                                        "key file for %s/%s/%d", namebuf,
-                                        algbuf, dst_key_id(pubkey));
-                       }
-
-                       isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
-                                     DNS_LOGMODULE_DNSSEC, ISC_LOG_WARNING,
-                                     "dns_dnssec_findzonekeys: error "
-                                     "reading %s: %s",
-                                     filename, isc_result_totext(result));
-               }
-
-               if (result == ISC_R_FILENOTFOUND || result == ISC_R_NOPERM) {
-                       keys[count] = pubkey;
-                       pubkey = NULL;
-                       count++;
-                       goto next;
-               }
-
-               if (result != ISC_R_SUCCESS) {
-                       goto failure;
-               }
-
-               /*
-                * If a key is marked inactive, skip it
-                */
-               if (!dns_dnssec_keyactive(keys[count], now)) {
-                       dst_key_setinactive(pubkey, true);
-                       dst_key_free(&keys[count]);
-                       keys[count] = pubkey;
-                       pubkey = NULL;
-                       count++;
-                       goto next;
-               }
-
-               /*
-                * Whatever the key's default TTL may have
-                * been, the rdataset TTL takes priority.
-                */
-               dst_key_setttl(keys[count], rdataset.ttl);
-
-               if ((dst_key_flags(keys[count]) & DNS_KEYTYPE_NOAUTH) != 0) {
-                       /* We should never get here. */
-                       dst_key_free(&keys[count]);
-                       goto next;
-               }
-               count++;
-       next:
-               if (pubkey != NULL) {
-                       dst_key_free(&pubkey);
-               }
-               dns_rdata_reset(&rdata);
-               result = dns_rdataset_next(&rdataset);
-       }
-       if (result != ISC_R_NOMORE) {
-               goto failure;
-       }
-       if (count == 0) {
-               result = ISC_R_NOTFOUND;
-       } else {
-               result = ISC_R_SUCCESS;
-       }
-
-failure:
-       if (dns_rdataset_isassociated(&rdataset)) {
-               dns_rdataset_disassociate(&rdataset);
-       }
-       if (pubkey != NULL) {
-               dst_key_free(&pubkey);
-       }
-       if (result != ISC_R_SUCCESS) {
-               while (count > 0) {
-                       dst_key_free(&keys[--count]);
-               }
-       }
-       *nkeys = count;
-       return (result);
-}
-
 isc_result_t
 dns_dnssec_signmessage(dns_message_t *msg, dst_key_t *key) {
        dns_rdata_sig_t sig; /* SIG(0) */
index b9bdffc6819760383c783e122a933e6b1a648a8d..7a6c5b5bc983e522415003e97becd39dce0f5470 100644 (file)
@@ -177,20 +177,6 @@ dns_dnssec_verify(const dns_name_t *name, dns_rdataset_t *set, dst_key_t *key,
  *\li          DST_R_*
  */
 
-/*@{*/
-isc_result_t
-dns_dnssec_findzonekeys(dns_db_t *db, dns_dbversion_t *ver, dns_dbnode_t *node,
-                       const dns_name_t *name, const char *directory,
-                       isc_stdtime_t now, isc_mem_t *mctx,
-                       unsigned int maxkeys, dst_key_t **keys,
-                       unsigned int *nkeys);
-
-/*%<
- *     Finds a set of zone keys.
- *     XXX temporary - this should be handled in dns_zone_t.
- */
-/*@}*/
-
 bool
 dns_dnssec_keyactive(dst_key_t *key, isc_stdtime_t now);
 /*%<
index a463fee162e044c6cfd66471d46e68df7440d412..d1e589f445b3bf5fe4df237b12e3dc63128a5156 100644 (file)
@@ -1644,7 +1644,7 @@ dns_zone_getkeystores(dns_zone_t *zone);
 isc_result_t
 dns_zone_getdnsseckeys(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
                       isc_stdtime_t now, dns_dnsseckeylist_t *keys);
-/*%
+/*%<
  * Find DNSSEC keys used for signing with dnssec-policy. Load these keys
  * into 'keys'.
  *
@@ -1657,6 +1657,26 @@ dns_zone_getdnsseckeys(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
  *\li  Error
  */
 
+isc_result_t
+dns_zone_findkeys(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
+                 isc_stdtime_t now, isc_mem_t *mctx, unsigned int maxkeys,
+                 dst_key_t **keys, unsigned int *nkeys);
+/*%<
+ * Finds a set of zone keys. Searches in the applicable key stores for the
+ * given 'zone' if there is a dnssec-policy attached, otherwise it looks up
+ * the keys in the zone's key-directory. The found keys are loaded into 'keys'.
+ *
+ * Requires:
+ *\li  'zone' to be a valid initialised zone.
+ *\li  'mctx' is not NULL.
+ *\li  'keys' is not NULL and has enough space form 'nkeys' keys.
+ *\li  'nkeys' is not NULL.
+ *
+ * Returns:
+ *\li  #ISC_R_SUCCESS
+ *\li  Error
+ */
+
 void
 dns_zonemgr_create(isc_mem_t *mctx, isc_loopmgr_t *loopmgr, isc_nm_t *netmgr,
                   dns_zonemgr_t **zmgrp);
index 428dfd94b9b05e4ec3846ae36ebafca64911f4da..4d9fa8657432b4409670ee3a490af3094034422c 100644 (file)
@@ -218,6 +218,13 @@ typedef struct dns_include dns_include_t;
 #define ZONEDB_LOCK(l, t)     RWLOCK((l), (t))
 #define ZONEDB_UNLOCK(l, t)   RWUNLOCK((l), (t))
 
+#define RETERR(x)                            \
+       do {                                 \
+               result = (x);                \
+               if (result != ISC_R_SUCCESS) \
+                       goto failure;        \
+       } while (0)
+
 #ifdef ENABLE_AFL
 extern bool dns_fuzzing_resolver;
 #endif /* ifdef ENABLE_AFL */
@@ -6057,6 +6064,212 @@ was_dumping(dns_zone_t *zone) {
        return (false);
 }
 
+static isc_result_t
+keyfromfile(dns_zone_t *zone, dst_key_t *pubkey, isc_mem_t *mctx,
+           dst_key_t **key) {
+       const char *directory = dns_zone_getkeydirectory(zone);
+       dns_kasp_t *kasp = dns_zone_getkasp(zone);
+       dst_key_t *foundkey = NULL;
+       isc_result_t result = ISC_R_NOTFOUND;
+
+       if (kasp == NULL || (strcmp(dns_kasp_getname(kasp), "none") == 0) ||
+           (strcmp(dns_kasp_getname(kasp), "insecure") == 0))
+       {
+               result = dst_key_fromfile(
+                       dst_key_name(pubkey), dst_key_id(pubkey),
+                       dst_key_alg(pubkey),
+                       (DST_TYPE_PUBLIC | DST_TYPE_PRIVATE | DST_TYPE_STATE),
+                       directory, mctx, &foundkey);
+       } else {
+               for (dns_kasp_key_t *kkey = ISC_LIST_HEAD(dns_kasp_keys(kasp));
+                    kkey != NULL; kkey = ISC_LIST_NEXT(kkey, link))
+               {
+                       dns_keystore_t *ks = dns_kasp_key_keystore(kkey);
+                       if (ks == NULL ||
+                           strcmp(dns_keystore_name(ks), "key-directory") == 0)
+                       {
+                               directory = dns_zone_getkeydirectory(zone);
+                       } else {
+                               directory = dns_keystore_directory(ks);
+                       }
+
+                       result = dst_key_fromfile(
+                               dst_key_name(pubkey), dst_key_id(pubkey),
+                               dst_key_alg(pubkey),
+                               (DST_TYPE_PUBLIC | DST_TYPE_PRIVATE |
+                                DST_TYPE_STATE),
+                               directory, mctx, &foundkey);
+                       if (result == ISC_R_SUCCESS) {
+                               break;
+                       }
+               }
+       }
+
+       *key = foundkey;
+       return (result);
+}
+
+#define is_zone_key(key) \
+       ((dst_key_flags(key) & DNS_KEYFLAG_OWNERMASK) == DNS_KEYOWNER_ZONE)
+
+static isc_result_t
+findzonekeys(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
+            dns_dbnode_t *node, const dns_name_t *name, isc_stdtime_t now,
+            isc_mem_t *mctx, unsigned int maxkeys, dst_key_t **keys,
+            unsigned int *nkeys) {
+       dns_rdataset_t rdataset;
+       dns_rdata_t rdata = DNS_RDATA_INIT;
+       isc_result_t result;
+       dst_key_t *pubkey = NULL;
+       unsigned int count = 0;
+
+       *nkeys = 0;
+       memset(keys, 0, sizeof(*keys) * maxkeys);
+       dns_rdataset_init(&rdataset);
+       RETERR(dns_db_findrdataset(db, node, ver, dns_rdatatype_dnskey, 0, 0,
+                                  &rdataset, NULL));
+       RETERR(dns_rdataset_first(&rdataset));
+       while (result == ISC_R_SUCCESS && count < maxkeys) {
+               pubkey = NULL;
+               dns_rdataset_current(&rdataset, &rdata);
+               RETERR(dns_dnssec_keyfromrdata(name, &rdata, mctx, &pubkey));
+               dst_key_setttl(pubkey, rdataset.ttl);
+
+               if (!is_zone_key(pubkey) ||
+                   (dst_key_flags(pubkey) & DNS_KEYTYPE_NOAUTH) != 0)
+               {
+                       goto next;
+               }
+               /* Corrupted .key file? */
+               if (!dns_name_equal(name, dst_key_name(pubkey))) {
+                       goto next;
+               }
+               keys[count] = NULL;
+               result = keyfromfile(zone, pubkey, mctx, &keys[count]);
+
+               /*
+                * If the key was revoked and the private file
+                * doesn't exist, maybe it was revoked internally
+                * by named.  Try loading the unrevoked version.
+                */
+               if (result == ISC_R_FILENOTFOUND) {
+                       uint32_t flags;
+                       flags = dst_key_flags(pubkey);
+                       if ((flags & DNS_KEYFLAG_REVOKE) != 0) {
+                               dst_key_setflags(pubkey,
+                                                flags & ~DNS_KEYFLAG_REVOKE);
+                               result = keyfromfile(zone, pubkey, mctx,
+                                                    &keys[count]);
+                               if (result == ISC_R_SUCCESS &&
+                                   dst_key_pubcompare(pubkey, keys[count],
+                                                      false))
+                               {
+                                       dst_key_setflags(keys[count], flags);
+                               }
+                               dst_key_setflags(pubkey, flags);
+                       }
+               }
+
+               if (result != ISC_R_SUCCESS) {
+                       char filename[DNS_NAME_FORMATSIZE +
+                                     DNS_SECALG_FORMATSIZE +
+                                     sizeof("key file for //65535")];
+                       isc_result_t result2;
+                       isc_buffer_t buf;
+
+                       isc_buffer_init(&buf, filename, sizeof(filename));
+                       result2 = dst_key_getfilename(
+                               dst_key_name(pubkey), dst_key_id(pubkey),
+                               dst_key_alg(pubkey),
+                               (DST_TYPE_PUBLIC | DST_TYPE_PRIVATE |
+                                DST_TYPE_STATE),
+                               NULL, mctx, &buf);
+                       if (result2 != ISC_R_SUCCESS) {
+                               char namebuf[DNS_NAME_FORMATSIZE];
+                               char algbuf[DNS_SECALG_FORMATSIZE];
+
+                               dns_name_format(dst_key_name(pubkey), namebuf,
+                                               sizeof(namebuf));
+                               dns_secalg_format(dst_key_alg(pubkey), algbuf,
+                                                 sizeof(algbuf));
+                               snprintf(filename, sizeof(filename) - 1,
+                                        "key file for %s/%s/%d", namebuf,
+                                        algbuf, dst_key_id(pubkey));
+                       }
+
+                       isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
+                                     DNS_LOGMODULE_DNSSEC, ISC_LOG_WARNING,
+                                     "dns_zone_findkeys: error reading %s: %s",
+                                     filename, isc_result_totext(result));
+               }
+
+               if (result == ISC_R_FILENOTFOUND || result == ISC_R_NOPERM) {
+                       keys[count] = pubkey;
+                       pubkey = NULL;
+                       count++;
+                       goto next;
+               }
+
+               if (result != ISC_R_SUCCESS) {
+                       goto failure;
+               }
+
+               /*
+                * If a key is marked inactive, skip it
+                */
+               if (!dns_dnssec_keyactive(keys[count], now)) {
+                       dst_key_setinactive(pubkey, true);
+                       dst_key_free(&keys[count]);
+                       keys[count] = pubkey;
+                       pubkey = NULL;
+                       count++;
+                       goto next;
+               }
+
+               /*
+                * Whatever the key's default TTL may have
+                * been, the rdataset TTL takes priority.
+                */
+               dst_key_setttl(keys[count], rdataset.ttl);
+
+               if ((dst_key_flags(keys[count]) & DNS_KEYTYPE_NOAUTH) != 0) {
+                       /* We should never get here. */
+                       dst_key_free(&keys[count]);
+                       goto next;
+               }
+               count++;
+       next:
+               if (pubkey != NULL) {
+                       dst_key_free(&pubkey);
+               }
+               dns_rdata_reset(&rdata);
+               result = dns_rdataset_next(&rdataset);
+       }
+       if (result != ISC_R_NOMORE) {
+               goto failure;
+       }
+       if (count == 0) {
+               result = ISC_R_NOTFOUND;
+       } else {
+               result = ISC_R_SUCCESS;
+       }
+
+failure:
+       if (dns_rdataset_isassociated(&rdataset)) {
+               dns_rdataset_disassociate(&rdataset);
+       }
+       if (pubkey != NULL) {
+               dst_key_free(&pubkey);
+       }
+       if (result != ISC_R_SUCCESS) {
+               while (count > 0) {
+                       dst_key_free(&keys[--count]);
+               }
+       }
+       *nkeys = count;
+       return (result);
+}
+
 /*%
  * Find up to 'maxkeys' DNSSEC keys used for signing version 'ver' of database
  * 'db' for zone 'zone' in its key directory, then load these keys into 'keys'.
@@ -6064,21 +6277,23 @@ was_dumping(dns_zone_t *zone) {
  * 'now'.  Store the number of keys found in 'nkeys'.
  */
 isc_result_t
-dns__zone_findkeys(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
-                  isc_stdtime_t now, isc_mem_t *mctx, unsigned int maxkeys,
-                  dst_key_t **keys, unsigned int *nkeys) {
+dns_zone_findkeys(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
+                 isc_stdtime_t now, isc_mem_t *mctx, unsigned int maxkeys,
+                 dst_key_t **keys, unsigned int *nkeys) {
        isc_result_t result;
        dns_dbnode_t *node = NULL;
-       const char *directory = dns_zone_getkeydirectory(zone);
+
+       REQUIRE(DNS_ZONE_VALID(zone));
+       REQUIRE(mctx != NULL);
+       REQUIRE(nkeys != NULL);
+       REQUIRE(keys != NULL);
 
        CHECK(dns_db_findnode(db, dns_db_origin(db), false, &node));
-       memset(keys, 0, sizeof(*keys) * maxkeys);
 
        dns_zone_lock_keyfiles(zone);
 
-       result = dns_dnssec_findzonekeys(db, ver, node, dns_db_origin(db),
-                                        directory, now, mctx, maxkeys, keys,
-                                        nkeys);
+       result = findzonekeys(zone, db, ver, node, dns_db_origin(db), now, mctx,
+                             maxkeys, keys, nkeys);
 
        dns_zone_unlock_keyfiles(zone);
 
@@ -6752,11 +6967,11 @@ zone_resigninc(dns_zone_t *zone) {
 
        now = isc_stdtime_now();
 
-       result = dns__zone_findkeys(zone, db, version, now, zone->mctx,
-                                   DNS_MAXZONEKEYS, zone_keys, &nkeys);
+       result = dns_zone_findkeys(zone, db, version, now, zone->mctx,
+                                  DNS_MAXZONEKEYS, zone_keys, &nkeys);
        if (result != ISC_R_SUCCESS) {
                dns_zone_log(zone, ISC_LOG_ERROR,
-                            "zone_resigninc:dns__zone_findkeys -> %s",
+                            "zone_resigninc:dns_zone_findkeys -> %s",
                             isc_result_totext(result));
                goto failure;
        }
@@ -7987,11 +8202,11 @@ zone_nsec3chain(dns_zone_t *zone) {
 
        now = isc_stdtime_now();
 
-       result = dns__zone_findkeys(zone, db, version, now, zone->mctx,
-                                   DNS_MAXZONEKEYS, zone_keys, &nkeys);
+       result = dns_zone_findkeys(zone, db, version, now, zone->mctx,
+                                  DNS_MAXZONEKEYS, zone_keys, &nkeys);
        if (result != ISC_R_SUCCESS) {
                dnssec_log(zone, ISC_LOG_ERROR,
-                          "zone_nsec3chain:dns__zone_findkeys -> %s",
+                          "zone_nsec3chain:dns_zone_findkeys -> %s",
                           isc_result_totext(result));
                goto failure;
        }
@@ -9072,11 +9287,11 @@ zone_sign(dns_zone_t *zone) {
 
        now = isc_stdtime_now();
 
-       result = dns__zone_findkeys(zone, db, version, now, zone->mctx,
-                                   DNS_MAXZONEKEYS, zone_keys, &nkeys);
+       result = dns_zone_findkeys(zone, db, version, now, zone->mctx,
+                                  DNS_MAXZONEKEYS, zone_keys, &nkeys);
        if (result != ISC_R_SUCCESS) {
                dnssec_log(zone, ISC_LOG_ERROR,
-                          "zone_sign:dns__zone_findkeys -> %s",
+                          "zone_sign:dns_zone_findkeys -> %s",
                           isc_result_totext(result));
                goto cleanup;
        }
@@ -20139,11 +20354,11 @@ sign_apex(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
        dst_key_t *zone_keys[DNS_MAXZONEKEYS];
        unsigned int nkeys = 0, i;
 
-       result = dns__zone_findkeys(zone, db, ver, now, zone->mctx,
-                                   DNS_MAXZONEKEYS, zone_keys, &nkeys);
+       result = dns_zone_findkeys(zone, db, ver, now, zone->mctx,
+                                  DNS_MAXZONEKEYS, zone_keys, &nkeys);
        if (result != ISC_R_SUCCESS) {
                dnssec_log(zone, ISC_LOG_ERROR,
-                          "sign_apex:dns__zone_findkeys -> %s",
+                          "sign_apex:dns_zone_findkeys -> %s",
                           isc_result_totext(result));
                return (result);
        }
index fcbd3711c280f9b1c9c399b8e0695b0fb75d6bd1..16ee0e522a3d851c3a1d48a4c4d8b5fcc7c32514 100644 (file)
@@ -29,11 +29,6 @@ typedef struct {
        bool offline;
 } dns__zonediff_t;
 
-isc_result_t
-dns__zone_findkeys(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
-                  isc_stdtime_t now, isc_mem_t *mctx, unsigned int maxkeys,
-                  dst_key_t **keys, unsigned int *nkeys);
-
 isc_result_t
 dns__zone_updatesigs(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *version,
                     dst_key_t *zone_keys[], unsigned int nkeys,
index 94d94fbb39ba426cce0e3185838d823db414a8f2..09105040030b19358eebd861d53f7e4b16c25bb5 100644 (file)
@@ -315,8 +315,8 @@ ISC_RUN_TEST_IMPL(updatesigs_next) {
        result = dns_zone_setkeydirectory(zone, TESTS_DIR "/testkeys");
        assert_int_equal(result, ISC_R_SUCCESS);
 
-       result = dns__zone_findkeys(zone, db, NULL, now, mctx, DNS_MAXZONEKEYS,
-                                   zone_keys, &nkeys);
+       result = dns_zone_findkeys(zone, db, NULL, now, mctx, DNS_MAXZONEKEYS,
+                                  zone_keys, &nkeys);
        assert_int_equal(result, ISC_R_SUCCESS);
        assert_int_equal(nkeys, 2);