📄 bind-9.3.0-patch
字号:
RCS file: /proj/cvs/prod/bind9/bin/dig/dig.1,vretrieving revision 1.14.2.4.2.6diff -U2 -r1.14.2.4.2.6 dig.1--- bin/dig/dig.1 23 Jun 2004 09:11:01 -0000 1.14.2.4.2.6+++ bin/dig/dig.1 1 Sep 2004 07:49:54 -0000@@ -386,4 +386,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" .PPIndex: bin/dig/dig.docbook===================================================================RCS file: /proj/cvs/prod/bind9/bin/dig/dig.docbook,vretrieving revision 1.4.2.7.4.9diff -U2 -r1.4.2.7.4.9 dig.docbook--- bin/dig/dig.docbook 23 Jun 2004 04:19:41 -0000 1.4.2.7.4.9+++ bin/dig/dig.docbook 1 Sep 2004 07:49:57 -0000@@ -578,4 +578,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>Index: bin/dig/dighost.c===================================================================RCS file: /proj/cvs/prod/bind9/bin/dig/dighost.c,vretrieving revision 1.221.2.19.2.14diff -U2 -r1.221.2.19.2.14 dighost.c--- bin/dig/dighost.c 30 Jun 2004 23:57:52 -0000 1.221.2.19.2.14+++ bin/dig/dighost.c 1 Sep 2004 07:50:24 -0000@@ -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> #ifdef DIG_SIGCHASE@@ -120,4 +131,16 @@ int lookup_counter = 0; +#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+ /* * Exit Codes:@@ -956,4 +979,8 @@ copy_server_list(lwconf, &server_list); +#ifdef WITH_IDN+ initialize_idn();+#endif+ if (keyfile[0] != 0) setup_file_key();@@ -1568,4 +1595,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);@@ -1596,4 +1631,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@@ -1604,4 +1650,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 */@@ -1609,5 +1662,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,@@ -1654,4 +1729,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);@@ -1661,4 +1745,5 @@ ISC_FALSE, &lookup->namebuf);+#endif } if (result != ISC_R_SUCCESS) {@@ -3165,4 +3250,102 @@ 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,vretrieving revision 1.11.2.1.4.4diff -U2 -r1.11.2.1.4.4 host.1--- bin/dig/host.1 13 Apr 2004 04:11:03 -0000 1.11.2.1.4.4+++ bin/dig/host.1 1 Sep 2004 07:50:24 -0000@@ -128,4 +128,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" .PPIndex: bin/dig/host.docbook===================================================================RCS file: /proj/cvs/prod/bind9/bin/dig/host.docbook,vretrieving revision 1.2.2.2.4.5diff -U2 -r1.2.2.2.4.5 host.docbook--- bin/dig/host.docbook 13 Apr 2004 01:26:26 -0000 1.2.2.2.4.5+++ bin/dig/host.docbook 1 Sep 2004 07:50:27 -0000@@ -192,4 +192,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>Index: lib/dns/name.c===================================================================RCS file: /proj/cvs/prod/bind9/lib/dns/name.c,vretrieving revision 1.127.2.7.2.11diff -U2 -r1.127.2.7.2.11 name.c--- lib/dns/name.c 1 Sep 2004 05:19:59 -0000 1.127.2.7.2.11+++ lib/dns/name.c 1 Sep 2004 07:50:35 -0000@@ -183,4 +183,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,@@ -1208,4 +1215,7 @@ unsigned int labels; isc_boolean_t saw_root = ISC_FALSE;+#ifdef WITH_IDN+ unsigned int oused = target->used;+#endif /*@@ -1346,4 +1356,9 @@ 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); }@@ -2201,2 +2216,8 @@ } +#ifdef WITH_IDN+void+dns_name_settotextfilter(dns_name_totextfilter_t proc) {+ totext_filter_proc = proc;+}+#endifIndex: lib/dns/include/dns/name.h===================================================================RCS file: /proj/cvs/prod/bind9/lib/dns/include/dns/name.h,vretrieving revision 1.95.2.3.2.11diff -U2 -r1.95.2.3.2.11 name.h--- lib/dns/include/dns/name.h 1 Sep 2004 05:19:59 -0000 1.95.2.3.2.11+++ lib/dns/include/dns/name.h 1 Sep 2004 07:50:41 -0000@@ -156,4 +156,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@@ -1115,4 +1126,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)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -