From: Lennart Poettering Date: Thu, 19 Jun 2025 15:50:40 +0000 (+0200) Subject: resolved: honour RefuseRecordTypes= also in proxy mode X-Git-Tag: v258-rc1~285^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=576a2bc79b679efa4211cc44fa861a2629619577;p=thirdparty%2Fsystemd.git resolved: honour RefuseRecordTypes= also in proxy mode Fixes: #36491 --- diff --git a/src/resolve/resolved-dns-query.c b/src/resolve/resolved-dns-query.c index 6db973d8384..dee771bb447 100644 --- a/src/resolve/resolved-dns-query.c +++ b/src/resolve/resolved-dns-query.c @@ -632,6 +632,13 @@ int dns_query_new( if (question_utf8 || question_idna) return -EINVAL; + assert(dns_question_size(question_bypass->question) == 1); + + /* In bypass mode we'll never mangle the question, but only deny or allow. (In bypass mode + * there's only going to be one entry in the query, hence there's no point in mangling + * questions, i.e. leaving some entries in and removing others.) */ + if (test_refuse_record_types(m->refuse_record_types, question_bypass->question) != REFUSE_GOOD) + return -ENOANO; } else { bool good = false; diff --git a/test/units/TEST-75-RESOLVED.sh b/test/units/TEST-75-RESOLVED.sh index 823e404e283..c4ed53ec6ca 100755 --- a/test/units/TEST-75-RESOLVED.sh +++ b/test/units/TEST-75-RESOLVED.sh @@ -1143,15 +1143,27 @@ testcase_14_refuse_record_types() { run dig localhost -t AAAA grep -qF "status: REFUSED" "$RUN_OUT" + run dig localhost @127.0.0.54 -t AAAA + grep -qF "status: REFUSED" "$RUN_OUT" + run dig localhost -t SRV grep -qF "status: REFUSED" "$RUN_OUT" + run dig localhost @127.0.0.54 -t SRV + grep -qF "status: REFUSED" "$RUN_OUT" + run dig localhost -t TXT grep -qF "status: REFUSED" "$RUN_OUT" + run dig localhost @127.0.0.54 -t TXT + grep -qF "status: REFUSED" "$RUN_OUT" + run dig localhost -t A grep -qF "status: NOERROR" "$RUN_OUT" + run dig localhost @127.0.0.54 -t A + grep -qF "status: NOERROR" "$RUN_OUT" + run resolvectl query localhost5 grep -qF "127.128.0.5" "$RUN_OUT" @@ -1180,12 +1192,21 @@ testcase_14_refuse_record_types() { run dig localhost -t SRV grep -qF "status: NOERROR" "$RUN_OUT" + run dig localhost @127.0.0.54 -t SRV + grep -qF "status: NOERROR" "$RUN_OUT" + run dig localhost -t TXT grep -qF "status: NOERROR" "$RUN_OUT" + run dig localhost @127.0.0.54 -t TXT + grep -qF "status: NOERROR" "$RUN_OUT" + run dig localhost -t AAAA grep -qF "status: REFUSED" "$RUN_OUT" + run dig localhost @127.0.0.54 -t AAAA + grep -qF "status: REFUSED" "$RUN_OUT" + (! run resolvectl query localhost5 --type=SRV) grep -qF "does not have any RR of the requested type" "$RUN_OUT"