]> code.delx.au - offlineimap/blobdiff - offlineimap/imapserver.py
Apply new darwin.patch from Vincent Beffara
[offlineimap] / offlineimap / imapserver.py
index 2f0119ee38117c434837b9f3cc8afb928ec9add6..441fd0d10e0c34b8bf6760467e43e038811a386e 100644 (file)
@@ -69,16 +69,16 @@ class UsefulIMAP4(UsefulIMAPMixIn, imaplib.IMAP4):
     # might start seriously hurting performance ...
 
     def read(self, size):
-        if system() == 'Darwin':
+        if (system() == 'Darwin') and (size>0) :
             read = 0
             io = StringIO()
             while read < size:
-                data = self.file.read(min(size-read,100000))
+                data = imaplib.IMAP4.read (self, min(size-read,8192))
                 read += len(data)
                 io.write(data)
             return io.getvalue()
         else:
-            return self.file.read(size)
+            return imaplib.IMAP4.read (self, size)
 
 class UsefulIMAP4_SSL(UsefulIMAPMixIn, imaplibutil.WrappedIMAP4_SSL):
     def open(self, host = '', port = imaplib.IMAP4_SSL_PORT):
@@ -88,16 +88,16 @@ class UsefulIMAP4_SSL(UsefulIMAPMixIn, imaplibutil.WrappedIMAP4_SSL):
     # connexion.
 
     def read(self, size):
-        if system() == 'Darwin':
+        if (system() == 'Darwin') and (size>0) :
             read = 0
             io = StringIO()
             while read < size:
-                data = self.sslobj.read(min(size-read,100000))
+                data = imaplibutil.WrappedIMAP4_SSL.read (self, min(size-read,8192))
                 read += len(data)
                 io.write(data)
             return io.getvalue()
         else:
-            return self.sslobj.read(size)
+            return imaplibutil.WrappedIMAP4_SSL.read (self,size)
 
 class UsefulIMAP4_Tunnel(UsefulIMAPMixIn, imaplibutil.IMAP4_Tunnel): pass
 
@@ -107,7 +107,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 +118,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 +255,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 +398,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 +419,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)