| | |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.HashSet; |
| | | import java.util.Iterator; |
| | | import java.util.LinkedHashSet; |
| | | import java.util.List; |
| | |
| | | |
| | | import org.opends.server.admin.server.ConfigurationChangeListener; |
| | | import org.opends.server.admin.std.meta.PluginCfgDefn; |
| | | import org.opends.server.admin.std.server.PluginCfg; |
| | | import org.opends.server.admin.std.server.PasswordPolicyImportPluginCfg; |
| | | import org.opends.server.api.Backend; |
| | | import org.opends.server.api.ImportTaskListener; |
| | | import org.opends.server.api.PasswordStorageScheme; |
| | | import org.opends.server.api.plugin.DirectoryServerPlugin; |
| | | import org.opends.server.api.plugin.LDIFPluginResult; |
| | |
| | | import org.opends.server.config.ConfigException; |
| | | import org.opends.server.core.DirectoryServer; |
| | | import org.opends.server.core.PasswordPolicy; |
| | | import org.opends.server.loggers.debug.DebugTracer; |
| | | import org.opends.server.schema.AuthPasswordSyntax; |
| | | import org.opends.server.schema.UserPasswordSyntax; |
| | | import org.opends.server.types.Attribute; |
| | |
| | | import org.opends.server.types.AttributeValue; |
| | | import org.opends.server.types.ByteString; |
| | | import org.opends.server.types.ConfigChangeResult; |
| | | import org.opends.server.types.DebugLogLevel; |
| | | import org.opends.server.types.DirectoryException; |
| | | import org.opends.server.types.DN; |
| | | import org.opends.server.types.Entry; |
| | | import org.opends.server.types.ErrorLogCategory; |
| | | import org.opends.server.types.ErrorLogSeverity; |
| | | import org.opends.server.types.LDIFImportConfig; |
| | | import org.opends.server.types.ResultCode; |
| | | |
| | | import org.opends.server.types.DebugLogLevel; |
| | | import static org.opends.server.config.ConfigConstants.*; |
| | | import static org.opends.server.extensions.ExtensionsConstants.*; |
| | | import static org.opends.server.loggers.ErrorLogger.*; |
| | | import static org.opends.server.loggers.debug.DebugLogger.*; |
| | | import org.opends.server.loggers.debug.DebugTracer; |
| | | import static org.opends.server.messages.MessageHandler.*; |
| | | import static org.opends.server.messages.PluginMessages.*; |
| | | import static org.opends.server.schema.SchemaConstants.*; |
| | | import static org.opends.server.util.StaticUtils.*; |
| | | |
| | | |
| | |
| | | * that all of the password values are properly encoded before they are stored. |
| | | */ |
| | | public final class PasswordPolicyImportPlugin |
| | | extends DirectoryServerPlugin<PluginCfg> |
| | | implements ConfigurationChangeListener<PluginCfg> |
| | | extends DirectoryServerPlugin<PasswordPolicyImportPluginCfg> |
| | | implements ConfigurationChangeListener<PasswordPolicyImportPluginCfg>, |
| | | ImportTaskListener |
| | | { |
| | | /** |
| | | * The tracer object for the debug logger. |
| | | */ |
| | | private static final DebugTracer TRACER = getTracer(); |
| | | |
| | | // The sets of password storage schemes for the auth password attributes. |
| | | private final HashMap<AttributeType,PasswordStorageScheme[]> |
| | | authPasswordSchemes; |
| | | |
| | | // The sets of password storage schemes for the user password attributes. |
| | | private final HashMap<AttributeType,PasswordStorageScheme[]> |
| | | userPasswordSchemes; |
| | | |
| | | // The attribute type used to specify the password policy for an entry. |
| | | private AttributeType customPolicyAttribute; |
| | | |
| | | // The set of attribute types defined in the schema with the auth password |
| | | // syntax. |
| | | private AttributeType[] authPasswordTypes; |
| | | |
| | | // The set of attribute types defined in the schema with the user password |
| | | // syntax. |
| | | private AttributeType[] userPasswordTypes; |
| | | |
| | | // The set of password storage schemes to use for the various password |
| | | // policies defined in the server. |
| | | private HashMap<DN,PasswordStorageScheme[]> schemesByPolicy; |
| | | |
| | | // The default password storage schemes for auth password attributes. |
| | | private PasswordStorageScheme[] defaultAuthPasswordSchemes; |
| | | |
| | | // The default password storage schemes for user password attributes. |
| | | private PasswordStorageScheme[] defaultUserPasswordSchemes; |
| | | |
| | | |
| | | |
| | |
| | | * 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()</CODE> as its first element. |
| | | * must call {@code super()} as its first element. |
| | | */ |
| | | public PasswordPolicyImportPlugin() |
| | | { |
| | | super(); |
| | | |
| | | |
| | | // Get the password policies from the Directory Server configuration. This |
| | | // is done in the constructor to allow the instance variables to be declared |
| | | // "final". |
| | | authPasswordSchemes = new HashMap<AttributeType,PasswordStorageScheme[]>(); |
| | | userPasswordSchemes = new HashMap<AttributeType,PasswordStorageScheme[]>(); |
| | | for (PasswordPolicy p : DirectoryServer.getPasswordPolicies()) |
| | | { |
| | | AttributeType t = p.getPasswordAttribute(); |
| | | if (p.usesAuthPasswordSyntax()) |
| | | { |
| | | PasswordStorageScheme[] schemes = authPasswordSchemes.get(t); |
| | | if (schemes == null) |
| | | { |
| | | CopyOnWriteArrayList<PasswordStorageScheme> defaultSchemes = |
| | | p.getDefaultStorageSchemes(); |
| | | schemes = new PasswordStorageScheme[defaultSchemes.size()]; |
| | | defaultSchemes.toArray(schemes); |
| | | authPasswordSchemes.put(t, schemes); |
| | | } |
| | | else |
| | | { |
| | | LinkedHashSet<PasswordStorageScheme> newSchemes = |
| | | new LinkedHashSet<PasswordStorageScheme>(); |
| | | for (PasswordStorageScheme s : schemes) |
| | | { |
| | | newSchemes.add(s); |
| | | } |
| | | |
| | | for (PasswordStorageScheme s : p.getDefaultStorageSchemes()) |
| | | { |
| | | newSchemes.add(s); |
| | | } |
| | | |
| | | schemes = new PasswordStorageScheme[newSchemes.size()]; |
| | | newSchemes.toArray(schemes); |
| | | authPasswordSchemes.put(t, schemes); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | PasswordStorageScheme[] schemes = userPasswordSchemes.get(t); |
| | | if (schemes == null) |
| | | { |
| | | CopyOnWriteArrayList<PasswordStorageScheme> defaultSchemes = |
| | | p.getDefaultStorageSchemes(); |
| | | schemes = new PasswordStorageScheme[defaultSchemes.size()]; |
| | | defaultSchemes.toArray(schemes); |
| | | userPasswordSchemes.put(t, schemes); |
| | | } |
| | | else |
| | | { |
| | | LinkedHashSet<PasswordStorageScheme> newSchemes = |
| | | new LinkedHashSet<PasswordStorageScheme>(); |
| | | for (PasswordStorageScheme s : schemes) |
| | | { |
| | | newSchemes.add(s); |
| | | } |
| | | |
| | | for (PasswordStorageScheme s : p.getDefaultStorageSchemes()) |
| | | { |
| | | newSchemes.add(s); |
| | | } |
| | | |
| | | schemes = new PasswordStorageScheme[newSchemes.size()]; |
| | | newSchemes.toArray(schemes); |
| | | userPasswordSchemes.put(t, schemes); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | */ |
| | | @Override() |
| | | public final void initializePlugin(Set<PluginType> pluginTypes, |
| | | PluginCfg configuration) |
| | | PasswordPolicyImportPluginCfg configuration) |
| | | throws ConfigException |
| | | { |
| | | configuration.addChangeListener(this); |
| | | configuration.addPasswordPolicyImportChangeListener(this); |
| | | |
| | | customPolicyAttribute = |
| | | DirectoryServer.getAttributeType(OP_ATTR_PWPOLICY_POLICY_DN, true); |
| | | |
| | | |
| | | // Make sure that the plugin has been enabled for the appropriate types. |
| | | for (PluginType t : pluginTypes) |
| | |
| | | throw new ConfigException(msgID, message); |
| | | } |
| | | } |
| | | |
| | | |
| | | // Get the set of default password storage schemes for auth password |
| | | // attributes. |
| | | PasswordPolicy defaultPolicy = DirectoryServer.getDefaultPasswordPolicy(); |
| | | Set<String> authSchemesSet = |
| | | configuration.getDefaultAuthPasswordStorageScheme(); |
| | | if ((authSchemesSet == null) || authSchemesSet.isEmpty()) |
| | | { |
| | | if (defaultPolicy.usesAuthPasswordSyntax()) |
| | | { |
| | | CopyOnWriteArrayList<PasswordStorageScheme> schemeList = |
| | | defaultPolicy.getDefaultStorageSchemes(); |
| | | defaultAuthPasswordSchemes = |
| | | new PasswordStorageScheme[schemeList.size()]; |
| | | schemeList.toArray(defaultAuthPasswordSchemes); |
| | | } |
| | | else |
| | | { |
| | | defaultAuthPasswordSchemes = new PasswordStorageScheme[1]; |
| | | defaultAuthPasswordSchemes[0] = |
| | | DirectoryServer.getAuthPasswordStorageScheme( |
| | | AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1); |
| | | if (defaultAuthPasswordSchemes[0] == null) |
| | | { |
| | | int msgID = MSGID_PLUGIN_PWIMPORT_NO_DEFAULT_AUTH_SCHEMES; |
| | | String message = getMessage(msgID, |
| | | AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1); |
| | | throw new ConfigException(msgID, message); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | defaultAuthPasswordSchemes = |
| | | new PasswordStorageScheme[authSchemesSet.size()]; |
| | | int i=0; |
| | | for (String schemeName : authSchemesSet) |
| | | { |
| | | defaultAuthPasswordSchemes[i] = |
| | | DirectoryServer.getAuthPasswordStorageScheme(schemeName); |
| | | if (defaultAuthPasswordSchemes[i] == null) |
| | | { |
| | | int msgID = MSGID_PLUGIN_PWIMPORT_INVALID_DEFAULT_AUTH_SCHEME; |
| | | String message = getMessage(msgID, schemeName); |
| | | throw new ConfigException(msgID, message); |
| | | } |
| | | i++; |
| | | } |
| | | } |
| | | |
| | | |
| | | // Get the set of default password storage schemes for user password |
| | | // attributes. |
| | | Set<String> userSchemeSet = |
| | | configuration.getDefaultUserPasswordStorageScheme(); |
| | | if ((userSchemeSet == null) || userSchemeSet.isEmpty()) |
| | | { |
| | | if (! defaultPolicy.usesAuthPasswordSyntax()) |
| | | { |
| | | CopyOnWriteArrayList<PasswordStorageScheme> schemeList = |
| | | defaultPolicy.getDefaultStorageSchemes(); |
| | | defaultUserPasswordSchemes = |
| | | new PasswordStorageScheme[schemeList.size()]; |
| | | schemeList.toArray(defaultUserPasswordSchemes); |
| | | } |
| | | else |
| | | { |
| | | defaultUserPasswordSchemes = new PasswordStorageScheme[1]; |
| | | defaultUserPasswordSchemes[0] = |
| | | DirectoryServer.getPasswordStorageScheme( |
| | | toLowerCase(STORAGE_SCHEME_NAME_SALTED_SHA_1)); |
| | | if (defaultUserPasswordSchemes[0] == null) |
| | | { |
| | | int msgID = MSGID_PLUGIN_PWIMPORT_NO_DEFAULT_USER_SCHEMES; |
| | | String message = getMessage(msgID, STORAGE_SCHEME_NAME_SALTED_SHA_1); |
| | | throw new ConfigException(msgID, message); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | defaultUserPasswordSchemes = |
| | | new PasswordStorageScheme[userSchemeSet.size()]; |
| | | int i=0; |
| | | for (String schemeName : userSchemeSet) |
| | | { |
| | | defaultUserPasswordSchemes[i] = |
| | | DirectoryServer.getPasswordStorageScheme(toLowerCase(schemeName)); |
| | | if (defaultUserPasswordSchemes[i] == null) |
| | | { |
| | | int msgID = MSGID_PLUGIN_PWIMPORT_INVALID_DEFAULT_USER_SCHEME; |
| | | String message = getMessage(msgID, schemeName); |
| | | throw new ConfigException(msgID, message); |
| | | } |
| | | i++; |
| | | } |
| | | } |
| | | |
| | | processImportBegin(null, null); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public void processImportBegin(Backend backend, LDIFImportConfig config) |
| | | { |
| | | // Find the set of attribute types with the auth password and user password |
| | | // syntax defined in the schema. |
| | | HashSet<AttributeType> authPWTypes = new HashSet<AttributeType>(); |
| | | HashSet<AttributeType> userPWTypes = new HashSet<AttributeType>(); |
| | | for (AttributeType t : DirectoryServer.getAttributeTypes().values()) |
| | | { |
| | | if (t.getSyntaxOID().equals(SYNTAX_AUTH_PASSWORD_OID)) |
| | | { |
| | | authPWTypes.add(t); |
| | | } |
| | | else if (t.getSyntaxOID().equals(SYNTAX_USER_PASSWORD_OID)) |
| | | { |
| | | userPWTypes.add(t); |
| | | } |
| | | } |
| | | |
| | | |
| | | // Get the set of password policies defined in the server and get the |
| | | // attribute types associated with them. |
| | | HashMap<DN,PasswordStorageScheme[]> schemeMap = |
| | | new HashMap<DN,PasswordStorageScheme[]>(); |
| | | for (PasswordPolicy p : DirectoryServer.getPasswordPolicies()) |
| | | { |
| | | CopyOnWriteArrayList<PasswordStorageScheme> schemeList = |
| | | p.getDefaultStorageSchemes(); |
| | | PasswordStorageScheme[] schemeArray = |
| | | new PasswordStorageScheme[schemeList.size()]; |
| | | schemeList.toArray(schemeArray); |
| | | schemeMap.put(p.getConfigEntryDN(), schemeArray); |
| | | } |
| | | |
| | | |
| | | AttributeType[] authTypesArray = new AttributeType[authPWTypes.size()]; |
| | | AttributeType[] userTypesArray = new AttributeType[userPWTypes.size()]; |
| | | authPWTypes.toArray(authTypesArray); |
| | | userPWTypes.toArray(userTypesArray); |
| | | |
| | | schemesByPolicy = schemeMap; |
| | | authPasswordTypes = authTypesArray; |
| | | userPasswordTypes = userTypesArray; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public void processImportEnd(Backend backend, LDIFImportConfig config, |
| | | boolean successful) |
| | | { |
| | | // No implementation is required. |
| | | } |
| | | |
| | | |
| | |
| | | ArrayList<ByteString> encodedValueList = new ArrayList<ByteString>(); |
| | | |
| | | |
| | | // See if the entry explicitly states the password policy that it should |
| | | // use. If so, then only use it to perform the encoding. |
| | | List<Attribute> attrList = entry.getAttribute(customPolicyAttribute); |
| | | if (attrList != null) |
| | | { |
| | | DN policyDN = null; |
| | | PasswordPolicy policy = null; |
| | | policyLoop: |
| | | for (Attribute a : attrList) |
| | | { |
| | | for (AttributeValue v : a.getValues()) |
| | | { |
| | | try |
| | | { |
| | | policyDN = DN.decode(v.getValue()); |
| | | policy = DirectoryServer.getPasswordPolicy(policyDN); |
| | | if (policy == null) |
| | | { |
| | | int msgID = MSGID_PLUGIN_PWIMPORT_NO_SUCH_POLICY; |
| | | String message = getMessage(msgID, String.valueOf(entry.getDN()), |
| | | String.valueOf(policyDN)); |
| | | logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_WARNING, |
| | | message, msgID); |
| | | } |
| | | break policyLoop; |
| | | } |
| | | catch (DirectoryException de) |
| | | { |
| | | int msgID = MSGID_PLUGIN_PWIMPORT_CANNOT_DECODE_POLICY_DN; |
| | | String message = getMessage(msgID, String.valueOf(entry.getDN()), |
| | | de.getErrorMessage()); |
| | | logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_WARNING, |
| | | message, msgID); |
| | | break policyLoop; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (policy != null) |
| | | { |
| | | PasswordStorageScheme[] schemes = schemesByPolicy.get(policyDN); |
| | | if (schemes != null) |
| | | { |
| | | attrList = entry.getAttribute(policy.getPasswordAttribute()); |
| | | if (attrList == null) |
| | | { |
| | | return LDIFPluginResult.SUCCESS; |
| | | } |
| | | |
| | | for (Attribute a : attrList) |
| | | { |
| | | encodedValueList.clear(); |
| | | |
| | | LinkedHashSet<AttributeValue> values = a.getValues(); |
| | | Iterator<AttributeValue> iterator = values.iterator(); |
| | | while (iterator.hasNext()) |
| | | { |
| | | AttributeValue v = iterator.next(); |
| | | ByteString value = v.getValue(); |
| | | |
| | | if (policy.usesAuthPasswordSyntax()) |
| | | { |
| | | if (! AuthPasswordSyntax.isEncoded(value)) |
| | | { |
| | | try |
| | | { |
| | | for (PasswordStorageScheme s : schemes) |
| | | { |
| | | encodedValueList.add(s.encodeAuthPassword(value)); |
| | | } |
| | | |
| | | iterator.remove(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | if (debugEnabled()) |
| | | { |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD; |
| | | String message = getMessage(msgID, |
| | | policy.getPasswordAttribute().getNameOrOID(), |
| | | String.valueOf(entry.getDN()), |
| | | stackTraceToSingleLineString(e)); |
| | | logError(ErrorLogCategory.PLUGIN, |
| | | ErrorLogSeverity.SEVERE_ERROR, message, msgID); |
| | | |
| | | encodedValueList.clear(); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (! UserPasswordSyntax.isEncoded(value)) |
| | | { |
| | | try |
| | | { |
| | | for (PasswordStorageScheme s : schemes) |
| | | { |
| | | encodedValueList.add(s.encodePasswordWithScheme(value)); |
| | | } |
| | | |
| | | iterator.remove(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | if (debugEnabled()) |
| | | { |
| | | TRACER.debugCaught(DebugLogLevel.ERROR, e); |
| | | } |
| | | |
| | | int msgID = MSGID_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD; |
| | | String message = getMessage(msgID, |
| | | policy.getPasswordAttribute().getNameOrOID(), |
| | | String.valueOf(entry.getDN()), |
| | | stackTraceToSingleLineString(e)); |
| | | logError(ErrorLogCategory.PLUGIN, |
| | | ErrorLogSeverity.SEVERE_ERROR, message, msgID); |
| | | |
| | | encodedValueList.clear(); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | for (ByteString s : encodedValueList) |
| | | { |
| | | values.add(new AttributeValue(policy.getPasswordAttribute(), s)); |
| | | } |
| | | } |
| | | |
| | | return LDIFPluginResult.SUCCESS; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | // Iterate through the list of auth password attributes. If any of them |
| | | // are present and their values are not encoded, then encode them with all |
| | | // appropriate schemes. |
| | | for (AttributeType t : authPasswordSchemes.keySet()) |
| | | for (AttributeType t : authPasswordTypes) |
| | | { |
| | | List<Attribute> attrList = entry.getAttribute(t); |
| | | attrList = entry.getAttribute(t); |
| | | if ((attrList == null) || attrList.isEmpty()) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | PasswordStorageScheme[] schemes = authPasswordSchemes.get(t); |
| | | for (Attribute a : attrList) |
| | | { |
| | | encodedValueList.clear(); |
| | |
| | | { |
| | | try |
| | | { |
| | | for (PasswordStorageScheme s : schemes) |
| | | for (PasswordStorageScheme s : defaultAuthPasswordSchemes) |
| | | { |
| | | encodedValueList.add(s.encodeAuthPassword(value)); |
| | | } |
| | |
| | | // Iterate through the list of user password attributes. If any of them |
| | | // are present and their values are not encoded, then encode them with all |
| | | // appropriate schemes. |
| | | for (AttributeType t : userPasswordSchemes.keySet()) |
| | | for (AttributeType t : userPasswordTypes) |
| | | { |
| | | List<Attribute> attrList = entry.getAttribute(t); |
| | | attrList = entry.getAttribute(t); |
| | | if ((attrList == null) || attrList.isEmpty()) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | PasswordStorageScheme[] schemes = userPasswordSchemes.get(t); |
| | | for (Attribute a : attrList) |
| | | { |
| | | encodedValueList.clear(); |
| | |
| | | { |
| | | try |
| | | { |
| | | for (PasswordStorageScheme s : schemes) |
| | | for (PasswordStorageScheme s : defaultUserPasswordSchemes) |
| | | { |
| | | encodedValueList.add(s.encodePasswordWithScheme(value)); |
| | | } |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public boolean isConfigurationChangeAcceptable(PluginCfg configuration, |
| | | public boolean isConfigurationChangeAcceptable( |
| | | PasswordPolicyImportPluginCfg configuration, |
| | | List<String> unacceptableReasons) |
| | | { |
| | | boolean configAcceptable = true; |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | // Get the set of default password storage schemes for auth password |
| | | // attributes. |
| | | Set<String> authSchemesSet = |
| | | configuration.getDefaultAuthPasswordStorageScheme(); |
| | | if ((authSchemesSet == null) || authSchemesSet.isEmpty()) |
| | | { |
| | | PasswordStorageScheme[] defaultAuthSchemes = new PasswordStorageScheme[1]; |
| | | defaultAuthSchemes[0] = |
| | | DirectoryServer.getAuthPasswordStorageScheme( |
| | | AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1); |
| | | if (defaultAuthSchemes[0] == null) |
| | | { |
| | | int msgID = MSGID_PLUGIN_PWIMPORT_NO_DEFAULT_AUTH_SCHEMES; |
| | | String message = getMessage(msgID, |
| | | AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1); |
| | | unacceptableReasons.add(message); |
| | | configAcceptable = false; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | PasswordStorageScheme[] defaultAuthSchemes = |
| | | new PasswordStorageScheme[authSchemesSet.size()]; |
| | | int i=0; |
| | | for (String schemeName : authSchemesSet) |
| | | { |
| | | defaultAuthSchemes[i] = |
| | | DirectoryServer.getAuthPasswordStorageScheme(schemeName); |
| | | if (defaultAuthSchemes[i] == null) |
| | | { |
| | | int msgID = MSGID_PLUGIN_PWIMPORT_INVALID_DEFAULT_AUTH_SCHEME; |
| | | String message = getMessage(msgID, schemeName); |
| | | unacceptableReasons.add(message); |
| | | configAcceptable = false; |
| | | } |
| | | i++; |
| | | } |
| | | } |
| | | |
| | | |
| | | // Get the set of default password storage schemes for user password |
| | | // attributes. |
| | | Set<String> userSchemeSet = |
| | | configuration.getDefaultUserPasswordStorageScheme(); |
| | | if ((userSchemeSet == null) || userSchemeSet.isEmpty()) |
| | | { |
| | | PasswordStorageScheme[] defaultUserSchemes = new PasswordStorageScheme[1]; |
| | | defaultUserSchemes[0] = |
| | | DirectoryServer.getPasswordStorageScheme( |
| | | toLowerCase(STORAGE_SCHEME_NAME_SALTED_SHA_1)); |
| | | if (defaultUserSchemes[0] == null) |
| | | { |
| | | int msgID = MSGID_PLUGIN_PWIMPORT_NO_DEFAULT_USER_SCHEMES; |
| | | String message = getMessage(msgID, STORAGE_SCHEME_NAME_SALTED_SHA_1); |
| | | unacceptableReasons.add(message); |
| | | configAcceptable = false; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | PasswordStorageScheme[] defaultUserSchemes = |
| | | new PasswordStorageScheme[userSchemeSet.size()]; |
| | | int i=0; |
| | | for (String schemeName : userSchemeSet) |
| | | { |
| | | defaultUserSchemes[i] = |
| | | DirectoryServer.getPasswordStorageScheme(toLowerCase(schemeName)); |
| | | if (defaultUserSchemes[i] == null) |
| | | { |
| | | int msgID = MSGID_PLUGIN_PWIMPORT_INVALID_DEFAULT_USER_SCHEME; |
| | | String message = getMessage(msgID, schemeName); |
| | | unacceptableReasons.add(message); |
| | | configAcceptable = false; |
| | | } |
| | | i++; |
| | | } |
| | | } |
| | | |
| | | |
| | | return configAcceptable; |
| | | } |
| | | |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public ConfigChangeResult applyConfigurationChange(PluginCfg configuration) |
| | | public ConfigChangeResult applyConfigurationChange( |
| | | PasswordPolicyImportPluginCfg configuration) |
| | | { |
| | | // No implementation is required. |
| | | return new ConfigChangeResult(ResultCode.SUCCESS, false); |
| | | ResultCode resultCode = ResultCode.SUCCESS; |
| | | boolean adminActionRequired = false; |
| | | ArrayList<String> messages = new ArrayList<String>(); |
| | | |
| | | |
| | | // Get the set of default password storage schemes for auth password |
| | | // attributes. |
| | | PasswordPolicy defaultPolicy = DirectoryServer.getDefaultPasswordPolicy(); |
| | | PasswordStorageScheme[] defaultAuthSchemes; |
| | | Set<String> authSchemesSet = |
| | | configuration.getDefaultAuthPasswordStorageScheme(); |
| | | if ((authSchemesSet == null) || authSchemesSet.isEmpty()) |
| | | { |
| | | if (defaultPolicy.usesAuthPasswordSyntax()) |
| | | { |
| | | CopyOnWriteArrayList<PasswordStorageScheme> schemeList = |
| | | defaultPolicy.getDefaultStorageSchemes(); |
| | | defaultAuthSchemes = |
| | | new PasswordStorageScheme[schemeList.size()]; |
| | | schemeList.toArray(defaultAuthSchemes); |
| | | } |
| | | else |
| | | { |
| | | defaultAuthSchemes = new PasswordStorageScheme[1]; |
| | | defaultAuthSchemes[0] = |
| | | DirectoryServer.getAuthPasswordStorageScheme( |
| | | AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1); |
| | | if (defaultAuthSchemes[0] == null) |
| | | { |
| | | resultCode = DirectoryServer.getServerErrorResultCode(); |
| | | |
| | | int msgID = MSGID_PLUGIN_PWIMPORT_NO_DEFAULT_AUTH_SCHEMES; |
| | | messages.add(getMessage(msgID, |
| | | AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1)); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | defaultAuthSchemes = new PasswordStorageScheme[authSchemesSet.size()]; |
| | | int i=0; |
| | | for (String schemeName : authSchemesSet) |
| | | { |
| | | defaultAuthSchemes[i] = |
| | | DirectoryServer.getAuthPasswordStorageScheme(schemeName); |
| | | if (defaultAuthSchemes[i] == null) |
| | | { |
| | | resultCode = DirectoryServer.getServerErrorResultCode(); |
| | | |
| | | int msgID = MSGID_PLUGIN_PWIMPORT_INVALID_DEFAULT_AUTH_SCHEME; |
| | | messages.add(getMessage(msgID, schemeName)); |
| | | } |
| | | i++; |
| | | } |
| | | } |
| | | |
| | | |
| | | // Get the set of default password storage schemes for user password |
| | | // attributes. |
| | | PasswordStorageScheme[] defaultUserSchemes; |
| | | Set<String> userSchemeSet = |
| | | configuration.getDefaultUserPasswordStorageScheme(); |
| | | if ((userSchemeSet == null) || userSchemeSet.isEmpty()) |
| | | { |
| | | if (! defaultPolicy.usesAuthPasswordSyntax()) |
| | | { |
| | | CopyOnWriteArrayList<PasswordStorageScheme> schemeList = |
| | | defaultPolicy.getDefaultStorageSchemes(); |
| | | defaultUserSchemes = |
| | | new PasswordStorageScheme[schemeList.size()]; |
| | | schemeList.toArray(defaultUserSchemes); |
| | | } |
| | | else |
| | | { |
| | | defaultUserSchemes = new PasswordStorageScheme[1]; |
| | | defaultUserSchemes[0] = DirectoryServer.getPasswordStorageScheme( |
| | | toLowerCase(STORAGE_SCHEME_NAME_SALTED_SHA_1)); |
| | | if (defaultUserSchemes[0] == null) |
| | | { |
| | | resultCode = DirectoryServer.getServerErrorResultCode(); |
| | | |
| | | int msgID = MSGID_PLUGIN_PWIMPORT_NO_DEFAULT_USER_SCHEMES; |
| | | messages.add(getMessage(msgID, STORAGE_SCHEME_NAME_SALTED_SHA_1)); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | defaultUserSchemes = new PasswordStorageScheme[userSchemeSet.size()]; |
| | | int i=0; |
| | | for (String schemeName : userSchemeSet) |
| | | { |
| | | defaultUserSchemes[i] = |
| | | DirectoryServer.getPasswordStorageScheme(toLowerCase(schemeName)); |
| | | if (defaultUserSchemes[i] == null) |
| | | { |
| | | resultCode = DirectoryServer.getServerErrorResultCode(); |
| | | |
| | | int msgID = MSGID_PLUGIN_PWIMPORT_INVALID_DEFAULT_USER_SCHEME; |
| | | messages.add(getMessage(msgID, schemeName)); |
| | | } |
| | | i++; |
| | | } |
| | | } |
| | | |
| | | return new ConfigChangeResult(resultCode, adminActionRequired, messages); |
| | | } |
| | | } |
| | | |