[SCM] Samba Shared Repository - branch v3-3-test updated -
release-3-2-0pre2-2641-g3ab5a38
Jeremy Allison
jra at samba.org
Sat May 31 00:53:56 GMT 2008
The branch, v3-3-test has been updated
via 3ab5a3883e33eba159152aa02544d71f047c7e45 (commit)
from 3d01248f63d0d476c16236453983ffe759d0b2c2 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-test
- Log -----------------------------------------------------------------
commit 3ab5a3883e33eba159152aa02544d71f047c7e45
Author: Jeremy Allison <jra at samba.org>
Date: Fri May 30 17:52:54 2008 -0700
Fix bug #5504. winbindd children and parent were handing SIGTERM in the same way - deleting the socket!
Jeremy.
-----------------------------------------------------------------------
Summary of changes:
source/winbindd/winbindd.c | 25 +++++++++++++++----------
source/winbindd/winbindd_dual.c | 2 +-
source/winbindd/winbindd_proto.h | 2 +-
3 files changed, 17 insertions(+), 12 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source/winbindd/winbindd.c b/source/winbindd/winbindd.c
index 57eee20..c017916 100644
--- a/source/winbindd/winbindd.c
+++ b/source/winbindd/winbindd.c
@@ -131,15 +131,20 @@ static void flush_caches(void)
/* Handle the signal by unlinking socket and exiting */
-static void terminate(void)
+static void terminate(bool is_parent)
{
- char *path = NULL;
-
- /* Remove socket file */
- if (asprintf(&path, "%s/%s",
+ if (is_parent) {
+ /* When parent goes away we should
+ * remove the socket file. Not so
+ * when children terminate.
+ */
+ char *path = NULL;
+
+ if (asprintf(&path, "%s/%s",
get_winbind_pipe_dir(), WINBINDD_SOCKET_NAME) > 0) {
- unlink(path);
- SAFE_FREE(path);
+ unlink(path);
+ SAFE_FREE(path);
+ }
}
idmap_close();
@@ -810,10 +815,10 @@ void winbind_check_sighup(void)
}
/* check if TERM has been received */
-void winbind_check_sigterm(void)
+void winbind_check_sigterm(bool is_parent)
{
if (do_sigterm)
- terminate();
+ terminate(is_parent);
}
/* Process incoming clients on listen_sock. We use a tricky non-blocking,
@@ -975,7 +980,7 @@ static void process_loop(void)
/* Check signal handling things */
- winbind_check_sigterm();
+ winbind_check_sigterm(true);
winbind_check_sighup();
if (do_sigusr2) {
diff --git a/source/winbindd/winbindd_dual.c b/source/winbindd/winbindd_dual.c
index ae04256..b8c0ab9 100644
--- a/source/winbindd/winbindd_dual.c
+++ b/source/winbindd/winbindd_dual.c
@@ -1097,7 +1097,7 @@ static bool fork_domain_child(struct winbindd_child *child)
TALLOC_CTX *frame = talloc_stackframe();
/* check for signals */
- winbind_check_sigterm();
+ winbind_check_sigterm(false);
winbind_check_sighup();
run_events(winbind_event_context(), 0, NULL, NULL);
diff --git a/source/winbindd/winbindd_proto.h b/source/winbindd/winbindd_proto.h
index f6a0da8..356d4aa 100644
--- a/source/winbindd/winbindd_proto.h
+++ b/source/winbindd/winbindd_proto.h
@@ -67,7 +67,7 @@ void request_error(struct winbindd_cli_state *state);
void request_ok(struct winbindd_cli_state *state);
void request_finished_cont(void *private_data, bool success);
void winbind_check_sighup(void);
-void winbind_check_sigterm(void);
+void winbind_check_sigterm(bool in_parent);
int main(int argc, char **argv, char **envp);
/* The following definitions come from winbindd/winbindd_ads.c */
--
Samba Shared Repository
More information about the samba-cvs
mailing list