| | |
| | | |
| | | |
| | | |
| | | import org.opends.server.protocols.asn1.ASN1OctetString; |
| | | import org.opends.server.protocols.ldap.LDAPResultCode; |
| | | import org.opends.server.types.Control; |
| | | import org.opends.server.types.DebugLogLevel; |
| | | import org.opends.server.types.LDAPException; |
| | | import org.opends.server.protocols.asn1.ASN1Writer; |
| | | import org.opends.server.types.*; |
| | | |
| | | import static org.opends.server.loggers.debug.DebugLogger.*; |
| | | import org.opends.server.loggers.debug.DebugTracer; |
| | |
| | | import static org.opends.server.util.ServerConstants.*; |
| | | import static org.opends.server.util.StaticUtils.*; |
| | | |
| | | import java.io.IOException; |
| | | |
| | | |
| | | /** |
| | |
| | | extends Control |
| | | { |
| | | /** |
| | | * ControlDecoder implentation to decode this control from a ByteString. |
| | | */ |
| | | private final static class Decoder |
| | | implements ControlDecoder<PasswordExpiringControl> |
| | | { |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public PasswordExpiringControl decode(boolean isCritical, ByteString value) |
| | | throws DirectoryException |
| | | { |
| | | if (value == null) |
| | | { |
| | | Message message = ERR_PWEXPIRING_NO_CONTROL_VALUE.get(); |
| | | throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message); |
| | | } |
| | | |
| | | int secondsUntilExpiration; |
| | | try |
| | | { |
| | | secondsUntilExpiration = |
| | | Integer.parseInt(value.toString()); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | if (debugEnabled()) |
| | | { |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | Message message = ERR_PWEXPIRING_CANNOT_DECODE_SECONDS_UNTIL_EXPIRATION. |
| | | get(getExceptionMessage(e)); |
| | | throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message); |
| | | } |
| | | |
| | | |
| | | return new PasswordExpiringControl(isCritical, |
| | | secondsUntilExpiration); |
| | | } |
| | | |
| | | public String getOID() |
| | | { |
| | | return OID_NS_PASSWORD_EXPIRING; |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * The Control Decoder that can be used to decode this control. |
| | | */ |
| | | public static final ControlDecoder<PasswordExpiringControl> DECODER = |
| | | new Decoder(); |
| | | |
| | | /** |
| | | * The tracer object for the debug logger. |
| | | */ |
| | | private static final DebugTracer TRACER = getTracer(); |
| | |
| | | */ |
| | | public PasswordExpiringControl(int secondsUntilExpiration) |
| | | { |
| | | super(OID_NS_PASSWORD_EXPIRING, false, |
| | | new ASN1OctetString(String.valueOf(secondsUntilExpiration))); |
| | | |
| | | |
| | | this.secondsUntilExpiration = secondsUntilExpiration; |
| | | this(false, secondsUntilExpiration); |
| | | } |
| | | |
| | | |
| | |
| | | * Creates a new instance of the password expiring control with the provided |
| | | * information. |
| | | * |
| | | * @param oid The OID to use for this control. |
| | | * @param isCritical Indicates whether support for this control |
| | | * should be considered a critical part of the |
| | | * client processing. |
| | | * @param secondsUntilExpiration The length of time in seconds until the |
| | | * password actually expires. |
| | | */ |
| | | public PasswordExpiringControl(String oid, boolean isCritical, |
| | | int secondsUntilExpiration) |
| | | public PasswordExpiringControl(boolean isCritical, int secondsUntilExpiration) |
| | | { |
| | | super(oid, isCritical, |
| | | new ASN1OctetString(String.valueOf(secondsUntilExpiration))); |
| | | super(OID_NS_PASSWORD_EXPIRING, isCritical); |
| | | |
| | | |
| | | this.secondsUntilExpiration = secondsUntilExpiration; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Creates a new instance of the password expiring control with the provided |
| | | * information. |
| | | * Writes this control's value to an ASN.1 writer. The value (if any) must be |
| | | * written as an ASN1OctetString. |
| | | * |
| | | * @param oid The OID to use for this control. |
| | | * @param isCritical Indicates whether support for this control |
| | | * should be considered a critical part of the |
| | | * client processing. |
| | | * @param secondsUntilExpiration The length of time in seconds until the |
| | | * password actually expires. |
| | | * @param encodedValue The pre-encoded value for this control. |
| | | * @param writer The ASN.1 output stream to write to. |
| | | * @throws IOException If a problem occurs while writing to the stream. |
| | | */ |
| | | private PasswordExpiringControl(String oid, boolean isCritical, |
| | | int secondsUntilExpiration, |
| | | ASN1OctetString encodedValue) |
| | | { |
| | | super(oid, isCritical, encodedValue); |
| | | |
| | | |
| | | this.secondsUntilExpiration = secondsUntilExpiration; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Creates a new password expiring control from the contents of the provided |
| | | * control. |
| | | * |
| | | * @param control The generic control containing the information to use to |
| | | * create this password expiring control. |
| | | * |
| | | * @return The password expiring control decoded from the provided control. |
| | | * |
| | | * @throws LDAPException If this control cannot be decoded as a valid |
| | | * password expiring control. |
| | | */ |
| | | public static PasswordExpiringControl decodeControl(Control control) |
| | | throws LDAPException |
| | | { |
| | | if (! control.hasValue()) |
| | | { |
| | | Message message = ERR_PWEXPIRING_NO_CONTROL_VALUE.get(); |
| | | throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message); |
| | | } |
| | | |
| | | |
| | | int secondsUntilExpiration; |
| | | try |
| | | { |
| | | secondsUntilExpiration = |
| | | Integer.parseInt(control.getValue().stringValue()); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | if (debugEnabled()) |
| | | { |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | Message message = ERR_PWEXPIRING_CANNOT_DECODE_SECONDS_UNTIL_EXPIRATION. |
| | | get(getExceptionMessage(e)); |
| | | throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message); |
| | | } |
| | | |
| | | |
| | | return new PasswordExpiringControl(control.getOID(), control.isCritical(), |
| | | secondsUntilExpiration, |
| | | control.getValue()); |
| | | @Override |
| | | public void writeValue(ASN1Writer writer) throws IOException { |
| | | writer.writeOctetString(String.valueOf(secondsUntilExpiration)); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * Retrieves a string representation of this password expiring control. |
| | | * |
| | | * @return A string representation of this password expiring control. |
| | | */ |
| | | public String toString() |
| | | { |
| | | StringBuilder buffer = new StringBuilder(); |
| | | toString(buffer); |
| | | return buffer.toString(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Appends a string representation of this password expiring control to the |
| | | * provided buffer. |
| | | * |
| | | * @param buffer The buffer to which the information should be appended. |
| | | */ |
| | | @Override |
| | | public void toString(StringBuilder buffer) |
| | | { |
| | | buffer.append("PasswordExpiringControl(secondsUntilExpiration="); |