diff --git a/src/knot/nameserver/internet.c b/src/knot/nameserver/internet.c index b6a5912733b32b8df6be5226d9023914cd6b83d5..a0379d2bae316c42213fbd36dcffabf487b38407 100644 --- a/src/knot/nameserver/internet.c +++ b/src/knot/nameserver/internet.c @@ -140,6 +140,9 @@ static int put_answer(knot_pkt_t *pkt, uint16_t type, struct query_data *qdata) compr_hint = KNOT_COMPR_HINT_QNAME; } + unsigned put_rr_flags = (qdata->param->proc_flags & NS_QUERY_LIMIT_SIZE) ? + KNOT_PF_NULL : KNOT_PF_NOTRUNC; + int ret = KNOT_EOK; switch (type) { case KNOT_RRTYPE_ANY: /* Append all RRSets. */ { @@ -154,7 +157,7 @@ static int put_answer(knot_pkt_t *pkt, uint16_t type, struct query_data *qdata) for (unsigned i = 0; i < qdata->node->rrset_count; ++i) { rrset = node_rrset_at(qdata->node, i); ret = process_query_put_rr(pkt, qdata, &rrset, NULL, - compr_hint, 0); + compr_hint, put_rr_flags); if (ret != KNOT_EOK) { break; } @@ -166,7 +169,7 @@ static int put_answer(knot_pkt_t *pkt, uint16_t type, struct query_data *qdata) if (!knot_rrset_empty(&rrset)) { knot_rrset_t rrsigs = node_rrset(qdata->node, KNOT_RRTYPE_RRSIG); ret = process_query_put_rr(pkt, qdata, &rrset, &rrsigs, - compr_hint, 0); + compr_hint, put_rr_flags); } break; } @@ -367,7 +370,7 @@ static int name_found(knot_pkt_t *pkt, struct query_data *qdata) uint16_t old_rrcount = pkt->rrset_count; int ret = put_answer(pkt, qtype, qdata); if (ret != KNOT_EOK) { - if (ret == KNOT_ESPACE) { + if (ret == KNOT_ESPACE && (qdata->param->proc_flags & NS_QUERY_LIMIT_SIZE)) { return TRUNC; } else { return ERROR;