]> git.sur5r.net Git - openldap/commitdiff
import draft-08 since that's what we now implement.
authorHoward Chu <hyc@openldap.org>
Fri, 8 Jul 2005 10:17:03 +0000 (10:17 +0000)
committerHoward Chu <hyc@openldap.org>
Fri, 8 Jul 2005 10:17:03 +0000 (10:17 +0000)
sss: ----------------------------------------------------------------------

doc/drafts/draft-behera-ldap-password-policy-xx.txt

index 8e68484a13bb5a02a6ff467a516d8c3350eec337..d9978abe040742d4ca51ba0e637ef0228e8809b0 100644 (file)
 
+Network Working Group                                     J. Sermersheim
+Internet-Draft                                               Novell, Inc
+Expires: April 24, 2005                                        L. Poitou
+                                                        Sun Microsystems
+                                                        October 24, 2004
 
-Internet-Draft                                                P. Behera
-draft behera-ldap-password-policy-07.txt                      L. Poitou
-Intended Category: Proposed Standard                   Sun Microsystems
-Expires: August 2004                                     J. Sermersheim
-                                                                 Novell
-
-                                                          February 2004
-                  Password Policy for LDAP Directories 
-Status of this Memo 
-   This document is an Internet-Draft and is in full conformance with 
-   all provisions of Section 10 of RFC 2026.  
-    
-   Internet-Drafts are working documents of the Internet Engineering 
-   Task Force (IETF), its areas, and its working groups. Note that 
-   other groups may also distribute working documents as Internet-
-   Drafts. 
-    
-   Internet-Drafts are draft documents valid for a maximum of six 
-   months and may be updated, replaced, or obsoleted by other documents 
-   at any time. It is inappropriate to use Internet- Drafts as 
-   reference material or to cite them other than as "work in progress." 
-     
-   The list of current Internet-Drafts can be accessed at 
-   http://www.ietf.org/ietf/1id-abstracts.txt  
-    
-   The list of Internet-Draft Shadow Directories can be accessed at 
-   http://www.ietf.org/shadow.html. 
-    
-   Technical discussions of this draft are held on the LDAPEXT Working 
-   Group mailing list at ietf-ldapext@netscape.com. Editorial comments 
-   may be sent to the authors listed in Section 13. 
-    
-   Copyright (C) The Internet Society (2004). All rights Reserved. 
-    
-   Please see the Copyright Section near the end of this document for 
-   more information. 
-    
-    
-    
-Conventions 
-    
-   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 
-   "SHOULD", "SHOULD NOT", "RECOMMENDED", and "MAY" in this document 
-   are to be interpreted as described in RFC 2119 [RFC-2119]. 
-    
-
-Behera, et. al.        Expires August 15, 2004                  Page 1
+
+                  Password Policy for LDAP Directories
+                draft-behera-ldap-password-policy-08.txt
+
+Status of this Memo
+
+   This document is an Internet-Draft and is subject to all provisions
+   of section 3 of RFC 3667.  By submitting this Internet-Draft, each
+   author represents that any applicable patent or other IPR claims of
+   which he or she is aware have been or will be disclosed, and any of
+   which he or she become aware will be disclosed, in accordance with
+   RFC 3668.
+
+   Internet-Drafts are working documents of the Internet Engineering
+   Task Force (IETF), its areas, and its working groups.  Note that
+   other groups may also distribute working documents as
+   Internet-Drafts.
+
+   Internet-Drafts are draft documents valid for a maximum of six months
+   and may be updated, replaced, or obsoleted by other documents at any
+   time.  It is inappropriate to use Internet-Drafts as reference
+   material or to cite them other than as "work in progress."
+
+   The list of current Internet-Drafts can be accessed at
+   http://www.ietf.org/ietf/1id-abstracts.txt.
+
+   The list of Internet-Draft Shadow Directories can be accessed at
+   http://www.ietf.org/shadow.html.
+
+   This Internet-Draft will expire on April 24, 2005.
+
+Copyright Notice
+
+   Copyright (C) The Internet Society (2004).
+
+Abstract
+
+   Password policy as described in this document is a set of rules that
+   controls how passwords are used and administered in Lightweight
+   Directory Access Protocol (LDAP) based directories.  In order to
+   improve the security of LDAP directories and make it difficult for
+   password cracking programs to break into directories, it is desirable
+   to enforce a set of rules on password usage.  These rules are made to
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                 [Page 1]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-    
-1. Abstract 
-    
-   Password policy as described in this document is a set of rules that 
-   controls how passwords are used and administered in LDAP 
-   directories. In order to improve the security of LDAP directories 
-   and make it difficult for password cracking programs to break into 
-   directories, it is desirable to enforce a set of rules on password 
-   usage.  These rules are made to ensure that users change their 
-   passwords periodically, passwords meet construction requirements, 
-   the re-use of old password is restricted, and users are locked out 
-   after a certain number of failed attempts. 
-    
-    
-    
-2. Overview 
-    
-   LDAP-based directory services are currently accepted by many 
-   organizations as the access protocol for directories. The ability to 
-   ensure the secure read and update access to directory information 
-   throughout the network is essential to the successful deployment.  
-   Most LDAP implementations support many authentication schemes - the 
-   most basic and widely used is the simple authentication i.e., user 
-   DN and password. In this case, many LDAP servers have implemented 
-   some kind of policy related to the password used to authenticate. 
-   Among other things, this policy includes: 
-    
-   - Whether and when passwords expire. 
-   - Whether failed bind attempts cause the account to be locked. 
-   - If and how users are able to change their passwords. 
-    
-   In order to achieve greater security protection and ensure 
-   interoperability in a heterogeneous environment, LDAP needs to 
-   standardize on a common password policy model. This is critical to 
-   the successful deployment of LDAP directories. 
-    
-2.1. Application of password policy 
-    
-   The password policy defined in this document can be applied to any 
-   attribute holding a user's password used for an authenticated LDAP 
-   bind operation. In this document, the term "user" represents any 
-   LDAP client application that has an identity in the directory. 
-    
-   This policy is typically applied to the userPassword attribute in 
-   the case of the LDAP simple authentication method [RFC-2251] or the 
-   case of password based SASL [RFC-2222] authentication such as CRAM-
-   MD5 [RFC-2195] and DIGEST-MD5 [RFC-Digest]. 
-    
-    
-
-Behera, et. al.        Expires August 15, 2004                  Page 2
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+   ensure that users change their passwords periodically, passwords meet
+   construction requirements, the re-use of old password is restricted,
+   and users are locked out after a certain number of failed attempts.
+
+Discussion Forum
+
+   Technical discussion of this document will take place on the IETF
+   LDAP Extensions mailing list <ldapext@ietf.org>.  Please send
+   editorial comments directly to the authors.
+
+Table of Contents
+
+   1.  Overview . . . . . . . . . . . . . . . . . . . . . . . . . . .  4
+   2.  Conventions  . . . . . . . . . . . . . . . . . . . . . . . . .  5
+   3.  Application of password policy . . . . . . . . . . . . . . . .  6
+   4.  Articles of password policy  . . . . . . . . . . . . . . . . .  7
+   4.1 Password Usage Policy  . . . . . . . . . . . . . . . . . . . .  7
+   4.2 Password Modification Policy . . . . . . . . . . . . . . . . .  7
+   4.3 Restriction of the Password Policy . . . . . . . . . . . . . . 10
+   5.  Schema used for Password Policy  . . . . . . . . . . . . . . . 11
+   5.1 The pwdPolicy Object Class . . . . . . . . . . . . . . . . . . 11
+   5.2 Attribute Types used in the pwdPolicy ObjectClass  . . . . . . 11
+   5.3 Attribute Types for Password Policy State Information  . . . . 16
+   6.  Controls used for Password Policy  . . . . . . . . . . . . . . 20
+   6.1 Request Control  . . . . . . . . . . . . . . . . . . . . . . . 20
+   6.2 Response Control . . . . . . . . . . . . . . . . . . . . . . . 20
+   7.  Policy Decision Points . . . . . . . . . . . . . . . . . . . . 22
+   7.1 Locked Account Check . . . . . . . . . . . . . . . . . . . . . 22
+   7.2 Password Must be Changed Now Check . . . . . . . . . . . . . . 22
+   7.3 Password Expiration Check  . . . . . . . . . . . . . . . . . . 22
+   7.4 Remaining Grace AuthN Check  . . . . . . . . . . . . . . . . . 22
+   7.5 Time Before Expiration Check . . . . . . . . . . . . . . . . . 23
+   7.6 Intruder Detection Check . . . . . . . . . . . . . . . . . . . 23
+   7.7 Password Too Young Check . . . . . . . . . . . . . . . . . . . 23
+   8.  Server Policy Enforcement Points . . . . . . . . . . . . . . . 24
+   8.1 Password-based Authentication  . . . . . . . . . . . . . . . . 24
+   8.2 Password Update Operations . . . . . . . . . . . . . . . . . . 26
+   8.3 Other Operations . . . . . . . . . . . . . . . . . . . . . . . 29
+   9.  Client Policy Enforcement Points . . . . . . . . . . . . . . . 30
+   9.1 Bind Operation . . . . . . . . . . . . . . . . . . . . . . . . 30
+   9.2 Modify Operations  . . . . . . . . . . . . . . . . . . . . . . 30
+   9.3 Add Operation  . . . . . . . . . . . . . . . . . . . . . . . . 31
+   9.4 Compare Operation  . . . . . . . . . . . . . . . . . . . . . . 32
+   9.5 Other Operations . . . . . . . . . . . . . . . . . . . . . . . 32
+   10. Administration of the Password Policy  . . . . . . . . . . . . 33
+   11. Password Policy and Replication  . . . . . . . . . . . . . . . 34
+   12. Security Considerations  . . . . . . . . . . . . . . . . . . . 35
+   13. Acknowledgement  . . . . . . . . . . . . . . . . . . . . . . . 36
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                 [Page 2]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-   The policy described in this document assumes that the password 
-   attribute holds a single value. No considerations are made for 
-   directories or systems that allow a user to maintain multi-valued 
-   password attributes. 
-    
-   Server implementations MAY institute internal policy whereby certain 
-   identities (such as directory administrators) are not forced to 
-   comply with any of password policy. In this case, the password for a 
-   directory administrator never expires; the account is never locked, 
-   etc.  
-    
-   The term "directory administrator" refers to a user that has 
-   sufficient access control privileges to modify users' passwords, and 
-   the pwdPolicy object defined in this document. The access control 
-   that is used to determine whether an identity is a directory 
-   administrator is beyond the scope of this document, but typically 
-   implies that the administrator has 'write' privileges to the 
-   password attribute. 
-    
-3. Articles of password policy 
-    
-   The following sections explain in general terms each aspect of the 
-   password policy defined in this document as well as the need for 
-   each. These policies are subdivided into the general groups of 
-   password usage and password modification. Implementation details are 
-   presented in Sections 6 and 7. 
-    
-3.1. Password Usage Policy 
-   This section describes policy enforced when a password is used to 
-   authenticate. The general focus of this policy is to minimize the 
-   threat of intruders once a password is in use. 
-    
-3.1.1. Password Guessing limit 
-    
-   In order to prevent intruders from guessing a user's password, a 
-   mechanism exists to track the number of failed authentication 
-   attempts, and take action when a limit is reached. 
-    
-   This policy consists of five parts: 
-    
-   -  A configurable limit on failed authentication attempts.  
-    
-   -  A counter to track the number of failed authentication attempts. 
-    
-   -  A timeframe in which the limit of consecutive failed 
-      authentication attempts must happen before action is taken. 
-    
-
-
-Behera, et. al.        Expires August 15, 2004                  Page 3
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+   14. Normative References . . . . . . . . . . . . . . . . . . . . . 36
+       Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 37
+       Intellectual Property and Copyright Statements . . . . . . . . 38
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                 [Page 3]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-   -  The action to be taken when the limit is reached. The action will 
-      either be nothing, or the account will be locked. 
-    
-   -  An amount of time the account is locked (if it is to be locked). 
-      This can be indefinite. 
-    
-3.2. Password Modification Policy 
-    
-   This section describes policy enforced while users are modifying 
-   passwords. The general focus of this policy is to ensure that when 
-   users add or change their passwords, the security and effectiveness 
-   of their passwords is maximized. In this document, the term "modify 
-   password operation" refers to any operation that is used to add or 
-   modify a password attribute. Often this is done by updating the 
-   userPassword attribute during an add or modify operation, but MAY be 
-   done by other means such as an extended operation. 
-    
-    
-3.2.1. Password Expiration, Expiration Warning, and Grace binds 
-    
-   One of the key properties of a password is the fact that it is not 
-   well known. If a password is frequently changed, the chances of that 
-   user's account being broken into are minimized. 
-     
-   Directory administrators may deploy a password policy that causes 
-   passwords to expire after a given amount of time - thus forcing 
-   users to change their passwords periodically. 
-    
-   As a side effect, there needs to be a way in which users are made 
-   aware of this need to change their password before actually being 
-   locked out of their accounts. One or both of the following methods 
-   handle this: 
-    
-   -  The user is sent a warning sometime before his password is due to 
-      expire. If the user fails to heed this warning before the 
-      expiration time, his account will be locked. 
-    
-   -  The user may bind to the directory a preset number of times after 
-      her password has expired. If she fails to change her password 
-      during one of her 'grace' binds, her account will be locked. 
-    
-3.2.2. Password History 
-   When the Password Expiration policy is used, an additional mechanism 
-   may be employed to prevent users from simply re-using a previous 
-   password (as this would effectively circumvent the expiration 
-   policy). 
-    
-
-
-Behera, et. al.        Expires August 15, 2004                  Page 4
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+1.  Overview
+
+   LDAP-based directory services are currently accepted by many
+   organizations as the access protocol for directories.  The ability to
+   ensure the secure read and update access to directory information
+   throughout the network is essential to the successful deployment.
+   Most LDAP implementations support many authentication schemes - the
+   most basic and widely used is the simple authentication i.e., user DN
+   and password.  In this case, many LDAP servers have implemented some
+   kind of policy related to the password used to authenticate.  Among
+   other things, this policy includes:
+
+   o  Whether and when passwords expire.
+   o  Whether failed bind attempts cause the account to be locked.
+   o  If and how users are able to change their passwords.
+
+   In order to achieve greater security protection and ensure
+   interoperability in a heterogeneous environment, LDAP needs to
+   standardize on a common password policy model.  This is critical to
+   the successful deployment of LDAP directories.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                 [Page 4]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-   In order to do this; a history of used passwords is kept. The 
-   directory administrator sets the number of passwords to be stored at 
-   any given time. Passwords are stored in this history whenever the 
-   password is changed. Users aren't allowed to specify any passwords 
-   that are in the history list while changing passwords. 
-3.2.3. Password Minimum Age 
-    
-   Users may circumvent the Password History mechanism by quickly 
-   performing a series of password changes. If they change their 
-   password enough times, their 'favorite' password will be pushed out 
-   of the history list. 
-    
-   This process may be made less attractive to users by employing a 
-   minimum age for passwords. If users are forced to wait 24 hours 
-   between password changes, they may be less likely to cycle through a 
-   history of 10 passwords. 
-    
-3.2.4. Password Quality and Minimum length 
-    
-   In order to prevent users from creating or updating passwords that 
-   are easy to guess, a password quality policy may be employed. This 
-   policy consists of two general mechanisms - ensuring that passwords 
-   conform to a defined quality criteria and ensuring that they are of 
-   a minimum length. 
-    
-   Forcing a password to comply with the quality policy may imply a 
-   variety of things including: 
-    
-   -  Disallowing trivial or well-known words make up the password. 
-    
-   -  Forcing a certain number of digits be used. 
-    
-   -  Disallowing anagrams of the user's name. 
-    
-   The implementation of this policy meets with the following problems: 
-    
-   -  If the password to be added or updated is encrypted by the client 
-      before being sent, the server has no way of enforcing this 
-      policy. Therefore, the onus of enforcing this policy falls upon 
-      client implementations. 
-    
-   -  There are no specific definitions of what 'quality checking' 
-      means. This can lead to unexpected behavior in a heterogeneous 
-      environment.  
-    
-3.2.5. User Defined Passwords 
-    
-
-
-Behera, et. al.        Expires August 15, 2004                  Page 5
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+2.  Conventions
+
+   Imperative keywords defined in [RFC2119] are used in this document,
+   and carry the meanings described there.
+
+   All Basic Encoding Rules (BER) [X690] encodings follow the
+   conventions found in Section 5.1 of [RFC2251].
+
+   The term "password administrator" refers to a user that has
+   sufficient access control privileges to modify users' passwords.  The
+   term "password policy administrator" refers to a user that has
+   sufficient access control privileges to modify the pwdPolicy object
+   defined in this document.  The access control that is used to
+   determine whether an identity is a password administrator or password
+   policy administrator is beyond the scope of this document, but
+   typically implies that the password administrator has 'write'
+   privileges to the password attribute.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                 [Page 5]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-   In some cases, it is desirable to disallow users from adding and 
-   updating their own passwords. This policy makes this functionality 
-   possible.  
-    
-   This implies that certain other policy, such as password expiration 
-   is not enforced.  
-    
-3.2.6. Password Change After Reset 
-    
-   This policy forces the user to update her password after it has been 
-   set for the first time, or has been reset by the directory 
-   administrator. 
-    
-   This is needed in scenarios where a directory administrator has set 
-   or reset the password to a well-known value. 
-3.2.7. Safe modification 
-    
-   As directories become more commonly used, it will not be unusual for 
-   clients to connect to a directory and leave the connection open for 
-   an extended period. This opens up the possibility for an intruder to 
-   make modifications to a user's password while that user's computer 
-   is connected but unattended. 
-    
-   This policy forces the user to prove his identity by specifying the 
-   old password during a password modify operation. 
-    
-3.3. Restriction of the Password Policy 
-    
-   The password policy defined in this document can apply to any 
-   attribute containing a password. Password policy state information 
-   is held in the user's entry, and applies to a password attribute, 
-   not a particular password attribute value. Thus the server SHOULD 
-   enforce that the password attribute subject to password policy, 
-   contains one and only one password value. 
-    
-    
-4. Schema used for Password Policy 
-    
-   The schema elements defined here fall into two general categories. A 
-   password policy object class is defined which contains a set of 
-   administrative password policy attributes, and a set of operational 
-   attributes are defined that hold general password policy state 
-   information for each user. 
-    
-4.1. The pwdPolicy Object Class 
-    
-   This object class contains the attributes defining a password policy 
-   in effect for a set of users. Section 8 describes the administration 
-
-Behera, et. al.        Expires August 15, 2004                  Page 6
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+3.  Application of password policy
+
+   The password policy defined in this document can be applied to any
+   attribute holding a user's password used for an authenticated LDAP
+   bind operation.  In this document, the term "user" represents any
+   LDAP client application that has an identity in the directory.
+
+   This policy is typically applied to the userPassword attribute in the
+   case of the LDAP simple authentication method [RFC2251] or the case
+   of password based SASL [RFC2222] authentication such as CRAM-MD5
+   [RFC2195] and DIGEST-MD5 [RFC2831].
+
+   The policy described in this document assumes that the password
+   attribute holds a single value.  No considerations are made for
+   directories or systems that allow a user to maintain multi-valued
+   password attributes.
+
+   Server implementations MAY institute internal policy whereby certain
+   identities (such as directory administrators) are not forced to
+   comply with any of password policy.  In this case, the password for a
+   directory administrator never expires; the account is never locked,
+   etc.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                 [Page 6]
+\f
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+4.  Articles of password policy
+
+   The following sections explain in general terms each aspect of the
+   password policy defined in this document as well as the need for
+   each.  These policies are subdivided into the general groups of
+   password usage and password modification.  Implementation details are
+   presented in Section 8 and Section 9.
+
+4.1  Password Usage Policy
+
+   This section describes policy enforced when a password is used to
+   authenticate.  The general focus of this policy is to minimize the
+   threat of intruders once a password is in use.
+
+4.1.1  Password Guessing Limit
+
+   In order to prevent intruders from guessing a user's password, a
+   mechanism exists to track the number of failed authentication
+   attempts, and take action when a limit is reached.  This policy
+   consists of five parts:
+
+   o  A configurable limit on failed authentication attempts.
+   o  A counter to track the number of failed authentication attempts.
+   o  A timeframe in which the limit of consecutive failed
+      authentication attempts must happen before action is taken.
+   o  The action to be taken when the limit is reached.  The action will
+      either be nothing, or the account will be locked.
+   o  An amount of time the account is locked (if it is to be locked).
+      This can be indefinite.
+
+4.2  Password Modification Policy
+
+   This section describes policy enforced while users are modifying
+   passwords.  The general focus of this policy is to ensure that when
+   users add or change their passwords, the security and effectiveness
+   of their passwords is maximized.  In this document, the term "modify
+   password operation" refers to any operation that is used to add or
+   modify a password attribute.  Often this is done by updating the
+   password attribute during an add or modify operation, but MAY be done
+   by other means such as an extended operation.
+
+4.2.1  Password Expiration, Expiration Warning, and Grace
+      Authentications
+
+   One of the key properties of a password is the fact that it is not
+   well known.  If a password is frequently changed, the chances of that
+   user's account being broken into are minimized.
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                 [Page 7]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-   of this object, and the relationship between it and particular 
-   objects. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.2.1 
-      NAME 'pwdPolicy'  
-      SUP top 
-      AUXILIARY  
-      MUST ( pwdAttribute ) 
-      MAY ( pwdMinAge $ pwdMaxAge $ pwdInHistory $ pwdCheckQuality $ 
-      pwdMinLength $ pwdExpireWarning $ pwdGraceLoginLimit $ pwdLockout 
-      $ pwdLockoutDuration $ pwdMaxFailure $ pwdFailureCountInterval $ 
-      pwdMustChange $ pwdAllowUserChange $ pwdSafeModify ) ) 
-    
-4.2. Attribute Types used in the pwdPolicy ObjectClass 
-    
-   Following are the attribute types used by the pwdPolicy object 
-   class. 
-    
-4.2.1. pwdAttribute 
-    
-   This holds the name of the attribute to which the password policy is 
-   applied. For example, the password policy may be applied to the 
-   userPassword attribute. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.1 
-      NAME 'pwdAttribute' 
-      EQUALITY objectIdentifierMatch 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 ) 
-    
-4.2.2. pwdMinAge  
-    
-   This attribute holds the number of seconds that must elapse between 
-   modifications to the password. If this attribute is not present, 0 
-   seconds is assumed. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.2 
-      NAME 'pwdMinAge' 
-      EQUALITY integerMatch 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27  
-      SINGLE-VALUE ) 
-    
-4.2.3. pwdMaxAge 
-    
-   This attribute holds the number of seconds after which a modified 
-   password will expire. 
-    
-   If this attribute is not present, or if the value is 0 the password 
-   does not expire. If not 0, the value must be greater than or equal 
-   to the value of the pwdMinAge. 
-
-Behera, et. al.        Expires August 15, 2004                  Page 7
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+   Password policy administrators may deploy a password policy that
+   causes passwords to expire after a given amount of time - thus
+   forcing users to change their passwords periodically.
+
+   As a side effect, there needs to be a way in which users are made
+   aware of this need to change their password before actually being
+   locked out of their accounts.  One or both of the following methods
+   handle this:
+
+   o  A warning may be returned to the user sometime before his password
+      is due to expire.  If the user fails to heed this warning before
+      the expiration time, his account will be locked.
+   o  The user may bind to the directory a preset number of times after
+      her password has expired.  If she fails to change her password
+      during one of her 'grace' authentications, her account will be
+      locked.
+
+4.2.2  Password History
+
+   When the Password Expiration policy is used, an additional mechanism
+   may be employed to prevent users from simply re-using a previous
+   password (as this would effectively circumvent the expiration
+   policy).
+
+   In order to do this; a history of used passwords is kept.  The
+   password policy administrator sets the number of passwords to be
+   stored at any given time.  Passwords are stored in this history
+   whenever the password is changed.  Users aren't allowed to specify
+   any passwords that are in the history list while changing passwords.
+
+4.2.3  Password Minimum Age
+
+   Users may circumvent the Password History mechanism by quickly
+   performing a series of password changes.  If they change their
+   password enough times, their 'favorite' password will be pushed out
+   of the history list.
+
+   This process may be made less attractive to users by employing a
+   minimum age for passwords.  If users are forced to wait 24 hours
+   between password changes, they may be less likely to cycle through a
+   history of 10 passwords.
+
+4.2.4  Password Quality and Minimum length
+
+   In order to prevent users from creating or updating passwords that
+   are easy to guess, a password quality policy may be employed.  This
+   policy consists of two general mechanisms - ensuring that passwords
+   conform to a defined quality criterion and ensuring that they are of
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                 [Page 8]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.3 
-      NAME 'pwdMaxAge' 
-      EQUALITY integerMatch 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 
-      SINGLE-VALUE ) 
-    
-4.2.4. pwdInHistory 
-    
-   This attribute specifies the maximum number of used passwords stored 
-   in the pwdHistory attribute. 
-    
-   If this attribute is not present, or if the value is 0, used 
-   passwords are not stored in the pwdHistory attribute and thus may be 
-   reused. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.4 
-      NAME 'pwdInHistory' 
-      EQUALITY integerMatch 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 
-      SINGLE-VALUE ) 
-    
-4.2.5. pwdCheckQuality 
-    
-   This attribute indicates how the password quality will be verified 
-   while being modified or added. If this attribute is not present, or 
-   if the value is '0', quality checking will not be enforced. A value 
-   of '1' indicates that the server will check the quality, and if the 
-   server is unable to check it (due to a hashed password or other 
-   reasons) it will be accepted. A value of '2' indicates that the 
-   server will check the quality, and if the server is unable to verify 
-   it, it will return an error refusing the password. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.5 
-      NAME 'pwdCheckQuality' 
-      EQUALITY integerMatch 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27  
-      SINGLE-VALUE ) 
-    
-4.2.6. pwdMinLength 
-    
-   When quality checking is enabled, this attribute holds the minimum 
-   number of characters that must be used in a password. If this 
-   attribute is not present, no minimum password length will be 
-   enforced. If the server is unable to check the length (due to a 
-   hashed password or otherwise), the server will, depending on the 
-   value of the pwdCheckQuality attribute, either accept the password 
-   without checking it ('0' or '1') or refuse it ('2'). 
-    
-
-Behera, et. al.        Expires August 15, 2004                  Page 8
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+   a minimum length.
+
+   Forcing a password to comply with the quality policy may imply a
+   variety of things including:
+
+   o  Disallowing trivial or well-known words make up the password.
+   o  Forcing a certain number of digits be used.
+   o  Disallowing anagrams of the user's name.
+
+   The implementation of this policy meets with the following problems:
+
+   o  If the password to be added or updated is encrypted by the client
+      before being sent, the server has no way of enforcing this policy.
+      Therefore, the onus of enforcing this policy falls upon client
+      implementations.
+   o  There are no specific definitions of what 'quality checking'
+      means.  This can lead to unexpected behavior in a heterogeneous
+      environment.
+
+4.2.5  User Defined Passwords
+
+   In some cases, it is desirable to disallow users from adding and
+   updating their own passwords.  This policy makes this functionality
+   possible.
+
+   This implies that certain other policy, such as password expiration
+   is not enforced.
+
+4.2.6  Password Change after Reset
+
+   This policy forces the user to update her password after it has been
+   set for the first time, or has been reset by a password
+   administrator.
+
+   This is needed in scenarios where a password administrator has set or
+   reset the password to a well-known value.
+
+4.2.7  Safe Modification
+
+   As directories become more commonly used, it will not be unusual for
+   clients to connect to a directory and leave the connection open for
+   an extended period.  This opens up the possibility for an intruder to
+   make modifications to a user's password while that user's computer is
+   connected but unattended.
+
+   This policy forces the user to prove his identity by specifying the
+   old password during a password modify operation.
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                 [Page 9]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-   (  1.3.6.1.4.1.42.2.27.8.1.6 
-      NAME 'pwdMinLength' 
-      EQUALITY integerMatch 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 
-      SINGLE-VALUE ) 
-    
-4.2.7. pwdExpireWarning 
-    
-   This attribute specifies the maximum number of seconds before a 
-   password is due to expire that expiration warning messages will be 
-   returned to an authenticating user. If this attribute is not 
-   present, or if the value is 0 no warnings will be sent. If not 0, 
-   the value must be smaller than the value of the pwdMaxAge attribute. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.7 
-      NAME 'pwdExpireWarning' 
-      EQUALITY integerMatch 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27  
-      SINGLE-VALUE ) 
-    
-4.2.8. pwdGraceLoginLimit 
-    
-   This attribute specifies the number of times an expired password can 
-   be used to authenticate. If this attribute is not present or if the 
-   value is 0, authentication will fail. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.8 
-      NAME 'pwdGraceLoginLimit' 
-      EQUALITY integerMatch 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27  
-      SINGLE-VALUE ) 
-    
-4.2.9. pwdLockout 
-    
-   This attribute indicates, when its value is "TRUE", that the 
-   password may not be used to authenticate after a specified number of 
-   consecutive failed bind attempts. The maximum number of consecutive 
-   failed bind attempts is specified in pwdMaxFailure. 
-    
-   If this attribute is not present, or if the value is "FALSE", the 
-   password may be used to authenticate when the number of failed bind 
-   attempts has been reached. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.9 
-      NAME 'pwdLockout' 
-      EQUALITY booleanMatch 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.7  
-      SINGLE-VALUE ) 
-
-    
-Behera, et. al.        Expires August 15, 2004                  Page 9
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+   {TODO: This allows a dictionary attack unless we specify that this is
+   also subject to intruder detection}
+
+4.3  Restriction of the Password Policy
+
+   The password policy defined in this document can apply to any
+   attribute containing a password.  Password policy state information
+   is held in the user's entry, and applies to a password attribute, not
+   a particular password attribute value.  Thus the server SHOULD
+   enforce that the password attribute subject to password policy,
+   contains one and only one password value.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 10]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-4.2.10. pwdLockoutDuration 
-    
-   This attribute holds the number of seconds that the password cannot 
-   be used to authenticate due to too many failed bind attempts. If 
-   this attribute is not present, or if the value is 0 the password 
-   cannot be used to authenticate until reset by an administrator. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.10 
-      NAME 'pwdLockoutDuration' 
-      EQUALITY integerMatch 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27  
-      SINGLE-VALUE ) 
-    
-4.2.11. pwdMaxFailure 
-    
-   This attribute specifies the number of consecutive failed bind 
-   attempts after which the password may not be used to authenticate. 
-   If this attribute is not present, or if the value is 0, this policy 
-   is not checked, and the value of pwdLockout will be ignored. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.11 
-      NAME 'pwdMaxFailure' 
-      EQUALITY integerMatch 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27  
-      SINGLE-VALUE ) 
-    
-4.2.12. pwdFailureCountInterval 
-    
-   This attribute holds the number of seconds after which the password 
-   failures are purged from the failure counter, even though no 
-   successful authentication occurred. 
-    
-   If this attribute is not present, or if its value is 0, the failure 
-   counter is only reset by a successful authentication. 
-     
-   (  1.3.6.1.4.1.42.2.27.8.1.12 
-      NAME 'pwdFailureCountInterval' 
-      EQUALITY integerMatch 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27  
-      SINGLE-VALUE ) 
-    
-4.2.13. pwdMustChange 
-    
-   This attribute specifies with a value of "TRUE" that users must 
-   change their passwords when they first bind to the directory after a 
-   password is set or reset by the administrator. If this attribute is 
-   not present, or if the value is "FALSE", users are not required to 
-   change their password upon binding after the administrator sets or 
-   resets the password. 
-
-Behera, et. al.        Expires August 15, 2004                 Page 10
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+5.  Schema used for Password Policy
+
+   The schema elements defined here fall into two general categories.  A
+   password policy object class is defined which contains a set of
+   administrative password policy attributes, and a set of operational
+   attributes are defined that hold general password policy state
+   information for each user.
+
+5.1  The pwdPolicy Object Class
+
+   This object class contains the attributes defining a password policy
+   in effect for a set of users.  Section 10 describes the
+   administration of this object, and the relationship between it and
+   particular objects.
+
+      ( 1.3.6.1.4.1.42.2.27.8.2.1
+      NAME 'pwdPolicy'
+      SUP top
+      AUXILIARY
+      MUST ( pwdAttribute )
+      MAY ( pwdMinAge $ pwdMaxAge $ pwdInHistory $ pwdCheckQuality $
+      pwdMinLength $ pwdExpireWarning $ pwdGraceAuthNLimit $ pwdLockout
+      $ pwdLockoutDuration $ pwdMaxFailure $ pwdFailureCountInterval $
+      pwdMustChange $ pwdAllowUserChange $ pwdSafeModify ) )
+
+5.2  Attribute Types used in the pwdPolicy ObjectClass
+
+   Following are the attribute types used by the pwdPolicy object class.
+
+5.2.1  pwdAttribute
+
+   This holds the name of the attribute to which the password policy is
+   applied.  For example, the password policy may be applied to the
+   userPassword attribute.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.1
+      NAME 'pwdAttribute'
+      EQUALITY objectIdentifierMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 )
+
+5.2.2  pwdMinAge
+
+   This attribute holds the number of seconds that must elapse between
+   modifications to the password.  If this attribute is not present, 0
+   seconds is assumed.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.2
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 11]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.13 
-      NAME 'pwdMustChange' 
-      EQUALITY booleanMatch 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.7  
-      SINGLE-VALUE ) 
-    
-4.2.14. pwdAllowUserChange 
-    
-   This attribute indicates whether users can change their own 
-   passwords, although the change operation is still subject to access 
-   control. If this attribute is not present, a value of "TRUE" is 
-   assumed. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.14 
-      NAME 'pwdAllowUserChange' 
-      EQUALITY booleanMatch 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.7  
-      SINGLE-VALUE ) 
-    
-4.2.15. pwdSafeModify 
-    
-   This attribute specifies whether or not the existing password must 
-   be sent when changing a password. If this attribute is not present, 
-   a "FALSE" value is assumed. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.15 
-      NAME 'pwdSafeModify' 
-      EQUALITY booleanMatch 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.7  
-      SINGLE-VALUE ) 
-    
-4.3. Attribute Types for Password Policy State Information 
-    
-   Password policy state information must be maintained for each user. 
-   The information is located in each user entry as a set of 
-   operational attributes. These operational attributes are: 
-   pwdChangedTime, pwdAccountLockedTime, pwdExpirationWarned, 
-   pwdFailureTime, pwdHistory, pwdGraceUseTime, pwdReset, 
-   pwdPolicySubEntry. 
-    
-4.3.1. Password Policy State Attribute Option 
-    
-   Since the password policy could apply to several attributes used to 
-   store passwords, each of the above operational attributes must have 
-   an option to specify which pwdAttribute is applies to.  
-   The password policy option is defined as the following: 
-        pwd-<passwordAttribute> 
-    
-
-Behera, et. al.        Expires August 15, 2004                 Page 11
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+      NAME 'pwdMinAge'
+      EQUALITY integerMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+      SINGLE-VALUE )
+
+5.2.3  pwdMaxAge
+
+   This attribute holds the number of seconds after which a modified
+   password will expire.
+
+   If this attribute is not present, or if the value is 0 the password
+   does not expire.  If not 0, the value must be greater than or equal
+   to the value of the pwdMinAge.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.3
+      NAME 'pwdMaxAge'
+      EQUALITY integerMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+      SINGLE-VALUE )
+
+5.2.4  pwdInHistory
+
+   This attribute specifies the maximum number of used passwords stored
+   in the pwdHistory attribute.
+
+   If this attribute is not present, or if the value is 0, used
+   passwords are not stored in the pwdHistory attribute and thus may be
+   reused.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.4
+      NAME 'pwdInHistory'
+      EQUALITY integerMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+      SINGLE-VALUE )
+
+5.2.5  pwdCheckQuality
+
+   {TODO: Consider changing the syntax to OID.  Each OID will list a
+   quality rule (like min len, # of special characters, etc).  These
+   rules can be specified outsid ethis document.}
+
+   {TODO: Note that even though this is meant to be a check that happens
+   during password modification, it may also be allowed to happen during
+   authN.  This is useful for situations where the password is encrypted
+   when modified, but decrypted when used to authN.}
+
+   This attribute indicates how the password quality will be verified
+   while being modified or added.  If this attribute is not present, or
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 12]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-        where passwordAttribute a string following the OID syntax 
-        (1.3.6.1.4.1.1466.115.121.1.38). The attribute type descriptor 
-        (short name) MUST be used. 
-    
-   For example, if the pwdPolicy object has for pwdAttribute 
-   "userPassword" then the pwdChangedTime operational attribute, in a 
-   user entry, will be: 
-   pwdChangedTime;pwd-userPassword: 20000103121520Z 
-    
-   This attribute option follows sub-typing semantics. If a client 
-   requests a password policy state attribute to be returned in a 
-   search operation, and does not specify an option, all subtypes of 
-   that policy state attribute are returned. 
-    
-         
-4.3.2. pwdChangedTime 
-    
-   This attribute specifies the last time the entry's password was 
-   changed. This is used by the password expiration policy. If this 
-   attribute does not exist, the password will never expire. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.16 
-      NAME 'pwdChangedTime' 
-      DESC 'The time the password was last changed' 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 
-      EQUALITY generalizedTimeMatch 
-      ORDERING generalizedTimeOrderingMatch 
-      SINGLE-VALUE 
-      USAGE directoryOperation) 
-    
-4.3.3. pwdAccountLockedTime 
-    
-   This attribute holds the time that the user's account was locked. A 
-   locked account means that the password may no longer be used to 
-   authenticate. A 0 value means that the account has been locked 
-   permanently, and that only an administrator can unlock the account. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.17 
-      NAME 'pwdAccountLockedTime' 
-      DESC 'The time an user account was locked' 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 
-      EQUALITY generalizedTimeMatch 
-      ORDERING generalizedTimeOrderingMatch 
-      SINGLE-VALUE 
-      USAGE directoryOperation) 
-     
-4.3.4. pwdExpirationWarned 
-
-
-Behera, et. al.        Expires August 15, 2004                 Page 12
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+   if the value is '0', quality checking will not be enforced.  A value
+   of '1' indicates that the server will check the quality, and if the
+   server is unable to check it (due to a hashed password or other
+   reasons) it will be accepted.  A value of '2' indicates that the
+   server will check the quality, and if the server is unable to verify
+   it, it will return an error refusing the password.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.5
+      NAME 'pwdCheckQuality'
+      EQUALITY integerMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+      SINGLE-VALUE )
+
+5.2.6  pwdMinLength
+
+   When quality checking is enabled, this attribute holds the minimum
+   number of characters that must be used in a password.  If this
+   attribute is not present, no minimum password length will be
+   enforced.  If the server is unable to check the length (due to a
+   hashed password or otherwise), the server will, depending on the
+   value of the pwdCheckQuality attribute, either accept the password
+   without checking it ('0' or '1') or refuse it ('2').
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.6
+      NAME 'pwdMinLength'
+      EQUALITY integerMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+      SINGLE-VALUE )
+
+5.2.7  pwdExpireWarning
+
+   This attribute specifies the maximum number of seconds before a
+   password is due to expire that expiration warning messages will be
+   returned to an authenticating user.
+
+   If this attribute is not present, or if the value is 0 no warnings
+   will be returned.  If not 0, the value must be smaller than the value
+   of the pwdMaxAge attribute.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.7
+      NAME 'pwdExpireWarning'
+      EQUALITY integerMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+      SINGLE-VALUE )
+
+5.2.8  pwdGraceAuthNLimit
+
+   This attribute specifies the number of times an expired password can
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 13]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-   This attribute contains the time when the password expiration 
-   warning was first sent to the client. The password will expire in 
-   the pwdExpireWarning time. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.18 
-      NAME 'pwdExpirationWarned' 
-      DESC 'The time the user was first warned about the coming 
-              expiration of the password' 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 
-      EQUALITY generalizedTimeMatch 
-      ORDERING generalizedTimeOrderingMatch 
-      SINGLE-VALUE 
-      USAGE directoryOperation ) 
-    
-4.3.5. pwdFailureTime 
-    
-   This attribute holds the timestamps of the consecutive 
-   authentication failures. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.19 
-      NAME 'pwdFailureTime' 
-      DESC 'The timestamps of the last consecutive authentication 
-              failures' 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 
-      EQUALITY generalizedTimeMatch 
-      ORDERING generalizedTimeOrderingMatch 
-      USAGE directoryOperation ) 
-    
-    
-4.3.6. pwdHistory 
-    
-   This attribute holds a history of previously used passwords. 
-    
-   Values of this attribute are transmitted in string format as given 
-   by the following ABNF: 
-    
-   pwdHistory = time "#" syntaxOID "#" length "#" data 
-    
-   time         = <generalizedTimeString as specified in 6.14 of 
-                  [RFC2252]> 
-    
-   syntaxOID    = numericoid     ; the string representation of the  
-                                 ; dotted-decimal OID that defines the 
-                                 ; syntax used to store the password. 
-                                 ; numericoid is described in 4.1 of 
-                                 ; [RFC2252]. 
-      
-   length       = numericstring  ; the number of octets in data. 
-                                 ; numericstring is described in 4.1 of 
-
-Behera, et. al.        Expires August 15, 2004                 Page 13
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+   be used to authenticate.  If this attribute is not present or if the
+   value is 0, authentication will fail.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.8
+      NAME 'pwdGraceAuthNLimit'
+      EQUALITY integerMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+      SINGLE-VALUE )
+
+5.2.9  pwdLockout
+
+   This attribute indicates, when its value is "TRUE", that the password
+   may not be used to authenticate after a specified number of
+   consecutive failed bind attempts.  The maximum number of consecutive
+   failed bind attempts is specified in pwdMaxFailure.
+
+   If this attribute is not present, or if the value is "FALSE", the
+   password may be used to authenticate when the number of failed bind
+   attempts has been reached.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.9
+      NAME 'pwdLockout'
+      EQUALITY booleanMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
+      SINGLE-VALUE )
+
+5.2.10  pwdLockoutDuration
+
+   This attribute holds the number of seconds that the password cannot
+   be used to authenticate due to too many failed bind attempts.  If
+   this attribute is not present, or if the value is 0 the password
+   cannot be used to authenticate until reset by a password
+   administrator.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.10
+      NAME 'pwdLockoutDuration'
+      EQUALITY integerMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+      SINGLE-VALUE )
+
+5.2.11  pwdMaxFailure
+
+   This attribute specifies the number of consecutive failed bind
+   attempts after which the password may not be used to authenticate.
+   If this attribute is not present, or if the value is 0, this policy
+   is not checked, and the value of pwdLockout will be ignored.
+
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 14]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-                                 ; [RFC2252]. 
-    
-   data         = <octets representing the password in the format      
-                specified by syntaxOID>. 
-    
-   This format allows the server to store, and transmit a history of 
-   passwords that have been used. In order for equality matching to 
-   function properly, the time field needs to adhere to a consistent 
-   format. For this purpose, the time field MUST be in GMT format. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.20 
-      NAME 'pwdHistory' 
-      DESC 'The history of user s passwords' 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 
-      EQUALITY octetStringMatch 
-      USAGE directoryOperation) 
-    
-4.3.7. pwdGraceUseTime 
-    
-   This attribute holds the timestamps of grace login once a password 
-   has expired. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.21 
-      NAME 'pwdGraceUseTime' 
-      DESC 'The timestamps of the grace login once the password has 
-      expired' 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 
-      EQUALITY generalizedTimeMatch 
-       
-      USAGE directoryOperation) 
-    
-4.3.8. pwdReset 
-    
-   This attribute holds a flag to indicate (when TRUE) that the 
-   password has been reset and therefore must be changed by the user on 
-   first authentication. 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.22 
-      NAME 'pwdReset' 
-      DESC 'The indication that the password has been reset' 
-      EQUALITY booleanMatch 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 
-      SINGLE-VALUE 
-      USAGE directoryOperation) 
-    
-4.3.9. pwdPolicySubentry 
-    
-   This attribute points to the pwdPolicy subentry in effect for this 
-   object. 
-
-Behera, et. al.        Expires August 15, 2004                 Page 14
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.11
+      NAME 'pwdMaxFailure'
+      EQUALITY integerMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+      SINGLE-VALUE )
+
+5.2.12  pwdFailureCountInterval
+
+   This attribute holds the number of seconds after which the password
+   failures are purged from the failure counter, even though no
+   successful authentication occurred.
+
+   If this attribute is not present, or if its value is 0, the failure
+   counter is only reset by a successful authentication.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.12
+      NAME 'pwdFailureCountInterval'
+      EQUALITY integerMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+      SINGLE-VALUE )
+
+5.2.13  pwdMustChange
+
+   This attribute specifies with a value of "TRUE" that users must
+   change their passwords when they first bind to the directory after a
+   password is set or reset by a password administrator.  If this
+   attribute is not present, or if the value is "FALSE", users are not
+   required to change their password upon binding after the password
+   administrator sets or resets the password.  This attribute is not set
+   due to any actions specified by this document, it is typically set by
+   a password administrator after resetting a user's password.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.13
+      NAME 'pwdMustChange'
+      EQUALITY booleanMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
+      SINGLE-VALUE )
+
+5.2.14  pwdAllowUserChange
+
+   This attribute indicates whether users can change their own
+   passwords, although the change operation is still subject to access
+   control.  If this attribute is not present, a value of "TRUE" is
+   assumed.  This attribute is intended to be used in the absense of an
+   access control mechanism.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.14
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 15]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-    
-   (  1.3.6.1.4.1.42.2.27.8.1.23 
-      NAME 'pwdPolicySubentry' 
-      DESC 'The pwdPolicy subentry in effect for this object' 
-      EQUALITY distinguishedNameMatch 
-      SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 
-      SINGLE-VALUE 
-      USAGE directoryOperation) 
-    
-5. Controls used for Password Policy 
-   This section details the controls used while enforcing password 
-   policy. A request control is defined that is sent by a client with a 
-   request operation in order to elicit a response control. The 
-   response control contains various warnings and errors associated 
-   with password policy. 
-    
-5.1. Request Control 
-    
-   This control MAY be sent with any LDAP request message in order to 
-   convey to the server that this client is aware of, and can process 
-   the response control described in this document. When a server 
-   receives this control, it will return the response control when 
-   appropriate and with the proper data. 
-    
-   The controlType is 1.3.6.1.4.1.42.2.27.8.5.1 and the criticality 
-   MUST be FALSE. There is no controlValue. 
-    
-   passwordPolicyRequest 
-    
-   controlType: 1.3.6.1.4.1.42.2.27.8.5.1 
-   criticality: FALSE 
-   controlValue:                 None 
-    
-5.2. Response Control 
-    
-   If the client has sent a passwordPolicyRequest control, the server 
-   sends this control with the following operation responses: 
-   bindResponse, modifyResponse, addResponse, compareResponse and 
-   possibly extendedResponse, to inform of various conditions, and MAY 
-   be sent with other operations (in the case of the changeAfterReset 
-   error). 
-    
-   passwordPolicyResponse 
-    
-   controlType:  1.3.6.1.4.1.42.2.27.8.5.1 
-   criticality: FALSE 
-   controlValue:                 an OCTET STRING, whose value is the BER encoding of the 
-                following type: 
-
-Behera, et. al.        Expires August 15, 2004                 Page 15
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+      NAME 'pwdAllowUserChange'
+      EQUALITY booleanMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
+      SINGLE-VALUE )
+
+5.2.15  pwdSafeModify
+
+   This attribute specifies whether or not the existing password must be
+   sent along with the new password when being changed.  If this
+   attribute is not present, a "FALSE" value is assumed.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.15
+      NAME 'pwdSafeModify'
+      EQUALITY booleanMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
+      SINGLE-VALUE )
+
+5.3  Attribute Types for Password Policy State Information
+
+   Password policy state information must be maintained for each user.
+   The information is located in each user entry as a set of operational
+   attributes.  These operational attributes are: pwdChangedTime,
+   pwdAccountLockedTime, pwdFailureTime, pwdHistory, pwdGraceUseTime,
+   pwdReset, pwdPolicySubEntry.
+
+5.3.1  Password Policy State Attribute Option
+
+   Since the password policy could apply to several attributes used to
+   store passwords, each of the above operational attributes must have
+   an option to specify which pwdAttribute it applies to.  The password
+   policy option is defined as the following:
+
+   pwd-<passwordAttribute>
+
+   where passwordAttribute a string following the OID syntax
+   (1.3.6.1.4.1.1466.115.121.1.38).  The attribute type descriptor
+   (short name) MUST be used.
+
+   For example, if the pwdPolicy object has for pwdAttribute
+   "userPassword" then the pwdChangedTime operational attribute, in a
+   user entry, will be:
+
+   pwdChangedTime;pwd-userPassword: 20000103121520Z
+
+   This attribute option follows sub-typing semantics.  If a client
+   requests a password policy state attribute to be returned in a search
+   operation, and does not specify an option, all subtypes of that
+   policy state attribute are returned.
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 16]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-    
-   PasswordPolicyResponseValue ::= SEQUENCE { 
-      warning   [0] CHOICE { 
-          timeBeforeExpiration  [0] INTEGER (0 .. maxInt), 
-          graceLoginsRemaining  [1] INTEGER (0 .. maxInt) } OPTIONAL  
-      error     [1] ENUMERATED { 
-          passwordExpired               (0), 
-          accountLocked         (1), 
-          changeAfterReset              (2), 
-          passwordModNotAllowed (3), 
-          mustSupplyOldPassword (4), 
-          insufficientPasswordQuality   (5), 
-          passwordTooShort              (6), 
-          passwordTooYoung              (7), 
-          passwordInHistory             (8) } OPTIONAL } 
-    
-   The timeBeforeExpiration warning specifies the number of seconds 
-   before a password will expire. The graceLoginsRemaining warning 
-   specifies the remaining number of times a user will be allowed to 
-   authenticate with an expired password. The passwordExpired error 
-   signifies that the password has expired and must be reset. The 
-   changeAfterReset error signifies that the password must be changed 
-   before the user will be allowed to perform any operation other than 
-   bind and modify. The passwordModNotAllowed error is set when a user 
-   is restricted from changing her password. The 
-   insufficientPasswordQuality error is set when a password doesn't 
-   pass quality checking. The passwordTooYoung error is set if the age 
-   of the password to be modified is not yet old enough. 
-    
-   Typically, only either a warning or an error will be encoded though 
-   there may be exceptions. For example, if the user is required to 
-   change a password after the administrator set it, and the password 
-   will expire in a short amount of time, the control may include the 
-   timeBeforeExpiration warning and the changeAfterReset error.  
-    
-6. Server Implementation by LDAP operation 
-    
-   The following sections contain detailed instructions that refer to 
-   attributes of the pwdPolicy object class. When doing so, the 
-   attribute of the pwdPolicy object that governs the entry being 
-   discussed is implied. 
-    
-   The server SHOULD enforce that the password attribute subject to a 
-   password policy as defined in this document, contains one and only 
-   one password value. 
-    
-   The scenarios in the following operations assume that the client has 
-   attached a passwordPolicyRequest control to the request message of 
-
-Behera, et. al.        Expires August 15, 2004                 Page 16
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+5.3.2  pwdChangedTime
+
+   This attribute specifies the last time the entry's password was
+   changed.  This is used by the password expiration policy.  If this
+   attribute does not exist, the password will never expire.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.16
+      NAME 'pwdChangedTime'
+      DESC 'The time the password was last changed'
+      EQUALITY generalizedTimeMatch
+      ORDERING generalizedTimeOrderingMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
+      SINGLE-VALUE
+      USAGE directoryOperation )
+
+5.3.3  pwdAccountLockedTime
+
+   This attribute holds the time that the user's account was locked.  A
+   locked account means that the password may no longer be used to
+   authenticate.  A 000001010000Z value means that the account has been
+   locked permanently, and that only a password administrator can unlock
+   the account.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.17
+      NAME 'pwdAccountLockedTime'
+      DESC 'The time an user account was locked'
+      EQUALITY generalizedTimeMatch
+      ORDERING generalizedTimeOrderingMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
+      SINGLE-VALUE
+      USAGE directoryOperation )
+
+5.3.4  pwdFailureTime
+
+   This attribute holds the timestamps of the consecutive authentication
+   failures.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.19
+      NAME 'pwdFailureTime'
+      DESC 'The timestamps of the last consecutive authentication
+      failures'
+      EQUALITY generalizedTimeMatch
+      ORDERING generalizedTimeOrderingMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
+      USAGE directoryOperation )
+
+
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 17]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-   the operation. In the event that the passwordPolicyRequest control 
-   was not sent, no passwordPolicyRequest control is returned. All 
-   other instructions remain the same. 
-    
-6.1. Bind Operation 
-         
-   When processing a bind request, the server MUST perform the 
-   following steps: 
-    
-   1. Check for a locked account: 
-    
-      If the value of the pwdAccountLockedTime attribute is 0, or if 
-      the current time is less than the value of the 
-      pwdAccountLockedTime attribute added to the value of the 
-      pwdLockoutDuration, the account is locked. 
-       
-      If the account is locked, the server MUST send a bindResponse to 
-      the client with the resultCode: unwillingToPerform (53), and MUST 
-      include the passwordPolicyResponse in the controls field of the 
-      bindResponse message with the error: accountLocked (1). 
-       
-      If the account is not locked, the server MUST proceed with the 
-      bind operation. 
-   2. Check the result of the bind operation: 
-       
-      If the bind operation succeeds with authentication, the server 
-      MUST do the following: 
-      A.  Delete the pwdFailureTime attribute. 
-             B.  Check whether the password must be changed now.  
-       
-          If the pwdMustChange attribute is set to TRUE, and if the 
-          pwdReset attribute is set to TRUE, the password must be 
-          changed now. 
-           
-          If the password must be changed now, the server MUST send a 
-          bindResponse to the client with the resultCode: success (0), 
-          and MUST include the passwordPolicyResponse in the controls 
-          field of the bindResponse message with the warning: 
-          changeAfterReset specified. 
-          The server MUST then disallow all operations issued by this 
-          user except modify password, bind, unbind, abandon and 
-          StartTLS extended operation. 
-       
-          If the password does not need to be changed now, the operation 
-          proceeds. 
-
-Behera, et. al.        Expires August 15, 2004                 Page 17
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+5.3.5  pwdHistory
+
+   This attribute holds a history of previously used passwords.  Values
+   of this attribute are transmitted in string format as given by the
+   following ABNF:
+
+   pwdHistory = time "#" syntaxOID "#" length "#" data
+
+   time       = <generalizedTimeString as specified in 6.14
+                 of [RFC2252]>
+
+   syntaxOID  = numericoid    ; the string representation of the
+                              ; dotted-decimal OID that defines the
+                              ; syntax used to store the password.
+                              ; numericoid is described in 4.1
+                              ; of [RFC2252].
+
+   length     = numericstring ; the number of octets in data.
+                              ; numericstring is described in 4.1
+                              ; of [RFC2252].
+
+   data       = <octets representing the password in the format
+                 specified by syntaxOID>.
+
+   This format allows the server to store, and transmit a history of
+   passwords that have been used.  In order for equality matching to
+   function properly, the time field needs to adhere to a consistent
+   format.  For this purpose, the time field MUST be in GMT format.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.20
+      NAME 'pwdHistory'
+      DESC 'The history of user s passwords'
+      EQUALITY octetStringMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
+      USAGE directoryOperation )
+
+5.3.6  pwdGraceUseTime
+
+   This attribute holds the timestamps of grace authentications after a
+   password has expired.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.21
+      NAME 'pwdGraceUseTime'
+      DESC 'The timestamps of the grace authentication after the
+      password has expired'
+      EQUALITY generalizedTimeMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 18]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-      C.  Check for password expiration 
-    
-          The password has expired when either of the following 
-          conditions is met: 
-       
-          -  If the value of the pwdExpireWarning attribute is 0, the 
-             server subtracts the current time from the time stored in 
-             pwdChangedTime to arrive at the password's age. If the age 
-             is greater than the value in the pwdMaxAge attribute, the 
-             password has expired.  
-       
-          -  If the value of the pwdExpireWarning attribute is non-
-             zero, and the pwdExpirationWarned attribute is present and 
-             has a time value, the server subtracts the current time 
-             from the time stored in the pwdExpirationWarned to arrive 
-             at the first warning age. If the age is greater than the 
-             value in the pwdExpireWarning attribute, the password has 
-             expired.  
-       
-          If the password has expired, the server MUST check for 
-          remaining grace logins. 
-       
-                       If the pwdGraceUseTime attribute is present, the server 
-             MUST count the number of values in that attribute and 
-             subtract it from the pwdGraceLoginLimit. A positive result 
-             specifies the number of remaining grace logins. 
-       
-                       If there are remaining grace logins, the server MUST add a 
-             new value with the current time in pwdGraceUseTime. Then 
-             it MUST send a bindResponse with the resultCode: success 
-             (0), and MUST include the passwordPolicyResponse in the 
-             controls field of the bindResponse message with the 
-             warning: graceLoginsRemaining choice set to the number of 
-             grace logins left. 
-       
-                       If there are no remaining grace logins, the server MUST 
-             send a bindResponse with the resultCode: 
-             invalidCredentials (49), and MUST include the 
-             passwordPolicyResponse in the controls field of the 
-             bindResponse message with the error: passwordExpired (0) 
-             set. 
-          
-          If the password has not expired, execution continues. 
-       
-      D.  Calculates whether the time before expiration warning should 
-          be sent.  
-    
-
-
-Behera, et. al.        Expires August 15, 2004                 Page 18
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+      USAGE directoryOperation )
+
+5.3.7  pwdReset
+
+   This attribute holds a flag to indicate (when TRUE) that the password
+   has been updated by the password administrator and must be changed by
+   the user on first authentication.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.22
+      NAME 'pwdReset'
+      DESC 'The indication that the password has been reset'
+      EQUALITY booleanMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
+      SINGLE-VALUE
+      USAGE directoryOperation )
+
+5.3.8  pwdPolicySubentry
+
+   This attribute points to the pwdPolicy subentry in effect for this
+   object.
+
+      ( 1.3.6.1.4.1.42.2.27.8.1.23
+      NAME 'pwdPolicySubentry'
+      DESC 'The pwdPolicy subentry in effect for this object'
+      EQUALITY distinguishedNameMatch
+      SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
+      SINGLE-VALUE
+      USAGE directoryOperation )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 19]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-          If the pwdExpireWarning attribute is present and contains a 
-          value, the server MUST perform the following steps. 
-    
-                    If the pwdExpirationWarned attribute is present and has a 
-             time value, the warning time is the value of the 
-             pwdExpirationWarned attribute plus the value of the 
-             pwdExpireWarning attribute minus the current time. 
-              
-                    If the pwdExpirationWarned attribute is not present, the 
-             server MUST subtract the current time from the time stored 
-             in pwdChangedTime to arrive at the password's age. If the 
-             age is greater than the value of the pwdMaxAge attribute 
-             minus the value of the pwdExpireWarning attribute, the 
-             server MUST set the current time as the value of the 
-             pwdExpirationWarned attribute, and the warning time is the 
-             value of pwdMaxAge minus the password's age. 
-       
-                    If the warning time is a positive number, the server MUST 
-             send a bindResponse with the resultCode: success (0), and 
-             MUST include the passwordPolicyResponse in the controls 
-             field of the bindResponse message with the warning: 
-             timeBeforeExiration set to the value as described above. 
-       
-                    If the warning time is zero, or wasn't calculated, the 
-             server MUST send a bindResponse with the resultCode: 
-             success (0), and MUST include the passwordPolicyResponse 
-             with nothing in the SEQUENCE. 
-       
-          If the pwdExpireWarning attribute is not present, the server 
-          MUST send a bindResponse with the resultCode: success (0), 
-          and MUST include the passwordPolicyResponse with nothing in 
-          the SEQUENCE. 
-        
-             If the bind operation fails authentication due to invalid 
-      credentials, the server MUST do the following: 
-       
-      A.  Add the current time as a value of the pwdFailureTime 
-          attribute. 
-           
-      B.  If the pwdLockout attribute is TRUE, the server MUST also do 
-          the following: 
-       
-                    Count the number of values in the pwdFailureTime attribute 
-             that are younger than pwdFailureCountInterval.  
-    
-                    If the number of these failures is greater or equal to the 
-             pwdMaxFailure attribute, the server MUST lock the account 
-             by setting the value of the pwdAccountLockedTime attribute 
-             to the current time. After locking the account, the server 
-
-Behera, et. al.        Expires August 15, 2004                 Page 19
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+6.  Controls used for Password Policy
+
+   This section details the controls used while enforcing password
+   policy.  A request control is defined that is sent by a client with a
+   request operation in order to elicit a response control.  The
+   response control contains various warnings and errors associated with
+   password policy.
+
+6.1  Request Control
+
+   This control MAY be sent with any LDAP request message in order to
+   convey to the server that this client is aware of, and can process
+   the response control described in this document.  When a server
+   receives this control, it will return the response control when
+   appropriate and with the proper data.
+
+   The controlType is 1.3.6.1.4.1.42.2.27.8.5.1 and the criticality may
+   be TRUE or FALSE.  There is no controlValue.
+
+6.2  Response Control
+
+   If the client has sent a passwordPolicyRequest control, the server
+   (when solicited by the inclusion of the request control) sends this
+   control with the following operation responses: bindResponse,
+   modifyResponse, addResponse, compareResponse and possibly
+   extendedResponse, to inform of various conditions, and MAY be sent
+   with other operations (in the case of the changeAfterReset error).
+   The controlType is 1.3.6.1.4.1.42.2.27.8.5.1 and the controlValue is
+   the BER encoding of the following type:
+
+   PasswordPolicyResponseValue ::= SEQUENCE {
+      warning [0] CHOICE {
+         timeBeforeExpiration [0] INTEGER (0 .. maxInt),
+         graceAuthNsRemaining [1] INTEGER (0 .. maxInt) } OPTIONAL,
+      error   [1] ENUMERATED {
+         passwordExpired             (0),
+         accountLocked               (1),
+         changeAfterReset            (2),
+         passwordModNotAllowed       (3),
+         mustSupplyOldPassword       (4),
+         insufficientPasswordQuality (5),
+         passwordTooShort            (6),
+         passwordTooYoung            (7),
+         passwordInHistory           (8) } OPTIONAL }
+
+   The timeBeforeExpiration warning specifies the number of seconds
+   before a password will expire.  The graceAuthNsRemaining warning
+   specifies the remaining number of times a user will be allowed to
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 20]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-             MUST send a bindResponse to the client with the 
-             resultCode: unwillingToPerform (53), and MUST include the 
-             passwordPolicyResponse in the controls field of the 
-             bindResponse message with the error: accountLocked (1). 
-    
-             If the number of failures is less than the pwdMaxFailure 
-             attribute, operation proceeds. 
-           
-      C.  Failure times that are old by more than 
-          pwdFailureCountInterval are purged from the pwdFailureTime 
-          attribute. 
-           
-    
-        
-6.2. Modify Password Operation 
-    
-   Because the password is stored in an attribute, the modify operation 
-   may be used to create or update a password. But some alternate 
-   mechanisms have been defined or may be defined, such as the LDAP 
-   Password Modify Extended Operation [RFC-3062]. 
-    
-    
-    
-    
-   While processing a password modification, the server MUST perform 
-   the following steps: 
-    
-   1. Check the pwdSafeModify attribute. If set to TRUE, the server 
-      MUST ensure that the modify password operation included the 
-      user's existing password. When the LDAP modify operation is used 
-      to modify a password, this is done by specifying both a delete 
-      action and an add or replace action, where the delete action is 
-      first, and specifies the existing password, and the add or 
-      replace action specifies the new password. Other password modify 
-      operations SHOULD employ a similar mechanism. Otherwise this 
-      policy will fail.  
-    
-      If the existing password is not specified, the server MUST NOT 
-      process the operation and MUST send the appropriate response 
-      message to the client with the resultCode: unwillingToPerform 
-      (53), and MUST include the passwordPolicyResponse in the controls 
-      field of the response message with the error: 
-      mustSupplyOldPassword (4). 
-    
-   
-   2. Check the value of the pwdMustChange attribute. If TRUE, the 
-      server MUST check the pwdReset attribute in the user's entry, to 
-      see if a directory administrator has reset the password. If so, 
-      it MUST ensure that the modify password operation contains no 
-
-Behera, et. al.        Expires August 15, 2004                 Page 20
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+   authenticate with an expired password.  The passwordExpired error
+   signifies that the password has expired and must be reset.  The
+   changeAfterReset error signifies that the password must be changed
+   before the user will be allowed to perform any operation other than
+   bind and modify.  The passwordModNotAllowed error is set when a user
+   is restricted from changing her password.  The
+   insufficientPasswordQuality error is set when a password doesn't pass
+   quality checking.  The passwordTooYoung error is set if the age of
+   the password to be modified is not yet old enough.
+
+   Typically, only either a warning or an error will be encoded though
+   there may be exceptions.  For example, if the user is required to
+   change a password after the password administrator set it, and the
+   password will expire in a short amount of time, the control may
+   include the timeBeforeExpiration warning and the changeAfterReset
+   error.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 21]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-      modifications other than the modification of the password 
-      attribute. If other modifications exist, the server MUST send a 
-      response message to the client with the resultCode: 
-      unwillingToPerform (53), and MUST include the 
-      passwordPolicyResponse in the controls field of the response 
-      message with the error: changeAfterReset (2). 
-   
-   3. Check to see whether the bound identity has sufficient rights to 
-      modify the password. If the bound identity is a user changing its 
-      own password, this MAY be done by checking the pwdAllowUserChange 
-      attribute or using an access control mechanism. The determination 
-      of this is implementation specific. If the user is not allowed to 
-      change her password, the server MUST send a response message to 
-      the client with the resultCode: unwillingToPerform (53), and MUST 
-      include the passwordPolicyResponse in the controls field of the 
-      response message with the error: passwordModNotAllowed (3). 
-   
-   4. Check the value of the pwdMinAge attribute. If it is set to a 
-      non-zero value, the server MUST subtract the current time from 
-      the value of the pwdChangedTime attribute to arrive at the 
-      password's age. If the password's age is less than the value of 
-      the pwdMinAge attribute, the password is too young to modify. In 
-      this case, the server MUST send a response message to the client 
-      with the resultCode: constraintViolation (19), and MUST include 
-      the passwordPolicyResponse in the controls field of the response 
-      message with the error: passwordTooYoung (7). 
-   
-   5. Check the value of the pwdCheckQuality attribute.  
-   
-      If the value is non-zero, The server: 
-      
-      A.  MUST ensure that the password meets the quality criteria 
-          enforced by the server. This enforcement is implementation 
-          specific. 
-       
-          If the server is unable to check the quality (due to a hashed 
-          password or otherwise), the value of pwdCheckQuality is 
-          evaluated. If the value is 1, operation MUST continue. If the 
-          value is 2, the server MUST send a response message to the 
-          client with the resultCode: constraintViolation (19), and MUST 
-          include the passwordPolicyResponse in the controls field of 
-          the response message with the error: 
-          insufficientPasswordQuality (5). 
-       
-          If the server is able to check the password quality, and the 
-          check fails, the server MUST send a response message to the 
-          client with the resultCode: constraintViolation (19), and MUST 
-          include the passwordPolicyResponse in the controls field of 
-
-
-Behera, et. al.        Expires August 15, 2004                 Page 21
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+7.  Policy Decision Points
+
+   Following are a number of procedures used to make policy decisions.
+   These procedures are typically performed by the server while
+   processing an operation.
+
+   The following sections contain detailed instructions that refer to
+   attributes of the pwdPolicy object class.  When doing so, the
+   attribute of the pwdPolicy object that governs the entry being
+   discussed is implied.
+
+7.1  Locked Account Check
+
+   A status of true is returned to indicate that the account is locked
+   if any of these conditions are met:
+
+   o  The value of the pwdAccountLockedTime attribute is 000001010000Z.
+   o  The current time is less than the value of the
+      pwdAccountLockedTime attribute added to the value of the
+      pwdLockoutDuration.
+
+   Otherwise a status of false is returned.
+
+7.2  Password Must be Changed Now Check
+
+   A status of true is returned to indicate that the account is locked
+   if all of these conditions are met:
+
+      The pwdMustChange attribute is set to TRUE.
+      The pwdReset attribute is set to TRUE.
+
+   Otherwise a status of false is returned.
+
+7.3  Password Expiration Check
+
+   A status of true is returned indicating that the password has expired
+   if the value of the pwdExpireWarning attribute is 0, and the current
+   time minus the value of pwdChangedTime is greater than the value of
+   the pwdMaxAge.
+
+   Otherwise, a status of false is returned.
+
+7.4  Remaining Grace AuthN Check
+
+   If the pwdGraceUseTime attribute is present, the number of values in
+   that attribute subtracted from the value of pwdGraceAuthNLimit is
+   returned.  Otherwise zero is returned.  A positive result specifies
+   the number of remaining grace authentications.
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 22]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-          the response message with the error: 
-          insufficientPasswordQuality (5). 
-       
-      B.  MUST check the value of the pwdMinLength attribute. If the 
-          value is non-zero, it MUST ensure that the new password is of 
-          at least the minimum length. 
-       
-          If the server is unable to check the length (due to a hashed 
-          password or otherwise), the value of pwdCheckQuality is 
-          evaluated. If the value is 1, operation MUST continue. If the 
-          value is 2, the server MUST send a response message to the 
-          client with the resultCode: constraintViolation (19), and MUST 
-          include the passwordPolicyResponse in the controls field of 
-          the response message with the error: passwordTooShort (6). 
-       
-          If the server is able to check the password length, and the 
-          check fails, the server MUST send a response message to the 
-          client with the resultCode: constraintViolation (19), and MUST 
-          include the passwordPolicyResponse in the controls field of 
-          the response message with the error: passwordTooShort (6). 
-        
-   6. Check the value of the pwdInHistory attribute. If the value is 
-      non-zero, the server MUST check whether this password exists in 
-      the entry's pwdHistory attribute or in the current password 
-      attribute. If the password does exist in the pwdHistory attribute 
-      or in the current password attribute, the server MUST send a 
-      response message to the client with the resultCode: 
-      constraintViolation (19), and MUST include the 
-      passwordPolicyResponse in the controls field of the response 
-      message with the error: passwordInHistory (8). 
-   
-   If the steps have completed without causing an error condition, the 
-   server MUST follow the following steps in order to update the 
-   necessary password policy state attributes: 
-    
-   7. Check the value of the pwdMaxAge attribute. If the value is non-
-      zero, or if the value of the pwdMinAge attribute is non-zero, the 
-      server MUST update the pwdChangedTime attribute on the entry to 
-      the current time. 
-   
-   8. If the value of the pwdInHistory attribute is non-zero, the 
-      server MUST add the previous password to the pwdHistory 
-      attribute. If the number of attributes held in the pwdHistory 
-      attribute exceeds the value of pwdInHistory, the server MUST 
-      remove the oldest excess passwords. 
-   
-   9. Remove the pwdFailureTime, pwdReset, pwdGraceUseTime and 
-      pwdExpirationWarned attributes from the user's entry if they 
-
-
-Behera, et. al.        Expires August 15, 2004                 Page 22
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+7.5  Time Before Expiration Check
+
+   If the pwdExpireWarning attribute is not present a zero status is
+   returned.  Otherwise the following steps are followed:
+
+   Subtract the time stored in pwdChangedTime from the current time to
+   arrive at the password's age.  If the password's age is greater than
+   than the value of the pwdMaxAge attribute, a zero status is returned.
+   Subtract the value of the pwdExpireWarning attribute from the value
+   of the pwdMaxAge attribute to arrive at the warning age.  If the
+   password's age is equal to or greater than the warning age, the value
+   of pwdMaxAge minus the password's age is returned.
+
+7.6  Intruder Detection Check
+
+   A status of true indicating that an intruder has been detected is
+   returned if the following conditions are met:
+
+      The pwdLockout attribute is TRUE.
+      The number of values in the pwdFailureTime attribute that are
+      younger than pwdFailureCountInterval is greater or equal to the
+      pwdMaxFailure attribute.
+
+   Otherwise a status of false is returned.
+
+   While performing this check, values of pwdFailureTime that are old by
+   more than pwdFailureCountInterval are purged and not counted.
+
+7.7  Password Too Young Check
+
+   A status of true indicating that not enough time has passed since the
+   password was last updated is returned if:
+
+      The value of pwdMinAge is non-zero and pwdChangedTime is present.
+      The value of pwdMinAge is greater than the current time minus the
+      value of pwdChangedTime.
+
+   Otherwise a false status is returned.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 23]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-      exist. 
-       
-   The server MUST then apply the modify password operation. 
-    
-6.3. Add Operation 
-    
-   The password MAY be set during an Add operation. If it is, the 
-   server MUST perform the following steps while processing the add 
-   operation. Note that these are essentially duplicates of steps 3, 5 
-   and 7 from Section 6.2 with the exception that pwdAllowUserChange is 
-   not checked. 
-    
-   1. Check to see whether the bound identity has sufficient rights to 
-      modify the password. This MAY be done by the use of an access 
-      control mechanism. If the user is not allowed to add this 
-      password, the server MUST send an addResponse to the client with 
-      the resultCode: unwillingToPerform (53), and MUST include the 
-      passwordPolicyResponse in the controls field of the addResponse 
-      message with the error: passwordModNotAllowed (3). 
-   
-   2. Check the value of the pwdCheckQuality attribute.  
-   
-      If the value is non-zero, The server: 
-      
-      A.  MUST ensure that the password meets the quality criteria 
-          enforced by the server. This enforcement is implementation 
-          specific. 
-       
-          If the server is unable to check the quality (due to a hashed 
-          password or otherwise), the value of pwdCheckQuality MUST be 
-          evaluated. If the value is 1, operation MUST continue. If the 
-          value is 2, the server MUST send an addResponse to the client 
-          with the resultCode: constraintViolation (19), and MUST 
-          include the passwordPolicyResponse in the controls field of 
-          the addResponse message with the error: 
-          insufficientPasswordQuality (5). 
-       
-          If the server is able to check the password quality, and the 
-          check fails, the server MUST send an addResponse to the client 
-          with the resultCode: constraintViolation (19), and MUST 
-          include the passwordPolicyResponse in the controls field of 
-          the addResponse message with the error: 
-          insufficientPasswordQuality (5). 
-       
-      B.  MUST check the value of the pwdMinLength attribute. If the 
-          value is non-zero, it MUST ensure that the new password is of 
-          at least the minimum length. 
-       
-
-
-Behera, et. al.        Expires August 15, 2004                 Page 23
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+8.  Server Policy Enforcement Points
+
+   The server SHOULD enforce that the password attribute subject to a
+   password policy as defined in this document, contains one and only
+   one password value.
+
+   The scenarios in the following operations assume that the client has
+   attached a passwordPolicyRequest control to the request message of
+   the operation.  In the event that the passwordPolicyRequest control
+   was not sent, no passwordPolicyResponse control is returned.  All
+   other instructions remain the same.
+
+   For successfuly completed operations, unless otherwise stated, no
+   passwordPolicyResponse control is returned.
+
+8.1  Password-based Authentication
+
+   This section contains the policy enforcement rules and policy data
+   updates used while validating a password.  Operations that validate
+   passwords include, but are not limited to, the Bind operation where
+   the simple choice specifies a password, and the compare operation
+   where the attribute being compared holds a password.
+
+8.1.1  Fail if the account is locked
+
+   If the account is locked as specified in Section 7.1, the server
+   fails the operation with an appropriate resultCode (i.e.
+   invalidCredentials (49) in the case of a bind operation, compareFalse
+   (5) in the case of a compare operation, etc.).  The server MAY set
+   the error: accountLocked (1) in the passwordPolicyResponse in the
+   controls field of the message.
+
+8.1.2  AuthN Passed Procedures
+
+   If the authentication process indicates that the password validated,
+   these procedures are followed in order:
+
+8.1.2.1  Policy state updates
+
+   Delete the pwdFailureTime and pwdAccountLockedTime attributes.
+
+8.1.2.2  Password must be changed now
+
+   If the decision in Section 7.2 returns true, the server sends to the
+   client a response with an appropriate successful resultCode (i.e.
+   success (0), compareTrue (6), etc.), and includes the
+   passwordPolicyResponse in the controls field of the bindResponse
+   message with the warning: changeAfterReset specified.
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 24]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-          If the server is unable to check the length (due to a hashed 
-          password or otherwise), the value of pwdCheckQuality MUST be 
-          evaluated. If the value is 1, operation MUST continue. If the 
-          value is 2, the server MUST send an addResponse to the client 
-          with the resultCode: constraintViolation (19), and MUST 
-          include the passwordPolicyResponse in the controls field of 
-          the addResponse message with the error: passwordTooShort (6). 
-       
-          If the server is able to check the password length, and the 
-          check fails, the server MUST send an addResponse to the client 
-          with the resultCode: constraintViolation (19), and MUST 
-          include the passwordPolicyResponse in the controls field of 
-          the addResponse message with the error: passwordTooShort (6). 
-     
-   If the steps above have completed without causing an error 
-   condition, the server MUST follow the steps below in order to update 
-   the necessary password policy state attributes. 
-    
-   3. Check the value of the pwdMaxAge attribute. If the value is non-
-      zero, or if the value of the pwdMinAge attribute is non-zero, the 
-      server MUST update the pwdChangedTime attribute on the entry to 
-      the current time. 
-   
-6.4. Compare Operation 
-    
-   The compare operation MAY be used to compare a password. This might 
-   be performed when a client wishes to verify that user's supplied 
-   password is correct. An example of this is an LDAP HTTP 
-   authentication redirector. It may be desirable to use this rather 
-   than performing a bind operation in order to reduce possible 
-   overhead involved in performing a bind. Access Controls SHOULD be 
-   used to restrict this comparison from being made. 
-    
-   If a server supports this behavior, it MUST comply with the 
-   following. Otherwise the password policy described in this document 
-   may be circumvented. 
-    
-   While comparing password attributes, the server MUST perform the 
-   following steps: 
-    
-   1. Check for a locked account: 
-    
-      If the value of the pwdAccountLockedTime attribute is 0, or if 
-      the current time is less than the value of the 
-      pwdAccountLockedTime attribute added to the value of the 
-      pwdLockoutDuration, the account is locked. 
-       
-      If the account is locked, the server MUST send a compareResponse 
-      to the client with the resultCode: compareFalse (5), and MUST 
-
-Behera, et. al.        Expires August 15, 2004                 Page 24
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+   For bind, the server MUST then disallow all operations issued by this
+   user except modify password, bind, unbind, abandon and StartTLS
+   extended operation.
+
+8.1.2.3  Expired password
+
+   If the password has expired as per Section 7.3, the server either
+   returns a success or failure based on the state of grace
+   authentications.
+
+8.1.2.3.1  Remaining Grace Authentications
+
+   If there are remaining grace authentications as per Section 7.4, the
+   server adds a new value with the current time in pwdGraceUseTime.
+   Then it sends to the client a response with an appropriate successful
+   resultCode (i.e.  success (0), compareTrue (6), etc.), and includes
+   the passwordPolicyResponse in the controls field of the response
+   message with the warning: graceAuthNsRemaining choice set to the
+   number of grace authentications left.
+
+   Implementor's note: The system time of the host machine may be more
+   granular than is needed to ensure unique values of this attribute.
+   It is recommended that a mechanism is used to ensure unique
+   generalized time values.  The fractional seconds field may be used
+   for this purpose.
+
+8.1.2.3.2  No Remaining Grace Authentications
+
+   If there are no remaining grace authentications, the server fails the
+   operation with an appropriate resultCode (invalidCredentials (49),
+   compareFalse (5), etc.), and includes the passwordPolicyResponse in
+   the controls field of the bindResponse message with the error:
+   passwordExpired (0) set.
+
+8.1.2.4  Expiration Warning
+
+   If the result of Section 7.5 is a positive number, the server sends
+   to the client a response with an appropriate successful resultCode
+   (i.e.  success (0), compareTrue (6), etc.), and includes the
+   passwordPolicyResponse in the controls field of the bindResponse
+   message with the warning: timeBeforeExiration set to the value as
+   described above.  Otherwise, the server sends a successful response,
+   and omits the passwordPolicyResponse.
+
+8.1.2.5  AuthN Failed Procedures
+
+   If the authentication process indicates that the password failed
+   validation due to invalid credentials, these procedures are followed:
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 25]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-      include the passwordPolicyResponse in the controls field of the 
-      compareResponse message with the error: accountLocked (1). 
-       
-      If the account is not locked, the server MUST proceed with the 
-      compare operation. 
-    
-   2. If Access Controls permit, the server MUST proceed with compare 
-      operation and MUST check the result. 
-       
-      If the result of the compare operation is true, the server MUST 
-      do the following: 
-      A.  Delete the pwdFailureTime attribute. 
-      B.  Check for password expiration 
-    
-          The password has expired when either of the following 
-          conditions is met: 
-       
-          -  If the value of the pwdExpireWarning attribute is 0, the 
-             server MUST subtract the current time from the time stored 
-             in pwdChangedTime to arrive at the password's age. If the 
-             age is greater than the value in the pwdMaxAge attribute, 
-             the password has expired.  
-       
-          -  If the value of the pwdExpireWarning attribute is non-
-             zero, and the pwdExpirationWarned attribute is present and 
-             has a time value, the server MUST subtract the current 
-             time from the time stored in the pwdExpirationWarned to 
-             arrive at the first warning age. If the age is greater 
-             than the value in the pwdExpireWarning attribute, the 
-             password has expired.  
-       
-          If the password has expired, the server MUST check for 
-          remaining grace logins. 
-       
-                       If the pwdGraceUseTime attribute is present, the server 
-             MUST count the number of values in that attribute and MUST 
-             subtract it from the pwdGraceLoginLimit. A positive result 
-             specifies the number of remaining grace logins. 
-       
-                       If there are remaining grace logins, the server MUST add a 
-             new value with the current time in pwdGraceUseTime. Then 
-             it MUST send a compareResponse with the resultCode: 
-             compareTrue (6), and MUST include the 
-             passwordPolicyResponse in the controls field of the 
-             compareResponse message with the warning: 
-             graceLoginsRemaining choice set to the number of grace 
-             logins left. 
-
-Behera, et. al.        Expires August 15, 2004                 Page 25
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+8.1.2.5.1  Policy state update
+
+   Add the current time as a value of the pwdFailureTime attribute.
+
+   Implementor's note: The system time of the host machine may be more
+   granular than is needed to ensure unique values of this attribute.
+   It is recommended that a mechanism is used to ensure unique
+   generalized time values.  The fractional seconds field may be used
+   for this purpose.
+
+8.1.2.5.2  Lock on intruder detection
+
+   If the check in Section 7.6 returns a true state, the server locks
+   the account by setting the value of the pwdAccountLockedTime
+   attribute to the current time.  After locking the account, the server
+   fails the operation with an appropriate resultCode
+   (invalidCredentials (49), compareFalse (5), etc.), and includes the
+   passwordPolicyResponse in the controls field of the message with the
+   error: accountLocked (1).
+
+8.2  Password Update Operations
+
+   Because the password is stored in an attribute, various operations
+   (like add and modify) may be used to create or update a password.
+   But some alternate mechanisms have been defined or may be defined,
+   such as the LDAP Password Modify Extended Operation [RFC3062].
+
+   While processing a password update, the server performs the following
+   steps:
+
+8.2.1  Safe Modification
+
+   If pwdSafeModify is set to TRUE and if there is an existing password
+   value, the server ensures that the password update operation includes
+   the user's existing password.
+
+   When the LDAP modify operation is used to modify a password, this is
+   done by specifying both a delete action and an add or replace action,
+   where the delete action is first, and specifies the existing
+   password, and the add or replace action specifies the new password.
+   Other password update operations SHOULD employ a similar mechanism.
+   Otherwise this policy will fail.
+
+   If the existing password is not specified, the server does not
+   process the operation and sends the appropriate response message to
+   the client with the resultCode: insufficientAccessRights (50), and
+   includes the passwordPolicyResponse in the controls field of the
+   response message with the error: mustSupplyOldPassword (4).
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 26]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-       
-                       If there are no remaining grace logins, the server MUST 
-             send a compareResponse with the resultCode: compareFalse 
-             (5), and MUST include the passwordPolicyResponse in the 
-             controls field of the compareResponse message with the 
-             error: passwordExpired (0) set. 
-          
-          If the password has not expired, execution MUST continue. 
-    
-      C.  Calculate whether the time before expiration warning should be 
-          sent.  
-    
-          If the pwdExpireWarning attribute is present and contains a 
-          value, the server MUST perform the following steps. 
-    
-                    If the pwdExpirationWarned attribute is present and has a 
-             time value, the warning time is the value of the 
-             pwdExpirationWarned attribute plus the value of the 
-             pwdExpireWarning attribute minus the current time. 
-              
-                    If the pwdExpirationWarned attribute is not present, the 
-             server MUST subtract the current time from the time stored 
-             in pwdChangedTime to arrive at the password's age. If the 
-             age is greater than the value of the pwdMaxAge attribute 
-             minus the value of the pwdExpireWarning attribute, the 
-             server MUST set the current time as the value of the 
-             pwdExpirationWarned attribute, and the warning time is the 
-             value of pwdMaxAge minus the password's age. 
-       
-                    If the warning time is a positive number, the server MUST 
-             send a compareResponse with the resultCode: compareTrue 
-             (6), and MUST include the passwordPolicyResponse in the 
-             controls field of the compareResponse message with the 
-             warning: timeBeforeExiration set to the value as described 
-             above. 
-       
-                    If the warning time is zero, or wasn't calculated, the 
-             server MUST send a compareResponse with the resultCode: 
-             compareTrue (6), and MUST include the 
-             passwordPolicyResponse with nothing in the SEQUENCE. 
-       
-          If the pwdExpireWarning attribute is not present, the server 
-          MUST send a compareResponse with the resultCode: compareTrue 
-          (6), and MUST include the passwordPolicyResponse with nothing 
-          in the SEQUENCE. 
-           
-      If the result of the compare operation is false, the server MUST 
-      do the following: 
-    
-
-Behera, et. al.        Expires August 15, 2004                 Page 26
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+8.2.2  Change After Reset
+
+   If the decision in Section 7.2 returns true, the server ensures that
+   the password update operation contains no modifications other than
+   the modification of the password attribute.  If other modifications
+   exist, the server sends a response message to the client with the
+   resultCode: insufficientAccessRights (50), and includes the
+   passwordPolicyResponse in the controls field of the response message
+   with the error: changeAfterReset (2).
+
+8.2.3  Rights Check
+
+   Check to see whether the bound identity has sufficient rights to
+   update the password.  If the bound identity is a user changing its
+   own password, this MAY be done by checking the pwdAllowUserChange
+   attribute or using an access control mechanism.  The determination of
+   this is implementation specific.  If the user is not allowed to
+   update her password, the server sends a response message to the
+   client with the resultCode: insufficientAccessRights (50), and
+   includes the passwordPolicyResponse in the controls field of the
+   response message with the error: passwordModNotAllowed (3).
+
+8.2.4  Too Early to Update
+
+   If the check in Section 7.7 results in a true status The server sends
+   a response message to the client with the resultCode:
+   constraintViolation (19), and includes the passwordPolicyResponse in
+   the controls field of the response message with the error:
+   passwordTooYoung (7).
+
+8.2.5  Password Quality
+
+   Check the value of the pwdCheckQuality attribute.  If the value is
+   non-zero, the server:
+
+   o  Ensure that the password meets the quality criteria enforced by
+      the server.  This enforcement is implementation specific.
+      If the server is unable to check the quality (due to a hashed
+      password or otherwise), the value of pwdCheckQuality is evaluated.
+      If the value is 1, operation continues.  If the value is 2, the
+      server sends a response message to the client with the resultCode:
+      constraintViolation (19), and includes the passwordPolicyResponse
+      in the controls field of the response message with the error:
+      insufficientPasswordQuality (5).
+      If the server is able to check the password quality, and the check
+      fails, the server sends a response message to the client with the
+      resultCode: constraintViolation (19), and includes the
+      passwordPolicyResponse in the controls field of the response
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 27]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-          A. Add the current time as a value of the pwdFailureTime 
-             attribute. 
-           
-          B. If the pwdLockout attribute is TRUE, the server MUST do 
-             the following: 
-       
-                Count the number of values in the pwdFailureTime 
-                attribute that are younger than 
-                pwdFailureCountInterval.  
-    
-                If the number of these failures is greater or equal to 
-                the pwdMaxFailure attribute, the server MUST lock the 
-                account by setting the value of the 
-                pwdAccountLockedTime attribute to the current time. 
-                After locking the account, the server MUST send a 
-                compareResponse to the client with the resultCode: 
-                compareFalse (5), and MUST include the 
-                passwordPolicyResponse in the controls field of the 
-                compareResponse message with the error: accountLocked 
-                (1). 
-    
-                If the number of failures is less than the 
-                pwdMaxFailure attribute, operation MUST proceed. 
-    
-             If the pwdLockout attribute is FALSE, operation MUST 
-          continue. 
-           
-          C. Failure times that are old by more than 
-             pwdFailureCountInterval, MUST be purged from the 
-             pwdFailureTime attribute. 
-           
-          D. If no errors were returned, the server MUST send a 
-             compareResponse with the resultCode: compareTrue (6), and 
-             MUST include the passwordPolicyResponse with nothing in 
-             the SEQUENCE. 
-    
-7. Client Implementation by LDAP operation 
-   These sections illustrate possible scenarios for each LDAP operation 
-   and define the types of responses that identify those scenarios. 
-    
-   The scenarios in the following operations assume that the client 
-   attached a passwordPolicyRequest control to the request message of 
-   the operation, and thus MAY receive a passwordPolicyResponse control 
-   in the response message. In the event that the passwordPolicyRequest 
-   control was not sent, no passwordPolicyRequest control is returned. 
-   All other instructions remain the same. 
-    
-7.1. Bind Operation 
-
-Behera, et. al.        Expires August 15, 2004                 Page 27
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+      message with the error: insufficientPasswordQuality (5).
+   o  checks the value of the pwdMinLength attribute.  If the value is
+      non-zero, it ensures that the new password is of at least the
+      minimum length.
+      If the server is unable to check the length (due to a hashed
+      password or otherwise), the value of pwdCheckQuality is evaluated.
+      If the value is 1, operation continues.  If the value is 2, the
+      server sends a response message to the client with the resultCode:
+      constraintViolation (19), and includes the passwordPolicyResponse
+      in the controls field of the response message with the error:
+      passwordTooShort (6).
+      If the server is able to check the password length, and the check
+      fails, the server sends a response message to the client with the
+      resultCode: constraintViolation (19), and includes the
+      passwordPolicyResponse in the controls field of the response
+      message with the error: passwordTooShort (6).
+
+8.2.6  Invalid Reuse
+
+   If pwdInHistory is present and its value is non-zero, the server
+   checks whether this password exists in the entry's pwdHistory
+   attribute or in the current password attribute.  If the password does
+   exist in the pwdHistory attribute or in the current password
+   attribute, the server sends a response message to the client with the
+   resultCode: constraintViolation (19), and includes the
+   passwordPolicyResponse in the controls field of the response message
+   with the error: passwordInHistory (8).
+
+8.2.7  Policy State Updates
+
+   If the steps have completed without causing an error condition, the
+   server performs the following steps in order to update the necessary
+   password policy state attributes:
+
+   If the value of either pwdMaxAge or pwdMinAge is non-zero, the server
+   updates the pwdChangedTime attribute on the entry to the current
+   time.
+
+   If the value of pwdInHistory is non-zero, the server adds the
+   previous password (if one existed) to the pwdHistory attribute.  If
+   the number of attributes held in the pwdHistory attribute exceeds the
+   value of pwdInHistory, the server removes the oldest excess
+   passwords.
+
+   If the value the pwdMustChange is TRUE and the modification is
+   performed by a password administrator, then the pwdReset attribute is
+   set to TRUE.  Otherwise, the pwdReset is removed from the user's
+   entry if it exists.
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 28]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-    
-   For every bind response received, the client MUST check the 
-   resultCode of the bindResponse and MUST check for a 
-   passwordPolicyResponse to determine if any of the following 
-   conditions are true and MAY prompt the user accordingly. 
-    
-   1. The password failure limit has been reached and the account is 
-      locked.  The user needs to retry later or contact the directory 
-      administrator to reset the password. 
-    
-      resultCode:               unwillingToPerform (53) 
-      passwordPolicyResponse:           error: accountLocked (1) 
-    
-   2. The user is binding for the first time after the directory 
-      administrator set the password. In this scenario, the client 
-      SHOULD prompt the user to change his password immediately. 
-   
-      resultCode:               success (0) 
-      passwordPolicyResponse:           error: changeAfterReset (2) 
-    
-   3. The password has expired but there are remaining grace logins. 
-      The user needs to change it. 
-    
-      resultCode:               success (0) 
-      passwordPolicyResponse:           warning: graceLoginsRemaining 
-   
-   4. The password has expired and there are no more grace logins.  The 
-      user MUST contact the directory administrator in order to have 
-      its password reset. 
-    
-      resultCode:               invalidCredentials (49) 
-      passwordPolicyResponse:           error: passwordExpired (0) 
-   
-   5. The user's password will expire in n number of seconds. 
-    
-      resultCode:               success (0) 
-      passwordPolicyResponse:           warning: timeBeforeExpiration 
-    
-7.2. Modify Operations 
-    
-7.2.1. Modify Request 
-    
-   If the application or client encrypts the password prior to sending 
-   it in a password modification operation (whether done through 
-   modifyRequest or another password modification mechanism), it SHOULD 
-   check the values of the pwdMinLength, and pwdCheckQuality attributes 
-   and SHOULD enforce these policies. 
-    
-7.2.2. Modify Response 
-
-Behera, et. al.        Expires August 15, 2004                 Page 28
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+   The pwdFailureTime, pwdGraceUseTime and pwdExpirationWarned
+   attributes is removed from the user's entry if they exist.
+
+8.3  Other Operations
+
+   For operations other than bind, password update, unbind, abandon or
+   StartTLS, if the decision in Section 7.2 returns true, the server
+   sends a response message to the client with the resultCode:
+   insufficientAccessRights (50), and includes the
+   passwordPolicyResponse in the controls field of the response message
+   with the error: changeAfterReset (2).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 29]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-    
-   If the modifyRequest operation was used to change the password, or 
-   if another mechanism is used --such as an extendedRequest-- the 
-   modifyResponse or other appropriate response MAY contain information 
-   pertinent to password policy. The client MUST check the resultCode 
-   of the response and MUST check for a passwordPolicyResponse to 
-   determine if any of the following conditions are true and optionally 
-   notify the user of the condition. 
-    
-   1. The user attempted to change her password without specifying the 
-      old password but the password policy requires this. 
-   
-      resultCode:               unwillingToPerform (53) 
-      passwordPolicyResponse:           error: mustSupplyOldPassword (4) 
-   
-   2. The user MUST change her password before submitting any other 
-      LDAP requests. 
-   
-      resultCode:               unwillingToPerform (53) 
-      passwordPolicyResponse:           error: changeAfterReset (2) 
-   
-   3. The user doesn't have sufficient rights to change his password. 
-   
-      resultCode:               unwillingToPerform (53) 
-      passwordPolicyResponse:           error: passwordModNotAllowed (3) 
-   
-   4. It is too soon after the last password modification to change the 
-      password. 
-   
-      resultCode:               constraintViolation (19) 
-      passwordPolicyResponse:           error: passwordTooYoung (7) 
-   
-   5. The password failed quality checking. 
-   
-      resultCode:               constraintViolation (19) 
-      passwordPolicyResponse:           error: 
-      insufficientPasswordQuality (5) 
-    
-   6. The length of the password is too short. 
-   
-      resultCode:               constraintViolation (19) 
-      passwordPolicyResponse:           error: passwordTooShort (6) 
-   
-   7. The password has already been used; the user MUST choose a 
-      different one. 
-   
-      resultCode:               constraintViolation (19) 
-      passwordPolicyResponse:           error: passwordInHistory (8) 
-    
-
-Behera, et. al.        Expires August 15, 2004                 Page 29
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+9.  Client Policy Enforcement Points
+
+   These sections illustrate possible scenarios for each LDAP operation
+   and define the types of responses that identify those scenarios.
+
+   The scenarios in the following operations assume that the client
+   attached a passwordPolicyRequest control to the request message of
+   the operation, and thus may receive a passwordPolicyResponse control
+   in the response message.  In the event that the passwordPolicyRequest
+   control was not sent, no passwordPolicyResponse control is returned.
+   All other instructions remain the same.
+
+9.1  Bind Operation
+
+   For every bind response received, the client checks the resultCode of
+   the bindResponse and checks for a passwordPolicyResponse control to
+   determine if any of the following conditions are true and MAY prompt
+   the user accordingly.
+
+   o  bindResponse.resultCode = insufficientAccessRights (50),
+      passwordPolicyResponse.error = accountLocked (1): The password
+      failure limit has been reached and the account is locked.  The
+      user needs to retry later or contact the password administrator to
+      reset the password.
+   o  bindResponse.resultCode = success (0),
+      passwordPolicyResponse.error = changeAfterReset (2): The user is
+      binding for the first time after the password administrator set
+      the password.  In this scenario, the client SHOULD prompt the user
+      to change his password immediately.
+   o  bindResponse.resultCode = success (0),
+      passwordPolicyResponse.warning = graceAuthNsRemaining: The
+      password has expired but there are remaining grace
+      authentications.  The user needs to change it.
+   o  bindResponse.resultCode = invalidCredentials (49),
+      passwordPolicyResponse.error = passwordExpired (0): The password
+      has expired and there are no more grace authentications.  The user
+      contacts the password administrator in order to have its password
+      reset.
+   o  bindResponse.resultCode = success (0),
+      passwordPolicyResponse.warning = timeBeforeExpiration: The user's
+      password will expire in n number of seconds.
+
+9.2  Modify Operations
+
+9.2.1  Modify Request
+
+   If the application or client encrypts the password prior to sending
+   it in a password modification operation (whether done through
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 30]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-   
-7.3. Add Operation 
-    
-   If a password is specified in an addRequest, the client MUST check 
-   the resultCode of the addResponse and MUST check for a 
-   passwordPolicyResponse to determine if any of the following 
-   conditions are true and may prompt the user accordingly. 
-   
-   1. The user doesn't have sufficient rights to add this password. 
-   
-      resultCode:               unwillingToPerform (53) 
-      passwordPolicyResponse:           error: passwordModNotAllowed (3) 
-   
-   2. The password failed quality checking. 
-   
-      resultCode:               constraintViolation (19) 
-      passwordPolicyResponse:           error: 
-      insufficientPasswordQuality (5) 
-    
-   3. The length of the password is too short. 
-   
-      resultCode:               constraintViolation (19) 
-      passwordPolicyResponse:           error: passwordTooShort (6) 
-   
-   
-7.4. Compare Operation 
-    
-   When a compare operation is used to compare a password, the client 
-   MUST check the resultCode of the compareResponse and MUST check for 
-   a passwordPolicyResponse to determine if any of the following 
-   conditions are true and MAY prompt the user accordingly. These 
-   conditions assume that the result of the comparison was true. 
-    
-   1. The password failure limit has been reached and the account is 
-      locked.  The user needs to retry later or contact the directory 
-      administrator to reset the password. 
-    
-      resultCode:               compareFalse (5) 
-      passwordPolicyResponse:           error: accountLocked (1) 
-    
-   2. The password has expired but there are remaining grace logins. 
-      The user needs to change it. 
-    
-      resultCode:               compareTrue (6) 
-      passwordPolicyResponse:           warning: graceLoginsRemaining  
-   
-   3. The password has expired and there are no more grace logins.  The 
-      user MUST contact the directory administrator to reset the 
-      password. 
-
-Behera, et. al.        Expires August 15, 2004                 Page 30
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+   modifyRequest or another password modification mechanism), it SHOULD
+   check the values of the pwdMinLength, and pwdCheckQuality attributes
+   and SHOULD enforce these policies.
+
+9.2.2  Modify Response
+
+   If the modifyRequest operation was used to change the password, or if
+   another mechanism is used --such as an extendedRequest-- the
+   modifyResponse or other appropriate response MAY contain information
+   pertinent to password policy.  The client checks the resultCode of
+   the response and checks for a passwordPolicyResponse control to
+   determine if any of the following conditions are true and optionally
+   notify the user of the condition.
+
+   o  <pwdModResponse>.resultCode = insufficientAccessRights (50),
+      passwordPolicyResponse.error = mustSupplyOldPassword (4): The user
+      attempted to change her password without specifying the old
+      password but the password policy requires this.
+   o  <pwdModResponse>.resultCode = insufficientAccessRights (50),
+      passwordPolicyResponse.error = changeAfterReset (2): The user must
+      change her password before submitting any other LDAP requests.
+   o  <pwdModResponse>.resultCode = insufficientAccessRights (50),
+      passwordPolicyResponse.error = passwordModNotAllowed (3): The user
+      doesn't have sufficient rights to change his password.
+   o  <pwdModResponse>.resultCode = constraintViolation (19),
+      passwordPolicyResponse.error = passwordTooYoung (7): It is too
+      soon after the last password modification to change the password.
+   o  <pwdModResponse>.resultCode = constraintViolation (19),
+      passwordPolicyResponse.error = insufficientPasswordQuality (5):
+      The password failed quality checking.
+   o  <pwdModResponse>.resultCode = constraintViolation (19),
+      passwordPolicyResponse.error = passwordTooShort (6): The length of
+      the password is too short.
+   o  <pwdModResponse>.resultCode = constraintViolation (19),
+      passwordPolicyResponse.error = passwordInHistory (8): The password
+      has already been used; the user must choose a different one.
+
+9.3  Add Operation
+
+   If a password is specified in an addRequest, the client checks the
+   resultCode of the addResponse and checks for a passwordPolicyResponse
+   control to determine if any of the following conditions are true and
+   may prompt the user accordingly.
+
+   o  addResponse.resultCode = insufficientAccessRights (50),
+      passwordPolicyResponse.error = passwordModNotAllowed (3): The user
+      doesn't have sufficient rights to add this password.
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 31]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-    
-      resultCode:               compareFalse (5) 
-      passwordPolicyResponse:           error: passwordExpired (0) 
-    
-   4. The user's password will expire in n number of seconds. 
-    
-      resultCode:               compareTrue (6) 
-      passwordPolicyResponse:           warning: timeBeforeExpiration  
-    
-7.5. Other Operations 
-    
-   For operations other than bind, unbind, abandon, search or StartTLS, 
-   the client MUST check the following result code and control to 
-   determine if the user needs to change the password immediately. 
-    
-   1. The user needs to change password. The user SHOULD be prompted to 
-      change the password immediately. 
-      resultCode:               unwillingToPerform (53) 
-      passwordPolicyResponse:           error: changeAfterReset (2) 
-8. Administration of a Password Policy 
-    
-    
-   A password policy MUST be defined for a particular subtree of the 
-   DIT by adding to an LDAP subentry whose immediate superior is the 
-   root of the subtree, the pwdPolicy auxiliary object class. 
-   The scope of the password policy is defined by the 
-   SubtreeSpecification attribute of the LDAP subentry as specified in 
-   RFC 3672 [RFC-3672]. 
-    
-   It is possible to define password policies for different password 
-   attributes within the same pwdPolicy entry, by specifying multiple 
-   values of the pwdAttribute. But password policies could also be in 
-   separate sub entries as long as they are contained under the same 
-   LDAP subentry. 
-    
-   Modifying the password policy MUST not result in any change in 
-   users' entries to which the policy applies. 
-    
-   It SHOULD be possible to overwrite the password policy for one user 
-   by defining a new policy in a subentry of the user entry. 
-    
-   Each object that is controlled by password policy SHALL advertise 
-   the subentry that is being used to control its policy in its 
-   pwdPolicySubentry attribute. Clients wishing to examine or manage 
-   password policy for an object, MUST interrogate the 
-
-
-Behera, et. al.        Expires August 15, 2004                 Page 31
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+   o  addResponse.resultCode = constraintViolation (19),
+      passwordPolicyResponse.error = insufficientPasswordQuality (5):
+      The password failed quality checking.
+   o  addResponse.resultCode = constraintViolation (19),
+      passwordPolicyResponse.error = passwordTooShort (6): The length of
+      the password is too short.
+
+9.4  Compare Operation
+
+   When a compare operation is used to compare a password, the client
+   checks the resultCode of the compareResponse and checks for a
+   passwordPolicyResponse to determine if any of the following
+   conditions are true and MAY prompt the user accordingly.  These
+   conditions assume that the result of the comparison was true.
+
+   o  compareResponse.resultCode = compareFalse (5),
+      passwordPolicyResponse.error = accountLocked (1): The password
+      failure limit has been reached and the account is locked.  The
+      user needs to retry later or contact the password administrator to
+      reset the password.
+   o  compareResponse.resultCode = compareTrue (6),
+      passwordPolicyResponse.warning = graceAuthNsRemaining: The
+      password has expired but there are remaining grace
+      authentications.  The user needs to change it.
+   o  compareResponse.resultCode = compareFalse (5),
+      passwordPolicyResponse.error = passwordExpired (0): The password
+      has expired and there are no more grace authentications.  The user
+      must contact the password administrator to reset the password.
+   o  compareResponse.resultCode = compareTrue (6),
+      passwordPolicyResponse.warning = timeBeforeExpiration: The user's
+      password will expire in n number of seconds.
+
+9.5  Other Operations
+
+   For operations other than bind, unbind, abandon or StartTLS, the
+   client checks the following result code and control to determine if
+   the user needs to change the password immediately.
+
+   o  <Response>.resultCode = insufficientAccessRights (50),
+      passwordPolicyResponse.error = : changeAfterReset (2)
+
+
+
+
+
+
+
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 32]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-   pwdPolicySubentry for that object in order to arrive at the proper 
-   pwdPolicy subentry. 
-    
-9. Password Policy and Replication 
-    
-   The pwdPolicy object defines the password policy for a portion of 
-   the DIT and MUST be replicated on all the replicas of this subtree, 
-   as any subentry would be, in order to have a consistent policy among 
-   all replicated servers. 
-    
-   The elements of the password policy that are related to the users 
-   are stored in the entry themselves as operational attributes. 
-   As these attributes are subject to modifications even on a read-only 
-   replica, replicating them must be carefully considered. 
-    
-   The pwdChangedTime attribute MUST be replicated on all replicas, to 
-   allow expiration of the password. 
-    
-   The pwdReset attribute MUST be replicated on all replicas, to deny 
-   access to operations other than bind and modify password. 
-     
-   The pwdHistory attribute MUST be replicated to writable replicas. It 
-   doesn't have to be replicated to a read-only replica, since the 
-   password will never be directly modified on this server. 
-    
-   The pwdAccountLockedTime, pwdExpirationWarned, pwdFailureTime and 
-   pwdGraceUseTime attributes MUST be replicated to writable replicas, 
-   making the password policy global for all servers. 
-   When the user entry is replicated to a read-only replica, these 
-   attributes SHOULD NOT be replicated. This means that the number of 
-   failures, of grace logins and the locking will take place on each 
-   replicated server. For example, the effective number of failed 
-   attempts on a user password will be N x M (where N is the number of 
-   servers and M the value of pwdMaxFailure attribute). 
-   Replicating these attributes to a read-only replica MAY reduce the 
-   number of tries globally but MAY also introduce some inconstancies 
-   in the way the password policy is applied. 
-    
-    
-10. Security Considerations 
-    
-   This document defines a set of rules to implement in an LDAP server, 
-   in order to mitigate some of the security risks associated with the 
-   use of passwords and to make it difficult for password cracking 
-   programs to break into directories.  
-    
-   Authentication with a password MUST follow the recommendations made 
-   in RFC 2829 [RFC-2829].  
-    
-
-Behera, et. al.        Expires August 15, 2004                 Page 32
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+10.  Administration of the Password Policy
+
+   {TODO: Need to define an administrativeRole (need OID).  Need to
+   describe whether pwdPolicy admin areas can overlap}
+
+   A password policy is defined for a particular subtree of the DIT by
+   adding to an LDAP subentry whose immediate superior is the root of
+   the subtree, the pwdPolicy auxiliary object class.  The scope of the
+   password policy is defined by the SubtreeSpecification attribute of
+   the LDAP subentry as specified in [RFC3672].
+
+   It is possible to define password policies for different password
+   attributes within the same pwdPolicy entry, by specifying multiple
+   values of the pwdAttribute.  But password policies could also be in
+   separate sub entries as long as they are contained under the same
+   LDAP subentry.
+
+   Modifying the password policy MUST NOT result in any change in users'
+   entries to which the policy applies.
+
+   It SHOULD be possible to overwrite the password policy for one user
+   by defining a new policy in a subentry of the user entry.
+
+   Each object that is controlled by password policy advertises the
+   subentry that is being used to control its policy in its
+   pwdPolicySubentry attribute.  Clients wishing to examine or manage
+   password policy for an object may interrogate the pwdPolicySubentry
+   for that object in order to arrive at the proper pwdPolicy subentry.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 33]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-   Modifications of passwords SHOULD only occur when the connection is 
-   protected with confidentiality and secure authentication. 
-     
-   Access controls SHOULD be used to restrict access to the password 
-   policy attributes. Especially all the attributes defined to maintain 
-   the Password Policy state information SHOULD not be modifiable by 
-   anyone but the Administrator of the directory server. 
-    
-   As it is possible to define a password policy for one specific user 
-   by adding a subentry immediately under the user's entry, Access 
-   Controls SHOULD be used to restrict the use of the pwdPolicy object 
-   class or the LDAP subentry object class. 
-    
-   When a password policy is put in place, the LDAP directory is 
-   subject to a denial of service attack. A malicious user could 
-   deliberately lock out one specific user's account (or all of them) 
-   by sending bind requests with wrong passwords. There is no way to 
-   protect against this kind of attack. The LDAP directory server 
-   SHOULD log as much information as it can (such as client IP address) 
-   whenever an account is locked, in order to be able to identify the 
-   origin of the attack. Denying anonymous access to the LDAP directory 
-   is also a way to restrict this kind of attacks. 
-    
-    
-11. Acknowledgement 
-   This document is based in part on prior work done by Valerie Chu 
-   from Netscape Communications Corp, published as draft-vchu-ldap-pwd-
-   policy-00.txt (December 1998). 
-    
-12. Normative References 
-    
-   [RFC-2119] S. Bradner, "Key Words for use in RFCs to Indicate 
-   Requirement Levels", RFC 2119, March 1997. 
-    
-   [RFC-2195] J. Klensin, R. Catoe, P. Krumviede, "IMAP/POP AUTHorize 
-   Extension for Simple Challenge/Response", RFC 2195, September 1997. 
-    
-   [RFC-2222] J. Myers, "Simple Authentication and Security Layer 
-   (SASL)", RFC 2222, October 1997. 
-    
-   [RFC-2251] Wahl, M., Howes, T., Kille, S., "Lightweight Directory 
-   Access Protocol (v3)", RFC 2251, August 1997. 
-    
-   [RFC-2252] Wahl, M., Coulbeck, A., Howes, T., Kille, S., 
-   "Lightweight Directory Access Protocol (v3): Attribute Syntax 
-   Definitions", RFC 2252, December 1997. 
-    
-
-Behera, et. al.        Expires August 15, 2004                 Page 33
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+11.  Password Policy and Replication
+
+   The pwdPolicy object defines the password policy for a portion of the
+   DIT and MUST be replicated on all the replicas of this subtree, as
+   any subentry would be, in order to have a consistent policy among all
+   replicated servers.
+
+   The elements of the password policy that are related to the users are
+   stored in the entry themselves as operational attributes.  As these
+   attributes are subject to modifications even on a read-only replica,
+   replicating them must be carefully considered.
+
+   The pwdChangedTime attribute MUST be replicated on all replicas, to
+   allow expiration of the password.
+
+   The pwdReset attribute MUST be replicated on all replicas, to deny
+   access to operations other than bind and modify password.
+
+   The pwdHistory attribute MUST be replicated to writable replicas.  It
+   doesn't have to be replicated to a read-only replica, since the
+   password will never be directly modified on this server.
+
+   The pwdAccountLockedTime, pwdExpirationWarned, pwdFailureTime and
+   pwdGraceUseTime attributes MUST be replicated to writable replicas,
+   making the password policy global for all servers.  When the user
+   entry is replicated to a read-only replica, these attributes SHOULD
+   NOT be replicated.  This means that the number of failures, of grace
+   authentications and the locking will take place on each replicated
+   server.  For example, the effective number of failed attempts on a
+   user password will be N x M (where N is the number of servers and M
+   the value of pwdMaxFailure attribute).  Replicating these attributes
+   to a read-only replica MAY reduce the number of tries globally but
+   MAY also introduce some inconstancies in the way the password policy
+   is applied.
+
+   Servers participating in a loosely consistent multi-master
+   replication agreement SHOULD employ a mechanism which ensures
+   uniqueness of values when populating the attributes pwdFailureTime
+   and pwdGraceUseTime.  The method of achieving this is a local matter
+   and may consist of using a single authoritative source for the
+   generation of unique time values, or may consist of the use of the
+   fractional seconds part to hold a replica identifier.
+
+
+
+
+
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 34]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-   [RFC-Digest] Paul J. Leach, Chris Newman, "Using Digest 
-   Authentication as a SASL Mechanism", RFC 2831, May 2000. 
-    
-   [RFC-3062] K. Zeilenga, "LDAP Password Modify Extended Operation", 
-   RFC 3062, February 2001. 
-    
-   [RFC-3672] K. Zeilenga, S. Legg, "Subentries in the Lightweight 
-   Directory Access Protocol (LDAP)", RFC 3672, December. 
-    
-13. Authors' Addresses 
-    
-   Prasanta Behera 
-   18366 Chelmsford Dr. 
-   Cupertino, CA 95014 
-   USA 
-   prasantabehera@yahoo.com 
-    
-   Ludovic Poitou 
-   Sun Microsystems Inc. 
-   180, Avenue de l'Europe 
-   Zirst de Montbonnot 
-   38334 Saint Ismier cedex 
-   France 
-   +33 476 188 212 
-   ludovic.poitou@sun.com 
-    
-   Jim Sermersheim 
-   Novell, Inc. 
-   1800 South Novell Place 
-   Provo, Utah 84606, USA 
-   +1 801 861-3088 
-   jimse@novell.com 
-    
-14. Copyright Notice 
-    
-   Copyright (C) The Internet Society (2004). All Rights  
-   Reserved.   
-     
-   This document and translations of it may be copied and furnished to 
-   others, and derivative works that comment on or otherwise explain it 
-   or assist in its implementation may be prepared, copied, published 
-   and distributed, in whole or in part, without restriction of any 
-   kind, provided that the above copyright notice and this paragraph 
-   are included on all such copies and derivative works. However, this 
-   document itself may not be modified in any way, such as by removing 
-   the copyright notice or references to the Internet Society or other 
-   Internet organizations, except as needed for the purpose of 
-   developing Internet standards in which case the procedures for 
-
-Behera, et. al.        Expires August 15, 2004                 Page 34
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+12.  Security Considerations
+
+   This document defines a set of rules to implement in an LDAP server,
+   in order to mitigate some of the security risks associated with the
+   use of passwords and to make it difficult for password cracking
+   programs to break into directories.
+
+   Authentication with a password MUST follow the recommendations made
+   in [RFC2829].
+
+   Modifications of passwords SHOULD only occur when the connection is
+   protected with confidentiality and secure authentication.
+
+   Access controls SHOULD be used to restrict access to the password
+   policy attributes.  The attributes defined to maintain the password
+   policy state information SHOULD only be modifiable by the password
+   administrator or higher authority.  The pwdHistory attribute MUST be
+   subject to the same level of access control as the attrbute holding
+   the password.
+
+   As it is possible to define a password policy for one specific user
+   by adding a subentry immediately under the user's entry, Access
+   Controls SHOULD be used to restrict the use of the pwdPolicy object
+   class or the LDAP subentry object class.
+
+   When the intruder detection password policy is enforced, the LDAP
+   directory is subject to a denial of service attack.  A malicious user
+   could deliberately lock out one specific user's account (or all of
+   them) by sending bind requests with wrong passwords.  There is no way
+   to protect against this kind of attack.  The LDAP directory server
+   SHOULD log as much information as it can (such as client IP address)
+   whenever an account is locked, in order to be able to identify the
+   origin of the attack.  Denying anonymous access to the LDAP directory
+   is also a way to restrict this kind of attack.
+
+   Returning certain status codes (such as passwordPolicyResponse.error
+   = accountLocked) allows a denial of service attacker to know that it
+   has successfully denied service to an account.  Servers SHOULD
+   implement additional checks which return the same status when it is
+   sensed that some number of failed authentication requests has occured
+   on a single connection, or from a client address.  Server
+   implementors are encouraged to invent other checks similar to this in
+   order to thwart this type of DoS attack.
+
+
+
+
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 35]
 \f
