ldns_status result = LDNS_STATUS_ERR;
bool apexonly = false;
int percentage = 100;
+ struct tm tm;
time_t check_time = ldns_time(NULL);
- while ((c = getopt(argc, argv, "ahvV:p:")) != -1) {
+ while ((c = getopt(argc, argv, "ahvV:p:t:")) != -1) {
switch(c) {
case 'a':
apexonly = true;
printf("It also checks the NSEC(3) chain, but it will "
"error on opted-out delegations\n");
printf("\nOPTIONS:\n");
- printf("\t-a apex only, check only the zone apex\n");
- printf("\t-p [0-100] only checks this percentage of "
- "the zone. Defaults to 100\n");
- printf("\t-h show this text\n");
- printf("\t-v shows the version and exits\n");
+ printf("\t-a\t\tapex only, check only the zone apex\n");
+ printf("\t-p [0-100]\tonly checks this percentage of "
+ "the zone.\n\t\t\tDefaults to 100\n");
+ printf("\t-h\t\tshow this text\n");
+ printf("\t-t YYYYMMDDhhmmss | [+|-]offset\n\t\t\t"
+ "Set the validation time either by an "
+ "absolute time\n\t\t\tvalue or as an offset "
+ "in seconds from <now>.\n");
+ printf("\t-v\t\tshows the version and exits\n");
printf("\t-V [0-5]\tset verbosity level (default 3)\n");
printf("\nif no file is given standard input is "
"read\n");
}
srandom(time(NULL) ^ getpid());
break;
+ case 't':
+ if (strlen(optarg) == 14 && sscanf(optarg,
+ "%4d%2d%2d%2d%2d%2d",
+ &tm.tm_year, &tm.tm_mon,
+ &tm.tm_mday, &tm.tm_hour,
+ &tm.tm_min, &tm.tm_sec) == 6) {
+ tm.tm_year -= 1900;
+ tm.tm_mon--;
+ check_time = mktime_from_utc(&tm);
+ }
+ else {
+ check_time += atoi(optarg);
+ }
}
}
ldns_calc_keytag_raw
ldns_cert_algorithm2buffer_str
ldns_cert_algorithms
-ldns_convert_ecdsa_rrsig_asn12rdf
-ldns_convert_ecdsa_rrsig_rdf2asn1
ldns_convert_dsa_rrsig_asn12rdf
ldns_convert_dsa_rrsig_rdf2asn1
+ldns_convert_ecdsa_rrsig_asn12rdf
+ldns_convert_ecdsa_rrsig_rdf2asn1
ldns_create_empty_rrsig
ldns_create_nsec
ldns_create_nsec3
+ldns_digest_evp
ldns_directive_types
ldns_dname2buffer_wire
ldns_dname2canonical
ldns_dnssec_default_replace_signatures
ldns_dnssec_derive_trust_tree
ldns_dnssec_derive_trust_tree_dnskey_rrset
+ldns_dnssec_derive_trust_tree_dnskey_rrset_time
ldns_dnssec_derive_trust_tree_ds_rrset
+ldns_dnssec_derive_trust_tree_ds_rrset_time
ldns_dnssec_derive_trust_tree_normal_rrset
+ldns_dnssec_derive_trust_tree_normal_rrset_time
ldns_dnssec_derive_trust_tree_no_sig
+ldns_dnssec_derive_trust_tree_no_sig_time
+ldns_dnssec_derive_trust_tree_time
ldns_dnssec_get_dnskey_for_rrsig
ldns_dnssec_get_rrsig_for_name_and_type
ldns_dnssec_name_add_rr
ldns_edns_flags
ldns_error_str
ldns_fetch_valid_domain_keys
+ldns_fetch_valid_domain_keys_time
ldns_fget_keyword_data
ldns_fget_keyword_data_l
ldns_fget_token
ldns_get_rr_type_by_name
ldns_get_signing_algorithm_by_name
ldns_gost2pkey_raw
-ldns_digest_evp
-ldns_key_EVP_load_gost_id
-ldns_key_EVP_unload_gost
ldns_hexdigit_to_int
ldns_hexstring_to_data
ldns_init_random
ldns_key2buffer_str
ldns_key2rr
ldns_key2str
-ldns_key_algo_supported
ldns_key_algorithm
+ldns_key_algo_supported
ldns_key_buf2dsa
ldns_key_buf2dsa_raw
ldns_key_buf2rsa
ldns_key_deep_free
ldns_key_dsa_key
ldns_key_evp_key
+ldns_key_EVP_load_gost_id
+ldns_key_EVP_unload_gost
ldns_key_expiration
ldns_key_external_key
ldns_key_flags
ldns_pkt_tsig_verify
ldns_pkt_tsig_verify_next
ldns_pkt_verify
+ldns_pkt_verify_time
ldns_print_rr_rdf
ldns_rbtree_create
ldns_rbtree_delete
ldns_update_upcount
ldns_update_zocount
ldns_validate_domain_dnskey
+ldns_validate_domain_dnskey_time
ldns_validate_domain_ds
+ldns_validate_domain_ds_time
ldns_verify
ldns_verify_notime
ldns_verify_rrsig
ldns_verify_rrsig_evp_raw
ldns_verify_rrsig_keylist
ldns_verify_rrsig_keylist_notime
+ldns_verify_rrsig_keylist_time
ldns_verify_rrsig_rsamd5
ldns_verify_rrsig_rsamd5_raw
ldns_verify_rrsig_rsasha1
ldns_verify_rrsig_rsasha1_raw
ldns_verify_rrsig_rsasha256_raw
ldns_verify_rrsig_rsasha512_raw
+ldns_verify_rrsig_time
+ldns_verify_time
ldns_verify_trusted
+ldns_verify_trusted_time
ldns_version
ldns_wire2dname
ldns_wire2pkt