From: Samuel Cabrero Date: Tue, 12 Dec 2023 14:49:07 +0000 (+0100) Subject: s3:winbind: talloc the static locator child X-Git-Tag: talloc-2.4.2~345 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c35937054cd69580bbf5e3252fd9a1e8958f2f7b;p=thirdparty%2Fsamba.git s3:winbind: talloc the static locator child Next commits will use talloc_get_type_abort() to get the reference. Signed-off-by: Samuel Cabrero Reviewed-by: Alexander Bokovoy --- diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c index b87686f04c5..608c77c291b 100644 --- a/source3/winbindd/winbindd.c +++ b/source3/winbindd/winbindd.c @@ -1184,7 +1184,12 @@ static void winbindd_register_handlers(struct messaging_context *msg_ctx, DBG_ERR("Unable to start idmap child: %s\n", nt_errstr(status)); exit(1); } - init_locator_child(); + + status = init_locator_child(global_event_context()); + if (NT_STATUS_IS_ERR(status)) { + DBG_ERR("Unable to start locator child: %s\n", nt_errstr(status)); + exit(1); + } smb_nscd_flush_user_cache(); smb_nscd_flush_group_cache(); diff --git a/source3/winbindd/winbindd_locator.c b/source3/winbindd/winbindd_locator.c index 653ee93d122..c915bf280c4 100644 --- a/source3/winbindd/winbindd_locator.c +++ b/source3/winbindd/winbindd_locator.c @@ -27,19 +27,30 @@ #define DBGC_CLASS DBGC_WINBIND -static struct winbindd_child static_locator_child; +static struct winbindd_child *static_locator_child = NULL; struct winbindd_child *locator_child(void) { - return &static_locator_child; + return static_locator_child; } struct dcerpc_binding_handle *locator_child_handle(void) { - return static_locator_child.binding_handle; + return static_locator_child->binding_handle; } -void init_locator_child(void) +NTSTATUS init_locator_child(TALLOC_CTX *mem_ctx) { - setup_child(NULL, &static_locator_child, "log.winbindd", "locator"); + if (static_locator_child != NULL) { + DBG_ERR("locator child already allocated\n"); + return NT_STATUS_INTERNAL_ERROR; + } + + static_locator_child = talloc_zero(mem_ctx, struct winbindd_child); + if (static_locator_child == NULL) { + return NT_STATUS_NO_MEMORY; + } + + setup_child(NULL, static_locator_child, "log.winbindd", "locator"); + return NT_STATUS_OK; } diff --git a/source3/winbindd/winbindd_proto.h b/source3/winbindd/winbindd_proto.h index 975263bc656..d42e41fed94 100644 --- a/source3/winbindd/winbindd_proto.h +++ b/source3/winbindd/winbindd_proto.h @@ -404,7 +404,7 @@ bool lp_scan_idmap_domains(bool (*fn)(const char *domname, /* The following definitions come from winbindd/winbindd_locator.c */ -void init_locator_child(void); +NTSTATUS init_locator_child(TALLOC_CTX *mem_ctx); struct winbindd_child *locator_child(void); struct dcerpc_binding_handle *locator_child_handle(void);