Merge branch 'earies-ipv6' into next

This commit is contained in:
Nicolas Sebrecht 2016-02-23 07:11:25 +01:00
commit 208f555230
4 changed files with 32 additions and 1 deletions

View File

@ -580,6 +580,18 @@ type = GmailMaildir
type = IMAP
# This option stands in the [Repository RemoteExample] section.
#
# Configure which address family to use for the connection. If not specified,
# AF_UNSPEC is used as a fallback (default).
#
# AF_INET6:
#ipv6 = True
#
# AF_INET:
#ipv6 = False
# These options stands in the [Repository RemoteExample] section.
#
# The following can fetch the account credentials via a python expression that

View File

@ -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']

View File

@ -23,6 +23,7 @@ import base64
import json
import urllib
import socket
import time
import errno
from sys import exc_info
@ -80,6 +81,13 @@ class IMAPServer:
self.goodpassword = None
self.usessl = repos.getssl()
self.useipv6 = repos.getipv6()
if self.useipv6 == True:
self.af = socket.AF_INET6
elif self.useipv6 == False:
self.af = socket.AF_INET
else:
self.af = socket.AF_UNSPEC
self.hostname = \
None if self.preauth_tunnel else repos.gethost()
self.port = repos.getport()
@ -487,6 +495,7 @@ class IMAPServer:
fingerprint=self.fingerprint,
use_socket=self.proxied_socket,
tls_level=self.tlslevel,
af=self.af,
)
else:
self.ui.connecting(self.hostname, self.port)
@ -494,6 +503,7 @@ class IMAPServer:
self.hostname, self.port,
timeout=socket.getdefaulttimeout(),
use_socket=self.proxied_socket,
af=self.af,
)
if not self.preauth_tunnel:

View File

@ -194,6 +194,9 @@ class IMAPRepository(BaseRepository):
return self.getconfint('remoteport', None)
def getipv6(self):
return self.getconfboolean('ipv6', None)
def getssl(self):
return self.getconfboolean('ssl', 1)