From c5db4eb9104f1a95220273ee2b0290d157053922 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 25 Jan 2013 13:15:51 +1100 Subject: bug9598: s4-process_single: Use pid,fd as cluster_id in process_single just like process_prefork This avoids two different process single servers (say LDAP and the RPC server) sharing the same server id. Fix-bug: https://bugzilla.samba.org/show_bug.cgi?id=9598 Reported-by: Matthieu Patou Reviewed-by: Matthieu Patou Signed-off-by: Andrew Bartlett Autobuild-User(master): Andrew Bartlett Autobuild-Date(master): Fri Jan 25 12:00:04 CET 2013 on sn-devel-104 --- source4/smbd/process_single.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'source4/smbd') diff --git a/source4/smbd/process_single.c b/source4/smbd/process_single.c index 742eac1824..ff67750034 100644 --- a/source4/smbd/process_single.c +++ b/source4/smbd/process_single.c @@ -49,6 +49,7 @@ static void single_accept_connection(struct tevent_context *ev, { NTSTATUS status; struct socket_context *connected_socket; + pid_t pid = getpid(); /* accept an incoming connection. */ status = socket_accept(listen_socket, &connected_socket); @@ -71,10 +72,14 @@ static void single_accept_connection(struct tevent_context *ev, talloc_steal(private_data, connected_socket); - /* The cluster_id(0, fd) cannot collide with the incrementing - * task below, as the first component is 0, not 1 */ + /* + * We use the PID so we cannot collide in with cluster ids + * generated in other single mode tasks, and, and won't + * collide with PIDs from process model standard because a the + * combination of pid/fd should be unique system-wide + */ new_conn(ev, lp_ctx, connected_socket, - cluster_id(0, socket_get_fd(connected_socket)), private_data); + cluster_id(pid, socket_get_fd(connected_socket)), private_data); } /* -- cgit