-INTERNET DRAFT           LDAP Password Policy         15 February 2004 
-   copyrights defined in the Internet Standards process must be 
-   followed, or as required to translate it into languages other than 
-   English.  
-     
-   The limited permissions granted above are perpetual and will not be 
-   revoked by the Internet Society or its successors or assigns.  
-     
-   This document and the information contained herein is provided on an 
-   "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING 
-   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING 
-   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION 
-   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF  
-   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE."  
-    
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+13.  Acknowledgement
+
+   This document is based in part on prior work done by Valerie Chu from
+   Netscape Communications Corp, published as
+   draft-vchu-ldap-pwd-policy-00.txt (December 1998).  Prasanta Behera
+   participated in early revisions of this document.
+
+14  Normative References
+
+   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
+              Requirement Levels", BCP 14, RFC 2119, March 1997.
 
+   [RFC2195]  Klensin, J., Catoe, R. and P. Krumviede, "IMAP/POP
+              AUTHorize Extension for Simple Challenge/Response", RFC
+              2195, September 1997.
 
+   [RFC2222]  Myers, J., "Simple Authentication and Security Layer
+              (SASL)", RFC 2222, October 1997.
 
+   [RFC2251]  Wahl, M., Howes, T. and S. Kille, "Lightweight Directory
+              Access Protocol (v3)", RFC 2251, December 1997.
 
