misc/50299: Resolver rejects hostnames with underscores
David J Duchscher
daved at nostrum.com
Wed Mar 26 07:00:35 PST 2003
The following reply was made to PR misc/50299; it has been noted by GNATS.
From: David J Duchscher <daved at nostrum.com>
To: freebsd-gnats-submit at FreeBSD.org, marius at marius.org
Cc:
Subject: Re: misc/50299: Resolver rejects hostnames with underscores
Date: Wed, 26 Mar 2003 00:42:05 -0600
Here is a patch that makes this behavior optional via the options
directive in the resolv.conf file.
DaveD
diff -ru ../src.orig/include/resolv.h ./include/resolv.h
--- ../src.orig/include/resolv.h Tue Mar 25 20:41:46 2003
+++ ./include/resolv.h Wed Mar 26 00:18:08 2003
@@ -150,6 +150,7 @@
#define RES_NOALIASES 0x00001000 /* shuts off HOSTALIASES feature */
#define RES_USE_INET6 0x00002000 /* use/map IPv6 in gethostbyname() */
#define RES_NOTLDQUERY 0x00004000 /* Don't query TLD names */
+#define RES_ALLOWUSCORE 0x00008000 /* Alllow underscore in hostname */
/* KAME extensions: use higher bit to avoid conflict with ISC use */
#define RES_USE_EDNS0 0x40000000 /* use EDNS0 */
diff -ru ../src.orig/lib/libc/net/res_comp.c ./lib/libc/net/res_comp.c
--- ../src.orig/lib/libc/net/res_comp.c Tue Mar 25 20:39:27 2003
+++ ./lib/libc/net/res_comp.c Wed Mar 26 00:17:33 2003
@@ -142,6 +142,7 @@
*/
#define PERIOD 0x2e
#define hyphenchar(c) ((c) == 0x2d)
+#define uscorechar(c) ((c) == 0x5f)
#define bslashchar(c) ((c) == 0x5c)
#define periodchar(c) ((c) == PERIOD)
#define asterchar(c) ((c) == 0x2a)
@@ -171,8 +172,13 @@
if (!borderchar(ch))
return (0);
} else {
- if (!middlechar(ch))
- return (0);
+ if (_res.options & RES_ALLOWUSCORE) {
+ if (!middlechar(ch) && !uscorechar(ch))
+ return(0);
+ } else {
+ if (!middlechar(ch))
+ return (0);
+ }
}
ppch = pch, pch = ch, ch = nch;
}
diff -ru ../src.orig/lib/libc/net/res_init.c ./lib/libc/net/res_init.c
--- ../src.orig/lib/libc/net/res_init.c Tue Mar 25 20:39:27 2003
+++ ./lib/libc/net/res_init.c Wed Mar 26 00:17:52 2003
@@ -539,6 +539,8 @@
_res.options |= RES_INSECURE2;
} else if (!strncmp(cp, "no_tld_query", sizeof("no_tld_query") - 1))
{
_res.options |= RES_NOTLDQUERY;
+ } else if (!strncmp(cp, "allow_underscore",
sizeof("allow_underscore") - 1)) {
+ _res.options |= RES_ALLOWUSCORE;
} else if (!strncmp(cp, "edns0", sizeof("edns0") - 1)) {
_res.options |= RES_USE_EDNS0;
} else {
diff -ru ../src.orig/share/man/man5/resolver.5
./share/man/man5/resolver.5
--- ../src.orig/share/man/man5/resolver.5 Tue Mar 25 20:42:08 2003
+++ ./share/man/man5/resolver.5 Wed Mar 26 00:30:51 2003
@@ -125,7 +125,7 @@
.Sy option
is one of the following:
.Pp
-.Bl -tag -width no_tld_query
+.Bl -tag -width allow_underscore
.It Sy debug
sets
.Dv RES_DEBUG
@@ -154,6 +154,11 @@
and
.Sy search
rules with the given name.
+.It Sy allow_underscore
+tells the resolver to allow underscores in hostsnames. Normally the
+resolver will filter out hostnames that do not conform to RFC 952.
+This extends the allowed set of characters in the middle of the
+hostname to include the underscore character.
.El
.Pp
Options may also be specified as a space or tab separated list using
the
More information about the freebsd-bugs
mailing list