/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at legal-notices/CDDLv1_0.txt.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Copyright 2008 Sun Microsystems, Inc.
*/
/**
* This class provides an OpenDS password validator that may be used to ensure
* that proposed passwords are not allowed to have the same character appear
* several times consecutively.
*/
public class RepeatedCharactersPasswordValidator
implements ConfigurationChangeListener<
{
// The current configuration for this password validator.
/**
* Creates a new instance of this repeated characters password validator.
*/
public RepeatedCharactersPasswordValidator()
{
super();
// No implementation is required here. All initialization should be
// performed in the initializePasswordValidator() method.
}
/**
* {@inheritDoc}
*/
@Override()
public void initializePasswordValidator(
{
}
/**
* {@inheritDoc}
*/
@Override()
public void finalizePasswordValidator()
{
}
/**
* {@inheritDoc}
*/
@Override()
{
// Get a handle to the current configuration and see if we need to count
// the number of repeated characters in the password.
if (maxRepeats <= 0)
{
// We don't need to check anything, so the password will be acceptable.
return true;
}
// Get the password as a string. If we should use case-insensitive
// validation, then convert it to use all lowercase characters.
if (! config.isCaseSensitiveValidation())
{
}
// Create variables to keep track of the last character we've seen and how
// many times we have seen it.
char lastCharacter = '\u0000';
int consecutiveCount = 0;
// Iterate through the characters in the password. If the consecutive
// count ever gets too high, then fail.
{
if (currentCharacter == lastCharacter)
{
if (consecutiveCount > maxRepeats)
{
return false;
}
}
else
{
consecutiveCount = 1;
}
}
return true;
}
/**
* {@inheritDoc}
*/
public boolean isConfigurationChangeAcceptable(
{
// All of the necessary validation should have been performed automatically,
// so if we get to this point then the new configuration will be acceptable.
return true;
}
/**
* {@inheritDoc}
*/
{
boolean adminActionRequired = false;
// For this password validator, we will always be able to successfully apply
// the new configuration.
}
}