From feb5d90ec016c99712f19c5485cf7633cd38f111 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Fri, 23 Mar 2007 14:26:04 +0000
Subject: [PATCH] Merge admin framework from config-prototype-branch onto trunk.
---
opends/src/server/org/opends/server/extensions/LengthBasedPasswordValidator.java | 354 ++++++----------------------------------------------------
1 files changed, 39 insertions(+), 315 deletions(-)
diff --git a/opends/src/server/org/opends/server/extensions/LengthBasedPasswordValidator.java b/opends/src/server/org/opends/server/extensions/LengthBasedPasswordValidator.java
index af35d3f..28ec02f 100644
--- a/opends/src/server/org/opends/server/extensions/LengthBasedPasswordValidator.java
+++ b/opends/src/server/org/opends/server/extensions/LengthBasedPasswordValidator.java
@@ -28,33 +28,22 @@
-import java.util.ArrayList;
-import java.util.LinkedList;
import java.util.List;
import java.util.Set;
-import org.opends.server.api.ConfigurableComponent;
+import org.opends.server.admin.server.ConfigurationChangeListener;
+import org.opends.server.admin.std.server.LengthBasedPasswordValidatorCfg;
import org.opends.server.api.PasswordValidator;
-import org.opends.server.config.ConfigAttribute;
-import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
-import org.opends.server.config.IntegerConfigAttribute;
-import org.opends.server.core.DirectoryServer;
import org.opends.server.core.Operation;
import org.opends.server.types.ByteString;
import org.opends.server.types.ConfigChangeResult;
-import org.opends.server.types.DN;
import org.opends.server.types.Entry;
import org.opends.server.types.InitializationException;
import org.opends.server.types.ResultCode;
-import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.loggers.debug.DebugLogger.debugCaught;
-import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
-import org.opends.server.types.DebugLogLevel;
import static org.opends.server.messages.ExtensionsMessages.*;
import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.util.StaticUtils.*;
@@ -62,21 +51,12 @@
* This class provides a password validator that can ensure that the provided
* password meets minimum and/or maximum length requirements.
*/
-public class LengthBasedPasswordValidator
- extends PasswordValidator
- implements ConfigurableComponent
+public class LengthBasedPasswordValidator extends
+ PasswordValidator<LengthBasedPasswordValidatorCfg> implements
+ ConfigurationChangeListener<LengthBasedPasswordValidatorCfg>
{
-
-
-
- // The DN of the configuration entry for this password validator.
- private DN configEntryDN;
-
- // The maximum number of characters allowed for a password.
- private int maxLength;
-
- // The minimum number of characters allowed for a password.
- private int minLength;
+ // The current configuration for this password validator.
+ private LengthBasedPasswordValidatorCfg currentConfig;
@@ -87,7 +67,6 @@
{
super();
-
// All initialization must be done in the initializePasswordValidator
// method.
}
@@ -98,82 +77,24 @@
* {@inheritDoc}
*/
@Override()
- public void initializePasswordValidator(ConfigEntry configEntry)
+ public void initializePasswordValidator(
+ LengthBasedPasswordValidatorCfg configuration)
throws ConfigException, InitializationException
{
- configEntryDN = configEntry.getDN();
+ configuration.addLengthBasedChangeListener(this);
+ currentConfig = configuration;
- // Get the configured minimum length.
- minLength = 0;
- int msgID = MSGID_PWLENGTHVALIDATOR_DESCRIPTION_MIN_LENGTH;
- IntegerConfigAttribute minLengthStub =
- new IntegerConfigAttribute(ATTR_PASSWORD_MIN_LENGTH, getMessage(msgID),
- false, false, false, true, 0, false, 0);
- try
+ // Make sure that if both the maximum and minimum lengths are set, the
+ // maximum length is greater than or equal to the minimum length.
+ int maxLength = configuration.getMaximumPasswordLength();
+ int minLength = configuration.getMinimumPasswordLength();
+ if ((maxLength > 0) && (minLength > 0) && (minLength > maxLength))
{
- IntegerConfigAttribute minLengthAttr =
- (IntegerConfigAttribute)
- configEntry.getConfigAttribute(minLengthStub);
- if (minLengthAttr != null)
- {
- minLength = minLengthAttr.activeIntValue();
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
-
- msgID = MSGID_PWLENGTHVALIDATOR_CANNOT_DETERMINE_MIN_LENGTH;
- String message = getMessage(msgID, stackTraceToSingleLineString(e));
- throw new InitializationException(msgID, message, e);
- }
-
-
- // Get the configured maximum length.
- maxLength = 0;
- msgID = MSGID_PWLENGTHVALIDATOR_DESCRIPTION_MAX_LENGTH;
- IntegerConfigAttribute maxLengthStub =
- new IntegerConfigAttribute(ATTR_PASSWORD_MAX_LENGTH, getMessage(msgID),
- false, false, false, true, 0, false, 0);
- try
- {
- IntegerConfigAttribute maxLengthAttr =
- (IntegerConfigAttribute)
- configEntry.getConfigAttribute(maxLengthStub);
- if (maxLengthAttr != null)
- {
- maxLength = maxLengthAttr.activeIntValue();
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
-
- msgID = MSGID_PWLENGTHVALIDATOR_CANNOT_DETERMINE_MAX_LENGTH;
- String message = getMessage(msgID, stackTraceToSingleLineString(e));
- throw new InitializationException(msgID, message, e);
- }
-
-
- // If both a minimum and a maximum were provided, then make sure the
- // minimum is less than or equal to the maximum.
- if ((minLength > 0) && (maxLength > 0) && (minLength > maxLength))
- {
- msgID = MSGID_PWLENGTHVALIDATOR_MIN_GREATER_THAN_MAX;
+ int msgID = MSGID_PWLENGTHVALIDATOR_MIN_GREATER_THAN_MAX;
String message = getMessage(msgID, minLength, maxLength);
throw new ConfigException(msgID, message);
}
-
-
- // Register with the Directory Server as a configurable component.
- DirectoryServer.registerConfigurableComponent(this);
}
@@ -184,7 +105,7 @@
@Override()
public void finalizePasswordValidator()
{
- DirectoryServer.deregisterConfigurableComponent(this);
+ currentConfig.removeLengthBasedChangeListener(this);
}
@@ -198,8 +119,11 @@
Operation operation, Entry userEntry,
StringBuilder invalidReason)
{
+ LengthBasedPasswordValidatorCfg config = currentConfig;
+
int numChars = newPassword.stringValue().length();
+ int minLength = config.getMinimumPasswordLength();
if ((minLength > 0) && (numChars < minLength))
{
invalidReason.append(getMessage(MSGID_PWLENGTHVALIDATOR_TOO_SHORT,
@@ -207,6 +131,7 @@
return false;
}
+ int maxLength = config.getMaximumPasswordLength();
if ((maxLength > 0) && (numChars > maxLength))
{
invalidReason.append(getMessage(MSGID_PWLENGTHVALIDATOR_TOO_LONG,
@@ -222,112 +147,22 @@
/**
* {@inheritDoc}
*/
- public DN getConfigurableComponentEntryDN()
+ public boolean isConfigurationChangeAcceptable(
+ LengthBasedPasswordValidatorCfg configuration,
+ List<String> unacceptableReasons)
{
- return configEntryDN;
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- public List<ConfigAttribute> getConfigurationAttributes()
- {
- LinkedList<ConfigAttribute> attrs = new LinkedList<ConfigAttribute>();
-
- int msgID = MSGID_PWLENGTHVALIDATOR_DESCRIPTION_MIN_LENGTH;
- attrs.add(new IntegerConfigAttribute(ATTR_PASSWORD_MIN_LENGTH,
- getMessage(msgID), false, false, false,
- true, 0, false, 0, minLength));
-
- msgID = MSGID_PWLENGTHVALIDATOR_DESCRIPTION_MAX_LENGTH;
- attrs.add(new IntegerConfigAttribute(ATTR_PASSWORD_MAX_LENGTH,
- getMessage(msgID), false, false, false,
- true, 0, false, 0, maxLength));
-
- return attrs;
- }
-
-
-
- /**
- * {@inheritDoc}
- */
- public boolean hasAcceptableConfiguration(ConfigEntry configEntry,
- List<String> unacceptableReasons)
- {
- // Get the configured minimum length.
- int newMinLength = 0;
- int msgID = MSGID_PWLENGTHVALIDATOR_DESCRIPTION_MIN_LENGTH;
- IntegerConfigAttribute minLengthStub =
- new IntegerConfigAttribute(ATTR_PASSWORD_MIN_LENGTH, getMessage(msgID),
- false, false, false, true, 0, false, 0);
- try
+ // Make sure that if both the maximum and minimum lengths are set, the
+ // maximum length is greater than or equal to the minimum length.
+ int maxLength = configuration.getMaximumPasswordLength();
+ int minLength = configuration.getMinimumPasswordLength();
+ if ((maxLength > 0) && (minLength > 0) && (minLength > maxLength))
{
- IntegerConfigAttribute minLengthAttr =
- (IntegerConfigAttribute)
- configEntry.getConfigAttribute(minLengthStub);
- if (minLengthAttr != null)
- {
- newMinLength = minLengthAttr.activeIntValue();
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
-
- msgID = MSGID_PWLENGTHVALIDATOR_CANNOT_DETERMINE_MIN_LENGTH;
- unacceptableReasons.add(getMessage(msgID,
- stackTraceToSingleLineString(e)));
- }
-
-
- // Get the configured maximum length.
- int newMaxLength = 0;
- msgID = MSGID_PWLENGTHVALIDATOR_DESCRIPTION_MAX_LENGTH;
- IntegerConfigAttribute maxLengthStub =
- new IntegerConfigAttribute(ATTR_PASSWORD_MAX_LENGTH, getMessage(msgID),
- false, false, false, true, 0, false, 0);
- try
- {
- IntegerConfigAttribute maxLengthAttr =
- (IntegerConfigAttribute)
- configEntry.getConfigAttribute(maxLengthStub);
- if (maxLengthAttr != null)
- {
- newMaxLength = maxLengthAttr.activeIntValue();
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
-
- msgID = MSGID_PWLENGTHVALIDATOR_CANNOT_DETERMINE_MAX_LENGTH;
- unacceptableReasons.add(getMessage(msgID,
- stackTraceToSingleLineString(e)));
+ int msgID = MSGID_PWLENGTHVALIDATOR_MIN_GREATER_THAN_MAX;
+ String message = getMessage(msgID, minLength, maxLength);
+ unacceptableReasons.add(message);
return false;
}
-
- // If both a minimum and a maximum were provided, then make sure the
- // minimum is less than or equal to the maximum.
- if ((newMinLength > 0) && (newMaxLength > 0) &&
- (newMinLength > newMaxLength))
- {
- msgID = MSGID_PWLENGTHVALIDATOR_MIN_GREATER_THAN_MAX;
- unacceptableReasons.add(getMessage(msgID, newMinLength, newMaxLength));
- return false;
- }
-
-
- // If we've gotten here, then everything looks OK.
return true;
}
@@ -336,124 +171,13 @@
/**
* {@inheritDoc}
*/
- public ConfigChangeResult applyNewConfiguration(ConfigEntry configEntry,
- boolean detailedResults)
+ public ConfigChangeResult applyConfigurationChange(
+ LengthBasedPasswordValidatorCfg configuration)
{
- ResultCode resultCode = ResultCode.SUCCESS;
- boolean adminActionRequired = false;
- ArrayList<String> messages = new ArrayList<String>();
-
-
- // Get the configured minimum length.
- int newMinLength = 0;
- int msgID = MSGID_PWLENGTHVALIDATOR_DESCRIPTION_MIN_LENGTH;
- IntegerConfigAttribute minLengthStub =
- new IntegerConfigAttribute(ATTR_PASSWORD_MIN_LENGTH, getMessage(msgID),
- false, false, false, true, 0, false, 0);
- try
- {
- IntegerConfigAttribute minLengthAttr =
- (IntegerConfigAttribute)
- configEntry.getConfigAttribute(minLengthStub);
- if (minLengthAttr != null)
- {
- newMinLength = minLengthAttr.activeIntValue();
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
-
- if (resultCode == ResultCode.SUCCESS)
- {
- resultCode = ResultCode.INVALID_ATTRIBUTE_SYNTAX;
- }
-
- msgID = MSGID_PWLENGTHVALIDATOR_CANNOT_DETERMINE_MIN_LENGTH;
- messages.add(getMessage(msgID, stackTraceToSingleLineString(e)));
- }
-
-
- // Get the configured maximum length.
- int newMaxLength = 0;
- msgID = MSGID_PWLENGTHVALIDATOR_DESCRIPTION_MAX_LENGTH;
- IntegerConfigAttribute maxLengthStub =
- new IntegerConfigAttribute(ATTR_PASSWORD_MAX_LENGTH, getMessage(msgID),
- false, false, false, true, 0, false, 0);
- try
- {
- IntegerConfigAttribute maxLengthAttr =
- (IntegerConfigAttribute)
- configEntry.getConfigAttribute(maxLengthStub);
- if (maxLengthAttr != null)
- {
- newMaxLength = maxLengthAttr.activeIntValue();
- }
- }
- catch (Exception e)
- {
- if (debugEnabled())
- {
- debugCaught(DebugLogLevel.ERROR, e);
- }
-
- if (resultCode == ResultCode.SUCCESS)
- {
- resultCode = ResultCode.INVALID_ATTRIBUTE_SYNTAX;
- }
-
- msgID = MSGID_PWLENGTHVALIDATOR_CANNOT_DETERMINE_MAX_LENGTH;
- messages.add(getMessage(msgID, stackTraceToSingleLineString(e)));
- }
-
-
- // If both a minimum and a maximum were provided, then make sure the
- // minimum is less than or equal to the maximum.
- if ((newMinLength > 0) && (newMaxLength > 0) &&
- (newMinLength > newMaxLength))
- {
- if (resultCode == ResultCode.SUCCESS)
- {
- resultCode = ResultCode.CONSTRAINT_VIOLATION;
- }
-
- msgID = MSGID_PWLENGTHVALIDATOR_MIN_GREATER_THAN_MAX;
- messages.add(getMessage(msgID, newMinLength, newMaxLength));
- }
-
-
- // If everything looks good, then apply the changes.
- if (resultCode == ResultCode.SUCCESS)
- {
- if (newMinLength != minLength)
- {
- minLength = newMinLength;
-
- if (detailedResults)
- {
- msgID = MSGID_PWLENGTHVALIDATOR_UPDATED_MIN_LENGTH;
- messages.add(getMessage(msgID, minLength));
- }
- }
-
-
- if (newMaxLength != maxLength)
- {
- maxLength = newMaxLength;
-
- if (detailedResults)
- {
- msgID = MSGID_PWLENGTHVALIDATOR_UPDATED_MAX_LENGTH;
- messages.add(getMessage(msgID, maxLength));
- }
- }
- }
-
-
- return new ConfigChangeResult(resultCode, adminActionRequired, messages);
+ // We will always accept the proposed configuration if it's gotten to this
+ // point.
+ currentConfig = configuration;
+ return new ConfigChangeResult(ResultCode.SUCCESS, false);
}
}
--
Gitblit v1.10.0