diff -r b152ad5c7071 -r bb58aedefa3a update_config.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/update_config.py Wed Jan 13 00:55:50 2010 +0000 @@ -0,0 +1,112 @@ +#!/usr/bin/env python +# -*- coding: UTF-8 -*- +# Copyright (c) 2008 - 2010, Pascal Volk +# See COPYING for distribution information. + +import os +os.sys.path.remove(os.sys.path[0]) +from time import time +from ConfigParser import ConfigParser +from shutil import copy2 +from VirtualMailManager.constants.VERSION import VERSION + + +def get_config_file(): + f = None + for d in ('/root', '/usr/local/etc', '/etc'): + tmp = os.path.join(d, 'vmm.cfg') + if os.path.isfile(tmp): + f = tmp + break + if f: + return f + else: + os.sys.stderr.write('error: vmm.cfg not found\n') + raise SystemExit(2) + +def update(cp): + if VERSION == '0.5.2': + upd_052(cp) + elif VERSION == '0.6.0': + os.sys.stdout.write('info: nothing to do for version %s\n' % VERSION) + return + else: + os.sys.stderr.write( + 'error: the version %s is not supported by this script\n' % VERSION) + raise SystemExit(3) + +def get_cfg_parser(cf): + fh = file(cf, 'r') + cp = ConfigParser() + cp.readfp(fh) + fh.close() + return cp + +def update_cfg_file(cp, cf): + copy2(cf, cf+'.bak.'+str(time())) + fh = file(cf, 'w') + cp.write(fh) + fh.close() + +def add_sections(cp, sections): + for section in sections: + if not cp.has_section(section): + cp.add_section(section) + +def move_option(cp, src, dst): + ds, do = dst.split('.') + if not cp.has_option(ds, do): + ss, so = src.split('.') + cp.set(ds, do, cp.get(ss, so)) + cp.remove_option(ss, so) + sect_opt.append((dst, 'R')) + +def add_option(cp, dst, val): + ds, do = dst.split('.') + if not cp.has_option(ds, do): + cp.set(ds, do, val) + sect_opt.append((dst, 'N')) + +def get_option(cp, src): + ss, so = src.split('.') + return cp.get(ss, so) + +def upd_052(cp): + add_sections(cp, ('domain', 'account')) + if cp.has_section('domdir'): + for src, dst in (('domdir.mode', 'domain.directory_mode'), + ('domdir.delete', 'domain.delete_directory'), + ('domdir.base', 'misc.base_dir')): + move_option(cp, src, dst) + cp.remove_section('domdir') + if cp.has_section('services'): + for service in cp.options('services'): + move_option(cp, 'services.%s'%service, 'account.%s'%service) + cp.remove_section('services') + for src, dst in (('maildir.mode', 'account.directory_mode'), + ('maildir.diskusage', 'account.disk_usage'), + ('maildir.delete', 'account.delete_directory'), + ('misc.forcedel', 'domain.force_del'), + ('misc.passwdscheme', 'misc.password_scheme'), + ('misc.dovecotvers', 'misc.dovecot_vers')): + move_option(cp, src, dst) + for dst, val in (('account.random_password', 'false'), + ('account.password_len', '8'), + ('domain.auto_postmaster', 'true')): + add_option(cp, dst, val) + +# def main(): +if __name__ == '__main__': + sect_opt = [] + cf = get_config_file() + cp = get_cfg_parser(cf) + update(cp) + if len(sect_opt): + update_cfg_file(cp, cf) + sect_opt.sort() + print 'Please have a look at your configuration: %s' %cf + print 'This are your Renamed/New settings:' + for s_o, st in sect_opt: + print '%s %s = %s' % (st, s_o, get_option(cp, s_o)) + print +