]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add dst_key_copy_metadata function.
authorMatthijs Mekking <matthijs@isc.org>
Mon, 4 Nov 2019 10:12:26 +0000 (11:12 +0100)
committerMatthijs Mekking <matthijs@isc.org>
Wed, 6 Nov 2019 21:36:21 +0000 (22:36 +0100)
When updating DNSSEC keys we would like to be able to copy the
metadata from one key to another.

lib/dns/dst_api.c
lib/dns/include/dst/dst.h
lib/dns/win32/libdns.def.in

index cfa4bbcda63e5d0805eee93c9d04150ca48b6f39..06e9c611ada6d8f0a25381b22c3ca847f0ea226c 100644 (file)
@@ -2587,3 +2587,52 @@ dst_key_is_removed(dst_key_t *key, isc_stdtime_t now, isc_stdtime_t *remove)
 
        return state_ok && time_ok;
 }
+
+void
+dst_key_copy_metadata(dst_key_t *to, dst_key_t *from)
+{
+       dst_key_state_t state;
+       isc_stdtime_t when;
+       uint32_t num;
+       bool yesno;
+       isc_result_t result;
+
+       REQUIRE(VALID_KEY(to));
+       REQUIRE(VALID_KEY(from));
+
+       for (int i = 0; i < DST_MAX_TIMES+1; i++) {
+               result = dst_key_gettime(from, i, &when);
+               if (result == ISC_R_SUCCESS) {
+                       dst_key_settime(to, i, when);
+               } else {
+                       dst_key_unsettime(to, i);
+               }
+       }
+
+       for (int i = 0; i < DST_MAX_NUMERIC+1; i++) {
+               result = dst_key_getnum(from, i, &num);
+               if (result == ISC_R_SUCCESS) {
+                       dst_key_setnum(to, i, num);
+               } else {
+                       dst_key_unsetnum(to, i);
+               }
+       }
+
+       for (int i = 0; i < DST_MAX_BOOLEAN+1; i++) {
+               result = dst_key_getbool(from, i, &yesno);
+               if (result == ISC_R_SUCCESS) {
+                       dst_key_setbool(to, i, yesno);
+               } else {
+                       dst_key_unsetnum(to, i);
+               }
+       }
+
+       for (int i = 0; i < DST_MAX_KEYSTATES+1; i++) {
+               result = dst_key_getstate(from, i, &state);
+               if (result == ISC_R_SUCCESS) {
+                       dst_key_setstate(to, i, state);
+               } else {
+                       dst_key_unsetstate(to, i);
+               }
+       }
+}
index febadabae76f1d0c66e1ddec8c21c7aab49e357e..afa206862396346a132aa9eae0e0612fca783a9e 100644 (file)
@@ -1166,6 +1166,16 @@ dst_key_is_removed(dst_key_t *key, isc_stdtime_t now, isc_stdtime_t *remove);
  *     'key' to be valid.
  */
 
+void
+dst_key_copy_metadata(dst_key_t *to, dst_key_t *from);
+/*%<
+ * Copy key metadata from one key to another.
+ *
+ * Requires:
+ *     'to' and 'from' to be valid.
+ */
+
+
 ISC_LANG_ENDDECLS
 
 #endif /* DST_DST_H */
index c127aba804d0cf17afc2a3d98a0c37b7bfb26c72..2d90054b6b95c44fdb4e150f57e6a2fa1e32a6ad 100644 (file)
@@ -1405,6 +1405,7 @@ dst_key_attach
 dst_key_buildfilename
 dst_key_buildinternal
 dst_key_class
+dst_key_copy_metadata
 dst_key_compare
 dst_key_computesecret
 dst_key_dump