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