+   [RFC2252]  Wahl, M., Coulbeck, A., Howes, T. and S. Kille,
+              "Lightweight Directory Access Protocol (v3): Attribute
+              Syntax Definitions", RFC 2252, December 1997.
 
+   [RFC2829]  Wahl, M., Alvestrand, H., Hodges, J. and R. Morgan,
+              "Authentication Methods for LDAP", RFC 2829, May 2000.
 
+   [RFC2831]  Leach, P. and C. Newman, "Using Digest Authentication as a
+              SASL Mechanism", RFC 2831, May 2000.
 
+   [RFC3062]  Zeilenga, K., "LDAP Password Modify Extended Operation",
+              RFC 3062, February 2001.
 
+   [RFC3383]  Zeilenga, K., "Internet Assigned Numbers Authority (IANA)
+              Considerations for the Lightweight Directory Access
+              Protocol (LDAP)", BCP 64, RFC 3383, September 2002.
 
+   [RFC3672]  Zeilenga, K., "Subentries in the Lightweight Directory
+              Access Protocol (LDAP)", RFC 3672, December 2003.
 
+   [X680]     International Telecommunications Union, "Abstract Syntax
+              Notation One (ASN.1): Specification of basic notation",
+              ITU-T Recommendation X.680, July 2002.
 
