[SCM] Samba Shared Repository - branch master updated

Gary Lockyer gary at samba.org
Fri Nov 2 02:48:03 UTC 2018


The branch, master has been updated
       via  28826ec WHATSNEW: KDC prefork support
       via  325e928 kdc: Update debug calls
       via  7366de3 source4 smbd kdc: allow the kdc to run in prefork
       via  99aea42 source4 smdb: Add a post fork hook to the service API
       via  d6777a6 source4 smbd: Make the service_details structure constant.
       via  4731c33 windbindd: reword error message
      from  775054a replmd: Single DB operation per source object during link processing

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 28826ec49cc9f90ec514e9398d9bcf7f46a99a56
Author: Gary Lockyer <gary at catalyst.net.nz>
Date:   Wed Sep 19 15:01:22 2018 +1200

    WHATSNEW: KDC prefork support
    
    Signed-off-by: Gary Lockyer <gary at catalyst.net.nz>
    
    Autobuild-User(master): Gary Lockyer <gary at samba.org>
    Autobuild-Date(master): Fri Nov  2 03:47:57 CET 2018 on sn-devel-144

commit 325e928db94bb6292cd819e92bb5ec1525c81343
Author: Gary Lockyer <gary at catalyst.net.nz>
Date:   Tue Aug 28 07:46:59 2018 +1200

    kdc: Update debug calls
    
    Signed-off-by: Gary Lockyer <gary at catalyst.net.nz>

commit 7366de3310046b246f3c8e88309d55a18a3edfd5
Author: Gary Lockyer <gary at catalyst.net.nz>
Date:   Thu Aug 23 11:26:40 2018 +1200

    source4 smbd kdc: allow the kdc to run in prefork
    
    Modify the kdc to allow it to run in the prefork process model. The
    task_init function has been split up and code moved into the post_fork
    function.
    
    Signed-off-by: Gary Lockyer <gary at catalyst.net.nz>

commit 99aea42520fc10564dbba013c365adb3059febad
Author: Gary Lockyer <gary at catalyst.net.nz>
Date:   Thu Aug 23 09:35:52 2018 +1200

    source4 smdb: Add a post fork hook to the service API
    
    Add a post fork hook to the service API this will be called:
    
     - standard process model
       immediately after the task_init.
    
    - single process model
      immediately after the task_init
    
    - prefork process model, inhibit_pre_fork = true
      immediately after the task_init
    
    - prefork process model, inhibit_pre_fork = false
      after each service worker has forked. It is not run on the service
      master process.
    
    The post fork hook is not called in the standard model if a new process
    is forked on a new connection. It is instead called immediately after
    the task_init.
    
    The task_init hook has been changed to return an error code. This ensures
    the post_fork code is only run if the task_init code completed successfully.
    
    Signed-off-by: Gary Lockyer <gary at catalyst.net.nz>

commit d6777a66c0dbd0c356059644b57070d4587d83ea
Author: Gary Lockyer <gary at catalyst.net.nz>
Date:   Thu Aug 23 09:29:56 2018 +1200

    source4 smbd: Make the service_details structure constant.
    
    Make the service_details structure a static const.
    
    Signed-off-by: Gary Lockyer <gary at catalyst.net.nz>

commit 4731c3382122eac2894fda764891c4903211592f
Author: Gary Lockyer <gary at catalyst.net.nz>
Date:   Mon Aug 27 16:43:00 2018 +1200

    windbindd: reword error message
    
    Reword the asprintf() out of memory message to make it clear where the
    issue is.
    
    Signed-off-by: Gary Lockyer <gary at catalyst.net.nz>

-----------------------------------------------------------------------

