| | |
| | | |
| | | import static org.opends.server.config.ConfigConstants.*; |
| | | import static org.opends.server.core.CoreConstants.*; |
| | | import static org.opends.server.extensions.ExtensionsConstants.*; |
| | | import static org.opends.server.loggers.Access.*; |
| | | import static org.opends.server.loggers.Debug.*; |
| | | import static org.opends.server.loggers.debug.DebugLogger.debugCought; |
| | | import static org.opends.server.loggers.debug.DebugLogger.debugEnabled; |
| | | import static org.opends.server.loggers.Error.*; |
| | | import org.opends.server.types.DebugLogLevel; |
| | | import static org.opends.server.messages.CoreMessages.*; |
| | | import static org.opends.server.messages.MessageHandler.*; |
| | | import static org.opends.server.util.ServerConstants.*; |
| | |
| | | implements PreParseBindOperation, PreOperationBindOperation, |
| | | PostOperationBindOperation, PostResponseBindOperation |
| | | { |
| | | /** |
| | | * The fully-qualified name of this class for debugging purposes. |
| | | */ |
| | | private static final String CLASS_NAME = |
| | | "org.opends.server.core.BindOperation"; |
| | | |
| | | |
| | | |
| | |
| | | { |
| | | super(clientConnection, operationID, messageID, requestControls); |
| | | |
| | | assert debugConstructor(CLASS_NAME, |
| | | new String[] |
| | | { |
| | | String.valueOf(clientConnection), |
| | | String.valueOf(messageID), |
| | | String.valueOf(requestControls), |
| | | String.valueOf(rawBindDN), |
| | | String.valueOf(simplePassword) |
| | | }); |
| | | |
| | | this.authType = AuthenticationType.SIMPLE; |
| | | this.saslMechanism = null; |
| | |
| | | { |
| | | super(clientConnection, operationID, messageID, requestControls); |
| | | |
| | | assert debugConstructor(CLASS_NAME, |
| | | new String[] |
| | | { |
| | | String.valueOf(clientConnection), |
| | | String.valueOf(operationID), |
| | | String.valueOf(messageID), |
| | | String.valueOf(requestControls), |
| | | String.valueOf(rawBindDN), |
| | | String.valueOf(saslMechanism), |
| | | String.valueOf(saslCredentials) |
| | | }); |
| | | |
| | | this.authType = AuthenticationType.SASL; |
| | | this.saslMechanism = saslMechanism; |
| | |
| | | { |
| | | super(clientConnection, operationID, messageID, requestControls); |
| | | |
| | | assert debugConstructor(CLASS_NAME, |
| | | new String[] |
| | | { |
| | | String.valueOf(clientConnection), |
| | | String.valueOf(messageID), |
| | | String.valueOf(requestControls), |
| | | String.valueOf(bindDN), |
| | | String.valueOf(simplePassword) |
| | | }); |
| | | |
| | | this.authType = AuthenticationType.SIMPLE; |
| | | this.bindDN = bindDN; |
| | |
| | | { |
| | | super(clientConnection, operationID, messageID, requestControls); |
| | | |
| | | assert debugConstructor(CLASS_NAME, |
| | | new String[] |
| | | { |
| | | String.valueOf(clientConnection), |
| | | String.valueOf(operationID), |
| | | String.valueOf(messageID), |
| | | String.valueOf(requestControls), |
| | | String.valueOf(bindDN), |
| | | String.valueOf(saslMechanism), |
| | | String.valueOf(saslCredentials) |
| | | }); |
| | | |
| | | this.authType = AuthenticationType.SASL; |
| | | this.bindDN = bindDN; |
| | |
| | | */ |
| | | public final AuthenticationType getAuthenticationType() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getAuthenticationType"); |
| | | |
| | | return authType; |
| | | } |
| | |
| | | */ |
| | | public final ByteString getRawBindDN() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getRawBindDN"); |
| | | |
| | | return rawBindDN; |
| | | } |
| | |
| | | */ |
| | | public final void setRawBindDN(ByteString rawBindDN) |
| | | { |
| | | assert debugEnter(CLASS_NAME, "setRawBindDN", String.valueOf(rawBindDN)); |
| | | |
| | | if (rawBindDN == null) |
| | | { |
| | |
| | | */ |
| | | public final DN getBindDN() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getBindDN"); |
| | | |
| | | return bindDN; |
| | | } |
| | |
| | | */ |
| | | public final ByteString getSimplePassword() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getSimplePassword"); |
| | | |
| | | return simplePassword; |
| | | } |
| | |
| | | */ |
| | | public final void setSimplePassword(ByteString simplePassword) |
| | | { |
| | | assert debugEnter(CLASS_NAME, "setSimplePassword", |
| | | String.valueOf(simplePassword)); |
| | | |
| | | if (simplePassword == null) |
| | | { |
| | |
| | | */ |
| | | public final String getSASLMechanism() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getSASLMechanism"); |
| | | |
| | | return saslMechanism; |
| | | } |
| | |
| | | */ |
| | | public final ASN1OctetString getSASLCredentials() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getSASLCredentials"); |
| | | |
| | | return saslCredentials; |
| | | } |
| | |
| | | public final void setSASLCredentials(String saslMechanism, |
| | | ASN1OctetString saslCredentials) |
| | | { |
| | | assert debugEnter(CLASS_NAME, "setSASLCredentials", |
| | | String.valueOf(saslCredentials)); |
| | | |
| | | this.saslMechanism = saslMechanism; |
| | | this.saslCredentials = saslCredentials; |
| | |
| | | */ |
| | | public final ASN1OctetString getServerSASLCredentials() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getServerSASLCredentials"); |
| | | |
| | | return serverSASLCredentials; |
| | | } |
| | |
| | | public final void setServerSASLCredentials(ASN1OctetString |
| | | serverSASLCredentials) |
| | | { |
| | | assert debugEnter(CLASS_NAME, "setServerSASLCredentials", |
| | | String.valueOf(serverSASLCredentials)); |
| | | |
| | | this.serverSASLCredentials = serverSASLCredentials; |
| | | } |
| | |
| | | */ |
| | | public final Entry getSASLAuthUserEntry() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getSASLAuthUserEntry"); |
| | | |
| | | return saslAuthUserEntry; |
| | | } |
| | |
| | | */ |
| | | public final void setSASLAuthUserEntry(Entry saslAuthUserEntry) |
| | | { |
| | | assert debugEnter(CLASS_NAME, "setSASLAuthUserEntry", |
| | | String.valueOf(saslAuthUserEntry)); |
| | | |
| | | this.saslAuthUserEntry = saslAuthUserEntry; |
| | | } |
| | |
| | | */ |
| | | public final String getAuthFailureReason() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getAuthFailureReason"); |
| | | |
| | | return authFailureReason; |
| | | } |
| | |
| | | */ |
| | | public final int getAuthFailureID() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getAuthFailureID"); |
| | | |
| | | return authFailureID; |
| | | } |
| | |
| | | */ |
| | | public final void setAuthFailureReason(int id, String reason) |
| | | { |
| | | assert debugEnter(CLASS_NAME, "setAuthFailureReason", |
| | | String.valueOf(id), String.valueOf(reason)); |
| | | |
| | | if (id < 0) |
| | | { |
| | |
| | | */ |
| | | public final DN getUserEntryDN() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getUserEntryDN"); |
| | | |
| | | return userEntryDN; |
| | | } |
| | |
| | | */ |
| | | public final AuthenticationInfo getAuthenticationInfo() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getAuthenticationInfo"); |
| | | |
| | | return authInfo; |
| | | } |
| | |
| | | */ |
| | | public final void setAuthenticationInfo(AuthenticationInfo authInfo) |
| | | { |
| | | assert debugEnter(CLASS_NAME, "setAuthenticationInfo", |
| | | String.valueOf(authInfo)); |
| | | |
| | | this.authInfo = authInfo; |
| | | } |
| | |
| | | @Override() |
| | | public final long getProcessingStartTime() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getProcessingStartTime"); |
| | | |
| | | return processingStartTime; |
| | | } |
| | |
| | | @Override() |
| | | public final long getProcessingStopTime() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getProcessingStopTime"); |
| | | |
| | | return processingStopTime; |
| | | } |
| | |
| | | @Override() |
| | | public final long getProcessingTime() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getProcessingTime"); |
| | | |
| | | return (processingStopTime - processingStartTime); |
| | | } |
| | |
| | | @Override() |
| | | public final List<Control> getResponseControls() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getResponseControls"); |
| | | |
| | | return responseControls; |
| | | } |
| | |
| | | @Override() |
| | | public final void run() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "run"); |
| | | |
| | | |
| | | // Start the processing timer and initially set the result to indicate that |
| | |
| | | } |
| | | catch (DirectoryException de) |
| | | { |
| | | assert debugException(CLASS_NAME, "run", de); |
| | | if (debugEnabled()) |
| | | { |
| | | debugCought(DebugLogLevel.ERROR, de); |
| | | } |
| | | |
| | | setResultCode(ResultCode.INVALID_CREDENTIALS); |
| | | setAuthFailureReason(de.getErrorMessageID(), de.getErrorMessage()); |
| | |
| | | } |
| | | catch (DirectoryException de) |
| | | { |
| | | assert debugException(CLASS_NAME, "run", de); |
| | | if (debugEnabled()) |
| | | { |
| | | debugCought(DebugLogLevel.ERROR, de); |
| | | } |
| | | |
| | | setResultCode(ResultCode.INVALID_CREDENTIALS); |
| | | setAuthFailureReason(de.getErrorMessageID(), |
| | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | assert debugException(CLASS_NAME, "run", e); |
| | | if (debugEnabled()) |
| | | { |
| | | debugCought(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_BIND_CANNOT_PROCESS_USER_SIZE_LIMIT; |
| | | String message = |
| | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | assert debugException(CLASS_NAME, "run", e); |
| | | if (debugEnabled()) |
| | | { |
| | | debugCought(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_BIND_CANNOT_PROCESS_USER_TIME_LIMIT; |
| | | String message = |
| | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | assert debugException(CLASS_NAME, "run", e); |
| | | if (debugEnabled()) |
| | | { |
| | | debugCought(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = |
| | | MSGID_BIND_CANNOT_PROCESS_USER_LOOKTHROUGH_LIMIT; |
| | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | assert debugException(CLASS_NAME, "run", e); |
| | | if (debugEnabled()) |
| | | { |
| | | debugCought(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_BIND_OPERATION_PASSWORD_VALIDATION_EXCEPTION; |
| | | String message = getMessage(msgID, stackTraceToSingleLineString(e)); |
| | |
| | | } |
| | | catch (DirectoryException de) |
| | | { |
| | | assert debugException(CLASS_NAME, "run", de); |
| | | if (debugEnabled()) |
| | | { |
| | | debugCought(DebugLogLevel.ERROR, de); |
| | | } |
| | | |
| | | setResponseData(de); |
| | | break bindProcessing; |
| | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | assert debugException(CLASS_NAME, "run", e); |
| | | if (debugEnabled()) |
| | | { |
| | | debugCought(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_BIND_CANNOT_PROCESS_USER_SIZE_LIMIT; |
| | | String message = |
| | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | assert debugException(CLASS_NAME, "run", e); |
| | | if (debugEnabled()) |
| | | { |
| | | debugCought(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_BIND_CANNOT_PROCESS_USER_TIME_LIMIT; |
| | | String message = |
| | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | assert debugException(CLASS_NAME, "run", e); |
| | | if (debugEnabled()) |
| | | { |
| | | debugCought(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = |
| | | MSGID_BIND_CANNOT_PROCESS_USER_LOOKTHROUGH_LIMIT; |
| | |
| | | } |
| | | catch (DirectoryException de) |
| | | { |
| | | assert debugException(CLASS_NAME, "run", de); |
| | | if (debugEnabled()) |
| | | { |
| | | debugCought(DebugLogLevel.ERROR, de); |
| | | } |
| | | |
| | | setResponseData(de); |
| | | } |
| | |
| | | @Override() |
| | | public final CancelResult cancel(CancelRequest cancelRequest) |
| | | { |
| | | assert debugEnter(CLASS_NAME, "cancel", String.valueOf(cancelRequest)); |
| | | |
| | | cancelRequest.addResponseMessage(getMessage(MSGID_CANNOT_CANCEL_BIND)); |
| | | return CancelResult.CANNOT_CANCEL; |
| | |
| | | @Override() |
| | | public final CancelRequest getCancelRequest() |
| | | { |
| | | assert debugEnter(CLASS_NAME, "getCancelRequest"); |
| | | |
| | | return null; |
| | | } |
| | |
| | | @Override() |
| | | boolean setCancelRequest(CancelRequest cancelRequest) |
| | | { |
| | | assert debugEnter(CLASS_NAME, "setCancelRequest", |
| | | String.valueOf(cancelRequest)); |
| | | |
| | | // Bind operations cannot be canceled. |
| | | return false; |
| | |
| | | @Override() |
| | | public final void toString(StringBuilder buffer) |
| | | { |
| | | assert debugEnter(CLASS_NAME, "toString", "java.lang.StringBuilder"); |
| | | |
| | | buffer.append("BindOperation(connID="); |
| | | buffer.append(clientConnection.getConnectionID()); |