--- /dev/null
+
+
+
+
+
+
+LDAP-EXT Working Group Valerie Chu
+INTERNET-DRAFT Netscape Communications Corp.
+Expires in six months
+Intended Category: Informational
+ December 1998
+
+
+ Password Policy for LDAP Directories
+ <draft-vchu-ldap-pwd-policy-00.txt>
+
+
+
+1. Status of this Memo
+
+This document is an Internet-Draft. Internet-Drafts are working docu-
+ments of the Internet Engineering Task Force (IETF), its areas, and its
+working groups. Note that other groups may also distribute working docu-
+ments 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.''
+
+To view the entire list of current Internet-Drafts, please check the
+"1id-abstracts.txt" listing contained in the Internet-Drafts Shadow
+Directories on ftp.is.co.za (Africa), ftp.nordu.net (Northern Europe),
+ftp.nic.it (Southern Europe), munnari.oz.au (Pacific Rim), ftp.ietf.org
+(US East Coast), or ftp.isi.edu (US West Coast).
+
+The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+document are to be interpreted as described in RFC 2119.
+
+2. Abstract
+
+This document describes the implementation of password policy in
+Netscape LDAP directories, and introduces two new object classes,
+twenty-three new attribute types, and two new controls in support of
+password policy.
+
+Password policy is a set of rules that control how passwords are used 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 the users change their pass-
+words periodically, the new password meets construction requirements,
+the re-use of the old password is restricted, and lock out the users
+
+
+
+Chu [Page 1]
+
+
+
+
+
+Expires June 1999 INTERNET DRAFT
+
+
+after a certain number of bad password attempts.
+
+3. Overview
+
+LDAP-based directory services currently are accepted by many organiza-
+tions as the access protocol for directories. The ability to ensure the
+secure read, update access to directory information throughout the net-
+work is essential to the successful deployment. There are several secu-
+rity mechanisms which are used in Netscape LDAP implementation to pro-
+tect the directory data. For example, the access control is used to
+prevent unauthorized access to information stored in directories; SASL
+is used to negotiate for integrity and privacy services.[RFC-2251] The
+most fundamental security mechanism in Netscape Directory is the simple
+authentication using password. In many systems, in order to improve the
+security of the system, the simple password-based authentication often
+is used in conjunction with a set of password restrictions to control
+how passwords are used in the system. For example, the passwd program
+in UNIX systems, or the user account policy in WindowsNT, has a set of
+rules that users need to follow to use password authentication. At the
+moment, LDAP does not define a password policy model, but it is needed
+to achieve greater security protection and it is critical to the suc-
+cessful deployment of LDAP directories.
+
+Specifically, the password policy defines:
+
+
+ - The maximum length of time that a given password is valid.
+
+ - The minimum length of time required between password changes.
+
+ - The maximum length of time before a user's password is due to
+ expire that the user will be sent a warning message.
+
+ - Whether users can reuse passwords.
+
+ - The minimum number of characters a password must contain.
+
+ - Whether the password syntax is checked before a new password is
+ saved.
+
+ - Whether users are allowed to change their own passwords.
+
+ - Whether passwords must be changed after they are reset by the
+ administrator.
+
+ - Whether users will be locked out of the directory after a given
+ number of failed bind attempts.
+
+
+
+
+Chu [Page 2]
+
+
+
+
+
+Expires June 1999 INTERNET DRAFT
+
+
+ - How long users will be locked out of the directory after a given
+ number of failed bind attempts.
+
+ - The length of time before the password failure counter which
+ keeps track of the number of failed password attempts is reset.
+
+The password policy defined in this document is applied to the LDAP sim-
+ple authentication method [RFC-2251] and userPassword attribute values
+only.
+
+In this document, the term "user" represents any application which is an
+LDAP client using the directory to retrieve or store information.
+
+Directory administrators are not forced to comply with any of password
+policies.
+
+4. New Attribute Types and Object Classes
+
+4.1. The passwordPolicy Object Class
+
+The passwordPolicy object class holds the password policy settings for a
+set of user accounts. In the Netscape Directory implementation, they
+are located in the "cn=config" entry.
+
+The description of passwordPolicy object class:
+
+ ( 2.16.840.1.113730.3.2.13
+ NAME 'passwordPolicy'
+ AUXILIARY
+ SUP top
+ DESC 'Password Policy object class to hold password policy information'
+ MAY (
+ passwordMaxAge $ passwordExp $ passwordMinLength $
+ passwordKeepHistory $ passwordInHistory $ passwordChange $
+ passwordCheckSyntax $ passwordWarning $ passwordLockout $
+ passwordMaxFailure $ passwordUnlock $ passwordLockoutDuration $
+ passwordMustChange $ passwordStorageScheme $ passwordMinAge $
+ passwordResetFailureCount
+ )
+ )
+
+4.2. The new attribute types used in the passwordPolicy Object Class:
+
+ ( 2.16.840.1.113730.3.1.97
+ NAME 'passwordMaxAge'
+ DESC 'the number of seconds after which user passwords will expire'
+ EQUALITY 'caseIgnoreMatch'
+ SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+
+
+
+Chu [Page 3]
+
+
+
+
+
+Expires June 1999 INTERNET DRAFT
+
+
+ )
+ ( 2.16.840.1.113730.3.1.98
+ NAME 'passwordExp'
+ DESC 'a flag which indicates whether passwords will expire after a
+ given number of seconds'
+ EQUALITY 'caseIgnoreMatch'
+ SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+ )
+ ( 2.16.840.1.113730.3.1.99
+ NAME 'passwordMinLength'
+ DESC 'the minimum number of characters that must be used in a password'
+ EQUALITY 'caseIgnoreMatch'
+ SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+ )
+ ( 2.16.840.1.113730.3.1.100
+ NAME 'passwordKeepHistory'
+ DESC 'a flag which indicates whether passwords can be reused"
+ EQUALITY 'caseIgnoreMatch'
+ SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+ )
+ ( 2.16.840.1.113730.3.1.101
+ NAME 'passwordInHistory'
+ DESC 'the number of passwords the directory server stores in history'
+ EQUALITY 'caseIgnoreMatch'
+ SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+ )
+ ( 2.16.840.1.113730.3.1.102
+ NAME 'passwordChange'
+ DESC 'a flag which indicates whether users can change their passwords'
+ EQUALITY 'caseIgnoreMatch'
+ SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+ )
+ ( 2.16.840.1.113730.3.1.103
+ NAME 'passwordCheckSyntax'
+ DESC 'a flag which indicates whether the password syntax will be checked
+ before the password is saved'
+ EQUALITY 'caseIgnoreMatch'
+ SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+ )
+ ( 2.16.840.1.113730.3.1.104
+ NAME 'passwordWarning'
+ DESC 'the number of seconds before a user's password is due to expire that
+ the user will be sent a warning message'
+ EQUALITY 'caseIgnoreMatch'
+ SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+ )
+ ( 2.16.840.1.113730.3.1.105
+ NAME 'passwordLockout'
+
+
+
+Chu [Page 4]
+
+
+
+
+
+Expires June 1999 INTERNET DRAFT
+
+
+ DESC 'a flag which indicates whether users will be locked out of the
+ directory after a given number of consecutive failed bind attempts'
+ EQUALITY 'caseIgnoreMatch'
+ SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+ )
+ ( 2.16.840.1.113730.3.1.106
+ NAME 'passwordMaxFailure'
+ DESC 'the number of consecutive failed bind attempts after which a user
+ will be locked out of the directory'
+ EQUALITY 'caseIgnoreMatch'
+ SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+ )
+ ( 2.16.840.1.113730.3.1.108
+ NAME 'passwordUnlock'
+ DESC 'a flag which indicates whether a user will be locked out of the
+ directory for a given number of seconds or until the administrator
+ resets the password after an account lockout'
+ EQUALITY 'caseIgnoreMatch'
+ SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+ )
+ ( 2.16.840.1.113730.3.1.109
+ NAME 'passwordLockoutDuration'
+ DESC 'the number of seconds that users will be locked out of the directory
+ after an account lockout
+ EQUALITY 'caseIgnoreMatch'
+ SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+ )
+ ( 2.16.840.1.113730.3.1.220
+ NAME 'passwordMustChange'
+ DESC 'a flag which indicates whether users must change their passwords when
+ they first bind to the directory server'
+ EQUALITY 'caseIgnoreMatch'
+ SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+ )
+ ( 2.16.840.1.113730.3.1.221
+ NAME 'passwordStorageScheme'
+ DESC 'the type of hash algorithm used to store directory server passwords'
+ EQUALITY 'caseIgnoreMatch'
+ SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+ )
+ The description of password storage scheme can be found in [RFC-2307].
+ ( 2.16.840.1.113730.3.1.222
+ NAME 'passwordMinAge'
+ DESC 'the number of seconds that must elapse before a user can change their
+ password again'
+ EQUALITY 'caseIgnoreMatch'
+ SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+ )
+
+
+
+Chu [Page 5]
+
+
+
+
+
+Expires June 1999 INTERNET DRAFT
+
+
+ ( 2.16.840.1.113730.3.1.223
+ NAME 'passwordResetFailureCount'
+ DESC 'the number of seconds after which the password failure counter will
+ be reset'
+ EQUALITY 'caseIgnoreMatch'
+ SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+ )
+
+ Currently in Netscape Directory password policy implementation,
+ passwordMaxAge, passwordMinLength, passwordInHistory, passwordWarn-
+ ing, passwordMaxFailure, passwordLockoutDuration, passwordMinAge, and
+ passwordResetFailureCount attributes are defined as
+ 1.3.6.1.4.1.1466.115.121.1.15 ('Directory String'). It is recom-
+ mented to change them to 1.3.6.1.4.1.1466.115.121.1.27 ('Integer') in
+ the future implementation.
+
+ The attributes which are used as a flag have the syntax
+ '1.3.6.1.4.1.1466.115.121.1.15' ('Directory String'). A value of '1'
+ represents 'true', while '0' represents 'false'. It is recommented
+ to change them to 1.3.6.1.4.1.1466.115.121.1.7 ('Boolean') in the
+ future implementation.
+
+4.3. The passwordObject Object Class
+
+The passwordObject object class holds the password policy state informa-
+tion for each user. For example, how many consecutive bad password
+attempts an user made. The information is located in each user entries.
+The description of passwordObject object class:
+
+ ( 2.16.840.1.113730.3.2.12
+ NAME 'passwordObject'
+ AUXILIARY
+ SUP top
+ DESC 'Password object class to hold password policy information for each
+ entry'
+ MAY (
+ passwordExpirationTime $ passwordExpWarned $ passwordRetryCount $
+ retryCountResetTime $ accountUnlockTime $ passwordHistory $
+ passwordAllowChangeTime
+ )
+ )
+
+4.4. The new attribute types used in the passwordObject Object Class:
+ ( 2.16.840.1.113730.3.1.91
+ NAME 'passwordExpirationTime'
+ DESC 'the time the entry's password expires'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
+ EQUALITY generalizedTimeMatch
+
+
+
+Chu [Page 6]
+
+
+
+
+
+Expires June 1999 INTERNET DRAFT
+
+
+ ORDERING generalizedTimeOrderingMatch
+ SINGLE-VALUE
+ USAGE directoryOperation
+ )
+ ( 2.16.840.1.113730.3.1.92
+ NAME 'passwordExpWarned'
+ DESC 'a flag which indicates whether a password expiration warning is sent
+ to the client'
+ EQUALITY 'caseIgnoreMatch'
+ SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+ SINGLE-VALUE
+ USAGE directoryOperation
+ )
+ ( 2.16.840.1.113730.3.1.93
+ NAME 'passwordRetryCount'
+ DESC 'the count of consecutive failed password attempts'
+ EQUALITY 'caseIgnoreMatch'
+ SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+ SINGLE-VALUE
+ USAGE directoryOperation
+ )
+ ( 2.16.840.1.113730.3.1.94
+ NAME 'retryCountResetTime'
+ DESC 'the time to reset the passwordRetryCount'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
+ EQUALITY generalizedTimeMatch
+ ORDERING generalizedTimeOrderingMatch
+ SINGLE-VALUE
+ USAGE directoryOperation
+ )
+ ( 2.16.840.1.113730.3.1.95
+ NAME 'accountUnlockTime'
+ DESC 'the time that the user can bind again after an account lockout'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
+ EQUALITY generalizedTimeMatch
+ ORDERING generalizedTimeOrderingMatch
+ SINGLE-VALUE
+ USAGE directoryOperation
+ )
+ ( 2.16.840.1.113730.3.1.96
+ NAME 'passwordHistory'
+ DESC 'the history of user's passwords'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.5
+ EQUALITY bitStringMatch
+ USAGE directoryOperation
+ )
+ ( 2.16.840.1.113730.3.1.214
+ NAME 'passwordAllowChangeTime'
+
+
+
+Chu [Page 7]
+
+
+
+
+
+Expires June 1999 INTERNET DRAFT
+
+
+ DESC 'the time that the user is allowed change the password'
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
+ EQUALITY generalizedTimeMatch
+ ORDERING generalizedTimeOrderingMatch
+ SINGLE-VALUE
+ USAGE directoryOperation
+ )
+
+5. Password Expiration and Expiration Warning
+
+New attributes, passwordExp, passwordMaxAge, and passwordWarning are
+defined to specify whether the password will expire, when the password
+expires and when a warning message will be sent to the client respec-
+tively. The actual expiration time for a password will be stored in a
+new attribute, passwordExpirationTime attribute in the user entry.
+
+After bind operation succeed with authentication, the server should
+check for password expiration. If the password expiration policy is on
+and the account's password is expired, the server should send bin-
+dResponse with the resultCode: LDAP_INVALID_CREDENTIALS along with an
+error message to inform the client that the password has expired. If
+the password is going to expire sooner than the password warning dura-
+tion, the server should send bindResponse with the resultCode:
+LDAP_SUCCESS, and should include the password expiring control in the
+controls field of the bindResponse message:
+
+ controlType: 2.16.840.1.113730.3.4.5,
+
+ controlValue: an octet string to indicate the time in seconds until
+ the password expires.
+
+ criticality: false
+
+
+The server should send at least one warning message to the client before
+expiring the client's password.
+
+6. Password Minimum Age
+
+This policy defines the number of seconds that must pass before a user
+can change the password again. This policy can be used in conjunction
+with the password history policy to prevent users from quickly cycling
+through passwords in history so that they can reuse the old password. A
+value of zero indicates that the user can change the password immedi-
+ately.
+
+During the modify password operation, the server should check if the
+user is allowed to change password at this time. If not, the server
+
+
+
+Chu [Page 8]
+
+
+
+
+
+Expires June 1999 INTERNET DRAFT
+
+
+should send the LDAP_CONSTRAINT_VIOLATION result code back to the client
+and an error message to indicate that the password cannot be changed
+within password minimum age.
+
+7. Password History
+
+passwordHistory and passwordInHistory attributes control whether the
+user can reuse passwords and how many passwords the directory server
+stores in history.
+
+During the modify password operation, the server should check for pass-
+word history. If password history is on and the new password matches
+one of the old passwords in history, the server should send
+modifyResponse back to the client with resultCode:
+LDAP_CONSTRAINT_VIOLATION, and an error message to indicate the new
+password is in history, choose another password.
+
+8. Password Syntax and Minimum length
+
+The passwordCheckSyntax attribute indicates whether the password syntax
+will be checked before a new password is saved. If this policy is on,
+the directory server should check that the new password meets the pass-
+word minimum length requirement and that the string does not contain any
+trivial words such as the user's name, user id and so on.
+
+The passwordMinLength attribute defines the minimum number of characters
+that must be used in a password.
+
+During the modify or add password operation, the server should check for
+password syntax. If password check syntax is on and the new password
+fail the syntax checking, the server should send modifyResponse or
+addResponse back to the client with resultCode:
+LDAP_CONSTRAINT_VIOLATION, and an error message to indicate the new
+password failed the syntax checking, the user should choose another
+password.
+
+9. User Defined Passwords
+
+This policy defines whether the users can change their own passwords.
+During the modify password operation, the server should check if the
+user is allowed to change password. If not, the server should send to
+the client the LDAP_UNWILLING_TO_PERFORM result code and an error mes-
+sage to indicate that the user is not allowed to change password.
+
+10. Password Change After Reset
+
+This policy forces the user to select a new password on first bind or
+after password reset. After bind operation succeed with authentication,
+
+
+
+Chu [Page 9]
+
+
+
+
+
+Expires June 1999 INTERNET DRAFT
+
+
+the server should check if the password change after reset policy is on
+and this is the first time logon. If so, the server should send bin-
+dResponse with the resultCode: LDAP_SUCCESS, and should include the
+password expired control in the controls field of the bindResponse mes-
+sage:
+
+ controlType: 2.16.840.1.113730.3.4.4,
+
+ controlValue: an octet string: "0",
+
+ criticality: false
+
+After that, for any operation issued by the user other than modify pass-
+word, bind, unbind, abandon, or search, the server should send the
+response message with the resultCode: LDAP_UNWILLING_TO_PERFORM, and
+should include the password expired control in the controls field of the
+response message:
+
+ controlType: 2.16.840.1.113730.3.4.4,
+
+ controlValue: an octet string: "0",
+
+ criticality: false
+
+11. Password Guessing limit
+
+This policy enforces the limit of number of tries the client has to get
+the password right. The user will be locked out of the directory after
+a given number of consecutive failed attempts to bind to the directory.
+This policy protects the directory from automated guessing attacks.
+
+The server should keep a failure counter in the passwordRetryCount
+attribute for each entry. The server should increment the failure
+counter when a bind operation fails with the LDAP_INVALID_CREDENTIALS
+error code. The server should clear the failure counter when a bind
+operation succeeds with authentication, the account password is reset by
+administrator, or when the failure counter reset time is reached.
+
+During the bind operation, the server should check for password guessing
+limit. If password guessing limit policy is on and the password guess-
+ing limit is reached, the server should send bindResponse back to the
+client with resultCode: LDAP_CONSTRAINT_VIOLATION, and an error message
+to indicate the password failure limit is reached.
+
+12. Server Implementation
+
+
+
+
+
+
+Chu [Page 10]
+
+
+
+
+
+Expires June 1999 INTERNET DRAFT
+
+
+12.1. Password policy initialization
+
+The passwordPolicy object class holds the password policy settings for a
+set of user accounts. During the server initial startup, password pol-
+icy should be assigned a set of initial values. The settings should be
+modified only by the directory administrators and should be readable by
+anyone. The server should preserve the settings over server restart.
+Currently in the Netscape Directory implementation, the password policy
+settings are stored in "cn=config" entry and an identical copy is kept
+in a configuration file which is used as bootstrap. The Netscape Direc-
+tory password default settings are listed below as an example.
+
+ - User may change password
+
+ - Do not need to change password first time logon
+
+ - Use SHA as the password hash algorithm
+
+ - No password syntax check
+
+ - Password minimum length: 6
+
+ - No password expiration
+
+ - Expires in 100 days
+
+ - No password minimum age
+
+ - Send warning one day before password expires
+
+ - Do not keep password history
+
+ - Six passwords in history
+
+ - No account lockout
+
+ - Lockout after 3 bind failures
+
+ - Do not lockout forever
+
+ - Lock account for 60 minutes
+
+ - Reset retry count after 10 minutes
+
+ In ldif format:
+
+ passwordchange: on
+
+
+
+
+Chu [Page 11]
+
+
+
+
+
+Expires June 1999 INTERNET DRAFT
+
+
+ passwordmustchange: off
+
+ passwordstoragescheme: SHA
+
+ passwordchecksyntax: off
+
+ passwordminlength: 6
+
+ passwordexp: off
+
+ passwordmaxage: 8640000
+
+ passwordminage: 0
+
+ passwordwarning: 86400
+
+ passwordkeephistory: off
+
+ passwordinhistory: 6
+
+ passwordlockout: off
+
+ passwordmaxfailure: 3
+
+ passwordunlock: on
+
+ passwordlockoutduration: 3600
+
+ passwordresetfailurecount: 600
+
+12.2. Bind Operations
+
+12.2.1. During bind operations, the server should check for password
+guessing limit. If password guessing limit policy is on and the pass-
+word guessing limit is reached, the server should send bindResponse back
+to the client with resultCode: LDAP_CONSTRAINT_VIOLATION, and an error
+message to indicate the password failure limit is reached. Otherwise
+the server should continue the bind operation.
+
+12.2.2. After Bind Operations succeed with authentication, the server
+should
+
+ 1. Clear the password failure counter.
+
+ 2. Check if the password change after reset policy is on and this is
+ the first time logon. If so, the server should disallow all
+ operations issued by this user except modify password, bind ,
+ unbind, abandon, or search. The server should send bindResponse
+
+
+
+Chu [Page 12]
+
+
+
+
+
+Expires June 1999 INTERNET DRAFT
+
+
+ with the resultCode: LDAP_SUCCESS, and should include the pass-
+ word expired control in the controls field of the bindResponse
+ message.
+
+ controlType: 2.16.840.1.113730.3.4.4,
+
+ controlValue: an octet string: "0",
+
+ criticality: false
+
+ 3. Check for password expiration. If the password expiration policy
+ is on and the account's password is expired, the server should
+ send bindResponse with the resultCode: LDAP_INVALID_CREDENTIALS
+ along with an error message to inform the client that the pass-
+ word has expired.
+
+ 4. Check if the password is going to expire sooner than the password
+ warning duration, the server should send bindResponse with the
+ resultCode: LDAP_SUCCESS, and should include the password expir-
+ ing control in the controls field of the bindResponse message:
+
+ controlType: 2.16.840.1.113730.3.4.5,
+
+ controlValue: an octet string to indicate the time in seconds
+ until the password expires.
+
+ criticality: false
+
+
+12.2.3. After Bind Operations fail with LDAP_INVALID_CREDENTIALS, the
+server should
+
+ 1. Check if it is time to reset the password failure counter. If
+ so, set the failure counter to 1 and re-calculate the next
+ failure counter reset time. Otherwise, increment the failure
+ counter.
+
+ 2. Check if failure counter exceeds the allowed maximum value. If
+ so, the server should lock the user account.
+
+12.3. Add Password Operations
+
+12.3.1. During the add password operation, the server should
+
+ 1. Check for password syntax. If password check syntax is on and
+ the new password fail the syntax checking, the server should send
+ addResponse back to the client with resultCode:
+ LDAP_CONSTRAINT_VIOLATION, and an error message to indicate the
+
+
+
+Chu [Page 13]
+
+
+
+
+
+Expires June 1999 INTERNET DRAFT
+
+
+ new password failed the syntax checking, the user should choose
+ another password.
+
+ 2. Calculate and add passwordexpirationtime and passwordallowchange-
+ time attributes to the entry if password expiration policy and
+ password minimum age policy are on respectively.
+
+12.4. Modify Password Operations
+
+12.4.1. During the modify password operation, the server should
+
+ 1. Check if the user is allowed to change password. If not, the
+ server should send to the client the LDAP_UNWILLING_TO_PERFORM
+ result code and an error message to indicate that the user is not
+ allowed to change password.
+
+ 2. Check for password minimum age, password minimum length, password
+ history, and password syntax. If the checking fails, the server
+ should send modifyResponse back to the client with resultCode:
+ LDAP_CONSTRAINT_VIOLATION, and an appropriate error message.
+
+ 3. If it is the first time logon and the user needs to change pass-
+ word the first time logon, the server should check if the user-
+ password attribute is in this modify request. If so, the server
+ should continue the modify operation. Otherwise, the server
+ should send the response message with the resultCode:
+ LDAP_UNWILLING_TO_PERFORM, and should include the password
+ expired control in the controls field of the response message:
+
+ controlType: 2.16.840.1.113730.3.4.4,
+
+ controlValue: an octet string: "0",
+
+ criticality: false
+
+12.4.2. After modify password operations succeed, the server should
+
+ 1. Update password history in the user's entry, if the password his-
+ tory policy is on.
+
+ 2. Update passwordExpirationTime in the user's entry, if the pass-
+ word expiration policy is on.
+
+ 3. Update passwordAllowChangeTime in the user's entry, if the pass-
+ word minimum age policy is on.
+
+ 4. Clear the password failure counter, if the password is reset by a
+ directory administrator.
+
+
+
+Chu [Page 14]
+
+
+
+
+
+Expires June 1999 INTERNET DRAFT
+
+
+ 5. Set a flag to indicate the user is the first time logon, if the
+ password change after reset policy is on and the password is
+ reset by a directory administrator.
+
+13. Client Implementation
+
+13.1. Bind Response
+
+For every bind response received, the client needs to parse the bind
+result code, error message, and controls to determine if any of the fol-
+lowing conditions is true and prompt the user accordingly.
+
+1. The user needs to change password first time logon. The user
+ should be prompted to change the password immediately.
+
+ resultCode: LDAP_SUCCESS, with the control
+ controlType: 2.16.840.1.113730.3.4.4,
+ controlValue: "0",
+ criticality: false
+
+
+2. This is a warning message that the server sends to a user to indi-
+ cate the time in seconds until the user's password expires.
+
+ resultCode: LDAP_SUCCESS, with the control
+ controlType: 2.16.840.1.113730.3.4.5,
+ controlValue: an octet string to indicate the time in seconds until
+ the password expires.
+ criticality: false
+
+
+3. The password failure limit is reached. The user needs to retry
+ later or contact the directory administrator to reset the password.
+
+ resultCode: LDAP_CONSTRAINT_VIOLATION, with an appropriate error message.
+ For example:
+ errorMessage: "exceed password retry limit"
+
+
+4. The password is expired. The user needs to contact the directory
+ administrator to reset the password.
+
+ resultCode: LDAP_INVALID_CREDENTIALS, with an appropriate error message.
+ For example:
+ errorMessage: "password expired"
+
+
+
+
+
+
+Chu [Page 15]
+
+
+
+
+
+Expires June 1999 INTERNET DRAFT
+
+
+13.2. Modify Responses
+
+For the modify response received for the change password request, the
+client needs to check the result code and error message to determine if
+it failed the password checking, and either let the user retry or quit.
+
+1. The user defined password policy is disabled. The user is not
+ allowed to change password.
+
+ resultCode: LDAP_UNWILLING_TO_PERFORM, with an appropriate error message.
+ For example:
+ errorMessage: "user is not allowed to change password"
+
+
+2. The new password failed the password syntax checking, or the
+ current password has not reached the minimum password age, or the
+ new password is in history.
+
+ resultCode: LDAP_CONSTRAINT_VIOLATION, with an appropriate error message.
+ For example:
+ errorMessage: "invalid password syntax"
+ errorMessage: "password in history"
+ errorMessage: "trivial password"
+ errorMessage: "within minimum password age"
+
+13.3. Add Responses
+
+For the add response received for the add entry request, the client
+needs to check the result code and error message to determine if it
+failed the password checking, and either let the user retry or quit.
+
+1. The new password failed the password syntax checking.
+
+ resultCode: LDAP_CONSTRAINT_VIOLATION, with an appropriate error message.
+ For example:
+ errorMessage: "invalid password syntax"
+ errorMessage: "trivial password"
+
+13.4. Other Responses
+
+For operations other than bind, unbind, abandon, or search, the client
+needs to 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 first time logon. The user
+ should be prompted to change the password immediately.
+
+ resultCode: LDAP_UNWILLING_TO_PERFORM, with the control
+
+
+
+Chu [Page 16]
+
+
+
+
+
+Expires June 1999 INTERNET DRAFT
+
+
+ controlType: 2.16.840.1.113730.3.4.4,
+ controlValue: "0",
+ criticality: false
+
+14. Security Considerations
+
+The password policy defined in this document is applied to the LDAP sim-
+ple authentication method [RFC-2251] and userPassword attribute values
+only. The simple authentication method provides minimal authentication
+facilities, with the contents of the authentication field consisting
+only of a cleartext password. Note that the simple authentication
+method and password policy are designed for authentication where the
+underlying transport service cannot guarantee confidentiality. Use of
+simple authentication method and password policy may result in disclo-
+sure of the password to unauthorized parties. SASL and TLS mechanisms
+may be used with LDAP to provide integrity or confidentiality services.
+
+
+15. Bibliography
+
+
+[RFC-2251]Wahl, M., Howes, T., Kille, S., "Lightweight Directory Access
+ Protocol (v3)", RFC 2251, August 1997.
+
+[RFC-2307]L. Howard, "An Approach for Using LDAP as a Network Informa-
+ tion Service", RFC 2307, March 1998.
+
+[RFC-2119]S. Bradner, "Key Words for use in RFCs to Indicate Requirement
+ Levels", RFC 2119, March 1997.
+
+16. Author's Addresses
+
+ Valerie Chu
+ Netscape Communications Corp.
+ 501 E. Middlefield Rd.
+ Mountain View, CA 94043
+ USA
+ +1 650 937-3443
+ vchu@netscape.com
+
+
+
+
+
+
+
+
+
+
+
+
+Chu [Page 17]
+
+