001 /* 002 * CDDL HEADER START 003 * 004 * The contents of this file are subject to the terms of the 005 * Common Development and Distribution License, Version 1.0 only 006 * (the "License"). You may not use this file except in compliance 007 * with the License. 008 * 009 * You can obtain a copy of the license at 010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE 011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE. 012 * See the License for the specific language governing permissions 013 * and limitations under the License. 014 * 015 * When distributing Covered Code, include this CDDL HEADER in each 016 * file and include the License file at 017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, 018 * add the following below this CDDL HEADER, with the fields enclosed 019 * by brackets "[]" replaced with your own identifying information: 020 * Portions Copyright [yyyy] [name of copyright owner] 021 * 022 * CDDL HEADER END 023 * 024 * 025 * Copyright 2006-2008 Sun Microsystems, Inc. 026 */ 027 package org.opends.server.controls; 028 import org.opends.messages.Message; 029 030 031 032 import static org.opends.messages.ProtocolMessages.*; 033 034 035 036 /** 037 * This enumeration defines the set of password policy errors that may be 038 * included in the password policy response control defined in 039 * draft-behera-ldap-password-policy. 040 */ 041 public enum PasswordPolicyErrorType 042 { 043 /** 044 * The error type that will be used to indicate that the user's password is 045 * expired. 046 */ 047 PASSWORD_EXPIRED(PasswordPolicyErrorType.TYPE_PASSWORD_EXPIRED, 048 INFO_PWPERRTYPE_DESCRIPTION_PASSWORD_EXPIRED.get()), 049 050 051 052 /** 053 * The error type that will be used to indicate that the user's account is 054 * locked. 055 */ 056 ACCOUNT_LOCKED(PasswordPolicyErrorType.TYPE_ACCOUNT_LOCKED, 057 INFO_PWPERRTYPE_DESCRIPTION_ACCOUNT_LOCKED.get()), 058 059 060 061 /** 062 * The error type that will be used to indicate that the user's password must 063 * be changed because it has been administratively reset. 064 */ 065 CHANGE_AFTER_RESET(PasswordPolicyErrorType.TYPE_CHANGE_AFTER_RESET, 066 INFO_PWPERRTYPE_DESCRIPTION_CHANGE_AFTER_RESET.get()), 067 068 069 070 /** 071 * The error type that will be used to indicate that user password changes are 072 * not allowed. 073 */ 074 PASSWORD_MOD_NOT_ALLOWED( 075 PasswordPolicyErrorType.TYPE_PASSWORD_MOD_NOT_ALLOWED, 076 INFO_PWPERRTYPE_DESCRIPTION_PASSWORD_MOD_NOT_ALLOWED.get()), 077 078 079 080 /** 081 * The error type that will be used to indicate that the user's current 082 * password must be provided in order to choose a new password. 083 */ 084 MUST_SUPPLY_OLD_PASSWORD( 085 PasswordPolicyErrorType.TYPE_MUST_SUPPLY_OLD_PASSWORD, 086 INFO_PWPERRTYPE_DESCRIPTION_MUST_SUPPLY_OLD_PASSWORD.get()), 087 088 089 090 /** 091 * The error type that will be used to indicate that the provided password is 092 * not acceptable according to the configured password validators. 093 */ 094 INSUFFICIENT_PASSWORD_QUALITY( 095 PasswordPolicyErrorType.TYPE_INSUFFICIENT_PASSWORD_QUALITY, 096 INFO_PWPERRTYPE_DESCRIPTION_INSUFFICIENT_PASSWORD_QUALITY.get()), 097 098 099 100 /** 101 * The error type that will be used to indicate that the provided password is 102 * too short. 103 */ 104 PASSWORD_TOO_SHORT(PasswordPolicyErrorType.TYPE_PASSWORD_TOO_SHORT, 105 INFO_PWPERRTYPE_DESCRIPTION_PASSWORD_TOO_SHORT.get()), 106 107 108 109 /** 110 * The error type that will be used to indicate that the user's password is 111 * too young (i.e., it was changed too recently to allow it to be changed 112 * again). 113 */ 114 PASSWORD_TOO_YOUNG(PasswordPolicyErrorType.TYPE_PASSWORD_TOO_YOUNG, 115 INFO_PWPERRTYPE_DESCRIPTION_PASSWORD_TOO_YOUNG.get()), 116 117 118 119 /** 120 * The error type that will be used to indicate that the provided password is 121 * in the user's password history. 122 */ 123 PASSWORD_IN_HISTORY(PasswordPolicyErrorType.TYPE_PASSWORD_IN_HISTORY, 124 INFO_PWPERRTYPE_DESCRIPTION_PASSWORD_IN_HISTORY.get()); 125 126 127 128 /** 129 * The value that will be used for the passwordExpired type. 130 */ 131 public static final int TYPE_PASSWORD_EXPIRED = 0; 132 133 134 135 /** 136 * The value that will be used for the accountLocked type. 137 */ 138 public static final int TYPE_ACCOUNT_LOCKED = 1; 139 140 141 142 /** 143 * The value that will be used for the changeAfterReset type. 144 */ 145 public static final int TYPE_CHANGE_AFTER_RESET = 2; 146 147 148 149 /** 150 * The value that will be used for the passwordModNotAllowed type. 151 */ 152 public static final int TYPE_PASSWORD_MOD_NOT_ALLOWED = 3; 153 154 155 156 /** 157 * The value that will be used for the mustSupplyOldPassword type. 158 */ 159 public static final int TYPE_MUST_SUPPLY_OLD_PASSWORD = 4; 160 161 162 163 /** 164 * The value that will be used for the insufficientPasswordQuality type. 165 */ 166 public static final int TYPE_INSUFFICIENT_PASSWORD_QUALITY = 5; 167 168 169 170 /** 171 * The value that will be used for the passwordTooShort type. 172 */ 173 public static final int TYPE_PASSWORD_TOO_SHORT = 6; 174 175 176 177 /** 178 * The value that will be used for the passwordTooYoung type. 179 */ 180 public static final int TYPE_PASSWORD_TOO_YOUNG = 7; 181 182 183 184 /** 185 * The value that will be used for the passwordInHistory type. 186 */ 187 public static final int TYPE_PASSWORD_IN_HISTORY = 8; 188 189 190 191 // The integer value associated with the error type to use in the associated 192 // enumerated element in the password policy response control. 193 private int value; 194 195 // The message ID for the description of this password policy error type. 196 private Message description; 197 198 199 200 /** 201 * Creates a new instance of a password policy error type with the provided 202 * value. 203 * 204 * @param value The integer value associated with the error type to 205 * use in the associated enumerated element in the 206 * password policy response control. 207 * @param description The message for the description of this password 208 * policy error type. 209 */ 210 private PasswordPolicyErrorType(int value, Message description) 211 { 212 this.value = value; 213 this.description = description; 214 } 215 216 217 218 /** 219 * Retrieves the integer value associated with the error type to use in the 220 * associated enumerated element in the password policy response control. 221 * 222 * @return The integer value associated with the error type to use in the 223 * associated enumerated element in the password policy response 224 * control. 225 */ 226 public int intValue() 227 { 228 return value; 229 } 230 231 232 233 /** 234 * Retrieves the password policy error type for the provided integer value. 235 * 236 * @param value The value for which to retrieve the corresponding error 237 * type. 238 * 239 * @return The requested password policy error type, or <CODE>null</CODE> if 240 * the provided value does not match any error types. 241 */ 242 public static PasswordPolicyErrorType valueOf(int value) 243 { 244 switch (value) 245 { 246 case TYPE_PASSWORD_EXPIRED: 247 return PasswordPolicyErrorType.PASSWORD_EXPIRED; 248 case TYPE_ACCOUNT_LOCKED: 249 return PasswordPolicyErrorType.ACCOUNT_LOCKED; 250 case TYPE_CHANGE_AFTER_RESET: 251 return PasswordPolicyErrorType.CHANGE_AFTER_RESET; 252 case TYPE_PASSWORD_MOD_NOT_ALLOWED: 253 return PasswordPolicyErrorType.PASSWORD_MOD_NOT_ALLOWED; 254 case TYPE_MUST_SUPPLY_OLD_PASSWORD: 255 return PasswordPolicyErrorType.MUST_SUPPLY_OLD_PASSWORD; 256 case TYPE_INSUFFICIENT_PASSWORD_QUALITY: 257 return PasswordPolicyErrorType.INSUFFICIENT_PASSWORD_QUALITY; 258 case TYPE_PASSWORD_TOO_SHORT: 259 return PasswordPolicyErrorType.PASSWORD_TOO_SHORT; 260 case TYPE_PASSWORD_TOO_YOUNG: 261 return PasswordPolicyErrorType.PASSWORD_TOO_YOUNG; 262 case TYPE_PASSWORD_IN_HISTORY: 263 return PasswordPolicyErrorType.PASSWORD_IN_HISTORY; 264 default: 265 return null; 266 } 267 } 268 269 270 271 /** 272 * Retrieves a string representation of this password policy error type. 273 * 274 * @return A string representation of this password policy error type. 275 */ 276 public String toString() 277 { 278 return description.toString(); 279 } 280 } 281