+   [X690]     International Telecommunications Union, "Information
+              Technology - ASN.1 encoding rules: Specification of Basic
 
 
 
+Sermersheim & Poitou     Expires April 24, 2005                [Page 36]
+\f
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+              Encoding Rules (BER),  Canonical Encoding Rules (CER) and
+              Distinguished Encoding Rules (DER)", ITU-T Recommendation
+              X.690, July 2002.
+
+
+Authors' Addresses
+
+   Jim Sermersheim
+   Novell, Inc
+   1800 South Novell Place
+   Provo, Utah  84606
+   USA
+
+   Phone: +1 801 861-3088
+   EMail: jimse@novell.com
+
 
+   Ludovic Poitou
+   Sun Microsystems
+   180, Avenue de l'Europe
+   Zirst de Montbonnot, 38334 Saint Ismier cedex
+   France
 
+   Phone: +33 476 188 212
+   EMail: ludovic.poitou@sun.com
 
 
 
@@ -1955,7 +2061,67 @@ INTERNET DRAFT           LDAP Password Policy         15 February 2004
 
 
 
-Behera, et. al.        Expires August 15, 2004                 Page 35
+
+
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 37]
 \f
+Internet-Draft    Password Policy for LDAP Directories      October 2004
+
+
+Intellectual Property Statement
 
