use of org.apache.directory.api.ldap.model.exception.LdapInvalidDnException in project directory-ldap-api by apache.
the class StoreSearchRequestBaseObject method action.
/**
* {@inheritDoc}
*/
public void action(LdapMessageContainer<SearchRequestDecorator> container) throws DecoderException {
SearchRequestDecorator searchRequestDecorator = container.getMessage();
SearchRequest searchRequest = searchRequestDecorator.getDecorated();
TLV tlv = container.getCurrentTLV();
// We have to check that this is a correct Dn
Dn baseObject;
// root.
if (tlv.getLength() != 0) {
byte[] dnBytes = tlv.getValue().getData();
String dnStr = Strings.utf8ToString(dnBytes);
try {
baseObject = new Dn(dnStr);
} catch (LdapInvalidDnException ine) {
String msg = "Invalid root Dn given : " + dnStr + " (" + Strings.dumpBytes(dnBytes) + ") is invalid";
LOG.error("{} : {}", msg, ine.getMessage());
SearchResultDoneImpl response = new SearchResultDoneImpl(searchRequest.getMessageId());
throw new ResponseCarryingException(msg, response, ResultCodeEnum.INVALID_DN_SYNTAX, Dn.EMPTY_DN, ine);
}
} else {
baseObject = Dn.EMPTY_DN;
}
searchRequest.setBase(baseObject);
LOG.debug("Searching with root Dn : {}", baseObject);
}
use of org.apache.directory.api.ldap.model.exception.LdapInvalidDnException in project directory-ldap-api by apache.
the class InitDelRequest method action.
/**
* {@inheritDoc}
*/
public void action(LdapMessageContainer<DeleteRequestDecorator> container) throws DecoderException {
// Create the DeleteRequest LdapMessage instance and store it in the container
DeleteRequest internaldelRequest = new DeleteRequestImpl();
internaldelRequest.setMessageId(container.getMessageId());
DeleteRequestDecorator delRequest = new DeleteRequestDecorator(container.getLdapCodecService(), internaldelRequest);
container.setMessage(delRequest);
// And store the Dn into it
// Get the Value and store it in the DelRequest
TLV tlv = container.getCurrentTLV();
// We have to handle the special case of a 0 length matched
// Dn
Dn entry;
if (tlv.getLength() == 0) {
// This will generate a PROTOCOL_ERROR
throw new DecoderException(I18n.err(I18n.ERR_04073));
} else {
byte[] dnBytes = tlv.getValue().getData();
String dnStr = Strings.utf8ToString(dnBytes);
try {
entry = new Dn(dnStr);
} catch (LdapInvalidDnException ine) {
String msg = I18n.err(I18n.ERR_04074, dnStr, Strings.dumpBytes(dnBytes), ine.getLocalizedMessage());
LOG.error(msg);
DeleteResponseImpl response = new DeleteResponseImpl(delRequest.getMessageId());
throw new ResponseCarryingException(msg, response, ResultCodeEnum.INVALID_DN_SYNTAX, Dn.EMPTY_DN, ine);
}
delRequest.setName(entry);
}
// We can have an END transition
container.setGrammarEndAllowed(true);
if (IS_DEBUG) {
LOG.debug("Deleting Dn {}", entry);
}
}
use of org.apache.directory.api.ldap.model.exception.LdapInvalidDnException in project directory-ldap-api by apache.
the class WrappedPartialResultException method wrap.
/**
* Wraps a LDAP exception into a NaingException
*
* @param t The original exception
* @throws NamingException The wrapping JNDI exception
*/
public static void wrap(Throwable t) throws NamingException {
if (t instanceof NamingException) {
throw (NamingException) t;
}
NamingException ne;
if ((t instanceof LdapAffectMultipleDsaException) || (t instanceof LdapAliasDereferencingException) || (t instanceof LdapLoopDetectedException) || (t instanceof LdapAliasException) || (t instanceof LdapOperationErrorException) || (t instanceof LdapOtherException)) {
ne = new NamingException(t.getLocalizedMessage());
} else if (t instanceof LdapAttributeInUseException) {
ne = new AttributeInUseException(t.getLocalizedMessage());
} else if (t instanceof LdapAuthenticationException) {
ne = new AuthenticationException(t.getLocalizedMessage());
} else if (t instanceof LdapAuthenticationNotSupportedException) {
ne = new AuthenticationNotSupportedException(t.getLocalizedMessage());
} else if (t instanceof LdapContextNotEmptyException) {
ne = new ContextNotEmptyException(t.getLocalizedMessage());
} else if (t instanceof LdapEntryAlreadyExistsException) {
ne = new NameAlreadyBoundException(t.getLocalizedMessage());
} else if (t instanceof LdapInvalidAttributeTypeException) {
ne = new InvalidAttributeIdentifierException(t.getLocalizedMessage());
} else if (t instanceof LdapInvalidAttributeValueException) {
ne = new InvalidAttributeValueException(t.getLocalizedMessage());
} else if (t instanceof LdapInvalidDnException) {
ne = new InvalidNameException(t.getLocalizedMessage());
} else if (t instanceof LdapInvalidSearchFilterException) {
ne = new InvalidSearchFilterException(t.getLocalizedMessage());
} else if (t instanceof LdapNoPermissionException) {
ne = new NoPermissionException(t.getLocalizedMessage());
} else if (t instanceof LdapNoSuchAttributeException) {
ne = new NoSuchAttributeException(t.getLocalizedMessage());
} else if (t instanceof LdapNoSuchObjectException) {
ne = new NameNotFoundException(t.getLocalizedMessage());
} else if (t instanceof LdapProtocolErrorException) {
ne = new CommunicationException(t.getLocalizedMessage());
} else if (t instanceof LdapReferralException) {
ne = new WrappedReferralException((LdapReferralException) t);
} else if (t instanceof LdapPartialResultException) {
ne = new WrappedPartialResultException((LdapPartialResultException) t);
} else if (t instanceof LdapSchemaViolationException) {
ne = new SchemaViolationException(t.getLocalizedMessage());
} else if (t instanceof LdapServiceUnavailableException) {
ne = new ServiceUnavailableException(t.getLocalizedMessage());
} else if (t instanceof LdapTimeLimitExceededException) {
ne = new TimeLimitExceededException(t.getLocalizedMessage());
} else if (t instanceof LdapUnwillingToPerformException) {
ne = new OperationNotSupportedException(t.getLocalizedMessage());
} else {
ne = new NamingException(t.getLocalizedMessage());
}
ne.setRootCause(t);
throw ne;
}
use of org.apache.directory.api.ldap.model.exception.LdapInvalidDnException in project directory-ldap-api by apache.
the class LdifEntry method equals.
/**
* {@inheritDoc}
*/
@Override
public boolean equals(Object o) {
// Basic equals checks
if (this == o) {
return true;
}
if (o == null) {
return false;
}
if (!(o instanceof LdifEntry)) {
return false;
}
LdifEntry otherEntry = (LdifEntry) o;
// Check the Dn
Dn thisDn = entryDn;
Dn dnEntry = otherEntry.getDn();
if (!thisDn.equals(dnEntry)) {
return false;
}
// Check the changeType
if (changeType != otherEntry.changeType) {
return false;
}
// Check each different cases
switch(changeType) {
case None:
// Fall through
case Add:
// Checks the attributes
if (entry.size() != otherEntry.entry.size()) {
return false;
}
if (!entry.equals(otherEntry.entry)) {
return false;
}
break;
case Delete:
// Nothing to do, if the DNs are equals
break;
case Modify:
// First, deal with special cases
if (modificationList == null) {
if (otherEntry.modificationList != null) {
return false;
} else {
break;
}
}
if (otherEntry.modificationList == null) {
return false;
}
if (modificationList.size() != otherEntry.modificationList.size()) {
return false;
}
// Now, compares the contents
int i = 0;
for (Modification modification : modificationList) {
if (!modification.equals(otherEntry.modificationList.get(i))) {
return false;
}
i++;
}
break;
case ModDn:
case ModRdn:
// Check the deleteOldRdn flag
if (deleteOldRdn != otherEntry.deleteOldRdn) {
return false;
}
// Check the newRdn value
try {
Rdn thisNewRdn = new Rdn(newRdn);
Rdn entryNewRdn = new Rdn(otherEntry.newRdn);
if (!thisNewRdn.equals(entryNewRdn)) {
return false;
}
} catch (LdapInvalidDnException ine) {
return false;
}
// Check the newSuperior value
try {
Dn thisNewSuperior = new Dn(newSuperior);
Dn entryNewSuperior = new Dn(otherEntry.newSuperior);
if (!thisNewSuperior.equals(entryNewSuperior)) {
return false;
}
} catch (LdapInvalidDnException ine) {
return false;
}
break;
default:
// do nothing
break;
}
if (controls != null) {
Map<String, LdifControl> otherControls = otherEntry.controls;
if (otherControls == null) {
return false;
}
if (controls.size() != otherControls.size()) {
return false;
}
for (Map.Entry<String, LdifControl> controlEntry : controls.entrySet()) {
String controlOid = controlEntry.getKey();
if (!otherControls.containsKey(controlOid)) {
return false;
}
Control thisControl = controlEntry.getValue();
Control otherControl = otherControls.get(controlOid);
if (thisControl == null) {
if (otherControl != null) {
return false;
}
} else {
if (!thisControl.equals(otherControl)) {
return false;
}
}
}
return true;
} else {
return otherEntry.controls == null;
}
}
use of org.apache.directory.api.ldap.model.exception.LdapInvalidDnException in project directory-ldap-api by apache.
the class LdifReader method parseEntry.
/**
* Parse a ldif file. The following rules are processed :
* <pre>
* <ldif-file> ::= <ldif-attrval-record> <ldif-attrval-records> |
* <ldif-change-record> <ldif-change-records>
* <ldif-attrval-record> ::= <dn-spec> <sep> <attrval-spec> <attrval-specs>
* <ldif-change-record> ::= <dn-spec> <sep> <controls-e> <changerecord>
* <dn-spec> ::= "dn:" <fill> <distinguishedName> | "dn::" <fill> <base64-distinguishedName>
* <changerecord> ::= "changetype:" <fill> <change-op>
* </pre>
*
* @return the parsed ldifEntry
* @exception LdapException If the ldif file does not contain a valid entry
*/
protected LdifEntry parseEntry() throws LdapException {
if ((lines == null) || lines.isEmpty()) {
LOG.debug(I18n.msg(I18n.MSG_13408_END_OF_LDIF));
return null;
}
// The entry must start with a dn: or a dn::
String line = lines.get(0);
lineNumber -= (lines.size() - 1);
String name = parseDn(line);
Dn dn = null;
try {
dn = new Dn(schemaManager, name);
} catch (LdapInvalidDnException lide) {
// Deal with the RDN whihc is not in the schema
// First parse the DN without the schema
dn = new Dn(name);
Rdn rdn = dn.getRdn();
// Process each Ava
for (Ava ava : rdn) {
if ((schemaManager != null) && (schemaManager.getAttributeType(ava.getType()) == null) && schemaManager.isRelaxed()) {
// Not found : create a new one
MutableAttributeType newAttributeType = new MutableAttributeType("1.3.6.1.4.1.18060.0.9999." + oidCounter++);
newAttributeType.setNames(ava.getType());
newAttributeType.setSyntax(schemaManager.getLdapSyntaxRegistry().get(SchemaConstants.DIRECTORY_STRING_SYNTAX));
schemaManager.add(newAttributeType);
}
}
dn = new Dn(schemaManager, name);
}
// Ok, we have found a Dn
LdifEntry entry = createLdifEntry(schemaManager);
entry.setLengthBeforeParsing(entryLen);
entry.setOffset(entryOffset);
entry.setDn(dn);
// We remove this dn from the lines
lines.remove(0);
// Now, let's iterate through the other lines
Iterator<String> iter = lines.iterator();
// This flag is used to distinguish between an entry and a change
int type = LDIF_ENTRY;
// The following boolean is used to check that a control is *not*
// found elswhere than just after the dn
boolean controlSeen = false;
// We use this boolean to check that we do not have AttributeValues
// after a change operation
boolean changeTypeSeen = false;
ChangeType operation = ChangeType.Add;
String lowerLine;
Control control;
while (iter.hasNext()) {
lineNumber++;
// Each line could start either with an OID, an attribute type, with
// "control:" or with "changetype:"
line = iter.next();
lowerLine = Strings.toLowerCaseAscii(line);
// 3) The first line after the Dn is anything else
if (lowerLine.startsWith("control:")) {
if (containsEntries) {
LOG.error(I18n.err(I18n.ERR_13401_CHANGE_NOT_ALLOWED, lineNumber));
throw new LdapLdifException(I18n.err(I18n.ERR_13440_NO_CHANGE));
}
containsChanges = true;
if (controlSeen) {
LOG.error(I18n.err(I18n.ERR_13418_CONTROL_ALREADY_FOUND, lineNumber));
throw new LdapLdifException(I18n.err(I18n.ERR_13457_MISPLACED_CONTROL));
}
// Parse the control
control = parseControl(line.substring("control:".length()));
entry.addControl(control);
} else if (lowerLine.startsWith("changetype:")) {
if (containsEntries) {
LOG.error(I18n.err(I18n.ERR_13401_CHANGE_NOT_ALLOWED, lineNumber));
throw new LdapLdifException(I18n.err(I18n.ERR_13440_NO_CHANGE));
}
containsChanges = true;
if (changeTypeSeen) {
LOG.error(I18n.err(I18n.ERR_13419_CHANGETYPE_ALREADY_FOUND, lineNumber));
throw new LdapLdifException(I18n.err(I18n.ERR_13458_MISPLACED_CHANGETYPE));
}
// A change request
type = CHANGE;
controlSeen = true;
operation = parseChangeType(line);
// Parse the change operation in a separate function
parseChange(entry, iter, operation);
changeTypeSeen = true;
} else if (line.indexOf(':') > 0) {
if (containsChanges) {
LOG.error(I18n.err(I18n.ERR_13401_CHANGE_NOT_ALLOWED, lineNumber));
throw new LdapLdifException(I18n.err(I18n.ERR_13440_NO_CHANGE));
}
containsEntries = true;
if (controlSeen || changeTypeSeen) {
LOG.error(I18n.err(I18n.ERR_13420_AT_VALUE_NOT_ALLOWED_AFTER_CONTROL, lineNumber));
throw new LdapLdifException(I18n.err(I18n.ERR_13459_MISPLACED_ATTRIBUTETYPE));
}
parseAttributeValue(entry, line, lowerLine);
type = LDIF_ENTRY;
} else {
// Invalid attribute Value
LOG.error(I18n.err(I18n.ERR_13421_ATTRIBUTE_TYPE_EXPECTED, lineNumber));
throw new LdapLdifException(I18n.err(I18n.ERR_13460_BAD_ATTRIBUTE));
}
}
if (type == LDIF_ENTRY) {
LOG.debug(I18n.msg(I18n.MSG_13406_READ_ENTRY, entry));
} else if (type == CHANGE) {
entry.setChangeType(operation);
LOG.debug(I18n.msg(I18n.MSG_13404_READ_MODIF, entry));
} else {
LOG.error(I18n.err(I18n.ERR_13422_UNKNOWN_ENTRY_TYPE, lineNumber));
throw new LdapLdifException(I18n.err(I18n.ERR_13461_UNKNOWN_ENTRY));
}
return entry;
}
Aggregations