mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Gaetan Boismal
23.22.2016 b09a646bc0b4e37e94eba36ff99cb33544ec3d73
OPENDJ-2772 Create ldapdelete tool in the sdk

* Adapts the tool to use sdk ConnectionFactoryProvider, DeleteRequest and Connection APIs.
* The tool only read one DN from the command line or multiple from stdin (one dn per line)
* diffs with server ldapdelete
* Usage: ldapdelete {options} "DN" becomes ldapdelete {options} [DN]
* Only read one DN on the command line, if none are provided read standard input
(multpiple DNs can be provided, separated by line separators)
* Added: options (due to the use of ConnectionFactoryProvider):
* -E, --reportAuthzID
* -T short option for --trustStorePassword {trustStorePassword} option
* -V short option for --version option
* --usePasswordPolicyControl
* Removed:
* -f, --filename (read one DN from command line or multiple from stdandard input)
* -i, --encoding {encoding} (not implemented in the server)
* -r, --useSASLExternal (it is redundant as a particular usage of -o, --saslOption mech="EXTERNAL" argument
* -V, --ldapVersion {version} (not implemented because we always do bind in v3)
NOTE: This is taking effect in 2 commits
* ldapdelete use standard input:
* Do not add any DN on the command line or 'ldapdelete {options} -- -'
3 files added
12 files modified
367 ■■■■■ changed files
opendj-ldap-toolkit/src/main/assembly/bat/ldapdelete.bat 22 ●●●●● patch | view | raw | blame | history
opendj-ldap-toolkit/src/main/assembly/bin/ldapdelete 27 ●●●●● patch | view | raw | blame | history
opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPDelete.java 256 ●●●●● patch | view | raw | blame | history
opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPModify.java 11 ●●●● patch | view | raw | blame | history
opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/Utils.java 9 ●●●●● patch | view | raw | blame | history
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools.properties 15 ●●●●● patch | view | raw | blame | history
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ca_ES.properties 3 ●●●●● patch | view | raw | blame | history
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_de.properties 3 ●●●●● patch | view | raw | blame | history
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_es.properties 3 ●●●●● patch | view | raw | blame | history
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_fr.properties 3 ●●●●● patch | view | raw | blame | history
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ja.properties 3 ●●●●● patch | view | raw | blame | history
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ko.properties 3 ●●●●● patch | view | raw | blame | history
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_pl.properties 3 ●●●●● patch | view | raw | blame | history
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_zh_CN.properties 3 ●●●●● patch | view | raw | blame | history
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_zh_TW.properties 3 ●●●●● patch | view | raw | blame | history
opendj-ldap-toolkit/src/main/assembly/bat/ldapdelete.bat
New file
@@ -0,0 +1,22 @@
@echo off
rem The contents of this file are subject to the terms of the Common Development and
rem Distribution License (the License). You may not use this file except in compliance with the
rem License.
rem
rem You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
rem specific language governing permission and limitations under the License.
rem
rem When distributing Covered Software, include this CDDL Header Notice in each file and include
rem the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
rem Header, with the fields enclosed by brackets [] replaced by your own identifying
rem information: "Portions Copyright [year] [name of copyright owner]".
rem
rem Copyright 2006-2008 Sun Microsystems, Inc.
rem Portions Copyright 2011-2016 ForgeRock AS.
setlocal
set OPENDJ_INVOKE_CLASS="com.forgerock.opendj.ldap.tools.LDAPDelete"
set SCRIPT_NAME=ldapdelete
call "%~dp0\..\lib\_client-script.bat" %*
opendj-ldap-toolkit/src/main/assembly/bin/ldapdelete
New file
@@ -0,0 +1,27 @@
#!/bin/sh
#
# The contents of this file are subject to the terms of the Common Development and
# Distribution License (the License). You may not use this file except in compliance with the
# License.
#
# You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
# specific language governing permission and limitations under the License.
#
# When distributing Covered Software, include this CDDL Header Notice in each file and include
# the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
# Header, with the fields enclosed by brackets [] replaced by your own identifying
# information: "Portions Copyright [year] [name of copyright owner]".
#
# Copyright 2006-2008 Sun Microsystems, Inc.
# Portions Copyright 2011-2016 ForgeRock AS.
# This script may be used to perform LDAP compare operations.
OPENDJ_INVOKE_CLASS="com.forgerock.opendj.ldap.tools.LDAPDelete"
export OPENDJ_INVOKE_CLASS
SCRIPT_NAME="ldapdelete"
export SCRIPT_NAME
SCRIPT_DIR=`dirname "${0}"`
"${SCRIPT_DIR}/../lib/_client-script.sh" "${@}"
opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPDelete.java
New file
@@ -0,0 +1,256 @@
/*
 * The contents of this file are subject to the terms of the Common Development and
 * Distribution License (the License). You may not use this file except in compliance with the
 * License.
 *
 * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
 * specific language governing permission and limitations under the License.
 *
 * When distributing Covered Software, include this CDDL Header Notice in each file and include
 * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
 * Header, with the fields enclosed by brackets [] replaced by your own identifying
 * information: "Portions Copyright [year] [name of copyright owner]".
 *
 * Copyright 2006-2010 Sun Microsystems, Inc.
 * Portions Copyright 2012-2016 ForgeRock AS.
 */
package com.forgerock.opendj.ldap.tools;
import static com.forgerock.opendj.cli.ArgumentConstants.USE_SYSTEM_STREAM_TOKEN;
import static com.forgerock.opendj.cli.CommonArguments.continueOnErrorArgument;
import static com.forgerock.opendj.cli.CommonArguments.controlArgument;
import static com.forgerock.opendj.cli.CommonArguments.ldapVersionArgument;
import static com.forgerock.opendj.cli.CommonArguments.noOpArgument;
import static com.forgerock.opendj.ldap.tools.LDAPToolException.newToolException;
import static com.forgerock.opendj.ldap.tools.LDAPToolException.newToolParamException;
import static com.forgerock.opendj.ldap.tools.ToolsMessages.*;
import static com.forgerock.opendj.cli.CommonArguments.noPropertiesFileArgument;
import static com.forgerock.opendj.cli.CommonArguments.propertiesFileArgument;
import static com.forgerock.opendj.cli.CommonArguments.showUsageArgument;
import static com.forgerock.opendj.cli.CommonArguments.verboseArgument;
import static com.forgerock.opendj.cli.ToolVersionHandler.newSdkVersionHandler;
import static com.forgerock.opendj.cli.Utils.filterExitCode;
import static com.forgerock.opendj.ldap.tools.Utils.addControlsToRequest;
import static com.forgerock.opendj.ldap.tools.Utils.ensureLdapProtocolVersionIsSupported;
import static com.forgerock.opendj.ldap.tools.Utils.getConnection;
import static com.forgerock.opendj.ldap.tools.Utils.printErrorMessage;
import static com.forgerock.opendj.ldap.tools.Utils.printSuccessMessage;
import static com.forgerock.opendj.ldap.tools.Utils.readControls;
import static org.forgerock.i18n.LocalizableMessage.raw;
import com.forgerock.opendj.cli.ArgumentException;
import com.forgerock.opendj.cli.BooleanArgument;
import com.forgerock.opendj.cli.ConnectionFactoryProvider;
import com.forgerock.opendj.cli.ConsoleApplication;
import com.forgerock.opendj.cli.IntegerArgument;
import com.forgerock.opendj.cli.StringArgument;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.opendj.ldap.Connection;
import org.forgerock.opendj.ldap.LdapException;
import org.forgerock.opendj.ldap.ResultCode;
import org.forgerock.opendj.ldap.controls.Control;
import org.forgerock.opendj.ldap.controls.SubtreeDeleteRequestControl;
import org.forgerock.opendj.ldap.requests.DeleteRequest;
import org.forgerock.opendj.ldap.requests.Requests;
import org.forgerock.opendj.ldap.responses.Result;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/** A tool that can be used to issue delete requests to the Directory Server. */
public final class LDAPDelete extends ConsoleApplication {
    /**
     * The main method for ldapdelete tool.
     *
     * @param args
     *            The command-line arguments provided to this program.
     */
    public static void main(final String[] args) {
        System.exit(filterExitCode(run(System.out, System.err, args)));
    }
    /**
     * Run {@link LDAPDelete} tool with the provided arguments.
     * Output and errors will be written on the provided streams.
     * This method can be used to run the tool programmatically.
     *
     * @param out
     *      {@link PrintStream} which will be used by the tool to write results and information messages.
     * @param err
     *      {@link PrintStream} which will be used by the tool to write errors.
     * @param args
     *      Arguments set to pass to the tool.
     * @return
     *      An integer which represents the result code of the tool.
     */
    public static int run(final PrintStream out, final PrintStream err, final String... args) {
        final LDAPDelete ldapDelete = new LDAPDelete(out, err);
        try {
            return ldapDelete.run(args);
        } catch (final LDAPToolException e) {
            e.printErrorMessage(ldapDelete);
            return e.getResultCode();
        }
    }
    private LDAPDelete(final PrintStream out, final PrintStream err) {
        super(out, err);
    }
    private BooleanArgument verbose;
    @Override
    public boolean isInteractive() {
        return false;
    }
    @Override
    public boolean isVerbose() {
        return verbose.isPresent();
    }
    private int run(String[] args) throws LDAPToolException {
        // Create the command-line argument parser for use with this program.
        final LocalizableMessage toolDescription = INFO_LDAPDELETE_TOOL_DESCRIPTION.get();
        final LDAPToolArgumentParser argParser = LDAPToolArgumentParser.builder(LDAPDelete.class.getName())
                .toolDescription(toolDescription)
                .trailingArguments(0, 1, "[DN]")
                .build();
        argParser.setVersionHandler(newSdkVersionHandler());
        argParser.setShortToolDescription(REF_SHORT_DESC_LDAPDELETE.get());
        ConnectionFactoryProvider connectionFactoryProvider;
        final BooleanArgument continueOnError;
        final BooleanArgument deleteSubtree;
        final BooleanArgument dryRun;
        final BooleanArgument showUsage;
        final IntegerArgument ldapProtocolVersion;
        final StringArgument controlStr;
        final StringArgument propertiesFileArgument;
        final BooleanArgument noPropertiesFileArgument;
        try {
            connectionFactoryProvider = new ConnectionFactoryProvider(argParser, this);
            propertiesFileArgument = propertiesFileArgument();
            argParser.addArgument(propertiesFileArgument);
            argParser.setFilePropertiesArgument(propertiesFileArgument);
            noPropertiesFileArgument = noPropertiesFileArgument();
            argParser.addArgument(noPropertiesFileArgument);
            argParser.setNoPropertiesFileArgument(noPropertiesFileArgument);
            deleteSubtree =
                    BooleanArgument.builder("deleteSubtree")
                            .shortIdentifier('x')
                            .description(INFO_DELETE_DESCRIPTION_DELETE_SUBTREE.get())
                            .buildAndAddToParser(argParser);
            continueOnError = continueOnErrorArgument();
            argParser.addArgument(continueOnError);
            controlStr = controlArgument();
            argParser.addArgument(controlStr);
            ldapProtocolVersion = ldapVersionArgument();
            argParser.addArgument(ldapProtocolVersion);
            dryRun = noOpArgument();
            argParser.addArgument(dryRun);
            verbose = verboseArgument();
            argParser.addArgument(verbose);
            showUsage = showUsageArgument();
            argParser.addArgument(showUsage);
            argParser.setUsageArgument(showUsage, getOutputStream());
        } catch (final ArgumentException ae) {
            throw newToolParamException(ae, ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage()));
        }
        argParser.parseArguments(args, getErrStream(), connectionFactoryProvider);
        if (argParser.usageOrVersionDisplayed()) {
            return ResultCode.SUCCESS.intValue();
        }
        ensureLdapProtocolVersionIsSupported(ldapProtocolVersion);
        final List<Control> controls = readControls(controlStr);
        if (deleteSubtree.isPresent()) {
            controls.add(SubtreeDeleteRequestControl.newControl(false));
        }
        try (final Connection connection = getConnection(argParser.getConnectionFactory(),
                                                         argParser.getBindRequest(),
                                                         dryRun,
                                                         this)) {
            final List<DeleteRequest> deleteRequests = createDeleteRequests(argParser.getTrailingArguments(), controls);
            for (final DeleteRequest deleteRequest : deleteRequests) {
                final String dnToRemove = deleteRequest.getName().toString();
                println(INFO_PROCESSING_OPERATION.get("DELETE", dnToRemove));
                if (!dryRun.isPresent()) {
                    Result result;
                    try {
                        result = connection.delete(deleteRequest);
                    } catch (final LdapException e) {
                        result = e.getResult();
                    }
                    final ResultCode resultCode = result.getResultCode();
                    if (ResultCode.SUCCESS != resultCode && ResultCode.REFERRAL != resultCode) {
                        printErrorMessage(this, result, ERR_LDAP_DELETE_FAILED);
                        println();
                        if (!continueOnError.isPresent()) {
                            return resultCode.intValue();
                        }
                    } else {
                        printSuccessMessage(this, result, "DELETE", dnToRemove);
                        println();
                    }
                }
            }
        }
        return ResultCode.SUCCESS.intValue();
    }
    private List<DeleteRequest> createDeleteRequests(final List<String> trailingArguments,
                                                     final List<Control> controls) throws LDAPToolException {
        try {
            if (!trailingArguments.isEmpty()
                    && !(trailingArguments.size() == 1 && USE_SYSTEM_STREAM_TOKEN.equals(trailingArguments.get(0)))) {
                return Collections.singletonList(createDeleteRequestForDn(trailingArguments.get(0), controls));
            }
            final List<DeleteRequest> deleteRequests = new ArrayList<>();
            try (final BufferedReader reader = new BufferedReader(new InputStreamReader(getInputStream()))) {
                String dn;
                while ((dn = reader.readLine()) != null) {
                    deleteRequests.add(createDeleteRequestForDn(dn, controls));
                }
                return deleteRequests;
            } catch (final IOException e) {
                throw newToolException(
                        e, ResultCode.UNDEFINED, ERR_LDAPDELETE_READING_STDIN.get(e.getLocalizedMessage()));
            }
        } catch (final IllegalArgumentException iae) {
            throw newToolException(iae, ResultCode.INVALID_DN_SYNTAX, raw(iae.getLocalizedMessage()));
        }
    }
    private DeleteRequest createDeleteRequestForDn(final String dnToRemove, final List<Control> controls)
            throws LDAPToolException {
        final DeleteRequest request = Requests.newDeleteRequest(dnToRemove);
        addControlsToRequest(request, controls);
        return request;
    }
}
opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPModify.java
@@ -23,7 +23,7 @@
import static com.forgerock.opendj.ldap.tools.ToolsMessages.*;
import static com.forgerock.opendj.cli.Utils.filterExitCode;
import static com.forgerock.opendj.ldap.tools.Utils.getConnection;
import static com.forgerock.opendj.ldap.tools.Utils.printlnTextMsg;
import static com.forgerock.opendj.ldap.tools.Utils.printSuccessMessage;
import static com.forgerock.opendj.ldap.tools.Utils.readAssertionControl;
import static com.forgerock.opendj.ldap.tools.Utils.readControls;
import static com.forgerock.opendj.ldap.tools.Utils.ensureLdapProtocolVersionIsSupported;
@@ -203,14 +203,7 @@
            if (ResultCode.SUCCESS != rc && ResultCode.REFERRAL != rc) {
                printErrorMessage(LDAPModify.this, r, ERR_LDAP_MODIFY_FAILED);
            } else {
                println(INFO_OPERATION_SUCCESSFUL.get(operationType, name));
                printlnTextMsg(LDAPModify.this, r.getDiagnosticMessage());
                final List<String> referralURIs = r.getReferralURIs();
                if (referralURIs != null) {
                    for (final String uri : referralURIs) {
                        println(LocalizableMessage.raw(uri));
                    }
                }
                printSuccessMessage(LDAPModify.this, r, operationType, name);
            }
            try {
opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/Utils.java
@@ -121,6 +121,15 @@
        return rc;
    }
    static void printSuccessMessage(
            final ConsoleApplication app, final Result r, final String operationType, final String dn) {
        app.println(INFO_OPERATION_SUCCESSFUL.get(operationType, dn));
        printlnTextMsg(app, r.getDiagnosticMessage());
        for (final String uri : r.getReferralURIs()) {
            app.println(LocalizableMessage.raw(uri));
        }
    }
    static void printPasswordPolicyResults(final ConsoleApplication app, final BindResult result) {
        try {
            final AuthorizationIdentityResponseControl control = result.getControl(
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools.properties
@@ -214,7 +214,7 @@
INFO_TIME_LIMIT_PLACEHOLDER={timeLimit}
INFO_TARGETDN_PLACEHOLDER={targetDN}
INFO_PSEARCH_PLACEHOLDER=ps[:changetype[:changesonly[:entrychgcontrols]]]
ERR_LDAPCOMPARE_ERROR_READING_FILE=An error occurred reading file \
ERR_TOOL_READING_FILE=An error occurred reading file \
 '%s'.  Check that the file exists and that you have read access rights to \
 it.  Details: %s
ERR_LDAPCOMPARE_FILENAME_AND_DNS=Both entry DNs and a file name \
@@ -342,6 +342,7 @@
ERR_LDAP_SEARCH_FAILED=The LDAP search request failed: %d (%s)
ERR_LDAP_MODIFY_FAILED=The LDAP modify request failed: %d (%s)
ERR_LDAP_COMPARE_FAILED=The LDAP compare request failed: %d (%s)
ERR_LDAP_DELETE_FAILED=The LDAP delete request failed: %d (%s)
#
# AddRate Tool
#
@@ -390,6 +391,18 @@
  Please use either 'base64 encode' or 'base64 decode'.
ERR_BASE64_ERROR_DECODING_RAW_DATA=Unable to decode provided data: %s
#
# LDAPDelete
#
ERR_LDAPDELETE_FILENAME_AND_DNS=Both entry DNs and a file were provided for the delete operation. \
 These arguments are not compatible
ERR_LDAPDELETE_READING_STDIN=An error occurred while reading DN(s) from standard input: '%s'
INFO_DELETE_DESCRIPTION_FILENAME=File containing the DNs of the entries to delete
INFO_DELETE_DESCRIPTION_DELETE_SUBTREE=Delete the specified entry and all entries below it
INFO_LDAPDELETE_TOOL_DESCRIPTION=This utility can be used to perform LDAP delete operations in the Directory Server.\n \
 If standard input is used to specify entries to remove, end your input with EOF (Ctrl+D on UNIX, Ctrl+Z on Windows)
REF_SHORT_DESC_LDAPDELETE=perform LDAP delete operations
# Strings for generated reference documentation.
REF_SHORT_DESC_ADDRATE=measure add and delete throughput and response time
REF_SHORT_DESC_AUTHRATE=measure bind throughput and response time
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ca_ES.properties
@@ -67,3 +67,6 @@
INFO_BASE64_RAW_FILE_DESCRIPTION=La ruta al fitxer que cont\u00e9 les dades en cru a ser codificades en base64
INFO_BASE64_TO_ENCODED_FILE_DESCRIPTION=La ruta al fitxer on la qual les dades en base64 hauran de ser escrites
INFO_BASE64_TO_RAW_FILE_DESCRIPTION=La ruta al fitxer on la qual les dades en cru descodificades de la base64 hauran de ser escrites
INFO_DELETE_DESCRIPTION_FILENAME=Fitxer que cont\u00e9 els DNs de les entrades per eliminar
INFO_DELETE_DESCRIPTION_DELETE_SUBTREE=Eliminar l'entrada especificada i totes les entrades seg\u00fcents a ella
INFO_LDAPDELETE_TOOL_DESCRIPTION=Aquesta utilitat pot utilitzar-se per realitzar operacions d'eliminaci\u00f3 LDAP en el servidor de directori
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_de.properties
@@ -123,3 +123,6 @@
ERR_BASE64_CANNOT_READ_ENCODED_DATA=Fehler beim Versuch, mit Base64 verschl\u00fcsselten Daten zu lesen:  %s
ERR_BASE64_CANNOT_WRITE_RAW_DATA=Fehler beim Versuch, die entschl\u00fcsselten Daten zu schreiben:  %s
ERR_BASE64_UNKNOWN_SUBCOMMAND=Unbekannter Unterbefehl %s
INFO_DELETE_DESCRIPTION_FILENAME=Datei mit den DNs der zu l\u00f6schenden Eintr\u00e4ge
INFO_DELETE_DESCRIPTION_DELETE_SUBTREE=Angegebenen Eintrag und alle Untereintr\u00e4ge l\u00f6schen
INFO_LDAPDELETE_TOOL_DESCRIPTION=Dieses Dienstprogramm dient zur Durchf\u00fchrung von LDAP-L\u00f6schvorg\u00e4ngen im Directory-Server
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_es.properties
@@ -125,3 +125,6 @@
ERR_BASE64_CANNOT_READ_ENCODED_DATA=Se ha producido un error al tratar de leer los datos codificados en base64:  %s
ERR_BASE64_CANNOT_WRITE_RAW_DATA=Se ha producido un error al tratar de escribir los datos descodificados:  %s
ERR_BASE64_UNKNOWN_SUBCOMMAND=Subcomando desconocido %s
INFO_DELETE_DESCRIPTION_FILENAME=Archivo que contiene los ND de las entradas que eliminar
INFO_DELETE_DESCRIPTION_DELETE_SUBTREE=Eliminar la entrada especificada y todas las entradas que hay debajo
INFO_LDAPDELETE_TOOL_DESCRIPTION=Esta utilidad se puede utilizar para realizar operaciones de eliminaci\u00f3n de LDAP en Directory Server
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_fr.properties
@@ -126,3 +126,6 @@
ERR_BASE64_CANNOT_WRITE_RAW_DATA=Une erreur s'est produite lors de la tentative d'\u00e9criture des donn\u00e9es d\u00e9cod\u00e9es\u00a0: %s
ERR_BASE64_UNKNOWN_SUBCOMMAND=Sous-commande inconnue %s
INFO_DATA_PLACEHOLDER={donn\u00e9es}
INFO_DELETE_DESCRIPTION_FILENAME=Fichier contenant les DN des entr\u00e9es \u00e0 supprimer
INFO_DELETE_DESCRIPTION_DELETE_SUBTREE=Supprimer l'entr\u00e9e sp\u00e9cifi\u00e9e et toutes les entr\u00e9es en dessous d'elle
INFO_LDAPDELETE_TOOL_DESCRIPTION=Cet utilitaire permet d'effectuer des op\u00e9rations de suppression de LDAP dans Directory Server
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ja.properties
@@ -123,3 +123,6 @@
ERR_BASE64_CANNOT_READ_ENCODED_DATA=Base64 \u3067\u7b26\u53f7\u5316\u3055\u308c\u305f\u30c7\u30fc\u30bf\u306e\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f:  %s
ERR_BASE64_CANNOT_WRITE_RAW_DATA=\u5fa9\u53f7\u5316\u3055\u308c\u305f\u30c7\u30fc\u30bf\u306e\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f:  %s
ERR_BASE64_UNKNOWN_SUBCOMMAND=\u4e0d\u660e\u306a\u30b5\u30d6\u30b3\u30de\u30f3\u30c9 %s
INFO_DELETE_DESCRIPTION_FILENAME=\u524a\u9664\u3059\u308b\u30a8\u30f3\u30c8\u30ea\u306e DN \u3092\u542b\u3080\u30d5\u30a1\u30a4\u30eb
INFO_DELETE_DESCRIPTION_DELETE_SUBTREE=\u6307\u5b9a\u3055\u308c\u305f\u30a8\u30f3\u30c8\u30ea\u304a\u3088\u3073\u305d\u306e\u4e0b\u4f4d\u306e\u30a8\u30f3\u30c8\u30ea\u3059\u3079\u3066\u3092\u524a\u9664\u3057\u307e\u3059
INFO_LDAPDELETE_TOOL_DESCRIPTION=\u3053\u306e\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30fc\u3092\u4f7f\u3063\u3066\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u5185\u3067 LDAP \u524a\u9664\u64cd\u4f5c\u3092\u5b9f\u884c\u3067\u304d\u307e\u3059
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_ko.properties
@@ -120,3 +120,6 @@
ERR_BASE64_CANNOT_READ_ENCODED_DATA=base64\ub85c \uc778\ucf54\ub529\ub41c \ub370\uc774\ud130\ub97c \uc77d\ub294 \ub3d9\uc548 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: %s
ERR_BASE64_CANNOT_WRITE_RAW_DATA=\ud574\ub3c5\ub41c \ub370\uc774\ud130\ub97c \uc4f0\ub294 \ub3d9\uc548 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: %s
ERR_BASE64_UNKNOWN_SUBCOMMAND=\uc54c \uc218 \uc5c6\ub294 \ud558\uc704 \uba85\ub839 %s\uc785\ub2c8\ub2e4.
INFO_DELETE_DESCRIPTION_FILENAME=\uc0ad\uc81c\ud560 \ud56d\ubaa9\uc758 DN\uc744 \ud3ec\ud568\ud558\ub294 \ud30c\uc77c
INFO_DELETE_DESCRIPTION_DELETE_SUBTREE=\uc9c0\uc815\ub41c \ud56d\ubaa9\uacfc \uadf8 \uc544\ub798\uc758 \ubaa8\ub4e0 \ud56d\ubaa9\uc744 \uc0ad\uc81c\ud569\ub2c8\ub2e4.
INFO_LDAPDELETE_TOOL_DESCRIPTION=\uc774 \uc720\ud2f8\ub9ac\ud2f0\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub514\ub809\ud1a0\ub9ac \uc11c\ubc84\uc5d0\uc11c LDAP \uc0ad\uc81c \uc791\uc5c5\uc744 \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_pl.properties
@@ -68,3 +68,6 @@
INFO_BASE64_TO_RAW_FILE_DESCRIPTION=\u015acie\u017cka do pliku do kt\u00f3rego zdekodowane dane maj\u0105 by\u0107 zapisane
INFO_BASE64_TO_ENCODED_FILE_DESCRIPTION=\u015acie\u017cka do pliku do kt\u00f3rego dane zakodowane base64 maj\u0105 by\u0107 zapisane
INFO_BASE64_ENCODED_FILE_DESCRIPTION=\u015acie\u017cka do pliku zawieraj\u0105cego dane zakodowane base64, kt\u00f3re maj\u0105 by\u0107 zdekodowane
INFO_LDAPDELETE_TOOL_DESCRIPTION=To narz\u0119dzie mo\u017ce by\u0107 u\u017cyte do przeprowadzenia operacji usuni\u0119cia LDAP na Directory Server
INFO_DELETE_DESCRIPTION_DELETE_SUBTREE=Usu\u0144 podany wpis i wszystkie wpisy poni\u017cej niego
INFO_DELETE_DESCRIPTION_FILENAME=Plik zawieraj\u0105cy DNy wpis\u00f3w do usuni\u0119cia
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_zh_CN.properties
@@ -123,3 +123,6 @@
ERR_BASE64_CANNOT_READ_ENCODED_DATA=\u5728\u5c1d\u8bd5\u8bfb\u53d6 base64 \u7f16\u7801\u7684\u6570\u636e\u65f6\u51fa\u73b0\u9519\u8bef: %s
ERR_BASE64_CANNOT_WRITE_RAW_DATA=\u5728\u5c1d\u8bd5\u5199\u5165\u89e3\u7801\u7684\u6570\u636e\u65f6\u51fa\u73b0\u9519\u8bef: %s
ERR_BASE64_UNKNOWN_SUBCOMMAND=\u672a\u77e5\u5b50\u547d\u4ee4 %s
INFO_DELETE_DESCRIPTION_FILENAME=\u5305\u542b\u8981\u5220\u9664\u7684\u6761\u76ee DN \u7684\u6587\u4ef6
INFO_DELETE_DESCRIPTION_DELETE_SUBTREE=\u5220\u9664\u6307\u5b9a\u6761\u76ee\u53ca\u5176\u4e0b\u9762\u7684\u6240\u6709\u6761\u76ee
INFO_LDAPDELETE_TOOL_DESCRIPTION=\u6b64\u5b9e\u7528\u7a0b\u5e8f\u53ef\u7528\u4e8e\u5728\u76ee\u5f55\u670d\u52a1\u5668\u4e2d\u6267\u884c LDAP \u5220\u9664\u64cd\u4f5c
opendj-ldap-toolkit/src/main/resources/com/forgerock/opendj/ldap/tools/tools_zh_TW.properties
@@ -120,3 +120,6 @@
ERR_BASE64_CANNOT_READ_ENCODED_DATA=\u5617\u8a66\u8b80\u53d6 base64 \u7de8\u78bc\u7684\u8cc7\u6599\u6642\u767c\u751f\u932f\u8aa4: %s
ERR_BASE64_CANNOT_WRITE_RAW_DATA=\u5617\u8a66\u5beb\u5165\u5df2\u89e3\u78bc\u7684\u8cc7\u6599\u6642\u767c\u751f\u932f\u8aa4: %s
ERR_BASE64_UNKNOWN_SUBCOMMAND=\u4e0d\u660e\u7684\u5b50\u6307\u4ee4 %s
INFO_DELETE_DESCRIPTION_FILENAME=\u542b\u6709\u8981\u522a\u9664\u4e4b\u9805\u76ee DN \u7684\u6a94\u6848
INFO_DELETE_DESCRIPTION_DELETE_SUBTREE=\u522a\u9664\u6307\u5b9a\u7684\u9805\u76ee\u53ca\u5176\u4e0b\u6240\u6709\u7684\u9805\u76ee
INFO_LDAPDELETE_TOOL_DESCRIPTION=\u6b64\u516c\u7528\u7a0b\u5f0f\u53ef\u7528\u65bc\u57f7\u884c\u76ee\u9304\u4f3a\u670d\u5668\u4e2d\u7684 LDAP \u522a\u9664\u4f5c\u696d