]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
zonemd, fix anchor unlock.
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Thu, 15 Oct 2020 07:17:57 +0000 (09:17 +0200)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Thu, 15 Oct 2020 07:17:57 +0000 (09:17 +0200)
zonemd, unit test for dnssec verify function test harness.

services/authzone.c
testcode/unitmain.c

index 6bbb88a2089d0bb8a579894fa2ece70981da3000..7c75441d5a33d57944954317e27b9ac365825803 100644 (file)
@@ -8013,10 +8013,12 @@ void auth_zone_verify_zonemd(struct auth_zone* z, struct module_env* env)
                /* equal to trustanchor, no need for online lookups */
                dnskey = zonemd_get_dnskey_from_anchor(z, env, anchor,
                        &is_insecure, &reason, &keystorage);
+               lock_basic_unlock(&anchor->lock);
                if(!dnskey && !reason) {
                        reason = "dnskey verify with anchor failed";
                }
        } else if(anchor) {
+               lock_basic_unlock(&anchor->lock);
                /* perform online lookups */
                /* setup online lookups, and wait for them */
                if(zonemd_lookup_dnskey(z, env)) {
index 84d850e5f84708a42592c8b9d8dff9af16a98214..b5aa8fe4292550947a013889673bd8f50d37c862 100644 (file)
@@ -844,6 +844,7 @@ static void respip_test(void)
 #include "services/authzone.h"
 #include "util/data/dname.h"
 #include "util/regional.h"
+#include "validator/val_anchor.h"
 /** Add zone from file for testing */
 struct auth_zone* authtest_addzone(struct auth_zones* az, const char* name,
        char* fname);
@@ -920,6 +921,7 @@ static void zonemd_generate_test(const char* zname, char* zfile,
 /** loop over files and test generated zonemd digest */
 static void zonemd_generate_tests(void)
 {
+       unit_show_func("services/authzone.c", "auth_zone_generate_zonemd_hash");
        zonemd_generate_test("example.org", "testdata/zonemd.example1.zone",
                1, 2, "20564D10F50A0CEBEC856C64032B7DFB53D3C449A421A5BC7A21F7627B4ACEA4DF29F2C6FE82ED9C23ADF6F4D420D5DD63EF6E6349D60FDAB910B65DF8D481B7");
 
@@ -974,6 +976,7 @@ static void zonemd_check_test(void)
 
        if(!zonemd_hashalgo_supported(hashalgo))
                return; /* cannot test unsupported algo */
+       unit_show_func("services/authzone.c", "auth_zone_generate_zonemd_check");
 
        /* setup environment */
        az = auth_zones_create();
@@ -1021,12 +1024,75 @@ static void zonemd_check_test(void)
        sldns_buffer_free(buf);
 }
 
+/** zonemd test verify */
+static void zonemd_verify_test(void)
+{
+       struct module_stack mods;
+       struct module_env env;
+       char* tastr = "example.org. IN DS 55566 8 2 9c148338951ce1c3b5cd3da532f3d90dfcf92595148022f2c2fd98e5deee90af";
+       char* zname = "example.org";
+       char* zfile = "testdata/zonemd.example1.zone";
+       char* date_override = "20180302005009";
+       struct auth_zone* z;
+       unit_show_func("services/authzone.c", "auth_zone_verify_zonemd");
+
+       /* setup test harness */
+       memset(&mods, 0, sizeof(mods));
+       memset(&env, 0, sizeof(env));
+       env.scratch = regional_create();
+       if(!env.scratch)
+               fatal_exit("out of memory");
+       env.scratch_buffer = sldns_buffer_new(65553);
+       if(!env.scratch_buffer)
+               fatal_exit("out of memory");
+       env.cfg = config_create();
+       if(!env.cfg)
+               fatal_exit("out of memory");
+       env.cfg->val_date_override = cfg_convert_timeval(date_override);
+       if(!env.cfg->val_date_override)
+               fatal_exit("could not parse datetime %s", date_override);
+       env.anchors = anchors_create();
+       if(!env.anchors)
+               fatal_exit("out of memory");
+       env.auth_zones = auth_zones_create();
+       if(!env.auth_zones)
+               fatal_exit("out of memory");
+       modstack_init(&mods);
+       if(!modstack_config(&mods, "validator iterator"))
+               fatal_exit("could not init modules");
+       env.mesh = mesh_create(&mods, &env);
+       if(!env.mesh)
+               fatal_exit("out of memory");
+
+       /* load data */
+       if(!anchor_store_str(env.anchors, env.scratch_buffer, tastr))
+               fatal_exit("could not store anchor: %s", tastr);
+       z = authtest_addzone(env.auth_zones, zname, zfile);
+       if(!z)
+               fatal_exit("could not addzone %s %s", zname, zfile);
+
+       /* test */
+       lock_rw_wrlock(&z->lock);
+       auth_zone_verify_zonemd(z, &env);
+       lock_rw_unlock(&z->lock);
+
+       /* desetup test harness */
+       mesh_delete(env.mesh);
+       modstack_desetup(&mods, &env);
+       auth_zones_delete(env.auth_zones);
+       anchors_delete(env.anchors);
+       config_delete(env.cfg);
+       regional_destroy(env.scratch);
+       sldns_buffer_free(env.scratch_buffer);
+}
+
 /** zonemd unit tests */
 static void zonemd_test(void)
 {
        unit_show_feature("zonemd");
        zonemd_generate_tests();
        zonemd_check_test();
+       zonemd_verify_test();
 }
 
 void unit_show_func(const char* file, const char* func)