change hard coding of AF_UNSPEC to user-defined address-families per repository
Some environments that return AAAA records for their IMAP servers can pose problems for clients that do not have end-to-end IPv6 connectivity for a number of reasons (e.g. policy, lack of full routing, security, etc..) Even with a fallback mechanism in place, you can still arrive at IMAP implementations that could prevent authentication from unknown IPv6 space. This in itself is not enough to fallback to IPv4 since there is an actual connection on that socket. This change is for introducing a user-defined value: [Repository imap-remote] ipv6 = no to create a preference per repository on which AF to connect to the remote server on ipv6 = yes (AF_INET6) ipv6 = no (AF_INET) unspecified = default Signed-off-by: Ebben Aries <e@dscp.org> Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
This commit is contained in:

committed by
Nicolas Sebrecht

parent
8f94ef1973
commit
9bfd610230
@ -74,7 +74,7 @@ class UsefulIMAPMixIn(object):
|
||||
"""open_socket()
|
||||
Open socket choosing first address family available."""
|
||||
msg = (-1, 'could not open socket')
|
||||
for res in socket.getaddrinfo(self.host, self.port, socket.AF_UNSPEC, socket.SOCK_STREAM):
|
||||
for res in socket.getaddrinfo(self.host, self.port, self.af, socket.SOCK_STREAM):
|
||||
af, socktype, proto, canonname, sa = res
|
||||
try:
|
||||
# use socket of our own, possiblly socksified socket.
|
||||
@ -175,6 +175,9 @@ class WrappedIMAP4_SSL(UsefulIMAPMixIn, IMAP4_SSL):
|
||||
"""Improved version of imaplib.IMAP4_SSL overriding select()."""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "af" in kwargs:
|
||||
self.af = kwargs['af']
|
||||
del kwargs['af']
|
||||
if "use_socket" in kwargs:
|
||||
self.socket = kwargs['use_socket']
|
||||
del kwargs['use_socket']
|
||||
@ -209,6 +212,9 @@ class WrappedIMAP4(UsefulIMAPMixIn, IMAP4):
|
||||
"""Improved version of imaplib.IMAP4 overriding select()."""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if "af" in kwargs:
|
||||
self.af = kwargs['af']
|
||||
del kwargs['af']
|
||||
if "use_socket" in kwargs:
|
||||
self.socket = kwargs['use_socket']
|
||||
del kwargs['use_socket']
|
||||
|
Reference in New Issue
Block a user