vmm-0.6.2/ 0000755 0001750 0001750 00000000000 12273260771 010517 5 ustar pvo pvo vmm-0.6.2/COPYING 0000644 0001750 0001750 00000002745 12273260771 011562 0 ustar pvo pvo Copyright (c) 2007 - 2014, Pascal Volk
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the names of the authors nor the names of its contributors may be
used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
vmm-0.6.2/setup.py 0000644 0001750 0001750 00000004774 12273260771 012245 0 ustar pvo pvo #!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright 2007 - 2014, Pascal Volk
# See COPYING for distribution information.
import os
from distutils.core import setup
from distutils.dist import DistributionMetadata
VERSION = '0.6.2'
descr = 'Tool to manage mail domains/accounts/aliases for Dovecot and Postfix'
long_description = """
vmm, a virtual mail manager, is a command line tool for
administrators/postmasters to manage (alias-)domains, accounts,
aliases and relocated users.
It is designed for Dovecot and Postfix with a PostgreSQL backend.
"""
packages = [
'VirtualMailManager',
'VirtualMailManager.cli',
'VirtualMailManager.ext',
'VirtualMailManager.pycompat',
]
# http://pypi.python.org/pypi?%3Aaction=list_classifiers
classifiers = ['Development Status :: 5 - Production/Stable',
'Environment :: Console',
'Intended Audience :: System Administrators',
'License :: OSI Approved :: BSD License',
'Natural Language :: Dutch',
'Natural Language :: English',
'Natural Language :: Finnish',
'Natural Language :: French',
'Natural Language :: German',
'Natural Language :: Vietnamese',
'Operating System :: POSIX',
'Operating System :: POSIX :: BSD',
'Operating System :: POSIX :: Linux',
'Operating System :: POSIX :: Other',
'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Topic :: Communications :: Email',
'Topic :: System :: Systems Administration',
'Topic :: Utilities']
# sucessfuly tested on:
platforms = ['freebsd7', 'linux2', 'openbsd4']
# remove existing MANIFEST
if os.path.exists('MANIFEST'):
os.remove('MANIFEST')
setup_args = {'name': 'VirtualMailManager',
'version': VERSION,
'description': descr,
'long_description': long_description,
'packages': packages,
'author': 'Pascal Volk',
'author_email': 'user+vmm@localhost.localdomain.org',
'license': 'BSD License',
'url': 'http://vmm.localdomain.org/',
'download_url':'http://sf.net/projects/vmm/files/',
'platforms': platforms,
'classifiers': classifiers}
if 'requires' in DistributionMetadata._METHOD_BASENAMES:
setup_args['requires'] = ['psycopg2 (>=2.0)', 'pyPgSQL (>=2.5.1)']
setup(**setup_args)
vmm-0.6.2/vmm.cfg 0000644 0001750 0001750 00000012002 12273260771 011772 0 ustar pvo pvo # This is the vmm (a virtual mail manager) configuration file.
# default location: /usr/local/etc/vmm.cfg
#
#
# Database settings
#
[database]
; The Python PostgreSQL database adapter module to be used (String)
; Supported modules are:
; * psycopg2
; * pyPgSQL
module = psycopg2
; Hostname or IP address of the database server (String)
host = localhost
; The TCP port, on which the database server is listening for connections (Int)
port = 5432
; SSL mode for the database connection (String)
; Possible values are:
; * disabled
; * allow
; * prefer (default)
; * require
; * verify-ca (PostgreSQL >= 8.4)
; * verify-full (PostgreSQL >= 8.4)
sslmode = prefer
; Database user name (String)
user = vmm
; Database password (String)
pass = dbpassword
; Database name (String)
name = mailsys
#
# mailbox settings
#
[mailbox]
; The mailbox format to be used for user's mailboxes. (String)
; Depending on the used Dovecot version there are up to 3 supported formats:
; * maildir - since Dovecot v1.0.0
; * mdbox - since Dovecot v2.0.beta5
; * sdbox - since Dovecot v2.0.rc3
format = maildir
; A colon separated list of mailbox names, that should be created (String)
; e.g.: folders = Drafts:Sent:Templates:Trash:Lists.Dovecot:Lists.Postfix
folders = Drafts:Sent:Templates:Trash
; Name of the mailbox root directory in a user's home. (String)
; Usually used names (format: name):
; * maildir: Maildir
; * mdbox: mdbox
; * sdbox: sdbox
root = Maildir
; Set to true if the mailboxes from the folders option should be listed in
; the subscriptions file. (Boolean)
subscribe = true
#
# Domain settings
#
[domain]
; Should vmm create the postmaster account when a new domain is created?
; (Boolean)
auto_postmaster = true
; Delete domain directory recursive when deleting a domain? (Boolean)
delete_directory = false
; Permissions for domain directories (Int)
; octal 0770 -> decimal 504
directory_mode = 504
; Force deletion of accounts and aliases when deleting a domain (Boolean)
force_deletion = false
;
; The service settings will be evaluated and applied when a domain is
; created. The service settings of the domain will be applied when you
; create a new account.
; Use the subcommand domainservices to modify a domain's service settings.
; Or userservices in order to update the service setting of an account.
; Allow smtp by default? (Boolean)
smtp = true
; Allow pop3 by default? (Boolean)
pop3 = true
; Allow imap by default? (Boolean)
imap = true
; Allow managesieve by default? (Boolean)
sieve = true
;
; The quota_* settings will be evaluated and applied when a domain is
; created. The domain's quota_* settings will be applied when an account
; is added to a domain.
; Use the subcommand domainquota to modify a domain's quota limits.
; Or userquota in order to update an account's quota limits.
; Quota limit in bytes. 0 means unlimited (String)
; The value can have one of the suffixes:
; * b: bytes
; * k: kilobytes
; * M: megabytes
; * G: gigabytes
; 1024 is the same as 1024b or 1k
quota_bytes = 0
; Quota limit in number of messages. 0 means unlimited (Int)
quota_messages = 0
;
; The transport setting will be evaluated and applied when a domain is
; created. The domain's transport setting will be applied when an account
; is added to a domain.
; Use the subcommand domaintransport to modify the transport of a domain.
; Or usertransport in order to update an account's transport setting.
;
; With Dovecot >= v2.0.0 it's strongly recommended that you use Dovecot's
; lmtp instead of the dovecot-lda.
;transport = lmtp:unix:private/dovecot-lmtp
; default transport for domains and accounts (String)
transport = dovecot:
#
# Account settings
#
[account]
; Delete the user's home directory recursive when deleting an account? (Boolean)
delete_directory = false
; Permissions for the user's home directory and mail directories (Int)
; octal 0700 -> decimal 448
directory_mode = 448
; Display disk usage in account info by default? (Boolean)
disk_usage = false
; Should vmm generate a random password when no password was given for the
; useradd subcommand? (Boolean)
random_password = false
; How many characters to include in the generated passwords? (Int)
password_length = 8
#
# external binaries
#
[bin]
; location of dovecotpw (Dovecot v1) or doveadm (Dovecot v2) (String)
dovecotpw = /usr/sbin/dovecotpw
; location of disk usage (String)
du = /usr/bin/du
; location of postconf (String)
postconf = /usr/sbin/postconf
#
# misc settings
#
[misc]
; The base directory for all domains/accounts (String)
base_directory = /srv/mail
; Number of encryption rounds for the password_scheme BLF-CRYPT (Int)
crypt_blowfish_rounds = 5
; Number of encryption rounds for the password_scheme SHA256-CRYPT (Int)
crypt_sha256_rounds = 5000
; Number of encryption rounds for the password_scheme SHA512-CRYPT (Int)
crypt_sha512_rounds = 5000
; the version number from `dovecot --version` (String)
; e.g. 1.2.17, 2.0.21, 2.1.9 or 2.2.beta1
dovecot_version = 2.1.9
; Password scheme to use (see also: ´vmm listpwschemes`) (String)
password_scheme = CRAM-MD5
vmm-0.6.2/INSTALL 0000644 0001750 0001750 00000017246 12273260771 011562 0 ustar pvo pvo Installation Prerequisites
You should already have installed and configured Postfix, Dovecot and
PostgreSQL.
The Virtual Mail Manager depends on:
- Python (>= 2.4.0)
- Psycopg 2¹ or pyPgSQL²
If you are using Python <= 2.5.0:
- if you want to store your users' passwords as PLAIN-MD4 digest in
the database, vmm will try to use Crypto.Hash.MD4 from PyCrypto³.
- if you are using Dovecot >= v1.1.0 and you want to store your users'
passwords as SHA256 or SSHA256 hashes, vmm will try to use
Crypto.Hash.SHA256 from PyCrypto². For SHA256/SSHA256 you should have
at least use PyCrypto in version 2.1.0alpha1.
When the Crypto.Hash module couldn't be imported, vmm will use
dovecotpw/doveadm, if the misc.password_scheme setting in the vmm.cfg
is set to PLAIN-MD4, SHA256 or SSHA256
[1] Psycopg: (Debian: python-psycopg2)
[2] pyPgSQL: (Debian: python-pgsql)
[3] PyCrypto: (Debian: python-crypto)
Create additionally a user and groups for improved security
We will create the system user `doveauth'. This user is used in the
authentication process. On a Debian GNU/Linux System use this command:
adduser --system --home /nonexistent --no-create-home --group \
--disabled-login --gecos "Dovecot IMAP/POP3 authentication user" \
doveauth
This will create the doveauth user and group.
For Dovecot >= 2.0 we create also the group `dovemail'. Dovecot will assign
this group to all Dovecot processes.
On a Debian GNU/Linux bases system run:
addgroup --system dovemail
Configuring PostgreSQL
(for more details see:
http://vmm.localdomain.org/installation/postgresql_configuration.html)
* /etc/postgresql/8.4/main/pg_hba.conf
[ if you prefer to connect via TCP/IP ]
# IPv4 local connections:
host mailsys +mailsys 127.0.0.1/32 md5
[ if you want to connect through a local Unix-domain socket ]
# "local" is for Unix domain socket connections only
local mailsys +mailsys md5
# reload configuration
/etc/init.d/postgresql-8.4 force-reload
* Create a database superuser if necessary:
# as root run: su - postgres
# if you have sudo privileges run: sudo su - postgres
# create your superuser, which will be able to create users and databases
createuser -s -d -r -E -e -P $USERNAME
* As superuser create the database and db users for vmm, Postfix and Dovecot
connecting to PostgreSQL:
psql template1
# create users, group and the database
CREATE ROLE vmm LOGIN ENCRYPTED PASSWORD 'DB PASSWORD for vmm';
CREATE ROLE dovecot LOGIN ENCRYPTED password 'DB PASSWORD for Dovecot';
CREATE ROLE postfix LOGIN ENCRYPTED password 'DB PASSWORD for Postfix';
CREATE ROLE mailsys WITH USER postfix, dovecot, vmm;
CREATE DATABASE mailsys WITH OWNER vmm ENCODING 'UTF8';
\q
# connect to the new database
psql mailsys vmm -W -h 127.0.0.1
# either import the database structure for Dovecot v1.0.x/v1.1.x
\i vmm-y.x.z/pgsql/create_tables.pgsql
# or import the database structure for Dovecot v1.2.x/v2.x
\i vmm-x.y.z/pgsql/create_tables-dovecot-1.2.x.pgsql
# leave psql
\q
# set permissions for your Dovecot and Postfix users
# see python set-permissions.py -h for details
python vmm-x.y.z/pgsql/set-permissions.py -a -H 127.0.0.1 -U vmm
Create directory for your mails
mkdir /srv/mail
cd /srv/mail/
mkdir 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z
chmod 771 /srv/mail
chmod 751 /srv/mail/*
For Dovecot >= 2.0 read the file Configure.Dovecot_2
Configuring Dovecot v1.x
* /etc/dovecot/dovecot.conf
# all your other settings
#disable_plaintext_auth = no
mail_location = maildir:~/Maildir
first_valid_uid = 70000
first_valid_gid = 70000
protocol lda {
postmaster_address = postmaster@YOUR-DOMAIN.TLD
}
auth default {
mechanisms = cram-md5 login plain
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
userdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
user = doveauth
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
}
client {
path = /var/spool/postfix/private/dovecot-auth
mode = 0660
user = postfix
group = postfix
}
}
}
* /etc/dovecot/dovecot-sql.conf
driver = pgsql
connect = host=localhost dbname=mailsys user=dovecot password=$Dovecot_PASS
default_pass_scheme = CRAM-MD5
password_query = SELECT userid AS "user", password FROM dovecotpassword('%Ln', '%Ld') WHERE %Ls
user_query = SELECT home, uid, gid, mail FROM dovecotuser('%Ln', '%Ld')
Provide a root SETUID copy of Dovecot's deliver agent for Postfix
/!\ Only required with Dovecot v.1.x.
With Dovecot >= v2.0 use Dovecot's lmtp!
mkdir -p /usr/local/lib/dovecot
chmod 700 /usr/local/lib/dovecot
chown nobody /usr/local/lib/dovecot
cp /usr/lib/dovecot/deliver /usr/local/lib/dovecot/
chown root:`id -g nobody` /usr/local/lib/dovecot/deliver
chmod u+s,o-rwx /usr/local/lib/dovecot/deliver
Start or restart Dovecot
Configuring Postfix's master.cf
/!\ Only required with Dovecot v.1.x.
# Add Dovecot's deliver agent
dovecot unix - n n - - pipe
flags=DORhu user=nobody argv=/usr/local/lib/dovecot/deliver -f ${sender}
-d ${user}@${nexthop} -n -m ${extension}
Configuring Postfix's main.cf
sql = pgsql:${config_directory}/
proxysql = proxy:${sql}
# relocated users from the database
#relocated_maps = ${proxysql}pgsql-relocated_maps.cf
# transport settings from our database
transport_maps = ${proxysql}pgsql-transport_maps.cf
# virtual domains
virtual_mailbox_domains = ${proxysql}pgsql-virtual_mailbox_domains.cf
virtual_alias_maps = ${proxysql}pgsql-virtual_alias_maps.cf
virtual_minimum_uid = 70000
virtual_uid_maps = ${sql}pgsql-virtual_uid_maps.cf
virtual_gid_maps = ${sql}pgsql-virtual_gid_maps.cf
virtual_mailbox_base = /
virtual_mailbox_maps = ${proxysql}pgsql-virtual_mailbox_maps.cf
# dovecot LDA (only recommended with Dovecot v1.x)
#dovecot_destination_recipient_limit = 1
#virtual_transport = dovecot:
# dovecot lmtp
virtual_transport = lmtp:unix:private/dovecot-lmtp
# dovecot SASL
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/dovecot-auth
smtpd_sasl_auth_enable = yes
# Keep smtpd_sasl_local_domain identical to Dovecot's auth_default_realm:
# empty. Both are empty by default. Let it commented out.
# Read more at: http://wiki.dovecot.org/Authentication/Mechanisms/DigestMD5
#smtpd_sasl_local_domain =
smtpd_sasl_security_options = noplaintext, noanonymous
#smtpd_sasl_security_options = noanonymous
#broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
Installing the Virtual Mail Manager and configure the rest
Installing from Mercurial or vmm-x.y.z.tar.gz
after cloning from the hg repo or extracting the archive change into the
new directory and type:
./install.sh
edit all the pgsql-*.cf files in /etc/postfix
reload postfix
# configure the Virtual Mail Manager
# vmm.cfg(5) - configuration file for vmm
#
# For Dovecot v1.x use 'dovecot:' as domain.transport
# When using Dovecot v2.x use 'lmtp:unix:private/dovecot-lmtp' as
# domain.transport
vmm configure
# for help type
# vmm(1) - command line tool to manage email domains/accounts/aliases
vmm help
vmm-0.6.2/ChangeLog 0000644 0001750 0001750 00000427462 12273260771 012310 0 ustar pvo pvo === 0.6.2 ===
2014-02-01 Pascal Volk
* UPGRADE:
UPGRADE: Added a note about upgrading from 0.6.1.
[19184d1265e5] [tip]
* doc/web/source/conf.py, doc/web/source/download.rst,
doc/web/source/features.rst,
doc/web/source/installation/install_vmm.rst,
doc/web/source/installation/postgresql_configuration.rst,
doc/web/source/pgsql_set_permissionspermissions.rst,
doc/web/source/release_history.rst,
doc/web/source/substitutions.rst,
doc/web/source/upgrade/0.5-0.6.rst:
doc/web: Updated documentation for vmm-0.6.2.
[6c369b680ab0]
* update_config.py:
update_config: Updated to work with version 0.6.1.
[9149e0249c25]
2014-01-29 Pascal Volk
* VirtualMailManager/domain.py:
VMM/domain: RE_DOMAIN: Check Punycode TLDs more precise.
[ad15e89a93ec]
2014-01-27 Pascal Volk
* COPYING, VirtualMailManager/__init__.py,
VirtualMailManager/account.py, VirtualMailManager/alias.py,
VirtualMailManager/aliasdomain.py, VirtualMailManager/catchall.py,
VirtualMailManager/cli/__init__.py,
VirtualMailManager/cli/clihelp.py, VirtualMailManager/cli/config.py,
VirtualMailManager/cli/handler.py, VirtualMailManager/cli/main.py,
VirtualMailManager/cli/subcommands.py, VirtualMailManager/common.py,
VirtualMailManager/config.py, VirtualMailManager/constants.py,
VirtualMailManager/domain.py, VirtualMailManager/emailaddress.py,
VirtualMailManager/errors.py, VirtualMailManager/ext/__init__.py,
VirtualMailManager/ext/postconf.py, VirtualMailManager/handler.py,
VirtualMailManager/mailbox.py, VirtualMailManager/maillocation.py,
VirtualMailManager/network.py, VirtualMailManager/password.py,
VirtualMailManager/pycompat/__init__.py,
VirtualMailManager/pycompat/hashlib.py,
VirtualMailManager/quotalimit.py, VirtualMailManager/relocated.py,
VirtualMailManager/serviceset.py, VirtualMailManager/transport.py,
pgsql/set-permissions.py, setup.py, update_config.py, vmm:
Updated copyright notices to include the year 2014.
[58815c004a61]
* VirtualMailManager/handler.py:
VMM/handler: Improved domaininfo subcommand.
Check all labels for ASCII-compatible encoding, not only the first
one. If something is in ACE format, convert it to IDNA.
[01db2457bbed]
2014-01-26 Pascal Volk
* README, VirtualMailManager/domain.py:
VMM/domain: Accept also ccTLDs and 'new' gTLDs.
[110491a871a7]
2013-08-27 Pascal Volk
* doc/web/source/_templates/layout.html:
doc/web: Removed layout.html template.
[4c8e15c2f01b]
2013-06-08 Pascal Volk
* doc/web/source/ext_references.rst,
doc/web/source/howto/manage_domains.rst,
doc/web/source/installation/dovecot_configuration.rst,
doc/web/source/installation/postfix_configuration.rst:
doc/web: Added a note about using Dovecot's LMTP with Postfix. This
solves issue #1.
[61aaa7a98ec0]
2013-01-05 Pascal Volk
* COPYING, VirtualMailManager/__init__.py,
VirtualMailManager/account.py, VirtualMailManager/alias.py,
VirtualMailManager/aliasdomain.py,
VirtualMailManager/cli/__init__.py,
VirtualMailManager/cli/clihelp.py, VirtualMailManager/cli/config.py,
VirtualMailManager/cli/handler.py, VirtualMailManager/cli/main.py,
VirtualMailManager/cli/subcommands.py, VirtualMailManager/common.py,
VirtualMailManager/config.py, VirtualMailManager/constants.py,
VirtualMailManager/domain.py, VirtualMailManager/emailaddress.py,
VirtualMailManager/errors.py, VirtualMailManager/ext/__init__.py,
VirtualMailManager/ext/postconf.py, VirtualMailManager/handler.py,
VirtualMailManager/mailbox.py, VirtualMailManager/maillocation.py,
VirtualMailManager/network.py, VirtualMailManager/password.py,
VirtualMailManager/pycompat/__init__.py,
VirtualMailManager/pycompat/hashlib.py,
VirtualMailManager/quotalimit.py, VirtualMailManager/relocated.py,
VirtualMailManager/serviceset.py, VirtualMailManager/transport.py,
setup.py, update_config.py, vmm:
Updated copyright notices to include the year 2013.
[d24f094d1cb5]
2012-12-09 Pascal Volk
* VirtualMailManager/account.py:
VMM/account: Fixed a typo in Account.delete().
Due to a wrong placed comma `userdelete … force' ended in a
TypeError.
[29295afafa91]
2012-11-21 Pascal Volk
* po/fi.po:
po: Updated Finnish translation (translated by Jorma Karvonen).
[86c2ed36aba8]
2012-11-03 Pascal Volk
* doc/web/source/installation/prerequisites.rst:
doc/web: Updated OpenBSD's package names.
[54172669bbae]
2012-10-31 Pascal Volk
* doc/web/source/installation/postfix_configuration.rst:
doc/web: Fixed a typo.
[6f1aba75b693]
2012-10-30 Pascal Volk
* VirtualMailManager/password.py:
VMM/password: Added scheme SCRAM-SHA-1.
[8ea32fbfc9df]
2012-10-28 Pascal Volk
* Configure.Dovecot_2, doc/web/source/_static/local.conf,
doc/web/source/installation/dovecot_configuration.rst:
Documentation: Fixed dictionary quota URI.
[152ea3e3e955]
* install.sh:
install.sh: Don't fail if $SYSCONFDIR doesn't exist.
[9b4d0e2c97d5]
2012-10-24 Pascal Volk
* doc/web/source/ext_references.rst:
doc/web/ext_references: Fixed URL of pg_hba.conf.
[c4c687668b6d]
2012-10-19 Pascal Volk
* README, doc/web/source/download.rst:
doc/web: Added links to the Debian package and the git repos.
README: Added git-URL.
[8009e87c7a20]
2012-10-03 Pascal Volk
* .hgtags:
Added tag vmm-0.6.1 for changeset 682431c45b24
[6463832d690e]
* ChangeLog, NEWS, VirtualMailManager/constants.py, setup.py:
Released vmm-0.6.1
[682431c45b24] [vmm-0.6.1]
=== 0.6.1 ===
2012-10-03 Pascal Volk
* doc/web/source/conf.py, doc/web/source/download.rst,
doc/web/source/howto/manage_accounts.rst,
doc/web/source/installation/install_vmm.rst,
doc/web/source/installation/postgresql_configuration.rst,
doc/web/source/pgsql_set_permissionspermissions.rst,
doc/web/source/release_history.rst,
doc/web/source/substitutions.rst,
doc/web/source/upgrade/0.5-0.6.rst:
doc/web: Updated documentation for vmm-0.6.1.
[f151defe7078] [tip]
2012-10-02 martin f. krafft
* man/de/man1/vmm.1, man/man1/vmm.1:
Add list* commands to manpages
[ac27f89fad86]
2012-10-01 Pascal Volk
* UPGRADE:
UPGRADE: Added procedure for updating from v0.6.0.
[e1fc4a3075de]
2012-09-30 Pascal Volk
* update_config.py:
update_config: Updated to work with version 0.6.0.
Fixed some PEP8 related issues.
[d7101e496795]
2012-09-29 Pascal Volk
* doc/web/source/howto/general_subcommands.rst,
doc/web/source/howto/manage_alias_addresses.rst,
doc/web/source/howto/manage_catch-all_addresses.rst:
doc/web: Updated and extended documentation.
Updated description of subcommands aliasdelete and catchalldelete.
Added description of subcommands listaddresses, listaliases,
listrelocated and listusers.
[e60b8ed5fd35]
* VirtualMailManager/cli/clihelp.py:
VMM/cli/clihelp: Added missing help messages.
Added descriptions of subcommands listaddresses, listaliases,
listrelocated and listusers.
[d8b60e53334f]
2012-09-27 Pascal Volk
* po/nl.po:
po: Updated Dutch translation (translated by Erwin Poeze).
[ca882a1ff90b]
* VirtualMailManager/alias.py:
VMM/alias: Load destination addresses sorted.
This produces sorted output for the aliasinfo subcommand.
[4ec5c015b7aa]
* VirtualMailManager/alias.py, VirtualMailManager/catchall.py,
VirtualMailManager/cli/clihelp.py,
VirtualMailManager/cli/subcommands.py,
VirtualMailManager/handler.py, man/de/man1/vmm.1, man/man1/vmm.1:
VMM: {alias,catchall}delete: Accept multiple destinations.
[d8736bb80bdc]
2012-09-24 Pascal Volk
* po/nl.po:
po: Updated Dutch translation (translated by Erwin Poeze).
[9eecf0160c39]
2012-09-23 Pascal Volk
* VirtualMailManager/cli/main.py:
VMM/cli/main: Check if we have warnings before exiting.
If so, print them and exit afterwards.
[996bfcae49b0]
2012-09-16 Pascal Volk
* VirtualMailManager/domain.py:
VMM/domain: Enabled transport-validation.
Validate the transport also in Domain.set_transport() and
Domain.update_transport().
[5882bfdf83e8]
* VirtualMailManager/account.py, VirtualMailManager/common.py:
VMM: Moved transport-validation to common.
[1ec3497a6733]
2012-09-15 Pascal Volk
* VirtualMailManager/account.py:
VMM/account: Fixed account's transport check.
Make sure that 'virtual:' isn't used as transport when the mailbox-
format is set to mdbox or sdbox.
[7b3494f1a2ef]
2012-09-12 Pascal Volk
* po/nl.po:
po: Updated Dutch translation (translated by Erwin Poeze).
[924535664ecc]
2012-09-05 Pascal Volk
* VirtualMailManager/account.py, VirtualMailManager/catchall.py,
VirtualMailManager/cli/subcommands.py, VirtualMailManager/common.py,
VirtualMailManager/config.py, VirtualMailManager/domain.py,
VirtualMailManager/handler.py:
PEP8: Fixed all PEP8 related issues.
[8e9b0046bc8f]
2012-09-03 Pascal Volk
* po/vmm.pot:
po: Regenerated vmm.pot
[b6c4e77046b9]
* VirtualMailManager/cli/clihelp.py,
VirtualMailManager/cli/subcommands.py, VirtualMailManager/common.py:
Added a few comments for the Translation Project.
[56ec275911f2]
* VirtualMailManager/catchall.py, VirtualMailManager/cli/clihelp.py,
VirtualMailManager/cli/subcommands.py,
VirtualMailManager/ext/postconf.py:
VMM: Corrected/updated some msgids.
Unified some messages and corrected a few typos.
[0ed93eb8b364]
2012-09-02 Pascal Volk
* VirtualMailManager/cli/subcommands.py:
VMM/cli/subcommands: Corrected username's usage string.
username's name argument is optional.
[46454ff9d441]
* VirtualMailManager/cli/clihelp.py,
VirtualMailManager/cli/subcommands.py:
VMM/cli: Activated help subcommand.
Implemented Command.help_(), which reads the command's help message
from cli.clihelp.
[ab97727357a4]
* VirtualMailManager/handler.py:
VMM/handler: Fixed user{quota,services,transport} subcommands. The
subcommands user{quota,services,transport} actually failed with the
arguments ' domain'. This is part II of changeset
a75923ce2842
[b994444f7dee]
* doc/web/source/howto/manage_accounts.rst:
doc/web: Added missing userservices description. Fixed order of
subcommand listing.
[7fdc4b2d4640]
* man/man1/vmm.1:
man: Typo-fix.
[981f02b2d4c5]
* VirtualMailManager/cli/subcommands.py:
VMM/cli/subcommands: Corrected two usage strings. domainnote's and
usernote's note argument is optional.
[af88f01e5bfa]
2012-09-01 Pascal Volk
* VirtualMailManager/cli/subcommands.py, VirtualMailManager/common.py:
VMM: Decode localized numbers to the current encoding. That avoids
UnicodeDecodeErrors since locale.format(%d) may return localized
numbers, which contain NO-BREAK SPACE as the thousands separator.
[463b10c258d9]
2012-08-28 Pascal Volk
* VirtualMailManager/cli/subcommands.py:
VMM/cli/subcommands: Don't mark empty strings as translatable.
gettext('') returns the header entry with meta information, not the
empty string.
[0571f45501da]
* doc/web/source/upgrade/0.5-0.6.rst:
doc/web: Added description 'Upgrade to Dovecot ≧ v1.2.beta2'.
[82e722f35aab]
2012-08-27 Pascal Volk
* pgsql/dovecot_update_v1.2+.pgsql:
pgsql: Added dovecot_update_v1.2+.pgsql. Use this file when you are
upgrading your Dovecot installation to a version >= 1.2.beta2.
[bb23693e5fc9]
* VirtualMailManager/cli/subcommands.py:
VMM/cli/subcommands: Reverted accidentally committed help() code.
[c79fdce49908]
* VirtualMailManager/cli/subcommands.py, pgsql/create_tables.pgsql:
pgsql/create_tables.pgsql: Eliminated two unnecessary differences.
Yeah, cosmetic only.
[607aa5c2acc4]
* pgsql/create_tables.pgsql, pgsql/update_tables_0.5.x-0.6.pgsql:
pgsql: Don't select service_set.ssid in dovecotpassword()
unconditional. This may cause an empty result, which will make
logins impossible.
[86b967c0f1a1]
* VirtualMailManager/serviceset.py:
VMM/serviceset: Fixed a conditional ProgrammingError. Affects only
setups with Dovecot < v1.2.beta2. Actually the SQL query in method
ServiceSet._load_by_services wasn't updated.
Removed unnecessary code, which would have also produced a
ProgrammingError, if it would have been correct.
[cdbe200c0ecc]
2012-08-23 Pascal Volk
* VirtualMailManager/cli/subcommands.py:
VMM/cli/subcommands: Added 'missing' newline below domain notes.
This patch contains also a small code cleanup and PEP8-fix.
[3dc1764c23d2]
2012-08-19 Pascal Volk
* doc/web/source/howto/manage_accounts.rst:
doc/web: Added the transport filed to the usertransport example.
[ef384bc8fde6]
2012-08-12 Pascal Volk
* doc/web/source/howto.rst,
doc/web/source/howto/general_subcommands.rst,
doc/web/source/howto/manage_accounts.rst,
doc/web/source/howto/manage_alias_addresses.rst,
doc/web/source/howto/manage_alias_domains.rst, doc/web/source/howto
/manage_catch-all_addresses.rst,
doc/web/source/howto/manage_domains.rst,
doc/web/source/howto/manage_relocated_users.rst,
doc/web/source/index.rst,
doc/web/source/installation/install_vmm.rst:
doc/web: Added the 'Howto'. The reStructuredText version of vmm.1,
in multiple parts.
[2b165e90e225]
* man/de/man1/vmm.1, man/man1/vmm.1:
man/{de/}man1: A few more corrections.
[9d343514b832]
* man/de/man1/vmm.1, man/man1/vmm.1:
man/{de/}man1: Small corrections for domaininfo's description.
[60907fc875f7]
* man/de/man5/vmm.cfg.5, man/man5/vmm.cfg.5:
man/{de/}man5: s/Wiki/Homepage/g
[dcde0010cdf8]
2012-08-11 Pascal Volk
* man/de/man1/vmm.1, man/man1/vmm.1:
man/{de/}man1: s/Wiki/Homepage/g
[8767ec854084]
2012-08-08 martin f. krafft
* VirtualMailManager/common.py:
VMM/common: Improve search_address complexity Checking the
dictionary (a hash) for existence of a key is likely to be
O(log(n)), while checking a list is O(n). Therefore, to increase
performance, this patch changes the check accordingly.
[cd1200d06700]
2012-08-07 Pascal Volk
* doc/web/source/_static/vmm.cfg:
doc/web: Refreshed vmm.cfg
[ffd24974ed68]
* vmm.cfg:
vmm.cfg: Updated/improved comments.
[f9a2327f57a6]
2012-08-07 martin f. krafft
* VirtualMailManager/common.py:
If an alias has multiple destinations, multiple records exist, due
to the nature of the database. address_list would then return the
same alias multiple times, which does not add any information, eats
screen space and is potentially confusing.
Therefore, we SELECT DISTINCTly from the alias table.
Signed-off-by: martin f. krafft
--- VirtualMailManager/common.py | 2 +- 1 file changed, 1
insertion(+), 1 deletion(-)
[a479c38931c4]
* VirtualMailManager/common.py:
Due to the UNION query in address_list, the assumption that the list
of gids received from the database would be continuous does not
hold.
To prevent addresses for domains with multiple entry types from
being listed, it is necessary to check the list of domain gids for
every entry.
Signed-off-by: martin f. krafft
--- VirtualMailManager/common.py | 4 +--- 1 file changed, 1
insertion(+), 3 deletions(-)
[605f8c115711]
2012-07-29 Pascal Volk
* doc/web/source/installation/dovecot_configuration.rst,
doc/web/source/installation/postgresql_configuration.rst:
doc/web: Emphasized a few lines of Dovecot/PostgreSQL configuration
file excerpts.
[9c138471d569]
* .hgignore:
.hgignore: "doc/build" is no longer required.
[b62210b96ea7]
* doc/web/Makefile, doc/web/source/_static/local.conf,
doc/web/source/_static/vmm.cfg, doc/web/source/_static/vmm_logo.png,
doc/web/source/_templates/layout.html, doc/web/source/conf.py,
doc/web/source/download.rst, doc/web/source/ext_references.rst,
doc/web/source/features.rst, doc/web/source/index.rst,
doc/web/source/install.rst,
doc/web/source/installation/dovecot_configuration.rst,
doc/web/source/installation/install_vmm.rst,
doc/web/source/installation/postfix_configuration.rst,
doc/web/source/installation/postgresql_configuration.rst,
doc/web/source/installation/prerequisites.rst,
doc/web/source/installation/system_preparation.rst,
doc/web/source/pgsql_set_permissionspermissions.rst,
doc/web/source/release_history.rst,
doc/web/source/substitutions.rst, doc/web/source/upgrade.rst,
doc/web/source/upgrade/0.4.x-0.5.rst,
doc/web/source/upgrade/0.5-0.6.rst, doc/web/source/vmm.cfg.rst:
doc: Added source of http://vmm.localdomain.org/.
[be0906181a10]
* doc/Makefile, doc/api/Makefile, doc/api/source/conf.py,
doc/api/source/index.rst, doc/api/source/vmm.rst,
doc/api/source/vmm_alias.rst, doc/api/source/vmm_config.rst,
doc/api/source/vmm_constants_error.rst,
doc/api/source/vmm_emailaddress.rst, doc/api/source/vmm_errors.rst,
doc/api/source/vmm_relocated.rst, doc/source/conf.py,
doc/source/index.rst, doc/source/vmm.rst, doc/source/vmm_alias.rst,
doc/source/vmm_config.rst, doc/source/vmm_constants_error.rst,
doc/source/vmm_emailaddress.rst, doc/source/vmm_errors.rst,
doc/source/vmm_relocated.rst:
doc: Moved API documentation to doc/api.
[20141b967c0b]
2012-07-22 Pascal Volk
* INSTALL:
INSTALL: Updated PostgreSQL configuration URL. Use ${sql} and
${proxysql} expressions in the main.cf description.
[4f9079dd4b65]
2012-07-01 Pascal Volk
* README:
README: Substituted a few words.
[0be27a75776a]
2012-06-30 Pascal Volk
* README:
README: Updated URL of the hg repository@sf.net.
[f9e6e0a237f0]
* man/man1/vmm.1:
man: Deleted erroneous placed backslash.
[9acf628bf0be]
2012-06-28 Pascal Volk
* .hgtags:
Added tag vmm-0.6.0 for changeset 3238c58d01ae
[0643c25121b5]
* ChangeLog, NEWS, VirtualMailManager/constants.py, setup.py:
Released vmm-0.6.0
[3238c58d01ae] [vmm-0.6.0]
=== 0.6.0 ===
2012-06-28 Pascal Volk
* VirtualMailManager/Account.py, VirtualMailManager/Alias.py,
VirtualMailManager/AliasDomain.py, VirtualMailManager/Config.py,
VirtualMailManager/Domain.py, VirtualMailManager/EmailAddress.py,
VirtualMailManager/Exceptions.py,
VirtualMailManager/MailLocation.py, VirtualMailManager/Relocated.py,
VirtualMailManager/Transport.py,
VirtualMailManager/VirtualMailManager.py,
VirtualMailManager/constants/ERROR.py,
VirtualMailManager/constants/EXIT.py,
VirtualMailManager/constants/VERSION.py,
VirtualMailManager/constants/__init__.py,
VirtualMailManager/ext/Postconf.py, pgsql
/create_optional_types_and_functions-dovecot-1.2.x.pgsql,
pgsql/create_optional_types_and_functions.pgsql,
pgsql/update_tables_0.4.x-0.5.pgsql,
pgsql/update_tables_0.5.x_for_dovecot-1.2.x.pgsql,
pgsql/update_types_and_functions_0.5.x_for_dovecot-1.2.x.pgsql,
postfix/pgsql-transport.cf, update_config_0.4.x-0.5.py:
Merged changes from v0.6.x(28230a8230bf).
[a4aead244f75] [tip]
* Close v0.6.x branch.
[28230a8230bf]
* vmm:
vmm: Don't insert the module directory into sys.path by default.
Doesn't make much sense, if the code is installed inside sys.path.
[54a84a311654]
* COPYING, VirtualMailManager/__init__.py,
VirtualMailManager/account.py, VirtualMailManager/alias.py,
VirtualMailManager/aliasdomain.py,
VirtualMailManager/cli/__init__.py,
VirtualMailManager/cli/config.py, VirtualMailManager/cli/handler.py,
VirtualMailManager/cli/main.py,
VirtualMailManager/cli/subcommands.py, VirtualMailManager/common.py,
VirtualMailManager/config.py, VirtualMailManager/constants.py,
VirtualMailManager/domain.py, VirtualMailManager/emailaddress.py,
VirtualMailManager/errors.py, VirtualMailManager/ext/__init__.py,
VirtualMailManager/ext/postconf.py, VirtualMailManager/handler.py,
VirtualMailManager/mailbox.py, VirtualMailManager/maillocation.py,
VirtualMailManager/network.py, VirtualMailManager/password.py,
VirtualMailManager/pycompat/__init__.py,
VirtualMailManager/pycompat/hashlib.py,
VirtualMailManager/quotalimit.py, VirtualMailManager/relocated.py,
VirtualMailManager/serviceset.py, VirtualMailManager/transport.py,
setup.py, update_config.py, vmm:
Updated copyright notices to include the year 2012.
[14abdd04ddf5]
* TODO:
TODO: Removed "listpwschemes" entry. Was done with changeset
a64c1b5e08b4
[11ed67ee7ebb]
* UPGRADE:
UPGRADE: Updated documentation.
[007786e58fb7]
* VirtualMailManager/cli/subcommands.py, man/de/man1/vmm.1,
man/man1/vmm.1:
VMM/cli/subcommands: Replaced the keyword `default' by `domain'.
Patch by Martin F. Krafft
[a75923ce2842]
2012-06-27 Pascal Volk
* Configure.Dovecot_2, INSTALL:
INSTALL: Added description how to create additional dove*
user/group. `doveauth' user and group for the authentication process
and the group `dovemail' for mail related Dovecot processes.
[55148bc6348e]
* INSTALL:
INSTALL: Updated documentation.
[b17a9d7a59ae]
* Configure.Dovecot_2, install.sh, upgrade.sh:
Configure.Dovecot_2: Added configuration documentation for Dovecot_2
>= 2.0.
[b5bb7b34e831]
* VirtualMailManager/account.py,
VirtualMailManager/cli/subcommands.py:
VMM: The Python 2.4.x compatibility commit - part III.
[b0165b7af7a3]
* VirtualMailManager/account.py:
VMM/account: Check the account's transport only when we have a
transport.
[2662f4e17eb4]
* VirtualMailManager/account.py,
VirtualMailManager/cli/subcommands.py,
VirtualMailManager/handler.py:
VMM: The Python 2.4.x compatibility commit.
[cc0f67f99780]
2012-06-14 Pascal Volk
* pgsql/set-permissions.py:
pgsql/set-permissions.py: Extended permissions. Postfix needs read
access on the postfix_gid view. Dovecot needs read permissions on
both mailboxformat columns.
[2fcf12fdecc2]
* VirtualMailManager/handler.py:
VMM/handler: Restored method Handler.domain_transport(). It went
somehow lost with changeset 5806fb74130b.
[1498abbb6c91]
2012-05-31 Pascal Volk
* pgsql/set-permissions.py:
pgsql: Added helper script: set-permissions.py.
[fbbb16476c5b]
2012-04-15 martin f. krafft
* TODO, VirtualMailManager/cli/handler.py,
VirtualMailManager/cli/subcommands.py, VirtualMailManager/common.py,
VirtualMailManager/constants.py, VirtualMailManager/handler.py:
Provide list{addresses,aliases,users,relocated} subcommands
The patch provides the list{addresses,aliases,users,relocated}
subcommands to the UI. All commands actually take the same path in
the code and only one query is run with different parameters for
each case.
There are still two shortcomings:
1. With alias domains, the output order is not as one might want
it, e.g.
foo@example.org bar@example.org
foo@example.com bar@example.com
when it should really be foo@ twice and then bar@ twice. I have
not found a way to modify the SQL accordingly.
2. The SELECT queries for Accounts, Alias and Relocated are hard-
coded in common.py.
[499c63f52462]
* man/de/man1/vmm.1, man/de/man5/vmm.cfg.5, man/man1/vmm.1,
man/man5/vmm.cfg.5:
man: escape hyphens
Hyphens inside words must be spelt \- instead of just -. This patch
fixes up the manpages.
* * * .
[a93671970617]
* man/de/man1/vmm.1, man/man1/vmm.1:
man: add 'catchall' to domaininfo
Since the addition of catchall, the domaininfo subcommand can also
take 'catchall' as a [detail] to limit the output of details to the
catch-all aliases.
Also, the number of catch-all destinations is now included in the
simple domaininfo output.
[6f2c41c3c7d6]
2012-04-15 Pascal Volk
* man/de/man1/vmm.1, man/man1/vmm.1:
man: vmm1: Use `fqdn' instead of `domain' in catchall* descriptions.
Fixed a typo s/cadd/cad/. Replaced double quotes by \(dq.
[107f7a3be9f5]
* VirtualMailManager/cli/subcommands.py:
VMM/cli/subcommands: Use the `fqdn' argument placeholder also for
catch-all subcommands.
[62f2daff853e]
2012-04-15 martin f. krafft
* pgsql/create_tables-dovecot-1.2.x.pgsql, pgsql/create_tables.pgsql,
pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_tables_0.5.x-0.6.pgsql:
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).
[867d950ce7b7]
* pgsql/create_tables-dovecot-1.2.x.pgsql, pgsql/create_tables.pgsql,
pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_tables_0.5.x-0.6.pgsql:
Revert caching of destination interpolation
Since 'destination' comes from the table in the query, it cannot be
cached across queries! Doh!
[44a808af6cf4]
2012-04-15 Pascal Volk
* pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_tables_0.5.x-0.6.pgsql:
pgsql: update_tables_*: Added missing `NOT' to `… tid DROP NOT
NULL;'.
[92ef34f07da3]
* pgsql/create_tables-dovecot-1.2.x.pgsql, pgsql/create_tables.pgsql:
pgsql: Create column `note' as text.
[5020c56f9388]
2012-04-15 martin f. krafft
* VirtualMailManager/common.py:
Add docstring for common.format_domain_default
[79f09cdd1a21]
2012-04-14 martin f. krafft
* man/de/man1/vmm.1, man/man1/vmm.1:
Document domainnote in manpages
5806fb74130b did not contain this, so I must have forgotten it.
Oops.
[47254b46c361]
* TODO:
Remove domain/account notes from TODO
[ff805bd17817]
* VirtualMailManager/account.py:
Include account note in getuser output
Modify the getuser output to include an account note, if one is
present
[1b3bdce0bf87]
* VirtualMailManager/cli/subcommands.py:
Display formatted notes in info output
If the user/domain object has an attached note, this patch makes the
userinfo/domaininfo output print the note, wrapped to the terminal
size.
[c3b98364f03d]
* .hgignore:
Ignore *.egg-status build directory created by setuptools
[a582f1452bc0]
* man/de/man1/vmm.1, man/man1/vmm.1:
Add user/domainnote commands to manpages
[a8ee0328f908]
* VirtualMailManager/account.py,
VirtualMailManager/cli/subcommands.py, VirtualMailManager/domain.py,
VirtualMailManager/handler.py:
Add note field to Account/Domain and CLI
[5806fb74130b]
* pgsql/create_tables-dovecot-1.2.x.pgsql, pgsql/create_tables.pgsql,
pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_tables_0.5.x-0.6.pgsql:
Modify SQL to add note field to domain_data and users
[1f9ea5658627]
2012-04-14 Pascal Volk
* man/de/man1/vmm.1, man/man1/vmm.1:
man: vmm.1: subcommand's name argument is optional now. Based on
martin f. krafft's v2 of changeset c340ba4bd544.
[9a23043b0530]
2012-04-14 martin f. krafft
* VirtualMailManager/cli/subcommands.py,
VirtualMailManager/handler.py, man/de/man1/vmm.1, man/man1/vmm.1:
Allow username to take no argument to erase value
Once a username has been set, it could not be removed via the UI.
Now, if no argument is passed to username, the value stored is
replaced with NULL.
[c340ba4bd544]
* README:
Add inheritance as a feature to README
[e956ddc868c0]
* VirtualMailManager/domain.py, man/de/man1/vmm.1, man/man1/vmm.1:
Change 'force' argument to reset user records for tid/ssid/qid
If domain{quotalimit,transport,serviceset} are run with 'force' and
settings are inheritable from the domain, then rather than to copy
the ID to the user table, the affected field in the user records
should be set to NULL so that the domain default is used.
[6a27c7529cd7]
* VirtualMailManager/cli/subcommands.py,
VirtualMailManager/handler.py, man/de/man1/vmm.1, man/man1/vmm.1:
Change UI to accept 'default' to restore inherited values
Instead of explicit values for tid/ssid/qid, the UI now accepts
'default', which removed user-pecific settings and hence causes
domain defaults to be used.
[2676dbf43e1c]
2012-04-13 martin f. krafft
* VirtualMailManager/account.py,
VirtualMailManager/cli/subcommands.py, VirtualMailManager/common.py:
Modify userinfo output to indicate when domain defaults are
displayed
When Account instances reference NULL tid/qid/ssid, the data must
come from the associated domain, and this should be indicated. For
transport and services, this is easy to do as the string passed in
the info dict can simply be modified. For quotalimit, however,
another method must be used due to the CLI-side formatting.
All approaches use a common formatter outsourced to the common.py
file.
[2bb40aaef94e]
* VirtualMailManager/account.py:
Modify Account class to handle NULL references
This patch modifies the Account class to defer to using the
associated domain's tid/ssid/qid fields if the per-instance fields
are None/NULL.
[cf3eb03c1c4f]
* pgsql/create_tables-dovecot-1.2.x.pgsql, pgsql/create_tables.pgsql,
pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_tables_0.5.x-0.6.pgsql:
Modify SQL update script to accept NULL fields for users
The value NULL in the qid/ssid/tid fields of the user table means
that the value from the associated domain record should be used
instead.
This patch modifies the PL/pgSQL functions used by Dovecot and
Postfix accordingly.
[95dd123b552e]
* man/de/man1/vmm.1, man/man1/vmm.1:
man: Add examples for userservices
[916b468cf994]
2012-04-14 Pascal Volk
* VirtualMailManager/account.py,
VirtualMailManager/cli/subcommands.py, VirtualMailManager/common.py,
pgsql/create_tables-dovecot-1.2.x.pgsql, pgsql/create_tables.pgsql,
pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_tables_0.5.x-0.6.pgsql:
Reverted previous three changesets (e09139525580, 85517c8fde36,
3acbff727626)
[4b8c3f51d7da]
2012-04-13 martin f. krafft
* VirtualMailManager/account.py,
VirtualMailManager/cli/subcommands.py, VirtualMailManager/common.py:
Modify userinfo output to indicate when domain defaults are
displayed
When Account instances reference NULL tid/qid/ssid, the data must
come from the associated domain, and this should be indicated. For
transport and services, this is easy to do as the string passed in
the info dict can simply be modified. For quotalimit, however,
another method must be used due to the CLI-side formatting.
All approaches use a common formatter outsourced to the common.py
file.
[e09139525580]
* VirtualMailManager/account.py:
Modify Account class to handle NULL references
This patch modifies the Account class to defer to using the
associated domain's tid/ssid/qid fields if the per-instance fields
are None/NULL.
[85517c8fde36]
* pgsql/create_tables-dovecot-1.2.x.pgsql, pgsql/create_tables.pgsql,
pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_tables_0.5.x-0.6.pgsql:
Modify SQL update script to accept NULL fields for users
The value NULL in the qid/ssid/tid fields of the user table means
that the value from the associated domain record should be used
instead.
This patch modifies the PL/pgSQL functions used by Dovecot and
Postfix accordingly.
[3acbff727626]
2012-04-14 martin f. krafft
* TODO:
Add list* subcommands to TODO
[3ffe4ee3740f]
* TODO:
add domain/account notes to TODO
[f494a593c674]
2012-04-13 martin f. krafft
* TODO:
Add my WIP items to the TODO list
[dc66f66c51cf]
* pgsql/create_tables-dovecot-1.2.x.pgsql, pgsql/create_tables.pgsql,
pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_tables_0.5.x-0.6.pgsql:
Cache interpolated destination
Instead of running the string modification function for destination
interpolation twice, store the result once and use the stored result
subsequently.
[75d1c0d6bb8f]
2012-04-12 Pascal Volk
* man/man1/vmm.1:
man: Use example.com in catchallinfo example output.
[a0a27688e616]
* README:
README: reStructuredText fix: ERROR/3 and WARNING/2.
[b1fd6f08f369]
2012-04-11 martin f. krafft
* README, man/de/man1/vmm.1, man/man1/vmm.1, pgsql/create_tables-
dovecot-1.2.x.pgsql, pgsql/create_tables.pgsql,
pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_tables_0.5.x-0.6.pgsql:
Enable interpolation of alias destinations
This patch modifies the virtual_alias_maps function so that the
destination address is parsed for the place holders %n, %d and %=,
which are replaced with the localpart, the domain or the full
address with '@' replaced by '=' of the queried key.
In combination with alias domains, this allows for domain-specific
recipients.
E.g. given example.org and its alias domain example.com, defining an
alias
postmaster@example.org → postmaster+%d@example.org
will cause mail to postmaster@example.*com* to go to
postmaster+example.*com*@example.org.
[5ec2068d02af]
* README:
Add catch-all aliases to README/features
[88466a6ba3ae]
2012-04-10 martin f. krafft
* man/de/man1/vmm.1, man/man1/vmm.1:
Add catchall subcommands to manpages
[b2084e7f6854]
* VirtualMailManager/cli/subcommands.py, VirtualMailManager/domain.py,
pgsql/create_tables-dovecot-1.2.x.pgsql, pgsql/create_tables.pgsql,
pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_tables_0.5.x-0.6.pgsql:
Include catch-all count in domaininfo output
[09fa019bb330]
* pgsql/create_tables-dovecot-1.2.x.pgsql, pgsql/create_tables.pgsql,
pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_tables_0.5.x-0.6.pgsql:
Make PL/pgSQL function feed back identity for mailboxes/relocated
when there are catchall destinations.
Without catchall aliases, if no virtual_alias matches, the query can
just return NULL and Postfix will later check mailboxes/relocated
for the address to rewrite.
However, since virtual aliases are handled long before
mailboxes/relocated, a catchall alias would also catch mail to
mailboxes and relocated addresses, which we do not want.
The way to tell postfix to keep delivering is for the virtual alias
map to return the search key itself (identity function).
This patch changes the postfix_virtual_alias_maps Pl/pgSQL function
to do exactly that, but only if there are catchall destinations
defined for the domain in question — otherwise it returns NULL when
no match is found.
[d863a44a6353]
* VirtualMailManager/catchall.py:
Fix syntax errors
[557c4703986c]
* pgsql/create_tables-dovecot-1.2.x.pgsql, pgsql/create_tables.pgsql,
pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_tables_0.5.x-0.6.pgsql:
Modify virtual_alias_maps function to check mailboxes/relocated
first
[821d3ffaaaca]
* pgsql/create_tables-dovecot-1.2.x.pgsql, pgsql/create_tables.pgsql,
pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_tables_0.5.x-0.6.pgsql:
Make virtual_alias_maps function search catchall when no aliases are
found
[0244f1344b04]
* VirtualMailManager/cli/subcommands.py, VirtualMailManager/domain.py,
VirtualMailManager/handler.py:
Add catchall info to domain_info output
[1fa354bbdb90]
* VirtualMailManager/catchall.py:
Correct syntax errors
[1a9247e9763f]
2012-04-09 martin f. krafft
* VirtualMailManager/handler.py:
Fixup catchall_info to return iterator, not self
[18870919ec48]
* VirtualMailManager/catchall.py:
Correct syntax errors
[2aae58cddfa9]
* VirtualMailManager/cli/subcommands.py:
Teach CLI about catchall* commands
[fb0ffde628d6]
* VirtualMailManager/handler.py:
Provide catchall_* methods to the Handler class
[3da8c919584f]
* VirtualMailManager/catchall.py:
First version of a CatchallAlias class
I based the CatchallAlias class in catchall.py heavily on the Alias
class, but by copy, not deriving. The two are functionally related,
but the implementations are too different because CatchallAliases
have no localpart.
[f180ead60568]
* pgsql/create_tables-dovecot-1.2.x.pgsql, pgsql/create_tables.pgsql,
pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_tables_0.5.x-0.6.pgsql:
Add database table for catchall destinations
Catch-all aliases are stored for a domain. Since there can be
multiple destinations per domain, this is done using a 1:n relation
on the gid.
This commit extends the SQL schema definition and also provides
appropriate upgrade DDL.
[492c179094c9]
2012-04-08 Pascal Volk
* pgsql/create_optional_types_and_functions-dovecot-1.2.x.pgsql,
pgsql/create_optional_types_and_functions.pgsql, pgsql
/create_tables-dovecot-1.2.x.pgsql, pgsql/create_tables.pgsql,
pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_tables_0.5.x-0.6.pgsql,
pgsql/update_types_and_functions_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_types_and_functions_0.5.x-0.6.pgsql:
pgsql: Merged types and functions into the create_tables… files.
[e1b32377032f]
* postfix/pgsql-relocated_maps.cf, postfix/pgsql-transport_maps.cf,
postfix/pgsql-virtual_alias_maps.cf, postfix/pgsql-
virtual_mailbox_maps.cf, postfix/pgsql-virtual_uid_maps.cf:
postfix: Removed VIEW-based comments from configuration files.
[f2387d60624b]
* pgsql/create_tables-dovecot-1.2.x.pgsql, pgsql/create_tables.pgsql,
pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_tables_0.5.x-0.6.pgsql:
pgsql: Removed most of the VIEWs.
There are only two views left for now:
- postfix_gid
- vmm_domain_info
All other views have a faster replacement: plpgsql functions.
[5ccc9c6e5193]
2012-04-08 martin f. krafft
* .hgignore:
Ignore even more Debian-build-related files
[23d04d1f29e8]
* .hgignore:
Ignore more Debian-build-related files
Debian produces log and debhelper files in debian/* that do not need
to be known to mercurial. Hence, this patch adds the globs to
.hgignore.
[419c929739fd]
* TODO:
Add non-root TODO
[5b9a03762813]
2012-04-07 Pascal Volk
* VirtualMailManager/config.py:
VMM/config: Fixed a typo: s/DB_MUDULES/DB_MODULES/g.
[17f2c5b5098e]
2012-04-07 martin f. krafft
* .hgignore:
Ignore build files related to Debian packaging
During Debian packaging, the package is built in ./debian/vmm/, and
quilt is used (./.pc/). Both directories contain only generated
files and should hence be ignored from the perspective of Mercurial.
[612a60e9d558]
* .hgignore:
Instruct mercurial to ignore build directory
Python's distutil builds the package into ./build/, which can and
should be ignored with respect to the repository. This patch simply
adds the appropriate line to .hgignore.
[2c5e2613eca8]
2012-04-06 Pascal Volk
* VirtualMailManager/handler.py:
VMM/handler: Create domain directory with umask 0022.
[30365a87650d]
2012-04-07 martin f. krafft
* VirtualMailManager/domain.py:
Modify address check query to obtain well-defined result
The way in which UNION does not yield the desired result, because
(a) UNION merges results and (b) the result order is undefined. This
patch changes the query to select the counts as columns and hence
provides a well-defined order.
[e5c2b3647971]
2012-04-06 Pascal Volk
* postfix/pgsql-smtpd_sender_login_maps.cf:
postfix: Uncommented the query in pgsql-smtpd_sender_login_maps.cf.
[320531aa1280]
* postfix/pgsql-transport.cf, postfix/pgsql-transport_maps.cf:
postfix: Renamed pgsql-transport.cf to pgsql-transport_maps.cf. Now
it matches pgsql-${postfix-parameter}.cf.
[9cdc6ef83265]
2012-03-29 Pascal Volk
* po/fr.po:
po: Updated French translation (translated by Dimitri Duc).
[e0441b07bccc]
2012-03-13 Pascal Volk
* po/fi.po:
po: Updated Finnish translation (translated by Jorma Karvonen).
[b8d5564b4e42]
2011-12-13 Pascal Volk
* VirtualMailManager/cli/subcommands.py:
VMM/cli/subcommands: Fixed a TypeError in user_info().
[fb0af82ab4af]
2011-12-05 Pascal Volk
* postfix/pgsql-relocated_maps.cf, postfix/pgsql-transport.cf, postfix
/pgsql-virtual_alias_maps.cf, postfix/pgsql-virtual_mailbox_maps.cf,
postfix/pgsql-virtual_uid_maps.cf:
postfix: Use pgsql functions in query templates where possible.
[ccdfbbb1bb01]
* pgsql/create_optional_types_and_functions-dovecot-1.2.x.pgsql,
pgsql/create_optional_types_and_functions.pgsql:
pgsql: Updated required privileges for function dovecotpassword.
[10e9b4855173]
2011-11-27 Pascal Volk
* README:
README: Added section `Installation Prerequisites'. Reworked some
parts.
[35395b49bc44]
2011-11-26 Pascal Volk
* update_config.py, upgrade.sh:
update_config: Write the old package install dir to a tmp file.
upgrade: Remove old CamelCase files. Removed some unused variables.
[fb210a116f18]
2011-11-13 Pascal Volk
* VirtualMailManager/serviceset.py:
VMM: The pyPgSQL compatibility commit.
[428ee9cdf1b2]
* VirtualMailManager/cli/subcommands.py, VirtualMailManager/config.py:
VMM: The Python 2.4.x compatibility commit.
[90d69ae4f40d]
* VirtualMailManager/relocated.py:
VMM/relocated: Don't accept something@localhost as destination.
[099de308fd98]
* man/de/man1/vmm.1, man/man1/vmm.1:
man1: Updated configuration related descriptions/examples,
accordingly to commit 4ff0fa3ba0fa.
[b33bdc0c3669]
2011-11-12 Pascal Volk
* VirtualMailManager/constants.py, man/de/man1/vmm.1,
man/de/man5/vmm.cfg.5, man/man1/vmm.1, man/man5/vmm.cfg.5, setup.py:
Updated the author's e-mail address.
[6278a7a2a476]
2011-11-12 Pascal Volk
* man/de/man1/vmm.1, man/de/man5/vmm.cfg.5, man/man1/vmm.1,
man/man5/vmm.cfg.5:
man: Updated the URL of the bug tracker.
[86fa217cba11]
2011-11-11 Pascal Volk
* man/de/man5/vmm.cfg.5, man/man5/vmm.cfg.5:
man5: Updated the `usable password schemes' part.
[c30ce0e079b6]
2011-11-10 Pascal Volk
* man/de/man1/vmm.1, man/man1/vmm.1:
man1: Copied new formatted/translated command output into the
examples.
[e321b764268e]
2011-11-09 Pascal Volk
* VirtualMailManager/cli/subcommands.py:
VMM/cli/subcommands: Small improvement of domaininfo's output.
Pointed out that the displayed quota limit is valid per user.
[4353981e3a7f]
* man/de/man1/vmm.1, man/man1/vmm.1:
man1: Removed obsolete commands and added new commands.
[9b9cccebccf0]
* man/de/man1/vmm.1:
man/de/man1: Removed translated argument names.
[8f59a2f539e7]
2011-11-08 Pascal Volk
* VirtualMailManager/cli/subcommands.py:
VMM/cli/subcommands: Use the common output formatting in
list_pwschemes().
[5d0114f7bb99]
* VirtualMailManager/handler.py:
VMM/handler: Added a comment for the Translation Project.
[807ad4df0774]
* VirtualMailManager/cli/subcommands.py:
VMM/cli/subcommands: Subcommand argument placeholders are no longer
translatable.
[1ebb6b88f589]
2011-11-07 Pascal Volk
* po/de.po:
po: Updated German translation (translated by Mario Blättermann).
[89bf9389d62f]
* po/vmm.pot:
po: Updated address for message-id bug reports. Looks like as sf.net
would have horrible configured mail servers. :-/
[b4d21e8bfa00]
* merged changes from default(c0e1fb1b0145)
[863c691d7d14]
* po/fi.po:
po: Added Finnish translation to the repository. Many thanks to
Jorma Karvonen from the Translation Project for the work.
[c0e1fb1b0145]
* VirtualMailManager/password.py:
VMM/password: list_schemes(): report suffixes with a leading dot.
[7d4d79ff08d0]
* po/de.po, po/vmm.pot:
po: Updated messages template and German translation.
[b175c9f62602]
2011-11-06 Pascal Volk
* VirtualMailManager/cli/subcommands.py:
VMM/cli/subcommands: Added new subcommand `listpwschemes' (lp).
Marked version()'s ctx argument as unused.
[a64c1b5e08b4]
* VirtualMailManager/password.py:
VMM/password: Added function list_schemes().
[cabdf94ec580]
* man/de/man5/vmm.cfg.5, man/man5/vmm.cfg.5:
man5: Moved some option descriptions to section doamin, accordingly
to commit 4ff0fa3ba0fa. Added a brief explanation of which settings
will be applied in which situations.
[e57dd007d69a]
2011-11-05 Pascal Volk
* update_config.py:
update_config: Updated, so that the previous config modifications
will be applied to 0.5.2 configurations files.
[033a0436894f]
* VirtualMailManager/cli/subcommands.py, VirtualMailManager/config.py,
VirtualMailManager/handler.py, vmm.cfg:
VMM/config: Moved some options to section `domain':
old new
------------------------------------------------------------
account.imap -> domain.imap account.pop3
-> domain.pop3 account.sieve -> domain.sieve
account.smtp -> domain.account
misc.quota_bytes -> domain.quota_bytes
misc.quota_messages -> domain.quota_messages misc.transport
-> domain.transport
[4ff0fa3ba0fa]
* VirtualMailManager/__init__.py:
VMM: Show a warning when a unsupported locale setting was detected.
[2019aa415dcd]
* VirtualMailManager/cli/subcommands.py:
VMM/cli/subcommands: Small improvement in domain_add(). Inform the
admin, when the postmaster account will be auto-created.
[7847f949d0a2]
* VirtualMailManager/cli/subcommands.py:
VMM/cli/subcommands: Fixed a small failure in alias_info().
[b15960e9c53c]
* TODO:
TODO: updated …
[7d27627c7fb0]
* VirtualMailManager/domain.py:
VMM/domain: Extended Domain._chk_state() to support both states.
[f2934105181b]
2011-11-04 Pascal Volk
* VirtualMailManager/constants.py:
VMM/constants: Cleared out obsolete error codes.
[63ae77f05088]
* VirtualMailManager/account.py:
VMM/account: Removed unused import.
[2408a3cd4bea]
* VirtualMailManager/maillocation.py,
VirtualMailManager/quotalimit.py:
VMM/{maillocation,quotalimit}: Unified object initialization code.
Simply raise a ValueError for wrong values (unknown IDs).
[fd4aa073015f]
* VirtualMailManager/errors.py, VirtualMailManager/transport.py:
VMM/transport: Reworked Transport initialization. Set the transport
id only if we could find a transport with that id. Raise a
ValueError instead of a translatable TransportError(VMMError).
VMM/errors: Deleted class TransportError, it is no longer needed.
[6826acb9b0a7]
* VirtualMailManager/cli/subcommands.py:
VMM/cli/subcommands: domainservices: Don't fail when neither a
service nor the keyword force was provided.
[45c917e6a386]
* VirtualMailManager/cli/subcommands.py, VirtualMailManager/domain.py,
VirtualMailManager/handler.py:
VMM/domain: Extended/updated Domain.get_info() in order to:
- include active service(s) || None
- use more understandable English terms
VMM/cli/subcommands: Updated (order of) keys of `domaininfo' output.
.`userinfo' will always show `sieve', no longer `managesieve'.
[c31d604e26d3]
2011-11-03 Pascal Volk
* VirtualMailManager/cli/subcommands.py:
VMM/cli/subcommands: Small indent fix.
[18b75e6a39d5]
* VirtualMailManager/cli/subcommands.py:
VMM/cli/subcommands: Added subcommand domainservices (ds). Replaced
subcommands userdisable and userenable by userservices (us).
[b8c94e06cd46]
2011-11-02 Pascal Volk
* VirtualMailManager/account.py, VirtualMailManager/handler.py:
VMM/account: Integrated class ServiceSet in class Account. Replaced
methods Account.enable() and Account.disable() by
Account.update_serviceset(). VMM/handler: Replaced methods
Handler.user_disable() and Handler.user_enable() by
Handler.user_services()
[95275b61ff8a]
2011-11-01 Pascal Volk
* VirtualMailManager/serviceset.py:
VMM/serviceset: Added @property ServiceSet.services -> dict.
[e2b9e3de2b51]
* VirtualMailManager/account.py:
VMM/account: Sorted imports …
[abcd73f5e980]
* VirtualMailManager/domain.py, VirtualMailManager/handler.py:
VMM/domain: Integrated class ServiceSet in class Domain.
VMM/handler: Extended Handler.domain_add() and added
Handler.domain_services(). Removed unused domain.get_gid import.
[1af5fe0683ce]
* VirtualMailManager/serviceset.py:
VMM/serviceset: Use SERVICES inside of ServiceSet - avoid slicing.
[1a08fe35b496]
2011-10-31 Pascal Volk
* VirtualMailManager/serviceset.py:
VMM/serviceset: Added module constant SERVICES.
[39036f5e6387]
2011-10-30 Pascal Volk
* VirtualMailManager/serviceset.py:
VMM: Added new module serviceset - provides class ServiceSet.
[e35efe931af3]
2011-10-28 Pascal Volk
* pgsql/create_optional_types_and_functions-dovecot-1.2.x.pgsql,
pgsql/create_optional_types_and_functions.pgsql, pgsql
/create_tables-dovecot-1.2.x.pgsql, pgsql/create_tables.pgsql,
pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_tables_0.5.x-0.6.pgsql,
pgsql/update_types_and_functions_0.5.x-0.6-dovecot-1.2.x.pgsql,
pgsql/update_types_and_functions_0.5.x-0.6.pgsql:
pgsql: Added new table `service_set'. Moved columns `smtp', `pop3'
`imap' and `sieve' from the `users' table to the new `service_set'
table.
[9823548b2717]
2011-10-26 Pascal Volk
* update_config.py:
update_config: Set database.module to pyPgSQL only when psycopg2 is
unavailable.
[d296a020f440]
* README:
README: Added contet.
[ee6f8ac06197]
* man/de/man1/vmm.1.rst, man/de/man5/vmm.cfg.5.rst,
man/substitute_links.rst, man/substitute_links_1.rst,
man/substitute_links_5.rst:
man: Removed reStructuredText files.
[3ca31d080432]
* man/de/man1/vmm.1, man/de/man5/vmm.cfg.5:
man: Reworked/updated German manual pages.
[c2543ddde9f5]
2011-10-25 Pascal Volk
* man/man1/vmm.1:
man: Added missing `.RE' macro to sub section userinfo (ui).
[ad7cfbfbc68d]
2011-10-16 Pascal Volk
* po/de.po:
po: Fixed 2 fatal msgfmt errors inde.po.
[fdd05a757f43]
* po/de.po:
po: Updated German translation.
[c11edcfc6e5f]
* VirtualMailManager/cli/subcommands.py, po/vmm.pot:
Messages: Replaced some 'Available' by 'Existing'.
[9842650569c2]
* po/vmm.pot:
po: Regenerated vmm.pot
[0d8e7977ae63]
2011-09-03 Pascal Volk
* VirtualMailManager/emailaddress.py:
VMM/emailaddress: Class DestinationEmailAddress accepts also
something@localhost addresses now.
[8e41e77b84e6]
* VirtualMailManager/handler.py:
VMM/handler: Handler.alias_delete() also use class
DestinationEmailAddress for the destination address, instead of
class EmailAddress.
[933b9debbec1]
* VirtualMailManager/alias.py:
VMM/alias: Alias.del_destination() corrected the value assignment in
the error message's dictionary.
[8394e222aba3]
* VirtualMailManager/alias.py:
VMM/alias: Alias._load_dests() use class DestinationEmailAddress for
destination addresses, instead of class EmailAddress.
[46c296c6e231]
2011-07-31 Pascal Volk
* VirtualMailManager/cli/subcommands.py:
VMM/cli/subcommands: user_add() show only generated passwords - not
the given.
[a43a2e20de71]
2011-03-10 Pascal Volk
* VirtualMailManager/cli/handler.py,
VirtualMailManager/ext/postconf.py, VirtualMailManager/handler.py,
VirtualMailManager/mailbox.py:
VMM: Deleted a few unused variables.
[33a45e4c80c4]
2011-03-05 Pascal Volk
* VirtualMailManager/network.py:
VMM/network: Added new module network.
[ff2a61e155db]