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

📄 bind-9.3.3rc2-dbus.patch

📁 非常好的dns解析软件
💻 PATCH
📖 第 1 页 / 共 2 页
字号:
--- bind-9.3.3rc2/lib/dns/forward.c.dbus	2005-03-17 04:58:30.000000000 +0100+++ bind-9.3.3rc2/lib/dns/forward.c	2006-09-18 10:08:37.000000000 +0200@@ -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.3rc2/lib/dns/include/dns/forward.h.dbus	2005-03-17 04:58:31.000000000 +0100+++ bind-9.3.3rc2/lib/dns/include/dns/forward.h	2006-09-18 10:08:37.000000000 +0200@@ -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.3rc2/lib/dns/include/dns/rbt.h.dbus	2004-10-11 07:55:51.000000000 +0200+++ bind-9.3.3rc2/lib/dns/include/dns/rbt.h	2006-09-18 10:08:37.000000000 +0200@@ -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.3rc2/lib/dns/rbt.c.dbus	2005-06-18 03:03:24.000000000 +0200+++ bind-9.3.3rc2/lib/dns/rbt.c	2006-09-18 10:08:37.000000000 +0200@@ -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.3rc2/lib/isc/include/isc/socket.h.dbus	2004-03-08 10:04:53.000000000 +0100+++ bind-9.3.3rc2/lib/isc/include/isc/socket.h	2006-09-18 10:08:37.000000000 +0200@@ -136,6 +136,10 @@ #define ISC_SOCKEVENT_NEWCONN	(ISC_EVENTCLASS_SOCKET + 3) #define ISC_SOCKEVENT_CONNECT	(ISC_EVENTCLASS_SOCKET + 4) +#define ISC_SOCKEVENT_READ_READY  (ISC_EVENTCLASS_SOCKET + 5)+#define ISC_SOCKEVENT_WRITE_READY (ISC_EVENTCLASS_SOCKET + 6)+#define ISC_SOCKEVENT_SELECTED    (ISC_EVENTCLASS_SOCKET + 7)+ /*  * Internal events.  */@@ -144,7 +148,8 @@  typedef enum { 	isc_sockettype_udp = 1,-	isc_sockettype_tcp = 2+	isc_sockettype_tcp = 2,+	isc_sockettype_fd  = 8 } isc_sockettype_t;  /*@@ -699,6 +704,30 @@  *	'sock' is a valid socket.  */ +isc_socketevent_t*+isc_socket_fd_handle_reads( isc_socket_t *sock, isc_socketevent_t *dev );+/* register the "dev" event to be sent when the isc_sockettype_fd sock + * was select()-ed for read. If there is already an event registered, it+ * is returned, otherwise 0 is returned. If dev is 0, removes any existing+ * registered event.+ */+ +isc_socketevent_t*+isc_socket_fd_handle_writes( isc_socket_t *sock, isc_socketevent_t *dev );+/* register the "dev" event to be sent when the isc_sockettype_fd sock + * was select()-ed for write. If there is already an event registered, it+ * is returned, otherwise 0 is returned. If dev is 0, removes any existing+ * registered event.+ */++isc_socketevent_t*+isc_socket_fd_handle_selected( isc_socket_t *sock, isc_socketevent_t *dev );+/* register the "dev" event to be sent when ALL isc_sockettype_fd sockets + * have been select()-ed . If there is already an event registered, it+ * is returned, otherwise 0 is returned. If dev is 0, removes any existing+ * registered event.+ */+ ISC_LANG_ENDDECLS  #endif /* ISC_SOCKET_H */--- bind-9.3.3rc2/lib/isc/unix/socket.c.dbus	2006-05-19 04:53:36.000000000 +0200+++ bind-9.3.3rc2/lib/isc/unix/socket.c	2006-09-18 10:08:37.000000000 +0200@@ -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@@ -1289,6 +1294,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@@ -1401,13 +1409,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;@@ -1461,7 +1472,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);@@ -1729,6 +1740,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@@ -2136,6 +2179,7 @@ 	int i; 	isc_socket_t *sock; 	isc_boolean_t unlock_sock;+	isc_event_t *sock_selected = 0L;  	REQUIRE(maxfd <= (int)FD_SETSIZE); @@ -2169,11 +2213,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:@@ -2187,16 +2235,24 @@ 				LOCK(&sock->lock); 			} 			if (!SOCK_DEAD(sock)) {+			    if( sock->type != isc_sockettype_fd )+			    { 				if (sock->connecting) 					dispatch_connect(sock); 				else 					dispatch_send(sock);

⌨️ 快捷键说明

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