[PATCH] Remove serverid.tdb

Jeremy Allison jra at samba.org
Mon Dec 4 23:55:50 UTC 2017


On Mon, Nov 27, 2017 at 12:16:36PM +0100, Volker Lendecke via samba-technical wrote:
> Hi!
> 
> Attached find a patch that replaces the message_send_all
> implementation with other mechanisms. This makes serverid.tdb
> obsolete.
> 
> Review appreciated!

Went through really carefully. LGTM ! RB+ and pushed.

Thanks Volker for getting rid of another tdb :-).

> -- 
> 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 4a05217af459aa6d5fea4467888a16b4fe260e2d Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Fri, 21 Jul 2017 19:08:43 +0200
> Subject: [PATCH 01/11] messaging: Remove the "n_sent" arg from
>  message_send_all
> 
> The only user of this is an informative message in smbcontrol. I don't think
> that's worth the effort.
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/include/serverid.h                  | 3 +--
>  source3/lib/serverid.c                      | 8 +-------
>  source3/passdb/pdb_interface.c              | 3 +--
>  source3/printing/queue_process.c            | 2 +-
>  source3/rpc_server/fss/srv_fss_agent.c      | 6 +++---
>  source3/rpc_server/spoolss/srv_spoolss_nt.c | 4 ++--
>  source3/rpc_server/srvsvc/srv_srvsvc_nt.c   | 8 +++-----
>  source3/smbd/smbd_cleanupd.c                | 2 +-
>  source3/smbd/statcache.c                    | 3 +--
>  source3/utils/smbcontrol.c                  | 5 +----
>  10 files changed, 15 insertions(+), 29 deletions(-)
> 
> diff --git a/source3/include/serverid.h b/source3/include/serverid.h
> index 749b950f2c8..a73a6f6986c 100644
> --- a/source3/include/serverid.h
> +++ b/source3/include/serverid.h
> @@ -75,7 +75,6 @@ struct messaging_context;
>  
>  bool message_send_all(struct messaging_context *msg_ctx,
>  		      int msg_type,
> -		      const void *buf, size_t len,
> -		      int *n_sent);
> +		      const void *buf, size_t len);
>  
>  #endif
> diff --git a/source3/lib/serverid.c b/source3/lib/serverid.c
> index 73004489bef..9fd506df5fd 100644
> --- a/source3/lib/serverid.c
> +++ b/source3/lib/serverid.c
> @@ -371,15 +371,11 @@ static int traverse_fn(struct db_record *rec, const struct server_id *id,
>   * applications that use it. When we need efficient broadcast we can add
>   * it.
>   *
> - * @param n_sent Set to the number of messages sent.  This should be
> - * equal to the number of processes, but be careful for races.
> - *
>   * @retval True for success.
>   **/
>  bool message_send_all(struct messaging_context *msg_ctx,
>  		      int msg_type,
> -		      const void *buf, size_t len,
> -		      int *n_sent)
> +		      const void *buf, size_t len)
>  {
>  	struct msg_all msg_all;
>  
> @@ -406,7 +402,5 @@ bool message_send_all(struct messaging_context *msg_ctx,
>  	msg_all.msg_ctx = msg_ctx;
>  
>  	serverid_traverse(traverse_fn, &msg_all);
> -	if (n_sent)
> -		*n_sent = msg_all.n_sent;
>  	return true;
>  }
> diff --git a/source3/passdb/pdb_interface.c b/source3/passdb/pdb_interface.c
> index 49752dde659..9827046187e 100644
> --- a/source3/passdb/pdb_interface.c
> +++ b/source3/passdb/pdb_interface.c
> @@ -651,8 +651,7 @@ NTSTATUS pdb_delete_user(TALLOC_CTX *mem_ctx, struct samu *sam_acct)
>  	message_send_all(server_messaging_context(),
>  			 ID_CACHE_DELETE,
>  			 msg_data,
> -			 strlen(msg_data) + 1,
> -			 NULL);
> +			 strlen(msg_data) + 1);
>  
>  	TALLOC_FREE(msg_data);
>  	return status;
> diff --git a/source3/printing/queue_process.c b/source3/printing/queue_process.c
> index e07aca036fa..381ef348805 100644
> --- a/source3/printing/queue_process.c
> +++ b/source3/printing/queue_process.c
> @@ -144,7 +144,7 @@ static void reload_pcap_change_notify(struct tevent_context *ev,
>  	 */
>  	delete_and_reload_printers_full(ev, msg_ctx);
>  
> -	message_send_all(msg_ctx, MSG_PRINTER_PCAP, NULL, 0, NULL);
> +	message_send_all(msg_ctx, MSG_PRINTER_PCAP, NULL, 0);
>  }
>  
>  struct bq_state {
> diff --git a/source3/rpc_server/fss/srv_fss_agent.c b/source3/rpc_server/fss/srv_fss_agent.c
> index 0fc974bb455..c0bf7ddd11a 100644
> --- a/source3/rpc_server/fss/srv_fss_agent.c
> +++ b/source3/rpc_server/fss/srv_fss_agent.c
> @@ -1235,7 +1235,7 @@ uint32_t _fss_ExposeShadowCopySet(struct pipes_struct *p,
>  	}
>  	unbecome_root();
>  
> -	message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0, NULL);
> +	message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>  	for (sc = sc_set->scs; sc; sc = sc->next) {
>  		struct fss_sc_smap *sm;
>  		for (sm = sc->smaps; sm; sm = sm->next)
> @@ -1577,7 +1577,7 @@ static NTSTATUS sc_smap_unexpose(struct messaging_context *msg_ctx,
>  			ret = NT_STATUS_UNSUCCESSFUL;
>  			goto err_cancel;
>  		}
> -		message_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0, NULL);
> +		message_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>  	} else {
>  		ret = NT_STATUS_OK;
>  		goto err_cancel;
> @@ -1661,7 +1661,7 @@ uint32_t _fss_DeleteShareMapping(struct pipes_struct *p,
>  	}
>  
>  	message_send_all(p->msg_ctx, MSG_SMB_FORCE_TDIS, sc_smap->sc_share_name,
> -			 strlen(sc_smap->sc_share_name) + 1, NULL);
> +			 strlen(sc_smap->sc_share_name) + 1);
>  
>  	if (sc->smaps_count > 1) {
>  		/* do not delete the underlying snapshot - still in use */
> diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c
> index 1476dc6bf15..d8b6023e5e9 100644
> --- a/source3/rpc_server/spoolss/srv_spoolss_nt.c
> +++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c
> @@ -368,7 +368,7 @@ static WERROR delete_printer_hook(TALLOC_CTX *ctx, struct security_token *token,
>  	ret = smbrun(command, NULL, NULL);
>  	if (ret == 0) {
>  		/* Tell everyone we updated smb.conf. */
> -		message_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0, NULL);
> +		message_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>  	}
>  
>  	if ( is_print_op )
> @@ -6433,7 +6433,7 @@ static bool add_printer_hook(TALLOC_CTX *ctx, struct security_token *token,
>  	ret = smbrun(command, &fd, NULL);
>  	if (ret == 0) {
>  		/* Tell everyone we updated smb.conf. */
> -		message_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0, NULL);
> +		message_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>  	}
>  
>  	if ( is_print_op )
> diff --git a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
> index 2a8cf8de650..899feb22da9 100644
> --- a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
> +++ b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
> @@ -1909,7 +1909,7 @@ WERROR _srvsvc_NetShareSetInfo(struct pipes_struct *p,
>  		if (ret == 0) {
>  			/* Tell everyone we updated smb.conf. */
>  			message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED,
> -					 NULL, 0, NULL);
> +					 NULL, 0);
>  		}
>  
>  		if ( is_disk_op )
> @@ -2111,8 +2111,7 @@ WERROR _srvsvc_NetShareAdd(struct pipes_struct *p,
>  	ret = smbrun(command, NULL, NULL);
>  	if (ret == 0) {
>  		/* Tell everyone we updated smb.conf. */
> -		message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0,
> -				 NULL);
> +		message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>  	}
>  
>  	if ( is_disk_op )
> @@ -2219,8 +2218,7 @@ WERROR _srvsvc_NetShareDel(struct pipes_struct *p,
>  	ret = smbrun(command, NULL, NULL);
>  	if (ret == 0) {
>  		/* Tell everyone we updated smb.conf. */
> -		message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0,
> -				 NULL);
> +		message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>  	}
>  
>  	if ( is_disk_op )
> diff --git a/source3/smbd/smbd_cleanupd.c b/source3/smbd/smbd_cleanupd.c
> index 152f63c31ce..90c12cdcd7c 100644
> --- a/source3/smbd/smbd_cleanupd.c
> +++ b/source3/smbd/smbd_cleanupd.c
> @@ -98,7 +98,7 @@ static void smbd_cleanupd_unlock(struct messaging_context *msg,
>  	DBG_WARNING("Cleaning up brl and lock database after unclean "
>  		    "shutdown\n");
>  
> -	message_send_all(msg, MSG_SMB_UNLOCK, NULL, 0, NULL);
> +	message_send_all(msg, MSG_SMB_UNLOCK, NULL, 0);
>  
>  	brl_revalidate(msg, private_data, msg_type, server_id, data);
>  }
> diff --git a/source3/smbd/statcache.c b/source3/smbd/statcache.c
> index 89a4a3d2237..2023d52fb84 100644
> --- a/source3/smbd/statcache.c
> +++ b/source3/smbd/statcache.c
> @@ -357,8 +357,7 @@ void smbd_send_stat_cache_delete_message(struct messaging_context *msg_ctx,
>  	message_send_all(msg_ctx,
>  			MSG_SMB_STAT_CACHE_DELETE,
>  			name,
> -			strlen(name)+1,
> -			NULL);
> +			strlen(name)+1);
>  #endif
>  }
>  
> diff --git a/source3/utils/smbcontrol.c b/source3/utils/smbcontrol.c
> index 4c4bfcb4e5b..08c1530cdff 100644
> --- a/source3/utils/smbcontrol.c
> +++ b/source3/utils/smbcontrol.c
> @@ -62,16 +62,13 @@ static bool send_message(struct messaging_context *msg_ctx,
>  			 const void *buf, int len)
>  {
>  	bool ret;
> -	int n_sent = 0;
>  
>  	if (procid_to_pid(&pid) != 0)
>  		return NT_STATUS_IS_OK(
>  			messaging_send_buf(msg_ctx, pid, msg_type,
>  					   (const uint8_t *)buf, len));
>  
> -	ret = message_send_all(msg_ctx, msg_type, buf, len, &n_sent);
> -	DEBUG(10,("smbcontrol/send_message: broadcast message to "
> -		  "%d processes\n", n_sent));
> +	ret = message_send_all(msg_ctx, msg_type, buf, len);
>  
>  	return ret;
>  }
> -- 
> 2.11.0
> 
> 
> From 337492caa06799c31e01d4d6bcf56137e227401e Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Fri, 21 Jul 2017 19:03:26 +0200
> Subject: [PATCH 02/11] messaging: Add messaging_dgm_forall
> 
> This factors out the traversal function from _wipe. It will be used to
> replace message_send_all soon.
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/lib/messages_dgm.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
>  source3/lib/messages_dgm.h |  2 ++
>  2 files changed, 48 insertions(+)
> 
> diff --git a/source3/lib/messages_dgm.c b/source3/lib/messages_dgm.c
> index 15c83f75c47..2b0190a4b45 100644
> --- a/source3/lib/messages_dgm.c
> +++ b/source3/lib/messages_dgm.c
> @@ -1614,6 +1614,52 @@ int messaging_dgm_wipe(void)
>  	return 0;
>  }
>  
> +int messaging_dgm_forall(int (*fn)(pid_t pid, void *private_data),
> +			 void *private_data)
> +{
> +	struct messaging_dgm_context *ctx = global_dgm_context;
> +	DIR *msgdir;
> +	struct dirent *dp;
> +
> +	if (ctx == NULL) {
> +		return ENOTCONN;
> +	}
> +
> +	messaging_dgm_validate(ctx);
> +
> +	/*
> +	 * We scan the socket directory and not the lock directory. Otherwise
> +	 * we would race against messaging_dgm_lockfile_create's open(O_CREAT)
> +	 * and fcntl(SETLK).
> +	 */
> +
> +	msgdir = opendir(ctx->socket_dir.buf);
> +	if (msgdir == NULL) {
> +		return errno;
> +	}
> +
> +	while ((dp = readdir(msgdir)) != NULL) {
> +		unsigned long pid;
> +		int ret;
> +
> +		pid = strtoul(dp->d_name, NULL, 10);
> +		if (pid == 0) {
> +			/*
> +			 * . and .. and other malformed entries
> +			 */
> +			continue;
> +		}
> +
> +		ret = fn(pid, private_data);
> +		if (ret != 0) {
> +			break;
> +		}
> +	}
> +	closedir(msgdir);
> +
> +	return 0;
> +}
> +
>  struct messaging_dgm_fde {
>  	struct tevent_fd *fde;
>  };
> diff --git a/source3/lib/messages_dgm.h b/source3/lib/messages_dgm.h
> index ca11db1dacf..7221c72660b 100644
> --- a/source3/lib/messages_dgm.h
> +++ b/source3/lib/messages_dgm.h
> @@ -42,6 +42,8 @@ int messaging_dgm_send(pid_t pid,
>  		       const int *fds, size_t num_fds);
>  int messaging_dgm_cleanup(pid_t pid);
>  int messaging_dgm_wipe(void);
> +int messaging_dgm_forall(int (*fn)(pid_t pid, void *private_data),
> +			 void *private_data);
>  
>  struct messaging_dgm_fde;
>  struct messaging_dgm_fde *messaging_dgm_register_tevent_context(
> -- 
> 2.11.0
> 
> 
> From da8c746b8b516db20088038287b5848d7ee49ba8 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Mon, 16 Oct 2017 21:52:35 +0200
> Subject: [PATCH 03/11] messaging_dgm: Use messaging_dgm_forall in dgm_wipe
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/lib/messages_dgm.c | 59 +++++++++++++---------------------------------
>  1 file changed, 17 insertions(+), 42 deletions(-)
> 
> diff --git a/source3/lib/messages_dgm.c b/source3/lib/messages_dgm.c
> index 2b0190a4b45..f3e4e742fc0 100644
> --- a/source3/lib/messages_dgm.c
> +++ b/source3/lib/messages_dgm.c
> @@ -1562,55 +1562,30 @@ int messaging_dgm_cleanup(pid_t pid)
>  	return 0;
>  }
>  
> -int messaging_dgm_wipe(void)
> +static int messaging_dgm_wipe_fn(pid_t pid, void *private_data)
>  {
> -	struct messaging_dgm_context *ctx = global_dgm_context;
> -	DIR *msgdir;
> -	struct dirent *dp;
> -	pid_t our_pid = getpid();
> +	pid_t *our_pid = (pid_t *)private_data;
>  	int ret;
>  
> -	if (ctx == NULL) {
> -		return ENOTCONN;
> +	if (pid == *our_pid) {
> +		/*
> +		 * fcntl(F_GETLK) will succeed for ourselves, we hold
> +		 * that lock ourselves.
> +		 */
> +		return 0;
>  	}
>  
> -	messaging_dgm_validate(ctx);
> -
> -	/*
> -	 * We scan the socket directory and not the lock directory. Otherwise
> -	 * we would race against messaging_dgm_lockfile_create's open(O_CREAT)
> -	 * and fcntl(SETLK).
> -	 */
> +	ret = messaging_dgm_cleanup(pid);
> +	DEBUG(10, ("messaging_dgm_cleanup(%lu) returned %s\n",
> +		   (unsigned long)pid, ret ? strerror(ret) : "ok"));
>  
> -	msgdir = opendir(ctx->socket_dir.buf);
> -	if (msgdir == NULL) {
> -		return errno;
> -	}
> -
> -	while ((dp = readdir(msgdir)) != NULL) {
> -		unsigned long pid;
> -
> -		pid = strtoul(dp->d_name, NULL, 10);
> -		if (pid == 0) {
> -			/*
> -			 * . and .. and other malformed entries
> -			 */
> -			continue;
> -		}
> -		if ((pid_t)pid == our_pid) {
> -			/*
> -			 * fcntl(F_GETLK) will succeed for ourselves, we hold
> -			 * that lock ourselves.
> -			 */
> -			continue;
> -		}
> -
> -		ret = messaging_dgm_cleanup(pid);
> -		DEBUG(10, ("messaging_dgm_cleanup(%lu) returned %s\n",
> -			   pid, ret ? strerror(ret) : "ok"));
> -	}
> -	closedir(msgdir);
> +	return 0;
> +}
>  
> +int messaging_dgm_wipe(void)
> +{
> +	pid_t pid = getpid();
> +	messaging_dgm_forall(messaging_dgm_wipe_fn, &pid);
>  	return 0;
>  }
>  
> -- 
> 2.11.0
> 
> 
> From e44c142aa543f9aebfa583a10d1f481c87502004 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Thu, 26 Oct 2017 17:18:36 +0200
> Subject: [PATCH 04/11] smbcontrol: Use messaging_dgm_forall
> 
> Doing stacktraces can be done locally only anyway
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/utils/smbcontrol.c | 10 +++-------
>  1 file changed, 3 insertions(+), 7 deletions(-)
> 
> diff --git a/source3/utils/smbcontrol.c b/source3/utils/smbcontrol.c
> index 08c1530cdff..417358b7d5b 100644
> --- a/source3/utils/smbcontrol.c
> +++ b/source3/utils/smbcontrol.c
> @@ -319,13 +319,9 @@ cleanup:
>  	ptrace(PTRACE_DETACH, pid, NULL, NULL);
>  }
>  
> -static int stack_trace_server(const struct server_id *id,
> -			      uint32_t msg_flags,
> -			      void *priv)
> +static int stack_trace_server(pid_t pid, void *priv)
>  {
> -	if (procid_is_local(id)) {
> -		print_stack_trace(procid_to_pid(id), (int *)priv);
> -	}
> +	print_stack_trace(pid, (int *)priv);
>  	return 0;
>  }
>  
> @@ -352,7 +348,7 @@ static bool do_daemon_stack_trace(struct tevent_context *ev_ctx,
>  		 */
>  		print_stack_trace(dest, &count);
>  	} else {
> -		serverid_traverse_read(stack_trace_server, &count);
> +		messaging_dgm_forall(stack_trace_server, &count);
>  	}
>  
>  	return True;
> -- 
> 2.11.0
> 
> 
> From 4966abd6b34ae7173934813c4f045222a8b3d5e8 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Sun, 5 Nov 2017 12:02:26 +0100
> Subject: [PATCH 05/11] net: Remove "net serverid wipe"
> 
> This used to be a hygiene command for clustered node startup. In
> clustered mode, CLEAR_IF_FIRST does not work, records can stay alive
> by means of recovery. serverid.tdb will soon die, so remove this
> command.
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/utils/net_serverid.c | 33 ---------------------------------
>  1 file changed, 33 deletions(-)
> 
> diff --git a/source3/utils/net_serverid.c b/source3/utils/net_serverid.c
> index 942f7a49024..0fc7a0118d2 100644
> --- a/source3/utils/net_serverid.c
> +++ b/source3/utils/net_serverid.c
> @@ -46,31 +46,6 @@ static int net_serverid_list(struct net_context *c, int argc,
>  	return serverid_traverse_read(net_serverid_list_fn, NULL) ? 0 : -1;
>  }
>  
> -static int net_serverid_wipe_fn(struct db_record *rec,
> -				const struct server_id *id,
> -				uint32_t msg_flags, void *private_data)
> -{
> -	NTSTATUS status;
> -
> -	if (!procid_is_local(id)) {
> -		return 0;
> -	}
> -	status = dbwrap_record_delete(rec);
> -	if (!NT_STATUS_IS_OK(status)) {
> -		struct server_id_buf idbuf;
> -		DEBUG(1, ("Could not delete serverid.tdb record %s: %s\n",
> -			  server_id_str_buf(*id, &idbuf), nt_errstr(status)));
> -	}
> -	return 0;
> -}
> -
> -static int net_serverid_wipe(struct net_context *c, int argc,
> -			     const char **argv)
> -{
> -	return serverid_traverse(net_serverid_wipe_fn, NULL) ? 0 : -1;
> -}
> -
> -
>  struct wipedbs_record_marker {
>  	struct wipedbs_record_marker *prev, *next;
>  	TDB_DATA key, val;
> @@ -705,14 +680,6 @@ int net_serverid(struct net_context *c, int argc, const char **argv)
>  			   "    List all entries from serverid.tdb")
>  		},
>  		{
> -			"wipe",
> -			net_serverid_wipe,
> -			NET_TRANSPORT_LOCAL,
> -			N_("Wipe the serverid.tdb for the current node"),
> -			N_("net serverid wipe\n"
> -			   "    Wipe the serverid.tdb for the current node")
> -		},
> -		{
>  			"wipedbs",
>  			net_serverid_wipedbs,
>  			NET_TRANSPORT_LOCAL,
> -- 
> 2.11.0
> 
> 
> From 8015c82751825458203acd14203229a59b19ed50 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Sun, 5 Nov 2017 12:09:08 +0100
> Subject: [PATCH 06/11] net: Remove "net serverid list"
> 
> Traversing a clustered tdb is a pretty expensive operation. If someone
> really needs this command-line interface, we can re-add it for the local
> node using messaging_dgm_forall. If someone needs that globally, there's
> the "onnode all" script that could be used. Alternatively, we could
> implement an enhanced ping broadcast message also returning a processes
> unique id.
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/utils/net_serverid.c | 25 -------------------------
>  1 file changed, 25 deletions(-)
> 
> diff --git a/source3/utils/net_serverid.c b/source3/utils/net_serverid.c
> index 0fc7a0118d2..c826f95cc0d 100644
> --- a/source3/utils/net_serverid.c
> +++ b/source3/utils/net_serverid.c
> @@ -29,23 +29,6 @@
>  #include "util_tdb.h"
>  #include "librpc/gen_ndr/ndr_open_files.h"
>  
> -static int net_serverid_list_fn(const struct server_id *id,
> -				uint32_t msg_flags, void *priv)
> -{
> -	struct server_id_buf idbuf;
> -	d_printf("%s %llu 0x%x\n", server_id_str_buf(*id, &idbuf),
> -		 (unsigned long long)id->unique_id,
> -		 (unsigned int)msg_flags);
> -	return 0;
> -}
> -
> -static int net_serverid_list(struct net_context *c, int argc,
> -			     const char **argv)
> -{
> -	d_printf("pid unique_id msg_flags\n");
> -	return serverid_traverse_read(net_serverid_list_fn, NULL) ? 0 : -1;
> -}
> -
>  struct wipedbs_record_marker {
>  	struct wipedbs_record_marker *prev, *next;
>  	TDB_DATA key, val;
> @@ -672,14 +655,6 @@ int net_serverid(struct net_context *c, int argc, const char **argv)
>  {
>  	struct functable func[] = {
>  		{
> -			"list",
> -			net_serverid_list,
> -			NET_TRANSPORT_LOCAL,
> -			N_("List all entries from serverid.tdb"),
> -			N_("net serverid list\n"
> -			   "    List all entries from serverid.tdb")
> -		},
> -		{
>  			"wipedbs",
>  			net_serverid_wipedbs,
>  			NET_TRANSPORT_LOCAL,
> -- 
> 2.11.0
> 
> 
> From bf751a871549f03e81b9646c62f19e2e83dedb53 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Tue, 25 Jul 2017 16:24:04 +0200
> Subject: [PATCH 07/11] messaging: Remove an unused #define
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/include/messages.h | 12 ------------
>  1 file changed, 12 deletions(-)
> 
> diff --git a/source3/include/messages.h b/source3/include/messages.h
> index 8d3b1d86e75..6a0340f5a7f 100644
> --- a/source3/include/messages.h
> +++ b/source3/include/messages.h
> @@ -35,18 +35,6 @@
>   */
>  #define MSG_FLAG_LOWPRIORITY		0x80000000
>  
> -
> -/*
> - * ctdb gives us 64-bit server ids for messaging_send. This is done to avoid
> - * pid clashes and to be able to register for special messages like "all
> - * smbds".
> - *
> - * Normal individual server id's have the upper 32 bits to 0, I picked "1" for
> - * Samba, other subsystems might use something else.
> - */
> -
> -#define MSG_SRVID_SAMBA 0x0000000100000000LL
> -
>  #include "librpc/gen_ndr/server_id.h"
>  #include "lib/util/data_blob.h"
>  #include "system/network.h"
> -- 
> 2.11.0
> 
> 
> From 5792dad8d471cfcd3475bacb6c055957cb8af695 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Tue, 25 Jul 2017 17:10:27 +0200
> Subject: [PATCH 08/11] messaging: Always register CTDB_SRVID_SAMBA_PROCESS
> 
> This will be used to broadcast to all processes, avoiding the costly
> traverse of serverid.tdb.
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/include/ctdb_srvids.h | 6 ++++++
>  source3/lib/messages_ctdb.c   | 9 +++++++++
>  2 files changed, 15 insertions(+)
> 
> diff --git a/source3/include/ctdb_srvids.h b/source3/include/ctdb_srvids.h
> index 500b5069e67..b51a4585060 100644
> --- a/source3/include/ctdb_srvids.h
> +++ b/source3/include/ctdb_srvids.h
> @@ -38,3 +38,9 @@
>   * locally according to the non-clustered local notify.tdb
>   */
>  #define CTDB_SRVID_SAMBA_NOTIFY_PROXY  0xFE00000000000001LL
> +
> +/*
> + * SRVID for all processes that come from Samba. Used to be
> + * MSG_SRVID_SAMBA in the past. Now used for message_send_all.
> + */
> +#define CTDB_SRVID_SAMBA_PROCESS  0xFE00000000000002LL
> diff --git a/source3/lib/messages_ctdb.c b/source3/lib/messages_ctdb.c
> index a2a7c215f23..66b9f55d256 100644
> --- a/source3/lib/messages_ctdb.c
> +++ b/source3/lib/messages_ctdb.c
> @@ -26,6 +26,7 @@
>  #include "lib/messages_util.h"
>  #include "ctdbd_conn.h"
>  #include "lib/cluster_support.h"
> +#include "ctdb_srvids.h"
>  
>  struct messaging_ctdb_context;
>  
> @@ -111,6 +112,14 @@ int messaging_ctdb_init(const char *sockname, int timeout, uint64_t unique_id,
>  		goto fail;
>  	}
>  
> +	ret = register_with_ctdbd(ctx->conn, CTDB_SRVID_SAMBA_PROCESS,
> +				  messaging_ctdb_recv, ctx);
> +	if (ret != 0) {
> +		DBG_DEBUG("register_with_ctdbd returned %s (%d)\n",
> +			  strerror(ret), ret);
> +		goto fail;
> +	}
> +
>  	ret = register_with_ctdbd(ctx->conn, unique_id, NULL, NULL);
>  	if (ret != 0) {
>  		DBG_DEBUG("register_with_ctdbd returned %s (%d)\n",
> -- 
> 2.11.0
> 
> 
> From 594edfcab4399c9eee5d96d62aa4e498fec50916 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Sun, 5 Nov 2017 12:44:01 +0100
> Subject: [PATCH 09/11] lib: Add messaging_send_all
> 
> This will replace message_send_all. With messaging_dgm_forall we have
> a local broadcast mechanism, and ctdb can also broadcast
> everywhere. So there's no need for a separate traverse/send mechanism.
> 
> There's no good error reporting mechanism for broadcasting, so make
> this function void.
> 
> This drops the message_type filtering. I believe that this does not matter in
> practice, since messaging is a lot cheaper with dgm instead of the old tdb
> based messaging. If someone presents a use case where this matters, nowadays
> I'd much rather extend the messaging_dgm lock file format (where the unique id
> lives right now) with the filter bits.
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/include/messages.h |  2 ++
>  source3/lib/messages.c     | 74 ++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 76 insertions(+)
> 
> diff --git a/source3/include/messages.h b/source3/include/messages.h
> index 6a0340f5a7f..29c394af317 100644
> --- a/source3/include/messages.h
> +++ b/source3/include/messages.h
> @@ -96,6 +96,8 @@ NTSTATUS messaging_send_iov(struct messaging_context *msg_ctx,
>  			    struct server_id server, uint32_t msg_type,
>  			    const struct iovec *iov, int iovlen,
>  			    const int *fds, size_t num_fds);
> +void messaging_send_all(struct messaging_context *msg_ctx,
> +			int msg_type, const void *buf, size_t len);
>  
>  struct tevent_req *messaging_filtered_read_send(
>  	TALLOC_CTX *mem_ctx, struct tevent_context *ev,
> diff --git a/source3/lib/messages.c b/source3/lib/messages.c
> index 01029b2d68b..a0a3f9fb1ba 100644
> --- a/source3/lib/messages.c
> +++ b/source3/lib/messages.c
> @@ -60,6 +60,12 @@
>  #include "lib/messages_ctdb_ref.h"
>  #include "lib/messages_util.h"
>  #include "cluster_support.h"
> +#include "ctdbd_conn.h"
> +#include "ctdb_srvids.h"
> +
> +#ifdef CLUSTER_SUPPORT
> +#include "ctdb_protocol.h"
> +#endif
>  
>  struct messaging_callback {
>  	struct messaging_callback *prev, *next;
> @@ -513,6 +519,7 @@ static NTSTATUS messaging_init_internal(TALLOC_CTX *mem_ctx,
>  	}
>  	talloc_set_destructor(ctx, messaging_context_destructor);
>  
> +#ifdef CLUSTER_SUPPORT
>  	if (lp_clustering()) {
>  		ctx->msg_ctdb_ref = messaging_ctdb_ref(
>  			ctx, ctx->event_ctx,
> @@ -525,6 +532,8 @@ static NTSTATUS messaging_init_internal(TALLOC_CTX *mem_ctx,
>  			goto done;
>  		}
>  	}
> +#endif
> +
>  	ctx->id.vnn = get_my_vnn();
>  
>  	ctx->names_db = server_id_db_init(ctx,
> @@ -836,6 +845,71 @@ NTSTATUS messaging_send_iov(struct messaging_context *msg_ctx,
>  	return NT_STATUS_OK;
>  }
>  
> +struct send_all_state {
> +	struct messaging_context *msg_ctx;
> +	int msg_type;
> +	const void *buf;
> +	size_t len;
> +};
> +
> +static int send_all_fn(pid_t pid, void *private_data)
> +{
> +	struct send_all_state *state = private_data;
> +	NTSTATUS status;
> +
> +	status = messaging_send_buf(state->msg_ctx, pid_to_procid(pid),
> +				    state->msg_type, state->buf, state->len);
> +	if (!NT_STATUS_IS_OK(status)) {
> +		DBG_WARNING("messaging_send_buf to %ju failed: %s\n",
> +			    (uintmax_t)pid, nt_errstr(status));
> +	}
> +
> +	return 0;
> +}
> +
> +void messaging_send_all(struct messaging_context *msg_ctx,
> +			int msg_type, const void *buf, size_t len)
> +{
> +	struct send_all_state state = {
> +		.msg_ctx = msg_ctx, .msg_type = msg_type,
> +		.buf = buf, .len = len
> +	};
> +	int ret;
> +
> +#ifdef CLUSTER_SUPPORT
> +	if (lp_clustering()) {
> +		struct ctdbd_connection *conn = messaging_ctdb_connection();
> +		uint8_t msghdr[MESSAGE_HDR_LENGTH];
> +		struct iovec iov[] = {
> +			{ .iov_base = msghdr,
> +			  .iov_len = sizeof(msghdr) },
> +			{ .iov_base = discard_const_p(void, buf),
> +			  .iov_len = len }
> +		};
> +
> +		message_hdr_put(msghdr, msg_type, messaging_server_id(msg_ctx),
> +				(struct server_id) {0});
> +
> +		ret = ctdbd_messaging_send_iov(
> +			conn, CTDB_BROADCAST_CONNECTED,
> +			CTDB_SRVID_SAMBA_PROCESS,
> +			iov, ARRAY_SIZE(iov));
> +		if (ret != 0) {
> +			DBG_WARNING("ctdbd_messaging_send_iov failed: %s\n",
> +				    strerror(ret));
> +		}
> +
> +		return;
> +	}
> +#endif
> +
> +	ret = messaging_dgm_forall(send_all_fn, &state);
> +	if (ret != 0) {
> +		DBG_WARNING("messaging_dgm_forall failed: %s\n",
> +			    strerror(ret));
> +	}
> +}
> +
>  static struct messaging_rec *messaging_rec_dup(TALLOC_CTX *mem_ctx,
>  					       struct messaging_rec *rec)
>  {
> -- 
> 2.11.0
> 
> 
> From 70d427395131b6d916013e57e1f8ff9ad683ef5b Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Sun, 5 Nov 2017 12:54:10 +0100
> Subject: [PATCH 10/11] lib: Use messaging_send_all instead of message_send_all
> 
> Just a global search&replace
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/passdb/pdb_interface.c              | 8 ++++----
>  source3/printing/queue_process.c            | 2 +-
>  source3/rpc_server/fss/srv_fss_agent.c      | 9 +++++----
>  source3/rpc_server/spoolss/srv_spoolss_nt.c | 4 ++--
>  source3/rpc_server/srvsvc/srv_srvsvc_nt.c   | 8 ++++----
>  source3/smbd/smbd_cleanupd.c                | 2 +-
>  source3/smbd/statcache.c                    | 8 ++++----
>  source3/utils/smbcontrol.c                  | 6 ++----
>  8 files changed, 23 insertions(+), 24 deletions(-)
> 
> diff --git a/source3/passdb/pdb_interface.c b/source3/passdb/pdb_interface.c
> index 9827046187e..7fdc33c4fa7 100644
> --- a/source3/passdb/pdb_interface.c
> +++ b/source3/passdb/pdb_interface.c
> @@ -648,10 +648,10 @@ NTSTATUS pdb_delete_user(TALLOC_CTX *mem_ctx, struct samu *sam_acct)
>  		 * just return */
>  		return status;
>  	}
> -	message_send_all(server_messaging_context(),
> -			 ID_CACHE_DELETE,
> -			 msg_data,
> -			 strlen(msg_data) + 1);
> +	messaging_send_all(server_messaging_context(),
> +			   ID_CACHE_DELETE,
> +			   msg_data,
> +			   strlen(msg_data) + 1);
>  
>  	TALLOC_FREE(msg_data);
>  	return status;
> diff --git a/source3/printing/queue_process.c b/source3/printing/queue_process.c
> index 381ef348805..7a3b80aae0c 100644
> --- a/source3/printing/queue_process.c
> +++ b/source3/printing/queue_process.c
> @@ -144,7 +144,7 @@ static void reload_pcap_change_notify(struct tevent_context *ev,
>  	 */
>  	delete_and_reload_printers_full(ev, msg_ctx);
>  
> -	message_send_all(msg_ctx, MSG_PRINTER_PCAP, NULL, 0);
> +	messaging_send_all(msg_ctx, MSG_PRINTER_PCAP, NULL, 0);
>  }
>  
>  struct bq_state {
> diff --git a/source3/rpc_server/fss/srv_fss_agent.c b/source3/rpc_server/fss/srv_fss_agent.c
> index c0bf7ddd11a..0e5c82ec5e9 100644
> --- a/source3/rpc_server/fss/srv_fss_agent.c
> +++ b/source3/rpc_server/fss/srv_fss_agent.c
> @@ -1235,7 +1235,7 @@ uint32_t _fss_ExposeShadowCopySet(struct pipes_struct *p,
>  	}
>  	unbecome_root();
>  
> -	message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
> +	messaging_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>  	for (sc = sc_set->scs; sc; sc = sc->next) {
>  		struct fss_sc_smap *sm;
>  		for (sm = sc->smaps; sm; sm = sm->next)
> @@ -1577,7 +1577,7 @@ static NTSTATUS sc_smap_unexpose(struct messaging_context *msg_ctx,
>  			ret = NT_STATUS_UNSUCCESSFUL;
>  			goto err_cancel;
>  		}
> -		message_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
> +		messaging_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>  	} else {
>  		ret = NT_STATUS_OK;
>  		goto err_cancel;
> @@ -1660,8 +1660,9 @@ uint32_t _fss_DeleteShareMapping(struct pipes_struct *p,
>  		goto err_tmp_free;
>  	}
>  
> -	message_send_all(p->msg_ctx, MSG_SMB_FORCE_TDIS, sc_smap->sc_share_name,
> -			 strlen(sc_smap->sc_share_name) + 1);
> +	messaging_send_all(p->msg_ctx, MSG_SMB_FORCE_TDIS,
> +			   sc_smap->sc_share_name,
> +			   strlen(sc_smap->sc_share_name) + 1);
>  
>  	if (sc->smaps_count > 1) {
>  		/* do not delete the underlying snapshot - still in use */
> diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c
> index d8b6023e5e9..f0226ba9441 100644
> --- a/source3/rpc_server/spoolss/srv_spoolss_nt.c
> +++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c
> @@ -368,7 +368,7 @@ static WERROR delete_printer_hook(TALLOC_CTX *ctx, struct security_token *token,
>  	ret = smbrun(command, NULL, NULL);
>  	if (ret == 0) {
>  		/* Tell everyone we updated smb.conf. */
> -		message_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
> +		messaging_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>  	}
>  
>  	if ( is_print_op )
> @@ -6433,7 +6433,7 @@ static bool add_printer_hook(TALLOC_CTX *ctx, struct security_token *token,
>  	ret = smbrun(command, &fd, NULL);
>  	if (ret == 0) {
>  		/* Tell everyone we updated smb.conf. */
> -		message_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
> +		messaging_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>  	}
>  
>  	if ( is_print_op )
> diff --git a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
> index 899feb22da9..2ff8e64fccc 100644
> --- a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
> +++ b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
> @@ -1908,8 +1908,8 @@ WERROR _srvsvc_NetShareSetInfo(struct pipes_struct *p,
>  		ret = smbrun(command, NULL, NULL);
>  		if (ret == 0) {
>  			/* Tell everyone we updated smb.conf. */
> -			message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED,
> -					 NULL, 0);
> +			messaging_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED,
> +					   NULL, 0);
>  		}
>  
>  		if ( is_disk_op )
> @@ -2111,7 +2111,7 @@ WERROR _srvsvc_NetShareAdd(struct pipes_struct *p,
>  	ret = smbrun(command, NULL, NULL);
>  	if (ret == 0) {
>  		/* Tell everyone we updated smb.conf. */
> -		message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
> +		messaging_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>  	}
>  
>  	if ( is_disk_op )
> @@ -2218,7 +2218,7 @@ WERROR _srvsvc_NetShareDel(struct pipes_struct *p,
>  	ret = smbrun(command, NULL, NULL);
>  	if (ret == 0) {
>  		/* Tell everyone we updated smb.conf. */
> -		message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
> +		messaging_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>  	}
>  
>  	if ( is_disk_op )
> diff --git a/source3/smbd/smbd_cleanupd.c b/source3/smbd/smbd_cleanupd.c
> index 90c12cdcd7c..cfb75c971be 100644
> --- a/source3/smbd/smbd_cleanupd.c
> +++ b/source3/smbd/smbd_cleanupd.c
> @@ -98,7 +98,7 @@ static void smbd_cleanupd_unlock(struct messaging_context *msg,
>  	DBG_WARNING("Cleaning up brl and lock database after unclean "
>  		    "shutdown\n");
>  
> -	message_send_all(msg, MSG_SMB_UNLOCK, NULL, 0);
> +	messaging_send_all(msg, MSG_SMB_UNLOCK, NULL, 0);
>  
>  	brl_revalidate(msg, private_data, msg_type, server_id, data);
>  }
> diff --git a/source3/smbd/statcache.c b/source3/smbd/statcache.c
> index 2023d52fb84..d49f5eebdf0 100644
> --- a/source3/smbd/statcache.c
> +++ b/source3/smbd/statcache.c
> @@ -354,10 +354,10 @@ void smbd_send_stat_cache_delete_message(struct messaging_context *msg_ctx,
>  					 const char *name)
>  {
>  #ifdef DEVELOPER
> -	message_send_all(msg_ctx,
> -			MSG_SMB_STAT_CACHE_DELETE,
> -			name,
> -			strlen(name)+1);
> +	messaging_send_all(msg_ctx,
> +			   MSG_SMB_STAT_CACHE_DELETE,
> +			   name,
> +			   strlen(name)+1);
>  #endif
>  }
>  
> diff --git a/source3/utils/smbcontrol.c b/source3/utils/smbcontrol.c
> index 417358b7d5b..0f6dacce20d 100644
> --- a/source3/utils/smbcontrol.c
> +++ b/source3/utils/smbcontrol.c
> @@ -61,16 +61,14 @@ static bool send_message(struct messaging_context *msg_ctx,
>  			 struct server_id pid, int msg_type,
>  			 const void *buf, int len)
>  {
> -	bool ret;
> -
>  	if (procid_to_pid(&pid) != 0)
>  		return NT_STATUS_IS_OK(
>  			messaging_send_buf(msg_ctx, pid, msg_type,
>  					   (const uint8_t *)buf, len));
>  
> -	ret = message_send_all(msg_ctx, msg_type, buf, len);
> +	messaging_send_all(msg_ctx, msg_type, buf, len);
>  
> -	return ret;
> +	return true;
>  }
>  
>  static void smbcontrol_timeout(struct tevent_context *event_ctx,
> -- 
> 2.11.0
> 
> 
> From bebc8201be2f3c5255b631d67e20fd2227380b1d Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Sun, 5 Nov 2017 12:58:09 +0100
> Subject: [PATCH 11/11] lib: Remove unused serverid.tdb
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/include/serverid.h       |  49 ------
>  source3/lib/serverid.c           | 344 ---------------------------------------
>  source3/nmbd/nmbd.c              |  10 --
>  source3/printing/nt_printing.c   |   4 -
>  source3/printing/queue_process.c |   7 -
>  source3/printing/spoolssd.c      |  13 --
>  source3/rpc_server/epmd.c        |   9 -
>  source3/rpc_server/fssd.c        |   9 -
>  source3/rpc_server/lsasd.c       |  11 --
>  source3/rpc_server/mdssd.c       |  11 --
>  source3/smbd/negprot.c           |   8 -
>  source3/smbd/process.c           |   9 -
>  source3/smbd/scavenger.c         |   8 -
>  source3/smbd/server.c            |  20 ---
>  source3/smbd/server_exit.c       |   8 -
>  source3/smbd/smbd_cleanupd.c     |  14 --
>  source3/torture/vfstest.c        |   2 -
>  source3/winbindd/winbindd.c      |  14 --
>  18 files changed, 550 deletions(-)
> 
> diff --git a/source3/include/serverid.h b/source3/include/serverid.h
> index a73a6f6986c..89487cfa62d 100644
> --- a/source3/include/serverid.h
> +++ b/source3/include/serverid.h
> @@ -21,60 +21,11 @@
>  #define __SERVERID_H__
>  
>  #include "replace.h"
> -#include "lib/dbwrap/dbwrap.h"
>  #include "librpc/gen_ndr/server_id.h"
>  
> -/* Flags to classify messages - used in message_send_all() */
> -/* Sender will filter by flag. */
> -
> -#define FLAG_MSG_GENERAL		0x0001
> -#define FLAG_MSG_SMBD			0x0002
> -#define FLAG_MSG_NMBD			0x0004
> -#define FLAG_MSG_WINBIND		0x0008
> -#define FLAG_MSG_PRINT_GENERAL		0x0010
> -/* dbwrap messages 4001-4999 */
> -#define FLAG_MSG_DBWRAP			0x0020
> -
> -/*
> - * Register a server with its unique id
> - */
> -bool serverid_register(const struct server_id id, uint32_t msg_flags);
> -
> -/*
> - * De-register a server with its unique id
> - */
> -bool serverid_deregister(const struct server_id id);
> -
>  /*
>   * Check existence of a server id
>   */
>  bool serverid_exists(const struct server_id *id);
>  
> -/*
> - * Walk the list of server_ids registered
> - */
> -bool serverid_traverse(int (*fn)(struct db_record *rec,
> -				 const struct server_id *id,
> -				 uint32_t msg_flags,
> -				 void *private_data),
> -		       void *private_data);
> -
> -/*
> - * Walk the list of server_ids registered read-only
> - */
> -bool serverid_traverse_read(int (*fn)(const struct server_id *id,
> -				      uint32_t msg_flags,
> -				      void *private_data),
> -			    void *private_data);
> -/*
> - * Ensure CLEAR_IF_FIRST works fine, to be called from the parent smbd
> - */
> -bool serverid_parent_init(TALLOC_CTX *mem_ctx);
> -
> -struct messaging_context;
> -
> -bool message_send_all(struct messaging_context *msg_ctx,
> -		      int msg_type,
> -		      const void *buf, size_t len);
> -
>  #endif
> diff --git a/source3/lib/serverid.c b/source3/lib/serverid.c
> index 9fd506df5fd..b4125cb9142 100644
> --- a/source3/lib/serverid.c
> +++ b/source3/lib/serverid.c
> @@ -18,157 +18,13 @@
>  */
>  
>  #include "includes.h"
> -#include "system/filesys.h"
>  #include "lib/util/server_id.h"
>  #include "serverid.h"
> -#include "util_tdb.h"
> -#include "dbwrap/dbwrap.h"
> -#include "dbwrap/dbwrap_open.h"
> -#include "lib/tdb_wrap/tdb_wrap.h"
>  #include "lib/param/param.h"
>  #include "ctdbd_conn.h"
> -#include "messages.h"
>  #include "lib/messages_ctdb.h"
>  #include "lib/messages_dgm.h"
>  
> -struct serverid_key {
> -	pid_t pid;
> -	uint32_t task_id;
> -	uint32_t vnn;
> -};
> -
> -struct serverid_data {
> -	uint64_t unique_id;
> -	uint32_t msg_flags;
> -};
> -
> -static struct db_context *serverid_db(void)
> -{
> -	static struct db_context *db;
> -	char *db_path;
> -
> -	if (db != NULL) {
> -		return db;
> -	}
> -
> -	db_path = lock_path("serverid.tdb");
> -	if (db_path == NULL) {
> -		return NULL;
> -	}
> -
> -	db = db_open(NULL, db_path, 0,
> -		     TDB_DEFAULT|TDB_CLEAR_IF_FIRST|TDB_INCOMPATIBLE_HASH,
> -		     O_RDWR|O_CREAT, 0644, DBWRAP_LOCK_ORDER_2,
> -		     DBWRAP_FLAG_NONE);
> -	TALLOC_FREE(db_path);
> -	return db;
> -}
> -
> -bool serverid_parent_init(TALLOC_CTX *mem_ctx)
> -{
> -	struct db_context *db;
> -
> -	db = serverid_db();
> -	if (db == NULL) {
> -		DEBUG(1, ("could not open serverid.tdb: %s\n",
> -			  strerror(errno)));
> -		return false;
> -	}
> -
> -	return true;
> -}
> -
> -static void serverid_fill_key(const struct server_id *id,
> -			      struct serverid_key *key)
> -{
> -	ZERO_STRUCTP(key);
> -	key->pid = id->pid;
> -	key->task_id = id->task_id;
> -	key->vnn = id->vnn;
> -}
> -
> -bool serverid_register(const struct server_id id, uint32_t msg_flags)
> -{
> -	struct db_context *db;
> -	struct serverid_key key;
> -	struct serverid_data data;
> -	struct db_record *rec;
> -	TDB_DATA tdbkey, tdbdata;
> -	NTSTATUS status;
> -	bool ret = false;
> -
> -	db = serverid_db();
> -	if (db == NULL) {
> -		return false;
> -	}
> -
> -	serverid_fill_key(&id, &key);
> -	tdbkey = make_tdb_data((uint8_t *)&key, sizeof(key));
> -
> -	rec = dbwrap_fetch_locked(db, talloc_tos(), tdbkey);
> -	if (rec == NULL) {
> -		DEBUG(1, ("Could not fetch_lock serverid.tdb record\n"));
> -		return false;
> -	}
> -
> -	ZERO_STRUCT(data);
> -	data.unique_id = id.unique_id;
> -	data.msg_flags = msg_flags;
> -
> -	tdbdata = make_tdb_data((uint8_t *)&data, sizeof(data));
> -	status = dbwrap_record_store(rec, tdbdata, 0);
> -	if (!NT_STATUS_IS_OK(status)) {
> -		DEBUG(1, ("Storing serverid.tdb record failed: %s\n",
> -			  nt_errstr(status)));
> -		goto done;
> -	}
> -
> -	if (lp_clustering()) {
> -		register_with_ctdbd(messaging_ctdb_connection(), id.unique_id,
> -				    NULL, NULL);
> -	}
> -
> -	ret = true;
> -done:
> -	TALLOC_FREE(rec);
> -	return ret;
> -}
> -
> -bool serverid_deregister(struct server_id id)
> -{
> -	struct db_context *db;
> -	struct serverid_key key;
> -	struct db_record *rec;
> -	TDB_DATA tdbkey;
> -	NTSTATUS status;
> -	bool ret = false;
> -
> -	db = serverid_db();
> -	if (db == NULL) {
> -		return false;
> -	}
> -
> -	serverid_fill_key(&id, &key);
> -	tdbkey = make_tdb_data((uint8_t *)&key, sizeof(key));
> -
> -	rec = dbwrap_fetch_locked(db, talloc_tos(), tdbkey);
> -	if (rec == NULL) {
> -		DEBUG(1, ("Could not fetch_lock serverid.tdb record\n"));
> -		return false;
> -	}
> -
> -	status = dbwrap_record_delete(rec);
> -	if (!NT_STATUS_IS_OK(status)) {
> -		DEBUG(1, ("Deleting serverid.tdb record failed: %s\n",
> -			  nt_errstr(status)));
> -		goto done;
> -	}
> -	ret = true;
> -done:
> -	TALLOC_FREE(rec);
> -	return ret;
> -}
> -
>  static bool serverid_exists_local(const struct server_id *id)
>  {
>  	bool exists = process_exists_by_pid(id->pid);
> @@ -204,203 +60,3 @@ bool serverid_exists(const struct server_id *id)
>  
>  	return false;
>  }
> -
> -static bool serverid_rec_parse(const struct db_record *rec,
> -			       struct server_id *id, uint32_t *msg_flags)
> -{
> -	struct serverid_key key;
> -	struct serverid_data data;
> -	TDB_DATA tdbkey;
> -	TDB_DATA tdbdata;
> -
> -	tdbkey = dbwrap_record_get_key(rec);
> -	tdbdata = dbwrap_record_get_value(rec);
> -
> -	if (tdbkey.dsize != sizeof(key)) {
> -		DEBUG(1, ("Found invalid key length %d in serverid.tdb\n",
> -			  (int)tdbkey.dsize));
> -		return false;
> -	}
> -	if (tdbdata.dsize != sizeof(data)) {
> -		DEBUG(1, ("Found invalid value length %d in serverid.tdb\n",
> -			  (int)tdbdata.dsize));
> -		return false;
> -	}
> -
> -	memcpy(&key, tdbkey.dptr, sizeof(key));
> -	memcpy(&data, tdbdata.dptr, sizeof(data));
> -
> -	id->pid = key.pid;
> -	id->task_id = key.task_id;
> -	id->vnn = key.vnn;
> -	id->unique_id = data.unique_id;
> -	*msg_flags = data.msg_flags;
> -	return true;
> -}
> -
> -struct serverid_traverse_read_state {
> -	int (*fn)(const struct server_id *id, uint32_t msg_flags,
> -		  void *private_data);
> -	void *private_data;
> -};
> -
> -static int serverid_traverse_read_fn(struct db_record *rec, void *private_data)
> -{
> -	struct serverid_traverse_read_state *state =
> -		(struct serverid_traverse_read_state *)private_data;
> -	struct server_id id;
> -	uint32_t msg_flags;
> -
> -	if (!serverid_rec_parse(rec, &id, &msg_flags)) {
> -		return 0;
> -	}
> -	return state->fn(&id, msg_flags,state->private_data);
> -}
> -
> -bool serverid_traverse_read(int (*fn)(const struct server_id *id,
> -				      uint32_t msg_flags, void *private_data),
> -			    void *private_data)
> -{
> -	struct db_context *db;
> -	struct serverid_traverse_read_state state;
> -	NTSTATUS status;
> -
> -	db = serverid_db();
> -	if (db == NULL) {
> -		return false;
> -	}
> -	state.fn = fn;
> -	state.private_data = private_data;
> -
> -	status = dbwrap_traverse_read(db, serverid_traverse_read_fn, &state,
> -				      NULL);
> -	return NT_STATUS_IS_OK(status);
> -}
> -
> -struct serverid_traverse_state {
> -	int (*fn)(struct db_record *rec, const struct server_id *id,
> -		  uint32_t msg_flags, void *private_data);
> -	void *private_data;
> -};
> -
> -static int serverid_traverse_fn(struct db_record *rec, void *private_data)
> -{
> -	struct serverid_traverse_state *state =
> -		(struct serverid_traverse_state *)private_data;
> -	struct server_id id;
> -	uint32_t msg_flags;
> -
> -	if (!serverid_rec_parse(rec, &id, &msg_flags)) {
> -		return 0;
> -	}
> -	return state->fn(rec, &id, msg_flags, state->private_data);
> -}
> -
> -bool serverid_traverse(int (*fn)(struct db_record *rec,
> -				 const struct server_id *id,
> -				 uint32_t msg_flags, void *private_data),
> -			    void *private_data)
> -{
> -	struct db_context *db;
> -	struct serverid_traverse_state state;
> -	NTSTATUS status;
> -
> -	db = serverid_db();
> -	if (db == NULL) {
> -		return false;
> -	}
> -	state.fn = fn;
> -	state.private_data = private_data;
> -
> -	status = dbwrap_traverse(db, serverid_traverse_fn, &state, NULL);
> -	return NT_STATUS_IS_OK(status);
> -}
> -
> -struct msg_all {
> -	struct messaging_context *msg_ctx;
> -	int msg_type;
> -	uint32_t msg_flag;
> -	const void *buf;
> -	size_t len;
> -	int n_sent;
> -};
> -
> -/****************************************************************************
> - Send one of the messages for the broadcast.
> -****************************************************************************/
> -
> -static int traverse_fn(struct db_record *rec, const struct server_id *id,
> -		       uint32_t msg_flags, void *state)
> -{
> -	struct msg_all *msg_all = (struct msg_all *)state;
> -	NTSTATUS status;
> -
> -	/* Don't send if the receiver hasn't registered an interest. */
> -
> -	if((msg_flags & msg_all->msg_flag) == 0) {
> -		return 0;
> -	}
> -
> -	/* If the msg send fails because the pid was not found (i.e. smbd died),
> -	 * the msg has already been deleted from the messages.tdb.*/
> -
> -	status = messaging_send_buf(msg_all->msg_ctx, *id, msg_all->msg_type,
> -				    (const uint8_t *)msg_all->buf, msg_all->len);
> -
> -	if (NT_STATUS_EQUAL(status, NT_STATUS_INVALID_HANDLE)) {
> -		struct server_id_buf idbuf;
> -
> -		/*
> -		 * If the pid was not found delete the entry from
> -		 * serverid.tdb
> -		 */
> -
> -		DEBUG(2, ("pid %s doesn't exist\n",
> -			  server_id_str_buf(*id, &idbuf)));
> -
> -		dbwrap_record_delete(rec);
> -	}
> -	msg_all->n_sent++;
> -	return 0;
> -}
> -
> -/**
> - * Send a message to all smbd processes.
> - *
> - * It isn't very efficient, but should be OK for the sorts of
> - * applications that use it. When we need efficient broadcast we can add
> - * it.
> - *
> - * @retval True for success.
> - **/
> -bool message_send_all(struct messaging_context *msg_ctx,
> -		      int msg_type,
> -		      const void *buf, size_t len)
> -{
> -	struct msg_all msg_all;
> -
> -	msg_all.msg_type = msg_type;
> -	if (msg_type < 0x100) {
> -		msg_all.msg_flag = FLAG_MSG_GENERAL;
> -	} else if (msg_type > 0x100 && msg_type < 0x200) {
> -		msg_all.msg_flag = FLAG_MSG_NMBD;
> -	} else if (msg_type > 0x200 && msg_type < 0x300) {
> -		msg_all.msg_flag = FLAG_MSG_PRINT_GENERAL;
> -	} else if (msg_type > 0x300 && msg_type < 0x400) {
> -		msg_all.msg_flag = FLAG_MSG_SMBD;
> -	} else if (msg_type > 0x400 && msg_type < 0x600) {
> -		msg_all.msg_flag = FLAG_MSG_WINBIND;
> -	} else if (msg_type > 4000 && msg_type < 5000) {
> -		msg_all.msg_flag = FLAG_MSG_DBWRAP;
> -	} else {
> -		return false;
> -	}
> -
> -	msg_all.buf = buf;
> -	msg_all.len = len;
> -	msg_all.n_sent = 0;
> -	msg_all.msg_ctx = msg_ctx;
> -
> -	serverid_traverse(traverse_fn, &msg_all);
> -	return true;
> -}
> diff --git a/source3/nmbd/nmbd.c b/source3/nmbd/nmbd.c
> index 14eaef647d0..9be708a9c02 100644
> --- a/source3/nmbd/nmbd.c
> +++ b/source3/nmbd/nmbd.c
> @@ -70,7 +70,6 @@ static void terminate(struct messaging_context *msg)
>  	kill_async_dns_child();
>  
>  	gencache_stabilize();
> -	serverid_deregister(messaging_server_id(msg));
>  
>  	pidfile_unlink(lp_pid_directory(), "nmbd");
>  
> @@ -1015,15 +1014,6 @@ static bool open_sockets(bool isdaemon, int port)
>  		exit(1);
>  	}
>  
> -	/* get broadcast messages */
> -
> -	if (!serverid_register(messaging_server_id(msg),
> -				FLAG_MSG_GENERAL |
> -				FLAG_MSG_NMBD |
> -				FLAG_MSG_DBWRAP)) {
> -		exit_daemon("Could not register NMBD process in serverid.tdb", EACCES);
> -	}
> -
>  	messaging_register(msg, NULL, MSG_FORCE_ELECTION,
>  			   nmbd_message_election);
>  #if 0
> diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c
> index 932d4d76df0..2e500f18c7d 100644
> --- a/source3/printing/nt_printing.c
> +++ b/source3/printing/nt_printing.c
> @@ -243,10 +243,6 @@ bool nt_printing_init(struct messaging_context *msg_ctx)
>  	messaging_register(msg_ctx, NULL, MSG_PRINTER_DRVUPGRADE,
>  			forward_drv_upgrade_printer_msg);
>  
> -	/* of course, none of the message callbacks matter if you don't
> -	   tell messages.c that you interested in receiving PRINT_GENERAL
> -	   msgs.  This is done in serverid_register() */
> -
>  	if ( lp_security() == SEC_ADS ) {
>  		win_rc = check_published_printers(msg_ctx);
>  		if (!W_ERROR_IS_OK(win_rc))
> diff --git a/source3/printing/queue_process.c b/source3/printing/queue_process.c
> index 7a3b80aae0c..24708c19537 100644
> --- a/source3/printing/queue_process.c
> +++ b/source3/printing/queue_process.c
> @@ -27,7 +27,6 @@
>  #include "printing.h"
>  #include "printing/pcap.h"
>  #include "printing/queue_process.h"
> -#include "serverid.h"
>  #include "locking/proto.h"
>  #include "smbd/smbd.h"
>  #include "rpc_server/rpc_config.h"
> @@ -392,12 +391,6 @@ pid_t start_background_queue(struct tevent_context *ev,
>  			exit(1);
>  		}
>  
> -		if (!serverid_register(messaging_server_id(msg_ctx),
> -				       FLAG_MSG_GENERAL |
> -				       FLAG_MSG_PRINT_GENERAL)) {
> -			exit(1);
> -		}
> -
>  		if (!locking_init()) {
>  			exit(1);
>  		}
> diff --git a/source3/printing/spoolssd.c b/source3/printing/spoolssd.c
> index 48a914ef6de..2b08d580f35 100644
> --- a/source3/printing/spoolssd.c
> +++ b/source3/printing/spoolssd.c
> @@ -17,7 +17,6 @@
>     along with this program.  If not, see <http://www.gnu.org/licenses/>.
>  */
>  #include "includes.h"
> -#include "serverid.h"
>  #include "smbd/smbd.h"
>  
>  #include "messages.h"
> @@ -280,12 +279,6 @@ static bool spoolss_child_init(struct tevent_context *ev_ctx,
>  		return false;
>  	}
>  
> -	if (!serverid_register(messaging_server_id(msg_ctx),
> -				FLAG_MSG_GENERAL |
> -				FLAG_MSG_PRINT_GENERAL)) {
> -		return false;
> -	}
> -
>  	if (!locking_init()) {
>  		return false;
>  	}
> @@ -694,12 +687,6 @@ pid_t start_spoolssd(struct tevent_context *ev_ctx,
>  		exit(1);
>  	}
>  
> -	if (!serverid_register(messaging_server_id(msg_ctx),
> -				FLAG_MSG_GENERAL |
> -				FLAG_MSG_PRINT_GENERAL)) {
> -		exit(1);
> -	}
> -
>  	if (!locking_init()) {
>  		exit(1);
>  	}
> diff --git a/source3/rpc_server/epmd.c b/source3/rpc_server/epmd.c
> index faf60f5c95b..0b94a1cf4ef 100644
> --- a/source3/rpc_server/epmd.c
> +++ b/source3/rpc_server/epmd.c
> @@ -21,7 +21,6 @@
>  
>  #include "includes.h"
>  
> -#include "serverid.h"
>  #include "ntdomain.h"
>  #include "messages.h"
>  
> @@ -171,14 +170,6 @@ void start_epmd(struct tevent_context *ev_ctx,
>  	epmd_setup_sig_term_handler(ev_ctx);
>  	epmd_setup_sig_hup_handler(ev_ctx, msg_ctx);
>  
> -	ok = serverid_register(messaging_server_id(msg_ctx),
> -			       FLAG_MSG_GENERAL |
> -			       FLAG_MSG_PRINT_GENERAL);
> -	if (!ok) {
> -		DEBUG(0, ("Failed to register serverid in epmd!\n"));
> -		exit(1);
> -	}
> -
>  	messaging_register(msg_ctx,
>  			   ev_ctx,
>  			   MSG_SMB_CONF_UPDATED,
> diff --git a/source3/rpc_server/fssd.c b/source3/rpc_server/fssd.c
> index 8f55aff6f85..3116679179a 100644
> --- a/source3/rpc_server/fssd.c
> +++ b/source3/rpc_server/fssd.c
> @@ -22,7 +22,6 @@
>  
>  #include "includes.h"
>  
> -#include "serverid.h"
>  #include "ntdomain.h"
>  #include "messages.h"
>  
> @@ -182,14 +181,6 @@ void start_fssd(struct tevent_context *ev_ctx,
>  	fssd_setup_sig_term_handler(ev_ctx);
>  	fssd_setup_sig_hup_handler(ev_ctx, msg_ctx);
>  
> -	ok = serverid_register(messaging_server_id(msg_ctx),
> -			       FLAG_MSG_GENERAL |
> -			       FLAG_MSG_PRINT_GENERAL);
> -	if (!ok) {
> -		DEBUG(0, ("Failed to register serverid in fssd!\n"));
> -		exit(1);
> -	}
> -
>  	messaging_register(msg_ctx,
>  			   ev_ctx,
>  			   MSG_SMB_CONF_UPDATED,
> diff --git a/source3/rpc_server/lsasd.c b/source3/rpc_server/lsasd.c
> index 8cd89a9fd38..08e9fe26a74 100644
> --- a/source3/rpc_server/lsasd.c
> +++ b/source3/rpc_server/lsasd.c
> @@ -20,7 +20,6 @@
>   */
>  
>  #include "includes.h"
> -#include "serverid.h"
>  #include "messages.h"
>  #include "ntdomain.h"
>  
> @@ -261,11 +260,6 @@ static bool lsasd_child_init(struct tevent_context *ev_ctx,
>  		return false;
>  	}
>  
> -	if (!serverid_register(messaging_server_id(msg_ctx),
> -			       FLAG_MSG_GENERAL)) {
> -		return false;
> -	}
> -
>  	messaging_register(msg_ctx, ev_ctx,
>  			   MSG_SMB_CONF_UPDATED, lsasd_smb_conf_updated);
>  	messaging_register(msg_ctx, ev_ctx,
> @@ -897,11 +891,6 @@ void start_lsasd(struct tevent_context *ev_ctx,
>  		exit(1);
>  	}
>  
> -	if (!serverid_register(messaging_server_id(msg_ctx),
> -			       FLAG_MSG_GENERAL)) {
> -		exit(1);
> -	}
> -
>  	messaging_register(msg_ctx,
>  			   ev_ctx,
>  			   MSG_SMB_CONF_UPDATED,
> diff --git a/source3/rpc_server/mdssd.c b/source3/rpc_server/mdssd.c
> index daff5f02e67..d5c05c7e8e9 100644
> --- a/source3/rpc_server/mdssd.c
> +++ b/source3/rpc_server/mdssd.c
> @@ -20,7 +20,6 @@
>   */
>  
>  #include "includes.h"
> -#include "serverid.h"
>  #include "messages.h"
>  #include "ntdomain.h"
>  
> @@ -219,11 +218,6 @@ static bool mdssd_child_init(struct tevent_context *ev_ctx,
>  		return false;
>  	}
>  
> -	if (!serverid_register(messaging_server_id(msg_ctx),
> -			       FLAG_MSG_GENERAL)) {
> -		return false;
> -	}
> -
>  	messaging_register(msg_ctx, ev_ctx,
>  			   MSG_SMB_CONF_UPDATED, mdssd_smb_conf_updated);
>  	messaging_register(msg_ctx, ev_ctx,
> @@ -686,11 +680,6 @@ void start_mdssd(struct tevent_context *ev_ctx,
>  		exit(1);
>  	}
>  
> -	if (!serverid_register(messaging_server_id(msg_ctx),
> -			       FLAG_MSG_GENERAL)) {
> -		exit(1);
> -	}
> -
>  	messaging_register(msg_ctx,
>  			   ev_ctx,
>  			   MSG_SMB_CONF_UPDATED,
> diff --git a/source3/smbd/negprot.c b/source3/smbd/negprot.c
> index d3f4776076f..cdbc2c4089e 100644
> --- a/source3/smbd/negprot.c
> +++ b/source3/smbd/negprot.c
> @@ -691,14 +691,6 @@ void reply_negprot(struct smb_request *req)
>  	/* possibly reload - change of architecture */
>  	reload_services(sconn, conn_snum_used, true);
>  
> -	/* moved from the netbios session setup code since we don't have that 
> -	   when the client connects to port 445.  Of course there is a small
> -	   window where we are listening to messages   -- jerry */
> -
> -	serverid_register(messaging_server_id(sconn->msg_ctx),
> -			  FLAG_MSG_GENERAL|FLAG_MSG_SMBD
> -			  |FLAG_MSG_PRINT_GENERAL);
> -
>  	/*
>  	 * Anything higher than PROTOCOL_SMB2_10 still
>  	 * needs to go via "SMB 2.???", which is marked
> diff --git a/source3/smbd/process.c b/source3/smbd/process.c
> index b5f528fc78a..4376f2eff99 100644
> --- a/source3/smbd/process.c
> +++ b/source3/smbd/process.c
> @@ -41,7 +41,6 @@
>  #include "../libcli/security/security_token.h"
>  #include "lib/id_cache.h"
>  #include "lib/util/sys_rw_data.h"
> -#include "serverid.h"
>  #include "system/threads.h"
>  
>  /* Internal message queue for deferred opens. */
> @@ -3947,14 +3946,6 @@ void smbd_process(struct tevent_context *ev_ctx,
>  	if (!interactive) {
>  		smbd_setup_sig_term_handler(sconn);
>  		smbd_setup_sig_hup_handler(sconn);
> -
> -		if (!serverid_register(messaging_server_id(msg_ctx),
> -				       FLAG_MSG_GENERAL|FLAG_MSG_SMBD
> -				       |FLAG_MSG_DBWRAP
> -				       |FLAG_MSG_PRINT_GENERAL)) {
> -			exit_server_cleanly("Could not register myself in "
> -					    "serverid.tdb");
> -		}
>  	}
>  
>  	status = smbd_add_connection(client, sock_fd, &xconn);
> diff --git a/source3/smbd/scavenger.c b/source3/smbd/scavenger.c
> index 9b479a621e3..a9fda7f0641 100644
> --- a/source3/smbd/scavenger.c
> +++ b/source3/smbd/scavenger.c
> @@ -138,7 +138,6 @@ static bool smbd_scavenger_running(struct smbd_scavenger_state *state)
>  
>  static int smbd_scavenger_server_id_destructor(struct server_id *id)
>  {
> -	serverid_deregister(*id);
>  	return 0;
>  }
>  
> @@ -256,13 +255,6 @@ static bool smbd_scavenger_start(struct smbd_scavenger_state *state)
>  
>  		scavenger_setup_sig_term_handler(state->ev);
>  
> -		if (!serverid_register(*state->scavenger_id,
> -				       FLAG_MSG_GENERAL)) {
> -			DBG_WARNING("serverid_register failed");
> -			exit_server("serverid_register failed");
> -			return false;
> -		}
> -
>  		ok = scavenger_say_hello(fds[1], *state->scavenger_id);
>  		if (!ok) {
>  			DEBUG(2, ("scavenger_say_hello failed\n"));
> diff --git a/source3/smbd/server.c b/source3/smbd/server.c
> index 916727635f9..e3f19f3cec1 100644
> --- a/source3/smbd/server.c
> +++ b/source3/smbd/server.c
> @@ -36,7 +36,6 @@
>  #include "printing/queue_process.h"
>  #include "rpc_server/rpc_service_setup.h"
>  #include "rpc_server/rpc_config.h"
> -#include "serverid.h"
>  #include "passdb.h"
>  #include "auth.h"
>  #include "messages.h"
> @@ -1263,21 +1262,6 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent,
>  		return false;
>  	}
>  
> -	/* Setup the main smbd so that we can get messages. Note that
> -	   do this after starting listening. This is needed as when in
> -	   clustered mode, ctdb won't allow us to start doing database
> -	   operations until it has gone thru a full startup, which
> -	   includes checking to see that smbd is listening. */
> -
> -	if (!serverid_register(messaging_server_id(msg_ctx),
> -			       FLAG_MSG_GENERAL|FLAG_MSG_SMBD
> -			       |FLAG_MSG_PRINT_GENERAL
> -			       |FLAG_MSG_DBWRAP)) {
> -		DEBUG(0, ("open_sockets_smbd: Failed to register "
> -			  "myself in serverid.tdb\n"));
> -		return false;
> -	}
> -
>          /* Listen to messages */
>  
>  	messaging_register(msg_ctx, NULL, MSG_SHUTDOWN, msg_exit_server);
> @@ -1986,10 +1970,6 @@ extern void build_options(bool screen);
>  		exit_daemon("Samba cannot init scavenging", EACCES);
>  	}
>  
> -	if (!serverid_parent_init(ev_ctx)) {
> -		exit_daemon("Samba cannot init server id", EACCES);
> -	}
> -
>  	if (!W_ERROR_IS_OK(registry_init_full()))
>  		exit_daemon("Samba cannot init registry", EACCES);
>  
> diff --git a/source3/smbd/server_exit.c b/source3/smbd/server_exit.c
> index 74ddd70bd3a..a9ef37f49e2 100644
> --- a/source3/smbd/server_exit.c
> +++ b/source3/smbd/server_exit.c
> @@ -171,14 +171,6 @@ static void exit_server_common(enum server_exit_reason how,
>  	/* 3 second timeout. */
>  	print_notify_send_messages(msg_ctx, 3);
>  
> -	/* delete our entry in the serverid database. */
> -	if (am_parent) {
> -		/*
> -		 * For children the parent takes care of cleaning up
> -		 */
> -		serverid_deregister(messaging_server_id(msg_ctx));
> -	}
> -
>  #ifdef USE_DMAPI
>  	/* Destroy Samba DMAPI session only if we are master smbd process */
>  	if (am_parent) {
> diff --git a/source3/smbd/smbd_cleanupd.c b/source3/smbd/smbd_cleanupd.c
> index cfb75c971be..5bd18c1411c 100644
> --- a/source3/smbd/smbd_cleanupd.c
> +++ b/source3/smbd/smbd_cleanupd.c
> @@ -177,7 +177,6 @@ static void smbd_cleanupd_process_exited(struct messaging_context *msg,
>  	     child != NULL;
>  	     child = child->next)
>  	{
> -		struct server_id child_id;
>  		bool ok;
>  
>  		ok = cleanupdb_delete_child(child->pid);
> @@ -185,14 +184,6 @@ static void smbd_cleanupd_process_exited(struct messaging_context *msg,
>  			DBG_ERR("failed to delete pid %d\n", (int)child->pid);
>  		}
>  
> -		/*
> -		 * Get child_id before messaging_cleanup which wipes
> -		 * the unique_id. Not that it really matters here for
> -		 * functionality (the child should have properly
> -		 * cleaned up :-)) though, but it looks nicer.
> -		 */
> -		child_id = pid_to_procid(child->pid);
> -
>  		smbprofile_cleanup(child->pid, state->parent_pid);
>  
>  		ret = messaging_cleanup(msg, child->pid);
> @@ -202,11 +193,6 @@ static void smbd_cleanupd_process_exited(struct messaging_context *msg,
>  				  strerror(ret));
>  		}
>  
> -		if (!serverid_deregister(child_id)) {
> -			DBG_ERR("Could not remove pid %d from serverid.tdb\n",
> -				(int)child->pid);
> -		}
> -
>  		DBG_DEBUG("cleaned up pid %d\n", (int)child->pid);
>  	}
>  
> diff --git a/source3/torture/vfstest.c b/source3/torture/vfstest.c
> index b6ef2f2e438..f156def4647 100644
> --- a/source3/torture/vfstest.c
> +++ b/source3/torture/vfstest.c
> @@ -527,7 +527,6 @@ int main(int argc, const char *argv[])
>  	sec_init();
>  	init_guest_info();
>  	locking_init();
> -	serverid_parent_init(NULL);
>  	vfs = talloc_zero(NULL, struct vfs_state);
>  	if (vfs == NULL) {
>  		return 1;
> @@ -553,7 +552,6 @@ int main(int argc, const char *argv[])
>  	vfs->conn->share_access = FILE_GENERIC_ALL;
>  	vfs->conn->read_only = false;
>  
> -	serverid_register(messaging_server_id(vfs->conn->sconn->msg_ctx), 0);
>  	file_init(vfs->conn->sconn);
>  	for (i=0; i < 1024; i++)
>  		vfs->files[i] = NULL;
> diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c
> index ceb131e9b32..23e8a5ede5e 100644
> --- a/source3/winbindd/winbindd.c
> +++ b/source3/winbindd/winbindd.c
> @@ -34,7 +34,6 @@
>  #include "rpc_client/cli_netlogon.h"
>  #include "idmap.h"
>  #include "lib/addrchange.h"
> -#include "serverid.h"
>  #include "auth.h"
>  #include "messages.h"
>  #include "../lib/util/pidfile.h"
> @@ -221,9 +220,6 @@ static void terminate(bool is_parent)
>  #endif
>  
>  	if (is_parent) {
> -		struct messaging_context *msg = server_messaging_context();
> -		struct server_id self = messaging_server_id(msg);
> -		serverid_deregister(self);
>  		pidfile_unlink(lp_pid_directory(), "winbindd");
>  	}
>  
> @@ -1305,16 +1301,6 @@ static void winbindd_register_handlers(struct messaging_context *msg_ctx,
>  		exit(1);
>  	}
>  
> -	/* get broadcast messages */
> -
> -	if (!serverid_register(messaging_server_id(msg_ctx),
> -			       FLAG_MSG_GENERAL |
> -			       FLAG_MSG_WINBIND |
> -			       FLAG_MSG_DBWRAP)) {
> -		DEBUG(1, ("Could not register myself in serverid.tdb\n"));
> -		exit(1);
> -	}
> -
>  	/* React on 'smbcontrol winbindd reload-config' in the same way
>  	   as to SIGHUP signal */
>  	messaging_register(msg_ctx, NULL,
> -- 
> 2.11.0
> 




More information about the samba-technical mailing list