diff --git a/contrib/idn/idnkit-1.0-src/patch/bind9/bind-9.2.9-patch b/contrib/idn/idnkit-1.0-src/patch/bind9/bind-9.2.9-patch new file mode 100644 index 0000000000..ea9147c6b5 --- /dev/null +++ b/contrib/idn/idnkit-1.0-src/patch/bind9/bind-9.2.9-patch @@ -0,0 +1,1255 @@ +IDN patch for bind-9.2.7 +======================== + + +This is a patch file for ISC BIND 9.2.7 to make it work with +internationalized domain names. With this patch you'll get IDN-aware +dig/host/nslookup. + +To apply this patch, you should go to the top directory of the BIND +distribution (where you see `README' file), then invoke `patch' +command like this: + + % patch -p0 < this-file + +Then follow the instructions described in `README.idnkit' to compile +and install. + + +Index: README.idnkit +--- /dev/null Tue Nov 28 14:07:04 2006 ++++ README.idnkit Tue Nov 28 12:59:38 2006 +@@ -0,0 +1,113 @@ ++ ++ BIND-9 IDN patch ++ ++ Japan Network Information Center (JPNIC) ++ ++ ++* What is this patch for? ++ ++This patch adds internationalized domain name (IDN) support to BIND-9. ++You'll get internationalized version of dig/host/nslookup commands. ++ ++ + internationalized dig/host/nslookup ++ dig/host/nslookup accepts non-ASCII domain names in the local ++ codeset (such as Shift JIS, Big5 or ISO8859-1) determined by ++ the locale information. The domain names are normalized and ++ converted to the encoding on the DNS protocol, and sent to DNS ++ servers. The replies are converted back to the local codeset ++ and displayed. ++ ++ ++* Compilation & installation ++ ++0. Prerequisite ++ ++You have to build and install idnkit before building this patched version ++of bind-9. ++ ++1. Running configure script ++ ++Run `configure' in the top directory. See `README' for the ++configuration options. ++ ++This patch adds the following 4 options to `configure'. You should ++at least specify `--with-idn' option to enable IDN support. ++ ++ --with-idn[=IDN_PREFIX] ++ To enable IDN support, you have to specify `--with-idn' option. ++ The argument IDN_PREFIX is the install prefix of idnkit. If ++ IDN_PREFIX is omitted, PREFIX (derived from `--prefix=PREFIX') ++ is assumed. ++ ++ --with-libiconv[=LIBICONV_PREFIX] ++ Specify this option if idnkit you have installed links GNU ++ libiconv. The argument LIBICONV_PREFIX is install prefix of ++ GNU libiconv. If the argument is omitted, PREFIX (derived ++ from `--prefix=PREFIX') is assumed. ++ ++ `--with-libiconv' is shorthand option for GNU libiconv. ++ ++ --with-libiconv=/usr/local ++ ++ This is equivalent to: ++ ++ --with-iconv='-L/usr/local/lib -R/usr/local/lib -liconv' ++ ++ `--with-libiconv' assumes that your C compiler has `-R' ++ option, and that the option adds the specified run-time path ++ to an exacutable binary. If `-R' option of your compiler has ++ different meaning, or your compiler lacks the option, you ++ should use `--with-iconv' option instead. Binary command ++ without run-time path information might be unexecutable. ++ In that case, you would see an error message like: ++ ++ error in loading shared libraries: libiconv.so.2: cannot ++ open shared object file ++ ++ If both `--with-libiconv' and `--with-iconv' options are ++ specified, `--with-iconv' is prior to `--with-libiconv'. ++ ++ --with-iconv=ICONV_LIBSPEC ++ If your libc doens't provide iconv(), you need to specify the ++ library containing iconv() with this option. `ICONV_LIBSPEC' ++ is the argument(s) to `cc' or `ld' to link the library, for ++ example, `--with-iconv="-L/usr/local/lib -liconv"'. ++ You don't need to specify the header file directory for "iconv.h" ++ to the compiler, as it isn't included directly by bind-9 with ++ this patch. ++ ++ --with-idnlib=IDN_LIBSPEC ++ With this option, you can explicitly specify the argument(s) ++ to `cc' or `ld' to link the idnkit's library, `libidnkit'. If ++ this option is not specified, `-L${PREFIX}/lib -lidnkit' is ++ assumed, where ${PREFIX} is the installation prefix specified ++ with `--with-idn' option above. You may need to use this ++ option to specify extra argments, for example, ++ `--with-idnlib="-L/usr/local/lib -R/usr/local/lib -lidnkit"'. ++ ++Please consult `README' for other configuration options. ++ ++Note that if you want to specify some extra header file directories, ++you should use the environment variable STD_CINCLUDES instead of ++CFLAGS, as described in README. ++ ++2. Compilation and installation ++ ++After running "configure", just do ++ ++ make ++ make install ++ ++for compiling and installing. ++ ++ ++* Contact information ++ ++Please see http//www.nic.ad.jp/en/idn/ for the latest news ++about idnkit and this patch. ++ ++Bug reports and comments on this kit should be sent to ++mdnkit-bugs@nic.ad.jp and idn-cmt@nic.ad.jp, respectively. ++ ++ ++; $Id: bind-9.2.9-patch,v 1.1.2.1 2007/01/15 22:25:56 marka Exp $ +Index: configure +=================================================================== +RCS file: /proj/cvs/prod/bind9/configure,v +retrieving revision 1.284.2.70 +diff -U2 -r1.284.2.70 configure +--- configure 10 Nov 2006 18:31:10 -0000 1.284.2.70 ++++ configure 28 Nov 2006 03:09:28 -0000 +@@ -466,5 +466,5 @@ + #endif" + +-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS subdirs build build_cpu build_vendor build_os host host_cpu host_vendor host_os SET_MAKE RANLIB ac_ct_RANLIB INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA STD_CINCLUDES STD_CDEFINES STD_CWARNINGS CCOPT AR ARFLAGS LN ETAGS PERL CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP ISC_SOCKADDR_LEN_T ISC_PLATFORM_HAVELONGLONG ISC_PLATFORM_NEEDSYSSELECTH LWRES_PLATFORM_NEEDSYSSELECTH DST_OPENSSL_INC DNS_OPENSSL_LIBS USE_OPENSSL USE_GSSAPI DST_GSSAPI_INC DNS_GSSAPI_LIBS ALWAYS_DEFINES ISC_PLATFORM_USETHREADS ISC_THREAD_DIR MKDEPCC MKDEPCFLAGS MKDEPPROG IRIX_DNSSEC_WARNINGS_HACK purify_path PURIFY LN_S ECHO ac_ct_AR STRIP ac_ct_STRIP CXX CXXFLAGS ac_ct_CXX CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL O A SA LIBTOOL_MKDEP_SED LIBTOOL_MODE_COMPILE LIBTOOL_MODE_INSTALL LIBTOOL_MODE_LINK LIBTOOL_ALLOW_UNDEFINED LIBTOOL_IN_MAIN LIBBIND ISC_PLATFORM_HAVEIPV6 LWRES_PLATFORM_HAVEIPV6 ISC_PLATFORM_NEEDNETINETIN6H LWRES_PLATFORM_NEEDNETINETIN6H ISC_PLATFORM_NEEDNETINET6IN6H LWRES_PLATFORM_NEEDNETINET6IN6H ISC_PLATFORM_HAVEINADDR6 LWRES_PLATFORM_HAVEINADDR6 ISC_PLATFORM_NEEDIN6ADDRANY LWRES_PLATFORM_NEEDIN6ADDRANY ISC_PLATFORM_NEEDIN6ADDRLOOPBACK LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK ISC_PLATFORM_HAVEIN6PKTINFO ISC_PLATFORM_FIXIN6ISADDR ISC_IPV6_H ISC_IPV6_O ISC_ISCIPV6_O ISC_IPV6_C LWRES_HAVE_SIN6_SCOPE_ID BUILD_CC BUILD_CFLAGS BUILD_CPPFLAGS BUILD_LDFLAGS BUILD_LIBS ISC_PLATFORM_NEEDNTOP ISC_PLATFORM_NEEDPTON ISC_PLATFORM_NEEDATON ISC_PLATFORM_HAVESALEN LWRES_PLATFORM_HAVESALEN ISC_PLATFORM_MSGHDRFLAVOR ISC_PLATFORM_NEEDPORTT ISC_LWRES_NEEDADDRINFO ISC_LWRES_NEEDRRSETINFO ISC_LWRES_SETHOSTENTINT ISC_LWRES_ENDHOSTENTINT ISC_LWRES_GETNETBYADDRINADDR ISC_LWRES_SETNETENTINT ISC_LWRES_ENDNETENTINT ISC_LWRES_GETHOSTBYADDRVOID ISC_LWRES_NEEDHERRNO ISC_LWRES_GETIPNODEPROTO ISC_LWRES_GETADDRINFOPROTO ISC_LWRES_GETNAMEINFOPROTO ISC_PLATFORM_NEEDSTRSEP ISC_PLATFORM_NEEDVSNPRINTF LWRES_PLATFORM_NEEDVSNPRINTF ISC_EXTRA_OBJS ISC_EXTRA_SRCS ISC_PLATFORM_QUADFORMAT LWRES_PLATFORM_QUADFORMAT ISC_PLATFORM_RLIMITTYPE ISC_PLATFORM_USEDECLSPEC LWRES_PLATFORM_USEDECLSPEC ISC_PLATFORM_BRACEPTHREADONCEINIT LATEX PDFLATEX XSLTPROC XMLLINT XSLT_DOCBOOK_STYLE_HTML XSLT_DOCBOOK_STYLE_XHTML XSLT_DOCBOOK_STYLE_MAN XSLT_DOCBOOK_CHUNK_HTML XSLT_DOCBOOK_CHUNK_XHTML XSLT_DB2LATEX_STYLE XSLT_DB2LATEX_ADMONITIONS BIND9_TOP_BUILDDIR BIND9_ISC_BUILDINCLUDE BIND9_ISCCC_BUILDINCLUDE BIND9_ISCCFG_BUILDINCLUDE BIND9_DNS_BUILDINCLUDE BIND9_LWRES_BUILDINCLUDE BIND9_VERSION LIBOBJS LTLIBOBJS' ++ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS subdirs build build_cpu build_vendor build_os host host_cpu host_vendor host_os SET_MAKE RANLIB ac_ct_RANLIB INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA STD_CINCLUDES STD_CDEFINES STD_CWARNINGS CCOPT AR ARFLAGS LN ETAGS PERL CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP ISC_SOCKADDR_LEN_T ISC_PLATFORM_HAVELONGLONG ISC_PLATFORM_NEEDSYSSELECTH LWRES_PLATFORM_NEEDSYSSELECTH DST_OPENSSL_INC DNS_OPENSSL_LIBS USE_OPENSSL USE_GSSAPI DST_GSSAPI_INC DNS_GSSAPI_LIBS ALWAYS_DEFINES ISC_PLATFORM_USETHREADS ISC_THREAD_DIR MKDEPCC MKDEPCFLAGS MKDEPPROG IRIX_DNSSEC_WARNINGS_HACK purify_path PURIFY LN_S ECHO ac_ct_AR STRIP ac_ct_STRIP CXX CXXFLAGS ac_ct_CXX CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL O A SA LIBTOOL_MKDEP_SED LIBTOOL_MODE_COMPILE LIBTOOL_MODE_INSTALL LIBTOOL_MODE_LINK LIBTOOL_ALLOW_UNDEFINED LIBTOOL_IN_MAIN LIBBIND ISC_PLATFORM_HAVEIPV6 LWRES_PLATFORM_HAVEIPV6 ISC_PLATFORM_NEEDNETINETIN6H LWRES_PLATFORM_NEEDNETINETIN6H ISC_PLATFORM_NEEDNETINET6IN6H LWRES_PLATFORM_NEEDNETINET6IN6H ISC_PLATFORM_HAVEINADDR6 LWRES_PLATFORM_HAVEINADDR6 ISC_PLATFORM_NEEDIN6ADDRANY LWRES_PLATFORM_NEEDIN6ADDRANY ISC_PLATFORM_NEEDIN6ADDRLOOPBACK LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK ISC_PLATFORM_HAVEIN6PKTINFO ISC_PLATFORM_FIXIN6ISADDR ISC_IPV6_H ISC_IPV6_O ISC_ISCIPV6_O ISC_IPV6_C LWRES_HAVE_SIN6_SCOPE_ID BUILD_CC BUILD_CFLAGS BUILD_CPPFLAGS BUILD_LDFLAGS BUILD_LIBS ISC_PLATFORM_NEEDNTOP ISC_PLATFORM_NEEDPTON ISC_PLATFORM_NEEDATON ISC_PLATFORM_HAVESALEN LWRES_PLATFORM_HAVESALEN ISC_PLATFORM_MSGHDRFLAVOR ISC_PLATFORM_NEEDPORTT ISC_LWRES_NEEDADDRINFO ISC_LWRES_NEEDRRSETINFO ISC_LWRES_SETHOSTENTINT ISC_LWRES_ENDHOSTENTINT ISC_LWRES_GETNETBYADDRINADDR ISC_LWRES_SETNETENTINT ISC_LWRES_ENDNETENTINT ISC_LWRES_GETHOSTBYADDRVOID ISC_LWRES_NEEDHERRNO ISC_LWRES_GETIPNODEPROTO ISC_LWRES_GETADDRINFOPROTO ISC_LWRES_GETNAMEINFOPROTO ISC_PLATFORM_NEEDSTRSEP ISC_PLATFORM_NEEDVSNPRINTF LWRES_PLATFORM_NEEDVSNPRINTF ISC_EXTRA_OBJS ISC_EXTRA_SRCS ISC_PLATFORM_QUADFORMAT LWRES_PLATFORM_QUADFORMAT ISC_PLATFORM_RLIMITTYPE ISC_PLATFORM_USEDECLSPEC LWRES_PLATFORM_USEDECLSPEC ISC_PLATFORM_BRACEPTHREADONCEINIT LATEX PDFLATEX XSLTPROC XMLLINT XSLT_DOCBOOK_STYLE_HTML XSLT_DOCBOOK_STYLE_XHTML XSLT_DOCBOOK_STYLE_MAN XSLT_DOCBOOK_CHUNK_HTML XSLT_DOCBOOK_CHUNK_XHTML XSLT_DB2LATEX_STYLE XSLT_DB2LATEX_ADMONITIONS IDNLIBS BIND9_TOP_BUILDDIR BIND9_ISC_BUILDINCLUDE BIND9_ISCCC_BUILDINCLUDE BIND9_ISCCFG_BUILDINCLUDE BIND9_DNS_BUILDINCLUDE BIND9_LWRES_BUILDINCLUDE BIND9_VERSION LIBOBJS LTLIBOBJS' + ac_subst_files='BIND9_INCLUDES BIND9_MAKE_RULES LIBISC_API LIBISCCC_API LIBISCCFG_API LIBDNS_API LIBLWRES_API' + +@@ -1050,4 +1050,8 @@ + include additional configurations [automatic] + --with-kame=PATH use Kame IPv6 default path /usr/local/v6 ++ --with-idn=MPREFIX enable IDN support using idnkit default PREFIX ++ --with-libiconv=IPREFIX GNU libiconv are in IPREFIX default PREFIX ++ --with-iconv=LIBSPEC specify iconv library default -liconv ++ --with-idnlib=ARG specify libidnkit + + Some influential environment variables: +@@ -8654,5 +8658,5 @@ + *-*-irix6*) + # Find out which ABI we are using. +- echo '#line 8656 "configure"' > conftest.$ac_ext ++ echo '#line 8660 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 +@@ -9651,5 +9655,5 @@ + + # Provide some information about the compiler. +-echo "$as_me:9653:" \ ++echo "$as_me:9657:" \ + "checking for Fortran 77 compiler version" >&5 + ac_compiler=`set X $ac_compile; echo $2` +@@ -10712,9 +10716,9 @@ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:10714: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:10718: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 +- echo "$as_me:10718: \$? = $ac_status" >&5 ++ echo "$as_me:10722: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized +@@ -10955,9 +10959,9 @@ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:10957: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:10961: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 +- echo "$as_me:10961: \$? = $ac_status" >&5 ++ echo "$as_me:10965: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized +@@ -11015,9 +11019,9 @@ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:11017: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:11021: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 +- echo "$as_me:11021: \$? = $ac_status" >&5 ++ echo "$as_me:11025: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then +@@ -13200,5 +13204,5 @@ + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < conftest.$ac_ext <&5) ++ (eval echo "\"\$as_me:15501: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 +- echo "$as_me:15501: \$? = $ac_status" >&5 ++ echo "$as_me:15505: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized +@@ -15555,9 +15559,9 @@ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:15557: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:15561: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 +- echo "$as_me:15561: \$? = $ac_status" >&5 ++ echo "$as_me:15565: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then +@@ -16916,5 +16920,5 @@ + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < conftest.$ac_ext <&5) ++ (eval echo "\"\$as_me:17857: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 +- echo "$as_me:17857: \$? = $ac_status" >&5 ++ echo "$as_me:17861: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized +@@ -17911,9 +17915,9 @@ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:17913: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:17917: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 +- echo "$as_me:17917: \$? = $ac_status" >&5 ++ echo "$as_me:17921: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then +@@ -19950,9 +19954,9 @@ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:19952: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:19956: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 +- echo "$as_me:19956: \$? = $ac_status" >&5 ++ echo "$as_me:19960: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized +@@ -20193,9 +20197,9 @@ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:20195: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:20199: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 +- echo "$as_me:20199: \$? = $ac_status" >&5 ++ echo "$as_me:20203: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized +@@ -20253,9 +20257,9 @@ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:20255: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:20259: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 +- echo "$as_me:20259: \$? = $ac_status" >&5 ++ echo "$as_me:20263: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then +@@ -22438,5 +22442,5 @@ + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < conftest.$ac_ext <&5 ++echo "$as_me: error: You must specify ARG for --with-idnlib." >&2;} ++ { (exit 1); exit 1; }; } ++fi ++ ++IDNLIBS= ++if test "$use_idn" != no; then ++ ++cat >>confdefs.h <<\_ACEOF ++#define WITH_IDN 1 ++_ACEOF ++ ++ STD_CINCLUDES="$STD_CINCLUDES -I$idn_path/include" ++ if test "$idnlib" != no; then ++ IDNLIBS="$idnlib $iconvlib" ++ else ++ IDNLIBS="-L$idn_path/lib -lidnkit $iconvlib" ++ fi ++fi ++ ++ ++ ++for ac_header in locale.h ++do ++as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` ++if eval "test \"\${$as_ac_Header+set}\" = set"; then ++ echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 ++if eval "test \"\${$as_ac_Header+set}\" = set"; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++fi ++echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 ++echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++else ++ # Is the header compilable? ++echo "$as_me:$LINENO: checking $ac_header usability" >&5 ++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 ++cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++$ac_includes_default ++#include <$ac_header> ++_ACEOF ++rm -f conftest.$ac_objext ++if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ++ (eval $ac_compile) 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && ++ { ac_try='test -z "$ac_c_werror_flag" ++ || test ! -s conftest.err' ++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 ++ (eval $ac_try) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; } && ++ { ac_try='test -s conftest.$ac_objext' ++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 ++ (eval $ac_try) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; }; then ++ ac_header_compiler=yes ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ac_header_compiler=no ++fi ++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6 ++ ++# Is the header present? ++echo "$as_me:$LINENO: checking $ac_header presence" >&5 ++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 ++cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++#include <$ac_header> ++_ACEOF ++if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 ++ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } >/dev/null; then ++ if test -s conftest.err; then ++ ac_cpp_err=$ac_c_preproc_warn_flag ++ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag ++ else ++ ac_cpp_err= ++ fi ++else ++ ac_cpp_err=yes ++fi ++if test -z "$ac_cpp_err"; then ++ ac_header_preproc=yes ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_header_preproc=no ++fi ++rm -f conftest.err conftest.$ac_ext ++echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6 ++ ++# So? What about this header? ++case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in ++ yes:no: ) ++ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 ++echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} ++ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 ++echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ++ ac_header_preproc=yes ++ ;; ++ no:yes:* ) ++ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 ++echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} ++ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 ++echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} ++ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 ++echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} ++ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 ++echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} ++ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 ++echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} ++ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 ++echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ++ ( ++ cat <<\_ASBOX ++## ------------------------------------------ ## ++## Report this to the AC_PACKAGE_NAME lists. ## ++## ------------------------------------------ ## ++_ASBOX ++ ) | ++ sed "s/^/$as_me: WARNING: /" >&2 ++ ;; ++esac ++echo "$as_me:$LINENO: checking for $ac_header" >&5 ++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 ++if eval "test \"\${$as_ac_Header+set}\" = set"; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ eval "$as_ac_Header=\$ac_header_preproc" ++fi ++echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 ++echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 ++ ++fi ++if test `eval echo '${'$as_ac_Header'}'` = yes; then ++ cat >>confdefs.h <<_ACEOF ++#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 ++_ACEOF ++ ++fi ++ ++done ++ ++ ++for ac_func in setlocale ++do ++as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` ++echo "$as_me:$LINENO: checking for $ac_func" >&5 ++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 ++if eval "test \"\${$as_ac_var+set}\" = set"; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++/* Define $ac_func to an innocuous variant, in case declares $ac_func. ++ For example, HP-UX 11i declares gettimeofday. */ ++#define $ac_func innocuous_$ac_func ++ ++/* System header to define __stub macros and hopefully few prototypes, ++ which can conflict with char $ac_func (); below. ++ Prefer to if __STDC__ is defined, since ++ exists even on freestanding compilers. */ ++ ++#ifdef __STDC__ ++# include ++#else ++# include ++#endif ++ ++#undef $ac_func ++ ++/* Override any gcc2 internal prototype to avoid an error. */ ++#ifdef __cplusplus ++extern "C" ++{ ++#endif ++/* We use char because int might match the return type of a gcc2 ++ builtin and then its argument prototype would still apply. */ ++char $ac_func (); ++/* The GNU C library defines this for functions which it implements ++ to always fail with ENOSYS. Some functions are actually named ++ something starting with __ and the normal name is an alias. */ ++#if defined (__stub_$ac_func) || defined (__stub___$ac_func) ++choke me ++#else ++char (*f) () = $ac_func; ++#endif ++#ifdef __cplusplus ++} ++#endif ++ ++int ++main () ++{ ++return f != $ac_func; ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.$ac_objext conftest$ac_exeext ++if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 ++ (eval $ac_link) 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && ++ { ac_try='test -z "$ac_c_werror_flag" ++ || test ! -s conftest.err' ++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 ++ (eval $ac_try) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; } && ++ { ac_try='test -s conftest$ac_exeext' ++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 ++ (eval $ac_try) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; }; then ++ eval "$as_ac_var=yes" ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++eval "$as_ac_var=no" ++fi ++rm -f conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++fi ++echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 ++echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 ++if test `eval echo '${'$as_ac_var'}'` = yes; then ++ cat >>confdefs.h <<_ACEOF ++#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 ++_ACEOF ++ ++fi ++done ++ ++ ++# + # Substitutions + # +@@ -27910,4 +28264,5 @@ + s,@XSLT_DB2LATEX_STYLE@,$XSLT_DB2LATEX_STYLE,;t t + s,@XSLT_DB2LATEX_ADMONITIONS@,$XSLT_DB2LATEX_ADMONITIONS,;t t ++s,@IDNLIBS@,$IDNLIBS,;t t + s,@BIND9_TOP_BUILDDIR@,$BIND9_TOP_BUILDDIR,;t t + s,@BIND9_ISC_BUILDINCLUDE@,$BIND9_ISC_BUILDINCLUDE,;t t +Index: configure.in +=================================================================== +RCS file: /proj/cvs/prod/bind9/configure.in,v +retrieving revision 1.294.2.73 +diff -U2 -r1.294.2.73 configure.in +--- configure.in 10 Nov 2006 18:30:44 -0000 1.294.2.73 ++++ configure.in 28 Nov 2006 03:09:32 -0000 +@@ -1796,4 +1796,80 @@ + + # ++# IDN support ++# ++AC_ARG_WITH(idn, ++ [ --with-idn[=MPREFIX] enable IDN support using idnkit [default PREFIX]], ++ use_idn="$withval", use_idn="no") ++case "$use_idn" in ++yes) ++ if test X$prefix = XNONE ; then ++ idn_path=/usr/local ++ else ++ idn_path=$prefix ++ fi ++ ;; ++no) ++ ;; ++*) ++ idn_path="$use_idn" ++ ;; ++esac ++ ++iconvinc= ++iconvlib= ++AC_ARG_WITH(libiconv, ++ [ --with-libiconv[=IPREFIX] GNU libiconv are in IPREFIX [default PREFIX]], ++ use_libiconv="$withval", use_libiconv="no") ++case "$use_libiconv" in ++yes) ++ if test X$prefix = XNONE ; then ++ iconvlib="-L/usr/local/lib -R/usr/local/lib -liconv" ++ else ++ iconvlib="-L$prefix/lib -R$prefix/lib -liconv" ++ fi ++ ;; ++no) ++ iconvlib= ++ ;; ++*) ++ iconvlib="-L$use_libiconv/lib -R$use_libiconv/lib -liconv" ++ ;; ++esac ++ ++AC_ARG_WITH(iconv, ++ [ --with-iconv[=LIBSPEC] specify iconv library [default -liconv]], ++ iconvlib="$withval") ++case "$iconvlib" in ++no) ++ iconvlib= ++ ;; ++yes) ++ iconvlib=-liconv ++ ;; ++esac ++ ++AC_ARG_WITH(idnlib, ++ [ --with-idnlib=ARG specify libidnkit], ++ idnlib="$withval", idnlib="no") ++if test "$idnlib" = yes; then ++ AC_MSG_ERROR([You must specify ARG for --with-idnlib.]) ++fi ++ ++IDNLIBS= ++if test "$use_idn" != no; then ++ AC_DEFINE(WITH_IDN, 1, [define if idnkit support is to be included.]) ++ STD_CINCLUDES="$STD_CINCLUDES -I$idn_path/include" ++ if test "$idnlib" != no; then ++ IDNLIBS="$idnlib $iconvlib" ++ else ++ IDNLIBS="-L$idn_path/lib -lidnkit $iconvlib" ++ fi ++fi ++AC_SUBST(IDNLIBS) ++ ++AC_CHECK_HEADERS(locale.h) ++AC_CHECK_FUNCS(setlocale) ++ ++# + # Substitutions + # +Index: config.h.in +=================================================================== +RCS file: /proj/cvs/prod/bind9/config.h.in,v +retrieving revision 1.47.2.24 +diff -U2 -r1.47.2.24 config.h.in +--- config.h.in 10 Aug 2006 02:07:08 -0000 1.47.2.24 ++++ config.h.in 28 Nov 2006 03:09:33 -0000 +@@ -17,5 +17,5 @@ + */ + +-/* $Id: bind-9.2.9-patch,v 1.1.2.1 2007/01/15 22:25:56 marka Exp $ */ ++/* $Id: bind-9.2.9-patch,v 1.1.2.1 2007/01/15 22:25:56 marka Exp $ */ + + /*** +@@ -184,4 +184,7 @@ + #undef HAVE_LINUX_CAPABILITY_H + ++/* Define to 1 if you have the header file. */ ++#undef HAVE_LOCALE_H ++ + /* Define to 1 if you have the header file. */ + #undef HAVE_MEMORY_H +@@ -190,4 +193,7 @@ + #undef HAVE_RSA_GENERATE_KEY + ++/* Define to 1 if you have the `setlocale' function. */ ++#undef HAVE_SETLOCALE ++ + /* Define to 1 if you have the header file. */ + #undef HAVE_STDINT_H +@@ -258,4 +264,7 @@ + #undef USE_FIONBIO_IOCTL + ++/* define if idnkit support is to be included. */ ++#undef WITH_IDN ++ + /* Define to 1 if your processor stores words with the most significant byte + first (like Motorola and SPARC, unlike Intel and VAX). */ +Index: bin/dig/Makefile.in +=================================================================== +RCS file: /proj/cvs/prod/bind9/bin/dig/Makefile.in,v +retrieving revision 1.25.2.4 +diff -U2 -r1.25.2.4 Makefile.in +--- bin/dig/Makefile.in 18 Aug 2004 23:22:52 -0000 1.25.2.4 ++++ bin/dig/Makefile.in 28 Nov 2006 03:09:33 -0000 +@@ -37,5 +37,5 @@ + DEPLIBS = ${DNSDEPLIBS} ${ISCDEPLIBS} + +-LIBS = ${DNSLIBS} ${ISCLIBS} @LIBS@ ++LIBS = ${DNSLIBS} ${ISCLIBS} @IDNLIBS@ @LIBS@ + + SUBDIRS = +Index: bin/dig/dig.1 +=================================================================== +RCS file: /proj/cvs/prod/bind9/bin/dig/dig.1,v +retrieving revision 1.14.2.10 +diff -U2 -r1.14.2.10 dig.1 +--- bin/dig/dig.1 29 Jun 2006 13:02:05 -0000 1.14.2.10 ++++ bin/dig/dig.1 28 Nov 2006 03:09:35 -0000 +@@ -371,4 +371,15 @@ + will not print the initial query when it looks up the NS records for + isc.org. ++.SH "IDN SUPPORT" ++.PP ++If ++\fBdig\fR ++has been built with IDN (internationalized domain name) support, it can accept and display non\-ASCII domain names. ++\fBdig\fR ++appropriately converts character encoding of domain name before sending a request to DNS server or displaying a reply from the server. If you'd like to turn off the IDN support for some reason, defines the ++\fBIDN_DISABLE\fR ++environment variable. The IDN support is disabled if the the variable is set when ++\fBdig\fR ++runs. + .SH "FILES" + .PP +Index: bin/dig/dig.docbook +=================================================================== +RCS file: /proj/cvs/prod/bind9/bin/dig/dig.docbook,v +retrieving revision 1.4.2.11 +diff -U2 -r1.4.2.11 dig.docbook +--- bin/dig/dig.docbook 12 May 2005 21:35:06 -0000 1.4.2.11 ++++ bin/dig/dig.docbook 28 Nov 2006 03:09:36 -0000 +@@ -547,4 +547,19 @@ + + ++IDN SUPPORT ++ ++If dig has been built with IDN (internationalized ++domain name) support, it can accept and display non-ASCII domain names. ++dig appropriately converts character encoding of ++domain name before sending a request to DNS server or displaying a ++reply from the server. ++If you'd like to turn off the IDN support for some reason, defines ++the IDN_DISABLE environment variable. ++The IDN support is disabled if the the variable is set when ++dig runs. ++ ++ ++ ++ + FILES + +Index: bin/dig/dighost.c +=================================================================== +RCS file: /proj/cvs/prod/bind9/bin/dig/dighost.c,v +retrieving revision 1.221.2.33 +diff -U2 -r1.221.2.33 dighost.c +--- bin/dig/dighost.c 2 Oct 2006 03:14:14 -0000 1.221.2.33 ++++ bin/dig/dighost.c 28 Nov 2006 03:09:41 -0000 +@@ -33,4 +33,15 @@ + #include + ++#ifdef HAVE_LOCALE_H ++#include ++#endif ++ ++#ifdef WITH_IDN ++#include ++#include ++#include ++#include ++#endif ++ + #include + #include +@@ -134,4 +145,16 @@ + dig_lookup_t *current_lookup = NULL; + ++#ifdef WITH_IDN ++static void initialize_idn(void); ++static isc_result_t output_filter(isc_buffer_t *buffer, ++ unsigned int used_org, ++ isc_boolean_t absolute); ++static idn_result_t append_textname(char *name, const char *origin, ++ size_t namesize); ++static void idn_check_result(idn_result_t r, const char *msg); ++ ++#define MAXDLEN 256 ++#endif ++ + /* + * Apply and clear locks at the event level in global task. +@@ -737,4 +760,8 @@ + } + ++#ifdef WITH_IDN ++ initialize_idn(); ++#endif ++ + if (keyfile[0] != 0) + setup_file_key(); +@@ -1268,4 +1295,12 @@ + dns_compress_t cctx; + char store[MXNAME]; ++#ifdef WITH_IDN ++ idn_result_t mr; ++ char utf8_textname[MXNAME], utf8_origin[MXNAME], idn_textname[MXNAME]; ++#endif ++ ++#ifdef WITH_IDN ++ dns_name_settotextfilter(output_filter); ++#endif + + REQUIRE(lookup != NULL); +@@ -1296,4 +1331,15 @@ + sizeof(lookup->onamespace)); + ++#ifdef WITH_IDN ++ /* ++ * We cannot convert `textname' and `origin' separately. ++ * `textname' doesn't contain TLD, but local mapping needs ++ * TLD. ++ */ ++ mr = idn_encodename(IDN_LOCALCONV | IDN_DELIMMAP, lookup->textname, ++ utf8_textname, sizeof(utf8_textname)); ++ idn_check_result(mr, "convert textname to UTF-8"); ++#endif ++ + /* + * If the name has too many dots, force the origin to be NULL +@@ -1304,4 +1350,11 @@ + */ + /* XXX New search here? */ ++#ifdef WITH_IDN ++ if ((count_dots(utf8_textname) >= ndots) || !usesearch) ++ lookup->origin = NULL; /* Force abs lookup */ ++ else if (lookup->origin == NULL && lookup->new_search && usesearch) { ++ lookup->origin = ISC_LIST_HEAD(search_list); ++ } ++#else + if ((count_dots(lookup->textname) >= ndots) || !usesearch) + lookup->origin = NULL; /* Force abs lookup */ +@@ -1309,5 +1362,27 @@ + lookup->origin = ISC_LIST_HEAD(search_list); + } ++#endif ++ ++#ifdef WITH_IDN + if (lookup->origin != NULL) { ++ mr = idn_encodename(IDN_LOCALCONV | IDN_DELIMMAP, ++ lookup->origin->origin, utf8_origin, ++ sizeof(utf8_origin)); ++ idn_check_result(mr, "convert origin to UTF-8"); ++ mr = append_textname(utf8_textname, utf8_origin, ++ sizeof(utf8_textname)); ++ idn_check_result(mr, "append origin to textname"); ++ } ++ mr = idn_encodename(IDN_LOCALMAP | IDN_NAMEPREP | ++ IDN_IDNCONV | IDN_LENCHECK, utf8_textname, ++ idn_textname, sizeof(idn_textname)); ++ idn_check_result(mr, "convert UTF-8 textname to IDN encoding"); ++#endif ++ ++#ifdef WITH_IDN ++ if (0) { ++#else ++ if (lookup->origin != NULL) { ++#endif + debug("trying origin %s", lookup->origin->origin); + result = dns_message_gettempname(lookup->sendmsg, +@@ -1354,4 +1429,13 @@ + dns_name_clone(dns_rootname, lookup->name); + else { ++#ifdef WITH_IDN ++ len = strlen(idn_textname); ++ isc_buffer_init(&b, idn_textname, len); ++ isc_buffer_add(&b, len); ++ result = dns_name_fromtext(lookup->name, &b, ++ dns_rootname, ++ ISC_FALSE, ++ &lookup->namebuf); ++#else + len = strlen(lookup->textname); + isc_buffer_init(&b, lookup->textname, len); +@@ -1361,4 +1445,5 @@ + ISC_FALSE, + &lookup->namebuf); ++#endif + } + if (result != ISC_R_SUCCESS) { +@@ -2898,2 +2983,100 @@ + isc_mem_destroy(&mctx); + } ++ ++#ifdef WITH_IDN ++static void ++initialize_idn(void) { ++ idn_result_t r; ++ ++#ifdef HAVE_SETLOCALE ++ /* Set locale */ ++ (void)setlocale(LC_ALL, ""); ++#endif ++ /* Create configuration context. */ ++ r = idn_nameinit(1); ++ if (r != idn_success) ++ fatal("idn api initialization failed: %s", ++ idn_result_tostring(r)); ++ ++ /* Set domain name -> text post-conversion filter. */ ++ dns_name_settotextfilter(output_filter); ++} ++ ++static isc_result_t ++output_filter(isc_buffer_t *buffer, unsigned int used_org, ++ isc_boolean_t absolute) ++{ ++ char tmp1[MAXDLEN], tmp2[MAXDLEN]; ++ size_t fromlen, tolen; ++ isc_boolean_t end_with_dot; ++ ++ /* ++ * Copy contents of 'buffer' to 'tmp1', supply trailing dot ++ * if 'absolute' is true, and terminate with NUL. ++ */ ++ fromlen = isc_buffer_usedlength(buffer) - used_org; ++ if (fromlen >= MAXDLEN) ++ return (ISC_R_SUCCESS); ++ memcpy(tmp1, (char *)isc_buffer_base(buffer) + used_org, fromlen); ++ end_with_dot = (tmp1[fromlen - 1] == '.') ? ISC_TRUE : ISC_FALSE; ++ if (absolute && !end_with_dot) { ++ fromlen++; ++ if (fromlen >= MAXDLEN) ++ return (ISC_R_SUCCESS); ++ tmp1[fromlen - 1] = '.'; ++ } ++ tmp1[fromlen] = '\0'; ++ ++ /* ++ * Convert contents of 'tmp1' to local encoding. ++ */ ++ if (idn_decodename(IDN_DECODE_APP, tmp1, tmp2, MAXDLEN) != idn_success) ++ return (ISC_R_SUCCESS); ++ strcpy(tmp1, tmp2); ++ ++ /* ++ * Copy the converted contents in 'tmp1' back to 'buffer'. ++ * If we have appended trailing dot, remove it. ++ */ ++ tolen = strlen(tmp1); ++ if (absolute && !end_with_dot && tmp1[tolen - 1] == '.') ++ tolen--; ++ ++ if (isc_buffer_length(buffer) < used_org + tolen) ++ return (ISC_R_NOSPACE); ++ ++ isc_buffer_subtract(buffer, isc_buffer_usedlength(buffer) - used_org); ++ memcpy(isc_buffer_used(buffer), tmp1, tolen); ++ isc_buffer_add(buffer, tolen); ++ ++ return (ISC_R_SUCCESS); ++} ++ ++static idn_result_t ++append_textname(char *name, const char *origin, size_t namesize) { ++ size_t namelen = strlen(name); ++ size_t originlen = strlen(origin); ++ ++ /* Already absolute? */ ++ if (namelen > 0 && name[namelen - 1] == '.') ++ return idn_success; ++ ++ /* Append dot and origin */ ++ ++ if (namelen + 1 + originlen >= namesize) ++ return idn_buffer_overflow; ++ ++ name[namelen++] = '.'; ++ (void)strcpy(name + namelen, origin); ++ return idn_success; ++} ++ ++static void ++idn_check_result(idn_result_t r, const char *msg) { ++ if (r != idn_success) { ++ exitcode = 1; ++ fatal("%s: %s", msg, idn_result_tostring(r)); ++ } ++} ++ ++#endif /* WITH_IDN */ +Index: bin/dig/host.1 +=================================================================== +RCS file: /proj/cvs/prod/bind9/bin/dig/host.1,v +retrieving revision 1.11.2.6 +diff -U2 -r1.11.2.6 host.1 +--- bin/dig/host.1 29 Jun 2006 13:02:05 -0000 1.11.2.6 ++++ bin/dig/host.1 28 Nov 2006 03:09:42 -0000 +@@ -168,4 +168,15 @@ + \fBhost\fR + will effectively wait forever for a reply. The time to wait for a response will be set to the number of seconds given by the hardware's maximum value for an integer quantity. ++.SH "IDN SUPPORT" ++.PP ++If ++\fBhost\fR ++has been built with IDN (internationalized domain name) support, it can accept and display non\-ASCII domain names. ++\fBhost\fR ++appropriately converts character encoding of domain name before sending a request to DNS server or displaying a reply from the server. If you'd like to turn off the IDN support for some reason, defines the ++\fBIDN_DISABLE\fR ++environment variable. The IDN support is disabled if the the variable is set when ++\fBhost\fR ++runs. + .SH "FILES" + .PP +Index: bin/dig/host.docbook +=================================================================== +RCS file: /proj/cvs/prod/bind9/bin/dig/host.docbook,v +retrieving revision 1.2.2.5 +diff -U2 -r1.2.2.5 host.docbook +--- bin/dig/host.docbook 12 May 2005 21:35:06 -0000 1.2.2.5 ++++ bin/dig/host.docbook 28 Nov 2006 03:09:42 -0000 +@@ -199,4 +199,19 @@ + + ++IDN SUPPORT ++ ++If host has been built with IDN (internationalized ++domain name) support, it can accept and display non-ASCII domain names. ++host appropriately converts character encoding of ++domain name before sending a request to DNS server or displaying a ++reply from the server. ++If you'd like to turn off the IDN support for some reason, defines ++the IDN_DISABLE environment variable. ++The IDN support is disabled if the the variable is set when ++host runs. ++ ++ ++ ++ + FILES + +Index: lib/dns/name.c +=================================================================== +RCS file: /proj/cvs/prod/bind9/lib/dns/name.c,v +retrieving revision 1.127.2.14 +diff -U2 -r1.127.2.14 name.c +--- lib/dns/name.c 2 Mar 2006 00:37:17 -0000 1.127.2.14 ++++ lib/dns/name.c 28 Nov 2006 03:09:47 -0000 +@@ -199,4 +199,11 @@ + dns_fullname_hash(dns_name_t *name, isc_boolean_t case_sensitive); + ++#ifdef WITH_IDN ++/* ++ * dns_name_t to text post-conversion procedure. ++ */ ++static dns_name_totextfilter_t totext_filter_proc = NULL; ++#endif ++ + static void + set_offsets(const dns_name_t *name, unsigned char *offsets, +@@ -1715,4 +1722,7 @@ + isc_boolean_t saw_root = ISC_FALSE; + char num[4]; ++#ifdef WITH_IDN ++ unsigned int oused = target->used; ++#endif + + /* +@@ -1895,4 +1905,8 @@ + isc_buffer_add(target, tlen - trem); + ++#ifdef WITH_IDN ++ if (totext_filter_proc != NULL) ++ return ((*totext_filter_proc)(target, oused, saw_root)); ++#endif + return (ISC_R_SUCCESS); + } +@@ -3363,2 +3377,8 @@ + } + ++#ifdef WITH_IDN ++void ++dns_name_settotextfilter(dns_name_totextfilter_t proc) { ++ totext_filter_proc = proc; ++} ++#endif +Index: lib/dns/include/dns/name.h +=================================================================== +RCS file: /proj/cvs/prod/bind9/lib/dns/include/dns/name.h,v +retrieving revision 1.95.2.11 +diff -U2 -r1.95.2.11 name.h +--- lib/dns/include/dns/name.h 2 Mar 2006 00:37:17 -0000 1.95.2.11 ++++ lib/dns/include/dns/name.h 28 Nov 2006 03:09:49 -0000 +@@ -220,4 +220,15 @@ + #define DNS_NAME_MAXWIRE 255 + ++#ifdef WITH_IDN ++/* ++ * Text output filter procedure. ++ * 'target' is the buffer to be converted. The region to be converted ++ * is from 'buffer'->base + 'used_org' to the end of the used region. ++ */ ++typedef isc_result_t (*dns_name_totextfilter_t)(isc_buffer_t *target, ++ unsigned int used_org, ++ isc_boolean_t absolute); ++#endif ++ + /*** + *** Initialization +@@ -1266,4 +1277,12 @@ + */ + ++#ifdef WITH_IDN ++void ++dns_name_settotextfilter(dns_name_totextfilter_t proc); ++/* ++ * Call 'proc' at the end of dns_name_totext. ++ */ ++#endif /* WITH_IDN */ ++ + #define DNS_NAME_FORMATSIZE (DNS_NAME_MAXTEXT + 1) + /*