Fix transport_maps function for non-existent domains
The postfix_transport_maps function had a bug causing
2012-04-15 17:40:22 CEST LOG: statement: SELECT transport FROM postfix_transport_map('logcheck', 'domine.madduck.net');
2012-04-15 17:40:22 CEST ERROR: query returned no rows
when the domain was not in the database. This would make did be NULL and make
the query fail.
This patch moves the tid query until after a check for did. If the latter is
NULL, the function RETURNs (rather than fails).
# -*- coding: UTF-8 -*-# Copyright (c) 2010 - 2011, Pascal Volk# See COPYING for distribution information.""" VirtualMailManager.cli.handler ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A derived Handler class with a few changes/additions for cli use."""importosfromVirtualMailManager.errorsimportVMMErrorfromVirtualMailManager.handlerimportHandler,TYPE_ACCOUNTfromVirtualMailManager.cliimportread_passfromVirtualMailManager.cli.configimportCliConfigasCfgfromVirtualMailManager.constantsimportACCOUNT_EXISTS,INVALID_SECTION, \NO_SUCH_ACCOUNTfromVirtualMailManager.passwordimportrandompw_=lambdamsg:msgclassCliHandler(Handler):"""This class uses a `CliConfig` for configuration stuff, instead of the non-interactive `Config` class. It provides the additional methods cfgSet() and configure(). Additionally it uses `VirtualMailManager.cli.read_pass()` for for the interactive password dialog. """__slots__=()# nothing additional, also no __dict__/__weakref__def__init__(self):"""Creates a new CliHandler instance. Throws a NotRootError if your uid is greater 0. """# Overwrite the parent CTor partly, we use the CliConfig class# and add some command line checks.skip_some_checks=os.sys.argv[1]in('cf','configure','h','help','v','version')super(CliHandler,self).__init__(skip_some_checks)self._cfg=Cfg(self._cfg_fname)self._cfg.load()defcfg_set(self,option,value):"""Set a new value for the given option."""returnself._cfg.set(option,value)defconfigure(self,section=None):"""Starts the interactive configuration. Configures in interactive mode options in the given ``section``. If no section is given (default) all options from all sections will be prompted. """ifsectionisNone:self._cfg.configure(self._cfg.sections())elifself._cfg.has_section(section):self._cfg.configure([section])else:raiseVMMError(_(u"Invalid section: '%s'")%section,INVALID_SECTION)defuser_add(self,emailaddress,password=None):"""Override the parent user_add() - add the interactive password dialog. Returns the generated password, if account.random_password == True. """acc=self._get_account(emailaddress)ifacc:raiseVMMError(_(u"The account '%s' already exists.")%acc.address,ACCOUNT_EXISTS)self._is_other_address(acc.address,TYPE_ACCOUNT)rand_pass=self._cfg.dget('account.random_password')ifpasswordisNone:password=(read_pass,randompw)[rand_pass]()acc.set_password(password)acc.save()self._make_account_dirs(acc)return(None,password)[rand_pass]defuser_password(self,emailaddress,password=None):"""Override the parent user_password() - add the interactive password dialog."""acc=self._get_account(emailaddress)ifnotacc:raiseVMMError(_(u"The account '%s' does not exist.")%acc.address,NO_SUCH_ACCOUNT)ifnotisinstance(password,basestring)ornotpassword:password=read_pass()acc.modify('password',password)del_