[PATCH] s4:kdc - Merged kdc_add_kdc_socket() and kdc_add_kpasswd_socket().

Endi S. Dewata edewata at redhat.com
Mon Nov 23 21:28:11 MST 2009


---
 source4/kdc/kdc.c |  102 ++++++++++++++---------------------------------------
 1 files changed, 27 insertions(+), 75 deletions(-)

diff --git a/source4/kdc/kdc.c b/source4/kdc/kdc.c
index 2288e38..5700e5b 100644
--- a/source4/kdc/kdc.c
+++ b/source4/kdc/kdc.c
@@ -412,13 +412,16 @@ static const struct stream_server_ops kpasswdd_tcp_stream_ops = {
 /*
   start listening on the given address
 */
-static NTSTATUS kdc_add_kdc_socket(struct kdc_server *kdc,
+static NTSTATUS kdc_add_socket(struct kdc_server *kdc,
 			       const struct model_ops *model_ops,
+			       const char *name,
 			       const char *address,
-			       uint16_t kdc_port)
+			       uint16_t port,
+			       const struct stream_server_ops *tcp_stream_ops,
+			       kdc_process_fn_t process)
 {
  	struct kdc_socket *kdc_socket;
-	struct socket_address *kdc_address;
+	struct socket_address *socket_address;
 	NTSTATUS status;
 
 	kdc_socket = talloc(kdc, struct kdc_socket);
@@ -432,22 +435,22 @@ static NTSTATUS kdc_add_kdc_socket(struct kdc_server *kdc,
 
 	kdc_socket->kdc = kdc;
 	kdc_socket->send_queue = NULL;
-	kdc_socket->process = kdc_process;
+	kdc_socket->process = process;
 
 	talloc_steal(kdc_socket, kdc_socket->sock);
 
 	kdc_socket->fde = event_add_fd(kdc->task->event_ctx, kdc, 
-				       socket_get_fd(kdc_socket->sock), EVENT_FD_READ,
-				       kdc_socket_handler, kdc_socket);
-
-	kdc_address = socket_address_from_strings(kdc_socket, kdc_socket->sock->backend_name, 
-						  address, kdc_port);
-	NT_STATUS_HAVE_NO_MEMORY(kdc_address);
+					   socket_get_fd(kdc_socket->sock), EVENT_FD_READ,
+					   kdc_socket_handler, kdc_socket);
+	
+	socket_address = socket_address_from_strings(kdc_socket, kdc_socket->sock->backend_name, 
+						      address, port);
+	NT_STATUS_HAVE_NO_MEMORY_AND_FREE(socket_address, kdc_socket);
 
-	status = socket_listen(kdc_socket->sock, kdc_address, 0, 0);
+	status = socket_listen(kdc_socket->sock, socket_address, 0, 0);
 	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0,("Failed to bind to %s:%d UDP for kdc - %s\n", 
-			 address, kdc_port, nt_errstr(status)));
+		DEBUG(0,("Failed to bind to %s:%d UDP for %s - %s\n", 
+			 address, port, name, nt_errstr(status)));
 		talloc_free(kdc_socket);
 		return status;
 	}
@@ -455,13 +458,13 @@ static NTSTATUS kdc_add_kdc_socket(struct kdc_server *kdc,
 	status = stream_setup_socket(kdc->task->event_ctx, 
 				     kdc->task->lp_ctx,
 				     model_ops, 
-				     &kdc_tcp_stream_ops, 
-				     "ip", address, &kdc_port, 
+				     tcp_stream_ops, 
+				     "ip", address, &port, 
 				     lp_socket_options(kdc->task->lp_ctx), 
 				     kdc);
 	if (!NT_STATUS_IS_OK(status)) {
 		DEBUG(0,("Failed to bind to %s:%u TCP - %s\n",
-			 address, kdc_port, nt_errstr(status)));
+			 address, port, nt_errstr(status)));
 		talloc_free(kdc_socket);
 		return status;
 	}
