[PATCH] Fix bug 13150

Jeremy Allison jra at samba.org
Fri Nov 17 21:54:33 UTC 2017


On Fri, Nov 17, 2017 at 04:25:24PM +0100, Volker Lendecke via samba-technical wrote:
> Hi!
> 
> Review appreciated!

Oh that's a good catch. Wonder how long that one took to track down :-).

RB+ and pushed.

> -- 
> SerNet GmbH, Bahnhofsallee 1b, 37081 Göttingen
> phone: +49-551-370000-0, fax: +49-551-370000-9
> AG Göttingen, HRB 2816, GF: Dr. Johannes Loxen
> http://www.sernet.de, mailto:kontakt at sernet.de

> From e842750d5c2ceb6b89a870e0c98e29b41ba34a72 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Fri, 17 Nov 2017 11:35:19 +0100
> Subject: [PATCH 1/4] winbind: Replace winbind_event_context with
>  server_event_context
> 
> There's no point in having two global event contexts
> 
> Bug: https://bugzilla.samba.org/show_bug.cgi?id=13150
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/winbindd/idmap_ldap.c                      |  2 +-
>  source3/winbindd/idmap_rfc2307.c                   |  2 +-
>  source3/winbindd/winbindd.c                        | 58 +++++++++++-----------
>  source3/winbindd/winbindd_cm.c                     |  4 +-
>  source3/winbindd/winbindd_cred_cache.c             | 14 +++---
>  source3/winbindd/winbindd_dual.c                   | 16 +++---
>  source3/winbindd/winbindd_irpc.c                   | 10 ++--
>  source3/winbindd/winbindd_misc.c                   |  2 +-
>  source3/winbindd/winbindd_pam_auth.c               |  2 +-
>  source3/winbindd/winbindd_pam_auth_crap.c          |  2 +-
>  source3/winbindd/winbindd_pam_chauthtok.c          |  2 +-
>  .../winbindd/winbindd_pam_chng_pswd_auth_crap.c    |  2 +-
>  source3/winbindd/winbindd_pam_logoff.c             |  2 +-
>  source3/winbindd/winbindd_util.c                   |  2 +-
>  14 files changed, 60 insertions(+), 60 deletions(-)
> 
> diff --git a/source3/winbindd/idmap_ldap.c b/source3/winbindd/idmap_ldap.c
> index 39aa8330735..6765dfc217a 100644
> --- a/source3/winbindd/idmap_ldap.c
> +++ b/source3/winbindd/idmap_ldap.c
> @@ -455,7 +455,7 @@ static NTSTATUS idmap_ldap_db_init(struct idmap_domain *dom)
>  
>  	/* get_credentials deals with setting up creds */
>  
> -	ret = smbldap_init(ctx, winbind_event_context(), ctx->url,
> +	ret = smbldap_init(ctx, server_event_context(), ctx->url,
>  			   false, NULL, NULL, &ctx->smbldap_state);
>  	if (!NT_STATUS_IS_OK(ret)) {
>  		DEBUG(1, ("ERROR: smbldap_init (%s) failed!\n", ctx->url));
> diff --git a/source3/winbindd/idmap_rfc2307.c b/source3/winbindd/idmap_rfc2307.c
> index 668a7a4e28e..264ccb034fb 100644
> --- a/source3/winbindd/idmap_rfc2307.c
> +++ b/source3/winbindd/idmap_rfc2307.c
> @@ -193,7 +193,7 @@ static NTSTATUS idmap_rfc2307_init_ldap(struct idmap_rfc2307_context *ctx,
>  	}
>  
>  	/* assume anonymous if we don't have a specified user */
> -	ret = smbldap_init(mem_ctx, winbind_event_context(), url,
> +	ret = smbldap_init(mem_ctx, server_event_context(), url,
>  			   (user_dn == NULL), user_dn, secret,
>  			   &ctx->smbldap_state);
>  	SAFE_FREE(secret);
> diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c
> index f24451649b6..981888068c1 100644
> --- a/source3/winbindd/winbindd.c
> +++ b/source3/winbindd/winbindd.c
> @@ -91,7 +91,7 @@ struct messaging_context *winbind_messaging_context(void)
>  	 * Note we MUST use the NULL context here, not the autofree context,
>  	 * to avoid side effects in forked children exiting.
>  	 */
> -	msg = messaging_init(NULL, winbind_event_context());
> +	msg = messaging_init(NULL, server_event_context());
>  	if (msg == NULL) {
>  		smb_panic("Could not init winbindd's messaging context.\n");
>  	}
> @@ -124,7 +124,7 @@ struct imessaging_context *winbind_imessaging_context(void)
>  	 * Note we MUST use the NULL context here, not the autofree context,
>  	 * to avoid side effects in forked children exiting.
>  	 */
> -	msg = imessaging_init(NULL, lp_ctx, myself, winbind_event_context());
> +	msg = imessaging_init(NULL, lp_ctx, myself, server_event_context());
>  	talloc_unlink(NULL, lp_ctx);
>  
>  	if (msg == NULL) {
> @@ -307,14 +307,14 @@ bool winbindd_setup_sig_term_handler(bool parent)
>  	struct tevent_signal *se;
>  	bool *is_parent;
>  
> -	is_parent = talloc(winbind_event_context(), bool);
> +	is_parent = talloc(server_event_context(), bool);
>  	if (!is_parent) {
>  		return false;
>  	}
>  
>  	*is_parent = parent;
>  
> -	se = tevent_add_signal(winbind_event_context(),
> +	se = tevent_add_signal(server_event_context(),
>  			       is_parent,
>  			       SIGTERM, 0,
>  			       winbindd_sig_term_handler,
> @@ -325,7 +325,7 @@ bool winbindd_setup_sig_term_handler(bool parent)
>  		return false;
>  	}
>  
> -	se = tevent_add_signal(winbind_event_context(),
> +	se = tevent_add_signal(server_event_context(),
>  			       is_parent,
>  			       SIGINT, 0,
>  			       winbindd_sig_term_handler,
> @@ -336,7 +336,7 @@ bool winbindd_setup_sig_term_handler(bool parent)
>  		return false;
>  	}
>  
> -	se = tevent_add_signal(winbind_event_context(),
> +	se = tevent_add_signal(server_event_context(),
>  			       is_parent,
>  			       SIGQUIT, 0,
>  			       winbindd_sig_term_handler,
> @@ -357,7 +357,7 @@ bool winbindd_setup_stdin_handler(bool parent, bool foreground)
>  	if (foreground) {
>  		struct stat st;
>  
> -		is_parent = talloc(winbind_event_context(), bool);
> +		is_parent = talloc(server_event_context(), bool);
>  		if (!is_parent) {
>  			return false;
>  		}
> @@ -373,7 +373,7 @@ bool winbindd_setup_stdin_handler(bool parent, bool foreground)
>  			return false;
>  		}
>  		if (S_ISFIFO(st.st_mode) || S_ISSOCK(st.st_mode)) {
> -			tevent_add_fd(winbind_event_context(),
> +			tevent_add_fd(server_event_context(),
>  					is_parent,
>  					0,
>  					TEVENT_FD_READ,
> @@ -405,15 +405,15 @@ bool winbindd_setup_sig_hup_handler(const char *lfile)
>  	char *file = NULL;
>  
>  	if (lfile) {
> -		file = talloc_strdup(winbind_event_context(),
> +		file = talloc_strdup(server_event_context(),
>  				     lfile);
>  		if (!file) {
>  			return false;
>  		}
>  	}
>  
> -	se = tevent_add_signal(winbind_event_context(),
> -			       winbind_event_context(),
> +	se = tevent_add_signal(server_event_context(),
> +			       server_event_context(),
>  			       SIGHUP, 0,
>  			       winbindd_sig_hup_handler,
>  			       file);
> @@ -442,8 +442,8 @@ static bool winbindd_setup_sig_chld_handler(void)
>  {
>  	struct tevent_signal *se;
>  
> -	se = tevent_add_signal(winbind_event_context(),
> -			       winbind_event_context(),
> +	se = tevent_add_signal(server_event_context(),
> +			       server_event_context(),
>  			       SIGCHLD, 0,
>  			       winbindd_sig_chld_handler,
>  			       NULL);
> @@ -468,8 +468,8 @@ static bool winbindd_setup_sig_usr2_handler(void)
>  {
>  	struct tevent_signal *se;
>  
> -	se = tevent_add_signal(winbind_event_context(),
> -			       winbind_event_context(),
> +	se = tevent_add_signal(server_event_context(),
> +			       server_event_context(),
>  			       SIGUSR2, 0,
>  			       winbindd_sig_usr2_handler,
>  			       NULL);
> @@ -734,7 +734,7 @@ static void process_request(struct winbindd_cli_state *state)
>  		DEBUG(10, ("process_request: Handling async request %d:%s\n",
>  			   (int)state->pid, state->cmd_name));
>  
> -		req = atable->send_req(state->mem_ctx, winbind_event_context(),
> +		req = atable->send_req(state->mem_ctx, server_event_context(),
>  				       state, state->request);
>  		if (req == NULL) {
>  			DEBUG(0, ("process_request: atable->send failed for "
> @@ -828,7 +828,7 @@ static void request_finished(struct winbindd_cli_state *state)
>  
>  	TALLOC_FREE(state->request);
>  
> -	req = wb_resp_write_send(state, winbind_event_context(),
> +	req = wb_resp_write_send(state, server_event_context(),
>  				 state->out_queue, state->sock,
>  				 state->response);
>  	if (req == NULL) {
> @@ -869,7 +869,7 @@ static void winbind_client_response_written(struct tevent_req *req)
>  	state->cmd_name = "no request";
>  	state->recv_fn = NULL;
>  
> -	req = wb_req_read_send(state, winbind_event_context(), state->sock,
> +	req = wb_req_read_send(state, server_event_context(), state->sock,
>  			       WINBINDD_MAX_EXTRA_DATA);
>  	if (req == NULL) {
>  		remove_client(state);
> @@ -937,7 +937,7 @@ static void new_connection(int listen_sock, bool privileged)
>  
>  	state->privileged = privileged;
>  
> -	req = wb_req_read_send(state, winbind_event_context(), state->sock,
> +	req = wb_req_read_send(state, server_event_context(), state->sock,
>  			       WINBINDD_MAX_EXTRA_DATA);
>  	if (req == NULL) {
>  		TALLOC_FREE(state);
> @@ -977,7 +977,7 @@ static void winbind_client_request_read(struct tevent_req *req)
>  		return;
>  	}
>  
> -	req = wait_for_read_send(state, winbind_event_context(), state->sock,
> +	req = wait_for_read_send(state, server_event_context(), state->sock,
>  				 true);
>  	if (req == NULL) {
>  		DEBUG(0, ("winbind_client_request_read[%d:%s]:"
> @@ -1239,7 +1239,7 @@ static bool winbindd_setup_listeners(void)
>  	int rc;
>  	char *socket_path;
>  
> -	pub_state = talloc(winbind_event_context(),
> +	pub_state = talloc(server_event_context(),
>  			   struct winbindd_listen_state);
>  	if (!pub_state) {
>  		goto failed;
> @@ -1256,7 +1256,7 @@ static bool winbindd_setup_listeners(void)
>  		goto failed;
>  	}
>  
> -	fde = tevent_add_fd(winbind_event_context(), pub_state, pub_state->fd,
> +	fde = tevent_add_fd(server_event_context(), pub_state, pub_state->fd,
>  			    TEVENT_FD_READ, winbindd_listen_fde_handler,
>  			    pub_state);
>  	if (fde == NULL) {
> @@ -1265,7 +1265,7 @@ static bool winbindd_setup_listeners(void)
>  	}
>  	tevent_fd_set_auto_close(fde);
>  
> -	priv_state = talloc(winbind_event_context(),
> +	priv_state = talloc(server_event_context(),
>  			    struct winbindd_listen_state);
>  	if (!priv_state) {
>  		goto failed;
> @@ -1288,7 +1288,7 @@ static bool winbindd_setup_listeners(void)
>  		goto failed;
>  	}
>  
> -	fde = tevent_add_fd(winbind_event_context(), priv_state,
> +	fde = tevent_add_fd(server_event_context(), priv_state,
>  			    priv_state->fd, TEVENT_FD_READ,
>  			    winbindd_listen_fde_handler, priv_state);
>  	if (fde == NULL) {
> @@ -1297,7 +1297,7 @@ static bool winbindd_setup_listeners(void)
>  	}
>  	tevent_fd_set_auto_close(fde);
>  
> -	winbindd_scrub_clients_handler(winbind_event_context(), NULL,
> +	winbindd_scrub_clients_handler(server_event_context(), NULL,
>  				       timeval_current(), NULL);
>  	return true;
>  failed:
> @@ -1412,7 +1412,7 @@ static void winbindd_register_handlers(struct messaging_context *msg_ctx,
>  	smb_nscd_flush_group_cache();
>  
>  	if (lp_allow_trusted_domains()) {
> -		if (tevent_add_timer(winbind_event_context(), NULL, timeval_zero(),
> +		if (tevent_add_timer(server_event_context(), NULL, timeval_zero(),
>  			      rescan_trusted_domains, NULL) == NULL) {
>  			DEBUG(0, ("Could not trigger rescan_trusted_domains()\n"));
>  			exit(1);
> @@ -1777,7 +1777,7 @@ int main(int argc, const char **argv)
>  	 */
>  
>  	status = reinit_after_fork(winbind_messaging_context(),
> -				   winbind_event_context(),
> +				   server_event_context(),
>  				   false, NULL);
>  	if (!NT_STATUS_IS_OK(status)) {
>  		exit_daemon("Winbindd reinit_after_fork() failed", map_errno_from_nt_status(status));
> @@ -1807,7 +1807,7 @@ int main(int argc, const char **argv)
>  	rpc_lsarpc_init(NULL);
>  	rpc_samr_init(NULL);
>  
> -	winbindd_init_addrchange(NULL, winbind_event_context(),
> +	winbindd_init_addrchange(NULL, server_event_context(),
>  				 winbind_messaging_context());
>  
>  	/* setup listen sockets */
> @@ -1828,7 +1828,7 @@ int main(int argc, const char **argv)
>  	while (1) {
>  		frame = talloc_stackframe();
>  
> -		if (tevent_loop_once(winbind_event_context()) == -1) {
> +		if (tevent_loop_once(server_event_context()) == -1) {
>  			DEBUG(1, ("tevent_loop_once() failed: %s\n",
>  				  strerror(errno)));
>  			return 1;
> diff --git a/source3/winbindd/winbindd_cm.c b/source3/winbindd/winbindd_cm.c
> index 1fa688241dd..cece96e7166 100644
> --- a/source3/winbindd/winbindd_cm.c
> +++ b/source3/winbindd/winbindd_cm.c
> @@ -428,7 +428,7 @@ void set_domain_offline(struct winbindd_domain *domain)
>  
>  	calc_new_online_timeout_check(domain);
>  
> -	domain->check_online_event = tevent_add_timer(winbind_event_context(),
> +	domain->check_online_event = tevent_add_timer(server_event_context(),
>  						NULL,
>  						timeval_current_ofs(domain->check_online_timeout,0),
>  						check_domain_online_handler,
> @@ -604,7 +604,7 @@ void set_domain_online_request(struct winbindd_domain *domain)
>  
>  	TALLOC_FREE(domain->check_online_event);
>  
> -	domain->check_online_event = tevent_add_timer(winbind_event_context(),
> +	domain->check_online_event = tevent_add_timer(server_event_context(),
>  						     NULL,
>  						     tev,
>  						     check_domain_online_handler,
> diff --git a/source3/winbindd/winbindd_cred_cache.c b/source3/winbindd/winbindd_cred_cache.c
> index ed2dd10c91d..5e019dfce0c 100644
> --- a/source3/winbindd/winbindd_cred_cache.c
> +++ b/source3/winbindd/winbindd_cred_cache.c
> @@ -284,7 +284,7 @@ done:
>  	if (entry->refresh_time == 0) {
>  		entry->refresh_time = new_start;
>  	}
> -	entry->event = tevent_add_timer(winbind_event_context(), entry,
> +	entry->event = tevent_add_timer(server_event_context(), entry,
>  				       timeval_set(new_start, 0),
>  				       krb5_ticket_refresh_handler,
>  				       entry);
> @@ -383,7 +383,7 @@ static void krb5_ticket_gain_handler(struct tevent_context *event_ctx,
>  	if (entry->refresh_time == 0) {
>  		entry->refresh_time = t.tv_sec;
>  	}
> -	entry->event = tevent_add_timer(winbind_event_context(),
> +	entry->event = tevent_add_timer(server_event_context(),
>  				       entry,
>  				       t,
>  				       krb5_ticket_refresh_handler,
> @@ -402,7 +402,7 @@ static void add_krb5_ticket_gain_handler_event(struct WINBINDD_CCACHE_ENTRY *ent
>  				     struct timeval t)
>  {
>  	entry->refresh_time = 0;
> -	entry->event = tevent_add_timer(winbind_event_context(),
> +	entry->event = tevent_add_timer(server_event_context(),
>  				       entry,
>  				       t,
>  				       krb5_ticket_gain_handler,
> @@ -422,13 +422,13 @@ void ccache_regain_all_now(void)
>  		 * the event has the krb5_ticket_gain_handler
>  		 */
>  		if (cur->refresh_time == 0) {
> -			new_event = tevent_add_timer(winbind_event_context(),
> +			new_event = tevent_add_timer(server_event_context(),
>  						    cur,
>  						    t,
>  						    krb5_ticket_gain_handler,
>  						    cur);
>  		} else {
> -			new_event = tevent_add_timer(winbind_event_context(),
> +			new_event = tevent_add_timer(server_event_context(),
>  						    cur,
>  						    t,
>  						    krb5_ticket_refresh_handler,
> @@ -545,7 +545,7 @@ NTSTATUS add_ccache_to_list(const char *princ_name,
>  				if (!entry->refresh_time) {
>  					entry->refresh_time = t.tv_sec;
>  				}
> -				entry->event = tevent_add_timer(winbind_event_context(),
> +				entry->event = tevent_add_timer(server_event_context(),
>  							       entry,
>  							       t,
>  							       krb5_ticket_refresh_handler,
> @@ -643,7 +643,7 @@ NTSTATUS add_ccache_to_list(const char *princ_name,
>  		if (entry->refresh_time == 0) {
>  			entry->refresh_time = t.tv_sec;
>  		}
> -		entry->event = tevent_add_timer(winbind_event_context(),
> +		entry->event = tevent_add_timer(server_event_context(),
>  					       entry,
>  					       t,
>  					       krb5_ticket_refresh_handler,
> diff --git a/source3/winbindd/winbindd_dual.c b/source3/winbindd/winbindd_dual.c
> index 97e1c88a636..d36eb0525c9 100644
> --- a/source3/winbindd/winbindd_dual.c
> +++ b/source3/winbindd/winbindd_dual.c
> @@ -175,7 +175,7 @@ static void wb_child_request_trigger(struct tevent_req *req,
>  		return;
>  	}
>  
> -	subreq = wb_simple_trans_send(state, winbind_event_context(), NULL,
> +	subreq = wb_simple_trans_send(state, server_event_context(), NULL,
>  				      state->child->sock, state->request);
>  	if (tevent_req_nomem(subreq, req)) {
>  		return;
> @@ -968,7 +968,7 @@ static void account_lockout_policy_handler(struct tevent_context *ctx,
>  			 nt_errstr(result)));
>  	}
>  
> -	child->lockout_policy_event = tevent_add_timer(winbind_event_context(), NULL,
> +	child->lockout_policy_event = tevent_add_timer(server_event_context(), NULL,
>  						      timeval_current_ofs(3600, 0),
>  						      account_lockout_policy_handler,
>  						      child);
> @@ -1130,7 +1130,7 @@ static void machine_password_change_handler(struct tevent_context *ctx,
>  	}
>  
>  done:
> -	child->machine_password_change_event = tevent_add_timer(winbind_event_context(), NULL,
> +	child->machine_password_change_event = tevent_add_timer(server_event_context(), NULL,
>  							      next_change,
>  							      machine_password_change_handler,
>  							      child);
> @@ -1251,7 +1251,7 @@ NTSTATUS winbindd_reinit_after_fork(const struct winbindd_child *myself,
>  
>  	status = reinit_after_fork(
>  		winbind_messaging_context(),
> -		winbind_event_context(),
> +		server_event_context(),
>  		true, NULL);
>  	if (!NT_STATUS_IS_OK(status)) {
>  		DEBUG(0,("reinit_after_fork() failed\n"));
> @@ -1556,7 +1556,7 @@ static bool fork_domain_child(struct winbindd_child *child)
>  		}
>  
>  		child->lockout_policy_event = tevent_add_timer(
> -			winbind_event_context(), NULL, timeval_zero(),
> +			server_event_context(), NULL, timeval_zero(),
>  			account_lockout_policy_handler,
>  			child);
>  	}
> @@ -1570,13 +1570,13 @@ static bool fork_domain_child(struct winbindd_child *child)
>  		if (calculate_next_machine_pwd_change(child->domain->name,
>  						       &next_change)) {
>  			child->machine_password_change_event = tevent_add_timer(
> -				winbind_event_context(), NULL, next_change,
> +				server_event_context(), NULL, next_change,
>  				machine_password_change_handler,
>  				child);
>  		}
>  	}
>  
> -	fde = tevent_add_fd(winbind_event_context(), NULL, state.cli.sock,
> +	fde = tevent_add_fd(server_event_context(), NULL, state.cli.sock,
>  			    TEVENT_FD_READ, child_handler, &state);
>  	if (fde == NULL) {
>  		DEBUG(1, ("tevent_add_fd failed\n"));
> @@ -1588,7 +1588,7 @@ static bool fork_domain_child(struct winbindd_child *child)
>  		int ret;
>  		TALLOC_CTX *frame = talloc_stackframe();
>  
> -		ret = tevent_loop_once(winbind_event_context());
> +		ret = tevent_loop_once(server_event_context());
>  		if (ret != 0) {
>  			DEBUG(1, ("tevent_loop_once failed: %s\n",
>  				  strerror(errno)));
> diff --git a/source3/winbindd/winbindd_irpc.c b/source3/winbindd/winbindd_irpc.c
> index fface90cfad..d0d68c89411 100644
> --- a/source3/winbindd/winbindd_irpc.c
> +++ b/source3/winbindd/winbindd_irpc.c
> @@ -123,7 +123,7 @@ static NTSTATUS wb_irpc_DsrUpdateReadOnlyServerDnsRecords(struct irpc_message *m
>  	DEBUG(5, ("wb_irpc_DsrUpdateReadOnlyServerDnsRecords called\n"));
>  
>  	return wb_irpc_forward_rpc_call(msg, msg,
> -					winbind_event_context(),
> +					server_event_context(),
>  					req, NDR_WINBIND_DSRUPDATEREADONLYSERVERDNSRECORDS,
>  					"winbind_DsrUpdateReadOnlyServerDnsRecords",
>  					domain, IRPC_CALL_TIMEOUT);
> @@ -206,7 +206,7 @@ static NTSTATUS wb_irpc_SamLogon(struct irpc_message *msg,
>  	DEBUG(5, ("wb_irpc_SamLogon called\n"));
>  
>  	return wb_irpc_forward_rpc_call(msg, msg,
> -					winbind_event_context(),
> +					server_event_context(),
>  					req, NDR_WINBIND_SAMLOGON,
>  					"winbind_SamLogon",
>  					domain, IRPC_CALL_TIMEOUT);
> @@ -266,7 +266,7 @@ static NTSTATUS wb_irpc_LogonControl(struct irpc_message *msg,
>  
>  	TALLOC_FREE(frame);
>  	return wb_irpc_forward_rpc_call(msg, msg,
> -					winbind_event_context(),
> +					server_event_context(),
>  					req, NDR_WINBIND_LOGONCONTROL,
>  					"winbind_LogonControl",
>  					domain, 45 /* timeout */);
> @@ -306,7 +306,7 @@ static NTSTATUS wb_irpc_GetForestTrustInformation(struct irpc_message *msg,
>  	DEBUG(5, ("wb_irpc_GetForestTrustInformation called\n"));
>  
>  	return wb_irpc_forward_rpc_call(msg, msg,
> -					winbind_event_context(),
> +					server_event_context(),
>  					req, NDR_WINBIND_GETFORESTTRUSTINFORMATION,
>  					"winbind_GetForestTrustInformation",
>  					domain, 45 /* timeout */);
> @@ -324,7 +324,7 @@ static NTSTATUS wb_irpc_SendToSam(struct irpc_message *msg,
>  	DEBUG(5, ("wb_irpc_SendToSam called\n"));
>  
>  	return wb_irpc_forward_rpc_call(msg, msg,
> -					winbind_event_context(),
> +					server_event_context(),
>  					req, NDR_WINBIND_SENDTOSAM,
>  					"winbind_SendToSam",
>  					domain, IRPC_CALL_TIMEOUT);
> diff --git a/source3/winbindd/winbindd_misc.c b/source3/winbindd/winbindd_misc.c
> index 30730dcec12..6cf33420768 100644
> --- a/source3/winbindd/winbindd_misc.c
> +++ b/source3/winbindd/winbindd_misc.c
> @@ -277,7 +277,7 @@ void winbindd_domain_info(struct winbindd_cli_state *cli)
>  	 * Send a ping down. This implicitly initializes the domain.
>  	 */
>  
> -	req = wb_domain_request_send(state, winbind_event_context(),
> +	req = wb_domain_request_send(state, server_event_context(),
>  				     domain, &state->ping_request);
>  	if (req == NULL) {
>  		DEBUG(3, ("wb_domain_request_send failed\n"));
> diff --git a/source3/winbindd/winbindd_pam_auth.c b/source3/winbindd/winbindd_pam_auth.c
> index 4f963a32818..7ff44888975 100644
> --- a/source3/winbindd/winbindd_pam_auth.c
> +++ b/source3/winbindd/winbindd_pam_auth.c
> @@ -81,7 +81,7 @@ struct tevent_req *winbindd_pam_auth_send(TALLOC_CTX *mem_ctx,
>  		return tevent_req_post(req, ev);
>  	}
>  
> -	subreq = wb_domain_request_send(state, winbind_event_context(), domain,
> +	subreq = wb_domain_request_send(state, server_event_context(), domain,
>  					request);
>  	if (tevent_req_nomem(subreq, req)) {
>  		return tevent_req_post(req, ev);
> diff --git a/source3/winbindd/winbindd_pam_auth_crap.c b/source3/winbindd/winbindd_pam_auth_crap.c
> index e6a47c86785..cfeafbcfda8 100644
> --- a/source3/winbindd/winbindd_pam_auth_crap.c
> +++ b/source3/winbindd/winbindd_pam_auth_crap.c
> @@ -93,7 +93,7 @@ struct tevent_req *winbindd_pam_auth_crap_send(
>  		fstrcpy(request->data.auth_crap.workstation, lp_netbios_name());
>  	}
>  
> -	subreq = wb_domain_request_send(state, winbind_event_context(), domain,
> +	subreq = wb_domain_request_send(state, server_event_context(), domain,
>  					request);
>  	if (tevent_req_nomem(subreq, req)) {
>  		return tevent_req_post(req, ev);
> diff --git a/source3/winbindd/winbindd_pam_chauthtok.c b/source3/winbindd/winbindd_pam_chauthtok.c
> index 8ffbc29b973..0d749fbcecd 100644
> --- a/source3/winbindd/winbindd_pam_chauthtok.c
> +++ b/source3/winbindd/winbindd_pam_chauthtok.c
> @@ -79,7 +79,7 @@ struct tevent_req *winbindd_pam_chauthtok_send(
>  		return tevent_req_post(req, ev);
>  	}
>  
> -	subreq = wb_domain_request_send(state, winbind_event_context(),
> +	subreq = wb_domain_request_send(state, server_event_context(),
>  					contact_domain, request);
>  	if (tevent_req_nomem(subreq, req)) {
>  		return tevent_req_post(req, ev);
> diff --git a/source3/winbindd/winbindd_pam_chng_pswd_auth_crap.c b/source3/winbindd/winbindd_pam_chng_pswd_auth_crap.c
> index 9133a91fa50..e9ee0ab63ce 100644
> --- a/source3/winbindd/winbindd_pam_chng_pswd_auth_crap.c
> +++ b/source3/winbindd/winbindd_pam_chng_pswd_auth_crap.c
> @@ -73,7 +73,7 @@ struct tevent_req *winbindd_pam_chng_pswd_auth_crap_send(
>  		return tevent_req_post(req, ev);
>  	}
>  
> -	subreq = wb_domain_request_send(state, winbind_event_context(),
> +	subreq = wb_domain_request_send(state, server_event_context(),
>  					domain, request);
>  	if (tevent_req_nomem(subreq, req)) {
>  		return tevent_req_post(req, ev);
> diff --git a/source3/winbindd/winbindd_pam_logoff.c b/source3/winbindd/winbindd_pam_logoff.c
> index b3c60adf857..b5b7840f99c 100644
> --- a/source3/winbindd/winbindd_pam_logoff.c
> +++ b/source3/winbindd/winbindd_pam_logoff.c
> @@ -94,7 +94,7 @@ struct tevent_req *winbindd_pam_logoff_send(TALLOC_CTX *mem_ctx,
>  		break;
>  	}
>  
> -	subreq = wb_domain_request_send(state, winbind_event_context(), domain,
> +	subreq = wb_domain_request_send(state, server_event_context(), domain,
>  					request);
>  	if (tevent_req_nomem(subreq, req)) {
>  		return tevent_req_post(req, ev);
> diff --git a/source3/winbindd/winbindd_util.c b/source3/winbindd/winbindd_util.c
> index 6eed02e9fe8..7b443c79fa5 100644
> --- a/source3/winbindd/winbindd_util.c
> +++ b/source3/winbindd/winbindd_util.c
> @@ -321,7 +321,7 @@ static void add_trusted_domains( struct winbindd_domain *domain )
>  	state->request.length = sizeof(state->request);
>  	state->request.cmd = WINBINDD_LIST_TRUSTDOM;
>  
> -	req = wb_domain_request_send(state, winbind_event_context(),
> +	req = wb_domain_request_send(state, server_event_context(),
>  				     domain, &state->request);
>  	if (req == NULL) {
>  		DEBUG(1, ("wb_domain_request_send failed\n"));
> -- 
> 2.11.0
> 
> 
> From b7003053d3f0ee43cb2d65bb90704806d04821a8 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Fri, 17 Nov 2017 11:37:30 +0100
> Subject: [PATCH 2/4] winbind: Remove winbind_event_context
> 
> Bug: https://bugzilla.samba.org/show_bug.cgi?id=13150
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/torture/torture.c         |  9 ---------
>  source3/winbindd/winbindd.c       | 19 -------------------
>  source3/winbindd/winbindd_proto.h |  1 -
>  3 files changed, 29 deletions(-)
> 
> diff --git a/source3/torture/torture.c b/source3/torture/torture.c
> index 360adad5953..481154fc36f 100644
> --- a/source3/torture/torture.c
> +++ b/source3/torture/torture.c
> @@ -11588,15 +11588,6 @@ static struct {
>  	{ "qpathinfo-bufsize", run_qpathinfo_bufsize, 0 },
>  	{NULL, NULL, 0}};
>  
> -/*
> - * dummy function to satisfy linker dependency
> - */
> -struct tevent_context *winbind_event_context(void);
> -struct tevent_context *winbind_event_context(void)
> -{
> -	return NULL;
> -}
> -
>  /****************************************************************************
>  run a specified test or "ALL"
>  ****************************************************************************/
> diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c
> index 981888068c1..75f9dbb142e 100644
> --- a/source3/winbindd/winbindd.c
> +++ b/source3/winbindd/winbindd.c
> @@ -60,25 +60,6 @@ static bool interactive = False;
>  
>  extern bool override_logfile;
>  
> -struct tevent_context *winbind_event_context(void)
> -{
> -	static struct tevent_context *ev = NULL;
> -
> -	if (ev != NULL) {
> -		return ev;
> -	}
> -
> -	/*
> -	 * Note we MUST use the NULL context here, not the autofree context,
> -	 * to avoid side effects in forked children exiting.
> -	 */
> -	ev = samba_tevent_context_init(NULL);
> -	if (ev == NULL) {
> -		smb_panic("Could not init winbindd's messaging context.\n");
> -	}
> -	return ev;
> -}
> -
>  struct messaging_context *winbind_messaging_context(void)
>  {
>  	static struct messaging_context *msg = NULL;
> diff --git a/source3/winbindd/winbindd_proto.h b/source3/winbindd/winbindd_proto.h
> index 46e6530105a..ccf39e57508 100644
> --- a/source3/winbindd/winbindd_proto.h
> +++ b/source3/winbindd/winbindd_proto.h
> @@ -34,7 +34,6 @@ bool winbindd_setup_sig_hup_handler(const char *lfile);
>  bool winbindd_use_idmap_cache(void);
>  bool winbindd_use_cache(void);
>  char *get_winbind_priv_pipe_dir(void);
> -struct tevent_context *winbind_event_context(void);
>  
>  /* The following definitions come from winbindd/winbindd_ads.c  */
>  
> -- 
> 2.11.0
> 
> 
> From 59008bd0a712c2f0c1651f34ebee4f6569fe79e8 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Fri, 17 Nov 2017 11:42:34 +0100
> Subject: [PATCH 3/4] winbind: winbind_messaging_context ->
>  server_messaging_context
> 
> Don't use winbind_messaging_context anymore.
> 
> This fixes a bug analysed by Peter Somogyi <PSOMOGYI at hu.ibm.com>: If a
> parent winbind forks, it only called reinit_after_fork on
> winbind_messaging_context. On the other hand, deep in dbwrap_open we use
> server_messaging_context(). This is not reinitialized by
> winbind_reinit_after fork, so the parent and child share a ctdb
> connection. This is invalid, because replies from ctdb end up in the
> wrong process.
> 
> Bug: https://bugzilla.samba.org/show_bug.cgi?id=13150
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/winbindd/winbindd.c          | 16 ++++++++--------
>  source3/winbindd/winbindd_cm.c       | 32 ++++++++++++++++----------------
>  source3/winbindd/winbindd_dual.c     | 34 +++++++++++++++++-----------------
>  source3/winbindd/winbindd_dual_srv.c |  6 +++---
>  4 files changed, 44 insertions(+), 44 deletions(-)
> 
> diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c
> index 75f9dbb142e..679faefe2fd 100644
> --- a/source3/winbindd/winbindd.c
> +++ b/source3/winbindd/winbindd.c
> @@ -240,7 +240,7 @@ static void terminate(bool is_parent)
>  #endif
>  
>  	if (is_parent) {
> -		struct messaging_context *msg = winbind_messaging_context();
> +		struct messaging_context *msg = server_messaging_context();
>  		struct server_id self = messaging_server_id(msg);
>  		serverid_deregister(self);
>  		pidfile_unlink(lp_pid_directory(), "winbindd");
> @@ -1350,9 +1350,9 @@ static void winbindd_register_handlers(struct messaging_context *msg_ctx,
>  			   MSG_WINBIND_ONLINESTATUS, winbind_msg_onlinestatus);
>  
>  	/* Handle domain online/offline messages for domains */
> -	messaging_register(winbind_messaging_context(), NULL,
> +	messaging_register(server_messaging_context(), NULL,
>  			   MSG_WINBIND_DOMAIN_OFFLINE, winbind_msg_domain_offline);
> -	messaging_register(winbind_messaging_context(), NULL,
> +	messaging_register(server_messaging_context(), NULL,
>  			   MSG_WINBIND_DOMAIN_ONLINE, winbind_msg_domain_online);
>  
>  	messaging_register(msg_ctx, NULL,
> @@ -1663,7 +1663,7 @@ int main(int argc, const char **argv)
>  
>  	/* Initialise messaging system */
>  
> -	if (winbind_messaging_context() == NULL) {
> +	if (server_messaging_context() == NULL) {
>  		exit(1);
>  	}
>  
> @@ -1757,7 +1757,7 @@ int main(int argc, const char **argv)
>  	 * winbindd-specific resources we must free yet. JRA.
>  	 */
>  
> -	status = reinit_after_fork(winbind_messaging_context(),
> +	status = reinit_after_fork(server_messaging_context(),
>  				   server_event_context(),
>  				   false, NULL);
>  	if (!NT_STATUS_IS_OK(status)) {
> @@ -1774,9 +1774,9 @@ int main(int argc, const char **argv)
>  		exit_daemon(nt_errstr(status), map_errno_from_nt_status(status));
>  	}
>  
> -	winbindd_register_handlers(winbind_messaging_context(), !Fork);
> +	winbindd_register_handlers(server_messaging_context(), !Fork);
>  
> -	if (!messaging_parent_dgm_cleanup_init(winbind_messaging_context())) {
> +	if (!messaging_parent_dgm_cleanup_init(server_messaging_context())) {
>  		exit(1);
>  	}
>  
> @@ -1789,7 +1789,7 @@ int main(int argc, const char **argv)
>  	rpc_samr_init(NULL);
>  
>  	winbindd_init_addrchange(NULL, server_event_context(),
> -				 winbind_messaging_context());
> +				 server_messaging_context());
>  
>  	/* setup listen sockets */
>  
> diff --git a/source3/winbindd/winbindd_cm.c b/source3/winbindd/winbindd_cm.c
> index cece96e7166..f88c704c014 100644
> --- a/source3/winbindd/winbindd_cm.c
> +++ b/source3/winbindd/winbindd_cm.c
> @@ -223,10 +223,10 @@ static bool fork_child_dc_connect(struct winbindd_domain *domain)
>  
>  	if (domain->dc_probe_pid != (pid_t)0) {
>  		/* Parent */
> -		messaging_register(winbind_messaging_context(), NULL,
> +		messaging_register(server_messaging_context(), NULL,
>  				   MSG_WINBIND_TRY_TO_GO_ONLINE,
>  				   msg_try_to_go_online);
> -		messaging_register(winbind_messaging_context(), NULL,
> +		messaging_register(server_messaging_context(), NULL,
>  				   MSG_WINBIND_FAILED_TO_GO_ONLINE,
>  				   msg_failed_to_go_online);
>  		return True;
> @@ -247,7 +247,7 @@ static bool fork_child_dc_connect(struct winbindd_domain *domain)
>  	if (!NT_STATUS_IS_OK(status)) {
>  		DEBUG(1, ("winbindd_reinit_after_fork failed: %s\n",
>  			  nt_errstr(status)));
> -		messaging_send_buf(winbind_messaging_context(),
> +		messaging_send_buf(server_messaging_context(),
>  				   pid_to_procid(parent_pid),
>  				   MSG_WINBIND_FAILED_TO_GO_ONLINE,
>  				   (const uint8_t *)domain->name,
> @@ -259,7 +259,7 @@ static bool fork_child_dc_connect(struct winbindd_domain *domain)
>  	mem_ctx = talloc_init("fork_child_dc_connect");
>  	if (!mem_ctx) {
>  		DEBUG(0,("talloc_init failed.\n"));
> -		messaging_send_buf(winbind_messaging_context(),
> +		messaging_send_buf(server_messaging_context(),
>  				   pid_to_procid(parent_pid),
>  				   MSG_WINBIND_FAILED_TO_GO_ONLINE,
>  				   (const uint8_t *)domain->name,
> @@ -269,7 +269,7 @@ static bool fork_child_dc_connect(struct winbindd_domain *domain)
>  
>  	if ((!get_dcs(mem_ctx, domain, &dcs, &num_dcs, 0)) || (num_dcs == 0)) {
>  		/* Still offline ? Can't find DC's. */
> -		messaging_send_buf(winbind_messaging_context(),
> +		messaging_send_buf(server_messaging_context(),
>  				   pid_to_procid(parent_pid),
>  				   MSG_WINBIND_FAILED_TO_GO_ONLINE,
>  				   (const uint8_t *)domain->name,
> @@ -280,7 +280,7 @@ static bool fork_child_dc_connect(struct winbindd_domain *domain)
>  	/* We got a DC. Send a message to our parent to get it to
>  	   try and do the same. */
>  
> -	messaging_send_buf(winbind_messaging_context(),
> +	messaging_send_buf(server_messaging_context(),
>  			   pid_to_procid(parent_pid),
>  			   MSG_WINBIND_TRY_TO_GO_ONLINE,
>  			   (const uint8_t *)domain->name,
> @@ -444,7 +444,7 @@ void set_domain_offline(struct winbindd_domain *domain)
>  
>  	/* Send a message to the parent that the domain is offline. */
>  	if (parent_pid > 1 && !domain->internal) {
> -		messaging_send_buf(winbind_messaging_context(),
> +		messaging_send_buf(server_messaging_context(),
>  				   pid_to_procid(parent_pid),
>  				   MSG_WINBIND_DOMAIN_OFFLINE,
>  				   (uint8_t *)domain->name,
> @@ -458,7 +458,7 @@ void set_domain_offline(struct winbindd_domain *domain)
>  		struct winbindd_child *idmap = idmap_child();
>  
>  		if ( idmap->pid != 0 ) {
> -			messaging_send_buf(winbind_messaging_context(),
> +			messaging_send_buf(server_messaging_context(),
>  					   pid_to_procid(idmap->pid), 
>  					   MSG_WINBIND_OFFLINE, 
>  					   (const uint8_t *)domain->name,
> @@ -521,16 +521,16 @@ static void set_domain_online(struct winbindd_domain *domain)
>  	TALLOC_FREE(domain->check_online_event);
>  
>  	/* Ensure we ignore any pending child messages. */
> -	messaging_deregister(winbind_messaging_context(),
> +	messaging_deregister(server_messaging_context(),
>  			     MSG_WINBIND_TRY_TO_GO_ONLINE, NULL);
> -	messaging_deregister(winbind_messaging_context(),
> +	messaging_deregister(server_messaging_context(),
>  			     MSG_WINBIND_FAILED_TO_GO_ONLINE, NULL);
>  
>  	domain->online = True;
>  
>  	/* Send a message to the parent that the domain is online. */
>  	if (parent_pid > 1 && !domain->internal) {
> -		messaging_send_buf(winbind_messaging_context(),
> +		messaging_send_buf(server_messaging_context(),
>  				   pid_to_procid(parent_pid),
>  				   MSG_WINBIND_DOMAIN_ONLINE,
>  				   (uint8_t *)domain->name,
> @@ -544,7 +544,7 @@ static void set_domain_online(struct winbindd_domain *domain)
>  		struct winbindd_child *idmap = idmap_child();
>  
>  		if ( idmap->pid != 0 ) {
> -			messaging_send_buf(winbind_messaging_context(),
> +			messaging_send_buf(server_messaging_context(),
>  					   pid_to_procid(idmap->pid), 
>  					   MSG_WINBIND_ONLINE, 
>  					   (const uint8_t *)domain->name,
> @@ -1420,7 +1420,7 @@ static bool dcip_check_name(TALLOC_CTX *mem_ctx,
>  	}
>  #endif
>  
> -	status = nbt_getdc(winbind_messaging_context(), 10, pss, domain->name,
> +	status = nbt_getdc(server_messaging_context(), 10, pss, domain->name,
>  			   &domain->sid, nt_version, mem_ctx, &nt_version,
>  			   &dc_name, NULL);
>  	if (NT_STATUS_IS_OK(status)) {
> @@ -1789,7 +1789,7 @@ NTSTATUS wb_open_internal_pipe(TALLOC_CTX *mem_ctx,
>  						 session_info,
>  						 NULL,
>  						 NULL,
> -						 winbind_messaging_context(),
> +						 server_messaging_context(),
>  						 &cli);
>  	} else {
>  		status = rpc_pipe_open_internal(mem_ctx,
> @@ -1797,7 +1797,7 @@ NTSTATUS wb_open_internal_pipe(TALLOC_CTX *mem_ctx,
>  						session_info,
>  						NULL,
>  						NULL,
> -						winbind_messaging_context(),
> +						server_messaging_context(),
>  						&cli);
>  	}
>  	if (!NT_STATUS_IS_OK(status)) {
> @@ -3211,7 +3211,7 @@ static NTSTATUS cm_connect_netlogon_transport(struct winbindd_domain *domain,
>  					      enum dcerpc_transport_t transport,
>  					      struct rpc_pipe_client **cli)
>  {
> -	struct messaging_context *msg_ctx = winbind_messaging_context();
> +	struct messaging_context *msg_ctx = server_messaging_context();
>  	struct winbindd_cm_conn *conn;
>  	NTSTATUS result;
>  	struct cli_credentials *creds = NULL;
> diff --git a/source3/winbindd/winbindd_dual.c b/source3/winbindd/winbindd_dual.c
> index d36eb0525c9..3b25e53e786 100644
> --- a/source3/winbindd/winbindd_dual.c
> +++ b/source3/winbindd/winbindd_dual.c
> @@ -1051,7 +1051,7 @@ static void machine_password_change_handler(struct tevent_context *ctx,
>  					    struct timeval now,
>  					    void *private_data)
>  {
> -	struct messaging_context *msg_ctx = winbind_messaging_context();
> +	struct messaging_context *msg_ctx = server_messaging_context();
>  	struct winbindd_child *child =
>  		(struct winbindd_child *)private_data;
>  	struct rpc_pipe_client *netlogon_pipe = NULL;
> @@ -1250,7 +1250,7 @@ NTSTATUS winbindd_reinit_after_fork(const struct winbindd_child *myself,
>  	NTSTATUS status;
>  
>  	status = reinit_after_fork(
> -		winbind_messaging_context(),
> +		server_messaging_context(),
>  		server_event_context(),
>  		true, NULL);
>  	if (!NT_STATUS_IS_OK(status)) {
> @@ -1275,26 +1275,26 @@ NTSTATUS winbindd_reinit_after_fork(const struct winbindd_child *myself,
>  	CatchChild();
>  
>  	/* Don't handle the same messages as our parent. */
> -	messaging_deregister(winbind_messaging_context(),
> +	messaging_deregister(server_messaging_context(),
>  			     MSG_SMB_CONF_UPDATED, NULL);
> -	messaging_deregister(winbind_messaging_context(),
> +	messaging_deregister(server_messaging_context(),
>  			     MSG_SHUTDOWN, NULL);
> -	messaging_deregister(winbind_messaging_context(),
> +	messaging_deregister(server_messaging_context(),
>  			     MSG_WINBIND_OFFLINE, NULL);
> -	messaging_deregister(winbind_messaging_context(),
> +	messaging_deregister(server_messaging_context(),
>  			     MSG_WINBIND_ONLINE, NULL);
> -	messaging_deregister(winbind_messaging_context(),
> +	messaging_deregister(server_messaging_context(),
>  			     MSG_WINBIND_ONLINESTATUS, NULL);
> -	messaging_deregister(winbind_messaging_context(),
> +	messaging_deregister(server_messaging_context(),
>  			     MSG_DUMP_EVENT_LIST, NULL);
> -	messaging_deregister(winbind_messaging_context(),
> +	messaging_deregister(server_messaging_context(),
>  			     MSG_WINBIND_DUMP_DOMAIN_LIST, NULL);
> -	messaging_deregister(winbind_messaging_context(),
> +	messaging_deregister(server_messaging_context(),
>  			     MSG_DEBUG, NULL);
>  
> -	messaging_deregister(winbind_messaging_context(),
> +	messaging_deregister(server_messaging_context(),
>  			     MSG_WINBIND_DOMAIN_OFFLINE, NULL);
> -	messaging_deregister(winbind_messaging_context(),
> +	messaging_deregister(server_messaging_context(),
>  			     MSG_WINBIND_DOMAIN_ONLINE, NULL);
>  
>  	/* We have destroyed all events in the winbindd_event_context
> @@ -1492,15 +1492,15 @@ static bool fork_domain_child(struct winbindd_child *child)
>  	}
>  
>  	/* Handle online/offline messages. */
> -	messaging_register(winbind_messaging_context(), NULL,
> +	messaging_register(server_messaging_context(), NULL,
>  			   MSG_WINBIND_OFFLINE, child_msg_offline);
> -	messaging_register(winbind_messaging_context(), NULL,
> +	messaging_register(server_messaging_context(), NULL,
>  			   MSG_WINBIND_ONLINE, child_msg_online);
> -	messaging_register(winbind_messaging_context(), NULL,
> +	messaging_register(server_messaging_context(), NULL,
>  			   MSG_DUMP_EVENT_LIST, child_msg_dump_event_list);
> -	messaging_register(winbind_messaging_context(), NULL,
> +	messaging_register(server_messaging_context(), NULL,
>  			   MSG_DEBUG, debug_message);
> -	messaging_register(winbind_messaging_context(), NULL,
> +	messaging_register(server_messaging_context(), NULL,
>  			   MSG_WINBIND_IP_DROPPED,
>  			   winbind_msg_ip_dropped);
>  
> diff --git a/source3/winbindd/winbindd_dual_srv.c b/source3/winbindd/winbindd_dual_srv.c
> index 9fb15e9b0ab..797a9d95493 100644
> --- a/source3/winbindd/winbindd_dual_srv.c
> +++ b/source3/winbindd/winbindd_dual_srv.c
> @@ -523,7 +523,7 @@ NTSTATUS _wbint_DsGetDcName(struct pipes_struct *p, struct wbint_DsGetDcName *r)
>  	struct dcerpc_binding_handle *b;
>  
>  	if (domain == NULL) {
> -		return dsgetdcname(p->mem_ctx, winbind_messaging_context(),
> +		return dsgetdcname(p->mem_ctx, server_messaging_context(),
>  				   r->in.domain_name, r->in.domain_guid,
>  				   r->in.site_name ? r->in.site_name : "",
>  				   r->in.flags,
> @@ -715,7 +715,7 @@ again:
>  NTSTATUS _wbint_ChangeMachineAccount(struct pipes_struct *p,
>  				     struct wbint_ChangeMachineAccount *r)
>  {
> -	struct messaging_context *msg_ctx = winbind_messaging_context();
> +	struct messaging_context *msg_ctx = server_messaging_context();
>  	struct winbindd_domain *domain;
>  	NTSTATUS status;
>  	struct rpc_pipe_client *netlogon_pipe;
> @@ -1364,7 +1364,7 @@ static WERROR _winbind_LogonControl_CHANGE_PASSWORD(struct pipes_struct *p,
>  			     struct winbindd_domain *domain,
>  			     struct winbind_LogonControl *r)
>  {
> -	struct messaging_context *msg_ctx = winbind_messaging_context();
> +	struct messaging_context *msg_ctx = server_messaging_context();
>  	NTSTATUS status;
>  	struct rpc_pipe_client *netlogon_pipe;
>  	struct cli_credentials *creds = NULL;
> -- 
> 2.11.0
> 
> 
> From e371ac1557199e5a37a52f8c3f116419ca2a669f Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Fri, 17 Nov 2017 11:47:37 +0100
> Subject: [PATCH 4/4] winbind: Remove winbind_messaging_context
> 
> Bug: https://bugzilla.samba.org/show_bug.cgi?id=13150
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/winbindd/winbindd.c       | 19 -------------------
>  source3/winbindd/winbindd_proto.h |  1 -
>  2 files changed, 20 deletions(-)
> 
> diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c
> index 679faefe2fd..ceb131e9b32 100644
> --- a/source3/winbindd/winbindd.c
> +++ b/source3/winbindd/winbindd.c
> @@ -60,25 +60,6 @@ static bool interactive = False;
>  
>  extern bool override_logfile;
>  
> -struct messaging_context *winbind_messaging_context(void)
> -{
> -	static struct messaging_context *msg = NULL;
> -
> -	if (msg != NULL) {
> -		return msg;
> -	}
> -
> -	/*
> -	 * Note we MUST use the NULL context here, not the autofree context,
> -	 * to avoid side effects in forked children exiting.
> -	 */
> -	msg = messaging_init(NULL, server_event_context());
> -	if (msg == NULL) {
> -		smb_panic("Could not init winbindd's messaging context.\n");
> -	}
> -	return msg;
> -}
> -
>  struct imessaging_context *winbind_imessaging_context(void)
>  {
>  	static struct imessaging_context *msg = NULL;
> diff --git a/source3/winbindd/winbindd_proto.h b/source3/winbindd/winbindd_proto.h
> index ccf39e57508..83136996dd2 100644
> --- a/source3/winbindd/winbindd_proto.h
> +++ b/source3/winbindd/winbindd_proto.h
> @@ -24,7 +24,6 @@
>  #define _WINBINDD_PROTO_H_
>  
>  /* The following definitions come from winbindd/winbindd.c  */
> -struct messaging_context *winbind_messaging_context(void);
>  struct imessaging_context *winbind_imessaging_context(void);
>  void request_error(struct winbindd_cli_state *state);
>  void request_ok(struct winbindd_cli_state *state);
> -- 
> 2.11.0
> 




More information about the samba-technical mailing list