torture:smb2:replay: extend CHECK_CREATE_OUT() to know leases
[samba.git] / source4 / smbd / service.c
index c9ceef09fe51cef70d0ffeb12b9c0bd1d79a23cb..81ad3c5aabca45d196f7fccdfff7f7715c572dc1 100644 (file)
@@ -21,7 +21,7 @@
 */
 
 #include "includes.h"
-#include "lib/util/dlinklist.h"
+#include "../lib/util/dlinklist.h"
 #include "smbd/process_model.h"
 
 /*
 static struct registered_server {
        struct registered_server *next, *prev;
        const char *service_name;
-       NTSTATUS (*service_init)(struct event_context *, const struct model_ops *);
+       void (*task_init)(struct task_server *);
 } *registered_servers;
 
 /*
   register a server service. 
 */
 NTSTATUS register_server_service(const char *name,
-                                NTSTATUS (*service_init)(struct event_context *, const struct model_ops *))
+                                void (*task_init)(struct task_server *))
 {
        struct registered_server *srv;
        srv = talloc(talloc_autofree_context(), struct registered_server);
        NT_STATUS_HAVE_NO_MEMORY(srv);
        srv->service_name = name;
-       srv->service_init = service_init;
-       DLIST_ADD_END(registered_servers, srv, struct registered_server *);
+       srv->task_init = task_init;
+       DLIST_ADD_END(registered_servers, srv);
        return NT_STATUS_OK;
 }
 
@@ -53,13 +53,15 @@ NTSTATUS register_server_service(const char *name,
   initialise a server service
 */
 static NTSTATUS server_service_init(const char *name,
-                                   struct event_context *event_ctx,
+                                   struct tevent_context *event_context,
+                                   struct loadparm_context *lp_ctx,
                                    const struct model_ops *model_ops)
 {
        struct registered_server *srv;
        for (srv=registered_servers; srv; srv=srv->next) {
                if (strcasecmp(name, srv->service_name) == 0) {
-                       return srv->service_init(event_ctx, model_ops);
+                       return task_server_startup(event_context, lp_ctx, srv->service_name,
+                                                  model_ops, srv->task_init);
                }
        }
        return NT_STATUS_INVALID_SYSTEM_SERVICE;
@@ -69,7 +71,8 @@ static NTSTATUS server_service_init(const char *name,
 /*
   startup all of our server services
 */
-NTSTATUS server_service_startup(struct event_context *event_ctx, 
+NTSTATUS server_service_startup(struct tevent_context *event_ctx, 
+                               struct loadparm_context *lp_ctx,
                                const char *model, const char **server_services)
 {
        int i;
@@ -80,7 +83,7 @@ NTSTATUS server_service_startup(struct event_context *event_ctx,
                return NT_STATUS_INVALID_PARAMETER;
        }
 
-       model_ops = process_model_startup(event_ctx, model);
+       model_ops = process_model_startup(model);
        if (!model_ops) {
                DEBUG(0,("process_model_startup('%s') failed\n", model));
                return NT_STATUS_INTERNAL_ERROR;
@@ -89,7 +92,7 @@ NTSTATUS server_service_startup(struct event_context *event_ctx,
        for (i=0;server_services[i];i++) {
                NTSTATUS status;
 
-               status = server_service_init(server_services[i], event_ctx, model_ops);
+               status = server_service_init(server_services[i], event_ctx, lp_ctx, model_ops);
                if (!NT_STATUS_IS_OK(status)) {
                        DEBUG(0,("Failed to start service '%s' - %s\n", 
                                 server_services[i], nt_errstr(status)));