]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Refactor dns_keystore_directory()
authorMatthijs Mekking <matthijs@isc.org>
Fri, 17 Nov 2023 16:09:00 +0000 (17:09 +0100)
committerMatthijs Mekking <matthijs@isc.org>
Thu, 25 Jan 2024 14:37:40 +0000 (15:37 +0100)
Add a default key-directory parameter to the function that can
be returned if there is no keystore, or if the keystore directory
is NULL (the latter is also true for the built-in keystore).

bin/dnssec/dnssec-keygen.c
lib/dns/dnssec.c
lib/dns/include/dns/keystore.h
lib/dns/keymgr.c
lib/dns/keystore.c
lib/dns/zone.c
lib/isccfg/check.c

index d770e41c94d8726f14994a5777d8eb2299e62729..b9e5fdb62bcfafe1c564fe5170ed8335f1d3ad69 100644 (file)
@@ -913,7 +913,7 @@ keygen(keygen_ctx_t *ctx, isc_mem_t *mctx, int argc, char **argv) {
 
 static void
 check_keystore_options(keygen_ctx_t *ctx) {
-       ctx->directory = dns_keystore_directory(ctx->keystore);
+       ctx->directory = dns_keystore_directory(ctx->keystore, NULL);
        if (ctx->directory != NULL) {
                isc_result_t ret = try_dir(ctx->directory);
                if (ret != ISC_R_SUCCESS) {
index c1b1beedfad311d023da7d81abc8dfa5a5616ae2..eaf7ef6f11c89f93497310b997554b2eab1f64ed 100644 (file)
@@ -1376,15 +1376,8 @@ dns_dnssec_findmatchingkeys(const dns_name_t *origin, dns_kasp_t *kasp,
                        {
                                if (dns_kasp_key_keystore(kkey) == keystore) {
                                        const char *directory =
-                                               dns_keystore_directory(
-                                                       keystore);
-                                       if (directory == NULL ||
-                                           (strcmp(dns_keystore_name(keystore),
-                                                   DNS_KEYSTORE_KEYDIRECTORY) ==
-                                            0))
-                                       {
-                                               directory = keydir;
-                                       }
+                                               dns_keystore_directory(keystore,
+                                                                      keydir);
                                        RETERR(findmatchingkeys(
                                                directory, namebuf, len, mctx,
                                                now, &list));
@@ -1532,15 +1525,7 @@ keyfromfile(dns_kasp_t *kasp, const char *keydir, dst_key_t *key, int type,
                     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),
-                                  DNS_KEYSTORE_KEYDIRECTORY) == 0)
-                       {
-                               directory = keydir;
-                       } else {
-                               directory = dns_keystore_directory(ks);
-                       }
-
+                       directory = dns_keystore_directory(ks, keydir);
                        result = dst_key_fromfile(dst_key_name(key),
                                                  dst_key_id(key),
                                                  dst_key_alg(key), type,
index 6db1e9cbbb6e7d01afd72d983492cb8f2e1777b8..8cf573cb31898a977130a54f2dc6c92eb8c9a00d 100644 (file)
@@ -146,13 +146,10 @@ dns_keystore_engine(dns_keystore_t *keystore);
  */
 
 const char *
-dns_keystore_directory(dns_keystore_t *keystore);
+dns_keystore_directory(dns_keystore_t *keystore, const char *keydir);
 /*%<
- * Get keystore directory.
- *
- * Requires:
- *
- *\li   'keystore' is a valid keystore.
+ * Get keystore directory. If 'keystore' is NULL or 'keystore->directory' is
+ *NULL, return 'keydir'.
  *
  * Returns:
  *
index 05b26261c9bee39c0be97ab35768e57be4a1acab..cc59e42c0b0acc7bdbe4e69b043e6f29f9d9c392 100644 (file)
@@ -453,6 +453,7 @@ keymgr_createkey(dns_kasp_key_t *kkey, const dns_name_t *origin,
        dst_key_t *newkey = NULL;
        uint32_t alg = dns_kasp_key_algorithm(kkey);
        dns_keystore_t *keystore = dns_kasp_key_keystore(kkey);
+       const char *dir = NULL;
        int size = dns_kasp_key_size(kkey);
 
        if (dns_kasp_key_ksk(kkey)) {
@@ -490,19 +491,10 @@ keymgr_createkey(dns_kasp_key_t *kkey, const dns_name_t *origin,
        dst_key_setbool(newkey, DST_BOOL_KSK, dns_kasp_key_ksk(kkey));
        dst_key_setbool(newkey, DST_BOOL_ZSK, dns_kasp_key_zsk(kkey));
 
-       if (keystore == NULL ||
-           strcmp(dns_keystore_name(keystore), "key-directory") == 0)
-       {
-               if (keydir != NULL) {
-                       dst_key_setdirectory(newkey, keydir);
-               }
-       } else {
-               if (dns_keystore_directory(keystore) != NULL) {
-                       dst_key_setdirectory(newkey,
-                                            dns_keystore_directory(keystore));
-               }
+       dir = dns_keystore_directory(keystore, keydir);
+       if (dir != NULL) {
+               dst_key_setdirectory(newkey, dir);
        }
-
        *dst_key = newkey;
        return (ISC_R_SUCCESS);
 
index 8ca22873d86afd4108b5534f329c7620ac44b33d..128bededc06e80b0f8ed09e8ac2d67211235f34f 100644 (file)
@@ -108,8 +108,16 @@ dns_keystore_engine(dns_keystore_t *keystore) {
 }
 
 const char *
-dns_keystore_directory(dns_keystore_t *keystore) {
-       REQUIRE(DNS_KEYSTORE_VALID(keystore));
+dns_keystore_directory(dns_keystore_t *keystore, const char *keydir) {
+       if (keystore == NULL) {
+               return (keydir);
+       }
+
+       INSIST(DNS_KEYSTORE_VALID(keystore));
+
+       if (keystore->directory == NULL) {
+               return (keydir);
+       }
 
        return (keystore->directory);
 }
index 2b7bab831675fdbedb4bf59d6d5f6a541c9a1580..f0360e4d4492c5507dfe43e24f8d607610e10e14 100644 (file)
@@ -6085,13 +6085,8 @@ keyfromfile(dns_zone_t *zone, dst_key_t *pubkey, isc_mem_t *mctx,
                     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 = zone->keydirectory;
-                       } else {
-                               directory = dns_keystore_directory(ks);
-                       }
+                       directory = dns_keystore_directory(ks,
+                                                          zone->keydirectory);
 
                        result = dst_key_fromfile(
                                dst_key_name(pubkey), dst_key_id(pubkey),
index c00c58884545eb9d1ff24716944e030bb025707d..ad4ae8441d3622a4533449edb1267ef5687a1e87 100644 (file)
@@ -3009,14 +3009,16 @@ check_keydir(const cfg_obj_t *config, const cfg_obj_t *zconfig,
             kkey != NULL; kkey = ISC_LIST_NEXT(kkey, link))
        {
                dns_keystore_t *kks = dns_kasp_key_keystore(kkey);
-               if (kks == NULL || strcmp(DNS_KEYSTORE_KEYDIRECTORY,
-                                         dns_keystore_name(kks)) == 0)
-               {
-                       dir = keydir;
-                       keystore = false;
-               } else {
-                       dir = dns_keystore_directory(kks);
-                       keystore = true;
+               dir = dns_keystore_directory(kks, keydir);
+               keystore = (kks != NULL && strcmp(DNS_KEYSTORE_KEYDIRECTORY,
+                                                 dns_keystore_name(kks)) != 0);
+
+               ret = keydirexist(zconfig,
+                                 keystore ? "key-store directory"
+                                          : "key-directory",
+                                 zname, dir, name, keydirs, logctx, mctx);
+               if (ret != ISC_R_SUCCESS) {
+                       result = ret;
                }
        }
        dns_kasp_thaw(kasp);