+   The IETF takes no position regarding the validity or scope of any
+   Intellectual Property Rights or other rights that might be claimed to
+   pertain to the implementation or use of the technology described in
+   this document or the extent to which any license under such rights
+   might or might not be available; nor does it represent that it has
+   made any independent effort to identify any such rights.  Information
+   on the procedures with respect to rights in RFC documents can be
+   found in BCP 78 and BCP 79.
+
+   Copies of IPR disclosures made to the IETF Secretariat and any
+   assurances of licenses to be made available, or the result of an
+   attempt made to obtain a general license or permission for the use of
+   such proprietary rights by implementers or users of this
+   specification can be obtained from the IETF on-line IPR repository at
+   http://www.ietf.org/ipr.
+
+   The IETF invites any interested party to bring to its attention any
+   copyrights, patents or patent applications, or other proprietary
+   rights that may cover technology that may be required to implement
+   this standard.  Please address the information to the IETF at
+   ietf-ipr@ietf.org.
+
+
+Disclaimer of Validity
+
+   This document and the information contained herein are provided on an
+   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
+   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
+   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
+   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
+   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
+   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+
+Copyright Statement
+
+   Copyright (C) The Internet Society (2004).  This document is subject
+   to the rights, licenses and restrictions contained in BCP 78, and
+   except as set forth therein, the authors retain all their rights.
+
+
+Acknowledgment
+
+   Funding for the RFC Editor function is currently provided by the
+   Internet Society.
+
+
+
+
+Sermersheim & Poitou     Expires April 24, 2005                [Page 38]
+\f