[PATCH] Sanity checks for SSL cacertfile configuration

Sebastian Spaeth Sebastian at SSpaeth.de
Tue Mar 15 10:18:19 GMT 2011

We were not able to handle ~/... type of path configurations and we
crashed with mysterious SSL errors when no file was found at the
configured location. Expand '~' and bomb out with usable error messages
in case such a file does not exist. This will still not protect against
corrupt cacert files but it goes a long way towards user friendliness.

Signed-off-by: Sebastian Spaeth <Sebastian at SSpaeth.de>
This patch is against current next branch but will proably apply to 
master too. This is also a request that came up earlier on this list
(protect against misconfigurations).

 offlineimap/repository/IMAP.py |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/offlineimap/repository/IMAP.py b/offlineimap/repository/IMAP.py
index c4066d5..18e3b4e 100644
--- a/offlineimap/repository/IMAP.py
+++ b/offlineimap/repository/IMAP.py
@@ -141,7 +141,17 @@ class IMAPRepository(BaseRepository):
         return self.getconf('sslclientkey', None)
     def getsslcacertfile(self):
-        return self.getconf('sslcacertfile', None)
+        """Return the absolute path of the CA certfile to use, if any"""
+        cacertfile = self.getconf('sslcacertfile', None)
+        if cacertfile is None:
+            return None
+        cacertfile = os.path.expanduser(cacertfile)
+        cacertfile = os.path.abspath(cacertfile)
+        if not os.path.isfile(cacertfile):
+            raise SyntaxWarning("CA certfile for repository '%s' could "
+                                "not be found. No such file: '%s'" \
+                                % (self.name, cacertfile))
+        return cacertfile
     def getpreauthtunnel(self):
         return self.getconf('preauthtunnel', None)

More information about the OfflineIMAP-project mailing list