/* See LICENSE for licensing and NOTICE for copyright. */
package org.ldaptive.ad.control;
import org.ldaptive.LdapUtils;
import org.ldaptive.asn1.ConstructedDEREncoder;
import org.ldaptive.asn1.IntegerType;
import org.ldaptive.asn1.OctetStringType;
import org.ldaptive.asn1.UniversalDERTag;
import org.ldaptive.control.AbstractControl;
import org.ldaptive.control.RequestControl;
/**
* Request control for active directory servers to use an extended form of an object distinguished name. Control is
* defined as:
*
* <pre>
verifyNameValue ::= SEQUENCE {
Flags INTEGER
ServerName OCTET STRING
}
* </pre>
*
* <p>See http://msdn.microsoft.com/en-us/library/cc223328.aspx</p>
*
* @author Middleware Services
*/
public class VerifyNameControl extends AbstractControl implements RequestControl
{
/** OID of this control. */
public static final String OID = "1.2.840.113556.1.4.1338";
/** hash code seed. */
private static final int HASH_CODE_SEED = 977;
/** Global catalog server to contact. */
private String serverName;
/** Default constructor. */
public VerifyNameControl()
{
super(OID);
}
/**
* Creates a new verify name control.
*
* @param name server name
*/
public VerifyNameControl(final String name)
{
super(OID);
setServerName(name);
}
/**
* Creates a new verify name control.
*
* @param name server name
* @param critical whether this control is critical
*/
public VerifyNameControl(final String name, final boolean critical)
{
super(OID, critical);
setServerName(name);
}
/**
* Returns the server name.
*
* @return server name
*/
public String getServerName()
{
return serverName;
}
/**
* Sets the server name.
*
* @param name server name
*/
public void setServerName(final String name)
{
serverName = name;
}
@Override
public boolean equals(final Object o)
{
if (o == this) {
return true;
}
if (o instanceof VerifyNameControl && super.equals(o)) {
final VerifyNameControl v = (VerifyNameControl) o;
return LdapUtils.areEqual(serverName, v.serverName);
}
return false;
}
@Override
public int hashCode()
{
return LdapUtils.computeHashCode(HASH_CODE_SEED, getOID(), getCriticality(), serverName);
}
@Override
public String toString()
{
return
String.format(
"[%s@%d::criticality=%s, serverName=%s]",
getClass().getName(),
hashCode(),
getCriticality(),
serverName);
}
@Override
public byte[] encode()
{
final ConstructedDEREncoder se = new ConstructedDEREncoder(
UniversalDERTag.SEQ,
new IntegerType(0),
new OctetStringType(serverName));
return se.encode();
}
}