s3:winbindd: fix segfaults on addrchange errors and make DEBUG() statements more...
authorStefan Metzmacher <metze@samba.org>
Fri, 4 Feb 2011 11:29:42 +0000 (12:29 +0100)
committerVolker Lendecke <vl@samba.org>
Mon, 7 Feb 2011 09:46:51 +0000 (02:46 -0700)
metze

source3/winbindd/winbindd.c

index acf5e9d9752baa2b594ade3ac872f4e7fd360f48..bee2a212e26ea354a8415f24f67624a0722f8ab3 100644 (file)
@@ -1177,8 +1177,9 @@ static void winbindd_init_addrchange(TALLOC_CTX *mem_ctx,
        }
        req = addrchange_send(state, ev, state->ctx);
        if (req == NULL) {
-               DEBUG(10, ("addrchange_send failed\n"));
+               DEBUG(0, ("addrchange_send failed\n"));
                TALLOC_FREE(state);
+               return;
        }
        tevent_req_set_callback(req, winbindd_addr_changed, state);
 }
@@ -1197,6 +1198,7 @@ static void winbindd_addr_changed(struct tevent_req *req)
                DEBUG(10, ("addrchange_recv failed: %s, stop listening\n",
                           nt_errstr(status)));
                TALLOC_FREE(state);
+               return;
        }
        if (type == ADDRCHANGE_DEL) {
                char addrstr[INET6_ADDRSTRLEN];
@@ -1212,14 +1214,15 @@ static void winbindd_addr_changed(struct tevent_req *req)
                status = messaging_send(state->msg_ctx, procid_self(),
                                        MSG_WINBIND_IP_DROPPED, &blob);
                if (!NT_STATUS_IS_OK(status)) {
-                       DEBUG(10, ("messaging_send failed: %s\n",
+                       DEBUG(10, ("messaging_send failed: %s - ignoring\n",
                                   nt_errstr(status)));
                }
        }
        req = addrchange_send(state, state->ev, state->ctx);
        if (req == NULL) {
-               DEBUG(10, ("addrchange_send failed\n"));
+               DEBUG(0, ("addrchange_send failed\n"));
                TALLOC_FREE(state);
+               return;
        }
        tevent_req_set_callback(req, winbindd_addr_changed, state);
 }