vmm
changeset 147 e3fd0b67ae50
parent 142 28f26f7f3d8f
child 149 581a5680d0ef
equal deleted inserted replaced
146:a08d78344706 147:e3fd0b67ae50
    71     order = ()
    71     order = ()
    72     if vmm.cfgGetInt('misc', 'dovecotvers') > 11:
    72     if vmm.cfgGetInt('misc', 'dovecotvers') > 11:
    73         sieve_name = u'sieve'
    73         sieve_name = u'sieve'
    74     else:
    74     else:
    75         sieve_name = u'managesieve'
    75         sieve_name = u'managesieve'
    76     if argv[1] in ['di', 'domaininfo']:
    76     if argv[1] in (u'di', u'domaininfo'):
    77         order = ((u'domainname', 0), (u'gid', 1), (u'transport', 0),
    77         order = ((u'domainname', 0), (u'gid', 1), (u'transport', 0),
    78                 (u'domaindir', 0), (u'aliasdomains', 0), (u'accounts', 0),
    78                 (u'domaindir', 0), (u'aliasdomains', 0), (u'accounts', 0),
    79                 (u'aliases', 0), (u'relocated', 0))
    79                 (u'aliases', 0), (u'relocated', 0))
    80     elif argv[1] in ['ui', 'userinfo']:
    80     elif argv[1] in (u'ui', u'userinfo'):
    81         if argc == 4 and argv[3] != 'aliases'\
    81         if argc == 4 and argv[3] != u'aliases'\
    82         or vmm.cfgGetBoolean('maildir', 'diskusage'):
    82         or vmm.cfgGetBoolean('maildir', 'diskusage'):
    83             order = ((u'address', 0), (u'name', 0), (u'uid', 1), (u'gid', 1),
    83             order = ((u'address', 0), (u'name', 0), (u'uid', 1), (u'gid', 1),
    84                     (u'transport', 0), (u'maildir', 0), (u'disk usage', 0),
    84                     (u'transport', 0), (u'maildir', 0), (u'disk usage', 0),
    85                     (u'smtp', 1), (u'pop3', 1), (u'imap', 1), (sieve_name, 1))
    85                     (u'smtp', 1), (u'pop3', 1), (u'imap', 1), (sieve_name, 1))
    86         else:
    86         else:
    87             order = ((u'address', 0), (u'name', 0), (u'uid', 1), (u'gid', 1),
    87             order = ((u'address', 0), (u'name', 0), (u'uid', 1), (u'gid', 1),
    88                     (u'transport', 0), (u'maildir', 0), (u'smtp', 1),
    88                     (u'transport', 0), (u'maildir', 0), (u'smtp', 1),
    89                     (u'pop3', 1), (u'imap', 1), (sieve_name, 1))
    89                     (u'pop3', 1), (u'imap', 1), (sieve_name, 1))
    90     elif argv[1] in ['gu', 'getuser']:
    90     elif argv[1] in (u'gu', u'getuser'):
    91         order = ((u'uid', 1), (u'gid', 1), (u'address', 0))
    91         order = ((u'uid', 1), (u'gid', 1), (u'address', 0))
    92     return order
    92     return order
    93 
    93 
    94 def _printInfo(info, title):
    94 def _printInfo(info, title):
    95     msg = u'%s %s' % (title, _(u'information'))
    95     msg = u'%s %s' % (title, _(u'information'))
   199         _printInfo(vmm.domainInfo(argv[2].lower()), _(u'Domain'))
   199         _printInfo(vmm.domainInfo(argv[2].lower()), _(u'Domain'))
   200     else:
   200     else:
   201         details = argv[3].lower()
   201         details = argv[3].lower()
   202         infos = vmm.domainInfo(argv[2].lower(), details)
   202         infos = vmm.domainInfo(argv[2].lower(), details)
   203         _printInfo(infos[0], _(u'Domain'))
   203         _printInfo(infos[0], _(u'Domain'))
   204         if details == 'accounts':
   204         if details == u'accounts':
   205             _printList(infos[1], _(u'accounts'))
   205             _printList(infos[1], _(u'accounts'))
   206         elif details == 'aliasdomains':
   206         elif details == u'aliasdomains':
   207             _printList(infos[1], _(u'alias domains'))
   207             _printList(infos[1], _(u'alias domains'))
   208         elif details == 'aliases':
   208         elif details == u'aliases':
   209             _printList(infos[1], _(u'aliases'))
   209             _printList(infos[1], _(u'aliases'))
   210         elif details == 'relocated':
   210         elif details == u'relocated':
   211             _printList(infos[1], _(u'relocated users'))
   211             _printList(infos[1], _(u'relocated users'))
   212         else:
   212         else:
   213             _printList(infos[1], _(u'alias domains'))
   213             _printList(infos[1], _(u'alias domains'))
   214             _printList(infos[2], _(u'accounts'))
   214             _printList(infos[2], _(u'accounts'))
   215             _printList(infos[3], _(u'aliases'))
   215             _printList(infos[3], _(u'aliases'))
   273         vmm.userDelete(argv[2].lower(), argv[3].lower())
   273         vmm.userDelete(argv[2].lower(), argv[3].lower())
   274 
   274 
   275 def user_info():
   275 def user_info():
   276     if argc < 3:
   276     if argc < 3:
   277         usage(EXIT.MISSING_ARGS, _(u'Missing e-mail address.'))
   277         usage(EXIT.MISSING_ARGS, _(u'Missing e-mail address.'))
   278     elif argc < 4:
   278     try:
   279         _printInfo(vmm.userInfo(argv[2].lower()), u'Account')
   279         if argc < 4:
   280     else:
   280             _printInfo(vmm.userInfo(argv[2].lower()), u'Account')
   281         arg3 = argv[3].lower()
   281         else:
   282         info = vmm.userInfo(argv[2].lower(), arg3)
   282             arg3 = argv[3].lower()
   283         if arg3 in ['aliases', 'full']:
   283             info = vmm.userInfo(argv[2].lower(), arg3)
   284             _printInfo(info[0], u'Account')
   284             if arg3 in ['aliases', 'full']:
   285             _printList(info[1], _(u'alias addresses'))
   285                 _printInfo(info[0], u'Account')
   286         else:
   286                 _printList(info[1], _(u'alias addresses'))
   287             _printInfo(info, u'Account')
   287             else:
       
   288                 _printInfo(info, u'Account')
       
   289     except VMME.VMMAccountException, e:
       
   290         if e.code() is ERR.ALIAS_EXISTS:
       
   291             w_std(plan_a_b % {'subcommand': u'aliasinfo',
       
   292                 'address': argv[2].lower()})
       
   293             alias_info()
       
   294         elif e.code() is ERR.RELOCATED_EXISTS:
       
   295             w_std(plan_a_b % {'subcommand': u'relocatedinfo',
       
   296                 'address': argv[2].lower()})
       
   297             relocated_info()
       
   298         else:
       
   299             raise e
   288 
   300 
   289 def user_name():
   301 def user_name():
   290     if argc < 3:
   302     if argc < 3:
   291         usage(EXIT.MISSING_ARGS, _(u'Missing e-mail address and users name.'))
   303         usage(EXIT.MISSING_ARGS, _(u'Missing e-mail address and users name.'))
   292     if argc < 4:
   304     if argc < 4:
   336         vmm.aliasAdd(argv[2].lower(), argv[3])
   348         vmm.aliasAdd(argv[2].lower(), argv[3])
   337 
   349 
   338 def alias_info():
   350 def alias_info():
   339     if argc < 3:
   351     if argc < 3:
   340         usage(EXIT.MISSING_ARGS, _(u'Missing alias address'))
   352         usage(EXIT.MISSING_ARGS, _(u'Missing alias address'))
   341     else:
   353     try:
   342         _printAliases(argv[2].lower(), vmm.aliasInfo(argv[2].lower()))
   354         _printAliases(argv[2].lower(), vmm.aliasInfo(argv[2].lower()))
       
   355     except VMME.VMMAliasException, e:
       
   356         if e.code() is ERR.ACCOUNT_EXISTS:
       
   357             w_std(plan_a_b % {'subcommand': u'userinfo',
       
   358                 'address': argv[2].lower()})
       
   359             argv[1] = u'ui' # necessary manipulation to get the order
       
   360             user_info()
       
   361         elif e.code() is ERR.RELOCATED_EXISTS:
       
   362             w_std(plan_a_b % {'subcommand': u'relocatedinfo',
       
   363                 'address': argv[2].lower()})
       
   364             relocated_info()
       
   365         else:
       
   366             raise e
   343 
   367 
   344 def alias_delete():
   368 def alias_delete():
   345     if argc < 3:
   369     if argc < 3:
   346         usage(EXIT.MISSING_ARGS, _(u'Missing alias address'))
   370         usage(EXIT.MISSING_ARGS, _(u'Missing alias address'))
   347     elif argc < 4:
   371     elif argc < 4:
   359         vmm.relocatedAdd(argv[2].lower(), argv[3])
   383         vmm.relocatedAdd(argv[2].lower(), argv[3])
   360 
   384 
   361 def relocated_info():
   385 def relocated_info():
   362     if argc < 3:
   386     if argc < 3:
   363         usage(EXIT.MISSING_ARGS, _(u'Missing relocated address'))
   387         usage(EXIT.MISSING_ARGS, _(u'Missing relocated address'))
   364     else:
   388     relocated = argv[2].lower()
   365         relocated = argv[2].lower()
   389     try:
   366         _printRelocated({'addr': relocated,
   390         _printRelocated({'addr': relocated,
   367             'dest': vmm.relocatedInfo(relocated)})
   391             'dest': vmm.relocatedInfo(relocated)})
       
   392     except VMME.VMMRelocatedException, e:
       
   393         if e.code() is ERR.ACCOUNT_EXISTS:
       
   394             w_std(plan_a_b % {'subcommand': u'userinfo', 'address': relocated})
       
   395             argv[1] = u'ui' # necessary manipulation to get the order
       
   396             user_info()
       
   397         elif e.code() is ERR.ALIAS_EXISTS:
       
   398             w_std(plan_a_b % {'subcommand': u'aliasinfo', 'address': relocated})
       
   399             alias_info()
       
   400         else:
       
   401             raise e
   368 
   402 
   369 def relocated_delete():
   403 def relocated_delete():
   370     if argc < 3:
   404     if argc < 3:
   371         usage(EXIT.MISSING_ARGS, _(u'Missing relocated address'))
   405         usage(EXIT.MISSING_ARGS, _(u'Missing relocated address'))
   372     else:
   406     else:
   403 if __name__ == '__main__':
   437 if __name__ == '__main__':
   404     __prog__ = os.path.basename(os.sys.argv[0])
   438     __prog__ = os.path.basename(os.sys.argv[0])
   405     gettext.install(__prog__, '/usr/local/share/locale', unicode=1)
   439     gettext.install(__prog__, '/usr/local/share/locale', unicode=1)
   406     argv = [unicode(arg, ENCODING) for arg in os.sys.argv]
   440     argv = [unicode(arg, ENCODING) for arg in os.sys.argv]
   407     argc = len(os.sys.argv)
   441     argc = len(os.sys.argv)
       
   442     plan_a_b =_(u'Plan A failed ... trying Plan B: %(subcommand)s %(address)s')
   408 
   443 
   409     if argc < 2:
   444     if argc < 2:
   410         usage(EXIT.MISSING_ARGS)
   445         usage(EXIT.MISSING_ARGS)
   411 
   446 
   412     vmm = get_vmm()
   447     vmm = get_vmm()
   413     try:
   448     try:
   414         need_setup = not vmm.setupIsDone()
   449         need_setup = not vmm.setupIsDone()
   415         if   argv[1] in ['cf', 'configure'] or need_setup:
   450         if   argv[1] in (u'cf', u'configure') or need_setup:
   416             configure()
   451             configure()
   417         elif argv[1] in ['da', 'domainadd']:
   452         elif argv[1] in (u'da', u'domainadd'):
   418             domain_add()
   453             domain_add()
   419         elif argv[1] in ['di', 'domaininfo']:
   454         elif argv[1] in (u'di', u'domaininfo'):
   420             domain_info()
   455             domain_info()
   421         elif argv[1] in ['dt', 'domaintransport']:
   456         elif argv[1] in (u'dt', u'domaintransport'):
   422             domain_transport()
   457             domain_transport()
   423         elif argv[1] in ['dd', 'domaindelete']:
   458         elif argv[1] in (u'dd', u'domaindelete'):
   424             domain_delete()
   459             domain_delete()
   425         elif argv[1] in ['ada', 'aliasdomainadd']:
   460         elif argv[1] in (u'ada', u'aliasdomainadd'):
   426             alias_domain_add()
   461             alias_domain_add()
   427         elif argv[1] in ['adi', 'aliasdomaininfo']:
   462         elif argv[1] in (u'adi', u'aliasdomaininfo'):
   428             alias_domain_info()
   463             alias_domain_info()
   429         elif argv[1] in ['ads', 'aliasdomainswitch']:
   464         elif argv[1] in (u'ads', u'aliasdomainswitch'):
   430             alias_domain_switch()
   465             alias_domain_switch()
   431         elif argv[1] in ['add', 'aliasdomaindelete']:
   466         elif argv[1] in (u'add', u'aliasdomaindelete'):
   432             alias_domain_delete()
   467             alias_domain_delete()
   433         elif argv[1] in ['ua', 'useradd']:
   468         elif argv[1] in (u'ua', u'useradd'):
   434             user_add()
   469             user_add()
   435         elif argv[1] in ['ui', 'userinfo']:
   470         elif argv[1] in (u'ui', u'userinfo'):
   436             user_info()
   471             user_info()
   437         elif argv[1] in ['un', 'username']:
   472         elif argv[1] in (u'un', u'username'):
   438             user_name()
   473             user_name()
   439         elif argv[1] in ['up', 'userpassword']:
   474         elif argv[1] in (u'up', u'userpassword'):
   440             user_password()
   475             user_password()
   441         elif argv[1] in ['ut', 'usertransport']:
   476         elif argv[1] in (u'ut', u'usertransport'):
   442             user_transport()
   477             user_transport()
   443         elif argv[1] in ['u0', 'userdisable']:
   478         elif argv[1] in (u'u0', u'userdisable'):
   444             user_disable()
   479             user_disable()
   445         elif argv[1] in ['u1', 'userenable']:
   480         elif argv[1] in (u'u1', u'userenable'):
   446             user_enable()
   481             user_enable()
   447         elif argv[1] in ['ud', 'userdelete']:
   482         elif argv[1] in (u'ud', u'userdelete'):
   448             user_delete()
   483             user_delete()
   449         elif argv[1] in ['aa', 'aliasadd']:
   484         elif argv[1] in (u'aa', u'aliasadd'):
   450             alias_add()
   485             alias_add()
   451         elif argv[1] in ['ai', 'aliasinfo']:
   486         elif argv[1] in (u'ai', u'aliasinfo'):
   452             alias_info()
   487             alias_info()
   453         elif argv[1] in ['ad', 'aliasdelete']:
   488         elif argv[1] in (u'ad', u'aliasdelete'):
   454             alias_delete()
   489             alias_delete()
   455         elif argv[1] in ['ra', 'relocatedadd']:
   490         elif argv[1] in (u'ra', u'relocatedadd'):
   456             relocated_add()
   491             relocated_add()
   457         elif argv[1] in ['ri', 'relocatedinfo']:
   492         elif argv[1] in (u'ri', u'relocatedinfo'):
   458             relocated_info()
   493             relocated_info()
   459         elif argv[1] in ['rd', 'relocateddelete']:
   494         elif argv[1] in (u'rd', u'relocateddelete'):
   460             relocated_delete()
   495             relocated_delete()
   461         elif argv[1] in ['gu', 'getuser']:
   496         elif argv[1] in (u'gu', u'getuser'):
   462             user_byID()
   497             user_byID()
   463         elif argv[1] in ['ld', 'listdomains']:
   498         elif argv[1] in (u'ld', u'listdomains'):
   464             domain_list()
   499             domain_list()
   465         elif argv[1] in ['h', 'help']:
   500         elif argv[1] in (u'h', u'help'):
   466             usage()
   501             usage()
   467         elif argv[1] in ['v', 'version']:
   502         elif argv[1] in (u'v', u'version'):
   468             show_version()
   503             show_version()
   469         else:
   504         else:
   470             usage(EXIT.UNKNOWN_COMMAND,
   505             usage(EXIT.UNKNOWN_COMMAND,
   471                     u"%s: ā€œ%sā€" % (_(u'Unknown subcommand'), argv[1]))
   506                     u"%s: ā€œ%sā€" % (_(u'Unknown subcommand'), argv[1]))
   472         show_warnings()
   507         show_warnings()