]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Merge branch 'master' into features/ede-caching-cachedb
authorGeorge Thessalonikefs <george@nlnetlabs.nl>
Sun, 30 Jul 2023 10:28:28 +0000 (12:28 +0200)
committerGeorge Thessalonikefs <george@nlnetlabs.nl>
Sun, 30 Jul 2023 12:17:52 +0000 (14:17 +0200)
1  2 
cachedb/cachedb.c
services/cache/dns.c
testdata/cachedb_cached_ede.crpl

index f10005c3debdffca19a65658f89632b016d2ea93,f40f4e15de0dee0411cbefb398ec2c3732a2b3fd..edaa8976b066f5490489053abb776dec8208edea
@@@ -557,25 -545,6 +553,24 @@@ parse_data(struct module_qstate* qstate
        if(!qstate->return_msg)
                return 0;
        
-                       qstate->return_msg->rep->reason_bogus_str_size = ede_len;
 +      /* We find the EDE in the in-list after parsing */
 +      if(qstate->env->cfg->ede &&
 +              (ede = edns_opt_list_find(edns.opt_list_in, LDNS_EDNS_EDE))) {
 +              if(ede->opt_len >= 2) {
 +                      qstate->return_msg->rep->reason_bogus =
 +                              sldns_read_uint16(ede->opt_data);
 +              }
 +              /* allocate space and store the error string and it's size */
 +              if(ede->opt_len > 2) {
 +                      size_t ede_len = ede->opt_len - 2;
 +                      qstate->return_msg->rep->reason_bogus_str = regional_alloc(
 +                              qstate->region, sizeof(char) * (ede_len+1));
 +                      memcpy(qstate->return_msg->rep->reason_bogus_str,
 +                      ede->opt_data+2, ede_len);
 +                      qstate->return_msg->rep->reason_bogus_str[ede_len] = 0;
 +              }
 +      }
 +
        qstate->return_rcode = LDNS_RCODE_NOERROR;
  
        /* see how much of the TTL expired, and remove it */
index 3e9015c4aa7ce5bf2f5e305ad3c9f8b3a60ce02b,a3d0292312eec38df29fde71a79d29e82aebe186..9b4ad5888721615446ebe24ba71541975e1d3fd5
@@@ -613,8 -592,6 +592,7 @@@ gen_dns_msg(struct regional* region, st
        if(!msg->rep)
                return NULL;
        msg->rep->reason_bogus = LDNS_EDE_NONE;
-       msg->rep->reason_bogus_str_size = 0;
 +      msg->rep->reason_bogus_str = NULL;
        if(num > RR_COUNT_MAX)
                return NULL; /* integer overflow protection */
        msg->rep->rrsets = (struct ub_packed_rrset_key**)
@@@ -669,11 -654,6 +655,10 @@@ tomsg(struct module_env* env, struct qu
        msg->rep->rrset_count = r->rrset_count;
        msg->rep->authoritative = r->authoritative;
        msg->rep->reason_bogus = r->reason_bogus;
-       if (r->reason_bogus_str_size > 0) {
++      if(r->reason_bogus_str) {
 +              msg->rep->reason_bogus_str = regional_strdup(region, r->reason_bogus_str);
-               msg->rep->reason_bogus_str_size = r->reason_bogus_str_size;
 +      }
 +
        if(!rrset_array_lock(r->ref, r->rrset_count, now_control)) {
                return NULL;
        }
index 55d61e74e0cca6436269fad29c227592d1445027,0000000000000000000000000000000000000000..5eade545105f244ade5e0746b01fccfb4237fec5
mode 100644,000000..100644
--- /dev/null
@@@ -1,90 -1,0 +1,91 @@@
-               C0 00           ; option code = 49152
 +; config options
 +server:
 +      target-fetch-policy: "0 0 0 0 0"
 +      qname-minimisation: no
 +      minimal-responses: no
 +      module-config: "cachedb validator iterator"
 +      trust-anchor-signaling: no
++      verbosity: 4
 +      ede: yes
 +      val-log-level: 2
 +        trust-anchor: "example.nl. DS 50602 8 2 FA8EE175C47325F4BD46D8A4083C3EBEB11C977D689069F2B41F1A29B22446B1"
 +      
 +
 +cachedb:
 +      backend: "testframe"
 +      secret-seed: "testvalue"
 +
 +stub-zone:
 +      name: "example.nl"
 +      stub-addr: 193.0.14.129
 +CONFIG_END
 +
 +SCENARIO_BEGIN Test cachedb support for caching EDEs.
 +
 +RANGE_BEGIN 0 10
 +      ADDRESS 193.0.14.129
 +ENTRY_BEGIN
 +MATCH opcode qtype qname
 +ADJUST copy_id
 +REPLY QR AA NOERROR
 +SECTION QUESTION
 +example.nl.   IN      DNSKEY
 +SECTION ANSWER
 +ENTRY_END
 +
 +ENTRY_BEGIN
 +MATCH opcode qtype qname
 +ADJUST copy_id
 +REPLY QR AA NOERROR
 +SECTION QUESTION
 +example.nl.   IN      A
 +SECTION ANSWER
 +example.nl.   IN      A       1.2.3.4
 +ENTRY_END
 +RANGE_END
 +
 +; get the entry in cache.
 +STEP 1 QUERY
 +ENTRY_BEGIN
 +REPLY RD DO
 +SECTION QUESTION
 +example.nl. IN A
 +SECTION ADDITIONAL
 +      HEX_EDNSDATA_BEGIN
-               C0 00           ; option code = 49152
++              FF FE           ; option code = 65534 (LDNS_EDNS_UNBOUND_CACHEDB_TESTFRAME_TEST)
 +              00 00           ; option length
 +      HEX_EDNSDATA_END
 +ENTRY_END
 +
 +; get the answer for it
 +STEP 10 CHECK_ANSWER
 +ENTRY_BEGIN
 +MATCH all ede=9
 +REPLY QR RD RA DO SERVFAIL
 +SECTION QUESTION
 +example.nl. IN A
 +ENTRY_END
 +
 +; query again for the cached entry
 +STEP 20 QUERY
 +ENTRY_BEGIN
 +REPLY RD
 +SECTION QUESTION
 +example.nl. IN A
 +SECTION ADDITIONAL
 +      HEX_EDNSDATA_BEGIN
++              FF FE           ; option code = 65534 (LDNS_EDNS_UNBOUND_CACHEDB_TESTFRAME_TEST)
 +              00 00           ; option length
 +      HEX_EDNSDATA_END
 +ENTRY_END
 +
 +; this must be a cached answer since stub is not answering in this range
 +STEP 30 CHECK_ANSWER
 +ENTRY_BEGIN
 +MATCH all ede=9
 +REPLY QR RD RA DO SERVFAIL
 +SECTION QUESTION
 +example.nl. IN A
 +ENTRY_END
 +
 +SCENARIO_END