]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
lib/resolve: special processing for cname'ed DS answers in forward mode (*.vutbr...
authorGrigorii Demidov <grigorii.demidov@nic.cz>
Tue, 13 Jun 2017 09:42:08 +0000 (11:42 +0200)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Mon, 19 Jun 2017 14:19:16 +0000 (16:19 +0200)
lib/resolve.c
lib/utils.c
lib/utils.h

index 014f1ceadd17c30392cde2796c4e78ab6512062e..6902cbeb91e2c0eeac86b2e3cad2181fd9bd11d6 100644 (file)
@@ -1288,9 +1288,14 @@ int kr_resolve_produce(struct kr_request *request, struct sockaddr **dst, int *t
        struct kr_query *qry = array_tail(rplan->pending);
        if (qry->deferred != NULL) {
                /* @todo: Refactoring validator, check trust chain before resuming. */
-               int state = (qry->flags & QUERY_FORWARD) ?
-                           forward_trust_chain_check(request, qry, true) :
-                           trust_chain_check(request, qry);
+               int state = 0;
+               if (((qry->flags & QUERY_FORWARD) == 0) ||
+                   ((qry->stype == KNOT_RRTYPE_DS) && (qry->flags & QUERY_CNAME))) {
+                       state = trust_chain_check(request, qry);
+               } else {
+                       state = forward_trust_chain_check(request, qry, true);
+               }
+
                switch(state) {
                case KR_STATE_FAIL: return KR_STATE_FAIL;
                case KR_STATE_DONE: return KR_STATE_PRODUCE;
index 854ec396af68dbd4946c903c5637472cde7e9e08..71f1c848849ab34b7d24719f95c1459c453b7ec0 100644 (file)
@@ -759,13 +759,22 @@ void kr_dname_print(const knot_dname_t *name, const char *prefix, const char *po
 {
        char str[KNOT_DNAME_MAXLEN] = {0};
        knot_dname_to_str(str, name, KNOT_DNAME_MAXLEN);
-       kr_log_verbose ("%s%s%s", prefix, str, postfix);
+       kr_log_verbose("%s%s%s", prefix, str, postfix);
 }
 
 void kr_rrtype_print(const uint16_t rrtype, const char *prefix, const char *postfix)
 {
        char str[32] = {0};
        knot_rrtype_to_string(rrtype, str, 32);
-       kr_log_verbose ("%s%s%s", prefix, str, postfix);
+       kr_log_verbose("%s%s%s", prefix, str, postfix);
+}
+
+void kr_qry_print(const struct kr_query *qry, const char *prefix, const char *postfix)
+{
+       char str[6] = {0};
+       knot_rrclass_to_string(qry->sclass, str, sizeof(str));
+       kr_dname_print(qry->sname, prefix, " ");
+       kr_log_verbose("%s",str);
+       kr_rrtype_print(qry->stype, " ", postfix);
 }
 
index 156e8982b9efe703400285f4fc2a01a6e219949d..25ab00e27ffb43c6e383639aa83d97fc938fa4f6 100644 (file)
@@ -30,6 +30,8 @@
 #include "lib/generic/array.h"
 #include "lib/defines.h"
 
+struct kr_query;
+
 /*
  * Logging and debugging.
  */
@@ -255,6 +257,7 @@ int kr_ranked_rrarray_set_wire(ranked_rr_array_t *array, bool to_wire,
                               uint32_t qry_uid, bool check_dups);
 
 void kr_rrset_print(const knot_rrset_t *rr, const char *prefix);
+void kr_qry_print(const struct kr_query *qry, const char *prefix, const char *postfix);
 void kr_pkt_print(knot_pkt_t *pkt);
 void kr_dname_print(const knot_dname_t *name, const char *prefix, const char *postfix);
 void kr_rrtype_print(const uint16_t rrtype, const char *prefix, const char *postfix);