/*
* 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
* 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
* trunk/opends/resource/legal-notices/OpenDS.LICENSE. 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 implements a Directory Server plugin that can be used to ensure
* that the values for a specified set of attributes (optionally, below a
* specified set of base DNs) are 7-bit clean (i.e., contain only ASCII
* characters).
*/
public final class SevenBitCleanPlugin
implements ConfigurationChangeListener<SevenBitCleanPluginCfg>
{
/**
* The bitmask that will be used to make the comparisons.
*/
// The current configuration for this plugin.
/**
* Creates a new instance of this Directory Server plugin. Every plugin must
* implement a default constructor (it is the only one that will be used to
* create plugins defined in the configuration), and every plugin constructor
* must call {@code super()} as its first element.
*/
public SevenBitCleanPlugin()
{
super();
}
/**
* {@inheritDoc}
*/
@Override()
throws ConfigException
{
// Make sure that the plugin has been enabled for the appropriate types.
for (PluginType t : pluginTypes)
{
switch (t)
{
case LDIF_IMPORT:
case PRE_PARSE_ADD:
case PRE_PARSE_MODIFY:
case PRE_PARSE_MODIFY_DN:
// These are acceptable.
break;
default:
throw new ConfigException(message);
}
}
}
/**
* {@inheritDoc}
*/
@Override()
public final void finalizePlugin()
{
}
/**
* {@inheritDoc}
*/
@Override()
public final PluginResult.ImportLDIF
{
// Get the current configuration for this plugin.
// Make sure that the entry is within the scope of this plugin. While
// processing an LDIF import, we don't have access to the set of public
// naming contexts defined in the server, so if no explicit set of base DNs
// is defined, then assume that the entry is in scope.
{
boolean found = true;
{
{
found = true;
break;
}
}
if (! found)
{
// The entry is out of scope, so we won't process it.
}
}
// Make sure all configured attributes have clean values.
{
{
{
for (AttributeValue v : a)
{
if (! is7BitClean(v.getValue()))
{
a.getNameWithOptions());
}
}
}
}
}
// If we've gotten here, then everything is acceptable.
}
/**
* {@inheritDoc}
*/
@Override()
public final PluginResult.PreParse
{
// Get the current configuration for this plugin.
// If the entry is within the scope of this plugin, then make sure all
// configured attributes have clean values.
try
{
}
catch (DirectoryException de)
{
}
{
{
Attribute a;
try
{
a = rawAttr.toAttribute();
}
catch (LDAPException le)
{
}
{
continue;
}
for (AttributeValue v : a)
{
if (! is7BitClean(v.getValue()))
{
rawAttr.getAttributeType()));
}
}
}
}
// If we've gotten here, then everything is acceptable.
}
/**
* {@inheritDoc}
*/
@Override()
public final PluginResult.PreParse
{
// Get the current configuration for this plugin.
// If the target entry is within the scope of this plugin, then make sure
// all values that will be added during the modification will be acceptable.
try
{
}
catch (DirectoryException de)
{
}
{
{
switch (m.getModificationType())
{
case ADD:
case REPLACE:
// These are modification types that we will process.
break;
default:
// This is not a modifiation type that we will process.
continue;
}
Attribute a;
try
{
a = rawAttr.toAttribute();
}
catch (LDAPException le)
{
}
{
continue;
}
for (AttributeValue v : a)
{
if (! is7BitClean(v.getValue()))
{
rawAttr.getAttributeType()));
}
}
}
}
// If we've gotten here, then everything is acceptable.
}
/**
* {@inheritDoc}
*/
@Override()
public final PluginResult.PreParse
{
// Get the current configuration for this plugin.
// If the target entry is within the scope of this plugin, then make sure
// all values that will be added during the modification will be acceptable.
try
{
}
catch (DirectoryException de)
{
}
{
try
{
}
catch (DirectoryException de)
{
}
for (int i=0; i < numValues; i++)
{
{
continue;
}
{
newRDN.getAttributeName(i)));
}
}
}
// If we've gotten here, then everything is acceptable.
}
/**
* Indicates whether the provided DN is within the scope of this plugin.
*
* @param config The configuration to use when making the determination.
* @param dn The DN for which to make the determination.
*
* @return {@code true} if the provided DN is within the scope of this
* plugin, or {@code false} if not.
*/
{
{
}
boolean found = false;
{
{
found = true;
break;
}
}
return found;
}
/**
* Indicates whether the provided value is 7-bit clean.
*
* @param value The value for which to make the determination.
*
* @return {@code true} if the provided value is 7-bit clean, or {@code false}
* if it is not.
*/
{
byte b;
{
if ((b & MASK) != b)
{
return false;
}
}
return true;
}
/**
* {@inheritDoc}
*/
@Override()
{
}
/**
* {@inheritDoc}
*/
public boolean isConfigurationChangeAcceptable(
{
boolean configAcceptable = true;
// Ensure that the set of plugin types is acceptable.
{
switch (pluginType)
{
case LDIFIMPORT:
case PREPARSEADD:
case PREPARSEMODIFY:
case PREPARSEMODIFYDN:
// These are acceptable.
break;
default:
pluginType.toString());
configAcceptable = false;
}
}
return configAcceptable;
}
/**
* {@inheritDoc}
*/
{
}
}