Summary of changes:
 WHATSNEW.txt                        |  5 +++
 file_server/file_server.c           | 14 +++---
 source3/winbindd/winbindd_cm.c      |  3 +-
 source4/cldap_server/cldap_server.c | 25 ++++++-----
 source4/dns_server/dns_server.c     | 37 ++++++++-------
 source4/dsdb/dns/dns_update.c       | 22 ++++-----
 source4/dsdb/kcc/kcc_service.c      | 25 ++++++-----
 source4/dsdb/repl/drepl_service.c   | 29 ++++++------
 source4/echo_server/echo_server.c   | 20 +++++----
 source4/kdc/kdc-heimdal.c           | 90 +++++++++++++++++++++----------------
 source4/kdc/kdc-service-mit.c       |  9 ++--
 source4/ldap_server/ldap_server.c   | 40 ++++++++++++-----
 source4/nbt_server/nbt_server.c     | 24 +++++-----
 source4/ntp_signd/ntp_signd.c       | 26 +++++++----
 source4/rpc_server/service_rpc.c    | 15 ++++---
 source4/smb_server/service_smb.c    | 16 ++++---
 source4/smbd/process_model.h        |  2 +-
 source4/smbd/process_prefork.c      | 31 ++++++++++---
 source4/smbd/process_single.c       |  9 ++--
 source4/smbd/process_standard.c     | 14 +++++-
 source4/smbd/service.c              |  8 +---
 source4/smbd/service.h              | 26 ++++++++++-
 source4/smbd/service_task.c         | 20 +++++----
 source4/web_server/web_server.c     | 29 ++++++++----
 source4/winbind/winbindd.c          | 15 ++++---
 source4/wrepl_server/wrepl_server.c | 25 ++++++-----
 26 files changed, 365 insertions(+), 214 deletions(-)


Changeset truncated at 500 lines:

diff --git a/WHATSNEW.txt b/WHATSNEW.txt
index bdc3df7..7a7a88d 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -27,6 +27,11 @@ rebuild the Group Policy Objects from the XML after generalization.
 (The administrator needs to correct the values of XML entities between
 the backup and restore to account for the change in domain).
 
+kdc prefork
+-----------
+
+The KDC now supports the pre-fork process model and worker processes will be
+forked for the KDC when the pre-fork process model is selected for samba.
 
 REMOVED FEATURES
 ================
diff --git a/file_server/file_server.c b/file_server/file_server.c
index 1b6a01b..4c21669 100644
--- a/file_server/file_server.c
+++ b/file_server/file_server.c
@@ -53,7 +53,7 @@ static void file_server_smbd_done(struct tevent_req *subreq)
 /*
   startup a copy of smbd as a child daemon
 */
-static void s3fs_task_init(struct task_server *task)
+static NTSTATUS s3fs_task_init(struct task_server *task)
 {
 	struct tevent_req *subreq;
 	const char *smbd_path;
@@ -78,17 +78,19 @@ static void s3fs_task_init(struct task_server *task)
 	if (!winbind_off()) {
 		DEBUG(0,("Failed to re-disable recursive winbindd calls after forking smbd\n"));
 		task_server_terminate(task, "Failed to re-disable recursive winbindd calls", true);
-		return;
+		return NT_STATUS_UNSUCCESSFUL;
 	}
 	if (subreq == NULL) {
 		DEBUG(0, ("Failed to start smbd as child daemon\n"));
 		task_server_terminate(task, "Failed to startup s3fs smb task", true);
-		return;
+		return NT_STATUS_UNSUCCESSFUL;
 	}
 
 	tevent_req_set_callback(subreq, file_server_smbd_done, task);
 
 	DEBUG(5,("Started file server child smbd\n"));
+
+	return NT_STATUS_OK;
 }
 
 /* called at smbd startup - register ourselves as a server service */
@@ -98,7 +100,9 @@ NTSTATUS server_service_s3fs_init(TALLOC_CTX *ctx)
 {
 	struct service_details details = {
 		.inhibit_fork_on_accept = true,
-		.inhibit_pre_fork = true
+		.inhibit_pre_fork = true,
+		.task_init = s3fs_task_init,
+		.post_fork = NULL
 	};
-	return register_server_service(ctx, "s3fs", s3fs_task_init, &details);
+	return register_server_service(ctx, "s3fs", &details);
 }
diff --git a/source3/winbindd/winbindd_cm.c b/source3/winbindd/winbindd_cm.c
index f3f8d54..2e98c76 100644
--- a/source3/winbindd/winbindd_cm.c
+++ b/source3/winbindd/winbindd_cm.c
@@ -241,7 +241,8 @@ static bool fork_child_dc_connect(struct winbindd_domain *domain)
 
 	if (!override_logfile) {
 		if (asprintf(&lfile, "%s/log.winbindd-dc-connect", get_dyn_LOGFILEBASE()) == -1) {
-			DEBUG(0, ("fork_child_dc_connect: out of memory.\n"));
+			DBG_ERR("fork_child_dc_connect: "
+				"out of memory in asprintf().\n");
 			_exit(1);
 		}
 	}
