r14096: setup a service task for smbsrv and dcesrv
authorStefan Metzmacher <metze@samba.org>
Thu, 9 Mar 2006 20:36:01 +0000 (20:36 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:56:50 +0000 (13:56 -0500)
metze
(This used to be commit 7ad522c7acfe276d08bf59e851697fe93fa622db)

source4/rpc_server/dcerpc_server.c
source4/smb_server/smb_server.c

index ab40a642c4c0a6dd17317972bc778d9bf2b24ba4..da0bc8fd6fd980e1db6ace295d7a3e011e1bb40c 100644 (file)
@@ -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 @@ const struct dcesrv_critical_sizes *dcerpc_module_version(void)
 }
 
 /*
-  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,31 +1296,44 @@ static NTSTATUS dcesrv_init(struct event_context *event_context, const struct mo
        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)
index ac87cc14e0d113b00e49f46121e3b7d2a33455a9..f47063f945d0013874af8bc4862d551ba879c1ed 100644 (file)
@@ -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 @@ static NTSTATUS smb_add_socket(struct event_context *event_context,
 }
 
 /*
-  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,16 +202,28 @@ static NTSTATUS smbsrv_init(struct event_context *event_context, const struct mo
                */
                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 */