Implement rfc6840 (AD flag processing) if using trusted name servers
authorjca <jca@openbsd.org>
Mon, 22 Nov 2021 20:18:27 +0000 (20:18 +0000)
committerjca <jca@openbsd.org>
Mon, 22 Nov 2021 20:18:27 +0000 (20:18 +0000)
commit931108e92d6451cf619fc74dec5b7d66c67f834c
tree37536c01b9d9512a5f39dfda2f63942c795b3051
parent57734b1363d416555d01b41bafdc91e084402aae
Implement rfc6840 (AD flag processing) if using trusted name servers

libc can't do DNSSEC validation but it can ask a "security-aware"
resolver to do so.  Let's send queries with the AD flag set when
appropriate, and let applications look at the AD flag in responses in
a safe way, ie clear the AD flag if the resolvers aren't trusted.
By default we only trust resolvers if resolv.conf(5) only lists name
servers on localhost - the obvious candidates being unwind(8) and
unbound(8).  For non-localhost resolvers, an admin who trusts *all the
name servers* listed in resolv.conf(5) *and the network path leading to
them* can annotate this with "options trust-ad".

AD flag processing gives ssh -o VerifyHostkeyDNS=Yes a chance to fetch
SSHFP records in a secure manner, and tightens the situation for other
applications, eg those using RES_USE_DNSSEC for DANE.  It should be
noted that postfix currently assumes trusted name servers by default and
forces RES_TRUSTAD if available.

RES_TRUSTAD and "options trust-ad" were first introduced in glibc by
Florian Weimer.  Florian Obser (florian@) contributed various
improvements, fixed a bug and added automatic trust for name servers on
localhost.

ok florian@ phessler@
include/resolv.h
lib/libc/asr/asr.c
lib/libc/asr/asr_debug.c
lib/libc/asr/res_mkquery.c
lib/libc/asr/res_send_async.c
lib/libc/net/res_init.3
share/man/man5/resolv.conf.5