diff --git a/source4/cldap_server/cldap_server.c b/source4/cldap_server/cldap_server.c
index d93ac0b..5118326 100644
--- a/source4/cldap_server/cldap_server.c
+++ b/source4/cldap_server/cldap_server.c
@@ -185,7 +185,7 @@ static NTSTATUS cldapd_startup_interfaces(struct cldapd_server *cldapd, struct l
 /*
   startup the cldapd task
 */
-static void cldapd_task_init(struct task_server *task)
+static NTSTATUS cldapd_task_init(struct task_server *task)
 {
 	struct cldapd_server *cldapd;
 	NTSTATUS status;
@@ -195,18 +195,18 @@ static void cldapd_task_init(struct task_server *task)
 
 	if (iface_list_count(ifaces) == 0) {
 		task_server_terminate(task, "cldapd: no network interfaces configured", false);
-		return;
+		return NT_STATUS_UNSUCCESSFUL;
 	}
 
 	switch (lpcfg_server_role(task->lp_ctx)) {
 	case ROLE_STANDALONE:
 		task_server_terminate(task, "cldap_server: no CLDAP server required in standalone configuration", 
 				      false);
-		return;
+		return NT_STATUS_INVALID_DOMAIN_ROLE;
 	case ROLE_DOMAIN_MEMBER:
 		task_server_terminate(task, "cldap_server: no CLDAP server required in member server configuration",
 				      false);
-		return;
+		return NT_STATUS_INVALID_DOMAIN_ROLE;
 	case ROLE_ACTIVE_DIRECTORY_DC:
 		/* Yes, we want an CLDAP server */
 		break;
@@ -217,7 +217,7 @@ static void cldapd_task_init(struct task_server *task)
 	cldapd = talloc(task, struct cldapd_server);
 	if (cldapd == NULL) {
 		task_server_terminate(task, "cldapd: out of memory", true);
-		return;
+		return NT_STATUS_NO_MEMORY;
 	}
 
 	cldapd->task = task;
@@ -229,17 +229,19 @@ static void cldapd_task_init(struct task_server *task)
 				       0);
 	if (cldapd->samctx == NULL) {
 		task_server_terminate(task, "cldapd failed to open samdb", true);
-		return;
+		return NT_STATUS_UNSUCCESSFUL;
 	}
 
 	/* start listening on the configured network interfaces */
 	status = cldapd_startup_interfaces(cldapd, task->lp_ctx, ifaces);
 	if (!NT_STATUS_IS_OK(status)) {
 		task_server_terminate(task, "cldapd failed to setup interfaces", true);
-		return;
+		return status;
 	}
 
 	irpc_add_name(task->msg_ctx, "cldap_server");
+
+	return NT_STATUS_OK;
 }
 
 
@@ -248,10 +250,11 @@ static void cldapd_task_init(struct task_server *task)
 */
 NTSTATUS server_service_cldapd_init(TALLOC_CTX *ctx)
 {
-	struct service_details details = {
+	static const struct service_details details = {
 		.inhibit_fork_on_accept = true,
-		.inhibit_pre_fork = true
+		.inhibit_pre_fork = true,
+		.task_init = cldapd_task_init,
+		.post_fork = NULL
 	};
-	return register_server_service(ctx, "cldap", cldapd_task_init,
-				       &details);
+	return register_server_service(ctx, "cldap", &details);
 }
diff --git a/source4/dns_server/dns_server.c b/source4/dns_server/dns_server.c
index 9db1133..43ea881 100644
--- a/source4/dns_server/dns_server.c
+++ b/source4/dns_server/dns_server.c
@@ -790,7 +790,7 @@ static NTSTATUS dns_reload_zones(struct irpc_message *msg,
 	return NT_STATUS_OK;
 }
 
-static void dns_task_init(struct task_server *task)
+static NTSTATUS dns_task_init(struct task_server *task)
 {
 	struct dns_server *dns;
 	NTSTATUS status;
@@ -804,10 +804,10 @@ static void dns_task_init(struct task_server *task)
 	switch (lpcfg_server_role(task->lp_ctx)) {
 	case ROLE_STANDALONE:
 		task_server_terminate(task, "dns: no DNS required in standalone configuration", false);
-		return;
+		return NT_STATUS_INVALID_DOMAIN_ROLE;
 	case ROLE_DOMAIN_MEMBER:
 		task_server_terminate(task, "dns: no DNS required in member server configuration", false);
-		return;
+		return NT_STATUS_INVALID_DOMAIN_ROLE;
 	case ROLE_ACTIVE_DIRECTORY_DC:
 		/* Yes, we want a DNS */
 		break;
@@ -818,7 +818,7 @@ static void dns_task_init(struct task_server *task)
 
 		if (iface_list_count(ifaces) == 0) {
 			task_server_terminate(task, "dns: no network interfaces configured", false);
-			return;
+			return NT_STATUS_UNSUCCESSFUL;
 		}
 	}
 
@@ -827,7 +827,7 @@ static void dns_task_init(struct task_server *task)
 	dns = talloc_zero(task, struct dns_server);
 	if (dns == NULL) {
 		task_server_terminate(task, "dns: out of memory", true);
-		return;
+		return NT_STATUS_NO_MEMORY;
 	}
 
 	dns->task = task;
@@ -835,7 +835,7 @@ static void dns_task_init(struct task_server *task)
 	dns->server_credentials = cli_credentials_init(dns);
 	if (!dns->server_credentials) {
 		task_server_terminate(task, "Failed to init server credentials\n", true);
-		return;
+		return NT_STATUS_UNSUCCESSFUL;
 	}
 
 	dns->samdb = samdb_connect(dns,
@@ -846,7 +846,7 @@ static void dns_task_init(struct task_server *task)
 				   0);
 	if (!dns->samdb) {
 		task_server_terminate(task, "dns: samdb_connect failed", true);
-		return;
+		return NT_STATUS_UNSUCCESSFUL;
 	}
 
 	cli_credentials_set_conf(dns->server_credentials, task->lp_ctx);
@@ -865,7 +865,7 @@ static void dns_task_init(struct task_server *task)
 		TALLOC_FREE(dns_acc);
 		if (!dns_spn) {
 			task_server_terminate(task, "dns: talloc_asprintf failed", true);
-			return;
+			return NT_STATUS_UNSUCCESSFUL;
 		}
 		status = cli_credentials_set_stored_principal(dns->server_credentials, task->lp_ctx, dns_spn);
 		if (!NT_STATUS_IS_OK(status)) {
@@ -874,7 +874,7 @@ static void dns_task_init(struct task_server *task)
 							      "despite finding it in the samdb! %s\n",
 							      nt_errstr(status)),
 					      true);
-			return;
+			return status;
 		}
 	} else {
 		TALLOC_FREE(dns_spn);
@@ -884,48 +884,51 @@ static void dns_task_init(struct task_server *task)
 					      talloc_asprintf(task, "Failed to obtain server credentials, perhaps a standalone server?: %s\n",
 							      nt_errstr(status)),
 					      true);
