]> code.delx.au - offlineimap/blobdiff - offlineimap/repository/IMAP.py
Add support for ssl client certificates
[offlineimap] / offlineimap / repository / IMAP.py
index 6bde06e9a70e24e3f3789f48b05956b132cc3c8c..e5be9eefaf4d24c4bdad3d3be5da96a3e95bd534 100644 (file)
@@ -20,7 +20,7 @@ from Base import BaseRepository
 from offlineimap import folder, imaputil, imapserver
 from offlineimap.folder.UIDMaps import MappedIMAPFolder
 from offlineimap.threadutil import ExitNotifyThread
 from offlineimap import folder, imaputil, imapserver
 from offlineimap.folder.UIDMaps import MappedIMAPFolder
 from offlineimap.threadutil import ExitNotifyThread
-import re, types, os
+import re, types, os, netrc, errno
 from threading import *
 
 class IMAPRepository(BaseRepository):
 from threading import *
 
 class IMAPRepository(BaseRepository):
@@ -110,12 +110,27 @@ class IMAPRepository(BaseRepository):
         if user != None:
             return user
 
         if user != None:
             return user
 
+        try:
+            netrcentry = netrc.netrc().authentificator(self.gethost())
+        except IOError, inst:
+            if inst.errno != errno.ENOENT:
+                raise
+        else:
+            if netrcentry:
+                return netrcentry[0]
+
     def getport(self):
         return self.getconfint('remoteport', None)
 
     def getssl(self):
         return self.getconfboolean('ssl', 0)
 
     def getport(self):
         return self.getconfint('remoteport', None)
 
     def getssl(self):
         return self.getconfboolean('ssl', 0)
 
+    def getsslclientcert(self):
+        return self.getconf('sslclientcert', None)
+
+    def getsslclientkey(self):
+        return self.getconf('sslclientkey', None)
+
     def getpreauthtunnel(self):
         return self.getconf('preauthtunnel', None)
 
     def getpreauthtunnel(self):
         return self.getconf('preauthtunnel', None)
 
@@ -146,6 +161,17 @@ class IMAPRepository(BaseRepository):
             password = fd.readline().strip()
             fd.close()
             return password
             password = fd.readline().strip()
             fd.close()
             return password
+
+        try:
+            netrcentry = netrc.netrc().authenticators(self.gethost())
+        except IOError, inst:
+            if inst.errno != errno.ENOENT:
+                raise
+        else:
+            if netrcentry:
+                user = self.getconf('remoteuser')
+                if user == None or user == netrcentry[0]:
+                    return netrcentry[2]
         return None
 
     def getfolder(self, foldername):
         return None
 
     def getfolder(self, foldername):
@@ -160,6 +186,9 @@ class IMAPRepository(BaseRepository):
         imapobj = self.imapserver.acquireconnection()
         self.imapserver.releaseconnection(imapobj)
 
         imapobj = self.imapserver.acquireconnection()
         self.imapserver.releaseconnection(imapobj)
 
+    def forgetfolders(self):
+        self.folders = None
+
     def getfolders(self):
         if self.folders != None:
             return self.folders
     def getfolders(self):
         if self.folders != None:
             return self.folders