How can I have uppercase letters in my domains (similar to Berkeley.EDU)
I'm using NSD3, and I'm unsuccessful in trying to have capital letters in my domain names.
How is it possible to have uppercase letters in your DNS?
In various OSS documentation, it's very common to see Berkeley.EDU capitalised, and indeed their DNS is still capitalised to this day:
% traceroute www.berkeley.edu
…
15 t1-3.inr-201-sut.Berkeley.EDU (128.32.0.65) 168.794 ms 169.906 ms 168.714 ms
16 t5-5.inr-210-srb.Berkeley.EDU (128.32.255.37) 168.850 ms 168.912 ms t5-4.inr-210-srb.Berkeley.EDU (128.32.255.125) 168.886 ms
And in forward DNS, they, too, have various domains capitalised:
% dig @ns.cs.berkeley.edu. cs.berkeley.edu.
…
;; AUTHORITY SECTION:
cs.berkeley.edu. 86400 IN NS cgl.UCSF.edu.
cs.berkeley.edu. 86400 IN NS adns1.berkeley.edu.
cs.berkeley.edu. 86400 IN NS ns.cs.berkeley.edu.
cs.berkeley.edu. 86400 IN NS vangogh.cs.berkeley.edu.
cs.berkeley.edu. 86400 IN NS adns2.berkeley.edu.
cs.berkeley.edu. 86400 IN NS ns.EECS.berkeley.edu.
…
As noted in (an obscure place in) NSD's documentation,
NSD normalizes names to lower case.
If you want your names to show up with mixed-case, preserving whatever you put in the zone file, you will need to use a different nameserver, such as BIND. It is, after all, the Berkeley Internet Name Daemon...
While it may be possible to hack the NSD source code to make it preserve case, you should be wary of doing this, as it may not be possible to predict what bugs or unintended consequences such a change might introduce, and your nameserver is one of the last places you want mysterious bugs showing up.
It would appear that your DNS3 server is mangling (normalising) the records for which is it authoritative. Have a look at the source code http://www.nlnetlabs.nl/svn/nsd/trunk/dname.c in particular dname_make and DNAME_NORMALIZE which is just tolower. From http://www.nlnetlabs.nl/svn/nsd/trunk/dname.h
#if defined(NAMEDB_UPPERCASE) || defined(USE_NAMEDB_UPPERCASE)
#define DNAME_NORMALIZE toupper
#else
#define DNAME_NORMALIZE tolower
#endif
It should be fairly easy to pull the SVN repository make a change to dname.h recompile and then get what you want. Of course in doing this your on your own for support.
As Michael Hampton points out this function
const dname_type *
dname_make_from_packet(region_type *region, buffer_type *packet,
int allow_pointers, int normalize)
{
uint8_t buf[MAXDOMAINLEN + 1];
if(!dname_make_wire_from_packet(buf, packet, allow_pointers))
return 0;
return dname_make(region, buf, normalize);
}
is called with a hard coded parameter or normalize
so you'd need to track it down and fix that too.
They just set that up in their reverse zone. When you traceroute.. it hits the IP then your resolver is asking what the reverse is for the ip.. it would be something like
$ORIGIN 0.32.128.in-addr.arpa.
65 IN PTR t1-3.inr-201-sut.Berkeley.EDU.