]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
AXFR handling and non-recursive handling.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 19 Jun 2007 12:34:54 +0000 (12:34 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 19 Jun 2007 12:34:54 +0000 (12:34 +0000)
git-svn-id: file:///svn/unbound/trunk@396 be551aaa-1e26-0410-a405-d3ace91eadb9

daemon/worker.c
doc/Changelog
iterator/iterator.c

index 90801c61565f37b2533f99df7821462791d2967e..506752bc12bae255e11dd72074c9d904bc7b536f 100644 (file)
@@ -544,6 +544,14 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
                        LDNS_RCODE_FORMERR);
                return 1;
        }
+       if(qinfo.qtype == LDNS_RR_TYPE_AXFR || 
+               qinfo.qtype == LDNS_RR_TYPE_IXFR) {
+               verbose(VERB_ALGO, "worker request: refused zone transfer.");
+               LDNS_QR_SET(ldns_buffer_begin(c->buffer));
+               LDNS_RCODE_SET(ldns_buffer_begin(c->buffer), 
+                       LDNS_RCODE_REFUSED);
+               return 1;
+       }
        h = query_info_hash(&qinfo);
        if((ret=parse_edns_from_pkt(c->buffer, &edns)) != 0) {
                verbose(VERB_ALGO, "worker parse edns: formerror.");
index e5ad7df58c3913fda4deb64bb9685d403ef398c0..86744a85df5c741d45b7f733b9431105826ceaec 100644 (file)
@@ -4,6 +4,8 @@
        - uncapped timeout for server selection, so that very fast or slow
          servers will stand out from the rest.
        - target-fetch-policy: "3 2 1 0 0" config setting.
+       - fixup queries answered without RD bit (for root prime results).
+       - refuse AXFR and IXFR requests.
 
 18 June 2007: Wouter
        - same, move subqueries to slumber list when first has resolved.
index b31e9dcd39aef2c9bc731b06cfea57d47c94386f..6f7e0f305de3ce82c8b31a4a5ed7689dd5e89e63 100644 (file)
@@ -829,6 +829,9 @@ processInitRequest3(struct module_qstate* qstate, struct iter_qstate* iq)
         * cached referral as the response. */
        if(!(qstate->query_flags & BIT_RD)) {
                iq->response = iq->deleg_msg;
+               if(verbosity >= VERB_ALGO)
+                       log_dns_msg("no RD requested, using delegation msg", 
+                               &iq->response->qinfo, iq->response->rep);
                return final_state(iq);
        }
 
@@ -1285,8 +1288,8 @@ processPrimeResponse(struct module_qstate* qstate, struct iter_qstate* iq,
        delegpt_log(dp);
        foriq = (struct iter_qstate*)forq->minfo[id];
        foriq->dp = dp;
-       foriq->response = dns_copy_msg(iq->response, forq->region);
-       if(!foriq->response) {
+       foriq->deleg_msg = dns_copy_msg(iq->response, forq->region);
+       if(!foriq->deleg_msg) {
                log_err("copy prime response: out of memory");
                return error_response(qstate, id, LDNS_RCODE_SERVFAIL);
        }