author | martin f. krafft <madduck@madduck.net> |
Fri, 13 Apr 2012 23:24:12 +0200 | |
branch | v0.6.x |
changeset 527 | e09139525580 |
parent 510 | 1fa354bbdb90 |
child 533 | 2676dbf43e1c |
permissions | -rw-r--r-- |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
1 |
# -*- coding: UTF-8 -*- |
366
d6573da35b5f
Updated copyright notices to include the year 2011.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
355
diff
changeset
|
2 |
# Copyright (c) 2007 - 2011, Pascal Volk |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
3 |
# See COPYING for distribution information. |
185
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
184
diff
changeset
|
4 |
""" |
320
011066435e6f
VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
319
diff
changeset
|
5 |
VirtualMailManager.handler |
011066435e6f
VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
319
diff
changeset
|
6 |
~~~~~~~~~~~~~~~~~~~~~~~~~~ |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
7 |
|
185
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
184
diff
changeset
|
8 |
A wrapper class. It wraps round all other classes and does some |
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
184
diff
changeset
|
9 |
dependencies checks. |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
10 |
|
185
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
184
diff
changeset
|
11 |
Additionally it communicates with the PostgreSQL database, creates |
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
184
diff
changeset
|
12 |
or deletes directories of domains or users. |
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
184
diff
changeset
|
13 |
""" |
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
184
diff
changeset
|
14 |
|
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
184
diff
changeset
|
15 |
import os |
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
184
diff
changeset
|
16 |
import re |
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
184
diff
changeset
|
17 |
|
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
18 |
from shutil import rmtree |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
19 |
from subprocess import Popen, PIPE |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
20 |
|
320
011066435e6f
VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
319
diff
changeset
|
21 |
from VirtualMailManager.account import Account |
011066435e6f
VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
319
diff
changeset
|
22 |
from VirtualMailManager.alias import Alias |
011066435e6f
VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
319
diff
changeset
|
23 |
from VirtualMailManager.aliasdomain import AliasDomain |
505
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
24 |
from VirtualMailManager.catchall import CatchallAlias |
327
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
25 |
from VirtualMailManager.common import exec_ok, lisdir |
320
011066435e6f
VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
319
diff
changeset
|
26 |
from VirtualMailManager.config import Config as Cfg |
325
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
27 |
from VirtualMailManager.constants import MIN_GID, MIN_UID, \ |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
28 |
ACCOUNT_EXISTS, ALIAS_EXISTS, CONF_NOFILE, CONF_NOPERM, CONF_WRONGPERM, \ |
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
29 |
DATABASE_ERROR, DOMAINDIR_GROUP_MISMATCH, DOMAIN_INVALID, \ |
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
30 |
FOUND_DOTS_IN_PATH, INVALID_ARGUMENT, MAILDIR_PERM_MISMATCH, \ |
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
31 |
NOT_EXECUTABLE, NO_SUCH_ACCOUNT, NO_SUCH_ALIAS, NO_SUCH_BINARY, \ |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
32 |
NO_SUCH_DIRECTORY, NO_SUCH_RELOCATED, RELOCATED_EXISTS, UNKNOWN_SERVICE, \ |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
33 |
VMM_ERROR |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
34 |
from VirtualMailManager.domain import Domain |
371
3b2fd0b4e51b
VMM/handler: Handler.alias_add() and Handler.relocated_add() use
Pascal Volk <neverseen@users.sourceforge.net>
parents:
366
diff
changeset
|
35 |
from VirtualMailManager.emailaddress import DestinationEmailAddress, \ |
3b2fd0b4e51b
VMM/handler: Handler.alias_add() and Handler.relocated_add() use
Pascal Volk <neverseen@users.sourceforge.net>
parents:
366
diff
changeset
|
36 |
EmailAddress |
285
d30a94f5aef5
VMM/Handler: import the errors before raising them.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
283
diff
changeset
|
37 |
from VirtualMailManager.errors import \ |
d30a94f5aef5
VMM/Handler: import the errors before raising them.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
283
diff
changeset
|
38 |
DomainError, NotRootError, PermissionError, VMMError |
309
d21423478803
VMM/mailbox: Added to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
294
diff
changeset
|
39 |
from VirtualMailManager.mailbox import new as new_mailbox |
325
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
40 |
from VirtualMailManager.pycompat import all, any |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
41 |
from VirtualMailManager.quotalimit import QuotaLimit |
320
011066435e6f
VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
319
diff
changeset
|
42 |
from VirtualMailManager.relocated import Relocated |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
43 |
from VirtualMailManager.serviceset import ServiceSet, SERVICES |
320
011066435e6f
VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
319
diff
changeset
|
44 |
from VirtualMailManager.transport import Transport |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
45 |
|
190
1903d4ce97d7
VMM/{,cli/}Handler: reverted most of cs cf1b5f22dbd2 added a cli handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
188
diff
changeset
|
46 |
|
283
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
47 |
_ = lambda msg: msg |
355
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
48 |
_db_mod = None |
283
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
49 |
|
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
50 |
CFG_FILE = 'vmm.cfg' |
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
51 |
CFG_PATH = '/root:/usr/local/etc:/etc' |
241
2493453f2c10
VMM/Handler: small code cleanups and an improved import statement.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
240
diff
changeset
|
52 |
RE_DOMAIN_SEARCH = """^[a-z0-9-\.]+$""" |
251
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
53 |
TYPE_ACCOUNT = 0x1 |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
54 |
TYPE_ALIAS = 0x2 |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
55 |
TYPE_RELOCATED = 0x4 |
283
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
56 |
OTHER_TYPES = { |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
57 |
TYPE_ACCOUNT: (_(u'an account'), ACCOUNT_EXISTS), |
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
58 |
TYPE_ALIAS: (_(u'an alias'), ALIAS_EXISTS), |
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
59 |
TYPE_RELOCATED: (_(u'a relocated user'), RELOCATED_EXISTS), |
283
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
60 |
} |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
61 |
|
190
1903d4ce97d7
VMM/{,cli/}Handler: reverted most of cs cf1b5f22dbd2 added a cli handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
188
diff
changeset
|
62 |
|
185
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
184
diff
changeset
|
63 |
class Handler(object): |
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
184
diff
changeset
|
64 |
"""Wrapper class to simplify the access on all the stuff from |
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
184
diff
changeset
|
65 |
VirtualMailManager""" |
355
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
66 |
__slots__ = ('_cfg', '_cfg_fname', '_db_connect', '_dbh', '_warnings') |
191
db77501aeaed
VMM/Handler: __mailDirMake() add warning for skipped mailboxes.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
190
diff
changeset
|
67 |
|
190
1903d4ce97d7
VMM/{,cli/}Handler: reverted most of cs cf1b5f22dbd2 added a cli handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
188
diff
changeset
|
68 |
def __init__(self, skip_some_checks=False): |
185
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
184
diff
changeset
|
69 |
"""Creates a new Handler instance. |
188
cf1b5f22dbd2
VMM/Handler: __init__ accepts now a config_type ('default'||'cli').
Pascal Volk <neverseen@users.sourceforge.net>
parents:
187
diff
changeset
|
70 |
|
190
1903d4ce97d7
VMM/{,cli/}Handler: reverted most of cs cf1b5f22dbd2 added a cli handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
188
diff
changeset
|
71 |
``skip_some_checks`` : bool |
1903d4ce97d7
VMM/{,cli/}Handler: reverted most of cs cf1b5f22dbd2 added a cli handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
188
diff
changeset
|
72 |
When a derived class knows how to handle all checks this |
1903d4ce97d7
VMM/{,cli/}Handler: reverted most of cs cf1b5f22dbd2 added a cli handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
188
diff
changeset
|
73 |
argument may be ``True``. By default it is ``False`` and |
1903d4ce97d7
VMM/{,cli/}Handler: reverted most of cs cf1b5f22dbd2 added a cli handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
188
diff
changeset
|
74 |
all checks will be performed. |
188
cf1b5f22dbd2
VMM/Handler: __init__ accepts now a config_type ('default'||'cli').
Pascal Volk <neverseen@users.sourceforge.net>
parents:
187
diff
changeset
|
75 |
|
216
0c8c053b451c
Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
215
diff
changeset
|
76 |
Throws a NotRootError if your uid is greater 0. |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
77 |
""" |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
78 |
self._cfg_fname = '' |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
79 |
self._warnings = [] |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
80 |
self._cfg = None |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
192
diff
changeset
|
81 |
self._dbh = None |
355
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
82 |
self._db_connect = None |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
83 |
|
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
84 |
if os.geteuid(): |
216
0c8c053b451c
Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
215
diff
changeset
|
85 |
raise NotRootError(_(u"You are not root.\n\tGood bye!\n"), |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
86 |
CONF_NOPERM) |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
87 |
if self._check_cfg_file(): |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
88 |
self._cfg = Cfg(self._cfg_fname) |
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
89 |
self._cfg.load() |
190
1903d4ce97d7
VMM/{,cli/}Handler: reverted most of cs cf1b5f22dbd2 added a cli handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
188
diff
changeset
|
90 |
if not skip_some_checks: |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
91 |
self._cfg.check() |
190
1903d4ce97d7
VMM/{,cli/}Handler: reverted most of cs cf1b5f22dbd2 added a cli handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
188
diff
changeset
|
92 |
self._chkenv() |
355
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
93 |
self._set_db_connect() |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
94 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
95 |
def _find_cfg_file(self): |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
96 |
"""Search the CFG_FILE in CFG_PATH. |
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
97 |
Raise a VMMError when no vmm.cfg could be found. |
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
98 |
""" |
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
99 |
for path in CFG_PATH.split(':'): |
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
100 |
tmp = os.path.join(path, CFG_FILE) |
119
014335f38962
Small code cleanups (replaced dir+'/'+file by os.path.join()).
Pascal Volk <neverseen@users.sourceforge.net>
parents:
115
diff
changeset
|
101 |
if os.path.isfile(tmp): |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
102 |
self._cfg_fname = tmp |
94
0d303d15549e
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
90
diff
changeset
|
103 |
break |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
104 |
if not self._cfg_fname: |
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
105 |
raise VMMError(_(u"Could not find '%(cfg_file)s' in: " |
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
106 |
u"'%(cfg_path)s'") % {'cfg_file': CFG_FILE, |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
107 |
'cfg_path': CFG_PATH}, CONF_NOFILE) |
94
0d303d15549e
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
90
diff
changeset
|
108 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
109 |
def _check_cfg_file(self): |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
110 |
"""Checks the configuration file, returns bool""" |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
111 |
self._find_cfg_file() |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
112 |
fstat = os.stat(self._cfg_fname) |
48
0d5f58f8b8f5
* 'VirtualMailManager/Exceptions.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
47
diff
changeset
|
113 |
fmode = int(oct(fstat.st_mode & 0777)) |
187
38b9a9859749
VMM/{,cli/Cli}Config: Moved interactive stuff to new CliConfig class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
186
diff
changeset
|
114 |
if fmode % 100 and fstat.st_uid != fstat.st_gid or \ |
285
d30a94f5aef5
VMM/Handler: import the errors before raising them.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
283
diff
changeset
|
115 |
fmode % 10 and fstat.st_uid == fstat.st_gid: |
470
807ad4df0774
VMM/handler: Added a comment for the Translation Project.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
458
diff
changeset
|
116 |
# TP: Please keep the backticks around the command. `chmod 0600 …` |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
285
diff
changeset
|
117 |
raise PermissionError(_(u"wrong permissions for '%(file)s': " |
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
285
diff
changeset
|
118 |
u"%(perms)s\n`chmod 0600 %(file)s` would " |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
119 |
u"be great.") % {'file': self._cfg_fname, |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
120 |
'perms': fmode}, CONF_WRONGPERM) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
121 |
else: |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
122 |
return True |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
123 |
|
190
1903d4ce97d7
VMM/{,cli/}Handler: reverted most of cs cf1b5f22dbd2 added a cli handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
188
diff
changeset
|
124 |
def _chkenv(self): |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
125 |
"""Make sure our base_directory is a directory and that all |
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
126 |
required executables exists and are executable. |
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
127 |
If not, a VMMError will be raised""" |
327
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
128 |
dir_created = False |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
129 |
basedir = self._cfg.dget('misc.base_directory') |
168
fd496561acc6
vmm.cfg: a few re-renamed configuration options.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
166
diff
changeset
|
130 |
if not os.path.exists(basedir): |
28
87da30d30fde
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
24
diff
changeset
|
131 |
old_umask = os.umask(0006) |
168
fd496561acc6
vmm.cfg: a few re-renamed configuration options.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
166
diff
changeset
|
132 |
os.makedirs(basedir, 0771) |
270
d3389645a91d
configuration: Dropped setting misc.gid_mail.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
266
diff
changeset
|
133 |
os.chown(basedir, 0, 0) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
134 |
os.umask(old_umask) |
327
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
135 |
dir_created = True |
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
136 |
if not dir_created and not lisdir(basedir): |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
137 |
raise VMMError(_(u"'%(path)s' is not a directory.\n(%(cfg_file)s: " |
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
138 |
u"section 'misc', option 'base_directory')") % |
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
139 |
{'path': basedir, 'cfg_file': self._cfg_fname}, |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
140 |
NO_SUCH_DIRECTORY) |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
141 |
for opt, val in self._cfg.items('bin'): |
185
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
184
diff
changeset
|
142 |
try: |
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
184
diff
changeset
|
143 |
exec_ok(val) |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
285
diff
changeset
|
144 |
except VMMError, err: |
351
4bba5fb90b78
VMM/handler: Small code cleanups.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
341
diff
changeset
|
145 |
if err.code in (NO_SUCH_BINARY, NOT_EXECUTABLE): |
4bba5fb90b78
VMM/handler: Small code cleanups.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
341
diff
changeset
|
146 |
raise VMMError(err.msg + _(u"\n(%(cfg_file)s: section " |
4bba5fb90b78
VMM/handler: Small code cleanups.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
341
diff
changeset
|
147 |
u"'bin', option '%(option)s')") % |
4bba5fb90b78
VMM/handler: Small code cleanups.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
341
diff
changeset
|
148 |
{'cfg_file': self._cfg_fname, |
4bba5fb90b78
VMM/handler: Small code cleanups.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
341
diff
changeset
|
149 |
'option': opt}, err.code) |
185
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
184
diff
changeset
|
150 |
else: |
6e1ef32fbd82
VMM/*: Moved some methods from classes to modules __init__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
184
diff
changeset
|
151 |
raise |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
152 |
|
355
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
153 |
def _set_db_connect(self): |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
154 |
"""check which module to use and set self._db_connect""" |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
155 |
global _db_mod |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
156 |
if self._cfg.dget('database.module').lower() == 'psycopg2': |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
157 |
try: |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
158 |
_db_mod = __import__('psycopg2') |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
159 |
except ImportError: |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
407
diff
changeset
|
160 |
raise VMMError(_(u"Unable to import database module '%s'.") % |
355
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
161 |
'psycopg2', VMM_ERROR) |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
162 |
self._db_connect = self._psycopg2_connect |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
163 |
else: |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
164 |
try: |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
165 |
tmp = __import__('pyPgSQL', globals(), locals(), ['PgSQL']) |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
166 |
except ImportError: |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
407
diff
changeset
|
167 |
raise VMMError(_(u"Unable to import database module '%s'.") % |
355
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
168 |
'pyPgSQL', VMM_ERROR) |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
169 |
_db_mod = tmp.PgSQL |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
170 |
self._db_connect = self._pypgsql_connect |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
171 |
|
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
172 |
def _pypgsql_connect(self): |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
173 |
"""Creates a pyPgSQL.PgSQL.connection instance.""" |
355
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
174 |
if self._dbh is None or (isinstance(self._dbh, _db_mod.Connection) and |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
192
diff
changeset
|
175 |
not self._dbh._isOpen): |
83
cc195af37de0
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
80
diff
changeset
|
176 |
try: |
355
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
177 |
self._dbh = _db_mod.connect( |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
178 |
database=self._cfg.dget('database.name'), |
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
179 |
user=self._cfg.pget('database.user'), |
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
180 |
host=self._cfg.dget('database.host'), |
355
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
181 |
port=self._cfg.dget('database.port'), |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
182 |
password=self._cfg.pget('database.pass'), |
83
cc195af37de0
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
80
diff
changeset
|
183 |
client_encoding='utf8', unicode_results=True) |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
192
diff
changeset
|
184 |
dbc = self._dbh.cursor() |
83
cc195af37de0
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
80
diff
changeset
|
185 |
dbc.execute("SET NAMES 'UTF8'") |
cc195af37de0
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
80
diff
changeset
|
186 |
dbc.close() |
355
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
187 |
except _db_mod.libpq.DatabaseError, err: |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
188 |
raise VMMError(str(err), DATABASE_ERROR) |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
189 |
|
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
190 |
def _psycopg2_connect(self): |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
191 |
"""Return a new psycopg2 connection object.""" |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
192 |
if self._dbh is None or \ |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
193 |
(isinstance(self._dbh, _db_mod.extensions.connection) and |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
194 |
self._dbh.closed): |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
195 |
try: |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
196 |
self._dbh = _db_mod.connect( |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
197 |
host=self._cfg.dget('database.host'), |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
198 |
sslmode=self._cfg.dget('database.sslmode'), |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
199 |
port=self._cfg.dget('database.port'), |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
200 |
database=self._cfg.dget('database.name'), |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
201 |
user=self._cfg.pget('database.user'), |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
202 |
password=self._cfg.pget('database.pass')) |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
203 |
self._dbh.set_client_encoding('utf8') |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
204 |
_db_mod.extensions.register_type(_db_mod.extensions.UNICODE) |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
205 |
dbc = self._dbh.cursor() |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
206 |
dbc.execute("SET NAMES 'UTF8'") |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
207 |
dbc.close() |
48bf20b43f2e
VMM/handler: Added support for psycopg2.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
351
diff
changeset
|
208 |
except _db_mod.DatabaseError, err: |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
209 |
raise VMMError(str(err), DATABASE_ERROR) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
210 |
|
251
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
211 |
def _chk_other_address_types(self, address, exclude): |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
212 |
"""Checks if the EmailAddress *address* is known as `TYPE_ACCOUNT`, |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
213 |
`TYPE_ALIAS` or `TYPE_RELOCATED`, but not as the `TYPE_*` specified |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
214 |
by *exclude*. If the *address* is known as one of the `TYPE_*`s |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
215 |
the according `TYPE_*` constant will be returned. Otherwise 0 will |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
216 |
be returned.""" |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
217 |
assert exclude in (TYPE_ACCOUNT, TYPE_ALIAS, TYPE_RELOCATED) and \ |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
218 |
isinstance(address, EmailAddress) |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
219 |
if exclude is not TYPE_ACCOUNT: |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
220 |
account = Account(self._dbh, address) |
283
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
221 |
if account: |
251
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
222 |
return TYPE_ACCOUNT |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
223 |
if exclude is not TYPE_ALIAS: |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
224 |
alias = Alias(self._dbh, address) |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
225 |
if alias: |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
226 |
return TYPE_ALIAS |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
227 |
if exclude is not TYPE_RELOCATED: |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
228 |
relocated = Relocated(self._dbh, address) |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
229 |
if relocated: |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
230 |
return TYPE_RELOCATED |
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
231 |
return 0 |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
232 |
|
283
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
233 |
def _is_other_address(self, address, exclude): |
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
234 |
"""Checks if *address* is known for an Account (TYPE_ACCOUNT), |
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
235 |
Alias (TYPE_ALIAS) or Relocated (TYPE_RELOCATED), except for |
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
236 |
*exclude*. Returns `False` if the address is not known for other |
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
237 |
types. |
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
238 |
|
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
239 |
Raises a `VMMError` if the address is known. |
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
240 |
""" |
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
241 |
other = self._chk_other_address_types(address, exclude) |
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
242 |
if not other: |
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
243 |
return False |
341
6709d0faf2f5
VMM/…: Unified messages and removed non-ASCII quotes.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
337
diff
changeset
|
244 |
# TP: %(a_type)s will be one of: 'an account', 'an alias' or |
6709d0faf2f5
VMM/…: Unified messages and removed non-ASCII quotes.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
337
diff
changeset
|
245 |
# 'a relocated user' |
283
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
246 |
msg = _(u"There is already %(a_type)s with the address '%(address)s'.") |
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
247 |
raise VMMError(msg % {'a_type': OTHER_TYPES[other][0], |
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
248 |
'address': address}, OTHER_TYPES[other][1]) |
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
249 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
250 |
def _get_account(self, address): |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
251 |
"""Return an Account instances for the given address (str).""" |
80
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
78
diff
changeset
|
252 |
address = EmailAddress(address) |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
253 |
self._db_connect() |
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
254 |
return Account(self._dbh, address) |
80
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
78
diff
changeset
|
255 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
256 |
def _get_alias(self, address): |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
257 |
"""Return an Alias instances for the given address (str).""" |
197
d2712e8c724e
VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
196
diff
changeset
|
258 |
address = EmailAddress(address) |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
259 |
self._db_connect() |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
192
diff
changeset
|
260 |
return Alias(self._dbh, address) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
261 |
|
505
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
262 |
def _get_catchall(self, domain): |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
263 |
"""Return a CatchallAlias instances for the given domain (str).""" |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
264 |
self._db_connect() |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
265 |
return CatchallAlias(self._dbh, domain) |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
266 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
267 |
def _get_relocated(self, address): |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
268 |
"""Return a Relocated instances for the given address (str).""" |
80
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
78
diff
changeset
|
269 |
address = EmailAddress(address) |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
270 |
self._db_connect() |
197
d2712e8c724e
VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
196
diff
changeset
|
271 |
return Relocated(self._dbh, address) |
80
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
78
diff
changeset
|
272 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
273 |
def _get_domain(self, domainname): |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
274 |
"""Return a Domain instances for the given domain name (str).""" |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
275 |
self._db_connect() |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
233
diff
changeset
|
276 |
return Domain(self._dbh, domainname) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
277 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
278 |
def _get_disk_usage(self, directory): |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
279 |
"""Estimate file space usage for the given directory. |
128
cf8116625866
Converted VirtualMailManager and Postconf to new-style classes.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
119
diff
changeset
|
280 |
|
325
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
281 |
Arguments: |
40 | 282 |
|
325
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
283 |
`directory` : basestring |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
284 |
The directory to summarize recursively disk usage for |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
285 |
""" |
327
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
286 |
if lisdir(directory): |
325
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
287 |
return Popen([self._cfg.dget('bin.du'), "-hs", directory], |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
288 |
stdout=PIPE).communicate()[0].split('\t')[0] |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
289 |
else: |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
290 |
self._warnings.append(_('No such directory: %s') % directory) |
325
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
291 |
return 0 |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
292 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
293 |
def _make_domain_dir(self, domain): |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
294 |
"""Create a directory for the `domain` and its accounts.""" |
310
644e2cc4a441
VMM/Handler: Reworked __domDirMake and reamed to __make_domain_dir.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
309
diff
changeset
|
295 |
cwd = os.getcwd() |
644e2cc4a441
VMM/Handler: Reworked __domDirMake and reamed to __make_domain_dir.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
309
diff
changeset
|
296 |
hashdir, domdir = domain.directory.split(os.path.sep)[-2:] |
327
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
297 |
dir_created = False |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
298 |
os.chdir(self._cfg.dget('misc.base_directory')) |
493
30365a87650d
VMM/handler: Create domain directory with umask 0022.
Pascal Volk <user@localhost.localdomain.org>
parents:
470
diff
changeset
|
299 |
old_umask = os.umask(0022) |
327
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
300 |
if not os.path.exists(hashdir): |
310
644e2cc4a441
VMM/Handler: Reworked __domDirMake and reamed to __make_domain_dir.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
309
diff
changeset
|
301 |
os.mkdir(hashdir, 0711) |
644e2cc4a441
VMM/Handler: Reworked __domDirMake and reamed to __make_domain_dir.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
309
diff
changeset
|
302 |
os.chown(hashdir, 0, 0) |
327
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
303 |
dir_created = True |
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
304 |
if not dir_created and not lisdir(hashdir): |
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
305 |
raise VMMError(_(u"'%s' is not a directory.") % hashdir, |
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
306 |
NO_SUCH_DIRECTORY) |
380
5aaf2dd6b146
VMM/handler: Handler._make_domain_dir(): Check if the domain
Pascal Volk <neverseen@users.sourceforge.net>
parents:
375
diff
changeset
|
307 |
if os.path.exists(domain.directory): |
5aaf2dd6b146
VMM/handler: Handler._make_domain_dir(): Check if the domain
Pascal Volk <neverseen@users.sourceforge.net>
parents:
375
diff
changeset
|
308 |
raise VMMError(_(u"The file/directory '%s' already exists.") % |
381
98223e5c95e0
VMM:/handler: Fixed typo introduced with the previous commit.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
380
diff
changeset
|
309 |
domain.directory, VMM_ERROR) |
310
644e2cc4a441
VMM/Handler: Reworked __domDirMake and reamed to __make_domain_dir.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
309
diff
changeset
|
310 |
os.mkdir(os.path.join(hashdir, domdir), |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
311 |
self._cfg.dget('domain.directory_mode')) |
310
644e2cc4a441
VMM/Handler: Reworked __domDirMake and reamed to __make_domain_dir.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
309
diff
changeset
|
312 |
os.chown(domain.directory, 0, domain.gid) |
493
30365a87650d
VMM/handler: Create domain directory with umask 0022.
Pascal Volk <user@localhost.localdomain.org>
parents:
470
diff
changeset
|
313 |
os.umask(old_umask) |
310
644e2cc4a441
VMM/Handler: Reworked __domDirMake and reamed to __make_domain_dir.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
309
diff
changeset
|
314 |
os.chdir(cwd) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
315 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
316 |
def _make_home(self, account): |
309
d21423478803
VMM/mailbox: Added to the repository.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
294
diff
changeset
|
317 |
"""Create a home directory for the new Account *account*.""" |
329
41789df75339
VMM/account: Replaced property domain_directory by domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
327
diff
changeset
|
318 |
domdir = account.domain.directory |
327
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
319 |
if not lisdir(domdir): |
330
3fe8d6cdbe3a
VMM/handler: _make_home() Create the domain directory if it
Pascal Volk <neverseen@users.sourceforge.net>
parents:
329
diff
changeset
|
320 |
self._make_domain_dir(account.domain) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
321 |
os.umask(0007) |
327
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
322 |
uid = account.uid |
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
323 |
os.chdir(domdir) |
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
324 |
os.mkdir('%s' % uid, self._cfg.dget('account.directory_mode')) |
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
325 |
os.chown('%s' % uid, uid, account.gid) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
326 |
|
337
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
327 |
def _make_account_dirs(self, account): |
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
328 |
"""Create all necessary directories for the account.""" |
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
329 |
oldpwd = os.getcwd() |
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
330 |
self._make_home(account) |
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
331 |
mailbox = new_mailbox(account) |
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
332 |
mailbox.create() |
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
333 |
folders = self._cfg.dget('mailbox.folders').split(':') |
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
334 |
if any(folders): |
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
335 |
bad = mailbox.add_boxes(folders, |
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
336 |
self._cfg.dget('mailbox.subscribe')) |
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
337 |
if bad: |
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
338 |
self._warnings.append(_(u"Skipped mailbox folders:") + |
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
339 |
'\n\t- ' + '\n\t- '.join(bad)) |
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
340 |
os.chdir(oldpwd) |
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
341 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
342 |
def _delete_home(self, domdir, uid, gid): |
325
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
343 |
"""Delete a user's home directory. |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
344 |
|
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
345 |
Arguments: |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
346 |
|
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
347 |
`domdir` : basestring |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
348 |
The directory of the domain the user belongs to |
329
41789df75339
VMM/account: Replaced property domain_directory by domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
327
diff
changeset
|
349 |
(commonly AccountObj.domain.directory) |
325
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
350 |
`uid` : int/long |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
351 |
The user's UID (commonly AccountObj.uid) |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
352 |
`gid` : int/long |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
353 |
The user's GID (commonly AccountObj.gid) |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
354 |
""" |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
355 |
assert all(isinstance(xid, (long, int)) for xid in (uid, gid)) and \ |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
356 |
isinstance(domdir, basestring) |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
357 |
if uid < MIN_UID or gid < MIN_GID: |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
358 |
raise VMMError(_(u"UID '%(uid)u' and/or GID '%(gid)u' are less " |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
359 |
u"than %(min_uid)u/%(min_gid)u.") % {'uid': uid, |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
360 |
'gid': gid, 'min_gid': MIN_GID, 'min_uid': MIN_UID}, |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
361 |
MAILDIR_PERM_MISMATCH) |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
362 |
if domdir.count('..'): |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
363 |
raise VMMError(_(u'Found ".." in domain directory path: %s') % |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
364 |
domdir, FOUND_DOTS_IN_PATH) |
327
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
365 |
if not lisdir(domdir): |
325
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
366 |
raise VMMError(_(u"No such directory: %s") % domdir, |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
367 |
NO_SUCH_DIRECTORY) |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
368 |
os.chdir(domdir) |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
369 |
userdir = '%s' % uid |
327
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
370 |
if not lisdir(userdir): |
325
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
371 |
self._warnings.append(_(u"No such directory: %s") % |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
372 |
os.path.join(domdir, userdir)) |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
373 |
return |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
374 |
mdstat = os.lstat(userdir) |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
375 |
if (mdstat.st_uid, mdstat.st_gid) != (uid, gid): |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
376 |
raise VMMError(_(u'Detected owner/group mismatch in home ' |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
377 |
u'directory.'), MAILDIR_PERM_MISMATCH) |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
378 |
rmtree(userdir, ignore_errors=True) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
379 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
380 |
def _delete_domain_dir(self, domdir, gid): |
325
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
381 |
"""Delete a domain's directory. |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
382 |
|
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
383 |
Arguments: |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
384 |
|
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
385 |
`domdir` : basestring |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
386 |
The domain's directory (commonly DomainObj.directory) |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
387 |
`gid` : int/long |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
388 |
The domain's GID (commonly DomainObj.gid) |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
389 |
""" |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
390 |
assert isinstance(domdir, basestring) and isinstance(gid, (long, int)) |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
391 |
if gid < MIN_GID: |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
392 |
raise VMMError(_(u"GID '%(gid)u' is less than '%(min_gid)u'.") % |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
393 |
{'gid': gid, 'min_gid': MIN_GID}, |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
394 |
DOMAINDIR_GROUP_MISMATCH) |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
395 |
if domdir.count('..'): |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
396 |
raise VMMError(_(u'Found ".." in domain directory path: %s') % |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
397 |
domdir, FOUND_DOTS_IN_PATH) |
327
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
398 |
if not lisdir(domdir): |
325
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
399 |
self._warnings.append(_('No such directory: %s') % domdir) |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
400 |
return |
327
bb9ff81928f1
VMM/handler: Use more common.lisdir() in Handler's methods _chkenv,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
325
diff
changeset
|
401 |
dirst = os.lstat(domdir) |
325
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
402 |
if dirst.st_gid != gid: |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
403 |
raise VMMError(_(u'Detected group mismatch in domain directory: ' |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
404 |
u'%s') % domdir, DOMAINDIR_GROUP_MISMATCH) |
06c0457036a0
VMM/handler: Reworked methods _get_disk_usage, _delete_home and
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
405 |
rmtree(domdir, ignore_errors=True) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
406 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
407 |
def has_warnings(self): |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
408 |
"""Checks if warnings are present, returns bool.""" |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
409 |
return bool(len(self._warnings)) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
410 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
411 |
def get_warnings(self): |
221
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
412 |
"""Returns a list with all available warnings and resets all |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
413 |
warnings. |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
414 |
""" |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
415 |
ret_val = self._warnings[:] |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
416 |
del self._warnings[:] |
221
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
417 |
return ret_val |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
418 |
|
255
d2ddd4a6528d
VMM/Handler: renamed some methods and added their missing docstrings:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
419 |
def cfg_dget(self, option): |
d2ddd4a6528d
VMM/Handler: renamed some methods and added their missing docstrings:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
420 |
"""Get the configured value of the *option* (section.option). |
d2ddd4a6528d
VMM/Handler: renamed some methods and added their missing docstrings:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
421 |
When the option was not configured its default value will be |
d2ddd4a6528d
VMM/Handler: renamed some methods and added their missing docstrings:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
422 |
returned.""" |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
423 |
return self._cfg.dget(option) |
40 | 424 |
|
255
d2ddd4a6528d
VMM/Handler: renamed some methods and added their missing docstrings:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
425 |
def cfg_pget(self, option): |
d2ddd4a6528d
VMM/Handler: renamed some methods and added their missing docstrings:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
426 |
"""Get the configured value of the *option* (section.option).""" |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
427 |
return self._cfg.pget(option) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
428 |
|
280
db35d2eec518
VMM/{Config,Handler}: moved Config.install() to Handler.cfg_install().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
278
diff
changeset
|
429 |
def cfg_install(self): |
db35d2eec518
VMM/{Config,Handler}: moved Config.install() to Handler.cfg_install().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
278
diff
changeset
|
430 |
"""Installs the cfg_dget method as ``cfg_dget`` into the built-in |
db35d2eec518
VMM/{Config,Handler}: moved Config.install() to Handler.cfg_install().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
278
diff
changeset
|
431 |
namespace.""" |
db35d2eec518
VMM/{Config,Handler}: moved Config.install() to Handler.cfg_install().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
278
diff
changeset
|
432 |
import __builtin__ |
db35d2eec518
VMM/{Config,Handler}: moved Config.install() to Handler.cfg_install().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
278
diff
changeset
|
433 |
assert 'cfg_dget' not in __builtin__.__dict__ |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
434 |
__builtin__.__dict__['cfg_dget'] = self._cfg.dget |
280
db35d2eec518
VMM/{Config,Handler}: moved Config.install() to Handler.cfg_install().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
278
diff
changeset
|
435 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
436 |
def domain_add(self, domainname, transport=None): |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
437 |
"""Wrapper around Domain's set_quotalimit, set_transport and save.""" |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
438 |
dom = self._get_domain(domainname) |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
233
diff
changeset
|
439 |
if transport is None: |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
233
diff
changeset
|
440 |
dom.set_transport(Transport(self._dbh, |
458
4ff0fa3ba0fa
VMM/config: Moved some options to section `domain':
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
441 |
transport=self._cfg.dget('domain.transport'))) |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
233
diff
changeset
|
442 |
else: |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
233
diff
changeset
|
443 |
dom.set_transport(Transport(self._dbh, transport=transport)) |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
444 |
dom.set_quotalimit(QuotaLimit(self._dbh, |
458
4ff0fa3ba0fa
VMM/config: Moved some options to section `domain':
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
445 |
bytes=long(self._cfg.dget('domain.quota_bytes')), |
4ff0fa3ba0fa
VMM/config: Moved some options to section `domain':
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
446 |
messages=self._cfg.dget('domain.quota_messages'))) |
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
447 |
dom.set_serviceset(ServiceSet(self._dbh, |
458
4ff0fa3ba0fa
VMM/config: Moved some options to section `domain':
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
448 |
imap=self._cfg.dget('domain.imap'), |
4ff0fa3ba0fa
VMM/config: Moved some options to section `domain':
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
449 |
pop3=self._cfg.dget('domain.pop3'), |
4ff0fa3ba0fa
VMM/config: Moved some options to section `domain':
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
450 |
sieve=self._cfg.dget('domain.sieve'), |
4ff0fa3ba0fa
VMM/config: Moved some options to section `domain':
Pascal Volk <neverseen@users.sourceforge.net>
parents:
447
diff
changeset
|
451 |
smtp=self._cfg.dget('domain.smtp'))) |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
452 |
dom.set_directory(self._cfg.dget('misc.base_directory')) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
453 |
dom.save() |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
454 |
self._make_domain_dir(dom) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
455 |
|
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
456 |
def domain_quotalimit(self, domainname, bytes_, messages=0, force=None): |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
457 |
"""Wrapper around Domain.update_quotalimit().""" |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
458 |
if not all(isinstance(i, (int, long)) for i in (bytes_, messages)): |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
459 |
raise TypeError("'bytes_' and 'messages' have to be " |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
460 |
"integers or longs.") |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
461 |
if force is not None and force != 'force': |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
462 |
raise DomainError(_(u"Invalid argument: '%s'") % force, |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
463 |
INVALID_ARGUMENT) |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
464 |
dom = self._get_domain(domainname) |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
465 |
quotalimit = QuotaLimit(self._dbh, bytes=bytes_, messages=messages) |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
466 |
if force is None: |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
467 |
dom.update_quotalimit(quotalimit) |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
468 |
else: |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
469 |
dom.update_quotalimit(quotalimit, force=True) |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
470 |
|
441
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
471 |
def domain_services(self, domainname, force=None, *services): |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
472 |
"""Wrapper around Domain.update_serviceset().""" |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
473 |
kwargs = dict.fromkeys(SERVICES, False) |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
474 |
if force is not None and force != 'force': |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
475 |
raise DomainError(_(u"Invalid argument: '%s'") % force, |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
476 |
INVALID_ARGUMENT) |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
477 |
for service in set(services): |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
478 |
if service not in SERVICES: |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
479 |
raise DomainError(_(u"Unknown service: '%s'") % service, |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
480 |
UNKNOWN_SERVICE) |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
481 |
kwargs[service] = True |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
482 |
|
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
483 |
dom = self._get_domain(domainname) |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
484 |
serviceset = ServiceSet(self._dbh, **kwargs) |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
485 |
dom.update_serviceset(serviceset, (True, False)[not force]) |
1af5fe0683ce
VMM/domain: Integrated class ServiceSet in class Domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
426
diff
changeset
|
486 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
487 |
def domain_transport(self, domainname, transport, force=None): |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
488 |
"""Wrapper around Domain.update_transport()""" |
18
c98e08791ee8
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
17
diff
changeset
|
489 |
if force is not None and force != 'force': |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
490 |
raise DomainError(_(u"Invalid argument: '%s'") % force, |
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
491 |
INVALID_ARGUMENT) |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
492 |
dom = self._get_domain(domainname) |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
233
diff
changeset
|
493 |
trsp = Transport(self._dbh, transport=transport) |
18
c98e08791ee8
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
17
diff
changeset
|
494 |
if force is None: |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
233
diff
changeset
|
495 |
dom.update_transport(trsp) |
18
c98e08791ee8
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
17
diff
changeset
|
496 |
else: |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
233
diff
changeset
|
497 |
dom.update_transport(trsp, force=True) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
498 |
|
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
330
diff
changeset
|
499 |
def domain_delete(self, domainname, force=False): |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
500 |
"""Wrapper around Domain.delete()""" |
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
330
diff
changeset
|
501 |
if not isinstance(force, bool): |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
330
diff
changeset
|
502 |
raise TypeError('force must be a bool') |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
503 |
dom = self._get_domain(domainname) |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
233
diff
changeset
|
504 |
gid = dom.gid |
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
233
diff
changeset
|
505 |
domdir = dom.directory |
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
330
diff
changeset
|
506 |
if self._cfg.dget('domain.force_deletion') or force: |
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
330
diff
changeset
|
507 |
dom.delete(True) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
508 |
else: |
331
270b57af85de
VMM/domain: Simplified Domain.delete() related methods and their arguments,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
330
diff
changeset
|
509 |
dom.delete(False) |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
510 |
if self._cfg.dget('domain.delete_directory'): |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
511 |
self._delete_domain_dir(domdir, gid) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
512 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
513 |
def domain_info(self, domainname, details=None): |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
514 |
"""Wrapper around Domain.get_info(), Domain.get_accounts(), |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
515 |
Domain.get_aliase_names(), Domain.get_aliases() and |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
516 |
Domain.get_relocated.""" |
62
869de537a020
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
55
diff
changeset
|
517 |
if details not in [None, 'accounts', 'aliasdomains', 'aliases', 'full', |
510
1fa354bbdb90
Add catchall info to domain_info output
martin f. krafft <madduck@madduck.net>
parents:
508
diff
changeset
|
518 |
'relocated', 'catchall']: |
341
6709d0faf2f5
VMM/…: Unified messages and removed non-ASCII quotes.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
337
diff
changeset
|
519 |
raise VMMError(_(u"Invalid argument: '%s'") % details, |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
520 |
INVALID_ARGUMENT) |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
521 |
dom = self._get_domain(domainname) |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
233
diff
changeset
|
522 |
dominfo = dom.get_info() |
447
c31d604e26d3
VMM/domain: Extended/updated Domain.get_info() in order to:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
444
diff
changeset
|
523 |
if dominfo['domain name'].startswith('xn--'): |
c31d604e26d3
VMM/domain: Extended/updated Domain.get_info() in order to:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
444
diff
changeset
|
524 |
dominfo['domain name'] += ' (%s)' % \ |
c31d604e26d3
VMM/domain: Extended/updated Domain.get_info() in order to:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
444
diff
changeset
|
525 |
dominfo['domain name'].decode('idna') |
62
869de537a020
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
55
diff
changeset
|
526 |
if details is None: |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
527 |
return dominfo |
62
869de537a020
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
55
diff
changeset
|
528 |
elif details == 'accounts': |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
233
diff
changeset
|
529 |
return (dominfo, dom.get_accounts()) |
62
869de537a020
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
55
diff
changeset
|
530 |
elif details == 'aliasdomains': |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
233
diff
changeset
|
531 |
return (dominfo, dom.get_aliase_names()) |
62
869de537a020
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
55
diff
changeset
|
532 |
elif details == 'aliases': |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
233
diff
changeset
|
533 |
return (dominfo, dom.get_aliases()) |
80
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
78
diff
changeset
|
534 |
elif details == 'relocated': |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
233
diff
changeset
|
535 |
return(dominfo, dom.get_relocated()) |
510
1fa354bbdb90
Add catchall info to domain_info output
martin f. krafft <madduck@madduck.net>
parents:
508
diff
changeset
|
536 |
elif details == 'catchall': |
1fa354bbdb90
Add catchall info to domain_info output
martin f. krafft <madduck@madduck.net>
parents:
508
diff
changeset
|
537 |
return(dominfo, dom.get_catchall()) |
62
869de537a020
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
55
diff
changeset
|
538 |
else: |
236
084331dd1e4c
VMM/Domain: reworked Domain class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
233
diff
changeset
|
539 |
return (dominfo, dom.get_aliase_names(), dom.get_accounts(), |
510
1fa354bbdb90
Add catchall info to domain_info output
martin f. krafft <madduck@madduck.net>
parents:
508
diff
changeset
|
540 |
dom.get_aliases(), dom.get_relocated(), dom.get_catchall()) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
541 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
542 |
def aliasdomain_add(self, aliasname, domainname): |
55
15c873f94ba6
* 'VirtualMailManager/Exceptions.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
54
diff
changeset
|
543 |
"""Adds an alias domain to the domain. |
53
5b50eb306d37
* 'VirtualMailManager/DomainAlias.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
52
diff
changeset
|
544 |
|
244
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
545 |
Arguments: |
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
546 |
|
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
547 |
`aliasname` : basestring |
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
548 |
The name of the alias domain |
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
549 |
`domainname` : basestring |
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
550 |
The name of the target domain |
45
9e66138aad0b
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
44
diff
changeset
|
551 |
""" |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
552 |
dom = self._get_domain(domainname) |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
553 |
alias_dom = AliasDomain(self._dbh, aliasname) |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
554 |
alias_dom.set_destination(dom) |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
555 |
alias_dom.save() |
53
5b50eb306d37
* 'VirtualMailManager/DomainAlias.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
52
diff
changeset
|
556 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
557 |
def aliasdomain_info(self, aliasname): |
244
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
558 |
"""Returns a dict (keys: "alias" and "domain") with the names of |
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
559 |
the alias domain and its primary domain.""" |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
560 |
self._db_connect() |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
561 |
alias_dom = AliasDomain(self._dbh, aliasname) |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
562 |
return alias_dom.info() |
45
9e66138aad0b
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
44
diff
changeset
|
563 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
564 |
def aliasdomain_switch(self, aliasname, domainname): |
78
8f1e501b1bb1
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
76
diff
changeset
|
565 |
"""Modifies the target domain of an existing alias domain. |
8f1e501b1bb1
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
76
diff
changeset
|
566 |
|
244
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
567 |
Arguments: |
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
568 |
|
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
569 |
`aliasname` : basestring |
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
570 |
The name of the alias domain |
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
571 |
`domainname` : basestring |
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
572 |
The name of the new target domain |
78
8f1e501b1bb1
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
76
diff
changeset
|
573 |
""" |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
574 |
dom = self._get_domain(domainname) |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
575 |
alias_dom = AliasDomain(self._dbh, aliasname) |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
576 |
alias_dom.set_destination(dom) |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
577 |
alias_dom.switch() |
78
8f1e501b1bb1
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
76
diff
changeset
|
578 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
579 |
def aliasdomain_delete(self, aliasname): |
244
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
580 |
"""Deletes the given alias domain. |
53
5b50eb306d37
* 'VirtualMailManager/DomainAlias.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
52
diff
changeset
|
581 |
|
244
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
582 |
Argument: |
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
583 |
|
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
584 |
`aliasname` : basestring |
698ba4208ddc
VMM/Handler: adjusted Handler.aliasDomain*() methods to changes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
241
diff
changeset
|
585 |
The name of the alias domain |
45
9e66138aad0b
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
44
diff
changeset
|
586 |
""" |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
587 |
self._db_connect() |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
588 |
alias_dom = AliasDomain(self._dbh, aliasname) |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
589 |
alias_dom.delete() |
45
9e66138aad0b
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
44
diff
changeset
|
590 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
591 |
def domain_list(self, pattern=None): |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
592 |
"""Wrapper around function search() from module Domain.""" |
320
011066435e6f
VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
319
diff
changeset
|
593 |
from VirtualMailManager.domain import search |
35
22cc616aef61
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
34
diff
changeset
|
594 |
like = False |
241
2493453f2c10
VMM/Handler: small code cleanups and an improved import statement.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
240
diff
changeset
|
595 |
if pattern and (pattern.startswith('%') or pattern.endswith('%')): |
2493453f2c10
VMM/Handler: small code cleanups and an improved import statement.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
240
diff
changeset
|
596 |
like = True |
2493453f2c10
VMM/Handler: small code cleanups and an improved import statement.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
240
diff
changeset
|
597 |
if not re.match(RE_DOMAIN_SEARCH, pattern.strip('%')): |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
285
diff
changeset
|
598 |
raise VMMError(_(u"The pattern '%s' contains invalid " |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
599 |
u"characters.") % pattern, DOMAIN_INVALID) |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
600 |
self._db_connect() |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
192
diff
changeset
|
601 |
return search(self._dbh, pattern=pattern, like=like) |
35
22cc616aef61
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
34
diff
changeset
|
602 |
|
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
603 |
def user_add(self, emailaddress, password): |
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
604 |
"""Wrapper around Account.set_password() and Account.save().""" |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
605 |
acc = self._get_account(emailaddress) |
337
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
606 |
if acc: |
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
607 |
raise VMMError(_(u"The account '%s' already exists.") % |
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
608 |
acc.address, ACCOUNT_EXISTS) |
422
33a45e4c80c4
VMM: Deleted a few unused variables.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
609 |
self._is_other_address(acc.address, TYPE_ACCOUNT) |
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
610 |
acc.set_password(password) |
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
611 |
acc.save() |
337
150ddcc8b315
VMM/{,cli/}handler: user_add: Check earlier if the account exists.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
335
diff
changeset
|
612 |
self._make_account_dirs(acc) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
613 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
614 |
def alias_add(self, aliasaddress, *targetaddresses): |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
192
diff
changeset
|
615 |
"""Creates a new `Alias` entry for the given *aliasaddress* with |
221
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
616 |
the given *targetaddresses*.""" |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
617 |
alias = self._get_alias(aliasaddress) |
375
4cbaf8d229f9
VMM/{,cli/}handler: Moved the 'address-in-use check' (introduced
Pascal Volk <neverseen@users.sourceforge.net>
parents:
373
diff
changeset
|
618 |
if not alias: |
4cbaf8d229f9
VMM/{,cli/}handler: Moved the 'address-in-use check' (introduced
Pascal Volk <neverseen@users.sourceforge.net>
parents:
373
diff
changeset
|
619 |
self._is_other_address(alias.address, TYPE_ALIAS) |
371
3b2fd0b4e51b
VMM/handler: Handler.alias_add() and Handler.relocated_add() use
Pascal Volk <neverseen@users.sourceforge.net>
parents:
366
diff
changeset
|
620 |
destinations = [DestinationEmailAddress(addr, self._dbh) \ |
3b2fd0b4e51b
VMM/handler: Handler.alias_add() and Handler.relocated_add() use
Pascal Volk <neverseen@users.sourceforge.net>
parents:
366
diff
changeset
|
621 |
for addr in targetaddresses] |
221
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
622 |
warnings = [] |
281
59ff7c719697
VMM/Alias: moved the postconf stuff from the Handlers to Alias class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
280
diff
changeset
|
623 |
destinations = alias.add_destinations(destinations, warnings) |
221
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
624 |
if warnings: |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
625 |
self._warnings.append(_('Ignored destination addresses:')) |
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
626 |
self._warnings.extend((' * %s' % w for w in warnings)) |
221
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
627 |
for destination in destinations: |
371
3b2fd0b4e51b
VMM/handler: Handler.alias_add() and Handler.relocated_add() use
Pascal Volk <neverseen@users.sourceforge.net>
parents:
366
diff
changeset
|
628 |
if destination.gid and \ |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
285
diff
changeset
|
629 |
not self._chk_other_address_types(destination, TYPE_RELOCATED): |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
630 |
self._warnings.append(_(u"The destination account/alias '%s' " |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
407
diff
changeset
|
631 |
u"does not exist.") % destination) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
632 |
|
333
1ed85e696748
VMM/{account,handler}: Account delete, use the boolean keyword force too.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
331
diff
changeset
|
633 |
def user_delete(self, emailaddress, force=False): |
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
634 |
"""Wrapper around Account.delete(...)""" |
333
1ed85e696748
VMM/{account,handler}: Account delete, use the boolean keyword force too.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
331
diff
changeset
|
635 |
if not isinstance(force, bool): |
1ed85e696748
VMM/{account,handler}: Account delete, use the boolean keyword force too.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
331
diff
changeset
|
636 |
raise TypeError('force must be a bool') |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
637 |
acc = self._get_account(emailaddress) |
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
638 |
if not acc: |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
407
diff
changeset
|
639 |
raise VMMError(_(u"The account '%s' does not exist.") % |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
640 |
acc.address, NO_SUCH_ACCOUNT) |
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
641 |
uid = acc.uid |
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
642 |
gid = acc.gid |
329
41789df75339
VMM/account: Replaced property domain_directory by domain.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
327
diff
changeset
|
643 |
dom_dir = acc.domain.directory |
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
644 |
acc_dir = acc.home |
333
1ed85e696748
VMM/{account,handler}: Account delete, use the boolean keyword force too.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
331
diff
changeset
|
645 |
acc.delete(force) |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
646 |
if self._cfg.dget('account.delete_directory'): |
47
191d5a5adc4a
* Removed gettext import and setup in VirtualMailManager/:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
45
diff
changeset
|
647 |
try: |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
648 |
self._delete_home(dom_dir, uid, gid) |
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
649 |
except VMMError, err: |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
650 |
if err.code in (FOUND_DOTS_IN_PATH, MAILDIR_PERM_MISMATCH, |
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
651 |
NO_SUCH_DIRECTORY): |
47
191d5a5adc4a
* Removed gettext import and setup in VirtualMailManager/:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
45
diff
changeset
|
652 |
warning = _(u"""\ |
191d5a5adc4a
* Removed gettext import and setup in VirtualMailManager/:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
45
diff
changeset
|
653 |
The account has been successfully deleted from the database. |
191d5a5adc4a
* Removed gettext import and setup in VirtualMailManager/:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
45
diff
changeset
|
654 |
But an error occurred while deleting the following directory: |
333
1ed85e696748
VMM/{account,handler}: Account delete, use the boolean keyword force too.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
331
diff
changeset
|
655 |
'%(directory)s' |
1ed85e696748
VMM/{account,handler}: Account delete, use the boolean keyword force too.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
331
diff
changeset
|
656 |
Reason: %(reason)s""") % {'directory': acc_dir, 'reason': err.msg} |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
657 |
self._warnings.append(warning) |
47
191d5a5adc4a
* Removed gettext import and setup in VirtualMailManager/:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
45
diff
changeset
|
658 |
else: |
191
db77501aeaed
VMM/Handler: __mailDirMake() add warning for skipped mailboxes.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
190
diff
changeset
|
659 |
raise |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
660 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
661 |
def alias_info(self, aliasaddress): |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
192
diff
changeset
|
662 |
"""Returns an iterator object for all destinations (`EmailAddress` |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
192
diff
changeset
|
663 |
instances) for the `Alias` with the given *aliasaddress*.""" |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
664 |
alias = self._get_alias(aliasaddress) |
283
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
665 |
if alias: |
215
33f727efa7c4
PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
208
diff
changeset
|
666 |
return alias.get_destinations() |
283
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
667 |
if not self._is_other_address(alias.address, TYPE_ALIAS): |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
407
diff
changeset
|
668 |
raise VMMError(_(u"The alias '%s' does not exist.") % |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
669 |
alias.address, NO_SUCH_ALIAS) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
670 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
671 |
def alias_delete(self, aliasaddress, targetaddress=None): |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
192
diff
changeset
|
672 |
"""Deletes the `Alias` *aliasaddress* with all its destinations from |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
192
diff
changeset
|
673 |
the database. If *targetaddress* is not ``None``, only this |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
192
diff
changeset
|
674 |
destination will be removed from the alias.""" |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
675 |
alias = self._get_alias(aliasaddress) |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
192
diff
changeset
|
676 |
if targetaddress is None: |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
192
diff
changeset
|
677 |
alias.delete() |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
192
diff
changeset
|
678 |
else: |
426
933b9debbec1
VMM/handler: Handler.alias_delete() also use class DestinationEmailAddress
Pascal Volk <neverseen@users.sourceforge.net>
parents:
422
diff
changeset
|
679 |
alias.del_destination(DestinationEmailAddress(targetaddress, |
933b9debbec1
VMM/handler: Handler.alias_delete() also use class DestinationEmailAddress
Pascal Volk <neverseen@users.sourceforge.net>
parents:
422
diff
changeset
|
680 |
self._dbh)) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
681 |
|
505
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
682 |
def catchall_add(self, domain, *targetaddresses): |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
683 |
"""Creates a new `CatchallAlias` entry for the given *domain* with |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
684 |
the given *targetaddresses*.""" |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
685 |
catchall = self._get_catchall(domain) |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
686 |
destinations = [DestinationEmailAddress(addr, self._dbh) \ |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
687 |
for addr in targetaddresses] |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
688 |
warnings = [] |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
689 |
destinations = catchall.add_destinations(destinations, warnings) |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
690 |
if warnings: |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
691 |
self._warnings.append(_('Ignored destination addresses:')) |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
692 |
self._warnings.extend((' * %s' % w for w in warnings)) |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
693 |
for destination in destinations: |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
694 |
if destination.gid and \ |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
695 |
not self._chk_other_address_types(destination, TYPE_RELOCATED): |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
696 |
self._warnings.append(_(u"The destination account/alias '%s' " |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
697 |
u"does not exist.") % destination) |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
698 |
|
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
699 |
def catchall_info(self, domain): |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
700 |
"""Returns an iterator object for all destinations (`EmailAddress` |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
701 |
instances) for the `CatchallAlias` with the given *domain*.""" |
508
18870919ec48
Fixup catchall_info to return iterator, not self
martin f. krafft <madduck@madduck.net>
parents:
505
diff
changeset
|
702 |
return self._get_catchall(domain).get_destinations() |
505
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
703 |
|
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
704 |
def catchall_delete(self, domain, targetaddress=None): |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
705 |
"""Deletes the `CatchallAlias` for domain *domain* with all its |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
706 |
destinations from the database. If *targetaddress* is not ``None``, |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
707 |
only this destination will be removed from the alias.""" |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
708 |
catchall = self._get_catchall(domain) |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
709 |
if targetaddress is None: |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
710 |
catchall.delete() |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
711 |
else: |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
712 |
catchall.del_destination(DestinationEmailAddress(targetaddress, |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
713 |
self._dbh)) |
3da8c919584f
Provide catchall_* methods to the Handler class
martin f. krafft <madduck@madduck.net>
parents:
493
diff
changeset
|
714 |
|
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
715 |
def user_info(self, emailaddress, details=None): |
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
716 |
"""Wrapper around Account.get_info(...)""" |
174
974bafa59330
VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
168
diff
changeset
|
717 |
if details not in (None, 'du', 'aliases', 'full'): |
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
718 |
raise VMMError(_(u"Invalid argument: '%s'") % details, |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
719 |
INVALID_ARGUMENT) |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
720 |
acc = self._get_account(emailaddress) |
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
721 |
if not acc: |
283
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
722 |
if not self._is_other_address(acc.address, TYPE_ACCOUNT): |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
407
diff
changeset
|
723 |
raise VMMError(_(u"The account '%s' does not exist.") % |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
724 |
acc.address, NO_SUCH_ACCOUNT) |
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
725 |
info = acc.get_info() |
318
4dc2edf02d11
VMM//{,cli/}Handler: Reworked configuration related parts.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
726 |
if self._cfg.dget('account.disk_usage') or details in ('du', 'full'): |
293
a77b67673aa6
VMM/Account: replaced attribute _mid : int by _mail : MailLocation.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
290
diff
changeset
|
727 |
path = os.path.join(acc.home, acc.mail_location.directory) |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
728 |
info['disk usage'] = self._get_disk_usage(path) |
174
974bafa59330
VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
168
diff
changeset
|
729 |
if details in (None, 'du'): |
90
1734eb5101c6
* 'VirtualMailManager/Account.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
88
diff
changeset
|
730 |
return info |
174
974bafa59330
VMM/Config: reworked configuration handling.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
168
diff
changeset
|
731 |
if details in ('aliases', 'full'): |
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
732 |
return (info, acc.get_aliases()) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
733 |
return info |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
734 |
|
255
d2ddd4a6528d
VMM/Handler: renamed some methods and added their missing docstrings:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
735 |
def user_by_uid(self, uid): |
d2ddd4a6528d
VMM/Handler: renamed some methods and added their missing docstrings:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
736 |
"""Search for an Account by its *uid*. |
d2ddd4a6528d
VMM/Handler: renamed some methods and added their missing docstrings:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
737 |
Returns a dict (address, uid and gid) if a user could be found.""" |
320
011066435e6f
VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
319
diff
changeset
|
738 |
from VirtualMailManager.account import get_account_by_uid |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
739 |
self._db_connect() |
255
d2ddd4a6528d
VMM/Handler: renamed some methods and added their missing docstrings:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
254
diff
changeset
|
740 |
return get_account_by_uid(uid, self._dbh) |
19
bf9a03c476fc
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
18
diff
changeset
|
741 |
|
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
742 |
def user_password(self, emailaddress, password): |
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
743 |
"""Wrapper for Account.modify('password' ...).""" |
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
744 |
if not isinstance(password, basestring) or not password: |
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
745 |
raise VMMError(_(u"Could not accept password: '%s'") % password, |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
746 |
INVALID_ARGUMENT) |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
747 |
acc = self._get_account(emailaddress) |
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
748 |
if not acc: |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
407
diff
changeset
|
749 |
raise VMMError(_(u"The account '%s' does not exist.") % |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
750 |
acc.address, NO_SUCH_ACCOUNT) |
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
751 |
acc.modify('password', password) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
752 |
|
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
753 |
def user_name(self, emailaddress, name): |
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
754 |
"""Wrapper for Account.modify('name', ...).""" |
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
755 |
if not isinstance(name, basestring) or not name: |
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
756 |
raise VMMError(_(u"Could not accept name: '%s'") % name, |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
757 |
INVALID_ARGUMENT) |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
758 |
acc = self._get_account(emailaddress) |
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
759 |
if not acc: |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
407
diff
changeset
|
760 |
raise VMMError(_(u"The account '%s' does not exist.") % |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
761 |
acc.address, NO_SUCH_ACCOUNT) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
762 |
acc.modify('name', name) |
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
763 |
|
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
764 |
def user_quotalimit(self, emailaddress, bytes_, messages=0): |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
765 |
"""Wrapper for Account.update_quotalimit(QuotaLimit).""" |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
766 |
if not all(isinstance(i, (int, long)) for i in (bytes_, messages)): |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
767 |
raise TypeError("'bytes_' and 'messages' have to be " |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
768 |
"integers or longs.") |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
769 |
acc = self._get_account(emailaddress) |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
770 |
if not acc: |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
407
diff
changeset
|
771 |
raise VMMError(_(u"The account '%s' does not exist.") % |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
772 |
acc.address, NO_SUCH_ACCOUNT) |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
773 |
acc.update_quotalimit(QuotaLimit(self._dbh, bytes=bytes_, |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
774 |
messages=messages)) |
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
775 |
|
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
776 |
def user_transport(self, emailaddress, transport): |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
777 |
"""Wrapper for Account.update_transport(Transport).""" |
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
778 |
if not isinstance(transport, basestring) or not transport: |
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
779 |
raise VMMError(_(u"Could not accept transport: '%s'") % transport, |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
780 |
INVALID_ARGUMENT) |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
781 |
acc = self._get_account(emailaddress) |
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
782 |
if not acc: |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
407
diff
changeset
|
783 |
raise VMMError(_(u"The account '%s' does not exist.") % |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
784 |
acc.address, NO_SUCH_ACCOUNT) |
390
660b42391c8e
VMM/{account,domain,handler}: Added quota limit support. A few
Pascal Volk <neverseen@users.sourceforge.net>
parents:
381
diff
changeset
|
785 |
acc.update_transport(Transport(self._dbh, transport=transport)) |
17
fe9be0081e5f
* 'VirtualMailManager/VirtualMailManager.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
16
diff
changeset
|
786 |
|
444
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
787 |
def user_services(self, emailaddress, *services): |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
788 |
"""Wrapper around Account.update_serviceset().""" |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
789 |
kwargs = dict.fromkeys(SERVICES, False) |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
790 |
for service in set(services): |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
791 |
if service not in SERVICES: |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
792 |
raise VMMError(_(u"Unknown service: '%s'") % service, |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
793 |
UNKNOWN_SERVICE) |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
794 |
kwargs[service] = True |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
795 |
acc = self._get_account(emailaddress) |
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
796 |
if not acc: |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
407
diff
changeset
|
797 |
raise VMMError(_(u"The account '%s' does not exist.") % |
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
407
diff
changeset
|
798 |
acc.address, NO_SUCH_ACCOUNT) |
444
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
799 |
serviceset = ServiceSet(self._dbh, **kwargs) |
95275b61ff8a
VMM/account: Integrated class ServiceSet in class Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
441
diff
changeset
|
800 |
acc.update_serviceset(serviceset) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
801 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
802 |
def relocated_add(self, emailaddress, targetaddress): |
197
d2712e8c724e
VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
196
diff
changeset
|
803 |
"""Creates a new `Relocated` entry in the database. If there is |
d2712e8c724e
VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
196
diff
changeset
|
804 |
already a relocated user with the given *emailaddress*, only the |
d2712e8c724e
VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
196
diff
changeset
|
805 |
*targetaddress* for the relocated user will be updated.""" |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
806 |
relocated = self._get_relocated(emailaddress) |
375
4cbaf8d229f9
VMM/{,cli/}handler: Moved the 'address-in-use check' (introduced
Pascal Volk <neverseen@users.sourceforge.net>
parents:
373
diff
changeset
|
807 |
if not relocated: |
4cbaf8d229f9
VMM/{,cli/}handler: Moved the 'address-in-use check' (introduced
Pascal Volk <neverseen@users.sourceforge.net>
parents:
373
diff
changeset
|
808 |
self._is_other_address(relocated.address, TYPE_RELOCATED) |
373
1016a17684c1
VMM/handler: Handler.relocated_add() check if the target address'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
372
diff
changeset
|
809 |
destination = DestinationEmailAddress(targetaddress, self._dbh) |
1016a17684c1
VMM/handler: Handler.relocated_add() check if the target address'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
372
diff
changeset
|
810 |
relocated.set_destination(destination) |
1016a17684c1
VMM/handler: Handler.relocated_add() check if the target address'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
372
diff
changeset
|
811 |
if destination.gid and \ |
1016a17684c1
VMM/handler: Handler.relocated_add() check if the target address'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
372
diff
changeset
|
812 |
not self._chk_other_address_types(destination, TYPE_RELOCATED): |
1016a17684c1
VMM/handler: Handler.relocated_add() check if the target address'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
372
diff
changeset
|
813 |
self._warnings.append(_(u"The destination account/alias '%s' " |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
407
diff
changeset
|
814 |
u"does not exist.") % destination) |
80
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
78
diff
changeset
|
815 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
816 |
def relocated_info(self, emailaddress): |
197
d2712e8c724e
VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
196
diff
changeset
|
817 |
"""Returns the target address of the relocated user with the given |
d2712e8c724e
VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
196
diff
changeset
|
818 |
*emailaddress*.""" |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
819 |
relocated = self._get_relocated(emailaddress) |
283
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
820 |
if relocated: |
251
0963ad2f5fe2
VMM/Handler: Implemented Handler._chk_other_address_types().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
244
diff
changeset
|
821 |
return relocated.get_info() |
283
ea6d052de24a
VMM/Handler: code cleanups in the user/alias/relocated info methods.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
282
diff
changeset
|
822 |
if not self._is_other_address(relocated.address, TYPE_RELOCATED): |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
407
diff
changeset
|
823 |
raise VMMError(_(u"The relocated user '%s' does not exist.") % |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
310
diff
changeset
|
824 |
relocated.address, NO_SUCH_RELOCATED) |
80
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
78
diff
changeset
|
825 |
|
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
826 |
def relocated_delete(self, emailaddress): |
197
d2712e8c724e
VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
196
diff
changeset
|
827 |
"""Deletes the relocated user with the given *emailaddress* from |
d2712e8c724e
VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
196
diff
changeset
|
828 |
the database.""" |
319
f4956b4ceba1
VMM//{,cli/}Handler: PEP-8-ified the Handler classes:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
318
diff
changeset
|
829 |
relocated = self._get_relocated(emailaddress) |
80
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
78
diff
changeset
|
830 |
relocated.delete() |
5dedc673524e
* 'create_tables.pgsql'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
78
diff
changeset
|
831 |
|
277
e50ffc0b8468
VMM{,/cli}/Handler: adjusted user* methods to the changes in Account.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
272
diff
changeset
|
832 |
del _ |