Refactor dns_keystore_directory()

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).
This commit is contained in:
Matthijs Mekking 2023-11-17 17:09:00 +01:00
parent cb12b42839
commit daaa70f48b
7 changed files with 33 additions and 54 deletions

View 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) {

View 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,

View 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:
*

View 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);

View 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);
}

View 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),

View 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);