From: Ivana Krumlová Date: Thu, 11 Jul 2019 12:47:42 +0000 (+0200) Subject: WIP: sets PADDING_REQUIRED flag for every request X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d12d15b5f7aa7edcda187c9b4366302b9692f795;p=thirdparty%2Fknot-resolver.git WIP: sets PADDING_REQUIRED flag for every request --- diff --git a/daemon/lua/kres-gen.lua b/daemon/lua/kres-gen.lua index 9ad6d1add..5e121f92b 100644 --- a/daemon/lua/kres-gen.lua +++ b/daemon/lua/kres-gen.lua @@ -120,7 +120,7 @@ struct kr_qflags { _Bool DNS64_MARK : 1; _Bool CACHE_TRIED : 1; _Bool NO_NS_FOUND : 1; - _Bool FORCE_PADDING : 1; + _Bool PADDING_REQUIRED : 1; }; typedef struct { knot_rrset_t **at; diff --git a/lib/resolve.c b/lib/resolve.c index 391e8fb4c..3dbb2d2de 100644 --- a/lib/resolve.c +++ b/lib/resolve.c @@ -417,11 +417,6 @@ static int edns_erase_and_reserve(knot_pkt_t *pkt) return knot_pkt_reserve(pkt, len); } -static inline bool want_padding(const struct kr_request *req) -{ - return req->qsource.flags.tls || req->options.FORCE_PADDING; -} - static int edns_create(knot_pkt_t *pkt, knot_pkt_t *template, struct kr_request *req) { pkt->opt_rr = knot_rrset_copy(req->ctx->opt_rr, &pkt->mm); @@ -432,7 +427,7 @@ static int edns_create(knot_pkt_t *pkt, knot_pkt_t *template, struct kr_request wire_size += KR_COOKIE_OPT_MAX_LEN; } #endif /* defined(ENABLE_COOKIES) */ - if (want_padding(req)) { + if (req->options.PADDING_REQUIRED) { if (req->ctx->tls_padding == -1) /* FIXME: we do not know how to reserve space for the * default padding policy, since we can't predict what @@ -531,7 +526,7 @@ static int answer_padding_maybe(struct kr_request *request) assert(false); return kr_error(EINVAL); } - if (!want_padding(request)) return kr_ok(); + if (!request->options.PADDING_REQUIRED) return kr_ok(); int32_t padding = request->ctx->tls_padding; knot_pkt_t *answer = request->answer; @@ -717,6 +712,7 @@ int kr_resolve_begin(struct kr_request *request, struct kr_context *ctx, knot_pk request->ctx = ctx; request->answer = answer; request->options = ctx->options; + request->options.PADDING_REQUIRED = true; //WIP: this sets the flag for every request request->state = KR_STATE_CONSUME; request->current_query = NULL; array_init(request->additional); diff --git a/lib/rplan.h b/lib/rplan.h index e98ee3e8c..f013d76e0 100644 --- a/lib/rplan.h +++ b/lib/rplan.h @@ -64,7 +64,7 @@ struct kr_qflags { bool DNS64_MARK : 1; /**< Internal mark for dns64 module. */ bool CACHE_TRIED : 1; /**< Internal to cache module. */ bool NO_NS_FOUND : 1; /**< No valid NS found during last PRODUCE stage. */ - bool FORCE_PADDING : 1; /**< Force use of EDNS(0) padding even if TLS isn't used. */ + bool PADDING_REQUIRED : 1; /**< Force use of EDNS(0) padding even if TLS isn't used. */ }; /** Combine flags together. This means set union for simple flags. */