The branch, v3-0-test has been updated
       via  2f230176a19788e659522c7ccccb19b289412166 (commit)
      from  72b4ca3ec5714d6056654ecb0fdcbd7d954e6984 (commit)

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


- Log -----------------------------------------------------------------
commit 2f230176a19788e659522c7ccccb19b289412166
Author: Jeremy Allison <[EMAIL PROTECTED]>
Date:   Tue Sep 23 16:47:21 2008 -0700

    Fix winbindd crash in an unusual failure mode. Bug #5737. Based on original 
patch from [EMAIL PROTECTED]
    Jeremy.

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

Summary of changes:
 source/nsswitch/winbindd_dual.c |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/nsswitch/winbindd_dual.c b/source/nsswitch/winbindd_dual.c
index 396eca7..84c9a1c 100644
--- a/source/nsswitch/winbindd_dual.c
+++ b/source/nsswitch/winbindd_dual.c
@@ -194,10 +194,12 @@ static void async_request_fail(struct 
winbindd_async_request *state)
 
        TALLOC_FREE(state->reply_timeout_event);
 
-       SMB_ASSERT(state->child_pid != (pid_t)0);
+       /* If child exists and is not already reaped,
+          send kill signal to child. */
 
-       /* If not already reaped, send kill signal to child. */
-       if (state->child->pid == state->child_pid) {
+       if ((state->child->pid != (pid_t)0) &&
+                       (state->child->pid != (pid_t)-1) &&
+                       (state->child->pid == state->child_pid)) {
                kill(state->child_pid, SIGTERM);
 
                /* 
@@ -293,12 +295,14 @@ static void schedule_async_request(struct winbindd_child 
*child)
        }
 
        if ((child->pid == 0) && (!fork_domain_child(child))) {
-               /* Cancel all outstanding requests */
+               /* fork_domain_child failed.
+                  Cancel all outstanding requests */
 
                while (request != NULL) {
                        /* request might be free'd in the continuation */
                        struct winbindd_async_request *next = request->next;
-                       request->continuation(request->private_data, False);
+
+                       async_request_fail(request);
                        request = next;
                }
                return;


-- 
Samba Shared Repository

Reply via email to