-			return;
+			return status;
 		}
 	}
 
 	dns->tkeys = tkey_store_init(dns, TKEY_BUFFER_SIZE);
 	if (!dns->tkeys) {
 		task_server_terminate(task, "Failed to allocate tkey storage\n", true);
-		return;
+		return NT_STATUS_NO_MEMORY;
 	}
 
 	status = dns_server_reload_zones(dns);
 	if (!NT_STATUS_IS_OK(status)) {
 		task_server_terminate(task, "dns: failed to load DNS zones", true);
-		return;
+		return status;
 	}
 
 	status = dns_startup_interfaces(dns, ifaces, task->model_ops);
 	if (!NT_STATUS_IS_OK(status)) {
 		task_server_terminate(task, "dns failed to setup interfaces", true);
-		return;
+		return status;
 	}
 
 	/* Setup the IRPC interface and register handlers */
 	status = irpc_add_name(task->msg_ctx, "dnssrv");
 	if (!NT_STATUS_IS_OK(status)) {
 		task_server_terminate(task, "dns: failed to register IRPC name", true);
-		return;
+		return status;
 	}
 
 	status = IRPC_REGISTER(task->msg_ctx, irpc, DNSSRV_RELOAD_DNS_ZONES,
 			       dns_reload_zones, dns);
 	if (!NT_STATUS_IS_OK(status)) {
 		task_server_terminate(task, "dns: failed to setup reload handler", true);
-		return;
+		return status;
 	}
