Remove useless layer of indirection, where every service called
[jelmer/samba4-debian.git] / source / dsdb / repl / drepl_service.c
index 17690d135d0aa7af25935ba20879057a995c9188..3375059e99e00e58976f4a0af4e59105ad4dcd63 100644 (file)
@@ -6,7 +6,7 @@
     
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,8 +15,7 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
    
 */
 
 #include "librpc/gen_ndr/ndr_misc.h"
 #include "librpc/gen_ndr/ndr_drsuapi.h"
 #include "librpc/gen_ndr/ndr_drsblobs.h"
+#include "param/param.h"
 
 static WERROR dreplsrv_init_creds(struct dreplsrv_service *service)
 {
        NTSTATUS status;
 
-       status = auth_system_session_info(service, &service->system_session_info);
+       status = auth_system_session_info(service, service->task->lp_ctx, 
+                                         &service->system_session_info);
        if (!NT_STATUS_IS_OK(status)) {
                return ntstatus_to_werror(status);
        }
@@ -45,12 +46,12 @@ static WERROR dreplsrv_init_creds(struct dreplsrv_service *service)
        return WERR_OK;
 }
 
-static WERROR dreplsrv_connect_samdb(struct dreplsrv_service *service)
+static WERROR dreplsrv_connect_samdb(struct dreplsrv_service *service, struct loadparm_context *lp_ctx)
 {
        const struct GUID *ntds_guid;
        struct drsuapi_DsBindInfo28 *bind_info28;
 
-       service->samdb = samdb_connect(service, service->system_session_info);
+       service->samdb = samdb_connect(service, lp_ctx, service->system_session_info);
        if (!service->samdb) {
                return WERR_DS_SERVICE_UNAVAILABLE;
        }
@@ -116,8 +117,9 @@ static void dreplsrv_task_init(struct task_server *task)
 {
        WERROR status;
        struct dreplsrv_service *service;
+       uint32_t periodic_startup_interval;
 
-       switch (lp_server_role()) {
+       switch (lp_server_role(task->lp_ctx)) {
        case ROLE_STANDALONE:
                task_server_terminate(task, "dreplsrv: no DSDB replication required in standalone configuration");
                return;
@@ -148,7 +150,7 @@ static void dreplsrv_task_init(struct task_server *task)
                return;
        }
 
-       status = dreplsrv_connect_samdb(service);
+       status = dreplsrv_connect_samdb(service, task->lp_ctx);
        if (!W_ERROR_IS_OK(status)) {
                task_server_terminate(task, talloc_asprintf(task,
                                      "dreplsrv: Failed to connect to local samdb: %s\n",
@@ -164,9 +166,10 @@ static void dreplsrv_task_init(struct task_server *task)
                return;
        }
 
-       service->periodic.interval      = lp_parm_int(-1, "dreplsrv", "periodic_interval", 300); /* in seconds */
+       periodic_startup_interval       = lp_parm_int(task->lp_ctx, NULL, "dreplsrv", "periodic_startup_interval", 15); /* in seconds */
+       service->periodic.interval      = lp_parm_int(task->lp_ctx, NULL, "dreplsrv", "periodic_interval", 300); /* in seconds */
 
-       status = dreplsrv_periodic_schedule(service, service->periodic.interval);
+       status = dreplsrv_periodic_schedule(service, periodic_startup_interval);
        if (!W_ERROR_IS_OK(status)) {
                task_server_terminate(task, talloc_asprintf(task,
                                      "dreplsrv: Failed to periodic schedule: %s\n",
@@ -177,18 +180,10 @@ static void dreplsrv_task_init(struct task_server *task)
        irpc_add_name(task->msg_ctx, "dreplsrv");
 }
 
-/*
-  initialise the dsdb replicator service
- */
-static NTSTATUS dreplsrv_init(struct event_context *event_ctx, const struct model_ops *model_ops)
-{
-       return task_server_startup(event_ctx, model_ops, dreplsrv_task_init);
-}
-
 /*
   register ourselves as a available server
 */
 NTSTATUS server_service_drepl_init(void)
 {
-       return register_server_service("drepl", dreplsrv_init);
+       return register_server_service("drepl", dreplsrv_task_init);
 }