* 'install.sh'
- Also install docs
* 'VirtualMailManager/Account.py'
* 'VirtualMailManager/Alias.py'
* 'VirtualMailManager/Config.py'
* 'VirtualMailManager/Domain.py'
* 'VirtualMailManager/Exceptions.py'
* 'VirtualMailManager/VirtualMailManager.py'
* 'setup.py'
* 'vmm'
- Included global version number.
* 'VirtualMailManager/constants/VERSION.py'
- Added to repository.
#!/usr/bin/env python# -*- coding: UTF-8 -*-# opyright 2007-2008 VEB IT# See COPYING for distribution information.# $Id$"""Virtual Mail Manager's Account class to manage e-mail accounts."""fromconstants.VERSIONimportVERSION__author__='Pascal Volk <p.volk@veb-it.de>'__version__=VERSION__revision__='rev '+'$Rev$'.split()[1]__date__='$Date$'.split()[1]fromExceptionsimportVMMAccountExceptionfromDomainimportDomainimportconstants.ERRORasERRclassAccount:"""Class to manage e-mail accounts."""def__init__(self,dbh,basedir,address,password=None):self._dbh=dbhself._base=basedirself._base=Noneself._addr=addressself._localpart=Noneself._name=Noneself._uid=0self._gid=0self._passwd=passwordself._home=Noneself._setAddr(address)self._exists()ifself._isAlias():raiseVMMAccountException(('There is already an alias with address »%s«'%address,ERR.ALIAS_EXISTS))def_exists(self):dbc=self._dbh.cursor()dbc.execute("SELECT uid FROM users WHERE gid=%s AND local_part=%s",self._gid,self._localpart)uid=dbc.fetchone()dbc.close()ifuidisnotNone:self._uid=uid[0]returnTrueelse:returnFalsedef_isAlias(self):dbc=self._dbh.cursor()dbc.execute("SELECT id FROM alias WHERE gid=%s AND address=%s",self._gid,self._localpart)aid=dbc.fetchone()dbc.close()ifaidisnotNone:returnTrueelse:returnFalsedef_setAddr(self,address):self._localpart,d=address.split('@')dom=Domain(self._dbh,d,self._base)self._gid=dom.getID()self._base=dom.getDir()ifself._gid==0:raiseVMMAccountException(("Domain »%s« doesn't exist."%d,ERR.NO_SUCH_DOMAIN))def_setID(self):dbc=self._dbh.cursor()dbc.execute("SELECT nextval('users_uid')")self._uid=dbc.fetchone()[0]dbc.close()def_prepare(self):self._setID()self._home="%i"%self._uiddef_switchState(self,state):ifnotisinstance(state,bool):returnFalseifself._uid<1:raiseVMMAccountException(("Account doesn't exists",ERR.NO_SUCH_ACCOUNT))dbc=self._dbh.cursor()dbc.execute("""UPDATE users SET disabled=%s WHERE local_part=%s\ AND gid=%s""",state,self._localpart,self._gid)ifdbc.rowcount>0:self._dbh.commit()dbc.close()defgetUID(self):returnself._uiddefgetGID(self):returnself._giddefgetDir(self,directory):ifdirectory=='domain':return'%s'%self._baseelifdirectory=='home':return'%s/%i'%(self._base,self._uid)defenable(self):self._switchState(False)defdisable(self):self._switchState(True)defsave(self,mail):ifself._uid<1:self._prepare()dbc=self._dbh.cursor()dbc.execute("""INSERT INTO users (local_part, passwd, uid, gid,\ home, mail) VALUES (%s, %s, %s, %s, %s, %s)""",self._localpart,self._passwd,self._uid,self._gid,self._home,mail)self._dbh.commit()dbc.close()else:raiseVMMAccountException(('Account already exists.',ERR.ACCOUNT_EXISTS))defmodify(self,what,value):ifself._uid==0:raiseVMMAccountException(("Account doesn't exists",ERR.NO_SUCH_ACCOUNT))ifwhatnotin['name','password']:returnFalsedbc=self._dbh.cursor()ifwhat=='password':dbc.execute("UPDATE users SET passwd=%s WHERE local_part=%s AND\ gid=%s",value,self._localpart,self._gid)else:dbc.execute("UPDATE users SET name=%s WHERE local_part=%s AND\ gid=%s",value,self._localpart,self._gid)ifdbc.rowcount>0:self._dbh.commit()dbc.close()defgetInfo(self):dbc=self._dbh.cursor()dbc.execute("SELECT name, uid, gid, home, mail, disabled FROM users\ WHERE local_part=%s AND gid=%s",self._localpart,self._gid)info=dbc.fetchone()dbc.close()ifinfoisNone:raiseVMMAccountException(("Account doesn't exists",ERR.NO_SUCH_ACCOUNT))else:keys=['name','uid','gid','home','mail','disabled']info=dict(zip(keys,info))ifbool(info['disabled']):info['disabled']='Yes'else:info['disabled']='No'info['address']=self._addrinfo['home']='%s/%s'%(self._base,info['home'])returninfodefdelete(self):ifself._uid>0:dbc=self._dbh.cursor()dbc.execute("DELETE FROM users WHERE gid=%s AND local_part=%s",self._gid,self._localpart)ifdbc.rowcount>0:self._dbh.commit()dbc.close()else:raiseVMMAccountException(("Account doesn't exists",ERR.NO_SUCH_ACCOUNT))