diff --git a/src/knot/events/handlers/refresh.c b/src/knot/events/handlers/refresh.c index ae5fc9183d480ec3f955377c86765bd1c8579bda..3ec0c64c07541540bb058ae4490714cf7e54ba53 100644 --- a/src/knot/events/handlers/refresh.c +++ b/src/knot/events/handlers/refresh.c @@ -575,9 +575,22 @@ static bool ixfr_check_header(const knot_pktsection_t *answer) static bool ixfr_is_axfr(const knot_pktsection_t *answer) { - return answer->count >= 2 && - knot_pkt_rr(answer, 0)->type == KNOT_RRTYPE_SOA && - knot_pkt_rr(answer, 1)->type != KNOT_RRTYPE_SOA; + if (answer->count < 2) { + return false; + } + + const knot_rrset_t *rr_one = knot_pkt_rr(answer, 0); + const knot_rrset_t *rr_two = knot_pkt_rr(answer, 1); + + return ( + rr_one->type == KNOT_RRTYPE_SOA && + rr_two->type != KNOT_RRTYPE_SOA + ) || ( + answer->count == 2 && + rr_one->type == KNOT_RRTYPE_SOA && + rr_two->type == KNOT_RRTYPE_SOA && + knot_rrset_equal(rr_one, rr_two, KNOT_RRSET_COMPARE_WHOLE) + ); } static int ixfr_consume(knot_pkt_t *pkt, struct refresh_data *data)