[SCM] Samba Shared Repository - branch master updated

Stefan Metzmacher metze at samba.org
Fri Feb 4 07:53:02 MST 2011


The branch, master has been updated
       via  e9c45a3 s3:lib/addrchange: set ctx->sock to -1 after close
       via  d8d5a3f s3:lib/addrchange: remove unused pointer
       via  ff935dd s3:lib/addrchange: let addrchange_done() retry and ignore unknown message types
       via  902fbd9 s3:winbindd: fix segfaults on addrchange errors and make DEBUG() statements more usefull
      from  17c01a5 s3:rpc_server/netlogon: reject validation level 6 without ads support

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit e9c45a3973c85fbe40c017724c7909fefa05b656
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Feb 4 12:54:36 2011 +0100

    s3:lib/addrchange: set ctx->sock to -1 after close
    
    The makes the code more consistent with similar destructors.
    
    metze
    
    Autobuild-User: Stefan Metzmacher <metze at samba.org>
    Autobuild-Date: Fri Feb  4 15:52:55 CET 2011 on sn-devel-104

commit d8d5a3fb3a7754a71ba78399ab0fdcd8b3854dfa
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Feb 4 12:53:38 2011 +0100

    s3:lib/addrchange: remove unused pointer
    
    metze

commit ff935ddf8b22be269abb730904d324efb1e3e8f2
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Feb 4 12:32:41 2011 +0100

    s3:lib/addrchange: let addrchange_done() retry and ignore unknown message types
    
    Messages like RTM_NEWLINK should be just ignored.
    
    metze

commit 902fbd91a19c414b61bc18ef24d7d84b30d37b1b
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Feb 4 12:29:42 2011 +0100

    s3:winbindd: fix segfaults on addrchange errors and make DEBUG() statements more usefull
    
    metze

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

Summary of changes:
 source3/lib/addrchange.c    |   24 +++++++++++++++++-------
 source3/winbindd/winbindd.c |    9 ++++++---
 2 files changed, 23 insertions(+), 10 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/lib/addrchange.c b/source3/lib/addrchange.c
index f3606e2..8cd3c19 100644
--- a/source3/lib/addrchange.c
+++ b/source3/lib/addrchange.c
@@ -28,7 +28,6 @@
 
 struct addrchange_context {
 	int sock;
-	uint8_t *buf;
 };
 
 static int addrchange_context_destructor(struct addrchange_context *c);
@@ -77,12 +76,14 @@ static int addrchange_context_destructor(struct addrchange_context *c)
 {
 	if (c->sock != -1) {
 		close(c->sock);
-		c->sock = 0;
+		c->sock = -1;
 	}
 	return 0;
 }
 
 struct addrchange_state {
+	struct tevent_context *ev;
+	struct addrchange_context *ctx;
 	uint8_t buf[8192];
 	struct sockaddr_storage fromaddr;
 	socklen_t fromaddr_len;
@@ -104,14 +105,15 @@ struct tevent_req *addrchange_send(TALLOC_CTX *mem_ctx,
 	if (req == NULL) {
 		return NULL;
 	}
+	state->ev = ev;
+	state->ctx = ctx;
 
 	state->fromaddr_len = sizeof(state->fromaddr);
-
-	subreq = recvfrom_send(state, ev, ctx->sock,
+	subreq = recvfrom_send(state, state->ev, state->ctx->sock,
 			       state->buf, sizeof(state->buf), 0,
 			       &state->fromaddr, &state->fromaddr_len);
 	if (tevent_req_nomem(subreq, req)) {
-		return tevent_req_post(req, ev);
+		return tevent_req_post(req, state->ev);
 	}
 	tevent_req_set_callback(subreq, addrchange_done, req);
 	return req;
@@ -166,8 +168,16 @@ static void addrchange_done(struct tevent_req *subreq)
 		state->type = ADDRCHANGE_DEL;
 		break;
 	default:
-		DEBUG(10, ("Got unexpected type %d\n", h->nlmsg_type));
-		tevent_req_nterror(req, NT_STATUS_INVALID_ADDRESS);
+		DEBUG(10, ("Got unexpected type %d - ignoring\n", h->nlmsg_type));
+
+		state->fromaddr_len = sizeof(state->fromaddr);
+		subreq = recvfrom_send(state, state->ev, state->ctx->sock,
+			       state->buf, sizeof(state->buf), 0,
+			       &state->fromaddr, &state->fromaddr_len);
+		if (tevent_req_nomem(subreq, req)) {
+			return;
+		}
+		tevent_req_set_callback(subreq, addrchange_done, req);
 		return;
 	}
 
diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c
index 701f7a0..3a76231 100644
--- a/source3/winbindd/winbindd.c
+++ b/source3/winbindd/winbindd.c
@@ -1142,8 +1142,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);
 }
@@ -1162,6 +1163,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];
@@ -1178,14 +1180,15 @@ static void winbindd_addr_changed(struct tevent_req *req)
 					messaging_server_id(state->msg_ctx),
 					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);
 }


-- 
Samba Shared Repository


More information about the samba-cvs mailing list