mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
1962 lines
76 KiB
Plaintext
1962 lines
76 KiB
Plaintext
|
||
|
||
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
|
||
|
||
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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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."
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Behera, et. al. Expires August 15, 2004 Page 35
|
||
|
||
|