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

📄 bind-9.3.2b1-dbus.patch

📁 非常好的dns解析软件
💻 PATCH
📖 第 1 页 / 共 2 页
字号:
--- bind-9.3.2b1/lib/dns/rbt.c.dbus	2005-06-17 21:03:24.000000000 -0400+++ bind-9.3.2b1/lib/dns/rbt.c	2005-10-07 12:43:26.000000000 -0400@@ -2172,6 +2172,47 @@ 	dns_rbt_printtree(rbt->root, NULL, 0); } +static void+dns_rbt_traverse_tree(dns_rbtnode_t *root,  dns_rbt_traverse_callback_t cb, void *cb_arg1, void *cb_arg2 ) {+/*+ * This is used ONLY to traverse the forward table by dbus_mgr at the moment.+ * Since the forward table is not likely to be large, this can be recursive.+ */+	dns_name_t name;+	dns_offsets_t offsets;+	char buf[DNS_NAME_MAXWIRE];+	isc_buffer_t buffer;++	if (root != NULL) {++		if (DOWN(root)) +			dns_rbt_traverse_tree(DOWN(root), cb, cb_arg1, cb_arg2);++		if( LEFT(root) != NULL )+		        dns_rbt_traverse_tree(LEFT(root), cb, cb_arg1, cb_arg2);++		if( RIGHT(root) != NULL )+		        dns_rbt_traverse_tree(RIGHT(root), cb, cb_arg1, cb_arg2);++		if( DATA(root) == 0L )+		    return;++		dns_name_init(&name, offsets);+		isc_buffer_init(&buffer, buf, DNS_NAME_MAXWIRE);+		dns_name_setbuffer( &name, &buffer);+		dns_rbt_fullnamefromnode(root, &name);+		+		(*cb)(&name, DATA(root), cb_arg1, cb_arg2);		+	} +}++void dns_rbt_traverse( dns_rbt_t *rbt, dns_rbt_traverse_callback_t cb, void *cb_arg1, void *cb_arg2  )+{+        REQUIRE(VALID_RBT(rbt));++	dns_rbt_traverse_tree( rbt->root, cb, cb_arg1, cb_arg2 );       +}+ /*  * Chain Functions  */--- bind-9.3.2b1/lib/dns/forward.c.dbus	2005-03-16 22:58:30.000000000 -0500+++ bind-9.3.2b1/lib/dns/forward.c	2005-10-07 12:43:26.000000000 -0400@@ -200,3 +200,89 @@ 	} 	isc_mem_put(fwdtable->mctx, forwarders, sizeof(dns_forwarders_t)); }++/***+ *** new D-BUS Dynamic Forwarding Zones functions:+ ***/+isc_result_t+dns_fwdtable_delete(dns_fwdtable_t *fwdtable, dns_name_t *name )+{+	isc_result_t result;++	REQUIRE(VALID_FWDTABLE(fwdtable));++	RWLOCK(&fwdtable->rwlock, isc_rwlocktype_write);++	result = dns_rbt_deletename(fwdtable->table, name, ISC_FALSE);++	RWUNLOCK(&fwdtable->rwlock, isc_rwlocktype_write);		    ++	return (result);+}++isc_result_t+dns_fwdtable_find_closest(dns_fwdtable_t *fwdtable, +			  dns_name_t *name, +			  dns_name_t *foundname,+			  dns_forwarders_t **forwardersp)+{+	isc_result_t result;++	REQUIRE(VALID_FWDTABLE(fwdtable));+	+	RWLOCK(&fwdtable->rwlock, isc_rwlocktype_read);++	result = dns_rbt_findname(fwdtable->table, name, 0, foundname,+				  (void **)forwardersp);+	+	if(result == DNS_R_PARTIALMATCH)+	    result = ISC_R_SUCCESS;++	RWUNLOCK(&fwdtable->rwlock, isc_rwlocktype_read);++	return (result);+}++isc_result_t+dns_fwdtable_find_exact(dns_fwdtable_t *fwdtable, dns_name_t *name,+		  dns_forwarders_t **forwardersp)+{+	isc_result_t result;++	REQUIRE(VALID_FWDTABLE(fwdtable));++	REQUIRE(forwardersp != 0L);++	RWLOCK(&fwdtable->rwlock, isc_rwlocktype_read);++	result = dns_rbt_findname(fwdtable->table, name, 0, NULL,+				  (void **)forwardersp);+	+	if( result != ISC_R_SUCCESS )+	    *forwardersp = 0L;++	RWUNLOCK(&fwdtable->rwlock, isc_rwlocktype_read);++	return (result);+}++static +void dns_fwdtable_traverse+(   +    dns_name_t *name,+    void *node_data,+    void *cbp,+    void *cb_arg+)+{+    dns_fwdtable_callback_t  cb = (dns_fwdtable_callback_t) cbp;+    +    (*cb)( name, node_data, cb_arg);+}++void dns_fwdtable_foreach(dns_fwdtable_t *fwdtable, dns_fwdtable_callback_t cb, void *cb_arg )+{+    REQUIRE(VALID_FWDTABLE(fwdtable));++    dns_rbt_traverse( fwdtable->table, dns_fwdtable_traverse, cb, cb_arg );+}--- bind-9.3.2b1/lib/dns/include/dns/forward.h.dbus	2005-03-16 22:58:31.000000000 -0500+++ bind-9.3.2b1/lib/dns/include/dns/forward.h	2005-10-07 12:43:26.000000000 -0400@@ -98,6 +98,37 @@  * 	all memory associated with the forwarding table is freed.  */ ++/* These are ONLY used by dbus_mgr :+ */++isc_result_t+dns_fwdtable_delete( dns_fwdtable_t *fwdtable, dns_name_t *name );+/* + * Removes an entry from the forwarding table.+ */++isc_result_t+dns_fwdtable_find_exact(dns_fwdtable_t *fwdtable, dns_name_t *name,+		  dns_forwarders_t **forwardersp);+/*+ * Finds an exact match for "name" in the forwarding table.  + */++isc_result_t+dns_fwdtable_find_closest(dns_fwdtable_t *fwdtable, dns_name_t *name, dns_name_t *foundname,+		  dns_forwarders_t **forwardersp);+/*+ * Finds the closest match for "*name" in the forwarding table, returning  + * the actual name matching in *name if different to *name passed in. + */++typedef void (*dns_fwdtable_callback_t)( dns_name_t *, dns_forwarders_t *, void *);+void dns_fwdtable_foreach(dns_fwdtable_t *fwdtable, dns_fwdtable_callback_t cb, void * );+/* Invoke cb for each member of fwdtable + */++ ISC_LANG_ENDDECLS  #endif /* DNS_FORWARD_H */--- bind-9.3.2b1/lib/dns/include/dns/rbt.h.dbus	2004-10-11 01:55:51.000000000 -0400+++ bind-9.3.2b1/lib/dns/include/dns/rbt.h	2005-10-07 12:43:26.000000000 -0400@@ -833,6 +833,17 @@  *	<something_else>	Any error result from dns_name_concatenate.  */ ++typedef void (*dns_rbt_traverse_callback_t)(  dns_name_t *name,+					      void *node_data,+					      void *cb_arg1,+					      void *cb_arg2);++void dns_rbt_traverse( dns_rbt_t *rbt, dns_rbt_traverse_callback_t cb, void *cb_arg1, void *cb_arg2 );+/* tree traversal function (only used by D-BUS dynamic forwarding dbus_mgr at+ * the moment)+ */+ ISC_LANG_ENDDECLS  #endif /* DNS_RBT_H */--- bind-9.3.2b1/lib/isc/unix/socket.c.dbus	2005-08-25 00:32:55.000000000 -0400+++ bind-9.3.2b1/lib/isc/unix/socket.c	2005-10-07 13:40:03.000000000 -0400@@ -148,6 +148,11 @@ 	ISC_LIST(isc_socketevent_t)		recv_list; 	ISC_LIST(isc_socket_newconnev_t)	accept_list; 	isc_socket_connev_t		       *connect_ev;+        +        /* these are used only by isc_sockettype_fd sockets:*/+        isc_socketevent_t      *read_ready_event;+        isc_socketevent_t      *write_ready_event;+        isc_socketevent_t      *selected_event;  	/* 	 * Internal events.  Posted when a descriptor is readable or@@ -304,7 +309,7 @@  static void wakeup_socket(isc_socketmgr_t *manager, int fd, int msg) {-	isc_socket_t *sock;+	isc_socket_t *sock=0L;  	/* 	 * This is a wakeup on a socket.  If the socket is not in the@@ -1266,6 +1271,9 @@ 	sock->connected = 0; 	sock->connecting = 0; 	sock->bound = 0;+	sock->read_ready_event = 0L;+	sock->write_ready_event = 0L;+	sock->selected_event = 0L;  	/* 	 * initialize the lock@@ -1378,13 +1386,16 @@ 	case isc_sockettype_tcp: 		sock->fd = socket(pf, SOCK_STREAM, IPPROTO_TCP); 		break;++	case isc_sockettype_fd:+	        sock->fd = pf; 	}  #ifdef F_DUPFD 	/* 	 * Leave a space for stdio to work in. 	 */-	if (sock->fd >= 0 && sock->fd < 20) {+	if ( (type != isc_sockettype_fd) && (sock->fd >= 0) && (sock->fd < 20) ) { 		int new, tmp; 		new = fcntl(sock->fd, F_DUPFD, 20); 		tmp = errno;@@ -1438,7 +1449,7 @@ 		} 	} -	if (make_nonblock(sock->fd) != ISC_R_SUCCESS) {+	if ((type != isc_sockettype_fd) && (make_nonblock(sock->fd) != ISC_R_SUCCESS)) { 		(void)close(sock->fd); 		free_socket(&sock); 		return (ISC_R_UNEXPECTED);@@ -1706,6 +1717,38 @@ 	isc_task_send(ev->ev_sender, (isc_event_t **)&iev); } +static+isc_event_t *dispatch_read_ready(isc_socketmgr_t *manager, isc_socket_t *sock)+{+    isc_event_t *dev = (isc_event_t*)sock->read_ready_event, *ev;+    +    ev = isc_mem_get(manager->mctx, dev->ev_size);+    memcpy(ev,dev,dev->ev_size);+    ISC_LINK_INIT(ev,ev_link);+    isc_task_send(dev->ev_sender, &ev );+    return (isc_event_t *)sock->selected_event;+}++static+isc_event_t *dispatch_write_ready(isc_socketmgr_t *manager,isc_socket_t *sock)+{+    isc_event_t *dev = (isc_event_t*)sock->write_ready_event, *ev;+    ev = isc_mem_get(manager->mctx, dev->ev_size);+    memcpy(ev,dev,dev->ev_size);+    ISC_LINK_INIT(ev,ev_link);+    isc_task_send(dev->ev_sender, &ev );+    return (isc_event_t *)sock->selected_event;+}++static+void dispatch_selected(isc_socketmgr_t *manager, isc_event_t *dev)+{   isc_event_t *ev;+    ev = isc_mem_get(manager->mctx, dev->ev_size);+    memcpy(ev,dev,dev->ev_size);+    ISC_LINK_INIT(ev,ev_link);+    isc_task_send(dev->ev_sender, &ev );+}+ /*  * Dequeue an item off the given socket's read queue, set the result code  * in the done event to the one provided, and send it to the task it was@@ -2113,6 +2156,7 @@ 	int i; 	isc_socket_t *sock; 	isc_boolean_t unlock_sock;+	isc_event_t *sock_selected = 0L;  	REQUIRE(maxfd <= (int)FD_SETSIZE); @@ -2146,11 +2190,15 @@ 			unlock_sock = ISC_TRUE; 			LOCK(&sock->lock); 			if (!SOCK_DEAD(sock)) {+			    if( sock->type != isc_sockettype_fd )+			    { 				if (sock->listener) 					dispatch_accept(sock); 				else 					dispatch_recv(sock);-			}+			    }else			    +				sock_selected = dispatch_read_ready(manager,sock);+			}			     			FD_CLR(i, &manager->read_fds); 		} 	check_write:@@ -2164,16 +2212,24 @@ 				LOCK(&sock->lock); 			} 			if (!SOCK_DEAD(sock)) {+			    if( sock->type != isc_sockettype_fd )+			    { 				if (sock->connecting) 					dispatch_connect(sock); 				else 					dispatch_send(sock);+			    }else			   +				sock_selected =	dispatch_write_ready(manager,sock); 			} 			FD_CLR(i, &manager->write_fds); 		} 		if (unlock_sock) 			UNLOCK(&sock->lock); 	}+	if( sock_selected != 0L )+	{+	    dispatch_selected(manager, sock_selected);+	} }  #ifdef ISC_PLATFORM_USETHREADS@@ -2192,7 +2248,7 @@ 	int cc; 	fd_set readfds; 	fd_set writefds;-	int msg, fd;+	int msg, fd = -1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -