tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

T_DNAME handling in getaddrinfo() and gethostname()



Hi,

I connect to machines below foo.example.de, which is a convenience domain
otherwise identical to the german-language and much slower to type 
fumfiefoebarbaz.example.de, and foo happens to be the two letter acronym 
for the english translation of fumfiefoebarbaz.

In the new world order, the admins have replaced the include file
mess with a DNAME record, redirecting fumfiefoebarbaz.example.de
to foo.example.de

This works fine, but the programs on my netbsd machines connecting there
spam the console log with syslog messages about getting DNAME answers
when they expected AAAA and A (which are send as additional info by the
recursive resolver daemon).

I investigated in the sources, and found that getaddrinfo() and
gethnamaddr() - the latter being the core of the implementation
for gethostbyname() and gethostbyaddr() - special-case T_CNAME,
T_SIG and T_KEY answers in the result returned, but not T_DNAME.

While a full handling of T_DNAME seems to complicated - we'd need to
splice in the new domain instead of the old in the query - it also
isn't necessary, as the resolver daemon already does all the work - see


;; QUESTION SECTION:
;qq.foo.example.de.           IN      A

;; ANSWER SECTION:
foo.example.de.                1772 IN  DNAME   fumfiefoebarbaz.example.de.
qq.foo.example.de.             1772 IN  CNAME   qq.fumfiefoebarbaz.example.de.
qq.fumfiefoebarbaz.example.de. 3200 IN  A       192.0.2.63


So all that remains to do is to suppress the syslog call also in this 
case. Patch below; I'll commit unless technical serious objections are
raised (Tested on -9.0_ish machine, compiles on -current, no code
differences).

Regards
	-is


Index: include/arpa/nameser_compat.h
===================================================================
RCS file: /cvsroot/src/include/arpa/nameser_compat.h,v
retrieving revision 1.7
diff -u -r1.7 nameser_compat.h
--- include/arpa/nameser_compat.h	28 Jun 2020 02:16:19 -0000	1.7
+++ include/arpa/nameser_compat.h	13 Nov 2020 19:17:44 -0000
@@ -210,6 +210,7 @@
 #define T_ATMA		ns_t_atma
 #define T_NAPTR		ns_t_naptr
 #define T_A6		ns_t_a6
+#define T_DNAME		ns_t_dname
 #define	T_TSIG		ns_t_tsig
 #define	T_IXFR		ns_t_ixfr
 #define T_AXFR		ns_t_axfr
Index: lib/libc/net/getaddrinfo.c
===================================================================
RCS file: /cvsroot/src/lib/libc/net/getaddrinfo.c,v
retrieving revision 1.119
diff -u -r1.119 getaddrinfo.c
--- lib/libc/net/getaddrinfo.c	13 Dec 2018 04:41:41 -0000	1.119
+++ lib/libc/net/getaddrinfo.c	13 Nov 2020 19:17:45 -0000
@@ -1821,7 +1821,7 @@
 				continue;
 			}
 		} else if (type != qtype) {
-			if (type != T_KEY && type != T_SIG) {
+			if (type != T_KEY && type != T_SIG && type != T_DNAME) {
 				struct syslog_data sd = SYSLOG_DATA_INIT;
 				syslog_r(LOG_NOTICE|LOG_AUTH, &sd,
 	       "gethostby*.getanswer: asked for \"%s %s %s\", got type \"%s\"",
Index: lib/libc/net/gethnamaddr.c
===================================================================
RCS file: /cvsroot/src/lib/libc/net/gethnamaddr.c,v
retrieving revision 1.92
diff -u -r1.92 gethnamaddr.c
--- lib/libc/net/gethnamaddr.c	22 Sep 2015 16:16:02 -0000	1.92
+++ lib/libc/net/gethnamaddr.c	13 Nov 2020 19:17:45 -0000
@@ -358,7 +358,7 @@
 			continue;
 		}
 		if (type != qtype) {
-			if (type != T_KEY && type != T_SIG)
+			if (type != T_KEY && type != T_SIG && type != T_DNAME)
 				syslog(LOG_NOTICE|LOG_AUTH,
 	       "gethostby*.getanswer: asked for \"%s %s %s\", got type \"%s\"",
 				       qname, p_class(C_IN), p_type(qtype),


Home | Main Index | Thread Index | Old Index