Checkpoint commit for OPENDJ-1206 : Create a new ReplicationBackend/ChangelogBackend to support cn=changelog
Merged + corrected backend error messages by passing in the backendID into the error messages + fixed translations (!?!)
Started implementing ChangelogBackend by adding error messages.
Used Collections.emptySet() for supported controls and / or features, where applicable.
Generecized Backend class with the type of the configuration object + applied specific types to sub-classes of Backend.
Code cleanups + factorized code by extracting methods + ran AutoRefactor.
| | |
| | | package org.opends.guitools.controlpanel.util; |
| | | |
| | | import java.io.File; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.HashSet; |
| | | import java.util.Set; |
| | | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.forgerock.opendj.ldap.ConditionResult; |
| | | import org.opends.server.admin.Configuration; |
| | | import org.opends.server.admin.std.server.BackendCfg; |
| | | import org.opends.server.api.ConfigHandler; |
| | | import org.opends.server.config.ConfigEntry; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.core.AddOperation; |
| | | import org.opends.server.core.DeleteOperation; |
| | | import org.opends.server.core.DirectoryServer; |
| | |
| | | import org.opends.server.types.RestoreConfig; |
| | | import org.opends.server.util.LDIFException; |
| | | import org.opends.server.util.LDIFReader; |
| | | import org.opends.server.util.StaticUtils; |
| | | |
| | | import static org.opends.messages.ConfigMessages.*; |
| | | import static org.opends.server.util.StaticUtils.*; |
| | | |
| | | /** |
| | | * A class used to read the configuration from a file. This config file |
| | | * handler does not allow to modify the configuration, only to read it. |
| | | */ |
| | | public class ReadOnlyConfigFileHandler extends ConfigHandler |
| | | public class ReadOnlyConfigFileHandler extends ConfigHandler<BackendCfg> |
| | | { |
| | | //The mapping that holds all of the configuration entries that have been read |
| | | // from the LDIF file. |
| | | /** |
| | | * The mapping that holds all of the configuration entries that have been read |
| | | * from the LDIF file. |
| | | */ |
| | | private HashMap<DN,ConfigEntry> configEntries = new HashMap<DN,ConfigEntry>(); |
| | | |
| | | //The reference to the configuration root entry. |
| | | /** The reference to the configuration root entry. */ |
| | | private ConfigEntry configRootEntry; |
| | | |
| | | // The server root |
| | | /** The server root */ |
| | | private String serverRoot; |
| | | |
| | | // The instance root |
| | | /** The instance root */ |
| | | private String instanceRoot; |
| | | |
| | | private final Set<String> emptyStringSet = new HashSet<String>(); |
| | | |
| | | private DN[] baseDNs; |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void finalizeConfigHandler() |
| | | { |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConfigEntry getConfigEntry(DN entryDN) throws ConfigException |
| | | { |
| | | return configEntries.get(entryDN); |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConfigEntry getConfigRootEntry() throws ConfigException |
| | | { |
| | | return configRootEntry; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public String getServerRoot() |
| | | { |
| | | return serverRoot; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public String getInstanceRoot() |
| | | { |
| | | return instanceRoot; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public synchronized void initializeConfigHandler(String configFile, |
| | | boolean checkSchema) |
| | |
| | | } |
| | | finally |
| | | { |
| | | StaticUtils.close(reader); |
| | | close(reader); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void writeSuccessfulStartupConfig() |
| | | { |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void writeUpdatedConfig() throws DirectoryException |
| | | { |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void addEntry(Entry arg0, AddOperation arg1) |
| | | public void addEntry(Entry entry, AddOperation arg1) |
| | | throws DirectoryException, CanceledOperationException |
| | | { |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void configureBackend(Configuration arg0) throws ConfigException |
| | | public void configureBackend(BackendCfg cfg) throws ConfigException |
| | | { |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void createBackup(BackupConfig arg0) throws DirectoryException |
| | | { |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void deleteEntry(DN arg0, DeleteOperation arg1) |
| | | throws DirectoryException, CanceledOperationException |
| | | { |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void exportLDIF(LDIFExportConfig arg0) throws DirectoryException |
| | | { |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void finalizeBackend() |
| | | { |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public DN[] getBaseDNs() |
| | | { |
| | | return baseDNs; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Entry getEntry(DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | | ConfigEntry configEntry = configEntries.get(entryDN); |
| | | if (configEntry == null) |
| | | { |
| | | return null; |
| | | } |
| | | else |
| | | if (configEntry != null) |
| | | { |
| | | return configEntry.getEntry(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public long getEntryCount() |
| | | { |
| | | return configEntries.size(); |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedControls() |
| | | { |
| | | return emptyStringSet; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedFeatures() |
| | | { |
| | | return emptyStringSet; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConditionResult hasSubordinates(DN entryDN) throws DirectoryException |
| | | { |
| | |
| | | return ConditionResult.UNDEFINED; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public LDIFImportResult importLDIF(LDIFImportConfig arg0) |
| | | throws DirectoryException |
| | |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void initializeBackend() |
| | | throws ConfigException, InitializationException |
| | | { |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isIndexed(AttributeType arg0, IndexType arg1) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isLocal() |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public long numSubordinates(DN entryDN, boolean subtree) |
| | | throws DirectoryException |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void preloadEntryCache() throws UnsupportedOperationException |
| | | { |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void removeBackup(BackupDirectory arg0, String arg1) |
| | | public void removeBackup(BackupDirectory backupDirectory, String backupID) |
| | | throws DirectoryException |
| | | { |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void renameEntry(DN arg0, Entry arg1, ModifyDNOperation arg2) |
| | | public void renameEntry(DN currentDN, Entry entry, ModifyDNOperation modifyDNOperation) |
| | | throws DirectoryException, CanceledOperationException |
| | | { |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void replaceEntry(Entry arg0, Entry arg1, ModifyOperation arg2) |
| | | public void replaceEntry(Entry oldEntry, Entry newEntry, ModifyOperation modifyOperation) |
| | | throws DirectoryException, CanceledOperationException |
| | | { |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void restoreBackup(RestoreConfig arg0) throws DirectoryException |
| | | public void restoreBackup(RestoreConfig restoreConfig) throws DirectoryException |
| | | { |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void search(SearchOperation arg0) |
| | | public void search(SearchOperation searchOperation) |
| | | throws DirectoryException, CanceledOperationException |
| | | { |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup() |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup(BackupConfig arg0, StringBuilder arg1) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFExport() |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFImport() |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsRestore() |
| | | { |
| | | return false; |
| | | } |
| | | } |
| | | |
| | |
| | | retrieve entry with DN "%s". This backend should only be asked to retrieve \ |
| | | the root DSE itself. However, it will check with the defined subordinate \ |
| | | backends and see if it can find the requested entry |
| | | ERR_ROOTDSE_ADD_NOT_SUPPORTED_7=Unwilling to add entry "%s" because add \ |
| | | operations are not supported in the root DSE backend |
| | | ERR_ROOTDSE_DELETE_NOT_SUPPORTED_8=Unwilling to remove entry "%s" \ |
| | | because delete operations are not supported in the root DSE backend |
| | | ERR_ROOTDSE_MODIFY_NOT_SUPPORTED_9=Unwilling to update entry "%s" \ |
| | | because modify operations are not supported in the root DSE backend. If you \ |
| | | wish to alter the contents of the root DSE itself, then it may be possible to \ |
| | | do so by modifying the "%s" entry in the configuration |
| | | ERR_ROOTDSE_MODIFY_DN_NOT_SUPPORTED_10=Unwilling to rename entry "%s" \ |
| | | because modify DN operations are not supported in the root DSE backend |
| | | ERR_ROOTDSE_INVALID_SEARCH_BASE_11=Unwilling to perform a search \ |
| | | (connection ID %d, operation ID %d) with a base DN of "%s" in the root DSE \ |
| | | backend. The base DN for searches in this backend must be the DN of the root \ |
| | |
| | | occurred while trying to open the LDIF writer for the root DSE backend: %s |
| | | ERR_ROOTDSE_UNABLE_TO_EXPORT_DSE_15=An unexpected error occurred while \ |
| | | trying to export the root DSE entry to the specified LDIF target: %s |
| | | ERR_ROOTDSE_IMPORT_NOT_SUPPORTED_16=The root DSE backend does not \ |
| | | support LDIF import operations |
| | | ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED_17=The root DSE backend \ |
| | | does not provide a facility for backup and restore operations. The contents \ |
| | | of the root DSE should be backed up as part of the Directory Server \ |
| | |
| | | occurred while attempting to decode cn=monitor as the base DN for the \ |
| | | Directory Server monitor information: %s. No monitor information will be \ |
| | | available over protocol |
| | | ERR_MONITOR_ADD_NOT_SUPPORTED_23=Unwilling to add entry "%s" because add \ |
| | | operations are not supported in the monitor backend |
| | | ERR_MONITOR_DELETE_NOT_SUPPORTED_24=Unwilling to remove entry "%s" \ |
| | | because delete operations are not supported in the monitor backend |
| | | ERR_BACKEND_ADD_NOT_SUPPORTED_23=Unwilling to add entry "%s" because add \ |
| | | operations are not supported in the "%s" backend |
| | | ERR_BACKEND_DELETE_NOT_SUPPORTED_24=Unwilling to remove entry "%s" \ |
| | | because delete operations are not supported in the "%s" backend |
| | | ERR_MONITOR_MODIFY_NOT_SUPPORTED_25=Unwilling to update entry "%s" \ |
| | | because modify operations are not supported in the monitor backend. If you \ |
| | | wish to alter the contents of the base monitor entry itself, then it may be \ |
| | | possible to do so by modifying the "%s" entry in the configuration |
| | | ERR_MONITOR_MODIFY_DN_NOT_SUPPORTED_26=Unwilling to rename entry "%s" \ |
| | | because modify DN operations are not supported in the monitor backend |
| | | ERR_BACKEND_MODIFY_DN_NOT_SUPPORTED_26=Unwilling to rename entry "%s" \ |
| | | because modify DN operations are not supported in the "%s" backend |
| | | ERR_MONITOR_UNABLE_TO_EXPORT_BASE_27=An error occurred while \ |
| | | attempting to export the base monitor entry: %s |
| | | ERR_MONITOR_UNABLE_TO_EXPORT_PROVIDER_ENTRY_28=An error occurred while \ |
| | | attempting to export the monitor entry for monitor provider %s: %s |
| | | ERR_MONITOR_IMPORT_NOT_SUPPORTED_29=The monitor backend does not \ |
| | | ERR_BACKEND_IMPORT_NOT_SUPPORTED_29=The "%s" backend does not \ |
| | | support LDIF import operations |
| | | ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED_30=The monitor backend \ |
| | | does not provide a facility for backup and restore operations |
| | | INFO_MONITOR_USING_NEW_USER_ATTRS_31=The monitor configuration has been \ |
| | | updated so that it will now use a new set of user-defined attributes |
| | | ERR_MONITOR_GET_ENTRY_NULL_32=Unable to retrieve the requested entry \ |
| | | from the monitor backend because the provided DN was null |
| | | ERR_BACKEND_GET_ENTRY_NULL_32=Unable to retrieve the requested entry \ |
| | | from the "%s" backend because the provided DN was null |
| | | ERR_BACKEND_CANNOT_DECODE_BACKEND_ROOT_DN_33= Unable to initialize the \ |
| | | "%s" backend because an error occurred while attempting to decode the base \ |
| | | DN for this backend: %s |
| | | ERR_MONITOR_INVALID_BASE_34=Unable to retrieve the requested entry %s \ |
| | | from the monitor backend because the DN is not below the monitor base of %s |
| | | INFO_MONITOR_UPTIME_37=%d days %d hours %d minutes %d seconds |
| | |
| | | information, as specified in the ds-cfg-schema-entry-dn attribute of \ |
| | | configuration entry %s: %s. The default schema base DN of cn=schema will be \ |
| | | used |
| | | ERR_SCHEMA_ADD_NOT_SUPPORTED_41=Unwilling to add entry "%s" because add \ |
| | | operations are not supported in the schema backend |
| | | ERR_SCHEMA_DELETE_NOT_SUPPORTED_42=Unwilling to remove entry "%s" \ |
| | | because delete operations are not supported in the schema backend |
| | | ERR_SCHEMA_MODIFY_DN_NOT_SUPPORTED_44=Unwilling to rename entry "%s" \ |
| | | because modify DN operations are not supported in the schema backend |
| | | ERR_SCHEMA_UNABLE_TO_EXPORT_BASE_45=An error occurred while attempting \ |
| | | to export the base schema entry: %s |
| | | ERR_SCHEMA_INVALID_BASE_48=Unable to retrieve the requested entry %s \ |
| | |
| | | ERR_TASKBE_ADD_DISALLOWED_DN_130=New entries in the task backend may \ |
| | | only be added immediately below %s for scheduled tasks or immediately below \ |
| | | %s for recurring tasks |
| | | ERR_TASKBE_MODIFY_DN_NOT_SUPPORTED_131=Modify DN operations are not \ |
| | | supported in the task backend |
| | | INFO_TASKBE_BACKING_FILE_HEADER_132=This file contains the data used by the \ |
| | | Directory Server task scheduler backend. Do not edit this file directly, as \ |
| | | there is a risk that those changes will be lost. Scheduled and recurring \ |
| | |
| | | ERR_TASKSCHED_CANNOT_WRITE_BACKING_FILE_154=An error occurred while \ |
| | | attempting to write the new tasks data backing file %s: %s. Configuration \ |
| | | information reflecting the latest update may be lost |
| | | ERR_TASKBE_IMPORT_NOT_SUPPORTED_155=The task backend does not support \ |
| | | LDIF import operations |
| | | INFO_TASKBE_INTERRUPTED_BY_SHUTDOWN_156=The tasks backend is being shut down |
| | | INFO_ROOTDSE_UPDATED_SHOW_ALL_ATTRS_159=The root DSE configuration has been \ |
| | | updated so that configuration attribute %s will now use a value of %s |
| | |
| | | ERR_TASKBE_SEARCH_NO_SUCH_RECURRING_TASK_170=Unable to process the \ |
| | | search operation in the task backend because there is no recurring task \ |
| | | associated with the provided search base entry %s |
| | | ERR_BACKUP_CONFIG_ENTRY_NULL_171=Unable to initialize the backup \ |
| | | ERR_BACKEND_CONFIG_ENTRY_NULL_171=Unable to initialize the "%s" \ |
| | | backend because the provided configuration entry is null |
| | | ERR_BACKUP_CANNOT_DECODE_BACKUP_ROOT_DN_172=Unable to initialize the \ |
| | | backup backend because an error occurred while attempting to decode the base \ |
| | | DN for the backend: %s |
| | | ERR_BACKUP_GET_ENTRY_NULL_175=Unable to retrieve an entry from the \ |
| | | backup backend because the requested entry was null |
| | | ERR_BACKUP_INVALID_BASE_176=Requested entry %s does not exist in the \ |
| | | backup backend |
| | | ERR_BACKUP_DN_DOES_NOT_SPECIFY_DIRECTORY_177=Unable to retrieve entry \ |
| | |
| | | which the requested backup should reside |
| | | ERR_BACKUP_NO_SUCH_BACKUP_183=Backup %s does not exist in backup \ |
| | | directory %s |
| | | ERR_BACKUP_ADD_NOT_SUPPORTED_184=Add operations are not supported in \ |
| | | the backup backend |
| | | ERR_BACKUP_DELETE_NOT_SUPPORTED_185=Delete operations are not \ |
| | | supported in the backup backend |
| | | ERR_BACKUP_MODIFY_NOT_SUPPORTED_186=Modify operations are not \ |
| | | supported in the backup backend |
| | | ERR_BACKUP_MODIFY_DN_NOT_SUPPORTED_187=Modify DN operations are not \ |
| | | supported in the backup backend |
| | | ERR_BACKEND_MODIFY_NOT_SUPPORTED_186=Unwilling to update entry "%s" \ |
| | | because modify operations are not supported in the "%s" backend |
| | | ERR_BACKUP_NO_SUCH_ENTRY_188=The requested entry %s does not exist in \ |
| | | the backup backend |
| | | ERR_BACKUP_EXPORT_NOT_SUPPORTED_189=LDIF export operations are not \ |
| | | supported in the backup backend |
| | | ERR_BACKUP_IMPORT_NOT_SUPPORTED_190=LDIF import operations are not \ |
| | | supported in the backup backend |
| | | ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED_191=Backup and restore \ |
| | | operations are not supported in the backup backend |
| | | ERR_MEMORYBACKEND_REQUIRE_EXACTLY_ONE_BASE_192=Exactly one base DN \ |
| | | must be provided for use with the memory-based backend |
| | | ERR_MEMORYBACKEND_ENTRY_ALREADY_EXISTS_193=Entry %s already exists in \ |
| | |
| | | the memory-based backend |
| | | ERR_MEMORYBACKEND_PARENT_DOESNT_EXIST_195=Unable to add entry %s \ |
| | | because its parent entry %s does not exist in the memory-based backend |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST_196=Entry %s does not exist in \ |
| | | the memory-based backend |
| | | ERR_BACKEND_ENTRY_DOESNT_EXIST_196=Entry %s does not exist in \ |
| | | the "%s" backend |
| | | ERR_MEMORYBACKEND_CANNOT_DELETE_ENTRY_WITH_CHILDREN_197=Cannot delete \ |
| | | entry %s because it has one or more subordinate entries |
| | | ERR_MEMORYBACKEND_CANNOT_CREATE_LDIF_WRITER_199=Unable to create an \ |
| | |
| | | INFO_TASK_COMPLETION_BODY_299=Task ID: %s\r\nTask State: %s\r\nScheduled \ |
| | | Start Time: %s\r\nActual Start Time: %s\r\nCompletion Time: %s\r\n\r\nLog \ |
| | | Messages:\r\n |
| | | ERR_TRUSTSTORE_GET_ENTRY_NULL_300=Unable to retrieve an entry from the \ |
| | | trust store backend because the requested entry was null |
| | | ERR_TRUSTSTORE_INVALID_BASE_301=Requested entry %s does not exist in \ |
| | | the trust store backend |
| | | ERR_TRUSTSTORE_DN_DOES_NOT_SPECIFY_CERTIFICATE_302=Unable to process \ |
| | |
| | | below the base DN but does not specify a certificate name |
| | | ERR_TRUSTSTORE_CANNOT_RETRIEVE_CERT_303=Error while trying to retrieve \ |
| | | certificate %s from the trust store file %s: %s |
| | | ERR_TRUSTSTORE_MODIFY_NOT_SUPPORTED_304=Modify operations are not \ |
| | | supported in the trust store backend |
| | | ERR_TRUSTSTORE_MODIFY_DN_NOT_SUPPORTED_305=Modify DN operations are not \ |
| | | supported in the trust store backend |
| | | ERR_TRUSTSTORE_REQUIRES_ONE_BASE_DN_306=Unable to \ |
| | | initialize the trust store backend from configuration entry %s because it \ |
| | | does not contain exactly one base DN |
| | | ERR_TRUSTSTORE_IMPORT_AND_EXPORT_NOT_SUPPORTED_307=LDIF import and \ |
| | | export operations are not supported in the trust store backend |
| | | ERR_TRUSTSTORE_BACKUP_AND_RESTORE_NOT_SUPPORTED_308=Backup and \ |
| | | restore operations are not supported in the trust store backend |
| | | ERR_BACKEND_IMPORT_AND_EXPORT_NOT_SUPPORTED_307=LDIF import and \ |
| | | export operations are not supported in the "%s" backend |
| | | ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED_308=Backup and \ |
| | | restore operations are not supported in the "%s" backend |
| | | ERR_TRUSTSTORE_NO_SUCH_FILE_309=The trust store file %s \ |
| | | specified in attribute ds-cfg-trust-store-file of configuration entry %s does \ |
| | | not exist |
| | |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST_196=L'entrada %s no existeix en la infraestructura de fons (Backend) basada en mem\u00f2ria |
| | | ERR_BACKEND_ENTRY_DOESNT_EXIST_196=L'entrada %s no existeix en la infraestructura de fons (Backend) "%s" |
| | | ERR_MEMORYBACKEND_CANNOT_DELETE_ENTRY_WITH_CHILDREN_197=No es pot eliminar l'entrada %s perqu\u00e8 t\u00e9 una o m\u00e9s tasques subordinades |
| | | NOTE_BACKEND_OFFLINE_370=La infraestructura de fons (Backend): %s, ara s'est\u00e0 desconnectant |
| | | ERR_RECURRINGTASK_INVALID_N_TOKENS_371=L'atribut d'entrada de tasca recorrent proporcionada %s que subjecta la programaci\u00f3 de la tasca recurrent, t\u00e9 un n\u00famero incorrecte de senyals |
| | |
| | | WARN_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE_4=Basis-DN "%s" ist als einer der untergeordneten Basis-DNs konfiguriert, der f\u00fcr Suchen unterhalb der Root-DSE verwendet wird. Diese Basis-DN wird jedoch nicht von einem Suffix, das mit dem Directory-Server registriert ist, bearbeitet und wird daher nicht verwendet |
| | | WARN_ROOTDSE_SUBORDINATE_BASE_EXCEPTION_5=Unerwarteter Fehler beim Versuch, den Satz von untergeordneten Basis-DNs, die f\u00fcr die Suchen unterhalb der Root-DSE verwendet werden, festzulegen: %s |
| | | WARN_ROOTDSE_GET_ENTRY_NONROOT_6=Beim Root-DSE-Backend wurde die Abfrage des Eintrags mit der DN "%s" angefordert. Fragen Sie \u00fcber dieses Backend ausschlie\u00dflich den Root-DSE selbst ab. Die definierten untergeordneten Backends werden trotzdem \u00fcberpr\u00fcft und der angeforderte Eintrag wird gesucht |
| | | ERR_ROOTDSE_ADD_NOT_SUPPORTED_7=Eintrag "%s" kann nicht hinzugef\u00fcgt werden, da Hinzuf\u00fcgevorg\u00e4nge im Root-DSE-Backend nicht unterst\u00fctzt werden |
| | | ERR_ROOTDSE_DELETE_NOT_SUPPORTED_8=Eintrag "%s" kann nicht entfernt werden, da L\u00f6schvorg\u00e4nge im Root-DSE-Backend nicht unterst\u00fctzt werden |
| | | ERR_ROOTDSE_MODIFY_NOT_SUPPORTED_9=Eintrag "%s" kann nicht aktualisiert werden, da Bearbeitungsvorg\u00e4nge im Root-DSE-Backend nicht unterst\u00fctzt werden. Um Inhalte des Root-DSE zu \u00e4ndern, bearbeiten Sie den Eintrag "%s" in der Konfiguration |
| | | ERR_ROOTDSE_MODIFY_DN_NOT_SUPPORTED_10=Eintrag "%s" kann nicht umbenannt werden, weil DN-Bearbeitungsvorg\u00e4nge im Root-DSE-Backend nicht unterst\u00fctzt werden |
| | | ERR_ROOTDSE_INVALID_SEARCH_BASE_11=Suche (Verbindungs-ID %d, Vorgangs-ID %d) mit dem Basis-DN "%s" kann im Root-DSE-Backend nicht ausgef\u00fchrt werden. Der Basis-DN f\u00fcr Suchen in diesem Backend muss dem DN des Root-DSE entsprechen |
| | | ERR_ROOTDSE_UNEXPECTED_SEARCH_FAILURE_12=Unerwarteter Fehler beim Versuch, einen Suchvorgang (Verbindungs-ID %d, Vorgangs-ID %d) im Root-DSE-Backend zu verarbeiten: %s |
| | | ERR_ROOTDSE_INVALID_SEARCH_SCOPE_13=Die Suche konnte nicht mit Verbindungs-ID %d und Vorgangs-ID %d verarbeitet werden, da der Geltungsbereich von %s ung\u00fcltig ist |
| | | ERR_ROOTDSE_UNABLE_TO_CREATE_LDIF_WRITER_14=Unerwarteter Fehler beim Versuch, den LDIF-Schreiber f\u00fcr das Root-DSE-Backend zu \u00f6ffnen: %s |
| | | ERR_ROOTDSE_UNABLE_TO_EXPORT_DSE_15=Unerwarteter Fehler beim Versuch, den Root-DSE-Eintrag in ein spezifiziertes LDIF-Ziel zu exportieren: %s |
| | | ERR_ROOTDSE_IMPORT_NOT_SUPPORTED_16=Das Root-DSE-Backend unterst\u00fctzt keine LDIF-Importvorg\u00e4nge |
| | | ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED_17=Das Root-DSE-Backend bietet keine M\u00f6glichkeit f\u00fcr Sicherungs- und Wiederherstellungsvorg\u00e4nge. Der Inhalt des Root-DSE sollte als Teil der Directory-Server-Konfiguration gesichert werden |
| | | INFO_ROOTDSE_USING_SUFFIXES_AS_BASE_DNS_18=Die Root-DSE-Konfiguration wurde aktualisiert und verwendet den definierten Satz von Directory-Server-Suffixen f\u00fcr Suchen unterhalb des Root-DSE |
| | | INFO_ROOTDSE_USING_NEW_SUBORDINATE_BASE_DNS_19=Die Root-DSE-Konfiguration wurde aktualisiert und verwendet den Basis-DN-Satz %s f\u00fcr Suchen unterhalb des Root-DSE |
| | | INFO_ROOTDSE_USING_NEW_USER_ATTRS_20=Die Root-DSE-Konfiguration wurde aktualisiert und verwendet einen neuen Satz benutzerdefinierter Attribute |
| | | ERR_MONITOR_CONFIG_ENTRY_NULL_21=Es wurde versucht, das Monitoring-Backend ohne Angabe eines Konfigurationseintrags zu konfigurieren. Dies ist unzul\u00e4ssig. Es sind keine Monitoring-Informationen \u00fcber das Protokoll verf\u00fcgbar |
| | | ERR_MONITOR_CANNOT_DECODE_MONITOR_ROOT_DN_22=Unerwarteter Fehler beim Versuch, cn=monitor als Basis-DN f\u00fcr Monitoring-Informationen\u00b7des Directory-Servers zu entschl\u00fcsseln: %s. Es sind keine Monitoring-Informationen \u00fcber das Protokoll verf\u00fcgbar |
| | | ERR_MONITOR_ADD_NOT_SUPPORTED_23=Eintrag "%s" kann nicht hinzugef\u00fcgt werden, da Hinzuf\u00fcgevorg\u00e4nge im Monitoring-Backend nicht unterst\u00fctzt werden |
| | | ERR_MONITOR_DELETE_NOT_SUPPORTED_24=Eintrag "%s" kann nicht entfernt werden, da L\u00f6schvorg\u00e4nge im Monitoring-Backend nicht unterst\u00fctzt werden |
| | | ERR_BACKEND_ADD_NOT_SUPPORTED_23=Eintrag "%s" kann nicht hinzugef\u00fcgt werden, da Hinzuf\u00fcgevorg\u00e4nge im "%s"-Backend nicht unterst\u00fctzt werden |
| | | ERR_BACKEND_DELETE_NOT_SUPPORTED_24=Eintrag "%s" kann nicht entfernt werden, da L\u00f6schvorg\u00e4nge im "%s"-Backend nicht unterst\u00fctzt werden |
| | | ERR_MONITOR_MODIFY_NOT_SUPPORTED_25=Eintrag "%s" kann nicht aktualisiert werden, da Bearbeitungsvorg\u00e4nge im Monitoring-Backend nicht unterst\u00fctzt werden. Um die Inhalte des Basismonitoreintrags zu \u00e4ndern, bearbeiten Sie den Eintrag "%s" in der Konfiguration |
| | | ERR_MONITOR_MODIFY_DN_NOT_SUPPORTED_26=Eintrag "%s" kann nicht umbenannt werden, da DN-Bearbeitungsvorg\u00e4ngen im Monitoring-Backend nicht unterst\u00fctzt werden |
| | | ERR_BACKEND_MODIFY_DN_NOT_SUPPORTED_26=Eintrag "%s" kann nicht umbenannt werden, da DN-Bearbeitungsvorg\u00e4ngen im "%s"-Backend nicht unterst\u00fctzt werden |
| | | ERR_MONITOR_UNABLE_TO_EXPORT_BASE_27=Fehler beim Versuch, den Basismonitoreintrag zu exportieren: %s |
| | | ERR_MONITOR_UNABLE_TO_EXPORT_PROVIDER_ENTRY_28=Fehler beim Versuch, den Monitoreintrag f\u00fcr den \u00dcberwachungsanbieter %s zu exportieren: %s |
| | | ERR_MONITOR_IMPORT_NOT_SUPPORTED_29=Das Monitoring-Backend unterst\u00fctzt keine LDIF-Importvorg\u00e4nge |
| | | ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED_30=Das Monitoring-Backend bietet keine M\u00f6glichkeit f\u00fcr Sicherungs- und Wiederherstellungsvorg\u00e4nge |
| | | ERR_BACKEND_IMPORT_NOT_SUPPORTED_29=Das "%s"-Backend unterst\u00fctzt keine LDIF-Importvorg\u00e4nge |
| | | INFO_MONITOR_USING_NEW_USER_ATTRS_31=Die Monitorkonfiguration wurde aktualisiert und verwendet einen neuen Satz benutzerdefinierter Attribute |
| | | ERR_MONITOR_GET_ENTRY_NULL_32=Angeforderter Eintrag kann nicht vom Monitoring-Backend abgerufen werden, da der angegebene DN ung\u00fcltig ist |
| | | ERR_BACKEND_GET_ENTRY_NULL_32=Angeforderter Eintrag kann nicht vom "%s"-Backend abgerufen werden, da der angegebene DN ung\u00fcltig ist |
| | | ERR_MONITOR_INVALID_BASE_34=Angeforderter Eintrag %s kann nicht vom Monitoring-Backend abgerufen werden, da sich der DN nicht unterhalb der Monitorbasis %s befindet |
| | | INFO_MONITOR_UPTIME_37=%d Tage %d Stunden %d Minuten %d Sekunden |
| | | ERR_SCHEMA_CONFIG_ENTRY_NULL_38=Es wurde versucht, das Schema-Backend ohne Angabe eines Konfigurationseintrags zu konfigurieren. Dies ist unzul\u00e4ssig. Es sind keine Schemainformationen \u00fcber das Protokoll verf\u00fcgbar |
| | | ERR_SCHEMA_CANNOT_DETERMINE_BASE_DN_40=Fehler beim Versuch, die Basis-DNs, die beim Ver\u00f6ffentlichen der Schemainformationen des Directory-Servers verwendet werden, wie in Attribut ds-cfg-schema-entry-dn des Konfigurationseintrags %s spezifiziert: %s. Der standardm\u00e4\u00dfige Schema-Basis-DN von cn=schema wird verwendet |
| | | ERR_SCHEMA_ADD_NOT_SUPPORTED_41=Eintrag "%s" kann nicht hinzugef\u00fcgt werden, da Hinzuf\u00fcgevorg\u00e4nge im Schema-Backend nicht unterst\u00fctzt werden |
| | | ERR_SCHEMA_DELETE_NOT_SUPPORTED_42=Eintrag "%s" kann nicht entfernt werden, da L\u00f6schvorg\u00e4nge im Schema-Backend nicht unterst\u00fctzt werden |
| | | ERR_SCHEMA_MODIFY_DN_NOT_SUPPORTED_44=Eintrag "%s" kann nicht umbenannt werden, da DN-Bearbeitungsvorg\u00e4nge im Schema-Backend nicht unterst\u00fctzt werden |
| | | ERR_SCHEMA_UNABLE_TO_EXPORT_BASE_45=Fehler beim Versuch, den Basisschemaeintrag zu exportieren: %s |
| | | ERR_SCHEMA_INVALID_BASE_48=Angeforderter Eintrag %s kann nicht vom Schema-Backend abgerufen werden, weil der DN einem der Schemaeintrags-DNs entspricht |
| | | ERR_SCHEMA_UNABLE_TO_CREATE_LDIF_WRITER_49=Fehler beim Versuch, den LDIF-Schreiber f\u00fcr das Schema-Backend zu \u00f6ffnen: %s |
| | |
| | | INFO_TASKBE_UPDATED_RETENTION_TIME_128=Die Aufbewahrungszeit f\u00fcr abgeschlossene Aufgaben wurde auf %d Sekunden aktualisiert. Sie tritt sofort in Kraft |
| | | INFO_TASKBE_UPDATED_BACKING_FILE_129=Der Pfad zur Erg\u00e4nzungsdatei wurde ge\u00e4ndert nach %s. Ein Schnappschuss der aktuellen Aufgabenkonfiguration wurde in die Datei geschrieben und wird f\u00fcr zuk\u00fcnftige Aktualisierungen weiterverwendet |
| | | ERR_TASKBE_ADD_DISALLOWED_DN_130=Neue Eintr\u00e4ge in dem Aufgaben-Backend k\u00f6nnen nur direkt unter %s f\u00fcr geplante Aufgaben oder direkt unter %s f\u00fcr wiederkehrende Aufgaben hinzugef\u00fcgt werden |
| | | ERR_TASKBE_MODIFY_DN_NOT_SUPPORTED_131=Die \u00c4nderung von DN-Vorg\u00e4ngen wird in dem Aufgaben-Backend nicht unterst\u00fctzt |
| | | INFO_TASKBE_BACKING_FILE_HEADER_132=Diese Datei enth\u00e4lt die Daten, die der Aufgaben-Scheduler-Backend des Directory-Servers verwendet. Bearbeiten Sie diese Datei nicht direkt, da solche \u00c4nderungen verloren gehen k\u00f6nnen. Bearbeiten Sie Definitionen von geplanten und wiederkehrenden Aufgaben nur mit den zusammen mit dem Directory-Server gelieferten Administrationsdienstprogrammen |
| | | ERR_TASKSCHED_DUPLICATE_RECURRING_ID_133=Wiederkehrende Aufgabe %s konnte nicht zum Aufgaben-Scheduler hinzugef\u00fcgt werden, da eine andere wiederkehrende Aufgabe mit derselben ID bereits vorhanden ist |
| | | ERR_TASKSCHED_DUPLICATE_TASK_ID_134=Aufgabe %s konnte nicht geplant werden, da eine andere Aufgabe mit derselben ID bereits vorhanden ist |
| | |
| | | WARN_TASKSCHED_CANNOT_RENAME_CURRENT_BACKING_FILE_152=Fehler beim Versuch, die aktuelle Erg\u00e4nzungsdatei der Aufgabendaten von %s in %s umzubenennen: %s. Die vorherige Aufgabenkonfiguration (in der die neueste Aktualisierung nicht widergegeben wird) geht m\u00f6glicherweise verloren |
| | | ERR_TASKSCHED_CANNOT_RENAME_NEW_BACKING_FILE_153=Fehler beim Versuch, die neue Erg\u00e4ngzungsdatei der Aufgabendaten von %s in %s umzubenennen: %s. Nach einem Neustart des Directory-Servers arbeitet der Aufgaben-Scheduler m\u00f6glicherweise nicht wie erwartet |
| | | ERR_TASKSCHED_CANNOT_WRITE_BACKING_FILE_154=Fehler beim Versuch, die neue Erg\u00e4nzungsdatei %s der Aufgabendaten zu schreiben: %s. Die Konfigurationsinformationen, in der die neuesten Aktualisierungen widergegeben werden, gehen m\u00f6glicherweise verloren |
| | | ERR_TASKBE_IMPORT_NOT_SUPPORTED_155=Das Aufgaben-Backend unterst\u00fctzt keine LDIF-Importvorg\u00e4nge |
| | | INFO_TASKBE_INTERRUPTED_BY_SHUTDOWN_156=Das Aufgaben-Backend wird heruntergefahren |
| | | INFO_ROOTDSE_UPDATED_SHOW_ALL_ATTRS_159=Die Root-DSE-Konfiguration wurde aktualisiert. Das Konfigurationsattribut %s verwendet zuk\u00fcnftig den Wert %s |
| | | ERR_TASKSCHED_REMOVE_PENDING_NO_SUCH_TASK_161=Anstehende Aufgabe %s konnte nicht entfernt werden, da keine Aufgabe dieser Art vorhanden ist |
| | |
| | | ERR_TASKBE_SEARCH_INVALID_BASE_168=Der Suchvorgang im Aufgaben-Backend konnte nicht verarbeitet werden, da der angegebene DN %s nicht f\u00fcr Eintr\u00e4ge im Aufgaben-Backend zul\u00e4ssig sind |
| | | ERR_TASKBE_SEARCH_NO_SUCH_TASK_169=Der Suchvorgang im Aufgaben-Backend konnte nicht verarbeitet werden, da keine geplante Aufgabe mit dem angegebenen Such-Basiseintrag %s verbunden ist |
| | | ERR_TASKBE_SEARCH_NO_SUCH_RECURRING_TASK_170=Der Suchvorgang im Aufgaben-Backend konnte nicht verarbeitet werden, da keine wiederkehrende Aufgabe mit dem angegebenen Such-Basiseintrag %s verbunden ist |
| | | ERR_BACKUP_CONFIG_ENTRY_NULL_171=Das Sicherungs-Backend konnte nicht initialisiert werden, da der angegebene Konfigurationseintrag Null ist |
| | | ERR_BACKUP_CANNOT_DECODE_BACKUP_ROOT_DN_172=Das Sicherungs-Backend konnte nicht initialisiert werden, da beim Versuch, den Basis-DN f\u00fcr das Backend zu entschl\u00fcsseln, ein Fehler aufgetreten ist: %s |
| | | ERR_BACKUP_GET_ENTRY_NULL_175=Der Eintrag konnte nicht vom Sicherungs-Backend abgerufen werden, da der angeforderte Eintrag Null ist |
| | | ERR_BACKEND_CONFIG_ENTRY_NULL_171=Das "%s"-Backend konnte nicht initialisiert werden, da der angegebene Konfigurationseintrag Null ist |
| | | ERR_BACKUP_INVALID_BASE_176=Der angeforderte Eintrag %s ist nicht im Sicherungs-Backend vorhanden |
| | | ERR_BACKUP_DN_DOES_NOT_SPECIFY_DIRECTORY_177=Eintrag %s konnte nicht vom Sicherungs-Backend abgerufen werden, da der angeforderte DN eine Ebene unterhalb der Basis-DN liegt, aber kein Sicherungsverzeichnis angibt |
| | | ERR_BACKUP_INVALID_BACKUP_DIRECTORY_178=Eintrag %s konnte nicht vom Sicherungs-Backend abgerufen werden, da das angeforderte Sicherungsverzeichnis ung\u00fcltig ist: %s |
| | |
| | | ERR_BACKUP_NO_BACKUP_PARENT_DN_181=Eintrag %s konnte nicht vom Sicherungs-Backend abgerufen werden, da er keinen \u00fcbergeordneten Eintrag besitzt |
| | | ERR_BACKUP_NO_BACKUP_DIR_IN_DN_182=Eintrag %s konnte nicht vom Sicherungs-Backend abgerufen werden, da der DN das Sicherungsverzeichnis, in dem sich die angeforderte Sicherung befinden soll, nicht enth\u00e4lt |
| | | ERR_BACKUP_NO_SUCH_BACKUP_183=Sicherung %s ist nicht im Sicherungsverzeichnis %s vorhanden |
| | | ERR_BACKUP_ADD_NOT_SUPPORTED_184=Hinzuf\u00fcgevorg\u00e4nge werden nicht in dem Sicherungs-Backend unterst\u00fctzt |
| | | ERR_BACKUP_DELETE_NOT_SUPPORTED_185=L\u00f6schvorg\u00e4nge werden nicht in dem Sicherungs-Backend unterst\u00fctzt |
| | | ERR_BACKUP_MODIFY_NOT_SUPPORTED_186=\u00c4nderungsvorg\u00e4nge werden nicht in dem Sicherungs-Backend unterst\u00fctzt |
| | | ERR_BACKUP_MODIFY_DN_NOT_SUPPORTED_187=DN-\u00c4nderungsvorg\u00e4nge werden nicht in dem Sicherungs-Backend unterst\u00fctzt |
| | | ERR_BACKEND_MODIFY_NOT_SUPPORTED_186=\u00c4nderungsvorg\u00e4nge werden nicht in dem Sicherungs-Backend unterst\u00fctzt |
| | | ERR_BACKUP_NO_SUCH_ENTRY_188=Der angeforderte Eintrag %s ist nicht in dem Sicherungs-Backup vorhanden |
| | | ERR_BACKUP_EXPORT_NOT_SUPPORTED_189=LDIF-Exportvorg\u00e4nge werden nicht in dem Sicherungs-Backend unterst\u00fctzt |
| | | ERR_BACKUP_IMPORT_NOT_SUPPORTED_190=LDIF-Importvorg\u00e4nge werden nicht in dem Sicherungs-Backend unterst\u00fctzt |
| | | ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED_191=Sicherungs- und Wiederherstellungsvorg\u00e4nge werden nicht in dem Sicherungs-Backend unterst\u00fctzt |
| | | ERR_MEMORYBACKEND_REQUIRE_EXACTLY_ONE_BASE_192=Es muss exakt eine Basis-DN f\u00fcr die Verwendung mit dem speicherbasierten Backend vorliegen |
| | | ERR_MEMORYBACKEND_ENTRY_ALREADY_EXISTS_193=Eintrag %s ist bereits im speicherbasierten Backend vorhanden |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_BELONG_194=Eintrag %s geh\u00f6rt nicht zum speicherbasierten Backup |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_BELONG_194=Eintrag %s geh\u00f6rt nicht zum speicherbasierten Backend |
| | | ERR_MEMORYBACKEND_PARENT_DOESNT_EXIST_195=Eintrag %s konnte nicht hinzugef\u00fcgt werden, da dessen \u00fcbergeordneter Eintrag %s nicht im speicherbasierten Backend vorhanden ist |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST_196=Eintrag %s ist nicht im speicherbasierten Backup vorhanden |
| | | ERR_BACKEND_ENTRY_DOESNT_EXIST_196=Eintrag %s ist nicht im "%s" Backend vorhanden |
| | | ERR_MEMORYBACKEND_CANNOT_DELETE_ENTRY_WITH_CHILDREN_197=Eintrag %s kann nicht gel\u00f6scht werden, da er einen oder mehrere untergeordnete Eintr\u00e4ge besitzt |
| | | ERR_MEMORYBACKEND_CANNOT_CREATE_LDIF_WRITER_199=Ein LDIF-Schreiber konnte nicht erstellt werden: %s |
| | | ERR_MEMORYBACKEND_CANNOT_WRITE_ENTRY_TO_LDIF_200=Eintrag %s konnte nicht in LDIF geschrieben werden: %s |
| | |
| | | NOTE_BACKEND_ENVIRONMENT_UNUSABLE_297=Die JE-Datenbankumgebung mit der Backend-ID %s ist besch\u00e4digt. Starten Sie den Directory-Server neu, um die Umgebung neu zu \u00f6ffnen |
| | | ERR_TASKSCHED_NOT_ALLOWED_TASK_298=Der Directory-Server ist nicht daf\u00fcr konfiguriert, Aufgabe %s aufzurufen |
| | | INFO_TASK_COMPLETION_BODY_299=Aufgaben-ID: %s\r\nAufgabenstatus: %s\r\nGeplante Startzeit: %s\r\nTats\u00e4chliche Startzeit: %s\r\nFertigstellungszeit: %s\r\n\r\nProtokollmeldungen:\r\n |
| | | ERR_TRUSTSTORE_GET_ENTRY_NULL_300=Der Eintrag konnte nicht vom Trust-Speicher-Backend abgerufen werden, da der angeforderte Eintrag Null ist |
| | | ERR_TRUSTSTORE_INVALID_BASE_301=Der angeforderte Eintrag %s ist nicht im Trust-Speicher-Backup vorhanden |
| | | ERR_TRUSTSTORE_DN_DOES_NOT_SPECIFY_CERTIFICATE_302=Eintrag %s konnte nicht vom Trust-Speicher-Backend verarbeitet werden, da der angeforderte DN eine Ebene unterhalb der Basis-DN liegt, aber keinen Zertifikatsnamen spezifiziert |
| | | ERR_TRUSTSTORE_CANNOT_RETRIEVE_CERT_303=Fehler beim Versuch, Zertifikat %s aus der Trust-Speicherdatei %s abzurufen: %s |
| | | ERR_TRUSTSTORE_MODIFY_NOT_SUPPORTED_304=\u00c4nderungsvorg\u00e4nge werden nicht in dem Trust-Speicher-Backend unterst\u00fctzt |
| | | ERR_TRUSTSTORE_MODIFY_DN_NOT_SUPPORTED_305=DN-\u00c4nderungsvorg\u00e4nge werden nicht in dem Trust-Speicher-Backend unterst\u00fctzt |
| | | ERR_TRUSTSTORE_REQUIRES_ONE_BASE_DN_306=Das Trust-Speicher-Backend konnte nicht vom Konfigurationseintrag %s initialisiert werden, da es nicht exakt einen Basis-DN enth\u00e4lt |
| | | ERR_TRUSTSTORE_IMPORT_AND_EXPORT_NOT_SUPPORTED_307=LDIF-Import- und Exportvorg\u00e4nge werden nicht in dem Trust-Speicher-Backend unterst\u00fctzt |
| | | ERR_TRUSTSTORE_BACKUP_AND_RESTORE_NOT_SUPPORTED_308=Sicherungs- und Wiederherstellungsvorg\u00e4nge werden nicht in dem Trust-Speicher-Backend unterst\u00fctzt |
| | | ERR_BACKEND_IMPORT_AND_EXPORT_NOT_SUPPORTED_307=LDIF-Import- und Exportvorg\u00e4nge werden nicht in dem "%s"-Backend unterst\u00fctzt |
| | | ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED_308=Sicherungs- und Wiederherstellungsvorg\u00e4nge werden nicht in dem "%s"-Backend unterst\u00fctzt |
| | | ERR_TRUSTSTORE_NO_SUCH_FILE_309=Die Trust-Speicherdatei %s, die in Attribut ds-cfg-trust-store-file des Konfigurationseintrags %s angegeben ist, ist nicht vorhanden |
| | | ERR_TRUSTSTORE_INVALID_TYPE_310=Der Trust-Speichertyp %s, der in Attribut ds-cfg-trust-store-type des Konfigurationseintrags %s angegeben ist, ist ung\u00fcltig: %s |
| | | ERR_TRUSTSTORE_PIN_FILE_CANNOT_CREATE_311=Fehler beim Versuch, die PIN-Datei %s, die in Attribut ds-cfg-trust-store-pin-file des Konfigurationseintrags %s angegeben ist, zu erstellen |
| | |
| | | WARN_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE_4=El ND de base "%s" est\u00e1 configurado como uno de los ND de base subordinados para su uso en b\u00fasquedas por debajo de la DSE ra\u00edz. No obstante, este ND de base no est\u00e1 controlado por ning\u00fan sufijo registrado con el Servidor de directorios, por lo que no se utilizar\u00e1 |
| | | WARN_ROOTDSE_SUBORDINATE_BASE_EXCEPTION_5=Se ha producido un problema inesperado al tratar de determinar el conjunto de los ND de base subordinados para su uso en b\u00fasquedas por debajo de la DSE ra\u00edz: %s |
| | | WARN_ROOTDSE_GET_ENTRY_NONROOT_6=Se ha solicitado al servidor de fondo DSE ra\u00edz que recupere la entrada con el ND "%s". A este servidor de fondo s\u00f3lo se le puede solicitar que recupere el propio DSE ra\u00edz. Sin embargo, se realizar\u00e1 una comprobaci\u00f3n del mismo con los servidores de fondo subordinados definidos y se verificar\u00e1 si puede buscar la entrada solicitada |
| | | ERR_ROOTDSE_ADD_NOT_SUPPORTED_7=No se puede agregar la entrada "%s" porque no se admiten las operaciones de adici\u00f3n en el servidor de fondo DSE ra\u00edz |
| | | ERR_ROOTDSE_DELETE_NOT_SUPPORTED_8=No se puede suprimir la entrada "%s" porque no se admiten las operaciones de eliminaci\u00f3n en el servidor de fondo DSE ra\u00edz |
| | | ERR_ROOTDSE_MODIFY_NOT_SUPPORTED_9=No se puede actualizar la entrada "%s" porque no se admiten las operaciones de modificaci\u00f3n en el servidor de fondo DSE ra\u00edz. Si desea modificar el contenido del propio DSE ra\u00edz, es posible realizar esta operaci\u00f3n mediante la modificaci\u00f3n de la entrada "%s" de la configuraci\u00f3n |
| | | ERR_ROOTDSE_MODIFY_DN_NOT_SUPPORTED_10=No se puede cambiar el nombre de la entrada "%s" porque no se admiten las operaciones de modificaci\u00f3n de ND en el servidor de fondo DSE ra\u00edz |
| | | ERR_ROOTDSE_INVALID_SEARCH_BASE_11=No se puede realizar una b\u00fasqueda (Id. de conexi\u00f3n %d, Id. de operaci\u00f3n %d) con el ND de base de "%s" en el servidor de fondo DSE ra\u00edz. El ND de base de las b\u00fasquedas de este servidor de fondo debe ser el ND del propio DSE ra\u00edz |
| | | ERR_ROOTDSE_UNEXPECTED_SEARCH_FAILURE_12=Se ha producido un error inesperado al tratar de procesar una operaci\u00f3n de b\u00fasqueda (Id. de conexi\u00f3n %d, Id. de operaci\u00f3n %d) en el backend de DSE ra\u00edz: %s |
| | | ERR_ROOTDSE_INVALID_SEARCH_SCOPE_13=No se pudo procesar la b\u00fasqueda con el Id. de conexi\u00f3n %d y el Id. de operaci\u00f3n %d porque tuvo un \u00e1mbito no v\u00e1lido de %s |
| | | ERR_ROOTDSE_UNABLE_TO_CREATE_LDIF_WRITER_14=Se ha producido un error inesperado al tratar de abrir el editor de LDIF para el backend de DSE ra\u00edz: %s |
| | | ERR_ROOTDSE_UNABLE_TO_EXPORT_DSE_15=Se ha producido un error inesperado al tratar de exportar la entrada DSE ra\u00edz al destino LDIF especificado: %s |
| | | ERR_ROOTDSE_IMPORT_NOT_SUPPORTED_16=El backend de DSE ra\u00edz no admite operaciones de importaci\u00f3n de LDIF |
| | | ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED_17=El backend de DSE ra\u00edz no proporciona ning\u00fan recurso para las operaciones de copia de seguridad y de restauraci\u00f3n. La copia de seguridad de los contenidos de la DSE ra\u00edz debe procesarse como parte de la configuraci\u00f3n del Servidor de directorios |
| | | INFO_ROOTDSE_USING_SUFFIXES_AS_BASE_DNS_18=Se ha actualizado la configuraci\u00f3n del DSE ra\u00edz para que utilice el conjunto definido de sufijos del servidor de directorios al realizar b\u00fasquedas por debajo del DSE ra\u00edz |
| | | INFO_ROOTDSE_USING_NEW_SUBORDINATE_BASE_DNS_19=Se ha actualizado la configuraci\u00f3n del DSE ra\u00edz para que utilice el conjunto de ND de base %s al realizar b\u00fasquedas por debajo del DSE ra\u00edz |
| | | INFO_ROOTDSE_USING_NEW_USER_ATTRS_20=Se ha actualizado la configuraci\u00f3n del DSE ra\u00edz para que utilice un nuevo conjunto de atributos definidos por el usuario |
| | | ERR_MONITOR_CONFIG_ENTRY_NULL_21=Se ha intentado configurar el backend de supervisi\u00f3n sin proporcionar una entrada de configuraci\u00f3n. Esto no est\u00e1 permitido, por lo que no podr\u00e1 disponerse de informaci\u00f3n de supervisi\u00f3n por medio del protocolo |
| | | ERR_MONITOR_CANNOT_DECODE_MONITOR_ROOT_DN_22=Se ha producido un error al tratar de descodificar cn=monitor como el ND de base para la informaci\u00f3n de supervisi\u00f3n del Servidor de directorios: %s. No podr\u00e1 disponerse de informaci\u00f3n de supervisi\u00f3n por medio del protocolo |
| | | ERR_MONITOR_ADD_NOT_SUPPORTED_23=No se puede agregar la entrada "%s" porque no se admiten las operaciones de adici\u00f3n en el servidor de fondo de supervisi\u00f3n |
| | | ERR_MONITOR_DELETE_NOT_SUPPORTED_24=No se puede suprimir la entrada "%s" porque no se admiten las operaciones de eliminaci\u00f3n en el servidor de fondo de supervisi\u00f3n |
| | | ERR_BACKEND_ADD_NOT_SUPPORTED_23=No se puede agregar la entrada "%s" porque no se admiten las operaciones de adici\u00f3n en el backend "%s" |
| | | ERR_BACKEND_DELETE_NOT_SUPPORTED_24=No se puede suprimir la entrada "%s" porque no se admiten las operaciones de eliminaci\u00f3n en el backend "%s" |
| | | ERR_MONITOR_MODIFY_NOT_SUPPORTED_25=No se puede actualizar la entrada "%s" porque no se admiten las operaciones de modificaci\u00f3n en el servidor de fondo de supervisi\u00f3n. Si desea modificar el contenido de la propia entrada de supervisi\u00f3n de base, es posible realizar esta operaci\u00f3n mediante la modificaci\u00f3n de la entrada "%s" en la configuraci\u00f3n |
| | | ERR_MONITOR_MODIFY_DN_NOT_SUPPORTED_26=No se puede cambiar el nombre de la entrada "%s" porque no se admiten las operaciones de modificaci\u00f3n de ND en el servidor de fondo de supervisi\u00f3n |
| | | ERR_BACKEND_MODIFY_DN_NOT_SUPPORTED_26=No se puede cambiar el nombre de la entrada "%s" porque no se admiten las operaciones de modificaci\u00f3n de ND en el backend "%s" |
| | | ERR_MONITOR_UNABLE_TO_EXPORT_BASE_27=Se ha producido un error al tratar de exportar la entrada de supervisi\u00f3n de base: %s |
| | | ERR_MONITOR_UNABLE_TO_EXPORT_PROVIDER_ENTRY_28=Se ha producido un error al tratar de exportar la entrada de supervisi\u00f3n para el proveedor de supervisi\u00f3n %s: %s |
| | | ERR_MONITOR_IMPORT_NOT_SUPPORTED_29=El backend de supervisi\u00f3n no admite operaciones de importaci\u00f3n de LDIF |
| | | ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED_30=El backend de supervisi\u00f3n no proporciona ning\u00fan recurso para las operaciones de copia de seguridad y de restauraci\u00f3n |
| | | ERR_BACKEND_IMPORT_NOT_SUPPORTED_29=El backend "%s" no admite operaciones de importaci\u00f3n de LDIF |
| | | INFO_MONITOR_USING_NEW_USER_ATTRS_31=Se ha actualizado la configuraci\u00f3n de supervisi\u00f3n para que utilice un nuevo conjunto de atributos definidos por el usuario |
| | | ERR_MONITOR_GET_ENTRY_NULL_32=No se puede recuperar la entrada solicitada del servidor de fondo de supervisi\u00f3n porque el ND especificado es nulo |
| | | ERR_BACKEND_GET_ENTRY_NULL_32=No se puede recuperar la entrada solicitada del backend "%s" porque el ND especificado es nulo |
| | | ERR_MONITOR_INVALID_BASE_34=No se puede recuperar la entrada solicitada %s del servidor de fondo de supervisi\u00f3n porque el ND no se encuentra por debajo de la base de supervisi\u00f3n de %s |
| | | INFO_MONITOR_UPTIME_37=%d d\u00edas %d horas %d minutos %d segundos |
| | | ERR_SCHEMA_CONFIG_ENTRY_NULL_38=Se ha intentado configurar el backend de esquema sin proporcionar una entrada de configuraci\u00f3n. Esto no est\u00e1 permitido, por lo que no se dispondr\u00e1 de informaci\u00f3n de esquema por medio del protocolo |
| | | ERR_SCHEMA_CANNOT_DETERMINE_BASE_DN_40=Se ha producido un error al tratar de determinar los ND de base que deben usarse al publicar la informaci\u00f3n de esquema del Servidor de directorios, tal como se especifica en el atributo ds-cfg-schema-entry-dn de la entrada de configuraci\u00f3n %s: %s. Se usar\u00e1 el ND de base de esquema predeterminado de cn=schema |
| | | ERR_SCHEMA_ADD_NOT_SUPPORTED_41=No se puede agregar la entrada "%s" porque no se admiten las operaciones de adici\u00f3n en el servidor de fondo del esquema |
| | | ERR_SCHEMA_DELETE_NOT_SUPPORTED_42=No se puede suprimir la entrada "%s" porque no se admiten las operaciones de eliminaci\u00f3n en el servidor de fondo del esquema |
| | | ERR_SCHEMA_MODIFY_DN_NOT_SUPPORTED_44=No se puede cambiar el nombre de la entrada "%s" porque no se admiten las operaciones de modificaci\u00f3n de ND en el servidor de fondo del esquema |
| | | ERR_SCHEMA_UNABLE_TO_EXPORT_BASE_45=Se ha producido un error al tratar de exportar la entrada de esquema de base: %s |
| | | ERR_SCHEMA_INVALID_BASE_48=No se puede recuperar la entrada solicitada %s desde el servidor de fondo del esquema debido a que el ND es igual a uno de los ND de entrada de esquema |
| | | ERR_SCHEMA_UNABLE_TO_CREATE_LDIF_WRITER_49=Se ha producido un error inesperado al tratar de abrir el editor de LDIF para el backend de esquema: %s |
| | |
| | | INFO_TASKBE_UPDATED_RETENTION_TIME_128=El tiempo de retenci\u00f3n de las tareas completadas se ha actualizado a %d segundos. Este cambio se aplicar\u00e1 inmediatamente |
| | | INFO_TASKBE_UPDATED_BACKING_FILE_129=La ruta al archivo de copia de seguridad de los datos de tareas se ha cambiado a %s. Se ha incluido una captura de la configuraci\u00f3n de tareas actual en ese archivo, que se seguir\u00e1 utilizando en futuras actualizaciones |
| | | ERR_TASKBE_ADD_DISALLOWED_DN_130=Es posible que s\u00f3lo puedan a\u00f1adirse las nuevas entradas en el backend de tarea inmediatamente debajo de %s para las tareas programadas o inmediatamente debajo de %s para las tareas peri\u00f3dicas |
| | | ERR_TASKBE_MODIFY_DN_NOT_SUPPORTED_131=No se admiten las operaciones de modificaci\u00f3n de ND en el backend de tarea |
| | | INFO_TASKBE_BACKING_FILE_HEADER_132=El archivo contiene los datos utilizados por el servidor de fondo del programador de tareas del servidor de directorios. No modifique directamente este archivo, ya que es posible que esos cambios se pierdan. Las definiciones de tareas programadas y peri\u00f3dicas s\u00f3lo deben modificarse mediante las utilidades de administraci\u00f3n proporcionadas con el servidor de directorios |
| | | ERR_TASKSCHED_DUPLICATE_RECURRING_ID_133=No se puede a\u00f1adir la tarea peri\u00f3dica %s al programador de tareas debido a que ya existe otra tarea peri\u00f3dica con el mismo Id |
| | | ERR_TASKSCHED_DUPLICATE_TASK_ID_134=No se puede programar la tarea %s debido a que ya existe otra tarea con el mismo Id |
| | |
| | | WARN_TASKSCHED_CANNOT_RENAME_CURRENT_BACKING_FILE_152=Se ha producido un error al tratar de cambiar el nombre del archivo de copia de seguridad de tareas actual de %s a %s: %s. Es posible que se haya perdido la configuraci\u00f3n de tarea previa (que no refleja la \u00faltima actualizaci\u00f3n) |
| | | ERR_TASKSCHED_CANNOT_RENAME_NEW_BACKING_FILE_153=Se ha producido un error al tratar de cambiar el nombre del nuevo archivo de copia de seguridad de %s a %s: %s. Si se ha reiniciado el Servidor de directorios, es posible que el programador de tareas no funcione de la forma prevista |
| | | ERR_TASKSCHED_CANNOT_WRITE_BACKING_FILE_154=Se ha producido un error al tratar de escribir el nuevo archivo de copia de seguridad de datos de tareas %s: %s. Es posible que se haya perdido la informaci\u00f3n de configuraci\u00f3n que refleja la \u00faltima actualizaci\u00f3n |
| | | ERR_TASKBE_IMPORT_NOT_SUPPORTED_155=El backend de tarea no admite operaciones de importaci\u00f3n de LDIF |
| | | INFO_TASKBE_INTERRUPTED_BY_SHUTDOWN_156=Se est\u00e1 cerrando el servidor de fondo de tareas |
| | | INFO_ROOTDSE_UPDATED_SHOW_ALL_ATTRS_159=La configuraci\u00f3n del DSE ra\u00edz se ha actualizado para que el atributo de configuraci\u00f3n %s utilice el valor %s |
| | | ERR_TASKSCHED_REMOVE_PENDING_NO_SUCH_TASK_161=No se puede suprimir la tarea pendiente %s porque no existe |
| | |
| | | ERR_TASKBE_SEARCH_INVALID_BASE_168=No se puede procesar la operaci\u00f3n de b\u00fasqueda en el backend de tarea porque el ND de base %s proporcionado no es v\u00e1lido para las entradas en el backend de tarea |
| | | ERR_TASKBE_SEARCH_NO_SUCH_TASK_169=No se puede procesar la operaci\u00f3n de b\u00fasqueda en el backend de tarea porque no existe ninguna tarea programada asociada con la entrada de base de b\u00fasqueda %s proporcionada |
| | | ERR_TASKBE_SEARCH_NO_SUCH_RECURRING_TASK_170=No se puede procesar la operaci\u00f3n de b\u00fasqueda en el backend de tarea porque no existe ninguna tarea peri\u00f3dica asociada con la entrada de base de b\u00fasqueda %s proporcionada |
| | | ERR_BACKUP_CONFIG_ENTRY_NULL_171=No se puede inicializar el backend de copia de seguridad porque la entrada de configuraci\u00f3n proporcionada es nula |
| | | ERR_BACKUP_CANNOT_DECODE_BACKUP_ROOT_DN_172=No se puede inicializar el backend de copia de seguridad porque se ha producido un error al tratar de descodificar el ND de base para el backend: %s |
| | | ERR_BACKUP_GET_ENTRY_NULL_175=No se puede recuperar una entrada del backend de copia de seguridad porque la entrada solicitada era nula |
| | | ERR_BACKEND_CONFIG_ENTRY_NULL_171=No se puede inicializar el backend "%s" porque la entrada de configuraci\u00f3n proporcionada es nula |
| | | ERR_BACKUP_INVALID_BASE_176=No existe la entrada %s solicitada en el backend de copia de seguridad |
| | | ERR_BACKUP_DN_DOES_NOT_SPECIFY_DIRECTORY_177=No se puede recuperar la entrada %s del backend de copia de seguridad porque el ND solicitado est\u00e1 un nivel por debajo del ND de base, pero no especifica un directorio de copia de seguridad |
| | | ERR_BACKUP_INVALID_BACKUP_DIRECTORY_178=No se puede recuperar la entrada %s del backend de copia de seguridad porque el directorio de copia de seguridad solicitado no es v\u00e1lido: %s |
| | |
| | | ERR_BACKUP_NO_BACKUP_PARENT_DN_181=No se puede recuperar la entrada %s del backend de copia de seguridad porque no tiene una entrada principal |
| | | ERR_BACKUP_NO_BACKUP_DIR_IN_DN_182=No se puede recuperar la entrada %s del backend de copia de seguridad porque el ND no contiene el directorio de copia de seguridad en el que deber\u00eda encontrarse la copia de seguridad solicitada |
| | | ERR_BACKUP_NO_SUCH_BACKUP_183=No existe la copia de seguridad %s en el directorio de copia de seguridad %s |
| | | ERR_BACKUP_ADD_NOT_SUPPORTED_184=No se admiten las operaciones de adici\u00f3n en el backend de copia de seguridad |
| | | ERR_BACKUP_DELETE_NOT_SUPPORTED_185=No se admiten las operaciones de eliminaci\u00f3n en el backend de copia de seguridad |
| | | ERR_BACKUP_MODIFY_NOT_SUPPORTED_186=No se admiten las operaciones de modificaci\u00f3n en el backend de copia de seguridad |
| | | ERR_BACKUP_MODIFY_DN_NOT_SUPPORTED_187=No se admiten las operaciones de modificaci\u00f3n de ND en el backend de copia de seguridad |
| | | ERR_BACKEND_MODIFY_NOT_SUPPORTED_186=No se admiten las operaciones de modificaci\u00f3n en el backend de copia de seguridad |
| | | ERR_BACKUP_NO_SUCH_ENTRY_188=No existe la entrada %s solicitada en el backend de copia de seguridad |
| | | ERR_BACKUP_EXPORT_NOT_SUPPORTED_189=No se admiten las operaciones de exportaci\u00f3n de LDIF en el backend de copia de seguridad |
| | | ERR_BACKUP_IMPORT_NOT_SUPPORTED_190=No se admiten las operaciones de importaci\u00f3n de LDIF en el backend de copia de seguridad |
| | | ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED_191=No se admiten las operaciones de copia de seguridad y restauraci\u00f3n en el backend de copia de seguridad |
| | | ERR_MEMORYBACKEND_REQUIRE_EXACTLY_ONE_BASE_192=Debe proporcionarse exactamente un ND de base para su uso con el backend basado en memoria |
| | | ERR_MEMORYBACKEND_ENTRY_ALREADY_EXISTS_193=La entrada %s ya existe en el backend basado en memoria |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_BELONG_194=La entrada %s no pertenece al backend basado en memoria |
| | | ERR_MEMORYBACKEND_PARENT_DOESNT_EXIST_195=No se puede a\u00f1adir la entrada %s porque no existe su entrada principal %s en el backend basado en memoria |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST_196=La entrada %s no existe en el backend basado en memoria |
| | | ERR_BACKEND_ENTRY_DOESNT_EXIST_196=La entrada %s no existe en el backend "%s" |
| | | ERR_MEMORYBACKEND_CANNOT_DELETE_ENTRY_WITH_CHILDREN_197=No se puede eliminar la entrada %s porque tiene una o m\u00e1s entradas subordinadas |
| | | ERR_MEMORYBACKEND_CANNOT_CREATE_LDIF_WRITER_199=Unable to create an LDIF writer: %s |
| | | ERR_MEMORYBACKEND_CANNOT_WRITE_ENTRY_TO_LDIF_200=No se puede escribir la entrada %s en el LDIF: %s |
| | |
| | | NOTE_BACKEND_ENVIRONMENT_UNUSABLE_297=El entorno de la base de datos JE correspondiente al Id. de servidor de fondo %s est\u00e1 da\u00f1ado. Reinicie Directory Server para volver a abrir el entorno |
| | | ERR_TASKSCHED_NOT_ALLOWED_TASK_298=El Servidor de directorios no est\u00e1 configurado para permitir que se invoque la tarea %s |
| | | INFO_TASK_COMPLETION_BODY_299=Id. de tarea: %s\r\nEstado de la tarea: %s\r\nHora de inicio programada: %s\r\nHora de inicio real: %s\r\nHora de finalizaci\u00f3n: %s\r\n\r\nMensajes del registro:\r\n |
| | | ERR_TRUSTSTORE_GET_ENTRY_NULL_300=No se puede recuperar una entrada del backend de almac\u00e9n de confianza porque la entrada solicitada era nula |
| | | ERR_TRUSTSTORE_INVALID_BASE_301=La entrada %s solicitada no existe en el backend de almac\u00e9n de confianza |
| | | ERR_TRUSTSTORE_DN_DOES_NOT_SPECIFY_CERTIFICATE_302=No se puede procesar la entrada %s en el backend de almac\u00e9n de confianza porque el ND solicitado est\u00e1 un nivel por debajo del ND de base, pero no especifica un nombre de certificado |
| | | ERR_TRUSTSTORE_CANNOT_RETRIEVE_CERT_303=Error al tratar de recuperar el certificado %s del archivo de almac\u00e9n de confianza %s: %s |
| | | ERR_TRUSTSTORE_MODIFY_NOT_SUPPORTED_304=No se admiten las operaciones de modificaci\u00f3n en el backend de almac\u00e9n de confianza |
| | | ERR_TRUSTSTORE_MODIFY_DN_NOT_SUPPORTED_305=No se admiten las operaciones de modificaci\u00f3n de ND en el backend de almac\u00e9n de confianza |
| | | ERR_TRUSTSTORE_REQUIRES_ONE_BASE_DN_306=No se puede inicializar el backend de almac\u00e9n de confianza de la entrada de configuraci\u00f3n %s porque no contiene exactamente un solo ND de base |
| | | ERR_TRUSTSTORE_IMPORT_AND_EXPORT_NOT_SUPPORTED_307=No se admiten las operaciones de importaci\u00f3n y exportaci\u00f3n de LDIF en el backend de almac\u00e9n de confianza |
| | | ERR_TRUSTSTORE_BACKUP_AND_RESTORE_NOT_SUPPORTED_308=No se admiten las operaciones de copia de seguridad y restauraci\u00f3n en el backend de almac\u00e9n de confianza |
| | | ERR_BACKEND_IMPORT_AND_EXPORT_NOT_SUPPORTED_307=No se admiten las operaciones de importaci\u00f3n y exportaci\u00f3n de LDIF en el "%s" backend |
| | | ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED_308=No se admiten las operaciones de copia de seguridad y restauraci\u00f3n en el "%s" backend |
| | | ERR_TRUSTSTORE_NO_SUCH_FILE_309=El archivo de almac\u00e9n de confianza %s especificado en el atributo ds-cfg-trust-store-file de la entrada de configuraci\u00f3n %s no existe |
| | | ERR_TRUSTSTORE_INVALID_TYPE_310=El tipo de almac\u00e9n de confianza %s especificado en el atributo ds-cfg-trust-store-type de la entrada de configuraci\u00f3n %s no es v\u00e1lido: %s |
| | | ERR_TRUSTSTORE_PIN_FILE_CANNOT_CREATE_311=Se ha producido un error al tratar de crear el archivo PIN %s especificado en el atributo ds-cfg-trust-store-pin-file de la entrada de configuraci\u00f3n %s |
| | |
| | | WARN_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE_4=Le DN de base "%s" est configur\u00e9 en tant que faisant partie des DN de base subordonn\u00e9s \u00e0 utiliser pour les recherches sous la racine\u00a0DSE. Toutefois, ce DN de base n'est g\u00e9r\u00e9 par aucun suffixe enregistr\u00e9 aupr\u00e8s de Directory Server et il n'est donc pas utilis\u00e9 |
| | | WARN_ROOTDSE_SUBORDINATE_BASE_EXCEPTION_5=Un probl\u00e8me inattendu s'est produit lors de la tentative de d\u00e9termination de l'ensemble de DN de base subordonn\u00e9s \u00e0 utiliser pour les recherches sous la racine\u00a0DSE\u00a0: %s |
| | | WARN_ROOTDSE_GET_ENTRY_NONROOT_6=Il a \u00e9t\u00e9 demand\u00e9 au backend de DSE racine de r\u00e9cup\u00e9rer une entr\u00e9e avec DN "%s". Seule une demande de r\u00e9cup\u00e9ration de la DSE racine elle-m\u00eame peut \u00eatre adress\u00e9e \u00e0 ce backend. Cependant, il v\u00e9rifiera avec les backends subordonn\u00e9s d\u00e9finis s'il peut trouver l'entr\u00e9e souhait\u00e9e |
| | | ERR_ROOTDSE_ADD_NOT_SUPPORTED_7=Impossible d'ajouter l'entr\u00e9e "%s" car le backend de DSE racine ne prend pas en charge les op\u00e9ration d'ajout |
| | | ERR_ROOTDSE_DELETE_NOT_SUPPORTED_8=Impossible de supprimer l'entr\u00e9e "%s" car le backend de DSE racine ne prend pas en charge les op\u00e9rations de suppression |
| | | ERR_ROOTDSE_MODIFY_NOT_SUPPORTED_9=Impossible de mettre l'entr\u00e9e "%s" \u00e0 jour car le backend de DSE racine ne prend pas en charge les op\u00e9rations de modification. Si vous souhaitez changer le contenu du DSE racine, vous devriez pouvoir le faire en modifant l'entr\u00e9e "%s" dans la configuration |
| | | ERR_ROOTDSE_MODIFY_DN_NOT_SUPPORTED_10=Impossible de renommer l'entr\u00e9e "%s" car le backend de DSE racine ne prend pas en charge les op\u00e9rations de modification de DN |
| | | ERR_ROOTDSE_INVALID_SEARCH_BASE_11=Impossible d'effectuer une recherche (ID de connexion %d, ID d'op\u00e9ration %d) avec un DN de base de "%s" dans le backend de DSE racine. Le DN de base pour les recherches dans ce backend doit \u00eatre le DN du DSE racine |
| | | ERR_ROOTDSE_UNEXPECTED_SEARCH_FAILURE_12=Un \u00e9chec inattendu s'est produit lors de la tentative de traitement d'une op\u00e9ration de recherche (ID de connexion %d, ID d'op\u00e9ration %d) dans le backend de DSE racine\u00a0: %s |
| | | ERR_ROOTDSE_INVALID_SEARCH_SCOPE_13=Impossible de traiter la recherche avec l'ID de connexion %d et l'ID d'op\u00e9ration %d, car son \u00e9tendue (%s) n'est pas valide |
| | | ERR_ROOTDSE_UNABLE_TO_CREATE_LDIF_WRITER_14=Une erreur inattendue s'est produite lors de la tentative d'ouverture du processus d'\u00e9criture LDIF pour le backend de DSE racine\u00a0: %s |
| | | ERR_ROOTDSE_UNABLE_TO_EXPORT_DSE_15=Une erreur inattendue s'est produite lors de la tentative d'exportation de l'entr\u00e9e de DSE racine vers la cible LDIF indiqu\u00e9e\u00a0: %s |
| | | ERR_ROOTDSE_IMPORT_NOT_SUPPORTED_16=Le backend de DSE racine ne prend pas en charge les op\u00e9rations d'importation LDIF |
| | | ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED_17=Le backend de DSE racine ne fournit aucun utilitaire pour les op\u00e9rations de sauvegarde et restauration. Vous devez sauvegarder le contenu du DSE racine dans le cadre de la configuration de Directory Server |
| | | INFO_ROOTDSE_USING_SUFFIXES_AS_BASE_DNS_18=La configuration du DSE racine ayant \u00e9t\u00e9 mise \u00e0 jour, celui-ci va d\u00e9sormais utiliser le jeu d\u00e9fini pour les suffixes Directory Server lors de recherches sous le DSE racine |
| | | INFO_ROOTDSE_USING_NEW_SUBORDINATE_BASE_DNS_19=La configuration du DSE racine ayant \u00e9t\u00e9 mise \u00e0 jour, celui-ci va d\u00e9sormais utiliser le jeu de DN de base %s lors de recherches sous le DSE racine |
| | | INFO_ROOTDSE_USING_NEW_USER_ATTRS_20=La configuration du DSE racine ayant \u00e9t\u00e9 mise \u00e0 jour, celui-ci va d\u00e9sormais utiliser un nouveau jeu d'attributs d\u00e9finis par l'utilisateur |
| | | ERR_MONITOR_CONFIG_ENTRY_NULL_21=Tentative de configuration du backend de contr\u00f4le sans indiquer d'entr\u00e9e de configuration. Cela n'est pas autoris\u00e9 et aucune information de contr\u00f4le n'est disponible sur le protocole |
| | | ERR_MONITOR_CANNOT_DECODE_MONITOR_ROOT_DN_22=Une erreur inattendue s'est produite lors de la tentative de d\u00e9codage de cn=monitor en tant que DN de base pour les informations de contr\u00f4le Directory Server\u00a0: %s. Aucune information de contr\u00f4le n'est disponible sur le protocole |
| | | ERR_MONITOR_ADD_NOT_SUPPORTED_23=Impossible d'ajouter l'entr\u00e9e "%s" car le backend de moniteur ne prend pas en charge les op\u00e9rations d'ajout |
| | | ERR_MONITOR_DELETE_NOT_SUPPORTED_24=Impossible de supprimer l'entr\u00e9e "%s" car le backend de moniteur ne prend pas en charge les op\u00e9rations de suppression |
| | | ERR_BACKEND_ADD_NOT_SUPPORTED_23=Impossible d'ajouter l'entr\u00e9e "%s" car le backend "%s" ne prend pas en charge les op\u00e9rations d'ajout |
| | | ERR_BACKEND_DELETE_NOT_SUPPORTED_24=Impossible de supprimer l'entr\u00e9e "%s" car le backend "%s" ne prend pas en charge les op\u00e9rations de suppression |
| | | ERR_MONITOR_MODIFY_NOT_SUPPORTED_25=Impossible de mettre l'entr\u00e9e "%s" \u00e0 jour car le backend de moniteur ne prend pas en charge les op\u00e9rations de modification. Si vous souhaitez changer le contenu du moniteur de base, vous devriez pouvoir le faire en modifant l'entr\u00e9e "%s" dans la configuration |
| | | ERR_MONITOR_MODIFY_DN_NOT_SUPPORTED_26=Impossible de renommer l'entr\u00e9e "%s" car le backend de moniteur ne prend pas en charge les op\u00e9rations de modification de DN |
| | | ERR_BACKEND_MODIFY_DN_NOT_SUPPORTED_26=Impossible de renommer l'entr\u00e9e "%s" car le backend "%s" ne prend pas en charge les op\u00e9rations de modification de DN |
| | | ERR_MONITOR_UNABLE_TO_EXPORT_BASE_27=Une erreur s'est produite lors de la tentative d'exportation de l'entr\u00e9e de contr\u00f4le de base\u00a0: %s |
| | | ERR_MONITOR_UNABLE_TO_EXPORT_PROVIDER_ENTRY_28=Une erreur s'est produite lors de la tentative d'exportation de l'entr\u00e9e de contr\u00f4le pour le fournisseur de contr\u00f4le\u00a0%s\u00a0: %s |
| | | ERR_MONITOR_IMPORT_NOT_SUPPORTED_29=Le backend de contr\u00f4le ne prend pas en charge les op\u00e9rations d'importation LDIF |
| | | ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED_30=Le backend de contr\u00f4le ne fournit aucun utilitaire pour les op\u00e9rations de sauvegarde et restauration |
| | | ERR_BACKEND_IMPORT_NOT_SUPPORTED_29=Le backend "%s" ne prend pas en charge les op\u00e9rations d'importation LDIF |
| | | INFO_MONITOR_USING_NEW_USER_ATTRS_31=La configuration du moniteur ayant \u00e9t\u00e9 mise \u00e0 jour, celui-ci va d\u00e9sormais utiliser un nouveau jeu d'attributs d\u00e9finis par l'utilisateur |
| | | ERR_MONITOR_GET_ENTRY_NULL_32=Impossible de r\u00e9cup\u00e9rer l'entr\u00e9e demand\u00e9e du backend de moniteur car le DN fourni \u00e9tait null |
| | | ERR_BACKEND_GET_ENTRY_NULL_32=Impossible de r\u00e9cup\u00e9rer l'entr\u00e9e demand\u00e9e du backend "%s" car le DN fourni \u00e9tait null |
| | | ERR_MONITOR_INVALID_BASE_34=Impossible de r\u00e9cup\u00e9rer l'entr\u00e9e demand\u00e9e %s du backend de moniteur car le DN ne se trouve pas sous la base de moniteur de %s |
| | | INFO_MONITOR_UPTIME_37=%d jours %d heures %d minutes %d secondes |
| | | ERR_SCHEMA_CONFIG_ENTRY_NULL_38=Tentative de configuration du backend de sch\u00e9ma sans indiquer d'entr\u00e9e de configuration. Cela n'est pas autoris\u00e9 et aucune information de sch\u00e9ma n'est disponible sur le protocole |
| | | ERR_SCHEMA_CANNOT_DETERMINE_BASE_DN_40=Une erreur s'est produite lors de la tentative de d\u00e9termination des DN de base \u00e0 utiliser lors de la publication des informations de sch\u00e9ma Directory Server, comme indiqu\u00e9 dans l'attribut ds-cfg-schema-entry-dn de l'entr\u00e9e de configuration %s\u00a0: %s. Le DN de base de sch\u00e9ma par d\u00e9faut cn=schema va \u00eatre utilis\u00e9 |
| | | ERR_SCHEMA_ADD_NOT_SUPPORTED_41=Impossible d'ajouter l'entr\u00e9e "%s" car le backend de sch\u00e9ma ne prend pas en charge les op\u00e9rations d'ajout |
| | | ERR_SCHEMA_DELETE_NOT_SUPPORTED_42=Impossible de supprimer l'entr\u00e9e "%s" car le backend de sch\u00e9ma ne prend pas en charge les op\u00e9rations de suppression |
| | | ERR_SCHEMA_MODIFY_DN_NOT_SUPPORTED_44=Impossible de renommer l'entr\u00e9e "%s" car le backend de sch\u00e9ma ne prend pas en charge les op\u00e9rations de modification de DN |
| | | ERR_SCHEMA_UNABLE_TO_EXPORT_BASE_45=Une erreur s'est produite lors de la tentative d'exportation de l'entr\u00e9e de sch\u00e9ma de base\u00a0: %s |
| | | ERR_SCHEMA_INVALID_BASE_48=Impossible de r\u00e9cup\u00e9rer l'entr\u00e9e demand\u00e9e %s du backend de sch\u00e9ma car le DN est \u00e9gal \u00e0 un des DN d'entr\u00e9e de sch\u00e9ma |
| | | ERR_SCHEMA_UNABLE_TO_CREATE_LDIF_WRITER_49=Une erreur inattendue s'est produite lors de la tentative d'ouverture du processus d'\u00e9criture LDIF pour le backend de sch\u00e9ma\u00a0: %s |
| | |
| | | INFO_TASKBE_UPDATED_RETENTION_TIME_128=La p\u00e9riode de r\u00e9tention de la t\u00e2che termin\u00e9e a \u00e9t\u00e9 mise \u00e0 jour et dure maintenant %d secondes. Elle prend effet imm\u00e9diatement |
| | | INFO_TASKBE_UPDATED_BACKING_FILE_129=Le chemin vers le fichier de sauvegarde des donn\u00e9es de la t\u00e2che est maintenant %s. Un instantan\u00e9 de la configuration de la t\u00e2che actuelle a \u00e9t\u00e9 \u00e9crit dans ce fichier et continuera \u00e0 \u00eatre utilis\u00e9 pour de futures mises \u00e0 jour |
| | | ERR_TASKBE_ADD_DISALLOWED_DN_130=Les nouvelles entr\u00e9es du backend de t\u00e2che ne peuvent \u00eatre ajout\u00e9es qu'imm\u00e9diatement sous %s pour les t\u00e2ches planifi\u00e9es ou imm\u00e9diatement sous %s pour les t\u00e2ches r\u00e9currentes |
| | | ERR_TASKBE_MODIFY_DN_NOT_SUPPORTED_131=Les op\u00e9rations de modification de DN ne sont pas prises en charge dans le backend de t\u00e2che |
| | | INFO_TASKBE_BACKING_FILE_HEADER_132=Ce fichier contient les donn\u00e9es utilis\u00e9es par le backend du planificateur de t\u00e2ches de Directory Server. N'\u00e9ditez pas directement ce fichier car il existe un risque de perte de ces modifications. Les d\u00e9finitions de t\u00e2ches planifi\u00e9es et r\u00e9currentes doivent uniquement \u00eatre modifi\u00e9es au moyen des utilitaires d'administration fournis avec Directory Server |
| | | ERR_TASKSCHED_DUPLICATE_RECURRING_ID_133=Impossible d'ajouter la t\u00e2che r\u00e9currente %s au planificateur de t\u00e2ches car il existe d\u00e9j\u00e0 une autre t\u00e2che r\u00e9currente avec le m\u00eame ID |
| | | ERR_TASKSCHED_DUPLICATE_TASK_ID_134=Impossible de planifier la t\u00e2che %s car il existe d\u00e9j\u00e0 une autre t\u00e2che avec le m\u00eame ID |
| | |
| | | WARN_TASKSCHED_CANNOT_RENAME_CURRENT_BACKING_FILE_152=Une erreur s'est produite lors de la tentative de changement du nom du fichier de secours de t\u00e2ches actuel de %s en %s\u00a0: %s. La configuration de t\u00e2ches pr\u00e9c\u00e9dente (qui ne refl\u00e8te pas la derni\u00e8re mise \u00e0 jour) risque d'\u00eatre perdue |
| | | ERR_TASKSCHED_CANNOT_RENAME_NEW_BACKING_FILE_153=Une erreur s'est produite lors de la tentative de changement du nom du nouveau fichier de secours de t\u00e2ches de %s en %s\u00a0: %s. Si vous red\u00e9marrez Directory Server, le planificateur de t\u00e2ches risque de ne pas fonctionner comme pr\u00e9vu |
| | | ERR_TASKSCHED_CANNOT_WRITE_BACKING_FILE_154=Une erreur s'est produite lors de la tentative d'\u00e9criture du nouveau fichier de secours de t\u00e2ches %s\u00a0: %s. Les informations de configuration, qui refl\u00e8tent la derni\u00e8re mise \u00e0 jour, risquent d'\u00eatre perdues |
| | | ERR_TASKBE_IMPORT_NOT_SUPPORTED_155=Le backend de t\u00e2che ne prend pas en charge les op\u00e9rations d'importation LDIF |
| | | INFO_TASKBE_INTERRUPTED_BY_SHUTDOWN_156=Le backend des t\u00e2ches est en cours de cl\u00f4ture |
| | | INFO_ROOTDSE_UPDATED_SHOW_ALL_ATTRS_159=La configuration du DSE racine a \u00e9t\u00e9 mise \u00e0 jour afin que l'attribut de configuration %s utilise d\u00e9sormais une valeur de %s |
| | | ERR_TASKSCHED_REMOVE_PENDING_NO_SUCH_TASK_161=Impossible de supprimer la t\u00e2che en attente %s car elle n'existe pas |
| | |
| | | ERR_TASKBE_SEARCH_INVALID_BASE_168=Impossible de traiter l'op\u00e9ration de recherche dans le backend de t\u00e2che car le DN de base fourni (%s) n'est pas valide pour les entr\u00e9es du backend de t\u00e2che |
| | | ERR_TASKBE_SEARCH_NO_SUCH_TASK_169=Impossible de traiter l'op\u00e9ration de recherche dans le backend de t\u00e2che car aucune t\u00e2che planifi\u00e9e n'est associ\u00e9e \u00e0 l'entr\u00e9e de base de recherche fournie (%s) |
| | | ERR_TASKBE_SEARCH_NO_SUCH_RECURRING_TASK_170=Impossible de traiter l'op\u00e9ration de recherche dans le backend de t\u00e2che car aucune t\u00e2che r\u00e9currente n'est associ\u00e9e \u00e0 l'entr\u00e9e de base de recherche fournie (%s) |
| | | ERR_BACKUP_CONFIG_ENTRY_NULL_171=Impossible d'initialiser le backend de sauvegarde car l'entr\u00e9e de configuration fournie est Null |
| | | ERR_BACKUP_CANNOT_DECODE_BACKUP_ROOT_DN_172=Impossible d'initialiser le backend de sauvegarde car une erreur s'est produite lors de la tentative de d\u00e9codage du DN de base pour ce backend\u00a0: %s |
| | | ERR_BACKUP_GET_ENTRY_NULL_175=Impossible de r\u00e9cup\u00e9rer une entr\u00e9e depuis le backend de sauvegarde car l'entr\u00e9e demand\u00e9e \u00e9tait Null |
| | | ERR_BACKEND_CONFIG_ENTRY_NULL_171=Impossible d'initialiser le backend "%s" car l'entr\u00e9e de configuration fournie est Null |
| | | ERR_BACKUP_INVALID_BASE_176=L'entr\u00e9e demand\u00e9e (%s) n'existe pas dans le backend de sauvegarde |
| | | ERR_BACKUP_DN_DOES_NOT_SPECIFY_DIRECTORY_177=Impossible de r\u00e9cup\u00e9rer l'entr\u00e9e %s depuis le backend de sauvegarde car le DN demand\u00e9 est un niveau au-dessous du DN de base mais n'indique aucun r\u00e9pertoire de sauvegarde |
| | | ERR_BACKUP_INVALID_BACKUP_DIRECTORY_178=Impossible de r\u00e9cup\u00e9rer l'entr\u00e9e %s depuis le backend de sauvegarde car le r\u00e9pertoire de sauvegarde demand\u00e9 n'est pas valide\u00a0: %s |
| | |
| | | ERR_BACKUP_NO_BACKUP_PARENT_DN_181=Impossible de r\u00e9cup\u00e9rer l'entr\u00e9e %s depuis le backend de sauvegarde car elle n'a pas de parent |
| | | ERR_BACKUP_NO_BACKUP_DIR_IN_DN_182=Impossible de r\u00e9cup\u00e9rer l'entr\u00e9e %s depuis le backend de sauvegarde car le DN ne contient pas le r\u00e9pertoire de sauvegarde o\u00f9 la sauvegarde demand\u00e9e doit r\u00e9sider |
| | | ERR_BACKUP_NO_SUCH_BACKUP_183=La sauvegarde %s n'existe pas dans le r\u00e9pertoire de sauvegarde %s |
| | | ERR_BACKUP_ADD_NOT_SUPPORTED_184=Les op\u00e9rations d'ajout ne sont pas prises en charge dans le backend de sauvegarde |
| | | ERR_BACKUP_DELETE_NOT_SUPPORTED_185=Les op\u00e9rations de suppression ne sont pas prises en charge dans le backend de sauvegarde |
| | | ERR_BACKUP_MODIFY_NOT_SUPPORTED_186=Les op\u00e9rations de modification ne sont pas prises en charge dans le backend de sauvegarde |
| | | ERR_BACKUP_MODIFY_DN_NOT_SUPPORTED_187=Les op\u00e9rations de modification de DN ne sont pas prises en charge dans le backend de sauvegarde |
| | | ERR_BACKEND_MODIFY_NOT_SUPPORTED_186=Les op\u00e9rations de modification ne sont pas prises en charge dans le backend de sauvegarde |
| | | ERR_BACKUP_NO_SUCH_ENTRY_188=L'entr\u00e9e demand\u00e9e (%s) n'existe pas dans le backend de sauvegarde |
| | | ERR_BACKUP_EXPORT_NOT_SUPPORTED_189=Les op\u00e9rations d'exportation LDIF ne sont pas prises en charge dans le backend de sauvegarde |
| | | ERR_BACKUP_IMPORT_NOT_SUPPORTED_190=Les op\u00e9rations d'importation LDIF ne sont pas prises en charge dans le backend de sauvegarde |
| | | ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED_191=Les op\u00e9rations de sauvegarde et restauration ne sont pas prises en charge dans le backend de sauvegarde |
| | | ERR_MEMORYBACKEND_REQUIRE_EXACTLY_ONE_BASE_192=Vous devez indiquer un seul DN de base \u00e0 utiliser avec le backend bas\u00e9 sur la m\u00e9moire |
| | | ERR_MEMORYBACKEND_ENTRY_ALREADY_EXISTS_193=L'entr\u00e9e %s existe d\u00e9j\u00e0 dans le backend bas\u00e9 sur la m\u00e9moire |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_BELONG_194=L'entr\u00e9e %s n'appartient pas au backend bas\u00e9 sur la m\u00e9moire |
| | | ERR_MEMORYBACKEND_PARENT_DOESNT_EXIST_195=Impossible d'ajouter l'entr\u00e9e %s car son entr\u00e9e parente (%s) n'existe pas dans le backend bas\u00e9 sur la m\u00e9moire |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST_196=L'entr\u00e9e %s n'existe pas dans le backend bas\u00e9 sur la m\u00e9moire |
| | | ERR_BACKEND_ENTRY_DOESNT_EXIST_196=L'entr\u00e9e %s n'existe pas dans le backend "%s" |
| | | ERR_MEMORYBACKEND_CANNOT_DELETE_ENTRY_WITH_CHILDREN_197=Impossible de supprimer l'entr\u00e9e %s car elle poss\u00e8de une ou plusieurs entr\u00e9es subordonn\u00e9es |
| | | ERR_MEMORYBACKEND_CANNOT_CREATE_LDIF_WRITER_199=Impossible de cr\u00e9er un g\u00e9n\u00e9rateur LDIF\u00a0: %s |
| | | ERR_MEMORYBACKEND_CANNOT_WRITE_ENTRY_TO_LDIF_200=Impossible d'\u00e9crire l'entr\u00e9e %s dans le fichier LDIF\u00a0: %s |
| | |
| | | NOTE_BACKEND_ENVIRONMENT_UNUSABLE_297=L'environnement de bases de donn\u00e9es JE correspondant \u00e0 l 'id de backend %s est corrompu. Red\u00e9marrez Directory Server pour rouvrir l'environnement |
| | | ERR_TASKSCHED_NOT_ALLOWED_TASK_298=Directory Server n'est pas configur\u00e9 pour autoriser l'appel de la t\u00e2che %s |
| | | INFO_TASK_COMPLETION_BODY_299=ID de t\u00e2che\u00a0: %s\r\n\u00c9tat de la t\u00e2che: %s\r\nHeure de d\u00e9but planifi\u00e9e\u00a0: %s\r\nHeure de d\u00e9but r\u00e9elle\u00a0: %s\r\nHeure d'ach\u00e8vement\u00a0: %s\r\n\r\nMessages du fichier journal\u00a0:\r\n |
| | | ERR_TRUSTSTORE_GET_ENTRY_NULL_300=Impossible de r\u00e9cup\u00e9rer une entr\u00e9e depuis le backend de magasin d'approbations car l'entr\u00e9e demand\u00e9e \u00e9tait Null |
| | | ERR_TRUSTSTORE_INVALID_BASE_301=L'entr\u00e9e %s demand\u00e9e n'existe pas dans le backend de magasin d'approbations |
| | | ERR_TRUSTSTORE_DN_DOES_NOT_SPECIFY_CERTIFICATE_302=Impossible de traiter l'entr\u00e9e %s dans le backend de magasin d'approbations car le DN demand\u00e9 est un niveau au-dessous du DN de base mais n'indique aucun nom de certificat |
| | | ERR_TRUSTSTORE_CANNOT_RETRIEVE_CERT_303=Erreur lors de la tentative de r\u00e9cup\u00e9ration du certificat %s dans le fichier de magasin d'approbations %s\u00a0: %s |
| | | ERR_TRUSTSTORE_MODIFY_NOT_SUPPORTED_304=Les op\u00e9rations de modification ne sont pas prises en charge dans le backend de magasin d'approbations |
| | | ERR_TRUSTSTORE_MODIFY_DN_NOT_SUPPORTED_305=Les op\u00e9rations de modification de DN ne sont pas prises en charge dans le backend de magasin d'approbations |
| | | ERR_TRUSTSTORE_REQUIRES_ONE_BASE_DN_306=Impossible d'initialiser le backend de magasin d'approbations depuis l'entr\u00e9e de configuration %s car elle ne contient pas un DN de base unique |
| | | ERR_TRUSTSTORE_IMPORT_AND_EXPORT_NOT_SUPPORTED_307=Les op\u00e9rations d'importation et d'exportation LDIF ne sont pas prises en charge dans le backend de magasin d'approbations |
| | | ERR_TRUSTSTORE_BACKUP_AND_RESTORE_NOT_SUPPORTED_308=Les op\u00e9rations de sauvegarde et restauration ne sont pas prises en charge dans le backend de magasin d'approbations |
| | | ERR_BACKEND_IMPORT_AND_EXPORT_NOT_SUPPORTED_307=Les op\u00e9rations d'importation et d'exportation LDIF ne sont pas prises en charge dans le backend "%s" |
| | | ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED_308=Les op\u00e9rations de sauvegarde et restauration ne sont pas prises en charge dans le backend "%s" |
| | | ERR_TRUSTSTORE_NO_SUCH_FILE_309=Le fichier de magasin d'approbations %s indiqu\u00e9 dans l'attribut ds-cfg-trust-store-file de l'entr\u00e9e de configuration %s n'existe pas |
| | | ERR_TRUSTSTORE_INVALID_TYPE_310=Le type de magasin d'approbations %s indiqu\u00e9 dans l'attribut ds-cfg-trust-store-type de l'entr\u00e9e de configuration %s n'est pas valide\u00a0: %s |
| | | ERR_TRUSTSTORE_PIN_FILE_CANNOT_CREATE_311=Une erreur s'est produite lors de la tentative de cr\u00e9ation du fichier PIN %s sp\u00e9cifi\u00e9 dans l'attribut ds-cfg-trust-store-pin-file de l'entr\u00e9e de configuration %s |
| | |
| | | WARN_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE_4=\u30d9\u30fc\u30b9 DN "%s" \u306f\u3001\u30eb\u30fc\u30c8 DSE \u4ee5\u4e0b\u3092\u691c\u7d22\u3059\u308b\u305f\u3081\u306e\u4e0b\u4f4d\u30d9\u30fc\u30b9 DN \u306e 1 \u3064\u3068\u3057\u3066\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u3053\u306e\u30d9\u30fc\u30b9 DN \u306f\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u30b5\u30d5\u30a3\u30c3\u30af\u30b9\u3067\u306f\u51e6\u7406\u3055\u308c\u306a\u3044\u305f\u3081\u3001\u4f7f\u7528\u3055\u308c\u307e\u305b\u3093 |
| | | WARN_ROOTDSE_SUBORDINATE_BASE_EXCEPTION_5=\u30eb\u30fc\u30c8 DSE \u4ee5\u4e0b\u3092\u691c\u7d22\u3059\u308b\u305f\u3081\u306e\u4e00\u9023\u306e\u4e0b\u4f4d\u30d9\u30fc\u30b9 DN \u3092\u5224\u65ad\u4e2d\u306b\u3001\u4e88\u671f\u3057\u306a\u3044\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f: %s |
| | | WARN_ROOTDSE_GET_ENTRY_NONROOT_6=\u30eb\u30fc\u30c8 DSE \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u304c\u3001DN \u304c "%s" \u306e\u30a8\u30f3\u30c8\u30ea\u3092\u53d6\u5f97\u3059\u308b\u3088\u3046\u8981\u6c42\u3055\u308c\u307e\u3057\u305f\u3002 \u3053\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306f\u3001\u30eb\u30fc\u30c8 DSE \u81ea\u4f53\u3092\u53d6\u5f97\u3059\u308b\u5834\u5408\u306e\u307f\u8981\u6c42\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 \u305f\u3060\u3057\u3001\u5b9a\u7fa9\u6e08\u307f\u306e\u4e0b\u4f4d\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3001\u8981\u6c42\u3055\u308c\u305f\u30a8\u30f3\u30c8\u30ea\u3092\u898b\u3064\u3051\u3089\u308c\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3059 |
| | | ERR_ROOTDSE_ADD_NOT_SUPPORTED_7=\u30a8\u30f3\u30c8\u30ea "%s" \u3092\u8ffd\u52a0\u3057\u307e\u305b\u3093\u3002\u8ffd\u52a0\u64cd\u4f5c\u306f\u3001\u30eb\u30fc\u30c8 DSE \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_ROOTDSE_DELETE_NOT_SUPPORTED_8=\u30a8\u30f3\u30c8\u30ea "%s" \u3092\u524a\u9664\u3057\u307e\u305b\u3093\u3002\u524a\u9664\u64cd\u4f5c\u306f\u3001\u30eb\u30fc\u30c8 DSE \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_ROOTDSE_MODIFY_NOT_SUPPORTED_9=\u30a8\u30f3\u30c8\u30ea "%s" \u3092\u66f4\u65b0\u3057\u307e\u305b\u3093\u3002\u5909\u66f4\u64cd\u4f5c\u306f\u3001\u30eb\u30fc\u30c8 DSE \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 \u30eb\u30fc\u30c8 DSE \u81ea\u4f53\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u5909\u66f4\u3059\u308b\u5834\u5408\u306f\u3001\u69cb\u6210\u306e "%s" \u30a8\u30f3\u30c8\u30ea\u3092\u4fee\u6b63\u3059\u308b\u3053\u3068\u3067\u5909\u66f4\u3067\u304d\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059 |
| | | ERR_ROOTDSE_MODIFY_DN_NOT_SUPPORTED_10=\u30a8\u30f3\u30c8\u30ea "%s" \u3092\u30ea\u30cd\u30fc\u30e0\u3057\u307e\u305b\u3093\u3002DN \u5909\u66f4\u64cd\u4f5c\u306f\u3001\u30eb\u30fc\u30c8 DSE \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_ROOTDSE_INVALID_SEARCH_BASE_11=\u30eb\u30fc\u30c8 DSE \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067 "%3$s" \u306e\u30d9\u30fc\u30b9 DN \u3092\u4f7f\u7528\u3057\u3066\u691c\u7d22 (\u63a5\u7d9a ID %1$d\u3001\u64cd\u4f5c ID %2$d) \u3092\u5b9f\u884c\u3057\u307e\u305b\u3093\u3002 \u3053\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306e \u691c\u7d22\u306e\u30d9\u30fc\u30b9 DN \u306f\u3001\u30eb\u30fc\u30c8 DSE \u81ea\u4f53\u306e DN \u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 |
| | | ERR_ROOTDSE_UNEXPECTED_SEARCH_FAILURE_12=\u30eb\u30fc\u30c8 DSE \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u691c\u7d22\u64cd\u4f5c (\u63a5\u7d9a ID %d\u3001\u64cd\u4f5c ID %d) \u3092\u51e6\u7406\u4e2d\u306b\u3001\u4e88\u671f\u3057\u306a\u3044\u969c\u5bb3\u304c\u767a\u751f\u3057\u307e\u3057\u305f: %s |
| | | ERR_ROOTDSE_INVALID_SEARCH_SCOPE_13=\u63a5\u7d9a ID %d \u304a\u3088\u3073\u64cd\u4f5c ID %d \u306e\u691c\u7d22\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3002%s \u306e\u7bc4\u56f2\u304c\u7121\u52b9\u3067\u3059 |
| | | ERR_ROOTDSE_UNABLE_TO_CREATE_LDIF_WRITER_14=\u30eb\u30fc\u30c8 DSE \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306e LDIF \u30e9\u30a4\u30bf\u30fc\u3092\u958b\u304f\u3068\u304d\u306b\u3001\u4e88\u671f\u3057\u306a\u3044\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: %s |
| | | ERR_ROOTDSE_UNABLE_TO_EXPORT_DSE_15=\u6307\u5b9a\u3055\u308c\u305f LDIF \u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u30eb\u30fc\u30c8 DSE \u30a8\u30f3\u30c8\u30ea\u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u4e2d\u306b\u3001\u4e88\u671f\u3057\u306a\u3044\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: %s |
| | | ERR_ROOTDSE_IMPORT_NOT_SUPPORTED_16=\u30eb\u30fc\u30c8 DSE \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067 LDIF \u30a4\u30f3\u30dd\u30fc\u30c8\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED_17=\u30eb\u30fc\u30c8 DSE \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304a\u3088\u3073\u5fa9\u5143\u64cd\u4f5c\u306e\u305f\u3081\u306e\u6a5f\u69cb\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30eb\u30fc\u30c8 DSE \u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u69cb\u6210\u306e\u4e00\u90e8\u3068\u3057\u3066\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3057\u3066\u304f\u3060\u3055\u3044 |
| | | INFO_ROOTDSE_USING_SUFFIXES_AS_BASE_DNS_18=\u30eb\u30fc\u30c8 DSE \u69cb\u6210\u304c\u66f4\u65b0\u3055\u308c\u3001\u30eb\u30fc\u30c8 DSE \u3088\u308a\u4e0b\u4f4d\u306e\u691c\u7d22\u5b9f\u884c\u6642\u306b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u30b5\u30d5\u30a3\u30c3\u30af\u30b9\u306e\u5b9a\u7fa9\u6e08\u307f\u30bb\u30c3\u30c8\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f |
| | | INFO_ROOTDSE_USING_NEW_SUBORDINATE_BASE_DNS_19=\u30eb\u30fc\u30c8 DSE \u69cb\u6210\u304c\u66f4\u65b0\u3055\u308c\u3001\u30eb\u30fc\u30c8 DSE \u3088\u308a\u4e0b\u4f4d\u306e\u5b9f\u884c\u6642\u306b\u30d9\u30fc\u30b9 DN \u30bb\u30c3\u30c8 %s \u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f |
| | | INFO_ROOTDSE_USING_NEW_USER_ATTRS_20=\u30eb\u30fc\u30c8 DSE \u69cb\u6210\u304c\u66f4\u65b0\u3055\u308c\u3001\u30e6\u30fc\u30b6\u30fc\u304c\u5b9a\u7fa9\u3057\u305f\u65b0\u898f\u5c5e\u6027\u30bb\u30c3\u30c8\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f |
| | | ERR_MONITOR_CONFIG_ENTRY_NULL_21=\u69cb\u6210\u30a8\u30f3\u30c8\u30ea\u3092\u6307\u5b9a\u305b\u305a\u306b\u76e3\u8996\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3092\u69cb\u6210\u3057\u3088\u3046\u3068\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u306f\u8a31\u53ef\u3055\u308c\u306a\u3044\u305f\u3081\u3001\u30d7\u30ed\u30c8\u30b3\u30eb\u7d4c\u7531\u3067\u76e3\u8996\u60c5\u5831\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093 |
| | | ERR_MONITOR_CANNOT_DECODE_MONITOR_ROOT_DN_22=cn=monitor \u3092\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u76e3\u8996\u60c5\u5831\u306e\u30d9\u30fc\u30b9 DN \u3068\u3057\u3066\u30c7\u30b3\u30fc\u30c9\u4e2d\u306b\u3001\u4e88\u671f\u3057\u306a\u3044\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: %s\u3002\u30d7\u30ed\u30c8\u30b3\u30eb\u7d4c\u7531\u3067\u76e3\u8996\u60c5\u5831\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093 |
| | | ERR_MONITOR_ADD_NOT_SUPPORTED_23=\u30a8\u30f3\u30c8\u30ea "%s" \u3092\u8ffd\u52a0\u3057\u307e\u305b\u3093\u3002\u8ffd\u52a0\u64cd\u4f5c\u306f\u3001\u76e3\u8996\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_MONITOR_DELETE_NOT_SUPPORTED_24=\u30a8\u30f3\u30c8\u30ea "%s" \u3092\u524a\u9664\u3057\u307e\u305b\u3093\u3002\u524a\u9664\u64cd\u4f5c\u306f\u3001\u76e3\u8996\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_BACKEND_ADD_NOT_SUPPORTED_23=\u30a8\u30f3\u30c8\u30ea "%s" \u3092\u8ffd\u52a0\u3057\u307e\u305b\u3093\u3002\u8ffd\u52a0\u64cd\u4f5c\u306f\u3001 "%s" \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_BACKEND_DELETE_NOT_SUPPORTED_24=\u30a8\u30f3\u30c8\u30ea "%s" \u3092\u524a\u9664\u3057\u307e\u305b\u3093\u3002\u524a\u9664\u64cd\u4f5c\u306f\u3001 "%s" \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_MONITOR_MODIFY_NOT_SUPPORTED_25=\u30a8\u30f3\u30c8\u30ea "%s" \u3092\u66f4\u65b0\u3057\u307e\u305b\u3093\u3002\u5909\u66f4\u64cd\u4f5c\u306f\u3001\u76e3\u8996\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 \u30d9\u30fc\u30b9\u76e3\u8996\u30a8\u30f3\u30c8\u30ea\u81ea\u4f53\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u5909\u66f4\u3059\u308b\u5834\u5408\u306f\u3001\u69cb\u6210\u306e "%s" \u30a8\u30f3\u30c8\u30ea\u3092\u4fee\u6b63\u3059\u308b\u3053\u3068\u3067\u5909\u66f4\u3067\u304d\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059 |
| | | ERR_MONITOR_MODIFY_DN_NOT_SUPPORTED_26=\u30a8\u30f3\u30c8\u30ea "%s" \u3092\u30ea\u30cd\u30fc\u30e0\u3057\u307e\u305b\u3093\u3002DN \u5909\u66f4\u64cd\u4f5c\u306f\u3001\u76e3\u8996\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_BACKEND_MODIFY_DN_NOT_SUPPORTED_26=\u30a8\u30f3\u30c8\u30ea "%s" \u3092\u30ea\u30cd\u30fc\u30e0\u3057\u307e\u305b\u3093\u3002DN \u5909\u66f4\u64cd\u4f5c\u306f\u3001 "%s" \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_MONITOR_UNABLE_TO_EXPORT_BASE_27=\u30d9\u30fc\u30b9\u76e3\u8996\u30a8\u30f3\u30c8\u30ea\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: %s |
| | | ERR_MONITOR_UNABLE_TO_EXPORT_PROVIDER_ENTRY_28=\u30e2\u30cb\u30bf\u30fc\u30d7\u30ed\u30d0\u30a4\u30c0 %s \u306e\u76e3\u8996\u30a8\u30f3\u30c8\u30ea\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: %s |
| | | ERR_MONITOR_IMPORT_NOT_SUPPORTED_29=\u76e3\u8996\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067 LDIF \u30a4\u30f3\u30dd\u30fc\u30c8\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED_30=\u76e3\u8996\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304a\u3088\u3073\u5fa9\u5143\u64cd\u4f5c\u306e\u305f\u3081\u306e\u6a5f\u69cb\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_BACKEND_IMPORT_NOT_SUPPORTED_29="%s" \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067 LDIF \u30a4\u30f3\u30dd\u30fc\u30c8\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | INFO_MONITOR_USING_NEW_USER_ATTRS_31=\u76e3\u8996\u69cb\u6210\u304c\u66f4\u65b0\u3055\u308c\u3001\u30e6\u30fc\u30b6\u30fc\u304c\u5b9a\u7fa9\u3057\u305f\u65b0\u898f\u5c5e\u6027\u30bb\u30c3\u30c8\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f |
| | | ERR_MONITOR_GET_ENTRY_NULL_32=\u8981\u6c42\u3055\u308c\u305f\u30a8\u30f3\u30c8\u30ea\u3092\u76e3\u8996\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u304b\u3089\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002\u6307\u5b9a\u3055\u308c\u305f DN \u304c NULL \u3067\u3057\u305f |
| | | ERR_BACKEND_GET_ENTRY_NULL_32=\u8981\u6c42\u3055\u308c\u305f\u30a8\u30f3\u30c8\u30ea\u3092 "%s" \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u304b\u3089\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002\u6307\u5b9a\u3055\u308c\u305f DN \u304c NULL \u3067\u3057\u305f |
| | | ERR_MONITOR_INVALID_BASE_34=\u8981\u6c42\u3055\u308c\u305f\u30a8\u30f3\u30c8\u30ea %s \u3092\u76e3\u8996\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u304b\u3089\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002DN \u304c %s \u306e\u76e3\u8996\u30d9\u30fc\u30b9\u3088\u308a\u4e0b\u3067\u306f\u3042\u308a\u307e\u305b\u3093 |
| | | INFO_MONITOR_UPTIME_37=%d \u65e5 %d \u6642\u9593 %d \u5206 %d \u79d2 |
| | | ERR_SCHEMA_CONFIG_ENTRY_NULL_38=\u69cb\u6210\u30a8\u30f3\u30c8\u30ea\u3092\u6307\u5b9a\u305b\u305a\u306b\u30b9\u30ad\u30fc\u30de\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3092\u69cb\u6210\u3057\u3088\u3046\u3068\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u306f\u8a31\u53ef\u3055\u308c\u306a\u3044\u305f\u3081\u3001\u30d7\u30ed\u30c8\u30b3\u30eb\u7d4c\u7531\u3067\u30b9\u30ad\u30fc\u30de\u60c5\u5831\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093 |
| | | ERR_SCHEMA_CANNOT_DETERMINE_BASE_DN_40=\u69cb\u6210\u30a8\u30f3\u30c8\u30ea %s \u306e ds-cfg-schema-entry-dn \u5c5e\u6027\u3067\u6307\u5b9a\u3055\u308c\u3066\u3044\u308b\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u306e\u30b9\u30ad\u30fc\u30de\u60c5\u5831\u516c\u958b\u6642\u306b\u4f7f\u7528\u3059\u308b\u30d9\u30fc\u30b9 DN \u3092\u5224\u65ad\u4e2d\u306b\u3001\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: %s\u3002cn=schema \u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30b9\u30ad\u30fc\u30de\u30d9\u30fc\u30b9 DN \u304c\u4f7f\u7528\u3055\u308c\u307e\u3059 |
| | | ERR_SCHEMA_ADD_NOT_SUPPORTED_41=\u30a8\u30f3\u30c8\u30ea "%s" \u3092\u8ffd\u52a0\u3057\u307e\u305b\u3093\u3002\u8ffd\u52a0\u64cd\u4f5c\u306f\u3001\u30b9\u30ad\u30fc\u30de\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_SCHEMA_DELETE_NOT_SUPPORTED_42=\u30a8\u30f3\u30c8\u30ea "%s" \u3092\u524a\u9664\u3057\u307e\u305b\u3093\u3002\u524a\u9664\u64cd\u4f5c\u306f\u3001\u30b9\u30ad\u30fc\u30de\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_SCHEMA_MODIFY_DN_NOT_SUPPORTED_44=\u30a8\u30f3\u30c8\u30ea "%s" \u3092\u30ea\u30cd\u30fc\u30e0\u3057\u307e\u305b\u3093\u3002DN \u5909\u66f4\u64cd\u4f5c\u306f\u3001\u30b9\u30ad\u30fc\u30de\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_SCHEMA_UNABLE_TO_EXPORT_BASE_45=\u30d9\u30fc\u30b9\u30b9\u30ad\u30fc\u30de\u30a8\u30f3\u30c8\u30ea\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: %s |
| | | ERR_SCHEMA_INVALID_BASE_48=\u8981\u6c42\u3055\u308c\u305f\u30a8\u30f3\u30c8\u30ea %s \u3092\u30b9\u30ad\u30fc\u30de\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u304b\u3089\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002DN \u304c\u30b9\u30ad\u30fc\u30de\u30a8\u30f3\u30c8\u30ea DN \u306e\u3044\u305a\u308c\u304b\u3068\u540c\u3058\u3067\u3059 |
| | | ERR_SCHEMA_UNABLE_TO_CREATE_LDIF_WRITER_49=\u30b9\u30ad\u30fc\u30de\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306e LDIF \u30e9\u30a4\u30bf\u30fc\u3092\u958b\u304f\u3068\u304d\u306b\u3001\u4e88\u671f\u3057\u306a\u3044\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: %s |
| | |
| | | INFO_TASKBE_UPDATED_RETENTION_TIME_128=\u5b8c\u4e86\u30bf\u30b9\u30af\u306e\u4fdd\u6301\u671f\u9593\u304c %d \u79d2\u306b\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f\u3002 \u3053\u308c\u306f\u305f\u3060\u3061\u306b\u6709\u52b9\u306b\u306a\u308a\u307e\u3059 |
| | | INFO_TASKBE_UPDATED_BACKING_FILE_129=\u30bf\u30b9\u30af\u30c7\u30fc\u30bf\u306e\u30d0\u30c3\u30ad\u30f3\u30b0\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u30d1\u30b9\u304c %s \u306b\u5909\u66f4\u3055\u308c\u307e\u3057\u305f\u3002\u73fe\u5728\u306e\u30bf\u30b9\u30af\u69cb\u6210\u306e\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306f\u3001\u305d\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u8fbc\u307f\u6e08\u307f\u3067\u3001\u4eca\u5f8c\u306e\u66f4\u65b0\u3067\u7d99\u7d9a\u3057\u3066\u4f7f\u7528\u3055\u308c\u307e\u3059 |
| | | ERR_TASKBE_ADD_DISALLOWED_DN_130=\u30bf\u30b9\u30af\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u5185\u306e\u65b0\u3057\u3044\u30a8\u30f3\u30c8\u30ea\u3092\u8ffd\u52a0\u3067\u304d\u308b\u306e\u306f\u3001\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3055\u308c\u305f\u30bf\u30b9\u30af\u306e %s \u306e\u76f4\u4e0b\u3001\u307e\u305f\u306f\u7e70\u308a\u8fd4\u3057\u30bf\u30b9\u30af\u306e %s \u306e\u76f4\u4e0b\u306e\u307f\u3067\u3059 |
| | | ERR_TASKBE_MODIFY_DN_NOT_SUPPORTED_131=\u30bf\u30b9\u30af\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067 DN \u306e\u5909\u66f4\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | INFO_TASKBE_BACKING_FILE_HEADER_132=\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u306e\u30bf\u30b9\u30af\u30b9\u30b1\u30b8\u30e5\u30fc\u30e9\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u4f7f\u7528\u3055\u308c\u308b\u30c7\u30fc\u30bf\u304c\u542b\u307e\u308c\u307e\u3059\u3002 \u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u76f4\u63a5\u7de8\u96c6\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u5909\u66f4\u304c\u5931\u308f\u308c\u308b\u304a\u305d\u308c\u304c\u3042\u308a\u307e\u3059\u3002 \u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u30bf\u30b9\u30af\u3068\u7e70\u308a\u8fd4\u3057\u30bf\u30b9\u30af\u306e\u5b9a\u7fa9\u306f\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u3067\u63d0\u4f9b\u3055\u308c\u308b\u7ba1\u7406\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30fc\u3092\u4f7f\u7528\u3057\u3066\u306e\u307f\u7de8\u96c6\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044 |
| | | ERR_TASKSCHED_DUPLICATE_RECURRING_ID_133=\u7e70\u308a\u8fd4\u3057\u30bf\u30b9\u30af %s \u3092\u30bf\u30b9\u30af\u30b9\u30b1\u30b8\u30e5\u30fc\u30e9\u306b\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3002\u540c\u3058 ID \u306e\u5225\u306e\u7e70\u308a\u8fd4\u3057\u30bf\u30b9\u30af\u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059 |
| | | ERR_TASKSCHED_DUPLICATE_TASK_ID_134=\u30bf\u30b9\u30af %s \u3092\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3067\u304d\u307e\u305b\u3093\u3002\u540c\u3058 ID \u306e\u5225\u306e\u30bf\u30b9\u30af\u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059 |
| | |
| | | WARN_TASKSCHED_CANNOT_RENAME_CURRENT_BACKING_FILE_152=\u73fe\u5728\u306e\u30bf\u30b9\u30af\u30d0\u30c3\u30ad\u30f3\u30b0\u30d5\u30a1\u30a4\u30eb\u540d\u3092 %s \u304b\u3089 %s \u306b\u5909\u66f4\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: %s\u3002\u4ee5\u524d\u306e\u30bf\u30b9\u30af\u69cb\u6210 (\u6700\u65b0\u306e\u66f4\u65b0\u304c\u53cd\u6620\u3055\u308c\u3066\u3044\u306a\u3044\u3082\u306e) \u304c\u5931\u308f\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059 |
| | | ERR_TASKSCHED_CANNOT_RENAME_NEW_BACKING_FILE_153=\u65b0\u3057\u3044\u30bf\u30b9\u30af\u30d0\u30c3\u30ad\u30f3\u30b0\u30d5\u30a1\u30a4\u30eb\u540d\u3092 %s \u304b\u3089 %s \u306b\u5909\u66f4\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: %s\u3002\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u3092\u518d\u8d77\u52d5\u3059\u308b\u3068\u3001\u30bf\u30b9\u30af\u30b9\u30b1\u30b8\u30e5\u30fc\u30e9\u304c\u4e88\u671f\u3057\u305f\u3068\u304a\u308a\u306b\u52d5\u4f5c\u3057\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059 |
| | | ERR_TASKSCHED_CANNOT_WRITE_BACKING_FILE_154=\u65b0\u3057\u3044\u30bf\u30b9\u30af\u30c7\u30fc\u30bf\u306e\u30d0\u30c3\u30ad\u30f3\u30b0\u30d5\u30a1\u30a4\u30eb %s \u3092\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: %s\u3002\u6700\u65b0\u306e\u66f4\u65b0\u3092\u53cd\u6620\u3057\u305f\u69cb\u6210\u60c5\u5831\u304c\u5931\u308f\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059 |
| | | ERR_TASKBE_IMPORT_NOT_SUPPORTED_155=\u30bf\u30b9\u30af\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067 LDIF \u30a4\u30f3\u30dd\u30fc\u30c8\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | INFO_TASKBE_INTERRUPTED_BY_SHUTDOWN_156=\u30bf\u30b9\u30af\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3092\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u3057\u3066\u3044\u307e\u3059 |
| | | INFO_ROOTDSE_UPDATED_SHOW_ALL_ATTRS_159=\u30eb\u30fc\u30c8 DSE \u69cb\u6210\u304c\u66f4\u65b0\u3055\u308c\u3001\u8a2d\u5b9a\u5c5e\u6027 %s \u3067 %s \u306e\u5024\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f |
| | | ERR_TASKSCHED_REMOVE_PENDING_NO_SUCH_TASK_161=\u4fdd\u7559\u4e2d\u306e\u30bf\u30b9\u30af %s \u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3002\u305d\u306e\u3088\u3046\u306a\u30bf\u30b9\u30af\u306f\u5b58\u5728\u3057\u307e\u305b\u3093 |
| | |
| | | ERR_TASKBE_SEARCH_INVALID_BASE_168=\u30bf\u30b9\u30af\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u691c\u7d22\u64cd\u4f5c\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3002\u6307\u5b9a\u3055\u308c\u305f\u30d9\u30fc\u30b9 DN %s \u306f\u3001\u3053\u306e\u30bf\u30b9\u30af\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306e\u30a8\u30f3\u30c8\u30ea\u3068\u3057\u3066\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093 |
| | | ERR_TASKBE_SEARCH_NO_SUCH_TASK_169=\u30bf\u30b9\u30af\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u691c\u7d22\u64cd\u4f5c\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3002\u6307\u5b9a\u3055\u308c\u305f\u691c\u7d22\u30d9\u30fc\u30b9\u30a8\u30f3\u30c8\u30ea %s \u306b\u3001\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3055\u308c\u305f\u30bf\u30b9\u30af\u304c\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_TASKBE_SEARCH_NO_SUCH_RECURRING_TASK_170=\u30bf\u30b9\u30af\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u691c\u7d22\u64cd\u4f5c\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3002\u6307\u5b9a\u3055\u308c\u305f\u691c\u7d22\u30d9\u30fc\u30b9\u30a8\u30f3\u30c8\u30ea %s \u306b\u3001\u7e70\u308a\u8fd4\u3057\u30bf\u30b9\u30af\u304c\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_BACKUP_CONFIG_ENTRY_NULL_171=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3092\u521d\u671f\u5316\u3067\u304d\u307e\u305b\u3093\u3002\u6307\u5b9a\u3055\u308c\u305f\u69cb\u6210\u30a8\u30f3\u30c8\u30ea\u304c NULL \u3067\u3059 |
| | | ERR_BACKUP_CANNOT_DECODE_BACKUP_ROOT_DN_172=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3092\u521d\u671f\u5316\u3067\u304d\u307e\u305b\u3093\u3002\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306e\u30d9\u30fc\u30b9 DN \u3092\u30c7\u30b3\u30fc\u30c9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: %s |
| | | ERR_BACKUP_GET_ENTRY_NULL_175=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u304b\u3089\u30a8\u30f3\u30c8\u30ea\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002\u8981\u6c42\u3055\u308c\u305f\u30a8\u30f3\u30c8\u30ea\u304c NULL \u3067\u3057\u305f |
| | | ERR_BACKEND_CONFIG_ENTRY_NULL_171="%s" \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3092\u521d\u671f\u5316\u3067\u304d\u307e\u305b\u3093\u3002\u6307\u5b9a\u3055\u308c\u305f\u69cb\u6210\u30a8\u30f3\u30c8\u30ea\u304c NULL \u3067\u3059 |
| | | ERR_BACKUP_INVALID_BASE_176=\u8981\u6c42\u3055\u308c\u305f\u30a8\u30f3\u30c8\u30ea %s \u304c\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306b\u5b58\u5728\u3057\u307e\u305b\u3093 |
| | | ERR_BACKUP_DN_DOES_NOT_SPECIFY_DIRECTORY_177=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u304b\u3089\u30a8\u30f3\u30c8\u30ea %s \u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002\u8981\u6c42\u3055\u308c\u305f DN \u306f\u30d9\u30fc\u30b9 DN \u306e 1 \u30ec\u30d9\u30eb\u4e0b\u306b\u3042\u308a\u307e\u3059\u304c\u3001\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_BACKUP_INVALID_BACKUP_DIRECTORY_178=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u304b\u3089\u30a8\u30f3\u30c8\u30ea %s \u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002\u8981\u6c42\u3055\u308c\u305f\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u7121\u52b9\u3067\u3059: %s |
| | |
| | | ERR_BACKUP_NO_BACKUP_PARENT_DN_181=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u304b\u3089\u30a8\u30f3\u30c8\u30ea %s \u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002\u89aa\u304c\u3042\u308a\u307e\u305b\u3093 |
| | | ERR_BACKUP_NO_BACKUP_DIR_IN_DN_182=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u304b\u3089\u30a8\u30f3\u30c8\u30ea %s \u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002\u8981\u6c42\u3055\u308c\u305f\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304c\u3042\u308b\u306f\u305a\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c DN \u306b\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_BACKUP_NO_SUCH_BACKUP_183=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7 %s \u304c\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30c7\u30a3\u30ec\u30af\u30c8\u30ea %s \u5185\u306b\u5b58\u5728\u3057\u307e\u305b\u3093 |
| | | ERR_BACKUP_ADD_NOT_SUPPORTED_184=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u8ffd\u52a0\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_BACKUP_DELETE_NOT_SUPPORTED_185=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u524a\u9664\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_BACKUP_MODIFY_NOT_SUPPORTED_186=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u5909\u66f4\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_BACKUP_MODIFY_DN_NOT_SUPPORTED_187=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067 DN \u306e\u5909\u66f4\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_BACKEND_MODIFY_NOT_SUPPORTED_186=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u5909\u66f4\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_BACKUP_NO_SUCH_ENTRY_188=\u8981\u6c42\u3055\u308c\u305f\u30a8\u30f3\u30c8\u30ea %s \u304c\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306b\u5b58\u5728\u3057\u307e\u305b\u3093 |
| | | ERR_BACKUP_EXPORT_NOT_SUPPORTED_189=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067 LDIF \u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_BACKUP_IMPORT_NOT_SUPPORTED_190=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067 LDIF \u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED_191=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304a\u3088\u3073\u5fa9\u5143\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_MEMORYBACKEND_REQUIRE_EXACTLY_ONE_BASE_192=\u30e1\u30e2\u30ea\u30fc\u30d9\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u30d9\u30fc\u30b9 DN \u3092 1 \u3064\u3060\u3051\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044 |
| | | ERR_MEMORYBACKEND_ENTRY_ALREADY_EXISTS_193=\u30a8\u30f3\u30c8\u30ea %s \u306f\u3001\u30e1\u30e2\u30ea\u30fc\u30d9\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306b\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059 |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_BELONG_194=\u30a8\u30f3\u30c8\u30ea %s \u306f\u3001\u30e1\u30e2\u30ea\u30fc\u30d9\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306b\u5c5e\u3057\u307e\u305b\u3093 |
| | | ERR_MEMORYBACKEND_PARENT_DOESNT_EXIST_195=\u30a8\u30f3\u30c8\u30ea %s \u3092\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3002\u89aa\u30a8\u30f3\u30c8\u30ea %s \u304c\u30e1\u30e2\u30ea\u30fc\u30d9\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306b\u5b58\u5728\u3057\u307e\u305b\u3093 |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST_196=\u30a8\u30f3\u30c8\u30ea %s \u306f\u3001\u30e1\u30e2\u30ea\u30fc\u30d9\u30fc\u30b9\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306b\u5b58\u5728\u3057\u307e\u305b\u3093 |
| | | ERR_BACKEND_ENTRY_DOESNT_EXIST_196=\u30a8\u30f3\u30c8\u30ea %s \u306f\u3001 "%s" \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306b\u5b58\u5728\u3057\u307e\u305b\u3093 |
| | | ERR_MEMORYBACKEND_CANNOT_DELETE_ENTRY_WITH_CHILDREN_197=\u30a8\u30f3\u30c8\u30ea %s \u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3002\u4e0b\u4f4d\u30a8\u30f3\u30c8\u30ea\u304c 1 \u3064\u4ee5\u4e0a\u3042\u308a\u307e\u3059 |
| | | ERR_MEMORYBACKEND_CANNOT_CREATE_LDIF_WRITER_199=Unable to create an LDIF writer: %s |
| | | ERR_MEMORYBACKEND_CANNOT_WRITE_ENTRY_TO_LDIF_200=\u30a8\u30f3\u30c8\u30ea %s \u3092 LDIF \u306b\u66f8\u304d\u8fbc\u3081\u307e\u305b\u3093: %s |
| | |
| | | NOTE_BACKEND_ENVIRONMENT_UNUSABLE_297=\u30d0\u30c3\u30af\u30a8\u30f3\u30c9 ID %s \u306b\u5bfe\u5fdc\u3059\u308b JE \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u74b0\u5883\u304c\u58ca\u308c\u3066\u3044\u307e\u3059\u3002 \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u3092\u518d\u8d77\u52d5\u3057\u3066\u3001\u74b0\u5883\u3092\u958b\u304d\u76f4\u3057\u3066\u304f\u3060\u3055\u3044 |
| | | ERR_TASKSCHED_NOT_ALLOWED_TASK_298=\u30bf\u30b9\u30af %s \u306e\u547c\u3073\u51fa\u3057\u3092\u8a31\u53ef\u3059\u308b\u3088\u3046\u306b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u30fc\u304c\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | INFO_TASK_COMPLETION_BODY_299=\u30bf\u30b9\u30af ID: %s\r\n\u30bf\u30b9\u30af\u306e\u72b6\u614b: %s\r\n\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u8a2d\u5b9a\u3055\u308c\u305f\u958b\u59cb\u6642\u523b: %s\r\n\u5b9f\u969b\u306e\u958b\u59cb\u6642\u523b: %s\r\n\u5b8c\u4e86\u6642\u523b: %s\r\n\r\n\u30ed\u30b0\u30e1\u30c3\u30bb\u30fc\u30b8:\r\n |
| | | ERR_TRUSTSTORE_GET_ENTRY_NULL_300=\u30c8\u30e9\u30b9\u30c8\u30b9\u30c8\u30a2\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u304b\u3089\u30a8\u30f3\u30c8\u30ea\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002\u8981\u6c42\u3055\u308c\u305f\u30a8\u30f3\u30c8\u30ea\u304c NULL \u3067\u3057\u305f |
| | | ERR_TRUSTSTORE_INVALID_BASE_301=\u8981\u6c42\u3055\u308c\u305f\u30a8\u30f3\u30c8\u30ea %s \u304c\u30c8\u30e9\u30b9\u30c8\u30b9\u30c8\u30a2\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306b\u5b58\u5728\u3057\u307e\u305b\u3093 |
| | | ERR_TRUSTSTORE_DN_DOES_NOT_SPECIFY_CERTIFICATE_302=\u30c8\u30e9\u30b9\u30c8\u30b9\u30c8\u30a2\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u5185\u306e\u30a8\u30f3\u30c8\u30ea %s \u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3002\u8981\u6c42\u3055\u308c\u305f DN \u306f\u30d9\u30fc\u30b9 DN \u306e 1 \u30ec\u30d9\u30eb\u4e0b\u306b\u3042\u308a\u307e\u3059\u304c\u3001\u8a3c\u660e\u66f8\u540d\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_TRUSTSTORE_CANNOT_RETRIEVE_CERT_303=\u30c8\u30e9\u30b9\u30c8\u30b9\u30c8\u30a2\u30d5\u30a1\u30a4\u30eb %2$s \u304b\u3089\u8a3c\u660e\u66f8 %1$s \u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: %3$s |
| | | ERR_TRUSTSTORE_MODIFY_NOT_SUPPORTED_304=\u30c8\u30e9\u30b9\u30c8\u30b9\u30c8\u30a2\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u5909\u66f4\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_TRUSTSTORE_MODIFY_DN_NOT_SUPPORTED_305=\u30c8\u30e9\u30b9\u30c8\u30b9\u30c8\u30a2\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067 DN \u306e\u5909\u66f4\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_TRUSTSTORE_REQUIRES_ONE_BASE_DN_306=\u69cb\u6210\u30a8\u30f3\u30c8\u30ea %s \u304b\u3089\u30c8\u30e9\u30b9\u30c8\u30b9\u30c8\u30a2\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3092\u521d\u671f\u5316\u3067\u304d\u307e\u305b\u3093\u3002\u542b\u307e\u308c\u308b\u30d9\u30fc\u30b9 DN \u304c 1 \u3064\u3067\u306f\u3042\u308a\u307e\u305b\u3093 |
| | | ERR_TRUSTSTORE_IMPORT_AND_EXPORT_NOT_SUPPORTED_307=\u30c8\u30e9\u30b9\u30c8\u30b9\u30c8\u30a2\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067 LDIF \u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u304a\u3088\u3073\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_TRUSTSTORE_BACKUP_AND_RESTORE_NOT_SUPPORTED_308=\u30c8\u30e9\u30b9\u30c8\u30b9\u30c8\u30a2\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304a\u3088\u3073\u5fa9\u5143\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_BACKEND_IMPORT_AND_EXPORT_NOT_SUPPORTED_307="%s" LDIF \u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u304a\u3088\u3073\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED_308="%s"\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304a\u3088\u3073\u5fa9\u5143\u64cd\u4f5c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093 |
| | | ERR_TRUSTSTORE_NO_SUCH_FILE_309=\u69cb\u6210\u30a8\u30f3\u30c8\u30ea %2$s \u306e ds-cfg-trust-store-file \u5c5e\u6027\u306b\u6307\u5b9a\u3055\u308c\u3066\u3044\u308b\u30c8\u30e9\u30b9\u30c8\u30b9\u30c8\u30a2\u30d5\u30a1\u30a4\u30eb %1$s \u304c\u5b58\u5728\u3057\u307e\u305b\u3093 |
| | | ERR_TRUSTSTORE_INVALID_TYPE_310=\u69cb\u6210\u30a8\u30f3\u30c8\u30ea %2$s \u306e ds-cfg-trust-store-type \u5c5e\u6027\u306b\u6307\u5b9a\u3055\u308c\u3066\u3044\u308b\u30c8\u30e9\u30b9\u30c8\u30b9\u30c8\u30a2\u30bf\u30a4\u30d7 %1$s \u304c\u6709\u52b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093: %3$s |
| | | ERR_TRUSTSTORE_PIN_FILE_CANNOT_CREATE_311=\u69cb\u6210\u30a8\u30f3\u30c8\u30ea %2$s \u306e ds-cfg-trust-store-pin-file \u5c5e\u6027\u306b\u6307\u5b9a\u3055\u308c\u3066\u3044\u308b PIN \u30d5\u30a1\u30a4\u30eb %1$s \u3092\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f |
| | |
| | | WARN_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE_4=\uae30\ubcf8 DN \"%s\"\uc740(\ub294) \ub8e8\ud2b8 DSE \uc544\ub798\uc5d0\uc11c \uac80\uc0c9\ud558\ub294 \ub370 \uc0ac\uc6a9\ud560 \ud558\uc704 \uae30\ubcf8 DN \uc911 \ud558\ub098\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc774 \uae30\ubcf8 DN\uc740 \ub514\ub809\ud1a0\ub9ac \uc11c\ubc84\uc5d0 \ub4f1\ub85d\ub41c \uc811\ubbf8\uc0ac\uc5d0 \uc758\ud574 \ucc98\ub9ac\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \uc0ac\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | WARN_ROOTDSE_SUBORDINATE_BASE_EXCEPTION_5=\ub8e8\ud2b8 DSE \uc544\ub798\uc5d0\uc11c \uac80\uc0c9\ud558\ub294 \ub370 \uc0ac\uc6a9\ud560 \ud558\uc704 \uae30\ubcf8 DN \uc9d1\ud569\uc744 \ud655\uc778\ud558\ub294 \ub3d9\uc548 \uc608\uae30\uce58 \uc54a\uc740 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: %s |
| | | WARN_ROOTDSE_GET_ENTRY_NONROOT_6=\ub8e8\ud2b8 DSE \ubc31\uc5d4\ub4dc\uac00 DN\uc774 \"%s\"\uc778 \ud56d\ubaa9\uc744 \uac80\uc0c9\ud558\ub3c4\ub85d \uc694\uccad \ubc1b\uc558\uc2b5\ub2c8\ub2e4. \uc774 \ubc31\uc5d4\ub4dc\ub294 \ub8e8\ud2b8 DSE \uc790\uccb4\ub9cc \uac80\uc0c9\ud558\ub3c4\ub85d \uc694\uccad \ubc1b\uc544\uc57c \ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc815\uc758\ub41c \ud558\uc704 \ubc31\uc5d4\ub4dc\ub97c \uac80\uc0ac\ud558\uc5ec \uc694\uccad\ud55c \ud56d\ubaa9\uc744 \ucc3e\uc744 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4. |
| | | ERR_ROOTDSE_ADD_NOT_SUPPORTED_7=\ub8e8\ud2b8 DSE \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \ucd94\uac00 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \"%s\" \ud56d\ubaa9\uc774 \ucd94\uac00\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_ROOTDSE_DELETE_NOT_SUPPORTED_8=\ub8e8\ud2b8 DSE \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \uc0ad\uc81c \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \"%s\" \ud56d\ubaa9\uc774 \uc81c\uac70\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_ROOTDSE_MODIFY_NOT_SUPPORTED_9=\ub8e8\ud2b8 DSE \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \uc218\uc815 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \"%s\" \ud56d\ubaa9\uc774 \uc5c5\ub370\uc774\ud2b8\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub8e8\ud2b8 DSE \uc790\uccb4\uc758 \ub0b4\uc6a9\uc744 \ubcc0\uacbd\ud558\ub824\ub294 \uacbd\uc6b0 \uad6c\uc131\uc5d0\uc11c \"%s\" \ud56d\ubaa9\uc744 \uc218\uc815\ud558\uba74 \uac00\ub2a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. |
| | | ERR_ROOTDSE_MODIFY_DN_NOT_SUPPORTED_10=\ub8e8\ud2b8 DSE \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 DN \uc218\uc815 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \"%s\" \ud56d\ubaa9 \uc774\ub984\uc774 \ubcc0\uacbd\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_ROOTDSE_INVALID_SEARCH_BASE_11=\ub8e8\ud2b8 DSE \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \"%3$s\"\uc758 \uae30\ubcf8 DN\uc73c\ub85c \uac80\uc0c9(\uc5f0\uacb0 ID %1$d, \uc791\uc5c5 ID %2$d)\uc774 \uc218\ud589\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc774 \ubc31\uc5d4\ub4dc\uc5d0\uc11c \uac80\uc0c9\ud560 \uae30\ubcf8 DN\uc740 \ub8e8\ud2b8 DSE \uc790\uccb4\uc758 DN\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. |
| | | ERR_ROOTDSE_UNEXPECTED_SEARCH_FAILURE_12=\ub8e8\ud2b8 DSE \ubc31\uc5d4\ub4dc\uc5d0\uc11c \uac80\uc0c9 \uc791\uc5c5(\uc5f0\uacb0 ID %d, \uc791\uc5c5 ID %d)\uc744 \ucc98\ub9ac\ud558\ub294 \ub3d9\uc548 \uc608\uae30\uce58 \uc54a\uc740 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: %s |
| | | ERR_ROOTDSE_INVALID_SEARCH_SCOPE_13=%3$s \ubc94\uc704\uac00 \uc798\ubabb\ub418\uc5c8\uc73c\ubbc0\ub85c \uc5f0\uacb0 ID %1$d \ubc0f \uc791\uc5c5 ID %2$d(\uc73c)\ub85c \uac80\uc0c9\uc744 \ucc98\ub9ac\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_ROOTDSE_UNABLE_TO_CREATE_LDIF_WRITER_14=\ub8e8\ud2b8 DSE \ubc31\uc5d4\ub4dc\uc5d0 \ub300\ud55c LDIF \uc791\uc131\uae30\ub97c \uc5ec\ub294 \ub3d9\uc548 \uc608\uae30\uce58 \uc54a\uc740 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: %s |
| | | ERR_ROOTDSE_UNABLE_TO_EXPORT_DSE_15=\ub8e8\ud2b8 DSE \ud56d\ubaa9\uc744 \uc9c0\uc815\ub41c LDIF \ub300\uc0c1\uc5d0 \ub0b4\ubcf4\ub0b4\ub294 \ub3d9\uc548 \uc608\uae30\uce58 \uc54a\uc740 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: %s |
| | | ERR_ROOTDSE_IMPORT_NOT_SUPPORTED_16=\ub8e8\ud2b8 DSE \ubc31\uc5d4\ub4dc\ub294 LDIF \uac00\uc838\uc624\uae30 \uc791\uc5c5\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED_17=\ub8e8\ud2b8 DSE \ubc31\uc5d4\ub4dc\ub294 \ubc31\uc5c5 \ubc0f \ubcf5\uc6d0 \uc791\uc5c5\uc744 \uc704\ud55c \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub8e8\ud2b8 DSE\uc758 \ub0b4\uc6a9\uc740 \ub514\ub809\ud1a0\ub9ac \uc11c\ubc84 \uad6c\uc131\uc758 \uc77c\ubd80\ub85c \ubc31\uc5c5\ud574\uc57c \ud569\ub2c8\ub2e4. |
| | | INFO_ROOTDSE_USING_SUFFIXES_AS_BASE_DNS_18=\ub8e8\ud2b8 DSE \uad6c\uc131\uc774 \uc5c5\ub370\uc774\ud2b8\ub418\uc5c8\uc73c\ubbc0\ub85c \uc774\uc81c \ub8e8\ud2b8 DSE \uc544\ub798\uc5d0\uc11c \uac80\uc0c9\uc744 \uc218\ud589\ud560 \ub54c \uc815\uc758\ub41c \ub514\ub809\ud1a0\ub9ac \uc11c\ubc84 \uc811\ubbf8\uc0ac \uc9d1\ud569\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. |
| | | INFO_ROOTDSE_USING_NEW_SUBORDINATE_BASE_DNS_19=\ub8e8\ud2b8 DSE \uad6c\uc131\uc774 \uc5c5\ub370\uc774\ud2b8\ub418\uc5c8\uc73c\ubbc0\ub85c \uc774\uc81c \ub8e8\ud2b8 DSE \uc544\ub798\uc5d0\uc11c \uc218\ud589\ud560 \ub54c \uae30\ubcf8 DN \uc9d1\ud569 %s\uc774(\uac00) \uc0ac\uc6a9\ub429\ub2c8\ub2e4. |
| | | INFO_ROOTDSE_USING_NEW_USER_ATTRS_20=\ub8e8\ud2b8 DSE \uad6c\uc131\uc774 \uc5c5\ub370\uc774\ud2b8\ub418\uc5c8\uc73c\ubbc0\ub85c \uc774\uc81c \uc0c8 \uc0ac\uc6a9\uc790 \uc815\uc758 \uc18d\uc131 \uc9d1\ud569\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. |
| | | ERR_MONITOR_CONFIG_ENTRY_NULL_21=\uad6c\uc131 \ud56d\ubaa9\uc744 \uc81c\uacf5\ud558\uc9c0 \uc54a\uace0 \ubaa8\ub2c8\ud130 \ubc31\uc5d4\ub4dc\ub97c \uad6c\uc131\ud558\ub824\uace0 \ud588\uc2b5\ub2c8\ub2e4. \uc774\ub294 \ud5c8\uc6a9\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \ud504\ub85c\ud1a0\ucf5c\uc744 \ud1b5\ud574 \ubaa8\ub2c8\ud130 \uc815\ubcf4\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_MONITOR_CANNOT_DECODE_MONITOR_ROOT_DN_22=cn=monitor\uc758 \uc554\ud638\ub97c \ub514\ub809\ud1a0\ub9ac \uc11c\ubc84 \ubaa8\ub2c8\ud130 \uc815\ubcf4\uc5d0 \ub300\ud55c \uae30\ubcf8 DN\uc73c\ub85c \ud574\ub3c5\ud558\ub294 \ub3d9\uc548 \uc608\uae30\uce58 \uc54a\uc740 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: %s. \ud504\ub85c\ud1a0\ucf5c\uc744 \ud1b5\ud574 \ubaa8\ub2c8\ud130 \uc815\ubcf4\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_MONITOR_ADD_NOT_SUPPORTED_23=\ubaa8\ub2c8\ud130 \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \ucd94\uac00 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \"%s\" \ud56d\ubaa9\uc774 \ucd94\uac00\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_MONITOR_DELETE_NOT_SUPPORTED_24=\ubaa8\ub2c8\ud130 \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \uc0ad\uc81c \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \"%s\" \ud56d\ubaa9\uc774 \uc81c\uac70\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKEND_ADD_NOT_SUPPORTED_23="%s" \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \ucd94\uac00 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \"%s\" \ud56d\ubaa9\uc774 \ucd94\uac00\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKEND_DELETE_NOT_SUPPORTED_24="%s" \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \uc0ad\uc81c \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \"%s\" \ud56d\ubaa9\uc774 \uc81c\uac70\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_MONITOR_MODIFY_NOT_SUPPORTED_25=\ubaa8\ub2c8\ud130 \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \uc218\uc815 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \"%s\" \ud56d\ubaa9\uc774 \uc5c5\ub370\uc774\ud2b8\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uae30\ubcf8 \ubaa8\ub2c8\ud130 \ud56d\ubaa9 \uc790\uccb4\uc758 \ub0b4\uc6a9\uc744 \ubcc0\uacbd\ud558\ub824\ub294 \uacbd\uc6b0 \uad6c\uc131\uc5d0\uc11c \"%s\" \ud56d\ubaa9\uc744 \uc218\uc815\ud558\uba74 \uac00\ub2a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. |
| | | ERR_MONITOR_MODIFY_DN_NOT_SUPPORTED_26=\ubaa8\ub2c8\ud130 \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 DN \uc218\uc815 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \"%s\" \ud56d\ubaa9 \uc774\ub984\uc774 \ubcc0\uacbd\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKEND_MODIFY_DN_NOT_SUPPORTED_26="%s" \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 DN \uc218\uc815 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \"%s\" \ud56d\ubaa9 \uc774\ub984\uc774 \ubcc0\uacbd\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_MONITOR_UNABLE_TO_EXPORT_BASE_27=\uae30\ubcf8 \ubaa8\ub2c8\ud130 \ud56d\ubaa9\uc744 \ub0b4\ubcf4\ub0b4\ub294 \ub3d9\uc548 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: %s |
| | | ERR_MONITOR_UNABLE_TO_EXPORT_PROVIDER_ENTRY_28=\ubaa8\ub2c8\ud130 \uacf5\uae09\uc790 %s\uc5d0 \ub300\ud55c \ubaa8\ub2c8\ud130 \ud56d\ubaa9\uc744 \ub0b4\ubcf4\ub0b4\ub294 \ub3d9\uc548 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: %s |
| | | ERR_MONITOR_IMPORT_NOT_SUPPORTED_29=\ubaa8\ub2c8\ud130 \ubc31\uc5d4\ub4dc\ub294 LDIF \uac00\uc838\uc624\uae30 \uc791\uc5c5\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED_30=\ubaa8\ub2c8\ud130 \ubc31\uc5d4\ub4dc\ub294 \ubc31\uc5c5 \ubc0f \ubcf5\uc6d0 \uc791\uc5c5\uc744 \uc704\ud55c \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKEND_IMPORT_NOT_SUPPORTED_29="%s" \ubc31\uc5d4\ub4dc\ub294 LDIF \uac00\uc838\uc624\uae30 \uc791\uc5c5\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | INFO_MONITOR_USING_NEW_USER_ATTRS_31=\ubaa8\ub2c8\ud130 \uad6c\uc131\uc774 \uc5c5\ub370\uc774\ud2b8\ub418\uc5c8\uc73c\ubbc0\ub85c \uc774\uc81c \uc0c8 \uc0ac\uc6a9\uc790 \uc815\uc758 \uc18d\uc131 \uc9d1\ud569\uc774 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. |
| | | ERR_MONITOR_GET_ENTRY_NULL_32=\uc81c\uacf5\ub41c DN\uc774 Null\uc774\ubbc0\ub85c \ubaa8\ub2c8\ud130 \ubc31\uc5d4\ub4dc\uc5d0\uc11c \uc694\uccad\ud55c \ud56d\ubaa9\uc744 \uac80\uc0c9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKEND_GET_ENTRY_NULL_32=\uc81c\uacf5\ub41c DN\uc774 Null\uc774\ubbc0\ub85c "%s" \ubc31\uc5d4\ub4dc\uc5d0\uc11c \uc694\uccad\ud55c \ud56d\ubaa9\uc744 \uac80\uc0c9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_MONITOR_INVALID_BASE_34=DN\uc774 %2$s\uc758 \ubaa8\ub2c8\ud130 \uae30\ubcf8 \uc544\ub798\uc5d0 \uc788\uc9c0 \uc54a\uc73c\ubbc0\ub85c \ubaa8\ub2c8\ud130 \ubc31\uc5d4\ub4dc\uc5d0\uc11c \uc694\uccad\ud55c \ud56d\ubaa9 %1$s\uc744(\ub97c) \uac80\uc0c9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | INFO_MONITOR_UPTIME_37=%d\uc77c %d\uc2dc\uac04 %d\ubd84 %d\ucd08 |
| | | ERR_SCHEMA_CONFIG_ENTRY_NULL_38=\uad6c\uc131 \ud56d\ubaa9\uc744 \uc81c\uacf5\ud558\uc9c0 \uc54a\uace0 \uc2a4\ud0a4\ub9c8 \ubc31\uc5d4\ub4dc\ub97c \uad6c\uc131\ud558\ub824\uace0 \ud588\uc2b5\ub2c8\ub2e4. \uc774\ub294 \ud5c8\uc6a9\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \ud504\ub85c\ud1a0\ucf5c\uc744 \ud1b5\ud574 \uc2a4\ud0a4\ub9c8 \uc815\ubcf4\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_SCHEMA_CANNOT_DETERMINE_BASE_DN_40=\uad6c\uc131 \ud56d\ubaa9 %s\uc758 ds-cfg-schema-entry-dn \uc18d\uc131\uc5d0 \uc9c0\uc815\ub41c \ub300\ub85c \ub514\ub809\ud1a0\ub9ac \uc11c\ubc84 \uc2a4\ud0a4\ub9c8 \uc815\ubcf4\ub97c \uac8c\uc2dc\ud560 \ub54c \uc0ac\uc6a9\ud560 \uae30\ubcf8 DN\uc744 \ud655\uc778\ud558\ub294 \ub3d9\uc548 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: %s. \uae30\ubcf8 \uc2a4\ud0a4\ub9c8 \uae30\ubcf8 DN\uc778 cn=schema\uac00 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. |
| | | ERR_SCHEMA_ADD_NOT_SUPPORTED_41=\uc2a4\ud0a4\ub9c8 \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \ucd94\uac00 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \"%s\" \ud56d\ubaa9\uc774 \ucd94\uac00\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_SCHEMA_DELETE_NOT_SUPPORTED_42=\uc2a4\ud0a4\ub9c8 \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \uc0ad\uc81c \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \"%s\" \ud56d\ubaa9\uc774 \uc81c\uac70\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_SCHEMA_MODIFY_DN_NOT_SUPPORTED_44=\uc2a4\ud0a4\ub9c8 \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 DN \uc218\uc815 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \"%s\" \ud56d\ubaa9 \uc774\ub984\uc774 \ubcc0\uacbd\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_SCHEMA_UNABLE_TO_EXPORT_BASE_45=\uae30\ubcf8 \uc2a4\ud0a4\ub9c8 \ud56d\ubaa9\uc744 \ub0b4\ubcf4\ub0b4\ub294 \ub3d9\uc548 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: %s |
| | | ERR_SCHEMA_INVALID_BASE_48=DN\uc774 \uc2a4\ud0a4\ub9c8 \ud56d\ubaa9 DN \uc911 \ud558\ub098\uc640 \ub3d9\uc77c\ud558\ubbc0\ub85c \uc2a4\ud0a4\ub9c8 \ubc31\uc5d4\ub4dc\uc5d0\uc11c \uc694\uccad\ud55c \ud56d\ubaa9 %s\uc744(\ub97c) \uac80\uc0c9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_SCHEMA_UNABLE_TO_CREATE_LDIF_WRITER_49=\uc2a4\ud0a4\ub9c8 \ubc31\uc5d4\ub4dc\uc5d0 \ub300\ud55c LDIF \uc791\uc131\uae30\ub97c \uc5ec\ub294 \ub3d9\uc548 \uc608\uae30\uce58 \uc54a\uc740 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: %s |
| | |
| | | INFO_TASKBE_UPDATED_RETENTION_TIME_128=\uc644\ub8cc\ub41c \uc791\uc5c5 \uc720\uc9c0 \uc2dc\uac04\uc774 %d\ucd08\ub85c \uc5c5\ub370\uc774\ud2b8\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774 \ub0b4\uc6a9\uc740 \uc989\uc2dc \uc801\uc6a9\ub429\ub2c8\ub2e4. |
| | | INFO_TASKBE_UPDATED_BACKING_FILE_129=\uc791\uc5c5 \ub370\uc774\ud130 \ubc31\uc5c5 \ud30c\uc77c\uc758 \uacbd\ub85c\uac00 %s(\uc73c)\ub85c \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ud604\uc7ac \uc791\uc5c5 \uad6c\uc131\uc758 \uc2a4\ub0c5\uc0f7\uc774 \ud574\ub2f9 \ud30c\uc77c\uc5d0 \uae30\ub85d\ub418\uc5b4 \ud5a5\ud6c4 \uc5c5\ub370\uc774\ud2b8\uc5d0 \uacc4\uc18d \uc0ac\uc6a9\ub429\ub2c8\ub2e4. |
| | | ERR_TASKBE_ADD_DISALLOWED_DN_130=\uc791\uc5c5 \ubc31\uc5d4\ub4dc\uc758 \uc0c8 \ud56d\ubaa9\uc740 \uc608\uc57d \uc791\uc5c5\uc758 \uacbd\uc6b0 %s \ubc14\ub85c \uc544\ub798, \ubc18\ubcf5 \uc791\uc5c5\uc758 \uacbd\uc6b0 %s \ubc14\ub85c \uc544\ub798\uc5d0\ub9cc \ucd94\uac00\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. |
| | | ERR_TASKBE_MODIFY_DN_NOT_SUPPORTED_131=\uc791\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 DN \uc218\uc815 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | INFO_TASKBE_BACKING_FILE_HEADER_132=\uc774 \ud30c\uc77c\uc5d0\ub294 \ub514\ub809\ud1a0\ub9ac \uc11c\ubc84 \uc791\uc5c5 \uc2a4\ucf00\uc904\ub7ec \ubc31\uc5d4\ub4dc\uac00 \uc0ac\uc6a9\ud558\ub294 \ub370\uc774\ud130\uac00 \ub4e4\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \ud574\ub2f9 \ubcc0\uacbd \ub0b4\uc6a9\uc774 \uc190\uc2e4\ub420 \uc704\ud5d8\uc774 \uc788\uc73c\ubbc0\ub85c \uc774 \ud30c\uc77c\uc744 \uc9c1\uc811 \ud3b8\uc9d1\ud558\uc9c0 \ub9c8\uc2ed\uc2dc\uc624. \uc608\uc57d \ubc0f \ubc18\ubcf5 \uc791\uc5c5 \uc815\uc758\ub294 \ub514\ub809\ud1a0\ub9ac \uc11c\ubc84\uc640 \ud568\uaed8 \uc81c\uacf5\ub418\ub294 \uad00\ub9ac \uc720\ud2f8\ub9ac\ud2f0\ub9cc\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud3b8\uc9d1\ud574\uc57c \ud569\ub2c8\ub2e4. |
| | | ERR_TASKSCHED_DUPLICATE_RECURRING_ID_133=\ub3d9\uc77c\ud55c ID\ub97c \uc0ac\uc6a9\ud558\ub294 \ub2e4\ub978 \ubc18\ubcf5 \uc791\uc5c5\uc774 \uc788\uc73c\ubbc0\ub85c \ubc18\ubcf5 \uc791\uc5c5 %s\uc744(\ub97c) \uc791\uc5c5 \uc2a4\ucf00\uc904\ub7ec\uc5d0 \ucd94\uac00\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_TASKSCHED_DUPLICATE_TASK_ID_134=\ub3d9\uc77c\ud55c ID\ub97c \uc0ac\uc6a9\ud558\ub294 \ub2e4\ub978 \uc791\uc5c5\uc774 \uc788\uc73c\ubbc0\ub85c \uc791\uc5c5 %s\uc744(\ub97c) \uc608\uc57d\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | |
| | | WARN_TASKSCHED_CANNOT_RENAME_CURRENT_BACKING_FILE_152=\ud604\uc7ac \uc791\uc5c5 \ubc31\uc5c5 \ud30c\uc77c\uc758 \uc774\ub984\uc744 %s\uc5d0\uc11c %s(\uc73c)\ub85c \ubcc0\uacbd\ud558\ub294 \ub3d9\uc548 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: %s. \uc774\uc804 \uc791\uc5c5 \uad6c\uc131(\ucd5c\uc2e0 \uc5c5\ub370\uc774\ud2b8\ub97c \ubc18\uc601\ud558\uc9c0 \uc54a\uc74c)\uc774 \uc190\uc2e4\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. |
| | | ERR_TASKSCHED_CANNOT_RENAME_NEW_BACKING_FILE_153=An error occurred while attempting to rename the new tasks backing file from %s to %s: %s. If the Directory Server is restarted, then the task scheduler may not work as expected |
| | | ERR_TASKSCHED_CANNOT_WRITE_BACKING_FILE_154=\uc0c8 \uc791\uc5c5 \ub370\uc774\ud130 \ubc31\uc5c5 \ud30c\uc77c %s\uc744(\ub97c) \uc4f0\ub294 \ub3d9\uc548 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: %s. \ucd5c\uc2e0 \uc5c5\ub370\uc774\ud2b8\ub97c \ubc18\uc601\ud558\ub294 \uad6c\uc131 \uc815\ubcf4\uac00 \uc190\uc2e4\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. |
| | | ERR_TASKBE_IMPORT_NOT_SUPPORTED_155=\uc791\uc5c5 \ubc31\uc5d4\ub4dc\ub294 LDIF \uac00\uc838\uc624\uae30 \uc791\uc5c5\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | INFO_TASKBE_INTERRUPTED_BY_SHUTDOWN_156=\uc791\uc5c5 \ubc31\uc5d4\ub4dc\uac00 \uc885\ub8cc\ub429\ub2c8\ub2e4. |
| | | INFO_ROOTDSE_UPDATED_SHOW_ALL_ATTRS_159=\ub8e8\ud2b8 DSE \uad6c\uc131\uc774 \uc5c5\ub370\uc774\ud2b8\ub418\uc5c8\uc73c\ubbc0\ub85c \uc774\uc81c \uad6c\uc131 \uc18d\uc131 %s\uc5d0\uc11c %s \uac12\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. |
| | | ERR_TASKSCHED_REMOVE_PENDING_NO_SUCH_TASK_161=\ubcf4\ub958 \uc911\uc778 \uc791\uc5c5 %s\uc774(\uac00) \uc5c6\uc73c\ubbc0\ub85c \uc774 \uc791\uc5c5\uc744 \uc81c\uac70\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | |
| | | ERR_TASKBE_SEARCH_INVALID_BASE_168=\uc81c\uacf5\ub41c \uae30\ubcf8 DN %s\uc774(\uac00) \uc791\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0 \uc788\ub294 \ud56d\ubaa9\uc5d0 \ub300\ud574 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c \uc791\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0\uc11c \uac80\uc0c9 \uc791\uc5c5\uc744 \ucc98\ub9ac\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_TASKBE_SEARCH_NO_SUCH_TASK_169=\uc81c\uacf5\ub41c \uac80\uc0c9 \uae30\uc900 \ud56d\ubaa9 %s\uacfc(\uc640) \uc5f0\uacb0\ub41c \uc608\uc57d \uc791\uc5c5\uc774 \uc5c6\uc73c\ubbc0\ub85c \uc791\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0\uc11c \uac80\uc0c9 \uc791\uc5c5\uc744 \ucc98\ub9ac\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_TASKBE_SEARCH_NO_SUCH_RECURRING_TASK_170=\uc81c\uacf5\ub41c \uac80\uc0c9 \uae30\uc900 \ud56d\ubaa9 %s\uacfc(\uc640) \uc5f0\uacb0\ub41c \ubc18\ubcf5 \uc791\uc5c5\uc774 \uc5c6\uc73c\ubbc0\ub85c \uc791\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0\uc11c \uac80\uc0c9 \uc791\uc5c5\uc744 \ucc98\ub9ac\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKUP_CONFIG_ENTRY_NULL_171=\uc81c\uacf5\ub41c \uad6c\uc131 \ud56d\ubaa9\uc774 Null\uc774\ubbc0\ub85c \ubc31\uc5c5 \ubc31\uc5d4\ub4dc\ub97c \ucd08\uae30\ud654\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKUP_CANNOT_DECODE_BACKUP_ROOT_DN_172=\ubc31\uc5d4\ub4dc\uc5d0 \ub300\ud55c \uae30\ubcf8 DN\uc744 \ud574\ub3c5\ud558\ub294 \ub3d9\uc548 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uc5ec \ubc31\uc5c5 \ubc31\uc5d4\ub4dc\ub97c \ucd08\uae30\ud654\ud560 \uc218 \uc5c6\uc74c: %s |
| | | ERR_BACKUP_GET_ENTRY_NULL_175=\uc694\uccad\ud55c \ud56d\ubaa9\uc774 Null\uc774\ubbc0\ub85c \ubc31\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0\uc11c \ud56d\ubaa9\uc744 \uac80\uc0c9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKUP_INVALID_BASE_176=\uc694\uccad\ud55c \ud56d\ubaa9 %s\uc774(\uac00) \ubc31\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKUP_DN_DOES_NOT_SPECIFY_DIRECTORY_177=\uc694\uccad\ud55c DN\uc774 \uae30\ubcf8 DN\ubcf4\ub2e4 \ud55c \uc218\uc900 \uc544\ub798\uc9c0\ub9cc \ubc31\uc5c5 \ub514\ub809\ud1a0\ub9ac\ub97c \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c \ubc31\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0\uc11c \ud56d\ubaa9 %s\uc744(\ub97c) \uac80\uc0c9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKUP_INVALID_BACKUP_DIRECTORY_178=\uc694\uccad\ud55c \ubc31\uc5c5 \ub514\ub809\ud1a0\ub9ac\uac00 \uc798\ubabb\ub418\uc5c8\uc73c\ubbc0\ub85c \ubc31\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0\uc11c \ud56d\ubaa9 %s\uc744(\ub97c) \uac80\uc0c9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: %s |
| | |
| | | ERR_BACKUP_NO_BACKUP_PARENT_DN_181=\ubd80\ubaa8 \ud56d\ubaa9\uc774 \uc5c6\uc73c\ubbc0\ub85c \ubc31\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0\uc11c \ud56d\ubaa9 %s\uc744(\ub97c) \uac80\uc0c9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKUP_NO_BACKUP_DIR_IN_DN_182=DN\uc5d0 \uc694\uccad\ud55c \ubc31\uc5c5\uc774 \uc800\uc7a5\ub41c \ubc31\uc5c5 \ub514\ub809\ud1a0\ub9ac\uac00 \uc5c6\uc73c\ubbc0\ub85c \ubc31\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0\uc11c \ud56d\ubaa9 %s\uc744(\ub97c) \uac80\uc0c9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKUP_NO_SUCH_BACKUP_183=\ubc31\uc5c5 %s\uc774(\uac00) \ubc31\uc5c5 \ub514\ub809\ud1a0\ub9ac %s\uc5d0 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKUP_ADD_NOT_SUPPORTED_184=\ubc31\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \ucd94\uac00 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKUP_DELETE_NOT_SUPPORTED_185=\ubc31\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \uc0ad\uc81c \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKUP_MODIFY_NOT_SUPPORTED_186=\ubc31\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \uc218\uc815 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKUP_MODIFY_DN_NOT_SUPPORTED_187=\ubc31\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 DN \uc218\uc815 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKEND_MODIFY_NOT_SUPPORTED_186=\ubc31\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \uc218\uc815 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKUP_NO_SUCH_ENTRY_188=\uc694\uccad\ud55c \ud56d\ubaa9 %s\uc774(\uac00) \ubc31\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKUP_EXPORT_NOT_SUPPORTED_189=\ubc31\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 LDIF \ub0b4\ubcf4\ub0b4\uae30 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKUP_IMPORT_NOT_SUPPORTED_190=\ubc31\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 LDIF \uac00\uc838\uc624\uae30 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED_191=\ubc31\uc5c5 \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \ubc31\uc5c5 \ubc0f \ubcf5\uc6d0 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_MEMORYBACKEND_REQUIRE_EXACTLY_ONE_BASE_192=\uba54\ubaa8\ub9ac \uae30\ubc18 \ubc31\uc5d4\ub4dc\uc5d0 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574 \uae30\ubcf8 DN\uc744 \ud558\ub098\ub9cc \uc81c\uacf5\ud574\uc57c \ud569\ub2c8\ub2e4. |
| | | ERR_MEMORYBACKEND_ENTRY_ALREADY_EXISTS_193=\ud56d\ubaa9 %s\uc774(\uac00) \uba54\ubaa8\ub9ac \uae30\ubc18 \ubc31\uc5d4\ub4dc\uc5d0 \uc774\ubbf8 \uc788\uc2b5\ub2c8\ub2e4. |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_BELONG_194=\ud56d\ubaa9 %s\uc740(\ub294) \uba54\ubaa8\ub9ac \uae30\ubc18 \ubc31\uc5d4\ub4dc\uc5d0 \uc18d\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_MEMORYBACKEND_PARENT_DOESNT_EXIST_195=\ubd80\ubaa8 \ud56d\ubaa9 %2$s\uc774(\uac00) \uba54\ubaa8\ub9ac \uae30\ubc18 \ubc31\uc5d4\ub4dc\uc5d0 \uc5c6\uc73c\ubbc0\ub85c \ud56d\ubaa9 %1$s\uc744(\ub97c) \ucd94\uac00\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST_196=\ud56d\ubaa9 %s\uc774(\uac00) \uba54\ubaa8\ub9ac \uae30\ubc18 \ubc31\uc5d4\ub4dc\uc5d0 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKEND_ENTRY_DOESNT_EXIST_196=\ud56d\ubaa9 %s\uc774(\uac00) "%s" \ubc31\uc5d4\ub4dc\uc5d0 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_MEMORYBACKEND_CANNOT_DELETE_ENTRY_WITH_CHILDREN_197=\ud558\ub098 \uc774\uc0c1\uc758 \ud558\uc704 \ud56d\ubaa9\uc774 \uc788\uc73c\ubbc0\ub85c \ud56d\ubaa9 %s\uc744(\ub97c) \uc0ad\uc81c\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_MEMORYBACKEND_CANNOT_CREATE_LDIF_WRITER_199=LDIF \uc791\uc131\uae30\ub97c \ub9cc\ub4e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: %s |
| | | ERR_MEMORYBACKEND_CANNOT_WRITE_ENTRY_TO_LDIF_200=\ud56d\ubaa9 %s\uc744(\ub97c) LDIF\uc5d0 \uc4f8 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: %s |
| | |
| | | NOTE_BACKEND_ENVIRONMENT_UNUSABLE_297=\ubc31\uc5d4\ub4dc ID %s\uc5d0 \ud574\ub2f9\ud558\ub294 JE \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud658\uacbd\uc774 \uc190\uc0c1\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ub514\ub809\ud1a0\ub9ac \uc11c\ubc84\ub97c \ub2e4\uc2dc \uc2dc\uc791\ud558\uc5ec \ud658\uacbd\uc744 \ub2e4\uc2dc \uc5ec\uc2ed\uc2dc\uc624. |
| | | ERR_TASKSCHED_NOT_ALLOWED_TASK_298=\ub514\ub809\ud1a0\ub9ac \uc11c\ubc84\uac00 \uc791\uc5c5 %s\uc744(\ub97c) \ud638\ucd9c\ud558\ub3c4\ub85d \uad6c\uc131\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | INFO_TASK_COMPLETION_BODY_299=\uc791\uc5c5 ID: %s\r\n\uc791\uc5c5 \uc0c1\ud0dc: %s\r\n\uc608\uc57d\ub41c \uc2dc\uc791 \uc2dc\uac04: %s\r\n\uc2e4\uc81c \uc2dc\uc791 \uc2dc\uac04: %s\r\n\uc644\ub8cc \uc2dc\uac04: %s\r\n\r\n\ub85c\uadf8 \uba54\uc2dc\uc9c0:\r\n |
| | | ERR_TRUSTSTORE_GET_ENTRY_NULL_300=\uc694\uccad\ud55c \ud56d\ubaa9\uc774 Null\uc774\ubbc0\ub85c \ud2b8\ub7ec\uc2a4\ud2b8 \uc800\uc7a5\uc18c \ubc31\uc5d4\ub4dc\uc5d0\uc11c \ud56d\ubaa9\uc744 \uac80\uc0c9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_TRUSTSTORE_INVALID_BASE_301=\uc694\uccad\ud55c \ud56d\ubaa9 %s\uc774(\uac00) \ud2b8\ub7ec\uc2a4\ud2b8 \uc800\uc7a5\uc18c \ubc31\uc5d4\ub4dc\uc5d0 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_TRUSTSTORE_DN_DOES_NOT_SPECIFY_CERTIFICATE_302=\uc694\uccad\ud55c DN\uc774 \uae30\ubcf8 DN\ubcf4\ub2e4 \ud55c \uc218\uc900 \uc544\ub798\uc9c0\ub9cc \uc778\uc99d\uc11c \uc774\ub984\uc744 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c \ud2b8\ub7ec\uc2a4\ud2b8 \uc800\uc7a5\uc18c \ubc31\uc5d4\ub4dc\uc5d0\uc11c \ud56d\ubaa9 %s\uc744(\ub97c) \ucc98\ub9ac\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_TRUSTSTORE_CANNOT_RETRIEVE_CERT_303=\ud2b8\ub7ec\uc2a4\ud2b8 \uc800\uc7a5\uc18c \ud30c\uc77c %2$s\uc5d0\uc11c \uc778\uc99d\uc11c %1$s\uc744(\ub97c) \uac80\uc0c9\ud558\ub294 \ub3d9\uc548 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4: %3$s |
| | | ERR_TRUSTSTORE_MODIFY_NOT_SUPPORTED_304=\ud2b8\ub7ec\uc2a4\ud2b8 \uc800\uc7a5\uc18c \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \uc218\uc815 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_TRUSTSTORE_MODIFY_DN_NOT_SUPPORTED_305=\ud2b8\ub7ec\uc2a4\ud2b8 \uc800\uc7a5\uc18c \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 DN \uc218\uc815 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_TRUSTSTORE_REQUIRES_ONE_BASE_DN_306=\uae30\ubcf8 DN\uc774 \ud558\ub098\ub9cc \ub4e4\uc5b4 \uc788\uc9c0 \uc54a\uc73c\ubbc0\ub85c \uad6c\uc131 \ud56d\ubaa9 %s\uc5d0\uc11c \ud2b8\ub7ec\uc2a4\ud2b8 \uc800\uc7a5\uc18c \ubc31\uc5d4\ub4dc\ub97c \ucd08\uae30\ud654\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_TRUSTSTORE_IMPORT_AND_EXPORT_NOT_SUPPORTED_307=\ud2b8\ub7ec\uc2a4\ud2b8 \uc800\uc7a5\uc18c \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 LDIF \uac00\uc838\uc624\uae30 \ubc0f \ub0b4\ubcf4\ub0b4\uae30 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_TRUSTSTORE_BACKUP_AND_RESTORE_NOT_SUPPORTED_308=\ud2b8\ub7ec\uc2a4\ud2b8 \uc800\uc7a5\uc18c \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \ubc31\uc5c5 \ubc0f \ubcf5\uc6d0 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKEND_IMPORT_AND_EXPORT_NOT_SUPPORTED_307="%s" \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 LDIF \uac00\uc838\uc624\uae30 \ubc0f \ub0b4\ubcf4\ub0b4\uae30 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED_308="%s" \ubc31\uc5d4\ub4dc\uc5d0\uc11c\ub294 \ubc31\uc5c5 \ubc0f \ubcf5\uc6d0 \uc791\uc5c5\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. |
| | | ERR_TRUSTSTORE_NO_SUCH_FILE_309=\uad6c\uc131 \ud56d\ubaa9 %2$s\uc758 ds-cfg-trust-store-file \uc18d\uc131\uc5d0 \uc9c0\uc815\ub41c \ud2b8\ub7ec\uc2a4\ud2b8 \uc800\uc7a5\uc18c \ud30c\uc77c %1$s\uc774(\uac00) \uc5c6\uc2b5\ub2c8\ub2e4. |
| | | ERR_TRUSTSTORE_INVALID_TYPE_310=\uad6c\uc131 \ud56d\ubaa9 %2$s\uc758 ds-cfg-trust-store-type \uc18d\uc131\uc5d0 \uc9c0\uc815\ub41c \ud2b8\ub7ec\uc2a4\ud2b8 \uc800\uc7a5\uc18c \uc720\ud615 %1$s\uc774(\uac00) \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4: %3$s |
| | | ERR_TRUSTSTORE_PIN_FILE_CANNOT_CREATE_311=\uad6c\uc131 \ud56d\ubaa9 %2$s\uc758 \uc18d\uc131 ds-cfg-trust-store-pin-file\uc5d0 \uc9c0\uc815\ub41c PIN \ud30c\uc77c %1$s\uc744(\ub97c) \ub9cc\ub4dc\ub294 \ub3d9\uc548 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4. |
| | |
| | | NOTE_TASK_STARTED_413=%s zadanie %s rozpocz\u0119\u0142o wykonywanie |
| | | ERR_TASKS_BACKUP_CANNOT_BACKUP_TASKS_FILE_384=Wyst\u0105pi\u0142 b\u0142\u0105d podczas pr\u00f3by backupu pliku zada\u0144 %s: %s |
| | | INFO_ERGONOMIC_SIZING_OF_JE_LOCK_TABLES_411=Lokalne zaplecze bazy danych %s nie okre\u015bla ilo\u015bci tabel blokowanych: u\u017cywam domy\u015blnych %d |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST_196=Wpis %s nie istnieje w zapleczu opartym o pami\u0119\u0107 |
| | | ERR_BACKEND_ENTRY_DOESNT_EXIST_196=Wpis %s nie istnieje w zapleczu "%s" |
| | |
| | | WARN_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE_4=\u57fa DN "%s" \u5df2\u914d\u7f6e\u4e3a\u6b21\u7ea7\u57fa DN \u4e4b\u4e00\uff0c\u4ee5\u7528\u4e8e\u6839 DSE \u4ee5\u4e0b\u7684\u641c\u7d22\u3002\u4f46\u662f\uff0c\u8fd9\u4e2a\u57fa DN \u672a\u88ab\u4efb\u4f55\u4f7f\u7528\u76ee\u5f55\u670d\u52a1\u5668\u6ce8\u518c\u7684\u540e\u7f00\u5904\u7406\uff0c\u56e0\u6b64\u4e0d\u4f1a\u88ab\u4f7f\u7528 |
| | | WARN_ROOTDSE_SUBORDINATE_BASE_EXCEPTION_5=\u5c1d\u8bd5\u786e\u5b9a\u5c06\u7528\u4e8e\u6839 DSE \u4ee5\u4e0b\u641c\u7d22\u7684\u6b21\u7ea7\u57fa DN \u7684\u96c6\u65f6\u53d1\u751f\u975e\u9884\u671f\u95ee\u9898: %s |
| | | WARN_ROOTDSE_GET_ENTRY_NONROOT_6=\u5df2\u8bf7\u6c42\u6839 DSE \u540e\u7aef\u68c0\u7d22\u5177\u6709 DN "%s" \u7684\u6761\u76ee\u3002\u53ea\u5e94\u8bf7\u6c42\u8be5\u540e\u7aef\u68c0\u7d22\u6839 DSE \u672c\u8eab\u3002\u4e0d\u8fc7\uff0c\u5b83\u5c06\u68c0\u67e5\u5b9a\u4e49\u7684\u4ece\u5c5e\u540e\u7aef\uff0c\u5e76\u67e5\u770b\u80fd\u5426\u627e\u5230\u8bf7\u6c42\u7684\u6761\u76ee |
| | | ERR_ROOTDSE_ADD_NOT_SUPPORTED_7=\u65e0\u6cd5\u6dfb\u52a0\u6761\u76ee "%s"\uff0c\u56e0\u4e3a\u6839 DSE \u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u6dfb\u52a0\u64cd\u4f5c |
| | | ERR_ROOTDSE_DELETE_NOT_SUPPORTED_8=\u65e0\u6cd5\u5220\u9664\u6761\u76ee "%s"\uff0c\u56e0\u4e3a\u6839 DSE \u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u5220\u9664\u64cd\u4f5c |
| | | ERR_ROOTDSE_MODIFY_NOT_SUPPORTED_9=\u65e0\u6cd5\u66f4\u65b0\u6761\u76ee "%s"\uff0c\u56e0\u4e3a\u6839 DSE \u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u4fee\u6539\u64cd\u4f5c\u3002\u5982\u679c\u8981\u4fee\u6539\u6839 DSE \u672c\u8eab\u7684\u5185\u5bb9\uff0c\u4e5f\u8bb8\u53ef\u901a\u8fc7\u4fee\u6539\u914d\u7f6e\u4e2d\u7684 "%s" \u6761\u76ee\u6765\u5b8c\u6210 |
| | | ERR_ROOTDSE_MODIFY_DN_NOT_SUPPORTED_10=\u65e0\u6cd5\u91cd\u547d\u540d\u6761\u76ee "%s"\uff0c\u56e0\u4e3a\u6839 DSE \u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u4fee\u6539 DN \u64cd\u4f5c |
| | | ERR_ROOTDSE_INVALID_SEARCH_BASE_11=\u65e0\u6cd5\u5728\u6839 DSE \u540e\u7aef\u4e2d\u4f7f\u7528\u57fa DN "%3$s" \u6267\u884c\u641c\u7d22\uff08\u8fde\u63a5 ID \u4e3a %1$d\uff0c\u64cd\u4f5c ID \u4e3a %2$d\uff09\u3002\u5728\u8be5\u540e\u7aef\u4e2d\uff0c\u7528\u4e8e\u641c\u7d22\u7684\u57fa DN \u5fc5\u987b\u4e3a\u6839 DSE \u672c\u8eab\u7684 DN |
| | | ERR_ROOTDSE_UNEXPECTED_SEARCH_FAILURE_12=\u5c1d\u8bd5\u5728\u6839 DSE \u540e\u7aef\u4e2d\u5904\u7406\u641c\u7d22\u64cd\u4f5c\uff08\u8fde\u63a5 ID \u4e3a %d\uff0c\u64cd\u4f5c ID \u4e3a %d\uff09\u65f6\u53d1\u751f\u975e\u9884\u671f\u5931\u8d25: %s |
| | | ERR_ROOTDSE_INVALID_SEARCH_SCOPE_13=\u65e0\u6cd5\u5904\u7406\u5e26\u6709\u8fde\u63a5 ID %d \u548c\u64cd\u4f5c ID %d \u7684\u641c\u7d22\uff0c\u56e0\u4e3a\u5b83\u5177\u6709\u65e0\u6548\u7684\u4f5c\u7528\u57df %s |
| | | ERR_ROOTDSE_UNABLE_TO_CREATE_LDIF_WRITER_14=\u5c1d\u8bd5\u6253\u5f00\u6839 DSE \u540e\u7aef\u7684 LDIF \u5199\u5165\u7a0b\u5e8f\u65f6\u53d1\u751f\u975e\u9884\u671f\u9519\u8bef: %s |
| | | ERR_ROOTDSE_UNABLE_TO_EXPORT_DSE_15=\u5c1d\u8bd5\u5c06\u6839 DSE \u6761\u76ee\u5bfc\u51fa\u5230\u6307\u5b9a\u7684 LDIF \u76ee\u6807\u65f6\u53d1\u751f\u975e\u9884\u671f\u9519\u8bef: %s |
| | | ERR_ROOTDSE_IMPORT_NOT_SUPPORTED_16=\u6839 DSE \u540e\u7aef\u4e0d\u652f\u6301 LDIF \u5bfc\u5165\u64cd\u4f5c |
| | | ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED_17=\u6839 DSE \u540e\u7aef\u672a\u63d0\u4f9b\u7528\u4e8e\u5907\u4efd\u548c\u6062\u590d\u64cd\u4f5c\u7684\u5de5\u5177\u3002\u5e94\u8be5\u5c06\u6839 DSE \u7684\u5185\u5bb9\u4f5c\u4e3a\u76ee\u5f55\u670d\u52a1\u5668\u914d\u7f6e\u7684\u4e00\u90e8\u5206\u8fdb\u884c\u5907\u4efd |
| | | INFO_ROOTDSE_USING_SUFFIXES_AS_BASE_DNS_18=\u5df2\u66f4\u65b0\u6839 DSE \u914d\u7f6e\uff0c\u56e0\u6b64\uff0c\u5b83\u73b0\u5728\u4f1a\u4f7f\u7528\u5df2\u5b9a\u4e49\u7684\u76ee\u5f55\u670d\u52a1\u5668\u540e\u7f00\u96c6\u5728\u6839 DSE \u4e0b\u6267\u884c\u641c\u7d22 |
| | | INFO_ROOTDSE_USING_NEW_SUBORDINATE_BASE_DNS_19=\u5df2\u66f4\u65b0\u6839 DSE \u914d\u7f6e\uff0c\u56e0\u6b64\uff0c\u5b83\u73b0\u5728\u4f1a\u4f7f\u7528\u57fa DN \u96c6 %s \u5728\u6839 DSE \u4e0b\u6267\u884c\u641c\u7d22 |
| | | INFO_ROOTDSE_USING_NEW_USER_ATTRS_20=\u5df2\u66f4\u65b0\u6839 DSE \u914d\u7f6e\uff0c\u56e0\u6b64\uff0c\u5b83\u73b0\u5728\u4f1a\u4f7f\u7528\u65b0\u7684\u7528\u6237\u5b9a\u4e49\u5c5e\u6027\u96c6 |
| | | ERR_MONITOR_CONFIG_ENTRY_NULL_21=\u7cfb\u7edf\u5c1d\u8bd5\u914d\u7f6e\u76d1\u89c6\u5668\u540e\u7aef\uff0c\u4f46\u672a\u63d0\u4f9b\u914d\u7f6e\u6761\u76ee\u3002\u4e0d\u5141\u8bb8\u6267\u884c\u8be5\u64cd\u4f5c\uff0c\u6ca1\u6709\u53ef\u7528\u4e8e\u534f\u8bae\u7684\u76d1\u89c6\u5668\u4fe1\u606f |
| | | ERR_MONITOR_CANNOT_DECODE_MONITOR_ROOT_DN_22=\u5c1d\u8bd5\u89e3\u7801 cn=monitor \u4f5c\u4e3a\u76ee\u5f55\u670d\u52a1\u5668\u76d1\u89c6\u5668\u4fe1\u606f\u7684\u57fa DN \u65f6\u53d1\u751f\u975e\u9884\u671f\u9519\u8bef: %s\u3002\u6ca1\u6709\u53ef\u7528\u4e8e\u534f\u8bae\u7684\u76d1\u89c6\u5668\u4fe1\u606f |
| | | ERR_MONITOR_ADD_NOT_SUPPORTED_23=\u65e0\u6cd5\u6dfb\u52a0\u6761\u76ee "%s"\uff0c\u56e0\u4e3a\u76d1\u89c6\u5668\u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u6dfb\u52a0\u64cd\u4f5c |
| | | ERR_MONITOR_DELETE_NOT_SUPPORTED_24=\u65e0\u6cd5\u5220\u9664\u6761\u76ee "%s"\uff0c\u56e0\u4e3a\u76d1\u89c6\u5668\u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u5220\u9664\u64cd\u4f5c |
| | | ERR_BACKEND_ADD_NOT_SUPPORTED_23=\u65e0\u6cd5\u6dfb\u52a0\u6761\u76ee "%s"\uff0c\u56e0\u4e3a "%s" \u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u6dfb\u52a0\u64cd\u4f5c |
| | | ERR_BACKEND_DELETE_NOT_SUPPORTED_24=\u65e0\u6cd5\u5220\u9664\u6761\u76ee "%s"\uff0c\u56e0\u4e3a "%s" \u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u5220\u9664\u64cd\u4f5c |
| | | ERR_MONITOR_MODIFY_NOT_SUPPORTED_25=\u65e0\u6cd5\u66f4\u65b0\u6761\u76ee "%s"\uff0c\u56e0\u4e3a\u76d1\u89c6\u5668\u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u4fee\u6539\u64cd\u4f5c\u3002\u5982\u679c\u8981\u4fee\u6539\u57fa\u76d1\u89c6\u5668\u6761\u76ee\u672c\u8eab\u7684\u5185\u5bb9\uff0c\u4e5f\u8bb8\u53ef\u901a\u8fc7\u4fee\u6539\u914d\u7f6e\u4e2d\u7684 "%s" \u6761\u76ee\u6765\u5b8c\u6210 |
| | | ERR_MONITOR_MODIFY_DN_NOT_SUPPORTED_26=\u65e0\u6cd5\u91cd\u547d\u540d\u6761\u76ee "%s"\uff0c\u56e0\u4e3a\u76d1\u89c6\u5668\u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u4fee\u6539 DN \u64cd\u4f5c |
| | | ERR_BACKEND_MODIFY_DN_NOT_SUPPORTED_26=\u65e0\u6cd5\u91cd\u547d\u540d\u6761\u76ee "%s"\uff0c\u56e0\u4e3a "%s" \u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u4fee\u6539 DN \u64cd\u4f5c |
| | | ERR_MONITOR_UNABLE_TO_EXPORT_BASE_27=\u5c1d\u8bd5\u5bfc\u51fa\u57fa\u76d1\u89c6\u5668\u6761\u76ee\u65f6\u53d1\u751f\u9519\u8bef: %s |
| | | ERR_MONITOR_UNABLE_TO_EXPORT_PROVIDER_ENTRY_28=\u5c1d\u8bd5\u5bfc\u51fa\u76d1\u89c6\u5668\u63d0\u4f9b\u8005 %s \u7684\u76d1\u89c6\u5668\u6761\u76ee\u65f6\u53d1\u751f\u9519\u8bef: %s |
| | | ERR_MONITOR_IMPORT_NOT_SUPPORTED_29=\u76d1\u89c6\u5668\u540e\u7aef\u4e0d\u652f\u6301 lDIF \u5bfc\u5165\u64cd\u4f5c |
| | | ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED_30=\u76d1\u89c6\u5668\u540e\u7aef\u672a\u63d0\u4f9b\u7528\u4e8e\u5907\u4efd\u548c\u6062\u590d\u64cd\u4f5c\u7684\u5de5\u5177 |
| | | ERR_BACKEND_IMPORT_NOT_SUPPORTED_29="%s" \u540e\u7aef\u4e0d\u652f\u6301 lDIF \u5bfc\u5165\u64cd\u4f5c |
| | | INFO_MONITOR_USING_NEW_USER_ATTRS_31=\u5df2\u66f4\u65b0\u76d1\u89c6\u5668\u914d\u7f6e\uff0c\u56e0\u6b64\uff0c\u5b83\u73b0\u5728\u4f1a\u4f7f\u7528\u65b0\u7684\u7528\u6237\u5b9a\u4e49\u5c5e\u6027\u96c6 |
| | | ERR_MONITOR_GET_ENTRY_NULL_32=\u65e0\u6cd5\u4ece\u76d1\u89c6\u5668\u540e\u7aef\u4e2d\u68c0\u7d22\u8bf7\u6c42\u7684\u6761\u76ee\uff0c\u56e0\u4e3a\u63d0\u4f9b\u7684 DN \u4e3a Null |
| | | ERR_BACKEND_GET_ENTRY_NULL_32=\u65e0\u6cd5\u4ece "%s" \u540e\u7aef\u4e2d\u68c0\u7d22\u8bf7\u6c42\u7684\u6761\u76ee\uff0c\u56e0\u4e3a\u63d0\u4f9b\u7684 DN \u4e3a Null |
| | | ERR_MONITOR_INVALID_BASE_34=\u65e0\u6cd5\u4ece\u76d1\u89c6\u5668\u540e\u7aef\u4e2d\u68c0\u7d22\u8bf7\u6c42\u7684\u6761\u76ee %s\uff0c\u56e0\u4e3a\u8be5 DN \u4e0d\u5728\u76d1\u89c6\u5668\u57fa %s \u4e4b\u4e0b |
| | | INFO_MONITOR_UPTIME_37=%d \u5929 %d \u5c0f\u65f6 %d \u5206\u949f %d \u79d2 |
| | | ERR_SCHEMA_CONFIG_ENTRY_NULL_38=\u7cfb\u7edf\u5c1d\u8bd5\u914d\u7f6e\u6a21\u5f0f\u540e\u7aef\u4f46\u672a\u63d0\u4f9b\u914d\u7f6e\u6761\u76ee\u3002\u4e0d\u5141\u8bb8\u6267\u884c\u8be5\u64cd\u4f5c\uff0c\u6ca1\u6709\u53ef\u7528\u4e8e\u534f\u8bae\u7684\u6a21\u5f0f\u4fe1\u606f |
| | | ERR_SCHEMA_CANNOT_DETERMINE_BASE_DN_40=\u5c1d\u8bd5\u786e\u5b9a\u5728\u53d1\u5e03\u76ee\u5f55\u670d\u52a1\u5668\u6a21\u5f0f\u4fe1\u606f\u65f6\u6240\u4f7f\u7528\u7684\u57fa DN \u65f6\u53d1\u751f\u9519\u8bef\uff0c\u5982\u914d\u7f6e\u6761\u76ee %s \u7684 ds-cfg-schema-entry-dn \u5c5e\u6027\u4e2d\u6240\u6307\u5b9a: %s\u3002\u5c06\u4f7f\u7528\u9ed8\u8ba4\u7684\u65b9\u6848\u57fa DN cn=schema |
| | | ERR_SCHEMA_ADD_NOT_SUPPORTED_41=\u65e0\u6cd5\u6dfb\u52a0\u6761\u76ee "%s"\uff0c\u56e0\u4e3a\u6a21\u5f0f\u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u6dfb\u52a0\u64cd\u4f5c |
| | | ERR_SCHEMA_DELETE_NOT_SUPPORTED_42=\u65e0\u6cd5\u5220\u9664\u6761\u76ee "%s"\uff0c\u56e0\u4e3a\u6a21\u5f0f\u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u5220\u9664\u64cd\u4f5c |
| | | ERR_SCHEMA_MODIFY_DN_NOT_SUPPORTED_44=\u65e0\u6cd5\u91cd\u547d\u540d\u6761\u76ee "%s"\uff0c\u56e0\u4e3a\u6a21\u5f0f\u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u4fee\u6539 DN \u64cd\u4f5c |
| | | ERR_SCHEMA_UNABLE_TO_EXPORT_BASE_45=\u5c1d\u8bd5\u5bfc\u51fa\u57fa\u6a21\u5f0f\u6761\u76ee\u65f6\u53d1\u751f\u9519\u8bef: %s |
| | | ERR_SCHEMA_INVALID_BASE_48=\u65e0\u6cd5\u4ece\u6a21\u5f0f\u540e\u7aef\u4e2d\u68c0\u7d22\u8bf7\u6c42\u7684\u6761\u76ee %s\uff0c\u56e0\u4e3a\u8be5 DN \u4e0e\u67d0\u4e2a\u6a21\u5f0f\u6761\u76ee DN \u76f8\u540c |
| | | ERR_SCHEMA_UNABLE_TO_CREATE_LDIF_WRITER_49=\u5c1d\u8bd5\u6253\u5f00\u6a21\u5f0f\u540e\u7aef\u7684 LDIF \u5199\u5165\u7a0b\u5e8f\u65f6\u53d1\u751f\u975e\u9884\u671f\u9519\u8bef: %s |
| | |
| | | INFO_TASKBE_UPDATED_RETENTION_TIME_128=\u5df2\u5b8c\u6210\u4efb\u52a1\u7684\u4fdd\u7559\u65f6\u95f4\u5df2\u66f4\u65b0\u4e3a %d \u79d2\u3002\u6b64\u66f4\u65b0\u5c06\u7acb\u5373\u751f\u6548 |
| | | INFO_TASKBE_UPDATED_BACKING_FILE_129=\u5df2\u5c06\u4efb\u52a1\u6570\u636e\u652f\u6301\u6587\u4ef6\u7684\u8def\u5f84\u66f4\u6539\u4e3a %s\u3002\u5f53\u524d\u4efb\u52a1\u914d\u7f6e\u7684\u5feb\u7167\u5df2\u5199\u5165\u5230\u8be5\u6587\u4ef6\u4e2d\uff0c\u5b83\u5c06\u7ee7\u7eed\u7528\u4e8e\u4ee5\u540e\u7684\u66f4\u65b0 |
| | | ERR_TASKBE_ADD_DISALLOWED_DN_130=\u53ea\u80fd\u5728\u8ba1\u5212\u4efb\u52a1\u7684 %s \u4ee5\u4e0b\u6216\u5faa\u73af\u4efb\u52a1\u7684 %s \u4ee5\u4e0b\u76f4\u63a5\u6dfb\u52a0\u4efb\u52a1\u540e\u7aef\u4e2d\u7684\u65b0\u6761\u76ee |
| | | ERR_TASKBE_MODIFY_DN_NOT_SUPPORTED_131=\u4efb\u52a1\u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u4fee\u6539 DN \u64cd\u4f5c |
| | | INFO_TASKBE_BACKING_FILE_HEADER_132=\u8be5\u6587\u4ef6\u5305\u542b\u76ee\u5f55\u670d\u52a1\u5668\u4efb\u52a1\u8c03\u5ea6\u7a0b\u5e8f\u540e\u7aef\u4f7f\u7528\u7684\u6570\u636e\u3002\u4e0d\u8981\u76f4\u63a5\u7f16\u8f91\u8be5\u6587\u4ef6\uff0c\u56e0\u4e3a\u5b58\u5728\u8fd9\u4e9b\u66f4\u6539\u5c06\u4f1a\u4e22\u5931\u7684\u98ce\u9669\u3002\u53ea\u5e94\u4f7f\u7528\u968f\u76ee\u5f55\u670d\u52a1\u5668\u63d0\u4f9b\u7684\u7ba1\u7406\u5b9e\u7528\u7a0b\u5e8f\u6765\u7f16\u8f91\u9884\u5b9a\u4efb\u52a1\u548c\u590d\u53d1\u6027\u4efb\u52a1\u5b9a\u4e49 |
| | | ERR_TASKSCHED_DUPLICATE_RECURRING_ID_133=\u65e0\u6cd5\u5c06\u5faa\u73af\u4efb\u52a1 %s \u6dfb\u52a0\u5230\u4efb\u52a1\u8c03\u5ea6\u7a0b\u5e8f\uff0c\u56e0\u4e3a\u5df2\u5b58\u5728 ID \u76f8\u540c\u7684\u53e6\u4e00\u5faa\u73af\u4efb\u52a1 |
| | | ERR_TASKSCHED_DUPLICATE_TASK_ID_134=\u65e0\u6cd5\u8ba1\u5212\u4efb\u52a1 %s\uff0c\u56e0\u4e3a\u5df2\u5b58\u5728 ID \u76f8\u540c\u7684\u53e6\u4e00\u4efb\u52a1 |
| | |
| | | WARN_TASKSCHED_CANNOT_RENAME_CURRENT_BACKING_FILE_152=\u5c1d\u8bd5\u5c06\u5f53\u524d\u4efb\u52a1\u652f\u6301\u6587\u4ef6\u7684\u540d\u79f0\u7531 %s \u91cd\u547d\u540d\u4e3a %s \u65f6\u53d1\u751f\u9519\u8bef: %s\u3002\u4e0a\u4e00\u4e2a\u4efb\u52a1\u914d\u7f6e\uff08\u4e0d\u53cd\u6620\u6700\u65b0\u66f4\u65b0\uff09\u53ef\u80fd\u5df2\u4e22\u5931 |
| | | ERR_TASKSCHED_CANNOT_RENAME_NEW_BACKING_FILE_153=\u5c1d\u8bd5\u5c06\u65b0\u4efb\u52a1\u652f\u6301\u6587\u4ef6\u7684\u540d\u79f0\u7531 %s \u91cd\u547d\u540d\u4e3a %s \u65f6\u53d1\u751f\u9519\u8bef: %s\u3002\u5982\u679c\u76ee\u5f55\u670d\u52a1\u5668\u5df2\u91cd\u65b0\u542f\u52a8\uff0c\u5219\u4efb\u52a1\u8c03\u5ea6\u7a0b\u5e8f\u53ef\u80fd\u672a\u6309\u9884\u671f\u5de5\u4f5c |
| | | ERR_TASKSCHED_CANNOT_WRITE_BACKING_FILE_154=\u5c1d\u8bd5\u5199\u5165\u65b0\u4efb\u52a1\u6570\u636e\u652f\u6301\u6587\u4ef6 %s \u65f6\u53d1\u751f\u9519\u8bef: %s\u3002\u53cd\u6620\u6700\u65b0\u66f4\u65b0\u7684\u914d\u7f6e\u4fe1\u606f\u53ef\u80fd\u5df2\u4e22\u5931 |
| | | ERR_TASKBE_IMPORT_NOT_SUPPORTED_155=\u4efb\u52a1\u540e\u7aef\u4e0d\u652f\u6301 LDIF \u5bfc\u5165\u64cd\u4f5c |
| | | INFO_TASKBE_INTERRUPTED_BY_SHUTDOWN_156=\u6b63\u5728\u5173\u95ed\u4efb\u52a1\u540e\u7aef |
| | | INFO_ROOTDSE_UPDATED_SHOW_ALL_ATTRS_159=\u5df2\u66f4\u65b0\u6839 DSE \u914d\u7f6e\uff0c\u56e0\u6b64\uff0c\u914d\u7f6e\u5c5e\u6027 %s \u73b0\u5728\u4f1a\u4f7f\u7528\u503c %s |
| | | ERR_TASKSCHED_REMOVE_PENDING_NO_SUCH_TASK_161=\u65e0\u6cd5\u79fb\u9664\u6302\u8d77\u4efb\u52a1 %s\uff0c\u56e0\u4e3a\u4e0d\u5b58\u5728\u6b64\u7c7b\u4efb\u52a1 |
| | |
| | | ERR_TASKBE_SEARCH_INVALID_BASE_168=\u65e0\u6cd5\u5728\u4efb\u52a1\u540e\u7aef\u5904\u7406\u641c\u7d22\u64cd\u4f5c\uff0c\u56e0\u4e3a\u63d0\u4f9b\u7684\u57fa DN %s \u5bf9\u4e8e\u4efb\u52a1\u540e\u7aef\u4e2d\u7684\u6761\u76ee\u65e0\u6548 |
| | | ERR_TASKBE_SEARCH_NO_SUCH_TASK_169=\u65e0\u6cd5\u5728\u4efb\u52a1\u540e\u7aef\u5904\u7406\u641c\u7d22\u64cd\u4f5c\uff0c\u56e0\u4e3a\u4e0d\u5b58\u5728\u4e0e\u63d0\u4f9b\u7684\u641c\u7d22\u57fa\u6761\u76ee %s \u5173\u8054\u7684\u8ba1\u5212\u4efb\u52a1 |
| | | ERR_TASKBE_SEARCH_NO_SUCH_RECURRING_TASK_170=\u65e0\u6cd5\u5728\u4efb\u52a1\u540e\u7aef\u5904\u7406\u641c\u7d22\u64cd\u4f5c\uff0c\u56e0\u4e3a\u4e0d\u5b58\u5728\u4e0e\u63d0\u4f9b\u7684\u641c\u7d22\u57fa\u6761\u76ee %s \u5173\u8054\u7684\u5faa\u73af\u4efb\u52a1 |
| | | ERR_BACKUP_CONFIG_ENTRY_NULL_171=\u65e0\u6cd5\u521d\u59cb\u5316\u5907\u4efd\u540e\u7aef\uff0c\u56e0\u4e3a\u63d0\u4f9b\u7684\u914d\u7f6e\u6761\u76ee\u4e3a null |
| | | ERR_BACKUP_CANNOT_DECODE_BACKUP_ROOT_DN_172=\u65e0\u6cd5\u521d\u59cb\u5316\u5907\u4efd\u540e\u7aef\uff0c\u56e0\u4e3a\u5c1d\u8bd5\u89e3\u7801\u540e\u7aef\u7684\u57fa DN \u65f6\u53d1\u751f\u9519\u8bef: %s |
| | | ERR_BACKUP_GET_ENTRY_NULL_175=\u65e0\u6cd5\u4ece\u5907\u4efd\u540e\u7aef\u68c0\u7d22\u6761\u76ee\uff0c\u56e0\u4e3a\u8bf7\u6c42\u7684\u6761\u76ee\u4e3a null |
| | | ERR_BACKEND_CONFIG_ENTRY_NULL_171=\u65e0\u6cd5\u521d\u59cb\u5316 "%s" \u540e\u7aef\uff0c\u56e0\u4e3a\u63d0\u4f9b\u7684\u914d\u7f6e\u6761\u76ee\u4e3a null |
| | | ERR_BACKUP_INVALID_BASE_176=\u5907\u4efd\u540e\u7aef\u4e2d\u4e0d\u5b58\u5728\u8bf7\u6c42\u7684\u6761\u76ee %s |
| | | ERR_BACKUP_DN_DOES_NOT_SPECIFY_DIRECTORY_177=\u65e0\u6cd5\u4ece\u5907\u4efd\u540e\u7aef\u68c0\u7d22\u6761\u76ee %s\uff0c\u56e0\u4e3a\u8bf7\u6c42\u7684 DN \u5728\u57fa DN \u7684\u4e0b\u4e00\u7ea7\u522b\u4f46\u672a\u6307\u5b9a\u5907\u4efd\u76ee\u5f55 |
| | | ERR_BACKUP_INVALID_BACKUP_DIRECTORY_178=\u65e0\u6cd5\u4ece\u5907\u4efd\u540e\u7aef\u68c0\u7d22\u6761\u76ee %s\uff0c\u56e0\u4e3a\u8bf7\u6c42\u7684\u5907\u4efd\u76ee\u5f55\u65e0\u6548: %s |
| | |
| | | ERR_BACKUP_NO_BACKUP_PARENT_DN_181=\u65e0\u6cd5\u4ece\u5907\u4efd\u540e\u7aef\u68c0\u7d22\u6761\u76ee %s\uff0c\u56e0\u4e3a\u5176\u4e0d\u5305\u542b\u7236\u7c7b |
| | | ERR_BACKUP_NO_BACKUP_DIR_IN_DN_182=\u65e0\u6cd5\u4ece\u5907\u4efd\u540e\u7aef\u68c0\u7d22\u6761\u76ee %s\uff0c\u56e0\u4e3a DN \u672a\u5305\u542b\u8bf7\u6c42\u7684\u5907\u4efd\u5fc5\u987b\u9a7b\u7559\u7684\u5907\u4efd\u76ee\u5f55 |
| | | ERR_BACKUP_NO_SUCH_BACKUP_183=\u5907\u4efd %s \u4e0d\u5b58\u5728\u4e8e\u5907\u4efd\u76ee\u5f55 %s \u4e2d |
| | | ERR_BACKUP_ADD_NOT_SUPPORTED_184=\u5907\u4efd\u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u6dfb\u52a0\u64cd\u4f5c |
| | | ERR_BACKUP_DELETE_NOT_SUPPORTED_185=\u5907\u4efd\u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u5220\u9664\u64cd\u4f5c |
| | | ERR_BACKUP_MODIFY_NOT_SUPPORTED_186=\u5907\u4efd\u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u4fee\u6539\u64cd\u4f5c |
| | | ERR_BACKUP_MODIFY_DN_NOT_SUPPORTED_187=\u5907\u4efd\u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u4fee\u6539 DN \u64cd\u4f5c |
| | | ERR_BACKEND_MODIFY_NOT_SUPPORTED_186=\u5907\u4efd\u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u4fee\u6539\u64cd\u4f5c |
| | | ERR_BACKUP_NO_SUCH_ENTRY_188=\u5907\u4efd\u540e\u7aef\u4e2d\u4e0d\u5b58\u5728\u8bf7\u6c42\u7684\u6761\u76ee %s |
| | | ERR_BACKUP_EXPORT_NOT_SUPPORTED_189=\u5907\u4efd\u540e\u7aef\u4e2d\u4e0d\u652f\u6301 LDIF \u5bfc\u51fa\u64cd\u4f5c |
| | | ERR_BACKUP_IMPORT_NOT_SUPPORTED_190=\u5907\u4efd\u540e\u7aef\u4e2d\u4e0d\u652f\u6301 LDIF \u5bfc\u5165\u64cd\u4f5c |
| | | ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED_191=\u5907\u4efd\u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u5907\u4efd\u548c\u6062\u590d\u64cd\u4f5c |
| | | ERR_MEMORYBACKEND_REQUIRE_EXACTLY_ONE_BASE_192=\u5fc5\u987b\u63d0\u4f9b\u4e00\u4e2a\u57fa DN \u4ee5\u4fbf\u914d\u5408\u57fa\u4e8e\u5185\u5b58\u7684\u540e\u7aef\u4f7f\u7528 |
| | | ERR_MEMORYBACKEND_ENTRY_ALREADY_EXISTS_193=\u57fa\u4e8e\u5185\u5b58\u7684\u540e\u7aef\u4e2d\u5df2\u5b58\u5728\u6761\u76ee %s |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_BELONG_194=\u57fa\u4e8e\u5185\u5b58\u7684\u540e\u7aef\u4e2d\u4e0d\u62e5\u6709\u6761\u76ee %s |
| | | ERR_MEMORYBACKEND_PARENT_DOESNT_EXIST_195=\u65e0\u6cd5\u6dfb\u52a0\u6761\u76ee %s\uff0c\u56e0\u4e3a\u57fa\u4e8e\u5185\u5b58\u7684\u540e\u7aef\u4e2d\u6ca1\u6709\u5176\u7236\u6761\u76ee %s |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST_196=\u57fa\u4e8e\u5185\u5b58\u7684\u540e\u7aef\u4e2d\u4e0d\u5b58\u5728\u6761\u76ee %s |
| | | ERR_BACKEND_ENTRY_DOESNT_EXIST_196="%s" \u540e\u7aef\u4e2d\u4e0d\u5b58\u5728\u6761\u76ee %s |
| | | ERR_MEMORYBACKEND_CANNOT_DELETE_ENTRY_WITH_CHILDREN_197=\u65e0\u6cd5\u5220\u9664\u6761\u76ee %s\uff0c\u56e0\u4e3a\u5176\u542b\u6709\u4e00\u4e2a\u6216\u591a\u4e2a\u6b21\u7ea7\u6761\u76ee |
| | | ERR_MEMORYBACKEND_CANNOT_CREATE_LDIF_WRITER_199=\u65e0\u6cd5\u521b\u5efa LDIF \u4e66\u5199\u5668: %s |
| | | ERR_MEMORYBACKEND_CANNOT_WRITE_ENTRY_TO_LDIF_200=\u65e0\u6cd5\u5c06\u6761\u76ee %s \u5199\u5165 LDIF: %s |
| | |
| | | NOTE_BACKEND_ENVIRONMENT_UNUSABLE_297=\u4e0e\u540e\u7aef ID %s \u5bf9\u5e94\u7684 JE \u6570\u636e\u5e93\u73af\u5883\u5df2\u635f\u574f\u3002\u91cd\u65b0\u542f\u52a8\u76ee\u5f55\u670d\u52a1\u5668\u4ee5\u91cd\u65b0\u6253\u5f00\u8be5\u73af\u5883 |
| | | ERR_TASKSCHED_NOT_ALLOWED_TASK_298=\u672a\u5c06\u76ee\u5f55\u670d\u52a1\u5668\u914d\u7f6e\u4e3a\u5141\u8bb8\u8c03\u7528\u4efb\u52a1 %s |
| | | INFO_TASK_COMPLETION_BODY_299=\u4efb\u52a1 ID: %s\r\n\u4efb\u52a1\u72b6\u6001: %s\r\n\u9884\u5b9a\u5f00\u59cb\u65f6\u95f4: %s\r\n\u5b9e\u9645\u5f00\u59cb\u65f6\u95f4: %s\r\n\u5b8c\u6210\u65f6\u95f4: %s\r\n\r\n\u65e5\u5fd7\u6d88\u606f:\r\n |
| | | ERR_TRUSTSTORE_GET_ENTRY_NULL_300=\u65e0\u6cd5\u4ece\u4fe1\u4efb\u5e93\u540e\u7aef\u68c0\u7d22\u6761\u76ee\uff0c\u56e0\u4e3a\u8bf7\u6c42\u7684\u6761\u76ee\u4e3a null |
| | | ERR_TRUSTSTORE_INVALID_BASE_301=\u4fe1\u4efb\u5e93\u540e\u7aef\u4e2d\u4e0d\u5b58\u5728\u8bf7\u6c42\u7684\u6761\u76ee %s |
| | | ERR_TRUSTSTORE_DN_DOES_NOT_SPECIFY_CERTIFICATE_302=\u65e0\u6cd5\u5728\u4fe1\u4efb\u5e93\u540e\u7aef\u4e2d\u5904\u7406\u6761\u76ee %s\uff0c\u56e0\u4e3a\u8bf7\u6c42\u7684 DN \u5728\u57fa DN \u7684\u4e0b\u4e00\u7ea7\u522b\u4f46\u672a\u6307\u5b9a\u8bc1\u4e66\u540d\u79f0 |
| | | ERR_TRUSTSTORE_CANNOT_RETRIEVE_CERT_303=\u5c1d\u8bd5\u4ece\u4fe1\u4efb\u5e93\u6587\u4ef6 %2$s \u68c0\u7d22\u8bc1\u4e66 %1$s \u65f6\u53d1\u751f\u9519\u8bef: %3$s |
| | | ERR_TRUSTSTORE_MODIFY_NOT_SUPPORTED_304=\u4fe1\u4efb\u5e93\u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u4fee\u6539\u64cd\u4f5c |
| | | ERR_TRUSTSTORE_MODIFY_DN_NOT_SUPPORTED_305=\u4fe1\u4efb\u5e93\u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u4fee\u6539 DN \u64cd\u4f5c |
| | | ERR_TRUSTSTORE_REQUIRES_ONE_BASE_DN_306=\u65e0\u6cd5\u4ece\u914d\u7f6e\u6761\u76ee %s \u4e2d\u521d\u59cb\u5316\u4fe1\u4efb\u5e93\u540e\u7aef\uff0c\u56e0\u4e3a\u5176\u4e0d\u5305\u542b\u4e00\u4e2a\u57fa DN |
| | | ERR_TRUSTSTORE_IMPORT_AND_EXPORT_NOT_SUPPORTED_307=\u4fe1\u4efb\u5e93\u540e\u7aef\u4e2d\u4e0d\u652f\u6301 LDIF \u5bfc\u5165\u548c\u5bfc\u51fa\u64cd\u4f5c |
| | | ERR_TRUSTSTORE_BACKUP_AND_RESTORE_NOT_SUPPORTED_308=\u4fe1\u4efb\u5e93\u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u5907\u4efd\u548c\u6062\u590d\u64cd\u4f5c |
| | | ERR_BACKEND_IMPORT_AND_EXPORT_NOT_SUPPORTED_307="%s" \u540e\u7aef\u4e2d\u4e0d\u652f\u6301 LDIF \u5bfc\u5165\u548c\u5bfc\u51fa\u64cd\u4f5c |
| | | ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED_308="%s" \u540e\u7aef\u4e2d\u4e0d\u652f\u6301\u5907\u4efd\u548c\u6062\u590d\u64cd\u4f5c |
| | | ERR_TRUSTSTORE_NO_SUCH_FILE_309=\u5728\u914d\u7f6e\u6761\u76ee %2$s \u7684\u5c5e\u6027 ds-cfg-trust-store-file \u4e2d\u6307\u5b9a\u7684\u4fe1\u4efb\u5e93\u6587\u4ef6 %1$s \u4e0d\u5b58\u5728 |
| | | ERR_TRUSTSTORE_INVALID_TYPE_310=\u5728\u914d\u7f6e\u6761\u76ee %2$s \u7684\u5c5e\u6027 ds-cfg-trust-store-type \u4e2d\u6307\u5b9a\u7684\u4fe1\u4efb\u5e93\u7c7b\u578b %1$s \u65e0\u6548: %3$s |
| | | ERR_TRUSTSTORE_PIN_FILE_CANNOT_CREATE_311=\u5c1d\u8bd5\u5728\u914d\u7f6e\u6761\u76ee %2$s \u7684\u5c5e\u6027 ds-cfg-trust-store-pin-file \u4e2d\u6307\u5b9a\u7684\u521b\u5efa PIN \u6587\u4ef6 %1$s \u65f6\u53d1\u751f\u9519\u8bef |
| | |
| | | WARN_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE_4=\u57fa\u5e95 DN\u300c%s\u300d\u5df2\u914d\u7f6e\u70ba\u5176\u4e2d\u4e00\u500b\u8981\u7528\u65bc\u5728 Root DSE \u4e4b\u4e0b\u641c\u5c0b\u7684\u5f9e\u5c6c\u57fa\u5e95 DN\u3002\u4f46\u662f\uff0c\u6b64\u57fa\u5e95 DN \u672a\u7531\u4efb\u4f55\u5728\u76ee\u9304\u4f3a\u670d\u5668\u4e2d\u8a3b\u518a\u7684\u5c3e\u78bc\u8655\u7406\uff0c\u56e0\u6b64\u4e0d\u6703\u52a0\u4ee5\u4f7f\u7528 |
| | | WARN_ROOTDSE_SUBORDINATE_BASE_EXCEPTION_5=\u5617\u8a66\u5224\u5b9a\u8981\u7528\u65bc\u5728 Root DSE \u4e4b\u4e0b\u641c\u5c0b\u7684\u5f9e\u5c6c\u57fa\u5e95 DN \u96c6\u6642\u767c\u751f\u672a\u9810\u671f\u7684\u554f\u984c: %s |
| | | WARN_ROOTDSE_GET_ENTRY_NONROOT_6=Root DSE \u5f8c\u7aef\u88ab\u8981\u6c42\u64f7\u53d6\u5177\u6709 DN\u300c%s\u300d\u7684\u9805\u76ee\u3002\u6b64\u5f8c\u7aef\u61c9\u8a72\u53ea\u9700\u64f7\u53d6 Root DSE \u672c\u8eab\u3002\u4f46\u662f\uff0c\u5b83\u6703\u6aa2\u67e5\u6240\u5b9a\u7fa9\u7684\u5f9e\u5c6c\u5f8c\u7aef\u4e26\u67e5\u770b\u5b83\u662f\u5426\u53ef\u4ee5\u627e\u5230\u8acb\u6c42\u7684\u9805\u76ee |
| | | ERR_ROOTDSE_ADD_NOT_SUPPORTED_7=\u4e0d\u9858\u610f\u589e\u52a0\u9805\u76ee\u300c%s\u300d\uff0c\u56e0\u70ba Root DSE \u5f8c\u7aef\u4e0d\u652f\u63f4\u589e\u52a0\u4f5c\u696d |
| | | ERR_ROOTDSE_DELETE_NOT_SUPPORTED_8=\u4e0d\u9858\u610f\u79fb\u9664\u9805\u76ee\u300c%s\u300d\uff0c\u56e0\u70ba Root DSE \u5f8c\u7aef\u4e0d\u652f\u63f4\u522a\u9664\u4f5c\u696d |
| | | ERR_ROOTDSE_MODIFY_NOT_SUPPORTED_9=\u4e0d\u9858\u610f\u66f4\u65b0\u9805\u76ee\u300c%s\u300d\uff0c\u56e0\u70ba Root DSE \u5f8c\u7aef\u4e0d\u652f\u63f4\u4fee\u6539\u4f5c\u696d\u3002\u5982\u679c\u60a8\u8981\u6539\u8b8a Root DSE \u672c\u8eab\u7684\u5167\u5bb9\uff0c\u5247\u6709\u53ef\u80fd\u7d93\u7531\u4fee\u6539\u914d\u7f6e\u4e2d\u7684\u300c%s\u300d\u9805\u76ee\u4f86\u9054\u6210 |
| | | ERR_ROOTDSE_MODIFY_DN_NOT_SUPPORTED_10=\u4e0d\u9858\u610f\u91cd\u65b0\u547d\u540d\u9805\u76ee\u300c%s\u300d\uff0c\u56e0\u70ba Root DSE \u5f8c\u7aef\u4e0d\u652f\u63f4\u4fee\u6539 DN \u4f5c\u696d |
| | | ERR_ROOTDSE_INVALID_SEARCH_BASE_11=\u4e0d\u9858\u610f\u5728 Root DSE \u5f8c\u7aef\u4e2d\u4f7f\u7528\u300c%3$s\u300d\u7684\u57fa\u5e95 DN \u57f7\u884c\u641c\u5c0b (\u9023\u7dda ID %1$d\u3001\u4f5c\u696d ID %2$d)\u3002\u8981\u5728\u6b64\u5f8c\u7aef\u4e2d\u641c\u5c0b\u7684\u57fa\u5e95 DN \u5fc5\u9808\u662f Root DSE \u672c\u8eab\u7684 DN |
| | | ERR_ROOTDSE_UNEXPECTED_SEARCH_FAILURE_12=\u5617\u8a66\u5728 Root DSE \u5f8c\u7aef\u4e2d\u8655\u7406\u641c\u5c0b\u4f5c\u696d (\u9023\u7dda ID %d\u3001\u4f5c\u696d ID %d) \u6642\u767c\u751f\u672a\u9810\u671f\u7684\u5931\u6557: %s |
| | | ERR_ROOTDSE_INVALID_SEARCH_SCOPE_13=\u7121\u6cd5\u8655\u7406\u5177\u6709\u9023\u7dda ID %d \u8207\u4f5c\u696d ID %d \u7684\u641c\u5c0b\uff0c\u56e0\u70ba\u8a72\u641c\u5c0b\u7684\u7bc4\u570d %s \u7121\u6548 |
| | | ERR_ROOTDSE_UNABLE_TO_CREATE_LDIF_WRITER_14=\u5617\u8a66\u958b\u555f Root DSE \u5f8c\u7aef\u7684 LDIF \u5beb\u5165\u5668\u6642\u767c\u751f\u672a\u9810\u671f\u7684\u932f\u8aa4: %s |
| | | ERR_ROOTDSE_UNABLE_TO_EXPORT_DSE_15=\u5617\u8a66\u5c07 Root DSE \u9805\u76ee\u532f\u51fa\u81f3\u6307\u5b9a\u7684 LDIF \u76ee\u6a19\u6642\u767c\u751f\u672a\u9810\u671f\u7684\u932f\u8aa4: %s |
| | | ERR_ROOTDSE_IMPORT_NOT_SUPPORTED_16=Root DSE \u5f8c\u7aef\u4e0d\u652f\u63f4 LDIF \u532f\u5165\u4f5c\u696d |
| | | ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED_17=Root DSE \u5f8c\u7aef\u4e26\u672a\u63d0\u4f9b\u5099\u4efd\u8207\u5fa9\u539f\u4f5c\u696d\u7684\u8a2d\u5099\u3002Root DSE \u7684\u5167\u5bb9\u61c9\u5099\u4efd\u70ba\u76ee\u9304\u4f3a\u670d\u5668\u914d\u7f6e\u7684\u4e00\u90e8\u4efd |
| | | INFO_ROOTDSE_USING_SUFFIXES_AS_BASE_DNS_18=Root DSE \u914d\u7f6e\u5df2\u66f4\u65b0\uff0c\u6240\u4ee5\u73fe\u5728\u65bc Root DSE \u4e4b\u4e0b\u57f7\u884c\u641c\u5c0b\u6642\uff0c\u6703\u4f7f\u7528\u6240\u5b9a\u7fa9\u7684\u76ee\u9304\u4f3a\u670d\u5668\u5c3e\u78bc\u96c6 |
| | | INFO_ROOTDSE_USING_NEW_SUBORDINATE_BASE_DNS_19=Root DSE \u914d\u7f6e\u5df2\u66f4\u65b0\uff0c\u6240\u4ee5\u73fe\u5728\u65bc Root DSE \u4e4b\u4e0b\u57f7\u884c\u641c\u5c0b\u6642\uff0c\u6703\u4f7f\u7528\u57fa\u5e95 DN \u96c6 %s |
| | | INFO_ROOTDSE_USING_NEW_USER_ATTRS_20=Root DSE \u914d\u7f6e\u5df2\u66f4\u65b0\uff0c\u6240\u4ee5\u73fe\u5728\u6703\u4f7f\u7528\u65b0\u7684\u4f7f\u7528\u8005\u5b9a\u7fa9\u5c6c\u6027\u96c6 |
| | | ERR_MONITOR_CONFIG_ENTRY_NULL_21=\u5df2\u5617\u8a66\u914d\u7f6e\u76e3\u8996\u5f8c\u7aef\uff0c\u4f46\u672a\u63d0\u4f9b\u914d\u7f6e\u9805\u76ee\u3002\u9019\u662f\u4e0d\u5141\u8a31\u7684\uff0c\u800c\u4e14\u7121\u6cd5\u900f\u904e\u5354\u5b9a\u53d6\u5f97\u76e3\u8996\u8cc7\u8a0a |
| | | ERR_MONITOR_CANNOT_DECODE_MONITOR_ROOT_DN_22=\u5617\u8a66\u89e3\u78bc cn=monitor \u4f5c\u70ba\u76ee\u9304\u4f3a\u670d\u5668\u76e3\u8996\u8cc7\u8a0a\u7684\u57fa\u5e95 DN \u6642\u767c\u751f\u672a\u9810\u671f\u7684\u932f\u8aa4: %s\u3002\u7121\u6cd5\u900f\u904e\u5354\u5b9a\u53d6\u5f97\u76e3\u8996\u8cc7\u8a0a |
| | | ERR_MONITOR_ADD_NOT_SUPPORTED_23=\u4e0d\u9858\u610f\u589e\u52a0\u9805\u76ee\u300c%s\u300d\uff0c\u56e0\u70ba\u76e3\u8996\u5f8c\u7aef\u4e0d\u652f\u63f4\u589e\u52a0\u4f5c\u696d |
| | | ERR_MONITOR_DELETE_NOT_SUPPORTED_24=\u4e0d\u9858\u610f\u79fb\u9664\u9805\u76ee\u300c%s\u300d\uff0c\u56e0\u70ba\u76e3\u8996\u5f8c\u7aef\u4e0d\u652f\u63f4\u522a\u9664\u4f5c\u696d |
| | | ERR_BACKEND_ADD_NOT_SUPPORTED_23=\u4e0d\u9858\u610f\u589e\u52a0\u9805\u76ee\u300c%s\u300d\uff0c\u56e0\u70ba "%s" \u5f8c\u7aef\u4e0d\u652f\u63f4\u589e\u52a0\u4f5c\u696d |
| | | ERR_BACKEND_DELETE_NOT_SUPPORTED_24=\u4e0d\u9858\u610f\u79fb\u9664\u9805\u76ee\u300c%s\u300d\uff0c\u56e0\u70ba "%s" \u5f8c\u7aef\u4e0d\u652f\u63f4\u522a\u9664\u4f5c\u696d |
| | | ERR_MONITOR_MODIFY_NOT_SUPPORTED_25=\u4e0d\u9858\u610f\u66f4\u65b0\u9805\u76ee\u300c%s\u300d\uff0c\u56e0\u70ba\u76e3\u8996\u5f8c\u7aef\u4e0d\u652f\u63f4\u4fee\u6539\u4f5c\u696d\u3002\u5982\u679c\u60a8\u8981\u6539\u8b8a\u57fa\u5e95\u76e3\u8996\u9805\u76ee\u672c\u8eab\u7684\u5167\u5bb9\uff0c\u5247\u6709\u53ef\u80fd\u7d93\u7531\u4fee\u6539\u914d\u7f6e\u4e2d\u7684\u300c%s\u300d\u9805\u76ee\u4f86\u9054\u6210 |
| | | ERR_MONITOR_MODIFY_DN_NOT_SUPPORTED_26=\u4e0d\u9858\u610f\u91cd\u65b0\u547d\u540d\u9805\u76ee\u300c%s\u300d\uff0c\u56e0\u70ba\u76e3\u8996\u5f8c\u7aef\u4e0d\u652f\u63f4\u4fee\u6539 DN \u4f5c\u696d |
| | | ERR_BACKEND_MODIFY_DN_NOT_SUPPORTED_26=\u4e0d\u9858\u610f\u91cd\u65b0\u547d\u540d\u9805\u76ee\u300c%s\u300d\uff0c\u56e0\u70ba "%s" \u5f8c\u7aef\u4e0d\u652f\u63f4\u4fee\u6539 DN \u4f5c\u696d |
| | | ERR_MONITOR_UNABLE_TO_EXPORT_BASE_27=\u5617\u8a66\u532f\u51fa\u57fa\u5e95\u76e3\u8996\u9805\u76ee\u6642\u767c\u751f\u932f\u8aa4: %s |
| | | ERR_MONITOR_UNABLE_TO_EXPORT_PROVIDER_ENTRY_28=\u5617\u8a66\u532f\u51fa\u76e3\u8996\u63d0\u4f9b\u8005 %s \u7684\u76e3\u8996\u9805\u76ee\u6642\u767c\u751f\u932f\u8aa4: %s |
| | | ERR_MONITOR_IMPORT_NOT_SUPPORTED_29=\u76e3\u8996\u5f8c\u7aef\u4e0d\u652f\u63f4 LDIF \u532f\u5165\u4f5c\u696d |
| | | ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED_30=\u76e3\u8996\u5f8c\u7aef\u4e26\u672a\u63d0\u4f9b\u5099\u4efd\u8207\u5fa9\u539f\u4f5c\u696d\u7684\u8a2d\u5099 |
| | | ERR_BACKEND_IMPORT_NOT_SUPPORTED_29="%s" \u5f8c\u7aef\u4e0d\u652f\u63f4 LDIF \u532f\u5165\u4f5c\u696d |
| | | INFO_MONITOR_USING_NEW_USER_ATTRS_31=\u76e3\u8996\u914d\u7f6e\u5df2\u66f4\u65b0\uff0c\u6240\u4ee5\u73fe\u5728\u6703\u4f7f\u7528\u65b0\u7684\u4f7f\u7528\u8005\u5b9a\u7fa9\u5c6c\u6027\u96c6 |
| | | ERR_MONITOR_GET_ENTRY_NULL_32=\u7121\u6cd5\u5f9e\u76e3\u8996\u5f8c\u7aef\u64f7\u53d6\u8acb\u6c42\u7684\u9805\u76ee\uff0c\u56e0\u70ba\u6240\u63d0\u4f9b\u7684 DN \u70ba\u7a7a\u503c |
| | | ERR_MONITOR_INVALID_BASE_34=\u7121\u6cd5\u5f9e\u76e3\u8996\u5f8c\u7aef\u64f7\u53d6\u8acb\u6c42\u7684\u9805\u76ee %s\uff0c\u56e0\u70ba DN \u4e0d\u5728 %s \u7684\u76e3\u8996\u57fa\u5e95\u4e4b\u4e0b |
| | | INFO_MONITOR_UPTIME_37=%d \u5929 %d \u5c0f\u6642 %d \u5206 %d \u79d2 |
| | | ERR_SCHEMA_CONFIG_ENTRY_NULL_38=\u5df2\u5617\u8a66\u914d\u7f6e\u6a21\u5f0f\u5f8c\u7aef\uff0c\u4f46\u672a\u63d0\u4f9b\u914d\u7f6e\u9805\u76ee\u3002\u9019\u662f\u4e0d\u5141\u8a31\u7684\uff0c\u800c\u4e14\u7121\u6cd5\u900f\u904e\u5354\u5b9a\u53d6\u5f97\u6a21\u5f0f\u8cc7\u8a0a |
| | | ERR_SCHEMA_CANNOT_DETERMINE_BASE_DN_40=\u5617\u8a66\u4f9d\u7167\u914d\u7f6e\u9805\u76ee %s \u7684 ds-cfg-schema-entry-dn \u5c6c\u6027\u6240\u6307\u5b9a\uff0c\u5224\u5b9a\u5728\u767c\u4f48\u76ee\u9304\u4f3a\u670d\u5668\u6a21\u5f0f\u8cc7\u8a0a\u6642\u6240\u8981\u4f7f\u7528\u7684\u57fa\u5e95 DN \u6642\u767c\u751f\u932f\u8aa4: %s\u3002\u5c07\u4f7f\u7528 cn=schema \u7684\u9810\u8a2d\u6a21\u5f0f\u57fa\u5e95 DN |
| | | ERR_SCHEMA_ADD_NOT_SUPPORTED_41=\u4e0d\u9858\u610f\u589e\u52a0\u9805\u76ee\u300c%s\u300d\uff0c\u56e0\u70ba\u6a21\u5f0f\u5f8c\u7aef\u4e0d\u652f\u63f4\u589e\u52a0\u4f5c\u696d |
| | | ERR_SCHEMA_DELETE_NOT_SUPPORTED_42=\u4e0d\u9858\u610f\u79fb\u9664\u9805\u76ee\u300c%s\u300d\uff0c\u56e0\u70ba\u6a21\u5f0f\u5f8c\u7aef\u4e0d\u652f\u63f4\u522a\u9664\u4f5c\u696d |
| | | ERR_SCHEMA_MODIFY_DN_NOT_SUPPORTED_44=\u4e0d\u9858\u610f\u91cd\u65b0\u547d\u540d\u9805\u76ee\u300c%s\u300d\uff0c\u56e0\u70ba\u6a21\u5f0f\u5f8c\u7aef\u4e0d\u652f\u63f4\u4fee\u6539 DN \u4f5c\u696d |
| | | ERR_SCHEMA_UNABLE_TO_EXPORT_BASE_45=\u5617\u8a66\u532f\u51fa\u57fa\u5e95\u6a21\u5f0f\u9805\u76ee\u6642\u767c\u751f\u932f\u8aa4: %s |
| | | ERR_SCHEMA_INVALID_BASE_48=\u7121\u6cd5\u5f9e\u6a21\u5f0f\u5f8c\u7aef\u64f7\u53d6\u8acb\u6c42\u7684\u9805\u76ee %s\uff0c\u56e0\u70ba DN \u7b49\u65bc\u5176\u4e2d\u4e00\u500b\u6a21\u5f0f\u9805\u76ee DN |
| | | ERR_SCHEMA_UNABLE_TO_CREATE_LDIF_WRITER_49=\u5617\u8a66\u958b\u555f\u6a21\u5f0f\u5f8c\u7aef\u7684 LDIF \u5beb\u5165\u5668\u6642\u767c\u751f\u672a\u9810\u671f\u7684\u932f\u8aa4: %s |
| | |
| | | INFO_TASKBE_UPDATED_RETENTION_TIME_128=\u5df2\u5b8c\u6210\u4f5c\u696d\u7684\u4fdd\u7559\u6642\u9593\u5df2\u66f4\u65b0\u70ba %d \u79d2\u3002\u9019\u6703\u7acb\u5373\u751f\u6548 |
| | | INFO_TASKBE_UPDATED_BACKING_FILE_129=\u4f5c\u696d\u8cc7\u6599\u80cc\u666f\u6a94\u6848\u7684\u8def\u5f91\u5df2\u8b8a\u66f4\u70ba %s\u3002\u76ee\u524d\u4f5c\u696d\u914d\u7f6e\u7684\u5feb\u7167\u5df2\u5beb\u5165\u81f3\u8a72\u6a94\u6848\uff0c\u800c\u4e14\u5c07\u7e7c\u7e8c\u7528\u65bc\u672a\u4f86\u7684\u66f4\u65b0 |
| | | ERR_TASKBE_ADD_DISALLOWED_DN_130=\u4f5c\u696d\u5f8c\u7aef\u4e2d\u7684\u65b0\u9805\u76ee\u53ea\u80fd\u76f4\u63a5\u589e\u52a0\u65bc\u6392\u5b9a\u4f5c\u696d\u7684 %s \u4e4b\u4e0b\u6216\u9031\u671f\u6027\u4f5c\u696d\u7684 %s \u4e4b\u4e0b |
| | | ERR_TASKBE_MODIFY_DN_NOT_SUPPORTED_131=\u4f5c\u696d\u5f8c\u7aef\u4e0d\u652f\u63f4\u4fee\u6539 DN \u4f5c\u696d |
| | | INFO_TASKBE_BACKING_FILE_HEADER_132=\u6b64\u6a94\u6848\u5305\u542b\u76ee\u9304\u4f3a\u670d\u5668\u4f5c\u696d\u6392\u7a0b\u7a0b\u5f0f\u5f8c\u7aef\u6240\u4f7f\u7528\u7684\u8cc7\u6599\u3002\u8acb\u52ff\u76f4\u63a5\u7de8\u8f2f\u6b64\u6a94\u6848\uff0c\u56e0\u70ba\u9019\u4e9b\u8b8a\u66f4\u6709\u53ef\u80fd\u6703\u907a\u5931\u3002\u53ea\u80fd\u4f7f\u7528\u76ee\u9304\u4f3a\u670d\u5668\u96a8\u9644\u7684\u7ba1\u7406\u516c\u7528\u7a0b\u5f0f\u4f86\u7de8\u8f2f\u6392\u5b9a\u7684\u8207\u9031\u671f\u6027\u7684\u4f5c\u696d\u5b9a\u7fa9 |
| | | ERR_TASKSCHED_DUPLICATE_RECURRING_ID_133=\u7121\u6cd5\u5c07\u9031\u671f\u6027\u4f5c\u696d %s \u589e\u52a0\u81f3\u4f5c\u696d\u6392\u7a0b\u7a0b\u5f0f\uff0c\u56e0\u70ba\u5df2\u7d93\u5b58\u5728\u5177\u6709\u76f8\u540c ID \u7684\u5176\u4ed6\u9031\u671f\u6027\u4f5c\u696d |
| | | ERR_TASKSCHED_DUPLICATE_TASK_ID_134=\u7121\u6cd5\u6392\u7a0b\u4f5c\u696d %s\uff0c\u56e0\u70ba\u5df2\u7d93\u6709\u76f8\u540c ID \u7684\u5176\u4ed6\u4f5c\u696d\u5b58\u5728 |
| | |
| | | ERR_TASKSCHED_CANNOT_INITIALIZE_INTERNAL_151=\u5617\u8a66\u5229\u7528\u6240\u63d0\u4f9b\u9805\u76ee\u5167\u542b\u7684\u8cc7\u8a0a\uff0c\u5c0d\u985e\u5225 %s \u7684\u5be6\u4f8b\u57f7\u884c\u5167\u90e8\u521d\u59cb\u5316\u6642\u767c\u751f\u932f\u8aa4: %s |
| | | WARN_TASKSCHED_CANNOT_RENAME_CURRENT_BACKING_FILE_152=\u5617\u8a66\u5c07\u76ee\u524d\u7684\u4f5c\u696d\u80cc\u666f\u6a94\u6848\u7531 %s \u91cd\u65b0\u547d\u540d\u70ba %s \u6642\u767c\u751f\u932f\u8aa4: %s\u3002\u5148\u524d\u7684\u4f5c\u696d\u914d\u7f6e (\u4e26\u672a\u53cd\u6620\u6700\u8fd1\u7684\u66f4\u65b0\u5167\u5bb9) \u53ef\u80fd\u5df2\u907a\u5931 |
| | | ERR_TASKSCHED_CANNOT_WRITE_BACKING_FILE_154=\u5617\u8a66\u5beb\u5165\u65b0\u4f5c\u696d\u8cc7\u6599\u80cc\u666f\u6a94\u6848 %s \u6642\u767c\u751f\u932f\u8aa4: %s\u3002\u53cd\u6620\u6700\u8fd1\u66f4\u65b0\u5167\u5bb9\u7684\u914d\u7f6e\u8cc7\u8a0a\u53ef\u80fd\u5df2\u907a\u5931 |
| | | ERR_TASKBE_IMPORT_NOT_SUPPORTED_155=\u4f5c\u696d\u5f8c\u7aef\u4e0d\u652f\u63f4 LDIF \u532f\u5165\u4f5c\u696d |
| | | INFO_TASKBE_INTERRUPTED_BY_SHUTDOWN_156=\u4f5c\u696d\u5f8c\u7aef\u95dc\u9589\u4e2d |
| | | INFO_ROOTDSE_UPDATED_SHOW_ALL_ATTRS_159=Root DSE \u914d\u7f6e\u5df2\u66f4\u65b0\uff0c\u6240\u4ee5\u914d\u7f6e\u5c6c\u6027 %s \u73fe\u5728\u5373\u53ef\u4f7f\u7528\u503c %s |
| | | ERR_TASKSCHED_REMOVE_PENDING_NO_SUCH_TASK_161=\u7121\u6cd5\u79fb\u9664\u64f1\u7f6e\u4f5c\u696d %s\uff0c\u56e0\u70ba\u4e0d\u5b58\u5728\u6b64\u7a2e\u4f5c\u696d |
| | |
| | | ERR_TASKBE_SEARCH_INVALID_BASE_168=\u7121\u6cd5\u5728\u4f5c\u696d\u5f8c\u7aef\u4e2d\u8655\u7406\u641c\u5c0b\u4f5c\u696d\uff0c\u56e0\u70ba\u6240\u63d0\u4f9b\u7684\u57fa\u5e95 DN %s \u5c0d\u65bc\u4f5c\u696d\u5f8c\u7aef\u4e2d\u7684\u9805\u76ee\u800c\u8a00\u7121\u6548 |
| | | ERR_TASKBE_SEARCH_NO_SUCH_TASK_169=\u7121\u6cd5\u5728\u4f5c\u696d\u5f8c\u7aef\u4e2d\u8655\u7406\u641c\u5c0b\u4f5c\u696d\uff0c\u56e0\u70ba\u6240\u63d0\u4f9b\u7684\u641c\u5c0b\u57fa\u5e95\u9805\u76ee %s \u6c92\u6709\u76f8\u95dc\u806f\u7684\u6392\u5b9a\u4f5c\u696d |
| | | ERR_TASKBE_SEARCH_NO_SUCH_RECURRING_TASK_170=\u7121\u6cd5\u5728\u4f5c\u696d\u5f8c\u7aef\u4e2d\u8655\u7406\u641c\u5c0b\u4f5c\u696d\uff0c\u56e0\u70ba\u6240\u63d0\u4f9b\u7684\u641c\u5c0b\u57fa\u5e95\u9805\u76ee %s \u6c92\u6709\u76f8\u95dc\u806f\u7684\u9031\u671f\u6027\u4f5c\u696d |
| | | ERR_BACKUP_CONFIG_ENTRY_NULL_171=\u7121\u6cd5\u521d\u59cb\u5316\u5099\u4efd\u5f8c\u7aef\uff0c\u56e0\u70ba\u6240\u63d0\u4f9b\u7684\u914d\u7f6e\u9805\u76ee\u70ba\u7a7a\u503c |
| | | ERR_BACKUP_CANNOT_DECODE_BACKUP_ROOT_DN_172=\u7121\u6cd5\u521d\u59cb\u5316\u5099\u4efd\u5f8c\u7aef\uff0c\u56e0\u70ba\u5728\u5617\u8a66\u89e3\u78bc\u5f8c\u7aef\u7684\u57fa\u5e95 DN \u6642\u767c\u751f\u932f\u8aa4: %s |
| | | ERR_BACKUP_GET_ENTRY_NULL_175=\u7121\u6cd5\u5f9e\u5099\u4efd\u5f8c\u7aef\u64f7\u53d6\u9805\u76ee\uff0c\u56e0\u70ba\u8acb\u6c42\u7684\u9805\u76ee\u70ba\u7a7a\u503c |
| | | ERR_BACKEND_CONFIG_ENTRY_NULL_171=\u7121\u6cd5\u521d\u59cb\u5316 "%s" \u5f8c\u7aef\uff0c\u56e0\u70ba\u6240\u63d0\u4f9b\u7684\u914d\u7f6e\u9805\u76ee\u70ba\u7a7a\u503c |
| | | ERR_BACKUP_INVALID_BASE_176=\u8acb\u6c42\u7684\u9805\u76ee %s \u4e0d\u5b58\u5728\u65bc\u5099\u4efd\u5f8c\u7aef\u4e2d |
| | | ERR_BACKUP_DN_DOES_NOT_SPECIFY_DIRECTORY_177=\u7121\u6cd5\u5f9e\u5099\u4efd\u5f8c\u7aef\u64f7\u53d6\u9805\u76ee %s\uff0c\u56e0\u70ba\u8acb\u6c42\u7684 DN \u5728\u57fa\u5e95 DN \u7684\u4e0b\u4e00\u500b\u5c64\u7d1a\uff0c\u4f46\u4e26\u672a\u6307\u5b9a\u5099\u4efd\u76ee\u9304 |
| | | ERR_BACKUP_INVALID_BACKUP_DIRECTORY_178=\u7121\u6cd5\u5f9e\u5099\u4efd\u5f8c\u7aef\u64f7\u53d6\u9805\u76ee %s\uff0c\u56e0\u70ba\u8acb\u6c42\u7684\u5099\u4efd\u76ee\u9304\u7121\u6548: %s |
| | |
| | | ERR_BACKUP_NO_BACKUP_PARENT_DN_181=\u7121\u6cd5\u5f9e\u5099\u4efd\u5f8c\u7aef\u64f7\u53d6\u9805\u76ee %s\uff0c\u56e0\u70ba\u5b83\u6c92\u6709\u7236\u7cfb |
| | | ERR_BACKUP_NO_BACKUP_DIR_IN_DN_182=\u7121\u6cd5\u5f9e\u5099\u4efd\u5f8c\u7aef\u64f7\u53d6\u9805\u76ee %s\uff0c\u56e0\u70ba DN \u4e0d\u5305\u542b\u8acb\u6c42\u7684\u5099\u4efd\u6240\u61c9\u5e38\u99d0\u7684\u5099\u4efd\u76ee\u9304 |
| | | ERR_BACKUP_NO_SUCH_BACKUP_183=\u5099\u4efd %s \u4e0d\u5b58\u5728\u65bc\u5099\u4efd\u76ee\u9304 %s \u4e2d |
| | | ERR_BACKUP_ADD_NOT_SUPPORTED_184=\u5099\u4efd\u5f8c\u7aef\u4e0d\u652f\u63f4\u589e\u52a0\u4f5c\u696d |
| | | ERR_BACKUP_DELETE_NOT_SUPPORTED_185=\u5099\u4efd\u5f8c\u7aef\u4e0d\u652f\u63f4\u522a\u9664\u4f5c\u696d |
| | | ERR_BACKUP_MODIFY_NOT_SUPPORTED_186=\u5099\u4efd\u5f8c\u7aef\u4e0d\u652f\u63f4\u4fee\u6539\u4f5c\u696d |
| | | ERR_BACKUP_MODIFY_DN_NOT_SUPPORTED_187=\u5099\u4efd\u5f8c\u7aef\u4e0d\u652f\u63f4\u4fee\u6539 DN \u4f5c\u696d |
| | | ERR_BACKEND_MODIFY_NOT_SUPPORTED_186=\u5099\u4efd\u5f8c\u7aef\u4e0d\u652f\u63f4\u4fee\u6539\u4f5c\u696d |
| | | ERR_BACKUP_NO_SUCH_ENTRY_188=\u8acb\u6c42\u7684\u9805\u76ee %s \u4e0d\u5b58\u5728\u65bc\u5099\u4efd\u5f8c\u7aef\u4e2d |
| | | ERR_BACKUP_EXPORT_NOT_SUPPORTED_189=\u5099\u4efd\u5f8c\u7aef\u4e0d\u652f\u63f4 LDIF \u532f\u51fa\u4f5c\u696d |
| | | ERR_BACKUP_IMPORT_NOT_SUPPORTED_190=\u5099\u4efd\u5f8c\u7aef\u4e0d\u652f\u63f4 LDIF \u532f\u5165\u4f5c\u696d |
| | | ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED_191=\u5099\u4efd\u5f8c\u7aef\u4e0d\u652f\u63f4\u5099\u4efd\u8207\u5fa9\u539f\u4f5c\u696d |
| | | ERR_MEMORYBACKEND_REQUIRE_EXACTLY_ONE_BASE_192=\u5fc5\u9808\u63d0\u4f9b\u6b63\u597d\u4e00\u500b\u57fa\u5e95 DN\uff0c\u4ee5\u4fbf\u7528\u65bc\u4ee5\u8a18\u61b6\u9ad4\u70ba\u57fa\u790e\u7684\u5f8c\u7aef |
| | | ERR_MEMORYBACKEND_ENTRY_ALREADY_EXISTS_193=\u9805\u76ee %s \u5df2\u7d93\u5b58\u5728\u65bc\u4ee5\u8a18\u61b6\u9ad4\u70ba\u57fa\u790e\u7684\u5f8c\u7aef\u4e2d |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_BELONG_194=\u9805\u76ee %s \u4e0d\u5c6c\u65bc\u4ee5\u8a18\u61b6\u9ad4\u70ba\u57fa\u790e\u7684\u5f8c\u7aef |
| | | ERR_MEMORYBACKEND_PARENT_DOESNT_EXIST_195=\u7121\u6cd5\u589e\u52a0\u9805\u76ee %s\uff0c\u56e0\u70ba\u5176\u7236\u7cfb\u9805\u76ee %s \u4e0d\u5b58\u5728\u65bc\u4ee5\u8a18\u61b6\u9ad4\u70ba\u57fa\u790e\u7684\u5f8c\u7aef\u4e2d |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST_196=\u9805\u76ee %s \u4e0d\u5b58\u5728\u65bc\u4ee5\u8a18\u61b6\u9ad4\u70ba\u57fa\u790e\u7684\u5f8c\u7aef\u4e2d |
| | | ERR_BACKEND_ENTRY_DOESNT_EXIST_196=\u9805\u76ee %s \u4e0d\u5b58\u5728 "%s" \u5f8c\u7aef\u4e2d |
| | | ERR_MEMORYBACKEND_CANNOT_DELETE_ENTRY_WITH_CHILDREN_197=\u7121\u6cd5\u522a\u9664\u9805\u76ee %s\uff0c\u56e0\u70ba\u8a72\u9805\u76ee\u5177\u6709\u4e00\u6216\u591a\u500b\u5f9e\u5c6c\u9805\u76ee |
| | | ERR_MEMORYBACKEND_CANNOT_CREATE_LDIF_WRITER_199=\u7121\u6cd5\u5efa\u7acb LDIF \u5beb\u5165\u5668: %s |
| | | ERR_MEMORYBACKEND_CANNOT_WRITE_ENTRY_TO_LDIF_200=\u7121\u6cd5\u5c07\u9805\u76ee %s \u5beb\u5165\u81f3 LDIF: % |
| | |
| | | NOTE_BACKEND_ENVIRONMENT_UNUSABLE_297=\u5c0d\u61c9\u65bc\u5f8c\u7aef id %s \u7684 JE \u8cc7\u6599\u5eab\u74b0\u5883\u5df2\u6bc0\u58de\u3002\u91cd\u65b0\u555f\u52d5\u76ee\u9304\u4f3a\u670d\u5668\u4ee5\u4fbf\u91cd\u65b0\u958b\u555f\u74b0\u5883 |
| | | ERR_TASKSCHED_NOT_ALLOWED_TASK_298=\u76ee\u9304\u4f3a\u670d\u5668\u4e26\u672a\u914d\u7f6e\u70ba\u5141\u8a31\u547c\u53eb\u4f5c\u696d %s |
| | | INFO_TASK_COMPLETION_BODY_299=\u4f5c\u696d ID: %s\r\n\u4f5c\u696d\u72c0\u614b: %s\r\n\u6392\u5b9a\u555f\u52d5\u6642\u9593: %s\r\n\u5be6\u969b\u555f\u52d5\u6642\u9593: %s\r\n\u5b8c\u6210\u6642\u9593: %s\r\n\r\n\u8a18\u9304\u8a0a\u606f:\r\n |
| | | ERR_TRUSTSTORE_GET_ENTRY_NULL_300=\u7121\u6cd5\u5f9e\u4fe1\u4efb\u6e05\u55ae\u5b58\u653e\u5340\u5f8c\u7aef\u64f7\u53d6\u9805\u76ee\uff0c\u56e0\u70ba\u8acb\u6c42\u7684\u9805\u76ee\u70ba\u7a7a\u503c |
| | | ERR_TRUSTSTORE_INVALID_BASE_301=\u8acb\u6c42\u7684\u9805\u76ee %s \u4e0d\u5b58\u5728\u65bc\u4fe1\u4efb\u6e05\u55ae\u5b58\u653e\u5340\u5f8c\u7aef\u4e2d |
| | | ERR_TRUSTSTORE_DN_DOES_NOT_SPECIFY_CERTIFICATE_302=\u7121\u6cd5\u5728\u4fe1\u4efb\u6e05\u55ae\u5b58\u653e\u5340\u5f8c\u7aef\u4e2d\u8655\u7406\u9805\u76ee %s\uff0c\u56e0\u70ba\u8acb\u6c42\u7684 DN \u5728\u57fa\u5e95 DN \u7684\u4e0b\u4e00\u500b\u5c64\u7d1a\uff0c\u4f46\u4e26\u672a\u6307\u5b9a\u6191\u8b49\u540d\u7a31 |
| | | ERR_TRUSTSTORE_CANNOT_RETRIEVE_CERT_303=\u5617\u8a66\u5f9e\u4fe1\u4efb\u6e05\u55ae\u5b58\u653e\u5340\u6a94\u6848 %2$s \u64f7\u53d6\u6191\u8b49 %1$s \u6642\u767c\u751f\u932f\u8aa4: %3$s |
| | | ERR_TRUSTSTORE_MODIFY_NOT_SUPPORTED_304=\u4fe1\u4efb\u6e05\u55ae\u5b58\u653e\u5340\u5f8c\u7aef\u4e0d\u652f\u63f4\u4fee\u6539\u4f5c\u696d |
| | | ERR_TRUSTSTORE_MODIFY_DN_NOT_SUPPORTED_305=\u4fe1\u4efb\u6e05\u55ae\u5b58\u653e\u5340\u5f8c\u7aef\u4e0d\u652f\u63f4\u4fee\u6539 DN \u4f5c\u696d |
| | | ERR_TRUSTSTORE_REQUIRES_ONE_BASE_DN_306=\u7121\u6cd5\u5f9e\u914d\u7f6e\u9805\u76ee %s \u521d\u59cb\u5316\u4fe1\u4efb\u6e05\u55ae\u5b58\u653e\u5340\u5f8c\u7aef\uff0c\u56e0\u70ba\u5b83\u4e26\u4e0d\u662f\u6b63\u597d\u5305\u542b\u4e00\u500b\u57fa\u5e95 DN |
| | | ERR_TRUSTSTORE_IMPORT_AND_EXPORT_NOT_SUPPORTED_307=\u4fe1\u4efb\u6e05\u55ae\u5b58\u653e\u5340\u5f8c\u7aef\u4e0d\u652f\u63f4 LDIF \u532f\u5165\u8207\u532f\u51fa\u4f5c\u696d |
| | | ERR_TRUSTSTORE_BACKUP_AND_RESTORE_NOT_SUPPORTED_308=\u4fe1\u4efb\u6e05\u55ae\u5b58\u653e\u5340\u5f8c\u7aef\u4e0d\u652f\u63f4\u5099\u4efd\u8207\u5fa9\u539f\u4f5c\u696d |
| | | ERR_BACKEND_IMPORT_AND_EXPORT_NOT_SUPPORTED_307="%s" \u5f8c\u7aef\u4e0d\u652f\u63f4 LDIF \u532f\u5165\u8207\u532f\u51fa\u4f5c\u696d |
| | | ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED_308="%s" \u5f8c\u7aef\u4e0d\u652f\u63f4\u5099\u4efd\u8207\u5fa9\u539f\u4f5c\u696d |
| | | ERR_TRUSTSTORE_NO_SUCH_FILE_309=\u4fe1\u4efb\u6e05\u55ae\u5b58\u653e\u5340\u6a94\u6848 %s (\u6307\u5b9a\u65bc\u914d\u7f6e\u9805\u76ee %s \u4e4b\u5c6c\u6027 ds-cfg-trust-store-file \u4e2d) \u4e0d\u5b58\u5728 |
| | | ERR_TRUSTSTORE_INVALID_TYPE_310=\u4fe1\u4efb\u6e05\u55ae\u5b58\u653e\u5340\u985e\u578b %s (\u6307\u5b9a\u65bc\u914d\u7f6e\u9805\u76ee %s \u4e4b\u5c6c\u6027 ds-cfg-trust-store-type \u4e2d) \u7121\u6548: %s |
| | | ERR_TRUSTSTORE_PIN_FILE_CANNOT_CREATE_311=\u5617\u8a66\u5efa\u7acb PIN \u6a94\u6848 %s (\u6307\u5b9a\u65bc\u914d\u7f6e\u9805\u76ee %s \u7684\u5c6c\u6027 ds-cfg-trust-store-pin-file \u4e2d) \u6642\u767c\u751f\u932f\u8aa4 |
| | |
| | | * Portions Copyright 2014 ForgeRock AS |
| | | */ |
| | | package org.opends.server.api; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.LinkedHashSet; |
| | | import java.util.List; |
| | |
| | | import org.forgerock.opendj.ldap.ConditionResult; |
| | | import org.opends.server.admin.Configuration; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.core.AddOperation; |
| | | import org.opends.server.core.DeleteOperation; |
| | | import org.opends.server.core.DirectoryServer; |
| | | import org.opends.server.core.ModifyOperation; |
| | | import org.opends.server.core.ModifyDNOperation; |
| | | import org.opends.server.core.SearchOperation; |
| | | import org.opends.server.core.*; |
| | | import org.opends.server.monitors.BackendMonitor; |
| | | import org.opends.server.types.AttributeType; |
| | | import org.opends.server.types.BackupConfig; |
| | |
| | | |
| | | import static org.opends.messages.BackendMessages.*; |
| | | |
| | | |
| | | |
| | | /** |
| | | * This class defines the set of methods and structures that must be |
| | | * implemented for a Directory Server backend. |
| | | * |
| | | * @param <C> |
| | | * the type of the BackendCfg for the current backend |
| | | */ |
| | | @org.opends.server.types.PublicAPI( |
| | | stability=org.opends.server.types.StabilityLevel.VOLATILE, |
| | | mayInstantiate=false, |
| | | mayExtend=true, |
| | | mayInvoke=false) |
| | | public abstract class Backend |
| | | public abstract class Backend<C extends Configuration> |
| | | // should have been BackendCfg instead of Configuration |
| | | { |
| | | // The backend that holds a portion of the DIT that is |
| | | // hierarchically above the information in this backend. |
| | | private Backend parentBackend; |
| | | /** |
| | | * The backend that holds a portion of the DIT that is hierarchically above |
| | | * the information in this backend. |
| | | */ |
| | | private Backend<?> parentBackend; |
| | | |
| | | // The set of backends that hold portions of the DIT that are |
| | | // hierarchically below the information in this backend. |
| | | private Backend[] subordinateBackends; |
| | | /** |
| | | * The set of backends that hold portions of the DIT that are hierarchically |
| | | * below the information in this backend. |
| | | */ |
| | | private Backend<?>[] subordinateBackends; |
| | | |
| | | // The backend monitor associated with this backend. |
| | | /** The backend monitor associated with this backend. */ |
| | | private BackendMonitor backendMonitor; |
| | | |
| | | // Indicates whether this is a private backend or one that holds |
| | | // user data. |
| | | /** |
| | | * Indicates whether this is a private backend or one that holds user data. |
| | | */ |
| | | private boolean isPrivateBackend; |
| | | |
| | | // The unique identifier for this backend. |
| | | /** The unique identifier for this backend. */ |
| | | private String backendID; |
| | | |
| | | // The writability mode for this backend. |
| | | /** The writability mode for this backend. */ |
| | | private WritabilityMode writabilityMode; |
| | | |
| | | |
| | |
| | | * @throws ConfigException |
| | | * If there is an error in the configuration. |
| | | */ |
| | | public abstract void configureBackend(Configuration cfg) |
| | | throws ConfigException; |
| | | public abstract void configureBackend(C cfg) throws ConfigException; |
| | | |
| | | |
| | | |
| | |
| | | * for this backend, or {@code false} if not. |
| | | */ |
| | | public boolean isConfigurationAcceptable( |
| | | Configuration configuration, |
| | | C configuration, |
| | | List<LocalizableMessage> unacceptableReasons) |
| | | { |
| | | // This default implementation does not perform any special |
| | |
| | | return false; |
| | | } |
| | | } |
| | | return (! filter.getFilterComponents().isEmpty()); |
| | | return !filter.getFilterComponents().isEmpty(); |
| | | |
| | | |
| | | case NOT: |
| | |
| | | { |
| | | matchingRule = attrType.getEqualityMatchingRule(); |
| | | } |
| | | |
| | | if (matchingRule == null) |
| | | { |
| | | return false; |
| | | } |
| | | else |
| | | { |
| | | return isIndexed(attrType, matchingRule); |
| | | } |
| | | return matchingRule != null && isIndexed(attrType, matchingRule); |
| | | |
| | | |
| | | default: |
| | |
| | | public boolean entryExists(DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | | return (getEntry(entryDN) != null); |
| | | return getEntry(entryDN) != null; |
| | | } |
| | | |
| | | |
| | |
| | | public final boolean supportsControl(String controlOID) |
| | | { |
| | | Set<String> supportedControls = getSupportedControls(); |
| | | return ((supportedControls != null) && |
| | | supportedControls.contains(controlOID)); |
| | | return supportedControls != null && supportedControls.contains(controlOID); |
| | | } |
| | | |
| | | |
| | |
| | | public final boolean supportsFeature(String featureOID) |
| | | { |
| | | Set<String> supportedFeatures = getSupportedFeatures(); |
| | | return ((supportedFeatures != null) && |
| | | supportedFeatures.contains(featureOID)); |
| | | return supportedFeatures != null && supportedFeatures.contains(featureOID); |
| | | } |
| | | |
| | | |
| | |
| | | * @return The parent backend for this backend, or {@code null} if |
| | | * there is none. |
| | | */ |
| | | public final Backend getParentBackend() |
| | | public final Backend<?> getParentBackend() |
| | | { |
| | | return parentBackend; |
| | | } |
| | |
| | | * |
| | | * @param parentBackend The parent backend for this backend. |
| | | */ |
| | | public final void setParentBackend(Backend parentBackend) |
| | | public final void setParentBackend(Backend<?> parentBackend) |
| | | { |
| | | synchronized (this) |
| | | { |
| | |
| | | * @return The set of subordinate backends for this backend, or an |
| | | * empty array if none exist. |
| | | */ |
| | | public final Backend[] getSubordinateBackends() |
| | | public final Backend<?>[] getSubordinateBackends() |
| | | { |
| | | return subordinateBackends; |
| | | } |
| | |
| | | * this backend. |
| | | */ |
| | | public final void setSubordinateBackends( |
| | | Backend[] subordinateBackends) |
| | | Backend<?>[] subordinateBackends) |
| | | { |
| | | synchronized (this) |
| | | { |
| | |
| | | */ |
| | | public final boolean hasSubSuffix(DN subSuffixDN) |
| | | { |
| | | Backend[] subBackends = subordinateBackends; |
| | | for (Backend b : subBackends) |
| | | for (Backend<?> b : subordinateBackends) |
| | | { |
| | | for (DN baseDN : b.getBaseDNs()) |
| | | { |
| | |
| | | synchronized (this) |
| | | { |
| | | boolean matchFound = false; |
| | | ArrayList<Backend> subBackendList = |
| | | new ArrayList<Backend>(subordinateBackends.length); |
| | | for (Backend b : subordinateBackends) |
| | | ArrayList<Backend<?>> subBackendList = |
| | | new ArrayList<Backend<?>>(subordinateBackends.length); |
| | | for (Backend<?> b : subordinateBackends) |
| | | { |
| | | boolean thisMatches = false; |
| | | DN[] subBaseDNs = b.getBaseDNs(); |
| | |
| | | |
| | | if (matchFound) |
| | | { |
| | | Backend[] newSubordinateBackends = |
| | | Backend<?>[] newSubordinateBackends = |
| | | new Backend[subBackendList.size()]; |
| | | subBackendList.toArray(newSubordinateBackends); |
| | | subordinateBackends = newSubordinateBackends; |
| | |
| | | * subordinate backends for this |
| | | * backend. |
| | | */ |
| | | public final void addSubordinateBackend(Backend subordinateBackend) |
| | | public final void addSubordinateBackend(Backend<?> subordinateBackend) |
| | | { |
| | | synchronized (this) |
| | | { |
| | | LinkedHashSet<Backend> backendSet = |
| | | new LinkedHashSet<Backend>(); |
| | | LinkedHashSet<Backend<?>> backendSet = new LinkedHashSet<Backend<?>>(); |
| | | |
| | | for (Backend b : subordinateBackends) |
| | | for (Backend<?> b : subordinateBackends) |
| | | { |
| | | backendSet.add(b); |
| | | } |
| | | |
| | | if (backendSet.add(subordinateBackend)) |
| | | { |
| | | Backend[] newSubordinateBackends = |
| | | Backend<?>[] newSubordinateBackends = |
| | | new Backend[backendSet.size()]; |
| | | backendSet.toArray(newSubordinateBackends); |
| | | subordinateBackends = newSubordinateBackends; |
| | |
| | | * backend. |
| | | */ |
| | | public final void removeSubordinateBackend( |
| | | Backend subordinateBackend) |
| | | Backend<?> subordinateBackend) |
| | | { |
| | | synchronized (this) |
| | | { |
| | | ArrayList<Backend> backendList = |
| | | new ArrayList<Backend>(subordinateBackends.length); |
| | | ArrayList<Backend<?>> backendList = |
| | | new ArrayList<Backend<?>>(subordinateBackends.length); |
| | | |
| | | boolean found = false; |
| | | for (Backend b : subordinateBackends) |
| | | for (Backend<?> b : subordinateBackends) |
| | | { |
| | | if (b.equals(subordinateBackend)) |
| | | { |
| | |
| | | |
| | | if (found) |
| | | { |
| | | Backend[] newSubordinateBackends = |
| | | Backend<?>[] newSubordinateBackends = |
| | | new Backend[backendList.size()]; |
| | | backendList.toArray(newSubordinateBackends); |
| | | subordinateBackends = newSubordinateBackends; |
| | |
| | | */ |
| | | public final boolean handlesEntry(DN entryDN) |
| | | { |
| | | DN[] baseDNs = getBaseDNs(); |
| | | for (DN dn : baseDNs) |
| | | for (DN dn : getBaseDNs()) |
| | | { |
| | | if (entryDN.isDescendantOf(dn)) |
| | | { |
| | | Backend[] subBackends = subordinateBackends; |
| | | for (Backend b : subBackends) |
| | | for (Backend<?> b : subordinateBackends) |
| | | { |
| | | if (b.handlesEntry(entryDN)) |
| | | { |
| | |
| | | { |
| | | if (entryDN.isDescendantOf(baseDN)) |
| | | { |
| | | if ((excludeDNs == null) || excludeDNs.isEmpty()) |
| | | if (excludeDNs == null || excludeDNs.isEmpty()) |
| | | { |
| | | return true; |
| | | } |
| | |
| | | */ |
| | | package org.opends.server.api; |
| | | |
| | | |
| | | |
| | | import org.opends.server.admin.std.server.BackendCfg; |
| | | import org.opends.server.config.ConfigEntry; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.types.DirectoryException; |
| | | import org.opends.server.types.DN; |
| | | import org.opends.server.types.DirectoryException; |
| | | import org.opends.server.types.InitializationException; |
| | | |
| | | |
| | | /** |
| | | * This class defines the set of methods and structures that must be |
| | | * implemented by a Directory Server configuration handler. |
| | | * |
| | | * @param <C> the BackendCfg class in use with this ConfigHandler |
| | | */ |
| | | @org.opends.server.types.PublicAPI( |
| | | stability=org.opends.server.types.StabilityLevel.VOLATILE, |
| | | mayInstantiate=false, |
| | | mayExtend=true, |
| | | mayInvoke=true) |
| | | public abstract class ConfigHandler |
| | | extends Backend |
| | | public abstract class ConfigHandler<C extends BackendCfg> extends Backend<C> |
| | | { |
| | | /** |
| | | * Bootstraps this configuration handler using the information in |
| | |
| | | import org.forgerock.opendj.ldap.ConditionResult; |
| | | import org.forgerock.opendj.ldap.ResultCode; |
| | | import org.forgerock.opendj.ldap.SearchScope; |
| | | import org.forgerock.util.Reject; |
| | | import org.opends.server.admin.Configuration; |
| | | import org.opends.server.admin.server.ConfigurationChangeListener; |
| | | import org.opends.server.admin.std.server.BackupBackendCfg; |
| | | import org.opends.server.api.Backend; |
| | |
| | | * unknown backup directory is included in the base DN. |
| | | */ |
| | | public class BackupBackend |
| | | extends Backend |
| | | extends Backend<BackupBackendCfg> |
| | | implements ConfigurationChangeListener<BackupBackendCfg> |
| | | { |
| | | private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); |
| | | |
| | | |
| | | |
| | | // The current configuration state. |
| | | /** The current configuration state. */ |
| | | private BackupBackendCfg currentConfig; |
| | | |
| | | // The DN for the base backup entry. |
| | | /** The DN for the base backup entry. */ |
| | | private DN backupBaseDN; |
| | | |
| | | // The set of base DNs for this backend. |
| | | /** The set of base DNs for this backend. */ |
| | | private DN[] baseDNs; |
| | | |
| | | // The backup base entry. |
| | | /** The backup base entry. */ |
| | | private Entry backupBaseEntry; |
| | | |
| | | // The set of supported controls for this backend. |
| | | private HashSet<String> supportedControls; |
| | | |
| | | // The set of supported features for this backend. |
| | | private HashSet<String> supportedFeatures; |
| | | |
| | | // The set of predefined backup directories that we will use. |
| | | /** The set of predefined backup directories that we will use. */ |
| | | private LinkedHashSet<File> backupDirectories; |
| | | |
| | | |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public void configureBackend(Configuration config) throws ConfigException |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void configureBackend(BackupBackendCfg config) throws ConfigException |
| | | { |
| | | // Make sure that a configuration entry was provided. If not, then we will |
| | | // not be able to complete initialization. |
| | | if (config == null) |
| | | { |
| | | LocalizableMessage message = ERR_BACKUP_CONFIG_ENTRY_NULL.get(); |
| | | throw new ConfigException(message); |
| | | throw new ConfigException(ERR_BACKEND_CONFIG_ENTRY_NULL.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | | Reject.ifFalse(config instanceof BackupBackendCfg); |
| | | |
| | | currentConfig = (BackupBackendCfg)config; |
| | | currentConfig = config; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void initializeBackend() |
| | | throws ConfigException, InitializationException |
| | | { |
| | |
| | | logger.traceException(e); |
| | | |
| | | LocalizableMessage message = |
| | | ERR_BACKUP_CANNOT_DECODE_BACKUP_ROOT_DN.get(getExceptionMessage(e)); |
| | | ERR_BACKEND_CANNOT_DECODE_BACKEND_ROOT_DN.get(getExceptionMessage(e), getBackendID()); |
| | | throw new InitializationException(message, e); |
| | | } |
| | | |
| | |
| | | backupBaseEntry = new Entry(backupBaseDN, objectClasses, userAttrs, |
| | | opAttrs); |
| | | |
| | | |
| | | // Define an empty sets for the supported controls and features. |
| | | supportedControls = new HashSet<String>(0); |
| | | supportedFeatures = new HashSet<String>(0); |
| | | |
| | | |
| | | // Register this as a change listener. |
| | | currentConfig.addBackupChangeListener(this); |
| | | |
| | | |
| | | // Register the backup base as a private suffix. |
| | | try |
| | | { |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void finalizeBackend() |
| | | { |
| | | currentConfig.removeBackupChangeListener(this); |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public DN[] getBaseDNs() |
| | | { |
| | | return baseDNs; |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public long getEntryCount() |
| | | { |
| | | int numEntries = 1; |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isLocal() |
| | | { |
| | | // For the purposes of this method, this is a local backend. |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isIndexed(AttributeType attributeType, IndexType indexType) |
| | | { |
| | | // All searches in this backend will always be considered indexed. |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConditionResult hasSubordinates(DN entryDN) throws DirectoryException |
| | | { |
| | | long ret = numSubordinates(entryDN, false); |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public long numSubordinates(DN entryDN, boolean subtree) |
| | | throws DirectoryException |
| | | { |
| | |
| | | AttributeType t = |
| | | DirectoryServer.getAttributeType(ATTR_BACKUP_DIRECTORY_PATH, true); |
| | | List<Attribute> attrList = backupDirEntry.getAttribute(t); |
| | | if ((attrList != null) && (! attrList.isEmpty())) |
| | | if (attrList != null && !attrList.isEmpty()) |
| | | { |
| | | for (ByteString v : attrList.get(0)) |
| | | { |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Entry getEntry(DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | | // If the requested entry was null, then throw an exception. |
| | | if (entryDN == null) |
| | | { |
| | | LocalizableMessage message = ERR_BACKUP_GET_ENTRY_NULL.get(); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message); |
| | | ERR_BACKEND_GET_ENTRY_NULL.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | |
| | | userAttrs.put(t, attrList); |
| | | |
| | | HashSet<String> dependencies = backupInfo.getDependencies(); |
| | | if ((dependencies != null) && (!dependencies.isEmpty())) { |
| | | if (dependencies != null && !dependencies.isEmpty()) { |
| | | t = DirectoryServer.getAttributeType(ATTR_BACKUP_DEPENDENCY, true); |
| | | AttributeBuilder builder = new AttributeBuilder(t); |
| | | for (String s : dependencies) { |
| | |
| | | } |
| | | |
| | | HashMap<String, String> properties = backupInfo.getBackupProperties(); |
| | | if ((properties != null) && (!properties.isEmpty())) { |
| | | if (properties != null && !properties.isEmpty()) { |
| | | for (Map.Entry<String, String> e : properties.entrySet()) { |
| | | t = DirectoryServer.getAttributeType(toLowerCase(e.getKey()), true); |
| | | attrList = new ArrayList<Attribute>(1); |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void addEntry(Entry entry, AddOperation addOperation) |
| | | throws DirectoryException |
| | | { |
| | | LocalizableMessage message = ERR_BACKUP_ADD_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_ADD_NOT_SUPPORTED.get(entry.getName(), getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void deleteEntry(DN entryDN, DeleteOperation deleteOperation) |
| | | throws DirectoryException |
| | | { |
| | | LocalizableMessage message = ERR_BACKUP_DELETE_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_DELETE_NOT_SUPPORTED.get(entryDN, getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void replaceEntry(Entry oldEntry, Entry newEntry, |
| | | ModifyOperation modifyOperation) throws DirectoryException |
| | | { |
| | | LocalizableMessage message = ERR_BACKUP_MODIFY_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_MODIFY_NOT_SUPPORTED.get(oldEntry.getName(), getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void renameEntry(DN currentDN, Entry entry, |
| | | ModifyDNOperation modifyDNOperation) |
| | | throws DirectoryException |
| | | { |
| | | LocalizableMessage message = ERR_BACKUP_MODIFY_DN_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_MODIFY_DN_NOT_SUPPORTED.get(currentDN, getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void search(SearchOperation searchOperation) |
| | | throws DirectoryException |
| | | { |
| | |
| | | SearchFilter filter = searchOperation.getFilter(); |
| | | if (backupBaseDN.equals(baseDN)) |
| | | { |
| | | if ((scope == SearchScope.BASE_OBJECT) || |
| | | (scope == SearchScope.WHOLE_SUBTREE)) |
| | | if ((scope == SearchScope.BASE_OBJECT || scope == SearchScope.WHOLE_SUBTREE) |
| | | && filter.matchesEntry(baseEntry)) |
| | | { |
| | | if (filter.matchesEntry(baseEntry)) |
| | | { |
| | | searchOperation.returnEntry(baseEntry, null); |
| | | } |
| | | searchOperation.returnEntry(baseEntry, null); |
| | | } |
| | | |
| | | if ((scope != SearchScope.BASE_OBJECT) && (! backupDirectories.isEmpty())) |
| | | if (scope != SearchScope.BASE_OBJECT && !backupDirectories.isEmpty()) |
| | | { |
| | | AttributeType backupPathType = |
| | | DirectoryServer.getAttributeType(ATTR_BACKUP_DIRECTORY_PATH, true); |
| | |
| | | { |
| | | List<Attribute> attrList = |
| | | backupDirEntry.getAttribute(backupPathType); |
| | | if ((attrList != null) && (! attrList.isEmpty())) |
| | | if (attrList != null && !attrList.isEmpty()) |
| | | { |
| | | for (ByteString v : attrList.get(0)) |
| | | { |
| | |
| | | { |
| | | Entry backupDirEntry = getBackupDirectoryEntry(baseDN); |
| | | |
| | | if ((scope == SearchScope.BASE_OBJECT) || |
| | | (scope == SearchScope.WHOLE_SUBTREE)) |
| | | if ((scope == SearchScope.BASE_OBJECT || scope == SearchScope.WHOLE_SUBTREE) |
| | | && filter.matchesEntry(backupDirEntry)) |
| | | { |
| | | if (filter.matchesEntry(backupDirEntry)) |
| | | { |
| | | searchOperation.returnEntry(backupDirEntry, null); |
| | | } |
| | | searchOperation.returnEntry(backupDirEntry, null); |
| | | } |
| | | |
| | | |
| | |
| | | AttributeType t = |
| | | DirectoryServer.getAttributeType(ATTR_BACKUP_DIRECTORY_PATH, true); |
| | | List<Attribute> attrList = backupDirEntry.getAttribute(t); |
| | | if ((attrList != null) && (! attrList.isEmpty())) |
| | | if (attrList != null && !attrList.isEmpty()) |
| | | { |
| | | for (ByteString v : attrList.get(0)) |
| | | { |
| | |
| | | } |
| | | else |
| | | { |
| | | if ((parentDN == null) |
| | | || (! backupBaseDN.equals(parentDN.getParentDNInSuffix()))) |
| | | if (parentDN == null |
| | | || !backupBaseDN.equals(parentDN.getParentDNInSuffix())) |
| | | { |
| | | LocalizableMessage message = ERR_BACKUP_NO_SUCH_ENTRY.get(backupBaseDN); |
| | | throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message); |
| | | } |
| | | |
| | | if ((scope == SearchScope.BASE_OBJECT) || |
| | | (scope == SearchScope.WHOLE_SUBTREE)) |
| | | if (scope == SearchScope.BASE_OBJECT || |
| | | scope == SearchScope.WHOLE_SUBTREE) |
| | | { |
| | | Entry backupEntry = getBackupEntry(baseDN); |
| | | if (backupEntry == null) |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public HashSet<String> getSupportedControls() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedControls() |
| | | { |
| | | return supportedControls; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public HashSet<String> getSupportedFeatures() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedFeatures() |
| | | { |
| | | return supportedFeatures; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFExport() |
| | | { |
| | | // We do not support LDIF exports. |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void exportLDIF(LDIFExportConfig exportConfig) |
| | | throws DirectoryException |
| | | { |
| | | LocalizableMessage message = ERR_BACKUP_EXPORT_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_IMPORT_AND_EXPORT_NOT_SUPPORTED.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFImport() |
| | | { |
| | | // This backend does not support LDIF imports. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public LDIFImportResult importLDIF(LDIFImportConfig importConfig) |
| | | throws DirectoryException |
| | | { |
| | | // This backend does not support LDIF imports. |
| | | LocalizableMessage message = ERR_BACKUP_IMPORT_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_IMPORT_AND_EXPORT_NOT_SUPPORTED.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup() |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup(BackupConfig backupConfig, |
| | | StringBuilder unsupportedReason) |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void createBackup(BackupConfig backupConfig) |
| | | throws DirectoryException |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | LocalizableMessage message = ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void removeBackup(BackupDirectory backupDirectory, |
| | | String backupID) |
| | | throws DirectoryException |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | LocalizableMessage message = ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsRestore() |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void restoreBackup(RestoreConfig restoreConfig) |
| | | throws DirectoryException |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | LocalizableMessage message = ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isConfigurationChangeAcceptable( |
| | | BackupBackendCfg cfg, List<LocalizableMessage> unacceptableReasons) |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConfigChangeResult applyConfigurationChange(BackupBackendCfg cfg) |
| | | { |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void preloadEntryCache() throws UnsupportedOperationException { |
| | | throw new UnsupportedOperationException("Operation not supported."); |
| | |
| | | import org.forgerock.i18n.slf4j.LocalizedLogger; |
| | | import org.forgerock.opendj.ldap.ConditionResult; |
| | | import org.forgerock.opendj.ldap.SearchScope; |
| | | import org.forgerock.util.Reject; |
| | | import org.opends.server.admin.Configuration; |
| | | import org.opends.server.admin.server.ConfigurationChangeListener; |
| | | import org.opends.server.admin.std.server.LDIFBackendCfg; |
| | | import org.opends.server.api.AlertGenerator; |
| | |
| | | * re-written on disk. |
| | | */ |
| | | public class LDIFBackend |
| | | extends Backend |
| | | extends Backend<LDIFBackendCfg> |
| | | implements ConfigurationChangeListener<LDIFBackendCfg>, AlertGenerator |
| | | { |
| | | private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); |
| | |
| | | private Set<DN> baseDNSet; |
| | | |
| | | /** The set of supported controls for this backend. */ |
| | | private Set<String> supportedControls; |
| | | |
| | | /** The set of supported features for this backend. */ |
| | | private Set<String> supportedFeatures; |
| | | private final Set<String> supportedControls = |
| | | Collections.singleton(OID_SUBTREE_DELETE_CONTROL); |
| | | |
| | | /** The current configuration for this backend. */ |
| | | private LDIFBackendCfg currentConfig; |
| | |
| | | backendLock = new ReentrantReadWriteLock(useFairLocking); |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void initializeBackend() |
| | | throws ConfigException, InitializationException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void finalizeBackend() |
| | | { |
| | | backendLock.writeLock().lock(); |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public DN[] getBaseDNs() |
| | | { |
| | | return baseDNs; |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public long getEntryCount() |
| | | { |
| | | backendLock.readLock().lock(); |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public boolean isLocal() |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public boolean isIndexed(AttributeType attributeType, IndexType indexType) |
| | | { |
| | | // All searches in this backend will always be considered indexed. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public ConditionResult hasSubordinates(DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public long numSubordinates(DN entryDN, boolean subtree) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public Entry getEntry(DN entryDN) |
| | | { |
| | | backendLock.readLock().lock(); |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public boolean entryExists(DN entryDN) |
| | | { |
| | | backendLock.readLock().lock(); |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void addEntry(Entry entry, AddOperation addOperation) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void deleteEntry(DN entryDN, DeleteOperation deleteOperation) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void replaceEntry(Entry oldEntry, Entry newEntry, |
| | | ModifyOperation modifyOperation) throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void renameEntry(DN currentDN, Entry entry, |
| | | ModifyDNOperation modifyDNOperation) |
| | | throws DirectoryException |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void search(SearchOperation searchOperation) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public Set<String> getSupportedControls() |
| | | { |
| | | return supportedControls; |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public Set<String> getSupportedFeatures() |
| | | { |
| | | return supportedFeatures; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public boolean supportsLDIFExport() |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void exportLDIF(LDIFExportConfig exportConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public boolean supportsLDIFImport() |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public LDIFImportResult importLDIF(LDIFImportConfig importConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public boolean supportsBackup() |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public boolean supportsBackup(BackupConfig backupConfig, |
| | | StringBuilder unsupportedReason) |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void createBackup(BackupConfig backupConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void removeBackup(BackupDirectory backupDirectory, String backupID) |
| | | throws DirectoryException |
| | | { |
| | |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public boolean supportsRestore() |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void restoreBackup(RestoreConfig restoreConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | public void configureBackend(Configuration config) |
| | | throws ConfigException |
| | | @Override |
| | | public void configureBackend(LDIFBackendCfg config) throws ConfigException |
| | | { |
| | | if (config != null) |
| | | { |
| | | Reject.ifFalse(config instanceof LDIFBackendCfg); |
| | | currentConfig = (LDIFBackendCfg) config; |
| | | currentConfig = config; |
| | | currentConfig.addLDIFChangeListener(this); |
| | | |
| | | baseDNs = new DN[currentConfig.getBaseDN().size()]; |
| | |
| | | baseDNSet = new HashSet<DN>(); |
| | | Collections.addAll(baseDNSet, baseDNs); |
| | | |
| | | supportedControls = new HashSet<String>(1); |
| | | supportedControls.add(OID_SUBTREE_DELETE_CONTROL); |
| | | |
| | | supportedFeatures = new HashSet<String>(0); |
| | | |
| | | ldifFilePath = currentConfig.getLDIFFile(); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isConfigurationChangeAcceptable(LDIFBackendCfg configuration, |
| | |
| | | return configAcceptable; |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConfigChangeResult applyConfigurationChange( |
| | |
| | | messages); |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public DN getComponentEntryDN() |
| | |
| | | return currentConfig.dn(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public String getClassName() |
| | |
| | | return LDIFBackend.class.getName(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Map<String,String> getAlerts() |
| | |
| | | return alerts; |
| | | } |
| | | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void preloadEntryCache() throws UnsupportedOperationException { |
| | |
| | | */ |
| | | package org.opends.server.backends; |
| | | |
| | | |
| | | |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.HashSet; |
| | | import java.util.LinkedHashMap; |
| | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.forgerock.i18n.slf4j.LocalizedLogger; |
| | | import org.forgerock.opendj.ldap.ConditionResult; |
| | | import org.forgerock.util.Reject; |
| | | import org.opends.server.admin.Configuration; |
| | | import org.opends.server.admin.std.server.MemoryBackendCfg; |
| | | import org.opends.server.api.Backend; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | |
| | | import static org.opends.server.util.ServerConstants.*; |
| | | import static org.opends.server.util.StaticUtils.*; |
| | | |
| | | |
| | | |
| | | /** |
| | | * This class defines a very simple backend that stores its information in |
| | | * memory. This is primarily intended for testing purposes with small data |
| | |
| | | * entry has any children (which must not be the case for delete operations). |
| | | */ |
| | | public class MemoryBackend |
| | | extends Backend |
| | | extends Backend<MemoryBackendCfg> |
| | | { |
| | | private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); |
| | | |
| | | |
| | | |
| | | // The base DNs for this backend. |
| | | /** The base DNs for this backend. */ |
| | | private DN[] baseDNs; |
| | | |
| | | // The mapping between parent DNs and their immediate children. |
| | | /** The mapping between parent DNs and their immediate children. */ |
| | | private HashMap<DN,HashSet<DN>> childDNs; |
| | | |
| | | // The base DNs for this backend, in a hash set. |
| | | /** The base DNs for this backend, in a hash set. */ |
| | | private HashSet<DN> baseDNSet; |
| | | |
| | | // The set of supported controls for this backend. |
| | | private HashSet<String> supportedControls; |
| | | /** The set of supported controls for this backend. */ |
| | | private final Set<String> supportedControls = |
| | | Collections.singleton(OID_SUBTREE_DELETE_CONTROL); |
| | | |
| | | // The set of supported features for this backend. |
| | | private HashSet<String> supportedFeatures; |
| | | |
| | | // The mapping between entry DNs and the corresponding entries. |
| | | /** The mapping between entry DNs and the corresponding entries. */ |
| | | private LinkedHashMap<DN,Entry> entryMap; |
| | | |
| | | |
| | |
| | | this.baseDNs = baseDNs; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public void configureBackend(Configuration config) |
| | | throws ConfigException |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void configureBackend(MemoryBackendCfg config) throws ConfigException |
| | | { |
| | | if (config != null) |
| | | { |
| | | Reject.ifFalse(config instanceof MemoryBackendCfg); |
| | | MemoryBackendCfg cfg = (MemoryBackendCfg)config; |
| | | MemoryBackendCfg cfg = config; |
| | | DN[] baseDNs = new DN[cfg.getBaseDN().size()]; |
| | | cfg.getBaseDN().toArray(baseDNs); |
| | | setBaseDNs(baseDNs); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public synchronized void initializeBackend() |
| | | throws ConfigException, InitializationException |
| | | { |
| | |
| | | // implementation. If we were to add such support in the future, we would |
| | | // likely want to separate the data for each base DN into a separate entry |
| | | // map. |
| | | if ((baseDNs == null) || (baseDNs.length != 1)) |
| | | if (baseDNs == null || baseDNs.length != 1) |
| | | { |
| | | LocalizableMessage message = ERR_MEMORYBACKEND_REQUIRE_EXACTLY_ONE_BASE.get(); |
| | | throw new ConfigException(message); |
| | |
| | | entryMap = new LinkedHashMap<DN,Entry>(); |
| | | childDNs = new HashMap<DN,HashSet<DN>>(); |
| | | |
| | | supportedControls = new HashSet<String>(); |
| | | supportedControls.add(OID_SUBTREE_DELETE_CONTROL); |
| | | |
| | | supportedFeatures = new HashSet<String>(); |
| | | |
| | | for (DN dn : baseDNs) |
| | | { |
| | | try |
| | |
| | | childDNs.clear(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public synchronized void finalizeBackend() |
| | | { |
| | | clearMemoryBackend(); |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public DN[] getBaseDNs() |
| | | { |
| | | return baseDNs; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public synchronized long getEntryCount() |
| | | { |
| | | if (entryMap != null) |
| | |
| | | return -1; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isLocal() |
| | | { |
| | | // For the purposes of this method, this is a local backend. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isIndexed(AttributeType attributeType, IndexType indexType) |
| | | { |
| | | // All searches in this backend will always be considered indexed. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public synchronized ConditionResult hasSubordinates(DN entryDN) |
| | | throws DirectoryException |
| | |
| | | return ConditionResult.valueOf(ret != 0); |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public synchronized long numSubordinates(DN entryDN, boolean subtree) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public synchronized Entry getEntry(DN entryDN) |
| | | { |
| | | Entry entry = entryMap.get(entryDN); |
| | |
| | | return entry; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public synchronized boolean entryExists(DN entryDN) |
| | | { |
| | | return entryMap.containsKey(entryDN); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public synchronized void addEntry(Entry entry, AddOperation addOperation) |
| | | throws DirectoryException |
| | | { |
| | |
| | | children.add(entryDN); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public synchronized void deleteEntry(DN entryDN, |
| | | DeleteOperation deleteOperation) |
| | | throws DirectoryException |
| | |
| | | if (! entryMap.containsKey(entryDN)) |
| | | { |
| | | throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST.get(entryDN)); |
| | | ERR_BACKEND_ENTRY_DOESNT_EXIST.get(entryDN, getBackendID())); |
| | | } |
| | | |
| | | |
| | | // Check to see if the entry contains a subtree delete control. |
| | | boolean subtreeDelete = false; |
| | | |
| | | if (deleteOperation != null |
| | | && deleteOperation |
| | | .getRequestControl(SubtreeDeleteControl.DECODER) != null) |
| | | { |
| | | subtreeDelete = true; |
| | | } |
| | | boolean subtreeDelete = deleteOperation != null |
| | | && deleteOperation.getRequestControl(SubtreeDeleteControl.DECODER) != null; |
| | | |
| | | HashSet<DN> children = childDNs.get(entryDN); |
| | | if (subtreeDelete) |
| | |
| | | { |
| | | // Make sure the entry doesn't have any children. If it does, then throw |
| | | // an exception. |
| | | if ((children != null) && (! children.isEmpty())) |
| | | if (children != null && !children.isEmpty()) |
| | | { |
| | | throw new DirectoryException(ResultCode.NOT_ALLOWED_ON_NONLEAF, |
| | | ERR_MEMORYBACKEND_CANNOT_DELETE_ENTRY_WITH_CHILDREN.get(entryDN)); |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public synchronized void replaceEntry(Entry oldEntry, Entry newEntry, |
| | | ModifyOperation modifyOperation) throws DirectoryException |
| | | { |
| | |
| | | if (! entryMap.containsKey(entryDN)) |
| | | { |
| | | throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST.get(entryDN)); |
| | | ERR_BACKEND_ENTRY_DOESNT_EXIST.get(entryDN, getBackendID())); |
| | | } |
| | | |
| | | |
| | |
| | | entryMap.put(entryDN, e); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public synchronized void renameEntry(DN currentDN, Entry entry, |
| | | ModifyDNOperation modifyDNOperation) |
| | | throws DirectoryException |
| | |
| | | if (! entryMap.containsKey(currentDN)) |
| | | { |
| | | throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, |
| | | ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST.get(currentDN)); |
| | | ERR_BACKEND_ENTRY_DOESNT_EXIST.get(currentDN, getBackendID())); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | // Make sure that the parent of the new entry exists. |
| | | DN parentDN = e.getName().getParentDNInSuffix(); |
| | | if ((parentDN == null) || (! entryMap.containsKey(parentDN))) |
| | | if (parentDN == null || !entryMap.containsKey(parentDN)) |
| | | { |
| | | throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, |
| | | ERR_MEMORYBACKEND_RENAME_PARENT_DOESNT_EXIST.get(currentDN, parentDN)); |
| | |
| | | addEntry(e, null); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public synchronized void search(SearchOperation searchOperation) |
| | | throws DirectoryException |
| | | { |
| | |
| | | |
| | | // Make sure the base entry exists if it's supposed to be in this backend. |
| | | Entry baseEntry = entryMap.get(baseDN); |
| | | if ((baseEntry == null) && handlesEntry(baseDN)) |
| | | if (baseEntry == null && handlesEntry(baseDN)) |
| | | { |
| | | DN matchedDN = baseDN.getParentDNInSuffix(); |
| | | while (matchedDN != null) |
| | |
| | | matchedDN = matchedDN.getParentDNInSuffix(); |
| | | } |
| | | |
| | | LocalizableMessage message = ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST.get(baseDN); |
| | | LocalizableMessage message = |
| | | ERR_BACKEND_ENTRY_DOESNT_EXIST.get(baseDN, getBackendID()); |
| | | throw new DirectoryException( |
| | | ResultCode.NO_SUCH_OBJECT, message, matchedDN, null); |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public HashSet<String> getSupportedControls() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedControls() |
| | | { |
| | | return supportedControls; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public HashSet<String> getSupportedFeatures() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedFeatures() |
| | | { |
| | | return supportedFeatures; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFExport() |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public synchronized void exportLDIF(LDIFExportConfig exportConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | finally |
| | | { |
| | | try |
| | | { |
| | | ldifWriter.close(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | logger.traceException(e); |
| | | } |
| | | close(ldifWriter); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFImport() |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public synchronized LDIFImportResult importLDIF(LDIFImportConfig importConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup() |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup(BackupConfig backupConfig, |
| | | StringBuilder unsupportedReason) |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void createBackup(BackupConfig backupConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void removeBackup(BackupDirectory backupDirectory, |
| | | String backupID) |
| | | throws DirectoryException |
| | |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsRestore() |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void restoreBackup(RestoreConfig restoreConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void preloadEntryCache() throws UnsupportedOperationException { |
| | | throw new UnsupportedOperationException("Operation not supported."); |
| | |
| | | * |
| | | * |
| | | * Copyright 2006-2010 Sun Microsystems, Inc. |
| | | * Portions Copyright 2012-2014 ForgeRock AS. |
| | | * Portions copyright 2012-2014 ForgeRock AS. |
| | | */ |
| | | package org.opends.server.backends; |
| | | |
| | |
| | | import org.forgerock.opendj.ldap.ConditionResult; |
| | | import org.forgerock.opendj.ldap.SearchScope; |
| | | import org.forgerock.util.Reject; |
| | | import org.opends.server.admin.Configuration; |
| | | import org.opends.server.admin.server.ConfigurationChangeListener; |
| | | import org.opends.server.admin.std.server.MonitorBackendCfg; |
| | | import org.opends.server.api.Backend; |
| | |
| | | * requested monitor and dynamically generate the associated entry. It will also |
| | | * construct a base monitor entry with some useful server-wide data. |
| | | */ |
| | | public class MonitorBackend extends Backend implements |
| | | public class MonitorBackend extends Backend<MonitorBackendCfg> implements |
| | | ConfigurationChangeListener<MonitorBackendCfg> |
| | | { |
| | | private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); |
| | | |
| | | // The set of user-defined attributes that will be included in the base |
| | | // monitor entry. |
| | | /** The set of user-defined attributes that will be included in the base |
| | | * monitor entry. |
| | | */ |
| | | private ArrayList<Attribute> userDefinedAttributes; |
| | | |
| | | // The set of objectclasses that will be used in monitor entries. |
| | | /** The set of objectclasses that will be used in monitor entries. */ |
| | | private HashMap<ObjectClass, String> monitorObjectClasses; |
| | | |
| | | // The DN of the configuration entry for this backend. |
| | | /** The DN of the configuration entry for this backend. */ |
| | | private DN configEntryDN; |
| | | |
| | | // The current configuration state. |
| | | /** The current configuration state. */ |
| | | private MonitorBackendCfg currentConfig; |
| | | |
| | | // The DN for the base monitor entry. |
| | | /** The DN for the base monitor entry. */ |
| | | private DN baseMonitorDN; |
| | | |
| | | // The set of base DNs for this backend. |
| | | /** The set of base DNs for this backend. */ |
| | | private DN[] baseDNs; |
| | | |
| | | // The set of supported controls for this backend. |
| | | private HashSet<String> supportedControls; |
| | | |
| | | // The set of supported features for this backend. |
| | | private HashSet<String> supportedFeatures; |
| | | |
| | | |
| | | |
| | | /** |
| | | * Creates a new backend with the provided information. All backend |
| | | * implementations must implement a default constructor that use |
| | |
| | | super(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void addEntry(final Entry entry, final AddOperation addOperation) |
| | | throws DirectoryException |
| | | { |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_MONITOR_ADD_NOT_SUPPORTED.get(entry.getName())); |
| | | ERR_BACKEND_ADD_NOT_SUPPORTED.get(entry.getName(), getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConfigChangeResult applyConfigurationChange( |
| | | final MonitorBackendCfg backendCfg) |
| | |
| | | return new ConfigChangeResult(resultCode, adminActionRequired, messages); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public void configureBackend(final Configuration config) |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void configureBackend(final MonitorBackendCfg config) |
| | | throws ConfigException |
| | | { |
| | | Reject.ifNull(config); |
| | | Reject.ifFalse(config instanceof MonitorBackendCfg); |
| | | |
| | | final MonitorBackendCfg cfg = (MonitorBackendCfg) config; |
| | | final MonitorBackendCfg cfg = config; |
| | | final ConfigEntry configEntry = DirectoryServer.getConfigEntry(cfg.dn()); |
| | | |
| | | // Make sure that a configuration entry was provided. If not, then we will |
| | |
| | | OC_MONITOR_ENTRY, true); |
| | | monitorObjectClasses.put(monitorOC, OC_MONITOR_ENTRY); |
| | | |
| | | // Define an empty sets for the supported controls and features. |
| | | supportedControls = new HashSet<String>(0); |
| | | supportedFeatures = new HashSet<String>(0); |
| | | |
| | | // Create the set of base DNs that we will handle. In this case, it's just |
| | | // the DN of the base monitor entry. |
| | | try |
| | |
| | | currentConfig = cfg; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void createBackup(final BackupConfig backupConfig) |
| | | throws DirectoryException |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | final LocalizableMessage message = ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void deleteEntry(final DN entryDN, |
| | | final DeleteOperation deleteOperation) throws DirectoryException |
| | | { |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_MONITOR_DELETE_NOT_SUPPORTED.get(entryDN)); |
| | | ERR_BACKEND_DELETE_NOT_SUPPORTED.get(entryDN, getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean entryExists(final DN entryDN) throws DirectoryException |
| | | { |
| | | return getDIT().containsKey(entryDN); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void exportLDIF(final LDIFExportConfig exportConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | { |
| | | logger.traceException(e); |
| | | |
| | | try |
| | | { |
| | | ldifWriter.close(); |
| | | } |
| | | catch (final Exception e2) |
| | | { |
| | | logger.traceException(e2); |
| | | } |
| | | close(ldifWriter); |
| | | |
| | | final LocalizableMessage message = ERR_MONITOR_UNABLE_TO_EXPORT_BASE |
| | | .get(stackTraceToSingleLineString(e)); |
| | |
| | | { |
| | | logger.traceException(e); |
| | | |
| | | try |
| | | { |
| | | ldifWriter.close(); |
| | | } |
| | | catch (final Exception e2) |
| | | { |
| | | logger.traceException(e2); |
| | | } |
| | | close(ldifWriter); |
| | | |
| | | final LocalizableMessage message = ERR_MONITOR_UNABLE_TO_EXPORT_PROVIDER_ENTRY |
| | | .get(monitorProvider.getMonitorInstanceName(), |
| | |
| | | } |
| | | } |
| | | |
| | | // Close the monitor provider and return. |
| | | try |
| | | { |
| | | ldifWriter.close(); |
| | | } |
| | | catch (final Exception e) |
| | | { |
| | | logger.traceException(e); |
| | | } |
| | | close(ldifWriter); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void finalizeBackend() |
| | | { |
| | | currentConfig.removeMonitorChangeListener(this); |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public DN[] getBaseDNs() |
| | | { |
| | | return baseDNs; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Entry getEntry(final DN entryDN) throws DirectoryException |
| | | { |
| | | // If the requested entry was null, then throw an exception. |
| | | if (entryDN == null) |
| | | { |
| | | final LocalizableMessage message = ERR_MONITOR_GET_ENTRY_NULL.get(); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message); |
| | | ERR_BACKEND_GET_ENTRY_NULL.get(getBackendID())); |
| | | } |
| | | |
| | | // If the requested entry was the monitor base entry, then retrieve it |
| | |
| | | return getEntry(entryDN, dit); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public long getEntryCount() |
| | | { |
| | | return getDIT().size(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public HashSet<String> getSupportedControls() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedControls() |
| | | { |
| | | return supportedControls; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public HashSet<String> getSupportedFeatures() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedFeatures() |
| | | { |
| | | return supportedFeatures; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConditionResult hasSubordinates(final DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | |
| | | return ConditionResult.UNDEFINED; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public LDIFImportResult importLDIF(final LDIFImportConfig importConfig) |
| | | throws DirectoryException |
| | | { |
| | | // This backend does not support LDIF imports. |
| | | final LocalizableMessage message = ERR_MONITOR_IMPORT_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_IMPORT_NOT_SUPPORTED.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void initializeBackend() throws ConfigException, |
| | | InitializationException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isConfigurationChangeAcceptable( |
| | | final MonitorBackendCfg backendCfg, |
| | |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isIndexed(final AttributeType attributeType, |
| | | final IndexType indexType) |
| | | { |
| | |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isLocal() |
| | | { |
| | | // For the purposes of this method, this is a local backend. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public long numSubordinates(final DN entryDN, final boolean subtree) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void preloadEntryCache() throws UnsupportedOperationException |
| | | { |
| | | throw new UnsupportedOperationException("Operation not supported."); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void removeBackup(final BackupDirectory backupDirectory, |
| | | final String backupID) throws DirectoryException |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | final LocalizableMessage message = ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void renameEntry(final DN currentDN, final Entry entry, |
| | | final ModifyDNOperation modifyDNOperation) throws DirectoryException |
| | | { |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_MONITOR_MODIFY_DN_NOT_SUPPORTED.get(currentDN)); |
| | | ERR_BACKEND_MODIFY_DN_NOT_SUPPORTED.get(currentDN, getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void replaceEntry(final Entry oldEntry, final Entry newEntry, |
| | | final ModifyOperation modifyOperation) throws DirectoryException |
| | | { |
| | |
| | | ERR_MONITOR_MODIFY_NOT_SUPPORTED.get(newEntry.getName(), configEntryDN)); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void restoreBackup(final RestoreConfig restoreConfig) |
| | | throws DirectoryException |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | final LocalizableMessage message = ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void search(final SearchOperation searchOperation) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | matchedDN = matchedDN.parent(); |
| | | } |
| | | final LocalizableMessage message = ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST.get(baseDN); |
| | | final LocalizableMessage message = ERR_BACKEND_ENTRY_DOESNT_EXIST.get(baseDN, getBackendID()); |
| | | throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, |
| | | matchedDN, null); |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup() |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup(final BackupConfig backupConfig, |
| | | final StringBuilder unsupportedReason) |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFExport() |
| | | { |
| | | // We can export all the monitor entries as a point-in-time snapshot. |
| | |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFImport() |
| | | { |
| | | // This backend does not support LDIF imports. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsRestore() |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | |
| | | monitorUserAttrs.put(currentTimeAttr.getAttributeType(), currentTimeList); |
| | | |
| | | // Add the uptime as a human-readable string. |
| | | long upSeconds = ((System.currentTimeMillis() - DirectoryServer |
| | | .getStartTime()) / 1000); |
| | | final long upDays = (upSeconds / 86400); |
| | | long upSeconds = (System.currentTimeMillis() - DirectoryServer.getStartTime()) / 1000; |
| | | final long upDays = upSeconds / 86400; |
| | | upSeconds %= 86400; |
| | | final long upHours = (upSeconds / 3600); |
| | | final long upHours = upSeconds / 3600; |
| | | upSeconds %= 3600; |
| | | final long upMinutes = (upSeconds / 60); |
| | | final long upMinutes = upSeconds / 60; |
| | | upSeconds %= 60; |
| | | final LocalizableMessage upTimeStr = INFO_MONITOR_UPTIME.get(upDays, upHours, |
| | | upMinutes, upSeconds); |
| | |
| | | private boolean isMonitorConfigAttribute(final Attribute attribute) |
| | | { |
| | | final AttributeType attrType = attribute.getAttributeType(); |
| | | if (attrType.hasName(ATTR_COMMON_NAME) |
| | | return attrType.hasName(ATTR_COMMON_NAME) |
| | | || attrType.hasName(ATTR_BACKEND_ENABLED.toLowerCase()) |
| | | || attrType.hasName(ATTR_BACKEND_CLASS.toLowerCase()) |
| | | || attrType.hasName(ATTR_BACKEND_BASE_DN.toLowerCase()) |
| | | || attrType.hasName(ATTR_BACKEND_ID.toLowerCase()) |
| | | || attrType.hasName(ATTR_BACKEND_WRITABILITY_MODE.toLowerCase())) |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | return false; |
| | | || attrType.hasName(ATTR_BACKEND_WRITABILITY_MODE.toLowerCase()); |
| | | } |
| | | |
| | | } |
| | |
| | | */ |
| | | package org.opends.server.backends; |
| | | |
| | | |
| | | |
| | | import java.util.Arrays; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.HashSet; |
| | | |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.opends.server.admin.Configuration; |
| | | import org.opends.server.admin.std.server.BackendCfg; |
| | | import org.opends.server.api.Backend; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | |
| | | import org.opends.server.util.LDIFException; |
| | | import org.opends.server.util.LDIFReader; |
| | | import org.opends.server.util.LDIFWriter; |
| | | import org.forgerock.util.Reject; |
| | | |
| | | import static org.opends.messages.BackendMessages.*; |
| | | import static org.opends.server.util.ServerConstants.*; |
| | | import static org.opends.server.util.StaticUtils.*; |
| | | |
| | | |
| | | |
| | | /** |
| | | * This class implements /dev/null like backend for development and |
| | | * testing. The following behaviors of this backend implementation |
| | |
| | | * not represent a complete and stable API, should be considered private |
| | | * and subject to change without notice. |
| | | */ |
| | | public class NullBackend extends Backend |
| | | public class NullBackend extends Backend<BackendCfg> |
| | | { |
| | | private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); |
| | | |
| | | |
| | | |
| | | // The base DNs for this backend. |
| | | /** The base DNs for this backend. */ |
| | | private DN[] baseDNs; |
| | | |
| | | // The base DNs for this backend, in a hash set. |
| | | /** The base DNs for this backend, in a hash set. */ |
| | | private HashSet<DN> baseDNSet; |
| | | |
| | | // The set of supported controls for this backend. |
| | | private HashSet<String> supportedControls; |
| | | /** The set of supported controls for this backend. */ |
| | | private final Set<String> supportedControls = new HashSet<String>(Arrays.asList( |
| | | OID_SUBTREE_DELETE_CONTROL, |
| | | OID_PAGED_RESULTS_CONTROL, |
| | | OID_MANAGE_DSAIT_CONTROL, |
| | | OID_SERVER_SIDE_SORT_REQUEST_CONTROL, |
| | | OID_VLV_REQUEST_CONTROL)); |
| | | |
| | | // The set of supported features for this backend. |
| | | private HashSet<String> supportedFeatures; |
| | | |
| | | // The map of null entry object classes. |
| | | /** The map of null entry object classes. */ |
| | | private Map<ObjectClass,String> objectClasses; |
| | | |
| | | |
| | |
| | | this.baseDNs = baseDNs; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public void configureBackend(Configuration config) |
| | | throws ConfigException |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void configureBackend(BackendCfg config) throws ConfigException |
| | | { |
| | | if (config != null) |
| | | { |
| | | Reject.ifFalse(config instanceof BackendCfg); |
| | | BackendCfg cfg = (BackendCfg)config; |
| | | BackendCfg cfg = config; |
| | | DN[] cfgBaseDNs = new DN[cfg.getBaseDN().size()]; |
| | | cfg.getBaseDN().toArray(cfgBaseDNs); |
| | | setBaseDNs(cfgBaseDNs); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public synchronized void initializeBackend() |
| | | throws ConfigException, InitializationException |
| | | { |
| | |
| | | baseDNSet.add(dn); |
| | | } |
| | | |
| | | // Add supported controls. |
| | | supportedControls = new HashSet<String>(); |
| | | supportedControls.add(OID_SUBTREE_DELETE_CONTROL); |
| | | supportedControls.add(OID_PAGED_RESULTS_CONTROL); |
| | | supportedControls.add(OID_MANAGE_DSAIT_CONTROL); |
| | | supportedControls.add(OID_SERVER_SIDE_SORT_REQUEST_CONTROL); |
| | | supportedControls.add(OID_VLV_REQUEST_CONTROL); |
| | | |
| | | // Add supported features. |
| | | supportedFeatures = new HashSet<String>(); |
| | | |
| | | // Register base DNs. |
| | | for (DN dn : baseDNs) |
| | | { |
| | |
| | | objectClasses.put(extOC, extOCName); |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public synchronized void finalizeBackend() |
| | | { |
| | | for (DN dn : baseDNs) |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public DN[] getBaseDNs() |
| | | { |
| | | return baseDNs; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public long getEntryCount() |
| | | { |
| | | return -1; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isLocal() |
| | | { |
| | | // For the purposes of this method, this is a local backend. |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isIndexed(AttributeType attributeType, IndexType indexType) |
| | | { |
| | | // All searches in this backend will always be considered indexed. |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConditionResult hasSubordinates(DN entryDN) |
| | | throws DirectoryException |
| | |
| | | return ConditionResult.UNDEFINED; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public long numSubordinates(DN entryDN, boolean subtree) |
| | | throws DirectoryException |
| | | { |
| | | return -1; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Entry getEntry(DN entryDN) |
| | | { |
| | | return new Entry(null, objectClasses, null, null); |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean entryExists(DN entryDN) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void addEntry(Entry entry, AddOperation addOperation) |
| | | throws DirectoryException |
| | | { |
| | | return; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void deleteEntry(DN entryDN, DeleteOperation deleteOperation) |
| | | throws DirectoryException |
| | | { |
| | | return; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void replaceEntry(Entry oldEntry, Entry newEntry, |
| | | ModifyOperation modifyOperation) throws DirectoryException |
| | | { |
| | | return; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void renameEntry(DN currentDN, Entry entry, |
| | | ModifyDNOperation modifyDNOperation) |
| | | throws DirectoryException |
| | |
| | | return; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void search(SearchOperation searchOperation) |
| | | throws DirectoryException |
| | | { |
| | |
| | | return; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public HashSet<String> getSupportedControls() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedControls() |
| | | { |
| | | return supportedControls; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public HashSet<String> getSupportedFeatures() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedFeatures() |
| | | { |
| | | return supportedFeatures; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFExport() |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void exportLDIF(LDIFExportConfig exportConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | message); |
| | | } |
| | | |
| | | try { |
| | | ldifWriter.close(); |
| | | } catch (Exception e) { |
| | | logger.traceException(e); |
| | | } |
| | | close(ldifWriter); |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFImport() |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public LDIFImportResult importLDIF(LDIFImportConfig importConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup() |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup(BackupConfig backupConfig, |
| | | StringBuilder unsupportedReason) |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void createBackup(BackupConfig backupConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void removeBackup(BackupDirectory backupDirectory, |
| | | String backupID) |
| | | throws DirectoryException |
| | |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsRestore() |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void restoreBackup(RestoreConfig restoreConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void preloadEntryCache() throws UnsupportedOperationException { |
| | | throw new UnsupportedOperationException("Operation not supported."); |
| | |
| | | import java.util.Collection; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.HashSet; |
| | | import java.util.LinkedList; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | |
| | | import org.forgerock.opendj.ldap.ConditionResult; |
| | | import org.forgerock.opendj.ldap.ResultCode; |
| | | import org.forgerock.util.Reject; |
| | | import org.opends.server.admin.Configuration; |
| | | import org.opends.server.admin.server.ConfigurationChangeListener; |
| | | import org.opends.server.admin.std.server.RootDSEBackendCfg; |
| | | import org.opends.server.api.Backend; |
| | |
| | | * with the other backends. |
| | | */ |
| | | public class RootDSEBackend |
| | | extends Backend |
| | | extends Backend<RootDSEBackendCfg> |
| | | implements ConfigurationChangeListener<RootDSEBackendCfg> |
| | | { |
| | | private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); |
| | | |
| | | |
| | | |
| | | // The set of standard "static" attributes that we will always include in the |
| | | // root DSE entry and won't change while the server is running. |
| | | /** |
| | | * The set of standard "static" attributes that we will always include in the |
| | | * root DSE entry and won't change while the server is running. |
| | | */ |
| | | private ArrayList<Attribute> staticDSEAttributes; |
| | | |
| | | // The set of user-defined attributes that will be included in the root DSE |
| | | // entry. |
| | | /** |
| | | * The set of user-defined attributes that will be included in the root DSE |
| | | * entry. |
| | | */ |
| | | private ArrayList<Attribute> userDefinedAttributes; |
| | | |
| | | // Indicates whether the attributes of the root DSE should always be treated |
| | | // as user attributes even if they are defined as operational in the schema. |
| | | /** |
| | | * Indicates whether the attributes of the root DSE should always be treated |
| | | * as user attributes even if they are defined as operational in the schema. |
| | | */ |
| | | private boolean showAllAttributes; |
| | | |
| | | // The set of subordinate base DNs and their associated backends that will be |
| | | // used for non-base searches. |
| | | /** |
| | | * The set of subordinate base DNs and their associated backends that will be |
| | | * used for non-base searches. |
| | | */ |
| | | private ConcurrentHashMap<DN,Backend> subordinateBaseDNs; |
| | | |
| | | // The set of objectclasses that will be used in the root DSE entry. |
| | | /** The set of objectclasses that will be used in the root DSE entry. */ |
| | | private HashMap<ObjectClass,String> dseObjectClasses; |
| | | |
| | | // The current configuration state. |
| | | /** The current configuration state. */ |
| | | private RootDSEBackendCfg currentConfig; |
| | | |
| | | // The DN of the configuration entry for this backend. |
| | | /** The DN of the configuration entry for this backend. */ |
| | | private DN configEntryDN; |
| | | |
| | | // The DN for the root DSE. |
| | | /** The DN for the root DSE. */ |
| | | private DN rootDSEDN; |
| | | |
| | | // The set of base DNs for this backend. |
| | | /** The set of base DNs for this backend. */ |
| | | private DN[] baseDNs; |
| | | |
| | | // The set of supported controls for this backend. |
| | | private HashSet<String> supportedControls; |
| | | |
| | | // The set of supported features for this backend. |
| | | private HashSet<String> supportedFeatures; |
| | | |
| | | |
| | | |
| | | /** |
| | |
| | | // Perform all initialization in initializeBackend. |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public void configureBackend(Configuration config) |
| | | throws ConfigException |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void configureBackend(RootDSEBackendCfg config) throws ConfigException |
| | | { |
| | | Reject.ifNull(config); |
| | | Reject.ifFalse(config instanceof RootDSEBackendCfg); |
| | | currentConfig = (RootDSEBackendCfg)config; |
| | | currentConfig = config; |
| | | configEntryDN = config.dn(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void initializeBackend() |
| | | throws ConfigException, InitializationException |
| | | { |
| | |
| | | // the root DSE. |
| | | staticDSEAttributes = new ArrayList<Attribute>(); |
| | | |
| | | staticDSEAttributes.add(createAttribute(ATTR_VENDOR_NAME, |
| | | ATTR_VENDOR_NAME_LC, |
| | | staticDSEAttributes.add(Attributes.create(ATTR_VENDOR_NAME, |
| | | SERVER_VENDOR_NAME)); |
| | | |
| | | staticDSEAttributes.add(createAttribute(ATTR_VENDOR_VERSION, |
| | | ATTR_VENDOR_VERSION_LC, |
| | | staticDSEAttributes.add(Attributes.create(ATTR_VENDOR_VERSION, |
| | | DirectoryServer.getVersionString())); |
| | | |
| | | staticDSEAttributes.add(createAttribute("fullVendorVersion", |
| | | "fullvendorversion", |
| | | staticDSEAttributes.add(Attributes.create("fullVendorVersion", |
| | | BuildVersion.binaryVersion().toString())); |
| | | |
| | | // Construct the set of objectclasses to include in the root DSE entry. |
| | |
| | | dseObjectClasses.put(rootDSEOC, OC_ROOT_DSE); |
| | | |
| | | |
| | | // Define an empty sets for the supported controls and features. |
| | | supportedControls = new HashSet<String>(0); |
| | | supportedFeatures = new HashSet<String>(0); |
| | | |
| | | |
| | | // Set the backend ID for this backend. The identifier needs to be |
| | | // specific enough to avoid conflict with user backend identifiers. |
| | | setBackendID("__root.dse__"); |
| | |
| | | currentConfig.addChangeListener(this); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void finalizeBackend() |
| | | { |
| | | currentConfig.removeChangeListener(this); |
| | |
| | | private boolean isDSEConfigAttribute(Attribute attribute) |
| | | { |
| | | AttributeType attrType = attribute.getAttributeType(); |
| | | if (attrType.hasName(ATTR_ROOT_DSE_SUBORDINATE_BASE_DN.toLowerCase()) || |
| | | attrType.hasName(ATTR_ROOTDSE_SHOW_ALL_ATTRIBUTES.toLowerCase()) || |
| | | attrType.hasName(ATTR_COMMON_NAME)) |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | return false; |
| | | return attrType.hasName(ATTR_ROOT_DSE_SUBORDINATE_BASE_DN.toLowerCase()) |
| | | || attrType.hasName(ATTR_ROOTDSE_SHOW_ALL_ATTRIBUTES.toLowerCase()) |
| | | || attrType.hasName(ATTR_COMMON_NAME); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public DN[] getBaseDNs() |
| | | { |
| | | return baseDNs; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public synchronized long getEntryCount() |
| | | { |
| | | // There is always just a single entry in this backend. |
| | | return 1; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isLocal() |
| | | { |
| | | // For the purposes of this method, this is a local backend. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isIndexed(AttributeType attributeType, IndexType indexType) |
| | | { |
| | | // All searches in this backend will always be considered indexed. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConditionResult hasSubordinates(DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | |
| | | return ConditionResult.valueOf(ret != 0); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public long numSubordinates(DN entryDN, boolean subtree) |
| | | throws DirectoryException |
| | | { |
| | |
| | | return count; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Entry getEntry(DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | | // If the requested entry was the root DSE, then create and return it. |
| | | if ((entryDN == null) || entryDN.isRootDN()) |
| | | if (entryDN == null || entryDN.isRootDN()) |
| | | { |
| | | return getRootDSE(); |
| | | } |
| | |
| | | |
| | | Attribute publicNamingContextAttr = createDNAttribute(ATTR_NAMING_CONTEXTS, |
| | | ATTR_NAMING_CONTEXTS_LC, namingContexts); |
| | | if (!publicNamingContextAttr.isEmpty()) |
| | | { |
| | | List<Attribute> publicNamingContextAttrs = new ArrayList<Attribute>(1); |
| | | publicNamingContextAttrs.add(publicNamingContextAttr); |
| | | if (showAllAttributes |
| | | || (!publicNamingContextAttr.getAttributeType().isOperational())) |
| | | { |
| | | dseUserAttrs.put(publicNamingContextAttr.getAttributeType(), |
| | | publicNamingContextAttrs); |
| | | } |
| | | else |
| | | { |
| | | dseOperationalAttrs.put(publicNamingContextAttr.getAttributeType(), |
| | | publicNamingContextAttrs); |
| | | } |
| | | } |
| | | addAttribute(publicNamingContextAttr, dseUserAttrs, dseOperationalAttrs); |
| | | |
| | | |
| | | // Add the "ds-private-naming-contexts" attribute. |
| | | Attribute privateNamingContextAttr = createDNAttribute( |
| | | ATTR_PRIVATE_NAMING_CONTEXTS, ATTR_PRIVATE_NAMING_CONTEXTS, |
| | | DirectoryServer.getPrivateNamingContexts().keySet()); |
| | | if (!privateNamingContextAttr.isEmpty()) |
| | | { |
| | | List<Attribute> privateNamingContextAttrs = new ArrayList<Attribute>(1); |
| | | privateNamingContextAttrs.add(privateNamingContextAttr); |
| | | if (showAllAttributes |
| | | || (!privateNamingContextAttr.getAttributeType().isOperational())) |
| | | { |
| | | dseUserAttrs.put(privateNamingContextAttr.getAttributeType(), |
| | | privateNamingContextAttrs); |
| | | } |
| | | else |
| | | { |
| | | dseOperationalAttrs.put(privateNamingContextAttr.getAttributeType(), |
| | | privateNamingContextAttrs); |
| | | } |
| | | } |
| | | addAttribute(privateNamingContextAttr, dseUserAttrs, dseOperationalAttrs); |
| | | |
| | | // Add the "supportedControl" attribute. |
| | | Attribute supportedControlAttr = createAttribute(ATTR_SUPPORTED_CONTROL, |
| | | ATTR_SUPPORTED_CONTROL_LC, DirectoryServer.getSupportedControls()); |
| | | if (!supportedControlAttr.isEmpty()) |
| | | { |
| | | List<Attribute> supportedControlAttrs = new ArrayList<Attribute>(1); |
| | | supportedControlAttrs.add(supportedControlAttr); |
| | | if (showAllAttributes |
| | | || (!supportedControlAttr.getAttributeType().isOperational())) |
| | | { |
| | | dseUserAttrs.put(supportedControlAttr.getAttributeType(), |
| | | supportedControlAttrs); |
| | | } |
| | | else |
| | | { |
| | | dseOperationalAttrs.put(supportedControlAttr.getAttributeType(), |
| | | supportedControlAttrs); |
| | | } |
| | | } |
| | | addAttribute(supportedControlAttr, dseUserAttrs, dseOperationalAttrs); |
| | | |
| | | // Add the "supportedExtension" attribute. |
| | | Attribute supportedExtensionAttr = createAttribute( |
| | | ATTR_SUPPORTED_EXTENSION, ATTR_SUPPORTED_EXTENSION_LC, DirectoryServer |
| | | .getSupportedExtensions().keySet()); |
| | | if (!supportedExtensionAttr.isEmpty()) |
| | | { |
| | | List<Attribute> supportedExtensionAttrs = new ArrayList<Attribute>(1); |
| | | supportedExtensionAttrs.add(supportedExtensionAttr); |
| | | if (showAllAttributes |
| | | || (!supportedExtensionAttr.getAttributeType().isOperational())) |
| | | { |
| | | dseUserAttrs.put(supportedExtensionAttr.getAttributeType(), |
| | | supportedExtensionAttrs); |
| | | } |
| | | else |
| | | { |
| | | dseOperationalAttrs.put(supportedExtensionAttr.getAttributeType(), |
| | | supportedExtensionAttrs); |
| | | } |
| | | } |
| | | addAttribute(supportedExtensionAttr, dseUserAttrs, dseOperationalAttrs); |
| | | |
| | | // Add the "supportedFeature" attribute. |
| | | Attribute supportedFeatureAttr = createAttribute(ATTR_SUPPORTED_FEATURE, |
| | | ATTR_SUPPORTED_FEATURE_LC, DirectoryServer.getSupportedFeatures()); |
| | | if (!supportedFeatureAttr.isEmpty()) |
| | | { |
| | | List<Attribute> supportedFeatureAttrs = new ArrayList<Attribute>(1); |
| | | supportedFeatureAttrs.add(supportedFeatureAttr); |
| | | if (showAllAttributes |
| | | || (!supportedFeatureAttr.getAttributeType().isOperational())) |
| | | { |
| | | dseUserAttrs.put(supportedFeatureAttr.getAttributeType(), |
| | | supportedFeatureAttrs); |
| | | } |
| | | else |
| | | { |
| | | dseOperationalAttrs.put(supportedFeatureAttr.getAttributeType(), |
| | | supportedFeatureAttrs); |
| | | } |
| | | } |
| | | addAttribute(supportedFeatureAttr, dseUserAttrs, dseOperationalAttrs); |
| | | |
| | | |
| | | // Add the "supportedSASLMechanisms" attribute. |
| | | Attribute supportedSASLMechAttr = createAttribute( |
| | | ATTR_SUPPORTED_SASL_MECHANISMS, ATTR_SUPPORTED_SASL_MECHANISMS_LC, |
| | | DirectoryServer.getSupportedSASLMechanisms().keySet()); |
| | | if (!supportedSASLMechAttr.isEmpty()) |
| | | { |
| | | List<Attribute> supportedSASLMechAttrs = new ArrayList<Attribute>(1); |
| | | supportedSASLMechAttrs.add(supportedSASLMechAttr); |
| | | if (showAllAttributes |
| | | || (!supportedSASLMechAttr.getAttributeType().isOperational())) |
| | | { |
| | | dseUserAttrs.put(supportedSASLMechAttr.getAttributeType(), |
| | | supportedSASLMechAttrs); |
| | | } |
| | | else |
| | | { |
| | | dseOperationalAttrs.put(supportedSASLMechAttr.getAttributeType(), |
| | | supportedSASLMechAttrs); |
| | | } |
| | | } |
| | | addAttribute(supportedSASLMechAttr, dseUserAttrs, dseOperationalAttrs); |
| | | |
| | | |
| | | // Add the "supportedLDAPVersions" attribute. |
| | |
| | | createAttribute(ATTR_SUPPORTED_LDAP_VERSION, |
| | | ATTR_SUPPORTED_LDAP_VERSION_LC, |
| | | versionStrings); |
| | | if (!supportedLDAPVersionAttr.isEmpty()) |
| | | { |
| | | List<Attribute> supportedLDAPVersionAttrs = new ArrayList<Attribute>(1); |
| | | supportedLDAPVersionAttrs.add(supportedLDAPVersionAttr); |
| | | if (showAllAttributes |
| | | || (!supportedLDAPVersionAttr.getAttributeType().isOperational())) |
| | | { |
| | | dseUserAttrs.put(supportedLDAPVersionAttr.getAttributeType(), |
| | | supportedLDAPVersionAttrs); |
| | | } |
| | | else |
| | | { |
| | | dseOperationalAttrs.put(supportedLDAPVersionAttr.getAttributeType(), |
| | | supportedLDAPVersionAttrs); |
| | | } |
| | | } |
| | | addAttribute(supportedLDAPVersionAttr, dseUserAttrs, dseOperationalAttrs); |
| | | |
| | | |
| | | // Add the "supportedAuthPasswordSchemes" attribute. |
| | |
| | | ArrayList<Attribute> supportedAuthPWSchemesAttrs = |
| | | new ArrayList<Attribute>(1); |
| | | supportedAuthPWSchemesAttrs.add(supportedAuthPWSchemesAttr); |
| | | if (showAllAttributes || |
| | | (! supportedSASLMechAttr.getAttributeType().isOperational())) |
| | | if (showAllAttributes |
| | | || !supportedSASLMechAttr.getAttributeType().isOperational()) |
| | | { |
| | | dseUserAttrs.put(supportedAuthPWSchemesAttr.getAttributeType(), |
| | | supportedAuthPWSchemesAttrs); |
| | |
| | | Attribute supportedTLSProtocolsAttr = createAttribute( |
| | | ATTR_SUPPORTED_TLS_PROTOCOLS, ATTR_SUPPORTED_TLS_PROTOCOLS_LC, |
| | | supportedTlsProtocols); |
| | | if (!supportedTLSProtocolsAttr.isEmpty()) |
| | | { |
| | | List<Attribute> supportedTLSProtocolsAttrs = new ArrayList<Attribute>(1); |
| | | supportedTLSProtocolsAttrs.add(supportedTLSProtocolsAttr); |
| | | if (showAllAttributes |
| | | || (!supportedTLSProtocolsAttr.getAttributeType().isOperational())) |
| | | { |
| | | dseUserAttrs.put(supportedTLSProtocolsAttr.getAttributeType(), |
| | | supportedTLSProtocolsAttrs); |
| | | } |
| | | else |
| | | { |
| | | dseOperationalAttrs.put(supportedTLSProtocolsAttr.getAttributeType(), |
| | | supportedTLSProtocolsAttrs); |
| | | } |
| | | } |
| | | addAttribute(supportedTLSProtocolsAttr, dseUserAttrs, dseOperationalAttrs); |
| | | |
| | | // Add the "supportedTLSCiphers" attribute. |
| | | Attribute supportedTLSCiphersAttr = createAttribute( |
| | | ATTR_SUPPORTED_TLS_CIPHERS, ATTR_SUPPORTED_TLS_CIPHERS_LC, |
| | | supportedTlsCiphers); |
| | | if (!supportedTLSCiphersAttr.isEmpty()) |
| | | { |
| | | List<Attribute> supportedTLSCiphersAttrs = new ArrayList<Attribute>(1); |
| | | supportedTLSCiphersAttrs.add(supportedTLSCiphersAttr); |
| | | if (showAllAttributes |
| | | || (!supportedTLSCiphersAttr.getAttributeType().isOperational())) |
| | | { |
| | | dseUserAttrs.put(supportedTLSCiphersAttr.getAttributeType(), |
| | | supportedTLSCiphersAttrs); |
| | | } |
| | | else |
| | | { |
| | | dseOperationalAttrs.put(supportedTLSCiphersAttr.getAttributeType(), |
| | | supportedTLSCiphersAttrs); |
| | | } |
| | | } |
| | | addAttribute(supportedTLSCiphersAttr, dseUserAttrs, dseOperationalAttrs); |
| | | |
| | | // Add all the standard "static" attributes. |
| | | for (Attribute a : staticDSEAttributes) |
| | | { |
| | | AttributeType type = a.getAttributeType(); |
| | | |
| | | if (type.isOperational() && (! showAllAttributes)) |
| | | if (type.isOperational() && !showAllAttributes) |
| | | { |
| | | List<Attribute> attrs = dseOperationalAttrs.get(type); |
| | | if (attrs == null) |
| | | { |
| | | attrs = new ArrayList<Attribute>(); |
| | | attrs.add(a); |
| | | dseOperationalAttrs.put(type, attrs); |
| | | } |
| | | else |
| | | { |
| | | attrs.add(a); |
| | | } |
| | | attrs.add(a); |
| | | } |
| | | else |
| | | { |
| | |
| | | if (attrs == null) |
| | | { |
| | | attrs = new ArrayList<Attribute>(); |
| | | attrs.add(a); |
| | | dseUserAttrs.put(type, attrs); |
| | | } |
| | | else |
| | | { |
| | | attrs.add(a); |
| | | } |
| | | attrs.add(a); |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | AttributeType type = a.getAttributeType(); |
| | | |
| | | if (type.isOperational() && (! showAllAttributes)) |
| | | if (type.isOperational() && !showAllAttributes) |
| | | { |
| | | List<Attribute> attrs = dseOperationalAttrs.get(type); |
| | | if (attrs == null) |
| | | { |
| | | attrs = new ArrayList<Attribute>(); |
| | | attrs.add(a); |
| | | dseOperationalAttrs.put(type, attrs); |
| | | } |
| | | else |
| | | { |
| | | attrs.add(a); |
| | | } |
| | | attrs.add(a); |
| | | } |
| | | else |
| | | { |
| | |
| | | if (attrs == null) |
| | | { |
| | | attrs = new ArrayList<Attribute>(); |
| | | attrs.add(a); |
| | | dseUserAttrs.put(type, attrs); |
| | | } |
| | | else |
| | | { |
| | | attrs.add(a); |
| | | } |
| | | attrs.add(a); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | |
| | | |
| | | private void addAttribute(Attribute publicNamingContextAttr, |
| | | HashMap<AttributeType, List<Attribute>> userAttrs, |
| | | HashMap<AttributeType, List<Attribute>> operationalAttrs) |
| | | { |
| | | if (!publicNamingContextAttr.isEmpty()) |
| | | { |
| | | List<Attribute> privateNamingContextAttrs = new ArrayList<Attribute>(1); |
| | | privateNamingContextAttrs.add(publicNamingContextAttr); |
| | | final AttributeType attrType = publicNamingContextAttr.getAttributeType(); |
| | | if (showAllAttributes || !attrType.isOperational()) |
| | | { |
| | | userAttrs.put(attrType, privateNamingContextAttrs); |
| | | } |
| | | else |
| | | { |
| | | operationalAttrs.put(attrType, privateNamingContextAttrs); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Determines the workflow nodes which handle subordinate naming contexts. |
| | | * A workflow node is handling a subordinate naming context if the workflow |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * } |
| | | * Creates an attribute for the root DSE with the following criteria. |
| | | * |
| | | * @param name The name for the attribute. |
| | | * @param lowerName The name for the attribute formatted in all lowercase |
| | | * characters. |
| | | * @param value The value to use for the attribute. |
| | | * |
| | | * @return The constructed attribute. |
| | | */ |
| | | private Attribute createAttribute(String name, String lowerName, |
| | | String value) |
| | | { |
| | | return Attributes.create(name, value); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Creates an attribute for the root DSE meant to hold a set of DNs. |
| | | * |
| | |
| | | return builder.toAttribute(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean entryExists(DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void addEntry(Entry entry, AddOperation addOperation) |
| | | throws DirectoryException |
| | | { |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_ROOTDSE_ADD_NOT_SUPPORTED.get(entry.getName())); |
| | | ERR_BACKEND_ADD_NOT_SUPPORTED.get(entry.getName(), getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void deleteEntry(DN entryDN, DeleteOperation deleteOperation) |
| | | throws DirectoryException |
| | | { |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_ROOTDSE_DELETE_NOT_SUPPORTED.get(entryDN)); |
| | | ERR_BACKEND_DELETE_NOT_SUPPORTED.get(entryDN, getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void replaceEntry(Entry oldEntry, Entry newEntry, |
| | | ModifyOperation modifyOperation) throws DirectoryException |
| | | { |
| | |
| | | ERR_ROOTDSE_MODIFY_NOT_SUPPORTED.get(newEntry.getName(), configEntryDN)); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void renameEntry(DN currentDN, Entry entry, |
| | | ModifyDNOperation modifyDNOperation) |
| | | throws DirectoryException |
| | | { |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_ROOTDSE_MODIFY_DN_NOT_SUPPORTED.get(currentDN)); |
| | | ERR_BACKEND_MODIFY_DN_NOT_SUPPORTED.get(currentDN, getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void search(SearchOperation searchOperation) |
| | | throws DirectoryException, CanceledOperationException { |
| | | DN baseDN = searchOperation.getBaseDN(); |
| | |
| | | |
| | | Backend b = entry.getValue(); |
| | | Entry subBaseEntry = b.getEntry(subBase); |
| | | if ((subBaseEntry != null) && filter.matchesEntry(subBaseEntry)) |
| | | if (subBaseEntry != null && filter.matchesEntry(subBaseEntry)) |
| | | { |
| | | searchOperation.returnEntry(subBaseEntry, null); |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public HashSet<String> getSupportedControls() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedControls() |
| | | { |
| | | return supportedControls; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public HashSet<String> getSupportedFeatures() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedFeatures() |
| | | { |
| | | return supportedFeatures; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFExport() |
| | | { |
| | | // We will only export the DSE entry itself. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void exportLDIF(LDIFExportConfig exportConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | finally |
| | | { |
| | | try |
| | | { |
| | | ldifWriter.close(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | logger.traceException(e); |
| | | } |
| | | close(ldifWriter); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFImport() |
| | | { |
| | | // This backend does not support LDIF imports. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public LDIFImportResult importLDIF(LDIFImportConfig importConfig) |
| | | throws DirectoryException |
| | | { |
| | | // This backend does not support LDIF imports. |
| | | LocalizableMessage message = ERR_ROOTDSE_IMPORT_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_IMPORT_AND_EXPORT_NOT_SUPPORTED.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup() |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup(BackupConfig backupConfig, |
| | | StringBuilder unsupportedReason) |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void createBackup(BackupConfig backupConfig) |
| | | throws DirectoryException |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | LocalizableMessage message = ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void removeBackup(BackupDirectory backupDirectory, |
| | | String backupID) |
| | | throws DirectoryException |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | LocalizableMessage message = ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsRestore() |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void restoreBackup(RestoreConfig restoreConfig) |
| | | throws DirectoryException |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | LocalizableMessage message = ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public boolean isConfigurationAcceptable(Configuration configuration, |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isConfigurationAcceptable(RootDSEBackendCfg config, |
| | | List<LocalizableMessage> unacceptableReasons) |
| | | { |
| | | RootDSEBackendCfg config = (RootDSEBackendCfg) configuration; |
| | | return isConfigurationChangeAcceptable(config, unacceptableReasons); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isConfigurationChangeAcceptable( |
| | | RootDSEBackendCfg cfg, |
| | |
| | | return configIsAcceptable; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConfigChangeResult applyConfigurationChange(RootDSEBackendCfg cfg) |
| | | { |
| | |
| | | |
| | | if (subordinateBaseDNs == null) |
| | | { |
| | | LocalizableMessage message = INFO_ROOTDSE_USING_SUFFIXES_AS_BASE_DNS.get(); |
| | | messages.add(message); |
| | | messages.add(INFO_ROOTDSE_USING_SUFFIXES_AS_BASE_DNS.get()); |
| | | } |
| | | else |
| | | { |
| | |
| | | return new ConfigChangeResult(resultCode, adminActionRequired, messages); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void preloadEntryCache() throws UnsupportedOperationException { |
| | | throw new UnsupportedOperationException("Operation not supported."); |
| | | } |
| | | } |
| | | |
| | |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.Collection; |
| | | import java.util.Collections; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.HashSet; |
| | |
| | | import org.forgerock.opendj.ldap.ResultCode; |
| | | import org.forgerock.opendj.ldap.SearchScope; |
| | | import org.forgerock.opendj.ldap.schema.ObjectClassType; |
| | | import org.forgerock.util.Reject; |
| | | import org.opends.server.admin.Configuration; |
| | | import org.opends.server.admin.server.ConfigurationChangeListener; |
| | | import org.opends.server.admin.std.server.SchemaBackendCfg; |
| | | import org.opends.server.api.AlertGenerator; |
| | |
| | | * It is a kind of meta-backend in that it doesn't actually hold any data but |
| | | * rather dynamically generates the schema entry whenever it is requested. |
| | | */ |
| | | public class SchemaBackend |
| | | extends Backend |
| | | public class SchemaBackend extends Backend<SchemaBackendCfg> |
| | | implements ConfigurationChangeListener<SchemaBackendCfg>, AlertGenerator |
| | | { |
| | | private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); |
| | |
| | | /** The set of objectclasses that will be used in the schema entry. */ |
| | | private HashMap<ObjectClass,String> schemaObjectClasses; |
| | | |
| | | /** The set of supported controls for this backend. */ |
| | | private Set<String> supportedControls; |
| | | |
| | | /** The set of supported features for this backend. */ |
| | | private Set<String> supportedFeatures; |
| | | |
| | | /** The time that the schema was last modified. */ |
| | | private long modifyTime; |
| | | |
| | |
| | | // Perform all initialization in initializeBackend. |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public void configureBackend(Configuration config) |
| | | throws ConfigException |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void configureBackend(SchemaBackendCfg cfg) throws ConfigException |
| | | { |
| | | // Make sure that a configuration entry was provided. If not, then we will |
| | | // not be able to complete initialization. |
| | | if (config == null) |
| | | if (cfg == null) |
| | | { |
| | | LocalizableMessage message = ERR_SCHEMA_CONFIG_ENTRY_NULL.get(); |
| | | throw new ConfigException(message); |
| | | } |
| | | |
| | | Reject.ifFalse(config instanceof SchemaBackendCfg); |
| | | SchemaBackendCfg cfg = (SchemaBackendCfg)config; |
| | | ConfigEntry configEntry = DirectoryServer.getConfigEntry(cfg.dn()); |
| | | |
| | | configEntryDN = configEntry.getDN(); |
| | |
| | | schemaObjectClasses.put(subschemaOC, OC_SUBSCHEMA); |
| | | |
| | | |
| | | // Define empty sets for the supported controls and features. |
| | | supportedControls = new HashSet<String>(0); |
| | | supportedFeatures = new HashSet<String>(0); |
| | | |
| | | |
| | | configEntryDN = configEntry.getDN(); |
| | | |
| | | DN[] newBaseDNs = new DN[cfg.getBaseDN().size()]; |
| | |
| | | currentConfig = cfg; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void initializeBackend() |
| | | throws ConfigException, InitializationException |
| | | { |
| | |
| | | { |
| | | String runningUnitTestsStr = |
| | | System.getProperty(PROPERTY_RUNNING_UNIT_TESTS); |
| | | if ((runningUnitTestsStr != null) && |
| | | runningUnitTestsStr.equalsIgnoreCase("true")) |
| | | if ("true".equalsIgnoreCase(runningUnitTestsStr)) |
| | | { |
| | | Schema.writeConcatenatedSchema(); |
| | | concatFile = new File(upgradeDirectory, SCHEMA_CONCAT_FILE_NAME); |
| | |
| | | currentConfig.addSchemaChangeListener(this); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void finalizeBackend() |
| | | { |
| | | currentConfig.removeSchemaChangeListener(this); |
| | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public DN[] getBaseDNs() |
| | | { |
| | | return baseDNs; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public long getEntryCount() |
| | | { |
| | | // There is always only a single entry in this backend. |
| | | return 1; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isLocal() |
| | | { |
| | | // For the purposes of this method, this is a local backend. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isIndexed(AttributeType attributeType, IndexType indexType) |
| | | { |
| | | // All searches in this backend will always be considered indexed. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConditionResult hasSubordinates(DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | | return ConditionResult.FALSE; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public long numSubordinates(DN entryDN, boolean subtree) |
| | | throws DirectoryException |
| | | { |
| | | return 0L; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Entry getEntry(DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | |
| | | builder.add(value); |
| | | } |
| | | |
| | | ArrayList<Attribute> attrList = new ArrayList<Attribute>(1); |
| | | Attribute attribute = builder.toAttribute(); |
| | | attrList.add(attribute); |
| | | ArrayList<Attribute> attrList = newArrayList(attribute); |
| | | if (attribute.getAttributeType().isOperational() |
| | | && (ignoreShowAllOption || (!showAllAttributes))) |
| | | && (ignoreShowAllOption || !showAllAttributes)) |
| | | { |
| | | operationalAttrs.put(attribute.getAttributeType(), attrList); |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | private ArrayList<Attribute> newArrayList(Attribute a) |
| | | { |
| | | ArrayList<Attribute> attrList = new ArrayList<Attribute>(1); |
| | | attrList.add(a); |
| | | return attrList; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean entryExists(DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void addEntry(Entry entry, AddOperation addOperation) |
| | | throws DirectoryException |
| | | { |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_SCHEMA_ADD_NOT_SUPPORTED.get(entry.getName())); |
| | | ERR_BACKEND_ADD_NOT_SUPPORTED.get(entry.getName(), getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void deleteEntry(DN entryDN, DeleteOperation deleteOperation) |
| | | throws DirectoryException |
| | | { |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_SCHEMA_DELETE_NOT_SUPPORTED.get(entryDN)); |
| | | ERR_BACKEND_DELETE_NOT_SUPPORTED.get(entryDN, getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void replaceEntry(Entry oldEntry, Entry newEntry, |
| | | ModifyOperation modifyOperation) throws DirectoryException |
| | | { |
| | |
| | | |
| | | |
| | | case REPLACE: |
| | | if ((!m.isInternal()) && |
| | | (!modifyOperation.isSynchronizationOperation())) |
| | | if (!m.isInternal() |
| | | && !modifyOperation.isSynchronizationOperation()) |
| | | { |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_SCHEMA_INVALID_MODIFICATION_TYPE.get(m.getModificationType())); |
| | | } |
| | | else if (SchemaConfigManager.isSchemaAttribute(a)) |
| | | { |
| | | logger.error(ERR_SCHEMA_INVALID_REPLACE_MODIFICATION, a.getNameWithOptions()); |
| | | } |
| | | else |
| | | { |
| | | // If this is not a Schema attribute, we put it |
| | | // in the extraAttribute map. This in fact acts as a replace. |
| | | if (SchemaConfigManager.isSchemaAttribute(a)) |
| | | { |
| | | logger.error(ERR_SCHEMA_INVALID_REPLACE_MODIFICATION, a.getNameWithOptions()); |
| | | } |
| | | else |
| | | { |
| | | newSchema.addExtraAttribute(at.getNameOrOID(), a); |
| | | modifiedSchemaFiles.add(FILE_USER_SCHEMA_ELEMENTS); |
| | | } |
| | | newSchema.addExtraAttribute(at.getNameOrOID(), a); |
| | | modifiedSchemaFiles.add(FILE_USER_SCHEMA_ELEMENTS); |
| | | } |
| | | break; |
| | | |
| | |
| | | |
| | | // Make sure that none of the associated matching rules are marked OBSOLETE. |
| | | MatchingRule mr = attributeType.getEqualityMatchingRule(); |
| | | if ((mr != null) && mr.isObsolete()) |
| | | if (mr != null && mr.isObsolete()) |
| | | { |
| | | LocalizableMessage message = ERR_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR.get( |
| | | attributeType.getNameOrOID(), mr.getNameOrOID()); |
| | |
| | | } |
| | | |
| | | mr = attributeType.getOrderingMatchingRule(); |
| | | if ((mr != null) && mr.isObsolete()) |
| | | if (mr != null && mr.isObsolete()) |
| | | { |
| | | LocalizableMessage message = ERR_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR.get( |
| | | attributeType.getNameOrOID(), mr.getNameOrOID()); |
| | |
| | | } |
| | | |
| | | mr = attributeType.getSubstringMatchingRule(); |
| | | if ((mr != null) && mr.isObsolete()) |
| | | if (mr != null && mr.isObsolete()) |
| | | { |
| | | LocalizableMessage message = ERR_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR.get( |
| | | attributeType.getNameOrOID(), mr.getNameOrOID()); |
| | |
| | | } |
| | | |
| | | mr = attributeType.getApproximateMatchingRule(); |
| | | if ((mr != null) && mr.isObsolete()) |
| | | if (mr != null && mr.isObsolete()) |
| | | { |
| | | LocalizableMessage message = ERR_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR.get( |
| | | attributeType.getNameOrOID(), mr.getNameOrOID()); |
| | |
| | | SchemaFileElement elem) |
| | | { |
| | | String schemaFile = getSchemaFile(elem); |
| | | if ((schemaFile == null) || (schemaFile.length() == 0)) |
| | | if (schemaFile == null || schemaFile.length() == 0) |
| | | { |
| | | schemaFile = FILE_USER_SCHEMA_ELEMENTS; |
| | | setSchemaFile(elem, schemaFile); |
| | |
| | | setSchemaFile(newElem, oldSchemaFile); |
| | | modifiedSchemaFiles.add(oldSchemaFile); |
| | | } |
| | | else if (oldSchemaFile == null || oldSchemaFile.equals(newSchemaFile)) |
| | | { |
| | | modifiedSchemaFiles.add(newSchemaFile); |
| | | } |
| | | else |
| | | { |
| | | if ((oldSchemaFile == null) || oldSchemaFile.equals(newSchemaFile)) |
| | | { |
| | | modifiedSchemaFiles.add(newSchemaFile); |
| | | } |
| | | else |
| | | { |
| | | modifiedSchemaFiles.add(newSchemaFile); |
| | | modifiedSchemaFiles.add(oldSchemaFile); |
| | | } |
| | | modifiedSchemaFiles.add(newSchemaFile); |
| | | modifiedSchemaFiles.add(oldSchemaFile); |
| | | } |
| | | } |
| | | |
| | |
| | | // See if the specified attribute type is actually defined in the server |
| | | // schema. If not, then fail. |
| | | AttributeType removeType = schema.getAttributeType(attributeType.getOID()); |
| | | if ((removeType == null) || (! removeType.equals(attributeType))) |
| | | if (removeType == null || !removeType.equals(attributeType)) |
| | | { |
| | | LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_ATTRIBUTE_TYPE.get( |
| | | attributeType.getNameOrOID()); |
| | |
| | | Modification m = modifications.get(i); |
| | | Attribute a = m.getAttribute(); |
| | | |
| | | if ((m.getModificationType() != ModificationType.ADD) || |
| | | (! a.getAttributeType().equals(attributeTypesType))) |
| | | if (m.getModificationType() != ModificationType.ADD |
| | | || !a.getAttributeType().equals(attributeTypesType)) |
| | | { |
| | | continue; |
| | | } |
| | |
| | | for (AttributeType at : schema.getAttributeTypes().values()) |
| | | { |
| | | AttributeType superiorType = at.getSuperiorType(); |
| | | if ((superiorType != null) && superiorType.equals(removeType)) |
| | | if (superiorType != null && superiorType.equals(removeType)) |
| | | { |
| | | LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_AT_SUPERIOR_TYPE.get( |
| | | removeType.getNameOrOID(), superiorType.getNameOrOID()); |
| | |
| | | // See if the specified objectclass is actually defined in the server |
| | | // schema. If not, then fail. |
| | | ObjectClass removeClass = schema.getObjectClass(objectClass.getOID()); |
| | | if ((removeClass == null) || (! removeClass.equals(objectClass))) |
| | | if (removeClass == null || !removeClass.equals(objectClass)) |
| | | { |
| | | LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_OBJECTCLASS.get( |
| | | objectClass.getNameOrOID()); |
| | |
| | | Modification m = modifications.get(i); |
| | | Attribute a = m.getAttribute(); |
| | | |
| | | if ((m.getModificationType() != ModificationType.ADD) || |
| | | (! a.getAttributeType().equals(objectClassesType))) |
| | | if (m.getModificationType() != ModificationType.ADD || |
| | | !a.getAttributeType().equals(objectClassesType)) |
| | | { |
| | | continue; |
| | | } |
| | |
| | | // See if the specified name form is actually defined in the server schema. |
| | | // If not, then fail. |
| | | NameForm removeNF = schema.getNameForm(nameForm.getOID()); |
| | | if ((removeNF == null) || (! removeNF.equals(nameForm))) |
| | | if (removeNF == null || !removeNF.equals(nameForm)) |
| | | { |
| | | LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_NAME_FORM.get( |
| | | nameForm.getNameOrOID()); |
| | |
| | | Modification m = modifications.get(i); |
| | | Attribute a = m.getAttribute(); |
| | | |
| | | if ((m.getModificationType() != ModificationType.ADD) || |
| | | (! a.getAttributeType().equals(nameFormsType))) |
| | | if (m.getModificationType() != ModificationType.ADD || |
| | | !a.getAttributeType().equals(nameFormsType)) |
| | | { |
| | | continue; |
| | | } |
| | |
| | | ObjectClass structuralClass = ditContentRule.getStructuralClass(); |
| | | DITContentRule existingRuleForClass = |
| | | schema.getDITContentRule(structuralClass); |
| | | if ((existingRuleForClass != null) && (existingRuleForClass != existingDCR)) |
| | | if (existingRuleForClass != null && existingRuleForClass != existingDCR) |
| | | { |
| | | LocalizableMessage message = ERR_SCHEMA_MODIFY_STRUCTURAL_OC_CONFLICT_FOR_ADD_DCR. |
| | | get(ditContentRule.getNameOrOID(), structuralClass.getNameOrOID(), |
| | |
| | | // schema. If not, then fail. |
| | | DITContentRule removeDCR = |
| | | schema.getDITContentRule(ditContentRule.getStructuralClass()); |
| | | if ((removeDCR == null) || (! removeDCR.equals(ditContentRule))) |
| | | if (removeDCR == null || !removeDCR.equals(ditContentRule)) |
| | | { |
| | | LocalizableMessage message = |
| | | ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_DCR.get(ditContentRule.getNameOrOID()); |
| | |
| | | { |
| | | // We really do want to use the "!=" operator here because it's |
| | | // acceptable if we find match for the same object instance. |
| | | if ((existingDSR != null) && (existingDSR != dsr)) |
| | | if (existingDSR != null && existingDSR != dsr) |
| | | { |
| | | LocalizableMessage message = ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_DSR. |
| | | get(ditStructureRule.getNameOrRuleID(), |
| | |
| | | NameForm nameForm = ditStructureRule.getNameForm(); |
| | | DITStructureRule existingRuleForNameForm = |
| | | schema.getDITStructureRule(nameForm); |
| | | if ((existingRuleForNameForm != null) && |
| | | (existingRuleForNameForm != existingDSR)) |
| | | if (existingRuleForNameForm != null && |
| | | existingRuleForNameForm != existingDSR) |
| | | { |
| | | LocalizableMessage message = ERR_SCHEMA_MODIFY_NAME_FORM_CONFLICT_FOR_ADD_DSR. |
| | | get(ditStructureRule.getNameOrRuleID(), nameForm.getNameOrOID(), |
| | |
| | | // schema. If not, then fail. |
| | | DITStructureRule removeDSR = |
| | | schema.getDITStructureRule(ditStructureRule.getRuleID()); |
| | | if ((removeDSR == null) || (! removeDSR.equals(ditStructureRule))) |
| | | if (removeDSR == null || !removeDSR.equals(ditStructureRule)) |
| | | { |
| | | LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_DSR.get( |
| | | ditStructureRule.getNameOrRuleID()); |
| | |
| | | Modification m = modifications.get(i); |
| | | Attribute a = m.getAttribute(); |
| | | |
| | | if ((m.getModificationType() != ModificationType.ADD) || |
| | | (! a.getAttributeType().equals(ditStructureRulesType))) |
| | | if (m.getModificationType() != ModificationType.ADD || |
| | | !a.getAttributeType().equals(ditStructureRulesType)) |
| | | { |
| | | continue; |
| | | } |
| | |
| | | MatchingRule matchingRule = matchingRuleUse.getMatchingRule(); |
| | | MatchingRuleUse existingMRUForRule = |
| | | schema.getMatchingRuleUse(matchingRule); |
| | | if ((existingMRUForRule != null) && (existingMRUForRule != existingMRU)) |
| | | if (existingMRUForRule != null && existingMRUForRule != existingMRU) |
| | | { |
| | | LocalizableMessage message = ERR_SCHEMA_MODIFY_MR_CONFLICT_FOR_ADD_MR_USE. |
| | | get(matchingRuleUse.getNameOrOID(), matchingRule.getNameOrOID(), |
| | |
| | | // schema. If not, then fail. |
| | | MatchingRuleUse removeMRU = |
| | | schema.getMatchingRuleUse(matchingRuleUse.getMatchingRule()); |
| | | if ((removeMRU == null) || (! removeMRU.equals(matchingRuleUse))) |
| | | if (removeMRU == null || !removeMRU.equals(matchingRuleUse)) |
| | | { |
| | | LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_MR_USE.get( |
| | | matchingRuleUse.getNameOrOID()); |
| | |
| | | |
| | | |
| | | |
| | | //Gets rid of the ldap syntax description. |
| | | /** Gets rid of the ldap syntax description. */ |
| | | private void removeLdapSyntaxDescription(LDAPSyntaxDescription ldapSyntaxDesc, |
| | | Schema schema, |
| | | Set<String> modifiedSchemaFiles) |
| | |
| | | String oid = ldapSyntaxDesc.getLdapSyntaxDescriptionSyntax().getOID(); |
| | | LDAPSyntaxDescription removeLSD = schema.getLdapSyntaxDescription(oid); |
| | | |
| | | if ((removeLSD == null) || (! removeLSD.equals(ldapSyntaxDesc))) |
| | | if (removeLSD == null || !removeLSD.equals(ldapSyntaxDesc)) |
| | | { |
| | | LocalizableMessage message = |
| | | ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_LSD.get(oid); |
| | |
| | | |
| | | if (! values.isEmpty()) |
| | | { |
| | | ArrayList<Attribute> attrList = new ArrayList<Attribute>(1); |
| | | AttributeBuilder builder = new AttributeBuilder(ldapSyntaxesType); |
| | | builder.addAll(values); |
| | | attrList.add(builder.toAttribute()); |
| | | schemaEntry.putAttribute(ldapSyntaxesType, attrList); |
| | | schemaEntry.putAttribute(ldapSyntaxesType, newArrayList(builder.toAttribute())); |
| | | } |
| | | |
| | | // Add all of the appropriate attribute types to the schema entry. We need |
| | |
| | | |
| | | if (! values.isEmpty()) |
| | | { |
| | | ArrayList<Attribute> attrList = new ArrayList<Attribute>(1); |
| | | AttributeBuilder builder = new AttributeBuilder(attributeTypesType); |
| | | builder.addAll(values); |
| | | attrList.add(builder.toAttribute()); |
| | | schemaEntry.putAttribute(attributeTypesType, attrList); |
| | | schemaEntry.putAttribute(attributeTypesType, newArrayList(builder.toAttribute())); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | if (! values.isEmpty()) |
| | | { |
| | | ArrayList<Attribute> attrList = new ArrayList<Attribute>(1); |
| | | AttributeBuilder builder = new AttributeBuilder(objectClassesType); |
| | | builder.addAll(values); |
| | | attrList.add(builder.toAttribute()); |
| | | schemaEntry.putAttribute(objectClassesType, attrList); |
| | | schemaEntry.putAttribute(objectClassesType, newArrayList(builder.toAttribute())); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | if (! values.isEmpty()) |
| | | { |
| | | ArrayList<Attribute> attrList = new ArrayList<Attribute>(1); |
| | | AttributeBuilder builder = new AttributeBuilder(nameFormsType); |
| | | builder.addAll(values); |
| | | attrList.add(builder.toAttribute()); |
| | | schemaEntry.putAttribute(nameFormsType, attrList); |
| | | schemaEntry.putAttribute(nameFormsType, newArrayList(builder.toAttribute())); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | if (! values.isEmpty()) |
| | | { |
| | | ArrayList<Attribute> attrList = new ArrayList<Attribute>(1); |
| | | AttributeBuilder builder = new AttributeBuilder(ditContentRulesType); |
| | | builder.addAll(values); |
| | | attrList.add(builder.toAttribute()); |
| | | schemaEntry.putAttribute(ditContentRulesType, attrList); |
| | | schemaEntry.putAttribute(ditContentRulesType, newArrayList(builder.toAttribute())); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | if (! values.isEmpty()) |
| | | { |
| | | ArrayList<Attribute> attrList = new ArrayList<Attribute>(1); |
| | | AttributeBuilder builder = new AttributeBuilder(ditStructureRulesType); |
| | | builder.addAll(values); |
| | | attrList.add(builder.toAttribute()); |
| | | schemaEntry.putAttribute(ditStructureRulesType, attrList); |
| | | schemaEntry.putAttribute(ditStructureRulesType, newArrayList(builder.toAttribute())); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | if (! values.isEmpty()) |
| | | { |
| | | ArrayList<Attribute> attrList = new ArrayList<Attribute>(1); |
| | | AttributeBuilder builder = new AttributeBuilder(matchingRuleUsesType); |
| | | builder.addAll(values); |
| | | attrList.add(builder.toAttribute()); |
| | | schemaEntry.putAttribute(matchingRuleUsesType, attrList); |
| | | schemaEntry.putAttribute(matchingRuleUsesType, newArrayList(builder.toAttribute())); |
| | | } |
| | | |
| | | |
| | | if (schemaFile.equals(FILE_USER_SCHEMA_ELEMENTS)) |
| | | if (FILE_USER_SCHEMA_ELEMENTS.equals(schemaFile)) |
| | | { |
| | | Map<String, Attribute> attributes = schema.getExtraAttributes(); |
| | | for (Attribute attribute : attributes.values()) |
| | | { |
| | | ArrayList<Attribute> attrList = new ArrayList<Attribute>(1); |
| | | attrList.add(attribute); |
| | | ArrayList<Attribute> attrList = newArrayList(attribute); |
| | | schemaEntry.putAttribute(attribute.getAttributeType(), attrList); |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | AttributeType superiorType = attributeType.getSuperiorType(); |
| | | if ((superiorType != null) && |
| | | if (superiorType != null && |
| | | schemaFile.equals(getSchemaFile(superiorType)) && |
| | | (! addedTypes.contains(superiorType))) |
| | | !addedTypes.contains(superiorType)) |
| | | { |
| | | addAttrTypeToSchemaFile(schema, schemaFile, superiorType, values, |
| | | addedTypes, depth+1); |
| | |
| | | for(ObjectClass superiorClass : objectClass.getSuperiorClasses()) |
| | | { |
| | | if (schemaFile.equals(getSchemaFile(superiorClass)) && |
| | | (! addedClasses.contains(superiorClass))) |
| | | !addedClasses.contains(superiorClass)) |
| | | { |
| | | addObjectClassToSchemaFile(schema, schemaFile, superiorClass, values, |
| | | addedClasses, depth+1); |
| | |
| | | |
| | | for (DITStructureRule dsr : ditStructureRule.getSuperiorRules()) |
| | | { |
| | | if (schemaFile.equals(getSchemaFile(dsr)) && (! addedDSRs.contains(dsr))) |
| | | if (schemaFile.equals(getSchemaFile(dsr)) && !addedDSRs.contains(dsr)) |
| | | { |
| | | addDITStructureRuleToSchemaFile(schema, schemaFile, dsr, values, |
| | | addedDSRs, depth+1); |
| | |
| | | { |
| | | try |
| | | { |
| | | if (f.exists()) |
| | | if (f.exists() && !f.delete()) |
| | | { |
| | | if (! f.delete()) |
| | | { |
| | | allCleaned = false; |
| | | } |
| | | allCleaned = false; |
| | | } |
| | | } |
| | | catch (Exception e2) |
| | |
| | | |
| | | try |
| | | { |
| | | if (origFile.exists()) |
| | | if (origFile.exists() && !origFile.renameTo(installedFile)) |
| | | { |
| | | if (! origFile.renameTo(installedFile)) |
| | | { |
| | | allRestored = false; |
| | | } |
| | | allRestored = false; |
| | | } |
| | | } |
| | | catch (Exception e2) |
| | |
| | | deleteFiles(tempSchemaFiles.values()); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void renameEntry(DN currentDN, Entry entry, |
| | | ModifyDNOperation modifyDNOperation) |
| | | throws DirectoryException |
| | | { |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_SCHEMA_MODIFY_DN_NOT_SUPPORTED.get(currentDN)); |
| | | ERR_BACKEND_MODIFY_DN_NOT_SUPPORTED.get(currentDN, getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void search(SearchOperation searchOperation) |
| | | throws DirectoryException |
| | | { |
| | |
| | | // If it's a onelevel or subordinate subtree search, then we will never |
| | | // match anything since there isn't anything below the schema. |
| | | SearchScope scope = searchOperation.getScope(); |
| | | if ((scope == SearchScope.SINGLE_LEVEL) || |
| | | (scope == SearchScope.SUBORDINATES)) |
| | | if (scope == SearchScope.SINGLE_LEVEL || |
| | | scope == SearchScope.SUBORDINATES) |
| | | { |
| | | return; |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedControls() |
| | | { |
| | | return supportedControls; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedFeatures() |
| | | { |
| | | return supportedFeatures; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFExport() |
| | | { |
| | | // We will only export the DSE entry itself. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void exportLDIF(LDIFExportConfig exportConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFImport() |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public LDIFImportResult importLDIF(LDIFImportConfig importConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | // and add them in the existing schema. |
| | | List<Attribute> attrList = newSchemaEntry.getAttribute(attributeAttrType); |
| | | Set<String> oidList = new HashSet<String>(1000); |
| | | if ((attrList != null) && (! attrList.isEmpty())) |
| | | if (attrList != null && !attrList.isEmpty()) |
| | | { |
| | | for (Attribute a : attrList) |
| | | { |
| | |
| | | // Parse the attribute type. |
| | | AttributeType attrType = AttributeTypeSyntax.decodeAttributeType(v, schema, false); |
| | | String schemaFile = getSchemaFile(attrType); |
| | | if ((schemaFile != null) && |
| | | (schemaFile.equals(CONFIG_SCHEMA_ELEMENTS_FILE))) |
| | | if (CONFIG_SCHEMA_ELEMENTS_FILE.equals(schemaFile)) |
| | | { |
| | | // Don't import the file containing the definitions of the |
| | | // Schema elements used for configuration because these |
| | |
| | | // unless it is already defined with the same syntax. |
| | | AttributeType oldAttrType = |
| | | schema.getAttributeType(attrType.getOID()); |
| | | if ((oldAttrType == null) || |
| | | (!oldAttrType.toString().equals(attrType.toString()))) |
| | | if (oldAttrType == null || |
| | | !oldAttrType.toString().equals(attrType.toString())) |
| | | { |
| | | newSchema.registerAttributeType(attrType, true); |
| | | |
| | |
| | | for (AttributeType removeType : currentAttrTypes.values()) |
| | | { |
| | | String schemaFile = getSchemaFile(removeType); |
| | | if ((schemaFile != null) && |
| | | ((schemaFile.equals(CONFIG_SCHEMA_ELEMENTS_FILE)) || |
| | | (schemaFile.equals(CORE_SCHEMA_ELEMENTS_FILE))) ) |
| | | if (CONFIG_SCHEMA_ELEMENTS_FILE.equals(schemaFile) |
| | | || CORE_SCHEMA_ELEMENTS_FILE.equals(schemaFile)) |
| | | { |
| | | // Don't import the file containing the definitions of the |
| | | // Schema elements used for configuration because these |
| | |
| | | |
| | | oidList.clear(); |
| | | List<Attribute> ocList = newSchemaEntry.getAttribute(objectclassAttrType); |
| | | if ((ocList != null) && (! ocList.isEmpty())) |
| | | if (ocList != null && !ocList.isEmpty()) |
| | | { |
| | | for (Attribute a : ocList) |
| | | { |
| | |
| | | // appear in the new config schema. |
| | | ObjectClass newObjectClass = ObjectClassSyntax.decodeObjectClass(v, newSchema, true); |
| | | String schemaFile = getSchemaFile(newObjectClass); |
| | | if ((schemaFile != null) && |
| | | (schemaFile.equals(CONFIG_SCHEMA_ELEMENTS_FILE))) |
| | | if (CONFIG_SCHEMA_ELEMENTS_FILE.equals(schemaFile)) |
| | | { |
| | | // Don't import the file containing the definitions of the |
| | | // Schema elements used for configuration because these |
| | |
| | | // unless it is already defined with the same syntax. |
| | | ObjectClass oldObjectClass = |
| | | schema.getObjectClass(newObjectClass.getOID()); |
| | | if ((oldObjectClass == null) || |
| | | (!oldObjectClass.toString().equals(newObjectClass.toString()))) |
| | | if (oldObjectClass == null || |
| | | !oldObjectClass.toString().equals(newObjectClass.toString())) |
| | | { |
| | | newSchema.registerObjectClass(newObjectClass, true); |
| | | |
| | |
| | | for (ObjectClass removeClass : currentObjectClasses.values()) |
| | | { |
| | | String schemaFile = getSchemaFile(removeClass); |
| | | if ((schemaFile != null) && |
| | | (schemaFile.equals(CONFIG_SCHEMA_ELEMENTS_FILE))) |
| | | if (CONFIG_SCHEMA_ELEMENTS_FILE.equals(schemaFile)) |
| | | { |
| | | // Don't import the file containing the definition of the |
| | | // Schema elements used for configuration because these |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup() |
| | | { |
| | | // We do support an online backup mechanism for the schema. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup(BackupConfig backupConfig, |
| | | StringBuilder unsupportedReason) |
| | | { |
| | |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void createBackup(BackupConfig backupConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void removeBackup(BackupDirectory backupDirectory, |
| | | String backupID) |
| | | throws DirectoryException |
| | |
| | | archiveFile.delete(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsRestore() |
| | | { |
| | | // We will provide a restore, but only for offline operations. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void restoreBackup(RestoreConfig restoreConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | // If we're doing the restore, then create the output stream to write the |
| | | // file. |
| | | OutputStream outputStream = null; |
| | | if ((! verifyOnly) && restoreIt) |
| | | if (!verifyOnly && restoreIt) |
| | | { |
| | | String filePath = baseDirPath + File.separator + fileName; |
| | | try |
| | |
| | | logger.info(NOTE_SCHEMA_RESTORE_SUCCESSFUL, backupID, backupPath); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isConfigurationChangeAcceptable( |
| | | SchemaBackendCfg configEntry, |
| | |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConfigChangeResult applyConfigurationChange( |
| | | SchemaBackendCfg backendCfg) |
| | |
| | | this.showAllAttributes = showAllAttributes; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public DN getComponentEntryDN() |
| | | { |
| | | return configEntryDN; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public String getClassName() |
| | | { |
| | | return CLASS_NAME; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Map<String, String> getAlerts() |
| | | { |
| | |
| | | return alerts; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void preloadEntryCache() throws UnsupportedOperationException { |
| | | throw new UnsupportedOperationException("Operation not supported."); |
| | |
| | | import java.security.KeyStoreException; |
| | | import java.security.cert.Certificate; |
| | | import java.util.ArrayList; |
| | | import java.util.HashSet; |
| | | import java.util.Collections; |
| | | import java.util.Iterator; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Random; |
| | | import java.util.SortedSet; |
| | | import java.util.Set; |
| | | |
| | | import javax.naming.ldap.Rdn; |
| | | import javax.net.ssl.KeyManager; |
| | |
| | | import org.forgerock.opendj.ldap.ConditionResult; |
| | | import org.forgerock.opendj.ldap.SearchScope; |
| | | import org.forgerock.util.Reject; |
| | | import org.opends.server.admin.Configuration; |
| | | import org.opends.server.admin.server.ConfigurationChangeListener; |
| | | import org.opends.server.admin.std.server.TrustStoreBackendCfg; |
| | | import org.opends.server.api.Backend; |
| | |
| | | * This class defines a backend used to provide an LDAP view of public keys |
| | | * stored in a key store. |
| | | */ |
| | | public class TrustStoreBackend |
| | | extends Backend |
| | | public class TrustStoreBackend extends Backend<TrustStoreBackendCfg> |
| | | implements ConfigurationChangeListener<TrustStoreBackendCfg> |
| | | { |
| | | private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); |
| | | |
| | | |
| | | |
| | | // The current configuration state. |
| | | /** The current configuration state. */ |
| | | private TrustStoreBackendCfg configuration; |
| | | |
| | | // The DN for the base entry. |
| | | /** The DN for the base entry. */ |
| | | private DN baseDN; |
| | | |
| | | // The set of base DNs for this backend. |
| | | /** The set of base DNs for this backend. */ |
| | | private DN[] baseDNs; |
| | | |
| | | // The base entry. |
| | | /** The base entry. */ |
| | | private Entry baseEntry; |
| | | |
| | | // The set of supported controls for this backend. |
| | | private HashSet<String> supportedControls; |
| | | |
| | | // The set of supported features for this backend. |
| | | private HashSet<String> supportedFeatures; |
| | | |
| | | // The PIN needed to access the trust store backing file. |
| | | /** The PIN needed to access the trust store backing file. */ |
| | | private char[] trustStorePIN; |
| | | |
| | | // The path to the trust store backing file. |
| | | /** The path to the trust store backing file. */ |
| | | private String trustStoreFile; |
| | | |
| | | // The type of trust store backing file to use. |
| | | /** The type of trust store backing file to use. */ |
| | | private String trustStoreType; |
| | | |
| | | // The certificate manager for the trust store. |
| | | /** The certificate manager for the trust store. */ |
| | | private CertificateManager certificateManager; |
| | | |
| | | |
| | |
| | | // Perform all initialization in initializeBackend. |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public void configureBackend(Configuration config) throws ConfigException |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void configureBackend(TrustStoreBackendCfg config) throws ConfigException |
| | | { |
| | | Reject.ifNull(config); |
| | | Reject.ifFalse(config instanceof TrustStoreBackendCfg); |
| | | |
| | | configuration = (TrustStoreBackendCfg)config; |
| | | configuration = config; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void initializeBackend() |
| | | throws ConfigException, InitializationException |
| | | { |
| | |
| | | } |
| | | finally |
| | | { |
| | | try |
| | | { |
| | | br.close(); |
| | | } catch (Exception e) { |
| | | // ignore |
| | | } |
| | | close(br); |
| | | } |
| | | |
| | | if (pinStr == null) |
| | |
| | | opAttrs); |
| | | |
| | | |
| | | // Define empty sets for the supported controls and features. |
| | | supportedControls = new HashSet<String>(0); |
| | | supportedFeatures = new HashSet<String>(0); |
| | | |
| | | |
| | | // Register this as a change listener. |
| | | configuration.addTrustStoreChangeListener(this); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void finalizeBackend() |
| | | { |
| | | configuration.addTrustStoreChangeListener(this); |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public DN[] getBaseDNs() |
| | | { |
| | | return baseDNs; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public long getEntryCount() |
| | | { |
| | | int numEntries = 1; |
| | |
| | | return numEntries; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isLocal() |
| | | { |
| | | // For the purposes of this method, this is a local backend. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isIndexed(AttributeType attributeType, IndexType indexType) |
| | | { |
| | | // All searches in this backend will always be considered indexed. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public Entry getEntry(DN entryDN) |
| | | throws DirectoryException |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Entry getEntry(DN entryDN) throws DirectoryException |
| | | { |
| | | // If the requested entry was null, then throw an exception. |
| | | if (entryDN == null) |
| | | { |
| | | LocalizableMessage message = ERR_TRUSTSTORE_GET_ENTRY_NULL.get(); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message); |
| | | ERR_BACKEND_GET_ENTRY_NULL.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | |
| | | // See if the requested entry was one level below the backend base entry. |
| | | // If so, then it must point to a trust store entry. |
| | | DN parentDN = entryDN.getParentDNInSuffix(); |
| | | if (parentDN == null) |
| | | { |
| | | return null; |
| | | } |
| | | else if (parentDN.equals(baseDN)) |
| | | if (parentDN != null && parentDN.equals(baseDN)) |
| | | { |
| | | try |
| | | { |
| | |
| | | } |
| | | catch (DirectoryException e) |
| | | { |
| | | return null; |
| | | logger.traceException(e); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | return null; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | |
| | | return e; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void addEntry(Entry entry, AddOperation addOperation) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void deleteEntry(DN entryDN, DeleteOperation deleteOperation) |
| | | throws DirectoryException |
| | | { |
| | |
| | | deleteCertificate(entryDN); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void replaceEntry(Entry oldEntry, Entry newEntry, |
| | | ModifyOperation modifyOperation) throws DirectoryException |
| | | { |
| | | LocalizableMessage message = ERR_TRUSTSTORE_MODIFY_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_MODIFY_NOT_SUPPORTED.get(oldEntry.getName(), getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void renameEntry(DN currentDN, Entry entry, |
| | | ModifyDNOperation modifyDNOperation) |
| | | throws DirectoryException |
| | | { |
| | | LocalizableMessage message = ERR_TRUSTSTORE_MODIFY_DN_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_MODIFY_DN_NOT_SUPPORTED.get(currentDN, getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void search(SearchOperation searchOperation) |
| | | throws DirectoryException |
| | | { |
| | |
| | | SearchFilter filter = searchOperation.getFilter(); |
| | | if (this.baseDN.equals(baseDN)) |
| | | { |
| | | if ((scope == SearchScope.BASE_OBJECT) || |
| | | (scope == SearchScope.WHOLE_SUBTREE)) |
| | | if ((scope == SearchScope.BASE_OBJECT || scope == SearchScope.WHOLE_SUBTREE) |
| | | && filter.matchesEntry(baseEntry)) |
| | | { |
| | | if (filter.matchesEntry(baseEntry)) |
| | | { |
| | | searchOperation.returnEntry(baseEntry, null); |
| | | } |
| | | searchOperation.returnEntry(baseEntry, null); |
| | | } |
| | | |
| | | String[] aliases = null; |
| | |
| | | aliases = new String[0]; |
| | | } |
| | | |
| | | if ((scope != SearchScope.BASE_OBJECT) && (! (aliases.length == 0) )) |
| | | if (scope != SearchScope.BASE_OBJECT && aliases.length != 0) |
| | | { |
| | | AttributeType certAliasType = |
| | | DirectoryServer.getAttributeType(ATTR_CRYPTO_KEY_ID, true); |
| | |
| | | { |
| | | Entry certEntry = getCertEntry(baseDN); |
| | | |
| | | if ((scope == SearchScope.BASE_OBJECT) || |
| | | (scope == SearchScope.WHOLE_SUBTREE)) |
| | | if ((scope == SearchScope.BASE_OBJECT || scope == SearchScope.WHOLE_SUBTREE) |
| | | && filter.matchesEntry(certEntry)) |
| | | { |
| | | if (filter.matchesEntry(certEntry)) |
| | | { |
| | | searchOperation.returnEntry(certEntry, null); |
| | | } |
| | | searchOperation.returnEntry(certEntry, null); |
| | | } |
| | | } |
| | | else |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public HashSet<String> getSupportedControls() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedControls() |
| | | { |
| | | return supportedControls; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public HashSet<String> getSupportedFeatures() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedFeatures() |
| | | { |
| | | return supportedFeatures; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFExport() |
| | | { |
| | | // We do not support LDIF exports. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void exportLDIF(LDIFExportConfig exportConfig) |
| | | throws DirectoryException |
| | | { |
| | | LocalizableMessage message = ERR_TRUSTSTORE_IMPORT_AND_EXPORT_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_IMPORT_AND_EXPORT_NOT_SUPPORTED.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFImport() |
| | | { |
| | | // This backend does not support LDIF imports. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public LDIFImportResult importLDIF(LDIFImportConfig importConfig) |
| | | throws DirectoryException |
| | | { |
| | | // This backend does not support LDIF imports. |
| | | LocalizableMessage message = ERR_TRUSTSTORE_IMPORT_AND_EXPORT_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_IMPORT_AND_EXPORT_NOT_SUPPORTED.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup() |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup(BackupConfig backupConfig, |
| | | StringBuilder unsupportedReason) |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void createBackup(BackupConfig backupConfig) |
| | | throws DirectoryException |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | LocalizableMessage message = ERR_TRUSTSTORE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void removeBackup(BackupDirectory backupDirectory, |
| | | String backupID) |
| | | throws DirectoryException |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | LocalizableMessage message = ERR_TRUSTSTORE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsRestore() |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void restoreBackup(RestoreConfig restoreConfig) |
| | | throws DirectoryException |
| | | { |
| | | // This backend does not provide a backup/restore mechanism. |
| | | LocalizableMessage message = ERR_TRUSTSTORE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_BACKUP_AND_RESTORE_NOT_SUPPORTED.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConditionResult hasSubordinates(DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | |
| | | ERR_HAS_SUBORDINATES_NOT_SUPPORTED.get()); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public long numSubordinates(DN entryDN, boolean subtree) |
| | | throws DirectoryException |
| | | { |
| | |
| | | ERR_NUM_SUBORDINATES_NOT_SUPPORTED.get()); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isConfigurationChangeAcceptable( |
| | | TrustStoreBackendCfg configuration, List<LocalizableMessage> unacceptableReasons) |
| | |
| | | // If there is a PIN property, then make sure the corresponding |
| | | // property is set. |
| | | String pinProp = configuration.getTrustStorePinProperty(); |
| | | if (pinProp != null) |
| | | if (pinProp != null && System.getProperty(pinProp) == null) |
| | | { |
| | | if (System.getProperty(pinProp) == null) |
| | | { |
| | | unacceptableReasons.add(ERR_TRUSTSTORE_PIN_PROPERTY_NOT_SET.get(pinProp, cfgEntryDN)); |
| | | configAcceptable = false; |
| | | } |
| | | unacceptableReasons.add(ERR_TRUSTSTORE_PIN_PROPERTY_NOT_SET.get(pinProp, cfgEntryDN)); |
| | | configAcceptable = false; |
| | | } |
| | | |
| | | |
| | | // If there is a PIN environment variable, then make sure the corresponding |
| | | // environment variable is set. |
| | | String pinEnVar = configuration.getTrustStorePinEnvironmentVariable(); |
| | | if (pinEnVar != null) |
| | | if (pinEnVar != null && System.getenv(pinEnVar) == null) |
| | | { |
| | | if (System.getenv(pinEnVar) == null) |
| | | { |
| | | unacceptableReasons.add(ERR_TRUSTSTORE_PIN_ENVAR_NOT_SET.get(pinEnVar, cfgEntryDN)); |
| | | configAcceptable = false; |
| | | } |
| | | unacceptableReasons.add(ERR_TRUSTSTORE_PIN_ENVAR_NOT_SET.get(pinEnVar, cfgEntryDN)); |
| | | configAcceptable = false; |
| | | } |
| | | |
| | | |
| | |
| | | } |
| | | finally |
| | | { |
| | | try |
| | | { |
| | | br.close(); |
| | | } catch (Exception e) { |
| | | // ignore |
| | | } |
| | | close(br); |
| | | } |
| | | |
| | | if (pinStr == null) |
| | |
| | | return configAcceptable; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConfigChangeResult applyConfigurationChange(TrustStoreBackendCfg cfg) |
| | | { |
| | |
| | | } |
| | | finally |
| | | { |
| | | try |
| | | { |
| | | br.close(); |
| | | } catch (Exception e) { |
| | | // ignore |
| | | } |
| | | close(br); |
| | | } |
| | | |
| | | if (pinStr == null) |
| | |
| | | TrustManagerFactory trustManagerFactory = |
| | | TrustManagerFactory.getInstance(trustManagerAlgorithm); |
| | | trustManagerFactory.init(trustStore); |
| | | TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); |
| | | // TrustManager[] newTrustManagers = new TrustManager[trustManagers.length]; |
| | | // for (int i=0; i < trustManagers.length; i++) |
| | | // { |
| | | // newTrustManagers[i] = new ExpirationCheckTrustManager( |
| | | // (X509TrustManager) trustManagers[i]); |
| | | // } |
| | | return trustManagers; |
| | | return trustManagerFactory.getTrustManagers(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | |
| | | d = next % 10; |
| | | if (d < 0) |
| | | { |
| | | d = d * (-1); |
| | | d = d * -1; |
| | | } |
| | | generatedChar = (char) (d+48); |
| | | break; |
| | |
| | | d = next % 26; |
| | | if (d < 0) |
| | | { |
| | | d = d * (-1); |
| | | d = d * -1; |
| | | } |
| | | generatedChar = (char) (d + 97); |
| | | break; |
| | | default: |
| | | // Will return a capital letter |
| | | d = (next % 26); |
| | | d = next % 26; |
| | | if (d < 0) |
| | | { |
| | | d = d * (-1); |
| | | d = d * -1; |
| | | } |
| | | generatedChar = (char) (d + 65) ; |
| | | } |
| | |
| | | |
| | | private static int getRandomInt(Random random,int modulo) |
| | | { |
| | | return (random.nextInt() & modulo); |
| | | return random.nextInt() & modulo; |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void preloadEntryCache() throws UnsupportedOperationException { |
| | | throw new UnsupportedOperationException("Operation not supported."); |
| | |
| | | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.forgerock.i18n.slf4j.LocalizedLogger; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.forgerock.opendj.ldap.ConditionResult; |
| | | import org.forgerock.opendj.ldap.ResultCode; |
| | | import org.forgerock.util.Reject; |
| | | import org.opends.server.admin.Configuration; |
| | | import org.opends.server.admin.server.ConfigurationChangeListener; |
| | | import org.opends.server.admin.std.meta.LocalDBIndexCfgDefn; |
| | | import org.opends.server.admin.std.server.LocalDBBackendCfg; |
| | |
| | | import org.opends.server.api.DiskSpaceMonitorHandler; |
| | | import org.opends.server.api.MonitorProvider; |
| | | import org.opends.server.backends.jeb.importLDIF.Importer; |
| | | import org.forgerock.opendj.config.server.ConfigException; |
| | | import org.opends.server.core.*; |
| | | import org.opends.server.extensions.DiskSpaceMonitor; |
| | | import org.opends.server.types.*; |
| | | import org.forgerock.opendj.ldap.ResultCode; |
| | | import org.opends.server.util.RuntimeInformation; |
| | | |
| | | import com.sleepycat.je.DatabaseException; |
| | |
| | | * This is an implementation of a Directory Server Backend which stores entries |
| | | * locally in a Berkeley DB JE database. |
| | | */ |
| | | public class BackendImpl |
| | | extends Backend |
| | | public class BackendImpl extends Backend<LocalDBBackendCfg> |
| | | implements ConfigurationChangeListener<LocalDBBackendCfg>, AlertGenerator, |
| | | DiskSpaceMonitorHandler |
| | | { |
| | |
| | | /** |
| | | * The controls supported by this backend. |
| | | */ |
| | | private static HashSet<String> supportedControls; |
| | | |
| | | static |
| | | { |
| | | // Set our supported controls. |
| | | supportedControls = new HashSet<String>(); |
| | | supportedControls.add(OID_SUBTREE_DELETE_CONTROL); |
| | | supportedControls.add(OID_PAGED_RESULTS_CONTROL); |
| | | supportedControls.add(OID_MANAGE_DSAIT_CONTROL); |
| | | supportedControls.add(OID_SERVER_SIDE_SORT_REQUEST_CONTROL); |
| | | supportedControls.add(OID_VLV_REQUEST_CONTROL); |
| | | } |
| | | |
| | | /** |
| | | * The features supported by this backend. |
| | | */ |
| | | private static HashSet<String> supportedFeatures = new HashSet<String>(); |
| | | private static final Set<String> supportedControls = new HashSet<String>(Arrays.asList( |
| | | OID_SUBTREE_DELETE_CONTROL, |
| | | OID_PAGED_RESULTS_CONTROL, |
| | | OID_MANAGE_DSAIT_CONTROL, |
| | | OID_SERVER_SIDE_SORT_REQUEST_CONTROL, |
| | | OID_VLV_REQUEST_CONTROL)); |
| | | |
| | | /** |
| | | * Begin a Backend API method that reads the database. |
| | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void configureBackend(Configuration cfg) |
| | | throws ConfigException |
| | | public void configureBackend(LocalDBBackendCfg cfg) throws ConfigException |
| | | { |
| | | Reject.ifNull(cfg); |
| | | Reject.ifFalse(cfg instanceof LocalDBBackendCfg); |
| | | |
| | | this.cfg = (LocalDBBackendCfg)cfg; |
| | | |
| | | Set<DN> dnSet = this.cfg.getBaseDN(); |
| | | baseDNs = new DN[dnSet.size()]; |
| | | dnSet.toArray(baseDNs); |
| | | this.cfg = cfg; |
| | | baseDNs = this.cfg.getBaseDN().toArray(new DN[0]); |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void initializeBackend() |
| | | throws ConfigException, InitializationException |
| | | { |
| | |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void finalizeBackend() |
| | | { |
| | | // Deregister as a change listener. |
| | |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public boolean isLocal() |
| | | { |
| | | return true; |
| | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public boolean isIndexed(AttributeType attributeType, IndexType indexType) |
| | | { |
| | | try |
| | |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public boolean supportsLDIFExport() |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public boolean supportsLDIFImport() |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public boolean supportsBackup() |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public boolean supportsBackup(BackupConfig backupConfig, |
| | | StringBuilder unsupportedReason) |
| | | { |
| | |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public boolean supportsRestore() |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | public HashSet<String> getSupportedFeatures() |
| | | @Override |
| | | public Set<String> getSupportedFeatures() |
| | | { |
| | | return supportedFeatures; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | public HashSet<String> getSupportedControls() |
| | | @Override |
| | | public Set<String> getSupportedControls() |
| | | { |
| | | return supportedControls; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public DN[] getBaseDNs() |
| | | { |
| | | return baseDNs; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public long getEntryCount() |
| | | { |
| | | if (rootContainer != null) |
| | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public ConditionResult hasSubordinates(DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public long numSubordinates(DN entryDN, boolean subtree) |
| | | throws DirectoryException |
| | | { |
| | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public Entry getEntry(DN entryDN) throws DirectoryException |
| | | { |
| | | readerBegin(); |
| | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void addEntry(Entry entry, AddOperation addOperation) |
| | | throws DirectoryException, CanceledOperationException |
| | | { |
| | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void deleteEntry(DN entryDN, DeleteOperation deleteOperation) |
| | | throws DirectoryException, CanceledOperationException |
| | | { |
| | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void replaceEntry(Entry oldEntry, Entry newEntry, |
| | | ModifyOperation modifyOperation) throws DirectoryException, |
| | | CanceledOperationException |
| | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void renameEntry(DN currentDN, Entry entry, |
| | | ModifyDNOperation modifyDNOperation) |
| | | throws DirectoryException, CanceledOperationException |
| | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void search(SearchOperation searchOperation) |
| | | throws DirectoryException, CanceledOperationException |
| | | { |
| | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void exportLDIF(LDIFExportConfig exportConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public LDIFImportResult importLDIF(LDIFImportConfig importConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void createBackup(BackupConfig backupConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void removeBackup(BackupDirectory backupDirectory, String backupID) |
| | | throws DirectoryException |
| | | { |
| | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | @Override |
| | | public void restoreBackup(RestoreConfig restoreConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override() |
| | | public boolean isConfigurationAcceptable(Configuration configuration, |
| | | @Override |
| | | public boolean isConfigurationAcceptable(LocalDBBackendCfg config, |
| | | List<LocalizableMessage> unacceptableReasons) |
| | | { |
| | | LocalDBBackendCfg config = (LocalDBBackendCfg) configuration; |
| | | return isConfigurationChangeAcceptable(config, unacceptableReasons); |
| | | } |
| | | |
| | |
| | | import org.forgerock.opendj.ldap.ModificationType; |
| | | import org.forgerock.opendj.ldap.SearchScope; |
| | | import org.forgerock.util.Reject; |
| | | import org.opends.server.admin.Configuration; |
| | | import org.opends.server.admin.server.ConfigurationChangeListener; |
| | | import org.opends.server.admin.std.server.TaskBackendCfg; |
| | | import org.opends.server.api.Backend; |
| | |
| | | * recurring basis. |
| | | */ |
| | | public class TaskBackend |
| | | extends Backend |
| | | extends Backend<TaskBackendCfg> |
| | | implements ConfigurationChangeListener<TaskBackendCfg> |
| | | { |
| | | private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); |
| | | |
| | | |
| | | |
| | | // The current configuration state. |
| | | /** The current configuration state. */ |
| | | private TaskBackendCfg currentConfig; |
| | | |
| | | // The DN of the configuration entry for this backend. |
| | | /** The DN of the configuration entry for this backend. */ |
| | | private DN configEntryDN; |
| | | |
| | | // The DN of the entry that will serve as the parent for all recurring task |
| | | // entries. |
| | | /** |
| | | * The DN of the entry that will serve as the parent for all recurring task |
| | | * entries. |
| | | */ |
| | | private DN recurringTaskParentDN; |
| | | |
| | | // The DN of the entry that will serve as the parent for all scheduled task |
| | | // entries. |
| | | /** |
| | | * The DN of the entry that will serve as the parent for all scheduled task |
| | | * entries. |
| | | */ |
| | | private DN scheduledTaskParentDN; |
| | | |
| | | // The DN of the entry that will serve as the root for all task entries. |
| | | /** The DN of the entry that will serve as the root for all task entries. */ |
| | | private DN taskRootDN; |
| | | |
| | | // The set of base DNs defined for this backend. |
| | | /** The set of base DNs defined for this backend. */ |
| | | private DN[] baseDNs; |
| | | |
| | | // The set of supported controls for this backend. |
| | | private HashSet<String> supportedControls; |
| | | |
| | | // The set of supported features for this backend. |
| | | private HashSet<String> supportedFeatures; |
| | | |
| | | // The length of time in seconds after a task is completed that it should be |
| | | // removed from the set of scheduled tasks. |
| | | /** |
| | | * The length of time in seconds after a task is completed that it should be |
| | | * removed from the set of scheduled tasks. |
| | | */ |
| | | private long retentionTime; |
| | | |
| | | // The e-mail address to use for the sender from notification messages. |
| | | /** The e-mail address to use for the sender from notification messages. */ |
| | | private String notificationSenderAddress; |
| | | |
| | | // The path to the task backing file. |
| | | /** The path to the task backing file. */ |
| | | private String taskBackingFile; |
| | | |
| | | // The task scheduler that will be responsible for actually invoking scheduled |
| | | // tasks. |
| | | /** |
| | | * The task scheduler that will be responsible for actually invoking scheduled |
| | | * tasks. |
| | | */ |
| | | private TaskScheduler taskScheduler; |
| | | |
| | | |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public void configureBackend(Configuration config) |
| | | throws ConfigException |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void configureBackend(TaskBackendCfg cfg) throws ConfigException |
| | | { |
| | | Reject.ifNull(config); |
| | | Reject.ifFalse(config instanceof TaskBackendCfg); |
| | | Reject.ifNull(cfg); |
| | | |
| | | TaskBackendCfg cfg = (TaskBackendCfg)config; |
| | | |
| | | DN[] baseDNs = new DN[cfg.getBaseDN().size()]; |
| | | final DN[] baseDNs = new DN[cfg.getBaseDN().size()]; |
| | | cfg.getBaseDN().toArray(baseDNs); |
| | | |
| | | ConfigEntry configEntry = DirectoryServer.getConfigEntry(cfg.dn()); |
| | |
| | | |
| | | // Make sure that the provided set of base DNs contains exactly one value. |
| | | // We will only allow one base for task entries. |
| | | if ((baseDNs == null) || (baseDNs.length == 0)) |
| | | if (baseDNs.length == 0) |
| | | { |
| | | LocalizableMessage message = ERR_TASKBE_NO_BASE_DNS.get(); |
| | | throw new ConfigException(message); |
| | | throw new ConfigException(ERR_TASKBE_NO_BASE_DNS.get()); |
| | | } |
| | | else if (baseDNs.length > 1) |
| | | { |
| | |
| | | taskRootDN = baseDNs[0]; |
| | | |
| | | String recurringTaskBaseString = RECURRING_TASK_BASE_RDN + "," + |
| | | taskRootDN.toString(); |
| | | taskRootDN; |
| | | try |
| | | { |
| | | recurringTaskParentDN = DN.valueOf(recurringTaskBaseString); |
| | |
| | | } |
| | | |
| | | String scheduledTaskBaseString = SCHEDULED_TASK_BASE_RDN + "," + |
| | | taskRootDN.toString(); |
| | | taskRootDN; |
| | | try |
| | | { |
| | | scheduledTaskParentDN = DN.valueOf(scheduledTaskBaseString); |
| | |
| | | // Get the path to the task data backing file. |
| | | taskBackingFile = cfg.getTaskBackingFile(); |
| | | |
| | | // Define an empty sets for the supported controls and features. |
| | | supportedControls = new HashSet<String>(0); |
| | | supportedFeatures = new HashSet<String>(0); |
| | | |
| | | currentConfig = cfg; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void initializeBackend() |
| | | throws ConfigException, InitializationException |
| | | { |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void finalizeBackend() |
| | | { |
| | | currentConfig.removeTaskChangeListener(this); |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public DN[] getBaseDNs() |
| | | { |
| | | return baseDNs; |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public long getEntryCount() |
| | | { |
| | | if (taskScheduler != null) |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isLocal() |
| | | { |
| | | // For the purposes of this method, this is a local backend. |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isIndexed(AttributeType attributeType, IndexType indexType) |
| | | { |
| | | // All searches in this backend will always be considered indexed. |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConditionResult hasSubordinates(DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public long numSubordinates(DN entryDN, boolean subtree) |
| | | throws DirectoryException |
| | | { |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Entry getEntry(DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void addEntry(Entry entry, AddOperation addOperation) |
| | | throws DirectoryException |
| | | { |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void deleteEntry(DN entryDN, DeleteOperation deleteOperation) |
| | | throws DirectoryException |
| | | { |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void replaceEntry(Entry oldEntry, Entry newEntry, |
| | | ModifyOperation modifyOperation) throws DirectoryException |
| | | { |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void renameEntry(DN currentDN, Entry entry, |
| | | ModifyDNOperation modifyDNOperation) |
| | | throws DirectoryException |
| | | { |
| | | LocalizableMessage message = ERR_TASKBE_MODIFY_DN_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_MODIFY_DN_NOT_SUPPORTED.get(currentDN, getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void search(SearchOperation searchOperation) |
| | | throws DirectoryException, CanceledOperationException { |
| | | // Look at the base DN and scope for the search operation to decide which |
| | |
| | | scheduledTaskParentDN, null); |
| | | } |
| | | |
| | | if (((searchScope == SearchScope.BASE_OBJECT) || |
| | | (searchScope == SearchScope.WHOLE_SUBTREE)) && |
| | | searchFilter.matchesEntry(e)) |
| | | if ((searchScope == SearchScope.BASE_OBJECT || searchScope == SearchScope.WHOLE_SUBTREE) |
| | | && searchFilter.matchesEntry(e)) |
| | | { |
| | | searchOperation.returnEntry(e, null); |
| | | } |
| | |
| | | recurringTaskParentDN, null); |
| | | } |
| | | |
| | | if (((searchScope == SearchScope.BASE_OBJECT) || |
| | | (searchScope == SearchScope.WHOLE_SUBTREE)) && |
| | | searchFilter.matchesEntry(e)) |
| | | if ((searchScope == SearchScope.BASE_OBJECT || searchScope == SearchScope.WHOLE_SUBTREE) |
| | | && searchFilter.matchesEntry(e)) |
| | | { |
| | | searchOperation.returnEntry(e, null); |
| | | } |
| | |
| | | if (searchRoot) |
| | | { |
| | | Entry e = taskScheduler.getTaskRootEntry(); |
| | | if (searchFilter.matchesEntry(e)) |
| | | if (searchFilter.matchesEntry(e) && !searchOperation.returnEntry(e, null)) |
| | | { |
| | | if (! searchOperation.returnEntry(e, null)) |
| | | { |
| | | return; |
| | | } |
| | | return; |
| | | } |
| | | } |
| | | |
| | |
| | | if (searchScheduledParent) |
| | | { |
| | | Entry e = taskScheduler.getScheduledTaskParentEntry(); |
| | | if (searchFilter.matchesEntry(e)) |
| | | if (searchFilter.matchesEntry(e) && !searchOperation.returnEntry(e, null)) |
| | | { |
| | | if (! searchOperation.returnEntry(e, null)) |
| | | { |
| | | return; |
| | | } |
| | | return; |
| | | } |
| | | } |
| | | |
| | | |
| | | if (searchScheduledTasks) |
| | | if (searchScheduledTasks |
| | | && !taskScheduler.searchScheduledTasks(searchOperation)) |
| | | { |
| | | if (! taskScheduler.searchScheduledTasks(searchOperation)) |
| | | { |
| | | return; |
| | | } |
| | | return; |
| | | } |
| | | |
| | | |
| | | if (searchRecurringParent) |
| | | { |
| | | Entry e = taskScheduler.getRecurringTaskParentEntry(); |
| | | if (searchFilter.matchesEntry(e)) |
| | | { |
| | | if (! searchOperation.returnEntry(e, null)) |
| | | { |
| | | return; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | if (searchRecurringTasks) |
| | | { |
| | | if (! taskScheduler.searchRecurringTasks(searchOperation)) |
| | | if (searchFilter.matchesEntry(e) && !searchOperation.returnEntry(e, null)) |
| | | { |
| | | return; |
| | | } |
| | | } |
| | | |
| | | |
| | | if (searchRecurringTasks |
| | | && !taskScheduler.searchRecurringTasks(searchOperation)) |
| | | { |
| | | return; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public HashSet<String> getSupportedControls() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedControls() |
| | | { |
| | | return supportedControls; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public HashSet<String> getSupportedFeatures() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedFeatures() |
| | | { |
| | | return supportedFeatures; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFExport() |
| | | { |
| | | // LDIF exports are supported. |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void exportLDIF(LDIFExportConfig exportConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | finally |
| | | { |
| | | try |
| | | { |
| | | ldifWriter.close(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | logger.traceException(e); |
| | | } |
| | | try |
| | | { |
| | | ldifReader.close(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | logger.traceException(e); |
| | | } |
| | | close(ldifWriter, ldifReader); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFImport() |
| | | { |
| | | // This backend does not support LDIF imports. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public LDIFImportResult importLDIF(LDIFImportConfig importConfig) |
| | | throws DirectoryException |
| | | { |
| | | // This backend does not support LDIF imports. |
| | | LocalizableMessage message = ERR_TASKBE_IMPORT_NOT_SUPPORTED.get(); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | ERR_BACKEND_IMPORT_NOT_SUPPORTED.get(getBackendID())); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup() |
| | | { |
| | | // This backend does provide a backup/restore mechanism. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup(BackupConfig backupConfig, |
| | | StringBuilder unsupportedReason) |
| | | { |
| | | // This backend does provide a backup/restore mechanism. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void createBackup(BackupConfig backupConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | inputStream.close(); |
| | | } catch (Exception e) { |
| | | logger.traceException(e); |
| | | |
| | | try { |
| | | inputStream.close(); |
| | | } catch (Exception e2) { |
| | | } |
| | | |
| | | try { |
| | | zipStream.close(); |
| | | } catch (Exception e2) { |
| | | } |
| | | close(inputStream, zipStream); |
| | | |
| | | message = ERR_TASKS_BACKUP_CANNOT_BACKUP_TASKS_FILE.get(baseName, |
| | | stackTraceToSingleLineString(e)); |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void removeBackup(BackupDirectory backupDirectory, |
| | | String backupID) |
| | | throws DirectoryException |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsRestore() |
| | | { |
| | | // This backend does provide a backup/restore mechanism. |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void restoreBackup(RestoreConfig restoreConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public boolean isConfigurationAcceptable(Configuration configuration, |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isConfigurationAcceptable(TaskBackendCfg config, |
| | | List<LocalizableMessage> unacceptableReasons) |
| | | { |
| | | TaskBackendCfg config = (TaskBackendCfg) configuration; |
| | | return isConfigAcceptable(config, unacceptableReasons, null); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isConfigurationChangeAcceptable(TaskBackendCfg configEntry, |
| | | List<LocalizableMessage> unacceptableReasons) |
| | |
| | | try |
| | | { |
| | | String tmpBackingFile = config.getTaskBackingFile(); |
| | | if ((taskBackingFile == null) || |
| | | (! taskBackingFile.equals(tmpBackingFile))) |
| | | if (taskBackingFile == null || |
| | | !taskBackingFile.equals(tmpBackingFile)) |
| | | { |
| | | File f = getFileForPath(tmpBackingFile); |
| | | if (f.exists()) |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConfigChangeResult applyConfigurationChange(TaskBackendCfg configEntry) |
| | | { |
| | |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void preloadEntryCache() throws UnsupportedOperationException { |
| | | throw new UnsupportedOperationException("Operation not supported."); |
| | |
| | | import java.lang.management.ManagementFactory; |
| | | import java.net.InetAddress; |
| | | import java.text.DecimalFormat; |
| | | import java.util.Arrays; |
| | | import java.util.Collection; |
| | | import java.util.Collections; |
| | | import java.util.LinkedHashMap; |
| | |
| | | |
| | | |
| | | /** The set of backends registered with the server. */ |
| | | private TreeMap<String,Backend> backends; |
| | | private TreeMap<String, Backend<?>> backends; |
| | | |
| | | /** |
| | | * The mapping between backends and their unique identifiers for their offline |
| | |
| | | private ConcurrentMap<String, Long> offlineBackendsStateIDs; |
| | | |
| | | /** The set of supported controls registered with the Directory Server. */ |
| | | private TreeSet<String> supportedControls; |
| | | private final TreeSet<String> supportedControls = new TreeSet<String>(Arrays.asList( |
| | | OID_LDAP_ASSERTION, |
| | | OID_LDAP_READENTRY_PREREAD, |
| | | OID_LDAP_READENTRY_POSTREAD, |
| | | OID_LDAP_NOOP_OPENLDAP_ASSIGNED, |
| | | OID_PERSISTENT_SEARCH, |
| | | OID_PROXIED_AUTH_V1, |
| | | OID_PROXIED_AUTH_V2, |
| | | OID_AUTHZID_REQUEST, |
| | | OID_MATCHED_VALUES, |
| | | OID_LDAP_SUBENTRIES, |
| | | OID_LDUP_SUBENTRIES, |
| | | OID_PASSWORD_POLICY_CONTROL, |
| | | OID_PERMISSIVE_MODIFY_CONTROL, |
| | | OID_REAL_ATTRS_ONLY, |
| | | OID_VIRTUAL_ATTRS_ONLY, |
| | | OID_ACCOUNT_USABLE_CONTROL, |
| | | OID_NS_PASSWORD_EXPIRED, |
| | | OID_NS_PASSWORD_EXPIRING)); |
| | | |
| | | /** The set of supported feature OIDs registered with the Directory Server. */ |
| | | private TreeSet<String> supportedFeatures; |
| | | private final TreeSet<String> supportedFeatures = new TreeSet<String>(Arrays.asList( |
| | | OID_ALL_OPERATIONAL_ATTRS_FEATURE, |
| | | OID_MODIFY_INCREMENT_FEATURE, |
| | | OID_TRUE_FALSE_FILTERS_FEATURE)); |
| | | |
| | | /** |
| | | * The trust manager provider configuration manager for the Directory Server. |
| | |
| | | directoryServer.monitorProviders = |
| | | new ConcurrentHashMap<String, |
| | | MonitorProvider<? extends MonitorProviderCfg>>(); |
| | | directoryServer.backends = new TreeMap<String,Backend>(); |
| | | directoryServer.backends = new TreeMap<String, Backend<?>>(); |
| | | directoryServer.offlineBackendsStateIDs = |
| | | new ConcurrentHashMap<String,Long>(); |
| | | directoryServer.backendInitializationListeners = |
| | |
| | | directoryServer.synchronizationProviders = |
| | | new CopyOnWriteArrayList<SynchronizationProvider |
| | | <SynchronizationProviderCfg>>(); |
| | | directoryServer.supportedControls = new TreeSet<String>(); |
| | | directoryServer.supportedFeatures = new TreeSet<String>(); |
| | | directoryServer.supportedLDAPVersions = |
| | | new ConcurrentHashMap<Integer,List<ConnectionHandler>>(); |
| | | directoryServer.connectionHandlers = |
| | |
| | | // Reset the map as we can no longer guarantee offline state. |
| | | directoryServer.offlineBackendsStateIDs.clear(); |
| | | |
| | | initializeSupportedControls(); |
| | | initializeSupportedFeatures(); |
| | | |
| | | initializeExtendedOperations(); |
| | | |
| | | initializeSASLMechanisms(); |
| | |
| | | |
| | | // For each base DN in a backend create a workflow and register |
| | | // the workflow with the default network group |
| | | Map<String, Backend> backendMap = getBackends(); |
| | | for (String backendID: backendMap.keySet()) |
| | | for (Backend<?> backend : getBackends().values()) |
| | | { |
| | | Backend backend = backendMap.get(backendID); |
| | | for (DN baseDN: backend.getBaseDNs()) |
| | | { |
| | | WorkflowImpl workflowImpl; |
| | | try |
| | | { |
| | | workflowImpl = createWorkflow(baseDN, backend); |
| | | final WorkflowImpl workflowImpl = createWorkflow(baseDN, backend); |
| | | registerWorkflowWithInternalNetworkGroup(workflowImpl); |
| | | registerWorkflowWithAdminNetworkGroup(workflowImpl); |
| | | registerWorkflowWithDefaultNetworkGroup(workflowImpl); |
| | |
| | | |
| | | |
| | | /** |
| | | * Initializes the set of supported controls for the Directory Server. |
| | | * |
| | | * @throws ConfigException |
| | | * If there is a configuration problem with the list of supported |
| | | * controls. |
| | | * @throws InitializationException |
| | | * If a problem occurs while initializing the set of supported |
| | | * controls that is not related to the server configuration. |
| | | */ |
| | | private void initializeSupportedControls() throws ConfigException, InitializationException |
| | | { |
| | | supportedControls.add(OID_LDAP_ASSERTION); |
| | | supportedControls.add(OID_LDAP_READENTRY_PREREAD); |
| | | supportedControls.add(OID_LDAP_READENTRY_POSTREAD); |
| | | supportedControls.add(OID_LDAP_NOOP_OPENLDAP_ASSIGNED); |
| | | supportedControls.add(OID_PERSISTENT_SEARCH); |
| | | supportedControls.add(OID_PROXIED_AUTH_V1); |
| | | supportedControls.add(OID_PROXIED_AUTH_V2); |
| | | supportedControls.add(OID_AUTHZID_REQUEST); |
| | | supportedControls.add(OID_MATCHED_VALUES); |
| | | supportedControls.add(OID_LDAP_SUBENTRIES); |
| | | supportedControls.add(OID_LDUP_SUBENTRIES); |
| | | supportedControls.add(OID_PASSWORD_POLICY_CONTROL); |
| | | supportedControls.add(OID_PERMISSIVE_MODIFY_CONTROL); |
| | | supportedControls.add(OID_REAL_ATTRS_ONLY); |
| | | supportedControls.add(OID_VIRTUAL_ATTRS_ONLY); |
| | | supportedControls.add(OID_ACCOUNT_USABLE_CONTROL); |
| | | supportedControls.add(OID_NS_PASSWORD_EXPIRED); |
| | | supportedControls.add(OID_NS_PASSWORD_EXPIRING); |
| | | } |
| | | |
| | | /** |
| | | * Initializes the set of supported features for the Directory Server. |
| | | * |
| | | * @throws ConfigException |
| | | * If there is a configuration problem with the list of supported |
| | | * features. |
| | | * @throws InitializationException |
| | | * If a problem occurs while initializing the set of supported |
| | | * features that is not related to the server configuration. |
| | | */ |
| | | private void initializeSupportedFeatures() throws ConfigException, InitializationException |
| | | { |
| | | supportedFeatures.add(OID_ALL_OPERATIONAL_ATTRS_FEATURE); |
| | | supportedFeatures.add(OID_MODIFY_INCREMENT_FEATURE); |
| | | supportedFeatures.add(OID_TRUE_FALSE_FILTERS_FEATURE); |
| | | } |
| | | |
| | | /** |
| | | * Initializes the set of extended operation handlers for the Directory |
| | | * Server. |
| | | * |
| | |
| | | * @return The set of backends that have been registered with the Directory |
| | | * Server. |
| | | */ |
| | | public static Map<String,Backend> getBackends() |
| | | public static Map<String, Backend> getBackends() |
| | | { |
| | | return directoryServer.backends; |
| | | return (Map) directoryServer.backends; |
| | | } |
| | | |
| | | |
| | |
| | | * conflicts with the backend ID of an existing |
| | | * backend. |
| | | */ |
| | | public static void registerBackend(Backend backend) |
| | | public static void registerBackend(Backend<?> backend) |
| | | throws DirectoryException |
| | | { |
| | | ifNull(backend); |
| | |
| | | |
| | | synchronized (directoryServer) |
| | | { |
| | | TreeMap<String, Backend> newBackends = |
| | | new TreeMap<String, Backend>(directoryServer.backends); |
| | | TreeMap<String, Backend<?>> newBackends = |
| | | new TreeMap<String, Backend<?>>(directoryServer.backends); |
| | | if (newBackends.containsKey(backendID)) |
| | | { |
| | | LocalizableMessage message = ERR_REGISTER_BACKEND_ALREADY_EXISTS.get(backendID); |
| | |
| | | |
| | | synchronized (directoryServer) |
| | | { |
| | | TreeMap<String,Backend> newBackends = |
| | | new TreeMap<String,Backend>(directoryServer.backends); |
| | | TreeMap<String, Backend<?>> newBackends = |
| | | new TreeMap<String, Backend<?>>(directoryServer.backends); |
| | | newBackends.remove(backend.getBackendID()); |
| | | |
| | | directoryServer.backends = newBackends; |
| | |
| | | */ |
| | | package org.opends.server.extensions; |
| | | |
| | | import java.io.Closeable; |
| | | import java.io.File; |
| | | import java.io.FileInputStream; |
| | | import java.io.FileOutputStream; |
| | |
| | | import org.forgerock.opendj.ldap.ResultCode; |
| | | import org.forgerock.opendj.ldap.SearchScope; |
| | | import org.forgerock.util.Utils; |
| | | import org.opends.server.admin.Configuration; |
| | | import org.opends.server.admin.std.server.ConfigFileHandlerBackendCfg; |
| | | import org.opends.server.api.AlertGenerator; |
| | | import org.opends.server.api.ClientConnection; |
| | | import org.opends.server.api.ConfigAddListener; |
| | |
| | | * that will read the server configuration from an LDIF file. |
| | | */ |
| | | public class ConfigFileHandler |
| | | extends ConfigHandler |
| | | extends ConfigHandler<ConfigFileHandlerBackendCfg> |
| | | implements AlertGenerator |
| | | { |
| | | private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); |
| | |
| | | private static final String CLASS_NAME = |
| | | "org.opends.server.extensions.ConfigFileHandler"; |
| | | |
| | | |
| | | |
| | | /** |
| | | * The set of supported control OIDs for this backend. |
| | | */ |
| | | private static final Set<String> SUPPORTED_CONTROLS = |
| | | new HashSet<String>(0); |
| | | |
| | | |
| | | |
| | | /** |
| | | * The set of supported feature OIDs for this backend. |
| | | */ |
| | | private static final Set<String> SUPPORTED_FEATURES = |
| | | new HashSet<String>(0); |
| | | |
| | | |
| | | |
| | | /** |
| | | * The privilege array containing both the CONFIG_READ and CONFIG_WRITE |
| | | * privileges. |
| | |
| | | super(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void initializeConfigHandler(String configFile, boolean checkSchema) |
| | | throws InitializationException |
| | | { |
| | |
| | | changesFile.renameTo(newChanges); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void finalizeConfigHandler() |
| | | { |
| | | try |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void finalizeBackend() |
| | | { |
| | | // No implementation is required. |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConfigEntry getConfigRootEntry() |
| | | throws ConfigException |
| | | { |
| | | return configRootEntry; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConfigEntry getConfigEntry(DN entryDN) |
| | | throws ConfigException |
| | | { |
| | | return configEntries.get(entryDN); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public String getServerRoot() |
| | | { |
| | | return serverRoot; |
| | | } |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public String getInstanceRoot() |
| | | { |
| | | return instanceRoot; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public void configureBackend(Configuration cfg) |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void configureBackend(ConfigFileHandlerBackendCfg cfg) |
| | | throws ConfigException |
| | | { |
| | | // No action is required. |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void initializeBackend() |
| | | throws ConfigException, InitializationException |
| | | { |
| | |
| | | // initializeConfigHandler method. |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public DN[] getBaseDNs() |
| | | { |
| | | return baseDNs; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public long getEntryCount() |
| | | { |
| | | return configEntries.size(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isLocal() |
| | | { |
| | | // The configuration information will always be local. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean isIndexed(AttributeType attributeType, IndexType indexType) |
| | | { |
| | | // All searches in this backend will always be considered indexed. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public ConditionResult hasSubordinates(DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | |
| | | return ConditionResult.UNDEFINED; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public long numSubordinates(DN entryDN, boolean subtree) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Entry getEntry(DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | |
| | | return configEntry.getEntry().duplicate(true); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean entryExists(DN entryDN) |
| | | throws DirectoryException |
| | | { |
| | | return configEntries.containsKey(entryDN); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void addEntry(Entry entry, AddOperation addOperation) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void deleteEntry(DN entryDN, DeleteOperation deleteOperation) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void replaceEntry(Entry oldEntry, Entry newEntry, |
| | | ModifyOperation modifyOperation) throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void renameEntry(DN currentDN, Entry entry, |
| | | ModifyDNOperation modifyDNOperation) |
| | | throws DirectoryException |
| | |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void search(SearchOperation searchOperation) |
| | | throws DirectoryException |
| | | { |
| | |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void writeUpdatedConfig() |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void writeSuccessfulStartupConfig() |
| | | { |
| | | if (useLastKnownGoodConfig) |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedControls() |
| | | { |
| | | return SUPPORTED_CONTROLS; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getSupportedFeatures() |
| | | { |
| | | return SUPPORTED_FEATURES; |
| | | return Collections.emptySet(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFExport() |
| | | { |
| | | // TODO We would need export-ldif to initialize this backend. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void exportLDIF(LDIFExportConfig exportConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsLDIFImport() |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public LDIFImportResult importLDIF(LDIFImportConfig importConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup() |
| | | { |
| | | // We do support an online backup mechanism for the configuration. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsBackup(BackupConfig backupConfig, |
| | | StringBuilder unsupportedReason) |
| | | { |
| | |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void createBackup(BackupConfig backupConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void removeBackup(BackupDirectory backupDirectory, |
| | | String backupID) |
| | | throws DirectoryException |
| | |
| | | // NYI |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean supportsRestore() |
| | | { |
| | | // We will provide a restore, but only for offline operations. |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void restoreBackup(RestoreConfig restoreConfig) |
| | | throws DirectoryException |
| | | { |
| | |
| | | logger.info(NOTE_CONFIG_RESTORE_SUCCESSFUL, backupID, backupPath); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public DN getComponentEntryDN() |
| | | { |
| | | return configRootEntry.getDN(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public String getClassName() |
| | | { |
| | | return CLASS_NAME; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Map<String,String> getAlerts() |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void preloadEntryCache() throws UnsupportedOperationException { |
| | | throw new UnsupportedOperationException("Operation not supported."); |
| | | } |
| | | |
| | | private void close(Closeable toClose) |
| | | { |
| | | try |
| | | { |
| | | toClose.close(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | logger.traceException(e); |
| | | } |
| | | } |
| | | } |