svn commit: samba r14096 - in branches/SAMBA_4_0/source: rpc_server smb_server

metze at samba.org metze at samba.org
Thu Mar 9 20:36:02 GMT 2006


Author: metze
Date: 2006-03-09 20:36:01 +0000 (Thu, 09 Mar 2006)
New Revision: 14096

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=14096

Log:
setup a service task for smbsrv and dcesrv

metze
Modified:
   branches/SAMBA_4_0/source/rpc_server/dcerpc_server.c
   branches/SAMBA_4_0/source/smb_server/smb_server.c


Changeset:
Modified: branches/SAMBA_4_0/source/rpc_server/dcerpc_server.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/dcerpc_server.c	2006-03-09 20:30:36 UTC (rev 14095)
+++ branches/SAMBA_4_0/source/rpc_server/dcerpc_server.c	2006-03-09 20:36:01 UTC (rev 14096)
@@ -27,6 +27,7 @@
 #include "dlinklist.h"
 #include "rpc_server/dcerpc_server.h"
 #include "lib/events/events.h"
+#include "smbd/service_task.h"
 #include "smbd/service_stream.h"
 #include "smbd/service.h"
 #include "system/filesys.h"
@@ -1272,18 +1273,20 @@
 }
 
 /*
-  initialise the dcerpc server context 
+  open the dcerpc server sockets
 */
-static NTSTATUS dcesrv_init(struct event_context *event_context, const struct model_ops *model_ops)
+static void dcesrv_task_init(struct task_server *task)
 {
 	NTSTATUS status;
 	struct dcesrv_context *dce_ctx;
 	struct dcesrv_endpoint *e;
 
-	status = dcesrv_init_context(event_context,
+	task_server_set_title(task, "task[dcesrv]");
+
+	status = dcesrv_init_context(task->event_ctx,
 				     lp_dcerpc_endpoint_servers(),
 				     &dce_ctx);
-	NT_STATUS_NOT_OK_RETURN(status);
+	if (!NT_STATUS_IS_OK(status)) goto failed;
 
 	/* Make sure the directory for NCALRPC exists */
 	if (!directory_exist(lp_ncalrpc_dir())) {
@@ -1293,33 +1296,46 @@
 	for (e=dce_ctx->endpoint_list;e;e=e->next) {
 		switch (e->ep_description->transport) {
 		case NCACN_UNIX_STREAM:
-			status = dcesrv_add_ep_unix(dce_ctx, e, event_context, model_ops);
-			NT_STATUS_NOT_OK_RETURN(status);
+			status = dcesrv_add_ep_unix(dce_ctx, e, task->event_ctx, task->model_ops);
+			if (!NT_STATUS_IS_OK(status)) goto failed;
 			break;
 		
 		case NCALRPC:
-			status = dcesrv_add_ep_ncalrpc(dce_ctx, e, event_context, model_ops);
-			NT_STATUS_NOT_OK_RETURN(status);
+			status = dcesrv_add_ep_ncalrpc(dce_ctx, e, task->event_ctx, task->model_ops);
+			if (!NT_STATUS_IS_OK(status)) goto failed;
 			break;
 
 		case NCACN_IP_TCP:
-			status = dcesrv_add_ep_tcp(dce_ctx, e, event_context, model_ops);
-			NT_STATUS_NOT_OK_RETURN(status);
+			status = dcesrv_add_ep_tcp(dce_ctx, e, task->event_ctx, task->model_ops);
+			if (!NT_STATUS_IS_OK(status)) goto failed;
 			break;
 			
 		case NCACN_NP:
-/*			FIXME: status = dcesrv_add_ep_np(dce_ctx, e, event_context, model_ops);
-			NT_STATUS_NOT_OK_RETURN(status); */
-			break;
+/*			FIXME: status = dcesrv_add_ep_np(dce_ctx, e, task->event_ctx, task->model_ops);
+			if (!NT_STATUS_IS_OK(status)) goto failed;
+*/			break;
 
 		default:
-			return NT_STATUS_NOT_SUPPORTED;
+			status = NT_STATUS_NOT_SUPPORTED;
+			if (!NT_STATUS_IS_OK(status)) goto failed;
 		}
 	}
 
-	return NT_STATUS_OK;	
+	return;
+failed:
+	task_server_terminate(task, "Failed to startup dcerpc server task");	
 }
 
+/*
+  called on startup of the smb server service It's job is to start
+  listening on all configured sockets
+*/
+static NTSTATUS dcesrv_init(struct event_context *event_context, 
+			    const struct model_ops *model_ops)
+{	
+	return task_server_startup(event_context, model_ops, dcesrv_task_init);
+}
+
 NTSTATUS server_service_rpc_init(void)
 {
 	init_module_fn static_init[] = STATIC_dcerpc_server_MODULES;

Modified: branches/SAMBA_4_0/source/smb_server/smb_server.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb_server.c	2006-03-09 20:30:36 UTC (rev 14095)
+++ branches/SAMBA_4_0/source/smb_server/smb_server.c	2006-03-09 20:36:01 UTC (rev 14096)
@@ -20,6 +20,7 @@
 */
 
 #include "includes.h"
+#include "smbd/service_task.h"
 #include "smbd/service_stream.h"
 #include "smbd/service.h"
 #include "smb_server/smb_server.h"
@@ -183,13 +184,14 @@
 }
 
 /*
-  called on startup of the smb server service It's job is to start
-  listening on all configured SMB server sockets
+  open the smb server sockets
 */
-static NTSTATUS smbsrv_init(struct event_context *event_context, const struct model_ops *model_ops)
+static void smbsrv_task_init(struct task_server *task)
 {	
 	NTSTATUS status;
 
+	task_server_set_title(task, "task[smbsrv]");
+
 	if (lp_interfaces() && lp_bind_interfaces_only()) {
 		int num_interfaces = iface_count();
 		int i;
@@ -200,18 +202,30 @@
 		*/
 		for(i = 0; i < num_interfaces; i++) {
 			const char *address = iface_n_ip(i);
-			status = smb_add_socket(event_context, model_ops, address);
-			NT_STATUS_NOT_OK_RETURN(status);
+			status = smb_add_socket(task->event_ctx, task->model_ops, address);
+			if (!NT_STATUS_IS_OK(status)) goto failed;
 		}
 	} else {
 		/* Just bind to lp_socket_address() (usually 0.0.0.0) */
-		status = smb_add_socket(event_context, model_ops, lp_socket_address());
-		NT_STATUS_NOT_OK_RETURN(status);
+		status = smb_add_socket(task->event_ctx, task->model_ops, lp_socket_address());
+		if (!NT_STATUS_IS_OK(status)) goto failed;
 	}
 
-	return NT_STATUS_OK;
+	return;
+failed:
+	task_server_terminate(task, "Failed to startup smb server task");	
 }
 
+/*
+  called on startup of the smb server service It's job is to start
+  listening on all configured sockets
+*/
+static NTSTATUS smbsrv_init(struct event_context *event_context, 
+			    const struct model_ops *model_ops)
+{	
+	return task_server_startup(event_context, model_ops, smbsrv_task_init);
+}
+
 /* called at smbd startup - register ourselves as a server service */
 NTSTATUS server_service_smb_init(void)
 {



More information about the samba-cvs mailing list