# HG changeset patch # User martin f. krafft # Date 1334356603 -7200 # Node ID 2676dbf43e1ca41605c98abc6b9dcb6205bf8042 # Parent 2bb40aaef94e974cb1fb3260598dbf5b4719c56e Change UI to accept 'default' to restore inherited values Instead of explicit values for tid/ssid/qid, the UI now accepts 'default', which removed user-pecific settings and hence causes domain defaults to be used. diff -r 2bb40aaef94e -r 2676dbf43e1c VirtualMailManager/cli/subcommands.py --- a/VirtualMailManager/cli/subcommands.py Fri Apr 13 23:24:12 2012 +0200 +++ b/VirtualMailManager/cli/subcommands.py Sat Apr 14 00:36:43 2012 +0200 @@ -617,7 +617,8 @@ elif ctx.argc < 4: usage(EX_MISSING_ARGS, _(u'Missing storage value.'), ctx.scmd) try: - bytes_ = size_in_bytes(ctx.args[3]) + bytes_ = ctx.args[3] if ctx.args[3] == 'default' \ + else size_in_bytes(ctx.args[3]) except (ValueError, TypeError): usage(INVALID_ARGUMENT, _(u"Invalid storage value: '%s'") % ctx.args[3], ctx.scmd) @@ -641,7 +642,7 @@ if ctx.argc >= 4: services.extend([service.lower() for service in ctx.args[3:]]) unknown = [service for service in services if service not in SERVICES] - if unknown: + if unknown and ctx.args[3] != 'default': usage(INVALID_ARGUMENT, _(u'Invalid service arguments: %s') % ' '.join(unknown), ctx.scmd) ctx.hdlr.user_services(ctx.args[2].lower(), *services) @@ -719,14 +720,14 @@ 'address [password]', _(u'update the password for the given address')), 'userquota': cmd('userquota', 'uq', user_quota, - 'address storage [messages]', + 'address storage [messages] | address default', _(u'update the quota limit for the given address')), 'userservices': cmd('userservices', 'us', user_services, - 'address [service ...]', + 'address [service ...] | address default', _(u'enables the specified services and disables all ' u'not specified services')), 'usertransport': cmd('usertransport', 'ut', user_transport, - 'address transport', + 'address transport | address default', _(u'update the transport of the given address')), # Alias commands 'aliasadd': cmd('aliasadd', 'aa', alias_add, 'address destination ...', diff -r 2bb40aaef94e -r 2676dbf43e1c VirtualMailManager/handler.py --- a/VirtualMailManager/handler.py Fri Apr 13 23:24:12 2012 +0200 +++ b/VirtualMailManager/handler.py Sat Apr 14 00:36:43 2012 +0200 @@ -763,15 +763,19 @@ def user_quotalimit(self, emailaddress, bytes_, messages=0): """Wrapper for Account.update_quotalimit(QuotaLimit).""" - if not all(isinstance(i, (int, long)) for i in (bytes_, messages)): - raise TypeError("'bytes_' and 'messages' have to be " - "integers or longs.") acc = self._get_account(emailaddress) if not acc: raise VMMError(_(u"The account '%s' does not exist.") % - acc.address, NO_SUCH_ACCOUNT) - acc.update_quotalimit(QuotaLimit(self._dbh, bytes=bytes_, - messages=messages)) + acc.address, NO_SUCH_ACCOUNT) + if bytes_ == 'default': + quotalimit = None + else: + if not all(isinstance(i, (int, long)) for i in (bytes_, messages)): + raise TypeError("'bytes_' and 'messages' have to be " + "integers or longs.") + quotalimit = QuotaLimit(self._dbh, bytes=bytes_, + messages=messages) + acc.update_quotalimit(quotalimit) def user_transport(self, emailaddress, transport): """Wrapper for Account.update_transport(Transport).""" @@ -782,21 +786,26 @@ if not acc: raise VMMError(_(u"The account '%s' does not exist.") % acc.address, NO_SUCH_ACCOUNT) - acc.update_transport(Transport(self._dbh, transport=transport)) + transport = None if transport == 'default' \ + else Transport(self._dbh, transport=transport) + acc.update_transport(transport) def user_services(self, emailaddress, *services): """Wrapper around Account.update_serviceset().""" - kwargs = dict.fromkeys(SERVICES, False) - for service in set(services): - if service not in SERVICES: - raise VMMError(_(u"Unknown service: '%s'") % service, - UNKNOWN_SERVICE) - kwargs[service] = True acc = self._get_account(emailaddress) if not acc: raise VMMError(_(u"The account '%s' does not exist.") % - acc.address, NO_SUCH_ACCOUNT) - serviceset = ServiceSet(self._dbh, **kwargs) + acc.address, NO_SUCH_ACCOUNT) + if len(services) == 1 and services[0] == 'default': + serviceset = None + else: + kwargs = dict.fromkeys(SERVICES, False) + for service in set(services): + if service not in SERVICES: + raise VMMError(_(u"Unknown service: '%s'") % service, + UNKNOWN_SERVICE) + kwargs[service] = True + serviceset = ServiceSet(self._dbh, **kwargs) acc.update_serviceset(serviceset) def relocated_add(self, emailaddress, targetaddress): diff -r 2bb40aaef94e -r 2676dbf43e1c man/de/man1/vmm.1 --- a/man/de/man1/vmm.1 Fri Apr 13 23:24:12 2012 +0200 +++ b/man/de/man1/vmm.1 Sat Apr 14 00:36:43 2012 +0200 @@ -734,10 +734,15 @@ .B 0 (null) als Anzahl von Nachrichten angewendet werden. .PP +Anstelle einer Limite, bewirkt das Wort 'default', daß die Limite des +Kontos gelöscht wird und somit wieder der in der Domain gespeicherte +Wert für das Konto gilt. +.PP Beispiel: .PP .nf .B vmm userquota d.user@example.com 750m +.B vmm userquote d.user@example.com default .fi .\" ------------------------------------ .SS userservices (us) @@ -750,10 +755,15 @@ Der Zugriff auf alle nicht genannten Services wird dem Anwender, mit der angegebenen Adresse, verwehrt werden. .PP +Anstelle einer Liste, bewirkt das Wort 'default', daß die benutzerspezifische +Liste gelöscht wird und somit wieder die in der Domain gespeicherte +Liste für das Konto gilt. +.PP Beispiel: -.PP\ +.PP .nf .B vmm userservices d.user@example.com SMTP IMAP +.B vmm userservices d.user@example.com default .\" ------------------------------------ .SS usertransport (ut) .BI "vmm usertransport" " address transport" @@ -762,6 +772,11 @@ .I transport für das Konto mit der angegebenen Adresse bestimmt werden. .PP +Wird als +.I transport +das Wort 'default' übergeben, so wird der explizite Transport des Kontos +wieder gelöscht und der in der Domain gespeicherte Wert benutzt. +.PP Beispiel: .br Angenommen, Sie wollen mit Dovecots @@ -773,8 +788,8 @@ .nf .B vmm ut d.user@example.com \(dqretry:4.0.0 Mailbox being migrated\(dq # Konvertieren der Mailbox … -# … danach den Transport auf Dovecots lmtp setzen -.B vmm usertransport d.user@example.com lmtp:unix:private/dovecot\-lmtp +# … danach den Transport auf den Domain-Default setzen +.B vmm usertransport d.user@example.com default .fi .\" ----------------------------------------------------------------------- .SH ALIAS UNTERBEFEHLE diff -r 2bb40aaef94e -r 2676dbf43e1c man/man1/vmm.1 --- a/man/man1/vmm.1 Fri Apr 13 23:24:12 2012 +0200 +++ b/man/man1/vmm.1 Sat Apr 14 00:36:43 2012 +0200 @@ -700,6 +700,11 @@ .B 0 (zero) will be applied. .PP +Instead of +.I transport +pass 'default' to remove the account-specific override, causing the +domain's value to be in effect. +.PP Example: .PP .nf @@ -716,6 +721,11 @@ given .IR address . .PP +Instead of +.I transport +pass 'default' to remove the account-specific override, causing the +domain's value to be in effect. +.PP Example: .PP\ .nf @@ -728,6 +738,11 @@ .I transport for an account can be specified with this subcommand. .PP +Instead of +.I transport +pass 'default' to remove the account-specific override, causing the +domain's value to be in effect. +.PP Example: .br Assumed you want to use Dovecot's