]> Frank Brehm's Git Trees - pixelpark/pp-admin-tools.git/commitdiff
Translations
authorFrank Brehm <frank@brehm-online.com>
Thu, 8 Sep 2022 13:42:25 +0000 (15:42 +0200)
committerFrank Brehm <frank@brehm-online.com>
Thu, 8 Sep 2022 13:42:25 +0000 (15:42 +0200)
lib/pp_admintools/app/__init__.py
lib/pp_admintools/app/remove_ldap_user.py
locale/de_DE/LC_MESSAGES/pp_admintools.po
locale/en_US/LC_MESSAGES/pp_admintools.po
locale/pp_admintools.pot

index c3c13bbb8d8d0124d9bf78bb56299a0432b22a94..77d0f80b1fbc544a815f9c98f92ff644527938c6 100644 (file)
@@ -14,7 +14,7 @@ import signal
 import re
 
 # Third party modules
-from fb_tools.common import to_bool, pp
+from fb_tools.common import to_bool
 from fb_tools.cfg_app import FbConfigApplication
 from fb_tools.errors import FbAppError, IoTimeoutError
 from fb_tools.multi_config import BaseMultiConfig
@@ -92,7 +92,12 @@ class BaseDPXApplication(FbConfigApplication):
 
     default_prompt_timeout = 10
     max_prompt_timeout = 600
-    re_yes_no = re.compile(r'^\s*(y|yes|n|no)?\s*$', re.IGNORECASE)
+
+    yes_list = ['y', 'yes']
+    no_list = ['n', 'no']
+
+    pattern_yes_no = r'^\s*(' + '|'.join(yes_list) + '|' + '|'.join(no_list) + r')?\s*$'
+    re_yes_no = re.compile(pattern_yes_no, re.IGNORECASE)
 
     # -------------------------------------------------------------------------
     def __init__(
@@ -101,6 +106,8 @@ class BaseDPXApplication(FbConfigApplication):
             argparse_epilog=None, argparse_prefix_chars='-', env_prefix=None,
             config_dir=DEFAULT_CONFIG_DIR):
 
+        self.init_yes_no_lists()
+
         self._yes = False
         self._prompt_timeout = self.default_prompt_timeout
 
@@ -111,6 +118,28 @@ class BaseDPXApplication(FbConfigApplication):
             env_prefix=env_prefix, config_dir=config_dir
         )
 
+    # -------------------------------------------------------------------------
+    @classmethod
+    def init_yes_no_lists(cls):
+
+        yes = _('yes')
+        if yes not in cls.yes_list:
+            cls.yes_list.append(yes)
+        yes_fc = yes[0]
+        if yes_fc not in cls.yes_list:
+            cls.yes_list.append(yes_fc)
+
+        no = _('no')
+        if no not in cls.no_list and no not in cls.yes_list:
+            cls.no_list.append(no)
+        no_fc = no[0]
+        if no_fc not in cls.no_list and no_fc not in cls.yes_list:
+            cls.no_list.append(no_fc)
+
+        cls.pattern_yes_no = (
+            r'^\s*(' + '|'.join(cls.yes_list) + '|' + '|'.join(cls.no_list) + r')?\s*$')
+        cls.re_yes_no = re.compile(cls.pattern_yes_no, re.IGNORECASE)
+
     # -----------------------------------------------------------
     @property
     def yes(self):
@@ -131,8 +160,10 @@ class BaseDPXApplication(FbConfigApplication):
     def prompt_timeout(self, value):
         v = int(value)
         if v < 0 or v > self.max_prompt_timeout:
-            LOG.warning(_("Wrong prompt timeout {v!r}, must be 0 >= 0 and <= {max}.").format(
-                v=value, max=self.max_prompt_timeout))
+            msg = _(
+                "Wrong prompt timeout {v!r}, must be greater or equal to Null "
+                "and less or equal to {max}.").format(v=value, max=self.max_prompt_timeout)
+            LOG.warning(msg)
         else:
             self._prompt_timeout = v
 
@@ -152,6 +183,9 @@ class BaseDPXApplication(FbConfigApplication):
 
         res['prompt_timeout'] = self.prompt_timeout
         res['yes'] = self.yes
+        res['yes_list'] = self.yes_list
+        res['no_list'] = self.no_list
+        res['pattern_yes_no'] = self.pattern_yes_no
 
         return res
 
@@ -211,37 +245,18 @@ class BaseDPXApplication(FbConfigApplication):
         def prompt_alarm_caller(signum, sigframe):
             raise TimeoutOnPromptError(self.prompt_timeout)
 
-        yes_list = ['y', 'yes']
-        yes = _('yes')
-        if yes not in yes_list:
-            yes_list.append(yes)
-        yes_fc = yes[0]
-        if yes_fc not in yes_list:
-            yes_list.append(yes_fc)
-        if self.verbose > 1:
-            LOG.debug("Allowed values for 'Yes': " + pp(yes_list))
-
-        no_list = ['n', 'no']
-        no = _('no')
-        if no not in no_list and no not in yes_list:
-            no_list.append(no)
-        no_fc = no[0]
-        if no_fc not in no_list and no_fc not in yes_list:
-            no_list.append(no_fc)
-        if self.verbose > 1:
-            LOG.debug("Allowed values for 'No': " + pp(no_list))
-
+        msg_intr = _("Interrupted on demand.")
         try:
             signal.signal(signal.SIGALRM, prompt_alarm_caller)
             signal.alarm(self.prompt_timeout)
 
             reply = ''
-            msg_intr = _("Interrupted on demand.")
             while True:
                 try:
                     reply = input(prompt)
                 except EOFError:
                     raise AbortAppError(msg_intr)
+                signal.alarm(self.prompt_timeout)
                 match = self.re_yes_no.match(reply)
                 if match:
                     if match.group(1) is None:
@@ -250,10 +265,10 @@ class BaseDPXApplication(FbConfigApplication):
                         return bool(default_on_empty)
                     # There is an answer
                     r = match.group(1).lower()
-                    if r in no_list:
+                    if r in self.no_list:
                         # Continue == no
                         return False
-                    elif r in yes_list:
+                    elif r in self.yes_list:
                         # Continue == yes
                         return True
                     else:
@@ -267,6 +282,11 @@ class BaseDPXApplication(FbConfigApplication):
             LOG.error(msg)
             self.exit(10)
 
+        except KeyboardInterrupt:
+            msg = _("Got a {}:").format('KeyboardInterrupt') + ' ' + msg_intr
+            LOG.error(msg)
+            self.exit(10)
+
         finally:
             signal.alarm(0)
 
index fa458d50b316d434ec5e2eb469cc88342972e012..afa69505bc05fa20942c6294a5893f46abdcfc6b 100644 (file)
@@ -248,7 +248,6 @@ class RemoveLdapUserApplication(BaseLdapApplication):
 
         return True
 
-
     # -------------------------------------------------------------------------
     def eval_user_dns(self, user):
 
@@ -346,7 +345,7 @@ class RemoveLdapUserApplication(BaseLdapApplication):
         changes['shadowExpire'] = [(MODIFY_REPLACE, self.shadow_expire)]
         changes['loginShell'] = [(MODIFY_REPLACE, self.nologin_shell)]
 
