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):
- host = None
+ 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('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):
- user = None
+ 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('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)
return self.getconfboolean('expunge', 1)
def getpassword(self):
- passwd = None
+ passwd = None
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:
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):
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