First version of a CatchallAlias class
I based the CatchallAlias class in catchall.py heavily on the Alias class, but
by copy, not deriving. The two are functionally related, but the
implementations are too different because CatchallAliases have no localpart.
#!/usr/bin/env python# -*- coding: UTF-8 -*-# Copyright (c) 2008 - 2011, Pascal Volk# See COPYING for distribution information.importosos.sys.path.remove(os.sys.path[0])fromtimeimporttimefromConfigParserimportConfigParserfromshutilimportcopy2try:fromVirtualMailManager.constants.VERSIONimportVERSIONexceptImportError:os.sys.stderr.write('error: no pre 0.6.0 version information found\n')raiseSystemExit(2)# we have to remove the old CamelCase filesimportVirtualMailManagervmm_inst_dir=os.path.dirname(VirtualMailManager.__file__)tmp_info=open('/tmp/vmm_inst_dir','w')tmp_info.write(vmm_inst_dir)tmp_info.close()try:importpsycopg2exceptImportError:has_psycopg2=Falseelse:has_psycopg2=Truedefget_config_file():f=Nonefordin('/root','/usr/local/etc','/etc'):tmp=os.path.join(d,'vmm.cfg')ifos.path.isfile(tmp):f=tmpbreakiff:returnfelse:os.sys.stderr.write('error: vmm.cfg not found\n')raiseSystemExit(2)defupdate(cp):ifVERSION=='0.5.2':upd_052(cp)elifVERSION=='0.6.0':os.sys.stdout.write('info: nothing to do for version %s\n'%VERSION)returnelse:os.sys.stderr.write('error: the version %s is not supported by this script\n'%VERSION)raiseSystemExit(3)defget_cfg_parser(cf):fh=open(cf,'r')cp=ConfigParser()cp.readfp(fh)fh.close()returncpdefupdate_cfg_file(cp,cf):copy2(cf,cf+'.bak.'+str(time()))fh=open(cf,'w')cp.write(fh)fh.close()defadd_sections(cp,sections):forsectioninsections:ifnotcp.has_section(section):cp.add_section(section)defmove_option(cp,src,dst):ds,do=dst.split('.')ifnotcp.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'))defadd_option(cp,dst,val):ds,do=dst.split('.')ifnotcp.has_option(ds,do):cp.set(ds,do,val)sect_opt.append((dst,'N'))defset_dovecot_version(cp):iflen(os.sys.argv)>1:dovecot_version=os.sys.argv[1].strip()ifnotdovecot_version:dovecot_version='1.2.11'else:dovecot_version='1.2.11'cp.set('misc','dovecot_version',dovecot_version)sect_opt.append(('misc.dovecot_version','M'))defget_option(cp,src):ss,so=src.split('.')returncp.get(ss,so)defupd_052(cp):globalhad_configglobalhad_gid_mailhad_config=cp.remove_section('config')had_gid_mail=cp.remove_option('misc','gid_mail')add_sections(cp,('domain','account','mailbox'))ifcp.has_section('domdir'):forsrc,dstin(('domdir.mode','domain.directory_mode'),('domdir.delete','domain.delete_directory'),('domdir.base','misc.base_directory')):move_option(cp,src,dst)cp.remove_section('domdir')ifcp.has_section('services'):forserviceincp.options('services'):move_option(cp,'services.%s'%service,'domain.%s'%service)cp.remove_section('services')forsrc,dstin(('maildir.mode','account.directory_mode'),('maildir.diskusage','account.disk_usage'),('maildir.delete','account.delete_directory'),('maildir.folders','mailbox.folders'),('maildir.name','mailbox.root'),('misc.forcedel','domain.force_deletion'),('misc.transport','domain.transport'),('misc.passwdscheme','misc.password_scheme'),('misc.dovecotvers','misc.dovecot_version')):move_option(cp,src,dst)cp.remove_section('maildir')ifnothas_psycopg2:add_option(cp,'database.module','pyPgSQL')set_dovecot_version(cp)# def main():if__name__=='__main__':sect_opt=[]had_config=Falsehad_gid_mail=Falsecf=get_config_file()cp=get_cfg_parser(cf)update(cp)iflen(sect_opt):update_cfg_file(cp,cf)sect_opt.sort()print'Please have a look at your configuration: %s'%cfprint'This are your Modified/Renamed/New settings:'fors_o,stinsect_opt:print'%s%s = %s'%(st,s_o,get_option(cp,s_o))ifhad_config:print'\nRemoved section "config" with option "done" (obsolte)'ifhad_gid_mail:print'\nRemoved option "gid_mail" from section "misc" (obsolte)\n'os.sys.exit(0)ifhad_configorhad_gid_mail:update_cfg_file(cp,cf)ifhad_config:print'\nRemoved section "config" with option "done" (obsolte)'ifhad_gid_mail:print'\nRemoved option "gid_mail" from section "misc" (obsolte)\n'