#include "librpc/gen_ndr/ndr_irpc.h"
#include "cluster/cluster.h"
#include "dynconfig/dynconfig.h"
-#include "lib/util/samba_modules.h"
#include "nsswitch/winbind_client.h"
#include "libds/common/roles.h"
#include "lib/util/tfork.h"
int opt;
int ret;
poptContext pc;
-#define _MODULE_PROTO(init) extern NTSTATUS init(TALLOC_CTX *);
- STATIC_service_MODULES_PROTO;
- init_module_fn static_init[] = { STATIC_service_MODULES };
- init_module_fn *shared_init;
uint16_t stdin_event_flags;
NTSTATUS status;
const char *model = "prefork";
process_model_init(lp_ctx);
- shared_init = load_samba_modules(mem_ctx, "service");
-
- run_init_functions(mem_ctx, static_init);
- run_init_functions(mem_ctx, shared_init);
-
- TALLOC_FREE(shared_init);
+ samba_service_init();
/* the event context is the top level structure in smbd. Everything else
should hang off that */
#include "includes.h"
#include "../lib/util/dlinklist.h"
#include "samba/process_model.h"
+#include "lib/util/samba_modules.h"
#undef strcasecmp
return NT_STATUS_OK;
}
+
+_PUBLIC_ NTSTATUS samba_service_init(void)
+{
+#define _MODULE_PROTO(init) extern NTSTATUS init(TALLOC_CTX *);
+ STATIC_service_MODULES_PROTO;
+ init_module_fn static_init[] = { STATIC_service_MODULES };
+ init_module_fn *shared_init = NULL;
+ static bool initialised;
+
+ if (initialised) {
+ return NT_STATUS_OK;
+ }
+ initialised = true;
+
+ shared_init = load_samba_modules(NULL, "service");
+
+ run_init_functions(NULL, static_init);
+ run_init_functions(NULL, shared_init);
+
+ TALLOC_FREE(shared_init);
+
+ return NT_STATUS_OK;
+}
void (*post_fork) (struct task_server *, struct process_details *);
};
+NTSTATUS samba_service_init(void);
+
#include "samba/service_proto.h"
#endif /* __SERVICE_H__ */