+	return NT_STATUS_OK;
 }
 
 NTSTATUS server_service_dns_init(TALLOC_CTX *ctx)
 {
-	struct service_details details = {
+	static const struct service_details details = {
 		.inhibit_fork_on_accept = true,
 		.inhibit_pre_fork = true,
+		.task_init = dns_task_init,
+		.post_fork = NULL
 	};
-	return register_server_service(ctx, "dns", dns_task_init, &details);
+	return register_server_service(ctx, "dns", &details);
 }
diff --git a/source4/dsdb/dns/dns_update.c b/source4/dsdb/dns/dns_update.c
index de87337..20052f4 100644
--- a/source4/dsdb/dns/dns_update.c
+++ b/source4/dsdb/dns/dns_update.c
@@ -633,14 +633,14 @@ static NTSTATUS dnsupdate_dnsupdate_RODC(struct irpc_message *msg,
 /*
   startup the dns update task
 */
-static void dnsupdate_task_init(struct task_server *task)
+static NTSTATUS dnsupdate_task_init(struct task_server *task)
 {
 	NTSTATUS status;
 	struct dnsupdate_service *service;
 
 	if (lpcfg_server_role(task->lp_ctx) != ROLE_ACTIVE_DIRECTORY_DC) {
 		/* not useful for non-DC */
-		return;
+		return NT_STATUS_INVALID_DOMAIN_ROLE;
 	}
 
 	task_server_set_title(task, "task[dnsupdate]");
@@ -648,7 +648,7 @@ static void dnsupdate_task_init(struct task_server *task)
 	service = talloc_zero(task, struct dnsupdate_service);
 	if (!service) {
 		task_server_terminate(task, "dnsupdate_task_init: out of memory", true);
-		return;
+		return NT_STATUS_NO_MEMORY;
 	}
 	service->task		= task;
 	task->private_data	= service;
@@ -658,7 +658,7 @@ static void dnsupdate_task_init(struct task_server *task)
 		task_server_terminate(task,
 				      "dnsupdate: Failed to obtain server credentials\n",
 				      true);
-		return;
+		return NT_STATUS_UNSUCCESSFUL;
 	}
 
 	service->samdb = samdb_connect(service,
@@ -670,7 +670,7 @@ static void dnsupdate_task_init(struct task_server *task)
 	if (!service->samdb) {
 		task_server_terminate(task, "dnsupdate: Failed to connect to local samdb\n",
 				      true);
-		return;
+		return NT_STATUS_UNSUCCESSFUL;
 	}
 
 	service->confupdate.interval	= lpcfg_parm_int(task->lp_ctx, NULL,
@@ -685,7 +685,7 @@ static void dnsupdate_task_init(struct task_server *task)
 		task_server_terminate(task, talloc_asprintf(task,
 				      "dnsupdate: Failed to confupdate schedule: %s\n",
 							    nt_errstr(status)), true);
-		return;
+		return status;
 	}
 
 	dnsupdate_check_names(service);
@@ -694,7 +694,7 @@ static void dnsupdate_task_init(struct task_server *task)
 		task_server_terminate(task, talloc_asprintf(task,
 				      "dnsupdate: Failed to nameupdate schedule: %s\n",
 							    nt_errstr(status)), true);
-		return;
+		return status;
 	}
 
 	irpc_add_name(task->msg_ctx, "dnsupdate");
@@ -704,6 +704,7 @@ static void dnsupdate_task_init(struct task_server *task)
 
 	/* create the intial file */
 	dnsupdate_rebuild(service);
+	return NT_STATUS_OK;
 
 }
 
@@ -712,10 +713,11 @@ static void dnsupdate_task_init(struct task_server *task)
 */
 NTSTATUS server_service_dnsupdate_init(TALLOC_CTX *ctx)
 {
-	struct service_details details = {
+	static const struct service_details details = {
 		.inhibit_fork_on_accept = true,
 		.inhibit_pre_fork = true,
+		.task_init = dnsupdate_task_init,
+		.post_fork = NULL
 	};
-	return register_server_service(ctx, "dnsupdate", dnsupdate_task_init,
-				       &details);
+	return register_server_service(ctx, "dnsupdate", &details);
 }
diff --git a/source4/dsdb/kcc/kcc_service.c b/source4/dsdb/kcc/kcc_service.c
index 7642378..4710d5b 100644
--- a/source4/dsdb/kcc/kcc_service.c
+++ b/source4/dsdb/kcc/kcc_service.c
@@ -266,7 +266,7 @@ static NTSTATUS kccsrv_replica_get_info(struct irpc_message *msg, struct drsuapi
 /*
   startup the kcc service task
 */
-static void kccsrv_task_init(struct task_server *task)
+static NTSTATUS kccsrv_task_init(struct task_server *task)
 {
 	WERROR status;
 	struct kccsrv_service *service;
@@ -275,10 +275,10 @@ static void kccsrv_task_init(struct task_server *task)
 	switch (lpcfg_server_role(task->lp_ctx)) {
 	case ROLE_STANDALONE:
 		task_server_terminate(task, "kccsrv: no KCC required in standalone configuration", false);
-		return;
+		return NT_STATUS_INVALID_DOMAIN_ROLE;
 	case ROLE_DOMAIN_MEMBER:
 		task_server_terminate(task, "kccsrv: no KCC required in domain member configuration", false);
-		return;
+		return NT_STATUS_INVALID_DOMAIN_ROLE;
 	case ROLE_ACTIVE_DIRECTORY_DC:
 		/* Yes, we want a KCC */
 		break;
@@ -289,7 +289,7 @@ static void kccsrv_task_init(struct task_server *task)
 	service = talloc_zero(task, struct kccsrv_service);
 	if (!service) {
 		task_server_terminate(task, "kccsrv_task_init: out of memory", true);
-		return;
+		return NT_STATUS_NO_MEMORY;
 	}
 	service->task		= task;
 	service->startup_time	= timeval_current();
@@ -301,7 +301,7 @@ static void kccsrv_task_init(struct task_server *task)
 				      talloc_asprintf(task,
 						      "kccsrv: Failed to obtain server credentials: %s\n",
 						      win_errstr(status)), true);
-		return;
+		return werror_to_ntstatus(status);
 	}
 
 	status = kccsrv_connect_samdb(service, task->lp_ctx);
@@ -309,7 +309,7 @@ static void kccsrv_task_init(struct task_server *task)
 		task_server_terminate(task, talloc_asprintf(task,
 				      "kccsrv: Failed to connect to local samdb: %s\n",
 							    win_errstr(status)), true);
-		return;
+		return werror_to_ntstatus(status);
 	}
 
 	status = kccsrv_load_partitions(service);
@@ -317,7 +317,7 @@ static void kccsrv_task_init(struct task_server *task)
 		task_server_terminate(task, talloc_asprintf(task,
 				      "kccsrv: Failed to load partitions: %s\n",
 							    win_errstr(status)), true);
-		return;
+		return werror_to_ntstatus(status);
 	}
 
 	periodic_startup_interval =
@@ -338,13 +338,14 @@ static void kccsrv_task_init(struct task_server *task)
 		task_server_terminate(task, talloc_asprintf(task,
 				      "kccsrv: Failed to periodic schedule: %s\n",
 							    win_errstr(status)), true);
-		return;
+		return werror_to_ntstatus(status);
 	}
 
 	irpc_add_name(task->msg_ctx, "kccsrv");
 
 	IRPC_REGISTER(task->msg_ctx, drsuapi, DRSUAPI_DSEXECUTEKCC, kccsrv_execute_kcc, service);
 	IRPC_REGISTER(task->msg_ctx, drsuapi, DRSUAPI_DSREPLICAGETINFO, kccsrv_replica_get_info, service);
