#! @PYTHON@ # # Copyright (C) 2001,2002 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. """Regenerate Postfix's data/aliases and data/aliases.db files from scratch. Usage: genaliases [options] Options: -h/--help Print this message and exit. """ import sys import os import getopt import fcntl import paths # path hacking from Mailman import mm_cfg from Mailman import Utils from Mailman import MailList from Mailman.i18n import _ 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(): try: opts, args = getopt.getopt(sys.argv[1:], 'h', ['help']) except getopt.error, msg: usage(1, msg) for opt, arg in opts: if opt in ('-h', '--help'): usage(0) if args: usage(1) # Open up the MTA specific module modulename = 'Mailman.MTA.' + mm_cfg.MTA __import__(modulename) MTA = sys.modules[modulename] # Open the text file and Berkeley DB files, truncating any data already # there. 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=0) 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=1) else: for hostname, vlists in mlists.items(): for mlist in vlists: MTA.create(mlist, nolock=1) finally: os.umask(omask) lock.unlock(unconditionally=1) if __name__ == '__main__': main()