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):
return self.imapserver.delim
def gethost(self):
- return self.getconf('remotehost')
+ host = None
+ 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('remotehost')
+ if host != None:
+ return host
def getuser(self):
- return self.getconf('remoteuser')
+ user = None
+ 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('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 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)
return self.getconfboolean('expunge', 1)
def getpassword(self):
+ passwd = None
+ localeval = self.localeval
+
+ if self.config.has_option(self.getsection(), 'remotepasseval'):
+ passwd = self.getconf('remotepasseval')
+ if passwd != None:
+ return localeval.eval(passwd)
+
password = self.getconf('remotepass', None)
if password != None:
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):
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