*
* get_servers() is called when the process is about to do the real
* work. So more heavy-weight initialization should happen here. It
- * should return the number of server implementations provided.
+ * should return NT_STATUS_OK and the number of server implementations provided.
*
* @param[in] argc argc from main()
* @param[in] argv argv from main()
size_t (*get_interfaces)(
const struct ndr_interface_table ***ifaces,
void *private_data),
- size_t (*get_servers)(
+ NTSTATUS (*get_servers)(
struct dcesrv_context *dce_ctx,
const struct dcesrv_endpoint_server ***ep_servers,
+ size_t *num_ep_servers,
void *private_data),
void *private_data)
{
DBG_INFO("Initializing DCE/RPC registered endpoint servers\n");
- num_servers = get_servers(dce_ctx, &ep_servers, private_data);
+ status = get_servers(dce_ctx,
+ &ep_servers,
+ &num_servers,
+ private_data);
+ if (!NT_STATUS_IS_OK(status)) {
+ DBG_ERR("get_servers failed: %s\n", nt_errstr(status));
+ global_messaging_context_free();
+ TALLOC_FREE(frame);
+ exit(1);
+ }
DBG_DEBUG("get_servers() returned %zu servers\n", num_servers);
size_t (*get_interfaces)(
const struct ndr_interface_table ***ifaces,
void *private_data),
- size_t (*get_servers)(
+ NTSTATUS (*get_servers)(
struct dcesrv_context *dce_ctx,
const struct dcesrv_endpoint_server ***ep_servers,
+ size_t *num_ep_servers,
void *private_data),
void *private_data);
}
-static size_t classic_servers(
+static NTSTATUS classic_servers(
struct dcesrv_context *dce_ctx,
const struct dcesrv_endpoint_server ***_ep_servers,
+ size_t *_num_ep_servers,
void *private_data)
{
static const struct dcesrv_endpoint_server *ep_servers[7] = { NULL };
mangle_reset_cache();
*_ep_servers = ep_servers;
- return num_servers;
+ *_num_ep_servers = num_servers;
+ return NT_STATUS_OK;
}
int main(int argc, const char *argv[])
return num_ifaces;
}
-static size_t epmapper_servers(
+static NTSTATUS epmapper_servers(
struct dcesrv_context *dce_ctx,
const struct dcesrv_endpoint_server ***_ep_servers,
+ size_t *_num_ep_servers,
void *private_data)
{
static const struct dcesrv_endpoint_server *ep_servers[] = { NULL };
}
*_ep_servers = ep_servers;
- return num_servers;
+ *_num_ep_servers = num_servers;
+ return NT_STATUS_OK;
}
int main(int argc, const char *argv[])
return ARRAY_SIZE(ifaces);
}
-static size_t fsrvp_servers(
+static NTSTATUS fsrvp_servers(
struct dcesrv_context *dce_ctx,
const struct dcesrv_endpoint_server ***_ep_servers,
+ size_t *_num_ep_servers,
void *private_data)
{
static const struct dcesrv_endpoint_server *ep_servers[1] = { NULL };
if (lp_server_role() == ROLE_ACTIVE_DIRECTORY_DC) {
*_ep_servers = NULL;
- return 0;
+ *_num_ep_servers = 0;
+ return NT_STATUS_OK;
}
lp_load_with_shares(get_dyn_CONFIGFILE());
ep_servers[0] = FileServerVssAgent_get_ep_server();
*_ep_servers = ep_servers;
- return ARRAY_SIZE(ep_servers);
+ *_num_ep_servers = ARRAY_SIZE(ep_servers);
+ return NT_STATUS_OK;
}
int main(int argc, const char *argv[])
return num_ifaces;
}
-static size_t lsad_servers(
+static NTSTATUS lsad_servers(
struct dcesrv_context *dce_ctx,
const struct dcesrv_endpoint_server ***_ep_servers,
+ size_t *_num_ep_servers,
void *private_data)
{
static const struct dcesrv_endpoint_server *ep_servers[4] = { NULL, };
}
*_ep_servers = ep_servers;
- return num_servers;
+ *_num_ep_servers = num_servers;
+ return NT_STATUS_OK;
}
int main(int argc, const char *argv[])
return ARRAY_SIZE(ifaces);
}
-static size_t mdssvc_servers(
+static NTSTATUS mdssvc_servers(
struct dcesrv_context *dce_ctx,
const struct dcesrv_endpoint_server ***_ep_servers,
+ size_t *_num_ep_servers,
void *private_data)
{
static const struct dcesrv_endpoint_server *ep_servers[1] = { NULL };
ok = posix_locking_init(false);
if (!ok) {
DBG_ERR("posix_locking_init() failed\n");
- exit(1);
+ return NT_STATUS_INTERNAL_ERROR;
}
ep_servers[0] = mdssvc_get_ep_server();
*_ep_servers = ep_servers;
- return ARRAY_SIZE(ep_servers);
+ *_num_ep_servers = ARRAY_SIZE(ep_servers);
+ return NT_STATUS_OK;
}
int main(int argc, const char *argv[])
return num_ifaces;
}
-static size_t rpcecho_servers(
+static NTSTATUS rpcecho_servers(
struct dcesrv_context *dce_ctx,
const struct dcesrv_endpoint_server ***_ep_servers,
+ size_t *_num_ep_servers,
void *private_data)
{
static const struct dcesrv_endpoint_server *ep_servers[1] = { NULL };
}
*_ep_servers = ep_servers;
- return num_servers;
+ *_num_ep_servers = num_servers;
+ return NT_STATUS_OK;
}
int main(int argc, const char *argv[])
return ARRAY_SIZE(ifaces);
}
-static size_t spoolss_servers(
+static NTSTATUS spoolss_servers(
struct dcesrv_context *dce_ctx,
const struct dcesrv_endpoint_server ***_ep_servers,
+ size_t *_num_ep_servers,
void *private_data)
{
static const struct dcesrv_endpoint_server *ep_servers[1] = { NULL };
ok = secrets_init();
if (!ok) {
DBG_ERR("secrets_init() failed\n");
- exit(1);
+ return NT_STATUS_INTERNAL_ERROR;
}
ok = locking_init();
if (!ok) {
DBG_ERR("locking_init() failed\n");
- exit(1);
+ return NT_STATUS_INTERNAL_ERROR;
}
lp_load_with_shares(get_dyn_CONFIGFILE());
ok = printing_subsystem_init(ev_ctx, msg_ctx, dce_ctx);
if (!ok) {
- DBG_WARNING("printing_subsystem_init() failed\n");
- exit(1);
+ DBG_ERR("printing_subsystem_init() failed\n");
+ return NT_STATUS_INTERNAL_ERROR;
}
mangle_reset_cache();
*_ep_servers = ep_servers;
- return ARRAY_SIZE(ep_servers);
+ *_num_ep_servers = ARRAY_SIZE(ep_servers);
+ return NT_STATUS_OK;
}
int main(int argc, const char *argv[])
return ARRAY_SIZE(ifaces);
}
-static size_t winreg_servers(
+static NTSTATUS winreg_servers(
struct dcesrv_context *dce_ctx,
const struct dcesrv_endpoint_server ***_ep_servers,
+ size_t *_num_ep_servers,
void *private_data)
{
static const struct dcesrv_endpoint_server *ep_servers[1] = { NULL };
if (!W_ERROR_IS_OK(werr)) {
DBG_ERR("registry_init_full() failed: %s\n",
win_errstr(werr));
- exit(1);
+ return werror_to_ntstatus(werr);
}
lp_load_with_shares(get_dyn_CONFIGFILE());
*_ep_servers = ep_servers;
- return ARRAY_SIZE(ep_servers);
+ *_num_ep_servers = ARRAY_SIZE(ep_servers);
+ return NT_STATUS_OK;
}
int main(int argc, const char *argv[])