+	return NT_STATUS_OK;
 }
 
 /*
@@ -352,9 +353,11 @@ static void kccsrv_task_init(struct task_server *task)
 */
 NTSTATUS server_service_kcc_init(TALLOC_CTX *ctx)
 {
-	struct service_details details = {
+	static const struct service_details details = {
 		.inhibit_fork_on_accept = true,
-		.inhibit_pre_fork = true
+		.inhibit_pre_fork = true,
+		.task_init = kccsrv_task_init,
+		.post_fork = NULL
 	};
-	return register_server_service(ctx, "kcc", kccsrv_task_init, &details);
+	return register_server_service(ctx, "kcc", &details);
 }
diff --git a/source4/dsdb/repl/drepl_service.c b/source4/dsdb/repl/drepl_service.c
index 10772d4..350ed61 100644
--- a/source4/dsdb/repl/drepl_service.c
+++ b/source4/dsdb/repl/drepl_service.c
@@ -428,7 +428,7 @@ static NTSTATUS dreplsrv_replica_mod(struct irpc_message *msg,
 /*
   startup the dsdb replicator service task
 */
-static void dreplsrv_task_init(struct task_server *task)
+static NTSTATUS dreplsrv_task_init(struct task_server *task)
 {
 	WERROR status;
 	struct dreplsrv_service *service;
@@ -438,11 +438,11 @@ static void dreplsrv_task_init(struct task_server *task)
 	case ROLE_STANDALONE:
 		task_server_terminate(task, "dreplsrv: no DSDB replication required in standalone configuration",
 				      false);
-		return;
+		return NT_STATUS_INVALID_DOMAIN_ROLE;


-- 
Samba Shared Repository



More information about the samba-cvs mailing list