[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Mon May 17 04:47:48 MDT 2010


The branch, master has been updated
       via  14ac2bb... s3-winbind: make the getpeername() checks in cm_prepare_connection IPv6 aware.
      from  d040658... s4-rodc: Set am_rodc flag during provision

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


- Log -----------------------------------------------------------------
commit 14ac2bb36ee22be6133ca1d069dc5de6c1891f47
Author: Günther Deschner <gd at samba.org>
Date:   Fri May 14 23:21:47 2010 +0200

    s3-winbind: make the getpeername() checks in cm_prepare_connection IPv6 aware.
    
    Note that this failure was hard to track, as winbind did only log a super helpful
    "cm_prepare_connection: Success" debug message.
    
    IPv6 gurus, please check
    
    Successfully tested in two independent IPv6 networks now.
    
    Guenther

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

Summary of changes:
 source3/winbindd/winbindd_cm.c |   30 +++++++++++++++++++++++++-----
 1 files changed, 25 insertions(+), 5 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/winbindd/winbindd_cm.c b/source3/winbindd/winbindd_cm.c
index 9715363..45747d4 100644
--- a/source3/winbindd/winbindd_cm.c
+++ b/source3/winbindd/winbindd_cm.c
@@ -808,11 +808,31 @@ static NTSTATUS cm_prepare_connection(const struct winbindd_domain *domain,
 
 	peeraddr_len = sizeof(peeraddr);
 
-	if ((getpeername((*cli)->fd, &peeraddr, &peeraddr_len) != 0) ||
-	    (peeraddr_len != sizeof(struct sockaddr_in)) ||
-	    (peeraddr_in->sin_family != PF_INET))
-	{
-		DEBUG(0,("cm_prepare_connection: %s\n", strerror(errno)));
+	if ((getpeername((*cli)->fd, &peeraddr, &peeraddr_len) != 0)) {
+		DEBUG(0,("cm_prepare_connection: getpeername failed with: %s\n",
+			strerror(errno)));
+		result = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	if ((peeraddr_len != sizeof(struct sockaddr_in))
+#ifdef HAVE_IPV6
+	    && (peeraddr_len != sizeof(struct sockaddr_in6))
+#endif
+	    ) {
+		DEBUG(0,("cm_prepare_connection: got unexpected peeraddr len %d\n",
+			peeraddr_len));
+		result = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	if ((peeraddr_in->sin_family != PF_INET)
+#ifdef HAVE_IPV6
+	    && (peeraddr_in->sin_family != PF_INET6)
+#endif
+	    ) {
+		DEBUG(0,("cm_prepare_connection: got unexpected family %d\n",
+			peeraddr_in->sin_family));
 		result = NT_STATUS_UNSUCCESSFUL;
 		goto done;
 	}


-- 
Samba Shared Repository


More information about the samba-cvs mailing list