-        LOG.info(_("Updating user info for {dn!r} on from {inst} ...").format(
+        LOG.info(_("Updating user info for {dn!r} on {inst} ...").format(
             dn=dn, inst=connect_info.url))
         self.modify_entry(inst, dn, changes)
 
index f68243d732f710a9a1b2f962de907d3f8b331cb3..d9823c15045a484a356c3326b1cd6bf5ef4e73d9 100644 (file)
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: pp_admintools 0.9.1\n"
 "Report-Msgid-Bugs-To: frank.brehm@pixelpark.com\n"
-"POT-Creation-Date: 2022-05-18 14:34+0200\n"
-"PO-Revision-Date: 2022-05-18 14:10+0100\n"
+"POT-Creation-Date: 2022-09-08 15:41+0200\n"
+"PO-Revision-Date: 2022-09-08 13:40+0200\n"
 "Last-Translator: Frank Brehm <frank.brehm@pixelpark.com>\n"
 "Language: de_DE\n"
 "Language-Team: de_DE <solution@pixelpark.com>\n"
@@ -16,206 +16,230 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.10.1\n"
+"Generated-By: Babel 2.10.3\n"
 
-#: lib/pp_admintools/argparse_actions.py:45
-msgid "Value {v!r} for a {what} port is invalid:"
-msgstr "Der Wert {v!r} für ein {what}-Port ist ungültig."
+#: lib/pp_admintools/app/__init__.py:57
+msgid "Timeout on answering on the console."
+msgstr "Zeitüberschreitung beim Antworten an der Konsole."
 
-#: lib/pp_admintools/argparse_actions.py:50
-msgid "Value {v!r} for a {what} port must be greater than 0 and less than {max}."
-msgstr "Der Wert {v!r} für ein {what}-Port muss größer als 0 und kleiner als {max} sein."
+#: lib/pp_admintools/app/__init__.py:76
+msgid "a timeout must be greater than zero and less or equal to {}."
+msgstr "Ein iTimeout muss größer als Null und kleiner oder gleich {} sein."
 
-#: lib/pp_admintools/argparse_actions.py:77
-msgid "Value {v!r} for a timeout of {what} is invalid:"
-msgstr "Der Wert {v!r} für einen Timeout von {what} ist ungültig."
+#: lib/pp_admintools/app/__init__.py:81
+msgid "Wrong timeout {!r}:"
+msgstr "Ungültiger Timeout {!r}:"
 
-#: lib/pp_admintools/argparse_actions.py:83
-msgid "Value {v!r} for a timeout of {what} must be greater than 0 and less than {max}."
-msgstr "Der Wert {v!r} für einen Timeout von {what} muss größer als 0 und kleiner als {max} sein."
+#: lib/pp_admintools/app/__init__.py:125 lib/pp_admintools/app/remove_ldap_user.py:238
+msgid "yes"
+msgstr "ja"
+
+#: lib/pp_admintools/app/__init__.py:132
+msgid "no"
+msgstr "nein"
+
+#: lib/pp_admintools/app/__init__.py:163
+msgid "Wrong prompt timeout {v!r}, must be greater or equal to Null and less or equal to {max}."
+msgstr ""
+"Falscher Eingabe-Timeout {v!r}, er muss größer oder gleich Null sowie kleiner oder gleich {max} "
+"sein."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:121
+#: lib/pp_admintools/app/__init__.py:243
+msgid "Yes/No"
+msgstr "Ja/Nein"
+
+#: lib/pp_admintools/app/__init__.py:248
+msgid "Interrupted on demand."
+msgstr "Abbruch auf Verlangen."
+
+#: lib/pp_admintools/app/__init__.py:281 lib/pp_admintools/app/__init__.py:286
+msgid "Got a {}:"
+msgstr "Habe ein {} erhalten:"
+
+#: lib/pp_admintools/app/dns_deploy_zones.py:121
 msgid "Generation of the BIND9 configuration file for slave zones."
 msgstr "Generierung der BIND9-Konfigurationsdatei für Slave-Zonen."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:263
+#: lib/pp_admintools/app/dns_deploy_zones.py:263
 msgid "Keep a backup file for each changed configuration file."
 msgstr "Eine Backup-Datei für jede geänderte Konfigurationsdatei aufbewahren."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:268
+#: lib/pp_admintools/app/dns_deploy_zones.py:268
 msgid "Keeping the temporary directory instead of removing it at the end (e.g. for debugging purposes)"
 msgstr "Aufbewahren des temporären Verzeichnisses, anstatt es am Ende zu löschen (z.Bsp. zum Debuggen)"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:294
+#: lib/pp_admintools/app/dns_deploy_zones.py:294
 msgid "Post init phase."
 msgstr "Nach-Init-Phase."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:298
+#: lib/pp_admintools/app/dns_deploy_zones.py:298
 msgid "My own post init phase."
 msgstr "Die eigene Nach-Init-Phase."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:314
+#: lib/pp_admintools/app/dns_deploy_zones.py:314
 msgid "Unknown time zone: {!r}."
 msgstr "Unbekannte Zeitzone: {!r}."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:334
+#: lib/pp_admintools/app/dns_deploy_zones.py:334
 msgid "You must be root to execute this script."
 msgstr "Du musst root sein, um dieses Skript ausführen zu können."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:336
+#: lib/pp_admintools/app/dns_deploy_zones.py:336
 msgid "But in simulation mode we are continuing nevertheless."
 msgstr "Aber im Simulationsmodus machen wir trotzdem weiter."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:346
+#: lib/pp_admintools/app/dns_deploy_zones.py:346
 msgid "Using the global DNS master is not supported, please use 'local' or 'public'"
 msgstr "Die Verwendung des glovalen Masters wird nicht unterstützt, bitte 'local' oder 'public' verwenden"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:354
+#: lib/pp_admintools/app/dns_deploy_zones.py:354
 msgid "Starting: {}"
 msgstr "Starte: {}"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:361
+#: lib/pp_admintools/app/dns_deploy_zones.py:361
 msgid "Could not occupy pidfile: {}"
 msgstr "Konnte PID-Datei nicht vereinnahmen."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:386
+#: lib/pp_admintools/app/dns_deploy_zones.py:386
 msgid "Ending: {}"
 msgstr "Beendet: {}"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:391
+#: lib/pp_admintools/app/dns_deploy_zones.py:391
 msgid "Cleaning up ..."
 msgstr "Aufräumen …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:395
+#: lib/pp_admintools/app/dns_deploy_zones.py:395
 msgid "Searching for {!r}."
 msgstr "Suche nach {!r}."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:398
+#: lib/pp_admintools/app/dns_deploy_zones.py:398
 msgid "Keep existing backup file {!r}."
 msgstr "Behalte existierende Backup-Datei {!r}."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:400
+#: lib/pp_admintools/app/dns_deploy_zones.py:400
 msgid "Removing {!r} ..."
 msgstr "Lösche {!r} …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:406
+#: lib/pp_admintools/app/dns_deploy_zones.py:406
 msgid "Error removing {p!r} - {c}: {e}"
 msgstr "Fehler beim Löschen {p!r} - {c}: {e}"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:411
+#: lib/pp_admintools/app/dns_deploy_zones.py:411
 msgid "Temporary directory {!r} will not be removed. It's on yours to remove it manually."
 msgstr ""
 "Das temporäre Verzeichnis {!r} wird nicht gelöscht. Du musst Dich selbst darum kümmern, es "
 "manuell zu löschen."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:416
+#: lib/pp_admintools/app/dns_deploy_zones.py:416
 msgid "Destroying temporary directory {!r} ..."
 msgstr "Zerstöre temporäres Verzeichnis {!r} …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:425
+#: lib/pp_admintools/app/dns_deploy_zones.py:425
 msgid "Temporary directory: {!r}."
 msgstr "Temporäres Verzeichnis: {!r}."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:430
+#: lib/pp_admintools/app/dns_deploy_zones.py:430
 msgid "Temporary zones conf: {!r}"
 msgstr "Temporäre Zonenkonfiguration: {!r}"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:435
+#: lib/pp_admintools/app/dns_deploy_zones.py:435
 msgid "Trying to get all keys from named.conf ..."
 msgstr "Versuche alle Schlüssel der named.conf zu ermitteln …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:441 lib/pp_admintools/dns_deploy_zones_app.py:795
-#: lib/pp_admintools/dns_deploy_zones_app.py:831 lib/pp_admintools/dns_deploy_zones_app.py:863
-#: lib/pp_admintools/dns_deploy_zones_app.py:898 lib/pp_admintools/dns_deploy_zones_app.py:933
-#: lib/pp_admintools/mail_app.py:330
+#: lib/pp_admintools/app/dns_deploy_zones.py:441 lib/pp_admintools/app/dns_deploy_zones.py:795
+#: lib/pp_admintools/app/dns_deploy_zones.py:831 lib/pp_admintools/app/dns_deploy_zones.py:863
+#: lib/pp_admintools/app/dns_deploy_zones.py:898 lib/pp_admintools/app/dns_deploy_zones.py:933
+#: lib/pp_admintools/app/mail.py:326
 msgid "Executing: {}"
 msgstr "Führe aus: {}"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:447 lib/pp_admintools/dns_deploy_zones_app.py:801
+#: lib/pp_admintools/app/dns_deploy_zones.py:447 lib/pp_admintools/app/dns_deploy_zones.py:801
+#: lib/pp_admintools/app/ldap.py:666 lib/pp_admintools/app/ldap.py:719
+#: lib/pp_admintools/app/ldap.py:772
 msgid "Result:"
 msgstr "Ergebnis:"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:488 lib/pp_admintools/dns_deploy_zones_app.py:490
+#: lib/pp_admintools/app/dns_deploy_zones.py:488 lib/pp_admintools/app/dns_deploy_zones.py:490
 msgid "Found named keys:"
 msgstr "iGefundene Schlüssel von named:"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:490 lib/pp_admintools/dns_deploy_zones_app.py:521
+#: lib/pp_admintools/app/dns_deploy_zones.py:490 lib/pp_admintools/app/dns_deploy_zones.py:521
 msgid "None"
 msgstr "Keine"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:495
+#: lib/pp_admintools/app/dns_deploy_zones.py:495
 msgid "Generating {} ..."
 msgstr "Generiere {} …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:519 lib/pp_admintools/dns_deploy_zones_app.py:521
+#: lib/pp_admintools/app/dns_deploy_zones.py:519 lib/pp_admintools/app/dns_deploy_zones.py:521
 msgid "Collected server configuration:"
 msgstr "Ermittelte Servers-Konfiguration:"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:542
+#: lib/pp_admintools/app/dns_deploy_zones.py:542
 msgid "Generated file {!r}:"
 msgstr "Generierte Datei {!r}:"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:558
+#: lib/pp_admintools/app/dns_deploy_zones.py:558
 msgid "Pure local zone {!r} will not be considered."
 msgstr "Die rein lokale Zone {!r} wird nich mit beachtet."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:590
+#: lib/pp_admintools/app/dns_deploy_zones.py:590
 msgid "Key {k!r} for zone {z!r} not found in named configuration."
 msgstr "Der Schlüssel {k!r} für die Zone {z!r} wurde in der named-Konfiguration nicht gefunden."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:620
+#: lib/pp_admintools/app/dns_deploy_zones.py:620
 msgid "Got IPv4 tuples: {}"
 msgstr "Habe IPv4-Tupels erhalten: {}"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:644
+#: lib/pp_admintools/app/dns_deploy_zones.py:644
 msgid "Got IPv6 tokens: {}"
 msgstr "Habe IPv6-Tupels erhalten: {}"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:651
+#: lib/pp_admintools/app/dns_deploy_zones.py:651
 msgid "Comparing generated files with existing ones."
 msgstr "Vergleiche die generierten Dateien mit den existierenden."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:658
+#: lib/pp_admintools/app/dns_deploy_zones.py:658
 msgid "Files to replace:"
 msgstr "Dateien, die ersetzt werden:"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:664
+#: lib/pp_admintools/app/dns_deploy_zones.py:664
 msgid "Source file not defined."
 msgstr "Die Quell-Datei ist nicht definiert."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:666
+#: lib/pp_admintools/app/dns_deploy_zones.py:666
 msgid "Target file not defined."
 msgstr "Die Ziel-Datei ist nicht definiert."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:668
+#: lib/pp_admintools/app/dns_deploy_zones.py:668
 msgid "Comparing {one!r} with {two!r} ..."
 msgstr "Vergleiche {one!r} mit {two!r} …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:672 lib/pp_admintools/dns_deploy_zones_app.py:681
+#: lib/pp_admintools/app/dns_deploy_zones.py:672 lib/pp_admintools/app/dns_deploy_zones.py:681
 msgid "{what} {f!r} does not exists."
 msgstr "Die {what} {f!r} existiert nicht."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:673 lib/pp_admintools/dns_deploy_zones_app.py:677
+#: lib/pp_admintools/app/dns_deploy_zones.py:673 lib/pp_admintools/app/dns_deploy_zones.py:677
 msgid "Source file"
 msgstr "Quell-Datei"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:676 lib/pp_admintools/dns_deploy_zones_app.py:686
+#: lib/pp_admintools/app/dns_deploy_zones.py:676 lib/pp_admintools/app/dns_deploy_zones.py:686
 msgid "{what} {f!r} is not a regular file."
 msgstr "Die {what} {f!r} ist keine reguläre Datei."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:682 lib/pp_admintools/dns_deploy_zones_app.py:687
+#: lib/pp_admintools/app/dns_deploy_zones.py:682 lib/pp_admintools/app/dns_deploy_zones.py:687
 msgid "Target file"
 msgstr "Ziel-Datei"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:693 lib/pp_admintools/dns_deploy_zones_app.py:710
+#: lib/pp_admintools/app/dns_deploy_zones.py:693 lib/pp_admintools/app/dns_deploy_zones.py:710
 msgid "Reading {!r} ..."
 msgstr "Lese {!r} …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:703 lib/pp_admintools/dns_deploy_zones_app.py:720
+#: lib/pp_admintools/app/dns_deploy_zones.py:703 lib/pp_admintools/app/dns_deploy_zones.py:720
 msgid "Cleaned version of {!r}:"
 msgstr "Bereinigte Version von {!r}:"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:725
+#: lib/pp_admintools/app/dns_deploy_zones.py:725
 msgid ""
 "Source file {sf!r} has different number essential lines ({sl}) than the target file {tf!r} ({tl}"
 " lines)."
@@ -223,230 +247,160 @@ msgstr ""
 "Die Quelldatei {sf!r} besitzt eine andere Anzahl essentieller Zeilen ({sl}) als die Zieldatei "
 "{tf!r} ({tl} lines)."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:734
+#: lib/pp_admintools/app/dns_deploy_zones.py:734
 msgid "Source file {sf!r} has a different content than the target file {tf!r}."
 msgstr "Die Quelldate {sf!r} hat einen anderen Inhalt als die Zielfatei {tf!r}."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:746
+#: lib/pp_admintools/app/dns_deploy_zones.py:746
 msgid "No replacement of any config files necessary."
 msgstr "Es muss keine Datei ersetzt werden."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:749
+#: lib/pp_admintools/app/dns_deploy_zones.py:749
 msgid "Start replacing of config files ..."
 msgstr "Starting Ersatz von Konfigurations-Dateien …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:757 lib/pp_admintools/dns_deploy_zones_app.py:767
+#: lib/pp_admintools/app/dns_deploy_zones.py:757 lib/pp_admintools/app/dns_deploy_zones.py:767
 msgid "Copying {frm!r} => {to!r} ..."
 msgstr "Kopieren {frm!r} => {to!r} …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:763
+#: lib/pp_admintools/app/dns_deploy_zones.py:763
 msgid "All backuped config files:"
 msgstr "Alle gesicherten Konfigurations-Dateien:"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:775
+#: lib/pp_admintools/app/dns_deploy_zones.py:775
 msgid "Restoring of original config files because of an exception."
 msgstr "Wiederherstellung der Original-Konfigurations-Dateien wegen eines Fehlers."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:779
+#: lib/pp_admintools/app/dns_deploy_zones.py:779
 msgid "Moving {frm!r} => {to!r} ..."
 msgstr "Verschieben {frm!r} => {to!r} …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:785
+#: lib/pp_admintools/app/dns_deploy_zones.py:785
 msgid "Could not find backup file {!r}."
 msgstr "Konnte Backup-Datei {!r} nicht finden."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:790
+#: lib/pp_admintools/app/dns_deploy_zones.py:790
 msgid "Checking syntax correctness of named.conf ..."
 msgstr "Überprüfe synaktische Richtigkeit der named.conf …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:811
+#: lib/pp_admintools/app/dns_deploy_zones.py:811
 msgid "Reload or restart of named is not necessary."
 msgstr "Ein Reload oder Neustart von named ist nicht notwendig."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:816
+#: lib/pp_admintools/app/dns_deploy_zones.py:816
 msgid "Named is not running, please start it manually."
 msgstr "Named läuft nicht, bitte manuell starten."
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:827
+#: lib/pp_admintools/app/dns_deploy_zones.py:827
 msgid "Checking, whether named is running ..."
 msgstr "Überprüfen, ob named läuft …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:845 lib/pp_admintools/dns_deploy_zones_app.py:880
-#: lib/pp_admintools/dns_deploy_zones_app.py:915 lib/pp_admintools/dns_deploy_zones_app.py:950
+#: lib/pp_admintools/app/dns_deploy_zones.py:845 lib/pp_admintools/app/dns_deploy_zones.py:880
+#: lib/pp_admintools/app/dns_deploy_zones.py:915 lib/pp_admintools/app/dns_deploy_zones.py:950
 msgid "Return value: {!r}"
 msgstr "Rückgabewert: {!r}"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:847 lib/pp_admintools/dns_deploy_zones_app.py:849
-#: lib/pp_admintools/dns_deploy_zones_app.py:882 lib/pp_admintools/dns_deploy_zones_app.py:884
-#: lib/pp_admintools/dns_deploy_zones_app.py:917 lib/pp_admintools/dns_deploy_zones_app.py:919
-#: lib/pp_admintools/dns_deploy_zones_app.py:952 lib/pp_admintools/dns_deploy_zones_app.py:954
+#: lib/pp_admintools/app/dns_deploy_zones.py:847 lib/pp_admintools/app/dns_deploy_zones.py:849
+#: lib/pp_admintools/app/dns_deploy_zones.py:882 lib/pp_admintools/app/dns_deploy_zones.py:884
+#: lib/pp_admintools/app/dns_deploy_zones.py:917 lib/pp_admintools/app/dns_deploy_zones.py:919
+#: lib/pp_admintools/app/dns_deploy_zones.py:952 lib/pp_admintools/app/dns_deploy_zones.py:954
 msgid "Output on {}"
 msgstr "Ausgabe an {}"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:859
+#: lib/pp_admintools/app/dns_deploy_zones.py:859
 msgid "Starting {} ..."
 msgstr "Starten {} …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:894
+#: lib/pp_admintools/app/dns_deploy_zones.py:894
 msgid "Restarting {} ..."
 msgstr "Neu starten {} …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:929
+#: lib/pp_admintools/app/dns_deploy_zones.py:929
 msgid "Reloading {} ..."
 msgstr "Reload {} …"
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:202 lib/pp_admintools/dns_deploy_zones_config.py:515
-#: lib/pp_admintools/mail_config.py:187 lib/pp_admintools/pdns_config.py:187
-msgid "Evaluating config section {!r}:"
-msgstr "Evaluiere Konfigurations-Abschnitt {!r}:"
-
-#: lib/pp_admintools/dns_deploy_zones_config.py:290
-msgid "Checking given master address {!r} ..."
-msgstr "Überprüfe die übergebene Master-Adresse {!r} …"
-
-#: lib/pp_admintools/dns_deploy_zones_config.py:302
-msgid "Trying to evaluate address of host {!r} ..."
-msgstr "Versuche die Adresse von Host {!r} zu ermitteln …"
-
-#: lib/pp_admintools/dns_deploy_zones_config.py:311
-msgid "Invalid hostname or address {a!r} found in masters: {e}"
-msgstr "Ungültiger Hostname oder Adresse {a!r} in masters gefunden: {e}"
-
-#: lib/pp_admintools/dns_deploy_zones_config.py:319
-msgid "Got addresses {a!r} for host {h!r}."
-msgstr "Habe Adresse {a!r} für Host {h!r} gefunden."
-
-#: lib/pp_admintools/dns_deploy_zones_config.py:333 lib/pp_admintools/dns_deploy_zones_config.py:356
-#: lib/pp_admintools/dns_deploy_zones_config.py:381 lib/pp_admintools/dns_deploy_zones_config.py:430
-#: lib/pp_admintools/dns_deploy_zones_config.py:479 lib/pp_admintools/dns_deploy_zones_config.py:541
-msgid "The path to {what} must be an absolute path, found {path!r}."
-msgstr "Der Pfad zu {what} muss absolut sein, fand aber {path!r}."
-
-#: lib/pp_admintools/dns_deploy_zones_config.py:342 lib/pp_admintools/dns_deploy_zones_config.py:365
-#: lib/pp_admintools/dns_deploy_zones_config.py:390 lib/pp_admintools/dns_deploy_zones_config.py:415
-#: lib/pp_admintools/dns_deploy_zones_config.py:439 lib/pp_admintools/dns_deploy_zones_config.py:464
-#: lib/pp_admintools/dns_deploy_zones_config.py:488 lib/pp_admintools/dns_deploy_zones_config.py:550
-msgid "Found path to {what}: {path!r}."
-msgstr "Fand Pfad zu {what}: {path!r}."
-
-#: lib/pp_admintools/dns_deploy_zones_config.py:377
-msgid "the named config directory"
-msgstr "das Konfigurationsverzeichnis vin named"
-
-#: lib/pp_admintools/dns_deploy_zones_config.py:402
-msgid "the named config file for zones"
-msgstr "die named-Konfigurationsdatei für Zonen"
-
-#: lib/pp_admintools/dns_deploy_zones_config.py:406 lib/pp_admintools/dns_deploy_zones_config.py:455
-msgid "The path to {what} must not be an absolute path, found {path!r}."
-msgstr "Der Pfad zu {what} farf nicht absolut sein, fand aber {path!r}."
-
-#: lib/pp_admintools/dns_deploy_zones_config.py:427
-msgid "the named base directory"
-msgstr "das Basis-Verzeichnis von named"
-
-#: lib/pp_admintools/dns_deploy_zones_config.py:451
-msgid "the directory for slave zones of named"
-msgstr "das Vezeichnis für Slave-Zonen für named"
-
-#: lib/pp_admintools/dns_deploy_zones_config.py:538
-msgid "the PID file"
-msgstr "die PID-Datei"
-
-#: lib/pp_admintools/dns_deploy_zones_config.py:590
-msgid "Using configured masters:"
-msgstr "Verwende konfigurierte Master:"
-
-#: lib/pp_admintools/dns_deploy_zones_config.py:592
-msgid "No valid masters found in configuration."
-msgstr "Keine gültigen Master in der Konfiguration gefunden."
-
-#: lib/pp_admintools/dns_deploy_zones_config.py:595
-msgid "Evaluated configuration:"
-msgstr "Evaluierte Konfiguration:"
-
-#: lib/pp_admintools/ldap_app.py:68 lib/pp_admintools/ldap_app.py:178
+#: lib/pp_admintools/app/ldap.py:81 lib/pp_admintools/app/ldap.py:184
 msgid "The path {!r} must be an absolute path."
 msgstr "Der Pfad {!r} muss ein absoluter Pfad sein."
 
-#: lib/pp_admintools/ldap_app.py:74 lib/pp_admintools/ldap_app.py:182
+#: lib/pp_admintools/app/ldap.py:87 lib/pp_admintools/app/ldap.py:188
 msgid "The file {!r} does not exists."
 msgstr "Die Datei {!r} existiert nicht."
 
-#: lib/pp_admintools/ldap_app.py:78 lib/pp_admintools/ldap_app.py:186
+#: lib/pp_admintools/app/ldap.py:91 lib/pp_admintools/app/ldap.py:192
 msgid "The given path {!r} exists, but is not a regular file."
 msgstr "Der angegebene Pfad {!r} existiert, ist aber keine reguläre Datei."
 
-#: lib/pp_admintools/ldap_app.py:82 lib/pp_admintools/ldap_app.py:190
+#: lib/pp_admintools/app/ldap.py:95 lib/pp_admintools/app/ldap.py:196
 msgid "The given file {!r} is not readable."
 msgstr "Die angegebene Datei {} ist nicht lesbar."
 
-#: lib/pp_admintools/ldap_app.py:103
+#: lib/pp_admintools/app/ldap.py:116
 msgid "a port number must be greater than zero and less or equal to {}."
 msgstr "ein Port muss größer als Null und kleiner oder gleich {} sein."
 
-#: lib/pp_admintools/ldap_app.py:108
+#: lib/pp_admintools/app/ldap.py:121
 msgid "Wrong port number {!r}:"
 msgstr "Ungültige Portnummer {!r}."
 
-#: lib/pp_admintools/ldap_app.py:130
-msgid "a timeout must be greater than zero and less or equal to {}."
-msgstr "Ein iTimeout muss größer als Null und kleiner oder gleich {} sein."
+#: lib/pp_admintools/app/ldap.py:231
+msgid "LDAP options"
+msgstr "LDAP-Optionen"
 
-#: lib/pp_admintools/ldap_app.py:135
-msgid "Wrong timeout {!r}:"
-msgstr "Ungültiger Timeout {!r}:"
-
-#: lib/pp_admintools/ldap_app.py:223
+#: lib/pp_admintools/app/ldap.py:233
 msgid "Options for the default LDAP connection"
 msgstr "Optionen für die Vorgabe-LDAP-Verbindung"
 
-#: lib/pp_admintools/ldap_app.py:230
+#: lib/pp_admintools/app/ldap.py:235
+msgid "Options fo LDAP connections"
+msgstr "Optionen für die LDAP-Verbindungen"
+
+#: lib/pp_admintools/app/ldap.py:242 lib/pp_admintools/app/remove_ldap_user.py:238
 msgid "No"
 msgstr "Nein"
 
-#: lib/pp_admintools/ldap_app.py:232
+#: lib/pp_admintools/app/ldap.py:244
 msgid "Yes"
 msgstr "Ja"
 
-#: lib/pp_admintools/ldap_app.py:238
+#: lib/pp_admintools/app/ldap.py:250
 msgid "HOST"
 msgstr "HOST"
 
-#: lib/pp_admintools/ldap_app.py:239
+#: lib/pp_admintools/app/ldap.py:251
 msgid "Hostname or address of the LDAP server to use. Default: {!r}"
 msgstr "Der Hostname oder die Adresse des zu verwendenden LDAP-Servers. Vorgabe: {!r}"
 
-#: lib/pp_admintools/ldap_app.py:246
+#: lib/pp_admintools/app/ldap.py:258
 msgid "Use ldaps to connect to the LDAP server. Default: {}"
 msgstr "Soll ldaps zum Verbinden mit dem LDAP-Server verwendet werden? Vorgabe: {}."
 
-#: lib/pp_admintools/ldap_app.py:251 lib/pp_admintools/mail_app.py:265
-#: lib/pp_admintools/pdns_app.py:275
+#: lib/pp_admintools/app/ldap.py:263 lib/pp_admintools/app/mail.py:261
+#: lib/pp_admintools/app/pdns.py:275
 msgid "PORT"
 msgstr "PORT"
 
-#: lib/pp_admintools/ldap_app.py:253
+#: lib/pp_admintools/app/ldap.py:265
 msgid "The port number to connect to the LDAP server. Default: {}"
 msgstr "Welcher Port soll verwendet werden, um sich mit dem LDAP-Server zu verbinden? Vorgabe: {}."
 
-#: lib/pp_admintools/ldap_app.py:259
+#: lib/pp_admintools/app/ldap.py:271
 msgid "The base DN used as the root for the LDAP searches. Default: {!r}"
 msgstr "Die Basis-DN, die als Ausgangspunt bei LDAP-Suchen verwendet werden soll. Vorgabe: {!r}"
 
-#: lib/pp_admintools/ldap_app.py:266
+#: lib/pp_admintools/app/ldap.py:278
 msgid "The Bind DN to use to connect to the LDAP server. Default: {!r}"
 msgstr "Die Bind-DN, die zur Verbindung mit dem LDAP-Server verwendet werden soll. Vorgabe: {!r}"
 
-#: lib/pp_admintools/ldap_app.py:274
+#: lib/pp_admintools/app/ldap.py:286
 msgid "PASSWORD"
 msgstr "PASSWORT"
 
-#: lib/pp_admintools/ldap_app.py:275
+#: lib/pp_admintools/app/ldap.py:287
 msgid "Use PASSWORD as the password for simple LDAP authentication."
 msgstr "Verwende PASSWORT als Passwort für die einfache Authentifizierung."
 
-#: lib/pp_admintools/ldap_app.py:280
+#: lib/pp_admintools/app/ldap.py:292
 msgid ""
 "Prompt for simple LDAP authentication. This is used instead of specifying the password on the "
 "command line."
@@ -454,102 +408,258 @@ msgstr ""
 "Nachfrage nach dem Passwort für eine einfache LDAP-Authentifizierung. Dies wird anstelle der "
 "Angabe des Passwortes an der Kommandozeile verwendet."
 
-#: lib/pp_admintools/ldap_app.py:286
+#: lib/pp_admintools/app/ldap.py:298
 msgid "PASSWORD_FILE"
 msgstr "PASSWORT_DATEI"
 
-#: lib/pp_admintools/ldap_app.py:288
+#: lib/pp_admintools/app/ldap.py:300
 msgid "Use contents of PASSWORD_FILE as the password for simple authentication."
 msgstr "Verwende den Inhalt der PASSWORT_DATEI als das Passort für eine einfache LDAP-Authentifizierung."
 
-#: lib/pp_admintools/ldap_app.py:293
+#: lib/pp_admintools/app/ldap.py:308 lib/pp_admintools/app/pdns.py:249
+msgid "INSTANCE"
+msgstr "INSTANZ"
+
+#: lib/pp_admintools/app/ldap.py:311
+msgid ""
+"The LDAP instance (LDAP cluster) from configuration, where to execute this script. If not given,"
+" then the instance {!r} will be used."
+msgstr ""
+"Die LDAP-Instanz (das LDAP-Cluster) aus der Konfiguration, in welcher das Skript ausgeführt "
+"werden soll. Wenn nicht angegeben, wird die Instanz {!r} verwendet."
+
+#: lib/pp_admintools/app/ldap.py:314
+msgid ""
+"The LDAP instance (LDAP cluster) from configuration, where to execute this script. It is "
+"possible to give here the value {val_all!r}, then all found LDAP instances except {default!r} "
+"are used. It is alo possible to give the value {val_list!r}, then all configured LDAP instances "
+"are shown, and the application is exiting. If not given, then the instance {default!r} will be "
+"used."
+msgstr ""
+"Die LDAP-Instanz (das LDAP-Cluster) aus der Konfiguration, für das das Skript ausgeführt werden "
+"soll.Es ist möglich, hier den Wert {val_all!r} anzugeben, in dem Fall werden alle LDAP-Instanzen"
+" außer {default!r} verwendet. Es ist ebenfalls möglich, den Wert {val_list!r} anzugeben, in "
+"diesem Fall werden alle LDAP-Instanzen ausgegeben, und das Skript beendet sich. Wenn nichts "
+"angegeben wird, wird die Instanz {default!r} verwendet."
+
+#: lib/pp_admintools/app/ldap.py:333
 msgid "SECONDS"
 msgstr "SEKUNDEN"
 
-#: lib/pp_admintools/ldap_app.py:295
+#: lib/pp_admintools/app/ldap.py:335
 msgid "Using the given timeout in seconds for all LDAP operations. Default: {}"
 msgstr "Der Timeout in Sekunden für alle LDAP-Operationen. Vorgabe: {}."
 
-#: lib/pp_admintools/ldap_config.py:146
-msgid "Invalid port {!r} for LDAP server given."
-msgstr "Ungültiger Port {!r} für den LDAP-Server angegeben."
+#: lib/pp_admintools/app/ldap.py:367
+msgid "Checking given instances."
+msgstr "Überprüfe die übergebenen Instanzen."
 
-#: lib/pp_admintools/ldap_config.py:159
-msgid "An empty Base DN for LDAP searches is not allowed."
-msgstr "Eine leere Basis-DN für LDAP-Suchen ist nicht erlaubt."
+#: lib/pp_admintools/app/ldap.py:371
+msgid "Given insts:"
+msgstr "Übergebene Instanzen:"
 
-#: lib/pp_admintools/ldap_config.py:365
-msgid "Value {!r} for a timeout is invalid."
-msgstr "Der Wert {!r} für einen Timeout ist ungültig."
+#: lib/pp_admintools/app/ldap.py:408
+msgid "Configured LDAP instances:"
+msgstr "Konfigurierte LDAP-Instanzen:"
 
-#: lib/pp_admintools/ldap_config.py:389
-msgid "Invalid value {val!r} in section {sec!r} for a LDAP {what}."
-msgstr "Ungültiger Wert {val!r} in Abschnitt {sec!r} für ein LDAP-{what}."
+#: lib/pp_admintools/app/ldap.py:422
+msgid "Verifying given instances ..."
+msgstr "Überprüfene Instanzen …"
 
-#: lib/pp_admintools/ldap_config.py:438
-msgid "Unknown LDAP configuration key {key} found in section {sec!r}."
-msgstr "Unbekannten Konfigurationsschlüssel {key} in Abschnitt {sec!r} gefunden."
+#: lib/pp_admintools/app/ldap.py:440
+msgid "LDAP instance {!r} not found in configuration."
+msgstr "Die LDAP-Instanz {!r} wurde nicht in der Konfiguration gefunden."
+
+#: lib/pp_admintools/app/ldap.py:448
+msgid "LDAP instances to use:"
+msgstr "Verwendete LDAP-Instanzen:"
+
+#: lib/pp_admintools/app/ldap.py:497
+msgid "Preparations ..."
+msgstr "Vorbereitungen …"
+
+#: lib/pp_admintools/app/ldap.py:500
+msgid "Open all necessary LDAP connections ..."
+msgstr "Öffne alle notwendigen LDAP-Verbindungen …"
+
+#: lib/pp_admintools/app/ldap.py:511
+msgid "Connecting to LDAP server {} ..."
+msgstr "Verbinde mit LDAP-Server {} …"
+
+#: lib/pp_admintools/app/ldap.py:526
+msgid "Connect options to server {!r}:"
+msgstr "Verbindungs-Optionen zu Server {!r}:"
+
+#: lib/pp_admintools/app/ldap.py:534
+msgid "LDAP server {s}: {re}"
+msgstr "LDAP-Server {s}: {re}"
+
+#: lib/pp_admintools/app/ldap.py:542
+msgid "Info about LDAP server {}:"
+msgstr "Informationen zu LDAP-Server {}:"
+
+#: lib/pp_admintools/app/ldap.py:549
+msgid "Finishing ..."
+msgstr "Beende …"
+
+#: lib/pp_admintools/app/ldap.py:558
+msgid "Disconnecting from all remaining LDAP instances ..."
+msgstr "Trenne Verbindung zu allen verbleibenden LDAP-Instanzen …"
+
+#: lib/pp_admintools/app/ldap.py:571
+msgid "Unbinding from LDAP server {!r} ..."
+msgstr "Trenne Bindung zu LDAP-Server {!r} …"
+
+#: lib/pp_admintools/app/ldap.py:578
+msgid "Disconnecting from LDAP server {!r} ..."
+msgstr "Trenne Verbindung zu LDAP-Server {!r} …"
+
+#: lib/pp_admintools/app/ldap.py:587
+msgid "Trying to evaluate DN of user {user!r} in LDAP instance {inst} ..."
+msgstr "Versuche den DN des Nutzer {user!r} auf der LDAP-Instanz {inst} zu ermitteln …"
+
+#: lib/pp_admintools/app/ldap.py:592
+msgid "Trying to evaluate DN of user {u!r} as a mail address ..."
+msgstr "Versuche den DN des Nutzer {u!r} als Mailadresse zu ermitteln …"
+
+#: lib/pp_admintools/app/ldap.py:599
+msgid "Trying to evaluate DN of user {u!r} as a LDAP DN ..."
+msgstr "Versuche den DN des Nutzer {u!r} als LDAP DN zu ermitteln …"
+
+#: lib/pp_admintools/app/ldap.py:606
+msgid "Trying to evaluate DN of user {u!r} as a UID (Posix user name) ..."
+msgstr "Versuche den DN des Nutzer {u!r} als UID (POSIX Benutzername) zu ermitteln …"
+
+#: lib/pp_admintools/app/ldap.py:615 lib/pp_admintools/app/remove_ldap_user.py:258
+msgid "Empty user given."
+msgstr "Leere Nutzername übergeben."
 
-#: lib/pp_admintools/mail_app.py:108
+#: lib/pp_admintools/app/ldap.py:618
+msgid "Trying to evaluate DN of user {u!r} as a CN ({c}) ..."
+msgstr "Versuche den DN des Nutzer {u!r} als CN ({c}) zu ermitteln …"
+
+#: lib/pp_admintools/app/ldap.py:648 lib/pp_admintools/app/ldap.py:701
+#: lib/pp_admintools/app/ldap.py:754
+msgid "Searching in {uri}/{bdn} with filter: {fltr}"
+msgstr "Suche in {uri}/{bdn} mit dem Filter: {fltr}"
+
+#: lib/pp_admintools/app/ldap.py:659
+msgid "Result of searching for mail address {m!r}:"
+msgstr "Ergebnis der Suche nach der Mailadresse {m!r}:"
+
+#: lib/pp_admintools/app/ldap.py:663 lib/pp_admintools/app/ldap.py:716
+#: lib/pp_admintools/app/ldap.py:769 lib/pp_admintools/app/ldap.py:857
+msgid "Got a response entry:"
+msgstr "Erhaltener Antwort-Eintrag:"
+
+#: lib/pp_admintools/app/ldap.py:670
+msgid "User with mail address {m!r} not found in {uri}/{bdn}."
+msgstr "Ein Nutzer mit der Mailadresse {m!r} wurde nicht in {uri}/{bdn} gefunden."
+
+#: lib/pp_admintools/app/ldap.py:712
+msgid "Result of searching for uid {u!r}:"
+msgstr "Ergebnis der Suche nach UID {u!r}:"
+
+#: lib/pp_admintools/app/ldap.py:723
+msgid "User with uid {u!r} not found in {uri}/{bdn}."
+msgstr "Ein Nutzer mit der UID {u!r} wurde nicht in {uri}/{bdn} gefunden."
+
+#: lib/pp_admintools/app/ldap.py:765
+msgid "Result of searching for CN {cn!r}:"
+msgstr "Ergebnis der Suche nach CN {cn!r}:"
+
+#: lib/pp_admintools/app/ldap.py:776
+msgid "User with cn {cn!r} not found in {uri}/{bdn}."
+msgstr "Ein Nutzer mit dem CN {cn!r} wurde nicht in {uri}/{bdn} gefunden."
+
+#: lib/pp_admintools/app/ldap.py:793
+msgid "User with DN {dn!r} not found in {uri}."
+msgstr "Ein Nutzer mit dem DN {dn!r} wurde nicht in {uri} gefunden."
+
+#: lib/pp_admintools/app/ldap.py:811
+msgid "ObjectClasses of {dn!r}:"
+msgstr "ObjectClasses von {dn!r}:"
+
+#: lib/pp_admintools/app/ldap.py:821
+msgid "Entry {dn!r} in {uri} seems not to be an account."
+msgstr "Der Eintrag {dn!r} in {uri} scheint kein Nutzerkonto zu sein."
+
+#: lib/pp_admintools/app/ldap.py:843
+msgid "Searching DN {dn!r} in {uri}."
+msgstr "Suche DN {dn!r} in {uri}."
+
+#: lib/pp_admintools/app/ldap.py:853
+msgid "Result of searching for DN {dn!r}:"
+msgstr "Ergebnis der Suche nach dem DN {dn!r}:"
+
+#: lib/pp_admintools/app/ldap.py:861
+msgid "Entry with DN {dn!r} not found in {uri}."
+msgstr "Ein Eintrag bit dem DN {dn!r} wurde nicht in {uri} gefunden."
+
+#: lib/pp_admintools/app/ldap.py:898
+msgid "Applying changes:"
+msgstr "Wende Änderungen an:"
+
+#: lib/pp_admintools/app/mail.py:103
 msgid "Got invalid SMTP port number {!r}."
 msgstr "Ungültige SMTP-Port-Nummer {!r} erhalten."
 
-#: lib/pp_admintools/mail_app.py:126
+#: lib/pp_admintools/app/mail.py:121
 msgid "Got invalid mail from address {!r}."
 msgstr "Ungültige Absender-Mailadresse {!r} erhalten."
 
-#: lib/pp_admintools/mail_app.py:149
+#: lib/pp_admintools/app/mail.py:144
 msgid "Got invalid recipient mail addresses:"
 msgstr "Ungültige Empfänger-Mailadressen erhalten:"
 
-#: lib/pp_admintools/mail_app.py:177
+#: lib/pp_admintools/app/mail.py:172
 msgid "Got invalid cc mail addresses:"
 msgstr "Ungültige CC-Mailadressen erhalten:"
 
-#: lib/pp_admintools/mail_app.py:192
+#: lib/pp_admintools/app/mail.py:187
 msgid "Got invalid reply mail address {!r}."
 msgstr "Ungültige CC-Mailadresse {!r} erhalten."
 
-#: lib/pp_admintools/mail_app.py:206
+#: lib/pp_admintools/app/mail.py:201
 msgid "Mailing options"
 msgstr "E-Mail-Optionen"
 
-#: lib/pp_admintools/mail_app.py:221 lib/pp_admintools/mail_app.py:229
-#: lib/pp_admintools/mail_app.py:235 lib/pp_admintools/mail_app.py:241
+#: lib/pp_admintools/app/mail.py:216 lib/pp_admintools/app/mail.py:224
+#: lib/pp_admintools/app/mail.py:230 lib/pp_admintools/app/mail.py:236
 msgid "ADDRESS"
 msgstr "ADRESSE"
 
-#: lib/pp_admintools/mail_app.py:222
+#: lib/pp_admintools/app/mail.py:217
 msgid "Sender mail address for mails generated by this script. Default: {!r}"
 msgstr "Absender-Mailadresse von Mails, die von diesem Skript generiert werden. Vorgabe: {!r}"
 
-#: lib/pp_admintools/mail_app.py:230
+#: lib/pp_admintools/app/mail.py:225
 msgid "Mail addresses of all recipients for mails generated by this script."
 msgstr "Mailadressen aller Empfänger von Mails, die von diesem Skript generiert werden."
 
-#: lib/pp_admintools/mail_app.py:236
+#: lib/pp_admintools/app/mail.py:231
 msgid "Mail addresses of all CC recipients for mails generated by this script."
 msgstr "Mailadressen aller CC-Empfänger von Mails, die von diesem Skript generiert werden."
 
-#: lib/pp_admintools/mail_app.py:242
+#: lib/pp_admintools/app/mail.py:237
 msgid "Reply mail address for mails generated by this script."
 msgstr "Antwort-Mailadresse von Mails, die von diesem Skript generiert werden."
 
-#: lib/pp_admintools/mail_app.py:248
+#: lib/pp_admintools/app/mail.py:244
 msgid "METHOD"
 msgstr "METHODE"
 
-#: lib/pp_admintools/mail_app.py:249
+#: lib/pp_admintools/app/mail.py:245
 msgid "Method for sending the mails generated by this script. Valid values: {v}, default: {d!r}."
 msgstr ""
 "Methode zum Senden von Mails, die von diesem Skript generiert werden. Gültige Werte: {v}, "
 "Vorgabe: {d!r}."
 
-#: lib/pp_admintools/mail_app.py:257
+#: lib/pp_admintools/app/mail.py:253
 msgid "SERVER"
 msgstr "SERVER"
 
-#: lib/pp_admintools/mail_app.py:258
+#: lib/pp_admintools/app/mail.py:254
 msgid ""
 "Mail server for submitting generated by this script if the mail method of this script is 'smtp'."
 " Default: {!r}."
@@ -557,7 +667,7 @@ msgstr ""
 "Der Mailserver zur Übermittlung der von diesem Skript generierten Mails, wenn die Mail-Methode "
 "'smtp' ist. Vorgabe: {!r}."
 
-#: lib/pp_admintools/mail_app.py:267
+#: lib/pp_admintools/app/mail.py:263
 msgid ""
 "The port to use for submitting generated by this script if the mail method of this script is "
 "'smtp'. Default: {}."
@@ -565,236 +675,490 @@ msgstr ""
 "Der zu verwendende Port zur Übermittlung der von diesem Skript generierten Mails, wenn die Mail-"
 "Methode 'smtp' ist. Vorgabe: {}."
 
-#: lib/pp_admintools/mail_app.py:276
+#: lib/pp_admintools/app/mail.py:272
 msgid "Got command line arguments:"
 msgstr "Kommandozeilen-Argumente erhalten:"
 
-#: lib/pp_admintools/mail_app.py:291
+#: lib/pp_admintools/app/mail.py:287
 msgid "Mail to send:"
 msgstr "Die zu sendende Mail:"
 
-#: lib/pp_admintools/mail_app.py:324
+#: lib/pp_admintools/app/mail.py:320
 msgid "Did not found sendmail executable."
 msgstr "Kein ausführbares Programm 'sendmail' gefunden."
 
-#: lib/pp_admintools/mail_config.py:208 lib/pp_admintools/mail_config.py:232
-#: lib/pp_admintools/mail_config.py:300
-msgid "Found invalid {what} {addr!r} in configuration."
-msgstr "Ungültige {what} {addr!r} in der Konfiguration gefunden."
-
-#: lib/pp_admintools/mail_config.py:233
-msgid "from address"
-msgstr "Absender-Adresse"
-
-#: lib/pp_admintools/mail_config.py:249 lib/pp_admintools/mail_config.py:253
-msgid "recipient mail address"
-msgstr "Empfänger-Adresse"
-
-#: lib/pp_admintools/mail_config.py:273 lib/pp_admintools/mail_config.py:277
-msgid "cc mail address"
-msgstr "CC-Mail-Adresse."
-
-#: lib/pp_admintools/mail_config.py:301
-msgid "reply to address"
-msgstr "Reply-To-Adresse"
-
-#: lib/pp_admintools/mail_config.py:317
-msgid "Found invalid mail method {!r} in configuration."
-msgstr "Ungültige Mail-Methode {!r} in der Konfiguration gefunden."
-
-#: lib/pp_admintools/mail_config.py:351
-msgid "Value {!r} for SMTP port is invalid:"
-msgstr "Der Wert {!r} für einen SMTP-Port ist ungültig:"
-
-#: lib/pp_admintools/mail_config.py:356
-msgid "Found invalid SMTP port number {} in configuration."
-msgstr "Ungültige SMTP-Port-Nummer {!r} in der Konfiguration gefunden."
-
-#: lib/pp_admintools/pdns_app.py:99 lib/pp_admintools/pdns_app.py:183
+#: lib/pp_admintools/app/pdns.py:99 lib/pp_admintools/app/pdns.py:183
 msgid "Configuration not available."
 msgstr "Die Konfiguration ist nicht verfügbar."
 
-#: lib/pp_admintools/pdns_app.py:113
+#: lib/pp_admintools/app/pdns.py:113
 msgid "Invalid API key {!r} given."
 msgstr "Ungültiger API-Schlüssel {!r} angegeben."
 
-#: lib/pp_admintools/pdns_app.py:125
+#: lib/pp_admintools/app/pdns.py:125
 msgid "Invalid API host {!r} given."
 msgstr "Ungültiger API-Host {!r} angegeben."
 
-#: lib/pp_admintools/pdns_app.py:138
+#: lib/pp_admintools/app/pdns.py:138
 msgid "Invalid API port {!r} given."
 msgstr "Ungültiger API-Port {!r} angegeben."
 
-#: lib/pp_admintools/pdns_app.py:150
+#: lib/pp_admintools/app/pdns.py:150
 msgid "Invalid API server name {!r} given."
 msgstr "Ungültiger API-Servername {!r} angegeben."
 
-#: lib/pp_admintools/pdns_app.py:168 lib/pp_admintools/pdns_app.py:171
+#: lib/pp_admintools/app/pdns.py:168 lib/pp_admintools/app/pdns.py:171
 msgid "Invalid instance {!r} given."
 msgstr "Ungültige Instanz {!r} angegeben."
 
-#: lib/pp_admintools/pdns_app.py:179
+#: lib/pp_admintools/app/pdns.py:179
 msgid "Evaluating instance {!r} ..."
 msgstr "Ermittle Instanz {!r} …"
 
-#: lib/pp_admintools/pdns_app.py:187
+#: lib/pp_admintools/app/pdns.py:187
 msgid "PDNS instance {!r} is not configured."
 msgstr "Die PDNS Instanz {!r} ist nicht konfiguriert."
 
-#: lib/pp_admintools/pdns_app.py:240
+#: lib/pp_admintools/app/pdns.py:240
 msgid "PowerDNS API options"
 msgstr "PowerDNS API-Optionen"
 
-#: lib/pp_admintools/pdns_app.py:249
-msgid "INSTANCE"
-msgstr "INSTANZ"
-
-#: lib/pp_admintools/pdns_app.py:250
+#: lib/pp_admintools/app/pdns.py:250
 msgid "Select, which PowerDNS instance to use. Valid values: {v}, default: {d!r}."
 msgstr "Auswahl der zu verwendenden PowerDNS-Instanz. Gültige Werte: {v}, Vorgaben: {d!r}."
 
-#: lib/pp_admintools/pdns_app.py:258 lib/pp_admintools/pdns_app.py:264
-#: lib/pp_admintools/pdns_app.py:270
+#: lib/pp_admintools/app/pdns.py:258 lib/pp_admintools/app/pdns.py:264
+#: lib/pp_admintools/app/pdns.py:270
 msgid "Using the {!r} PowerDNS instance."
 msgstr "Verwenden der {!r}-PowerDNS-Instanz."
 
-#: lib/pp_admintools/pdns_app.py:278
+#: lib/pp_admintools/app/pdns.py:278
 msgid "Which port to connect to PowerDNS API, default: {}."
 msgstr "Welcher Port soll verwendet werden, um sich mit der PowerDNS-API zu verbinden, Vorgabe: {}."
 
-#: lib/pp_admintools/pdns_app.py:284
+#: lib/pp_admintools/app/pdns.py:284
 msgid "SECS"
 msgstr "SEKUNDEN"
 
-#: lib/pp_admintools/pdns_app.py:285
+#: lib/pp_admintools/app/pdns.py:285
 msgid "PowerDNS API access"
 msgstr "PowerDNS API Zugang"
 
-#: lib/pp_admintools/pdns_app.py:286
+#: lib/pp_admintools/app/pdns.py:286
 msgid "The timeout in seconds to request the PowerDNS API, default: {}."
 msgstr "Der Timeout in Sekunden um die PowerDNS-API abzufragen, Vorgabe: {}."
 
-#: lib/pp_admintools/pdns_app.py:309
+#: lib/pp_admintools/app/pdns.py:309
 msgid "No path given for{d} [{s}]/{k} in configuration."
 msgstr "Kein Pfad für{d} [{s}]/{k} in der Konfiguration angegegben."
 
-#: lib/pp_admintools/pdns_app.py:316
+#: lib/pp_admintools/app/pdns.py:316
 msgid "Path {p!r} for{d} [{s}]/{k} in configuration must be an absolute path."
 msgstr "Der Pfad {p!r} für{d} [{s}]/{k} in der Konfiguration muss ein absoluter sein."
 
-#: lib/pp_admintools/pdns_app.py:339 lib/pp_admintools/pdns_app.py:375
-#: lib/pp_admintools/pdns_app.py:402
+#: lib/pp_admintools/app/pdns.py:339 lib/pp_admintools/app/pdns.py:375
+#: lib/pp_admintools/app/pdns.py:402
 msgid "Executing {} ..."
 msgstr "Ausführung von {} …"
 
-#: lib/pp_admintools/pdns_app.py:377
+#: lib/pp_admintools/app/pdns.py:377
 msgid "Setting Loglevel of the requests module to {}."
 msgstr "Setze das Loglevel des Requests-Moduls auf {}."
 
-#: lib/pp_admintools/pdns_app.py:391
+#: lib/pp_admintools/app/pdns.py:391
 msgid "Executing nothing ..."
 msgstr "Führe nicht aus …"
 
-#: lib/pp_admintools/pdns_app.py:411 lib/pp_admintools/pdns_app.py:433
-#: lib/pp_admintools/pdns_app.py:444 lib/pp_admintools/pdns_app.py:454
+#: lib/pp_admintools/app/pdns.py:411 lib/pp_admintools/app/pdns.py:433
+#: lib/pp_admintools/app/pdns.py:444 lib/pp_admintools/app/pdns.py:454
 msgid "The PDNS server object does not exists."
 msgstr "Das PDNS-Server-Objekt existiert nicht."
 
-#: lib/pp_admintools/pdns_app.py:413 lib/pp_admintools/pdns_app.py:435
-#: lib/pp_admintools/pdns_app.py:446 lib/pp_admintools/pdns_app.py:456
+#: lib/pp_admintools/app/pdns.py:413 lib/pp_admintools/app/pdns.py:435
+#: lib/pp_admintools/app/pdns.py:446 lib/pp_admintools/app/pdns.py:456
 msgid "The PDNS server object is not initialized."
 msgstr "Das PDNS-Server-Objekt ist nicht initialisiert."
 
-#: lib/pp_admintools/pdns_app.py:464
+#: lib/pp_admintools/app/pdns.py:464
 msgid "Trying to get complete information about zone {!r} ..."
 msgstr "Versuch die kompletten Informationen über die Zone {!r} zu bekommen …"
 
-#: lib/pp_admintools/pdns_app.py:470
+#: lib/pp_admintools/app/pdns.py:470
 msgid "The given zone {} was not found."
 msgstr "Die angegebene Zone {} wurde nicht gefunden."
 
-#: lib/pp_admintools/pdns_app.py:473
+#: lib/pp_admintools/app/pdns.py:473
 msgid "Got a response:"
 msgstr "Erhaltene Antwort:"
 
-#: lib/pp_admintools/pdns_app.py:478
+#: lib/pp_admintools/app/pdns.py:478
 msgid "Zone object:"
 msgstr "Zonen-Objekt:"
 
-#: lib/pp_admintools/pdns_config.py:247
+#: lib/pp_admintools/app/remove_ldap_user.py:69
+msgid ""
+"Disables or removes the given users from LDAP. If disabling, then the user will not be really "
+"removed, but disabled by locking the password, setting all status flags to {inact!r}, assigning "
+"{shell!r} as login shell und removing the user from all groups. When removing (or purging) the "
+"user will be really removed from LDAP."
+msgstr ""
+"Deaktiviert oder löscht die übergebenen Nutzer im LDAP. Bei einer Daektivierung wird der Nutzer "
+"nicht wirklich gelöscht, sondern durch Sperrung seines Passwortes, Setzen aller Status-Flages "
+"auf {inact!r}, Zuweisen von {shell!r} als Login-Shell und Löschen des Nutzers aus allen Gruppen "
+"deaktiviert. Beim Löschen wird der Nutzer tatsächlich im LDAP gelöscht."
+
+#: lib/pp_admintools/app/remove_ldap_user.py:116
+msgid "Removing options"
+msgstr "Lösch-Optionen"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:122
+msgid "Deactivating the user instead of removing it. This is mutually exclusive to {!r}."
+msgstr "Deaktivieren der Nutzer anstatt Löschung. Das schließt sich mit {!r} gegenseitig aus."
+
+#: lib/pp_admintools/app/remove_ldap_user.py:129
+msgid "Removing the user from LDAP. This is the default and is mutually exclusive to {!r}."
+msgstr "Löschen der Nutzer im LDAP. Dieses ist die Vorgabe und schließt sich mit {!r} gegenseitig aus."
+
+#: lib/pp_admintools/app/remove_ldap_user.py:135
+msgid "USER"
+msgstr "NUTZER"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:136
+msgid ""
+"The user, which should be deactivated or removed. They may be given by their Uid (the "
+"alphanumeric POSIX name), their mail address or their LDAP DN (be aware, that this may be "
+"different in the particular LDAP instances)."
+msgstr ""
+"Der oder die Nutzer, die deaktiviert oder gelöscht werden sollen. Sie können entweder mittels "
+"ihrer Uid (der alphanumerische POSIX-Nutzername), ihrer Mailadresse oder ihres LDAP-DNs "
+"angegeben werden. Bitte beachten, dass sich letzterer bei den verschiedenen LDAP-Instanzen "
+"unterscheiden kann."
+
+#: lib/pp_admintools/app/remove_ldap_user.py:153
+msgid "No users to remove given."
+msgstr "Kein Nutzername zum Löschen angegeben."
+
+#: lib/pp_admintools/app/remove_ldap_user.py:170
+msgid "All given users were not found in any LDAP instance."
+msgstr "Alle übergebenen Nutzer wurden in keiner der LDAP-Instanzen gefunden."
+
+#: lib/pp_admintools/app/remove_ldap_user.py:175
+msgid "Evaluated DNs to remove:"
+msgstr "Zum Löschen ermittelte DNs:"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:184
+msgid "Start disabling user entries in:"
+msgstr "Beginne Deaktivierung der Nutzereinträge in:"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:186
+msgid "Start removing user entries in:"
+msgstr "Beginne Löschung der Nutzereinträge in:"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:190
+msgid "Start disabling user entries ..."
+msgstr "Beginne Deaktivierung der Nutzereinträge …"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:192
+msgid "Start removing user entries ..."
+msgstr "Beginne Löschung der Nutzereinträge …"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:206
+msgid "Do you really want to deactivate the following users?"
+msgstr "Möchten Sie die folgenden Nutzer wirklich deaktivieren?"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:208
+msgid "Do you really want to remove the following users?"
+msgstr "Möchten Sie die folgenden Nutzer wirklich löschen?"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:234
+msgid "Deactivate [{yes}/{no}]?"
+msgstr "Deaktivieren [{yes}/{no}]?"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:236
+msgid "Remove [{yes}/{no}]?"
+msgstr "Löschen [{yes}/{no}]?"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:243
+msgid "Abort deactivating by {cls}: {e}"
+msgstr "Abbruch der Deaktivierung durch {cls}: {e}"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:245
+msgid "Abort removing by {cls}: {e}"
+msgstr "Abbruch des Löschens durch {cls}: {e}"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:254
+msgid "Evaluating DNs of the user {!r} to remove ..."
+msgstr "Ermitteln der DNs des Nutzers {!r} zum Löschen …"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:268
+msgid "Got DN {dn!r} for user {user!r} in LDAP instance {inst}."
+msgstr "Habe DN {dn!r} für den Nutzer {user!r} in der LDAP-Instanz {inst} ermittelt."
+
+#: lib/pp_admintools/app/remove_ldap_user.py:275
+msgid "Found {nr} entries for user {u!r} in LDAP instance {i}."
+msgstr "Fand {nr} Einträge für den Nutzer {u!r} in der LDAP-Instanz {i}."
+
+#: lib/pp_admintools/app/remove_ldap_user.py:287
+msgid "Did not found user {user!r} in LDAP instance {inst}."
+msgstr "Der Nutzer {user!r} wurde nicht in der LDAP-Instanz {inst} gefunden."
+
+#: lib/pp_admintools/app/remove_ldap_user.py:296
+msgid "Deactivating all given users from {} ..."
+msgstr "Deaktivieren aller übergebenen Nutzer in {} …"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:298
+msgid "Removing all given users from {} ..."
+msgstr "Lösche alle übergebenen Nutzer in {} …"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:310
+msgid "Deactivating user {dn!r} from {inst} ..."
+msgstr "Deaktivieren von Nutzer {dn!r} in {inst} …"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:313
+msgid "Removing user {dn!r} from {inst} ..."
+msgstr "Lösche Nutzer {dn!r} in {inst} …"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:319
+msgid "Attributes of {!r}:"
+msgstr "Attribute von {!r}:"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:333
+msgid "User {!r} is a mail user."
+msgstr "Der Nutzer {!r} ist ein Mail-Nutzer."
+
+#: lib/pp_admintools/app/remove_ldap_user.py:335
+msgid "User {!r} is not a mail user."
+msgstr "Der Nutzer {!r} ist kein Mail-Nutzer."
+
+#: lib/pp_admintools/app/remove_ldap_user.py:348
+#, fuzzy
+msgid "Updating user info for {dn!r} on {inst} ..."
+msgstr "Aktualisiere die Nutzerinformationenn für {dn!r} in {inst} …"
+
+#: lib/pp_admintools/argparse_actions.py:45
+msgid "Value {v!r} for a {what} port is invalid:"
+msgstr "Der Wert {v!r} für ein {what}-Port ist ungültig."
+
+#: lib/pp_admintools/argparse_actions.py:50
+msgid "Value {v!r} for a {what} port must be greater than 0 and less than {max}."
+msgstr "Der Wert {v!r} für ein {what}-Port muss größer als 0 und kleiner als {max} sein."
+
+#: lib/pp_admintools/argparse_actions.py:77
+msgid "Value {v!r} for a timeout of {what} is invalid:"
+msgstr "Der Wert {v!r} für einen Timeout von {what} ist ungültig."
+
+#: lib/pp_admintools/argparse_actions.py:83
+msgid "Value {v!r} for a timeout of {what} must be greater than 0 and less than {max}."
+msgstr "Der Wert {v!r} für einen Timeout von {what} muss größer als 0 und kleiner als {max} sein."
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:202 lib/pp_admintools/config/dns_deploy_zones.py:515
+#: lib/pp_admintools/config/mail.py:149 lib/pp_admintools/config/pdns.py:187
+msgid "Evaluating config section {!r}:"
+msgstr "Evaluiere Konfigurations-Abschnitt {!r}:"
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:290
+msgid "Checking given master address {!r} ..."
+msgstr "Überprüfe die übergebene Master-Adresse {!r} …"
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:302
+msgid "Trying to evaluate address of host {!r} ..."
+msgstr "Versuche die Adresse von Host {!r} zu ermitteln …"
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:311
+msgid "Invalid hostname or address {a!r} found in masters: {e}"
+msgstr "Ungültiger Hostname oder Adresse {a!r} in masters gefunden: {e}"
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:319
+msgid "Got addresses {a!r} for host {h!r}."
+msgstr "Habe Adresse {a!r} für Host {h!r} gefunden."
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:333 lib/pp_admintools/config/dns_deploy_zones.py:356
+#: lib/pp_admintools/config/dns_deploy_zones.py:381 lib/pp_admintools/config/dns_deploy_zones.py:430
+#: lib/pp_admintools/config/dns_deploy_zones.py:479 lib/pp_admintools/config/dns_deploy_zones.py:541
+msgid "The path to {what} must be an absolute path, found {path!r}."
+msgstr "Der Pfad zu {what} muss absolut sein, fand aber {path!r}."
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:342 lib/pp_admintools/config/dns_deploy_zones.py:365
+#: lib/pp_admintools/config/dns_deploy_zones.py:390 lib/pp_admintools/config/dns_deploy_zones.py:415
+#: lib/pp_admintools/config/dns_deploy_zones.py:439 lib/pp_admintools/config/dns_deploy_zones.py:464
+#: lib/pp_admintools/config/dns_deploy_zones.py:488 lib/pp_admintools/config/dns_deploy_zones.py:550
+msgid "Found path to {what}: {path!r}."
+msgstr "Fand Pfad zu {what}: {path!r}."
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:377
+msgid "the named config directory"
+msgstr "das Konfigurationsverzeichnis vin named"
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:402
+msgid "the named config file for zones"
+msgstr "die named-Konfigurationsdatei für Zonen"
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:406 lib/pp_admintools/config/dns_deploy_zones.py:455
+msgid "The path to {what} must not be an absolute path, found {path!r}."
+msgstr "Der Pfad zu {what} farf nicht absolut sein, fand aber {path!r}."
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:427
+msgid "the named base directory"
+msgstr "das Basis-Verzeichnis von named"
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:451
+msgid "the directory for slave zones of named"
+msgstr "das Vezeichnis für Slave-Zonen für named"
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:538
+msgid "the PID file"
+msgstr "die PID-Datei"
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:590
+msgid "Using configured masters:"
+msgstr "Verwende konfigurierte Master:"
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:592
+msgid "No valid masters found in configuration."
+msgstr "Keine gültigen Master in der Konfiguration gefunden."
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:595
+msgid "Evaluated configuration:"
+msgstr "Evaluierte Konfiguration:"
+
+#: lib/pp_admintools/config/ldap.py:150
+msgid "Invalid port {!r} for LDAP server given."
+msgstr "Ungültiger Port {!r} für den LDAP-Server angegeben."
+
+#: lib/pp_admintools/config/ldap.py:163
+msgid "An empty Base DN for LDAP searches is not allowed."
+msgstr "Eine leere Basis-DN für LDAP-Suchen ist nicht erlaubt."
+
+#: lib/pp_admintools/config/ldap.py:352
+msgid "Evaluating LDAP config ..."
+msgstr "Ermittle LDAP-Konfiguration …"
+
+#: lib/pp_admintools/config/ldap.py:356
+msgid "Evaluating LDAP section {!r} ..."
+msgstr "Evaluiere LDAP-Abschnitt {!r} …"
+
+#: lib/pp_admintools/config/ldap.py:373
+msgid "Value {!r} for a timeout is invalid."
+msgstr "Der Wert {!r} für einen Timeout ist ungültig."
+
+#: lib/pp_admintools/config/ldap.py:393
+msgid "Reading configuration of LDAP instance {!r} ..."
+msgstr "Lese Konfiguration der LDAP-Instanz {!r} …"
+
+#: lib/pp_admintools/config/ldap.py:401
+msgid "Invalid value {val!r} in section {sec!r} for a LDAP {what}."
+msgstr "Ungültiger Wert {val!r} in Abschnitt {sec!r} für ein LDAP-{what}."
+
+#: lib/pp_admintools/config/ldap.py:451
+msgid "Unknown LDAP configuration key {key} found in section {sec!r}."
+msgstr "Unbekannten Konfigurationsschlüssel {key} in Abschnitt {sec!r} gefunden."
+
+#: lib/pp_admintools/config/mail.py:170 lib/pp_admintools/config/mail.py:194
+#: lib/pp_admintools/config/mail.py:262
+msgid "Found invalid {what} {addr!r} in configuration."
+msgstr "Ungültige {what} {addr!r} in der Konfiguration gefunden."
+
+#: lib/pp_admintools/config/mail.py:195
+msgid "from address"
+msgstr "Absender-Adresse"
+
+#: lib/pp_admintools/config/mail.py:211 lib/pp_admintools/config/mail.py:215
+msgid "recipient mail address"
+msgstr "Empfänger-Adresse"
+
+#: lib/pp_admintools/config/mail.py:235 lib/pp_admintools/config/mail.py:239
+msgid "cc mail address"
+msgstr "CC-Mail-Adresse."
+
+#: lib/pp_admintools/config/mail.py:263
+msgid "reply to address"
+msgstr "Reply-To-Adresse"
+
+#: lib/pp_admintools/config/mail.py:279
+msgid "Found invalid mail method {!r} in configuration."
+msgstr "Ungültige Mail-Methode {!r} in der Konfiguration gefunden."
+
+#: lib/pp_admintools/config/mail.py:313
+msgid "Value {!r} for SMTP port is invalid:"
+msgstr "Der Wert {!r} für einen SMTP-Port ist ungültig:"
+
+#: lib/pp_admintools/config/mail.py:318
+msgid "Found invalid SMTP port number {} in configuration."
+msgstr "Ungültige SMTP-Port-Nummer {!r} in der Konfiguration gefunden."
+
+#: lib/pp_admintools/config/pdns.py:247
 msgid "A timeout has to be between 1 and {} seconds."
 msgstr "Ein Timeout muss zwischen 1 und {} Sekunden betragen."
 
-#: lib/pp_admintools/pdns_config.py:251
+#: lib/pp_admintools/config/pdns.py:251
 msgid "Value {!r} for PowerDNS API timeout is invalid:"
 msgstr "Der Wert für den PoerDNS-API-Timeout ist ungültig:"
 
-#: lib/pp_admintools/pdns_config.py:269
+#: lib/pp_admintools/config/pdns.py:269
 msgid "Found invalid PDNS environment/instance {!r} in configuration."
 msgstr "Ungültige PowerDNS-Instanz {!r} in der Konfiguration gefunden."
 
-#: lib/pp_admintools/pdns_config.py:284
+#: lib/pp_admintools/config/pdns.py:284
 msgid "Found PDNS host: {!r}."
 msgstr "Fand PowerDNS-Host: {!r}."
 
-#: lib/pp_admintools/pdns_config.py:300 lib/pp_admintools/pdns_config.py:392
+#: lib/pp_admintools/config/pdns.py:300 lib/pp_admintools/config/pdns.py:392
 msgid "A port must be greater than 0 and less than {}."
 msgstr "Ein Port muss größer als 0 und kleiner als {} sein."
 
-#: lib/pp_admintools/pdns_config.py:303
+#: lib/pp_admintools/config/pdns.py:303
 msgid "Wrong PDNS port number {p!r} found: {e}"
 msgstr "Falsche PowerDNS-Portnummer {p!r} gefunden: {e}"
 
-#: lib/pp_admintools/pdns_config.py:312
+#: lib/pp_admintools/config/pdns.py:312
 msgid "Found port number for PDNS: {}."
 msgstr "Fand PowerDNS-Portnummer: {}."
 
-#: lib/pp_admintools/pdns_config.py:326
+#: lib/pp_admintools/config/pdns.py:326
 msgid "Found API key for PDNS: {!r}."
 msgstr "Fand PowerDNS-API-Schlüssel: {!r}."
 
-#: lib/pp_admintools/pdns_config.py:337
+#: lib/pp_admintools/config/pdns.py:337
 msgid "Found PDNS API servername: {!r}."
 msgstr "Fand PowerDNS-API-Servernamen: {!r}."
 
-#: lib/pp_admintools/pdns_config.py:354
+#: lib/pp_admintools/config/pdns.py:354
 msgid "Evaluating PowerDNS instance {!r}:"
 msgstr "Werte PowerDNS-Instanz {!r} aus:"
 
-#: lib/pp_admintools/pdns_config.py:366
+#: lib/pp_admintools/config/pdns.py:366
 msgid "Searching for host for PDNS instance {!r} .."
 msgstr "Suche nach Host für PowerDNS-Instanz {!r} …"
 
-#: lib/pp_admintools/pdns_config.py:374
+#: lib/pp_admintools/config/pdns.py:374
 msgid "Found host for PDNS instance {inst!r}: {host!r}."
 msgstr "Fand Host für PowerDNS-Instanz {inst!r}: {host!r}."
 
-#: lib/pp_admintools/pdns_config.py:382
+#: lib/pp_admintools/config/pdns.py:382
 msgid "Searching for post number for PDNS instance {!r} .."
 msgstr "Suche nach Portnummer für PowerDNS-Instanz {!r} …"
 
-#: lib/pp_admintools/pdns_config.py:395
+#: lib/pp_admintools/config/pdns.py:395
 msgid "Wrong port number {p!r} for PDNS instance {inst!r} found: {e}"
 msgstr "Falsche Portnummer {p!r} für PowerDNS-Instanz {inst!r} gefunden: {e}"
 
-#: lib/pp_admintools/pdns_config.py:404
+#: lib/pp_admintools/config/pdns.py:404
 msgid "Found port number for PDNS instance {inst!r}: {p}."
 msgstr "Fand Portnummer für PowerDNS-Instanz {inst!r}: {p}."
 
-#: lib/pp_admintools/pdns_config.py:412
+#: lib/pp_admintools/config/pdns.py:412
 msgid "Searching for internal server name of PDNS instance {!r} .."
 msgstr "Suche nach internem Servernamen für PowerDNS-Instanz {!r} …"
 
-#: lib/pp_admintools/pdns_config.py:422
+#: lib/pp_admintools/config/pdns.py:422
 msgid "Found internal server name PDNS instance {inst!r}: {sn!r}."
 msgstr "Fand internen Servernamen für PowerDNS-Instanz {inst!r}: {sn!r}."
 
-#: lib/pp_admintools/pdns_config.py:430
+#: lib/pp_admintools/config/pdns.py:430
 msgid "Searching for API key of PDNS instance {!r} .."
 msgstr "Suche nach API-Schlüssel für PowerDNS-Instanz {!r} …"
 
-#: lib/pp_admintools/pdns_config.py:443
+#: lib/pp_admintools/config/pdns.py:443
 msgid "Found API key of PDNS instance {inst!r}: {key!r}."
 msgstr "Fand API-Schlüssel für PowerDNS-Instanz {inst!r}: {key!r}."
 
index 57500dea0b5e037e474d750ae92b03cf047573bf..62fed9d2f1adb2dde61ff217c17b46d8d4c699ef 100644 (file)
@@ -7,783 +7,1129 @@ msgid ""
 msgstr ""
 "Project-Id-Version: pp_admintools 0.9.1\n"
 "Report-Msgid-Bugs-To: frank.brehm@pixelpark.com\n"
-"POT-Creation-Date: 2022-05-18 14:34+0200\n"
-"PO-Revision-Date: 2022-03-31 17:45+0100\n"
+"POT-Creation-Date: 2022-09-08 15:41+0200\n"
+"PO-Revision-Date: 2022-09-08 12:00+0200\n"
 "Last-Translator: Frank Brehm <frank.brehm@pixelpark.com>\n"
 "Language: en_US\n"
-"Language-Team: en_US <LL@li.org>\n"
+"Language-Team: Frank Brehm <frank.brehm@pixelpark.com>\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.10.1\n"
+"Generated-By: Babel 2.10.3\n"
 
-#: lib/pp_admintools/argparse_actions.py:45
-msgid "Value {v!r} for a {what} port is invalid:"
+#: lib/pp_admintools/app/__init__.py:57
+msgid "Timeout on answering on the console."
 msgstr ""
 
-#: lib/pp_admintools/argparse_actions.py:50
-msgid "Value {v!r} for a {what} port must be greater than 0 and less than {max}."
+#: lib/pp_admintools/app/__init__.py:76
+msgid "a timeout must be greater than zero and less or equal to {}."
 msgstr ""
 
-#: lib/pp_admintools/argparse_actions.py:77
-msgid "Value {v!r} for a timeout of {what} is invalid:"
+#: lib/pp_admintools/app/__init__.py:81
+msgid "Wrong timeout {!r}:"
 msgstr ""
 
-#: lib/pp_admintools/argparse_actions.py:83
-msgid "Value {v!r} for a timeout of {what} must be greater than 0 and less than {max}."
+#: lib/pp_admintools/app/__init__.py:125 lib/pp_admintools/app/remove_ldap_user.py:238
+msgid "yes"
+msgstr ""
+
+#: lib/pp_admintools/app/__init__.py:132
+msgid "no"
+msgstr ""
+
+#: lib/pp_admintools/app/__init__.py:163
+msgid "Wrong prompt timeout {v!r}, must be greater or equal to Null and less or equal to {max}."
+msgstr ""
+
+#: lib/pp_admintools/app/__init__.py:243
+msgid "Yes/No"
+msgstr ""
+
+#: lib/pp_admintools/app/__init__.py:248
+msgid "Interrupted on demand."
+msgstr ""
+
+#: lib/pp_admintools/app/__init__.py:281 lib/pp_admintools/app/__init__.py:286
+msgid "Got a {}:"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:121
+#: lib/pp_admintools/app/dns_deploy_zones.py:121
 msgid "Generation of the BIND9 configuration file for slave zones."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:263
+#: lib/pp_admintools/app/dns_deploy_zones.py:263
 msgid "Keep a backup file for each changed configuration file."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:268
+#: lib/pp_admintools/app/dns_deploy_zones.py:268
 msgid "Keeping the temporary directory instead of removing it at the end (e.g. for debugging purposes)"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:294
+#: lib/pp_admintools/app/dns_deploy_zones.py:294
 msgid "Post init phase."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:298
+#: lib/pp_admintools/app/dns_deploy_zones.py:298
 msgid "My own post init phase."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:314
+#: lib/pp_admintools/app/dns_deploy_zones.py:314
 msgid "Unknown time zone: {!r}."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:334
+#: lib/pp_admintools/app/dns_deploy_zones.py:334
 msgid "You must be root to execute this script."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:336
+#: lib/pp_admintools/app/dns_deploy_zones.py:336
 msgid "But in simulation mode we are continuing nevertheless."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:346
+#: lib/pp_admintools/app/dns_deploy_zones.py:346
 msgid "Using the global DNS master is not supported, please use 'local' or 'public'"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:354
+#: lib/pp_admintools/app/dns_deploy_zones.py:354
 msgid "Starting: {}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:361
+#: lib/pp_admintools/app/dns_deploy_zones.py:361
 msgid "Could not occupy pidfile: {}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:386
+#: lib/pp_admintools/app/dns_deploy_zones.py:386
 msgid "Ending: {}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:391
+#: lib/pp_admintools/app/dns_deploy_zones.py:391
 msgid "Cleaning up ..."
 msgstr "Cleaning up …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:395
+#: lib/pp_admintools/app/dns_deploy_zones.py:395
 msgid "Searching for {!r}."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:398
+#: lib/pp_admintools/app/dns_deploy_zones.py:398
 msgid "Keep existing backup file {!r}."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:400
+#: lib/pp_admintools/app/dns_deploy_zones.py:400
 msgid "Removing {!r} ..."
 msgstr "Removing {!r} …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:406
+#: lib/pp_admintools/app/dns_deploy_zones.py:406
 msgid "Error removing {p!r} - {c}: {e}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:411
+#: lib/pp_admintools/app/dns_deploy_zones.py:411
 msgid "Temporary directory {!r} will not be removed. It's on yours to remove it manually."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:416
+#: lib/pp_admintools/app/dns_deploy_zones.py:416
 msgid "Destroying temporary directory {!r} ..."
 msgstr "Destroying temporary directory {!r} …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:425
+#: lib/pp_admintools/app/dns_deploy_zones.py:425
 msgid "Temporary directory: {!r}."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:430
+#: lib/pp_admintools/app/dns_deploy_zones.py:430
 msgid "Temporary zones conf: {!r}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:435
+#: lib/pp_admintools/app/dns_deploy_zones.py:435
 msgid "Trying to get all keys from named.conf ..."
 msgstr "Trying to get all keys from named.conf …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:441 lib/pp_admintools/dns_deploy_zones_app.py:795
-#: lib/pp_admintools/dns_deploy_zones_app.py:831 lib/pp_admintools/dns_deploy_zones_app.py:863
-#: lib/pp_admintools/dns_deploy_zones_app.py:898 lib/pp_admintools/dns_deploy_zones_app.py:933
-#: lib/pp_admintools/mail_app.py:330
+#: lib/pp_admintools/app/dns_deploy_zones.py:441 lib/pp_admintools/app/dns_deploy_zones.py:795
+#: lib/pp_admintools/app/dns_deploy_zones.py:831 lib/pp_admintools/app/dns_deploy_zones.py:863
+#: lib/pp_admintools/app/dns_deploy_zones.py:898 lib/pp_admintools/app/dns_deploy_zones.py:933
+#: lib/pp_admintools/app/mail.py:326
 msgid "Executing: {}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:447 lib/pp_admintools/dns_deploy_zones_app.py:801
+#: lib/pp_admintools/app/dns_deploy_zones.py:447 lib/pp_admintools/app/dns_deploy_zones.py:801
+#: lib/pp_admintools/app/ldap.py:666 lib/pp_admintools/app/ldap.py:719
+#: lib/pp_admintools/app/ldap.py:772
 msgid "Result:"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:488 lib/pp_admintools/dns_deploy_zones_app.py:490
+#: lib/pp_admintools/app/dns_deploy_zones.py:488 lib/pp_admintools/app/dns_deploy_zones.py:490
 msgid "Found named keys:"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:490 lib/pp_admintools/dns_deploy_zones_app.py:521
+#: lib/pp_admintools/app/dns_deploy_zones.py:490 lib/pp_admintools/app/dns_deploy_zones.py:521
 msgid "None"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:495
+#: lib/pp_admintools/app/dns_deploy_zones.py:495
 msgid "Generating {} ..."
 msgstr "Generating {} …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:519 lib/pp_admintools/dns_deploy_zones_app.py:521
+#: lib/pp_admintools/app/dns_deploy_zones.py:519 lib/pp_admintools/app/dns_deploy_zones.py:521
 msgid "Collected server configuration:"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:542
+#: lib/pp_admintools/app/dns_deploy_zones.py:542
 msgid "Generated file {!r}:"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:558
+#: lib/pp_admintools/app/dns_deploy_zones.py:558
 msgid "Pure local zone {!r} will not be considered."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:590
+#: lib/pp_admintools/app/dns_deploy_zones.py:590
 msgid "Key {k!r} for zone {z!r} not found in named configuration."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:620
+#: lib/pp_admintools/app/dns_deploy_zones.py:620
 msgid "Got IPv4 tuples: {}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:644
+#: lib/pp_admintools/app/dns_deploy_zones.py:644
 msgid "Got IPv6 tokens: {}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:651
+#: lib/pp_admintools/app/dns_deploy_zones.py:651
 msgid "Comparing generated files with existing ones."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:658
+#: lib/pp_admintools/app/dns_deploy_zones.py:658
 msgid "Files to replace:"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:664
+#: lib/pp_admintools/app/dns_deploy_zones.py:664
 msgid "Source file not defined."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:666
+#: lib/pp_admintools/app/dns_deploy_zones.py:666
 msgid "Target file not defined."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:668
+#: lib/pp_admintools/app/dns_deploy_zones.py:668
 msgid "Comparing {one!r} with {two!r} ..."
 msgstr "Comparing {one!r} with {two!r} …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:672 lib/pp_admintools/dns_deploy_zones_app.py:681
+#: lib/pp_admintools/app/dns_deploy_zones.py:672 lib/pp_admintools/app/dns_deploy_zones.py:681
 msgid "{what} {f!r} does not exists."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:673 lib/pp_admintools/dns_deploy_zones_app.py:677
+#: lib/pp_admintools/app/dns_deploy_zones.py:673 lib/pp_admintools/app/dns_deploy_zones.py:677
 msgid "Source file"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:676 lib/pp_admintools/dns_deploy_zones_app.py:686
+#: lib/pp_admintools/app/dns_deploy_zones.py:676 lib/pp_admintools/app/dns_deploy_zones.py:686
 msgid "{what} {f!r} is not a regular file."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:682 lib/pp_admintools/dns_deploy_zones_app.py:687
+#: lib/pp_admintools/app/dns_deploy_zones.py:682 lib/pp_admintools/app/dns_deploy_zones.py:687
 msgid "Target file"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:693 lib/pp_admintools/dns_deploy_zones_app.py:710
+#: lib/pp_admintools/app/dns_deploy_zones.py:693 lib/pp_admintools/app/dns_deploy_zones.py:710
 msgid "Reading {!r} ..."
 msgstr "Reading {!r} …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:703 lib/pp_admintools/dns_deploy_zones_app.py:720
+#: lib/pp_admintools/app/dns_deploy_zones.py:703 lib/pp_admintools/app/dns_deploy_zones.py:720
 msgid "Cleaned version of {!r}:"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:725
+#: lib/pp_admintools/app/dns_deploy_zones.py:725
 msgid ""
 "Source file {sf!r} has different number essential lines ({sl}) than the target file {tf!r} ({tl}"
 " lines)."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:734
+#: lib/pp_admintools/app/dns_deploy_zones.py:734
 msgid "Source file {sf!r} has a different content than the target file {tf!r}."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:746
+#: lib/pp_admintools/app/dns_deploy_zones.py:746
 msgid "No replacement of any config files necessary."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:749
+#: lib/pp_admintools/app/dns_deploy_zones.py:749
 msgid "Start replacing of config files ..."
 msgstr "Start replacing of config files …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:757 lib/pp_admintools/dns_deploy_zones_app.py:767
+#: lib/pp_admintools/app/dns_deploy_zones.py:757 lib/pp_admintools/app/dns_deploy_zones.py:767
 msgid "Copying {frm!r} => {to!r} ..."
 msgstr "Copying {frm!r} => {to!r} …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:763
+#: lib/pp_admintools/app/dns_deploy_zones.py:763
 msgid "All backuped config files:"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:775
+#: lib/pp_admintools/app/dns_deploy_zones.py:775
 msgid "Restoring of original config files because of an exception."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:779
+#: lib/pp_admintools/app/dns_deploy_zones.py:779
 msgid "Moving {frm!r} => {to!r} ..."
 msgstr "Moving {frm!r} => {to!r} …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:785
+#: lib/pp_admintools/app/dns_deploy_zones.py:785
 msgid "Could not find backup file {!r}."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:790
+#: lib/pp_admintools/app/dns_deploy_zones.py:790
 msgid "Checking syntax correctness of named.conf ..."
 msgstr "Checking syntax correctness of named.conf …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:811
+#: lib/pp_admintools/app/dns_deploy_zones.py:811
 msgid "Reload or restart of named is not necessary."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:816
+#: lib/pp_admintools/app/dns_deploy_zones.py:816
 msgid "Named is not running, please start it manually."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:827
+#: lib/pp_admintools/app/dns_deploy_zones.py:827
 msgid "Checking, whether named is running ..."
 msgstr "Checking, whether named is running …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:845 lib/pp_admintools/dns_deploy_zones_app.py:880
-#: lib/pp_admintools/dns_deploy_zones_app.py:915 lib/pp_admintools/dns_deploy_zones_app.py:950
+#: lib/pp_admintools/app/dns_deploy_zones.py:845 lib/pp_admintools/app/dns_deploy_zones.py:880
+#: lib/pp_admintools/app/dns_deploy_zones.py:915 lib/pp_admintools/app/dns_deploy_zones.py:950
 msgid "Return value: {!r}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:847 lib/pp_admintools/dns_deploy_zones_app.py:849
-#: lib/pp_admintools/dns_deploy_zones_app.py:882 lib/pp_admintools/dns_deploy_zones_app.py:884
-#: lib/pp_admintools/dns_deploy_zones_app.py:917 lib/pp_admintools/dns_deploy_zones_app.py:919
-#: lib/pp_admintools/dns_deploy_zones_app.py:952 lib/pp_admintools/dns_deploy_zones_app.py:954
+#: lib/pp_admintools/app/dns_deploy_zones.py:847 lib/pp_admintools/app/dns_deploy_zones.py:849
+#: lib/pp_admintools/app/dns_deploy_zones.py:882 lib/pp_admintools/app/dns_deploy_zones.py:884
+#: lib/pp_admintools/app/dns_deploy_zones.py:917 lib/pp_admintools/app/dns_deploy_zones.py:919
+#: lib/pp_admintools/app/dns_deploy_zones.py:952 lib/pp_admintools/app/dns_deploy_zones.py:954
 msgid "Output on {}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:859
+#: lib/pp_admintools/app/dns_deploy_zones.py:859
 msgid "Starting {} ..."
 msgstr "Starting {} …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:894
+#: lib/pp_admintools/app/dns_deploy_zones.py:894
 msgid "Restarting {} ..."
 msgstr "Restarting {} …"
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:929
+#: lib/pp_admintools/app/dns_deploy_zones.py:929
 msgid "Reloading {} ..."
 msgstr "Reloading {} …"
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:202 lib/pp_admintools/dns_deploy_zones_config.py:515
-#: lib/pp_admintools/mail_config.py:187 lib/pp_admintools/pdns_config.py:187
-msgid "Evaluating config section {!r}:"
+#: lib/pp_admintools/app/ldap.py:81 lib/pp_admintools/app/ldap.py:184
+msgid "The path {!r} must be an absolute path."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:290
-msgid "Checking given master address {!r} ..."
-msgstr "Checking given master address {!r} …"
+#: lib/pp_admintools/app/ldap.py:87 lib/pp_admintools/app/ldap.py:188
+msgid "The file {!r} does not exists."
+msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:302
-msgid "Trying to evaluate address of host {!r} ..."
-msgstr "Trying to evaluate address of host {!r} …"
+#: lib/pp_admintools/app/ldap.py:91 lib/pp_admintools/app/ldap.py:192
+msgid "The given path {!r} exists, but is not a regular file."
+msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:311
-msgid "Invalid hostname or address {a!r} found in masters: {e}"
+#: lib/pp_admintools/app/ldap.py:95 lib/pp_admintools/app/ldap.py:196
+msgid "The given file {!r} is not readable."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:319
-msgid "Got addresses {a!r} for host {h!r}."
+#: lib/pp_admintools/app/ldap.py:116
+msgid "a port number must be greater than zero and less or equal to {}."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:333 lib/pp_admintools/dns_deploy_zones_config.py:356
-#: lib/pp_admintools/dns_deploy_zones_config.py:381 lib/pp_admintools/dns_deploy_zones_config.py:430
-#: lib/pp_admintools/dns_deploy_zones_config.py:479 lib/pp_admintools/dns_deploy_zones_config.py:541
-msgid "The path to {what} must be an absolute path, found {path!r}."
+#: lib/pp_admintools/app/ldap.py:121
+msgid "Wrong port number {!r}:"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:342 lib/pp_admintools/dns_deploy_zones_config.py:365
-#: lib/pp_admintools/dns_deploy_zones_config.py:390 lib/pp_admintools/dns_deploy_zones_config.py:415
-#: lib/pp_admintools/dns_deploy_zones_config.py:439 lib/pp_admintools/dns_deploy_zones_config.py:464
-#: lib/pp_admintools/dns_deploy_zones_config.py:488 lib/pp_admintools/dns_deploy_zones_config.py:550
-msgid "Found path to {what}: {path!r}."
+#: lib/pp_admintools/app/ldap.py:231
+msgid "LDAP options"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:377
-msgid "the named config directory"
+#: lib/pp_admintools/app/ldap.py:233
+msgid "Options for the default LDAP connection"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:402
-msgid "the named config file for zones"
+#: lib/pp_admintools/app/ldap.py:235
+msgid "Options fo LDAP connections"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:406 lib/pp_admintools/dns_deploy_zones_config.py:455
-msgid "The path to {what} must not be an absolute path, found {path!r}."
+#: lib/pp_admintools/app/ldap.py:242 lib/pp_admintools/app/remove_ldap_user.py:238
+msgid "No"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:427
-msgid "the named base directory"
+#: lib/pp_admintools/app/ldap.py:244
+msgid "Yes"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:451
-msgid "the directory for slave zones of named"
+#: lib/pp_admintools/app/ldap.py:250
+msgid "HOST"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:538
-msgid "the PID file"
+#: lib/pp_admintools/app/ldap.py:251
+msgid "Hostname or address of the LDAP server to use. Default: {!r}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:590
-msgid "Using configured masters:"
+#: lib/pp_admintools/app/ldap.py:258
+msgid "Use ldaps to connect to the LDAP server. Default: {}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:592
-msgid "No valid masters found in configuration."
+#: lib/pp_admintools/app/ldap.py:263 lib/pp_admintools/app/mail.py:261
+#: lib/pp_admintools/app/pdns.py:275
+msgid "PORT"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:595
-msgid "Evaluated configuration:"
+#: lib/pp_admintools/app/ldap.py:265
+msgid "The port number to connect to the LDAP server. Default: {}"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:68 lib/pp_admintools/ldap_app.py:178
-msgid "The path {!r} must be an absolute path."
+#: lib/pp_admintools/app/ldap.py:271
+msgid "The base DN used as the root for the LDAP searches. Default: {!r}"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:74 lib/pp_admintools/ldap_app.py:182
-msgid "The file {!r} does not exists."
+#: lib/pp_admintools/app/ldap.py:278
+msgid "The Bind DN to use to connect to the LDAP server. Default: {!r}"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:78 lib/pp_admintools/ldap_app.py:186
-msgid "The given path {!r} exists, but is not a regular file."
+#: lib/pp_admintools/app/ldap.py:286
+msgid "PASSWORD"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:82 lib/pp_admintools/ldap_app.py:190
-msgid "The given file {!r} is not readable."
+#: lib/pp_admintools/app/ldap.py:287
+msgid "Use PASSWORD as the password for simple LDAP authentication."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:103
-msgid "a port number must be greater than zero and less or equal to {}."
+#: lib/pp_admintools/app/ldap.py:292
+msgid ""
+"Prompt for simple LDAP authentication. This is used instead of specifying the password on the "
+"command line."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:108
-msgid "Wrong port number {!r}:"
+#: lib/pp_admintools/app/ldap.py:298
+msgid "PASSWORD_FILE"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:130
-msgid "a timeout must be greater than zero and less or equal to {}."
+#: lib/pp_admintools/app/ldap.py:300
+msgid "Use contents of PASSWORD_FILE as the password for simple authentication."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:135
-msgid "Wrong timeout {!r}:"
+#: lib/pp_admintools/app/ldap.py:308 lib/pp_admintools/app/pdns.py:249
+msgid "INSTANCE"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:223
-msgid "Options for the default LDAP connection"
+#: lib/pp_admintools/app/ldap.py:311
+msgid ""
+"The LDAP instance (LDAP cluster) from configuration, where to execute this script. If not given,"
+" then the instance {!r} will be used."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:230
-msgid "No"
+#: lib/pp_admintools/app/ldap.py:314
+msgid ""
+"The LDAP instance (LDAP cluster) from configuration, where to execute this script. It is "
+"possible to give here the value {val_all!r}, then all found LDAP instances except {default!r} "
+"are used. It is alo possible to give the value {val_list!r}, then all configured LDAP instances "
+"are shown, and the application is exiting. If not given, then the instance {default!r} will be "
+"used."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:232
-msgid "Yes"
+#: lib/pp_admintools/app/ldap.py:333
+msgid "SECONDS"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:238
-msgid "HOST"
+#: lib/pp_admintools/app/ldap.py:335
+msgid "Using the given timeout in seconds for all LDAP operations. Default: {}"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:239
-msgid "Hostname or address of the LDAP server to use. Default: {!r}"
+#: lib/pp_admintools/app/ldap.py:367
+msgid "Checking given instances."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:246
-msgid "Use ldaps to connect to the LDAP server. Default: {}"
+#: lib/pp_admintools/app/ldap.py:371
+msgid "Given insts:"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:251 lib/pp_admintools/mail_app.py:265
-#: lib/pp_admintools/pdns_app.py:275
-msgid "PORT"
+#: lib/pp_admintools/app/ldap.py:408
+msgid "Configured LDAP instances:"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:253
-msgid "The port number to connect to the LDAP server. Default: {}"
+#: lib/pp_admintools/app/ldap.py:422
+msgid "Verifying given instances ..."
+msgstr "Verifying given instances …"
+
+#: lib/pp_admintools/app/ldap.py:440
+msgid "LDAP instance {!r} not found in configuration."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:259
-msgid "The base DN used as the root for the LDAP searches. Default: {!r}"
+#: lib/pp_admintools/app/ldap.py:448
+msgid "LDAP instances to use:"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:266
-msgid "The Bind DN to use to connect to the LDAP server. Default: {!r}"
+#: lib/pp_admintools/app/ldap.py:497
+msgid "Preparations ..."
+msgstr "Preparations …"
+
+#: lib/pp_admintools/app/ldap.py:500
+msgid "Open all necessary LDAP connections ..."
+msgstr "Open all necessary LDAP connections …"
+
+#: lib/pp_admintools/app/ldap.py:511
+msgid "Connecting to LDAP server {} ..."
+msgstr "Connecting to LDAP server {} …"
+
+#: lib/pp_admintools/app/ldap.py:526
+msgid "Connect options to server {!r}:"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:274
-msgid "PASSWORD"
+#: lib/pp_admintools/app/ldap.py:534
+msgid "LDAP server {s}: {re}"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:275
-msgid "Use PASSWORD as the password for simple LDAP authentication."
+#: lib/pp_admintools/app/ldap.py:542
+msgid "Info about LDAP server {}:"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:280
-msgid ""
-"Prompt for simple LDAP authentication. This is used instead of specifying the password on the "
-"command line."
+#: lib/pp_admintools/app/ldap.py:549
+msgid "Finishing ..."
+msgstr "Finishing …"
+
+#: lib/pp_admintools/app/ldap.py:558
+msgid "Disconnecting from all remaining LDAP instances ..."
+msgstr "Disconnecting from all remaining LDAP instances …"
+
+#: lib/pp_admintools/app/ldap.py:571
+msgid "Unbinding from LDAP server {!r} ..."
+msgstr "Unbinding from LDAP server {!r} …"
+
+#: lib/pp_admintools/app/ldap.py:578
+msgid "Disconnecting from LDAP server {!r} ..."
+msgstr "Disconnecting from LDAP server {!r} …"
+
+#: lib/pp_admintools/app/ldap.py:587
+msgid "Trying to evaluate DN of user {user!r} in LDAP instance {inst} ..."
+msgstr "Trying to evaluate DN of user {user!r} in LDAP instance {inst} …"
+
+#: lib/pp_admintools/app/ldap.py:592
+msgid "Trying to evaluate DN of user {u!r} as a mail address ..."
+msgstr "Trying to evaluate DN of user {u!r} as a mail address …"
+
+#: lib/pp_admintools/app/ldap.py:599
+msgid "Trying to evaluate DN of user {u!r} as a LDAP DN ..."
+msgstr "Trying to evaluate DN of user {u!r} as a LDAP DN …"
+
+#: lib/pp_admintools/app/ldap.py:606
+msgid "Trying to evaluate DN of user {u!r} as a UID (Posix user name) ..."
+msgstr "Trying to evaluate DN of user {u!r} as a UID (Posix user name) …"
+
+#: lib/pp_admintools/app/ldap.py:615 lib/pp_admintools/app/remove_ldap_user.py:258
+msgid "Empty user given."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:286
-msgid "PASSWORD_FILE"
+#: lib/pp_admintools/app/ldap.py:618
+msgid "Trying to evaluate DN of user {u!r} as a CN ({c}) ..."
+msgstr "Trying to evaluate DN of user {u!r} as a CN ({c}) …"
+
+#: lib/pp_admintools/app/ldap.py:648 lib/pp_admintools/app/ldap.py:701
+#: lib/pp_admintools/app/ldap.py:754
+msgid "Searching in {uri}/{bdn} with filter: {fltr}"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:288
-msgid "Use contents of PASSWORD_FILE as the password for simple authentication."
+#: lib/pp_admintools/app/ldap.py:659
+msgid "Result of searching for mail address {m!r}:"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:293
-msgid "SECONDS"
+#: lib/pp_admintools/app/ldap.py:663 lib/pp_admintools/app/ldap.py:716
+#: lib/pp_admintools/app/ldap.py:769 lib/pp_admintools/app/ldap.py:857
+msgid "Got a response entry:"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:295
-msgid "Using the given timeout in seconds for all LDAP operations. Default: {}"
+#: lib/pp_admintools/app/ldap.py:670
+msgid "User with mail address {m!r} not found in {uri}/{bdn}."
 msgstr ""
 
-#: lib/pp_admintools/ldap_config.py:146
-msgid "Invalid port {!r} for LDAP server given."
+#: lib/pp_admintools/app/ldap.py:712
+msgid "Result of searching for uid {u!r}:"
 msgstr ""
 
-#: lib/pp_admintools/ldap_config.py:159
-msgid "An empty Base DN for LDAP searches is not allowed."
+#: lib/pp_admintools/app/ldap.py:723
+msgid "User with uid {u!r} not found in {uri}/{bdn}."
 msgstr ""
 
-#: lib/pp_admintools/ldap_config.py:365
-msgid "Value {!r} for a timeout is invalid."
+#: lib/pp_admintools/app/ldap.py:765
+msgid "Result of searching for CN {cn!r}:"
 msgstr ""
 
-#: lib/pp_admintools/ldap_config.py:389
-msgid "Invalid value {val!r} in section {sec!r} for a LDAP {what}."
+#: lib/pp_admintools/app/ldap.py:776
+msgid "User with cn {cn!r} not found in {uri}/{bdn}."
 msgstr ""
 
-#: lib/pp_admintools/ldap_config.py:438
-msgid "Unknown LDAP configuration key {key} found in section {sec!r}."
+#: lib/pp_admintools/app/ldap.py:793
+msgid "User with DN {dn!r} not found in {uri}."
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:811
+msgid "ObjectClasses of {dn!r}:"
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:821
+msgid "Entry {dn!r} in {uri} seems not to be an account."
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:843
+msgid "Searching DN {dn!r} in {uri}."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:108
+#: lib/pp_admintools/app/ldap.py:853
+msgid "Result of searching for DN {dn!r}:"
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:861
+msgid "Entry with DN {dn!r} not found in {uri}."
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:898
+msgid "Applying changes:"
+msgstr ""
+
+#: lib/pp_admintools/app/mail.py:103
 msgid "Got invalid SMTP port number {!r}."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:126
+#: lib/pp_admintools/app/mail.py:121
 msgid "Got invalid mail from address {!r}."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:149
+#: lib/pp_admintools/app/mail.py:144
 msgid "Got invalid recipient mail addresses:"
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:177
+#: lib/pp_admintools/app/mail.py:172
 msgid "Got invalid cc mail addresses:"
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:192
+#: lib/pp_admintools/app/mail.py:187
 msgid "Got invalid reply mail address {!r}."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:206
+#: lib/pp_admintools/app/mail.py:201
 msgid "Mailing options"
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:221 lib/pp_admintools/mail_app.py:229
-#: lib/pp_admintools/mail_app.py:235 lib/pp_admintools/mail_app.py:241
+#: lib/pp_admintools/app/mail.py:216 lib/pp_admintools/app/mail.py:224
+#: lib/pp_admintools/app/mail.py:230 lib/pp_admintools/app/mail.py:236
 msgid "ADDRESS"
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:222
+#: lib/pp_admintools/app/mail.py:217
 msgid "Sender mail address for mails generated by this script. Default: {!r}"
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:230
+#: lib/pp_admintools/app/mail.py:225
 msgid "Mail addresses of all recipients for mails generated by this script."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:236
+#: lib/pp_admintools/app/mail.py:231
 msgid "Mail addresses of all CC recipients for mails generated by this script."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:242
+#: lib/pp_admintools/app/mail.py:237
 msgid "Reply mail address for mails generated by this script."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:248
+#: lib/pp_admintools/app/mail.py:244
 msgid "METHOD"
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:249
+#: lib/pp_admintools/app/mail.py:245
 msgid "Method for sending the mails generated by this script. Valid values: {v}, default: {d!r}."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:257
+#: lib/pp_admintools/app/mail.py:253
 msgid "SERVER"
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:258
+#: lib/pp_admintools/app/mail.py:254
 msgid ""
 "Mail server for submitting generated by this script if the mail method of this script is 'smtp'."
 " Default: {!r}."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:267
+#: lib/pp_admintools/app/mail.py:263
 msgid ""
 "The port to use for submitting generated by this script if the mail method of this script is "
 "'smtp'. Default: {}."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:276
+#: lib/pp_admintools/app/mail.py:272
 msgid "Got command line arguments:"
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:291
+#: lib/pp_admintools/app/mail.py:287
 msgid "Mail to send:"
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:324
+#: lib/pp_admintools/app/mail.py:320
 msgid "Did not found sendmail executable."
 msgstr ""
 
-#: lib/pp_admintools/mail_config.py:208 lib/pp_admintools/mail_config.py:232
-#: lib/pp_admintools/mail_config.py:300
-msgid "Found invalid {what} {addr!r} in configuration."
-msgstr ""
-
-#: lib/pp_admintools/mail_config.py:233
-msgid "from address"
-msgstr ""
-
-#: lib/pp_admintools/mail_config.py:249 lib/pp_admintools/mail_config.py:253
-msgid "recipient mail address"
-msgstr ""
-
-#: lib/pp_admintools/mail_config.py:273 lib/pp_admintools/mail_config.py:277
-msgid "cc mail address"
-msgstr ""
-
-#: lib/pp_admintools/mail_config.py:301
-msgid "reply to address"
-msgstr ""
-
-#: lib/pp_admintools/mail_config.py:317
-msgid "Found invalid mail method {!r} in configuration."
-msgstr ""
-
-#: lib/pp_admintools/mail_config.py:351
-msgid "Value {!r} for SMTP port is invalid:"
-msgstr ""
-
-#: lib/pp_admintools/mail_config.py:356
-msgid "Found invalid SMTP port number {} in configuration."
-msgstr ""
-
-#: lib/pp_admintools/pdns_app.py:99 lib/pp_admintools/pdns_app.py:183
+#: lib/pp_admintools/app/pdns.py:99 lib/pp_admintools/app/pdns.py:183
 msgid "Configuration not available."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:113
+#: lib/pp_admintools/app/pdns.py:113
 msgid "Invalid API key {!r} given."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:125
+#: lib/pp_admintools/app/pdns.py:125
 msgid "Invalid API host {!r} given."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:138
+#: lib/pp_admintools/app/pdns.py:138
 msgid "Invalid API port {!r} given."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:150
+#: lib/pp_admintools/app/pdns.py:150
 msgid "Invalid API server name {!r} given."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:168 lib/pp_admintools/pdns_app.py:171
+#: lib/pp_admintools/app/pdns.py:168 lib/pp_admintools/app/pdns.py:171
 msgid "Invalid instance {!r} given."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:179
+#: lib/pp_admintools/app/pdns.py:179
 msgid "Evaluating instance {!r} ..."
 msgstr "Evaluating instance {!r} …"
 
-#: lib/pp_admintools/pdns_app.py:187
+#: lib/pp_admintools/app/pdns.py:187
 msgid "PDNS instance {!r} is not configured."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:240
+#: lib/pp_admintools/app/pdns.py:240
 msgid "PowerDNS API options"
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:249
-msgid "INSTANCE"
-msgstr ""
-
-#: lib/pp_admintools/pdns_app.py:250
+#: lib/pp_admintools/app/pdns.py:250
 msgid "Select, which PowerDNS instance to use. Valid values: {v}, default: {d!r}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:258 lib/pp_admintools/pdns_app.py:264
-#: lib/pp_admintools/pdns_app.py:270
+#: lib/pp_admintools/app/pdns.py:258 lib/pp_admintools/app/pdns.py:264
+#: lib/pp_admintools/app/pdns.py:270
 msgid "Using the {!r} PowerDNS instance."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:278
+#: lib/pp_admintools/app/pdns.py:278
 msgid "Which port to connect to PowerDNS API, default: {}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:284
+#: lib/pp_admintools/app/pdns.py:284
 msgid "SECS"
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:285
+#: lib/pp_admintools/app/pdns.py:285
 msgid "PowerDNS API access"
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:286
+#: lib/pp_admintools/app/pdns.py:286
 msgid "The timeout in seconds to request the PowerDNS API, default: {}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:309
+#: lib/pp_admintools/app/pdns.py:309
 msgid "No path given for{d} [{s}]/{k} in configuration."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:316
+#: lib/pp_admintools/app/pdns.py:316
 msgid "Path {p!r} for{d} [{s}]/{k} in configuration must be an absolute path."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:339 lib/pp_admintools/pdns_app.py:375
-#: lib/pp_admintools/pdns_app.py:402
+#: lib/pp_admintools/app/pdns.py:339 lib/pp_admintools/app/pdns.py:375
+#: lib/pp_admintools/app/pdns.py:402
 msgid "Executing {} ..."
 msgstr "Executing {} …"
 
-#: lib/pp_admintools/pdns_app.py:377
+#: lib/pp_admintools/app/pdns.py:377
 msgid "Setting Loglevel of the requests module to {}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:391
+#: lib/pp_admintools/app/pdns.py:391
 msgid "Executing nothing ..."
 msgstr "Executing nothing …"
 
-#: lib/pp_admintools/pdns_app.py:411 lib/pp_admintools/pdns_app.py:433
-#: lib/pp_admintools/pdns_app.py:444 lib/pp_admintools/pdns_app.py:454
+#: lib/pp_admintools/app/pdns.py:411 lib/pp_admintools/app/pdns.py:433
+#: lib/pp_admintools/app/pdns.py:444 lib/pp_admintools/app/pdns.py:454
 msgid "The PDNS server object does not exists."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:413 lib/pp_admintools/pdns_app.py:435
-#: lib/pp_admintools/pdns_app.py:446 lib/pp_admintools/pdns_app.py:456
+#: lib/pp_admintools/app/pdns.py:413 lib/pp_admintools/app/pdns.py:435
+#: lib/pp_admintools/app/pdns.py:446 lib/pp_admintools/app/pdns.py:456
 msgid "The PDNS server object is not initialized."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:464
+#: lib/pp_admintools/app/pdns.py:464
 msgid "Trying to get complete information about zone {!r} ..."
 msgstr "Trying to get complete information about zone {!r} …"
 
-#: lib/pp_admintools/pdns_app.py:470
+#: lib/pp_admintools/app/pdns.py:470
 msgid "The given zone {} was not found."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:473
+#: lib/pp_admintools/app/pdns.py:473
 msgid "Got a response:"
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:478
+#: lib/pp_admintools/app/pdns.py:478
 msgid "Zone object:"
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:247
+#: lib/pp_admintools/app/remove_ldap_user.py:69
+msgid ""
+"Disables or removes the given users from LDAP. If disabling, then the user will not be really "
+"removed, but disabled by locking the password, setting all status flags to {inact!r}, assigning "
+"{shell!r} as login shell und removing the user from all groups. When removing (or purging) the "
+"user will be really removed from LDAP."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:116
+msgid "Removing options"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:122
+msgid "Deactivating the user instead of removing it. This is mutually exclusive to {!r}."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:129
+msgid "Removing the user from LDAP. This is the default and is mutually exclusive to {!r}."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:135
+msgid "USER"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:136
+msgid ""
+"The user, which should be deactivated or removed. They may be given by their Uid (the "
+"alphanumeric POSIX name), their mail address or their LDAP DN (be aware, that this may be "
+"different in the particular LDAP instances)."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:153
+msgid "No users to remove given."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:170
+msgid "All given users were not found in any LDAP instance."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:175
+msgid "Evaluated DNs to remove:"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:184
+msgid "Start disabling user entries in:"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:186
+msgid "Start removing user entries in:"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:190
+msgid "Start disabling user entries ..."
+msgstr "Start disabling user entries …"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:192
+msgid "Start removing user entries ..."
+msgstr "Start removing user entries …"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:206
+msgid "Do you really want to deactivate the following users?"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:208
+msgid "Do you really want to remove the following users?"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:234
+msgid "Deactivate [{yes}/{no}]?"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:236
+msgid "Remove [{yes}/{no}]?"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:243
+msgid "Abort deactivating by {cls}: {e}"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:245
+msgid "Abort removing by {cls}: {e}"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:254
+msgid "Evaluating DNs of the user {!r} to remove ..."
+msgstr "Evaluating DNs of the user {!r} to remove …"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:268
+msgid "Got DN {dn!r} for user {user!r} in LDAP instance {inst}."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:275
+msgid "Found {nr} entries for user {u!r} in LDAP instance {i}."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:287
+msgid "Did not found user {user!r} in LDAP instance {inst}."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:296
+msgid "Deactivating all given users from {} ..."
+msgstr "Deactivating all given users from {} …"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:298
+msgid "Removing all given users from {} ..."
+msgstr "Removing all given users from {} …"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:310
+msgid "Deactivating user {dn!r} from {inst} ..."
+msgstr "Deactivating user {dn!r} from {inst} …"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:313
+msgid "Removing user {dn!r} from {inst} ..."
+msgstr "Removing user {dn!r} from {inst} …"
+
+#: lib/pp_admintools/app/remove_ldap_user.py:319
+msgid "Attributes of {!r}:"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:333
+msgid "User {!r} is a mail user."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:335
+msgid "User {!r} is not a mail user."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:348
+#, fuzzy
+msgid "Updating user info for {dn!r} on {inst} ..."
+msgstr "Updating user info for {dn!r} on from {inst} …"
+
+#: lib/pp_admintools/argparse_actions.py:45
+msgid "Value {v!r} for a {what} port is invalid:"
+msgstr ""
+
+#: lib/pp_admintools/argparse_actions.py:50
+msgid "Value {v!r} for a {what} port must be greater than 0 and less than {max}."
+msgstr ""
+
+#: lib/pp_admintools/argparse_actions.py:77
+msgid "Value {v!r} for a timeout of {what} is invalid:"
+msgstr ""
+
+#: lib/pp_admintools/argparse_actions.py:83
+msgid "Value {v!r} for a timeout of {what} must be greater than 0 and less than {max}."
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:202 lib/pp_admintools/config/dns_deploy_zones.py:515
+#: lib/pp_admintools/config/mail.py:149 lib/pp_admintools/config/pdns.py:187
+msgid "Evaluating config section {!r}:"
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:290
+msgid "Checking given master address {!r} ..."
+msgstr "Checking given master address {!r} …"
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:302
+msgid "Trying to evaluate address of host {!r} ..."
+msgstr "Trying to evaluate address of host {!r} …"
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:311
+msgid "Invalid hostname or address {a!r} found in masters: {e}"
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:319
+msgid "Got addresses {a!r} for host {h!r}."
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:333 lib/pp_admintools/config/dns_deploy_zones.py:356
+#: lib/pp_admintools/config/dns_deploy_zones.py:381 lib/pp_admintools/config/dns_deploy_zones.py:430
+#: lib/pp_admintools/config/dns_deploy_zones.py:479 lib/pp_admintools/config/dns_deploy_zones.py:541
+msgid "The path to {what} must be an absolute path, found {path!r}."
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:342 lib/pp_admintools/config/dns_deploy_zones.py:365
+#: lib/pp_admintools/config/dns_deploy_zones.py:390 lib/pp_admintools/config/dns_deploy_zones.py:415
+#: lib/pp_admintools/config/dns_deploy_zones.py:439 lib/pp_admintools/config/dns_deploy_zones.py:464
+#: lib/pp_admintools/config/dns_deploy_zones.py:488 lib/pp_admintools/config/dns_deploy_zones.py:550
+msgid "Found path to {what}: {path!r}."
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:377
+msgid "the named config directory"
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:402
+msgid "the named config file for zones"
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:406 lib/pp_admintools/config/dns_deploy_zones.py:455
+msgid "The path to {what} must not be an absolute path, found {path!r}."
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:427
+msgid "the named base directory"
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:451
+msgid "the directory for slave zones of named"
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:538
+msgid "the PID file"
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:590
+msgid "Using configured masters:"
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:592
+msgid "No valid masters found in configuration."
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:595
+msgid "Evaluated configuration:"
+msgstr ""
+
+#: lib/pp_admintools/config/ldap.py:150
+msgid "Invalid port {!r} for LDAP server given."
+msgstr ""
+
+#: lib/pp_admintools/config/ldap.py:163
+msgid "An empty Base DN for LDAP searches is not allowed."
+msgstr ""
+
+#: lib/pp_admintools/config/ldap.py:352
+msgid "Evaluating LDAP config ..."
+msgstr "Evaluating LDAP config …"
+
+#: lib/pp_admintools/config/ldap.py:356
+msgid "Evaluating LDAP section {!r} ..."
+msgstr "Evaluating LDAP section {!r} …"
+
+#: lib/pp_admintools/config/ldap.py:373
+msgid "Value {!r} for a timeout is invalid."
+msgstr ""
+
+#: lib/pp_admintools/config/ldap.py:393
+msgid "Reading configuration of LDAP instance {!r} ..."
+msgstr "Reading configuration of LDAP instance {!r} …"
+
+#: lib/pp_admintools/config/ldap.py:401
+msgid "Invalid value {val!r} in section {sec!r} for a LDAP {what}."
+msgstr ""
+
+#: lib/pp_admintools/config/ldap.py:451
+msgid "Unknown LDAP configuration key {key} found in section {sec!r}."
+msgstr ""
+
+#: lib/pp_admintools/config/mail.py:170 lib/pp_admintools/config/mail.py:194
+#: lib/pp_admintools/config/mail.py:262
+msgid "Found invalid {what} {addr!r} in configuration."
+msgstr ""
+
+#: lib/pp_admintools/config/mail.py:195
+msgid "from address"
+msgstr ""
+
+#: lib/pp_admintools/config/mail.py:211 lib/pp_admintools/config/mail.py:215
+msgid "recipient mail address"
+msgstr ""
+
+#: lib/pp_admintools/config/mail.py:235 lib/pp_admintools/config/mail.py:239
+msgid "cc mail address"
+msgstr ""
+
+#: lib/pp_admintools/config/mail.py:263
+msgid "reply to address"
+msgstr ""
+
+#: lib/pp_admintools/config/mail.py:279
+msgid "Found invalid mail method {!r} in configuration."
+msgstr ""
+
+#: lib/pp_admintools/config/mail.py:313
+msgid "Value {!r} for SMTP port is invalid:"
+msgstr ""
+
+#: lib/pp_admintools/config/mail.py:318
+msgid "Found invalid SMTP port number {} in configuration."
+msgstr ""
+
+#: lib/pp_admintools/config/pdns.py:247
 msgid "A timeout has to be between 1 and {} seconds."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:251
+#: lib/pp_admintools/config/pdns.py:251
 msgid "Value {!r} for PowerDNS API timeout is invalid:"
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:269
+#: lib/pp_admintools/config/pdns.py:269
 msgid "Found invalid PDNS environment/instance {!r} in configuration."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:284
+#: lib/pp_admintools/config/pdns.py:284
 msgid "Found PDNS host: {!r}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:300 lib/pp_admintools/pdns_config.py:392
+#: lib/pp_admintools/config/pdns.py:300 lib/pp_admintools/config/pdns.py:392
 msgid "A port must be greater than 0 and less than {}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:303
+#: lib/pp_admintools/config/pdns.py:303
 msgid "Wrong PDNS port number {p!r} found: {e}"
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:312
+#: lib/pp_admintools/config/pdns.py:312
 msgid "Found port number for PDNS: {}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:326
+#: lib/pp_admintools/config/pdns.py:326
 msgid "Found API key for PDNS: {!r}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:337
+#: lib/pp_admintools/config/pdns.py:337
 msgid "Found PDNS API servername: {!r}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:354
+#: lib/pp_admintools/config/pdns.py:354
 msgid "Evaluating PowerDNS instance {!r}:"
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:366
-#, fuzzy
+#: lib/pp_admintools/config/pdns.py:366
 msgid "Searching for host for PDNS instance {!r} .."
-msgstr "Searching for {!r} …"
+msgstr "Searching for host for PDNS instance {!r} …"
 
-#: lib/pp_admintools/pdns_config.py:374
+#: lib/pp_admintools/config/pdns.py:374
 msgid "Found host for PDNS instance {inst!r}: {host!r}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:382
+#: lib/pp_admintools/config/pdns.py:382
 msgid "Searching for post number for PDNS instance {!r} .."
 msgstr "Searching for post number for PDNS instance {!r} …"
 
-#: lib/pp_admintools/pdns_config.py:395
+#: lib/pp_admintools/config/pdns.py:395
 msgid "Wrong port number {p!r} for PDNS instance {inst!r} found: {e}"
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:404
+#: lib/pp_admintools/config/pdns.py:404
 msgid "Found port number for PDNS instance {inst!r}: {p}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:412
+#: lib/pp_admintools/config/pdns.py:412
 msgid "Searching for internal server name of PDNS instance {!r} .."
 msgstr "Searching for internal server name of PDNS instance {!r} …"
 
-#: lib/pp_admintools/pdns_config.py:422
+#: lib/pp_admintools/config/pdns.py:422
 msgid "Found internal server name PDNS instance {inst!r}: {sn!r}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:430
+#: lib/pp_admintools/config/pdns.py:430
 msgid "Searching for API key of PDNS instance {!r} .."
 msgstr "Searching for API key of PDNS instance {!r} …"
 
-#: lib/pp_admintools/pdns_config.py:443
+#: lib/pp_admintools/config/pdns.py:443
 msgid "Found API key of PDNS instance {inst!r}: {key!r}."
 msgstr ""
 
index 987edfa3842bdaf154bdc0b1a152714a80944440..3c8f076186fb1c2e077f12f705930d20626df416 100644 (file)
@@ -8,780 +8,1126 @@ msgid ""
 msgstr ""
 "Project-Id-Version: pp_admintools 0.9.1\n"
 "Report-Msgid-Bugs-To: frank.brehm@pixelpark.com\n"
-"POT-Creation-Date: 2022-05-18 14:34+0200\n"
+"POT-Creation-Date: 2022-09-08 15:41+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <frank.brehm@pixelpark.com>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.10.1\n"
+"Generated-By: Babel 2.10.3\n"
 
-#: lib/pp_admintools/argparse_actions.py:45
-msgid "Value {v!r} for a {what} port is invalid:"
+#: lib/pp_admintools/app/__init__.py:57
+msgid "Timeout on answering on the console."
 msgstr ""
 
-#: lib/pp_admintools/argparse_actions.py:50
-msgid "Value {v!r} for a {what} port must be greater than 0 and less than {max}."
+#: lib/pp_admintools/app/__init__.py:76
+msgid "a timeout must be greater than zero and less or equal to {}."
 msgstr ""
 
-#: lib/pp_admintools/argparse_actions.py:77
-msgid "Value {v!r} for a timeout of {what} is invalid:"
+#: lib/pp_admintools/app/__init__.py:81
+msgid "Wrong timeout {!r}:"
 msgstr ""
 
-#: lib/pp_admintools/argparse_actions.py:83
-msgid "Value {v!r} for a timeout of {what} must be greater than 0 and less than {max}."
+#: lib/pp_admintools/app/__init__.py:125 lib/pp_admintools/app/remove_ldap_user.py:238
+msgid "yes"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:121
+#: lib/pp_admintools/app/__init__.py:132
+msgid "no"
+msgstr ""
+
+#: lib/pp_admintools/app/__init__.py:163
+msgid "Wrong prompt timeout {v!r}, must be greater or equal to Null and less or equal to {max}."
+msgstr ""
+
+#: lib/pp_admintools/app/__init__.py:243
+msgid "Yes/No"
+msgstr ""
+
+#: lib/pp_admintools/app/__init__.py:248
+msgid "Interrupted on demand."
+msgstr ""
+
+#: lib/pp_admintools/app/__init__.py:281 lib/pp_admintools/app/__init__.py:286
+msgid "Got a {}:"
+msgstr ""
+
+#: lib/pp_admintools/app/dns_deploy_zones.py:121
 msgid "Generation of the BIND9 configuration file for slave zones."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:263
+#: lib/pp_admintools/app/dns_deploy_zones.py:263
 msgid "Keep a backup file for each changed configuration file."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:268
+#: lib/pp_admintools/app/dns_deploy_zones.py:268
 msgid "Keeping the temporary directory instead of removing it at the end (e.g. for debugging purposes)"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:294
+#: lib/pp_admintools/app/dns_deploy_zones.py:294
 msgid "Post init phase."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:298
+#: lib/pp_admintools/app/dns_deploy_zones.py:298
 msgid "My own post init phase."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:314
+#: lib/pp_admintools/app/dns_deploy_zones.py:314
 msgid "Unknown time zone: {!r}."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:334
+#: lib/pp_admintools/app/dns_deploy_zones.py:334
 msgid "You must be root to execute this script."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:336
+#: lib/pp_admintools/app/dns_deploy_zones.py:336
 msgid "But in simulation mode we are continuing nevertheless."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:346
+#: lib/pp_admintools/app/dns_deploy_zones.py:346
 msgid "Using the global DNS master is not supported, please use 'local' or 'public'"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:354
+#: lib/pp_admintools/app/dns_deploy_zones.py:354
 msgid "Starting: {}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:361
+#: lib/pp_admintools/app/dns_deploy_zones.py:361
 msgid "Could not occupy pidfile: {}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:386
+#: lib/pp_admintools/app/dns_deploy_zones.py:386
 msgid "Ending: {}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:391
+#: lib/pp_admintools/app/dns_deploy_zones.py:391
 msgid "Cleaning up ..."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:395
+#: lib/pp_admintools/app/dns_deploy_zones.py:395
 msgid "Searching for {!r}."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:398
+#: lib/pp_admintools/app/dns_deploy_zones.py:398
 msgid "Keep existing backup file {!r}."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:400
+#: lib/pp_admintools/app/dns_deploy_zones.py:400
 msgid "Removing {!r} ..."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:406
+#: lib/pp_admintools/app/dns_deploy_zones.py:406
 msgid "Error removing {p!r} - {c}: {e}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:411
+#: lib/pp_admintools/app/dns_deploy_zones.py:411
 msgid "Temporary directory {!r} will not be removed. It's on yours to remove it manually."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:416
+#: lib/pp_admintools/app/dns_deploy_zones.py:416
 msgid "Destroying temporary directory {!r} ..."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:425
+#: lib/pp_admintools/app/dns_deploy_zones.py:425
 msgid "Temporary directory: {!r}."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:430
+#: lib/pp_admintools/app/dns_deploy_zones.py:430
 msgid "Temporary zones conf: {!r}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:435
+#: lib/pp_admintools/app/dns_deploy_zones.py:435
 msgid "Trying to get all keys from named.conf ..."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:441 lib/pp_admintools/dns_deploy_zones_app.py:795
-#: lib/pp_admintools/dns_deploy_zones_app.py:831 lib/pp_admintools/dns_deploy_zones_app.py:863
-#: lib/pp_admintools/dns_deploy_zones_app.py:898 lib/pp_admintools/dns_deploy_zones_app.py:933
-#: lib/pp_admintools/mail_app.py:330
+#: lib/pp_admintools/app/dns_deploy_zones.py:441 lib/pp_admintools/app/dns_deploy_zones.py:795
+#: lib/pp_admintools/app/dns_deploy_zones.py:831 lib/pp_admintools/app/dns_deploy_zones.py:863
+#: lib/pp_admintools/app/dns_deploy_zones.py:898 lib/pp_admintools/app/dns_deploy_zones.py:933
+#: lib/pp_admintools/app/mail.py:326
 msgid "Executing: {}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:447 lib/pp_admintools/dns_deploy_zones_app.py:801
+#: lib/pp_admintools/app/dns_deploy_zones.py:447 lib/pp_admintools/app/dns_deploy_zones.py:801
+#: lib/pp_admintools/app/ldap.py:666 lib/pp_admintools/app/ldap.py:719
+#: lib/pp_admintools/app/ldap.py:772
 msgid "Result:"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:488 lib/pp_admintools/dns_deploy_zones_app.py:490
+#: lib/pp_admintools/app/dns_deploy_zones.py:488 lib/pp_admintools/app/dns_deploy_zones.py:490
 msgid "Found named keys:"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:490 lib/pp_admintools/dns_deploy_zones_app.py:521
+#: lib/pp_admintools/app/dns_deploy_zones.py:490 lib/pp_admintools/app/dns_deploy_zones.py:521
 msgid "None"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:495
+#: lib/pp_admintools/app/dns_deploy_zones.py:495
 msgid "Generating {} ..."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:519 lib/pp_admintools/dns_deploy_zones_app.py:521
+#: lib/pp_admintools/app/dns_deploy_zones.py:519 lib/pp_admintools/app/dns_deploy_zones.py:521
 msgid "Collected server configuration:"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:542
+#: lib/pp_admintools/app/dns_deploy_zones.py:542
 msgid "Generated file {!r}:"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:558
+#: lib/pp_admintools/app/dns_deploy_zones.py:558
 msgid "Pure local zone {!r} will not be considered."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:590
+#: lib/pp_admintools/app/dns_deploy_zones.py:590
 msgid "Key {k!r} for zone {z!r} not found in named configuration."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:620
+#: lib/pp_admintools/app/dns_deploy_zones.py:620
 msgid "Got IPv4 tuples: {}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:644
+#: lib/pp_admintools/app/dns_deploy_zones.py:644
 msgid "Got IPv6 tokens: {}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:651
+#: lib/pp_admintools/app/dns_deploy_zones.py:651
 msgid "Comparing generated files with existing ones."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:658
+#: lib/pp_admintools/app/dns_deploy_zones.py:658
 msgid "Files to replace:"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:664
+#: lib/pp_admintools/app/dns_deploy_zones.py:664
 msgid "Source file not defined."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:666
+#: lib/pp_admintools/app/dns_deploy_zones.py:666
 msgid "Target file not defined."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:668
+#: lib/pp_admintools/app/dns_deploy_zones.py:668
 msgid "Comparing {one!r} with {two!r} ..."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:672 lib/pp_admintools/dns_deploy_zones_app.py:681
+#: lib/pp_admintools/app/dns_deploy_zones.py:672 lib/pp_admintools/app/dns_deploy_zones.py:681
 msgid "{what} {f!r} does not exists."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:673 lib/pp_admintools/dns_deploy_zones_app.py:677
+#: lib/pp_admintools/app/dns_deploy_zones.py:673 lib/pp_admintools/app/dns_deploy_zones.py:677
 msgid "Source file"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:676 lib/pp_admintools/dns_deploy_zones_app.py:686
+#: lib/pp_admintools/app/dns_deploy_zones.py:676 lib/pp_admintools/app/dns_deploy_zones.py:686
 msgid "{what} {f!r} is not a regular file."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:682 lib/pp_admintools/dns_deploy_zones_app.py:687
+#: lib/pp_admintools/app/dns_deploy_zones.py:682 lib/pp_admintools/app/dns_deploy_zones.py:687
 msgid "Target file"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:693 lib/pp_admintools/dns_deploy_zones_app.py:710
+#: lib/pp_admintools/app/dns_deploy_zones.py:693 lib/pp_admintools/app/dns_deploy_zones.py:710
 msgid "Reading {!r} ..."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:703 lib/pp_admintools/dns_deploy_zones_app.py:720
+#: lib/pp_admintools/app/dns_deploy_zones.py:703 lib/pp_admintools/app/dns_deploy_zones.py:720
 msgid "Cleaned version of {!r}:"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:725
+#: lib/pp_admintools/app/dns_deploy_zones.py:725
 msgid ""
 "Source file {sf!r} has different number essential lines ({sl}) than the target file {tf!r} ({tl}"
 " lines)."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:734
+#: lib/pp_admintools/app/dns_deploy_zones.py:734
 msgid "Source file {sf!r} has a different content than the target file {tf!r}."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:746
+#: lib/pp_admintools/app/dns_deploy_zones.py:746
 msgid "No replacement of any config files necessary."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:749
+#: lib/pp_admintools/app/dns_deploy_zones.py:749
 msgid "Start replacing of config files ..."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:757 lib/pp_admintools/dns_deploy_zones_app.py:767
+#: lib/pp_admintools/app/dns_deploy_zones.py:757 lib/pp_admintools/app/dns_deploy_zones.py:767
 msgid "Copying {frm!r} => {to!r} ..."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:763
+#: lib/pp_admintools/app/dns_deploy_zones.py:763
 msgid "All backuped config files:"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:775
+#: lib/pp_admintools/app/dns_deploy_zones.py:775
 msgid "Restoring of original config files because of an exception."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:779
+#: lib/pp_admintools/app/dns_deploy_zones.py:779
 msgid "Moving {frm!r} => {to!r} ..."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:785
+#: lib/pp_admintools/app/dns_deploy_zones.py:785
 msgid "Could not find backup file {!r}."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:790
+#: lib/pp_admintools/app/dns_deploy_zones.py:790
 msgid "Checking syntax correctness of named.conf ..."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:811
+#: lib/pp_admintools/app/dns_deploy_zones.py:811
 msgid "Reload or restart of named is not necessary."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:816
+#: lib/pp_admintools/app/dns_deploy_zones.py:816
 msgid "Named is not running, please start it manually."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:827
+#: lib/pp_admintools/app/dns_deploy_zones.py:827
 msgid "Checking, whether named is running ..."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:845 lib/pp_admintools/dns_deploy_zones_app.py:880
-#: lib/pp_admintools/dns_deploy_zones_app.py:915 lib/pp_admintools/dns_deploy_zones_app.py:950
+#: lib/pp_admintools/app/dns_deploy_zones.py:845 lib/pp_admintools/app/dns_deploy_zones.py:880
+#: lib/pp_admintools/app/dns_deploy_zones.py:915 lib/pp_admintools/app/dns_deploy_zones.py:950
 msgid "Return value: {!r}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:847 lib/pp_admintools/dns_deploy_zones_app.py:849
-#: lib/pp_admintools/dns_deploy_zones_app.py:882 lib/pp_admintools/dns_deploy_zones_app.py:884
-#: lib/pp_admintools/dns_deploy_zones_app.py:917 lib/pp_admintools/dns_deploy_zones_app.py:919
-#: lib/pp_admintools/dns_deploy_zones_app.py:952 lib/pp_admintools/dns_deploy_zones_app.py:954
+#: lib/pp_admintools/app/dns_deploy_zones.py:847 lib/pp_admintools/app/dns_deploy_zones.py:849
+#: lib/pp_admintools/app/dns_deploy_zones.py:882 lib/pp_admintools/app/dns_deploy_zones.py:884
+#: lib/pp_admintools/app/dns_deploy_zones.py:917 lib/pp_admintools/app/dns_deploy_zones.py:919
+#: lib/pp_admintools/app/dns_deploy_zones.py:952 lib/pp_admintools/app/dns_deploy_zones.py:954
 msgid "Output on {}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:859
+#: lib/pp_admintools/app/dns_deploy_zones.py:859
 msgid "Starting {} ..."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:894
+#: lib/pp_admintools/app/dns_deploy_zones.py:894
 msgid "Restarting {} ..."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_app.py:929
+#: lib/pp_admintools/app/dns_deploy_zones.py:929
 msgid "Reloading {} ..."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:202 lib/pp_admintools/dns_deploy_zones_config.py:515
-#: lib/pp_admintools/mail_config.py:187 lib/pp_admintools/pdns_config.py:187
-msgid "Evaluating config section {!r}:"
+#: lib/pp_admintools/app/ldap.py:81 lib/pp_admintools/app/ldap.py:184
+msgid "The path {!r} must be an absolute path."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:290
-msgid "Checking given master address {!r} ..."
+#: lib/pp_admintools/app/ldap.py:87 lib/pp_admintools/app/ldap.py:188
+msgid "The file {!r} does not exists."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:302
-msgid "Trying to evaluate address of host {!r} ..."
+#: lib/pp_admintools/app/ldap.py:91 lib/pp_admintools/app/ldap.py:192
+msgid "The given path {!r} exists, but is not a regular file."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:311
-msgid "Invalid hostname or address {a!r} found in masters: {e}"
+#: lib/pp_admintools/app/ldap.py:95 lib/pp_admintools/app/ldap.py:196
+msgid "The given file {!r} is not readable."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:319
-msgid "Got addresses {a!r} for host {h!r}."
+#: lib/pp_admintools/app/ldap.py:116
+msgid "a port number must be greater than zero and less or equal to {}."
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:333 lib/pp_admintools/dns_deploy_zones_config.py:356
-#: lib/pp_admintools/dns_deploy_zones_config.py:381 lib/pp_admintools/dns_deploy_zones_config.py:430
-#: lib/pp_admintools/dns_deploy_zones_config.py:479 lib/pp_admintools/dns_deploy_zones_config.py:541
-msgid "The path to {what} must be an absolute path, found {path!r}."
+#: lib/pp_admintools/app/ldap.py:121
+msgid "Wrong port number {!r}:"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:342 lib/pp_admintools/dns_deploy_zones_config.py:365
-#: lib/pp_admintools/dns_deploy_zones_config.py:390 lib/pp_admintools/dns_deploy_zones_config.py:415
-#: lib/pp_admintools/dns_deploy_zones_config.py:439 lib/pp_admintools/dns_deploy_zones_config.py:464
-#: lib/pp_admintools/dns_deploy_zones_config.py:488 lib/pp_admintools/dns_deploy_zones_config.py:550
-msgid "Found path to {what}: {path!r}."
+#: lib/pp_admintools/app/ldap.py:231
+msgid "LDAP options"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:377
-msgid "the named config directory"
+#: lib/pp_admintools/app/ldap.py:233
+msgid "Options for the default LDAP connection"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:402
-msgid "the named config file for zones"
+#: lib/pp_admintools/app/ldap.py:235
+msgid "Options fo LDAP connections"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:406 lib/pp_admintools/dns_deploy_zones_config.py:455
-msgid "The path to {what} must not be an absolute path, found {path!r}."
+#: lib/pp_admintools/app/ldap.py:242 lib/pp_admintools/app/remove_ldap_user.py:238
+msgid "No"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:427
-msgid "the named base directory"
+#: lib/pp_admintools/app/ldap.py:244
+msgid "Yes"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:451
-msgid "the directory for slave zones of named"
+#: lib/pp_admintools/app/ldap.py:250
+msgid "HOST"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:538
-msgid "the PID file"
+#: lib/pp_admintools/app/ldap.py:251
+msgid "Hostname or address of the LDAP server to use. Default: {!r}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:590
-msgid "Using configured masters:"
+#: lib/pp_admintools/app/ldap.py:258
+msgid "Use ldaps to connect to the LDAP server. Default: {}"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:592
-msgid "No valid masters found in configuration."
+#: lib/pp_admintools/app/ldap.py:263 lib/pp_admintools/app/mail.py:261
+#: lib/pp_admintools/app/pdns.py:275
+msgid "PORT"
 msgstr ""
 
-#: lib/pp_admintools/dns_deploy_zones_config.py:595
-msgid "Evaluated configuration:"
+#: lib/pp_admintools/app/ldap.py:265
+msgid "The port number to connect to the LDAP server. Default: {}"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:68 lib/pp_admintools/ldap_app.py:178
-msgid "The path {!r} must be an absolute path."
+#: lib/pp_admintools/app/ldap.py:271
+msgid "The base DN used as the root for the LDAP searches. Default: {!r}"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:74 lib/pp_admintools/ldap_app.py:182
-msgid "The file {!r} does not exists."
+#: lib/pp_admintools/app/ldap.py:278
+msgid "The Bind DN to use to connect to the LDAP server. Default: {!r}"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:78 lib/pp_admintools/ldap_app.py:186
-msgid "The given path {!r} exists, but is not a regular file."
+#: lib/pp_admintools/app/ldap.py:286
+msgid "PASSWORD"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:82 lib/pp_admintools/ldap_app.py:190
-msgid "The given file {!r} is not readable."
+#: lib/pp_admintools/app/ldap.py:287
+msgid "Use PASSWORD as the password for simple LDAP authentication."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:103
-msgid "a port number must be greater than zero and less or equal to {}."
+#: lib/pp_admintools/app/ldap.py:292
+msgid ""
+"Prompt for simple LDAP authentication. This is used instead of specifying the password on the "
+"command line."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:108
-msgid "Wrong port number {!r}:"
+#: lib/pp_admintools/app/ldap.py:298
+msgid "PASSWORD_FILE"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:130
-msgid "a timeout must be greater than zero and less or equal to {}."
+#: lib/pp_admintools/app/ldap.py:300
+msgid "Use contents of PASSWORD_FILE as the password for simple authentication."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:135
-msgid "Wrong timeout {!r}:"
+#: lib/pp_admintools/app/ldap.py:308 lib/pp_admintools/app/pdns.py:249
+msgid "INSTANCE"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:223
-msgid "Options for the default LDAP connection"
+#: lib/pp_admintools/app/ldap.py:311
+msgid ""
+"The LDAP instance (LDAP cluster) from configuration, where to execute this script. If not given,"
+" then the instance {!r} will be used."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:230
-msgid "No"
+#: lib/pp_admintools/app/ldap.py:314
+msgid ""
+"The LDAP instance (LDAP cluster) from configuration, where to execute this script. It is "
+"possible to give here the value {val_all!r}, then all found LDAP instances except {default!r} "
+"are used. It is alo possible to give the value {val_list!r}, then all configured LDAP instances "
+"are shown, and the application is exiting. If not given, then the instance {default!r} will be "
+"used."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:232
-msgid "Yes"
+#: lib/pp_admintools/app/ldap.py:333
+msgid "SECONDS"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:238
-msgid "HOST"
+#: lib/pp_admintools/app/ldap.py:335
+msgid "Using the given timeout in seconds for all LDAP operations. Default: {}"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:239
-msgid "Hostname or address of the LDAP server to use. Default: {!r}"
+#: lib/pp_admintools/app/ldap.py:367
+msgid "Checking given instances."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:246
-msgid "Use ldaps to connect to the LDAP server. Default: {}"
+#: lib/pp_admintools/app/ldap.py:371
+msgid "Given insts:"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:251 lib/pp_admintools/mail_app.py:265
-#: lib/pp_admintools/pdns_app.py:275
-msgid "PORT"
+#: lib/pp_admintools/app/ldap.py:408
+msgid "Configured LDAP instances:"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:253
-msgid "The port number to connect to the LDAP server. Default: {}"
+#: lib/pp_admintools/app/ldap.py:422
+msgid "Verifying given instances ..."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:259
-msgid "The base DN used as the root for the LDAP searches. Default: {!r}"
+#: lib/pp_admintools/app/ldap.py:440
+msgid "LDAP instance {!r} not found in configuration."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:266
-msgid "The Bind DN to use to connect to the LDAP server. Default: {!r}"
+#: lib/pp_admintools/app/ldap.py:448
+msgid "LDAP instances to use:"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:274
-msgid "PASSWORD"
+#: lib/pp_admintools/app/ldap.py:497
+msgid "Preparations ..."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:275
-msgid "Use PASSWORD as the password for simple LDAP authentication."
+#: lib/pp_admintools/app/ldap.py:500
+msgid "Open all necessary LDAP connections ..."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:280
-msgid ""
-"Prompt for simple LDAP authentication. This is used instead of specifying the password on the "
-"command line."
+#: lib/pp_admintools/app/ldap.py:511
+msgid "Connecting to LDAP server {} ..."
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:286
-msgid "PASSWORD_FILE"
+#: lib/pp_admintools/app/ldap.py:526
+msgid "Connect options to server {!r}:"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:288
-msgid "Use contents of PASSWORD_FILE as the password for simple authentication."
+#: lib/pp_admintools/app/ldap.py:534
+msgid "LDAP server {s}: {re}"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:293
-msgid "SECONDS"
+#: lib/pp_admintools/app/ldap.py:542
+msgid "Info about LDAP server {}:"
 msgstr ""
 
-#: lib/pp_admintools/ldap_app.py:295
-msgid "Using the given timeout in seconds for all LDAP operations. Default: {}"
+#: lib/pp_admintools/app/ldap.py:549
+msgid "Finishing ..."
 msgstr ""
 
-#: lib/pp_admintools/ldap_config.py:146
-msgid "Invalid port {!r} for LDAP server given."
+#: lib/pp_admintools/app/ldap.py:558
+msgid "Disconnecting from all remaining LDAP instances ..."
 msgstr ""
 
-#: lib/pp_admintools/ldap_config.py:159
-msgid "An empty Base DN for LDAP searches is not allowed."
+#: lib/pp_admintools/app/ldap.py:571
+msgid "Unbinding from LDAP server {!r} ..."
 msgstr ""
 
-#: lib/pp_admintools/ldap_config.py:365
-msgid "Value {!r} for a timeout is invalid."
+#: lib/pp_admintools/app/ldap.py:578
+msgid "Disconnecting from LDAP server {!r} ..."
 msgstr ""
 
-#: lib/pp_admintools/ldap_config.py:389
-msgid "Invalid value {val!r} in section {sec!r} for a LDAP {what}."
+#: lib/pp_admintools/app/ldap.py:587
+msgid "Trying to evaluate DN of user {user!r} in LDAP instance {inst} ..."
 msgstr ""
 
-#: lib/pp_admintools/ldap_config.py:438
-msgid "Unknown LDAP configuration key {key} found in section {sec!r}."
+#: lib/pp_admintools/app/ldap.py:592
+msgid "Trying to evaluate DN of user {u!r} as a mail address ..."
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:599
+msgid "Trying to evaluate DN of user {u!r} as a LDAP DN ..."
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:606
+msgid "Trying to evaluate DN of user {u!r} as a UID (Posix user name) ..."
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:615 lib/pp_admintools/app/remove_ldap_user.py:258
+msgid "Empty user given."
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:618
+msgid "Trying to evaluate DN of user {u!r} as a CN ({c}) ..."
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:648 lib/pp_admintools/app/ldap.py:701
+#: lib/pp_admintools/app/ldap.py:754
+msgid "Searching in {uri}/{bdn} with filter: {fltr}"
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:659
+msgid "Result of searching for mail address {m!r}:"
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:663 lib/pp_admintools/app/ldap.py:716
+#: lib/pp_admintools/app/ldap.py:769 lib/pp_admintools/app/ldap.py:857
+msgid "Got a response entry:"
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:670
+msgid "User with mail address {m!r} not found in {uri}/{bdn}."
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:712
+msgid "Result of searching for uid {u!r}:"
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:723
+msgid "User with uid {u!r} not found in {uri}/{bdn}."
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:765
+msgid "Result of searching for CN {cn!r}:"
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:776
+msgid "User with cn {cn!r} not found in {uri}/{bdn}."
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:793
+msgid "User with DN {dn!r} not found in {uri}."
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:811
+msgid "ObjectClasses of {dn!r}:"
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:821
+msgid "Entry {dn!r} in {uri} seems not to be an account."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:108
+#: lib/pp_admintools/app/ldap.py:843
+msgid "Searching DN {dn!r} in {uri}."
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:853
+msgid "Result of searching for DN {dn!r}:"
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:861
+msgid "Entry with DN {dn!r} not found in {uri}."
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:898
+msgid "Applying changes:"
+msgstr ""
+
+#: lib/pp_admintools/app/mail.py:103
 msgid "Got invalid SMTP port number {!r}."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:126
+#: lib/pp_admintools/app/mail.py:121
 msgid "Got invalid mail from address {!r}."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:149
+#: lib/pp_admintools/app/mail.py:144
 msgid "Got invalid recipient mail addresses:"
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:177
+#: lib/pp_admintools/app/mail.py:172
 msgid "Got invalid cc mail addresses:"
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:192
+#: lib/pp_admintools/app/mail.py:187
 msgid "Got invalid reply mail address {!r}."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:206
+#: lib/pp_admintools/app/mail.py:201
 msgid "Mailing options"
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:221 lib/pp_admintools/mail_app.py:229
-#: lib/pp_admintools/mail_app.py:235 lib/pp_admintools/mail_app.py:241
+#: lib/pp_admintools/app/mail.py:216 lib/pp_admintools/app/mail.py:224
+#: lib/pp_admintools/app/mail.py:230 lib/pp_admintools/app/mail.py:236
 msgid "ADDRESS"
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:222
+#: lib/pp_admintools/app/mail.py:217
 msgid "Sender mail address for mails generated by this script. Default: {!r}"
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:230
+#: lib/pp_admintools/app/mail.py:225
 msgid "Mail addresses of all recipients for mails generated by this script."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:236
+#: lib/pp_admintools/app/mail.py:231
 msgid "Mail addresses of all CC recipients for mails generated by this script."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:242
+#: lib/pp_admintools/app/mail.py:237
 msgid "Reply mail address for mails generated by this script."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:248
+#: lib/pp_admintools/app/mail.py:244
 msgid "METHOD"
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:249
+#: lib/pp_admintools/app/mail.py:245
 msgid "Method for sending the mails generated by this script. Valid values: {v}, default: {d!r}."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:257
+#: lib/pp_admintools/app/mail.py:253
 msgid "SERVER"
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:258
+#: lib/pp_admintools/app/mail.py:254
 msgid ""
 "Mail server for submitting generated by this script if the mail method of this script is 'smtp'."
 " Default: {!r}."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:267
+#: lib/pp_admintools/app/mail.py:263
 msgid ""
 "The port to use for submitting generated by this script if the mail method of this script is "
 "'smtp'. Default: {}."
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:276
+#: lib/pp_admintools/app/mail.py:272
 msgid "Got command line arguments:"
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:291
+#: lib/pp_admintools/app/mail.py:287
 msgid "Mail to send:"
 msgstr ""
 
-#: lib/pp_admintools/mail_app.py:324
+#: lib/pp_admintools/app/mail.py:320
 msgid "Did not found sendmail executable."
 msgstr ""
 
-#: lib/pp_admintools/mail_config.py:208 lib/pp_admintools/mail_config.py:232
-#: lib/pp_admintools/mail_config.py:300
-msgid "Found invalid {what} {addr!r} in configuration."
-msgstr ""
-
-#: lib/pp_admintools/mail_config.py:233
-msgid "from address"
-msgstr ""
-
-#: lib/pp_admintools/mail_config.py:249 lib/pp_admintools/mail_config.py:253
-msgid "recipient mail address"
-msgstr ""
-
-#: lib/pp_admintools/mail_config.py:273 lib/pp_admintools/mail_config.py:277
-msgid "cc mail address"
-msgstr ""
-
-#: lib/pp_admintools/mail_config.py:301
-msgid "reply to address"
-msgstr ""
-
-#: lib/pp_admintools/mail_config.py:317
-msgid "Found invalid mail method {!r} in configuration."
-msgstr ""
-
-#: lib/pp_admintools/mail_config.py:351
-msgid "Value {!r} for SMTP port is invalid:"
-msgstr ""
-
-#: lib/pp_admintools/mail_config.py:356
-msgid "Found invalid SMTP port number {} in configuration."
-msgstr ""
-
-#: lib/pp_admintools/pdns_app.py:99 lib/pp_admintools/pdns_app.py:183
+#: lib/pp_admintools/app/pdns.py:99 lib/pp_admintools/app/pdns.py:183
 msgid "Configuration not available."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:113
+#: lib/pp_admintools/app/pdns.py:113
 msgid "Invalid API key {!r} given."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:125
+#: lib/pp_admintools/app/pdns.py:125
 msgid "Invalid API host {!r} given."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:138
+#: lib/pp_admintools/app/pdns.py:138
 msgid "Invalid API port {!r} given."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:150
+#: lib/pp_admintools/app/pdns.py:150
 msgid "Invalid API server name {!r} given."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:168 lib/pp_admintools/pdns_app.py:171
+#: lib/pp_admintools/app/pdns.py:168 lib/pp_admintools/app/pdns.py:171
 msgid "Invalid instance {!r} given."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:179
+#: lib/pp_admintools/app/pdns.py:179
 msgid "Evaluating instance {!r} ..."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:187
+#: lib/pp_admintools/app/pdns.py:187
 msgid "PDNS instance {!r} is not configured."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:240
+#: lib/pp_admintools/app/pdns.py:240
 msgid "PowerDNS API options"
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:249
-msgid "INSTANCE"
-msgstr ""
-
-#: lib/pp_admintools/pdns_app.py:250
+#: lib/pp_admintools/app/pdns.py:250
 msgid "Select, which PowerDNS instance to use. Valid values: {v}, default: {d!r}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:258 lib/pp_admintools/pdns_app.py:264
-#: lib/pp_admintools/pdns_app.py:270
+#: lib/pp_admintools/app/pdns.py:258 lib/pp_admintools/app/pdns.py:264
+#: lib/pp_admintools/app/pdns.py:270
 msgid "Using the {!r} PowerDNS instance."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:278
+#: lib/pp_admintools/app/pdns.py:278
 msgid "Which port to connect to PowerDNS API, default: {}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:284
+#: lib/pp_admintools/app/pdns.py:284
 msgid "SECS"
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:285
+#: lib/pp_admintools/app/pdns.py:285
 msgid "PowerDNS API access"
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:286
+#: lib/pp_admintools/app/pdns.py:286
 msgid "The timeout in seconds to request the PowerDNS API, default: {}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:309
+#: lib/pp_admintools/app/pdns.py:309
 msgid "No path given for{d} [{s}]/{k} in configuration."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:316
+#: lib/pp_admintools/app/pdns.py:316
 msgid "Path {p!r} for{d} [{s}]/{k} in configuration must be an absolute path."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:339 lib/pp_admintools/pdns_app.py:375
-#: lib/pp_admintools/pdns_app.py:402
+#: lib/pp_admintools/app/pdns.py:339 lib/pp_admintools/app/pdns.py:375
+#: lib/pp_admintools/app/pdns.py:402
 msgid "Executing {} ..."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:377
+#: lib/pp_admintools/app/pdns.py:377
 msgid "Setting Loglevel of the requests module to {}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:391
+#: lib/pp_admintools/app/pdns.py:391
 msgid "Executing nothing ..."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:411 lib/pp_admintools/pdns_app.py:433
-#: lib/pp_admintools/pdns_app.py:444 lib/pp_admintools/pdns_app.py:454
+#: lib/pp_admintools/app/pdns.py:411 lib/pp_admintools/app/pdns.py:433
+#: lib/pp_admintools/app/pdns.py:444 lib/pp_admintools/app/pdns.py:454
 msgid "The PDNS server object does not exists."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:413 lib/pp_admintools/pdns_app.py:435
-#: lib/pp_admintools/pdns_app.py:446 lib/pp_admintools/pdns_app.py:456
+#: lib/pp_admintools/app/pdns.py:413 lib/pp_admintools/app/pdns.py:435
+#: lib/pp_admintools/app/pdns.py:446 lib/pp_admintools/app/pdns.py:456
 msgid "The PDNS server object is not initialized."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:464
+#: lib/pp_admintools/app/pdns.py:464
 msgid "Trying to get complete information about zone {!r} ..."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:470
+#: lib/pp_admintools/app/pdns.py:470
 msgid "The given zone {} was not found."
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:473
+#: lib/pp_admintools/app/pdns.py:473
 msgid "Got a response:"
 msgstr ""
 
-#: lib/pp_admintools/pdns_app.py:478
+#: lib/pp_admintools/app/pdns.py:478
 msgid "Zone object:"
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:247
+#: lib/pp_admintools/app/remove_ldap_user.py:69
+msgid ""
+"Disables or removes the given users from LDAP. If disabling, then the user will not be really "
+"removed, but disabled by locking the password, setting all status flags to {inact!r}, assigning "
+"{shell!r} as login shell und removing the user from all groups. When removing (or purging) the "
+"user will be really removed from LDAP."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:116
+msgid "Removing options"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:122
+msgid "Deactivating the user instead of removing it. This is mutually exclusive to {!r}."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:129
+msgid "Removing the user from LDAP. This is the default and is mutually exclusive to {!r}."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:135
+msgid "USER"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:136
+msgid ""
+"The user, which should be deactivated or removed. They may be given by their Uid (the "
+"alphanumeric POSIX name), their mail address or their LDAP DN (be aware, that this may be "
+"different in the particular LDAP instances)."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:153
+msgid "No users to remove given."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:170
+msgid "All given users were not found in any LDAP instance."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:175
+msgid "Evaluated DNs to remove:"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:184
+msgid "Start disabling user entries in:"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:186
+msgid "Start removing user entries in:"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:190
+msgid "Start disabling user entries ..."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:192
+msgid "Start removing user entries ..."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:206
+msgid "Do you really want to deactivate the following users?"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:208
+msgid "Do you really want to remove the following users?"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:234
+msgid "Deactivate [{yes}/{no}]?"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:236
+msgid "Remove [{yes}/{no}]?"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:243
+msgid "Abort deactivating by {cls}: {e}"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:245
+msgid "Abort removing by {cls}: {e}"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:254
+msgid "Evaluating DNs of the user {!r} to remove ..."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:268
+msgid "Got DN {dn!r} for user {user!r} in LDAP instance {inst}."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:275
+msgid "Found {nr} entries for user {u!r} in LDAP instance {i}."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:287
+msgid "Did not found user {user!r} in LDAP instance {inst}."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:296
+msgid "Deactivating all given users from {} ..."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:298
+msgid "Removing all given users from {} ..."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:310
+msgid "Deactivating user {dn!r} from {inst} ..."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:313
+msgid "Removing user {dn!r} from {inst} ..."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:319
+msgid "Attributes of {!r}:"
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:333
+msgid "User {!r} is a mail user."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:335
+msgid "User {!r} is not a mail user."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:348
+msgid "Updating user info for {dn!r} on {inst} ..."
+msgstr ""
+
+#: lib/pp_admintools/argparse_actions.py:45
+msgid "Value {v!r} for a {what} port is invalid:"
+msgstr ""
+
+#: lib/pp_admintools/argparse_actions.py:50
+msgid "Value {v!r} for a {what} port must be greater than 0 and less than {max}."
+msgstr ""
+
+#: lib/pp_admintools/argparse_actions.py:77
+msgid "Value {v!r} for a timeout of {what} is invalid:"
+msgstr ""
+
+#: lib/pp_admintools/argparse_actions.py:83
+msgid "Value {v!r} for a timeout of {what} must be greater than 0 and less than {max}."
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:202 lib/pp_admintools/config/dns_deploy_zones.py:515
+#: lib/pp_admintools/config/mail.py:149 lib/pp_admintools/config/pdns.py:187
+msgid "Evaluating config section {!r}:"
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:290
+msgid "Checking given master address {!r} ..."
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:302
+msgid "Trying to evaluate address of host {!r} ..."
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:311
+msgid "Invalid hostname or address {a!r} found in masters: {e}"
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:319
+msgid "Got addresses {a!r} for host {h!r}."
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:333 lib/pp_admintools/config/dns_deploy_zones.py:356
+#: lib/pp_admintools/config/dns_deploy_zones.py:381 lib/pp_admintools/config/dns_deploy_zones.py:430
+#: lib/pp_admintools/config/dns_deploy_zones.py:479 lib/pp_admintools/config/dns_deploy_zones.py:541
+msgid "The path to {what} must be an absolute path, found {path!r}."
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:342 lib/pp_admintools/config/dns_deploy_zones.py:365
+#: lib/pp_admintools/config/dns_deploy_zones.py:390 lib/pp_admintools/config/dns_deploy_zones.py:415
+#: lib/pp_admintools/config/dns_deploy_zones.py:439 lib/pp_admintools/config/dns_deploy_zones.py:464
+#: lib/pp_admintools/config/dns_deploy_zones.py:488 lib/pp_admintools/config/dns_deploy_zones.py:550
+msgid "Found path to {what}: {path!r}."
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:377
+msgid "the named config directory"
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:402
+msgid "the named config file for zones"
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:406 lib/pp_admintools/config/dns_deploy_zones.py:455
+msgid "The path to {what} must not be an absolute path, found {path!r}."
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:427
+msgid "the named base directory"
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:451
+msgid "the directory for slave zones of named"
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:538
+msgid "the PID file"
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:590
+msgid "Using configured masters:"
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:592
+msgid "No valid masters found in configuration."
+msgstr ""
+
+#: lib/pp_admintools/config/dns_deploy_zones.py:595
+msgid "Evaluated configuration:"
+msgstr ""
+
+#: lib/pp_admintools/config/ldap.py:150
+msgid "Invalid port {!r} for LDAP server given."
+msgstr ""
+
+#: lib/pp_admintools/config/ldap.py:163
+msgid "An empty Base DN for LDAP searches is not allowed."
+msgstr ""
+
+#: lib/pp_admintools/config/ldap.py:352
+msgid "Evaluating LDAP config ..."
+msgstr ""
+
+#: lib/pp_admintools/config/ldap.py:356
+msgid "Evaluating LDAP section {!r} ..."
+msgstr ""
+
+#: lib/pp_admintools/config/ldap.py:373
+msgid "Value {!r} for a timeout is invalid."
+msgstr ""
+
+#: lib/pp_admintools/config/ldap.py:393
+msgid "Reading configuration of LDAP instance {!r} ..."
+msgstr ""
+
+#: lib/pp_admintools/config/ldap.py:401
+msgid "Invalid value {val!r} in section {sec!r} for a LDAP {what}."
+msgstr ""
+
+#: lib/pp_admintools/config/ldap.py:451
+msgid "Unknown LDAP configuration key {key} found in section {sec!r}."
+msgstr ""
+
+#: lib/pp_admintools/config/mail.py:170 lib/pp_admintools/config/mail.py:194
+#: lib/pp_admintools/config/mail.py:262
+msgid "Found invalid {what} {addr!r} in configuration."
+msgstr ""
+
+#: lib/pp_admintools/config/mail.py:195
+msgid "from address"
+msgstr ""
+
+#: lib/pp_admintools/config/mail.py:211 lib/pp_admintools/config/mail.py:215
+msgid "recipient mail address"
+msgstr ""
+
+#: lib/pp_admintools/config/mail.py:235 lib/pp_admintools/config/mail.py:239
+msgid "cc mail address"
+msgstr ""
+
+#: lib/pp_admintools/config/mail.py:263
+msgid "reply to address"
+msgstr ""
+
+#: lib/pp_admintools/config/mail.py:279
+msgid "Found invalid mail method {!r} in configuration."
+msgstr ""
+
+#: lib/pp_admintools/config/mail.py:313
+msgid "Value {!r} for SMTP port is invalid:"
+msgstr ""
+
+#: lib/pp_admintools/config/mail.py:318
+msgid "Found invalid SMTP port number {} in configuration."
+msgstr ""
+
+#: lib/pp_admintools/config/pdns.py:247
 msgid "A timeout has to be between 1 and {} seconds."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:251
+#: lib/pp_admintools/config/pdns.py:251
 msgid "Value {!r} for PowerDNS API timeout is invalid:"
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:269
+#: lib/pp_admintools/config/pdns.py:269
 msgid "Found invalid PDNS environment/instance {!r} in configuration."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:284
+#: lib/pp_admintools/config/pdns.py:284
 msgid "Found PDNS host: {!r}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:300 lib/pp_admintools/pdns_config.py:392
+#: lib/pp_admintools/config/pdns.py:300 lib/pp_admintools/config/pdns.py:392
 msgid "A port must be greater than 0 and less than {}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:303
+#: lib/pp_admintools/config/pdns.py:303
 msgid "Wrong PDNS port number {p!r} found: {e}"
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:312
+#: lib/pp_admintools/config/pdns.py:312
 msgid "Found port number for PDNS: {}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:326
+#: lib/pp_admintools/config/pdns.py:326
 msgid "Found API key for PDNS: {!r}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:337
+#: lib/pp_admintools/config/pdns.py:337
 msgid "Found PDNS API servername: {!r}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:354
+#: lib/pp_admintools/config/pdns.py:354
 msgid "Evaluating PowerDNS instance {!r}:"
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:366
+#: lib/pp_admintools/config/pdns.py:366
 msgid "Searching for host for PDNS instance {!r} .."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:374
+#: lib/pp_admintools/config/pdns.py:374
 msgid "Found host for PDNS instance {inst!r}: {host!r}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:382
+#: lib/pp_admintools/config/pdns.py:382
 msgid "Searching for post number for PDNS instance {!r} .."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:395
+#: lib/pp_admintools/config/pdns.py:395
 msgid "Wrong port number {p!r} for PDNS instance {inst!r} found: {e}"
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:404
+#: lib/pp_admintools/config/pdns.py:404
 msgid "Found port number for PDNS instance {inst!r}: {p}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:412
+#: lib/pp_admintools/config/pdns.py:412
 msgid "Searching for internal server name of PDNS instance {!r} .."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:422
+#: lib/pp_admintools/config/pdns.py:422
 msgid "Found internal server name PDNS instance {inst!r}: {sn!r}."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:430
+#: lib/pp_admintools/config/pdns.py:430
 msgid "Searching for API key of PDNS instance {!r} .."
 msgstr ""
 
-#: lib/pp_admintools/pdns_config.py:443
+#: lib/pp_admintools/config/pdns.py:443
 msgid "Found API key of PDNS instance {inst!r}: {key!r}."
 msgstr ""