📄 bind-9.2.3rc1-patch
字号:
--- ./bin/dig/dig.1.orig Fri May 16 15:27:30 2003+++ ./bin/dig/dig.1 Tue Jul 22 15:01:36 2003@@ -350,4 +350,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--- ./bin/dig/Makefile.in.orig Fri Dec 27 10:51:00 2002+++ ./bin/dig/Makefile.in Tue Jul 22 15:01:36 2003@@ -37,5 +37,5 @@ DEPLIBS = ${DNSDEPLIBS} ${ISCDEPLIBS} -LIBS = ${DNSLIBS} ${ISCLIBS} @LIBS@+LIBS = ${DNSLIBS} ${ISCLIBS} @IDNLIBS@ @LIBS@ SUBDIRS =--- ./bin/dig/dig.docbook.orig Mon May 12 12:50:15 2003+++ ./bin/dig/dig.docbook Tue Jul 22 15:01:36 2003@@ -530,4 +530,19 @@ <refsect1>+<title>IDN SUPPORT</title>+<para>+If <command>dig</command> has been built with IDN (internationalized+domain name) support, it can accept and display non-ASCII domain names.+<command>dig</command> 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 <envar>IDN_DISABLE</envar> environment variable.+The IDN support is disabled if the the variable is set when +<command>dig</command> runs.+</para>+</refsect1>++<refsect1> <title>FILES</title> <para>--- ./bin/dig/dighost.c.orig Tue Jul 22 14:33:12 2003+++ ./bin/dig/dighost.c Tue Jul 22 15:01:36 2003@@ -33,4 +33,15 @@ #include <limits.h> +#ifdef HAVE_LOCALE_H+#include <locale.h>+#endif++#ifdef WITH_IDN+#include <idn/result.h>+#include <idn/log.h>+#include <idn/resconf.h>+#include <idn/api.h>+#endif+ #include <dns/byaddr.h> #include <dns/fixedname.h>@@ -132,4 +143,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.@@ -652,4 +675,8 @@ } +#ifdef WITH_IDN+ initialize_idn();+#endif+ if (keyfile[0] != 0) setup_file_key();@@ -1172,4 +1199,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);@@ -1200,4 +1235,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@@ -1208,4 +1254,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 */@@ -1213,5 +1266,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_ASCCHECK |+ 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,@@ -1258,4 +1333,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);@@ -1265,4 +1349,5 @@ ISC_FALSE, &lookup->namebuf);+#endif } if (result != ISC_R_SUCCESS) {@@ -2693,2 +2778,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 */--- ./bin/dig/host.1.orig Mon May 12 11:13:18 2003+++ ./bin/dig/host.1 Tue Jul 22 15:01:36 2003@@ -121,4 +121,15 @@ 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--- ./bin/dig/host.docbook.orig Thu Mar 6 15:38:10 2003+++ ./bin/dig/host.docbook Tue Jul 22 15:01:36 2003@@ -182,4 +182,19 @@ <refsect1>+<title>IDN SUPPORT</title>+<para>+If <command>host</command> has been built with IDN (internationalized+domain name) support, it can accept and display non-ASCII domain names.+<command>host</command> 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 <envar>IDN_DISABLE</envar> environment variable.+The IDN support is disabled if the the variable is set when+<command>host</command> runs.+</para>+</refsect1>++<refsect1> <title>FILES</title> <para>--- ./lib/dns/include/dns/name.h.orig Tue Feb 18 15:32:01 2003+++ ./lib/dns/include/dns/name.h Tue Jul 22 15:01:37 2003@@ -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@@ -1245,4 +1256,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)--- ./lib/dns/name.c.orig Tue Feb 18 15:31:56 2003+++ ./lib/dns/name.c Tue Jul 22 15:01:36 2003@@ -195,4 +195,11 @@ dns_name_t *dns_wildcardname = &wild; +#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,@@ -1685,4 +1692,7 @@ isc_boolean_t saw_root = ISC_FALSE; char num[4];+#ifdef WITH_IDN+ unsigned int oused = target->used;+#endif /*@@ -1862,4 +1872,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); }@@ -3326,2 +3340,8 @@ } +#ifdef WITH_IDN+void+dns_name_settotextfilter(dns_name_totextfilter_t proc) {+ totext_filter_proc = proc;+}+#endif--- ./README.idnkit.orig Tue Jul 22 15:01:35 2003+++ ./README.idnkit Tue Jul 22 15:01:35 2003@@ -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.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -