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) {