]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Move setresign to rdataset.c and rename it
authorAlessio Podda <alessio@isc.org>
Tue, 7 Oct 2025 04:00:17 +0000 (06:00 +0200)
committerAlessio Podda <alessio@isc.org>
Tue, 9 Dec 2025 11:55:10 +0000 (12:55 +0100)
The setresign method is not diff specific, it only returns the minimum
resign time of an rdataset. Move it to rdataset.c to simplify late
refactoring.

lib/dns/diff.c
lib/dns/include/dns/rdataset.h
lib/dns/rdataset.c

index d873c4365b7be74a88c47cddd7fa620eafc5415d..a3364c433c940c34c6a7f8c518bb0bed5c89e9b7 100644 (file)
@@ -203,41 +203,6 @@ dns_diff_appendminimal(dns_diff_t *diff, dns_difftuple_t **tuplep) {
        }
 }
 
-static isc_stdtime_t
-setresign(dns_rdataset_t *modified) {
-       dns_rdata_t rdata = DNS_RDATA_INIT;
-       dns_rdata_rrsig_t sig;
-       int64_t when;
-       isc_result_t result;
-
-       result = dns_rdataset_first(modified);
-       INSIST(result == ISC_R_SUCCESS);
-       dns_rdataset_current(modified, &rdata);
-       (void)dns_rdata_tostruct(&rdata, &sig, NULL);
-       if ((rdata.flags & DNS_RDATA_OFFLINE) != 0) {
-               when = 0;
-       } else {
-               when = dns_time64_from32(sig.timeexpire);
-       }
-       dns_rdata_reset(&rdata);
-
-       result = dns_rdataset_next(modified);
-       while (result == ISC_R_SUCCESS) {
-               dns_rdataset_current(modified, &rdata);
-               (void)dns_rdata_tostruct(&rdata, &sig, NULL);
-               if ((rdata.flags & DNS_RDATA_OFFLINE) != 0) {
-                       goto next_rr;
-               }
-               if (when == 0 || dns_time64_from32(sig.timeexpire) < when) {
-                       when = dns_time64_from32(sig.timeexpire);
-               }
-       next_rr:
-               dns_rdata_reset(&rdata);
-               result = dns_rdataset_next(modified);
-       }
-       INSIST(result == ISC_R_NOMORE);
-       return (isc_stdtime_t)when;
-}
 
 static void
 getownercase(dns_rdataset_t *rdataset, dns_name_t *name) {
@@ -407,7 +372,7 @@ diff_apply(const dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver,
                                     op == DNS_DIFFOP_ADDRESIGN))
                                {
                                        isc_stdtime_t resign;
-                                       resign = setresign(&ardataset);
+                                       resign = dns_rdataset_minresign(&ardataset);
                                        dns_db_setsigningtime(db, &ardataset,
                                                              resign);
                                }
index a03897e7643defab7ee526b160d906acb287212d..e2917b8675a68ae75986d0bb9a08d1873cc0ef69 100644 (file)
@@ -632,6 +632,19 @@ dns_rdataset_getheader(const dns_rdataset_t *rdataset);
  * \li 'rdataset' is a valid rdataset.
  */
 
+isc_stdtime_t
+dns_rdataset_minresign(dns_rdataset_t *rdataset);
+/*%<
+ * Return the minimum resign time from an RRSIG rdataset.
+ *
+ * This function iterates through all RRSIG records in the rdataset
+ * and returns the earliest expiration time, which indicates when
+ * the signatures should be resigned.
+ *
+ * Requires:
+ * \li 'rdataset' is a valid rdataset.
+ */
+
 /*%
  * Returns true if the rdataset is of type 'type', or type RRSIG
  * and covers 'type'.
index c418bed890b52a64c51773b8dc8973d8f37b594b..533b9b955617956cff2cbab5adf66a70d658f921 100644 (file)
@@ -30,6 +30,7 @@
 #include <dns/ncache.h>
 #include <dns/rdata.h>
 #include <dns/rdataset.h>
+#include <dns/time.h>
 #include <dns/types.h>
 
 #define MAX_SHUFFLE 100
@@ -597,3 +598,41 @@ dns_rdataset_getheader(const dns_rdataset_t *rdataset) {
 
        return NULL;
 }
+
+isc_stdtime_t
+dns_rdataset_minresign(dns_rdataset_t *rdataset) {
+       dns_rdata_t rdata = DNS_RDATA_INIT;
+       dns_rdata_rrsig_t sig;
+       int64_t when;
+       isc_result_t result;
+
+       REQUIRE(DNS_RDATASET_VALID(rdataset));
+
+       result = dns_rdataset_first(rdataset);
+       INSIST(result == ISC_R_SUCCESS);
+       dns_rdataset_current(rdataset, &rdata);
+       (void)dns_rdata_tostruct(&rdata, &sig, NULL);
+       if ((rdata.flags & DNS_RDATA_OFFLINE) != 0) {
+               when = 0;
+       } else {
+               when = dns_time64_from32(sig.timeexpire);
+       }
+       dns_rdata_reset(&rdata);
+
+       result = dns_rdataset_next(rdataset);
+       while (result == ISC_R_SUCCESS) {
+               dns_rdataset_current(rdataset, &rdata);
+               (void)dns_rdata_tostruct(&rdata, &sig, NULL);
+               if ((rdata.flags & DNS_RDATA_OFFLINE) != 0) {
+                       goto next_rr;
+               }
+               if (when == 0 || dns_time64_from32(sig.timeexpire) < when) {
+                       when = dns_time64_from32(sig.timeexpire);
+               }
+       next_rr:
+               dns_rdata_reset(&rdata);
+               result = dns_rdataset_next(rdataset);
+       }
+       INSIST(result == ISC_R_NOMORE);
+       return (isc_stdtime_t)when;
+}