]> code.delx.au - offlineimap/blobdiff - offlineimap/repository/IMAP.py
Merge branch 'netrc-integration'
[offlineimap] / offlineimap / repository / IMAP.py
index 33987e29cd4a5aecefd80acc78ec5adbb0ce6cc4..85870406853ebffc7505291f1baf4d088296c300 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):
@@ -85,30 +85,39 @@ class IMAPRepository(BaseRepository):
         return self.imapserver.delim
 
     def gethost(self):
         return self.imapserver.delim
 
     def gethost(self):
-       host = None
+        host = None
         localeval = self.localeval
 
         if self.config.has_option(self.getsection(), 'remotehosteval'):
         localeval = self.localeval
 
         if self.config.has_option(self.getsection(), 'remotehosteval'):
-           host = self.getconf('remotehosteval')
-       if host != None:
-           return localeval.eval(host)
+            host = self.getconf('remotehosteval')
+        if host != None:
+            return localeval.eval(host)
 
 
-       host = self.getconf('remotehost')
-       if host != None:
-           return host
+        host = self.getconf('remotehost')
+        if host != None:
+            return host
 
     def getuser(self):
 
     def getuser(self):
-       user = None
+        user = None
         localeval = self.localeval
 
         if self.config.has_option(self.getsection(), 'remoteusereval'):
         localeval = self.localeval
 
         if self.config.has_option(self.getsection(), 'remoteusereval'):
-           user = self.getconf('remoteusereval')
-       if user != None:
-           return localeval.eval(user)
+            user = self.getconf('remoteusereval')
+        if user != None:
+            return localeval.eval(user)
 
 
-       user = self.getconf('remoteuser')
-       if user != None:
-           return user
+        user = self.getconf('remoteuser')
+        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 getport(self):
         return self.getconfint('remoteport', None)
@@ -129,13 +138,13 @@ class IMAPRepository(BaseRepository):
         return self.getconfboolean('expunge', 1)
 
     def getpassword(self):
         return self.getconfboolean('expunge', 1)
 
     def getpassword(self):
-       passwd = None
+        passwd = None
         localeval = self.localeval
 
         if self.config.has_option(self.getsection(), 'remotepasseval'):
         localeval = self.localeval
 
         if self.config.has_option(self.getsection(), 'remotepasseval'):
-           passwd = self.getconf('remotepasseval')
-       if passwd != None:
-           return localeval.eval(passwd)
+            passwd = self.getconf('remotepasseval')
+        if passwd != None:
+            return localeval.eval(passwd)
 
         password = self.getconf('remotepass', None)
         if password != None:
 
         password = self.getconf('remotepass', None)
         if password != None:
@@ -145,7 +154,18 @@ class IMAPRepository(BaseRepository):
             fd = open(os.path.expanduser(passfile))
             password = fd.readline().strip()
             fd.close()
             fd = open(os.path.expanduser(passfile))
             password = fd.readline().strip()
             fd.close()
-           return password
+            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):
@@ -156,6 +176,13 @@ class IMAPRepository(BaseRepository):
     def getfoldertype(self):
         return folder.IMAP.IMAPFolder
 
     def getfoldertype(self):
         return folder.IMAP.IMAPFolder
 
+    def connect(self):
+        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