vmm.cfg: dealt with the most overdue section/option renaming.
Added new options. Details:
old new
------------------------------------------------------------
domdir.mode -> domain.directory_mode
domdir.delete -> domain.delete_directory
domdir.base -> misc.base_dir
domdir -> _section domdir deleted_
maildir.mode -> account.directory_mode
maildir.diskusage -> account.disk_usage
maildir.delete -> account.delete_directory
misc.forcedel -> domain.force_del
misc.passwdscheme -> misc.password_scheme
misc.dovecotvers -> misc.dovecot_vers
services.smtp -> account.smtp
services.pop3 -> account.pop3
services.imap -> account.imap
services.sieve -> account.sieve
services -> _section services deleted_
_NEW_.random_password -> account.random_password
_NEW_.password_len -> account.password_len
_NEW_.auto_postmaster -> domain.auto_postmaster
# -*- coding: UTF-8 -*-
# Copyright (c) 2008 - 2010, Pascal Volk
# See COPYING for distribution information.
"""Virtual Mail Manager's Relocated class to manage relocated users."""
from __main__ import ERR
from Exceptions import VMMRelocatedException as VMMRE
from Domain import Domain
from EmailAddress import EmailAddress
import VirtualMailManager as VMM
class Relocated(object):
"""Class to manage e-mail addresses of relocated users."""
__slots__ = ('_addr', '_dest', '_gid', '_isNew', '_dbh')
def __init__(self, dbh, address, destination=None):
if isinstance(address, EmailAddress):
self._addr = address
else:
raise TypeError("Argument 'address' is not an EmailAddress")
if destination is None:
self._dest = None
elif isinstance(destination, EmailAddress):
self._dest = destination
else:
raise TypeError("Argument 'destination' is not an EmailAddress")
if address == destination:
raise VMMRE(_(u"Address and destination are identical."),
ERR.RELOCATED_ADDR_DEST_IDENTICAL)
self._dbh = dbh
self._gid = 0
self._isNew = False
self._setAddr()
self._exists()
if self._isNew and VMM.VirtualMailManager.accountExists(self._dbh,
self._addr):
raise VMMRE(_(u"There is already an account with address “%s”.") %\
self._addr, ERR.ACCOUNT_EXISTS)
if self._isNew and VMM.VirtualMailManager.aliasExists(self._dbh,
self._addr):
raise VMMRE(
_(u"There is already an alias with the address “%s”.") %\
self._addr, ERR.ALIAS_EXISTS)
def _exists(self):
dbc = self._dbh.cursor()
dbc.execute("SELECT gid FROM relocated WHERE gid = %s AND address = %s",
self._gid, self._addr._localpart)
gid = dbc.fetchone()
dbc.close()
if gid is None:
self._isNew = True
def _setAddr(self):
dom = Domain(self._dbh, self._addr._domainname)
self._gid = dom.getID()
if self._gid == 0:
raise VMMRE(_(u"The domain “%s” doesn't exist.") %\
self._addr._domainname, ERR.NO_SUCH_DOMAIN)
def save(self):
if self._dest is None:
raise VMMRE(
_(u"No destination address specified for relocated user."),
ERR.RELOCATED_MISSING_DEST)
if self._isNew:
dbc = self._dbh.cursor()
dbc.execute("INSERT INTO relocated VALUES (%s, %s, %s)",
self._gid, self._addr._localpart, str(self._dest))
self._dbh.commit()
dbc.close()
else:
raise VMMRE(
_(u"The relocated user “%s” already exists.") % self._addr,
ERR.RELOCATED_EXISTS)
def getInfo(self):
dbc = self._dbh.cursor()
dbc.execute('SELECT destination FROM relocated WHERE gid=%s\
AND address=%s',
self._gid, self._addr._localpart)
destination = dbc.fetchone()
dbc.close()
if destination is not None:
return destination[0]
else:
raise VMMRE(
_(u"The relocated user “%s” doesn't exist.") % self._addr,
ERR.NO_SUCH_RELOCATED)
def delete(self):
dbc = self._dbh.cursor()
dbc.execute("DELETE FROM relocated WHERE gid = %s AND address = %s",
self._gid, self._addr._localpart)
rowcount = dbc.rowcount
dbc.close()
if rowcount > 0:
self._dbh.commit()
else:
raise VMMRE(
_(u"The relocated user “%s” doesn't exist.") % self._addr,
ERR.NO_SUCH_RELOCATED)