--- /dev/null
+#!/usr/bin/env python3
+
+from __future__ import print_function
+
+# Standard modules
+import sys
+
+__exp_py_version_major__ = 3
+__min_py_version_minor__ = 6
+
+if sys.version_info[0] != __exp_py_version_major__:
+ print("This script is intended to use with Python {}.".format(
+ __exp_py_version_major__), file=sys.stderr)
+ print("You are using Python: {0}.{1}.{2}-{3}-{4}.".format(
+ *sys.version_info) + "\n", file=sys.stderr)
+ sys.exit(1)
+
+if sys.version_info[1] < __min_py_version_minor__:
+ print("A minimal Python version of {maj}.{min} is necessary to execute this script.".format(
+ maj=__exp_py_version_major__, min=__min_py_version_minor__), file=sys.stderr)
+ print("You are using Python: {0}.{1}.{2}-{3}-{4}.".format(
+ *sys.version_info) + "\n", file=sys.stderr)
+ sys.exit(1)
+
+# Standard modules
+import os
+import locale
+
+try:
+ from pathlib import Path
+except ImportError:
+ from pathlib2 import Path
+
+__author__ = 'Frank Brehm <frank.brehm@pixelpark.com>'
+__copyright__ = '(C) 2022 by Frank Brehm, Digitas Pixelpark GmbH, Berlin'
+
+# own modules:
+
+my_path = Path(__file__)
+my_real_path = my_path.resolve()
+bin_path = my_real_path.parent
+base_dir = bin_path.parent
+lib_dir = base_dir.joinpath('lib')
+module_dir = lib_dir.joinpath('pp_admintools')
+
+if module_dir.exists():
+ sys.path.insert(0, str(lib_dir))
+
+from pp_admintools.app.mirror_ldap import MirrorLdapApplication
+
+appname = os.path.basename(sys.argv[0])
+
+locale.setlocale(locale.LC_ALL, '')
+
+app = MirrorLdapApplication(appname=appname, base_dir=base_dir)
+app.initialized = True
+
+if app.verbose > 2:
+ print("{c}-Object:\n{a}".format(c=app.__class__.__name__, a=app))
+
+app()
+
+sys.exit(0)
+
+# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
# rom ..config.ldap import DEFAULT_PORT_LDAP, DEFAULT_PORT_LDAPS
from ..config.ldap import DEFAULT_TIMEOUT
-__version__ = '0.7.4'
+__version__ = '0.8.1'
LOG = logging.getLogger(__name__)
_ = XLATOR.gettext
use_default_ldap_connection = True
use_multiple_ldap_connections = False
show_cmdline_ldap_timeout = True
+ apply_default_ldap_instance_if_not_given = True
# pattern_re_ldap_dn = (
# '^([a-z][a-z0-9-]*)=(?![ #])(((?![\\="+,;<>]).)|(\\[ \\#="+,;<>])|(\\[a-f0-9][a-f0-9]))*'
'metavar': _('INSTANCE'),
}
+ help_default_inst = _(
+ "If not given, then the instance {!r} will be used.").format('default')
+
help_single = _(
- "The LDAP instance (LDAP cluster) from configuration, where to execute this "
- "script. If not given, then the instance {!r} will be used.").format('default')
+ "The LDAP instance (LDAP cluster) from configuration, "
+ "where to execute this script.")
+
help_multi = _(
"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.").format(
- val_all='all', val_list='list', default='default')
+ "LDAP instances are shown, and the application is exiting.").format(
+ val_all='all', val_list='list', default='default')
if self.use_multiple_ldap_connections:
- arg_params['nargs'] = '*'
- arg_params['help'] = help_multi
+ if self.apply_default_ldap_instance_if_not_given:
+ arg_params['nargs'] = '*'
+ arg_params['help'] = help_multi + ' ' + help_default_inst
+ else:
+ arg_params['nargs'] = '+'
+ arg_params['help'] = help_multi
else:
- arg_params['help'] = help_single
+ if self.apply_default_ldap_instance_if_not_given:
+ arg_params['help'] = help_single + ' ' + help_default_inst
+ else:
+ arg_params['help'] = help_single
+ arg_params['required'] = True
ldap_group.add_argument('-I', '--instance', **arg_params)
print()
# -------------------------------------------------------------------------
- def _verify_instances(self, is_admin=None, readonly=None, tier=None):
+ def _verify_instances(self, is_admin=None, readonly=None, tier=None, has_sync_source=False):
if self.verbose > 1:
LOG.debug(_("Verifying given instances ..."))
show_filter.append('readonly = {!r}'.format(readonly))
if tier is not None:
show_filter.append('tier = {!r}'.format(tier))
+ if has_sync_source:
+ show_filter.append('sync_source = *')
msg = _("Used filter:") + ' ' + format_list(show_filter)
LOG.debug(msg)
if tier is not None:
if tier.strip().lower() != instance.tier:
continue
+ if has_sync_source:
+ if instance.sync_source is None:
+ continue
instances.append(inst.lower())
if len(self.ldap_instances) == 1 and self.ldap_instances[0].lower() == 'all':
else:
if 'default' in self.cfg.ldap_connection:
- instances.insert(0, 'default')
+ if self.apply_default_ldap_instance_if_not_given:
+ instances.insert(0, 'default')
all_ok = True
for given_inst in self.ldap_instances:
if given_inst not in instances:
- LOG.error(_("LDAP instance {!r} not found in configuration.").format(
- given_inst))
+ msg = _(
+ "LDAP instance {!r} not found in configuration or is not usable.").format(
+ given_inst)
+ LOG.error(msg)
all_ok = False
if not all_ok:
--- /dev/null
+# -*- coding: utf-8 -*-
+"""
+@summary: An application module for mirroring one LDAP instance to another
+
+@author: Frank Brehm
+@contact: frank.brehm@pixelpark.com
+@copyright: © 2022 by Frank Brehm, Berlin
+"""
+from __future__ import absolute_import
+
+# Standard modules
+import logging
+
+# Third party modules
+# from ldap3 import MODIFY_REPLACE, MODIFY_ADD, MODIFY_DELETE
+
+# Own modules
+# from fb_tools.common import to_bool, is_sequence, pp
+
+from ..xlate import XLATOR
+
+# from .ldap import LdapAppError, FatalLDAPError
+from .ldap import LdapAppError
+from .ldap import BaseLdapApplication
+
+from ..argparse_actions import NonNegativeItegerOptionAction
+from ..argparse_actions import LimitedFloatOptionAction
+
+__version__ = '0.1.0'
+LOG = logging.getLogger(__name__)
+
+_ = XLATOR.gettext
+ngettext = XLATOR.ngettext
+
+
+# =============================================================================
+class MirrorLdapError(LdapAppError):
+ """Special exception class for exceptions inside this module."""
+
+ pass
+
+
+# =============================================================================
+class MirrorLdapApplication(BaseLdapApplication):
+ """Application class for mirroring one LDAP instance to another."""
+
+ show_simulate_option = True
+
+ use_default_ldap_connection = False
+ use_multiple_ldap_connections = False
+ show_cmdline_ldap_timeout = True
+ apply_default_ldap_instance_if_not_given = False
+
+ default_wait_after_write = 0.05
+
+ # -------------------------------------------------------------------------
+ def __init__(self, appname=None, base_dir=None):
+
+ self.src = None
+ self.tgt = None
+
+ self.limit = 0
+ self.wait_after_write = self.default_wait_after_write
+ self.only_struct = False
+
+ self.structural_entr_dns = []
+ self.non_structural_entr_dns = []
+ self.keep_entry_dns = []
+
+ desc = _(
+ "Mirror the content of a complete LDAP instance (server or cluster) to "
+ "another instance. This will be done first by clearing the target instance, "
+ "then copying structural entries from the source to the target instance and "
+ "then copying all other entries. During this some transformations are done, like "
+ "substituting the content of some entry attributes by another values."
+ )
+
+ super(MirrorLdapApplication, self).__init__(
+ appname=appname, description=desc, base_dir=base_dir, initialized=False)
+
+ self.initialized = True
+
+ # -------------------------------------------------------------------------
+ def init_arg_parser(self):
+
+ app_group = self.arg_parser.add_argument_group(_("Miroring options"))
+
+ app_group.add_argument(
+ '-W', '--wait', '--wait-after-write', dest='wait', type=float, metavar=_('SECONDS'),
+ action=LimitedFloatOptionAction, min_val=0,
+ help=_(
+ "Number of seconds to wait after each write operation. Given as a "
+ "float value, and if set to zero, there is no waiting after a write. "
+ "(default: {:.1f})").format(self.default_wait_after_write),
+ )
+
+ app_group.add_argument(
+ '-L', '--limit', dest='limit', type=int, metavar=_('NUMBER'),
+ action=NonNegativeItegerOptionAction,
+ help=_(
+ "Limiting the mirroring to the first NUMBER entries. "
+ "This option is valid only in simulation mode."),
+ )
+
+ app_group.add_argument(
+ '-S', '--struct', '--only-struct', action="store_true", dest="struct",
+ help=_("Mirror only structural entries (entries with childs)."),
+ )
+
+ super(MirrorLdapApplication, self).init_arg_parser()
+
+ # -------------------------------------------------------------------------
+ def _verify_instances(self):
+
+ super(MirrorLdapApplication, self)._verify_instances(
+ is_admin=True, readonly=False, has_sync_source=True)
+
+ # -------------------------------------------------------------------------
+ def _run(self):
+
+ LOG.info("I'm walking, yes indeed I'm walking ...")
+
+
+# =============================================================================
+if __name__ == "__main__":
+
+ pass
+
+# =============================================================================
+
+# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 list
from .ldap import BaseLdapApplication
from .ldap import PasswordFileOptionAction
-__version__ = '0.6.4'
+__version__ = '0.6.5'
LOG = logging.getLogger(__name__)
_ = XLATOR.gettext
show_simulate_option = True
+ use_default_ldap_connection = False
+ use_multiple_ldap_connections = False
+ show_cmdline_ldap_timeout = True
+
current_userid = os.getuid()
current_user = None
try:
# -------------------------------------------------------------------------
def __init__(self, appname=None, base_dir=None):
- self.use_default_ldap_connection = False
- self.use_multiple_ldap_connections = False
- self.show_cmdline_ldap_timeout = True
-
self.init_pass_schemes()
self.current_password = None
from .xlate import XLATOR
-__version__ = '0.2.2'
+__version__ = '0.3.1'
LOG = logging.getLogger(__name__)
_ = XLATOR.gettext
setattr(namespace, self.dest, port)
+# =============================================================================
+class NonNegativeItegerOptionAction(argparse.Action):
+
+ # -------------------------------------------------------------------------
+ def __call__(self, parser, namespace, value, option_string=None):
+
+ try:
+ val = int(value)
+ except Exception as e:
+ msg = _("Got a {c} for converting {v!r} into an integer value: {e}").format(
+ c=e.__class__.__name__, v=value, e=e)
+ raise argparse.ArgumentError(self, msg)
+
+ if val < 0:
+ msg = _("The option must not be negative (given: {}).").format(value)
+ raise argparse.ArgumentError(self, msg)
+
+ setattr(namespace, self.dest, val)
+
+
+# =============================================================================
+class LimitedIntegerOptionAction(argparse.Action):
+
+ # -------------------------------------------------------------------------
+ def __init__(self, option_strings, min_val=None, max_val=None, *args, **kwargs):
+
+ self._min_val = min_val
+ self._max_val = max_val
+
+ super(LimitedIntegerOptionAction, self).__init__(
+ option_strings=option_strings, *args, **kwargs)
+
+ # -------------------------------------------------------------------------
+ def __call__(self, parser, namespace, value, option_string=None):
+
+ val = 0
+ try:
+ val = int(value)
+ except Exception as e:
+ msg = _("Got a {c} for converting {v!r} into an integer value: {e}").format(
+ c=e.__class__.__name__, v=value, e=e)
+ raise argparse.ArgumentError(self, msg)
+
+ if self._min_val is not None:
+ if val < self._min_val:
+ msg = _("The option must be greater or equal to {m} (given: {v}).").format(
+ m=self._min_val, v=val)
+ raise argparse.ArgumentError(self, msg)
+
+ if self._max_val is not None:
+ if val > self._max_val:
+ msg = _("The option must be less or equal to {m} (given: {v}).").format(
+ m=self._max_val, v=val)
+ raise argparse.ArgumentError(self, msg)
+
+ setattr(namespace, self.dest, val)
+
+
+# =============================================================================
+class LimitedFloatOptionAction(argparse.Action):
+
+ # -------------------------------------------------------------------------
+ def __init__(self, option_strings, min_val=None, max_val=None, *args, **kwargs):
+
+ self._min_val = min_val
+ self._max_val = max_val
+
+ super(LimitedFloatOptionAction, self).__init__(
+ option_strings=option_strings, *args, **kwargs)
+
+ # -------------------------------------------------------------------------
+ def __call__(self, parser, namespace, value, option_string=None):
+
+ val = 0
+ try:
+ val = float(value)
+ except Exception as e:
+ msg = _("Got a {c} for converting {v!r} into a float value: {e}").format(
+ c=e.__class__.__name__, v=value, e=e)
+ raise argparse.ArgumentError(self, msg)
+
+ if self._min_val is not None and val < self._min_val:
+ msg = _("The option must be greater or equal to {m} (given: {v}).").format(
+ m=self._min_val, v=val)
+ raise argparse.ArgumentError(self, msg)
+
+ if self._max_val is not None and val > self._max_val:
+ msg = _("The option must be less or equal to {m} (given: {v}).").format(
+ m=self._max_val, v=val)
+ raise argparse.ArgumentError(self, msg)
+
+ setattr(namespace, self.dest, val)
+
# =============================================================================
if __name__ == "__main__":
from ..xlate import XLATOR
-__version__ = '0.6.0'
+__version__ = '0.6.1'
LOG = logging.getLogger(__name__)
_ = XLATOR.gettext
if cls.re_ldap_sync_source_key.match(key):
new.sync_source = value
+ continue
msg = _("Unknown LDAP configuration key {key} found in section {sec!r}.").format(
key=key, sec=section_name)
msgstr ""
"Project-Id-Version: pp_admintools 0.9.1\n"
"Report-Msgid-Bugs-To: frank.brehm@pixelpark.com\n"
-"POT-Creation-Date: 2022-10-17 17:45+0200\n"
+"POT-Creation-Date: 2022-10-18 18:12+0200\n"
"PO-Revision-Date: 2022-09-30 16:55+0200\n"
"Last-Translator: Frank Brehm <frank.brehm@pixelpark.com>\n"
"Language: de_DE\n"
msgid "Options for {}"
msgstr "Optionen für {}"
-#: lib/pp_admintools/app/dns_deploy_zones.py:267
+#: lib/pp_admintools/app/dns_deploy_zones.py:266
msgid "Keep a backup file for each changed configuration file."
msgstr "Eine Backup-Datei für jede geänderte Konfigurationsdatei aufbewahren."
-#: lib/pp_admintools/app/dns_deploy_zones.py:272
+#: lib/pp_admintools/app/dns_deploy_zones.py:271
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/app/dns_deploy_zones.py:300
+#: lib/pp_admintools/app/dns_deploy_zones.py:299
msgid "Post init phase."
msgstr "Nach-Init-Phase."
-#: lib/pp_admintools/app/dns_deploy_zones.py:304
+#: lib/pp_admintools/app/dns_deploy_zones.py:303
msgid "My own post init phase."
msgstr "Die eigene Nach-Init-Phase."
-#: lib/pp_admintools/app/dns_deploy_zones.py:320
+#: lib/pp_admintools/app/dns_deploy_zones.py:319
msgid "Unknown time zone: {!r}."
msgstr "Unbekannte Zeitzone: {!r}."
-#: lib/pp_admintools/app/dns_deploy_zones.py:340
+#: lib/pp_admintools/app/dns_deploy_zones.py:339
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/app/dns_deploy_zones.py:342
+#: lib/pp_admintools/app/dns_deploy_zones.py:341
msgid "But in simulation mode we are continuing nevertheless."
msgstr "Aber im Simulationsmodus machen wir trotzdem weiter."
-#: lib/pp_admintools/app/dns_deploy_zones.py:352
+#: lib/pp_admintools/app/dns_deploy_zones.py:351
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/app/dns_deploy_zones.py:360
+#: lib/pp_admintools/app/dns_deploy_zones.py:359
msgid "Starting: {}"
msgstr "Starte: {}"
-#: lib/pp_admintools/app/dns_deploy_zones.py:367
+#: lib/pp_admintools/app/dns_deploy_zones.py:366
msgid "Could not occupy pidfile: {}"
msgstr "Konnte PID-Datei nicht vereinnahmen."
-#: lib/pp_admintools/app/dns_deploy_zones.py:392
+#: lib/pp_admintools/app/dns_deploy_zones.py:391
msgid "Ending: {}"
msgstr "Beendet: {}"
-#: lib/pp_admintools/app/dns_deploy_zones.py:397
+#: lib/pp_admintools/app/dns_deploy_zones.py:396
msgid "Cleaning up ..."
msgstr "Aufräumen …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:401
+#: lib/pp_admintools/app/dns_deploy_zones.py:400
msgid "Searching for {!r}."
msgstr "Suche nach {!r}."
-#: lib/pp_admintools/app/dns_deploy_zones.py:404
+#: lib/pp_admintools/app/dns_deploy_zones.py:403
msgid "Keep existing backup file {!r}."
msgstr "Behalte existierende Backup-Datei {!r}."
-#: lib/pp_admintools/app/dns_deploy_zones.py:406
+#: lib/pp_admintools/app/dns_deploy_zones.py:405
msgid "Removing {!r} ..."
msgstr "Lösche {!r} …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:412
+#: lib/pp_admintools/app/dns_deploy_zones.py:411
msgid "Error removing {p!r} - {c}: {e}"
msgstr "Fehler beim Löschen {p!r} - {c}: {e}"
-#: lib/pp_admintools/app/dns_deploy_zones.py:417
+#: lib/pp_admintools/app/dns_deploy_zones.py:416
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/app/dns_deploy_zones.py:422
+#: lib/pp_admintools/app/dns_deploy_zones.py:421
msgid "Destroying temporary directory {!r} ..."
msgstr "Zerstöre temporäres Verzeichnis {!r} …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:431
+#: lib/pp_admintools/app/dns_deploy_zones.py:430
msgid "Temporary directory: {!r}."
msgstr "Temporäres Verzeichnis: {!r}."
-#: lib/pp_admintools/app/dns_deploy_zones.py:436
+#: lib/pp_admintools/app/dns_deploy_zones.py:435
msgid "Temporary zones conf: {!r}"
msgstr "Temporäre Zonenkonfiguration: {!r}"
-#: lib/pp_admintools/app/dns_deploy_zones.py:441
+#: lib/pp_admintools/app/dns_deploy_zones.py:440
msgid "Trying to get all keys from named.conf ..."
msgstr "Versuche alle Schlüssel der named.conf zu ermitteln …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:447 lib/pp_admintools/app/dns_deploy_zones.py:801
-#: lib/pp_admintools/app/dns_deploy_zones.py:837 lib/pp_admintools/app/dns_deploy_zones.py:869
-#: lib/pp_admintools/app/dns_deploy_zones.py:904 lib/pp_admintools/app/dns_deploy_zones.py:939
+#: lib/pp_admintools/app/dns_deploy_zones.py:446 lib/pp_admintools/app/dns_deploy_zones.py:800
+#: lib/pp_admintools/app/dns_deploy_zones.py:836 lib/pp_admintools/app/dns_deploy_zones.py:868
+#: lib/pp_admintools/app/dns_deploy_zones.py:903 lib/pp_admintools/app/dns_deploy_zones.py:938
#: lib/pp_admintools/app/mail.py:326
msgid "Executing: {}"
msgstr "Führe aus: {}"
-#: lib/pp_admintools/app/dns_deploy_zones.py:453 lib/pp_admintools/app/dns_deploy_zones.py:807
-#: lib/pp_admintools/app/ldap.py:766 lib/pp_admintools/app/ldap.py:819
-#: lib/pp_admintools/app/ldap.py:872 lib/pp_admintools/app/ldap.py:1103
-#: lib/pp_admintools/app/ldap.py:1137 lib/pp_admintools/app/ldap.py:1171
-#: lib/pp_admintools/app/ldap.py:1205
+#: lib/pp_admintools/app/dns_deploy_zones.py:452 lib/pp_admintools/app/dns_deploy_zones.py:806
+#: lib/pp_admintools/app/ldap.py:787 lib/pp_admintools/app/ldap.py:840
+#: lib/pp_admintools/app/ldap.py:893 lib/pp_admintools/app/ldap.py:1124
+#: lib/pp_admintools/app/ldap.py:1158 lib/pp_admintools/app/ldap.py:1192
+#: lib/pp_admintools/app/ldap.py:1226
msgid "Result:"
msgstr "Ergebnis:"
-#: lib/pp_admintools/app/dns_deploy_zones.py:494 lib/pp_admintools/app/dns_deploy_zones.py:496
+#: lib/pp_admintools/app/dns_deploy_zones.py:493 lib/pp_admintools/app/dns_deploy_zones.py:495
msgid "Found named keys:"
msgstr "iGefundene Schlüssel von named:"
-#: lib/pp_admintools/app/dns_deploy_zones.py:496 lib/pp_admintools/app/dns_deploy_zones.py:527
+#: lib/pp_admintools/app/dns_deploy_zones.py:495 lib/pp_admintools/app/dns_deploy_zones.py:526
msgid "None"
msgstr "Keine"
-#: lib/pp_admintools/app/dns_deploy_zones.py:501
+#: lib/pp_admintools/app/dns_deploy_zones.py:500
msgid "Generating {} ..."
msgstr "Generiere {} …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:525 lib/pp_admintools/app/dns_deploy_zones.py:527
+#: lib/pp_admintools/app/dns_deploy_zones.py:524 lib/pp_admintools/app/dns_deploy_zones.py:526
msgid "Collected server configuration:"
msgstr "Ermittelte Servers-Konfiguration:"
-#: lib/pp_admintools/app/dns_deploy_zones.py:548
+#: lib/pp_admintools/app/dns_deploy_zones.py:547
msgid "Generated file {!r}:"
msgstr "Generierte Datei {!r}:"
-#: lib/pp_admintools/app/dns_deploy_zones.py:564
+#: lib/pp_admintools/app/dns_deploy_zones.py:563
msgid "Pure local zone {!r} will not be considered."
msgstr "Die rein lokale Zone {!r} wird nich mit beachtet."
-#: lib/pp_admintools/app/dns_deploy_zones.py:596
+#: lib/pp_admintools/app/dns_deploy_zones.py:595
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/app/dns_deploy_zones.py:626
+#: lib/pp_admintools/app/dns_deploy_zones.py:625
msgid "Got IPv4 tuples: {}"
msgstr "Habe IPv4-Tupels erhalten: {}"
-#: lib/pp_admintools/app/dns_deploy_zones.py:650
+#: lib/pp_admintools/app/dns_deploy_zones.py:649
msgid "Got IPv6 tokens: {}"
msgstr "Habe IPv6-Tupels erhalten: {}"
-#: lib/pp_admintools/app/dns_deploy_zones.py:657
+#: lib/pp_admintools/app/dns_deploy_zones.py:656
msgid "Comparing generated files with existing ones."
msgstr "Vergleiche die generierten Dateien mit den existierenden."
-#: lib/pp_admintools/app/dns_deploy_zones.py:664
+#: lib/pp_admintools/app/dns_deploy_zones.py:663
msgid "Files to replace:"
msgstr "Dateien, die ersetzt werden:"
-#: lib/pp_admintools/app/dns_deploy_zones.py:670
+#: lib/pp_admintools/app/dns_deploy_zones.py:669
msgid "Source file not defined."
msgstr "Die Quell-Datei ist nicht definiert."
-#: lib/pp_admintools/app/dns_deploy_zones.py:672
+#: lib/pp_admintools/app/dns_deploy_zones.py:671
msgid "Target file not defined."
msgstr "Die Ziel-Datei ist nicht definiert."
-#: lib/pp_admintools/app/dns_deploy_zones.py:674
+#: lib/pp_admintools/app/dns_deploy_zones.py:673
msgid "Comparing {one!r} with {two!r} ..."
msgstr "Vergleiche {one!r} mit {two!r} …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:678 lib/pp_admintools/app/dns_deploy_zones.py:687
+#: lib/pp_admintools/app/dns_deploy_zones.py:677 lib/pp_admintools/app/dns_deploy_zones.py:686
msgid "{what} {f!r} does not exists."
msgstr "Die {what} {f!r} existiert nicht."
-#: lib/pp_admintools/app/dns_deploy_zones.py:679 lib/pp_admintools/app/dns_deploy_zones.py:683
+#: lib/pp_admintools/app/dns_deploy_zones.py:678 lib/pp_admintools/app/dns_deploy_zones.py:682
msgid "Source file"
msgstr "Quell-Datei"
-#: lib/pp_admintools/app/dns_deploy_zones.py:682 lib/pp_admintools/app/dns_deploy_zones.py:692
+#: lib/pp_admintools/app/dns_deploy_zones.py:681 lib/pp_admintools/app/dns_deploy_zones.py:691
msgid "{what} {f!r} is not a regular file."
msgstr "Die {what} {f!r} ist keine reguläre Datei."
-#: lib/pp_admintools/app/dns_deploy_zones.py:688 lib/pp_admintools/app/dns_deploy_zones.py:693
+#: lib/pp_admintools/app/dns_deploy_zones.py:687 lib/pp_admintools/app/dns_deploy_zones.py:692
msgid "Target file"
msgstr "Ziel-Datei"
-#: lib/pp_admintools/app/dns_deploy_zones.py:699 lib/pp_admintools/app/dns_deploy_zones.py:716
+#: lib/pp_admintools/app/dns_deploy_zones.py:698 lib/pp_admintools/app/dns_deploy_zones.py:715
msgid "Reading {!r} ..."
msgstr "Lese {!r} …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:709 lib/pp_admintools/app/dns_deploy_zones.py:726
+#: lib/pp_admintools/app/dns_deploy_zones.py:708 lib/pp_admintools/app/dns_deploy_zones.py:725
msgid "Cleaned version of {!r}:"
msgstr "Bereinigte Version von {!r}:"
-#: lib/pp_admintools/app/dns_deploy_zones.py:731
+#: lib/pp_admintools/app/dns_deploy_zones.py:730
msgid ""
"Source file {sf!r} has different number essential lines ({sl}) than the target file {tf!r} ({tl}"
" lines)."
"Die Quelldatei {sf!r} besitzt eine andere Anzahl essentieller Zeilen ({sl}) als die Zieldatei "
"{tf!r} ({tl} lines)."
-#: lib/pp_admintools/app/dns_deploy_zones.py:740
+#: lib/pp_admintools/app/dns_deploy_zones.py:739
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/app/dns_deploy_zones.py:752
+#: lib/pp_admintools/app/dns_deploy_zones.py:751
msgid "No replacement of any config files necessary."
msgstr "Es muss keine Datei ersetzt werden."
-#: lib/pp_admintools/app/dns_deploy_zones.py:755
+#: lib/pp_admintools/app/dns_deploy_zones.py:754
msgid "Start replacing of config files ..."
msgstr "Starting Ersatz von Konfigurations-Dateien …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:763 lib/pp_admintools/app/dns_deploy_zones.py:773
+#: lib/pp_admintools/app/dns_deploy_zones.py:762 lib/pp_admintools/app/dns_deploy_zones.py:772
msgid "Copying {frm!r} => {to!r} ..."
msgstr "Kopieren {frm!r} => {to!r} …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:769
+#: lib/pp_admintools/app/dns_deploy_zones.py:768
msgid "All backuped config files:"
msgstr "Alle gesicherten Konfigurations-Dateien:"
-#: lib/pp_admintools/app/dns_deploy_zones.py:781
+#: lib/pp_admintools/app/dns_deploy_zones.py:780
msgid "Restoring of original config files because of an exception."
msgstr "Wiederherstellung der Original-Konfigurations-Dateien wegen eines Fehlers."
-#: lib/pp_admintools/app/dns_deploy_zones.py:785
+#: lib/pp_admintools/app/dns_deploy_zones.py:784
msgid "Moving {frm!r} => {to!r} ..."
msgstr "Verschieben {frm!r} => {to!r} …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:791
+#: lib/pp_admintools/app/dns_deploy_zones.py:790
msgid "Could not find backup file {!r}."
msgstr "Konnte Backup-Datei {!r} nicht finden."
-#: lib/pp_admintools/app/dns_deploy_zones.py:796
+#: lib/pp_admintools/app/dns_deploy_zones.py:795
msgid "Checking syntax correctness of named.conf ..."
msgstr "Überprüfe synaktische Richtigkeit der named.conf …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:817
+#: lib/pp_admintools/app/dns_deploy_zones.py:816
msgid "Reload or restart of named is not necessary."
msgstr "Ein Reload oder Neustart von named ist nicht notwendig."
-#: lib/pp_admintools/app/dns_deploy_zones.py:822
+#: lib/pp_admintools/app/dns_deploy_zones.py:821
msgid "Named is not running, please start it manually."
msgstr "Named läuft nicht, bitte manuell starten."
-#: lib/pp_admintools/app/dns_deploy_zones.py:833
+#: lib/pp_admintools/app/dns_deploy_zones.py:832
msgid "Checking, whether named is running ..."
msgstr "Überprüfen, ob named läuft …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:851 lib/pp_admintools/app/dns_deploy_zones.py:886
-#: lib/pp_admintools/app/dns_deploy_zones.py:921 lib/pp_admintools/app/dns_deploy_zones.py:956
+#: lib/pp_admintools/app/dns_deploy_zones.py:850 lib/pp_admintools/app/dns_deploy_zones.py:885
+#: lib/pp_admintools/app/dns_deploy_zones.py:920 lib/pp_admintools/app/dns_deploy_zones.py:955
msgid "Return value: {!r}"
msgstr "Rückgabewert: {!r}"
-#: lib/pp_admintools/app/dns_deploy_zones.py:853 lib/pp_admintools/app/dns_deploy_zones.py:855
-#: lib/pp_admintools/app/dns_deploy_zones.py:888 lib/pp_admintools/app/dns_deploy_zones.py:890
-#: lib/pp_admintools/app/dns_deploy_zones.py:923 lib/pp_admintools/app/dns_deploy_zones.py:925
-#: lib/pp_admintools/app/dns_deploy_zones.py:958 lib/pp_admintools/app/dns_deploy_zones.py:960
+#: lib/pp_admintools/app/dns_deploy_zones.py:852 lib/pp_admintools/app/dns_deploy_zones.py:854
+#: lib/pp_admintools/app/dns_deploy_zones.py:887 lib/pp_admintools/app/dns_deploy_zones.py:889
+#: lib/pp_admintools/app/dns_deploy_zones.py:922 lib/pp_admintools/app/dns_deploy_zones.py:924
+#: lib/pp_admintools/app/dns_deploy_zones.py:957 lib/pp_admintools/app/dns_deploy_zones.py:959
msgid "Output on {}"
msgstr "Ausgabe an {}"
-#: lib/pp_admintools/app/dns_deploy_zones.py:865
+#: lib/pp_admintools/app/dns_deploy_zones.py:864
msgid "Starting {} ..."
msgstr "Starten {} …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:900
+#: lib/pp_admintools/app/dns_deploy_zones.py:899
msgid "Restarting {} ..."
msgstr "Neu starten {} …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:935
+#: lib/pp_admintools/app/dns_deploy_zones.py:934
msgid "Reloading {} ..."
msgstr "Reload {} …"
-#: lib/pp_admintools/app/ldap.py:108 lib/pp_admintools/app/ldap.py:211
+#: lib/pp_admintools/app/ldap.py:109 lib/pp_admintools/app/ldap.py:213
msgid "The path {!r} must be an absolute path."
msgstr "Der Pfad {!r} muss ein absoluter Pfad sein."
-#: lib/pp_admintools/app/ldap.py:114 lib/pp_admintools/app/ldap.py:215
-#: lib/pp_admintools/app/ldap.py:1219
+#: lib/pp_admintools/app/ldap.py:115 lib/pp_admintools/app/ldap.py:217
+#: lib/pp_admintools/app/ldap.py:1240
msgid "The file {!r} does not exists."
msgstr "Die Datei {!r} existiert nicht."
-#: lib/pp_admintools/app/ldap.py:118 lib/pp_admintools/app/ldap.py:219
-#: lib/pp_admintools/app/ldap.py:1224
+#: lib/pp_admintools/app/ldap.py:119 lib/pp_admintools/app/ldap.py:221
+#: lib/pp_admintools/app/ldap.py:1245
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/app/ldap.py:122 lib/pp_admintools/app/ldap.py:223
-#: lib/pp_admintools/app/ldap.py:1229
+#: lib/pp_admintools/app/ldap.py:123 lib/pp_admintools/app/ldap.py:225
+#: lib/pp_admintools/app/ldap.py:1250
msgid "The given file {!r} is not readable."
msgstr "Die angegebene Datei {} ist nicht lesbar."
-#: lib/pp_admintools/app/ldap.py:143
+#: lib/pp_admintools/app/ldap.py:144
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/app/ldap.py:148
+#: lib/pp_admintools/app/ldap.py:149
msgid "Wrong port number {!r}:"
msgstr "Ungültige Portnummer {!r}."
-#: lib/pp_admintools/app/ldap.py:256
+#: lib/pp_admintools/app/ldap.py:258
msgid "LDAP options"
msgstr "LDAP-Optionen"
-#: lib/pp_admintools/app/ldap.py:258
+#: lib/pp_admintools/app/ldap.py:260
msgid "Options for the default LDAP connection"
msgstr "Optionen für die Vorgabe-LDAP-Verbindung"
-#: lib/pp_admintools/app/ldap.py:260
+#: lib/pp_admintools/app/ldap.py:262
msgid "Options fo LDAP connections"
msgstr "Optionen für die LDAP-Verbindungen"
-#: lib/pp_admintools/app/ldap.py:267 lib/pp_admintools/app/remove_ldap_user.py:280
-#: lib/pp_admintools/app/set_ldap_password.py:579
+#: lib/pp_admintools/app/ldap.py:269 lib/pp_admintools/app/remove_ldap_user.py:279
+#: lib/pp_admintools/app/set_ldap_password.py:583
msgid "No"
msgstr "Nein"
-#: lib/pp_admintools/app/ldap.py:269
+#: lib/pp_admintools/app/ldap.py:271
msgid "Yes"
msgstr "Ja"
-#: lib/pp_admintools/app/ldap.py:275
+#: lib/pp_admintools/app/ldap.py:277
msgid "HOST"
msgstr "HOST"
-#: lib/pp_admintools/app/ldap.py:276
+#: lib/pp_admintools/app/ldap.py:278
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/app/ldap.py:283
+#: lib/pp_admintools/app/ldap.py:285
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/app/ldap.py:288 lib/pp_admintools/app/mail.py:261
-#: lib/pp_admintools/app/pdns.py:274
+#: lib/pp_admintools/app/ldap.py:290 lib/pp_admintools/app/mail.py:261
+#: lib/pp_admintools/app/pdns.py:272
msgid "PORT"
msgstr "PORT"
-#: lib/pp_admintools/app/ldap.py:290
+#: lib/pp_admintools/app/ldap.py:292
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/app/ldap.py:296
+#: lib/pp_admintools/app/ldap.py:298
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/app/ldap.py:303
+#: lib/pp_admintools/app/ldap.py:305
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/app/ldap.py:311 lib/pp_admintools/app/set_ldap_password.py:204
+#: lib/pp_admintools/app/ldap.py:313 lib/pp_admintools/app/set_ldap_password.py:204
#: lib/pp_admintools/app/set_ldap_password.py:205 lib/pp_admintools/app/set_ldap_password.py:222
#: lib/pp_admintools/app/set_ldap_password.py:225
msgid "PASSWORD"
msgstr "PASSWORT"
-#: lib/pp_admintools/app/ldap.py:312
+#: lib/pp_admintools/app/ldap.py:314
msgid "Use PASSWORD as the password for simple LDAP authentication."
msgstr "Verwende PASSWORT als Passwort für die einfache Authentifizierung."
-#: lib/pp_admintools/app/ldap.py:317
+#: lib/pp_admintools/app/ldap.py:319
msgid ""
"Prompt for simple LDAP authentication. This is used instead of specifying the password on the "
"command line."
"Nachfrage nach dem Passwort für eine einfache LDAP-Authentifizierung. Dies wird anstelle der "
"Angabe des Passwortes an der Kommandozeile verwendet."
-#: lib/pp_admintools/app/ldap.py:323 lib/pp_admintools/app/set_ldap_password.py:216
+#: lib/pp_admintools/app/ldap.py:325 lib/pp_admintools/app/set_ldap_password.py:216
#: lib/pp_admintools/app/set_ldap_password.py:218
msgid "PASSWORD_FILE"
msgstr "PASSWORT_DATEI"
-#: lib/pp_admintools/app/ldap.py:325
+#: lib/pp_admintools/app/ldap.py:327
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/app/ldap.py:333 lib/pp_admintools/app/pdns.py:248
+#: lib/pp_admintools/app/ldap.py:335 lib/pp_admintools/app/pdns.py:246
msgid "INSTANCE"
msgstr "INSTANZ"
-#: lib/pp_admintools/app/ldap.py:336
-msgid ""
-"The LDAP instance (LDAP cluster) from configuration, where to execute this script. If not given,"
-" then the instance {!r} will be used."
+#: lib/pp_admintools/app/ldap.py:338
+msgid "If not given, then the instance {!r} will be used."
+msgstr "Wenn nicht angegeben, dann wird die Instanz {!r} verwendet."
+
+#: lib/pp_admintools/app/ldap.py:341
+msgid "The LDAP instance (LDAP cluster) from configuration, where to execute this script."
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."
+"werden soll."
-#: lib/pp_admintools/app/ldap.py:339
+#: lib/pp_admintools/app/ldap.py:345
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."
+"are shown, and the application is exiting."
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."
+"diesem Fall werden alle LDAP-Instanzen ausgegeben, und das Skript beendet sich."
-#: lib/pp_admintools/app/ldap.py:358
+#: lib/pp_admintools/app/ldap.py:371 lib/pp_admintools/app/mirror_ldap.py:89
msgid "SECONDS"
msgstr "SEKUNDEN"
-#: lib/pp_admintools/app/ldap.py:360
+#: lib/pp_admintools/app/ldap.py:373
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/app/ldap.py:394
+#: lib/pp_admintools/app/ldap.py:407
msgid "Checking given instances."
msgstr "Überprüfe die übergebenen Instanzen."
-#: lib/pp_admintools/app/ldap.py:398
+#: lib/pp_admintools/app/ldap.py:411
msgid "Given insts:"
msgstr "Übergebene Instanzen:"
-#: lib/pp_admintools/app/ldap.py:449
+#: lib/pp_admintools/app/ldap.py:462
msgid "Configured LDAP instances:"
msgstr "Konfigurierte LDAP-Instanzen:"
-#: lib/pp_admintools/app/ldap.py:466
+#: lib/pp_admintools/app/ldap.py:479
msgid "Verifying given instances ..."
msgstr "Überprüfene Instanzen …"
-#: lib/pp_admintools/app/ldap.py:477
+#: lib/pp_admintools/app/ldap.py:492
msgid "Used filter:"
msgstr "Verwendeter Filter:"
-#: lib/pp_admintools/app/ldap.py:507 lib/pp_admintools/app/remove_ldap_user.py:181
-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:526
+msgid "LDAP instance {!r} not found in configuration or is not usable."
+msgstr "Die LDAP-Instanz {!r} wurde nicht in der Konfiguration gefunden oder ist nicht verwendbar."
-#: lib/pp_admintools/app/ldap.py:515
+#: lib/pp_admintools/app/ldap.py:536
msgid "LDAP instances to use:"
msgstr "Verwendete LDAP-Instanzen:"
-#: lib/pp_admintools/app/ldap.py:564
+#: lib/pp_admintools/app/ldap.py:585
msgid "Preparations ..."
msgstr "Vorbereitungen …"
-#: lib/pp_admintools/app/ldap.py:567
+#: lib/pp_admintools/app/ldap.py:588
msgid "Open all necessary LDAP connections ..."
msgstr "Öffne alle notwendigen LDAP-Verbindungen …"
-#: lib/pp_admintools/app/ldap.py:581
+#: lib/pp_admintools/app/ldap.py:602
msgid "Password of user {usr} on LDAP instance {inst}:"
msgstr "Passwort des Nutzers {usr} der LDAP-Instanz {inst}:"
-#: lib/pp_admintools/app/ldap.py:590
+#: lib/pp_admintools/app/ldap.py:611
msgid "Info about LDAP server {}:"
msgstr "Informationen zu LDAP-Server {}:"
-#: lib/pp_admintools/app/ldap.py:600
+#: lib/pp_admintools/app/ldap.py:621
msgid "Trying to get LDAP server object for {} ..."
msgstr "Versuche ein LDAP-Server-Objekt für {} zu bekommen …"
-#: lib/pp_admintools/app/ldap.py:616
+#: lib/pp_admintools/app/ldap.py:637
msgid "Connect options to server {!r}:"
msgstr "Verbindungs-Optionen zu Server {!r}:"
-#: lib/pp_admintools/app/ldap.py:623
+#: lib/pp_admintools/app/ldap.py:644
msgid "LDAP server {s}: {re}"
msgstr "LDAP-Server {s}: {re}"
-#: lib/pp_admintools/app/ldap.py:637
+#: lib/pp_admintools/app/ldap.py:658
msgid "Connecting to LDAP server {url} as {dn!r} ..."
msgstr "Verbinde mit LDAP-Server {url} als {dn!r} …"
-#: lib/pp_admintools/app/ldap.py:649
+#: lib/pp_admintools/app/ldap.py:670
msgid "Finishing ..."
msgstr "Beende …"
-#: lib/pp_admintools/app/ldap.py:658
+#: lib/pp_admintools/app/ldap.py:679
msgid "Disconnecting from all remaining LDAP instances ..."
msgstr "Trenne Verbindung zu allen verbleibenden LDAP-Instanzen …"
-#: lib/pp_admintools/app/ldap.py:671
+#: lib/pp_admintools/app/ldap.py:692
msgid "Unbinding from LDAP server {!r} ..."
msgstr "Trenne Bindung zu LDAP-Server {!r} …"
-#: lib/pp_admintools/app/ldap.py:678
+#: lib/pp_admintools/app/ldap.py:699
msgid "Disconnecting from LDAP server {!r} ..."
msgstr "Trenne Verbindung zu LDAP-Server {!r} …"
-#: lib/pp_admintools/app/ldap.py:687
+#: lib/pp_admintools/app/ldap.py:708
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:692
+#: lib/pp_admintools/app/ldap.py:713
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:699
+#: lib/pp_admintools/app/ldap.py:720
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:706
+#: lib/pp_admintools/app/ldap.py:727
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:715 lib/pp_admintools/app/remove_ldap_user.py:300
+#: lib/pp_admintools/app/ldap.py:736 lib/pp_admintools/app/remove_ldap_user.py:299
msgid "Empty user given."
msgstr "Leere Nutzername übergeben."
-#: lib/pp_admintools/app/ldap.py:718
+#: lib/pp_admintools/app/ldap.py:739
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:748 lib/pp_admintools/app/ldap.py:801
-#: lib/pp_admintools/app/ldap.py:854 lib/pp_admintools/app/ldap.py:1088
-#: lib/pp_admintools/app/ldap.py:1122 lib/pp_admintools/app/ldap.py:1156
-#: lib/pp_admintools/app/ldap.py:1190
+#: lib/pp_admintools/app/ldap.py:769 lib/pp_admintools/app/ldap.py:822
+#: lib/pp_admintools/app/ldap.py:875 lib/pp_admintools/app/ldap.py:1109
+#: lib/pp_admintools/app/ldap.py:1143 lib/pp_admintools/app/ldap.py:1177
+#: lib/pp_admintools/app/ldap.py:1211
msgid "Searching in {uri}/{bdn} with filter: {fltr}"
msgstr "Suche in {uri}/{bdn} mit dem Filter: {fltr}"
-#: lib/pp_admintools/app/ldap.py:759
+#: lib/pp_admintools/app/ldap.py:780
msgid "Result of searching for mail address {m!r}:"
msgstr "Ergebnis der Suche nach der Mailadresse {m!r}:"
-#: lib/pp_admintools/app/ldap.py:763 lib/pp_admintools/app/ldap.py:816
-#: lib/pp_admintools/app/ldap.py:869 lib/pp_admintools/app/ldap.py:957
-#: lib/pp_admintools/app/ldap.py:1100 lib/pp_admintools/app/ldap.py:1134
-#: lib/pp_admintools/app/ldap.py:1168 lib/pp_admintools/app/ldap.py:1202
+#: lib/pp_admintools/app/ldap.py:784 lib/pp_admintools/app/ldap.py:837
+#: lib/pp_admintools/app/ldap.py:890 lib/pp_admintools/app/ldap.py:978
+#: lib/pp_admintools/app/ldap.py:1121 lib/pp_admintools/app/ldap.py:1155
+#: lib/pp_admintools/app/ldap.py:1189 lib/pp_admintools/app/ldap.py:1223
msgid "Got a response entry:"
msgstr "Erhaltener Antwort-Eintrag:"
-#: lib/pp_admintools/app/ldap.py:770
+#: lib/pp_admintools/app/ldap.py:791
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:812
+#: lib/pp_admintools/app/ldap.py:833
msgid "Result of searching for uid {u!r}:"
msgstr "Ergebnis der Suche nach UID {u!r}:"
-#: lib/pp_admintools/app/ldap.py:823
+#: lib/pp_admintools/app/ldap.py:844
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:865
+#: lib/pp_admintools/app/ldap.py:886
msgid "Result of searching for CN {cn!r}:"
msgstr "Ergebnis der Suche nach CN {cn!r}:"
-#: lib/pp_admintools/app/ldap.py:876
+#: lib/pp_admintools/app/ldap.py:897
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:893 lib/pp_admintools/app/set_ldap_password.py:504
+#: lib/pp_admintools/app/ldap.py:914 lib/pp_admintools/app/set_ldap_password.py:508
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:911
+#: lib/pp_admintools/app/ldap.py:932
msgid "ObjectClasses of {dn!r}:"
msgstr "ObjectClasses von {dn!r}:"
-#: lib/pp_admintools/app/ldap.py:921
+#: lib/pp_admintools/app/ldap.py:942
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:943
+#: lib/pp_admintools/app/ldap.py:964
msgid "Searching DN {dn!r} in {uri}."
msgstr "Suche DN {dn!r} in {uri}."
-#: lib/pp_admintools/app/ldap.py:953
+#: lib/pp_admintools/app/ldap.py:974
msgid "Result of searching for DN {dn!r}:"
msgstr "Ergebnis der Suche nach dem DN {dn!r}:"
-#: lib/pp_admintools/app/ldap.py:961
+#: lib/pp_admintools/app/ldap.py:982
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:1002
+#: lib/pp_admintools/app/ldap.py:1023
msgid "Applying changes on {uri} to DN {dn!r}:"
msgstr "Wende Änderungen in {uri} an DN {dn!r} an:"
-#: lib/pp_admintools/app/ldap.py:1007
+#: lib/pp_admintools/app/ldap.py:1028
msgid "Simulation mode - changes are not applied."
msgstr "Simulationsmodus - hier wird jetzt nichts geändert."
-#: lib/pp_admintools/app/ldap.py:1013
+#: lib/pp_admintools/app/ldap.py:1034
msgid "Modification NOT successfull - {c}: {e}"
msgstr "Die Änderung war NICHT erfolgreich - {c}: {e}"
-#: lib/pp_admintools/app/ldap.py:1014 lib/pp_admintools/app/remove_ldap_user.py:427
-#: lib/pp_admintools/app/remove_ldap_user.py:454 lib/pp_admintools/app/remove_ldap_user.py:481
-#: lib/pp_admintools/app/remove_ldap_user.py:512 lib/pp_admintools/app/remove_ldap_user.py:543
+#: lib/pp_admintools/app/ldap.py:1035 lib/pp_admintools/app/remove_ldap_user.py:426
+#: lib/pp_admintools/app/remove_ldap_user.py:453 lib/pp_admintools/app/remove_ldap_user.py:480
+#: lib/pp_admintools/app/remove_ldap_user.py:511 lib/pp_admintools/app/remove_ldap_user.py:542
#: lib/pp_admintools/app/set_ldap_password.py:612
msgid "Changes:"
msgstr "Änderungen:"
-#: lib/pp_admintools/app/ldap.py:1026
+#: lib/pp_admintools/app/ldap.py:1047
msgid "Modification status: {!r}."
msgstr "Änderungsstatus: {!r}."
-#: lib/pp_admintools/app/ldap.py:1028
+#: lib/pp_admintools/app/ldap.py:1049
msgid "Result of modifying:"
msgstr "Ergebnis der Änderung:"
-#: lib/pp_admintools/app/ldap.py:1031
+#: lib/pp_admintools/app/ldap.py:1052
msgid "Modification NOT successful: {desc} - {msg}"
msgstr "Die Änderung war NICHT erfolgreich - {desc}: {msg}"
-#: lib/pp_admintools/app/ldap.py:1035
+#: lib/pp_admintools/app/ldap.py:1056
msgid "Modification successful."
msgstr "Die Änderung war erfolgreich."
-#: lib/pp_admintools/app/ldap.py:1045
+#: lib/pp_admintools/app/ldap.py:1066
msgid "Deleting LDAP entry {dn!r} on {uri} ..."
msgstr "Lösche LDAP-Eintrag {dn!r} in {uri} …"
-#: lib/pp_admintools/app/ldap.py:1050
+#: lib/pp_admintools/app/ldap.py:1071
msgid "Simulation mode - deletion will not be executed."
msgstr "Simulationsmodus - hier wird jetzt nichts gelöscht."
-#: lib/pp_admintools/app/ldap.py:1056
+#: lib/pp_admintools/app/ldap.py:1077
msgid "Deletion NOT successfull - {c}: {e}"
msgstr "Die Löschung war NICHT erfolgreich - {c}: {e}"
-#: lib/pp_admintools/app/ldap.py:1060
+#: lib/pp_admintools/app/ldap.py:1081
msgid "Deletion status: {!r}."
msgstr "Löschstatus: {!r}"
-#: lib/pp_admintools/app/ldap.py:1062
+#: lib/pp_admintools/app/ldap.py:1083
msgid "Result of deletion:"
msgstr "Ergebnis der Löschung:"
-#: lib/pp_admintools/app/ldap.py:1065
+#: lib/pp_admintools/app/ldap.py:1086
msgid "Deletion NOT successful: {desc} - {msg}"
msgstr "Die Löschung war NICHT erfolgreich - {desc}: {msg}"
-#: lib/pp_admintools/app/ldap.py:1069
+#: lib/pp_admintools/app/ldap.py:1090
msgid "Deletion successful."
msgstr "Die Löschung war erfolgreich."
-#: lib/pp_admintools/app/ldap.py:1216
+#: lib/pp_admintools/app/ldap.py:1237
msgid "Reading password file {!r} ..."
msgstr "Lese Passwortdatei {!r} …"
msgid "Did not found sendmail executable."
msgstr "Kein ausführbares Programm 'sendmail' gefunden."
-#: lib/pp_admintools/app/pdns.py:100 lib/pp_admintools/app/pdns.py:184
+#: lib/pp_admintools/app/mirror_ldap.py:70
+msgid ""
+"Mirror the content of a complete LDAP instance (server or cluster) to another instance. This "
+"will be done first by clearing the target instance, then copying structural entries from the "
+"source to the target instance and then copying all other entries. During this some "
+"transformations are done, like substituting the content of some entry attributes by another "
+"values."
+msgstr ""
+"Spiegelt den kompletten Inhalt einer LDAP-Instanz (Server oder Cluster) in eine andere Instanz. "
+"Das wird getan, indem zuerst die Zileinstanz komplett geleert wird, dann alle strukturellen "
+"Einträge von der Quell- in die Zielinstanz kopiert werden, und danach alle anderen. Während "
+"dessen werden einige Transformationen ausgeführt, wie die Erssetzung der Inhalte bestimmter "
+"Attribute durch andere Werte."
+
+#: lib/pp_admintools/app/mirror_ldap.py:86
+msgid "Miroring options"
+msgstr "Spiegelungs--Optionen"
+
+#: lib/pp_admintools/app/mirror_ldap.py:91
+msgid ""
+"Number of seconds to wait after each write operation. Given as a float value, and if set to "
+"zero, there is no waiting after a write. (default: {:.1f})"
+msgstr ""
+"Anzahl der Sekunden, die nach jeder Schreiboperation gewartet wertden. Wird als Float-Wert "
+"angegeben, und wenn sie auf Null gesetzt werden, erfolgt kein Warten nach dem Schreiben. "
+"(Vorgabe: {:.1f})"
+
+#: lib/pp_admintools/app/mirror_ldap.py:98
+msgid "NUMBER"
+msgstr "ANZAHL"
+
+#: lib/pp_admintools/app/mirror_ldap.py:100
+msgid "Limiting the mirroring to the first NUMBER entries. This option is valid only in simulation mode."
+msgstr ""
+"Begrenzung der Spiegelung auf die erste ANZAHL Einträge. Diese Option ist nur im Simulations-"
+"Modus gültig."
+
+#: lib/pp_admintools/app/mirror_ldap.py:107
+msgid "Mirror only structural entries (entries with childs)."
+msgstr "Nur strukturelle Einträge (Einträge mit Child-Einträgen) spiegeln."
+
+#: 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/app/pdns.py:114
+#: lib/pp_admintools/app/pdns.py:113
msgid "Invalid API key {!r} given."
msgstr "Ungültiger API-Schlüssel {!r} angegeben."
-#: lib/pp_admintools/app/pdns.py:126
+#: lib/pp_admintools/app/pdns.py:125
msgid "Invalid API host {!r} given."
msgstr "Ungültiger API-Host {!r} angegeben."
-#: lib/pp_admintools/app/pdns.py:139
+#: lib/pp_admintools/app/pdns.py:138
msgid "Invalid API port {!r} given."
msgstr "Ungültiger API-Port {!r} angegeben."
-#: lib/pp_admintools/app/pdns.py:151
+#: lib/pp_admintools/app/pdns.py:150
msgid "Invalid API server name {!r} given."
msgstr "Ungültiger API-Servername {!r} angegeben."
-#: lib/pp_admintools/app/pdns.py:169 lib/pp_admintools/app/pdns.py:172
+#: 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/app/pdns.py:180
+#: lib/pp_admintools/app/pdns.py:179
msgid "Evaluating instance {!r} ..."
msgstr "Ermittle Instanz {!r} …"
-#: lib/pp_admintools/app/pdns.py:188
+#: 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/app/pdns.py:239
+#: lib/pp_admintools/app/pdns.py:238
msgid "PowerDNS API options"
msgstr "PowerDNS API-Optionen"
-#: lib/pp_admintools/app/pdns.py:249
+#: lib/pp_admintools/app/pdns.py:247
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/app/pdns.py:257 lib/pp_admintools/app/pdns.py:263
-#: lib/pp_admintools/app/pdns.py:269
+#: lib/pp_admintools/app/pdns.py:255 lib/pp_admintools/app/pdns.py:261
+#: lib/pp_admintools/app/pdns.py:267
msgid "Using the {!r} PowerDNS instance."
msgstr "Verwenden der {!r}-PowerDNS-Instanz."
-#: lib/pp_admintools/app/pdns.py:277
+#: lib/pp_admintools/app/pdns.py:275
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/app/pdns.py:302
+#: lib/pp_admintools/app/pdns.py:300
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/app/pdns.py:309
+#: lib/pp_admintools/app/pdns.py:307
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/app/pdns.py:332 lib/pp_admintools/app/pdns.py:368
-#: lib/pp_admintools/app/pdns.py:395
+#: lib/pp_admintools/app/pdns.py:330 lib/pp_admintools/app/pdns.py:366
+#: lib/pp_admintools/app/pdns.py:393
msgid "Executing {} ..."
msgstr "Ausführung von {} …"
-#: lib/pp_admintools/app/pdns.py:370
+#: lib/pp_admintools/app/pdns.py:368
msgid "Setting Loglevel of the requests module to {}."
msgstr "Setze das Loglevel des Requests-Moduls auf {}."
-#: lib/pp_admintools/app/pdns.py:384
+#: lib/pp_admintools/app/pdns.py:382
msgid "Executing nothing ..."
msgstr "Führe nicht aus …"
-#: lib/pp_admintools/app/pdns.py:404 lib/pp_admintools/app/pdns.py:426
-#: lib/pp_admintools/app/pdns.py:437 lib/pp_admintools/app/pdns.py:447
+#: lib/pp_admintools/app/pdns.py:402 lib/pp_admintools/app/pdns.py:424
+#: lib/pp_admintools/app/pdns.py:435 lib/pp_admintools/app/pdns.py:445
msgid "The PDNS server object does not exists."
msgstr "Das PDNS-Server-Objekt existiert nicht."
-#: lib/pp_admintools/app/pdns.py:406 lib/pp_admintools/app/pdns.py:428
-#: lib/pp_admintools/app/pdns.py:439 lib/pp_admintools/app/pdns.py:449
+#: lib/pp_admintools/app/pdns.py:404 lib/pp_admintools/app/pdns.py:426
+#: lib/pp_admintools/app/pdns.py:437 lib/pp_admintools/app/pdns.py:447
msgid "The PDNS server object is not initialized."
msgstr "Das PDNS-Server-Objekt ist nicht initialisiert."
-#: lib/pp_admintools/app/pdns.py:457
+#: lib/pp_admintools/app/pdns.py:455
msgid "Trying to get complete information about zone {!r} ..."
msgstr "Versuch die kompletten Informationen über die Zone {!r} zu bekommen …"
-#: lib/pp_admintools/app/pdns.py:463
+#: lib/pp_admintools/app/pdns.py:461
msgid "The given zone {} was not found."
msgstr "Die angegebene Zone {} wurde nicht gefunden."
-#: lib/pp_admintools/app/pdns.py:466
+#: lib/pp_admintools/app/pdns.py:464
msgid "Got a response:"
msgstr "Erhaltene Antwort:"
-#: lib/pp_admintools/app/pdns.py:471
+#: lib/pp_admintools/app/pdns.py:469
msgid "Zone object:"
msgstr "Zonen-Objekt:"
-#: lib/pp_admintools/app/remove_ldap_user.py:70
+#: 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 "
"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:115
+#: lib/pp_admintools/app/remove_ldap_user.py:114
msgid "Removing options"
msgstr "Lösch-Optionen"
-#: lib/pp_admintools/app/remove_ldap_user.py:118
+#: lib/pp_admintools/app/remove_ldap_user.py:117
msgid "This is the default."
msgstr "Dieses ist die Vorgabe."
-#: lib/pp_admintools/app/remove_ldap_user.py:119
+#: lib/pp_admintools/app/remove_ldap_user.py:118
msgid "This is mutually exclusive to {!r}."
msgstr "Das schließt sich mit {!r} gegenseitig aus."
-#: lib/pp_admintools/app/remove_ldap_user.py:121
+#: lib/pp_admintools/app/remove_ldap_user.py:120
msgid "Deactivating the user instead of removing it."
msgstr "Deaktivieren der Nutzer anstatt Löschung."
-#: lib/pp_admintools/app/remove_ldap_user.py:128
+#: lib/pp_admintools/app/remove_ldap_user.py:127
msgid "Removing the user from LDAP."
msgstr "Löschen der übergebenen Nutzer im LDAP."
-#: lib/pp_admintools/app/remove_ldap_user.py:136 lib/pp_admintools/app/set_ldap_password.py:269
-#: lib/pp_admintools/app/set_ldap_password.py:272
+#: lib/pp_admintools/app/remove_ldap_user.py:135 lib/pp_admintools/app/set_ldap_password.py:273
+#: lib/pp_admintools/app/set_ldap_password.py:276
msgid "USER"
msgstr "NUTZER"
-#: lib/pp_admintools/app/remove_ldap_user.py:137
+#: 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 "
"angegeben werden. Bitte beachten, dass sich letzterer bei den verschiedenen LDAP-Instanzen "
"unterscheiden kann."
-#: lib/pp_admintools/app/remove_ldap_user.py:161
+#: lib/pp_admintools/app/remove_ldap_user.py:160
msgid "No users to remove given."
msgstr "Kein Nutzername zum Löschen angegeben."
-#: lib/pp_admintools/app/remove_ldap_user.py:174
+#: lib/pp_admintools/app/remove_ldap_user.py:173
msgid "Checking given instances for admin and read/write access."
msgstr "Überprüfe die gegebenen Instanzen nach Admin- und Schreib-/Lesezugriffsrechten."
-#: lib/pp_admintools/app/remove_ldap_user.py:189
+#: lib/pp_admintools/app/remove_ldap_user.py:180
+msgid "LDAP instance {!r} not found in configuration."
+msgstr "Die LDAP-Instanz {!r} wurde nicht in der Konfiguration gefunden."
+
+#: lib/pp_admintools/app/remove_ldap_user.py:188
msgid "LDAP instance {!r} has only readonly access."
msgstr "Die LDAP-Instanz {!r} besitzt nur Lesezugriffsrechte."
-#: lib/pp_admintools/app/remove_ldap_user.py:194
+#: lib/pp_admintools/app/remove_ldap_user.py:193
msgid "No admin access to LDAP instance {!r}."
msgstr "Keine Admin-Zugriffsrechte bei LDAP-Instanz {!r}."
-#: lib/pp_admintools/app/remove_ldap_user.py:211
+#: lib/pp_admintools/app/remove_ldap_user.py:210
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:216
+#: lib/pp_admintools/app/remove_ldap_user.py:215
msgid "Evaluated DNs to remove:"
msgstr "Zum Löschen ermittelte DNs:"
-#: lib/pp_admintools/app/remove_ldap_user.py:225
+#: lib/pp_admintools/app/remove_ldap_user.py:224
msgid "Start disabling user entries in:"
msgstr "Beginne Deaktivierung der Nutzereinträge in:"
-#: lib/pp_admintools/app/remove_ldap_user.py:227
+#: lib/pp_admintools/app/remove_ldap_user.py:226
msgid "Start removing user entries in:"
msgstr "Beginne Löschung der Nutzereinträge in:"
-#: lib/pp_admintools/app/remove_ldap_user.py:231
+#: lib/pp_admintools/app/remove_ldap_user.py:230
msgid "Start disabling user entries ..."
msgstr "Beginne Deaktivierung der Nutzereinträge …"
-#: lib/pp_admintools/app/remove_ldap_user.py:233
+#: lib/pp_admintools/app/remove_ldap_user.py:232
msgid "Start removing user entries ..."
msgstr "Beginne Löschung der Nutzereinträge …"
-#: lib/pp_admintools/app/remove_ldap_user.py:248
+#: lib/pp_admintools/app/remove_ldap_user.py:247
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:250
+#: lib/pp_admintools/app/remove_ldap_user.py:249
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:276
+#: lib/pp_admintools/app/remove_ldap_user.py:275
msgid "Deactivate [{yes}/{no}]?"
msgstr "Deaktivieren [{yes}/{no}]?"
-#: lib/pp_admintools/app/remove_ldap_user.py:278
+#: lib/pp_admintools/app/remove_ldap_user.py:277
msgid "Remove [{yes}/{no}]?"
msgstr "Löschen [{yes}/{no}]?"
-#: lib/pp_admintools/app/remove_ldap_user.py:280 lib/pp_admintools/app/set_ldap_password.py:579
+#: lib/pp_admintools/app/remove_ldap_user.py:279 lib/pp_admintools/app/set_ldap_password.py:583
msgid "yes"
msgstr "ja"
-#: lib/pp_admintools/app/remove_ldap_user.py:285
+#: lib/pp_admintools/app/remove_ldap_user.py:284
msgid "Abort deactivating by {cls}: {e}"
msgstr "Abbruch der Deaktivierung durch {cls}: {e}"
-#: lib/pp_admintools/app/remove_ldap_user.py:287
+#: lib/pp_admintools/app/remove_ldap_user.py:286
msgid "Abort removing by {cls}: {e}"
msgstr "Abbruch des Löschens durch {cls}: {e}"
-#: lib/pp_admintools/app/remove_ldap_user.py:296
+#: lib/pp_admintools/app/remove_ldap_user.py:295
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:310 lib/pp_admintools/app/set_ldap_password.py:527
+#: lib/pp_admintools/app/remove_ldap_user.py:309 lib/pp_admintools/app/set_ldap_password.py:531
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:317 lib/pp_admintools/app/set_ldap_password.py:532
+#: lib/pp_admintools/app/remove_ldap_user.py:316 lib/pp_admintools/app/set_ldap_password.py:536
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:329 lib/pp_admintools/app/set_ldap_password.py:546
+#: lib/pp_admintools/app/remove_ldap_user.py:328 lib/pp_admintools/app/set_ldap_password.py:550
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:338
+#: lib/pp_admintools/app/remove_ldap_user.py:337
msgid "Deactivating all given users from {} ..."
msgstr "Deaktivieren aller übergebenen Nutzer in {} …"
-#: lib/pp_admintools/app/remove_ldap_user.py:340
+#: lib/pp_admintools/app/remove_ldap_user.py:339
msgid "Removing all given users from {} ..."
msgstr "Lösche alle übergebenen Nutzer in {} …"
-#: lib/pp_admintools/app/remove_ldap_user.py:355
+#: lib/pp_admintools/app/remove_ldap_user.py:354
msgid "Deactivating user {dn!r} from {inst} ..."
msgstr "Deaktivieren von Nutzer {dn!r} in {inst} …"
-#: lib/pp_admintools/app/remove_ldap_user.py:358
+#: lib/pp_admintools/app/remove_ldap_user.py:357
msgid "Removing user {dn!r} from {inst} ..."
msgstr "Lösche Nutzer {dn!r} in {inst} …"
-#: lib/pp_admintools/app/remove_ldap_user.py:364
+#: lib/pp_admintools/app/remove_ldap_user.py:363
msgid "Attributes of {!r}:"
msgstr "Attribute von {!r}:"
-#: lib/pp_admintools/app/remove_ldap_user.py:385
+#: lib/pp_admintools/app/remove_ldap_user.py:384
msgid "{c} on removing user {dn!r}: {e}"
msgstr "{c} beim Löschen des Nutzers {dn!r}: {e}"
-#: lib/pp_admintools/app/remove_ldap_user.py:391
+#: lib/pp_admintools/app/remove_ldap_user.py:390
msgid "User {dn!r} successful deactivated on {inst}."
msgstr "Der Nutzer {dn!r} wurde erfolgreich auf {inst} deaktiviert."
-#: lib/pp_admintools/app/remove_ldap_user.py:394
+#: lib/pp_admintools/app/remove_ldap_user.py:393
msgid "User {dn!r} successful removed from {inst}."
msgstr "Der Nutzer {dn!r} wurde erfolgreich von {inst} gelöscht."
-#: lib/pp_admintools/app/remove_ldap_user.py:420
+#: lib/pp_admintools/app/remove_ldap_user.py:419
msgid "Updating user info for {dn!r} on {inst} ..."
msgstr "Aktualisiere die Nutzerinformationenn für {dn!r} in {inst} …"
-#: lib/pp_admintools/app/remove_ldap_user.py:425 lib/pp_admintools/app/set_ldap_password.py:610
+#: lib/pp_admintools/app/remove_ldap_user.py:424 lib/pp_admintools/app/set_ldap_password.py:610
msgid "{c} on deactivating user {dn!r}: {e}"
msgstr "{c} beim Deaktivieren des Nutzers {dn!r}: {e}"
-#: lib/pp_admintools/app/remove_ldap_user.py:441
+#: lib/pp_admintools/app/remove_ldap_user.py:440
msgid "Did not found any group memberships of {dn!r} in {inst}."
msgstr "Keine Gruppenmitgliedschaften von {dn!r} in {inst} gefunden."
-#: lib/pp_admintools/app/remove_ldap_user.py:447 lib/pp_admintools/app/remove_ldap_user.py:474
-#: lib/pp_admintools/app/remove_ldap_user.py:505 lib/pp_admintools/app/remove_ldap_user.py:536
+#: lib/pp_admintools/app/remove_ldap_user.py:446 lib/pp_admintools/app/remove_ldap_user.py:473
+#: lib/pp_admintools/app/remove_ldap_user.py:504 lib/pp_admintools/app/remove_ldap_user.py:535
msgid "Removing user {u!r} from group {g!r} ..."
msgstr "Lösche Nutzer {u!r} aus der Gruppe {g!r} …"
-#: lib/pp_admintools/app/remove_ldap_user.py:452 lib/pp_admintools/app/remove_ldap_user.py:479
-#: lib/pp_admintools/app/remove_ldap_user.py:510 lib/pp_admintools/app/remove_ldap_user.py:541
+#: lib/pp_admintools/app/remove_ldap_user.py:451 lib/pp_admintools/app/remove_ldap_user.py:478
+#: lib/pp_admintools/app/remove_ldap_user.py:509 lib/pp_admintools/app/remove_ldap_user.py:540
msgid "{c} on removing user {dn!r} from group {g!r}: {e}"
msgstr "{c} beim Löschen des Nutzers {dn!r} von der Gruppe {g!r}: {e}"
-#: lib/pp_admintools/app/remove_ldap_user.py:468
+#: lib/pp_admintools/app/remove_ldap_user.py:467
msgid "Did not found any unique group memberships of {dn!r} in {inst}."
msgstr "Keine eindeutigen Gruppenmitgliedschaften von {dn!r} in {inst} gefunden."
-#: lib/pp_admintools/app/remove_ldap_user.py:492
+#: lib/pp_admintools/app/remove_ldap_user.py:491
msgid "Deleting user {uid!r} from all POSIX groups in {inst}."
msgstr "Lösche Nutzer {uid!r} aus allen POSIX-Gruppen in {inst} …"
-#: lib/pp_admintools/app/remove_ldap_user.py:499
+#: lib/pp_admintools/app/remove_ldap_user.py:498
msgid "Did not found any POSIX group memberships of {uid!r} in {inst}."
msgstr "Keine POSIX-Gruppenmitgliedschaften von {uid!r} in {inst} gefunden."
-#: lib/pp_admintools/app/remove_ldap_user.py:523
+#: lib/pp_admintools/app/remove_ldap_user.py:522
msgid "Deleting user {uid!r} from all sudo groups in {inst}."
msgstr "Lösche Nutzer {uid!r} aus allen sudo-Gruppen in {inst}."
-#: lib/pp_admintools/app/remove_ldap_user.py:530
+#: lib/pp_admintools/app/remove_ldap_user.py:529
msgid "Did not found any sudo group memberships of {uid!r} in {inst}."
msgstr "Keine sudo-Gruppenmitgliedschaften von {uid!r} in {inst} gefunden."
-#: lib/pp_admintools/app/set_ldap_password.py:100
+#: lib/pp_admintools/app/set_ldap_password.py:104
msgid "The ancient and notorious 3 DES crypt method."
msgstr "Die antike und berüchtigte 3 DES Verschlüsselungsmethode."
-#: lib/pp_admintools/app/set_ldap_password.py:101 lib/pp_admintools/app/set_ldap_password.py:104
+#: lib/pp_admintools/app/set_ldap_password.py:105 lib/pp_admintools/app/set_ldap_password.py:108
msgid "Pure {} hashing method."
msgstr "Reine {}-hashing Methode."
-#: lib/pp_admintools/app/set_ldap_password.py:102 lib/pp_admintools/app/set_ldap_password.py:105
-#: lib/pp_admintools/app/set_ldap_password.py:107 lib/pp_admintools/app/set_ldap_password.py:109
+#: lib/pp_admintools/app/set_ldap_password.py:106 lib/pp_admintools/app/set_ldap_password.py:109
+#: lib/pp_admintools/app/set_ldap_password.py:111 lib/pp_admintools/app/set_ldap_password.py:113
msgid "A {} based hashing algorithm."
msgstr "Ein {}-basierter Hashing-Algorithmus"
-#: lib/pp_admintools/app/set_ldap_password.py:103 lib/pp_admintools/app/set_ldap_password.py:106
-#: lib/pp_admintools/app/set_ldap_password.py:108 lib/pp_admintools/app/set_ldap_password.py:110
+#: lib/pp_admintools/app/set_ldap_password.py:107 lib/pp_admintools/app/set_ldap_password.py:110
+#: lib/pp_admintools/app/set_ldap_password.py:112 lib/pp_admintools/app/set_ldap_password.py:114
msgid "Salted {} hashing method."
msgstr "Gesalzene {}-hashing Methode."
-#: lib/pp_admintools/app/set_ldap_password.py:111
+#: lib/pp_admintools/app/set_ldap_password.py:115
msgid "A hashing method derived from {} with additional computing rounds."
msgstr "Eine von {} abgeleitete Hashing-Methode mit zusätzlichen Berechnungsrunden."
msgid "Do not check the quality of the new password with the {} library."
msgstr "Keine Überprüfung der Qualität des neuen Passwortes mit der {}-Bibliothek."
-#: lib/pp_admintools/app/set_ldap_password.py:246
-msgid "SCHEMA"
-msgstr "SCHEMA"
-
-#: lib/pp_admintools/app/set_ldap_password.py:247
+#: lib/pp_admintools/app/set_ldap_password.py:245
msgid ""
"The schema (hashing method) to use to hash the new password. It is possible to give here the "
"value {val_list!r}, then all possible schemes are shown and exit. Default: {default!r}."
"möglich, hier den Wert {val_list!r} anzugeben, dann werden alle verfügbaren Schemen aufgelistet."
" Vorgabe: {default!r}."
-#: lib/pp_admintools/app/set_ldap_password.py:251
+#: lib/pp_admintools/app/set_ldap_password.py:250
msgid "If you are not using an admin account, then the password will hashed only by the default schema."
msgstr ""
"Wenn kein Admin-Account verwendet wird, dann wird das Passwort ausschließlich mit dem Vorgabe-"
"Schema gehasht."
#: lib/pp_admintools/app/set_ldap_password.py:255
+msgid "SCHEMA"
+msgstr "SCHEMA"
+
+#: lib/pp_admintools/app/set_ldap_password.py:259
msgid ""
"The user, which password in the given LDAP instance should be changed. It may be given by its "
"Uid (the alphanumeric POSIX name), its mail address or its LDAP DN."
"seine Uid (der alphanumerische POSIX-Nutzername), als seine Mailadresse oder als seine LDAP-DN "
"angegeben werden."
-#: lib/pp_admintools/app/set_ldap_password.py:260
+#: lib/pp_admintools/app/set_ldap_password.py:264
msgid "If not given, then your current user name {!r} will be used."
msgstr "Wenn nicht angegeben, dann wird der aktuelle Nutzername {!r} verwendet."
-#: lib/pp_admintools/app/set_ldap_password.py:263
+#: lib/pp_admintools/app/set_ldap_password.py:267
msgid ""
"If you are using a readonly LDAP instance or an instance w/o admin access, then you must provide"
" somehow the current password of the user to change."
"Wenn eine LDAP-Instanz verwendet wird, die nur Leserechte oder keinen Admin-Zugriff hat, dann "
"muss irgendwie das neue Passwort des Nutzer zum Ändern angegeben werden."
-#: lib/pp_admintools/app/set_ldap_password.py:316
+#: lib/pp_admintools/app/set_ldap_password.py:320
msgid "Could not detect your current login name."
msgstr "Konnte den aktuellen Anmeldenamen nicht ermitteln."
-#: lib/pp_admintools/app/set_ldap_password.py:321
+#: lib/pp_admintools/app/set_ldap_password.py:325
msgid "The user {!r} will never be managed by LDAP."
msgstr "Der Nutzer {!r} wird niemals nimmer nicht von LDAP gemanagt."
-#: lib/pp_admintools/app/set_ldap_password.py:357
+#: lib/pp_admintools/app/set_ldap_password.py:361
msgid "Usable Hashing schemes:"
msgstr "Verfügbare Hashing-Schemen:"
-#: lib/pp_admintools/app/set_ldap_password.py:366
+#: lib/pp_admintools/app/set_ldap_password.py:370
msgid "This schema cannot be used for authentication on a current freeradius server."
msgstr ""
"Dieses Schema kann nicht zur Authentifizierung an einem aktuellen Freeradius-Server verwendet "
"werden."
-#: lib/pp_admintools/app/set_ldap_password.py:370
+#: lib/pp_admintools/app/set_ldap_password.py:374
msgid "This is the default schema."
msgstr "Das ist das Vorgabe-Schema."
-#: lib/pp_admintools/app/set_ldap_password.py:385
+#: lib/pp_admintools/app/set_ldap_password.py:389
msgid "Using LDAP instance {inst!r} - {url}."
msgstr "Verwende LDAP-Instanz {inst!r} - {url}."
-#: lib/pp_admintools/app/set_ldap_password.py:389
+#: lib/pp_admintools/app/set_ldap_password.py:393
msgid "Current password of user {!r}:"
msgstr "Aktuelles Passwort des Nutzers {!r}:"
-#: lib/pp_admintools/app/set_ldap_password.py:390 lib/pp_admintools/app/set_ldap_password.py:410
+#: lib/pp_admintools/app/set_ldap_password.py:394 lib/pp_admintools/app/set_ldap_password.py:414
msgid "Repeat password:"
msgstr "Passwort-Wiederholung:"
-#: lib/pp_admintools/app/set_ldap_password.py:403
+#: lib/pp_admintools/app/set_ldap_password.py:407
msgid "Non admin users must use the default schema {!r} for hashing their password."
msgstr "Nicht-Admin-Nutzer müssen das Vorgabeschema {!r} für das Hashen des Passwortes verwenden."
-#: lib/pp_admintools/app/set_ldap_password.py:409
+#: lib/pp_admintools/app/set_ldap_password.py:413
msgid "New password of user {!r}:"
msgstr "Neues Passwort für Nutzer {!r}:"
-#: lib/pp_admintools/app/set_ldap_password.py:416
+#: lib/pp_admintools/app/set_ldap_password.py:420
msgid "Checking the quality of the new password was disabled."
msgstr "Die Überprüfung der Qualität des neuen Passwortes wurde deaktiviert."
-#: lib/pp_admintools/app/set_ldap_password.py:419
+#: lib/pp_admintools/app/set_ldap_password.py:423
msgid "Testing quality of new password ..."
msgstr "Teste Qualität des neuen Passwortes …"
-#: lib/pp_admintools/app/set_ldap_password.py:423
+#: lib/pp_admintools/app/set_ldap_password.py:427
msgid "Quality of the new password is not sufficient:"
msgstr "Die Qualität des neuen Passwortes ist nicht ausreichend:"
-#: lib/pp_admintools/app/set_ldap_password.py:428
+#: lib/pp_admintools/app/set_ldap_password.py:432
msgid "Cannot testing the quality of the new password, because the Python module {!r} is not installed."
msgstr ""
"Kann die Qualität des neuen Passwortes nicht überprüfen, da das Pythod-Modul {!r} nicht "
"installiert ist."
-#: lib/pp_admintools/app/set_ldap_password.py:455
+#: lib/pp_admintools/app/set_ldap_password.py:459
msgid "Unbinding user connection from LDAP server {} ..."
msgstr "Trenne Verbindung des Nutzers zu LDAP-Server {} …"
-#: lib/pp_admintools/app/set_ldap_password.py:466
+#: lib/pp_admintools/app/set_ldap_password.py:470
msgid "Testing connect to LDAP-Server {url} with current user {dn!r} and password ..."
msgstr "Teste eine Anmeldung am LDAP-Server {url} als aktueller Nutzer {dn!r} mit Passwort …"
-#: lib/pp_admintools/app/set_ldap_password.py:478
+#: lib/pp_admintools/app/set_ldap_password.py:482
msgid "Successful connected as {dn!r} to {url}."
msgstr "Erfolgreich als {dn!r} an {url} angemeldet."
-#: lib/pp_admintools/app/set_ldap_password.py:484
+#: lib/pp_admintools/app/set_ldap_password.py:488
msgid "Could not connect to {url} as {dn!r}: {e}"
msgstr "Nutzer {dn!r} konnte nicht an {url} angemeldet werden: {e}"
-#: lib/pp_admintools/app/set_ldap_password.py:495
+#: lib/pp_admintools/app/set_ldap_password.py:499
msgid "Trying to get current password hash of user {!r} ..."
msgstr "Versuche den aktuellen Passwort-Hash des Nutzers {!r} zu holen …"
-#: lib/pp_admintools/app/set_ldap_password.py:534
+#: lib/pp_admintools/app/set_ldap_password.py:538
msgid ""
"Please use another username, or use the correct DN from the following list as a parameter for "
"this script instead of the username:"
"Bitte einen anderen Nutzernamen oder den richtigen DN aus der folgenden Liste als Parameter für "
"dieses Skript als Nutzername angeben:"
-#: lib/pp_admintools/app/set_ldap_password.py:551
+#: lib/pp_admintools/app/set_ldap_password.py:555
msgid "Changing the password of user {dn!r} in LDAP instance {inst}."
msgstr "Ändern des Passwortes des Nutzers {dn!r} in der LDAP-Instanz {inst}."
-#: lib/pp_admintools/app/set_ldap_password.py:558
+#: lib/pp_admintools/app/set_ldap_password.py:562
msgid "Setting password of {dn!r} with hashing schema {schema!r}."
msgstr "Setze das Passwort von {dn!r} mit dem Hashing-Schema {schema!r}."
-#: lib/pp_admintools/app/set_ldap_password.py:560
+#: lib/pp_admintools/app/set_ldap_password.py:564
msgid "Setting password of '{dn}' with hashing schema '{schema}' ..."
msgstr "Setze das Passwort von '{dn}' mit dem Hashing-Schema '{schema}'."
-#: lib/pp_admintools/app/set_ldap_password.py:565
+#: lib/pp_admintools/app/set_ldap_password.py:569
msgid "Current password hash: '{}'."
msgstr "Aktueller Passwort-Hash: '{}'"
-#: lib/pp_admintools/app/set_ldap_password.py:568
+#: lib/pp_admintools/app/set_ldap_password.py:572
msgid "The user '{}' has currently no password."
msgstr "Der Nutzer '{}' hat aktuell kein Passwort."
-#: lib/pp_admintools/app/set_ldap_password.py:572
+#: lib/pp_admintools/app/set_ldap_password.py:576
msgid "Used schema: {!r}."
msgstr "Verwendetes Schama : {!r}."
-#: lib/pp_admintools/app/set_ldap_password.py:574
+#: lib/pp_admintools/app/set_ldap_password.py:578
msgid "New password hash: '{}'."
msgstr "Neuer Passwort-Hash: '{}'."
-#: lib/pp_admintools/app/set_ldap_password.py:578
+#: lib/pp_admintools/app/set_ldap_password.py:582
msgid "Apply new password? [{yes}/{no}]?"
msgstr "Neues Passwort setzen [{yes}/{no}]?"
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:65 lib/pp_admintools/argparse_actions.py:95
+msgid "Got a {c} for converting {v!r} into an integer value: {e}"
+msgstr "Habe ein {c} bei der Konvertierung von {v!r} in einen Integer-Wert erhalten: {e}"
+
+#: lib/pp_admintools/argparse_actions.py:70
+msgid "The option must not be negative (given: {})."
+msgstr "Die Option darf nich negativ sein (gegeben: {})."
+
+#: lib/pp_admintools/argparse_actions.py:101 lib/pp_admintools/argparse_actions.py:138
+msgid "The option must be greater or equal to {m} (given: {v})."
+msgstr "Die Option muss größer oder gleich {m} sein (gegeben: {v})."
+
+#: lib/pp_admintools/argparse_actions.py:107 lib/pp_admintools/argparse_actions.py:143
+msgid "The option must be less or equal to {m} (given: {v})."
+msgstr "Die Option muss kleiner oder gleich {m} sein (gegeben: {v})."
+
+#: lib/pp_admintools/argparse_actions.py:133
+msgid "Got a {c} for converting {v!r} into a float value: {e}"
+msgstr "Habe ein {c} bei der Konvertierung von {v!r} in einen Float-Wert erhalten: {e}"
+
#: 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}:"
msgid "Evaluated configuration:"
msgstr "Evaluierte Konfiguration:"
-#: lib/pp_admintools/config/ldap.py:162
+#: lib/pp_admintools/config/ldap.py:174
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:175
+#: lib/pp_admintools/config/ldap.py:187
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:265
+#: lib/pp_admintools/config/ldap.py:277
msgid "Invalid production tier {!r} given."
msgstr "Ungültige Produktionsstufe {!r} angegeben."
-#: lib/pp_admintools/config/ldap.py:408
+#: lib/pp_admintools/config/ldap.py:332
+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:401
+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/ldap.py:505
msgid "Evaluating LDAP config ..."
msgstr "Ermittle LDAP-Konfiguration …"
-#: lib/pp_admintools/config/ldap.py:412
+#: lib/pp_admintools/config/ldap.py:509
msgid "Evaluating LDAP section {!r} ..."
msgstr "Evaluiere LDAP-Abschnitt {!r} …"
-#: lib/pp_admintools/config/ldap.py:429
+#: lib/pp_admintools/config/ldap.py:526
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:449
+#: lib/pp_admintools/config/ldap.py:546
msgid "Reading configuration of LDAP instance {!r} ..."
msgstr "Lese Konfiguration der LDAP-Instanz {!r} …"
-#: lib/pp_admintools/config/ldap.py:457
-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:519
-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 ""
"Project-Id-Version: pp_admintools 0.9.1\n"
"Report-Msgid-Bugs-To: frank.brehm@pixelpark.com\n"
-"POT-Creation-Date: 2022-10-17 17:45+0200\n"
+"POT-Creation-Date: 2022-10-18 18:12+0200\n"
"PO-Revision-Date: 2022-09-30 16:50+0200\n"
"Last-Translator: Frank Brehm <frank.brehm@pixelpark.com>\n"
"Language: en_US\n"
msgid "Options for {}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:267
+#: lib/pp_admintools/app/dns_deploy_zones.py:266
msgid "Keep a backup file for each changed configuration file."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:272
+#: lib/pp_admintools/app/dns_deploy_zones.py:271
msgid "Keeping the temporary directory instead of removing it at the end (e.g. for debugging purposes)"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:300
+#: lib/pp_admintools/app/dns_deploy_zones.py:299
msgid "Post init phase."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:304
+#: lib/pp_admintools/app/dns_deploy_zones.py:303
msgid "My own post init phase."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:320
+#: lib/pp_admintools/app/dns_deploy_zones.py:319
msgid "Unknown time zone: {!r}."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:340
+#: lib/pp_admintools/app/dns_deploy_zones.py:339
msgid "You must be root to execute this script."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:342
+#: lib/pp_admintools/app/dns_deploy_zones.py:341
msgid "But in simulation mode we are continuing nevertheless."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:352
+#: lib/pp_admintools/app/dns_deploy_zones.py:351
msgid "Using the global DNS master is not supported, please use 'local' or 'public'"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:360
+#: lib/pp_admintools/app/dns_deploy_zones.py:359
msgid "Starting: {}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:367
+#: lib/pp_admintools/app/dns_deploy_zones.py:366
msgid "Could not occupy pidfile: {}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:392
+#: lib/pp_admintools/app/dns_deploy_zones.py:391
msgid "Ending: {}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:397
+#: lib/pp_admintools/app/dns_deploy_zones.py:396
msgid "Cleaning up ..."
msgstr "Cleaning up …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:401
+#: lib/pp_admintools/app/dns_deploy_zones.py:400
msgid "Searching for {!r}."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:404
+#: lib/pp_admintools/app/dns_deploy_zones.py:403
msgid "Keep existing backup file {!r}."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:406
+#: lib/pp_admintools/app/dns_deploy_zones.py:405
msgid "Removing {!r} ..."
msgstr "Removing {!r} …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:412
+#: lib/pp_admintools/app/dns_deploy_zones.py:411
msgid "Error removing {p!r} - {c}: {e}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:417
+#: lib/pp_admintools/app/dns_deploy_zones.py:416
msgid "Temporary directory {!r} will not be removed. It's on yours to remove it manually."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:422
+#: lib/pp_admintools/app/dns_deploy_zones.py:421
msgid "Destroying temporary directory {!r} ..."
msgstr "Destroying temporary directory {!r} …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:431
+#: lib/pp_admintools/app/dns_deploy_zones.py:430
msgid "Temporary directory: {!r}."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:436
+#: lib/pp_admintools/app/dns_deploy_zones.py:435
msgid "Temporary zones conf: {!r}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:441
+#: lib/pp_admintools/app/dns_deploy_zones.py:440
msgid "Trying to get all keys from named.conf ..."
msgstr "Trying to get all keys from named.conf …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:447 lib/pp_admintools/app/dns_deploy_zones.py:801
-#: lib/pp_admintools/app/dns_deploy_zones.py:837 lib/pp_admintools/app/dns_deploy_zones.py:869
-#: lib/pp_admintools/app/dns_deploy_zones.py:904 lib/pp_admintools/app/dns_deploy_zones.py:939
+#: lib/pp_admintools/app/dns_deploy_zones.py:446 lib/pp_admintools/app/dns_deploy_zones.py:800
+#: lib/pp_admintools/app/dns_deploy_zones.py:836 lib/pp_admintools/app/dns_deploy_zones.py:868
+#: lib/pp_admintools/app/dns_deploy_zones.py:903 lib/pp_admintools/app/dns_deploy_zones.py:938
#: lib/pp_admintools/app/mail.py:326
msgid "Executing: {}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:453 lib/pp_admintools/app/dns_deploy_zones.py:807
-#: lib/pp_admintools/app/ldap.py:766 lib/pp_admintools/app/ldap.py:819
-#: lib/pp_admintools/app/ldap.py:872 lib/pp_admintools/app/ldap.py:1103
-#: lib/pp_admintools/app/ldap.py:1137 lib/pp_admintools/app/ldap.py:1171
-#: lib/pp_admintools/app/ldap.py:1205
+#: lib/pp_admintools/app/dns_deploy_zones.py:452 lib/pp_admintools/app/dns_deploy_zones.py:806
+#: lib/pp_admintools/app/ldap.py:787 lib/pp_admintools/app/ldap.py:840
+#: lib/pp_admintools/app/ldap.py:893 lib/pp_admintools/app/ldap.py:1124
+#: lib/pp_admintools/app/ldap.py:1158 lib/pp_admintools/app/ldap.py:1192
+#: lib/pp_admintools/app/ldap.py:1226
msgid "Result:"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:494 lib/pp_admintools/app/dns_deploy_zones.py:496
+#: lib/pp_admintools/app/dns_deploy_zones.py:493 lib/pp_admintools/app/dns_deploy_zones.py:495
msgid "Found named keys:"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:496 lib/pp_admintools/app/dns_deploy_zones.py:527
+#: lib/pp_admintools/app/dns_deploy_zones.py:495 lib/pp_admintools/app/dns_deploy_zones.py:526
msgid "None"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:501
+#: lib/pp_admintools/app/dns_deploy_zones.py:500
msgid "Generating {} ..."
msgstr "Generating {} …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:525 lib/pp_admintools/app/dns_deploy_zones.py:527
+#: lib/pp_admintools/app/dns_deploy_zones.py:524 lib/pp_admintools/app/dns_deploy_zones.py:526
msgid "Collected server configuration:"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:548
+#: lib/pp_admintools/app/dns_deploy_zones.py:547
msgid "Generated file {!r}:"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:564
+#: lib/pp_admintools/app/dns_deploy_zones.py:563
msgid "Pure local zone {!r} will not be considered."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:596
+#: lib/pp_admintools/app/dns_deploy_zones.py:595
msgid "Key {k!r} for zone {z!r} not found in named configuration."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:626
+#: lib/pp_admintools/app/dns_deploy_zones.py:625
msgid "Got IPv4 tuples: {}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:650
+#: lib/pp_admintools/app/dns_deploy_zones.py:649
msgid "Got IPv6 tokens: {}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:657
+#: lib/pp_admintools/app/dns_deploy_zones.py:656
msgid "Comparing generated files with existing ones."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:664
+#: lib/pp_admintools/app/dns_deploy_zones.py:663
msgid "Files to replace:"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:670
+#: lib/pp_admintools/app/dns_deploy_zones.py:669
msgid "Source file not defined."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:672
+#: lib/pp_admintools/app/dns_deploy_zones.py:671
msgid "Target file not defined."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:674
+#: lib/pp_admintools/app/dns_deploy_zones.py:673
msgid "Comparing {one!r} with {two!r} ..."
msgstr "Comparing {one!r} with {two!r} …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:678 lib/pp_admintools/app/dns_deploy_zones.py:687
+#: lib/pp_admintools/app/dns_deploy_zones.py:677 lib/pp_admintools/app/dns_deploy_zones.py:686
msgid "{what} {f!r} does not exists."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:679 lib/pp_admintools/app/dns_deploy_zones.py:683
+#: lib/pp_admintools/app/dns_deploy_zones.py:678 lib/pp_admintools/app/dns_deploy_zones.py:682
msgid "Source file"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:682 lib/pp_admintools/app/dns_deploy_zones.py:692
+#: lib/pp_admintools/app/dns_deploy_zones.py:681 lib/pp_admintools/app/dns_deploy_zones.py:691
msgid "{what} {f!r} is not a regular file."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:688 lib/pp_admintools/app/dns_deploy_zones.py:693
+#: lib/pp_admintools/app/dns_deploy_zones.py:687 lib/pp_admintools/app/dns_deploy_zones.py:692
msgid "Target file"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:699 lib/pp_admintools/app/dns_deploy_zones.py:716
+#: lib/pp_admintools/app/dns_deploy_zones.py:698 lib/pp_admintools/app/dns_deploy_zones.py:715
msgid "Reading {!r} ..."
msgstr "Reading {!r} …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:709 lib/pp_admintools/app/dns_deploy_zones.py:726
+#: lib/pp_admintools/app/dns_deploy_zones.py:708 lib/pp_admintools/app/dns_deploy_zones.py:725
msgid "Cleaned version of {!r}:"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:731
+#: lib/pp_admintools/app/dns_deploy_zones.py:730
msgid ""
"Source file {sf!r} has different number essential lines ({sl}) than the target file {tf!r} ({tl}"
" lines)."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:740
+#: lib/pp_admintools/app/dns_deploy_zones.py:739
msgid "Source file {sf!r} has a different content than the target file {tf!r}."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:752
+#: lib/pp_admintools/app/dns_deploy_zones.py:751
msgid "No replacement of any config files necessary."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:755
+#: lib/pp_admintools/app/dns_deploy_zones.py:754
msgid "Start replacing of config files ..."
msgstr "Start replacing of config files …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:763 lib/pp_admintools/app/dns_deploy_zones.py:773
+#: lib/pp_admintools/app/dns_deploy_zones.py:762 lib/pp_admintools/app/dns_deploy_zones.py:772
msgid "Copying {frm!r} => {to!r} ..."
msgstr "Copying {frm!r} => {to!r} …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:769
+#: lib/pp_admintools/app/dns_deploy_zones.py:768
msgid "All backuped config files:"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:781
+#: lib/pp_admintools/app/dns_deploy_zones.py:780
msgid "Restoring of original config files because of an exception."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:785
+#: lib/pp_admintools/app/dns_deploy_zones.py:784
msgid "Moving {frm!r} => {to!r} ..."
msgstr "Moving {frm!r} => {to!r} …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:791
+#: lib/pp_admintools/app/dns_deploy_zones.py:790
msgid "Could not find backup file {!r}."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:796
+#: lib/pp_admintools/app/dns_deploy_zones.py:795
msgid "Checking syntax correctness of named.conf ..."
msgstr "Checking syntax correctness of named.conf …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:817
+#: lib/pp_admintools/app/dns_deploy_zones.py:816
msgid "Reload or restart of named is not necessary."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:822
+#: lib/pp_admintools/app/dns_deploy_zones.py:821
msgid "Named is not running, please start it manually."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:833
+#: lib/pp_admintools/app/dns_deploy_zones.py:832
msgid "Checking, whether named is running ..."
msgstr "Checking, whether named is running …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:851 lib/pp_admintools/app/dns_deploy_zones.py:886
-#: lib/pp_admintools/app/dns_deploy_zones.py:921 lib/pp_admintools/app/dns_deploy_zones.py:956
+#: lib/pp_admintools/app/dns_deploy_zones.py:850 lib/pp_admintools/app/dns_deploy_zones.py:885
+#: lib/pp_admintools/app/dns_deploy_zones.py:920 lib/pp_admintools/app/dns_deploy_zones.py:955
msgid "Return value: {!r}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:853 lib/pp_admintools/app/dns_deploy_zones.py:855
-#: lib/pp_admintools/app/dns_deploy_zones.py:888 lib/pp_admintools/app/dns_deploy_zones.py:890
-#: lib/pp_admintools/app/dns_deploy_zones.py:923 lib/pp_admintools/app/dns_deploy_zones.py:925
-#: lib/pp_admintools/app/dns_deploy_zones.py:958 lib/pp_admintools/app/dns_deploy_zones.py:960
+#: lib/pp_admintools/app/dns_deploy_zones.py:852 lib/pp_admintools/app/dns_deploy_zones.py:854
+#: lib/pp_admintools/app/dns_deploy_zones.py:887 lib/pp_admintools/app/dns_deploy_zones.py:889
+#: lib/pp_admintools/app/dns_deploy_zones.py:922 lib/pp_admintools/app/dns_deploy_zones.py:924
+#: lib/pp_admintools/app/dns_deploy_zones.py:957 lib/pp_admintools/app/dns_deploy_zones.py:959
msgid "Output on {}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:865
+#: lib/pp_admintools/app/dns_deploy_zones.py:864
msgid "Starting {} ..."
msgstr "Starting {} …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:900
+#: lib/pp_admintools/app/dns_deploy_zones.py:899
msgid "Restarting {} ..."
msgstr "Restarting {} …"
-#: lib/pp_admintools/app/dns_deploy_zones.py:935
+#: lib/pp_admintools/app/dns_deploy_zones.py:934
msgid "Reloading {} ..."
msgstr "Reloading {} …"
-#: lib/pp_admintools/app/ldap.py:108 lib/pp_admintools/app/ldap.py:211
+#: lib/pp_admintools/app/ldap.py:109 lib/pp_admintools/app/ldap.py:213
msgid "The path {!r} must be an absolute path."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:114 lib/pp_admintools/app/ldap.py:215
-#: lib/pp_admintools/app/ldap.py:1219
+#: lib/pp_admintools/app/ldap.py:115 lib/pp_admintools/app/ldap.py:217
+#: lib/pp_admintools/app/ldap.py:1240
msgid "The file {!r} does not exists."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:118 lib/pp_admintools/app/ldap.py:219
-#: lib/pp_admintools/app/ldap.py:1224
+#: lib/pp_admintools/app/ldap.py:119 lib/pp_admintools/app/ldap.py:221
+#: lib/pp_admintools/app/ldap.py:1245
msgid "The given path {!r} exists, but is not a regular file."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:122 lib/pp_admintools/app/ldap.py:223
-#: lib/pp_admintools/app/ldap.py:1229
+#: lib/pp_admintools/app/ldap.py:123 lib/pp_admintools/app/ldap.py:225
+#: lib/pp_admintools/app/ldap.py:1250
msgid "The given file {!r} is not readable."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:143
+#: lib/pp_admintools/app/ldap.py:144
msgid "a port number must be greater than zero and less or equal to {}."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:148
+#: lib/pp_admintools/app/ldap.py:149
msgid "Wrong port number {!r}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:256
+#: lib/pp_admintools/app/ldap.py:258
msgid "LDAP options"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:258
+#: lib/pp_admintools/app/ldap.py:260
msgid "Options for the default LDAP connection"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:260
+#: lib/pp_admintools/app/ldap.py:262
msgid "Options fo LDAP connections"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:267 lib/pp_admintools/app/remove_ldap_user.py:280
-#: lib/pp_admintools/app/set_ldap_password.py:579
+#: lib/pp_admintools/app/ldap.py:269 lib/pp_admintools/app/remove_ldap_user.py:279
+#: lib/pp_admintools/app/set_ldap_password.py:583
msgid "No"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:269
+#: lib/pp_admintools/app/ldap.py:271
msgid "Yes"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:275
+#: lib/pp_admintools/app/ldap.py:277
msgid "HOST"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:276
+#: lib/pp_admintools/app/ldap.py:278
msgid "Hostname or address of the LDAP server to use. Default: {!r}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:283
+#: lib/pp_admintools/app/ldap.py:285
msgid "Use ldaps to connect to the LDAP server. Default: {}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:288 lib/pp_admintools/app/mail.py:261
-#: lib/pp_admintools/app/pdns.py:274
+#: lib/pp_admintools/app/ldap.py:290 lib/pp_admintools/app/mail.py:261
+#: lib/pp_admintools/app/pdns.py:272
msgid "PORT"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:290
+#: lib/pp_admintools/app/ldap.py:292
msgid "The port number to connect to the LDAP server. Default: {}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:296
+#: lib/pp_admintools/app/ldap.py:298
msgid "The base DN used as the root for the LDAP searches. Default: {!r}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:303
+#: lib/pp_admintools/app/ldap.py:305
msgid "The Bind DN to use to connect to the LDAP server. Default: {!r}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:311 lib/pp_admintools/app/set_ldap_password.py:204
+#: lib/pp_admintools/app/ldap.py:313 lib/pp_admintools/app/set_ldap_password.py:204
#: lib/pp_admintools/app/set_ldap_password.py:205 lib/pp_admintools/app/set_ldap_password.py:222
#: lib/pp_admintools/app/set_ldap_password.py:225
msgid "PASSWORD"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:312
+#: lib/pp_admintools/app/ldap.py:314
msgid "Use PASSWORD as the password for simple LDAP authentication."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:317
+#: lib/pp_admintools/app/ldap.py:319
msgid ""
"Prompt for simple LDAP authentication. This is used instead of specifying the password on the "
"command line."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:323 lib/pp_admintools/app/set_ldap_password.py:216
+#: lib/pp_admintools/app/ldap.py:325 lib/pp_admintools/app/set_ldap_password.py:216
#: lib/pp_admintools/app/set_ldap_password.py:218
msgid "PASSWORD_FILE"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:325
+#: lib/pp_admintools/app/ldap.py:327
msgid "Use contents of PASSWORD_FILE as the password for simple authentication."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:333 lib/pp_admintools/app/pdns.py:248
+#: lib/pp_admintools/app/ldap.py:335 lib/pp_admintools/app/pdns.py:246
msgid "INSTANCE"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:336
-msgid ""
-"The LDAP instance (LDAP cluster) from configuration, where to execute this script. If not given,"
-" then the instance {!r} will be used."
+#: lib/pp_admintools/app/ldap.py:338
+msgid "If not given, then the instance {!r} will be used."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:339
+#: lib/pp_admintools/app/ldap.py:341
+msgid "The LDAP instance (LDAP cluster) from configuration, where to execute this script."
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:345
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."
+"are shown, and the application is exiting."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:358
+#: lib/pp_admintools/app/ldap.py:371 lib/pp_admintools/app/mirror_ldap.py:89
msgid "SECONDS"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:360
+#: lib/pp_admintools/app/ldap.py:373
msgid "Using the given timeout in seconds for all LDAP operations. Default: {}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:394
+#: lib/pp_admintools/app/ldap.py:407
msgid "Checking given instances."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:398
+#: lib/pp_admintools/app/ldap.py:411
msgid "Given insts:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:449
+#: lib/pp_admintools/app/ldap.py:462
msgid "Configured LDAP instances:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:466
+#: lib/pp_admintools/app/ldap.py:479
msgid "Verifying given instances ..."
msgstr "Verifying given instances …"
-#: lib/pp_admintools/app/ldap.py:477
+#: lib/pp_admintools/app/ldap.py:492
msgid "Used filter:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:507 lib/pp_admintools/app/remove_ldap_user.py:181
-msgid "LDAP instance {!r} not found in configuration."
+#: lib/pp_admintools/app/ldap.py:526
+msgid "LDAP instance {!r} not found in configuration or is not usable."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:515
+#: lib/pp_admintools/app/ldap.py:536
msgid "LDAP instances to use:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:564
+#: lib/pp_admintools/app/ldap.py:585
msgid "Preparations ..."
msgstr "Preparations …"
-#: lib/pp_admintools/app/ldap.py:567
+#: lib/pp_admintools/app/ldap.py:588
msgid "Open all necessary LDAP connections ..."
msgstr "Open all necessary LDAP connections …"
-#: lib/pp_admintools/app/ldap.py:581
+#: lib/pp_admintools/app/ldap.py:602
msgid "Password of user {usr} on LDAP instance {inst}:"
msgstr "Password of user {usr} on LDAP instance {inst}:"
-#: lib/pp_admintools/app/ldap.py:590
+#: lib/pp_admintools/app/ldap.py:611
msgid "Info about LDAP server {}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:600
+#: lib/pp_admintools/app/ldap.py:621
msgid "Trying to get LDAP server object for {} ..."
msgstr "Trying to get LDAP server object for {} …"
-#: lib/pp_admintools/app/ldap.py:616
+#: lib/pp_admintools/app/ldap.py:637
msgid "Connect options to server {!r}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:623
+#: lib/pp_admintools/app/ldap.py:644
msgid "LDAP server {s}: {re}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:637
+#: lib/pp_admintools/app/ldap.py:658
msgid "Connecting to LDAP server {url} as {dn!r} ..."
msgstr "Connecting to LDAP server {url} as {dn!r} …"
-#: lib/pp_admintools/app/ldap.py:649
+#: lib/pp_admintools/app/ldap.py:670
msgid "Finishing ..."
msgstr "Finishing …"
-#: lib/pp_admintools/app/ldap.py:658
+#: lib/pp_admintools/app/ldap.py:679
msgid "Disconnecting from all remaining LDAP instances ..."
msgstr "Disconnecting from all remaining LDAP instances …"
-#: lib/pp_admintools/app/ldap.py:671
+#: lib/pp_admintools/app/ldap.py:692
msgid "Unbinding from LDAP server {!r} ..."
msgstr "Unbinding from LDAP server {!r} …"
-#: lib/pp_admintools/app/ldap.py:678
+#: lib/pp_admintools/app/ldap.py:699
msgid "Disconnecting from LDAP server {!r} ..."
msgstr "Disconnecting from LDAP server {!r} …"
-#: lib/pp_admintools/app/ldap.py:687
+#: lib/pp_admintools/app/ldap.py:708
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:692
+#: lib/pp_admintools/app/ldap.py:713
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:699
+#: lib/pp_admintools/app/ldap.py:720
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:706
+#: lib/pp_admintools/app/ldap.py:727
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:715 lib/pp_admintools/app/remove_ldap_user.py:300
+#: lib/pp_admintools/app/ldap.py:736 lib/pp_admintools/app/remove_ldap_user.py:299
msgid "Empty user given."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:718
+#: lib/pp_admintools/app/ldap.py:739
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:748 lib/pp_admintools/app/ldap.py:801
-#: lib/pp_admintools/app/ldap.py:854 lib/pp_admintools/app/ldap.py:1088
-#: lib/pp_admintools/app/ldap.py:1122 lib/pp_admintools/app/ldap.py:1156
-#: lib/pp_admintools/app/ldap.py:1190
+#: lib/pp_admintools/app/ldap.py:769 lib/pp_admintools/app/ldap.py:822
+#: lib/pp_admintools/app/ldap.py:875 lib/pp_admintools/app/ldap.py:1109
+#: lib/pp_admintools/app/ldap.py:1143 lib/pp_admintools/app/ldap.py:1177
+#: lib/pp_admintools/app/ldap.py:1211
msgid "Searching in {uri}/{bdn} with filter: {fltr}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:759
+#: lib/pp_admintools/app/ldap.py:780
msgid "Result of searching for mail address {m!r}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:763 lib/pp_admintools/app/ldap.py:816
-#: lib/pp_admintools/app/ldap.py:869 lib/pp_admintools/app/ldap.py:957
-#: lib/pp_admintools/app/ldap.py:1100 lib/pp_admintools/app/ldap.py:1134
-#: lib/pp_admintools/app/ldap.py:1168 lib/pp_admintools/app/ldap.py:1202
+#: lib/pp_admintools/app/ldap.py:784 lib/pp_admintools/app/ldap.py:837
+#: lib/pp_admintools/app/ldap.py:890 lib/pp_admintools/app/ldap.py:978
+#: lib/pp_admintools/app/ldap.py:1121 lib/pp_admintools/app/ldap.py:1155
+#: lib/pp_admintools/app/ldap.py:1189 lib/pp_admintools/app/ldap.py:1223
msgid "Got a response entry:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:770
+#: lib/pp_admintools/app/ldap.py:791
msgid "User with mail address {m!r} not found in {uri}/{bdn}."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:812
+#: lib/pp_admintools/app/ldap.py:833
msgid "Result of searching for uid {u!r}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:823
+#: lib/pp_admintools/app/ldap.py:844
msgid "User with uid {u!r} not found in {uri}/{bdn}."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:865
+#: lib/pp_admintools/app/ldap.py:886
msgid "Result of searching for CN {cn!r}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:876
+#: lib/pp_admintools/app/ldap.py:897
msgid "User with cn {cn!r} not found in {uri}/{bdn}."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:893 lib/pp_admintools/app/set_ldap_password.py:504
+#: lib/pp_admintools/app/ldap.py:914 lib/pp_admintools/app/set_ldap_password.py:508
msgid "User with DN {dn!r} not found in {uri}."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:911
+#: lib/pp_admintools/app/ldap.py:932
msgid "ObjectClasses of {dn!r}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:921
+#: lib/pp_admintools/app/ldap.py:942
msgid "Entry {dn!r} in {uri} seems not to be an account."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:943
+#: lib/pp_admintools/app/ldap.py:964
msgid "Searching DN {dn!r} in {uri}."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:953
+#: lib/pp_admintools/app/ldap.py:974
msgid "Result of searching for DN {dn!r}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:961
+#: lib/pp_admintools/app/ldap.py:982
msgid "Entry with DN {dn!r} not found in {uri}."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1002
+#: lib/pp_admintools/app/ldap.py:1023
msgid "Applying changes on {uri} to DN {dn!r}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1007
+#: lib/pp_admintools/app/ldap.py:1028
msgid "Simulation mode - changes are not applied."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1013
+#: lib/pp_admintools/app/ldap.py:1034
msgid "Modification NOT successfull - {c}: {e}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1014 lib/pp_admintools/app/remove_ldap_user.py:427
-#: lib/pp_admintools/app/remove_ldap_user.py:454 lib/pp_admintools/app/remove_ldap_user.py:481
-#: lib/pp_admintools/app/remove_ldap_user.py:512 lib/pp_admintools/app/remove_ldap_user.py:543
+#: lib/pp_admintools/app/ldap.py:1035 lib/pp_admintools/app/remove_ldap_user.py:426
+#: lib/pp_admintools/app/remove_ldap_user.py:453 lib/pp_admintools/app/remove_ldap_user.py:480
+#: lib/pp_admintools/app/remove_ldap_user.py:511 lib/pp_admintools/app/remove_ldap_user.py:542
#: lib/pp_admintools/app/set_ldap_password.py:612
msgid "Changes:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1026
+#: lib/pp_admintools/app/ldap.py:1047
msgid "Modification status: {!r}."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1028
+#: lib/pp_admintools/app/ldap.py:1049
msgid "Result of modifying:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1031
+#: lib/pp_admintools/app/ldap.py:1052
msgid "Modification NOT successful: {desc} - {msg}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1035
+#: lib/pp_admintools/app/ldap.py:1056
msgid "Modification successful."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1045
+#: lib/pp_admintools/app/ldap.py:1066
msgid "Deleting LDAP entry {dn!r} on {uri} ..."
msgstr "Deleting LDAP entry {dn!r} on {uri} …"
-#: lib/pp_admintools/app/ldap.py:1050
+#: lib/pp_admintools/app/ldap.py:1071
msgid "Simulation mode - deletion will not be executed."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1056
+#: lib/pp_admintools/app/ldap.py:1077
msgid "Deletion NOT successfull - {c}: {e}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1060
+#: lib/pp_admintools/app/ldap.py:1081
msgid "Deletion status: {!r}."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1062
+#: lib/pp_admintools/app/ldap.py:1083
msgid "Result of deletion:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1065
+#: lib/pp_admintools/app/ldap.py:1086
msgid "Deletion NOT successful: {desc} - {msg}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1069
+#: lib/pp_admintools/app/ldap.py:1090
msgid "Deletion successful."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1216
+#: lib/pp_admintools/app/ldap.py:1237
msgid "Reading password file {!r} ..."
msgstr "Reading password file {!r} …"
msgid "Did not found sendmail executable."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:100 lib/pp_admintools/app/pdns.py:184
+#: lib/pp_admintools/app/mirror_ldap.py:70
+msgid ""
+"Mirror the content of a complete LDAP instance (server or cluster) to another instance. This "
+"will be done first by clearing the target instance, then copying structural entries from the "
+"source to the target instance and then copying all other entries. During this some "
+"transformations are done, like substituting the content of some entry attributes by another "
+"values."
+msgstr ""
+
+#: lib/pp_admintools/app/mirror_ldap.py:86
+msgid "Miroring options"
+msgstr ""
+
+#: lib/pp_admintools/app/mirror_ldap.py:91
+msgid ""
+"Number of seconds to wait after each write operation. Given as a float value, and if set to "
+"zero, there is no waiting after a write. (default: {:.1f})"
+msgstr ""
+
+#: lib/pp_admintools/app/mirror_ldap.py:98
+msgid "NUMBER"
+msgstr ""
+
+#: lib/pp_admintools/app/mirror_ldap.py:100
+msgid "Limiting the mirroring to the first NUMBER entries. This option is valid only in simulation mode."
+msgstr ""
+
+#: lib/pp_admintools/app/mirror_ldap.py:107
+msgid "Mirror only structural entries (entries with childs)."
+msgstr ""
+
+#: lib/pp_admintools/app/pdns.py:99 lib/pp_admintools/app/pdns.py:183
msgid "Configuration not available."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:114
+#: lib/pp_admintools/app/pdns.py:113
msgid "Invalid API key {!r} given."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:126
+#: lib/pp_admintools/app/pdns.py:125
msgid "Invalid API host {!r} given."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:139
+#: lib/pp_admintools/app/pdns.py:138
msgid "Invalid API port {!r} given."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:151
+#: lib/pp_admintools/app/pdns.py:150
msgid "Invalid API server name {!r} given."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:169 lib/pp_admintools/app/pdns.py:172
+#: lib/pp_admintools/app/pdns.py:168 lib/pp_admintools/app/pdns.py:171
msgid "Invalid instance {!r} given."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:180
+#: lib/pp_admintools/app/pdns.py:179
msgid "Evaluating instance {!r} ..."
msgstr "Evaluating instance {!r} …"
-#: lib/pp_admintools/app/pdns.py:188
+#: lib/pp_admintools/app/pdns.py:187
msgid "PDNS instance {!r} is not configured."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:239
+#: lib/pp_admintools/app/pdns.py:238
msgid "PowerDNS API options"
msgstr ""
-#: lib/pp_admintools/app/pdns.py:249
+#: lib/pp_admintools/app/pdns.py:247
msgid "Select, which PowerDNS instance to use. Valid values: {v}, default: {d!r}."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:257 lib/pp_admintools/app/pdns.py:263
-#: lib/pp_admintools/app/pdns.py:269
+#: lib/pp_admintools/app/pdns.py:255 lib/pp_admintools/app/pdns.py:261
+#: lib/pp_admintools/app/pdns.py:267
msgid "Using the {!r} PowerDNS instance."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:277
+#: lib/pp_admintools/app/pdns.py:275
msgid "Which port to connect to PowerDNS API, default: {}."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:302
+#: lib/pp_admintools/app/pdns.py:300
msgid "No path given for{d} [{s}]/{k} in configuration."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:309
+#: lib/pp_admintools/app/pdns.py:307
msgid "Path {p!r} for{d} [{s}]/{k} in configuration must be an absolute path."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:332 lib/pp_admintools/app/pdns.py:368
-#: lib/pp_admintools/app/pdns.py:395
+#: lib/pp_admintools/app/pdns.py:330 lib/pp_admintools/app/pdns.py:366
+#: lib/pp_admintools/app/pdns.py:393
msgid "Executing {} ..."
msgstr "Executing {} …"
-#: lib/pp_admintools/app/pdns.py:370
+#: lib/pp_admintools/app/pdns.py:368
msgid "Setting Loglevel of the requests module to {}."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:384
+#: lib/pp_admintools/app/pdns.py:382
msgid "Executing nothing ..."
msgstr "Executing nothing …"
-#: lib/pp_admintools/app/pdns.py:404 lib/pp_admintools/app/pdns.py:426
-#: lib/pp_admintools/app/pdns.py:437 lib/pp_admintools/app/pdns.py:447
+#: lib/pp_admintools/app/pdns.py:402 lib/pp_admintools/app/pdns.py:424
+#: lib/pp_admintools/app/pdns.py:435 lib/pp_admintools/app/pdns.py:445
msgid "The PDNS server object does not exists."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:406 lib/pp_admintools/app/pdns.py:428
-#: lib/pp_admintools/app/pdns.py:439 lib/pp_admintools/app/pdns.py:449
+#: lib/pp_admintools/app/pdns.py:404 lib/pp_admintools/app/pdns.py:426
+#: lib/pp_admintools/app/pdns.py:437 lib/pp_admintools/app/pdns.py:447
msgid "The PDNS server object is not initialized."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:457
+#: lib/pp_admintools/app/pdns.py:455
msgid "Trying to get complete information about zone {!r} ..."
msgstr "Trying to get complete information about zone {!r} …"
-#: lib/pp_admintools/app/pdns.py:463
+#: lib/pp_admintools/app/pdns.py:461
msgid "The given zone {} was not found."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:466
+#: lib/pp_admintools/app/pdns.py:464
msgid "Got a response:"
msgstr ""
-#: lib/pp_admintools/app/pdns.py:471
+#: lib/pp_admintools/app/pdns.py:469
msgid "Zone object:"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:70
+#: 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 "
"user will be really removed from LDAP."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:115
+#: lib/pp_admintools/app/remove_ldap_user.py:114
msgid "Removing options"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:118
+#: lib/pp_admintools/app/remove_ldap_user.py:117
msgid "This is the default."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:119
+#: lib/pp_admintools/app/remove_ldap_user.py:118
msgid "This is mutually exclusive to {!r}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:121
+#: lib/pp_admintools/app/remove_ldap_user.py:120
msgid "Deactivating the user instead of removing it."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:128
+#: lib/pp_admintools/app/remove_ldap_user.py:127
msgid "Removing the user from LDAP."
msgstr "Removing the user from LDAP."
-#: lib/pp_admintools/app/remove_ldap_user.py:136 lib/pp_admintools/app/set_ldap_password.py:269
-#: lib/pp_admintools/app/set_ldap_password.py:272
+#: lib/pp_admintools/app/remove_ldap_user.py:135 lib/pp_admintools/app/set_ldap_password.py:273
+#: lib/pp_admintools/app/set_ldap_password.py:276
msgid "USER"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:137
+#: 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:161
+#: lib/pp_admintools/app/remove_ldap_user.py:160
msgid "No users to remove given."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:174
+#: lib/pp_admintools/app/remove_ldap_user.py:173
msgid "Checking given instances for admin and read/write access."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:189
+#: lib/pp_admintools/app/remove_ldap_user.py:180
+msgid "LDAP instance {!r} not found in configuration."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:188
msgid "LDAP instance {!r} has only readonly access."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:194
+#: lib/pp_admintools/app/remove_ldap_user.py:193
msgid "No admin access to LDAP instance {!r}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:211
+#: lib/pp_admintools/app/remove_ldap_user.py:210
msgid "All given users were not found in any LDAP instance."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:216
+#: lib/pp_admintools/app/remove_ldap_user.py:215
msgid "Evaluated DNs to remove:"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:225
+#: lib/pp_admintools/app/remove_ldap_user.py:224
msgid "Start disabling user entries in:"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:227
+#: lib/pp_admintools/app/remove_ldap_user.py:226
msgid "Start removing user entries in:"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:231
+#: lib/pp_admintools/app/remove_ldap_user.py:230
msgid "Start disabling user entries ..."
msgstr "Start disabling user entries …"
-#: lib/pp_admintools/app/remove_ldap_user.py:233
+#: lib/pp_admintools/app/remove_ldap_user.py:232
msgid "Start removing user entries ..."
msgstr "Start removing user entries …"
-#: lib/pp_admintools/app/remove_ldap_user.py:248
+#: lib/pp_admintools/app/remove_ldap_user.py:247
msgid "Do you really want to deactivate the following users?"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:250
+#: lib/pp_admintools/app/remove_ldap_user.py:249
msgid "Do you really want to remove the following users?"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:276
+#: lib/pp_admintools/app/remove_ldap_user.py:275
msgid "Deactivate [{yes}/{no}]?"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:278
+#: lib/pp_admintools/app/remove_ldap_user.py:277
msgid "Remove [{yes}/{no}]?"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:280 lib/pp_admintools/app/set_ldap_password.py:579
+#: lib/pp_admintools/app/remove_ldap_user.py:279 lib/pp_admintools/app/set_ldap_password.py:583
msgid "yes"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:285
+#: lib/pp_admintools/app/remove_ldap_user.py:284
msgid "Abort deactivating by {cls}: {e}"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:287
+#: lib/pp_admintools/app/remove_ldap_user.py:286
msgid "Abort removing by {cls}: {e}"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:296
+#: lib/pp_admintools/app/remove_ldap_user.py:295
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:310 lib/pp_admintools/app/set_ldap_password.py:527
+#: lib/pp_admintools/app/remove_ldap_user.py:309 lib/pp_admintools/app/set_ldap_password.py:531
msgid "Got DN {dn!r} for user {user!r} in LDAP instance {inst}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:317 lib/pp_admintools/app/set_ldap_password.py:532
+#: lib/pp_admintools/app/remove_ldap_user.py:316 lib/pp_admintools/app/set_ldap_password.py:536
msgid "Found {nr} entries for user {u!r} in LDAP instance {i}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:329 lib/pp_admintools/app/set_ldap_password.py:546
+#: lib/pp_admintools/app/remove_ldap_user.py:328 lib/pp_admintools/app/set_ldap_password.py:550
msgid "Did not found user {user!r} in LDAP instance {inst}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:338
+#: lib/pp_admintools/app/remove_ldap_user.py:337
msgid "Deactivating all given users from {} ..."
msgstr "Deactivating all given users from {} …"
-#: lib/pp_admintools/app/remove_ldap_user.py:340
+#: lib/pp_admintools/app/remove_ldap_user.py:339
msgid "Removing all given users from {} ..."
msgstr "Removing all given users from {} …"
-#: lib/pp_admintools/app/remove_ldap_user.py:355
+#: lib/pp_admintools/app/remove_ldap_user.py:354
msgid "Deactivating user {dn!r} from {inst} ..."
msgstr "Deactivating user {dn!r} from {inst} …"
-#: lib/pp_admintools/app/remove_ldap_user.py:358
+#: lib/pp_admintools/app/remove_ldap_user.py:357
msgid "Removing user {dn!r} from {inst} ..."
msgstr "Removing user {dn!r} from {inst} …"
-#: lib/pp_admintools/app/remove_ldap_user.py:364
+#: lib/pp_admintools/app/remove_ldap_user.py:363
msgid "Attributes of {!r}:"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:385
+#: lib/pp_admintools/app/remove_ldap_user.py:384
msgid "{c} on removing user {dn!r}: {e}"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:391
+#: lib/pp_admintools/app/remove_ldap_user.py:390
msgid "User {dn!r} successful deactivated on {inst}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:394
+#: lib/pp_admintools/app/remove_ldap_user.py:393
msgid "User {dn!r} successful removed from {inst}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:420
+#: lib/pp_admintools/app/remove_ldap_user.py:419
msgid "Updating user info for {dn!r} on {inst} ..."
msgstr "Updating user info for {dn!r} on {inst} …"
-#: lib/pp_admintools/app/remove_ldap_user.py:425 lib/pp_admintools/app/set_ldap_password.py:610
+#: lib/pp_admintools/app/remove_ldap_user.py:424 lib/pp_admintools/app/set_ldap_password.py:610
msgid "{c} on deactivating user {dn!r}: {e}"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:441
+#: lib/pp_admintools/app/remove_ldap_user.py:440
msgid "Did not found any group memberships of {dn!r} in {inst}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:447 lib/pp_admintools/app/remove_ldap_user.py:474
-#: lib/pp_admintools/app/remove_ldap_user.py:505 lib/pp_admintools/app/remove_ldap_user.py:536
+#: lib/pp_admintools/app/remove_ldap_user.py:446 lib/pp_admintools/app/remove_ldap_user.py:473
+#: lib/pp_admintools/app/remove_ldap_user.py:504 lib/pp_admintools/app/remove_ldap_user.py:535
msgid "Removing user {u!r} from group {g!r} ..."
msgstr "Removing user {u!r} from group {g!r} …"
-#: lib/pp_admintools/app/remove_ldap_user.py:452 lib/pp_admintools/app/remove_ldap_user.py:479
-#: lib/pp_admintools/app/remove_ldap_user.py:510 lib/pp_admintools/app/remove_ldap_user.py:541
+#: lib/pp_admintools/app/remove_ldap_user.py:451 lib/pp_admintools/app/remove_ldap_user.py:478
+#: lib/pp_admintools/app/remove_ldap_user.py:509 lib/pp_admintools/app/remove_ldap_user.py:540
msgid "{c} on removing user {dn!r} from group {g!r}: {e}"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:468
+#: lib/pp_admintools/app/remove_ldap_user.py:467
msgid "Did not found any unique group memberships of {dn!r} in {inst}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:492
+#: lib/pp_admintools/app/remove_ldap_user.py:491
msgid "Deleting user {uid!r} from all POSIX groups in {inst}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:499
+#: lib/pp_admintools/app/remove_ldap_user.py:498
msgid "Did not found any POSIX group memberships of {uid!r} in {inst}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:523
+#: lib/pp_admintools/app/remove_ldap_user.py:522
msgid "Deleting user {uid!r} from all sudo groups in {inst}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:530
+#: lib/pp_admintools/app/remove_ldap_user.py:529
msgid "Did not found any sudo group memberships of {uid!r} in {inst}."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:100
+#: lib/pp_admintools/app/set_ldap_password.py:104
msgid "The ancient and notorious 3 DES crypt method."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:101 lib/pp_admintools/app/set_ldap_password.py:104
+#: lib/pp_admintools/app/set_ldap_password.py:105 lib/pp_admintools/app/set_ldap_password.py:108
msgid "Pure {} hashing method."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:102 lib/pp_admintools/app/set_ldap_password.py:105
-#: lib/pp_admintools/app/set_ldap_password.py:107 lib/pp_admintools/app/set_ldap_password.py:109
+#: lib/pp_admintools/app/set_ldap_password.py:106 lib/pp_admintools/app/set_ldap_password.py:109
+#: lib/pp_admintools/app/set_ldap_password.py:111 lib/pp_admintools/app/set_ldap_password.py:113
msgid "A {} based hashing algorithm."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:103 lib/pp_admintools/app/set_ldap_password.py:106
-#: lib/pp_admintools/app/set_ldap_password.py:108 lib/pp_admintools/app/set_ldap_password.py:110
+#: lib/pp_admintools/app/set_ldap_password.py:107 lib/pp_admintools/app/set_ldap_password.py:110
+#: lib/pp_admintools/app/set_ldap_password.py:112 lib/pp_admintools/app/set_ldap_password.py:114
msgid "Salted {} hashing method."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:111
+#: lib/pp_admintools/app/set_ldap_password.py:115
msgid "A hashing method derived from {} with additional computing rounds."
msgstr ""
msgid "Do not check the quality of the new password with the {} library."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:246
-msgid "SCHEMA"
-msgstr ""
-
-#: lib/pp_admintools/app/set_ldap_password.py:247
+#: lib/pp_admintools/app/set_ldap_password.py:245
msgid ""
"The schema (hashing method) to use to hash the new password. It is possible to give here the "
"value {val_list!r}, then all possible schemes are shown and exit. Default: {default!r}."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:251
+#: lib/pp_admintools/app/set_ldap_password.py:250
msgid "If you are not using an admin account, then the password will hashed only by the default schema."
msgstr ""
#: lib/pp_admintools/app/set_ldap_password.py:255
+msgid "SCHEMA"
+msgstr ""
+
+#: lib/pp_admintools/app/set_ldap_password.py:259
msgid ""
"The user, which password in the given LDAP instance should be changed. It may be given by its "
"Uid (the alphanumeric POSIX name), its mail address or its LDAP DN."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:260
+#: lib/pp_admintools/app/set_ldap_password.py:264
msgid "If not given, then your current user name {!r} will be used."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:263
+#: lib/pp_admintools/app/set_ldap_password.py:267
msgid ""
"If you are using a readonly LDAP instance or an instance w/o admin access, then you must provide"
" somehow the current password of the user to change."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:316
+#: lib/pp_admintools/app/set_ldap_password.py:320
msgid "Could not detect your current login name."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:321
+#: lib/pp_admintools/app/set_ldap_password.py:325
msgid "The user {!r} will never be managed by LDAP."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:357
+#: lib/pp_admintools/app/set_ldap_password.py:361
msgid "Usable Hashing schemes:"
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:366
+#: lib/pp_admintools/app/set_ldap_password.py:370
msgid "This schema cannot be used for authentication on a current freeradius server."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:370
+#: lib/pp_admintools/app/set_ldap_password.py:374
msgid "This is the default schema."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:385
+#: lib/pp_admintools/app/set_ldap_password.py:389
msgid "Using LDAP instance {inst!r} - {url}."
msgstr "Using LDAP instance {inst!r} - {url}."
-#: lib/pp_admintools/app/set_ldap_password.py:389
+#: lib/pp_admintools/app/set_ldap_password.py:393
msgid "Current password of user {!r}:"
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:390 lib/pp_admintools/app/set_ldap_password.py:410
+#: lib/pp_admintools/app/set_ldap_password.py:394 lib/pp_admintools/app/set_ldap_password.py:414
msgid "Repeat password:"
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:403
+#: lib/pp_admintools/app/set_ldap_password.py:407
msgid "Non admin users must use the default schema {!r} for hashing their password."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:409
+#: lib/pp_admintools/app/set_ldap_password.py:413
msgid "New password of user {!r}:"
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:416
+#: lib/pp_admintools/app/set_ldap_password.py:420
msgid "Checking the quality of the new password was disabled."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:419
+#: lib/pp_admintools/app/set_ldap_password.py:423
msgid "Testing quality of new password ..."
msgstr "Testing quality of new password …"
-#: lib/pp_admintools/app/set_ldap_password.py:423
+#: lib/pp_admintools/app/set_ldap_password.py:427
msgid "Quality of the new password is not sufficient:"
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:428
+#: lib/pp_admintools/app/set_ldap_password.py:432
msgid "Cannot testing the quality of the new password, because the Python module {!r} is not installed."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:455
+#: lib/pp_admintools/app/set_ldap_password.py:459
msgid "Unbinding user connection from LDAP server {} ..."
msgstr "Unbinding user connection from LDAP server {} …"
-#: lib/pp_admintools/app/set_ldap_password.py:466
+#: lib/pp_admintools/app/set_ldap_password.py:470
msgid "Testing connect to LDAP-Server {url} with current user {dn!r} and password ..."
msgstr "Testing connect to LDAP-Server {url} with current user {dn!r} and password …"
-#: lib/pp_admintools/app/set_ldap_password.py:478
+#: lib/pp_admintools/app/set_ldap_password.py:482
msgid "Successful connected as {dn!r} to {url}."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:484
+#: lib/pp_admintools/app/set_ldap_password.py:488
msgid "Could not connect to {url} as {dn!r}: {e}"
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:495
+#: lib/pp_admintools/app/set_ldap_password.py:499
msgid "Trying to get current password hash of user {!r} ..."
msgstr "Trying to get current password hash of user {!r} …"
-#: lib/pp_admintools/app/set_ldap_password.py:534
+#: lib/pp_admintools/app/set_ldap_password.py:538
msgid ""
"Please use another username, or use the correct DN from the following list as a parameter for "
"this script instead of the username:"
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:551
+#: lib/pp_admintools/app/set_ldap_password.py:555
msgid "Changing the password of user {dn!r} in LDAP instance {inst}."
msgstr "Changing the password of user {dn!r} in LDAP instance {inst}."
-#: lib/pp_admintools/app/set_ldap_password.py:558
+#: lib/pp_admintools/app/set_ldap_password.py:562
msgid "Setting password of {dn!r} with hashing schema {schema!r}."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:560
+#: lib/pp_admintools/app/set_ldap_password.py:564
msgid "Setting password of '{dn}' with hashing schema '{schema}' ..."
msgstr "Setting password of '{dn}' with hashing schema '{schema}' …"
-#: lib/pp_admintools/app/set_ldap_password.py:565
+#: lib/pp_admintools/app/set_ldap_password.py:569
msgid "Current password hash: '{}'."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:568
+#: lib/pp_admintools/app/set_ldap_password.py:572
msgid "The user '{}' has currently no password."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:572
+#: lib/pp_admintools/app/set_ldap_password.py:576
msgid "Used schema: {!r}."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:574
+#: lib/pp_admintools/app/set_ldap_password.py:578
msgid "New password hash: '{}'."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:578
+#: lib/pp_admintools/app/set_ldap_password.py:582
msgid "Apply new password? [{yes}/{no}]?"
msgstr ""
msgid "Value {v!r} for a {what} port must be greater than 0 and less than {max}."
msgstr ""
+#: lib/pp_admintools/argparse_actions.py:65 lib/pp_admintools/argparse_actions.py:95
+msgid "Got a {c} for converting {v!r} into an integer value: {e}"
+msgstr ""
+
+#: lib/pp_admintools/argparse_actions.py:70
+msgid "The option must not be negative (given: {})."
+msgstr ""
+
+#: lib/pp_admintools/argparse_actions.py:101 lib/pp_admintools/argparse_actions.py:138
+msgid "The option must be greater or equal to {m} (given: {v})."
+msgstr ""
+
+#: lib/pp_admintools/argparse_actions.py:107 lib/pp_admintools/argparse_actions.py:143
+msgid "The option must be less or equal to {m} (given: {v})."
+msgstr ""
+
+#: lib/pp_admintools/argparse_actions.py:133
+msgid "Got a {c} for converting {v!r} into a float value: {e}"
+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}:"
msgid "Evaluated configuration:"
msgstr ""
-#: lib/pp_admintools/config/ldap.py:162
+#: lib/pp_admintools/config/ldap.py:174
msgid "Invalid port {!r} for LDAP server given."
msgstr ""
-#: lib/pp_admintools/config/ldap.py:175
+#: lib/pp_admintools/config/ldap.py:187
msgid "An empty Base DN for LDAP searches is not allowed."
msgstr ""
-#: lib/pp_admintools/config/ldap.py:265
+#: lib/pp_admintools/config/ldap.py:277
msgid "Invalid production tier {!r} given."
msgstr ""
-#: lib/pp_admintools/config/ldap.py:408
+#: lib/pp_admintools/config/ldap.py:332
+msgid "Invalid value {val!r} in section {sec!r} for a LDAP {what}."
+msgstr ""
+
+#: lib/pp_admintools/config/ldap.py:401
+msgid "Unknown LDAP configuration key {key} found in section {sec!r}."
+msgstr ""
+
+#: lib/pp_admintools/config/ldap.py:505
msgid "Evaluating LDAP config ..."
msgstr "Evaluating LDAP config …"
-#: lib/pp_admintools/config/ldap.py:412
+#: lib/pp_admintools/config/ldap.py:509
msgid "Evaluating LDAP section {!r} ..."
msgstr "Evaluating LDAP section {!r} …"
-#: lib/pp_admintools/config/ldap.py:429
+#: lib/pp_admintools/config/ldap.py:526
msgid "Value {!r} for a timeout is invalid."
msgstr ""
-#: lib/pp_admintools/config/ldap.py:449
+#: lib/pp_admintools/config/ldap.py:546
msgid "Reading configuration of LDAP instance {!r} ..."
msgstr "Reading configuration of LDAP instance {!r} …"
-#: lib/pp_admintools/config/ldap.py:457
-msgid "Invalid value {val!r} in section {sec!r} for a LDAP {what}."
-msgstr ""
-
-#: lib/pp_admintools/config/ldap.py:519
-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 ""
"Project-Id-Version: pp_admintools 0.9.1\n"
"Report-Msgid-Bugs-To: frank.brehm@pixelpark.com\n"
-"POT-Creation-Date: 2022-10-17 17:45+0200\n"
+"POT-Creation-Date: 2022-10-18 18:12+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"
msgid "Options for {}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:267
+#: lib/pp_admintools/app/dns_deploy_zones.py:266
msgid "Keep a backup file for each changed configuration file."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:272
+#: lib/pp_admintools/app/dns_deploy_zones.py:271
msgid "Keeping the temporary directory instead of removing it at the end (e.g. for debugging purposes)"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:300
+#: lib/pp_admintools/app/dns_deploy_zones.py:299
msgid "Post init phase."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:304
+#: lib/pp_admintools/app/dns_deploy_zones.py:303
msgid "My own post init phase."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:320
+#: lib/pp_admintools/app/dns_deploy_zones.py:319
msgid "Unknown time zone: {!r}."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:340
+#: lib/pp_admintools/app/dns_deploy_zones.py:339
msgid "You must be root to execute this script."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:342
+#: lib/pp_admintools/app/dns_deploy_zones.py:341
msgid "But in simulation mode we are continuing nevertheless."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:352
+#: lib/pp_admintools/app/dns_deploy_zones.py:351
msgid "Using the global DNS master is not supported, please use 'local' or 'public'"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:360
+#: lib/pp_admintools/app/dns_deploy_zones.py:359
msgid "Starting: {}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:367
+#: lib/pp_admintools/app/dns_deploy_zones.py:366
msgid "Could not occupy pidfile: {}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:392
+#: lib/pp_admintools/app/dns_deploy_zones.py:391
msgid "Ending: {}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:397
+#: lib/pp_admintools/app/dns_deploy_zones.py:396
msgid "Cleaning up ..."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:401
+#: lib/pp_admintools/app/dns_deploy_zones.py:400
msgid "Searching for {!r}."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:404
+#: lib/pp_admintools/app/dns_deploy_zones.py:403
msgid "Keep existing backup file {!r}."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:406
+#: lib/pp_admintools/app/dns_deploy_zones.py:405
msgid "Removing {!r} ..."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:412
+#: lib/pp_admintools/app/dns_deploy_zones.py:411
msgid "Error removing {p!r} - {c}: {e}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:417
+#: lib/pp_admintools/app/dns_deploy_zones.py:416
msgid "Temporary directory {!r} will not be removed. It's on yours to remove it manually."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:422
+#: lib/pp_admintools/app/dns_deploy_zones.py:421
msgid "Destroying temporary directory {!r} ..."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:431
+#: lib/pp_admintools/app/dns_deploy_zones.py:430
msgid "Temporary directory: {!r}."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:436
+#: lib/pp_admintools/app/dns_deploy_zones.py:435
msgid "Temporary zones conf: {!r}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:441
+#: lib/pp_admintools/app/dns_deploy_zones.py:440
msgid "Trying to get all keys from named.conf ..."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:447 lib/pp_admintools/app/dns_deploy_zones.py:801
-#: lib/pp_admintools/app/dns_deploy_zones.py:837 lib/pp_admintools/app/dns_deploy_zones.py:869
-#: lib/pp_admintools/app/dns_deploy_zones.py:904 lib/pp_admintools/app/dns_deploy_zones.py:939
+#: lib/pp_admintools/app/dns_deploy_zones.py:446 lib/pp_admintools/app/dns_deploy_zones.py:800
+#: lib/pp_admintools/app/dns_deploy_zones.py:836 lib/pp_admintools/app/dns_deploy_zones.py:868
+#: lib/pp_admintools/app/dns_deploy_zones.py:903 lib/pp_admintools/app/dns_deploy_zones.py:938
#: lib/pp_admintools/app/mail.py:326
msgid "Executing: {}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:453 lib/pp_admintools/app/dns_deploy_zones.py:807
-#: lib/pp_admintools/app/ldap.py:766 lib/pp_admintools/app/ldap.py:819
-#: lib/pp_admintools/app/ldap.py:872 lib/pp_admintools/app/ldap.py:1103
-#: lib/pp_admintools/app/ldap.py:1137 lib/pp_admintools/app/ldap.py:1171
-#: lib/pp_admintools/app/ldap.py:1205
+#: lib/pp_admintools/app/dns_deploy_zones.py:452 lib/pp_admintools/app/dns_deploy_zones.py:806
+#: lib/pp_admintools/app/ldap.py:787 lib/pp_admintools/app/ldap.py:840
+#: lib/pp_admintools/app/ldap.py:893 lib/pp_admintools/app/ldap.py:1124
+#: lib/pp_admintools/app/ldap.py:1158 lib/pp_admintools/app/ldap.py:1192
+#: lib/pp_admintools/app/ldap.py:1226
msgid "Result:"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:494 lib/pp_admintools/app/dns_deploy_zones.py:496
+#: lib/pp_admintools/app/dns_deploy_zones.py:493 lib/pp_admintools/app/dns_deploy_zones.py:495
msgid "Found named keys:"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:496 lib/pp_admintools/app/dns_deploy_zones.py:527
+#: lib/pp_admintools/app/dns_deploy_zones.py:495 lib/pp_admintools/app/dns_deploy_zones.py:526
msgid "None"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:501
+#: lib/pp_admintools/app/dns_deploy_zones.py:500
msgid "Generating {} ..."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:525 lib/pp_admintools/app/dns_deploy_zones.py:527
+#: lib/pp_admintools/app/dns_deploy_zones.py:524 lib/pp_admintools/app/dns_deploy_zones.py:526
msgid "Collected server configuration:"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:548
+#: lib/pp_admintools/app/dns_deploy_zones.py:547
msgid "Generated file {!r}:"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:564
+#: lib/pp_admintools/app/dns_deploy_zones.py:563
msgid "Pure local zone {!r} will not be considered."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:596
+#: lib/pp_admintools/app/dns_deploy_zones.py:595
msgid "Key {k!r} for zone {z!r} not found in named configuration."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:626
+#: lib/pp_admintools/app/dns_deploy_zones.py:625
msgid "Got IPv4 tuples: {}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:650
+#: lib/pp_admintools/app/dns_deploy_zones.py:649
msgid "Got IPv6 tokens: {}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:657
+#: lib/pp_admintools/app/dns_deploy_zones.py:656
msgid "Comparing generated files with existing ones."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:664
+#: lib/pp_admintools/app/dns_deploy_zones.py:663
msgid "Files to replace:"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:670
+#: lib/pp_admintools/app/dns_deploy_zones.py:669
msgid "Source file not defined."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:672
+#: lib/pp_admintools/app/dns_deploy_zones.py:671
msgid "Target file not defined."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:674
+#: lib/pp_admintools/app/dns_deploy_zones.py:673
msgid "Comparing {one!r} with {two!r} ..."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:678 lib/pp_admintools/app/dns_deploy_zones.py:687
+#: lib/pp_admintools/app/dns_deploy_zones.py:677 lib/pp_admintools/app/dns_deploy_zones.py:686
msgid "{what} {f!r} does not exists."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:679 lib/pp_admintools/app/dns_deploy_zones.py:683
+#: lib/pp_admintools/app/dns_deploy_zones.py:678 lib/pp_admintools/app/dns_deploy_zones.py:682
msgid "Source file"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:682 lib/pp_admintools/app/dns_deploy_zones.py:692
+#: lib/pp_admintools/app/dns_deploy_zones.py:681 lib/pp_admintools/app/dns_deploy_zones.py:691
msgid "{what} {f!r} is not a regular file."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:688 lib/pp_admintools/app/dns_deploy_zones.py:693
+#: lib/pp_admintools/app/dns_deploy_zones.py:687 lib/pp_admintools/app/dns_deploy_zones.py:692
msgid "Target file"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:699 lib/pp_admintools/app/dns_deploy_zones.py:716
+#: lib/pp_admintools/app/dns_deploy_zones.py:698 lib/pp_admintools/app/dns_deploy_zones.py:715
msgid "Reading {!r} ..."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:709 lib/pp_admintools/app/dns_deploy_zones.py:726
+#: lib/pp_admintools/app/dns_deploy_zones.py:708 lib/pp_admintools/app/dns_deploy_zones.py:725
msgid "Cleaned version of {!r}:"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:731
+#: lib/pp_admintools/app/dns_deploy_zones.py:730
msgid ""
"Source file {sf!r} has different number essential lines ({sl}) than the target file {tf!r} ({tl}"
" lines)."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:740
+#: lib/pp_admintools/app/dns_deploy_zones.py:739
msgid "Source file {sf!r} has a different content than the target file {tf!r}."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:752
+#: lib/pp_admintools/app/dns_deploy_zones.py:751
msgid "No replacement of any config files necessary."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:755
+#: lib/pp_admintools/app/dns_deploy_zones.py:754
msgid "Start replacing of config files ..."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:763 lib/pp_admintools/app/dns_deploy_zones.py:773
+#: lib/pp_admintools/app/dns_deploy_zones.py:762 lib/pp_admintools/app/dns_deploy_zones.py:772
msgid "Copying {frm!r} => {to!r} ..."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:769
+#: lib/pp_admintools/app/dns_deploy_zones.py:768
msgid "All backuped config files:"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:781
+#: lib/pp_admintools/app/dns_deploy_zones.py:780
msgid "Restoring of original config files because of an exception."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:785
+#: lib/pp_admintools/app/dns_deploy_zones.py:784
msgid "Moving {frm!r} => {to!r} ..."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:791
+#: lib/pp_admintools/app/dns_deploy_zones.py:790
msgid "Could not find backup file {!r}."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:796
+#: lib/pp_admintools/app/dns_deploy_zones.py:795
msgid "Checking syntax correctness of named.conf ..."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:817
+#: lib/pp_admintools/app/dns_deploy_zones.py:816
msgid "Reload or restart of named is not necessary."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:822
+#: lib/pp_admintools/app/dns_deploy_zones.py:821
msgid "Named is not running, please start it manually."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:833
+#: lib/pp_admintools/app/dns_deploy_zones.py:832
msgid "Checking, whether named is running ..."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:851 lib/pp_admintools/app/dns_deploy_zones.py:886
-#: lib/pp_admintools/app/dns_deploy_zones.py:921 lib/pp_admintools/app/dns_deploy_zones.py:956
+#: lib/pp_admintools/app/dns_deploy_zones.py:850 lib/pp_admintools/app/dns_deploy_zones.py:885
+#: lib/pp_admintools/app/dns_deploy_zones.py:920 lib/pp_admintools/app/dns_deploy_zones.py:955
msgid "Return value: {!r}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:853 lib/pp_admintools/app/dns_deploy_zones.py:855
-#: lib/pp_admintools/app/dns_deploy_zones.py:888 lib/pp_admintools/app/dns_deploy_zones.py:890
-#: lib/pp_admintools/app/dns_deploy_zones.py:923 lib/pp_admintools/app/dns_deploy_zones.py:925
-#: lib/pp_admintools/app/dns_deploy_zones.py:958 lib/pp_admintools/app/dns_deploy_zones.py:960
+#: lib/pp_admintools/app/dns_deploy_zones.py:852 lib/pp_admintools/app/dns_deploy_zones.py:854
+#: lib/pp_admintools/app/dns_deploy_zones.py:887 lib/pp_admintools/app/dns_deploy_zones.py:889
+#: lib/pp_admintools/app/dns_deploy_zones.py:922 lib/pp_admintools/app/dns_deploy_zones.py:924
+#: lib/pp_admintools/app/dns_deploy_zones.py:957 lib/pp_admintools/app/dns_deploy_zones.py:959
msgid "Output on {}"
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:865
+#: lib/pp_admintools/app/dns_deploy_zones.py:864
msgid "Starting {} ..."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:900
+#: lib/pp_admintools/app/dns_deploy_zones.py:899
msgid "Restarting {} ..."
msgstr ""
-#: lib/pp_admintools/app/dns_deploy_zones.py:935
+#: lib/pp_admintools/app/dns_deploy_zones.py:934
msgid "Reloading {} ..."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:108 lib/pp_admintools/app/ldap.py:211
+#: lib/pp_admintools/app/ldap.py:109 lib/pp_admintools/app/ldap.py:213
msgid "The path {!r} must be an absolute path."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:114 lib/pp_admintools/app/ldap.py:215
-#: lib/pp_admintools/app/ldap.py:1219
+#: lib/pp_admintools/app/ldap.py:115 lib/pp_admintools/app/ldap.py:217
+#: lib/pp_admintools/app/ldap.py:1240
msgid "The file {!r} does not exists."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:118 lib/pp_admintools/app/ldap.py:219
-#: lib/pp_admintools/app/ldap.py:1224
+#: lib/pp_admintools/app/ldap.py:119 lib/pp_admintools/app/ldap.py:221
+#: lib/pp_admintools/app/ldap.py:1245
msgid "The given path {!r} exists, but is not a regular file."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:122 lib/pp_admintools/app/ldap.py:223
-#: lib/pp_admintools/app/ldap.py:1229
+#: lib/pp_admintools/app/ldap.py:123 lib/pp_admintools/app/ldap.py:225
+#: lib/pp_admintools/app/ldap.py:1250
msgid "The given file {!r} is not readable."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:143
+#: lib/pp_admintools/app/ldap.py:144
msgid "a port number must be greater than zero and less or equal to {}."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:148
+#: lib/pp_admintools/app/ldap.py:149
msgid "Wrong port number {!r}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:256
+#: lib/pp_admintools/app/ldap.py:258
msgid "LDAP options"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:258
+#: lib/pp_admintools/app/ldap.py:260
msgid "Options for the default LDAP connection"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:260
+#: lib/pp_admintools/app/ldap.py:262
msgid "Options fo LDAP connections"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:267 lib/pp_admintools/app/remove_ldap_user.py:280
-#: lib/pp_admintools/app/set_ldap_password.py:579
+#: lib/pp_admintools/app/ldap.py:269 lib/pp_admintools/app/remove_ldap_user.py:279
+#: lib/pp_admintools/app/set_ldap_password.py:583
msgid "No"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:269
+#: lib/pp_admintools/app/ldap.py:271
msgid "Yes"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:275
+#: lib/pp_admintools/app/ldap.py:277
msgid "HOST"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:276
+#: lib/pp_admintools/app/ldap.py:278
msgid "Hostname or address of the LDAP server to use. Default: {!r}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:283
+#: lib/pp_admintools/app/ldap.py:285
msgid "Use ldaps to connect to the LDAP server. Default: {}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:288 lib/pp_admintools/app/mail.py:261
-#: lib/pp_admintools/app/pdns.py:274
+#: lib/pp_admintools/app/ldap.py:290 lib/pp_admintools/app/mail.py:261
+#: lib/pp_admintools/app/pdns.py:272
msgid "PORT"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:290
+#: lib/pp_admintools/app/ldap.py:292
msgid "The port number to connect to the LDAP server. Default: {}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:296
+#: lib/pp_admintools/app/ldap.py:298
msgid "The base DN used as the root for the LDAP searches. Default: {!r}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:303
+#: lib/pp_admintools/app/ldap.py:305
msgid "The Bind DN to use to connect to the LDAP server. Default: {!r}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:311 lib/pp_admintools/app/set_ldap_password.py:204
+#: lib/pp_admintools/app/ldap.py:313 lib/pp_admintools/app/set_ldap_password.py:204
#: lib/pp_admintools/app/set_ldap_password.py:205 lib/pp_admintools/app/set_ldap_password.py:222
#: lib/pp_admintools/app/set_ldap_password.py:225
msgid "PASSWORD"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:312
+#: lib/pp_admintools/app/ldap.py:314
msgid "Use PASSWORD as the password for simple LDAP authentication."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:317
+#: lib/pp_admintools/app/ldap.py:319
msgid ""
"Prompt for simple LDAP authentication. This is used instead of specifying the password on the "
"command line."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:323 lib/pp_admintools/app/set_ldap_password.py:216
+#: lib/pp_admintools/app/ldap.py:325 lib/pp_admintools/app/set_ldap_password.py:216
#: lib/pp_admintools/app/set_ldap_password.py:218
msgid "PASSWORD_FILE"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:325
+#: lib/pp_admintools/app/ldap.py:327
msgid "Use contents of PASSWORD_FILE as the password for simple authentication."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:333 lib/pp_admintools/app/pdns.py:248
+#: lib/pp_admintools/app/ldap.py:335 lib/pp_admintools/app/pdns.py:246
msgid "INSTANCE"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:336
-msgid ""
-"The LDAP instance (LDAP cluster) from configuration, where to execute this script. If not given,"
-" then the instance {!r} will be used."
+#: lib/pp_admintools/app/ldap.py:338
+msgid "If not given, then the instance {!r} will be used."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:339
+#: lib/pp_admintools/app/ldap.py:341
+msgid "The LDAP instance (LDAP cluster) from configuration, where to execute this script."
+msgstr ""
+
+#: lib/pp_admintools/app/ldap.py:345
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."
+"are shown, and the application is exiting."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:358
+#: lib/pp_admintools/app/ldap.py:371 lib/pp_admintools/app/mirror_ldap.py:89
msgid "SECONDS"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:360
+#: lib/pp_admintools/app/ldap.py:373
msgid "Using the given timeout in seconds for all LDAP operations. Default: {}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:394
+#: lib/pp_admintools/app/ldap.py:407
msgid "Checking given instances."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:398
+#: lib/pp_admintools/app/ldap.py:411
msgid "Given insts:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:449
+#: lib/pp_admintools/app/ldap.py:462
msgid "Configured LDAP instances:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:466
+#: lib/pp_admintools/app/ldap.py:479
msgid "Verifying given instances ..."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:477
+#: lib/pp_admintools/app/ldap.py:492
msgid "Used filter:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:507 lib/pp_admintools/app/remove_ldap_user.py:181
-msgid "LDAP instance {!r} not found in configuration."
+#: lib/pp_admintools/app/ldap.py:526
+msgid "LDAP instance {!r} not found in configuration or is not usable."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:515
+#: lib/pp_admintools/app/ldap.py:536
msgid "LDAP instances to use:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:564
+#: lib/pp_admintools/app/ldap.py:585
msgid "Preparations ..."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:567
+#: lib/pp_admintools/app/ldap.py:588
msgid "Open all necessary LDAP connections ..."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:581
+#: lib/pp_admintools/app/ldap.py:602
msgid "Password of user {usr} on LDAP instance {inst}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:590
+#: lib/pp_admintools/app/ldap.py:611
msgid "Info about LDAP server {}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:600
+#: lib/pp_admintools/app/ldap.py:621
msgid "Trying to get LDAP server object for {} ..."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:616
+#: lib/pp_admintools/app/ldap.py:637
msgid "Connect options to server {!r}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:623
+#: lib/pp_admintools/app/ldap.py:644
msgid "LDAP server {s}: {re}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:637
+#: lib/pp_admintools/app/ldap.py:658
msgid "Connecting to LDAP server {url} as {dn!r} ..."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:649
+#: lib/pp_admintools/app/ldap.py:670
msgid "Finishing ..."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:658
+#: lib/pp_admintools/app/ldap.py:679
msgid "Disconnecting from all remaining LDAP instances ..."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:671
+#: lib/pp_admintools/app/ldap.py:692
msgid "Unbinding from LDAP server {!r} ..."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:678
+#: lib/pp_admintools/app/ldap.py:699
msgid "Disconnecting from LDAP server {!r} ..."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:687
+#: lib/pp_admintools/app/ldap.py:708
msgid "Trying to evaluate DN of user {user!r} in LDAP instance {inst} ..."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:692
+#: lib/pp_admintools/app/ldap.py:713
msgid "Trying to evaluate DN of user {u!r} as a mail address ..."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:699
+#: lib/pp_admintools/app/ldap.py:720
msgid "Trying to evaluate DN of user {u!r} as a LDAP DN ..."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:706
+#: lib/pp_admintools/app/ldap.py:727
msgid "Trying to evaluate DN of user {u!r} as a UID (Posix user name) ..."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:715 lib/pp_admintools/app/remove_ldap_user.py:300
+#: lib/pp_admintools/app/ldap.py:736 lib/pp_admintools/app/remove_ldap_user.py:299
msgid "Empty user given."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:718
+#: lib/pp_admintools/app/ldap.py:739
msgid "Trying to evaluate DN of user {u!r} as a CN ({c}) ..."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:748 lib/pp_admintools/app/ldap.py:801
-#: lib/pp_admintools/app/ldap.py:854 lib/pp_admintools/app/ldap.py:1088
-#: lib/pp_admintools/app/ldap.py:1122 lib/pp_admintools/app/ldap.py:1156
-#: lib/pp_admintools/app/ldap.py:1190
+#: lib/pp_admintools/app/ldap.py:769 lib/pp_admintools/app/ldap.py:822
+#: lib/pp_admintools/app/ldap.py:875 lib/pp_admintools/app/ldap.py:1109
+#: lib/pp_admintools/app/ldap.py:1143 lib/pp_admintools/app/ldap.py:1177
+#: lib/pp_admintools/app/ldap.py:1211
msgid "Searching in {uri}/{bdn} with filter: {fltr}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:759
+#: lib/pp_admintools/app/ldap.py:780
msgid "Result of searching for mail address {m!r}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:763 lib/pp_admintools/app/ldap.py:816
-#: lib/pp_admintools/app/ldap.py:869 lib/pp_admintools/app/ldap.py:957
-#: lib/pp_admintools/app/ldap.py:1100 lib/pp_admintools/app/ldap.py:1134
-#: lib/pp_admintools/app/ldap.py:1168 lib/pp_admintools/app/ldap.py:1202
+#: lib/pp_admintools/app/ldap.py:784 lib/pp_admintools/app/ldap.py:837
+#: lib/pp_admintools/app/ldap.py:890 lib/pp_admintools/app/ldap.py:978
+#: lib/pp_admintools/app/ldap.py:1121 lib/pp_admintools/app/ldap.py:1155
+#: lib/pp_admintools/app/ldap.py:1189 lib/pp_admintools/app/ldap.py:1223
msgid "Got a response entry:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:770
+#: lib/pp_admintools/app/ldap.py:791
msgid "User with mail address {m!r} not found in {uri}/{bdn}."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:812
+#: lib/pp_admintools/app/ldap.py:833
msgid "Result of searching for uid {u!r}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:823
+#: lib/pp_admintools/app/ldap.py:844
msgid "User with uid {u!r} not found in {uri}/{bdn}."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:865
+#: lib/pp_admintools/app/ldap.py:886
msgid "Result of searching for CN {cn!r}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:876
+#: lib/pp_admintools/app/ldap.py:897
msgid "User with cn {cn!r} not found in {uri}/{bdn}."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:893 lib/pp_admintools/app/set_ldap_password.py:504
+#: lib/pp_admintools/app/ldap.py:914 lib/pp_admintools/app/set_ldap_password.py:508
msgid "User with DN {dn!r} not found in {uri}."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:911
+#: lib/pp_admintools/app/ldap.py:932
msgid "ObjectClasses of {dn!r}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:921
+#: lib/pp_admintools/app/ldap.py:942
msgid "Entry {dn!r} in {uri} seems not to be an account."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:943
+#: lib/pp_admintools/app/ldap.py:964
msgid "Searching DN {dn!r} in {uri}."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:953
+#: lib/pp_admintools/app/ldap.py:974
msgid "Result of searching for DN {dn!r}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:961
+#: lib/pp_admintools/app/ldap.py:982
msgid "Entry with DN {dn!r} not found in {uri}."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1002
+#: lib/pp_admintools/app/ldap.py:1023
msgid "Applying changes on {uri} to DN {dn!r}:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1007
+#: lib/pp_admintools/app/ldap.py:1028
msgid "Simulation mode - changes are not applied."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1013
+#: lib/pp_admintools/app/ldap.py:1034
msgid "Modification NOT successfull - {c}: {e}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1014 lib/pp_admintools/app/remove_ldap_user.py:427
-#: lib/pp_admintools/app/remove_ldap_user.py:454 lib/pp_admintools/app/remove_ldap_user.py:481
-#: lib/pp_admintools/app/remove_ldap_user.py:512 lib/pp_admintools/app/remove_ldap_user.py:543
+#: lib/pp_admintools/app/ldap.py:1035 lib/pp_admintools/app/remove_ldap_user.py:426
+#: lib/pp_admintools/app/remove_ldap_user.py:453 lib/pp_admintools/app/remove_ldap_user.py:480
+#: lib/pp_admintools/app/remove_ldap_user.py:511 lib/pp_admintools/app/remove_ldap_user.py:542
#: lib/pp_admintools/app/set_ldap_password.py:612
msgid "Changes:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1026
+#: lib/pp_admintools/app/ldap.py:1047
msgid "Modification status: {!r}."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1028
+#: lib/pp_admintools/app/ldap.py:1049
msgid "Result of modifying:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1031
+#: lib/pp_admintools/app/ldap.py:1052
msgid "Modification NOT successful: {desc} - {msg}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1035
+#: lib/pp_admintools/app/ldap.py:1056
msgid "Modification successful."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1045
+#: lib/pp_admintools/app/ldap.py:1066
msgid "Deleting LDAP entry {dn!r} on {uri} ..."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1050
+#: lib/pp_admintools/app/ldap.py:1071
msgid "Simulation mode - deletion will not be executed."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1056
+#: lib/pp_admintools/app/ldap.py:1077
msgid "Deletion NOT successfull - {c}: {e}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1060
+#: lib/pp_admintools/app/ldap.py:1081
msgid "Deletion status: {!r}."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1062
+#: lib/pp_admintools/app/ldap.py:1083
msgid "Result of deletion:"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1065
+#: lib/pp_admintools/app/ldap.py:1086
msgid "Deletion NOT successful: {desc} - {msg}"
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1069
+#: lib/pp_admintools/app/ldap.py:1090
msgid "Deletion successful."
msgstr ""
-#: lib/pp_admintools/app/ldap.py:1216
+#: lib/pp_admintools/app/ldap.py:1237
msgid "Reading password file {!r} ..."
msgstr ""
msgid "Did not found sendmail executable."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:100 lib/pp_admintools/app/pdns.py:184
+#: lib/pp_admintools/app/mirror_ldap.py:70
+msgid ""
+"Mirror the content of a complete LDAP instance (server or cluster) to another instance. This "
+"will be done first by clearing the target instance, then copying structural entries from the "
+"source to the target instance and then copying all other entries. During this some "
+"transformations are done, like substituting the content of some entry attributes by another "
+"values."
+msgstr ""
+
+#: lib/pp_admintools/app/mirror_ldap.py:86
+msgid "Miroring options"
+msgstr ""
+
+#: lib/pp_admintools/app/mirror_ldap.py:91
+msgid ""
+"Number of seconds to wait after each write operation. Given as a float value, and if set to "
+"zero, there is no waiting after a write. (default: {:.1f})"
+msgstr ""
+
+#: lib/pp_admintools/app/mirror_ldap.py:98
+msgid "NUMBER"
+msgstr ""
+
+#: lib/pp_admintools/app/mirror_ldap.py:100
+msgid "Limiting the mirroring to the first NUMBER entries. This option is valid only in simulation mode."
+msgstr ""
+
+#: lib/pp_admintools/app/mirror_ldap.py:107
+msgid "Mirror only structural entries (entries with childs)."
+msgstr ""
+
+#: lib/pp_admintools/app/pdns.py:99 lib/pp_admintools/app/pdns.py:183
msgid "Configuration not available."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:114
+#: lib/pp_admintools/app/pdns.py:113
msgid "Invalid API key {!r} given."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:126
+#: lib/pp_admintools/app/pdns.py:125
msgid "Invalid API host {!r} given."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:139
+#: lib/pp_admintools/app/pdns.py:138
msgid "Invalid API port {!r} given."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:151
+#: lib/pp_admintools/app/pdns.py:150
msgid "Invalid API server name {!r} given."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:169 lib/pp_admintools/app/pdns.py:172
+#: lib/pp_admintools/app/pdns.py:168 lib/pp_admintools/app/pdns.py:171
msgid "Invalid instance {!r} given."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:180
+#: lib/pp_admintools/app/pdns.py:179
msgid "Evaluating instance {!r} ..."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:188
+#: lib/pp_admintools/app/pdns.py:187
msgid "PDNS instance {!r} is not configured."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:239
+#: lib/pp_admintools/app/pdns.py:238
msgid "PowerDNS API options"
msgstr ""
-#: lib/pp_admintools/app/pdns.py:249
+#: lib/pp_admintools/app/pdns.py:247
msgid "Select, which PowerDNS instance to use. Valid values: {v}, default: {d!r}."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:257 lib/pp_admintools/app/pdns.py:263
-#: lib/pp_admintools/app/pdns.py:269
+#: lib/pp_admintools/app/pdns.py:255 lib/pp_admintools/app/pdns.py:261
+#: lib/pp_admintools/app/pdns.py:267
msgid "Using the {!r} PowerDNS instance."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:277
+#: lib/pp_admintools/app/pdns.py:275
msgid "Which port to connect to PowerDNS API, default: {}."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:302
+#: lib/pp_admintools/app/pdns.py:300
msgid "No path given for{d} [{s}]/{k} in configuration."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:309
+#: lib/pp_admintools/app/pdns.py:307
msgid "Path {p!r} for{d} [{s}]/{k} in configuration must be an absolute path."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:332 lib/pp_admintools/app/pdns.py:368
-#: lib/pp_admintools/app/pdns.py:395
+#: lib/pp_admintools/app/pdns.py:330 lib/pp_admintools/app/pdns.py:366
+#: lib/pp_admintools/app/pdns.py:393
msgid "Executing {} ..."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:370
+#: lib/pp_admintools/app/pdns.py:368
msgid "Setting Loglevel of the requests module to {}."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:384
+#: lib/pp_admintools/app/pdns.py:382
msgid "Executing nothing ..."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:404 lib/pp_admintools/app/pdns.py:426
-#: lib/pp_admintools/app/pdns.py:437 lib/pp_admintools/app/pdns.py:447
+#: lib/pp_admintools/app/pdns.py:402 lib/pp_admintools/app/pdns.py:424
+#: lib/pp_admintools/app/pdns.py:435 lib/pp_admintools/app/pdns.py:445
msgid "The PDNS server object does not exists."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:406 lib/pp_admintools/app/pdns.py:428
-#: lib/pp_admintools/app/pdns.py:439 lib/pp_admintools/app/pdns.py:449
+#: lib/pp_admintools/app/pdns.py:404 lib/pp_admintools/app/pdns.py:426
+#: lib/pp_admintools/app/pdns.py:437 lib/pp_admintools/app/pdns.py:447
msgid "The PDNS server object is not initialized."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:457
+#: lib/pp_admintools/app/pdns.py:455
msgid "Trying to get complete information about zone {!r} ..."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:463
+#: lib/pp_admintools/app/pdns.py:461
msgid "The given zone {} was not found."
msgstr ""
-#: lib/pp_admintools/app/pdns.py:466
+#: lib/pp_admintools/app/pdns.py:464
msgid "Got a response:"
msgstr ""
-#: lib/pp_admintools/app/pdns.py:471
+#: lib/pp_admintools/app/pdns.py:469
msgid "Zone object:"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:70
+#: 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 "
"user will be really removed from LDAP."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:115
+#: lib/pp_admintools/app/remove_ldap_user.py:114
msgid "Removing options"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:118
+#: lib/pp_admintools/app/remove_ldap_user.py:117
msgid "This is the default."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:119
+#: lib/pp_admintools/app/remove_ldap_user.py:118
msgid "This is mutually exclusive to {!r}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:121
+#: lib/pp_admintools/app/remove_ldap_user.py:120
msgid "Deactivating the user instead of removing it."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:128
+#: lib/pp_admintools/app/remove_ldap_user.py:127
msgid "Removing the user from LDAP."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:136 lib/pp_admintools/app/set_ldap_password.py:269
-#: lib/pp_admintools/app/set_ldap_password.py:272
+#: lib/pp_admintools/app/remove_ldap_user.py:135 lib/pp_admintools/app/set_ldap_password.py:273
+#: lib/pp_admintools/app/set_ldap_password.py:276
msgid "USER"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:137
+#: 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:161
+#: lib/pp_admintools/app/remove_ldap_user.py:160
msgid "No users to remove given."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:174
+#: lib/pp_admintools/app/remove_ldap_user.py:173
msgid "Checking given instances for admin and read/write access."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:189
+#: lib/pp_admintools/app/remove_ldap_user.py:180
+msgid "LDAP instance {!r} not found in configuration."
+msgstr ""
+
+#: lib/pp_admintools/app/remove_ldap_user.py:188
msgid "LDAP instance {!r} has only readonly access."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:194
+#: lib/pp_admintools/app/remove_ldap_user.py:193
msgid "No admin access to LDAP instance {!r}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:211
+#: lib/pp_admintools/app/remove_ldap_user.py:210
msgid "All given users were not found in any LDAP instance."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:216
+#: lib/pp_admintools/app/remove_ldap_user.py:215
msgid "Evaluated DNs to remove:"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:225
+#: lib/pp_admintools/app/remove_ldap_user.py:224
msgid "Start disabling user entries in:"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:227
+#: lib/pp_admintools/app/remove_ldap_user.py:226
msgid "Start removing user entries in:"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:231
+#: lib/pp_admintools/app/remove_ldap_user.py:230
msgid "Start disabling user entries ..."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:233
+#: lib/pp_admintools/app/remove_ldap_user.py:232
msgid "Start removing user entries ..."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:248
+#: lib/pp_admintools/app/remove_ldap_user.py:247
msgid "Do you really want to deactivate the following users?"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:250
+#: lib/pp_admintools/app/remove_ldap_user.py:249
msgid "Do you really want to remove the following users?"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:276
+#: lib/pp_admintools/app/remove_ldap_user.py:275
msgid "Deactivate [{yes}/{no}]?"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:278
+#: lib/pp_admintools/app/remove_ldap_user.py:277
msgid "Remove [{yes}/{no}]?"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:280 lib/pp_admintools/app/set_ldap_password.py:579
+#: lib/pp_admintools/app/remove_ldap_user.py:279 lib/pp_admintools/app/set_ldap_password.py:583
msgid "yes"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:285
+#: lib/pp_admintools/app/remove_ldap_user.py:284
msgid "Abort deactivating by {cls}: {e}"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:287
+#: lib/pp_admintools/app/remove_ldap_user.py:286
msgid "Abort removing by {cls}: {e}"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:296
+#: lib/pp_admintools/app/remove_ldap_user.py:295
msgid "Evaluating DNs of the user {!r} to remove ..."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:310 lib/pp_admintools/app/set_ldap_password.py:527
+#: lib/pp_admintools/app/remove_ldap_user.py:309 lib/pp_admintools/app/set_ldap_password.py:531
msgid "Got DN {dn!r} for user {user!r} in LDAP instance {inst}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:317 lib/pp_admintools/app/set_ldap_password.py:532
+#: lib/pp_admintools/app/remove_ldap_user.py:316 lib/pp_admintools/app/set_ldap_password.py:536
msgid "Found {nr} entries for user {u!r} in LDAP instance {i}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:329 lib/pp_admintools/app/set_ldap_password.py:546
+#: lib/pp_admintools/app/remove_ldap_user.py:328 lib/pp_admintools/app/set_ldap_password.py:550
msgid "Did not found user {user!r} in LDAP instance {inst}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:338
+#: lib/pp_admintools/app/remove_ldap_user.py:337
msgid "Deactivating all given users from {} ..."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:340
+#: lib/pp_admintools/app/remove_ldap_user.py:339
msgid "Removing all given users from {} ..."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:355
+#: lib/pp_admintools/app/remove_ldap_user.py:354
msgid "Deactivating user {dn!r} from {inst} ..."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:358
+#: lib/pp_admintools/app/remove_ldap_user.py:357
msgid "Removing user {dn!r} from {inst} ..."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:364
+#: lib/pp_admintools/app/remove_ldap_user.py:363
msgid "Attributes of {!r}:"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:385
+#: lib/pp_admintools/app/remove_ldap_user.py:384
msgid "{c} on removing user {dn!r}: {e}"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:391
+#: lib/pp_admintools/app/remove_ldap_user.py:390
msgid "User {dn!r} successful deactivated on {inst}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:394
+#: lib/pp_admintools/app/remove_ldap_user.py:393
msgid "User {dn!r} successful removed from {inst}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:420
+#: lib/pp_admintools/app/remove_ldap_user.py:419
msgid "Updating user info for {dn!r} on {inst} ..."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:425 lib/pp_admintools/app/set_ldap_password.py:610
+#: lib/pp_admintools/app/remove_ldap_user.py:424 lib/pp_admintools/app/set_ldap_password.py:610
msgid "{c} on deactivating user {dn!r}: {e}"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:441
+#: lib/pp_admintools/app/remove_ldap_user.py:440
msgid "Did not found any group memberships of {dn!r} in {inst}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:447 lib/pp_admintools/app/remove_ldap_user.py:474
-#: lib/pp_admintools/app/remove_ldap_user.py:505 lib/pp_admintools/app/remove_ldap_user.py:536
+#: lib/pp_admintools/app/remove_ldap_user.py:446 lib/pp_admintools/app/remove_ldap_user.py:473
+#: lib/pp_admintools/app/remove_ldap_user.py:504 lib/pp_admintools/app/remove_ldap_user.py:535
msgid "Removing user {u!r} from group {g!r} ..."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:452 lib/pp_admintools/app/remove_ldap_user.py:479
-#: lib/pp_admintools/app/remove_ldap_user.py:510 lib/pp_admintools/app/remove_ldap_user.py:541
+#: lib/pp_admintools/app/remove_ldap_user.py:451 lib/pp_admintools/app/remove_ldap_user.py:478
+#: lib/pp_admintools/app/remove_ldap_user.py:509 lib/pp_admintools/app/remove_ldap_user.py:540
msgid "{c} on removing user {dn!r} from group {g!r}: {e}"
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:468
+#: lib/pp_admintools/app/remove_ldap_user.py:467
msgid "Did not found any unique group memberships of {dn!r} in {inst}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:492
+#: lib/pp_admintools/app/remove_ldap_user.py:491
msgid "Deleting user {uid!r} from all POSIX groups in {inst}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:499
+#: lib/pp_admintools/app/remove_ldap_user.py:498
msgid "Did not found any POSIX group memberships of {uid!r} in {inst}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:523
+#: lib/pp_admintools/app/remove_ldap_user.py:522
msgid "Deleting user {uid!r} from all sudo groups in {inst}."
msgstr ""
-#: lib/pp_admintools/app/remove_ldap_user.py:530
+#: lib/pp_admintools/app/remove_ldap_user.py:529
msgid "Did not found any sudo group memberships of {uid!r} in {inst}."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:100
+#: lib/pp_admintools/app/set_ldap_password.py:104
msgid "The ancient and notorious 3 DES crypt method."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:101 lib/pp_admintools/app/set_ldap_password.py:104
+#: lib/pp_admintools/app/set_ldap_password.py:105 lib/pp_admintools/app/set_ldap_password.py:108
msgid "Pure {} hashing method."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:102 lib/pp_admintools/app/set_ldap_password.py:105
-#: lib/pp_admintools/app/set_ldap_password.py:107 lib/pp_admintools/app/set_ldap_password.py:109
+#: lib/pp_admintools/app/set_ldap_password.py:106 lib/pp_admintools/app/set_ldap_password.py:109
+#: lib/pp_admintools/app/set_ldap_password.py:111 lib/pp_admintools/app/set_ldap_password.py:113
msgid "A {} based hashing algorithm."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:103 lib/pp_admintools/app/set_ldap_password.py:106
-#: lib/pp_admintools/app/set_ldap_password.py:108 lib/pp_admintools/app/set_ldap_password.py:110
+#: lib/pp_admintools/app/set_ldap_password.py:107 lib/pp_admintools/app/set_ldap_password.py:110
+#: lib/pp_admintools/app/set_ldap_password.py:112 lib/pp_admintools/app/set_ldap_password.py:114
msgid "Salted {} hashing method."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:111
+#: lib/pp_admintools/app/set_ldap_password.py:115
msgid "A hashing method derived from {} with additional computing rounds."
msgstr ""
msgid "Do not check the quality of the new password with the {} library."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:246
-msgid "SCHEMA"
-msgstr ""
-
-#: lib/pp_admintools/app/set_ldap_password.py:247
+#: lib/pp_admintools/app/set_ldap_password.py:245
msgid ""
"The schema (hashing method) to use to hash the new password. It is possible to give here the "
"value {val_list!r}, then all possible schemes are shown and exit. Default: {default!r}."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:251
+#: lib/pp_admintools/app/set_ldap_password.py:250
msgid "If you are not using an admin account, then the password will hashed only by the default schema."
msgstr ""
#: lib/pp_admintools/app/set_ldap_password.py:255
+msgid "SCHEMA"
+msgstr ""
+
+#: lib/pp_admintools/app/set_ldap_password.py:259
msgid ""
"The user, which password in the given LDAP instance should be changed. It may be given by its "
"Uid (the alphanumeric POSIX name), its mail address or its LDAP DN."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:260
+#: lib/pp_admintools/app/set_ldap_password.py:264
msgid "If not given, then your current user name {!r} will be used."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:263
+#: lib/pp_admintools/app/set_ldap_password.py:267
msgid ""
"If you are using a readonly LDAP instance or an instance w/o admin access, then you must provide"
" somehow the current password of the user to change."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:316
+#: lib/pp_admintools/app/set_ldap_password.py:320
msgid "Could not detect your current login name."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:321
+#: lib/pp_admintools/app/set_ldap_password.py:325
msgid "The user {!r} will never be managed by LDAP."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:357
+#: lib/pp_admintools/app/set_ldap_password.py:361
msgid "Usable Hashing schemes:"
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:366
+#: lib/pp_admintools/app/set_ldap_password.py:370
msgid "This schema cannot be used for authentication on a current freeradius server."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:370
+#: lib/pp_admintools/app/set_ldap_password.py:374
msgid "This is the default schema."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:385
+#: lib/pp_admintools/app/set_ldap_password.py:389
msgid "Using LDAP instance {inst!r} - {url}."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:389
+#: lib/pp_admintools/app/set_ldap_password.py:393
msgid "Current password of user {!r}:"
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:390 lib/pp_admintools/app/set_ldap_password.py:410
+#: lib/pp_admintools/app/set_ldap_password.py:394 lib/pp_admintools/app/set_ldap_password.py:414
msgid "Repeat password:"
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:403
+#: lib/pp_admintools/app/set_ldap_password.py:407
msgid "Non admin users must use the default schema {!r} for hashing their password."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:409
+#: lib/pp_admintools/app/set_ldap_password.py:413
msgid "New password of user {!r}:"
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:416
+#: lib/pp_admintools/app/set_ldap_password.py:420
msgid "Checking the quality of the new password was disabled."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:419
+#: lib/pp_admintools/app/set_ldap_password.py:423
msgid "Testing quality of new password ..."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:423
+#: lib/pp_admintools/app/set_ldap_password.py:427
msgid "Quality of the new password is not sufficient:"
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:428
+#: lib/pp_admintools/app/set_ldap_password.py:432
msgid "Cannot testing the quality of the new password, because the Python module {!r} is not installed."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:455
+#: lib/pp_admintools/app/set_ldap_password.py:459
msgid "Unbinding user connection from LDAP server {} ..."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:466
+#: lib/pp_admintools/app/set_ldap_password.py:470
msgid "Testing connect to LDAP-Server {url} with current user {dn!r} and password ..."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:478
+#: lib/pp_admintools/app/set_ldap_password.py:482
msgid "Successful connected as {dn!r} to {url}."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:484
+#: lib/pp_admintools/app/set_ldap_password.py:488
msgid "Could not connect to {url} as {dn!r}: {e}"
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:495
+#: lib/pp_admintools/app/set_ldap_password.py:499
msgid "Trying to get current password hash of user {!r} ..."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:534
+#: lib/pp_admintools/app/set_ldap_password.py:538
msgid ""
"Please use another username, or use the correct DN from the following list as a parameter for "
"this script instead of the username:"
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:551
+#: lib/pp_admintools/app/set_ldap_password.py:555
msgid "Changing the password of user {dn!r} in LDAP instance {inst}."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:558
+#: lib/pp_admintools/app/set_ldap_password.py:562
msgid "Setting password of {dn!r} with hashing schema {schema!r}."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:560
+#: lib/pp_admintools/app/set_ldap_password.py:564
msgid "Setting password of '{dn}' with hashing schema '{schema}' ..."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:565
+#: lib/pp_admintools/app/set_ldap_password.py:569
msgid "Current password hash: '{}'."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:568
+#: lib/pp_admintools/app/set_ldap_password.py:572
msgid "The user '{}' has currently no password."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:572
+#: lib/pp_admintools/app/set_ldap_password.py:576
msgid "Used schema: {!r}."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:574
+#: lib/pp_admintools/app/set_ldap_password.py:578
msgid "New password hash: '{}'."
msgstr ""
-#: lib/pp_admintools/app/set_ldap_password.py:578
+#: lib/pp_admintools/app/set_ldap_password.py:582
msgid "Apply new password? [{yes}/{no}]?"
msgstr ""
msgid "Value {v!r} for a {what} port must be greater than 0 and less than {max}."
msgstr ""
+#: lib/pp_admintools/argparse_actions.py:65 lib/pp_admintools/argparse_actions.py:95
+msgid "Got a {c} for converting {v!r} into an integer value: {e}"
+msgstr ""
+
+#: lib/pp_admintools/argparse_actions.py:70
+msgid "The option must not be negative (given: {})."
+msgstr ""
+
+#: lib/pp_admintools/argparse_actions.py:101 lib/pp_admintools/argparse_actions.py:138
+msgid "The option must be greater or equal to {m} (given: {v})."
+msgstr ""
+
+#: lib/pp_admintools/argparse_actions.py:107 lib/pp_admintools/argparse_actions.py:143
+msgid "The option must be less or equal to {m} (given: {v})."
+msgstr ""
+
+#: lib/pp_admintools/argparse_actions.py:133
+msgid "Got a {c} for converting {v!r} into a float value: {e}"
+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}:"
msgid "Evaluated configuration:"
msgstr ""
-#: lib/pp_admintools/config/ldap.py:162
+#: lib/pp_admintools/config/ldap.py:174
msgid "Invalid port {!r} for LDAP server given."
msgstr ""
-#: lib/pp_admintools/config/ldap.py:175
+#: lib/pp_admintools/config/ldap.py:187
msgid "An empty Base DN for LDAP searches is not allowed."
msgstr ""
-#: lib/pp_admintools/config/ldap.py:265
+#: lib/pp_admintools/config/ldap.py:277
msgid "Invalid production tier {!r} given."
msgstr ""
-#: lib/pp_admintools/config/ldap.py:408
-msgid "Evaluating LDAP config ..."
+#: lib/pp_admintools/config/ldap.py:332
+msgid "Invalid value {val!r} in section {sec!r} for a LDAP {what}."
msgstr ""
-#: lib/pp_admintools/config/ldap.py:412
-msgid "Evaluating LDAP section {!r} ..."
+#: lib/pp_admintools/config/ldap.py:401
+msgid "Unknown LDAP configuration key {key} found in section {sec!r}."
msgstr ""
-#: lib/pp_admintools/config/ldap.py:429
-msgid "Value {!r} for a timeout is invalid."
+#: lib/pp_admintools/config/ldap.py:505
+msgid "Evaluating LDAP config ..."
msgstr ""
-#: lib/pp_admintools/config/ldap.py:449
-msgid "Reading configuration of LDAP instance {!r} ..."
+#: lib/pp_admintools/config/ldap.py:509
+msgid "Evaluating LDAP section {!r} ..."
msgstr ""
-#: lib/pp_admintools/config/ldap.py:457
-msgid "Invalid value {val!r} in section {sec!r} for a LDAP {what}."
+#: lib/pp_admintools/config/ldap.py:526
+msgid "Value {!r} for a timeout is invalid."
msgstr ""
-#: lib/pp_admintools/config/ldap.py:519
-msgid "Unknown LDAP configuration key {key} found in section {sec!r}."
+#: lib/pp_admintools/config/ldap.py:546
+msgid "Reading configuration of LDAP instance {!r} ..."
msgstr ""
#: lib/pp_admintools/config/mail.py:170 lib/pp_admintools/config/mail.py:194