/usr/share/pyshared/VirtualMailManager/cli/handler.py is in vmm 0.6.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | # -*- coding: UTF-8 -*-
# Copyright (c) 2010 - 2012, Pascal Volk
# See COPYING for distribution information.
"""
VirtualMailManager.cli.handler
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A derived Handler class with a few changes/additions for cli use.
"""
import os
from VirtualMailManager.errors import VMMError
from VirtualMailManager.handler import Handler
from VirtualMailManager.cli import read_pass
from VirtualMailManager.constants import ACCOUNT_EXISTS, INVALID_SECTION, \
NO_SUCH_ACCOUNT, TYPE_ACCOUNT
from VirtualMailManager.password import randompw
_ = lambda msg: msg
class CliHandler(Handler):
"""This class normally uses a `CliConfig` for configuration stuff, instead
of the non-interactive `Config` class. In Debian, however, CliConfig is
not necessary because the configuration will not be interactively
editable.
Additionally it uses `VirtualMailManager.cli.read_pass()` for for the
interactive password dialog.
"""
__slots__ = () # nothing additional, also no __dict__/__weakref__
def __init__(self):
"""Creates a new CliHandler instance.
Throws a NotRootError if your uid is greater 0.
"""
# Overwrite the parent CTor partly, we use the CliConfig class
# and add some command line checks.
skip_some_checks = os.sys.argv[1] in ('h', 'help',
'v', 'version')
super(CliHandler, self).__init__(skip_some_checks)
def user_add(self, emailaddress, password=None):
"""Override the parent user_add() - add the interactive password
dialog.
Returns the generated password, if account.random_password == True.
"""
acc = self._get_account(emailaddress)
if acc:
raise VMMError(_(u"The account '%s' already exists.") %
acc.address, ACCOUNT_EXISTS)
self._is_other_address(acc.address, TYPE_ACCOUNT)
rand_pass = self._cfg.dget('account.random_password')
if password is None:
password = (read_pass, randompw)[rand_pass]()
acc.set_password(password)
acc.save()
self._make_account_dirs(acc)
return (None, password)[rand_pass]
def user_password(self, emailaddress, password=None):
"""Override the parent user_password() - add the interactive
password dialog."""
acc = self._get_account(emailaddress)
if not acc:
raise VMMError(_(u"The account '%s' does not exist.") %
acc.address, NO_SUCH_ACCOUNT)
if not isinstance(password, basestring) or not password:
password = read_pass()
acc.modify('password', password)
del _
|