X-Git-Url: https://code.delx.au/offlineimap/blobdiff_plain/71c8b2e7c489b6277dd862e9174784ca237ebead..ca08c1e5531af7a19b38d1034780ff751589ce9a:/offlineimap/repository/IMAP.py diff --git a/offlineimap/repository/IMAP.py b/offlineimap/repository/IMAP.py index 33987e2..e5be9ee 100644 --- a/offlineimap/repository/IMAP.py +++ b/offlineimap/repository/IMAP.py @@ -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 -import re, types, os +import re, types, os, netrc, errno from threading import * class IMAPRepository(BaseRepository): @@ -85,30 +85,39 @@ 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) @@ -116,6 +125,12 @@ class IMAPRepository(BaseRepository): 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) @@ -129,13 +144,13 @@ class IMAPRepository(BaseRepository): 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: @@ -145,7 +160,18 @@ class IMAPRepository(BaseRepository): 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): @@ -156,6 +182,13 @@ class IMAPRepository(BaseRepository): 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