#! @PYTHON@ # # Copyright (C) 2001-2011 by the Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. """Regenerate Mailman specific aliases from scratch. The actual output depends on the value of the `MTA' variable in your mm_cfg.py file. Usage: genaliases [options] Options: -q/--quiet Some MTA output can include more verbose help text. Use this to tone down the verbosity. -h/--help Print this message and exit. """ import os import sys import getopt import paths # path hacking from Mailman import mm_cfg from Mailman import Utils from Mailman import MailList from Mailman.i18n import _ try: True, False except NameError: True = 1 False = 0 def usage(code, msg=''): if code: fd = sys.stderr else: fd = sys.stdout print >> fd, _(__doc__) if msg: print >> fd, msg sys.exit(code) def main(): quiet = False try: opts, args = getopt.getopt(sys.argv[1:], 'hq', ['help', 'quiet']) except getopt.error, msg: usage(1, msg) for opt, arg in opts: if opt in ('-h', '--help'): usage(0) elif opt in ('-q', '--quiet'): quiet = True if args: usage(1) if not mm_cfg.MTA: mta = repr(mm_cfg.MTA) usage(2, _( "genaliases can't do anything useful with mm_cfg.MTA = %(mta)s." )) # Import the MTA specific module modulename = 'Mailman.MTA.' + mm_cfg.MTA __import__(modulename) MTA = sys.modules[modulename] # We need to acquire a lock so nobody tries to update the files while # we're doing it. lock = MTA.makelock() lock.lock() # Group lists by virtual hostname mlists = {} for listname in Utils.list_names(): mlist = MailList.MailList(listname, lock=False) mlists.setdefault(mlist.host_name, []).append(mlist) # Make sure the files are created rw-rw-xxx; it should be okay to be world # readable. omask = os.umask(002) try: MTA.clear() if not mlists: MTA.create(None, nolock=True, quiet=quiet) else: for hostname, vlists in mlists.items(): for mlist in vlists: MTA.create(mlist, nolock=True, quiet=quiet) # Be verbose for only the first printed list quiet = True finally: lock.unlock(unconditionally=True) # Postfix has not been updating the maps. This call will do it. MTA.create(None, quiet=True) os.umask(omask) if __name__ == '__main__': main()