| opends/resource/schema/02-config.ldif | ●●●●● patch | view | raw | blame | history | |
| opends/src/messages/messages/task.properties | ●●●●● patch | view | raw | blame | history | |
| opends/src/server/org/opends/server/config/ConfigConstants.java | ●●●●● patch | view | raw | blame | history | |
| opends/src/server/org/opends/server/tasks/ImportTask.java | ●●●●● patch | view | raw | blame | history | |
| opends/src/server/org/opends/server/tools/ImportLDIF.java | ●●●●● patch | view | raw | blame | history | |
| opends/src/server/org/opends/server/util/cli/CommandBuilder.java | ●●●●● patch | view | raw | blame | history |
opends/resource/schema/02-config.ldif
@@ -846,6 +846,14 @@ NAME 'ds-task-import-ldif-file' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'OpenDS Directory Server' ) attributeTypes: ( 1.3.6.1.4.1.26027.1.1.459 NAME 'ds-task-import-template-file' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'OpenDS Directory Server' ) attributeTypes: ( 1.3.6.1.4.1.26027.1.1.460 NAME 'ds-task-import-random-seed' SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 X-ORIGIN 'OpenDS Directory Server' ) attributeTypes: ( 1.3.6.1.4.1.26027.1.1.170 NAME 'ds-task-import-append' SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 @@ -2849,7 +2857,6 @@ NAME 'ds-task-import' SUP ds-task STRUCTURAL MUST ds-task-import-ldif-file MAY ( ds-task-import-append $ ds-task-import-replace-existing $ ds-task-import-include-branch $ @@ -2858,6 +2865,9 @@ ds-task-import-exclude-attribute $ ds-task-import-include-filter $ ds-task-import-exclude-filter $ ds-task-import-ldif-file $ ds-task-import-template-file $ ds-task-import-random-seed $ ds-task-import-reject-file $ ds-task-import-overwrite-rejects $ ds-task-import-skip-schema-validation $ opends/src/messages/messages/task.properties
@@ -189,3 +189,5 @@ INFO_TASK_STOPPED_BY_ADMIN_102=Task was stopped by an administrator: %s SEVERE_ERR_TASK_INITIALIZE_INVALID_GENERATION_ID_103=Invalid generation ID provided with the \ task INFO_IMPORT_ARG_TEMPLATE_FILE_104=Template File INFO_IMPORT_ARG_RANDOM_SEED_105=Random Seed opends/src/server/org/opends/server/config/ConfigConstants.java
@@ -3828,6 +3828,20 @@ NAME_PREFIX_TASK + "import-ldif-file"; /** * The name of the attribute in an import task definition that specifies the * path to the file containing the template data to import. */ public static final String ATTR_IMPORT_TEMPLATE_FILE = NAME_PREFIX_TASK + "import-template-file"; /** * The name of the attribute in an import task definition that specifies the * random seed to be used when we pass a template file to the import. */ public static final String ATTR_IMPORT_RANDOM_SEED = NAME_PREFIX_TASK + "import-random-seed"; /** * The name of the attribute in an import task definition that specifies opends/src/server/org/opends/server/tasks/ImportTask.java
@@ -30,8 +30,10 @@ import static org.opends.messages.TaskMessages.*; import static org.opends.messages.ToolMessages.*; import static org.opends.server.loggers.ErrorLogger.logError; import static org.opends.server.loggers.debug.DebugLogger.*; import org.opends.server.loggers.debug.DebugTracer; import org.opends.server.tools.makeldif.TemplateFile; import org.opends.server.types.DebugLogLevel; import static org.opends.server.util.StaticUtils.*; import static org.opends.server.config.ConfigConstants.*; @@ -57,11 +59,13 @@ import org.opends.server.types.ResultCode; import org.opends.server.types.SearchFilter; import java.io.File; import java.util.HashSet; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.HashMap; import java.util.Random; /** * This class provides an implementation of a Directory Server task that can @@ -87,6 +91,14 @@ INFO_IMPORT_ARG_LDIF_FILE.get()); argDisplayMap.put( ATTR_IMPORT_TEMPLATE_FILE, INFO_IMPORT_ARG_TEMPLATE_FILE.get()); argDisplayMap.put( ATTR_IMPORT_RANDOM_SEED, INFO_IMPORT_ARG_RANDOM_SEED.get()); argDisplayMap.put( ATTR_IMPORT_APPEND, INFO_IMPORT_ARG_APPEND.get()); @@ -169,6 +181,8 @@ ArrayList<String> includeBranchStrings = null; ArrayList<String> includeFilterStrings = null; ArrayList<String> ldifFiles = null; String templateFile = null; int randomSeed = 0; private LDIFImportConfig importConfig; @@ -209,6 +223,7 @@ Entry taskEntry = getTaskEntry(); AttributeType typeLdifFile; AttributeType typeTemplateFile; AttributeType typeAppend; AttributeType typeReplaceExisting; AttributeType typeBackendID; @@ -225,9 +240,12 @@ AttributeType typeIsCompressed; AttributeType typeIsEncrypted; AttributeType typeClearBackend; AttributeType typeRandomSeed; typeLdifFile = getAttributeType(ATTR_IMPORT_LDIF_FILE, true); typeTemplateFile = getAttributeType(ATTR_IMPORT_TEMPLATE_FILE, true); typeAppend = getAttributeType(ATTR_IMPORT_APPEND, true); typeReplaceExisting = @@ -260,12 +278,17 @@ getAttributeType(ATTR_IMPORT_IS_ENCRYPTED, true); typeClearBackend = getAttributeType(ATTR_IMPORT_CLEAR_BACKEND, true); typeRandomSeed = getAttributeType(ATTR_IMPORT_RANDOM_SEED, true); List<Attribute> attrList; attrList = taskEntry.getAttribute(typeLdifFile); ldifFiles = TaskUtils.getMultiValueString(attrList); attrList = taskEntry.getAttribute(typeTemplateFile); templateFile = TaskUtils.getSingleValueString(attrList); attrList = taskEntry.getAttribute(typeAppend); append = TaskUtils.getBoolean(attrList, false); @@ -314,6 +337,9 @@ attrList = taskEntry.getAttribute(typeClearBackend); clearBackend = TaskUtils.getBoolean(attrList, false); attrList = taskEntry.getAttribute(typeRandomSeed); randomSeed = TaskUtils.getSingleValueInteger(attrList, 0); // Make sure that either the "includeBranchStrings" argument or the // "backendID" argument was provided. if(includeBranchStrings.isEmpty() && backendID == null) @@ -756,8 +782,42 @@ } // Create the LDIF import configuration to use when reading the LDIF. ArrayList<String> fileList = new ArrayList<String>(ldifFiles); importConfig = new LDIFImportConfig(fileList); if (templateFile != null) { Random random; try { random = new Random(randomSeed); } catch (Exception e) { random = new Random(); } String resourcePath = DirectoryServer.getServerRoot() + File.separator + PATH_MAKELDIF_RESOURCE_DIR; TemplateFile tf = new TemplateFile(resourcePath, random); ArrayList<Message> warnings = new ArrayList<Message>(); try { tf.parse(templateFile, warnings); } catch (Exception e) { Message message = ERR_LDIFIMPORT_CANNOT_PARSE_TEMPLATE_FILE.get( templateFile, e.getMessage()); logError(message); return TaskState.STOPPED_BY_ERROR; } importConfig = new LDIFImportConfig(tf); } else { ArrayList<String> fileList = new ArrayList<String>(ldifFiles); importConfig = new LDIFImportConfig(fileList); } importConfig.setAppendToExistingData(append); importConfig.setReplaceExistingEntries(replaceExisting); importConfig.setCompressed(isCompressed); opends/src/server/org/opends/server/tools/ImportLDIF.java
@@ -465,13 +465,33 @@ // Required attributes // ArrayList<ASN1OctetString> values; List<String> fileList = ldifFiles.getValues(); if (fileList != null && fileList.size() > 0) { values = new ArrayList<ASN1OctetString>(fileList.size()); for (String file : fileList) { values.add(new ASN1OctetString(file)); if ((fileList != null) && (fileList.size() > 0)) { if (fileList != null && fileList.size() > 0) { values = new ArrayList<ASN1OctetString>(fileList.size()); for (String file : fileList) { values.add(new ASN1OctetString(file)); } attributes.add(new LDAPAttribute(ATTR_IMPORT_LDIF_FILE, values)); } attributes.add(new LDAPAttribute(ATTR_IMPORT_LDIF_FILE, values)); } String templateFileValue = templateFile.getValue(); if (templateFileValue != null) { values = new ArrayList<ASN1OctetString>(1); values.add(new ASN1OctetString(templateFileValue)); attributes.add(new LDAPAttribute(ATTR_IMPORT_TEMPLATE_FILE, values)); } String randomSeedValue = randomSeed.getValue(); if (randomSeedValue != null) { values = new ArrayList<ASN1OctetString>(1); values.add(new ASN1OctetString(randomSeedValue)); attributes.add(new LDAPAttribute(ATTR_IMPORT_RANDOM_SEED, values)); } // opends/src/server/org/opends/server/util/cli/CommandBuilder.java
@@ -249,15 +249,15 @@ } // Chars that require special treatment when passing them to command-line. private final char[] charsToEscape = {' ', '\t', '\n', '|', ';', '<', '>', '(', ')', '$', '`', '\\', '"', '\''}; private final static char[] charsToEscape = {' ', '\t', '\n', '|', ';', '<', '>', '(', ')', '$', '`', '\\', '"', '\''}; /** * This method simply takes a value and tries to transform it (with escape or * '"') characters so that it can be used in a command line. * @param value the String to be treated. * @return the transformed value. */ private String escapeValue(String value) public static String escapeValue(String value) { StringBuilder b = new StringBuilder(); if (SetupUtils.isUnix())