From 372d88de22d3ecaed4047f7756683d3cd38cedc0 Mon Sep 17 00:00:00 2001 From: Jan Vcelak <jan.vcelak@nic.cz> Date: Mon, 16 Sep 2013 15:41:25 +0200 Subject: [PATCH] DNSSEC: keep DNSKEY RDATA in knot_dnssec_key_t structure We need the public key data to manage the keys in the zone. refs #4 --- src/libknot/dnssec/sign.c | 17 +++++++++++++++-- src/libknot/dnssec/sign.h | 2 ++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/libknot/dnssec/sign.c b/src/libknot/dnssec/sign.c index 432b12de1a..bd1fb5765e 100644 --- a/src/libknot/dnssec/sign.c +++ b/src/libknot/dnssec/sign.c @@ -800,17 +800,27 @@ int knot_dnssec_key_from_params(const knot_key_params_t *params, return KNOT_ENOMEM; } - int result = init_algorithm_data(params, data); + knot_binary_t rdata_copy = { 0 }; + int result = knot_binary_dup(¶ms->rdata, &rdata_copy); if (result != KNOT_EOK) { knot_dname_free(&name); free(data); return result; } + result = init_algorithm_data(params, data); + if (result != KNOT_EOK) { + knot_dname_free(&name); + free(data); + knot_binary_free(&rdata_copy); + return result; + } + key->name = name; key->keytag = params->keytag; key->algorithm = params->algorithm; key->data = data; + key->dnskey_rdata = rdata_copy; return KNOT_EOK; } @@ -820,8 +830,9 @@ int knot_dnssec_key_from_params(const knot_key_params_t *params, */ int knot_dnssec_key_free(knot_dnssec_key_t *key) { - if (!key) + if (!key) { return KNOT_EINVAL; + } knot_dname_free(&key->name); @@ -830,6 +841,8 @@ int knot_dnssec_key_free(knot_dnssec_key_t *key) free(key->data); } + knot_binary_free(&key->dnskey_rdata); + memset(key, '\0', sizeof(knot_dnssec_key_t)); return KNOT_EOK; diff --git a/src/libknot/dnssec/sign.h b/src/libknot/dnssec/sign.h index 82515e0971..a0601caeef 100644 --- a/src/libknot/dnssec/sign.h +++ b/src/libknot/dnssec/sign.h @@ -28,6 +28,7 @@ #define _KNOT_DNSSEC_SIGN_H_ #include "common/descriptor.h" +#include "libknot/binary.h" #include "libknot/dnssec/algorithm.h" #include "libknot/dnssec/key.h" @@ -51,6 +52,7 @@ typedef struct { uint16_t keytag; //!< Key tag (for fast lookup). knot_dnssec_algorithm_t algorithm; //!< Algorithm identification. knot_dnssec_key_data_t *data; //!< Private key data. + knot_binary_t dnskey_rdata; //!< DNSKEY RDATA. } knot_dnssec_key_t; /*- DNSSEC private key manipulation ------------------------------------------*/ -- GitLab