| | |
| | | import java.util.concurrent.locks.Lock; |
| | | import java.util.concurrent.locks.ReentrantReadWriteLock; |
| | | |
| | | import org.opends.messages.Message; |
| | | import org.opends.messages.MessageBuilder; |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.forgerock.i18n.LocalizableMessageBuilder; |
| | | import org.opends.server.admin.server.ConfigurationAddListener; |
| | | import org.opends.server.admin.server.ConfigurationChangeListener; |
| | | import org.opends.server.admin.server.ConfigurationDeleteListener; |
| | |
| | | @Override |
| | | public boolean isConfigurationAddAcceptable( |
| | | LocalDBIndexCfg cfg, |
| | | List<Message> unacceptableReasons) |
| | | List<LocalizableMessage> unacceptableReasons) |
| | | { |
| | | boolean isValid = true; |
| | | try |
| | |
| | | } |
| | | catch(Exception e) |
| | | { |
| | | unacceptableReasons.add(Message.raw(e.getLocalizedMessage())); |
| | | unacceptableReasons.add(LocalizableMessage.raw(e.getLocalizedMessage())); |
| | | isValid = false ; |
| | | } |
| | | return isValid; |
| | |
| | | { |
| | | ConfigChangeResult ccr; |
| | | boolean adminActionRequired = false; |
| | | List<Message> messages = new ArrayList<Message>(); |
| | | List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>(); |
| | | |
| | | try |
| | | { |
| | |
| | | } |
| | | catch(Exception e) |
| | | { |
| | | messages.add(Message.raw(e.getLocalizedMessage())); |
| | | messages.add(LocalizableMessage.raw(e.getLocalizedMessage())); |
| | | ccr = new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(), |
| | | adminActionRequired, |
| | | messages); |
| | |
| | | */ |
| | | @Override |
| | | public boolean isConfigurationDeleteAcceptable( |
| | | LocalDBIndexCfg cfg, List<Message> unacceptableReasons) |
| | | LocalDBIndexCfg cfg, List<LocalizableMessage> unacceptableReasons) |
| | | { |
| | | // TODO: validate more before returning true? |
| | | return true; |
| | |
| | | { |
| | | ConfigChangeResult ccr; |
| | | boolean adminActionRequired = false; |
| | | ArrayList<Message> messages = new ArrayList<Message>(); |
| | | ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>(); |
| | | |
| | | exclusiveLock.lock(); |
| | | try |
| | |
| | | } |
| | | catch(DatabaseException de) |
| | | { |
| | | messages.add(Message.raw(StaticUtils.stackTraceToSingleLineString(de))); |
| | | messages.add(LocalizableMessage.raw(StaticUtils.stackTraceToSingleLineString(de))); |
| | | ccr = new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(), |
| | | adminActionRequired, |
| | | messages); |
| | |
| | | */ |
| | | @Override |
| | | public boolean isConfigurationAddAcceptable( |
| | | LocalDBVLVIndexCfg cfg, List<Message> unacceptableReasons) |
| | | LocalDBVLVIndexCfg cfg, List<LocalizableMessage> unacceptableReasons) |
| | | { |
| | | try |
| | | { |
| | |
| | | } |
| | | catch(Exception e) |
| | | { |
| | | Message msg = ERR_JEB_CONFIG_VLV_INDEX_BAD_FILTER.get( |
| | | LocalizableMessage msg = ERR_JEB_CONFIG_VLV_INDEX_BAD_FILTER.get( |
| | | cfg.getFilter(), cfg.getName(), |
| | | e.getLocalizedMessage()); |
| | | unacceptableReasons.add(msg); |
| | |
| | | } |
| | | catch(Exception e) |
| | | { |
| | | Message msg = |
| | | LocalizableMessage msg = |
| | | ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get( |
| | | String.valueOf(sortKeys[i]), cfg.getName()); |
| | | unacceptableReasons.add(msg); |
| | |
| | | DirectoryServer.getAttributeType(sortAttrs[i].toLowerCase()); |
| | | if(attrType == null) |
| | | { |
| | | Message msg = ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get( |
| | | LocalizableMessage msg = ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get( |
| | | sortAttrs[i], cfg.getName()); |
| | | unacceptableReasons.add(msg); |
| | | return false; |
| | |
| | | { |
| | | ConfigChangeResult ccr; |
| | | boolean adminActionRequired = false; |
| | | ArrayList<Message> messages = new ArrayList<Message>(); |
| | | ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>(); |
| | | |
| | | try |
| | | { |
| | |
| | | } |
| | | catch(Exception e) |
| | | { |
| | | messages.add(Message.raw(StaticUtils.stackTraceToSingleLineString(e))); |
| | | messages.add(LocalizableMessage.raw(StaticUtils.stackTraceToSingleLineString(e))); |
| | | ccr = new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(), |
| | | adminActionRequired, |
| | | messages); |
| | |
| | | @Override |
| | | public boolean isConfigurationDeleteAcceptable( |
| | | LocalDBVLVIndexCfg cfg, |
| | | List<Message> unacceptableReasons) |
| | | List<LocalizableMessage> unacceptableReasons) |
| | | { |
| | | // TODO: validate more before returning true? |
| | | return true; |
| | |
| | | { |
| | | ConfigChangeResult ccr; |
| | | boolean adminActionRequired = false; |
| | | List<Message> messages = new ArrayList<Message>(); |
| | | List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>(); |
| | | |
| | | exclusiveLock.lock(); |
| | | try |
| | |
| | | } |
| | | catch(DatabaseException de) |
| | | { |
| | | messages.add(Message.raw(StaticUtils.stackTraceToSingleLineString(de))); |
| | | messages.add(LocalizableMessage.raw(StaticUtils.stackTraceToSingleLineString(de))); |
| | | ccr = new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(), |
| | | adminActionRequired, |
| | | messages); |
| | |
| | | |
| | | if (vlvRequest != null && pageRequest != null) |
| | | { |
| | | Message message = ERR_JEB_SEARCH_CANNOT_MIX_PAGEDRESULTS_AND_VLV.get(); |
| | | LocalizableMessage message = ERR_JEB_SEARCH_CANNOT_MIX_PAGEDRESULTS_AND_VLV.get(); |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message); |
| | | } |
| | | |
| | |
| | | EntryID baseID = dn2id.get(null, aBaseDN, LockMode.DEFAULT); |
| | | if (baseID == null) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_JEB_SEARCH_NO_SUCH_OBJECT.get(aBaseDN.toString()); |
| | | DN matchedDN = getMatchedDN(aBaseDN); |
| | | throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, |
| | |
| | | if(! clientConnection.hasPrivilege(Privilege.UNINDEXED_SEARCH, |
| | | searchOperation)) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_JEB_SEARCH_UNINDEXED_INSUFFICIENT_PRIVILEGES.get(); |
| | | throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS, |
| | | message); |
| | |
| | | |
| | | if (sortRequest.isCritical()) |
| | | { |
| | | Message message = ERR_JEB_SEARCH_CANNOT_SORT_UNINDEXED.get(); |
| | | LocalizableMessage message = ERR_JEB_SEARCH_CANNOT_SORT_UNINDEXED.get(); |
| | | throw new DirectoryException( |
| | | ResultCode.UNAVAILABLE_CRITICAL_EXTENSION, message); |
| | | } |
| | |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | String str = pageRequest.getCookie().toHexString(); |
| | | Message msg = ERR_JEB_INVALID_PAGED_RESULTS_COOKIE.get(str); |
| | | LocalizableMessage msg = ERR_JEB_INVALID_PAGED_RESULTS_COOKIE.get(str); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | msg, e); |
| | | } |
| | |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | String str = pageRequest.getCookie().toHexString(); |
| | | Message msg = ERR_JEB_INVALID_PAGED_RESULTS_COOKIE.get(str); |
| | | LocalizableMessage msg = ERR_JEB_INVALID_PAGED_RESULTS_COOKIE.get(str); |
| | | throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, |
| | | msg, e); |
| | | } |
| | |
| | | // Check whether the entry already exists. |
| | | if (dn2id.get(txn, entry.getName(), LockMode.DEFAULT) != null) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_JEB_ADD_ENTRY_ALREADY_EXISTS.get(entry.getName().toString()); |
| | | throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, |
| | | message); |
| | |
| | | parentID = dn2id.get(txn, parentDN, LockMode.DEFAULT); |
| | | if (parentID == null) |
| | | { |
| | | Message message = ERR_JEB_ADD_NO_SUCH_OBJECT.get( |
| | | LocalizableMessage message = ERR_JEB_ADD_NO_SUCH_OBJECT.get( |
| | | entry.getName().toString()); |
| | | DN matchedDN = getMatchedDN(baseDN); |
| | | throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, |
| | |
| | | if (!dn2id.insert(txn, entry.getName(), entryID)) |
| | | { |
| | | // Do not ever expect to come through here. |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_JEB_ADD_ENTRY_ALREADY_EXISTS.get(entry.getName().toString()); |
| | | throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, |
| | | message); |
| | |
| | | if (!dn2uri.addEntry(txn, entry)) |
| | | { |
| | | // Do not ever expect to come through here. |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_JEB_ADD_ENTRY_ALREADY_EXISTS.get(entry.getName().toString()); |
| | | throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, |
| | | message); |
| | |
| | | if (!id2entry.insert(txn, entryID, entry)) |
| | | { |
| | | // Do not ever expect to come through here. |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_JEB_ADD_ENTRY_ALREADY_EXISTS.get(entry.getName().toString()); |
| | | throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, |
| | | message); |
| | |
| | | EntryID nodeID = dn2id.get(txn, dn, LockMode.DEFAULT); |
| | | if (nodeID == null) |
| | | { |
| | | Message msg = |
| | | LocalizableMessage msg = |
| | | ERR_JEB_MISSING_DN2ID_RECORD.get(dn.toNormalizedString()); |
| | | throw new JebException(msg); |
| | | } |
| | |
| | | { |
| | | msg = stackTraceToSingleLineString(e); |
| | | } |
| | | Message message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg); |
| | | LocalizableMessage message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, e); |
| | | } |
| | |
| | | { |
| | | // The subtree delete control was not specified and |
| | | // the target entry is not a leaf. |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_JEB_DELETE_NOT_ALLOWED_ON_NONLEAF.get(entryDN.toString()); |
| | | throw new DirectoryException(ResultCode.NOT_ALLOWED_ON_NONLEAF, |
| | | message); |
| | |
| | | |
| | | if (!pluginResult.continueProcessing()) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_JEB_DELETE_ABORTED_BY_SUBORDINATE_PLUGIN.get( |
| | | JebFormat.dnFromDNKey(key.getData(), 0, 0, getBaseDN()). |
| | | toString()); |
| | |
| | | { |
| | | msg = stackTraceToSingleLineString(e); |
| | | } |
| | | Message message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg); |
| | | LocalizableMessage message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, e); |
| | | } |
| | |
| | | status = dn2id.read(txn, leafDNKey, value, LockMode.RMW); |
| | | if (status != OperationStatus.SUCCESS) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_JEB_DELETE_NO_SUCH_OBJECT.get(leafDNKey.toString()); |
| | | DN matchedDN = getMatchedDN(baseDN); |
| | | throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, |
| | |
| | | if (dn2id.delete(txn, leafDNKey) != OperationStatus.SUCCESS) |
| | | { |
| | | // Do not expect to ever come through here. |
| | | Message message = ERR_JEB_DELETE_NO_SUCH_OBJECT.get(leafDNKey.toString()); |
| | | LocalizableMessage message = ERR_JEB_DELETE_NO_SUCH_OBJECT.get(leafDNKey.toString()); |
| | | DN matchedDN = getMatchedDN(baseDN); |
| | | throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, |
| | | message, matchedDN, null); |
| | |
| | | Entry entry = id2entry.get(txn, leafID, LockMode.RMW); |
| | | if (entry == null) |
| | | { |
| | | Message msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(leafID.toString()); |
| | | LocalizableMessage msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(leafID.toString()); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | msg); |
| | | } |
| | |
| | | // Remove from id2entry. |
| | | if (!id2entry.remove(txn, leafID)) |
| | | { |
| | | Message msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(leafID.toString()); |
| | | LocalizableMessage msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(leafID.toString()); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | msg); |
| | | } |
| | |
| | | EntryID parentID = dn2id.get(txn, parentDN, LockMode.DEFAULT); |
| | | if (parentID == null) |
| | | { |
| | | Message msg = |
| | | LocalizableMessage msg = |
| | | ERR_JEB_MISSING_DN2ID_RECORD.get(parentDN.toNormalizedString()); |
| | | throw new JebException(msg); |
| | | } |
| | |
| | | if (entry == null) |
| | | { |
| | | // The entryID does not exist. |
| | | Message msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(entryID.toString()); |
| | | LocalizableMessage msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(entryID.toString()); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | msg); |
| | | } |
| | |
| | | if (entryID == null) |
| | | { |
| | | // The entry does not exist. |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_JEB_MODIFY_NO_SUCH_OBJECT.get(newEntry.getName().toString()); |
| | | DN matchedDN = getMatchedDN(baseDN); |
| | | throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, |
| | |
| | | { |
| | | msg = stackTraceToSingleLineString(e); |
| | | } |
| | | Message message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg); |
| | | LocalizableMessage message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, e); |
| | | } |
| | |
| | | if (!currentDN.equals(entry.getName()) && |
| | | dn2id.get(txn, entry.getName(), LockMode.DEFAULT) != null) |
| | | { |
| | | Message message = ERR_JEB_MODIFYDN_ALREADY_EXISTS.get( |
| | | LocalizableMessage message = ERR_JEB_MODIFYDN_ALREADY_EXISTS.get( |
| | | entry.getName().toString()); |
| | | throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, |
| | | message); |
| | |
| | | // Check for referral entries above the target entry. |
| | | dn2uri.targetEntryReferrals(currentDN, null); |
| | | |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_JEB_MODIFYDN_NO_SUCH_OBJECT.get(currentDN.toString()); |
| | | DN matchedDN = getMatchedDN(baseDN); |
| | | throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, |
| | |
| | | Entry oldApexEntry = id2entry.get(txn, oldApexID, LockMode.DEFAULT); |
| | | if (oldApexEntry == null) |
| | | { |
| | | Message msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(oldApexID.toString()); |
| | | LocalizableMessage msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(oldApexID.toString()); |
| | | throw new DirectoryException( |
| | | DirectoryServer.getServerErrorResultCode(), msg); |
| | | } |
| | |
| | | EntryID newSuperiorID = dn2id.get(txn, newSuperiorDN, LockMode.DEFAULT); |
| | | if (newSuperiorID == null) |
| | | { |
| | | Message msg = |
| | | LocalizableMessage msg = |
| | | ERR_JEB_NEW_SUPERIOR_NO_SUCH_OBJECT.get( |
| | | newSuperiorDN.toString()); |
| | | DN matchedDN = getMatchedDN(baseDN); |
| | |
| | | { |
| | | msg = stackTraceToSingleLineString(e); |
| | | } |
| | | Message message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg); |
| | | LocalizableMessage message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg); |
| | | throw new DirectoryException(DirectoryServer.getServerErrorResultCode(), |
| | | message, e); |
| | | } |
| | |
| | | { |
| | | if (!dn2id.insert(txn, newEntry.getName(), newID)) |
| | | { |
| | | Message message = ERR_JEB_MODIFYDN_ALREADY_EXISTS.get( |
| | | LocalizableMessage message = ERR_JEB_MODIFYDN_ALREADY_EXISTS.get( |
| | | newEntry.getName().toString()); |
| | | throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, |
| | | message); |
| | |
| | | |
| | | if (!pluginResult.continueProcessing()) |
| | | { |
| | | Message message = ERR_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_PLUGIN.get( |
| | | LocalizableMessage message = ERR_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_PLUGIN.get( |
| | | oldDN.toString(), newDN.toString()); |
| | | throw new DirectoryException( |
| | | DirectoryServer.getServerErrorResultCode(), message); |
| | |
| | | |
| | | if (! modifications.isEmpty()) |
| | | { |
| | | MessageBuilder invalidReason = new MessageBuilder(); |
| | | LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder(); |
| | | if (! newEntry.conformsToSchema(null, false, false, false, |
| | | invalidReason)) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_SCHEMA_ERROR.get( |
| | | oldDN.toString(), |
| | | newDN.toString(), |
| | |
| | | { |
| | | msg = stackTraceToSingleLineString(e); |
| | | } |
| | | Message message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg); |
| | | LocalizableMessage message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg); |
| | | throw new JebException(message, e); |
| | | } |
| | | } |
| | |
| | | */ |
| | | @Override |
| | | public boolean isConfigurationChangeAcceptable( |
| | | LocalDBBackendCfg cfg, List<Message> unacceptableReasons) |
| | | LocalDBBackendCfg cfg, List<LocalizableMessage> unacceptableReasons) |
| | | { |
| | | // This is always true because only all config attributes used |
| | | // by the entry container should be validated by the admin framework. |
| | |
| | | public ConfigChangeResult applyConfigurationChange(LocalDBBackendCfg cfg) |
| | | { |
| | | boolean adminActionRequired = false; |
| | | ArrayList<Message> messages = new ArrayList<Message>(); |
| | | ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>(); |
| | | |
| | | exclusiveLock.lock(); |
| | | try |
| | |
| | | if (id2children.setIndexEntryLimit(cfg.getIndexEntryLimit())) |
| | | { |
| | | adminActionRequired = true; |
| | | Message message = NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD |
| | | LocalizableMessage message = NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD |
| | | .get(id2children.getName()); |
| | | messages.add(message); |
| | | } |
| | |
| | | if (id2subtree.setIndexEntryLimit(cfg.getIndexEntryLimit())) |
| | | { |
| | | adminActionRequired = true; |
| | | Message message = NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD |
| | | LocalizableMessage message = NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD |
| | | .get(id2subtree.getName()); |
| | | messages.add(message); |
| | | } |
| | |
| | | } |
| | | catch (DatabaseException e) |
| | | { |
| | | messages.add(Message.raw(stackTraceToSingleLineString(e))); |
| | | messages.add(LocalizableMessage.raw(stackTraceToSingleLineString(e))); |
| | | return new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(), |
| | | false, messages); |
| | | } |
| | |
| | | // Check for referral entries above the base entry. |
| | | dn2uri.targetEntryReferrals(baseDN, searchScope); |
| | | |
| | | Message message = ERR_JEB_SEARCH_NO_SUCH_OBJECT.get(baseDN.toString()); |
| | | LocalizableMessage message = ERR_JEB_SEARCH_NO_SUCH_OBJECT.get(baseDN.toString()); |
| | | DN matchedDN = getMatchedDN(baseDN); |
| | | throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, |
| | | message, matchedDN, null); |