[m2crypto] Support IPv6 in M2Crypto.httpslib

Miloslav Trmac mitr at fedoraproject.org
Tue Mar 13 14:28:37 UTC 2012


commit d6ab1877a10dd53dca23d6d47227ac3744ccbd54
Author: Miloslav Trmač <mitr at redhat.com>
Date:   Tue Mar 13 15:28:09 2012 +0100

    Support IPv6 in M2Crypto.httpslib

 m2crypto-0.21.1-IPv6.patch |   60 ++++++++++++++++++++++++++++++++++++++++++++
 m2crypto.spec              |    9 ++++++-
 2 files changed, 68 insertions(+), 1 deletions(-)
---
diff --git a/m2crypto-0.21.1-IPv6.patch b/m2crypto-0.21.1-IPv6.patch
new file mode 100644
index 0000000..fe36f3e
--- /dev/null
+++ b/m2crypto-0.21.1-IPv6.patch
@@ -0,0 +1,60 @@
+diff -urN M2Crypto/M2Crypto/httpslib.py M2Crypto-0.21.1/M2Crypto/httpslib.py
+--- M2Crypto/M2Crypto/httpslib.py	2011-01-15 20:10:05.000000000 +0100
++++ M2Crypto-0.21.1/M2Crypto/httpslib.py	2012-03-13 15:04:13.848836581 +0100
+@@ -44,10 +44,33 @@
+         HTTPConnection.__init__(self, host, port, strict)
+ 
+     def connect(self):
+-        self.sock = SSL.Connection(self.ssl_ctx)
+-        if self.session:
+-            self.sock.set_session(self.session)
+-        self.sock.connect((self.host, self.port))
++        error = None
++        # We ignore the returned sockaddr because SSL.Connection.connect needs
++        # a host name.
++        for (family, _, _, _, _) in \
++                socket.getaddrinfo(self.host, self.port, 0, socket.SOCK_STREAM):
++            sock = None
++            try:
++                try:
++                    sock = SSL.Connection(self.ssl_ctx, family=family)
++                    if self.session is not None:
++                        sock.set_session(self.session)
++                    sock.connect((self.host, self.port))
++
++                    self.sock = sock
++                    sock = None
++                    return
++                except socket.error, e:
++                    # Other exception are probably SSL-related, in that case we
++                    # abort and the exception is forwarded to the caller.
++                    error = e
++            finally:
++                if sock is not None:
++                    sock.close()
++
++        if error is None:
++            raise AssertionError("Empty list returned by getaddrinfo")
++        raise error
+ 
+     def close(self):
+         # This kludges around line 545 of httplib.py,
+diff -urN M2Crypto/M2Crypto/SSL/Connection.py M2Crypto-0.21.1/M2Crypto/SSL/Connection.py
+--- M2Crypto/M2Crypto/SSL/Connection.py	2012-03-13 15:00:25.058411492 +0100
++++ M2Crypto-0.21.1/M2Crypto/SSL/Connection.py	2012-03-13 15:04:13.849836578 +0100
+@@ -38,13 +38,13 @@
+     m2_bio_free = m2.bio_free
+     m2_ssl_free = m2.ssl_free
+     
+-    def __init__(self, ctx, sock=None):
++    def __init__(self, ctx, sock=None, family=socket.AF_INET):
+         self.ctx = ctx
+         self.ssl = m2.ssl_new(self.ctx.ctx)
+         if sock is not None:    
+             self.socket = sock
+         else:
+-            self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
++            self.socket = socket.socket(family, socket.SOCK_STREAM)
+             self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+         self._fileno = self.socket.fileno()
+ 
diff --git a/m2crypto.spec b/m2crypto.spec
index bee74db..a383ed0 100644
--- a/m2crypto.spec
+++ b/m2crypto.spec
@@ -6,7 +6,7 @@
 Summary: Support for using OpenSSL in python scripts
 Name: m2crypto
 Version: 0.21.1
-Release: 6%{?dist}
+Release: 7%{?dist}
 Source0: http://pypi.python.org/packages/source/M/M2Crypto/M2Crypto-%{version}.tar.gz
 # https://bugzilla.osafoundation.org/show_bug.cgi?id=2341
 Patch0: m2crypto-0.21.1-timeouts.patch
@@ -22,6 +22,8 @@ Patch4: m2crypto-0.21.1-memoryview.patch
 Patch5: m2crypto-0.21.1-smime-doc.patch
 # https://bugzilla.osafoundation.org/show_bug.cgi?id=12999
 Patch6: m2crypto-0.21.1-AES_crypt.patch
+# https://bugzilla.osafoundation.org/show_bug.cgi?id=13044
+Patch7: m2crypto-0.21.1-IPv6.patch
 License: MIT
 Group: System Environment/Libraries
 URL: http://wiki.osafoundation.org/bin/view/Projects/MeTooCrypto
@@ -43,6 +45,7 @@ This package allows you to call OpenSSL functions from python scripts.
 %patch4 -p1 -b .memoryview
 %patch5 -p0
 %patch6 -p0 -b .AES_crypt
+%patch7 -p1 -b .IPv6
 
 # Red Hat opensslconf.h #includes an architecture-specific file, but SWIG
 # doesn't follow the #include.
@@ -108,6 +111,10 @@ rm -rf $RPM_BUILD_ROOT
 %{python_sitearch}/M2Crypto-*.egg-info
 
 %changelog
+* Tue Mar 13 2012 Miloslav Trmač <mitr at redhat.com> - 0.21.1-7
+- Support IPv6 in M2Crypto.httpslib
+  Resolves: #742914
+
 * Fri Jan 13 2012 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.21.1-6
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
 


More information about the scm-commits mailing list