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

Jeremy Allison jra at samba.org
Wed Jan 7 01:36:28 GMT 2009


The branch, v3-3-test has been updated
       via  77a4a3976af353f517b5193bae9cfbe0f3ad6f4c (commit)
      from  8bd7b19aaafe96ec6ac0bf700ec9dd337b598c03 (commit)

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


- Log -----------------------------------------------------------------
commit 77a4a3976af353f517b5193bae9cfbe0f3ad6f4c
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Jan 6 17:35:34 2009 -0800

    Make winbindd_cm.c use winbindd_reinit_after_fork().
    Jeremy.

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

Summary of changes:
 source/winbindd/winbindd.c       |    5 +++++
 source/winbindd/winbindd_cm.c    |   24 ++++++++++--------------
 source/winbindd/winbindd_dual.c  |   38 +++++++++++++++++++++-----------------
 source/winbindd/winbindd_proto.h |    1 +
 4 files changed, 37 insertions(+), 31 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/winbindd/winbindd.c b/source/winbindd/winbindd.c
index 139882a..e235c96 100644
--- a/source/winbindd/winbindd.c
+++ b/source/winbindd/winbindd.c
@@ -1191,6 +1191,11 @@ int main(int argc, char **argv, char **envp)
 
 	TimeInit();
 
