}
}
-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) {
op == DNS_DIFFOP_ADDRESIGN))
{
isc_stdtime_t resign;
- resign = setresign(&ardataset);
+ resign = dns_rdataset_minresign(&ardataset);
dns_db_setsigningtime(db, &ardataset,
resign);
}
* \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'.
#include <dns/ncache.h>
#include <dns/rdata.h>
#include <dns/rdataset.h>
+#include <dns/time.h>
#include <dns/types.h>
#define MAX_SHUFFLE 100
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;
+}