This list is closed, nobody may subscribe to it.
| 2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(2) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2010 |
Jan
(18) |
Feb
(43) |
Mar
(11) |
Apr
(50) |
May
(10) |
Jun
|
Jul
(39) |
Aug
(30) |
Sep
|
Oct
|
Nov
|
Dec
|
| 2011 |
Jan
(14) |
Feb
(43) |
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
(4) |
Oct
(12) |
Nov
(45) |
Dec
(3) |
| 2012 |
Jan
|
Feb
|
Mar
(2) |
Apr
(65) |
May
(2) |
Jun
(19) |
Jul
(6) |
Aug
(19) |
Sep
(23) |
Oct
(11) |
Nov
(21) |
Dec
(16) |
| 2013 |
Jan
(21) |
Feb
(2) |
Mar
(2) |
Apr
|
May
|
Jun
(2) |
Jul
|
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
|
| 2014 |
Jan
(4) |
Feb
(34) |
Mar
(10) |
Apr
|
May
|
Jun
(10) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
|
|
1
|
2
(3) |
|
3
|
4
(1) |
5
|
6
|
7
|
8
|
9
|
|
10
|
11
|
12
|
13
(2) |
14
(1) |
15
|
16
|
|
17
|
18
(2) |
19
|
20
|
21
|
22
(3) |
23
|
|
24
(2) |
25
(1) |
26
(1) |
27
|
28
|
29
(1) |
30
(1) |
|
31
|
|
|
|
|
|
|
|
From: <nev...@us...> - 2010-01-30 05:15:49
|
details: http://hg.localdomain.org/vmm/rev/3d09c657e9e5 changeset: 179:3d09c657e9e5 user: Pascal Volk date: Sat Jan 30 05:15:21 2010 +0000 description: man: updated documentation … diffstat: man/de/man1/vmm.1.rst | 474 +++++++++++++++++++++++++++++++++++++++++++++ man/de/man5/vmm.cfg.5.rst | 353 ++++++++++++++++++++------------ man/man1/vmm.1.rst | 445 ++++++++++++++++++++++++++++++++++++++++++ man/man5/vmm.cfg.5.rst | 325 +++++++++++++++++++----------- man/substitute_links.rst | 19 + man/substitute_links_1.rst | 12 + man/substitute_links_5.rst | 29 ++ po/de.po | 4 +- 8 files changed, 1407 insertions(+), 254 deletions(-) diffs (truncated from 2033 to 300 lines): diff -r 9480f2b15129 -r 3d09c657e9e5 man/de/man1/vmm.1.rst --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/man/de/man1/vmm.1.rst Sat Jan 30 05:15:21 2010 +0000 @@ -0,0 +1,474 @@ +===== + vmm +===== + +----------------------------------------------------------------------------- +Kommandozeilenprogramm zur Verwaltung von E-Mail-Domains, -Konten und -Aliase +----------------------------------------------------------------------------- + +:Author: Pascal Volk <nev...@us...> +:Date: 2010-01-30 +:Version: vmm-0.6.0 +:Manual group: vmm Manual +:Manual section: 1 + +.. contents:: + :backlinks: top + :class: htmlout + +SYNOPSIS +======== +vmm *Unterbefehl* *Objekt* [ *Argumente* ] + + +BESCHREIBUNG +============ +**vmm** (a virtual mail manager) ist ein Kommandozeilenprogramm für +Administratoren/Postmaster zur Verwaltung von (Alias-) Domains, Konten und +Alias-Adressen. Es wurde entwickelt für Dovecot und Postfix mit einem +PostgreSQL-Backend. + + +UNTERBEFEHLE +============ +Von jedem Unterbefehl gibt es jeweils eine lange und kurze Variante. Die +Kurzform ist in Klammern geschrieben. Bei beiden Formen ist die +Groß-/Kleinschreibung zu berücksichtigen. + + +ALLGEMEINE UNTERBEFEHLE +----------------------- +.. _configure: + +``configure (cf) [ Sektion ]`` + Startet den interaktiven Konfiguration-Modus für alle Sektionen der + Konfiguration. + + Dabei wird der aktuell konfigurierte Wert einer jeden Option in eckigen + Klammern ausgegeben. Sollte kein Wert konfiguriert sein, wird der + Vorgabewert der jeweiligen Option in in eckigen Klammern angezeigt. Um den + angezeigten Wert unverändert zu übernehmen, ist dieser mit der + Eingabe-Taste zu bestätigen. + + Wurde das optionale Argument *Sektion* angegeben, werden nur die Optionen + der angegebenen Sektion angezeigt und können geändert werden. Folgende + Sektionen sind vorhanden: + + | - **account** + | - **bin** + | - **database** + | - **domain** + | - **maildir** + | - **misc** + + Beispiel:: + + vmm configure domain + Verwende Konfigurationsdatei: /usr/local/etc/vmm.cfg + + * Konfigurations Sektion: „domain“ + Neuer Wert für Option directory_mode [504]: + Neuer Wert für Option delete_directory [False]: 1 + Neuer Wert für Option auto_postmaster [True]: + Neuer Wert für Option force_deletion [False]: on + +.. _getuser: + +``getuser (gu) userid`` + Wenn nur eine UserID vorhanden ist, zum Beispiel aus der Prozessliste, + kann mit dem Unterbefehl **getuser** die E-Mail-Adresse des Users + ermittelt werden. + + Beispiel:: + + vmm getuser 70004 + Account Informationen + --------------------- + UID............: 70004 + GID............: 70000 + Address........: c....@ex... + +.. _listdomains: + +``listdomains (ld) [ Muster ]`` + Dieser Unterbefehl listet alle verfügbaren Domains auf. Allen Domains wird + ein Präfix vorangestellt. Entweder ein '[+]', falls es sich um eine + primäre Domain handelt, oder ein '[-]', falls es sich um eine Alias-Domain + handelt. Die Ausgabe kann reduziert werden, indem ein optionales *Muster* + angegeben wird. + + Um eine Wildcard-Suche durchzuführen kann das **%**-Zeichen am Anfang + und/oder Ende des *Musters* verwendet werden. + + Beispiel:: + + vmm listdomains %example% + Übereinstimmende Domains + ------------------------ + [+] example.com + [-] e.g.example.com + [-] example.name + [+] example.net + [+] example.org + +.. _help: + +``help (h)`` + Dieser Unterbefehl gibt alle verfügbaren Kommandos auf der Standardausgabe + (stdout) aus. Danach beendet sich **vmm**. + +.. _version: + +``version (v)`` + Gibt Versionsinformationen zu **vmm** aus. + +DOMAIN UNTERBEFEHLE +------------------- +.. _domainadd: + +``domainadd (da) Domain [ Transport ]`` + Fügt eine neue *Domain* in die Datenbank ein und erstellt das + Domain-Verzeichnis. + + Ist das optionale Argument *Transport* angegeben, wird der + Vorgabe-Transport (|misc.transport|_) aus |vmm.cfg(5)|_ für diese *Domain* + ignoriert und der angegebene *Transport* verwendet. Der angegebene + *Transport* ist gleichzeitig der Vorgabe-Transport für alle neuen Konten, + die unter dieser Domain eingerichtet werden. + + Beispiele:: + + vmm domainadd support.example.com smtp:mx1.example.com + vmm domainadd sales.example.com + +.. _domaininfo: + +``domaininfo (di) Domain [ Details ]`` + Dieser Unterbefehl zeigt Information zur angegeben *Domain* an. + + Um detaillierte Informationen über die *Domain* zu erhalten, kann das + optionale Argument *Details* angegeben werden. Ein möglicher Wert für + *Details* kann eines der folgenden fünf Schlüsselwörter sein: + + ``accounts`` + um alle existierenden Konten aufzulisten + ``aliasdomains`` + um alle zugeordneten Alias-Domains aufzulisten + ``aliases`` + um alle verfügbaren Alias-Adressen aufzulisten + ``relocated`` + um alle Adressen der relocated Users aufzulisten + ``full`` + um alle oben genannten Informationen aufzulisten + + Beispiel:: + + vmm domaininfo sales.example.com + Domain Informationen + -------------------- + Domainname.....: sales.example.com + GID............: 70002 + Transport......: dovecot: + Domaindir......: /home/mail/5/70002 + Aliasdomains...: 0 + Accounts.......: 0 + Aliases........: 0 + Relocated......: 0 + +.. _domaintransport: + +``domaintransport (dt) Domain Transport [ force ]`` + Ein neuer *Transport* für die angegebene *Domain* kann mit diesem + Unterbefehl festgelegt werden. + + Wurde das optionale Schlüsselwort **force** angegeben, so werden alle + bisherigen Transport-Einstellungen, der in dieser Domain vorhandenen + Konten, mit dem neuen *Transport* überschrieben. + + Andernfalls gilt der neue *Transport* nur für Konten, die zukünftig + erstellt werden. + + Beispiel:: + + vmm domaintransport support.example.com dovecot: + +.. _domaindelete: + +``domaindelete (dd) Domain [ delalias | deluser | delall ]`` + Mit diesem Unterbefehl wird die angegebene *Domain* gelöscht. + + Sollten der *Domain* Konten und/oder Aliase zugeordnet sein, wird **vmm** + die Ausführung des Befehls mit einer entsprechenden Fehlermeldung beenden. + + Sollten Sie sich Ihres Vorhabens sicher sein, so kann optional eines der + folgenden Schlüsselwörter angegeben werden: **delalias**, **deluser** + oder **delall**. + + Sollten Sie wirklich immer wissen was Sie tun, so editieren Sie Ihre + *vmm.cfg* und setzen den Wert der Option |domain.force_deletion|_ auf + true. Dann werden Sie beim Löschen von Domains nicht mehr wegen vorhanden + Konten/Aliase gewarnt. + + +ALIAS-DOMAIN UNTERBEFEHLE +------------------------- +.. _aliasdomainadd: + +``aliasdomainadd (ada) Aliasdomain Zieldomain`` + Mit diesem Unterbefehl wird der *Zieldomain* die Alias-Domain + *Aliasdomain* zugewiesen. + + Beispiel:: + + vmm aliasdomainadd example.name example.com + +.. _aliasdomaininfo: + +``aliasdomaininfo (adi) Aliasdomain`` + Dieser Unterbefehl informiert darüber, welcher Domain die Alias-Domain + *Aliasdomain* zugeordnet ist. + + Beispiel:: + + vmm aliasdomaininfo example.name + Alias-Domain Informationen + -------------------------- + Die Alias-Domain example.name gehört zu: + * example.com + +.. _aliasdomainswitch: + +``aliasdomainswitch (ads) Aliasdomain Zieldomain`` + Wenn das Ziel der vorhandenen *Aliasdomain* auf eine andere *Zieldomain* + geändert werden soll, ist dieser Unterbefehl zu verwenden. + + Beispiel:: + + vmm aliasdomainswitch example.name example.org + +.. _aliasdomaindelete: + +``aliasdomaindelete (add) Aliasdomain`` + Wenn die Alias-Domain mit dem Namen *Aliasdomain* gelöscht werden soll, + ist dieser Unterbefehl zu verwenden. + + Beispiel:: + + vmm aliasdomaindelete e.g.example.com + + +KONTO UNTERBEFEHLE +------------------ +.. _useradd: + +``useradd (ua) Adresse [ Passwort ]`` + Mit diesem Unterbefehl wird ein neues Konto für die angegebene *Adresse* + angelegt. + + Wurde kein *Passwort* angegeben wird **vmm** dieses im interaktiven Modus + erfragen. + + Beispiele:: + + vmm ua d....@ex... 'A 5ecR3t P4s5\\/\\/0rd' + vmm ua e....@ex... + Neues Passwort eingeben: + Neues Passwort wiederholen: + +.. _userinfo: + +``userinfo (ui) Adresse [ Details ]`` + Dieser Unterbefehl zeigt einige Informationen über das Konto mit der + angegebenen *Adresse* an. + + Wurde das optionale Argument *Details* angegeben, werden weitere + Informationen ausgegeben. Mögliche Werte für *Details* sind: + + ``aliases`` + um alle Alias-Adressen, mit dem Ziel *Adresse*, aufzulisten + ``du`` + um zusätzlich die Festplattenbelegung des Maildirs eines Kontos + anzuzeigen. Soll die Festplattenbelegung jedes Mal mit der **userinfo** + ermittelt werden, ist in der *vmm.cfg* der Wert der Option + |account.disk_usage|_ auf true zu setzen. + ``full`` + um alle oben genannten Informationen anzuzeigen + |
|
From: <nev...@us...> - 2010-01-29 23:57:13
|
details: http://hg.localdomain.org/vmm/rev/9480f2b15129 changeset: 178:9480f2b15129 user: Pascal Volk date: Fri Jan 29 23:56:45 2010 +0000 description: po: Quick refresh - for documentation purpose. diffstat: VirtualMailManager/Config.py | 6 +- po/de.po | 474 +++++++++++++++++++++++++----------------- po/vmm.pot | 125 ++++++---- 3 files changed, 355 insertions(+), 250 deletions(-) diffs (truncated from 1174 to 300 lines): diff -r ec2e1df8bb10 -r 9480f2b15129 VirtualMailManager/Config.py --- a/VirtualMailManager/Config.py Tue Jan 26 19:39:51 2010 +0000 +++ b/VirtualMailManager/Config.py Fri Jan 29 23:56:45 2010 +0000 @@ -140,8 +140,8 @@ return sect_opt def items(self, section): - """returns a ``list`` with key, value ``tuples`` from the given - ``section``: ``[(key, value), …]``""" + """returns an iterable that returns key, value ``tuples`` from the + given ``section``.""" if section in self._sections:# check if the section was parsed d2 = self._sections[section] elif not section in self._cfg: @@ -415,7 +415,7 @@ self._modified = True w_std(_(u'Using configuration file: %s\n') % self.__cfgFileName) for s in sections: - w_std(_(u'* Config section: “%s”') % s ) + w_std(_(u'* Configuration section: “%s”') % s ) for opt, val in self.items(s): failures = 0 while True: diff -r ec2e1df8bb10 -r 9480f2b15129 po/de.po --- a/po/de.po Tue Jan 26 19:39:51 2010 +0000 +++ b/po/de.po Fri Jan 29 23:56:45 2010 +0000 @@ -5,85 +5,90 @@ msgid "" msgstr "" "Project-Id-Version: vmm 0.5.2\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-08-25 06:07+0200\n" +"Report-Msgid-Bugs-To: nev...@us...\n" +"POT-Creation-Date: 2010-01-29 23:22+0100\n" "PO-Revision-Date: 2009-08-25 06:11+0200\n" -"Last-Translator: Pascal Volk <p....@ve...>\n" +"Last-Translator: Pascal Volk <nev...@us...>\n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: VirtualMailManager/Account.py:36 VirtualMailManager/Relocated.py:44 +#. TP: Hm, what quotation marks should be used? +#. If you are unsure have a look at: +#. http://en.wikipedia.org/wiki/Quotation_mark,_non-English_usage +#: VirtualMailManager/Account.py:37 VirtualMailManager/Relocated.py:42 #, python-format msgid "There is already an alias with the address “%s”." msgstr "Es existiert bereits ein Alias mit der Adresse „%s“." -#: VirtualMailManager/Account.py:41 VirtualMailManager/Alias.py:45 +#: VirtualMailManager/Account.py:42 VirtualMailManager/Alias.py:41 #, python-format msgid "There is already a relocated user with the address “%s”." msgstr "Es gibt bereits ein relocated User mit der Adresse „%s“." -#: VirtualMailManager/Account.py:61 VirtualMailManager/Alias.py:61 -#: VirtualMailManager/Domain.py:163 VirtualMailManager/Domain.py:189 -#: VirtualMailManager/Domain.py:220 VirtualMailManager/Relocated.py:60 +#: VirtualMailManager/Account.py:62 VirtualMailManager/Alias.py:57 +#: VirtualMailManager/Domain.py:161 VirtualMailManager/Domain.py:187 +#: VirtualMailManager/Domain.py:218 VirtualMailManager/Relocated.py:58 #, python-format -msgid "The domain “%s” doesn't exist yet." -msgstr "Die Domain „%s“ existiert noch nicht." +msgid "The domain “%s” doesn't exist." +msgstr "Die Domain „%s“ existiert nicht." -#: VirtualMailManager/Account.py:80 +#: VirtualMailManager/Account.py:81 #, python-format msgid "Unknown service “%s”." msgstr "Unbekannter Service „%s“." -#: VirtualMailManager/Account.py:83 VirtualMailManager/Account.py:150 -#: VirtualMailManager/Account.py:178 VirtualMailManager/Account.py:212 +#: VirtualMailManager/Account.py:84 VirtualMailManager/Account.py:157 +#: VirtualMailManager/Account.py:188 VirtualMailManager/Account.py:223 #, python-format -msgid "The account “%s” doesn't exists." +msgid "The account “%s” doesn't exist." msgstr "Der Account „%s“ existiert nicht." -#: VirtualMailManager/Account.py:145 +#: VirtualMailManager/Account.py:152 #, python-format msgid "The account “%s” already exists." msgstr "Der Account „%s“ existiert bereits." -#: VirtualMailManager/Account.py:186 +#. TP: A service (pop3/imap/…) is enabled/usable for a user +#: VirtualMailManager/Account.py:197 msgid "enabled" msgstr "aktiviert" -#: VirtualMailManager/Account.py:188 +#. TP: A service (pop3/imap) isn't enabled/usable for a user +#: VirtualMailManager/Account.py:200 msgid "disabled" msgstr "deaktiviert" -#: VirtualMailManager/Account.py:233 +#: VirtualMailManager/Account.py:244 #, python-format msgid "There are %(count)d aliases with the destination address “%(address)s”." msgstr "Es gibt %(count)d Alias(e) mit der Zieladresse „%(address)s“." -#: VirtualMailManager/Account.py:241 +#: VirtualMailManager/Account.py:252 msgid "uid must be an int/long." msgstr "Die UID muss eine Ganzzahl sein." -#: VirtualMailManager/Account.py:243 +#: VirtualMailManager/Account.py:254 msgid "uid must be greater than 0." msgstr "Die UID muss größer als 0 sein." -#: VirtualMailManager/Account.py:251 +#: VirtualMailManager/Account.py:262 #, python-format msgid "There is no account with the UID “%d”." msgstr "Es existiert kein Account mit der UID „%d“." -#: VirtualMailManager/Alias.py:30 VirtualMailManager/Relocated.py:30 +#: VirtualMailManager/Alias.py:28 VirtualMailManager/Relocated.py:28 msgid "Address and destination are identical." msgstr "Alias- und Ziel-Adresse sind identisch." -#: VirtualMailManager/Alias.py:40 VirtualMailManager/Relocated.py:39 +#: VirtualMailManager/Alias.py:37 VirtualMailManager/Relocated.py:37 #, python-format msgid "There is already an account with address “%s”." msgstr "Es gibt bereits einen Account mit der Adresse „%s“." -#: VirtualMailManager/Alias.py:71 +#: VirtualMailManager/Alias.py:67 #, python-format msgid "" "Can't add new destination to alias “%(address)s”.\n" @@ -96,147 +101,183 @@ "Eine weitere Ziel-Adresse würde diesen Alias unbrauchbar machen.\n" "Tipp: Erhöhen Sie Postfix' virtual_alias_expansion_limit\n" -#: VirtualMailManager/Alias.py:80 -msgid "No destination address for alias denoted." +#: VirtualMailManager/Alias.py:76 +#, fuzzy +msgid "No destination address specified for alias." msgstr "Keine Ziel-Adresse für den Alias angegeben." -#: VirtualMailManager/Alias.py:91 +#: VirtualMailManager/Alias.py:87 #, python-format msgid "The alias “%(a)s” with destination “%(d)s” already exists." msgstr "Der Alias „%(a)s“ mit der Ziel-Adresse „%(d)s“ existiert bereits." -#: VirtualMailManager/Alias.py:106 VirtualMailManager/Alias.py:123 -#, python-format -msgid "The alias “%s” doesn't exists." +#: VirtualMailManager/Alias.py:100 VirtualMailManager/Alias.py:117 +#, fuzzy, python-format +msgid "The alias “%s” doesn't exist." msgstr "Der Alias „%s“ existiert nicht." -#: VirtualMailManager/Alias.py:125 -#, python-format -msgid "The alias “%(a)s” with destination “%(d)s” doesn't exists." +#: VirtualMailManager/Alias.py:119 +#, fuzzy, python-format +msgid "The alias “%(a)s” with destination “%(d)s” doesn't exist." msgstr "Der Alias „%(a)s“ mit der Ziel-Adresse „%(d)s“ existiert nicht." -#: VirtualMailManager/AliasDomain.py:32 +#: VirtualMailManager/AliasDomain.py:30 #, python-format msgid "The domain “%s” is a primary domain." msgstr "Die Domain „%s“ ist eine primäre Domain." -#: VirtualMailManager/AliasDomain.py:37 +#: VirtualMailManager/AliasDomain.py:35 #, python-format msgid "The alias domain “%s” already exists." msgstr "Die Alias-Domain „%s“ existiert bereits." -#: VirtualMailManager/AliasDomain.py:40 VirtualMailManager/AliasDomain.py:70 -msgid "No destination domain for alias domain denoted." +#: VirtualMailManager/AliasDomain.py:38 VirtualMailManager/AliasDomain.py:68 +#, fuzzy +msgid "No destination domain specified for alias domain." msgstr "Keine Ziel-Domain für die Alias-Domain angegeben." -#: VirtualMailManager/AliasDomain.py:43 VirtualMailManager/AliasDomain.py:73 -#, python-format -msgid "The target domain “%s” doesn't exist yet." +#: VirtualMailManager/AliasDomain.py:41 VirtualMailManager/AliasDomain.py:71 +#, fuzzy, python-format +msgid "The target domain “%s” doesn't exist." msgstr "Die Ziel-Domain „%s“ existiert noch nicht." -#: VirtualMailManager/AliasDomain.py:62 +#: VirtualMailManager/AliasDomain.py:60 #, python-format msgid "There is no primary domain for the alias domain “%s”." msgstr "Es gibt keine primäre Domain für die Alias-Domain „%s“." -#: VirtualMailManager/AliasDomain.py:65 VirtualMailManager/AliasDomain.py:76 -#: VirtualMailManager/AliasDomain.py:99 -#, python-format -msgid "The alias domain “%s” doesn't exist yet." +#: VirtualMailManager/AliasDomain.py:63 VirtualMailManager/AliasDomain.py:74 +#: VirtualMailManager/AliasDomain.py:97 +#, fuzzy, python-format +msgid "The alias domain “%s” doesn't exist." msgstr "Die Alias-Domain „%s“ existiert noch nicht." -#: VirtualMailManager/AliasDomain.py:79 +#: VirtualMailManager/AliasDomain.py:77 #, python-format msgid "" "The alias domain “%(alias)s” is already assigned to the domain “%(domain)s”." msgstr "" "Die Alias-Domain „%(alias)s“ ist bereits der Domain „%(domain)s“ zugeordnet." -#: VirtualMailManager/Config.py:102 VirtualMailManager/Config.py:137 +#: VirtualMailManager/Config.py:105 +#, python-format +msgid "Not a boolean: “%s”" +msgstr "" + +#: VirtualMailManager/Config.py:134 +#, python-format +msgid "Bad format: “%s” - expected: section.option" +msgstr "" + +#: VirtualMailManager/Config.py:347 +msgid "Missing options, which have no default value.\n" +msgstr "" + +#: VirtualMailManager/Config.py:348 VirtualMailManager/Config.py:416 #, python-format msgid "Using configuration file: %s\n" msgstr "Verwende Konfigurationsdatei: %s\n" -#: VirtualMailManager/Config.py:106 +#: VirtualMailManager/Config.py:351 #, python-format -msgid "missing section: %s\n" -msgstr "Fehlender Abschnitt: %s\n" +msgid "* Section: %s\n" +msgstr "* Sektion: %s\n" -#: VirtualMailManager/Config.py:108 +#: VirtualMailManager/Config.py:367 #, python-format -msgid "missing options in section %s:\n" -msgstr "Fehlende Optionen im Abschnitt %s:\n" +msgid "“%s” is not a directory" +msgstr "" -#: VirtualMailManager/Config.py:140 +#: VirtualMailManager/Config.py:379 #, python-format -msgid "* Config section: “%s”" -msgstr "* Konfigurations Abschnitt: „%s“" +msgid "“%s” is not a file" +msgstr "„%s“ ist keine Datei." -#: VirtualMailManager/Config.py:143 +#: VirtualMailManager/Config.py:382 #, python-format -msgid "Enter new value for option %(opt)s [%(val)s]: " -msgstr "Neuer Wert für Option %(opt)s [%(val)s]: " +msgid "File is not executable: “%s”" +msgstr "" -#: VirtualMailManager/Domain.py:39 +#: VirtualMailManager/Config.py:408 +#, python-format +msgid "Enter new value for option %(option)s [%(current_value)s]: " +msgstr "Neuer Wert für Option %(option)s [%(current_value)s]: " + +#: VirtualMailManager/Config.py:418 +#, python-format +msgid "* Configuration section: “%s”" +msgstr "* Konfigurations Sektion: „%s“" + +#: VirtualMailManager/Config.py:429 +#, python-format +msgid "Warning: %s" +msgstr "Warnungen: %s" + +#: VirtualMailManager/Config.py:433 +#: VirtualMailManager/VirtualMailManager.py:198 +msgid "Too many failures - try again later." +msgstr "" + +#: VirtualMailManager/Domain.py:37 #, python-format |
|
From: <nev...@us...> - 2010-01-26 19:40:30
|
details: http://hg.localdomain.org/vmm/rev/ec2e1df8bb10 changeset: 177:ec2e1df8bb10 user: Pascal Volk date: Tue Jan 26 19:39:51 2010 +0000 description: man/{,de/}man5: added a note about how to use default settings. man/de/man5: s/Abschnitt*/Sektion*/g diffstat: man/de/man5/vmm.cfg.5.rst | 53 ++++++++++++++++++++++++++++------------------ man/man5/vmm.cfg.5.rst | 22 ++++++++++++++----- 2 files changed, 48 insertions(+), 27 deletions(-) diffs (190 lines): diff -r cc0d79842fdf -r ec2e1df8bb10 man/de/man5/vmm.cfg.5.rst --- a/man/de/man5/vmm.cfg.5.rst Mon Jan 25 03:09:47 2010 +0000 +++ b/man/de/man5/vmm.cfg.5.rst Tue Jan 26 19:39:51 2010 +0000 @@ -7,7 +7,7 @@ --------------------------- :Author: Pascal Volk <nev...@us...> -:Date: 2010-01-25 +:Date: 2010-01-26 :Version: vmm-0.6.0 :Manual group: vmm Manual :Manual section: 5 @@ -24,12 +24,9 @@ ============ **vmm**\(1) liest seine Konfigurationsparameter aus der Datei *vmm.cfg*. -Die Konfigurationsdatei ist in mehrere Abschnitte unterteilt. Jeder Abschnitt -wird mit dem, in eckigen Klammern '**[**' und '**]**' eingefassten, Namen des -Abschnitts eingeleitet, gefolgt von '*Option* = *Wert*' Einträgen:: - - [database] - host = 127.0.0.1 +Die Konfigurationsdatei ist in mehrere Sektionen unterteilt. Jede Sektion +wird mit dem in eckigen Klammern '**[**' und '**]**' eingefassten Namen der +Sektion eingeleitet, gefolgt von '*Option* = *Wert*' Einträgen. Leerräume um das Gleichheitszeichen '=' und am Ende eines Wertes werden ignoriert. @@ -54,6 +51,19 @@ | Zum Beispiel: '**Wort**', '**Hallo Welt**' oder '**/usr/bin/strings**' +Die meisten Optionen haben einen Vorgabewert. Dieser ist nach dem Namen der +Option in Klammern angegebenen. Um den Vorgabewert einer Option zu +verwenden, wird die entsprechende Zeile entweder mit **#** oder **;** +auskommentiert oder die Zeile wird einfach aus der *vmm.cfg* entfernt. + +Eine minimale *vmm.cfg* könnte so aussehen:: + + [database] + user = ich + pass = xxxxxxxx + + [config] + done = true SUCHREIHENFOLGE --------------- @@ -66,14 +76,14 @@ Die zuerst gefundene Datei wird verwendet. -ABSCHNITTE -========== -Im Folgenden werden die Abschnitte der *vmm.cfg* und deren Optionen +SEKTIONEN +========= +Im Folgenden werden die Sektionen der *vmm.cfg* und deren Optionen beschrieben. ACCOUNT ------- -Die Optionen des Abschnitts **account** legen Konto-spezifische +Die Optionen der Sektion **account** legen Konto-spezifische Einstellungen fest. ``delete_directory (Vorgabe: false)`` : *Boolean* @@ -140,8 +150,8 @@ BIN --- -Im **bin**-Abschnitt werden Pfade zu Binaries angegeben, die von -**vmm**\(1) benötigt werden. +In der **bin**-Sektion werden die Pfade zu den von **vmm**\(1) benötigten +Binaries angegeben. ``dovecotpw (Vorgabe: /usr/sbin/dovecotpw)`` : *String* Der absolute Pfad zum dovecotpw Binary. Dieses Binary wird zur @@ -167,8 +177,8 @@ CONFIG ------ -Beim **config**-Abschnitt handelt es sich um einen internen -Steuerungs-Abschnitt. +Bei der **config**-Sektion handelt es sich um einen internen +Steuerungs-Sektion. ``done (Vorgabe: false)`` : *Boolean* Diese Option hat den Wert *false*, wenn **vmm**\(1) zum ersten Mal @@ -187,7 +197,7 @@ DATABASE -------- -Der **database**-Abschnitt wird verwendet, um die für den Datenbankzugriff +Die **database**-Sektion wird verwendet, um die für den Datenbankzugriff benötigten Optionen festzulegen. ``host (Vorgabe: localhost)`` : *String* @@ -212,7 +222,8 @@ DOMAIN ------ -Im **domain**-Abschnitt werden Domain-spezifische Informationen konfiguriert. +In der **domain**-Sektion werden Domain-spezifische Informationen +konfiguriert. ``auto_postmaster (Vorgabe: true)`` : *Boolean* Ist der Wert dieser Option *true*, wird **vmm**\(1) beim Anlegen einer @@ -242,8 +253,8 @@ MAILDIR ------- -Im **maildir**-Abschnitt werden die für die Maildirs erforderlichen Optionen -festgelegt. +In der **maildir**-Sektion werden die für die Maildirs erforderlichen +Optionen festgelegt. ``folders (Vorgabe: Drafts:Sent:Templates:Trash)`` : *String* Eine durch Doppelpunkten getrennte Liste mit Verzeichnisnamen, die @@ -266,7 +277,7 @@ MISC ---- -Im **misc**-Abschnitt werden verschiedene Einstellungen festgelegt. +In der **misc**-Sektion werden verschiedene Einstellungen festgelegt. ``base_directory (Vorgabe: /srv/mail)`` : *String* Alle Domain-Verzeichnisse werden innerhalb dieses Basis-Verzeichnisses @@ -294,7 +305,7 @@ [misc] base_directory = /srv/mail - password_scheme = CRAM-MD5 + password_scheme = PLAIN gid_mail = 8 transport = dovecot: dovecot_version = 11 diff -r cc0d79842fdf -r ec2e1df8bb10 man/man5/vmm.cfg.5.rst --- a/man/man5/vmm.cfg.5.rst Mon Jan 25 03:09:47 2010 +0000 +++ b/man/man5/vmm.cfg.5.rst Tue Jan 26 19:39:51 2010 +0000 @@ -7,7 +7,7 @@ -------------------------- :Author: Pascal Volk <nev...@us...> -:Date: 2010-01-25 +:Date: 2010-01-26 :Version: vmm-0.6.0 :Manual group: vmm Manual :Manual section: 5 @@ -26,10 +26,7 @@ The configuration file is split into multiple sections. A section starts with the section name, enclosed in square brackets '**[**' and '**]**', followed -by '*option* = *value*' pairs:: - - [database] - host = 127.0.0.1 +by '*option* = *value*' pairs. Whitespace around the '=' and at the end of a value is ignored. @@ -51,6 +48,19 @@ | For example '**word**', '**hello world**' or '**/usr/bin/strings**' +Most options have a default value, shown in parentheses after the option's +name. In order to use a option's default setting, comment out the line, +either with a **#** or **;** or simply remove the setting from *vmm.cfg*. + +A minimal *vmm.cfg* would be:: + + [database] + user = me + pass = xxxxxxxx + + [config] + done = true + SEARCH ORDER ------------- By default **vmm**\(1) looks for *vmm.cfg* in the following directories in the @@ -279,7 +289,7 @@ [misc] base_directory = /srv/mail - password_scheme = CRAM-MD5 + password_scheme = PLAIN gid_mail = 8 transport = dovecot: dovecot_version = 11 |
|
From: <nev...@us...> - 2010-01-25 03:10:01
|
details: http://hg.localdomain.org/vmm/rev/cc0d79842fdf changeset: 176:cc0d79842fdf user: Pascal Volk date: Mon Jan 25 03:09:47 2010 +0000 description: man: Added used default values to manual. diffstat: man/de/man5/vmm.cfg.5.rst | 58 +++++++++++++++++++++--------------------- man/man5/vmm.cfg.5.rst | 63 +++++++++++++++++++++++----------------------- vmm.cfg | 6 ++-- 3 files changed, 64 insertions(+), 63 deletions(-) diffs (truncated from 414 to 300 lines): diff -r b241272eb1bd -r cc0d79842fdf man/de/man5/vmm.cfg.5.rst --- a/man/de/man5/vmm.cfg.5.rst Sun Jan 24 09:06:05 2010 +0000 +++ b/man/de/man5/vmm.cfg.5.rst Mon Jan 25 03:09:47 2010 +0000 @@ -7,7 +7,7 @@ --------------------------- :Author: Pascal Volk <nev...@us...> -:Date: 2010-01-18 +:Date: 2010-01-25 :Version: vmm-0.6.0 :Manual group: vmm Manual :Manual section: 5 @@ -76,18 +76,18 @@ Die Optionen des Abschnitts **account** legen Konto-spezifische Einstellungen fest. -``delete_directory`` : *Boolean* +``delete_directory (Vorgabe: false)`` : *Boolean* Bestimmt das Verhalten von **vmm**\(1) beim Löschen eines Kontos. Wenn der Wert dieser Option *true* ist, wird das Home-Verzeichnis des zu löschenden Anwenders rekursiv gelöscht. -``directory_mode`` : *Int* +``directory_mode (Vorgabe: 448)`` : *Int* Zugriffsbits des Home-Verzeichnisses, sowie aller enthaltenen Verzeichnisse, in Dezimal-Schreibweise (Basis 10). | Beispiel: 'drwx------' -> oktal 0700 -> dezimal 448 -``disk_usage`` : *Boolean* +``disk_usage (Vorgabe: false)`` : *Boolean* Legt fest, ob die Festplattenbelegung des Maildirs eines Benutzers jedes Mal mit **du**\(1) ermittelt und mit den Konto-Informationen ausgegeben werden soll. @@ -98,17 +98,17 @@ eines der optionalen Argumente **du** oder **full** an **userinfo** übergeben, um sich die aktuelle Festplattenbelegung anzeigen zu lassen. -``imap`` : *Boolean* +``imap (Vorgabe: true)`` : *Boolean* Bestimmt, ob sich neu angelegte Benutzer per IMAP anmelden können sollen. -``password_length`` : *Int* +``password_length (Vorgabe: 8)`` : *Int* Diese Option legt die Anzahl der Zeichen für automatisch erzeugte Passwörter fest. Alle Werte kleiner als 8 werden auf 8 erhöht. -``pop3`` +``pop3 (Vorgabe: true)`` : *Boolean* Bestimmt, ob sich neu angelegte Benutzer per POP3 anmelden können sollen. -``random_password`` : *Boolean* +``random_password (Vorgabe: false)`` : *Boolean* Mit dieser Option wird bestimmt , ob **vmm**\(1) ein zufälliges Passwort generieren soll, wenn kein Passwort an den **useradd** Unterbefehl übergeben wurde. Ist der Wert dieser Option *false*, wird **vmm** Sie @@ -117,11 +117,11 @@ Sie können die Länge für automatisch generierte Passwörter mit der Option **password_length** konfigurieren. -``sieve`` : *Boolean* +``sieve (Vorgabe: true)`` : *Boolean* Bestimmt, ob sich neu angelegte Benutzer per ManageSieve anmelden können sollen. -``smtp`` : *Boolean* +``smtp (Vorgabe: true)`` : *Boolean* Bestimmt, ob sich neu angelegte Benutzer per SMTP (SMTP AUTH) anmelden können sollen. @@ -143,17 +143,17 @@ Im **bin**-Abschnitt werden Pfade zu Binaries angegeben, die von **vmm**\(1) benötigt werden. -``dovecotpw`` : *String* +``dovecotpw (Vorgabe: /usr/sbin/dovecotpw)`` : *String* Der absolute Pfad zum dovecotpw Binary. Dieses Binary wird zur Hash-Erzeugung verwendet, wenn **misc.password_scheme** einen der nachfolgenden Werte hat: 'SMD5', 'SSHA', 'CRAM-MD5', 'HMAC-MD5', 'LANMAN', 'NTLM' oder 'RPA'. -``du`` : *String* +``du (Vorgabe: /usr/bin/du)`` : *String* Der absolute Pfad zu **du**\(1). Dieses Binary wird verwendet, wenn die Festplattenbelegung eines Kontos ermittelt wird. -``postconf`` : *String* +``postconf (Vorgabe: /usr/sbin/postconf)`` : *String* Der absolute Pfad zu Postfix' **postconf**\(1). Dieses Binary wird verwendet, wenn **vmm**\(1) diverse Postfix-Einstellungen prüft, zum Beispiel das `virtual_alias_expansion_limit`. @@ -170,7 +170,7 @@ Beim **config**-Abschnitt handelt es sich um einen internen Steuerungs-Abschnitt. -``done`` : *Boolean* +``done (Vorgabe: false)`` : *Boolean* Diese Option hat den Wert *false*, wenn **vmm**\(1) zum ersten Mal installiert wurde. Wenn Sie die Datei *vmm.cfg* von Hand editieren, weisen Sie dieser Option abschließend den Wert *true* zu. Wird die @@ -190,16 +190,16 @@ Der **database**-Abschnitt wird verwendet, um die für den Datenbankzugriff benötigten Optionen festzulegen. -``host`` : *String* +``host (Vorgabe: localhost)`` : *String* Der Hostname oder die IP-Adresse des Datenbank-Servers. -``name`` : *String* +``name (Vorgabe: mailsys)`` : *String* Der Name der zu verwendenden Datenbank. -``pass`` : *String* +``pass (Vorgabe: Nichts)`` : *String* Das Passwort des Datenbank-Benutzers. -``user`` : *String* +``user (Vorgabe: Nichts)`` : *String* Der Name des Datenbank-Benutzers. Beispiel:: @@ -214,21 +214,21 @@ ------ Im **domain**-Abschnitt werden Domain-spezifische Informationen konfiguriert. -``auto_postmaster`` : *Boolean* +``auto_postmaster (Vorgabe: true)`` : *Boolean* Ist der Wert dieser Option *true*, wird **vmm**\(1) beim Anlegen einer Domain automatisch einen postmaster-Account erstellen. -``delete_directory`` : *Boolean* +``delete_directory (Vorgabe: false)`` : *Boolean* Bestimmt, ob beim Löschen einer Domain das Verzeichnis einer Domain, inklusive aller Anwender-Verzeichnisse, rekursiv gelöscht werden soll. -``directory_mode`` : *Int* +``directory_mode (Vorgabe: 504)`` : *Int* Zugriffsbits des Domain-Verzeichnisses in Dezimal-Schreibweise (Basis 10). | Beispiel: 'drwxrwx---' -> oktal 0770 -> dezimal 504 -``force_deletion`` : *Boolean* +``force_deletion (Vorgabe: false)`` : *Boolean* Erzwingt das Löschen aller zugeordneten Konten und Aliase beim Löschen einer Domain. @@ -245,7 +245,7 @@ Im **maildir**-Abschnitt werden die für die Maildirs erforderlichen Optionen festgelegt. -``folders`` : *String* +``folders (Vorgabe: Drafts:Sent:Templates:Trash)`` : *String* Eine durch Doppelpunkten getrennte Liste mit Verzeichnisnamen, die innerhalb des Maildirs erstellt werden sollen. Sollen innerhalb des Maildirs keine Verzeichnisse angelegt werden, ist dieser Optionen ein @@ -254,7 +254,7 @@ Sollen Verzeichnisse mit Unterverzeichnissen angelegt werden, ist ein einzelner Punkt ('**.**') als Separator zu verwenden. -``name`` : *String* +``name (Vorgabe: Maildir)`` : *String* Der Standard-Name des Maildir-Verzeichnisses im Verzeichnis des jeweiligen Anwenders. @@ -268,22 +268,22 @@ ---- Im **misc**-Abschnitt werden verschiedene Einstellungen festgelegt. -``base_directory`` : *String* +``base_directory (Vorgabe: /srv/mail)`` : *String* Alle Domain-Verzeichnisse werden innerhalb dieses Basis-Verzeichnisses angelegt. -``password_scheme`` : *String* +``password_scheme (Vorgabe: CRAM-MD5)`` : *String* Das zu verwendende Passwort-Schema (siehe auch: **dovecotpw -l**). -``gid_mail`` : *Int* +``gid_mail (Vorgabe: 8)`` : *Int* Die numerische Gruppen-ID der Gruppe mail, bzw. der Gruppe aus `mail_privileged_group` der Datei *dovecot.conf*. -``transport`` : *String* +``transport (Vorgabe: dovecot:)`` : *String* Der Standard-Transport aller Domains und Konten. Siehe auch: **transport**\(5) -``dovecot_version`` : *Int* +``dovecot_version (Vorgabe: 12)`` : *Int* Die verketteten Major- und Minor-Teile der eingesetzten Dovecot-Version (siehe: **dovecot --version**). diff -r b241272eb1bd -r cc0d79842fdf man/man5/vmm.cfg.5.rst --- a/man/man5/vmm.cfg.5.rst Sun Jan 24 09:06:05 2010 +0000 +++ b/man/man5/vmm.cfg.5.rst Mon Jan 25 03:09:47 2010 +0000 @@ -7,7 +7,7 @@ -------------------------- :Author: Pascal Volk <nev...@us...> -:Date: 2010-01-18 +:Date: 2010-01-25 :Version: vmm-0.6.0 :Manual group: vmm Manual :Manual section: 5 @@ -71,18 +71,18 @@ The options in the section **account** are used to specify user account related settings. -``delete_directory`` : *Boolean* +``delete_directory (default: false)`` : *Boolean* Determines the behavior of **vmm**\(1) when an account is deleted. If this option is set to *true* the user's home directory will be deleted recursively. -``directory_mode`` : *Int* +``directory_mode (default: 448)`` : *Int* Access mode for a user's home directory and all directories inside. The value has to be specified in decimal (base 10) notation. | For example: 'drwx------' -> octal 0700 -> decimal 448 -``disk_usage`` : *Boolean* +``disk_usage (default: false)`` : *Boolean* Determines whether the disk usage of a user's Maildir always should be summarized, using **du**\(1), and displayed with account information. @@ -92,17 +92,18 @@ **du** or **full**, in order to display the current disk usage of an account. -``imap`` : *Boolean* +``imap (default: true)`` : *Boolean* Determines whether a newly created user can log in via IMAP. -``password_length`` : *Int* - Determines how many characters and/or numbers should be used for random - generated passwords. Any value less than 8 will be increased to 8. +``password_length (default: 8)`` : *Int* + Determines how many characters and/or numbers should be used for + randomly generated passwords. Any value less than 8 will be + increased to 8. -``pop3`` : *Boolean* +``pop3 (default: true)`` : *Boolean* Determines whether a newly created user can log in via POP3. -``random_password`` : *Boolean* +``random_password (default: false)`` : *Boolean* Determines whether **vmm** should generate a random password when no password was given for the **useradd** subcommand. If this option is set to *false* **vmm** will prompt you to enter a password for the new @@ -111,10 +112,10 @@ You can specify the password length of generated passwords with the **password_length** option. -``sieve`` : *Boolean* +``sieve (default: true)`` : *Boolean* Determines whether a newly created user can log in via ManageSieve. -``smtp`` : *Boolean* +``smtp (default: true)`` : *Boolean* Determines whether a newly created user can log in via SMTP (SMTP AUTH). Example:: @@ -135,16 +136,16 @@ The **bin** section is used to specify some paths to some binaries required by **vmm**\(1). -``dovecotpw`` : *String* +``dovecotpw (default: /usr/sbin/dovecotpw)`` : *String* The absolute path to the dovecotpw binary. This binary is used to generate a password hash, if **misc.password_scheme** is set to one of 'SMD5', 'SSHA', 'CRAM-MD5', 'HMAC-MD5', 'LANMAN', 'NTLM' or 'RPA'. -``du`` : *String* +``du (default: /usr/bin/du)`` : *String* The absolute path to **du**\(1). This binary is used to summarize the disk usage of a user's Maildir. -``postconf`` : *String* +``postconf (default: /usr/sbin/postconf)`` : *String* The absolute path to Postfix' **postconf**\(1). This binary is required when **vmm**\(1) has to check for some Postfix settings, e.g. `virtual_alias_expansion_limit`. @@ -160,7 +161,7 @@ ------ The **config** section is an internal used control section. -``done`` : *Boolean* +``done (default: false)`` : *Boolean* This option is set to *false* when **vmm**\(1) is installed for the first time. When you edit *vmm.cfg*, set this option to *true*. This option is also set to *true* when you configure **vmm**\(1) with the command **vmm @@ -179,16 +180,16 @@ The **database** section is used to specify some options required to connect to the database. -``host`` : *String* +``host (default: localhost)`` : *String* |
|
From: <nev...@us...> - 2010-01-24 09:06:23
|
details: http://hg.localdomain.org/vmm/rev/b241272eb1bd changeset: 175:b241272eb1bd user: Pascal Volk date: Sun Jan 24 09:06:05 2010 +0000 description: VMM/VMM: allow configure subcommand also with missing settings. Removed method VirtualMailManager.setupIsDone() VMM/Config: Config.load() added 'finally' clause. diffstat: VirtualMailManager/Config.py | 5 +++-- VirtualMailManager/VirtualMailManager.py | 15 +++------------ vmm | 2 +- 3 files changed, 7 insertions(+), 15 deletions(-) diffs (70 lines): diff -r 974bafa59330 -r b241272eb1bd VirtualMailManager/Config.py --- a/VirtualMailManager/Config.py Sun Jan 24 06:40:38 2010 +0000 +++ b/VirtualMailManager/Config.py Sun Jan 24 09:06:05 2010 +0000 @@ -332,9 +332,10 @@ self.__cfgFile = open(self.__cfgFileName, 'r') self.readfp(self.__cfgFile) except (MissingSectionHeaderError, ParsingError), e: - self.__cfgFile.close() raise VMMConfigException(str(e), ERR.CONF_ERROR) - self.__cfgFile.close() + finally: + if not self.__cfgFile is None and not self.__cfgFile.closed: + self.__cfgFile.close() def check(self): """Performs a configuration check. diff -r 974bafa59330 -r b241272eb1bd VirtualMailManager/VirtualMailManager.py --- a/VirtualMailManager/VirtualMailManager.py Sun Jan 24 06:40:38 2010 +0000 +++ b/VirtualMailManager/VirtualMailManager.py Sun Jan 24 09:06:05 2010 +0000 @@ -49,11 +49,11 @@ if self.__chkCfgFile(): self.__Cfg = Cfg(self.__cfgFileName) self.__Cfg.load() + if not os.sys.argv[1] in ['cf', 'configure']: self.__Cfg.check() + self.__chkenv() self.__scheme = self.__Cfg.dget('misc.password_scheme') self._postconf = Postconf(self.__Cfg.dget('bin.postconf')) - if not os.sys.argv[1] in ['cf', 'configure']: - self.__chkenv() def __findCfgFile(self): for path in ['/root', '/usr/local/etc', '/etc']: @@ -436,15 +436,6 @@ def cfgSet(self, option, value): return self.__Cfg.set(option, value) - def setupIsDone(self): - """Checks if vmm is configured, returns bool""" - try: - return self.__Cfg.dget('config.done') - except ValueError, e: - raise VMMConfigException(_(u"""Configuration error: "%s" -(in section "config", option "done") see also: vmm.cfg(5)\n""") % str(e), - ERR.CONF_ERROR) - def configure(self, section=None): """Starts interactive configuration. @@ -462,7 +453,7 @@ self.__Cfg.configure([section]) else: raise VMMException(_(u"Invalid section: “%s”") % section, - ERR.INVALID_SECTION) + ERR.INVALID_SECTION) def domainAdd(self, domainname, transport=None): dom = self.__getDomain(domainname, transport) diff -r 974bafa59330 -r b241272eb1bd vmm --- a/vmm Sun Jan 24 06:40:38 2010 +0000 +++ b/vmm Sun Jan 24 09:06:05 2010 +0000 @@ -476,7 +476,7 @@ vmm = get_vmm() try: - need_setup = not vmm.setupIsDone() + need_setup = not vmm.cfgDget('config.done') if argv[1] in (u'cf', u'configure') or need_setup: configure() elif argv[1] in (u'da', u'domainadd'): |
|
From: <nev...@us...> - 2010-01-24 06:41:26
|
details: http://hg.localdomain.org/vmm/rev/974bafa59330 changeset: 174:974bafa59330 user: Pascal Volk date: Sun Jan 24 06:40:38 2010 +0000 description: VMM/Config: reworked configuration handling. Implemented LazyConfig(RawConfigParser) and LazyConfigOption(object) Rewrote Config class: * use default values and added some validation stuff * removed attributes: __VMMsections and __changes * replaced methods __chkSections() and __chkOptions() with __chkCfg VMM/VMM: Adjusted to reworked Config class. * removed attribute __cfgSections * removed methods: cfgGetBoolean(), cfgGetInt(), cfgGetString() * added methods: cfgDget(), cfgPget(), cfgSet() VMM/__init__: added function get_unicode() vmm: Adjusted to replaced methods in VMM/VMM. diffstat: VirtualMailManager/Config.py | 524 +++++++++++++++++++++++------- VirtualMailManager/VirtualMailManager.py | 103 ++--- VirtualMailManager/__init__.py | 8 +- vmm | 4 +- 4 files changed, 461 insertions(+), 178 deletions(-) diffs (truncated from 913 to 300 lines): diff -r c0e2c7687dd3 -r 974bafa59330 VirtualMailManager/Config.py --- a/VirtualMailManager/Config.py Fri Jan 22 04:31:38 2010 +0000 +++ b/VirtualMailManager/Config.py Sun Jan 24 06:40:38 2010 +0000 @@ -2,73 +2,326 @@ # Copyright (c) 2007 - 2010, Pascal Volk # See COPYING for distribution information. -"""Configuration class for read, modify and write the -configuration from Virtual Mail Manager. +"""vmm's configuration module for simplified configuration access. +This module defines a few classes: + +``LazyConfig`` + This class provides the following additonal methods + + * `LazyConfig.pget()` + polymorphic getter which returns the value with the appropriate + type. + * `LazyConfig.dget()` + like *pget()*, but checks additonal for default values in + `LazyConfig._cfg`. + * `LazyConfig.set()` + like `RawConfigParser.set()`, but converts the new value to the + appropriate type/class and optional validates the new value. + * `LazyConfig.bool_new()` + converts data from raw_input into boolean values. + * `LazyConfig.get_boolean()` + like `RawConfigParser.getboolean()`, but doesn't fail on real + `bool` values. + +``Config`` + The Config class used by vmm. + +``LazyConfigOption`` + The class for the configuration objects in the ``Config`` class' + ``_cfg`` dictionary. """ + from shutil import copy2 -from ConfigParser import ConfigParser, MissingSectionHeaderError, ParsingError +from ConfigParser import (Error, MissingSectionHeaderError, NoOptionError, + NoSectionError, ParsingError, RawConfigParser) from cStringIO import StringIO -from __main__ import ENCODING, ERR, w_std +from __main__ import os, ENCODING, ERR, get_unicode, w_std from Exceptions import VMMConfigException -class Config(ConfigParser): + +class BadOptionError(Error): + """Raised when a option isn't in the format 'section.option'.""" + pass + + +class ConfigValueError(Error): + """Raised when creating or validating of new values fails.""" + pass + + +class NoDefaultError(Error): + """Raised when the requested option has no default value.""" + + def __init__(self, section, option): + Error.__init__(self, 'Option %r in section %r has no default value' %( + option, section)) + + +class LazyConfig(RawConfigParser): + """The **lazy** derivate of the `RawConfigParser`. + + There are two additional getters: + + `LazyConfig.pget()` + The polymorphic getter, which returns a option's value with the + appropriate type. + `LazyConfig.dget()` + Like `LazyConfig.pget()`, but returns the option's default, from + `LazyConfig._cfg['sectionname']['optionname'].default`, if the + option is not configured in a ini-like configuration file. + + + `LazyConfig.set()` differs from ``RawConfigParser``'s ``set()`` method. + ``LazyConfig.set()`` takes the ``section`` and ``option`` arguments + combined to a single string in the form + "``section``\ **.**\ ``option``". + """ + def __init__(self): + RawConfigParser.__init__(self) + self._modified = False + self._cfg = { + 'sectionname': { + 'optionname': LazyConfigOption(int, 1, self.getint) + } + } + """sample _cfg dictionary. Create your own in your derived class.""" + + def bool_new(self, value): + """Converts the string `value` into a `bool` and returns it. + + | '1', 'on', 'yes' and 'true' will become ``True`` + | '0', 'off', 'no' and 'false' will become ``False`` + + Throws a `ConfigValueError` for all other values, except ``bool``\ s. + """ + if isinstance(value, bool): + return value + if value.lower() in self._boolean_states: + return self._boolean_states[value.lower()] + else: + raise ConfigValueError(_(u'Not a boolean: “%s”') % \ + get_unicode(value)) + + def get_boolean(self, section, option): + # if the setting was not written to the configuration file, it may + # be still a boolean value - lets see + if self._modified: + tmp = self.get(section, option) + if isinstance(tmp, bool): + return tmp + return self.getboolean(section, option) + + def __get_section_option(self, section_option): + """splits ``section_option`` (section\ **.**\ option) in two parts + and returns them as list ``[section, option]``, if: + + * it likes the format of ``section_option`` + * the ``section`` is known + * the ``option`` is known + + Else one of the following exceptions will be thrown: + + * `BadOptionError` + * `NoSectionError` + * `NoOptionError` + """ + sect_opt = section_option.lower().split('.') + if len(sect_opt) != 2:# do we need a regexp to check the format? + raise BadOptionError( + _(u'Bad format: “%s” - expected: section.option') % \ + get_unicode(section_option)) + if not sect_opt[0] in self._cfg: + raise NoSectionError(sect_opt[0]) + if not sect_opt[1] in self._cfg[sect_opt[0]]: + raise NoOptionError(sect_opt[1], sect_opt[0]) + return sect_opt + + def items(self, section): + """returns a ``list`` with key, value ``tuples`` from the given + ``section``: ``[(key, value), …]``""" + if section in self._sections:# check if the section was parsed + d2 = self._sections[section] + elif not section in self._cfg: + raise NoSectionError(section) + else: + return ((k, self._cfg[section][k].default) \ + for k in self._cfg[section].iterkeys()) + # still here? Get defaults and merge defaults with configured setting + d = dict((k, self._cfg[section][k].default) \ + for k in self._cfg[section].iterkeys()) + d.update(d2) + if '__name__' in d: del d['__name__'] + return d.iteritems() + + def dget(self, option): + """Returns the value of the `option`. + + If the option could not be found in the configuration file, the + configured default value, from ``LazyConfig._cfg`` will be + returned. + + Arguments: + + `option` : string + the configuration option in the form + "``section``\ **.**\ ``option``" + + Throws a `NoDefaultError`, if no default value was passed to + `LazyConfigOption.__init__()` for the `option`. + """ + section, option = self.__get_section_option(option) + try: + return self._cfg[section][option].getter(section, option) + except (NoSectionError, NoOptionError): + if not self._cfg[section][option].default is None: + return self._cfg[section][option].default + else: + raise NoDefaultError(section, option) + + def pget(self, option): + """Returns the value of the `option`.""" + section, option = self.__get_section_option(option) + return self._cfg[section][option].getter(section, option) + + def set(self, option, value): + """Set the value of an option. + + Throws a ``ValueError`` if `value` couldn't be converted to + ``LazyConfigOption.cls``""" + section, option = self.__get_section_option(option) + val = self._cfg[section][option].cls(value) + if not self._cfg[section][option].validate is None: + val = self._cfg[section][option].validate(val) + if not RawConfigParser.has_section(self, section): + self.add_section(section) + RawConfigParser.set(self, section, option, val) + self._modified = True + + def has_section(self, section): + """Checks if ``section`` is a known configuration section.""" + return section.lower() in self._cfg + + def has_option(self, option): + """Checks if the option (section\ **.**\ option) is a known + configuration option.""" + try: + self.__get_section_option(option) + return True + except(BadOptionError, NoSectionError, NoOptionError): + return False + + + +class LazyConfigOption(object): + """A simple container class for configuration settings. + + ``LazyConfigOption`` instances are required by `LazyConfig` instances, + and instances of classes derived from ``LazyConfig``, like the + `Config` class. + """ + __slots__ = ('cls', 'default', 'getter', 'validate') + + def __init__(self, cls, default, getter, validate=None): + """Creates a new ``LazyConfigOption`` instance. + + Arguments: + + ``cls`` : type + The class/type of the option's value + ``default`` + Default value of the option. Use ``None`` if the option should + not have a default value. + ``getter`` : callable + A method's name of `RawConfigParser` and derived classes, to + get a option's value, e.g. `self.getint`. + ``validate`` : NoneType or a callable + None or any method, that takes one argument, in order to check + the value, when `LazyConfig.set()` is called. + """ + self.cls = cls + """The class of the option's value e.g. `str`, `unicode` or `bool`""" + self.default = default + """The option's default value, may be ``None``""" + if callable(getter): + self.getter = getter + """The getter method to get the option's value""" + else: + raise TypeError('getter has to be a callable, got a %r'\ + % getter.__class__.__name__) + if validate is None or callable(validate): + self.validate = validate + """A method to validate the value""" + else: + raise TypeError('validate has to be callable or None, got a %r'\ + % validate.__class__.__name__) + + +class Config(LazyConfig): """This class is for reading and modifying vmm's configuration file.""" def __init__(self, filename): """Creates a new Config instance Arguments: - filename -- path to the configuration file + + ``filename`` + path to the configuration file """ - ConfigParser.__init__(self) + LazyConfig.__init__(self) self.__cfgFileName = filename self.__cfgFile = None - self.__VMMsections = ('account', 'bin', 'database', 'domain', - 'maildir', 'misc', 'config') - self.__changes = False self.__missing = {} - self.__dbopts = [ - ['host', 'localhot'], - ['user', 'vmm'], - ['pass', 'your secret password'], - ['name', 'mailsys'] - ] - self.__mdopts = [ - ['name', 'Maildir'], - ['folders', 'Drafts:Sent:Templates:Trash'], - ] - self.__accountopts = [ |
|
From: <nev...@us...> - 2010-01-22 04:32:15
|
details: http://hg.localdomain.org/vmm/rev/c0e2c7687dd3 changeset: 173:c0e2c7687dd3 user: Pascal Volk date: Fri Jan 22 04:31:38 2010 +0000 description: branch merge |
|
From: <nev...@us...> - 2010-01-22 04:23:42
|
details: http://hg.localdomain.org/vmm/rev/6526072ec709 changeset: 172:6526072ec709 user: Pascal Volk date: Fri Jan 22 04:22:59 2010 +0000 description: VMM/Config: Fixed error handling of missing sections in vmm.cfg. diffstat: VirtualMailManager/Config.py | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diffs (11 lines): diff -r 0ac9ef587769 -r 6526072ec709 VirtualMailManager/Config.py --- a/VirtualMailManager/Config.py Sat Jan 02 15:45:12 2010 +0000 +++ b/VirtualMailManager/Config.py Fri Jan 22 04:22:59 2010 +0000 @@ -151,6 +151,7 @@ for s in self.__VMMsections: if not self.has_section(s): self.__missing[s] = [True] + errors = True elif not self.__chkOptions(s): errors = True return not errors |
|
From: <nev...@us...> - 2010-01-22 04:01:23
|
details: http://hg.localdomain.org/vmm/rev/6f8ac86d1611 changeset: 171:6f8ac86d1611 user: Pascal Volk date: Fri Jan 22 04:00:48 2010 +0000 description: VMM/Config: Fixed error handling of missing sections in vmm.cfg. diffstat: VirtualMailManager/Config.py | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diffs (11 lines): diff -r d9ca5c46c1fa -r 6f8ac86d1611 VirtualMailManager/Config.py --- a/VirtualMailManager/Config.py Mon Jan 18 18:34:48 2010 +0000 +++ b/VirtualMailManager/Config.py Fri Jan 22 04:00:48 2010 +0000 @@ -154,6 +154,7 @@ for s in self.__VMMsections: if not self.has_section(s): self.__missing[s] = [True] + errors = True elif not self.__chkOptions(s): errors = True return not errors |
|
From: <nev...@us...> - 2010-01-18 18:35:34
|
details: http://hg.localdomain.org/vmm/rev/d9ca5c46c1fa changeset: 170:d9ca5c46c1fa user: Pascal Volk date: Mon Jan 18 18:34:48 2010 +0000 description: man: reworded some parts. diffstat: TODO | 5 +++++ man/de/man5/vmm.cfg.5 | 40 ++++++++++++++++++---------------------- man/de/man5/vmm.cfg.5.rst | 41 +++++++++++++++++++---------------------- man/man5/vmm.cfg.5 | 9 ++------- man/man5/vmm.cfg.5.rst | 6 ++---- 5 files changed, 46 insertions(+), 55 deletions(-) diffs (281 lines): diff -r a72908248153 -r d9ca5c46c1fa TODO --- a/TODO Mon Jan 18 03:23:50 2010 +0000 +++ b/TODO Mon Jan 18 18:34:48 2010 +0000 @@ -1,3 +1,8 @@ +Config + cfs - configset sect.opt val + cfg - configget sect.opt + + ds - domainservices: smtp pop imap sieve??? - Aliases - avoid looping aliases diff -r a72908248153 -r d9ca5c46c1fa man/de/man5/vmm.cfg.5 --- a/man/de/man5/vmm.cfg.5 Mon Jan 18 03:23:50 2010 +0000 +++ b/man/de/man5/vmm.cfg.5 Mon Jan 18 18:34:48 2010 +0000 @@ -99,8 +99,8 @@ Die zuerst gefundene Datei wird verwendet. .SH ABSCHNITTE .sp -Dieser Abschnitt beschreibt alle Abschnitte, sowie deren Optionen, der -\fIvmm.cfg\fP. +Im Folgenden werden die Abschnitte der \fIvmm.cfg\fP und deren Optionen +beschrieben. .SS ACCOUNT .sp Die Optionen des Abschnitts \fBaccount\fP legen Konto\-spezifische @@ -145,9 +145,8 @@ .B \fCpassword_length\fP \fIInt\fP .sp -Legt fest, wie viele Zahlen und/oder Buchstaben für ein automatisch -erzeugtes Passwort verwendet werden sollen. Alle Werte kleiner als 8 -werden auf 8 erhöht. +Diese Option legt die Anzahl der Zeichen für automatisch erzeugte +Passwörter fest. Alle Werte kleiner als 8 werden auf 8 erhöht. .TP .B \fCpop3\fP .sp @@ -156,7 +155,7 @@ .B \fCrandom_password\fP \fIBoolean\fP .sp -Mit dieser Option bestimmen Sie, ob \fBvmm\fP(1) ein zufälliges Passwort +Mit dieser Option wird bestimmt , ob \fBvmm\fP(1) ein zufälliges Passwort generieren soll, wenn kein Passwort an den \fBuseradd\fP Unterbefehl übergeben wurde. Ist der Wert dieser Option \fIfalse\fP, wird \fBvmm\fP Sie auffordern, ein Passwort für den neun Account einzugeben. @@ -240,14 +239,14 @@ .B \fCdone\fP \fIBoolean\fP .sp -Diese Option hat den den Wert \fIfalse\fP, wenn \fBvmm\fP(1) zum ersten Mal +Diese Option hat den Wert \fIfalse\fP, wenn \fBvmm\fP(1) zum ersten Mal installiert wurde. Wenn Sie die Datei \fIvmm.cfg\fP von Hand editieren, weisen Sie dieser Option abschließend den Wert \fItrue\fP zu. Wird die Konfiguration über das Kommando \fBvmm configure\fP angepasst, wird der Wert dieser Option automatisch auf \fItrue\fP gesetzt. .sp -Sollte diese Option den Wert \fIfalse\fP zugewiesen haben, so startet -\fBvmm\fP(1) beim nächsten Aufruf im interaktiven Konfigurations\-Modus. +Ist der Wert dieser Option \fIfalse\fP, so startet \fBvmm\fP(1) beim +nächsten Aufruf im interaktiven Konfigurations\-Modus. .UNINDENT .sp Beispiel: @@ -272,7 +271,7 @@ .B \fCname\fP \fIString\fP .sp -Name der zu verwendenden Datenbank. +Der Name der zu verwendenden Datenbank. .TP .B \fCpass\fP \fIString\fP @@ -304,9 +303,8 @@ .B \fCauto_postmaster\fP \fIBoolean\fP .sp -Setzen Sie den Wert dieser Option auf \fItrue\fP, wenn \fBvmm\fP(1) -automatisch einen postmaster\-Account erstellen soll, wenn Sie eine neue -Domain anlegen. +Ist der Wert dieser Option \fItrue\fP, wird \fBvmm\fP(1) beim Anlegen einer +Domain automatisch einen postmaster\-Account erstellen. .TP .B \fCdelete_directory\fP \fIBoolean\fP @@ -327,8 +325,7 @@ .B \fCforce_deletion\fP \fIBoolean\fP .sp -Legt fest, ob beim Löschen einer Domain alle vorhanden Konten und/oder -Aliase, ohne Nachfrage, gelöscht werden sollen. +Erzwingt das Löschen von Konten und Aliase beim Löschen einer Domain. .UNINDENT .sp Beispiel: @@ -356,14 +353,14 @@ Maildirs keine Verzeichnisse angelegt werden, ist dieser Optionen ein einzelner Doppelpunkt (\(aq\fB:\fP\(aq) als Wert zuzuweisen. .sp -Wenn Sie Verzeichnisse mit Unterverzeichnissen anlegen wollen, -verwendenden Sie einen einzelnen Punkt (\(aq\fB.\fP\(aq) als Separator. +Sollen Verzeichnisse mit Unterverzeichnissen angelegt werden, ist ein +einzelner Punkt (\(aq\fB.\fP\(aq) als Separator zu verwenden. .TP .B \fCname\fP \fIString\fP .sp -Standard\-Name des Maildir\-Verzeichnisses im Verzeichnis des jeweiligen -Anwenders. +Der Standard\-Name des Maildir\-Verzeichnisses im Verzeichnis des +jeweiligen Anwenders. .UNINDENT .sp Beispiel: @@ -409,9 +406,8 @@ Die verketteten Major\- und Minor\-Teile der eingesetzten Dovecot\-Version (siehe: \fBdovecot \-\-version\fP). .sp -Diese Option beeinflusst diverse Datenbankzugriffe. Da es zwischen -Dovecot v1.1.x und v1.2.x einige Änderungen gab. Zum Beispiel \fB11\fP, -falls \fBdovecot \-\-version\fP den Wert 1.1.18 ausgibt. +Wenn das Kommando \fBdovecot \-\-version\fP zum Beispiel \fI1.1.18\fP ausgibt, +ist dieser Option der Wert \fB11\fP zuzuweisen. .UNINDENT .sp Beispiel: diff -r a72908248153 -r d9ca5c46c1fa man/de/man5/vmm.cfg.5.rst --- a/man/de/man5/vmm.cfg.5.rst Mon Jan 18 03:23:50 2010 +0000 +++ b/man/de/man5/vmm.cfg.5.rst Mon Jan 18 18:34:48 2010 +0000 @@ -68,8 +68,8 @@ ABSCHNITTE ========== -Dieser Abschnitt beschreibt alle Abschnitte, sowie deren Optionen, der -*vmm.cfg*. +Im Folgenden werden die Abschnitte der *vmm.cfg* und deren Optionen +beschrieben. ACCOUNT ------- @@ -102,15 +102,14 @@ Bestimmt, ob sich neu angelegte Benutzer per IMAP anmelden können sollen. ``password_length`` : *Int* - Legt fest, wie viele Zahlen und/oder Buchstaben für ein automatisch - erzeugtes Passwort verwendet werden sollen. Alle Werte kleiner als 8 - werden auf 8 erhöht. + Diese Option legt die Anzahl der Zeichen für automatisch erzeugte + Passwörter fest. Alle Werte kleiner als 8 werden auf 8 erhöht. ``pop3`` Bestimmt, ob sich neu angelegte Benutzer per POP3 anmelden können sollen. ``random_password`` : *Boolean* - Mit dieser Option bestimmen Sie, ob **vmm**\(1) ein zufälliges Passwort + Mit dieser Option wird bestimmt , ob **vmm**\(1) ein zufälliges Passwort generieren soll, wenn kein Passwort an den **useradd** Unterbefehl übergeben wurde. Ist der Wert dieser Option *false*, wird **vmm** Sie auffordern, ein Passwort für den neun Account einzugeben. @@ -172,14 +171,14 @@ Steuerungs-Abschnitt. ``done`` : *Boolean* - Diese Option hat den den Wert *false*, wenn **vmm**\(1) zum ersten Mal + Diese Option hat den Wert *false*, wenn **vmm**\(1) zum ersten Mal installiert wurde. Wenn Sie die Datei *vmm.cfg* von Hand editieren, weisen Sie dieser Option abschließend den Wert *true* zu. Wird die Konfiguration über das Kommando **vmm configure** angepasst, wird der Wert dieser Option automatisch auf *true* gesetzt. - Sollte diese Option den Wert *false* zugewiesen haben, so startet - **vmm**\(1) beim nächsten Aufruf im interaktiven Konfigurations-Modus. + Ist der Wert dieser Option *false*, so startet **vmm**\(1) beim + nächsten Aufruf im interaktiven Konfigurations-Modus. Beispiel:: @@ -195,7 +194,7 @@ Der Hostname oder die IP-Adresse des Datenbank-Servers. ``name`` : *String* - Name der zu verwendenden Datenbank. + Der Name der zu verwendenden Datenbank. ``pass`` : *String* Das Passwort des Datenbank-Benutzers. @@ -216,9 +215,8 @@ Im **domain**-Abschnitt werden Domain-spezifische Informationen konfiguriert. ``auto_postmaster`` : *Boolean* - Setzen Sie den Wert dieser Option auf *true*, wenn **vmm**\(1) - automatisch einen postmaster-Account erstellen soll, wenn Sie eine neue - Domain anlegen. + Ist der Wert dieser Option *true*, wird **vmm**\(1) beim Anlegen einer + Domain automatisch einen postmaster-Account erstellen. ``delete_directory`` : *Boolean* Bestimmt, ob beim Löschen einer Domain das Verzeichnis einer Domain, @@ -231,8 +229,8 @@ | Beispiel: 'drwxrwx---' -> oktal 0770 -> dezimal 504 ``force_deletion`` : *Boolean* - Legt fest, ob beim Löschen einer Domain alle vorhanden Konten und/oder - Aliase, ohne Nachfrage, gelöscht werden sollen. + Erzwingt das Löschen aller zugeordneten Konten und Aliase beim Löschen + einer Domain. Beispiel:: @@ -253,12 +251,12 @@ Maildirs keine Verzeichnisse angelegt werden, ist dieser Optionen ein einzelner Doppelpunkt ('**:**') als Wert zuzuweisen. - Wenn Sie Verzeichnisse mit Unterverzeichnissen anlegen wollen, - verwendenden Sie einen einzelnen Punkt ('**.**') als Separator. + Sollen Verzeichnisse mit Unterverzeichnissen angelegt werden, ist ein + einzelner Punkt ('**.**') als Separator zu verwenden. ``name`` : *String* - Standard-Name des Maildir-Verzeichnisses im Verzeichnis des jeweiligen - Anwenders. + Der Standard-Name des Maildir-Verzeichnisses im Verzeichnis des + jeweiligen Anwenders. Beispiel:: @@ -289,9 +287,8 @@ Die verketteten Major- und Minor-Teile der eingesetzten Dovecot-Version (siehe: **dovecot --version**). - Diese Option beeinflusst diverse Datenbankzugriffe. Da es zwischen - Dovecot v1.1.x und v1.2.x einige Änderungen gab. Zum Beispiel **11**, - falls **dovecot --version** den Wert 1.1.18 ausgibt. + Wenn das Kommando **dovecot --version** zum Beispiel *1.1.18* ausgibt, + ist dieser Option der Wert **11** zuzuweisen. Beispiel:: diff -r a72908248153 -r d9ca5c46c1fa man/man5/vmm.cfg.5 --- a/man/man5/vmm.cfg.5 Mon Jan 18 03:23:50 2010 +0000 +++ b/man/man5/vmm.cfg.5 Mon Jan 18 18:34:48 2010 +0000 @@ -30,9 +30,6 @@ .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.\" to create a man page strip the next part: -.\" rst2man --strip-elements-with-class=htmlout in.rst out -. .SH SYNOPSIS .sp vmm.cfg @@ -396,10 +393,8 @@ The concatenated major and minor version number of the currently used Dovecot version. (see: \fBdovecot \-\-version\fP). .sp -This option affects various database operations. There are some -differences between Dovecot v1.1.x and v1.2.x. For example, when the -command \fBdovecot \-\-version\fP shows 1.1.18, set the value of this option -to \fB11\fP. +When, for example, the command \fBdovecot \-\-version\fP prints \fI1.1.18\fP, set +the value of this option to \fB11\fP. .UNINDENT .sp Example: diff -r a72908248153 -r d9ca5c46c1fa man/man5/vmm.cfg.5.rst --- a/man/man5/vmm.cfg.5.rst Mon Jan 18 03:23:50 2010 +0000 +++ b/man/man5/vmm.cfg.5.rst Mon Jan 18 18:34:48 2010 +0000 @@ -271,10 +271,8 @@ The concatenated major and minor version number of the currently used Dovecot version. (see: **dovecot --version**). - This option affects various database operations. There are some - differences between Dovecot v1.1.x and v1.2.x. For example, when the - command **dovecot --version** shows 1.1.18, set the value of this option - to **11**. + When, for example, the command **dovecot --version** prints *1.1.18*, set + the value of this option to **11**. Example:: |
|
From: <nev...@us...> - 2010-01-18 03:26:47
|
details: http://hg.localdomain.org/vmm/rev/a72908248153 changeset: 169:a72908248153 user: Pascal Volk date: Mon Jan 18 03:23:50 2010 +0000 description: man: updated man/{de/,}man5/vmm.cfg.5, using reStructuredText now diffstat: man/de/man5/vmm.cfg.5 | 663 +++++++++++++++++++++++++++++---------------- man/de/man5/vmm.cfg.5.rst | 323 ++++++++++++++++++++++ man/man5/vmm.cfg.5 | 620 ++++++++++++++++++++++++++++-------------- man/man5/vmm.cfg.5.rst | 305 +++++++++++++++++++++ 4 files changed, 1461 insertions(+), 450 deletions(-) diffs (truncated from 2006 to 300 lines): diff -r fd496561acc6 -r a72908248153 man/de/man5/vmm.cfg.5 --- a/man/de/man5/vmm.cfg.5 Thu Jan 14 06:18:34 2010 +0000 +++ b/man/de/man5/vmm.cfg.5 Mon Jan 18 03:23:50 2010 +0000 @@ -1,273 +1,462 @@ -.TH vmm.cfg 5 "17 Aug 2009" "Pascal Volk" +.\" Man page generated from reStructeredText. +. +.TH VMM.CFG 5 "2010-01-18" "vmm-0.6.0" "vmm Manual" .SH NAME vmm.cfg \- Konfigurationsdatei für vmm +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. .SH SYNOPSIS +.sp vmm.cfg .SH BESCHREIBUNG -\fBvmm\fR(1) liest Konfigurationsparameter aus der Datei \fIvmm.cfg\fP. -.br +.sp +\fBvmm\fP(1) liest seine Konfigurationsparameter aus der Datei \fIvmm.cfg\fP. +.sp Die Konfigurationsdatei ist in mehrere Abschnitte unterteilt. Jeder Abschnitt -wird mit dem, in eckigen Klammern '[' und ']' eingefassten, Namen des Abschnitts -eingeleitet (z. B. \fB[database]\fP), gefolgt von \'Option = Wert\' Einträgen -(Z. B. \fBhost = 127.0.0.1\fP). -.br -Leerräume um das Gleichheitszeichen '=' und am Ende eine Wertes werden +wird mit dem, in eckigen Klammern \(aq\fB[\fP\(aq und \(aq\fB]\fP\(aq eingefassten, Namen des +Abschnitts eingeleitet, gefolgt von \(aq\fIOption\fP = \fIWert\fP\(aq Einträgen: +.sp +.nf +.ft C +[database] +host = 127.0.0.1 +.ft P +.fi +.sp +Leerräume um das Gleichheitszeichen \(aq=\(aq und am Ende eines Wertes werden ignoriert. -.PP -Leerzeilen und Zeilen, die mit einer '#' oder einem ';' anfangen, werden +.sp +Leerzeilen und Zeilen, die mit einer \(aq#\(aq oder einem \(aq;\(aq anfangen, werden ignoriert. -.PP +.sp Jeder Wert ist von einem der folgenden Datentypen: -.IP \(bu -.I Boolean -um zu bestimmen, ob etwas eingeschaltet/aktiviert (true) oder +.INDENT 0.0 +.IP \(bu 2 +. +\fIBoolean\fP um zu bestimmen, ob etwas eingeschaltet/aktiviert (true) oder ausgeschaltet/deaktiviert (false) ist. -.br -Mögliche Werte für \fBtrue\fP sind: \fB1\fP, \fByes\fP, \fBtrue\fP und \fBon\fP. -.br -Mögliche Werte für \fBfalse\fP sind: \fB0\fP, \fBno\fP, \fBfalse\fP und -\fBoff\fP. -.IP \(bu -.I Int -eine Integer-Zahl, geschrieben ohne eine gebrochene oder dezimale Komponente. -.br -Beispielsweise sind \fB1\fP, \fB50\fP oder \fB321\fP Integer-Zahlen. -.IP \(bu -.I String -eine Folge von Buchstaben und Zahlen. -.br -Zum Beispiel: '\fBWort\fP', '\fBHallo Welt\fP', oder '\fB/usr/bin/strings\fP' +.nf +Mögliche Werte für \fItrue\fP sind: \fB1\fP, \fByes\fP, \fBtrue\fP und \fBon\fP. +Mögliche Werte für \fIfalse\fP sind: \fB0\fP, \fBno\fP, \fBfalse\fP und \fBoff\fP. +.fi +.sp +.IP \(bu 2 +. +\fIInt\fP eine Integer\-Zahl, geschrieben ohne eine gebrochene oder dezimale +Komponente. +.nf +Beispielsweise \fB1\fP, \fB50\fP oder \fB321\fP sind Integer\-Zahlen. +.fi +.sp +.IP \(bu 2 +. +\fIString\fP eine Folge von Buchstaben und Zahlen. +.nf +Zum Beispiel: \(aq\fBWort\fP\(aq, \(aq\fBHallo Welt\fP\(aq oder \(aq\fB/usr/bin/strings\fP\(aq +.fi +.sp +.UNINDENT .SS SUCHREIHENFOLGE -Standardmäßig sucht vmm die \fIvmm.cfg\fP in folgenden Verzeichnissen, in dieser -Reihenfolge: -.RS -.PD 0 +.sp +Standardmäßig sucht \fBvmm\fP(1) die \fIvmm.cfg\fP in folgenden Verzeichnissen, +in der angegebenen Reihenfolge: +.INDENT 0.0 +.INDENT 3.5 +.nf +\fI/root\fP +\fI/usr/local/etc\fP +\fI/etc\fP +.fi +.sp +.UNINDENT +.UNINDENT +.sp +Die zuerst gefundene Datei wird verwendet. +.SH ABSCHNITTE +.sp +Dieser Abschnitt beschreibt alle Abschnitte, sowie deren Optionen, der +\fIvmm.cfg\fP. +.SS ACCOUNT +.sp +Die Optionen des Abschnitts \fBaccount\fP legen Konto\-spezifische +Einstellungen fest. +.INDENT 0.0 .TP -.I -/root +.B \fCdelete_directory\fP +\fIBoolean\fP +.sp +Bestimmt das Verhalten von \fBvmm\fP(1) beim Löschen eines Kontos. +Wenn der Wert dieser Option \fItrue\fP ist, wird das Home\-Verzeichnis des +zu löschenden Anwenders rekursiv gelöscht. .TP -.I -/usr/local/etc +.B \fCdirectory_mode\fP +\fIInt\fP +.sp +Zugriffsbits des Home\-Verzeichnisses, sowie aller enthaltenen +Verzeichnisse, in Dezimal\-Schreibweise (Basis 10). +.nf +Beispiel: \(aqdrwx\-\-\-\-\-\-\(aq \-> oktal 0700 \-> dezimal 448 +.fi +.sp .TP -.I -/etc -.PD -.RE -.PP -Die zuerst gefundene Datei wird verwendet. -.\" ----- -.SH DATABASE ABSCHNITT -Der \fBdatabase\fP-Abschnitt wird verwendet, um die für den Datenbankzugriff +.B \fCdisk_usage\fP +\fIBoolean\fP +.sp +Legt fest, ob die Festplattenbelegung des Maildirs eines Benutzers jedes +Mal mit \fBdu\fP(1) ermittelt und mit den Konto\-Informationen ausgegeben +werden soll. +.sp +Bei umfangreichen Maildirs kann das langsam sein. Falls Sie Quotas +aktiviert haben, wird der \fBvmm\fP\-Unterbefehl \fBuserinfo\fP ebenfalls +die aktuelle Quota\-Nutzung des Kontos mit ausgegeben. Sie können auch +eines der optionalen Argumente \fBdu\fP oder \fBfull\fP an \fBuserinfo\fP +übergeben, um sich die aktuelle Festplattenbelegung anzeigen zu lassen. +.TP +.B \fCimap\fP +\fIBoolean\fP +.sp +Bestimmt, ob sich neu angelegte Benutzer per IMAP anmelden können sollen. +.TP +.B \fCpassword_length\fP +\fIInt\fP +.sp +Legt fest, wie viele Zahlen und/oder Buchstaben für ein automatisch +erzeugtes Passwort verwendet werden sollen. Alle Werte kleiner als 8 +werden auf 8 erhöht. +.TP +.B \fCpop3\fP +.sp +Bestimmt, ob sich neu angelegte Benutzer per POP3 anmelden können sollen. +.TP +.B \fCrandom_password\fP +\fIBoolean\fP +.sp +Mit dieser Option bestimmen Sie, ob \fBvmm\fP(1) ein zufälliges Passwort +generieren soll, wenn kein Passwort an den \fBuseradd\fP Unterbefehl +übergeben wurde. Ist der Wert dieser Option \fIfalse\fP, wird \fBvmm\fP Sie +auffordern, ein Passwort für den neun Account einzugeben. +.sp +Sie können die Länge für automatisch generierte Passwörter mit der +Option \fBpassword_length\fP konfigurieren. +.TP +.B \fCsieve\fP +\fIBoolean\fP +.sp +Bestimmt, ob sich neu angelegte Benutzer per ManageSieve anmelden +können sollen. +.TP +.B \fCsmtp\fP +\fIBoolean\fP +.sp +Bestimmt, ob sich neu angelegte Benutzer per SMTP (SMTP AUTH) anmelden +können sollen. +.UNINDENT +.sp +Beispiel: +.sp +.nf +.ft C +[account] +delete_directory = false +directory_mode = 448 +disk_usage = false +random_password = true +password_length = 10 +smtp = true +pop3 = true +imap = true +sieve = true +.ft P +.fi +.SS BIN +.sp +Im \fBbin\fP\-Abschnitt werden Pfade zu Binaries angegeben, die von +\fBvmm\fP(1) benötigt werden. +.INDENT 0.0 +.TP +.B \fCdovecotpw\fP +\fIString\fP +.sp +Der absolute Pfad zum dovecotpw Binary. Dieses Binary wird zur +Hash\-Erzeugung verwendet, wenn \fBmisc.password_scheme\fP einen der +nachfolgenden Werte hat: \(aqSMD5\(aq, \(aqSSHA\(aq, \(aqCRAM\-MD5\(aq, \(aqHMAC\-MD5\(aq, +\(aqLANMAN\(aq, \(aqNTLM\(aq oder \(aqRPA\(aq. +.TP +.B \fCdu\fP +\fIString\fP +.sp +Der absolute Pfad zu \fBdu\fP(1). Dieses Binary wird verwendet, wenn +die Festplattenbelegung eines Kontos ermittelt wird. +.TP +.B \fCpostconf\fP +\fIString\fP +.sp +Der absolute Pfad zu Postfix\(aq \fBpostconf\fP(1). Dieses Binary wird +verwendet, wenn \fBvmm\fP(1) diverse Postfix\-Einstellungen prüft, zum +Beispiel das \fIvirtual_alias_expansion_limit\fP. +.UNINDENT +.sp +Beispiel: +.sp +.nf +.ft C +[bin] +dovecotpw = /usr/sbin/dovecotpw +du = /usr/bin/du +postconf = /usr/sbin/postconf +.ft P +.fi +.SS CONFIG +.sp +Beim \fBconfig\fP\-Abschnitt handelt es sich um einen internen +Steuerungs\-Abschnitt. +.INDENT 0.0 +.TP +.B \fCdone\fP +\fIBoolean\fP +.sp +Diese Option hat den den Wert \fIfalse\fP, wenn \fBvmm\fP(1) zum ersten Mal +installiert wurde. Wenn Sie die Datei \fIvmm.cfg\fP von Hand editieren, +weisen Sie dieser Option abschließend den Wert \fItrue\fP zu. Wird die +Konfiguration über das Kommando \fBvmm configure\fP angepasst, wird der +Wert dieser Option automatisch auf \fItrue\fP gesetzt. +.sp +Sollte diese Option den Wert \fIfalse\fP zugewiesen haben, so startet +\fBvmm\fP(1) beim nächsten Aufruf im interaktiven Konfigurations\-Modus. |
|
From: <nev...@us...> - 2010-01-14 06:19:14
|
details: http://hg.localdomain.org/vmm/rev/fd496561acc6 changeset: 168:fd496561acc6 user: Pascal Volk date: Thu Jan 14 06:18:34 2010 +0000 description: vmm.cfg: a few re-renamed configuration options. old new -------------------------------------------------- account.password_len -> account.password_length domain.force_del -> domain.force_deletion misc.base_dir -> misc.base_directory misc.dovecot_vers -> misc.dovecot_version diffstat: VirtualMailManager/Config.py | 8 ++++---- VirtualMailManager/VirtualMailManager.py | 31 ++++++++++++++++--------------- update_config.py | 8 ++++---- vmm | 2 +- vmm.cfg | 8 ++++---- 5 files changed, 29 insertions(+), 28 deletions(-) diffs (211 lines): diff -r bb58aedefa3a -r fd496561acc6 VirtualMailManager/Config.py --- a/VirtualMailManager/Config.py Wed Jan 13 00:55:50 2010 +0000 +++ b/VirtualMailManager/Config.py Thu Jan 14 06:18:34 2010 +0000 @@ -44,7 +44,7 @@ ['delete_directory', 'false'], ['directory_mode', 448], ['disk_usage', 'false'], - ['password_len', 8], + ['password_length', 8], ['random_password', 'false'], ['smtp', 'true'], ['pop3', 'true'], @@ -55,7 +55,7 @@ ['auto_postmaster', 'true'], ['delete_directory', 'false'], ['directory_mode', 504], - ['force_del', 'false'], + ['force_deletion', 'false'], ] self.__binopts = [ ['dovecotpw', '/usr/sbin/dovecotpw'], @@ -63,8 +63,8 @@ ['postconf', '/usr/sbin/postconf'] ] self.__miscopts = [ - ['base_dir', '/srv/mail'], - ['dovecot_vers', '11'], + ['base_directory', '/srv/mail'], + ['dovecot_version', '11'], ['gid_mail', 8], ['password_scheme', 'PLAIN'], ['transport', 'dovecot:'], diff -r bb58aedefa3a -r fd496561acc6 VirtualMailManager/VirtualMailManager.py --- a/VirtualMailManager/VirtualMailManager.py Wed Jan 13 00:55:50 2010 +0000 +++ b/VirtualMailManager/VirtualMailManager.py Thu Jan 14 06:18:34 2010 +0000 @@ -83,16 +83,16 @@ def __chkenv(self): """""" - if not os.path.exists(self.__Cfg.get('misc', 'base_dir')): + basedir = self.__Cfg.get('misc', 'base_directory') + if not os.path.exists(basedir): old_umask = os.umask(0006) - os.makedirs(self.__Cfg.get('misc', 'base_dir'), 0771) - os.chown(self.__Cfg.get('misc', 'base_dir'), 0, - self.__Cfg.getint('misc', 'gid_mail')) + os.makedirs(basedir, 0771) + os.chown(basedir, 0, self.__Cfg.getint('misc', 'gid_mail')) os.umask(old_umask) - elif not os.path.isdir(self.__Cfg.get('misc', 'base_dir')): + elif not os.path.isdir(basedir): raise VMMException(_(u'“%s” is not a directory.\n\ -(vmm.cfg: section "misc", option "base_dir")') % - self.__Cfg.get('misc', 'base_dir'), ERR.NO_SUCH_DIRECTORY) +(vmm.cfg: section "misc", option "base_directory")') % + basedir, ERR.NO_SUCH_DIRECTORY) for opt, val in self.__Cfg.items('bin'): if not os.path.exists(val): raise VMMException(_(u'“%(binary)s” doesn\'t exist.\n\ @@ -237,7 +237,7 @@ transport = self.__Cfg.get('misc', 'transport') self.__dbConnect() return Domain(self.__dbh, domainname, - self.__Cfg.get('misc', 'base_dir'), transport) + self.__Cfg.get('misc', 'base_directory'), transport) def __getDiskUsage(self, directory): """Estimate file space usage for the given directory. @@ -270,7 +270,7 @@ def __domDirMake(self, domdir, gid): os.umask(0006) oldpwd = os.getcwd() - basedir = self.__Cfg.get('misc', 'base_dir') + basedir = self.__Cfg.get('misc', 'base_directory') domdirdirs = domdir.replace(basedir+'/', '').split('/') os.chdir(basedir) @@ -348,7 +348,7 @@ if gid > 0: if not self.__isdir(domdir): return - basedir = self.__Cfg.get('misc', 'base_dir') + basedir = self.__Cfg.get('misc', 'base_directory') domdirdirs = domdir.replace(basedir+'/', '').split('/') domdirparent = os.path.join(basedir, domdirdirs[0]) if basedir.count('..') or domdir.count('..'): @@ -487,7 +487,8 @@ dom = self.__getDomain(domainname) gid = dom.getID() domdir = dom.getDir() - if self.__Cfg.getboolean('domain', 'force_del') or force == 'delall': + if self.__Cfg.getboolean('domain', 'force_deletion')\ + or force == 'delall': dom.delete(True, True) elif force == 'deluser': dom.delete(delUser=True) @@ -589,7 +590,7 @@ password = self._readpass() acc.setPassword(self.__pwhash(password)) acc.save(self.__Cfg.get('maildir', 'name'), - self.__Cfg.getint('misc', 'dovecot_vers'), + self.__Cfg.getint('misc', 'dovecot_version'), self.__Cfg.getboolean('account', 'smtp'), self.__Cfg.getboolean('account', 'pop3'), self.__Cfg.getboolean('account', 'imap'), @@ -643,7 +644,7 @@ raise VMMException(_(u'Invalid argument: “%s”') % details, ERR.INVALID_AGUMENT) acc = self.__getAccount(emailaddress) - info = acc.getInfo(self.__Cfg.getint('misc', 'dovecot_vers')) + info = acc.getInfo(self.__Cfg.getint('misc', 'dovecot_version')) if self.__Cfg.getboolean('account', 'disk_usage')\ or details in ['du', 'full']: info['disk usage'] = self.__getDiskUsage('%(maildir)s' % info) @@ -682,7 +683,7 @@ in a future release.\n\ Please use the service name “sieve” instead.')) acc = self.__getAccount(emailaddress) - acc.disable(self.__Cfg.getint('misc', 'dovecot_vers'), service) + acc.disable(self.__Cfg.getint('misc', 'dovecot_version'), service) def userEnable(self, emailaddress, service=None): if service == 'managesieve': @@ -692,7 +693,7 @@ in a future release.\n\ Please use the service name “sieve” instead.')) acc = self.__getAccount(emailaddress) - acc.enable(self.__Cfg.getint('misc', 'dovecot_vers'), service) + acc.enable(self.__Cfg.getint('misc', 'dovecot_version'), service) def relocatedAdd(self, emailaddress, targetaddress): relocated = self.__getRelocated(emailaddress, targetaddress) diff -r bb58aedefa3a -r fd496561acc6 update_config.py --- a/update_config.py Wed Jan 13 00:55:50 2010 +0000 +++ b/update_config.py Thu Jan 14 06:18:34 2010 +0000 @@ -76,7 +76,7 @@ if cp.has_section('domdir'): for src, dst in (('domdir.mode', 'domain.directory_mode'), ('domdir.delete', 'domain.delete_directory'), - ('domdir.base', 'misc.base_dir')): + ('domdir.base', 'misc.base_directory')): move_option(cp, src, dst) cp.remove_section('domdir') if cp.has_section('services'): @@ -86,12 +86,12 @@ for src, dst in (('maildir.mode', 'account.directory_mode'), ('maildir.diskusage', 'account.disk_usage'), ('maildir.delete', 'account.delete_directory'), - ('misc.forcedel', 'domain.force_del'), + ('misc.forcedel', 'domain.force_deletion'), ('misc.passwdscheme', 'misc.password_scheme'), - ('misc.dovecotvers', 'misc.dovecot_vers')): + ('misc.dovecotvers', 'misc.dovecot_version')): move_option(cp, src, dst) for dst, val in (('account.random_password', 'false'), - ('account.password_len', '8'), + ('account.password_length', '8'), ('domain.auto_postmaster', 'true')): add_option(cp, dst, val) diff -r bb58aedefa3a -r fd496561acc6 vmm --- a/vmm Wed Jan 13 00:55:50 2010 +0000 +++ b/vmm Thu Jan 14 06:18:34 2010 +0000 @@ -77,7 +77,7 @@ def _getOrder(): order = () - if vmm.cfgGetInt('misc', 'dovecot_vers') > 11: + if vmm.cfgGetInt('misc', 'dovecot_version') > 11: sieve_name = u'sieve' else: sieve_name = u'managesieve' diff -r bb58aedefa3a -r fd496561acc6 vmm.cfg --- a/vmm.cfg Wed Jan 13 00:55:50 2010 +0000 +++ b/vmm.cfg Thu Jan 14 06:18:34 2010 +0000 @@ -38,7 +38,7 @@ ; octal 0770 -> decimal 504 directory_mode = 504 ; Force deletion of accounts and aliases when deleting a domain (Boolean) -force_del = false +force_deletion = false # # Account settings @@ -55,7 +55,7 @@ ; useradd subcommand? (Boolean) random_password = false ; How many characters to include in the generated passwords? (Int) -password_len = 8 +password_length = 8 ; Allow smtp by default? (Boolean) smtp = true ; Allow pop3 by default? (Boolean) @@ -81,7 +81,7 @@ # [misc] ; The base directory for all domains/accounts (String) -base_dir = /srv/mail +base_directory = /srv/mail ; Password scheme to use (see also: dovecotpw -l) (String) password_scheme = PLAIN ; numeric group ID of group mail (mail_privileged_group from dovecot.conf) (Int) @@ -90,7 +90,7 @@ transport = dovecot: ; the concatenated major and minor version number from `dovecot --version` (Int) ; e.g. 1.0.15 -> 10; 1.1.18 -> 11; 1.2.3 -> 12 -dovecot_vers = 11 +dovecot_version = 11 # # Configuration state |
|
From: <nev...@us...> - 2010-01-13 00:56:40
|
details: http://hg.localdomain.org/vmm/rev/bb58aedefa3a changeset: 167:bb58aedefa3a user: Pascal Volk date: Wed Jan 13 00:55:50 2010 +0000 description: update_config.py: adjusted functions stuff to renamed settings. Finally renamed update_config_0.4.x-0.5.py to update_config.py - no more version information in the filename. *.sh: removed .svn directory exclusion from find command. diffstat: install.sh | 2 +- update_config.py | 112 ++++++++++++++++++++++++++++++++++++++++++++ update_config_0.4.x-0.5.py | 113 --------------------------------------------- upgrade.sh | 4 +- 4 files changed, 115 insertions(+), 116 deletions(-) diffs (266 lines): diff -r b152ad5c7071 -r bb58aedefa3a install.sh --- a/install.sh Wed Jan 13 00:08:44 2010 +0000 +++ b/install.sh Wed Jan 13 00:55:50 2010 +0000 @@ -50,7 +50,7 @@ [ -d ${MANDIR}/man5 ] || mkdir -m 0755 -p ${MANDIR}/man5 install -m 0644 ${INSTALL_OPTS} man5/vmm.cfg.5 ${MANDIR}/man5 -for l in $(find . -maxdepth 1 -mindepth 1 -type d \! -name man\? \! -name .svn) +for l in $(find . -maxdepth 1 -mindepth 1 -type d \! -name man\?) do for s in man1 man5; do [ -d ${MANDIR}/${l}/${s} ] || mkdir -m 0755 -p ${MANDIR}/${l}/${s} diff -r b152ad5c7071 -r bb58aedefa3a update_config.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/update_config.py Wed Jan 13 00:55:50 2010 +0000 @@ -0,0 +1,112 @@ +#!/usr/bin/env python +# -*- coding: UTF-8 -*- +# Copyright (c) 2008 - 2010, Pascal Volk +# See COPYING for distribution information. + +import os +os.sys.path.remove(os.sys.path[0]) +from time import time +from ConfigParser import ConfigParser +from shutil import copy2 +from VirtualMailManager.constants.VERSION import VERSION + + +def get_config_file(): + f = None + for d in ('/root', '/usr/local/etc', '/etc'): + tmp = os.path.join(d, 'vmm.cfg') + if os.path.isfile(tmp): + f = tmp + break + if f: + return f + else: + os.sys.stderr.write('error: vmm.cfg not found\n') + raise SystemExit(2) + +def update(cp): + if VERSION == '0.5.2': + upd_052(cp) + elif VERSION == '0.6.0': + os.sys.stdout.write('info: nothing to do for version %s\n' % VERSION) + return + else: + os.sys.stderr.write( + 'error: the version %s is not supported by this script\n' % VERSION) + raise SystemExit(3) + +def get_cfg_parser(cf): + fh = file(cf, 'r') + cp = ConfigParser() + cp.readfp(fh) + fh.close() + return cp + +def update_cfg_file(cp, cf): + copy2(cf, cf+'.bak.'+str(time())) + fh = file(cf, 'w') + cp.write(fh) + fh.close() + +def add_sections(cp, sections): + for section in sections: + if not cp.has_section(section): + cp.add_section(section) + +def move_option(cp, src, dst): + ds, do = dst.split('.') + if not cp.has_option(ds, do): + ss, so = src.split('.') + cp.set(ds, do, cp.get(ss, so)) + cp.remove_option(ss, so) + sect_opt.append((dst, 'R')) + +def add_option(cp, dst, val): + ds, do = dst.split('.') + if not cp.has_option(ds, do): + cp.set(ds, do, val) + sect_opt.append((dst, 'N')) + +def get_option(cp, src): + ss, so = src.split('.') + return cp.get(ss, so) + +def upd_052(cp): + add_sections(cp, ('domain', 'account')) + if cp.has_section('domdir'): + for src, dst in (('domdir.mode', 'domain.directory_mode'), + ('domdir.delete', 'domain.delete_directory'), + ('domdir.base', 'misc.base_dir')): + move_option(cp, src, dst) + cp.remove_section('domdir') + if cp.has_section('services'): + for service in cp.options('services'): + move_option(cp, 'services.%s'%service, 'account.%s'%service) + cp.remove_section('services') + for src, dst in (('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')): + move_option(cp, src, dst) + for dst, val in (('account.random_password', 'false'), + ('account.password_len', '8'), + ('domain.auto_postmaster', 'true')): + add_option(cp, dst, val) + +# def main(): +if __name__ == '__main__': + sect_opt = [] + cf = get_config_file() + cp = get_cfg_parser(cf) + update(cp) + if len(sect_opt): + update_cfg_file(cp, cf) + sect_opt.sort() + print 'Please have a look at your configuration: %s' %cf + print 'This are your Renamed/New settings:' + for s_o, st in sect_opt: + print '%s %s = %s' % (st, s_o, get_option(cp, s_o)) + print + diff -r b152ad5c7071 -r bb58aedefa3a update_config_0.4.x-0.5.py --- a/update_config_0.4.x-0.5.py Wed Jan 13 00:08:44 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,113 +0,0 @@ -#!/usr/bin/env python -# -*- coding: UTF-8 -*- -# Copyright (c) 2008 - 2010, Pascal Volk -# See COPYING for distribution information. - -import os -os.sys.path.remove(os.sys.path[0]) -from time import time -from ConfigParser import ConfigParser -from shutil import copy2 -from VirtualMailManager.constants.VERSION import VERSION - - -def get_config_file(): - f = None - for d in ('/root', '/usr/local/etc', '/etc'): - tmp = os.path.join(d, 'vmm.cfg') - if os.path.isfile(tmp): - f = tmp - break - if f: - return f - else: - os.sys.stderr.write('error: vmm.cfg not found\n') - os.sys.exit(2) - -def update(cp): - if VERSION == '0.4': - upd_040(cp) - elif VERSION == '0.5': - upd_050(cp) - elif VERSION == '0.5.1': - upd_051(cp) - elif VERSION == '0.5.2': - os.sys.stdout.write('info: nothing to do for version %s\n' % VERSION) - os.sys.exit(0) - else: - os.sys.stderr.write( - 'error: the version %s is not supported by this script\n' % VERSION) - os.sys.exit(3) - -def get_cfg_parser(cf): - fh = file(cf, 'r') - cp = ConfigParser() - cp.readfp(fh) - fh.close() - return cp - -def update_cfg_file(cp, cf): - copy2(cf, cf+'.bak.'+str(time())) - fh = file(cf, 'w') - cp.write(fh) - fh.close() - -def upd_040(cp): - if not cp.has_option('maildir', 'name') or not cp.has_option('maildir', - 'folders') or cp.has_option('maildir', 'folder'): - if not cp.has_option('maildir', 'name'): - if cp.has_option('maildir', 'folder'): - cp.set('maildir', 'name', cp.get('maildir', 'folder')) - cp.remove_option('maildir', 'folder') - sect_opt.append(('maildir', 'name')) - else: - cp.set('maildir', 'name', 'Maildir') - sect_opt.append(('maildir', 'name')) - if not cp.has_option('maildir', 'folders'): - cp.set('maildir', 'folders', 'Drafts:Sent:Templates:Trash') - sect_opt.append(('maildir', 'folders')) - if cp.has_option('maildir', 'folder'): - cp.remove_option('maildir', 'folder') - upd_050(cp) - -def upd_050(cp): - if not cp.has_option('bin', 'postconf'): - try: - postconf = os.sys.argv[1].strip() - if len(postconf): - cp.set('bin', 'postconf', postconf) - sect_opt.append(('bin', 'postconf')) - else: # possible? - cp.set('bin', 'postconf', '/usr/sbin/postconf') - sect_opt.append(('bin', 'postconf')) - except IndexError: - cp.set('bin', 'postconf', '/usr/sbin/postconf') - sect_opt.append(('bin', 'postconf')) - upd_051(cp) - -def upd_051(cp): - if not cp.has_option('misc', 'dovecotvers') or cp.has_option('services', - 'managesieve'): - if not cp.has_option('misc', 'dovecotvers'): - cp.set('misc', 'dovecotvers', os.sys.argv[2].strip()) - sect_opt.append(('misc', 'dovecotvers')) - if cp.has_option('services', 'managesieve'): - cp.set('services','sieve',cp.getboolean('services', 'managesieve')) - cp.remove_option('services', 'managesieve') - sect_opt.append(('services', 'sieve')) - -# def main(): -if __name__ == '__main__': - sect_opt = [] - cf = get_config_file() - cp = get_cfg_parser(cf) - update(cp) - if len(sect_opt): - update_cfg_file(cp, cf) - print 'Please have a look at your configuration: %s' %cf - print 'and verify the value from:' - for s_o in sect_opt: - print ' [%s] %s' % s_o - print - - diff -r b152ad5c7071 -r bb58aedefa3a upgrade.sh --- a/upgrade.sh Wed Jan 13 00:08:44 2010 +0000 +++ b/upgrade.sh Wed Jan 13 00:55:50 2010 +0000 @@ -29,7 +29,7 @@ fi # update config file before installing the new files. -./update_config_0.4.x-0.5.py ${POSTCONF} ${DOVECOT_VERS:-10} +./update_config.py rv=$? if [ $rv -eq 2 ]; then echo "please run the install.sh script" @@ -66,7 +66,7 @@ [ -d ${MANDIR}/man5 ] || mkdir -m 0755 -p ${MANDIR}/man5 install -m 0644 ${INSTALL_OPTS} man5/vmm.cfg.5 ${MANDIR}/man5 -for l in $(find . -maxdepth 1 -mindepth 1 -type d \! -name man\? \! -name .svn) +for l in $(find . -maxdepth 1 -mindepth 1 -type d \! -name man\?) do for s in man1 man5; do [ -d ${MANDIR}/${l}/${s} ] || mkdir -m 0755 -p ${MANDIR}/${l}/${s} |
|
From: <nev...@us...> - 2010-01-13 00:10:49
|
details: http://hg.localdomain.org/vmm/rev/b152ad5c7071 changeset: 166:b152ad5c7071 user: Pascal Volk date: Wed Jan 13 00:08:44 2010 +0000 description: 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 diffstat: VirtualMailManager/Config.py | 33 +++++++------ VirtualMailManager/VirtualMailManager.py | 54 +++++++++++----------- vmm | 4 +- vmm.cfg | 76 +++++++++++++++++-------------- 4 files changed, 89 insertions(+), 78 deletions(-) diffs (truncated from 374 to 300 lines): diff -r 7e50e4c49ed7 -r b152ad5c7071 VirtualMailManager/Config.py --- a/VirtualMailManager/Config.py Mon Jan 04 22:35:07 2010 +0000 +++ b/VirtualMailManager/Config.py Wed Jan 13 00:08:44 2010 +0000 @@ -26,8 +26,8 @@ ConfigParser.__init__(self) self.__cfgFileName = filename self.__cfgFile = None - self.__VMMsections = ['database', 'maildir', 'services', 'domdir', - 'bin', 'misc', 'config'] + self.__VMMsections = ('account', 'bin', 'database', 'domain', + 'maildir', 'misc', 'config') self.__changes = False self.__missing = {} self.__dbopts = [ @@ -39,20 +39,23 @@ self.__mdopts = [ ['name', 'Maildir'], ['folders', 'Drafts:Sent:Templates:Trash'], - ['mode', 448], - ['diskusage', 'false'], - ['delete', 'false'] ] - self.__serviceopts = [ + self.__accountopts = [ + ['delete_directory', 'false'], + ['directory_mode', 448], + ['disk_usage', 'false'], + ['password_len', 8], + ['random_password', 'false'], ['smtp', 'true'], ['pop3', 'true'], ['imap', 'true'], ['sieve', 'true'] ] self.__domdopts = [ - ['base', '/srv/mail'], - ['mode', 504], - ['delete', 'false'] + ['auto_postmaster', 'true'], + ['delete_directory', 'false'], + ['directory_mode', 504], + ['force_del', 'false'], ] self.__binopts = [ ['dovecotpw', '/usr/sbin/dovecotpw'], @@ -60,11 +63,11 @@ ['postconf', '/usr/sbin/postconf'] ] self.__miscopts = [ - ['passwdscheme', 'PLAIN'], + ['base_dir', '/srv/mail'], + ['dovecot_vers', '11'], ['gid_mail', 8], - ['forcedel', 'false'], + ['password_scheme', 'PLAIN'], ['transport', 'dovecot:'], - ['dovecotvers', '11'] ] def load(self): @@ -167,9 +170,9 @@ opts = self.__dbopts elif section == 'maildir': opts = self.__mdopts - elif section == 'services': - opts = self.__serviceopts - elif section == 'domdir': + elif section == 'account': + opts = self.__accountopts + elif section == 'domain': opts = self.__domdopts elif section == 'bin': opts = self.__binopts diff -r 7e50e4c49ed7 -r b152ad5c7071 VirtualMailManager/VirtualMailManager.py --- a/VirtualMailManager/VirtualMailManager.py Mon Jan 04 22:35:07 2010 +0000 +++ b/VirtualMailManager/VirtualMailManager.py Wed Jan 13 00:08:44 2010 +0000 @@ -51,7 +51,7 @@ self.__Cfg.load() self.__Cfg.check() self.__cfgSections = self.__Cfg.getsections() - self.__scheme = self.__Cfg.get('misc', 'passwdscheme') + self.__scheme = self.__Cfg.get('misc', 'password_scheme') self._postconf = Postconf(self.__Cfg.get('bin', 'postconf')) if not os.sys.argv[1] in ['cf', 'configure']: self.__chkenv() @@ -83,16 +83,16 @@ def __chkenv(self): """""" - if not os.path.exists(self.__Cfg.get('domdir', 'base')): + if not os.path.exists(self.__Cfg.get('misc', 'base_dir')): old_umask = os.umask(0006) - os.makedirs(self.__Cfg.get('domdir', 'base'), 0771) - os.chown(self.__Cfg.get('domdir', 'base'), 0, + os.makedirs(self.__Cfg.get('misc', 'base_dir'), 0771) + os.chown(self.__Cfg.get('misc', 'base_dir'), 0, self.__Cfg.getint('misc', 'gid_mail')) os.umask(old_umask) - elif not os.path.isdir(self.__Cfg.get('domdir', 'base')): + elif not os.path.isdir(self.__Cfg.get('misc', 'base_dir')): raise VMMException(_(u'“%s” is not a directory.\n\ -(vmm.cfg: section "domdir", option "base")') % - self.__Cfg.get('domdir', 'base'), ERR.NO_SUCH_DIRECTORY) +(vmm.cfg: section "misc", option "base_dir")') % + self.__Cfg.get('misc', 'base_dir'), ERR.NO_SUCH_DIRECTORY) for opt, val in self.__Cfg.items('bin'): if not os.path.exists(val): raise VMMException(_(u'“%(binary)s” doesn\'t exist.\n\ @@ -237,7 +237,7 @@ transport = self.__Cfg.get('misc', 'transport') self.__dbConnect() return Domain(self.__dbh, domainname, - self.__Cfg.get('domdir', 'base'), transport) + self.__Cfg.get('misc', 'base_dir'), transport) def __getDiskUsage(self, directory): """Estimate file space usage for the given directory. @@ -259,7 +259,7 @@ def __makedir(self, directory, mode=None, uid=None, gid=None): if mode is None: - mode = self.__Cfg.getint('maildir', 'mode') + mode = self.__Cfg.getint('account', 'directory_mode') if uid is None: uid = 0 if gid is None: @@ -270,17 +270,17 @@ def __domDirMake(self, domdir, gid): os.umask(0006) oldpwd = os.getcwd() - basedir = self.__Cfg.get('domdir', 'base') + basedir = self.__Cfg.get('misc', 'base_dir') domdirdirs = domdir.replace(basedir+'/', '').split('/') os.chdir(basedir) if not os.path.isdir(domdirdirs[0]): self.__makedir(domdirdirs[0], 489, 0, - self.__Cfg.getint('misc', 'gid_mail')) + self.__Cfg.getint('misc', 'gid_mail')) os.chdir(domdirdirs[0]) os.umask(0007) - self.__makedir(domdirdirs[1], self.__Cfg.getint('domdir', 'mode'), 0, - gid) + self.__makedir(domdirdirs[1], + self.__Cfg.getint('domain', 'directory_mode'), 0, gid) os.chdir(oldpwd) def __subscribeFL(self, folderlist, uid, gid): @@ -313,7 +313,7 @@ and re.match(RE_MBOX_NAMES, folder): folders.append('%s/.%s' % (maildir, folder)) subdirs = ['cur', 'new', 'tmp'] - mode = self.__Cfg.getint('maildir', 'mode') + mode = self.__Cfg.getint('account', 'directory_mode') self.__makedir('%s' % uid, mode, uid, gid) os.chdir('%s' % uid) @@ -348,7 +348,7 @@ if gid > 0: if not self.__isdir(domdir): return - basedir = self.__Cfg.get('domdir', 'base') + basedir = self.__Cfg.get('misc', 'base_dir') domdirdirs = domdir.replace(basedir+'/', '').split('/') domdirparent = os.path.join(basedir, domdirdirs[0]) if basedir.count('..') or domdir.count('..'): @@ -487,7 +487,7 @@ dom = self.__getDomain(domainname) gid = dom.getID() domdir = dom.getDir() - if self.__Cfg.getboolean('misc', 'forcedel') or force == 'delall': + if self.__Cfg.getboolean('domain', 'force_del') or force == 'delall': dom.delete(True, True) elif force == 'deluser': dom.delete(delUser=True) @@ -495,7 +495,7 @@ dom.delete(delAlias=True) else: dom.delete() - if self.__Cfg.getboolean('domdir', 'delete'): + if self.__Cfg.getboolean('domain', 'delete_directory'): self.__domDirDelete(domdir, gid) def domainInfo(self, domainname, details=None): @@ -589,11 +589,11 @@ password = self._readpass() acc.setPassword(self.__pwhash(password)) acc.save(self.__Cfg.get('maildir', 'name'), - self.__Cfg.getint('misc', 'dovecotvers'), - self.__Cfg.getboolean('services', 'smtp'), - self.__Cfg.getboolean('services', 'pop3'), - self.__Cfg.getboolean('services', 'imap'), - self.__Cfg.getboolean('services', 'sieve')) + self.__Cfg.getint('misc', 'dovecot_vers'), + self.__Cfg.getboolean('account', 'smtp'), + self.__Cfg.getboolean('account', 'pop3'), + self.__Cfg.getboolean('account', 'imap'), + self.__Cfg.getboolean('account', 'sieve')) self.__mailDirMake(acc.getDir('domain'), acc.getUID(), acc.getGID()) def aliasAdd(self, aliasaddress, targetaddress): @@ -615,7 +615,7 @@ uid = acc.getUID() gid = acc.getGID() acc.delete(force) - if self.__Cfg.getboolean('maildir', 'delete'): + if self.__Cfg.getboolean('account', 'delete_directory'): try: self.__userDirDelete(acc.getDir('domain'), uid, gid) except VMMException, e: @@ -643,8 +643,8 @@ raise VMMException(_(u'Invalid argument: “%s”') % details, ERR.INVALID_AGUMENT) acc = self.__getAccount(emailaddress) - info = acc.getInfo(self.__Cfg.getint('misc', 'dovecotvers')) - if self.__Cfg.getboolean('maildir', 'diskusage')\ + info = acc.getInfo(self.__Cfg.getint('misc', 'dovecot_vers')) + if self.__Cfg.getboolean('account', 'disk_usage')\ or details in ['du', 'full']: info['disk usage'] = self.__getDiskUsage('%(maildir)s' % info) if details in [None, 'du']: @@ -682,7 +682,7 @@ in a future release.\n\ Please use the service name “sieve” instead.')) acc = self.__getAccount(emailaddress) - acc.disable(self.__Cfg.getint('misc', 'dovecotvers'), service) + acc.disable(self.__Cfg.getint('misc', 'dovecot_vers'), service) def userEnable(self, emailaddress, service=None): if service == 'managesieve': @@ -692,7 +692,7 @@ in a future release.\n\ Please use the service name “sieve” instead.')) acc = self.__getAccount(emailaddress) - acc.enable(self.__Cfg.getint('misc', 'dovecotvers'), service) + acc.enable(self.__Cfg.getint('misc', 'dovecot_vers'), service) def relocatedAdd(self, emailaddress, targetaddress): relocated = self.__getRelocated(emailaddress, targetaddress) diff -r 7e50e4c49ed7 -r b152ad5c7071 vmm --- a/vmm Mon Jan 04 22:35:07 2010 +0000 +++ b/vmm Wed Jan 13 00:08:44 2010 +0000 @@ -77,7 +77,7 @@ def _getOrder(): order = () - if vmm.cfgGetInt('misc', 'dovecotvers') > 11: + if vmm.cfgGetInt('misc', 'dovecot_vers') > 11: sieve_name = u'sieve' else: sieve_name = u'managesieve' @@ -87,7 +87,7 @@ (u'aliases', 0), (u'relocated', 0)) elif argv[1] in (u'ui', u'userinfo'): if argc == 4 and argv[3] != u'aliases'\ - or vmm.cfgGetBoolean('maildir', 'diskusage'): + or vmm.cfgGetBoolean('account', 'disk_usage'): order = ((u'address', 0), (u'name', 0), (u'uid', 1), (u'gid', 1), (u'transport', 0), (u'maildir', 0), (u'disk usage', 0), (u'smtp', 1), (u'pop3', 1), (u'imap', 1), (sieve_name, 1)) diff -r 7e50e4c49ed7 -r b152ad5c7071 vmm.cfg --- a/vmm.cfg Mon Jan 04 22:35:07 2010 +0000 +++ b/vmm.cfg Wed Jan 13 00:08:44 2010 +0000 @@ -12,50 +12,58 @@ user = dbuser ; Database password (String) pass = dbpassword -; database name (String) +; Database name (String) name = mailsys # -# Mail directories +# Maildir folder # [maildir] ; Default name of the Maildir folder (String) name = Maildir ; A colon separated list of folder names, that should be created (String) -; e.g.: folders = Drafts:Sent:Templates:Trash +; e.g.: folders = Drafts:Sent:Templates:Trash:Lists.Dovecot:Lists.Postfix folders = Drafts:Sent:Templates:Trash -; Permissions for maildirs (Int) -; octal 0700 -> decimal 448 -mode = 448 -; Display disk usage in account info by default? (Boolean) -diskusage = false -; Delete maildir recursive when deleting an account? (Boolean) -delete = false # -# Services per user +# Domain settings # -[services] -; allow smtp by default? (Boolean) -smtp = true -; allow pop3 by default? (Boolean) -pop3 = true -; allow imap by default? (Boolean) |
|
From: <nev...@us...> - 2010-01-04 22:35:49
|
details: http://hg.localdomain.org/vmm/rev/7e50e4c49ed7 changeset: 165:7e50e4c49ed7 user: Pascal Volk date: Mon Jan 04 22:35:07 2010 +0000 description: INSTALL: Adapted pgsql configuration steps to that in the wiki. (Closes: #2922030) diffstat: INSTALL | 28 +++++++++++++++++----------- 1 files changed, 17 insertions(+), 11 deletions(-) diffs (59 lines): diff -r 67dc18294de6 -r 7e50e4c49ed7 INSTALL --- a/INSTALL Sat Jan 02 19:56:58 2010 +0000 +++ b/INSTALL Mon Jan 04 22:35:07 2010 +0000 @@ -9,13 +9,18 @@ Configuring PostgreSQL +(for more details see: http://vmm.localdomain.org/PreparingPostgreSQL) -* /etc/postgresql/8.2/main/pg_hba.conf +* /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.2 force-reload + /etc/init.d/postgresql-8.4 force-reload * Create a DB user if necessary: DB Superuser: @@ -23,24 +28,25 @@ DB User: createuser -d -E -e -P $USERNAME -* Create Database and db users for Postfix and Dovecot +* Create Database and db users for vmm, Postfix and Dovecot connecting to PostgreSQL: psql template1 - # create database - CREATE DATABASE mailsys ENCODING 'UTF8'; + # create users, group and the database + CREATE USER vmm ENCRYPTED PASSWORD 'DB PASSWORD for vmm'; + CREATE USER dovecot ENCRYPTED password 'DB PASSWORD for Dovecot'; + CREATE USER postfix 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 - \c mailsys + psql mailsys vmm -W -h 127.0.0.1 # either import the database structure for Dovecot v1.0.x/v1.1.x \i /path/to/create_tables.pgsql # or import the database structure for Dovecot v1.2.x \i /path/to/create_tables-dovecot-1.2.x.pgsql - # create users and group - CREATE USER postfix ENCRYPTED password 'DB PASSWORD for Postfix'; - CREATE USER dovecot ENCRYPTED password 'DB PASSWORD for Dovecot'; - CREATE ROLE mailsys WITH USER postfix, dovecot; - # set permissions GRANT SELECT ON dovecot_password, dovecot_user TO dovecot; GRANT SELECT ON postfix_alias, postfix_gid, postfix_maildir, |
|
From: <nev...@us...> - 2010-01-02 19:57:27
|
details: http://hg.localdomain.org/vmm/rev/67dc18294de6 changeset: 164:67dc18294de6 user: Pascal Volk date: Sat Jan 02 19:56:58 2010 +0000 description: *.sh: Added --force option to python setup.py install call. upgrade.sh: Removed old cleanup code. diffstat: install.sh | 2 +- upgrade.sh | 10 +--------- 2 files changed, 2 insertions(+), 10 deletions(-) diffs (39 lines): diff -r 1981f285f0c0 -r 67dc18294de6 install.sh --- a/install.sh Sat Jan 02 19:37:20 2010 +0000 +++ b/install.sh Sat Jan 02 19:56:58 2010 +0000 @@ -26,7 +26,7 @@ exit 1 fi -python setup.py -q install --prefix ${PREFIX} +python setup.py -q install --force --prefix ${PREFIX} python setup.py clean --all >/dev/null install -b -m 0600 ${INSTALL_OPTS} vmm.cfg ${PREFIX}/etc/ diff -r 1981f285f0c0 -r 67dc18294de6 upgrade.sh --- a/upgrade.sh Sat Jan 02 19:37:20 2010 +0000 +++ b/upgrade.sh Sat Jan 02 19:56:58 2010 +0000 @@ -43,7 +43,7 @@ exit 1 fi -python setup.py -q install --prefix ${PREFIX} +python setup.py -q install --force --prefix ${PREFIX} python setup.py clean --all >/dev/null install -m 0700 ${INSTALL_OPTS} vmm ${PREFIX}/sbin @@ -58,14 +58,6 @@ done cd - >/dev/null -# remove misplaced manual pages -if [ -f /usr/local/share/man/man1/vmm.1 ]; then - rm -f /usr/local/share/man/man1/vmm.1 -fi -if [ -f /usr/local/share/man/man5/vmm.cfg.5 ]; then - rm -f /usr/local/share/man/man5/vmm.cfg.5 -fi - # install manual pages cd man [ -d ${MANDIR}/man1 ] || mkdir -m 0755 -p ${MANDIR}/man1 |
|
From: <nev...@us...> - 2010-01-02 19:37:48
|
details: http://hg.localdomain.org/vmm/rev/1981f285f0c0 changeset: 163:1981f285f0c0 user: Pascal Volk date: Sat Jan 02 19:37:20 2010 +0000 description: setup.py: Fixed a UserWarning that may occur with older Python. diffstat: setup.py | 72 ++++++++++++++++++++++++++++++++++----------------------------- 1 files changed, 39 insertions(+), 33 deletions(-) diffs (94 lines): diff -r 0ac9ef587769 -r 1981f285f0c0 setup.py --- a/setup.py Sat Jan 02 15:45:12 2010 +0000 +++ b/setup.py Sat Jan 02 19:37:20 2010 +0000 @@ -5,51 +5,57 @@ import os from distutils.core import setup +from distutils.dist import DistributionMetadata VERSION = '0.5.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.ext', + 'VirtualMailManager.constants'] +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 :: French', + 'Natural Language :: German', + 'Operating System :: POSIX', + 'Operating System :: POSIX :: BSD', + 'Operating System :: POSIX :: Linux', + 'Operating System :: POSIX :: Other', + 'Programming Language :: Python', + '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': 'nev...@us...', + 'license': 'BSD License', + 'url': 'http://vmm.localdomain.org/', + 'download_url':'http://sf.net/projects/vmm/files/', + 'platforms': platforms, + 'classifiers': classifiers} -setup(name='VirtualMailManager', - version=VERSION, - description='Tool to manage mail domains/accounts/aliases for Dovecot and Postfix', - long_description=long_description, - packages=['VirtualMailManager', 'VirtualMailManager.ext', - 'VirtualMailManager.constants'], - author='Pascal Volk', - author_email='nev...@us...', - license='BSD License', - url='http://vmm.localdomain.org/', - download_url='http://sf.net/projects/vmm/files/', - platforms=['freebsd7', 'linux2', 'openbsd4'], - classifiers=[ - 'Development Status :: 4 - Beta', - 'Development Status :: 5 - Production/Stable', - 'Environment :: Console', - 'Intended Audience :: System Administrators', - 'License :: OSI Approved :: BSD License', - 'Natural Language :: Dutch', - 'Natural Language :: English', - 'Natural Language :: French', - 'Natural Language :: German', - 'Operating System :: POSIX', - 'Operating System :: POSIX :: BSD', - 'Operating System :: POSIX :: Linux', - 'Operating System :: POSIX :: Other', - 'Programming Language :: Python', - 'Topic :: Communications :: Email', - 'Topic :: System :: Systems Administration', - 'Topic :: Utilities' - ], - requires=['pyPgSQL'] - ) +if 'requires' in DistributionMetadata._METHOD_BASENAMES: + setup_args['requires'] = ['pyPgSQL'] + +setup(**setup_args) |
|
From: <nev...@us...> - 2010-01-02 15:49:57
|
details: http://hg.localdomain.org/vmm/rev/0ac9ef587769 changeset: 162:0ac9ef587769 user: Pascal Volk date: Sat Jan 02 15:45:12 2010 +0000 description: Updated copyright notices to include the year 2010. Also corrected the name of the copyright holder and updated the e-mail address. diffstat: COPYING | 4 ++-- VirtualMailManager/Account.py | 2 +- VirtualMailManager/Alias.py | 2 +- VirtualMailManager/AliasDomain.py | 2 +- VirtualMailManager/Config.py | 2 +- VirtualMailManager/Domain.py | 2 +- VirtualMailManager/EmailAddress.py | 2 +- VirtualMailManager/Exceptions.py | 2 +- VirtualMailManager/MailLocation.py | 2 +- VirtualMailManager/Relocated.py | 2 +- VirtualMailManager/Transport.py | 2 +- VirtualMailManager/VirtualMailManager.py | 2 +- VirtualMailManager/__init__.py | 2 +- VirtualMailManager/constants/ERROR.py | 2 +- VirtualMailManager/constants/EXIT.py | 2 +- VirtualMailManager/constants/VERSION.py | 4 ++-- VirtualMailManager/constants/__init__.py | 2 +- VirtualMailManager/ext/Postconf.py | 2 +- VirtualMailManager/ext/__init__.py | 2 +- man/de/man1/vmm.1 | 4 ++-- man/de/man5/vmm.cfg.5 | 4 ++-- man/man1/vmm.1 | 3 ++- man/man5/vmm.cfg.5 | 3 ++- po/de.po | 2 +- setup.py | 4 ++-- update_config_0.4.x-0.5.py | 2 +- vmm | 2 +- 27 files changed, 34 insertions(+), 32 deletions(-) diffs (296 lines): diff -r b62aa4aabcd0 -r 0ac9ef587769 COPYING --- a/COPYING Sun Dec 27 00:15:39 2009 +0000 +++ b/COPYING Sat Jan 02 15:45:12 2010 +0000 @@ -1,4 +1,4 @@ -Copyright (c) 2007 - 2009, VEB IT +Copyright (c) 2007 - 2010, Pascal Volk All rights reserved. Redistribution and use in source and binary forms, with or without modification, @@ -9,7 +9,7 @@ 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 name of the company nor the names of its contributors may be + 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. diff -r b62aa4aabcd0 -r 0ac9ef587769 VirtualMailManager/Account.py --- a/VirtualMailManager/Account.py Sun Dec 27 00:15:39 2009 +0000 +++ b/VirtualMailManager/Account.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,5 +1,5 @@ # -*- coding: UTF-8 -*- -# Copyright (c) 2007 - 2009, VEB IT +# Copyright (c) 2007 - 2010, Pascal Volk # See COPYING for distribution information. """Virtual Mail Manager's Account class to manage e-mail accounts.""" diff -r b62aa4aabcd0 -r 0ac9ef587769 VirtualMailManager/Alias.py --- a/VirtualMailManager/Alias.py Sun Dec 27 00:15:39 2009 +0000 +++ b/VirtualMailManager/Alias.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,5 +1,5 @@ # -*- coding: UTF-8 -*- -# Copyright (c) 2007 - 2009, VEB IT +# Copyright (c) 2007 - 2010, Pascal Volk # See COPYING for distribution information. """Virtual Mail Manager's Alias class to manage e-mail aliases.""" diff -r b62aa4aabcd0 -r 0ac9ef587769 VirtualMailManager/AliasDomain.py --- a/VirtualMailManager/AliasDomain.py Sun Dec 27 00:15:39 2009 +0000 +++ b/VirtualMailManager/AliasDomain.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,5 +1,5 @@ # -*- coding: UTF-8 -*- -# Copyright (c) 2008 - 2009, VEB IT +# Copyright (c) 2008 - 2010, Pascal Volk # See COPYING for distribution information. """Virtual Mail Manager's AliasDomain class to manage alias domains.""" diff -r b62aa4aabcd0 -r 0ac9ef587769 VirtualMailManager/Config.py --- a/VirtualMailManager/Config.py Sun Dec 27 00:15:39 2009 +0000 +++ b/VirtualMailManager/Config.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,5 +1,5 @@ # -*- coding: UTF-8 -*- -# Copyright (c) 2007 - 2009, VEB IT +# Copyright (c) 2007 - 2010, Pascal Volk # See COPYING for distribution information. """Configuration class for read, modify and write the diff -r b62aa4aabcd0 -r 0ac9ef587769 VirtualMailManager/Domain.py --- a/VirtualMailManager/Domain.py Sun Dec 27 00:15:39 2009 +0000 +++ b/VirtualMailManager/Domain.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,5 +1,5 @@ # -*- coding: UTF-8 -*- -# Copyright (c) 2007 - 2009, VEB IT +# Copyright (c) 2007 - 2010, Pascal Volk # See COPYING for distribution information. """Virtual Mail Manager's Domain class to manage e-mail domains.""" diff -r b62aa4aabcd0 -r 0ac9ef587769 VirtualMailManager/EmailAddress.py --- a/VirtualMailManager/EmailAddress.py Sun Dec 27 00:15:39 2009 +0000 +++ b/VirtualMailManager/EmailAddress.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,5 +1,5 @@ # -*- coding: UTF-8 -*- -# Copyright (c) 2008 - 2009, VEB IT +# Copyright (c) 2008 - 2010, Pascal Volk # See COPYING for distribution information. """Virtual Mail Manager's EmailAddress class to handle e-mail addresses.""" diff -r b62aa4aabcd0 -r 0ac9ef587769 VirtualMailManager/Exceptions.py --- a/VirtualMailManager/Exceptions.py Sun Dec 27 00:15:39 2009 +0000 +++ b/VirtualMailManager/Exceptions.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,5 +1,5 @@ # -*- coding: UTF-8 -*- -# Copyright (c) 2007 - 2009, VEB IT +# Copyright (c) 2007 - 2010, Pascal Volk # See COPYING for distribution information. """Exception classes for Virtual Mail Manager""" diff -r b62aa4aabcd0 -r 0ac9ef587769 VirtualMailManager/MailLocation.py --- a/VirtualMailManager/MailLocation.py Sun Dec 27 00:15:39 2009 +0000 +++ b/VirtualMailManager/MailLocation.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,5 +1,5 @@ # -*- coding: UTF-8 -*- -# Copyright (c) 2008 - 2009, VEB IT +# Copyright (c) 2008 - 2010, Pascal Volk # See COPYING for distribution information. """Virtual Mail Manager's MailLocation class to manage the mail_location diff -r b62aa4aabcd0 -r 0ac9ef587769 VirtualMailManager/Relocated.py --- a/VirtualMailManager/Relocated.py Sun Dec 27 00:15:39 2009 +0000 +++ b/VirtualMailManager/Relocated.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,5 +1,5 @@ # -*- coding: UTF-8 -*- -# Copyright (c) 2008 - 2009, VEB IT +# Copyright (c) 2008 - 2010, Pascal Volk # See COPYING for distribution information. """Virtual Mail Manager's Relocated class to manage relocated users.""" diff -r b62aa4aabcd0 -r 0ac9ef587769 VirtualMailManager/Transport.py --- a/VirtualMailManager/Transport.py Sun Dec 27 00:15:39 2009 +0000 +++ b/VirtualMailManager/Transport.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,5 +1,5 @@ # -*- coding: UTF-8 -*- -# Copyright (c) 2008 - 2009, VEB IT +# Copyright (c) 2008 - 2010, Pascal Volk # See COPYING for distribution information. """Virtual Mail Manager's Transport class to manage the transport for diff -r b62aa4aabcd0 -r 0ac9ef587769 VirtualMailManager/VirtualMailManager.py --- a/VirtualMailManager/VirtualMailManager.py Sun Dec 27 00:15:39 2009 +0000 +++ b/VirtualMailManager/VirtualMailManager.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,5 +1,5 @@ # -*- coding: UTF-8 -*- -# Copyright (c) 2007 - 2009, VEB IT +# Copyright (c) 2007 - 2010, Pascal Volk # See COPYING for distribution information. """The main class for vmm.""" diff -r b62aa4aabcd0 -r 0ac9ef587769 VirtualMailManager/__init__.py --- a/VirtualMailManager/__init__.py Sun Dec 27 00:15:39 2009 +0000 +++ b/VirtualMailManager/__init__.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,5 +1,5 @@ # -*- coding: UTF-8 -*- -# Copyright (c) 2007 - 2009, VEB IT +# Copyright (c) 2007 - 2010, Pascal Volk # See COPYING for distribution information. # package initialization code # diff -r b62aa4aabcd0 -r 0ac9ef587769 VirtualMailManager/constants/ERROR.py --- a/VirtualMailManager/constants/ERROR.py Sun Dec 27 00:15:39 2009 +0000 +++ b/VirtualMailManager/constants/ERROR.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,5 +1,5 @@ # -*- coding: UTF-8 -*- -# Copyright (c) 2007 - 2009, VEB IT +# Copyright (c) 2007 - 2010, Pascal Volk # See COPYING for distribution information. ACCOUNT_AND_ALIAS_PRESENT = 20 diff -r b62aa4aabcd0 -r 0ac9ef587769 VirtualMailManager/constants/EXIT.py --- a/VirtualMailManager/constants/EXIT.py Sun Dec 27 00:15:39 2009 +0000 +++ b/VirtualMailManager/constants/EXIT.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,5 +1,5 @@ # -*- coding: UTF-8 -*- -# Copyright (c) 2007 - 2009, VEB IT +# Copyright (c) 2007 - 2010, Pascal Volk # See COPYING for distribution information. MISSING_ARGS = 1 diff -r b62aa4aabcd0 -r 0ac9ef587769 VirtualMailManager/constants/VERSION.py --- a/VirtualMailManager/constants/VERSION.py Sun Dec 27 00:15:39 2009 +0000 +++ b/VirtualMailManager/constants/VERSION.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,8 +1,8 @@ # -*- coding: UTF-8 -*- -# Copyright (c) 2007 - 2009, VEB IT +# Copyright (c) 2007 - 2010, Pascal Volk # See COPYING for distribution information. -AUTHOR = 'Pascal Volk <p....@ve...>' +AUTHOR = 'Pascal Volk <nev...@us...>' RELDATE = '2009-09-09' VERSION = '0.5.2' __author__ = AUTHOR diff -r b62aa4aabcd0 -r 0ac9ef587769 VirtualMailManager/constants/__init__.py --- a/VirtualMailManager/constants/__init__.py Sun Dec 27 00:15:39 2009 +0000 +++ b/VirtualMailManager/constants/__init__.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,5 +1,5 @@ # -*- coding: UTF-8 -*- -# Copyright (c) 2007 - 2009, VEB IT +# Copyright (c) 2007 - 2010, Pascal Volk # See COPYING for distribution information. # package placeholder # diff -r b62aa4aabcd0 -r 0ac9ef587769 VirtualMailManager/ext/Postconf.py --- a/VirtualMailManager/ext/Postconf.py Sun Dec 27 00:15:39 2009 +0000 +++ b/VirtualMailManager/ext/Postconf.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,5 +1,5 @@ # -*- coding: UTF-8 -*- -# Copyright (c) 2008 - 2009, VEB IT +# Copyright (c) 2008 - 2010, Pascal Volk # See COPYING for distribution information. """A small - r/o - wrapper class for Postfix' postconf.""" diff -r b62aa4aabcd0 -r 0ac9ef587769 VirtualMailManager/ext/__init__.py --- a/VirtualMailManager/ext/__init__.py Sun Dec 27 00:15:39 2009 +0000 +++ b/VirtualMailManager/ext/__init__.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,5 +1,5 @@ # -*- coding: UTF-8 -*- -# Copyright (c) 2008 - 2009, VEB IT +# Copyright (c) 2008 - 2010, Pascal Volk # See COPYING for distribution information. # package placeholder # diff -r b62aa4aabcd0 -r 0ac9ef587769 man/de/man1/vmm.1 --- a/man/de/man1/vmm.1 Sun Dec 27 00:15:39 2009 +0000 +++ b/man/de/man1/vmm.1 Sat Jan 02 15:45:12 2010 +0000 @@ -443,5 +443,5 @@ vmm.cfg(5), Konfigurationsdatei für vmm .SH AUTOR \fBvmm\fP und die dazugehörigen Manualseiten wurden von Pascal Volk -<\fIp...@ve...\fP> geschrieben und sind unter den Bedingungen der BSD -Lizenz lizenziert. +<\fIn...@us...\fP> geschrieben und sind unter den +Bedingungen der BSD Lizenz lizenziert. diff -r b62aa4aabcd0 -r 0ac9ef587769 man/de/man5/vmm.cfg.5 --- a/man/de/man5/vmm.cfg.5 Sun Dec 27 00:15:39 2009 +0000 +++ b/man/de/man5/vmm.cfg.5 Sat Jan 02 15:45:12 2010 +0000 @@ -269,5 +269,5 @@ zu verwalten. .SH AUTOR \fBvmm\fP und die dazugehörigen Manualseiten wurden von Pascal Volk -<\fIp...@ve...\fP> geschrieben und sind unter den Bedingungen der BSD -Lizenz lizenziert. +<\fIn...@us...\fP> geschrieben und sind unter den +Bedingungen der BSD Lizenz lizenziert. diff -r b62aa4aabcd0 -r 0ac9ef587769 man/man1/vmm.1 --- a/man/man1/vmm.1 Sun Dec 27 00:15:39 2009 +0000 +++ b/man/man1/vmm.1 Sat Jan 02 15:45:12 2010 +0000 @@ -419,4 +419,5 @@ vmm.cfg(5), configuration file for vmm .SH AUTHOR \fBvmm\fP and its man pages were written by Pascal Volk -<\fIp...@ve...\fP> and are licensed under the terms of the BSD License. +<\fIn...@us...\fP> and are licensed under the terms of the +BSD License. diff -r b62aa4aabcd0 -r 0ac9ef587769 man/man5/vmm.cfg.5 --- a/man/man5/vmm.cfg.5 Sun Dec 27 00:15:39 2009 +0000 +++ b/man/man5/vmm.cfg.5 Sat Jan 02 15:45:12 2010 +0000 @@ -252,4 +252,5 @@ vmm(1), command line tool to manage email domains/accounts/aliases .SH AUTHOR \fBvmm\fP and its man pages were written by Pascal Volk -<\fIp...@ve...\fP> and are licensed under the terms of the BSD License. +<\fIn...@us...\fP> and are licensed under the terms of the +BSD License. diff -r b62aa4aabcd0 -r 0ac9ef587769 po/de.po --- a/po/de.po Sun Dec 27 00:15:39 2009 +0000 +++ b/po/de.po Sat Jan 02 15:45:12 2010 +0000 @@ -1,5 +1,5 @@ # German translations for vmm package. -# Copyright (C) 2009 VEB IT +# Copyright (C) 2009 Pascal Volk # Pascal Volk <p....@ve...>, 2009. # msgid "" diff -r b62aa4aabcd0 -r 0ac9ef587769 setup.py --- a/setup.py Sun Dec 27 00:15:39 2009 +0000 +++ b/setup.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright 2007 - 2009, VEB IT +# Copyright 2007 - 2010, Pascal Volk # See COPYING for distribution information. import os @@ -27,7 +27,7 @@ packages=['VirtualMailManager', 'VirtualMailManager.ext', 'VirtualMailManager.constants'], author='Pascal Volk', - author_email='p....@ve...', + author_email='nev...@us...', license='BSD License', url='http://vmm.localdomain.org/', download_url='http://sf.net/projects/vmm/files/', diff -r b62aa4aabcd0 -r 0ac9ef587769 update_config_0.4.x-0.5.py --- a/update_config_0.4.x-0.5.py Sun Dec 27 00:15:39 2009 +0000 +++ b/update_config_0.4.x-0.5.py Sat Jan 02 15:45:12 2010 +0000 @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: UTF-8 -*- -# Copyright (c) 2008 - 2009, VEB IT +# Copyright (c) 2008 - 2010, Pascal Volk # See COPYING for distribution information. import os diff -r b62aa4aabcd0 -r 0ac9ef587769 vmm --- a/vmm Sun Dec 27 00:15:39 2009 +0000 +++ b/vmm Sat Jan 02 15:45:12 2010 +0000 @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: UTF-8 -*- -# Copyright 2007 - 2009, VEB IT +# Copyright 2007 - 2010, Pascal Volk # See COPYING for distribution information. """This is the vmm main script.""" |