X-Git-Url: https://code.delx.au/offlineimap/blobdiff_plain/9f5c8d708bfa9c16092255a59e13fe8171588c7a..ca08c1e5531af7a19b38d1034780ff751589ce9a:/offlineimap/imapserver.py diff --git a/offlineimap/imapserver.py b/offlineimap/imapserver.py index 2f0119e..7d99e19 100644 --- a/offlineimap/imapserver.py +++ b/offlineimap/imapserver.py @@ -23,9 +23,6 @@ from threading import * import thread, hmac, os import base64 -from StringIO import StringIO -from platform import system - try: # do we have a recent pykerberos? have_gss = False @@ -63,42 +60,10 @@ class UsefulIMAP4(UsefulIMAPMixIn, imaplib.IMAP4): def open(self, host = '', port = imaplib.IMAP4_PORT): imaplibutil.new_open(self, host, port) - # This is a hack around Darwin's implementation of realloc() (which - # Python uses inside the socket code). On Darwin, we split the - # message into 100k chunks, which should be small enough - smaller - # might start seriously hurting performance ... - - def read(self, size): - if system() == 'Darwin': - read = 0 - io = StringIO() - while read < size: - data = self.file.read(min(size-read,100000)) - read += len(data) - io.write(data) - return io.getvalue() - else: - return self.file.read(size) - class UsefulIMAP4_SSL(UsefulIMAPMixIn, imaplibutil.WrappedIMAP4_SSL): def open(self, host = '', port = imaplib.IMAP4_SSL_PORT): imaplibutil.new_open_ssl(self, host, port) - # This is the same hack as above, to be used in the case of an SSL - # connexion. - - def read(self, size): - if system() == 'Darwin': - read = 0 - io = StringIO() - while read < size: - data = self.sslobj.read(min(size-read,100000)) - read += len(data) - io.write(data) - return io.getvalue() - else: - return self.sslobj.read(size) - class UsefulIMAP4_Tunnel(UsefulIMAPMixIn, imaplibutil.IMAP4_Tunnel): pass class IMAPServer: @@ -107,7 +72,7 @@ class IMAPServer: def __init__(self, config, reposname, username = None, password = None, hostname = None, port = None, ssl = 1, maxconnections = 1, tunnel = None, - reference = '""'): + reference = '""', sslclientcert = None, sslclientkey = None): self.reposname = reposname self.config = config self.username = username @@ -118,6 +83,8 @@ class IMAPServer: self.tunnel = tunnel self.port = port self.usessl = ssl + self.sslclientcert = sslclientcert + self.sslclientkey = sslclientkey self.delim = None self.root = None if port == None: @@ -253,7 +220,8 @@ class IMAPServer: success = 1 elif self.usessl: UIBase.getglobalui().connecting(self.hostname, self.port) - imapobj = UsefulIMAP4_SSL(self.hostname, self.port) + imapobj = UsefulIMAP4_SSL(self.hostname, self.port, + self.sslclientkey, self.sslclientcert) else: UIBase.getglobalui().connecting(self.hostname, self.port) imapobj = UsefulIMAP4(self.hostname, self.port) @@ -395,6 +363,8 @@ class ConfigedIMAPServer(IMAPServer): user = self.repos.getuser() port = self.repos.getport() ssl = self.repos.getssl() + sslclientcert = self.repos.getsslclientcert() + sslclientkey = self.repos.getsslclientkey() reference = self.repos.getreference() server = None password = None @@ -414,4 +384,6 @@ class ConfigedIMAPServer(IMAPServer): IMAPServer.__init__(self, self.config, self.repos.getname(), user, password, host, port, ssl, self.repos.getmaxconnections(), - reference = reference) + reference = reference, + sslclientcert = sslclientcert, + sslclientkey = sslclientkey)