#! /usr/pkg/bin/python2.3 # # Copyright (C) 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. """Fix the MM2.1b4 archives. Usage: %(PROGRAM)s [options] file ... Where options are: -h / --help Print this help message and exit. Only use this to `fix' some archive database files that may have gotten written in Mailman 2.1b4 with some bogus data. Use like this from your $PREFIX directory %% %(PROGRAM)s `grep -l _mlist archives/private/*/database/*-article` (note the backquotes are required) You will need to run `bin/check_perms -f' after running this script. """ # This script is provided for convenience purposes only. It isn't supported. import os import sys import getopt import marshal import cPickle as pickle # Required to get the right classes for unpickling import paths from Mailman.i18n import _ PROGRAM = sys.argv[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(): # get command line arguments 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) for filename in args: print 'processing:', filename fp = open(filename, 'rb') d = marshal.load(fp) fp.close() newd = {} for key, pckstr in d.items(): article = pickle.loads(pckstr) newd[key] = pickle.dumps(article) fp = open(filename + '.tmp', 'wb') marshal.dump(newd, fp) fp.close() os.rename(filename, filename + '.bak') os.rename(filename + '.tmp', filename) print 'You should now run "bin/check_perms -f"' if __name__ == '__main__': main()