===README=== This document describes the limitation and restriction as imposed by the current FreeBSD's system library for resolving domain names and suggests two workarounds to overcome it. FreeBSD's system library, libc.so.3 (FreeBSD 3.3), contains a resolver component that is responsible for resovling domain names. The interface to this component is via gethostbyname(3). gethostbyname(3) will return a valid hostent structure when the domain name resolves successfully. It will otherwise return a NULL pointer if no such name exists. There is currently one restriction imposed by the resolver to return a NULL hostent structure for names that are non-compliant to RFC1035, even though there are valid records associated with the name concerned. This can be demonstrated by turning on debugging and call gethostbyname(3) and giving it any valid internationalized domain name. You will notice that the debugging messages printed out by the various sub-components of the resolver library indicates clearly that the DNS server does indeed return a valid A Record. The final result, however is not passed back by gethostbyname(3) because the name queried did not comply with RFC1035. There are currently two methods to overcome this minor problem, as proposed by I-DNS.NET International. The first is to engage Internet Software Consortium's (ISC) software package, Berkeley Internet Name Daemon (BIND) 8.2.2 patch level 5. This particular package provides a separate resolver library (libbind.a) which the end user can use in place of FreeBSD's libc.so.3 (or libc.a). There is an option to bypass the RFC1035 name restriction. The trick is to add the following line to your '/etc/resolv.conf' file :- 'options no-check-names' This solution, however, is not very transparent to the system administrators. The reason is that most applications under FreeBSD 3.x uses dynamic libraries. Essentially, the system administrators will need to recompile all system binaries and link them statically against libbind.a. The other solution proposed is to patch the system library, libc.so.3 itself. I-DNS.NET International currently supplies such a patch. What this method does is that it essentially replaces the entire C system library with a version that has a similar option to the one offered by libbind.a. You may choose to download the entire libc.so.3 and replace your current one with this. Alternatively, you may want to download the source of the patch (in diff format) and patch your source tree. After installing the patched library, add the following line to your '/etc/resolv.conf' file to bypass the additional checks. 'options i18n' This option mimics the capabilities of ISC's Bind 8.2.2pl5's option 'no-check-names'. The option name of 'i18n' is used so as not to confuse system administrators. Note that by omitting this line, your system resolver component behaves exactly just like your normal C system library. ===README===