[SCM] Samba Shared Repository - branch v3-3-test updated - release-3-2-0pre2-4817-gd521529

Jeremy Allison jra at samba.org
Wed Jan 14 19:16:33 GMT 2009


The branch, v3-3-test has been updated
       via  d521529b3fcbcd7b183eb466bc06497998fd7e28 (commit)
      from  c2515026807e08c7836ef1bd6220bd7eab3a1a5b (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-test


- Log -----------------------------------------------------------------
commit d521529b3fcbcd7b183eb466bc06497998fd7e28
Author: Bo Yang <boyang at novell.com>
Date:   Wed Jan 14 11:16:00 2009 -0800

    Don't send message to any other child in child process.

-----------------------------------------------------------------------

Summary of changes:
 source/winbindd/winbindd_dual.c |   34 +++++++++++++++++++++++++++++++++-
 1 files changed, 33 insertions(+), 1 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/winbindd/winbindd_dual.c b/source/winbindd/winbindd_dual.c
index 5f9b250..61585b6 100644
--- a/source/winbindd/winbindd_dual.c
+++ b/source/winbindd/winbindd_dual.c
@@ -1202,7 +1202,31 @@ bool winbindd_reinit_after_fork(const char *logfilename)
 		}
 		TALLOC_FREE(cl->lockout_policy_event);
 		TALLOC_FREE(cl->machine_password_change_event);
-        }
+
+		/* Children should never be able to send
+		 * each other messages, all messages must
+		 * go through the parent.
+		 */
+		cl->pid = (pid_t)0;
+	}
+	/*
+	 * This is a little tricky, children must not
+	 * send an MSG_WINBIND_ONLINE message to idmap_child().
+	 * If we are in a child of our primary domain or
+	 * in the process created by fork_child_dc_connect(),
+	 * and the primary domain cannot go online,
+	 * fork_child_dc_connection() sends MSG_WINBIND_ONLINE
+	 * periodically to idmap_child().
+	 *
+	 * The sequence is, fork_child_dc_connect() ---> getdcs() --->
+	 * get_dc_name_via_netlogon() ---> cm_connect_netlogon()
+	 * ---> init_dc_connection() ---> cm_open_connection --->
+	 * set_domain_online(), sends MSG_WINBIND_ONLINE to
+	 * idmap_child(). Disallow children sending messages
+	 * to each other, all messages must go through the parent.
+	 */
+	cl = idmap_child();
+	cl->pid = (pid_t)0;
 
 	return true;
 }
@@ -1296,6 +1320,14 @@ static bool fork_domain_child(struct winbindd_child *child)
 			}
 		}
 	}
+	
+	/*
+	 * We are in idmap child, make sure that we set the
+	 * check_online_event to bring primary domain online.
+	 */
+	if (child == idmap_child()) {
+		set_domain_online_request(primary_domain);
+	}
 
 	/* We might be in the idmap child...*/
 	if (child->domain && !(child->domain->internal) &&


-- 
Samba Shared Repository


More information about the samba-cvs mailing list