Discussion:
T_DNAME handling in getaddrinfo() and gethostname()
(too old to reply)
Ignatios Souvatzis
2020-11-13 20:04:14 UTC
Permalink
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),

--
Posted automagically by a mail2news gateway at muc.de e.V.
Please direct questions, flames, donations, etc. to news-***@muc.de
Ignatios Souvatzis
2020-11-16 08:51:01 UTC
Permalink
Hi,
Post by Ignatios Souvatzis
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
foo.example.de to fumfiefoebarbaz.example.de
Post by Ignatios Souvatzis
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
;qq.foo.example.de. IN A
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),
--
Posted automagically by a mail2news gateway at muc.de e.V.
Please direct questions, flames, donations, etc. to news-***@muc.de
Loading...