From f3a4dad2c8e8fb6b39d2b9e54050b7747c8f2f0f Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Fri, 1 Oct 2010 12:14:05 +0000 Subject: [PATCH] no override time, works on Minix and not needed for the tpkg. git-svn-id: file:///svn/unbound/trunk@2271 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/unbound-anchor.8.in | 4 +-- smallapp/unbound-anchor.c | 53 +++++++------------------------- testdata/10-unbound-anchor.tpkg | Bin 12567 -> 12046 bytes 3 files changed, 12 insertions(+), 45 deletions(-) diff --git a/doc/unbound-anchor.8.in b/doc/unbound-anchor.8.in index 0c87bf7a1..a98cd0f83 100644 --- a/doc/unbound-anchor.8.in +++ b/doc/unbound-anchor.8.in @@ -108,9 +108,7 @@ errors by default; in that case the original root anchor file is simply left undisturbed, so that a recursive server can start right after it. .TP .B \-C \fIunbound.conf -Debug option to read unbound.conf into the resolution process used. For tests. -The validator date override option makes it possible to run a test on a -different date. +Debug option to read unbound.conf into the resolver process used. .TP .B \-P \fIport Set the port number to use for the https connection. The default is 443. diff --git a/smallapp/unbound-anchor.c b/smallapp/unbound-anchor.c index 5c4bb5985..1550e72bb 100644 --- a/smallapp/unbound-anchor.c +++ b/smallapp/unbound-anchor.c @@ -296,32 +296,6 @@ create_unbound_context(char* res_conf, char* root_hints, char* debugconf, return ctx; } -/** - * Get current time. - * @param debugconf: with override time for tests - */ -static time_t -get_time_now(char* debugconf) -{ - if(debugconf) { - FILE* in = fopen(debugconf, "r"); - char line[1024]; - if(!in) { - if(verb) printf("%s: %s\n", debugconf, strerror(errno)); - return (time_t)time(NULL); - } - /* must be ^val-override-date: 1234567$ formatted */ - while(fgets(line, (int)sizeof(line), in)) { - if(strncmp(line, "val-override-date: ", 19) == 0) { - fclose(in); - return (time_t)atoi(line+19); - } - } - fclose(in); - } - return (time_t)time(NULL); -} - /** printout certificate in detail */ static void verb_cert(char* msg, X509* x) @@ -1482,7 +1456,7 @@ xml_parse(BIO* xml, time_t now) /** verify a PKCS7 signature, false on failure */ static int -verify_p7sig(BIO* data, BIO* p7s, STACK_OF(X509)* trust, time_t now) +verify_p7sig(BIO* data, BIO* p7s, STACK_OF(X509)* trust) { X509_VERIFY_PARAM* param = X509_VERIFY_PARAM_new(); PKCS7* p7; @@ -1511,9 +1485,6 @@ verify_p7sig(BIO* data, BIO* p7s, STACK_OF(X509)* trust, time_t now) if(verb >= 2) printf("parsed the PKCS7 signature\n"); /* convert trust to trusted certificate store */ - /* set current time */ - if(verb >= 2) printf("time set to %u %s", (unsigned)now, ctime(&now)); - X509_VERIFY_PARAM_set_time(param, now); /* do the selfcheck on the root certificate; it checks that the * input is valid */ #ifdef X509_V_FLAG_CHECK_SS_SIGNATURE @@ -1598,20 +1569,19 @@ write_root_anchor(char* root_anchor_file, BIO* ds) /** Perform the verification and update of the trustanchor file */ static void -verify_and_update_anchor(char* root_anchor_file, char* debugconf, - BIO* xml, BIO* p7s, STACK_OF(X509)* cert) +verify_and_update_anchor(char* root_anchor_file, BIO* xml, BIO* p7s, + STACK_OF(X509)* cert) { - time_t now = get_time_now(debugconf); BIO* ds; /* verify xml file */ - if(!verify_p7sig(xml, p7s, cert, now)) { + if(!verify_p7sig(xml, p7s, cert)) { printf("the PKCS7 signature failed\n"); exit(0); } /* parse the xml file into DS records */ - ds = xml_parse(xml, now); + ds = xml_parse(xml, time(NULL)); if(!ds) { /* the root zone is unsigned now */ write_unsigned_root(root_anchor_file); @@ -1645,7 +1615,7 @@ do_certupdate(char* root_anchor_file, char* root_cert_file, p7s = https(ip_list, p7sname, urlname); /* verify and update the root anchor */ - verify_and_update_anchor(root_anchor_file, debugconf, xml, p7s, cert); + verify_and_update_anchor(root_anchor_file, xml, p7s, cert); if(verb) printf("success: the anchor has been updated " "using the cert\n"); @@ -1831,18 +1801,17 @@ read_last_success_time(char* file) * and the failure cannot be solved with a certupdate. * The debugconf is to validation-override the date for testing. * @param root_anchor_file: filename of root key - * @param debugconf: debug unbound.conf (with override date) or NULL. * @return true if certupdate is ok. */ static int -probe_date_allows_certupdate(char* root_anchor_file, char* debugconf) +probe_date_allows_certupdate(char* root_anchor_file) { int32_t last_success = read_last_success_time(root_anchor_file); - int32_t now = (int32_t)get_time_now(debugconf); + int32_t now = (int32_t)time(NULL); int32_t leeway = 30 * 24 * 3600; /* 30 days leeway */ /* if the date is before 2010-07-15:00.00.00 then the root has not * been signed yet, and thus we refuse to take action. */ - if(get_time_now(debugconf) < xml_convertdate("2010-07-15T00:00:00")) { + if(time(NULL) < xml_convertdate("2010-07-15T00:00:00")) { if(verb) printf("the date is before the root was first signed," " please correct the clock\n"); return 0; @@ -1894,8 +1863,8 @@ do_root_update_work(char* root_anchor_file, char* root_cert_file, if(force && verb) printf("debug cert update forced\n"); /* if not (and NOERROR): check date and do certupdate */ - if((dnskey->rcode == 0 && probe_date_allows_certupdate(root_anchor_file, - debugconf)) || force) { + if((dnskey->rcode == 0 && + probe_date_allows_certupdate(root_anchor_file)) || force) { if(do_certupdate(root_anchor_file, root_cert_file, urlname, xmlname, p7sname, res_conf, root_hints, debugconf, ip4only, ip6only, port, dnskey)) diff --git a/testdata/10-unbound-anchor.tpkg b/testdata/10-unbound-anchor.tpkg index 0049021329741dcd9fc85263b9ae7130d576cb42..aa768eff3e66814b73e384c184bbc8d72cd7d417 100644 GIT binary patch literal 12046 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 U>i=h{2fP^5RNTQrjX**D4}MAZG5`Po literal 12567 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