+	/* Don't use winbindd_reinit_after_fork here as
+	 * we're just starting up and haven't created any
+	 * winbindd-specific resources we must free yet. JRA.
+	 */
+
 	if (!reinit_after_fork(winbind_messaging_context(),
 			       winbind_event_context(), false)) {
 		DEBUG(0,("reinit_after_fork() failed\n"));
diff --git a/source/winbindd/winbindd_cm.c b/source/winbindd/winbindd_cm.c
index c2b7fdb..fa28bfa 100644
--- a/source/winbindd/winbindd_cm.c
+++ b/source/winbindd/winbindd_cm.c
@@ -172,6 +172,7 @@ static bool fork_child_dc_connect(struct winbindd_domain *domain)
 	int num_dcs = 0;
 	TALLOC_CTX *mem_ctx = NULL;
 	pid_t parent_pid = sys_getpid();
+	char *lfile = NULL;
 
 	/* Stop zombies */
 	CatchChild();
@@ -212,9 +213,14 @@ static bool fork_child_dc_connect(struct winbindd_domain *domain)
 
 	/* Leave messages blocked - we will never process one. */
 
-	if (!reinit_after_fork(winbind_messaging_context(),
-			       winbind_event_context(), true)) {
-		DEBUG(0,("reinit_after_fork() failed\n"));
+	if (!override_logfile) {
+		if (asprintf(&lfile, "%s/log.winbindd-dc-connect", get_dyn_LOGFILEBASE()) == -1) {
+			DEBUG(0, ("fork_child_dc_connect: out of memory.\n"));
+			return false;
+		}
+	}
+
+	if (!winbindd_reinit_after_fork(lfile)) {
 		messaging_send_buf(winbind_messaging_context(),
 				   pid_to_procid(parent_pid),
 				   MSG_WINBIND_FAILED_TO_GO_ONLINE,
@@ -222,17 +228,7 @@ static bool fork_child_dc_connect(struct winbindd_domain *domain)
 				   strlen(domain->name)+1);
 		_exit(0);
 	}
-
-	close_conns_after_fork();
-
-	if (!override_logfile) {
-		char *lfile;
-		if (asprintf(&lfile, "%s/log.winbindd-dc-connect", get_dyn_LOGFILEBASE()) > 0) {
-			lp_set_logfile(lfile);
-			SAFE_FREE(lfile);
-			reopen_logs();
-		}
-	}
+	SAFE_FREE(lfile);
 
 	mem_ctx = talloc_init("fork_child_dc_connect");
 	if (!mem_ctx) {
diff --git a/source/winbindd/winbindd_dual.c b/source/winbindd/winbindd_dual.c
index a8c0a04..e066944 100644
--- a/source/winbindd/winbindd_dual.c
+++ b/source/winbindd/winbindd_dual.c
@@ -1142,7 +1142,7 @@ static void child_msg_dump_event_list(struct messaging_context *msg,
 	dump_event_list(winbind_event_context());
 }
 
-static void winbindd_reinit_after_fork(struct winbindd_child *child)
+bool winbindd_reinit_after_fork(const char *logfilename)
 {
 	struct winbindd_domain *domain;
 	struct winbindd_child *cl;
@@ -1150,13 +1150,13 @@ static void winbindd_reinit_after_fork(struct winbindd_child *child)
 	if (!reinit_after_fork(winbind_messaging_context(),
 			       winbind_event_context(), true)) {
 		DEBUG(0,("reinit_after_fork() failed\n"));
-		_exit(0);
+		return false;
 	}
 
 	close_conns_after_fork();
 
-	if (!override_logfile) {
-		lp_set_logfile(child->logfilename);
+	if (!override_logfile && logfilename) {
+		lp_set_logfile(logfilename);
 		reopen_logs();
 	}
 
@@ -1178,18 +1178,6 @@ static void winbindd_reinit_after_fork(struct winbindd_child *child)
 	messaging_deregister(winbind_messaging_context(),
 			     MSG_DEBUG, NULL);
 
-	/* Handle online/offline messages. */
-	messaging_register(winbind_messaging_context(), NULL,
-			   MSG_WINBIND_OFFLINE, child_msg_offline);
-	messaging_register(winbind_messaging_context(), NULL,
-			   MSG_WINBIND_ONLINE, child_msg_online);
-	messaging_register(winbind_messaging_context(), NULL,
-			   MSG_WINBIND_ONLINESTATUS, child_msg_onlinestatus);
-	messaging_register(winbind_messaging_context(), NULL,
-			   MSG_DUMP_EVENT_LIST, child_msg_dump_event_list);
-	messaging_register(winbind_messaging_context(), NULL,
-			   MSG_DEBUG, debug_message);
-
 	/* We have destroyed all events in the winbindd_event_context
 	 * in reinit_after_fork(), so clean out all possible pending
 	 * event pointers. */
@@ -1215,6 +1203,8 @@ static void winbindd_reinit_after_fork(struct winbindd_child *child)
 		TALLOC_FREE(cl->lockout_policy_event);
 		TALLOC_FREE(cl->machine_password_change_event);
         }
+
+	return true;
 }
 
 static bool fork_domain_child(struct winbindd_child *child)
@@ -1268,7 +1258,21 @@ static bool fork_domain_child(struct winbindd_child *child)
 	state.sock = fdpair[0];
 	close(fdpair[1]);
 
-	winbindd_reinit_after_fork(child);
+	if (!winbindd_reinit_after_fork(child->logfilename)) {
+		_exit(0);
+	}
+
+	/* Handle online/offline messages. */
+	messaging_register(winbind_messaging_context(), NULL,
+			   MSG_WINBIND_OFFLINE, child_msg_offline);
+	messaging_register(winbind_messaging_context(), NULL,
+			   MSG_WINBIND_ONLINE, child_msg_online);
+	messaging_register(winbind_messaging_context(), NULL,
+			   MSG_WINBIND_ONLINESTATUS, child_msg_onlinestatus);
+	messaging_register(winbind_messaging_context(), NULL,
+			   MSG_DUMP_EVENT_LIST, child_msg_dump_event_list);
+	messaging_register(winbind_messaging_context(), NULL,
+			   MSG_DEBUG, debug_message);
 
 	primary_domain = find_our_domain();
 
diff --git a/source/winbindd/winbindd_proto.h b/source/winbindd/winbindd_proto.h
index c5ffbac..6d59648 100644
--- a/source/winbindd/winbindd_proto.h
+++ b/source/winbindd/winbindd_proto.h
@@ -331,6 +331,7 @@ void winbind_msg_dump_domain_list(struct messaging_context *msg_ctx,
 				  uint32_t msg_type,
 				  struct server_id server_id,
 				  DATA_BLOB *data);
+bool winbindd_reinit_after_fork(const char *logfilename);
 
 /* The following definitions come from winbindd/winbindd_group.c  */
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list