⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bind-9.2.2-patch

📁 package of develop dns
💻 2-PATCH
📖 第 1 页 / 共 3 页
字号:
+ 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.   * Can I get rid of these using shutdown events?  XXX****************** 648,653 ****--- 671,680 ----  		ISC_LIST_APPEND(server_list, srv, link);  	}  + #ifdef WITH_IDN+ 	initialize_idn();+ #endif+   	if (keyfile[0] != 0)  		setup_file_key();  	else if (keysecret[0] != 0)****************** 1168,1173 ****--- 1195,1208 ----  	isc_buffer_t b;  	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);  	INSIST(!free_now);****************** 1196,1201 ****--- 1231,1247 ----  	isc_buffer_init(&lookup->onamebuf, lookup->onamespace,  			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  	 * (which produces an absolute lookup).  Otherwise, take the origin****************** 1204,1215 ****--- 1250,1290 ----  	 * is TRUE or we got a domain line in the resolv.conf file.  	 */  	/* 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 */  	else if (lookup->origin == NULL && lookup->new_search && usesearch) {  		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,  						 &lookup->oname);****************** 1254,1259 ****--- 1329,1343 ----  		if (lookup->trace && lookup->trace_root)  			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);  			isc_buffer_add(&b, len);****************** 1261,1266 ****--- 1345,1351 ----  						   dns_rootname,  						   ISC_FALSE,  						   &lookup->namebuf);+ #endif  		}  		if (result != ISC_R_SUCCESS) {  			dns_message_puttempname(lookup->sendmsg,****************** 2663,2665 ****--- 2748,2848 ----  	if (mctx != NULL)  		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.1diff -c mdn/othersrc/bind9/bin/dig/host.1:1.1.1.2 mdn/othersrc/bind9/bin/dig/host.1:1.4*** bin/dig/host.1	Wed Mar  5 17:14:57 2003--- bin/dig/host.1	Wed Mar  5 17:42:53 2003****************** 120,125 ****--- 120,136 ----  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  \fI/etc/resolv.conf\fRIndex: bin/dig/host.docbookdiff -c mdn/othersrc/bind9/bin/dig/host.docbook:1.1.1.2 mdn/othersrc/bind9/bin/dig/host.docbook:1.4*** bin/dig/host.docbook	Wed Mar  5 17:14:57 2003--- bin/dig/host.docbook	Wed Mar  5 17:42:53 2003****************** 181,186 ****--- 181,201 ----  </refsect1>    <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>  <filename>/etc/resolv.conf</filename>Index: lib/dns/name.cdiff -c mdn/othersrc/bind9/lib/dns/name.c:1.1.1.11 mdn/othersrc/bind9/lib/dns/name.c:1.15*** lib/dns/name.c	Wed Mar  5 17:16:22 2003--- lib/dns/name.c	Wed Mar  5 17:49:58 2003****************** 194,199 ****--- 194,206 ----  /* XXXDCL make const? */  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,  	    dns_name_t *set_name);****************** 1684,1689 ****--- 1691,1699 ----  	unsigned int labels;  	isc_boolean_t saw_root = ISC_FALSE;  	char num[4];+ #ifdef WITH_IDN+ 	unsigned int oused = target->used;+ #endif    	/*  	 * This function assumes the name is in proper uncompressed****************** 1861,1866 ****--- 1871,1880 ----    	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);  }  ****************** 3325,3327 ****--- 3339,3347 ----  	return (ISC_R_SUCCESS);  }  + #ifdef WITH_IDN+ void+ dns_name_settotextfilter(dns_name_totextfilter_t proc) {+ 	totext_filter_proc = proc;+ }+ #endifIndex: lib/dns/include/dns/name.hdiff -c mdn/othersrc/bind9/lib/dns/include/dns/name.h:1.1.1.7 mdn/othersrc/bind9/lib/dns/include/dns/name.h:1.10*** lib/dns/include/dns/name.h	Wed May 22 17:15:29 2002--- lib/dns/include/dns/name.h	Mon May 27 12:10:15 2002****************** 219,224 ****--- 219,235 ----   */  #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   ***/****************** 1244,1249 ****--- 1255,1268 ----   *	'size' > 0.   *   */+ + #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 + -