diff options
Diffstat (limited to 'Mailman/Archiver/Archiver.py')
| -rw-r--r-- | Mailman/Archiver/Archiver.py | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/Mailman/Archiver/Archiver.py b/Mailman/Archiver/Archiver.py index c8e208518..328920335 100644 --- a/Mailman/Archiver/Archiver.py +++ b/Mailman/Archiver/Archiver.py @@ -25,6 +25,7 @@ archival. import os import errno import traceback +import re from cStringIO import StringIO from Mailman import mm_cfg @@ -35,22 +36,26 @@ from Mailman.SafeDict import SafeDict from Mailman.Logging.Syslog import syslog from Mailman.i18n import _ +try: + True, False +except NameError: + True = 1 + False = 0 + def makelink(old, new): try: os.symlink(old, new) - except os.error, e: - code, msg = e - if code <> errno.EEXIST: + except OSError, e: + if e.errno <> errno.EEXIST: raise def breaklink(link): try: os.unlink(link) - except os.error, e: - code, msg = e - if code <> errno.ENOENT: + except OSError, e: + if e.errno <> errno.ENOENT: raise @@ -107,13 +112,16 @@ class Archiver: fp = open(indexfile) except IOError, e: if e.errno <> errno.ENOENT: raise - else: + omask = os.umask(002) + try: fp = open(indexfile, 'w') - fp.write(Utils.maketext( - 'emptyarchive.html', - {'listname': self.real_name, - 'listinfo': self.GetScriptURL('listinfo', absolute=1), - }, mlist=self)) + finally: + os.umask(omask) + fp.write(Utils.maketext( + 'emptyarchive.html', + {'listname': self.real_name, + 'listinfo': self.GetScriptURL('listinfo', absolute=1), + }, mlist=self)) if fp: fp.close() finally: @@ -128,15 +136,15 @@ class Archiver: self.internal_name() + '.mbox') def GetBaseArchiveURL(self): + url = self.GetScriptURL('private', absolute=1) + '/' if self.archive_private: - return self.GetScriptURL('private', absolute=1) + '/' + return url else: - inv = {} - for k, v in mm_cfg.VIRTUAL_HOSTS.items(): - inv[v] = k + hostname = re.match('[^:]*://([^/]*)/.*', url).group(1)\ + or mm_cfg.DEFAULT_URL_HOST url = mm_cfg.PUBLIC_ARCHIVE_URL % { 'listname': self.internal_name(), - 'hostname': inv.get(self.host_name, mm_cfg.DEFAULT_URL_HOST), + 'hostname': hostname } if not url.endswith('/'): url += '/' @@ -220,7 +228,7 @@ class Archiver: if mm_cfg.ARCHIVE_TO_MBOX == -1: # Archiving is completely disabled, don't require the skeleton. return - pubdir = Site.get_archpath(self.internal_name(), public=1) + pubdir = Site.get_archpath(self.internal_name(), public=True) privdir = self.archive_dir() pubmbox = pubdir + '.mbox' privmbox = privdir + '.mbox' @@ -231,4 +239,6 @@ class Archiver: # BAW: privdir or privmbox could be nonexistant. We'd get an # OSError, ENOENT which should be caught and reported properly. makelink(privdir, pubdir) - makelink(privmbox, pubmbox) + # Only make this link if the site has enabled public mbox files + if mm_cfg.PUBLIC_MBOX: + makelink(privmbox, pubmbox) |