@@ -469,63 +472,6 @@ static NTSTATUS kdc_add_kdc_socket(struct kdc_server *kdc,
 	return NT_STATUS_OK;
 }
 
-static NTSTATUS kdc_add_kpasswd_socket(struct kdc_server *kdc,
-			       const struct model_ops *model_ops,
-			       const char *address,
-			       uint16_t kpasswd_port)
-{
- 	struct kdc_socket *kpasswd_socket;
-	struct socket_address *kpasswd_address;
-	NTSTATUS status;
-
-	kpasswd_socket = talloc(kdc, struct kdc_socket);
-	NT_STATUS_HAVE_NO_MEMORY(kpasswd_socket);
-
-	status = socket_create("ip", SOCKET_TYPE_DGRAM, &kpasswd_socket->sock, 0);
-	if (!NT_STATUS_IS_OK(status)) {
-		talloc_free(kpasswd_socket);
-		return status;
-	}
-
-	kpasswd_socket->kdc = kdc;
-	kpasswd_socket->send_queue = NULL;
-	kpasswd_socket->process = kpasswdd_process;
-
-	talloc_steal(kpasswd_socket, kpasswd_socket->sock);
-
-	kpasswd_socket->fde = event_add_fd(kdc->task->event_ctx, kdc, 
-					   socket_get_fd(kpasswd_socket->sock), EVENT_FD_READ,
-					   kdc_socket_handler, kpasswd_socket);
-	
-	kpasswd_address = socket_address_from_strings(kpasswd_socket, kpasswd_socket->sock->backend_name, 
-						      address, kpasswd_port);
-	NT_STATUS_HAVE_NO_MEMORY(kpasswd_address);
-
-	status = socket_listen(kpasswd_socket->sock, kpasswd_address, 0, 0);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0,("Failed to bind to %s:%d UDP for kpasswd - %s\n", 
-			 address, kpasswd_port, nt_errstr(status)));
-		talloc_free(kpasswd_socket);
-		return status;
-	}
-
-	status = stream_setup_socket(kdc->task->event_ctx, 
-				     kdc->task->lp_ctx,
-				     model_ops, 
-				     &kpasswdd_tcp_stream_ops, 
-				     "ip", address, &kpasswd_port, 
-				     lp_socket_options(kdc->task->lp_ctx), 
-				     kdc);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0,("Failed to bind to %s:%u TCP - %s\n",
-			 address, kpasswd_port, nt_errstr(status)));
-		talloc_free(kpasswd_socket);
-		return status;
-	}
-
-	return NT_STATUS_OK;
-}
-
 
 /*
   setup our listening sockets on the configured network interfaces
@@ -556,12 +502,18 @@ static NTSTATUS kdc_startup_interfaces(struct kdc_server *kdc, struct loadparm_c
 		uint16_t kpasswd_port = lp_kpasswd_port(lp_ctx);
 
 		if (kdc_port) {
-			status = kdc_add_kdc_socket(kdc, model_ops, address, kdc_port);
+			status = kdc_add_socket(kdc, model_ops,
+					"kdc", address, kdc_port,
+					&kdc_tcp_stream_ops, 
+					kdc_process);
 			NT_STATUS_NOT_OK_RETURN(status);
 		}
 
 		if (kpasswd_port) {
-			status = kdc_add_kpasswd_socket(kdc, model_ops, address, kpasswd_port);
+			status = kdc_add_socket(kdc, model_ops,
+					"kpasswd", address, kpasswd_port,
+					&kpasswdd_tcp_stream_ops,
+					kpasswdd_process);
 			NT_STATUS_NOT_OK_RETURN(status);
 		}
 	}
-- 
1.6.0.6


------=_Part_21159_1503209990.1259047362063
Content-Type: application/mbox;
	name=0005-s4-kdc-smbd-Merged-kdc_tcp_accept-and-kpasswdd_t.patch
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename=0005-s4-kdc-smbd-Merged-kdc_tcp_accept-and-kpasswdd_t.patch



More information about the samba-technical mailing list