diff -r 000000000000 -r bb0aa2102206 vmm
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vmm Sun Jan 06 18:22:10 2008 +0000
@@ -0,0 +1,304 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+# Copyright 2007-2008 VEB IT
+# See COPYING for distribution information.
+# $Id$
+
+"""This is the vmm main script."""
+
+__author__ = 'Pascal Volk
'
+__version__ = 'rev '+'$Rev$'.split()[1]
+__date__ = '$Date$'.split()[1]
+
+import os
+import sys
+from getpass import getpass
+
+#sys.path.insert(0, '/usr/local/lib/VirtualMailManager')
+
+from VirtualMailManager.VirtualMailManager import VirtualMailManager
+from VirtualMailManager.Config import VMMConfig
+import VirtualMailManager.Exceptions as VMME
+import VirtualMailManager.constants.EXIT as EXIT
+
+def usage(excode=0, errMsg=None):
+ sys.stderr.write("""\
+Usage: vmm OPTION OBJECT ARGS*
+ short long
+ option object args (* = optional)
+
+ da domainadd domain.tld transport*
+ di domaininfo domain.tld detailed*
+ dt domaintransport domain.tld transport
+ dd domaindelete domain.tld delalias*|deluser*|delall*
+ ua useradd user@domain.tld password*
+ ui userinfo user@domain.tld du*
+ un username user@domain.tld 'Users Name'
+ up userpassword user@domain.tld password*
+ u0 userdisable user@domain.tld
+ u1 userenable user@domain.tld
+ ud userdelete user@domain.tld
+ aa aliasadd alias@domain.tld user@domain.tld
+ ai aliasinfo alias@domain.tld
+ ad aliasdelete alias@domain.tld
+ cf configure section*
+ h help
+ v version
+
+""")
+ if not errMsg is None:
+ sys.stderr.write('Error: %s\n' % errMsg)
+ sys.exit(excode)
+
+def getVMM():
+ try:
+ vmm = VirtualMailManager()
+ return vmm
+ except VMME.MANotRootException, e:
+ sys.stderr.write(str(e))
+ sys.exit(EXIT.CONF_NOPERM)
+ except IOError, e:
+ sys.stderr.write(str(e))
+ sys.exit(EXIT.CONF_NOFILE)
+ except VMME.MAPermException, e:
+ sys.stderr.write(str(e))
+ sys.exit(EXIT.CONF_WRONGPERM)
+
+def configure():
+ try:
+ if len(sys.argv) < 3:
+ vmm.configure()
+ else:
+ vmm.configure(sys.argv[2])
+ except (EOFError, KeyboardInterrupt):
+ sys.stderr.write('\nOuch!\n')
+ sys.exit(EXIT.USER_INTERRUPT)
+ except VMME.VMMConfigException, e:
+ sys.stderr.write(str(e))
+ sys.exit(EXIT.CONF_ERROR)
+ sys.exit(0)
+
+def _readpass():
+ clear0 = ''
+ clear1 = '1'
+ while clear0 != clear1:
+ while len(clear0) < 1:
+ clear0 = getpass(prompt='Enter new password: ')
+ if len(clear0) < 1:
+ sys.stderr.write('Sorry, empty passwords are not permitted\n')
+ clear1 = getpass(prompt='Retype new password: ')
+ if clear0 != clear1:
+ clear0 = ''
+ sys.stderr.write('Sorry, passwords do not match\n')
+ return clear0
+
+def _printInfo(info, title):
+ msg = title+' information'
+ print '%s\n%s' % (msg, '-'*len(msg))
+ for k,v in info.items():
+ print '\t%s: %s' % (k.title().ljust(15, '.'), v)
+ print
+
+def _printUsers(users, title):
+ msg = 'Available '+title
+ print '%s\n%s' % (msg, '-'*len(msg))
+ if len(users) > 0:
+ for user in users:
+ print '\t%s' % user
+ else:
+ print '\tNone'
+ print
+
+def _printAliases(alias, targets):
+ msg = 'Alias information'
+ print '%s\n%s' % (msg, '-'*len(msg))
+ print '\tMail for %s goes to:' % alias
+ if len(targets) > 0:
+ for target in targets:
+ print '\t -> %s' % target
+ else:
+ print '\tNone'
+ print
+
+def domain_add():
+ global argc
+ if argc < 3:
+ usage(EXIT.MISSING_ARGS, 'Missing domain name.')
+ elif argc < 4:
+ vmm.domain_add(sys.argv[2].lower())
+ else:
+ vmm.domain_add(sys.argv[2].lower(), sys.argv[3])
+
+def domain_delete():
+ global argc
+ if argc < 3:
+ usage(EXIT.MISSING_ARGS, 'Missing domain name.')
+ elif argc < 4:
+ vmm.domain_delete(sys.argv[2].lower())
+ else:
+ vmm.domain_delete(sys.argv[2].lower(), sys.argv[3])
+
+def domain_info():
+ global argc
+ if argc < 3:
+ usage(EXIT.MISSING_ARGS, 'Missing domain name.')
+ elif argc < 4:
+ _printInfo(vmm.domain_info(sys.argv[2].lower()), 'Domain')
+ else:
+ infos = vmm.domain_info(sys.argv[2].lower(), sys.argv[3])
+ _printInfo(infos[0], 'Domain')
+ _printUsers(infos[1], 'accounts')
+ _printUsers(infos[2], 'aliases')
+
+def domain_transport():
+ global argc
+ if argc < 3:
+ usage(EXIT.MISSING_ARGS, 'Missing domain name and new transport.')
+ if argc < 4:
+ usage(EXIT.MISSING_ARGS, 'Missing new transport.')
+ else:
+ vmm.domain_transport(sys.argv[2].lower(), sys.argv[3])
+
+def user_add():
+ global argc
+ if argc < 3:
+ usage(EXIT.MISSING_ARGS, 'Missing email address.')
+ elif argc < 4:
+ password = _readpass()
+ else:
+ password = sys.argv[3]
+ vmm.user_add(sys.argv[2].lower(), password)
+
+def user_delete():
+ global argc
+ if argc < 3:
+ usage(EXIT.MISSING_ARGS, 'Missing email address.')
+ else:
+ vmm.user_delete(sys.argv[2].lower())
+
+def user_info():
+ global argc
+ if argc < 3:
+ usage(EXIT.MISSING_ARGS, 'Missing email address.')
+ elif argc < 4:
+ _printInfo(vmm.user_info(sys.argv[2].lower()), 'Account')
+ else:
+ _printInfo(vmm.user_info(sys.argv[2].lower(), True), 'Account')
+
+def user_name():
+ global argc
+ if argc < 4:
+ usage(EXIT.MISSING_ARGS, 'Missing email address an users name.')
+ else:
+ vmm.user_name(sys.argv[2].lower(), sys.argv[3])
+
+def user_enable():
+ global argc
+ if argc < 3:
+ usage(EXIT.MISSING_ARGS, 'Missing email address.')
+ else:
+ vmm.user_enable(sys.argv[2].lower())
+
+def user_disable():
+ global argc
+ if argc < 3:
+ usage(EXIT.MISSING_ARGS, 'Missing email address.')
+ else:
+ vmm.user_disable(sys.argv[2].lower())
+
+def user_password():
+ global argc
+ if argc < 3:
+ usage(EXIT.MISSING_ARGS, 'Missing email address.')
+ elif argc < 4:
+ password = _readpass()
+ else:
+ password = sys.argv[3]
+ vmm.user_password(sys.argv[2].lower(), password)
+
+def alias_add():
+ global argc
+ if argc < 4:
+ usage(EXIT.MISSING_ARGS, 'Missing alias address and destination.')
+ else:
+ vmm.alias_add(sys.argv[2].lower(), sys.argv[3])
+
+def alias_info():
+ global argc
+ if argc < 3:
+ usage(EXIT.MISSING_ARGS, 'Missing alias address')
+ else:
+ _printAliases(sys.argv[2], vmm.alias_info(sys.argv[2].lower()))
+
+def alias_delete():
+ global argc
+ if argc < 3:
+ usage(EXIT.MISSING_ARGS, 'Missing alias address')
+ else:
+ vmm.alias_delete(sys.argv[2].lower())
+
+def showWarnings():
+ if vmm.hasWarnings():
+ print '\nWarnings:'
+ for w in vmm.getWarnings():
+ print " * ",w
+
+#def main():
+if __name__ == '__main__':
+ argc = len(sys.argv)
+ if argc < 2:
+ usage(EXIT.MISSING_ARGS) # -> exit
+ vmm = getVMM()
+ try:
+ if sys.argv[1] in ['cf', 'configure'] or not vmm.setupIsDone():
+ configure()
+ except VMME.VMMConfigException, e:
+ sys.stderr.write(str(e))
+ sys.exit(EXIT.CONF_ERROR)
+ except VMME.VMMException, e:
+ sys.stderr.write("\aERROR: %s\n" % e[0][0])
+ sys.exit(e[0][1])
+ try:
+ if sys.argv[1] in ['da', 'domainadd']:
+ domain_add()
+ elif sys.argv[1] in ['di', 'domaininfo']:
+ domain_info()
+ elif sys.argv[1] in ['dt', 'domaintransport']:
+ domain_transport()
+ elif sys.argv[1] in ['dd', 'domaindelete']:
+ domain_delete()
+ elif sys.argv[1] in ['ua', 'useradd']:
+ user_add()
+ elif sys.argv[1] in ['ui', 'userinfo']:
+ user_info()
+ elif sys.argv[1] in ['un', 'username']:
+ user_name()
+ elif sys.argv[1] in ['up', 'userpassword']:
+ user_password()
+ elif sys.argv[1] in ['u0', 'userdisable']:
+ user_disable()
+ elif sys.argv[1] in ['u1', 'userenable']:
+ user_enable()
+ elif sys.argv[1] in ['ud', 'userdelete']:
+ user_delete()
+ elif sys.argv[1] in ['aa', 'aliasadd']:
+ alias_add()
+ elif sys.argv[1] in ['ai', 'aliasinfo']:
+ alias_info()
+ elif sys.argv[1] in ['ad', 'aliasdelete']:
+ alias_delete()
+ elif sys.argv[1] in ['h', 'help']:
+ usage()
+ elif sys.argv[1] in ['v', 'version']:
+ print "%s: %s (Date: %s)\n" % (os.path.basename(sys.argv[0]),
+ __version__, __date__)
+ else:
+ sys.stderr.write('Unknown option: "%s"\n' % sys.argv[1])
+ usage(EXIT.UNKNOWN_OPTION)
+ showWarnings()
+ except (EOFError, KeyboardInterrupt):
+ sys.stderr.write('\nOuch!\n')
+ sys.exit(EXIT.USER_INTERRUPT)
+ except VMME.VMMException, e:
+ sys.stderr.write("\aERROR: %s\n" % e[0][0])
+ sys.exit(e[0][1])