]> git.sur5r.net Git - openldap/blob - doc/drafts/draft-behera-ldap-password-policy-xx.xml
Merge remote-tracking branch 'origin/mdb.master'
[openldap] / doc / drafts / draft-behera-ldap-password-policy-xx.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
3         <!ENTITY rfc2119 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
4         <!ENTITY rfc2195 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2195.xml'>
5         <!ENTITY rfc4422 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4422.xml'>
6         <!ENTITY rfc4511 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4511.xml'>
7         <!ENTITY rfc4512 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4512.xml'>
8         <!ENTITY rfc4513 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4513.xml'>
9         <!ENTITY rfc4517 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4517.xml'>
10         <!ENTITY rfc2831 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2831.xml'>
11         <!ENTITY rfc3062 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3062.xml'>
12         <!ENTITY rfc4520 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4520.xml'>
13         <!ENTITY rfc3672 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3672.xml'>
14
15 ]>
16 <?xml-stylesheet type='text/xsl' href='http://xml.resource.org/authoring/rfc2629.xslt' ?>
17 <?rfc toc="yes" ?>
18 <?rfc tocdepth="2" ?>
19 <?rfc tocindent="no" ?>
20 <?rfc symrefs="yes" ?>
21 <?rfc sortrefs="yes"?>
22 <?rfc iprnotified="no" ?>
23 <?rfc strict="yes" ?>
24 <rfc category="std" ipr="trust200902" docName="draft-behera-ldap-password-policy-10">
25 <front>
26         <title>Password Policy for LDAP Directories</title>
27         <author initials="J." fullname="Jim Sermersheim" surname="Sermersheim">
28                 <organization>Novell, Inc</organization>
29                 <address>
30                         <postal>
31                                 <street>1800 South Novell Place</street>
32                                 <city>Provo</city>
33                                 <region>Utah</region>
34                                 <code>84606</code>
35                                 <country>US</country>
36                         </postal>
37                         <phone>+1 801 861-3088</phone>
38                         <email>jimse@novell.com</email>
39                 </address>
40         </author>
41         <author initials="L." fullname="Ludovic Poitou" surname="Poitou">
42                 <organization>Sun Microsystems</organization>
43                 <address>
44                         <postal>
45                                 <street>180, Avenue de l'Europe</street>
46                                 <city>Zirst de Montbonnot</city> <code>38334</code> <region>Saint Ismier cedex</region>
47                                 <country>FR</country>
48                         </postal>
49                         <phone>+33 476 188 212</phone>
50                         <email>ludovic.poitou@sun.com</email>
51                 </address>
52         </author>
53         <author initials="H." fullname="Howard Chu" surname="Chu" role="editor">
54                 <organization>Symas Corp.</organization>
55                 <address>
56                         <postal>
57                                 <street>18740 Oxnard Street, Suite 313A</street>
58                                 <city>Tarzana</city>
59                                 <region>California</region>
60                                 <code>91356</code>
61                                 <country>US</country>
62                         </postal>
63                         <phone>+1 818 757-7087</phone>
64                         <email>hyc@symas.com</email>
65                 </address>
66         </author>
67         <date year="2009" month="August"/>
68         <abstract>
69         <t>
70    Password policy as described in this document is a set of rules that
71    controls how passwords are used and administered in Lightweight
72    Directory Access Protocol (LDAP) based directories.  In order to
73    improve the security of LDAP directories and make it difficult for
74    password cracking programs to break into directories, it is desirable
75    to enforce a set of rules on password usage.  These rules are made to
76    ensure that users change their passwords periodically, passwords meet
77    construction requirements, the re-use of old password is restricted,
78    and to deter password guessing attacks.
79 </t>
80         </abstract>
81 </front>
82
83 <middle>
84
85 <section title="Overview">
86
87    <t>LDAP-based directory services are currently accepted by many
88    organizations as the access protocol for directories.  The ability to
89    ensure the secure read and update access to directory information
90    throughout the network is essential to the successful deployment.
91    Most LDAP implementations support many authentication schemes - the
92    most basic and widely used is the simple authentication i.e., user DN
93    and password.  In this case, many LDAP servers have implemented some
94    kind of policy related to the password used to authenticate.  Among
95    other things, this policy includes:
96    <list style="symbols">
97    <t>Whether and when passwords expire.</t>
98
99    <t>Whether failed bind attempts cause the account to be locked.</t>
100
101    <t>If and how users are able to change their passwords.</t>
102    </list>
103    </t>
104
105    <t>In order to achieve greater security protection and ensure
106    interoperability in a heterogeneous environment, LDAP needs to
107    standardize on a common password policy model.  This is critical to
108    the successful deployment of LDAP directories.</t>
109 </section>
110
111
112 <section title="Conventions">
113
114         <t>Imperative keywords defined in <xref target="RFC2119"/> are used in this document,
115    and carry the meanings described there.</t>
116
117    <t>All ASN.1 <xref target="X.680"/> Basic Encoding Rules (BER) <xref target="X.690"/> encodings follow the
118    conventions found in Section 5.1 of <xref target="RFC4511"/>.</t>
119
120    <t>The term "password administrator" refers to a user that has
121    sufficient access control privileges to modify users' passwords.  The
122    term "password policy administrator" refers to a user that has
123    sufficient access control privileges to modify the pwdPolicy object
124    defined in this document.  The access control that is used to
125    determine whether an identity is a password administrator or password
126    policy administrator is beyond the scope of this document, but
127    typically implies that the password administrator has 'write'
128    privileges to the password attribute.</t>
129 </section>
130
131
132 <section title="Application of Password Policy">
133
134    <t>The password policy defined in this document can be applied to any
135    attribute holding a user's password used for an authenticated LDAP
136    bind operation.  In this document, the term "user" represents any
137    LDAP client application that has an identity in the directory.</t>
138
139    <t>This policy is typically applied to the userPassword attribute in the
140    case of the LDAP simple authentication method <xref target="RFC4511"/> or the case
141    of password based SASL <xref target="RFC4422"/> authentication such as CRAM-MD5
142    <xref target="RFC2195"/> and DIGEST-MD5 <xref target="RFC2831"/>.</t>
143
144    <t>The policy described in this document assumes that the password
145    attribute holds a single value.  No considerations are made for
146    directories or systems that allow a user to maintain multi-valued
147    password attributes.</t>
148
149    <t>Server implementations MAY institute internal policy whereby certain
150    identities (such as directory administrators) are not forced to
151    comply with any of password policy.  In this case, the password for a
152    directory administrator never expires; the account is never locked,
153    etc.</t>
154 </section>
155
156
157 <section title="Articles of Password Policy">
158
159    <t>The following sections explain in general terms each aspect of the
160    password policy defined in this document as well as the need for
161    each.  These policies are subdivided into the general groups of
162    password usage and password modification.  Implementation details are
163    presented in <xref target="server_enforce"/> and <xref target="client_enforce"/>.</t>
164
165  <section title="Password Usage Policy">
166
167    <t>This section describes policy enforced when a password is used to
168    authenticate.  The general focus of this policy is to minimize the
169    threat of intruders once a password is in use.</t>
170
171   <section title="Password Validity Policy">
172
173   <t>These mechanisms allow account usage to be controlled independent
174   of any password expiration policies. The policy defines the absolute
175   period of time for which an account may be used. This
176   allows an administrator to define an absolute starting time after which
177   a password becomes valid, and an absolute ending time after which the
178   password is disabled.</t>
179
180   <t>A mechanism is also provided to define the period of time for which
181   an account may remain unused before being disabled.</t>
182   </section>
183
184
185   <section title="Password Guessing Limit">
186
187    <t>In order to prevent intruders from guessing a user's password, a
188    mechanism exists to track the number of consecutive failed
189    authentication attempts, and take action when a limit is reached.
190    This policy consists of several parts:
191    <list style="symbols">
192
193    <t>A counter to track the number of failed authentication attempts.</t>
194
195    <t>The amount of time to delay on the first authentication failure.</t>
196
197    <t>The maximum amount of time to delay on subsequent failures.</t>
198
199    <t>A timeframe in which the limit of consecutive failed
200       authentication attempts must happen before action is taken.</t>
201
202    <t>A configurable limit on failed authentication attempts.</t>
203
204    <t>The action to be taken when the limit is reached.  The action will
205       either be nothing, or the account will be locked.</t>
206
207    <t>An amount of time the account is locked (if it is to be locked).
208       This can be indefinite.</t>
209         </list> </t>
210
211         <t>Note that using the account lock feature provides an easy
212         avenue for Denial-of-Service (DoS) attacks on user accounts. While
213         some sites' policies require accounts to be locked, this feature is
214         discouraged in favor of delaying each failed login attempt.</t>
215
216    <t>The delay time will be doubled on each subsequent failure, until it
217    reaches the maximum time configured.</t>
218
219    <t>[TBD: we could also provide a syntax for configuring a backoff
220    algorithm. E.g. "+&lt;int>" for linearly incrementing delay,
221    "x&lt;int>" for constant multiplier, "^&lt;int> for geometric.
222    But it's probably overkill to add a calculator
223    language to the server.]</t>
224
225   </section>
226
227  </section>
228
229
230  <section title="Password Modification Policy">
231
232    <t>This section describes policy enforced while users are modifying
233    passwords.  The general focus of this policy is to ensure that when
234    users add or change their passwords, the security and effectiveness
235    of their passwords is maximized.  In this document, the term "modify
236    password operation" refers to any operation that is used to add or
237    modify a password attribute.  Often this is done by updating the
238    password attribute during an add or modify operation, but MAY be done
239    by other means such as an extended operation.</t>
240
241   <section title="Password Expiration, Expiration Warning, and Grace
242        Authentications">
243
244    <t>One of the key properties of a password is the fact that it is not
245    well known.  If a password is frequently changed, the chances of that
246    user's account being broken into are minimized.</t>
247
248    <t>Password policy administrators may deploy a password policy that
249    causes passwords to expire after a given amount of time - thus
250    forcing users to change their passwords periodically.</t>
251
252    <t>As a side effect, there needs to be a way in which users are made
253    aware of this need to change their password before actually being
254    locked out of their accounts.  One or both of the following methods
255    handle this:
256    <list style="symbols">
257
258    <t>A warning may be returned to the user sometime before his password
259       is due to expire.  If the user fails to heed this warning before
260       the expiration time, his account will be locked.</t>
261
262    <t>The user may bind to the directory a preset number of times after
263       her password has expired.  If she fails to change her password
264       during one of her 'grace' authentications, her account will be
265       locked.</t>
266         </list></t>
267   </section>
268
269
270   <section title="Password History">
271
272    <t>When the Password Expiration policy is used, an additional mechanism
273    may be employed to prevent users from simply re-using a previous
274    password (as this would effectively circumvent the expiration
275    policy).</t>
276
277    <t>In order to do this; a history of used passwords is kept.  The
278    password policy administrator sets the number of passwords to be
279    stored at any given time.  Passwords are stored in this history
280    whenever the password is changed.  Users aren't allowed to specify
281    any passwords that are in the history list while changing passwords.</t>
282   </section>
283
284
285   <section title="Password Minimum Age">
286
287    <t>Users may circumvent the Password History mechanism by quickly
288    performing a series of password changes.  If they change their
289    password enough times, their 'favorite' password will be pushed out
290    of the history list.</t>
291
292    <t>This process may be made less attractive to users by employing a
293    minimum age for passwords.  If users are forced to wait 24 hours
294    between password changes, they may be less likely to cycle through a
295    history of 10 passwords.</t>
296   </section>
297
298
299   <section title="Password Quality and Minimum length">
300
301    <t>In order to prevent users from creating or updating passwords that
302    are easy to guess, a password quality policy may be employed.  This
303    policy consists of two general mechanisms - ensuring that passwords
304    conform to a defined quality criterion and ensuring that they are of
305    a minimum length.</t>
306
307    <t>Forcing a password to comply with the quality policy may imply a
308    variety of things including:
309    <list style="symbols">
310
311    <t>Disallowing trivial or well-known words make up the password.</t>
312
313    <t>Forcing a certain number of digits be used.</t>
314
315    <t>Disallowing anagrams of the user's name.</t></list></t>
316
317    <t>The implementation of this policy meets with the following problems:
318    <list style="symbols">
319
320    <t>If the password to be added or updated is encrypted by the client
321       before being sent, the server has no way of enforcing this policy.
322       Therefore, the onus of enforcing this policy falls upon client
323       implementations.</t>
324
325    <t>There are no specific definitions of what 'quality checking'
326       means.  This can lead to unexpected behavior in a heterogeneous
327       environment.</t></list></t>
328   </section>
329
330
331   <section title="User Defined Passwords">
332
333    <t>In some cases, it is desirable to disallow users from adding and
334    updating their own passwords.  This policy makes this functionality
335    possible.</t>
336   </section>
337
338   <section title="Password Change after Reset">
339
340    <t>This policy forces the user to update her password after it has been
341    set for the first time, or has been reset by a password
342    administrator.</t>
343
344    <t>This is needed in scenarios where a password administrator has set or
345    reset the password to a well-known value.</t>
346   </section>
347
348
349   <section title="Safe Modification">
350
351    <t>As directories become more commonly used, it will not be unusual for
352    clients to connect to a directory and leave the connection open for
353    an extended period.  This opens up the possibility for an intruder to
354    make modifications to a user's password while that user's computer is
355    connected but unattended.</t>
356
357    <t>This policy forces the user to prove his identity by specifying the
358    old password during a password modify operation.</t>
359
360    <t>{TODO: This allows a dictionary attack unless we specify that this is
361    also subject to intruder detection.  One solution is to require users
362    to authN prior to changing password.  Another solution is to perform
363    intruder detection checks when the password for a non-authenticated
364    identity is being updated}</t>
365   </section>
366  </section>
367
368
369  <section title="Restriction of the Password Policy">
370
371    <t>The password policy defined in this document can apply to any
372    attribute containing a password.  Password policy state information
373    is held in the user's entry, and applies to a password attribute, not
374    a particular password attribute value.  Thus the server SHOULD
375    enforce that the password attribute subject to password policy,
376    contains one and only one password value.</t>
377  </section>
378 </section>
379
380
381 <section title="Schema used for Password Policy">
382
383    <t>The schema elements defined here fall into two general categories.  A
384    password policy object class is defined which contains a set of
385    administrative password policy attributes, and a set of operational
386    attributes are defined that hold general password policy state
387    information for each user.</t>
388
389  <section title="The pwdPolicy Object Class">
390
391    <t>This object class contains the attributes defining a password policy
392    in effect for a set of users.  <xref target="admin"/> describes the
393    administration of this object, and the relationship between it and
394    particular objects.</t>
395
396         <figure><artwork>
397       ( 1.3.6.1.4.1.42.2.27.8.2.1
398       NAME 'pwdPolicy'
399       SUP top
400       AUXILIARY
401       MUST ( pwdAttribute )
402       MAY ( pwdMinAge $ pwdMaxAge $ pwdInHistory $ pwdCheckQuality $
403       pwdMinLength $ pwdMaxLength $ pwdExpireWarning $
404       pwdGraceAuthNLimit $ pwdGraceExpiry $ pwdLockout $
405       pwdLockoutDuration $ pwdMaxFailure $ pwdFailureCountInterval $
406       pwdMustChange $ pwdAllowUserChange $ pwdSafeModify $
407       pwdMinDelay $ pwdMaxDelay $ pwdMaxIdle ) )
408         </artwork></figure>
409  </section>
410
411
412  <section title="Attribute Types used in the pwdPolicy ObjectClass">
413
414    <t>Following are the attribute types used by the pwdPolicy object class.</t>
415
416   <section title="pwdAttribute">
417
418    <t>This holds the name of the attribute to which the password policy is
419    applied.  For example, the password policy may be applied to the
420    userPassword attribute.</t>
421
422         <figure><artwork>
423       ( 1.3.6.1.4.1.42.2.27.8.1.1
424       NAME 'pwdAttribute'
425       EQUALITY objectIdentifierMatch
426       SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 )
427         </artwork></figure>
428   </section>
429
430
431   <section title="pwdMinAge">
432
433    <t>This attribute holds the number of seconds that must elapse between
434    modifications to the password.  If this attribute is not present, 0
435    seconds is assumed.</t>
436
437         <figure><artwork>
438       ( 1.3.6.1.4.1.42.2.27.8.1.2
439       NAME 'pwdMinAge'
440       EQUALITY integerMatch
441       SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
442       SINGLE-VALUE )
443         </artwork></figure>
444   </section>
445
446
447   <section title="pwdMaxAge">
448
449    <t>This attribute holds the number of seconds after which a modified
450    password will expire.</t>
451
452    <t>If this attribute is not present, or if the value is 0 the password
453    does not expire.  If not 0, the value must be greater than or equal
454    to the value of the pwdMinAge.</t>
455
456         <figure><artwork>
457       ( 1.3.6.1.4.1.42.2.27.8.1.3
458       NAME 'pwdMaxAge'
459       EQUALITY integerMatch
460       SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
461       SINGLE-VALUE )
462         </artwork></figure>
463   </section>
464
465
466   <section title="pwdInHistory">
467
468    <t>This attribute specifies the maximum number of used passwords stored
469    in the pwdHistory attribute.</t>
470
471    <t>If this attribute is not present, or if the value is 0, used
472    passwords are not stored in the pwdHistory attribute and thus may be
473    reused.</t>
474
475         <figure><artwork>
476       ( 1.3.6.1.4.1.42.2.27.8.1.4
477       NAME 'pwdInHistory'
478       EQUALITY integerMatch
479       SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
480       SINGLE-VALUE )
481         </artwork></figure>
482   </section>
483
484
485   <section title="pwdCheckQuality">
486
487    <t>{TODO: Consider changing the syntax to OID.  Each OID will list a
488    quality rule (like min len, # of special characters, etc).  These
489    rules can be specified outside this document.}</t>
490
491    <t>{TODO: Note that even though this is meant to be a check that happens
492    during password modification, it may also be allowed to happen during
493    authN.  This is useful for situations where the password is encrypted
494    when modified, but decrypted when used to authN.}</t>
495
496    <t>This attribute indicates how the password quality will be verified
497    while being modified or added.  If this attribute is not present, or
498    if the value is '0', quality checking will not be enforced.  A value
499    of '1' indicates that the server will check the quality, and if the
500    server is unable to check it (due to a hashed password or other
501    reasons) it will be accepted.  A value of '2' indicates that the
502    server will check the quality, and if the server is unable to verify
503    it, it will return an error refusing the password.</t>
504
505         <figure><artwork>
506       ( 1.3.6.1.4.1.42.2.27.8.1.5
507       NAME 'pwdCheckQuality'
508       EQUALITY integerMatch
509       SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
510       SINGLE-VALUE )
511         </artwork></figure>
512   </section>
513
514
515   <section title="pwdMinLength">
516
517    <t>When quality checking is enabled, this attribute holds the minimum
518    number of characters that must be used in a password.  If this
519    attribute is not present, no minimum password length will be
520    enforced.  If the server is unable to check the length (due to a
521    hashed password or otherwise), the server will, depending on the
522    value of the pwdCheckQuality attribute, either accept the password
523    without checking it ('0' or '1') or refuse it ('2').</t>
524
525         <figure><artwork>
526       ( 1.3.6.1.4.1.42.2.27.8.1.6
527       NAME 'pwdMinLength'
528       EQUALITY integerMatch
529       SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
530       SINGLE-VALUE )
531         </artwork></figure>
532   </section>
533
534
535   <section title="pwdMaxLength">
536
537    <t>When quality checking is enabled, this attribute holds the maximum
538    number of characters that may be used in a password.  If this
539    attribute is not present, no maximum password length will be
540    enforced.  If the server is unable to check the length (due to a
541    hashed password or otherwise), the server will, depending on the
542    value of the pwdCheckQuality attribute, either accept the password
543    without checking it ('0' or '1') or refuse it ('2').</t>
544
545         <figure><artwork>
546       ( 1.3.6.1.4.1.42.2.27.8.1.31
547       NAME 'pwdMaxLength'
548       EQUALITY integerMatch
549       SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
550       SINGLE-VALUE )
551         </artwork></figure>
552   </section>
553
554
555   <section title="pwdExpireWarning">
556
557    <t>This attribute specifies the maximum number of seconds before a
558    password is due to expire that expiration warning messages will be
559    returned to an authenticating user.</t>
560
561    <t>If this attribute is not present, or if the value is 0 no warnings
562    will be returned.  If not 0, the value must be smaller than the value
563    of the pwdMaxAge attribute.</t>
564
565         <figure><artwork>
566       ( 1.3.6.1.4.1.42.2.27.8.1.7
567       NAME 'pwdExpireWarning'
568       EQUALITY integerMatch
569       SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
570       SINGLE-VALUE )
571         </artwork></figure>
572   </section>
573
574
575   <section title="pwdGraceAuthNLimit">
576
577    <t>This attribute specifies the number of times an expired password can
578    be used to authenticate.  If this attribute is not present or if the
579    value is 0, authentication will fail.</t>
580
581         <figure><artwork>
582       ( 1.3.6.1.4.1.42.2.27.8.1.8
583       NAME 'pwdGraceAuthNLimit'
584       EQUALITY integerMatch
585       SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
586       SINGLE-VALUE )
587         </artwork></figure>
588   </section>
589
590
591   <section title="pwdGraceExpiry">
592
593    <t>This attribute specifies the number of seconds the grace
594    authentications are valid. If this attribute is not present
595    or if the value is 0, there is no time limit on the grace
596    authentications.</t>
597
598         <figure><artwork>
599       ( 1.3.6.1.4.1.42.2.27.8.1.30
600       NAME 'pwdGraceExpire'
601       EQUALITY integerMatch
602       SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
603       SINGLE-VALUE )
604         </artwork></figure>
605   </section>
606
607
608   <section title="pwdLockout">
609
610    <t>This attribute indicates, when its value is "TRUE", that the password
611    may not be used to authenticate after a specified number of
612    consecutive failed bind attempts.  The maximum number of consecutive
613    failed bind attempts is specified in pwdMaxFailure.</t>
614
615    <t>If this attribute is not present, or if the value is "FALSE", the
616    password may be used to authenticate when the number of failed bind
617    attempts has been reached.</t>
618
619         <figure><artwork>
620       ( 1.3.6.1.4.1.42.2.27.8.1.9
621       NAME 'pwdLockout'
622       EQUALITY booleanMatch
623       SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
624       SINGLE-VALUE )
625         </artwork></figure>
626   </section>
627
628
629   <section title="pwdLockoutDuration">
630
631    <t>This attribute holds the number of seconds that the password cannot
632    be used to authenticate due to too many failed bind attempts.  If
633    this attribute is not present, or if the value is 0 the password
634    cannot be used to authenticate until reset by a password
635    administrator.</t>
636
637         <figure><artwork>
638       ( 1.3.6.1.4.1.42.2.27.8.1.10
639       NAME 'pwdLockoutDuration'
640       EQUALITY integerMatch
641       SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
642       SINGLE-VALUE )
643         </artwork></figure>
644   </section>
645
646
647   <section title="pwdMaxFailure">
648
649    <t>This attribute specifies the number of consecutive failed bind
650    attempts after which the password may not be used to authenticate.
651    If this attribute is not present, or if the value is 0, this policy
652    is not checked, and the value of pwdLockout will be ignored.</t>
653
654         <figure><artwork>
655       ( 1.3.6.1.4.1.42.2.27.8.1.11
656       NAME 'pwdMaxFailure'
657       EQUALITY integerMatch
658       SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
659       SINGLE-VALUE )
660         </artwork></figure>
661   </section>
662
663
664   <section title="pwdFailureCountInterval">
665
666    <t>This attribute holds the number of seconds after which the password
667    failures are purged from the failure counter, even though no
668    successful authentication occurred.</t>
669
670    <t>If this attribute is not present, or if its value is 0, the failure
671    counter is only reset by a successful authentication.</t>
672
673         <figure><artwork>
674       ( 1.3.6.1.4.1.42.2.27.8.1.12
675       NAME 'pwdFailureCountInterval'
676       EQUALITY integerMatch
677       SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
678       SINGLE-VALUE )
679         </artwork></figure>
680   </section>
681
682
683   <section title="pwdMustChange">
684
685    <t>This attribute specifies with a value of "TRUE" that users must
686    change their passwords when they first bind to the directory after a
687    password is set or reset by a password administrator.  If this
688    attribute is not present, or if the value is "FALSE", users are not
689    required to change their password upon binding after the password
690    administrator sets or resets the password.  This attribute is not set
691    due to any actions specified by this document, it is typically set by
692    a password administrator after resetting a user's password.</t>
693
694         <figure><artwork>
695       ( 1.3.6.1.4.1.42.2.27.8.1.13
696       NAME 'pwdMustChange'
697       EQUALITY booleanMatch
698       SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
699       SINGLE-VALUE )
700         </artwork></figure>
701   </section>
702
703  
704   <section title="pwdAllowUserChange">
705
706    <t>This attribute indicates whether users can change their own
707    passwords, although the change operation is still subject to access
708    control.  If this attribute is not present, a value of "TRUE" is
709    assumed.  This attribute is intended to be used in the absence of an
710    access control mechanism.</t>
711
712         <figure><artwork>
713       ( 1.3.6.1.4.1.42.2.27.8.1.14
714       NAME 'pwdAllowUserChange'
715       EQUALITY booleanMatch
716       SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
717       SINGLE-VALUE )
718         </artwork></figure>
719   </section>
720
721
722   <section title="pwdSafeModify">
723
724    <t>This attribute specifies whether or not the existing password must be
725    sent along with the new password when being changed.  If this
726    attribute is not present, a "FALSE" value is assumed.</t>
727
728         <figure><artwork>
729       ( 1.3.6.1.4.1.42.2.27.8.1.15
730       NAME 'pwdSafeModify'
731       EQUALITY booleanMatch
732       SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
733       SINGLE-VALUE )
734         </artwork></figure>
735   </section>
736
737
738   <section title="pwdMinDelay">
739
740    <t>This attribute specifies the number of seconds to delay responding
741    to the first failed authentication attempt. If this attribute is not
742    set or is 0, no delays will be used. pwdMaxDelay must also be specified
743    if pwdMinDelay is set.</t>
744
745         <figure><artwork>
746       ( 1.3.6.1.4.1.42.2.27.8.1.24
747       NAME 'pwdMinDelay'
748       EQUALITY integerMatch
749       SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
750       SINGLE-VALUE )
751         </artwork></figure>
752   </section>
753
754
755   <section title="pwdMaxDelay">
756
757    <t>This attribute specifies the maximum number of seconds to delay
758    when responding to a failed authentication attempt. The time specified
759    in pwdMinDelay is used as the starting time and is then doubled on
760    each failure until the delay time is greater than or equal to pwdMaxDelay
761    (or a successful authentication occurs, which resets the failure counter).
762    pwdMinDelay must be specified if pwdMaxDelay is set.</t>
763
764         <figure><artwork>
765       ( 1.3.6.1.4.1.42.2.27.8.1.25
766       NAME 'pwdMaxDelay'
767       EQUALITY integerMatch
768       SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
769       SINGLE-VALUE )
770         </artwork></figure>
771   </section>
772
773
774   <section title="pwdMaxIdle">
775
776    <t>This attribute specifies the number of seconds an account may
777    remain unused before it becomes locked. If this attribute is not
778    set or is 0, no check is performed.</t>
779
780         <figure><artwork>
781       ( 1.3.6.1.4.1.42.2.27.8.1.26
782       NAME 'pwdMaxIdle'
783       EQUALITY integerMatch
784       SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
785       SINGLE-VALUE )
786         </artwork></figure>
787   </section>
788  </section>
789
790
791
792  <section title="Attribute Types for Password Policy State Information">
793
794    <t>Password policy state information must be maintained for each user.
795    The information is located in each user entry as a set of operational
796    attributes.  These operational attributes are: pwdChangedTime,
797    pwdAccountLockedTime, pwdFailureTime, pwdHistory, pwdGraceUseTime,
798    pwdReset, pwdPolicySubEntry, pwdStartTime, pwdEndTime, pwdLastSuccess.</t>
799
800   <section title="Password Policy State Attribute Option">
801
802    <t>Since the password policy could apply to several attributes used to
803    store passwords, each of the above operational attributes must have
804    an option to specify which pwdAttribute it applies to.  The password
805    policy option is defined as the following:</t>
806
807    <t>
808    pwd-&lt;passwordAttribute></t>
809
810    <t>where passwordAttribute is a string following the OID syntax
811    (1.3.6.1.4.1.1466.115.121.1.38).  The attribute type descriptor
812    (short name) MUST be used.</t>
813
814    <t>For example, if the pwdPolicy object has for pwdAttribute
815    "userPassword" then the pwdChangedTime operational attribute, in a
816    user entry, will be:</t>
817
818    <t>pwdChangedTime;pwd-userPassword: 20000103121520Z</t>
819
820    <t>This attribute option follows sub-typing semantics.  If a client
821    requests a password policy state attribute to be returned in a search
822    operation, and does not specify an option, all subtypes of that
823    policy state attribute are returned.</t>
824   </section>
825
826   <section title="pwdChangedTime">
827
828    <t>This attribute specifies the last time the entry's password was
829    changed.  This is used by the password expiration policy.  If this
830    attribute does not exist, the password will never expire.</t>
831
832         <figure><artwork>
833       ( 1.3.6.1.4.1.42.2.27.8.1.16
834       NAME 'pwdChangedTime'
835       DESC 'The time the password was last changed'
836       EQUALITY generalizedTimeMatch
837       ORDERING generalizedTimeOrderingMatch
838       SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
839       SINGLE-VALUE
840       NO-USER-MODIFICATION
841       USAGE directoryOperation )
842         </artwork></figure>
843   </section>
844
845
846   <section title="pwdAccountLockedTime">
847
848    <t>This attribute holds the time that the user's account was locked.  A
849    locked account means that the password may no longer be used to
850    authenticate.  A 000001010000Z value means that the account has been
851    locked permanently, and that only a password administrator can unlock
852    the account.</t>
853
854         <figure><artwork>
855       ( 1.3.6.1.4.1.42.2.27.8.1.17
856       NAME 'pwdAccountLockedTime'
857       DESC 'The time an user account was locked'
858       EQUALITY generalizedTimeMatch
859       ORDERING generalizedTimeOrderingMatch
860       SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
861       SINGLE-VALUE
862       NO-USER-MODIFICATION
863       USAGE directoryOperation )
864         </artwork></figure>
865   </section>
866
867
868   <section title="pwdFailureTime">
869
870    <t>This attribute holds the timestamps of the consecutive authentication
871    failures.</t>
872
873         <figure><artwork>
874       ( 1.3.6.1.4.1.42.2.27.8.1.19
875       NAME 'pwdFailureTime'
876       DESC 'The timestamps of the last consecutive authentication
877       failures'
878       EQUALITY generalizedTimeMatch
879       ORDERING generalizedTimeOrderingMatch
880       SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
881       NO-USER-MODIFICATION
882       USAGE directoryOperation )
883         </artwork></figure>
884   </section>
885
886
887   <section title="pwdHistory">
888
889    <t>This attribute holds a history of previously used passwords.  Values
890    of this attribute are transmitted in string format as given by the
891    following ABNF:</t>
892
893         <figure><artwork>
894    pwdHistory = time "#" syntaxOID "#" length "#" data
895
896    time       = GeneralizedTime
897
898    syntaxOID  = numericoid    ; the string representation of the
899                               ; dotted-decimal OID that defines the
900                               ; syntax used to store the password.
901
902    length     = number        ; the number of octets in data.
903
904    data       = &lt;octets representing the password in the format
905                  specified by syntaxOID&gt;.
906         </artwork>
907         <postamble>GeneralizedTime is specified in 3.3.13 of <xref target="RFC4517"/>. numericoid and number are specified in 1.4 of <xref target="RFC4512"/>.</postamble>
908         </figure>
909
910    <t>This format allows the server to store, and transmit a history of
911    passwords that have been used.  In order for equality matching to
912    function properly, the time field needs to adhere to a consistent
913    format.  For this purpose, the time field MUST be in GMT format.</t>
914
915         <figure><artwork>
916       ( 1.3.6.1.4.1.42.2.27.8.1.20
917       NAME 'pwdHistory'
918       DESC 'The history of user s passwords'
919       EQUALITY octetStringMatch
920       SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
921       NO-USER-MODIFICATION
922       USAGE directoryOperation )
923         </artwork></figure>
924   </section>
925
926
927   <section title="pwdGraceUseTime">
928
929    <t>This attribute holds the timestamps of grace authentications after a
930    password has expired.</t>
931
932         <figure><artwork>
933       ( 1.3.6.1.4.1.42.2.27.8.1.21
934       NAME 'pwdGraceUseTime'
935       DESC 'The timestamps of the grace authentication after the
936       password has expired'
937       EQUALITY generalizedTimeMatch
938       SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
939       NO-USER-MODIFICATION
940       USAGE directoryOperation )
941         </artwork></figure>
942   </section>
943
944
945   <section title="pwdReset">
946
947    <t>This attribute holds a flag to indicate (when TRUE) that the password
948    has been updated by the password administrator and must be changed by
949    the user.</t>
950
951         <figure><artwork>
952       ( 1.3.6.1.4.1.42.2.27.8.1.22
953       NAME 'pwdReset'
954       DESC 'The indication that the password has been reset'
955       EQUALITY booleanMatch
956       SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
957       SINGLE-VALUE
958       USAGE directoryOperation )
959         </artwork></figure>
960   </section>
961
962
963   <section title="pwdPolicySubentry">
964
965    <t>This attribute points to the pwdPolicy subentry in effect for this
966    object.</t>
967
968         <figure><artwork>
969       ( 1.3.6.1.4.1.42.2.27.8.1.23
970       NAME 'pwdPolicySubentry'
971       DESC 'The pwdPolicy subentry in effect for this object'
972       EQUALITY distinguishedNameMatch
973       SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
974       SINGLE-VALUE
975       NO-USER-MODIFICATION
976       USAGE directoryOperation )
977         </artwork></figure>
978   </section>
979
980
981   <section title="pwdStartTime">
982
983    <t>This attribute specifies the time the entry's password becomes
984    valid for authentication. Authentication attempts made before this
985    time will fail. If this attribute does not exist, then no restriction
986    applies.</t>
987
988         <figure><artwork>
989       ( 1.3.6.1.4.1.42.2.27.8.1.27
990       NAME 'pwdStartTime'
991       DESC 'The time the password becomes enabled'
992       EQUALITY generalizedTimeMatch
993       ORDERING generalizedTimeOrderingMatch
994       SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
995       SINGLE-VALUE
996       NO-USER-MODIFICATION
997       USAGE directoryOperation )
998         </artwork></figure>
999   </section>
1000
1001
1002   <section title="pwdEndTime">
1003
1004    <t>This attribute specifies the time the entry's password becomes
1005    invalid for authentication.  Authentication attempts made after this
1006    time will fail, regardless of expiration or grace settings.
1007    If this attribute does not exist, then this restriction
1008    does not apply.</t>
1009
1010         <figure><artwork>
1011       ( 1.3.6.1.4.1.42.2.27.8.1.28
1012       NAME 'pwdEndTime'
1013       DESC 'The time the password becomes disabled'
1014       EQUALITY generalizedTimeMatch
1015       ORDERING generalizedTimeOrderingMatch
1016       SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
1017       SINGLE-VALUE
1018       NO-USER-MODIFICATION
1019       USAGE directoryOperation )
1020         </artwork></figure>
1021
1022         <t>Note that pwdStartTime may be set to a time greater than or equal
1023         to pwdEndTime; this simply disables the account.</t>
1024   </section>
1025
1026   <section title="pwdLastSuccess">
1027
1028    <t>This attribute holds the timestamp of the last successful
1029    authentication.</t>
1030
1031         <figure><artwork>
1032       ( 1.3.6.1.4.1.42.2.27.8.1.29
1033       NAME 'pwdLastSuccess'
1034       DESC 'The timestamp of the last successful authentication'
1035       EQUALITY generalizedTimeMatch
1036       ORDERING generalizedTimeOrderingMatch
1037       SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
1038       SINGLE-VALUE
1039       NO-USER-MODIFICATION
1040       USAGE directoryOperation )
1041         </artwork></figure>
1042   </section>
1043  </section>
1044 </section>
1045
1046
1047 <section title="Controls used for Password Policy">
1048
1049    <t>This section details the controls used while enforcing password
1050    policy.  A request control is defined that is sent by a client with a
1051    request operation in order to elicit a response control.  The
1052    response control contains various warnings and errors associated with
1053    password policy.</t>
1054
1055    <t>{TODO: add a note about advertisement and discovery}</t>
1056
1057  <section title="Request Control">
1058
1059    <t>This control MAY be sent with any LDAP request message in order to
1060    convey to the server that this client is aware of, and can process
1061    the response control described in this document.  When a server
1062    receives this control, it will return the response control when
1063    appropriate and with the proper data.</t>
1064
1065    <t>The controlType is 1.3.6.1.4.1.42.2.27.8.5.1 and the criticality may
1066    be TRUE or FALSE.  There is no controlValue.</t>
1067  </section>
1068
1069  <section title="Response Control">
1070
1071    <t>If the client has sent a passwordPolicyRequest control, the server
1072    (when solicited by the inclusion of the request control) sends this
1073    control with the following operation responses: bindResponse,
1074    modifyResponse, addResponse, compareResponse and possibly
1075    extendedResponse, to inform of various conditions, and MAY be sent
1076    with other operations (in the case of the changeAfterReset error).
1077    The controlType is 1.3.6.1.4.1.42.2.27.8.5.1 and the controlValue is
1078    the BER encoding of the following type:</t>
1079
1080         <figure><artwork>
1081    PasswordPolicyResponseValue ::= SEQUENCE {
1082       warning [0] CHOICE {
1083          timeBeforeExpiration [0] INTEGER (0 .. maxInt),
1084          graceAuthNsRemaining [1] INTEGER (0 .. maxInt) } OPTIONAL,
1085       error   [1] ENUMERATED {
1086          passwordExpired             (0),
1087          accountLocked               (1),
1088          changeAfterReset            (2),
1089          passwordModNotAllowed       (3),
1090          mustSupplyOldPassword       (4),
1091          insufficientPasswordQuality (5),
1092          passwordTooShort            (6),
1093          passwordTooYoung            (7),
1094          passwordInHistory           (8) } OPTIONAL }
1095         </artwork></figure>
1096
1097    <t>The timeBeforeExpiration warning specifies the number of seconds
1098    before a password will expire.  The graceAuthNsRemaining warning
1099    specifies the remaining number of times a user will be allowed to
1100    authenticate with an expired password.  The passwordExpired error
1101    signifies that the password has expired and must be reset.  The
1102    changeAfterReset error signifies that the password must be changed
1103    before the user will be allowed to perform any operation other than
1104    bind and modify.  The passwordModNotAllowed error is set when a user
1105    is restricted from changing her password.  The
1106    insufficientPasswordQuality error is set when a password doesn't pass
1107    quality checking.  The passwordTooYoung error is set if the age of
1108    the password to be modified is not yet old enough.</t>
1109
1110    <t>Typically, only either a warning or an error will be encoded though
1111    there may be exceptions.  For example, if the user is required to
1112    change a password after the password administrator set it, and the
1113    password will expire in a short amount of time, the control may
1114    include the timeBeforeExpiration warning and the changeAfterReset
1115    error.</t>
1116  </section>
1117 </section>
1118
1119
1120 <section title="Policy Decision Points">
1121
1122    <t>Following are a number of procedures used to make policy decisions.
1123    These procedures are typically performed by the server while
1124    processing an operation.</t>
1125
1126    <t>The following sections contain detailed instructions that refer to
1127    attributes of the pwdPolicy object class.  When doing so, the
1128    attribute of the pwdPolicy object that governs the entry being
1129    discussed is implied.</t>
1130
1131  <section anchor="lockcheck" title="Locked Account Check">
1132
1133    <t>A status of true is returned to indicate that the account is locked
1134    if any of these conditions are met:
1135
1136         <list style="symbols">
1137    <t>The value of the pwdAccountLockedTime attribute is 000001010000Z.</t>
1138
1139    <t>The current time is less than the value of the pwdStartTime
1140    attribute.</t>
1141
1142    <t>The current time is greater than or equal to the value of the
1143    pwdEndTime attribute.</t>
1144
1145    <t>The current time is greater than or equal to the value of the
1146    pwdLastSuccess attribute added to the value of the pwdMaxIdle
1147    attribute.</t>
1148
1149    <t>The current time is less than the value of the
1150       pwdAccountLockedTime attribute added to the value of the
1151       pwdLockoutDuration.</t>
1152         </list></t>
1153
1154    <t>Otherwise a status of false is returned.</t>
1155  </section>
1156
1157
1158  <section anchor="changenow" title="Password Must be Changed Now Check">
1159
1160    <t>A status of true is returned to indicate that the password must be
1161    changed if all of these conditions are met:
1162
1163         <list style="symbols">
1164         <t>The pwdMustChange attribute is set to TRUE.</t>
1165
1166         <t>The pwdReset attribute is set to TRUE.</t>
1167         </list></t>
1168
1169    <t>Otherwise a status of false is returned.</t>
1170  </section>
1171
1172  <section anchor="expcheck" title="Password Expiration Check">
1173
1174    <t>A status of true is returned indicating that the password has expired
1175    if the current time minus the value of pwdChangedTime is greater than
1176    the value of the pwdMaxAge.</t>
1177
1178    <t>Otherwise, a status of false is returned.</t>
1179  </section>
1180
1181  
1182  <section anchor="gracecheck" title="Remaining Grace AuthN Check">
1183
1184    <t>If the pwdGraceExpiry attribute is present, and the current time is
1185    greater than the password expiration time plus the pwdGraceExpiry
1186    value, zero is returned.</t>
1187
1188    <t>If the pwdGraceUseTime attribute is present, the number of values in
1189    that attribute subtracted from the value of pwdGraceAuthNLimit is
1190    returned.  Otherwise zero is returned.  A positive result specifies
1191    the number of remaining grace authentications.</t>
1192  </section>
1193
1194
1195  <section anchor="expwarn" title="Time Before Expiration Check">
1196
1197    <t>If the pwdExpireWarning attribute is not present a zero status is
1198    returned.  Otherwise the following steps are followed:</t>
1199
1200    <t>Subtract the time stored in pwdChangedTime from the current time to
1201    arrive at the password's age.  If the password's age is greater than
1202    than the value of the pwdMaxAge attribute, a zero status is returned.
1203    Subtract the value of the pwdExpireWarning attribute from the value
1204    of the pwdMaxAge attribute to arrive at the warning age.  If the
1205    password's age is equal to or greater than the warning age, the value
1206    of pwdMaxAge minus the password's age is returned.</t>
1207  </section>
1208
1209  <section anchor="intruderlock" title="Intruder Lockout Check">
1210
1211    <t>A status of true indicating that an intruder has been detected is
1212    returned if the following conditions are met:
1213
1214         <list style="symbols">
1215         <t>The pwdLockout attribute is TRUE.</t>
1216
1217         <t>The number of values in the pwdFailureTime attribute that are
1218       younger than pwdFailureCountInterval is greater or equal to the
1219       pwdMaxFailure attribute.</t>
1220         </list></t>
1221
1222    <t>Otherwise a status of false is returned.</t>
1223
1224    <t>While performing this check, values of pwdFailureTime that are old by
1225    more than pwdFailureCountInterval are purged and not counted.</t>
1226  </section>
1227
1228
1229  <section anchor="delaycheck" title="Intruder Delay Check">
1230
1231    <t>If the pwdMinDelay attribute is 0 or not set, zero is returned.</t>
1232
1233    <t>Otherwise, a delay time is computed based on the number of values
1234    in the pwdFailureTime attribute. If the computed value is greater
1235    than the pwdMaxDelay attribute, the pwdMaxDelay value is returned.</t>
1236
1237    <t>While performing this check, values of pwdFailureTime that are old by
1238    more than pwdFailureCountInterval are purged and not counted.</t>
1239  </section>
1240
1241  <section anchor="tooyoung" title="Password Too Young Check">
1242
1243    <t>If the <xref target="changenow"/> check returned true then this
1244    check will return false, to allow the password to be changed.</t>
1245
1246    <t>A status of true indicating that not enough time has passed since the
1247    password was last updated is returned if:
1248
1249         <list style="symbols">
1250         <t>The value of pwdMinAge is non-zero and pwdChangedTime is present.</t>
1251
1252         <t>The value of pwdMinAge is greater than the current time minus the
1253       value of pwdChangedTime.</t>
1254         </list></t>
1255
1256    <t>Otherwise a false status is returned.</t>
1257  </section>
1258 </section>
1259
1260 <section anchor="server_enforce" title="Server Policy Enforcement Points">
1261
1262    <t>The server SHOULD enforce that the password attribute subject to a
1263    password policy as defined in this document, contains one and only
1264    one password value.</t>
1265
1266    <t>Note: The case where a single password value is stored in multiple
1267    formats simultaneously is still considered to be only one
1268    password value.</t>
1269
1270    <t>The scenarios in the following operations assume that the client has
1271    attached a passwordPolicyRequest control to the request message of
1272    the operation.  In the event that the passwordPolicyRequest control
1273    was not sent, no passwordPolicyResponse control is returned.  All
1274    other instructions remain the same.</t>
1275
1276    <t>For successfully completed operations, unless otherwise stated, no
1277    passwordPolicyResponse control is returned.</t>
1278
1279  <section title="Password-based Authentication">
1280
1281    <t>This section contains the policy enforcement rules and policy data
1282    updates used while validating a password.  Operations that validate
1283    passwords include, but are not limited to, the Bind operation where
1284    the simple choice specifies a password, and the Compare operation
1285    where the attribute being compared holds a password.  Note that while
1286    the Compare operation does not authenticate a user to the LDAP
1287    server, it may be used by an external application for purposes of
1288    authentication.</t>
1289
1290   <section title="Fail if the account is locked">
1291
1292    <t>If the account is locked as specified in <xref target="lockcheck"/>, the server
1293    fails the operation with an appropriate resultCode (i.e.
1294    invalidCredentials (49) in the case of a bind operation, compareFalse
1295    (5) in the case of a compare operation, etc.).  The server MAY set
1296    the error: accountLocked (1) in the passwordPolicyResponse in the
1297    controls field of the message.</t>
1298   </section>
1299
1300
1301   <section title="Validated Password Procedures">
1302
1303    <t>If the validation operation indicates that the password validated,
1304    these procedures are followed in order:</t>
1305
1306    <section title="Policy state updates">
1307
1308    <t>Delete the pwdFailureTime and pwdAccountLockedTime attributes.</t>
1309
1310    <t>Set the value of the pwdLastSuccess attribute to the current time.</t>
1311
1312    <t>Note: setting pwdLastSuccess is optional, but it is required if
1313    the policy has pwdMaxIdle defined.</t>
1314    </section>
1315
1316    <section title="Password must be changed now">
1317
1318    <t>If the decision in <xref target="changenow"/> returns true, the server sends to the
1319    client a response with an appropriate successful resultCode (i.e.
1320    success (0), compareTrue (6), etc.), and includes the
1321    passwordPolicyResponse in the controls field of the bindResponse
1322    message with the warning: changeAfterReset specified.</t>
1323
1324    <t>For bind, the server MUST then disallow all operations issued by this
1325    user except modify password, bind, unbind, abandon and StartTLS
1326    extended operation.</t>
1327    </section>
1328
1329    <section title="Expired password">
1330
1331    <t>If the password has expired as per <xref target="expcheck"/>, the server either
1332    returns a success or failure based on the state of grace
1333    authentications.</t>
1334
1335     <section title="Remaining Grace Authentications">
1336
1337    <t>If there are remaining grace authentications as per <xref target="gracecheck"/>, the
1338    server adds a new value with the current time in pwdGraceUseTime.
1339    Then it sends to the client a response with an appropriate successful
1340    resultCode (i.e. success (0), compareTrue (6), etc.), and includes
1341    the passwordPolicyResponse in the controls field of the response
1342    message with the warning: graceAuthNsRemaining choice set to the
1343    number of grace authentications left.</t>
1344
1345    <t>Implementor's note: The system time of the host machine may be more
1346    granular than is needed to ensure unique values of this attribute.
1347    It is recommended that a mechanism is used to ensure unique
1348    generalized time values.  The fractional seconds field may be used
1349    for this purpose.</t>
1350     </section>
1351
1352
1353     <section title="No Remaining Grace Authentications">
1354
1355    <t>If there are no remaining grace authentications, the server fails the
1356    operation with an appropriate resultCode (invalidCredentials (49),
1357    compareFalse (5), etc.), and includes the passwordPolicyResponse in
1358    the controls field of the bindResponse message with the error:
1359    passwordExpired (0) set.</t>
1360     </section>
1361    </section>
1362
1363    <section title="Expiration Warning">
1364
1365    <t>If the result of <xref target="expwarn"/> is a positive number, the server sends
1366    to the client a response with an appropriate successful resultCode
1367    (i.e. success (0), compareTrue (6), etc.), and includes the
1368    passwordPolicyResponse in the controls field of the bindResponse
1369    message with the warning: timeBeforeExiration set to the value as
1370    described above.  Otherwise, the server sends a successful response,
1371    and omits the passwordPolicyResponse.</t>
1372    </section>
1373   </section>
1374
1375   <section title="AuthN Failed Procedures">
1376
1377    <t>If the authentication process indicates that the password failed
1378    validation due to invalid credentials, these procedures are followed:</t>
1379
1380    <section title="Policy state update">
1381
1382    <t>Add the current time as a value of the pwdFailureTime attribute.</t>
1383
1384    <t>Implementor's note: The system time of the host machine may be more
1385    granular than is needed to ensure unique values of this attribute.
1386    It is recommended that a mechanism is used to ensure unique
1387    generalized time values.  The fractional seconds field may be used
1388    for this purpose.</t>
1389     </section>
1390
1391
1392    <section title="Handle Intruder Detection">
1393
1394    <t>If the check in <xref target="intruderlock"/> returns a true state, the server locks
1395    the account by setting the value of the pwdAccountLockedTime
1396    attribute to the current time.  After locking the account, the server
1397    fails the operation with an appropriate resultCode
1398    (invalidCredentials (49), compareFalse (5), etc.), and includes the
1399    passwordPolicyResponse in the controls field of the message with the
1400    error: accountLocked (1).</t>
1401
1402    <t>If the check in <xref target="delaycheck"/> returns a non-zero value,
1403    the server waits that number of seconds before sending the authentication
1404    response back to the client.</t>
1405    </section>
1406   </section>
1407  </section>
1408
1409  <section title="Password Update Operations">
1410
1411    <t>Because the password is stored in an attribute, various operations
1412    (like add and modify) may be used to create or update a password.
1413    But some alternate mechanisms have been defined or may be defined,
1414    such as the LDAP Password Modify Extended Operation <xref target="RFC3062"/>.</t>
1415
1416    <t>While processing a password update, the server performs the following
1417    steps:</t>
1418
1419   <section title="Safe Modification">
1420
1421    <t>If pwdSafeModify is set to TRUE and if there is an existing password
1422    value, the server ensures that the password update operation includes
1423    the user's existing password.</t>
1424
1425    <t>When the LDAP modify operation is used to modify a password, this is
1426    done by specifying both a delete action and an add or replace action,
1427    where the delete action specifies the existing password, and the add
1428    or replace action specifies the new password.  Other password update
1429    operations SHOULD employ a similar mechanism.  Otherwise this policy
1430    will fail.</t>
1431
1432    <t>If the existing password is not specified, the server does not
1433    process the operation and sends the appropriate response message to
1434    the client with the resultCode: insufficientAccessRights (50), and
1435    includes the passwordPolicyResponse in the controls field of the
1436    response message with the error: mustSupplyOldPassword (4).</t>
1437   </section>
1438
1439   <section title="Change After Reset">
1440
1441    <t>If the decision in <xref target="changenow"/> returns true, the server ensures that
1442    the password update operation contains no modifications other than
1443    the modification of the password attribute.  If other modifications
1444    exist, the server sends a response message to the client with the
1445    resultCode: insufficientAccessRights (50), and includes the
1446    passwordPolicyResponse in the controls field of the response message
1447    with the error: changeAfterReset (2).</t>
1448   </section>
1449
1450   <section title="Rights Check">
1451
1452    <t>Check to see whether the bound identity has sufficient rights to
1453    update the password.  If the bound identity is a user changing its
1454    own password, this MAY be done by checking the pwdAllowUserChange
1455    attribute or using an access control mechanism.  The determination of
1456    this is implementation specific.  If the user is not allowed to
1457    update her password, the server sends a response message to the
1458    client with the resultCode: insufficientAccessRights (50), and
1459    includes the passwordPolicyResponse in the controls field of the
1460    response message with the error: passwordModNotAllowed (3).</t>
1461   </section>
1462
1463   <section title="Too Early to Update">
1464
1465    <t>If the check in <xref target="tooyoung"/> results in a true status The server sends
1466    a response message to the client with the resultCode:
1467    constraintViolation (19), and includes the passwordPolicyResponse in
1468    the controls field of the response message with the error:
1469    passwordTooYoung (7).</t>
1470   </section>
1471
1472   <section title="Password Quality">
1473
1474    <t>Check the value of the pwdCheckQuality attribute.  If the value is
1475    non-zero, the server:
1476
1477         <list style="symbols">
1478    <t>Ensure that the password meets the quality criteria enforced by
1479       the server.  This enforcement is implementation specific.
1480       If the server is unable to check the quality (due to a hashed
1481       password or otherwise), the value of pwdCheckQuality is evaluated.
1482       If the value is 1, operation continues.  If the value is 2, the
1483       server sends a response message to the client with the resultCode:
1484       constraintViolation (19), and includes the passwordPolicyResponse
1485       in the controls field of the response message with the error:
1486       insufficientPasswordQuality (5).<vspace blankLines="1"/>
1487       If the server is able to check the password quality, and the check
1488       fails, the server sends a response message to the client with the
1489       resultCode: constraintViolation (19), and includes the
1490       passwordPolicyResponse in the controls field of the response
1491       message with the error: insufficientPasswordQuality (5).</t>
1492
1493    <t>checks the value of the pwdMinLength attribute.  If the value is
1494       non-zero, it ensures that the new password is of at least the
1495       minimum length.<vspace blankLines="1"/>
1496       If the server is unable to check the length (due to a hashed
1497       password or otherwise), the value of pwdCheckQuality is evaluated.
1498       If the value is 1, operation continues.  If the value is 2, the
1499       server sends a response message to the client with the resultCode:
1500       constraintViolation (19), and includes the passwordPolicyResponse
1501       in the controls field of the response message with the error:
1502       passwordTooShort (6).<vspace blankLines="1"/>
1503       If the server is able to check the password length, and the check
1504       fails, the server sends a response message to the client with the
1505       resultCode: constraintViolation (19), and includes the
1506       passwordPolicyResponse in the controls field of the response
1507       message with the error: passwordTooShort (6).</t>
1508         </list></t>
1509   </section>
1510
1511
1512   <section title="Invalid Reuse">
1513
1514    <t>If pwdInHistory is present and its value is non-zero, the server
1515    checks whether this password exists in the entry's pwdHistory
1516    attribute or in the current password attribute.  If the password does
1517    exist in the pwdHistory attribute or in the current password
1518    attribute, the server sends a response message to the client with the
1519    resultCode: constraintViolation (19), and includes the
1520    passwordPolicyResponse in the controls field of the response message
1521    with the error: passwordInHistory (8).</t>
1522   </section>
1523
1524   <section title="Policy State Updates">
1525
1526    <t>If the steps have completed without causing an error condition, the
1527    server performs the following steps in order to update the necessary
1528    password policy state attributes:</t>
1529
1530    <t>If the value of either pwdMaxAge or pwdMinAge is non-zero, the server
1531    updates the pwdChangedTime attribute on the entry to the current
1532    time.</t>
1533
1534    <t>If the value of pwdInHistory is non-zero, the server adds the
1535    previous password (if one existed) to the pwdHistory attribute.  If
1536    the number of attributes held in the pwdHistory attribute exceeds the
1537    value of pwdInHistory, the server removes the oldest excess
1538    passwords.</t>
1539
1540    <t>If the value the pwdMustChange is TRUE and the modification is
1541    performed by a password administrator, then the pwdReset attribute is
1542    set to TRUE.  Otherwise, the pwdReset is removed from the user's
1543    entry if it exists.</t>
1544
1545    <t>The pwdFailureTime and pwdGraceUseTime attributes is removed from the
1546    user's entry if they exist.</t>
1547   </section>
1548  </section>
1549
1550  <section title="Other Operations">
1551
1552    <t>For operations other than bind, password update, unbind, abandon or
1553    StartTLS, if the decision in <xref target="changenow"/> returns true, the server
1554    sends a response message to the client with the resultCode:
1555    insufficientAccessRights (50), and includes the
1556    passwordPolicyResponse in the controls field of the response message
1557    with the error: changeAfterReset (2).</t>
1558  </section>
1559 </section>
1560
1561 <section anchor="client_enforce" title="Client Policy Enforcement Points">
1562
1563    <t>These sections illustrate possible scenarios for each LDAP operation
1564    and define the types of responses that identify those scenarios.</t>
1565
1566    <t>The scenarios in the following operations assume that the client
1567    attached a passwordPolicyRequest control to the request message of
1568    the operation, and thus may receive a passwordPolicyResponse control
1569    in the response message.  In the event that the passwordPolicyRequest
1570    control was not sent, no passwordPolicyResponse control is returned.
1571    All other instructions remain the same.</t>
1572
1573  <section title="Bind Operation">
1574
1575    <t>For every bind response received, the client checks the resultCode of
1576    the bindResponse and checks for a passwordPolicyResponse control to
1577    determine if any of the following conditions are true and MAY prompt
1578    the user accordingly.
1579
1580         <list style="symbols">
1581    <t>bindResponse.resultCode = insufficientAccessRights (50),
1582       passwordPolicyResponse.error = accountLocked (1): The password
1583       failure limit has been reached and the account is locked.  The
1584       user needs to retry later or contact the password administrator to
1585       reset the password.</t>
1586
1587    <t>bindResponse.resultCode = success (0),
1588       passwordPolicyResponse.error = changeAfterReset (2): The user is
1589       binding for the first time after the password administrator set
1590       the password.  In this scenario, the client SHOULD prompt the user
1591       to change his password immediately.</t>
1592
1593    <t>bindResponse.resultCode = success (0),
1594       passwordPolicyResponse.warning = graceAuthNsRemaining: The
1595       password has expired but there are remaining grace
1596       authentications.  The user needs to change it.</t>
1597
1598    <t>bindResponse.resultCode = invalidCredentials (49),
1599       passwordPolicyResponse.error = passwordExpired (0): The password
1600       has expired and there are no more grace authentications.  The user
1601       contacts the password administrator in order to have its password
1602       reset.</t>
1603
1604    <t>bindResponse.resultCode = success (0),
1605       passwordPolicyResponse.warning = timeBeforeExpiration: The user's
1606       password will expire in n number of seconds.</t>
1607         </list></t>
1608  </section>
1609
1610  <section title="Modify Operations">
1611
1612   <section title="Modify Request">
1613
1614    <t>If the application or client encrypts the password prior to sending
1615    it in a password modification operation (whether done through
1616    modifyRequest or another password modification mechanism), it SHOULD
1617    check the values of the pwdMinLength, and pwdCheckQuality attributes
1618    and SHOULD enforce these policies.</t>
1619   </section>
1620
1621   <section title="Modify Response">
1622
1623    <t>If the modifyRequest operation was used to change the password, or if
1624    another mechanism is used --such as an extendedRequest-- the
1625    modifyResponse or other appropriate response MAY contain information
1626    pertinent to password policy.  The client checks the resultCode of
1627    the response and checks for a passwordPolicyResponse control to
1628    determine if any of the following conditions are true and optionally
1629    notify the user of the condition.
1630
1631         <list style="symbols">
1632    <t>pwdModResponse.resultCode = insufficientAccessRights (50),
1633       passwordPolicyResponse.error = mustSupplyOldPassword (4): The user
1634       attempted to change her password without specifying the old
1635       password but the password policy requires this.</t>
1636
1637    <t>pwdModResponse.resultCode = insufficientAccessRights (50),
1638       passwordPolicyResponse.error = changeAfterReset (2): The user must
1639       change her password before submitting any other LDAP requests.</t>
1640
1641    <t>pwdModResponse.resultCode = insufficientAccessRights (50),
1642       passwordPolicyResponse.error = passwordModNotAllowed (3): The user
1643       doesn't have sufficient rights to change his password.</t>
1644
1645    <t>pwdModResponse.resultCode = constraintViolation (19),
1646       passwordPolicyResponse.error = passwordTooYoung (7): It is too
1647       soon after the last password modification to change the password.</t>
1648
1649    <t>pwdModResponse.resultCode = constraintViolation (19),
1650       passwordPolicyResponse.error = insufficientPasswordQuality (5):
1651       The password failed quality checking.</t>
1652
1653    <t>pwdModResponse.resultCode = constraintViolation (19),
1654       passwordPolicyResponse.error = passwordTooShort (6): The length of
1655       the password is too short.</t>
1656
1657    <t>pwdModResponse.resultCode = constraintViolation (19),
1658       passwordPolicyResponse.error = passwordInHistory (8): The password
1659       has already been used; the user must choose a different one.</t>
1660         </list></t>
1661   </section>
1662  </section>
1663
1664  <section title="Add Operation">
1665
1666    <t>If a password is specified in an addRequest, the client checks the
1667    resultCode of the addResponse and checks for a passwordPolicyResponse
1668    control to determine if any of the following conditions are true and
1669    may prompt the user accordingly.
1670
1671         <list style="symbols">
1672    <t>addResponse.resultCode = insufficientAccessRights (50),
1673       passwordPolicyResponse.error = passwordModNotAllowed (3): The user
1674       doesn't have sufficient rights to add this password.</t>
1675
1676    <t>addResponse.resultCode = constraintViolation (19),
1677       passwordPolicyResponse.error = insufficientPasswordQuality (5):
1678       The password failed quality checking.</t>
1679
1680    <t>addResponse.resultCode = constraintViolation (19),
1681       passwordPolicyResponse.error = passwordTooShort (6): The length of
1682       the password is too short.</t>
1683         </list></t>
1684  </section>
1685
1686
1687  <section title="Compare Operation">
1688
1689    <t>When a compare operation is used to compare a password, the client
1690    checks the resultCode of the compareResponse and checks for a
1691    passwordPolicyResponse to determine if any of the following
1692    conditions are true and MAY prompt the user accordingly.  These
1693    conditions assume that the result of the comparison was true.
1694
1695         <list style="symbols">
1696    <t>compareResponse.resultCode = compareFalse (5),
1697       passwordPolicyResponse.error = accountLocked (1): The password
1698       failure limit has been reached and the account is locked.  The
1699       user needs to retry later or contact the password administrator to
1700       reset the password.</t>
1701
1702    <t>compareResponse.resultCode = compareTrue (6),
1703       passwordPolicyResponse.warning = graceAuthNsRemaining: The
1704       password has expired but there are remaining grace
1705       authentications.  The user needs to change it.</t>
1706
1707    <t>compareResponse.resultCode = compareFalse (5),
1708       passwordPolicyResponse.error = passwordExpired (0): The password
1709       has expired and there are no more grace authentications.  The user
1710       must contact the password administrator to reset the password.</t>
1711
1712    <t>compareResponse.resultCode = compareTrue (6),
1713       passwordPolicyResponse.warning = timeBeforeExpiration: The user's
1714       password will expire in n number of seconds.</t>
1715         </list></t>
1716  </section>
1717
1718
1719  <section title="Other Operations">
1720
1721    <t>For operations other than bind, unbind, abandon or StartTLS, the
1722    client checks the result code and control to determine if
1723    the user needs to change the password immediately.
1724
1725         <list style="symbols">
1726    <t>&lt;Response>.resultCode = insufficientAccessRights (50),
1727       passwordPolicyResponse.error = changeAfterReset (2) : The user
1728           needs to change the password immediately.</t>
1729         </list></t>
1730  </section>
1731 </section>
1732
1733 <section anchor="admin" title="Administration of the Password Policy">
1734
1735    <t>{TODO: Need to define an administrativeRole (need OID).  Need to
1736    describe whether pwdPolicy admin areas can overlap}</t>
1737
1738    <t>A password policy is defined for a particular subtree of the DIT by
1739    adding to an LDAP subentry whose immediate superior is the root of
1740    the subtree, the pwdPolicy auxiliary object class.  The scope of the
1741    password policy is defined by the SubtreeSpecification attribute of
1742    the LDAP subentry as specified in <xref target="RFC3672"/>.</t>
1743
1744    <t>It is possible to define password policies for different password
1745    attributes within the same pwdPolicy entry, by specifying multiple
1746    values of the pwdAttribute.  But password policies could also be in
1747    separate sub entries as long as they are contained under the same
1748    LDAP subentry.</t>
1749
1750    <t>Only one policy may be in effect for a given password attribute
1751    in any entry. If multiple policies exist which overlap in the range
1752    of entries affected, the resulting behavior is undefined.</t>
1753
1754    <t>Modifying the password policy MUST NOT result in any change in users'
1755    entries to which the policy applies.</t>
1756
1757    <t>It SHOULD be possible to overwrite the password policy for one user
1758    by defining a new policy in a subentry of the user entry.</t>
1759
1760    <t>Each object that is controlled by password policy advertises the
1761    subentry that is being used to control its policy in its
1762    pwdPolicySubentry attribute.  Clients wishing to examine or manage
1763    password policy for an object may interrogate the pwdPolicySubentry
1764    for that object in order to arrive at the proper pwdPolicy subentry.</t>
1765 </section>
1766
1767 <section title="Password Policy and Replication">
1768
1769    <t>{TODO: This section needs to be changed to highlight the pitfalls of
1770    replication, suggest some implementation choices to overcome those
1771    pitfalls, but remove prescriptive language relating to the update of
1772    state information}</t>
1773
1774    <t>The pwdPolicy object defines the password policy for a portion of the
1775    DIT and MUST be replicated on all the replicas of this subtree, as
1776    any subentry would be, in order to have a consistent policy among all
1777    replicated servers.</t>
1778
1779    <t>The elements of the password policy that are related to the users are
1780    stored in the entry themselves as operational attributes.  As these
1781    attributes are subject to modifications even on a read-only replica,
1782    replicating them must be carefully considered.</t>
1783
1784    <t>The pwdChangedTime attribute MUST be replicated on all replicas, to
1785    allow expiration of the password.</t>
1786
1787    <t>The pwdReset attribute MUST be replicated on all replicas, to deny
1788    access to operations other than bind and modify password.</t>
1789
1790    <t>The pwdHistory attribute MUST be replicated to writable replicas.  It
1791    doesn't have to be replicated to a read-only replica, since the
1792    password will never be directly modified on this server.</t>
1793
1794    <t>The pwdAccountLockedTime, pwdFailureTime and pwdGraceUseTime
1795    attributes SHOULD be replicated to writable replicas, making the
1796    password policy global for all servers.  When the user entry is
1797    replicated to a read-only replica, these attributes SHOULD NOT be
1798    replicated.  This means that the number of failures, of grace
1799    authentications and the locking will take place on each replicated
1800    server.  For example, the effective number of failed attempts on a
1801    user password will be N x M (where N is the number of servers and M
1802    the value of pwdMaxFailure attribute).  Replicating these attributes
1803    to a read-only replica MAY reduce the number of tries globally but
1804    MAY also introduce some inconstancies in the way the password policy
1805    is applied.</t>
1806
1807    <t>Note: there are some situations where global replication of these
1808    state attributes may not be desired. For example, if two clusters of
1809    replicas are geographically remote and joined by a slow network link,
1810    and their users only login from one of the two locations, it may be
1811    unnecessary to propagate all of the state changes from one cluster
1812    to the other. Servers SHOULD allow administrators to control which
1813    attributes are replicated on a case-by-case basis.</t>
1814
1815    <t>Servers participating in a loosely consistent multi-master
1816    replication agreement SHOULD employ a mechanism which ensures
1817    uniqueness of values when populating the attributes pwdFailureTime
1818    and pwdGraceUseTime.  The method of achieving this is a local matter
1819    and may consist of using a single authoritative source for the
1820    generation of unique time values, or may consist of the use of the
1821    fractional seconds part to hold a replica identifier.</t>
1822 </section>
1823
1824 <section title="Security Considerations">
1825
1826    <t>This document defines a set of rules to implement in an LDAP server,
1827    in order to mitigate some of the security risks associated with the
1828    use of passwords and to make it difficult for password cracking
1829    programs to break into directories.</t>
1830
1831    <t>Authentication with a password MUST follow the recommendations made
1832    in <xref target="RFC4513"/>.</t>
1833
1834    <t>Modifications of passwords SHOULD only occur when the connection is
1835    protected with confidentiality and secure authentication.</t>
1836
1837    <t>Access controls SHOULD be used to restrict access to the password
1838    policy attributes.  The attributes defined to maintain the password
1839    policy state information SHOULD only be modifiable by the password
1840    administrator or higher authority.  The pwdHistory attribute MUST be
1841    subject to the same level of access control as the attrbute holding
1842    the password.</t>
1843
1844    <t>As it is possible to define a password policy for one specific user
1845    by adding a subentry immediately under the user's entry, Access
1846    Controls SHOULD be used to restrict the use of the pwdPolicy object
1847    class or the LDAP subentry object class.</t>
1848
1849    <t>When the intruder detection password policy is enforced, the LDAP
1850    directory is subject to a denial of service attack.  A malicious user
1851    could deliberately lock out one specific user's account (or all of
1852    them) by sending bind requests with wrong passwords.  There is no way
1853    to protect against this kind of attack.  The LDAP directory server
1854    SHOULD log as much information as it can (such as client IP address)
1855    whenever an account is locked, in order to be able to identify the
1856    origin of the attack.  Denying anonymous access to the LDAP directory
1857    is also a way to restrict this kind of attack. Using the login
1858    delay instead of the lockout mechanism will also help avoid this
1859    denial of service.</t>
1860
1861    <t>Returning certain status codes (such as passwordPolicyResponse.error
1862    = accountLocked) allows a denial of service attacker to know that it
1863    has successfully denied service to an account.  Servers SHOULD
1864    implement additional checks which return the same status when it is
1865    sensed that some number of failed authentication requests has occured
1866    on a single connection, or from a client address.  Server
1867    implementors are encouraged to invent other checks similar to this in
1868    order to thwart this type of DoS attack.</t>
1869 </section>
1870
1871 <section title="IANA Considerations">
1872
1873    <t>In accordance with <xref target="RFC4520"/> the following
1874    registrations are requested.</t>
1875  <section title="Object Identifiers">
1876    <t>The OIDs used in this specification are derived from
1877    iso(1) identified-organization(3) dod(6) internet(1) private(4)
1878    enterprise(1) Sun(42) products(2) LDAP(27) ppolicy(8). These
1879    OIDs have been in use since at least July 2001 when version 04
1880    of this draft was published. No additional OID assignment
1881    is being requested.</t>
1882  </section>
1883  <section title="LDAP Protocol Mechanisms">
1884    <t>Registration of the protocol mechanisms specified in this
1885    document is requested.
1886
1887         <list style="empty">
1888    <t>Subject: Request for LDAP Protocol Mechanism Registration</t>
1889    <t>Object Identifier: 1.3.6.1.4.1.42.2.27.8.5.1</t>
1890    <t>Description: Password Policy Request and Response Control</t>
1891    <t>Person &amp; email address to contact for further information:
1892    <list style="empty">
1893    <t>Howard Chu &lt;hyc@symas.com></t>
1894    </list></t>
1895    <t>Usage: Control</t>
1896    <t>Specification: (I-D) draft-behera-ldap-password-policy</t>
1897    <t>Author/Change Controller: IESG</t>
1898    <t>Comments:</t>
1899    </list></t>
1900  </section>
1901  <section title="LDAP Descriptors">
1902    <t>Registration of the descriptors specified in this
1903    document is requested.
1904
1905         <list style="empty">
1906    <t>Subject: Request for LDAP Descriptor Registration</t>
1907    <t>Descriptor (short name): see table</t>
1908    <t>Object Identifier: see table</t>
1909    <t>Description: see table</t>
1910    <t>Person &amp; email address to contact for further information:
1911    <list style="empty">
1912    <t>Howard Chu &lt;hyc@symas.com></t>
1913    </list></t>
1914    <t>Specification: (I-D) draft-behera-ldap-password-policy</t>
1915    <t>Author/Change Controller: IESG</t>
1916    <t>Comments:
1917    <figure><artwork>
1918    Name                    Type  OID
1919    ----------------------- ----  ------------------------------
1920    pwdPolicy               O     1.3.6.1.4.1.42.2.27.8.2.1
1921    pwdAttribute            A     1.3.6.1.4.1.42.2.27.8.1.1
1922    pwdMinAge               A     1.3.6.1.4.1.42.2.27.8.1.2
1923    pwdMaxAge               A     1.3.6.1.4.1.42.2.27.8.1.3
1924    pwdInHistory            A     1.3.6.1.4.1.42.2.27.8.1.4
1925    pwdCheckQuality         A     1.3.6.1.4.1.42.2.27.8.1.5
1926    pwdMinLength            A     1.3.6.1.4.1.42.2.27.8.1.6
1927    pwdMaxLength            A     1.3.6.1.4.1.42.2.27.8.1.31
1928    pwdExpireWarning        A     1.3.6.1.4.1.42.2.27.8.1.7
1929    pwdGraceAuthNLimit      A     1.3.6.1.4.1.42.2.27.8.1.8
1930    pwdGraceExpiry          A     1.3.6.1.4.1.42.2.27.8.1.30
1931    pwdLockout              A     1.3.6.1.4.1.42.2.27.8.1.9
1932    pwdLockoutDuration      A     1.3.6.1.4.1.42.2.27.8.1.10
1933    pwdMaxFailure           A     1.3.6.1.4.1.42.2.27.8.1.11
1934    pwdFailureCountInterval A     1.3.6.1.4.1.42.2.27.8.1.12
1935    pwdMustChange           A     1.3.6.1.4.1.42.2.27.8.1.13
1936    pwdAllowUserChange      A     1.3.6.1.4.1.42.2.27.8.1.14
1937    pwdSafeModify           A     1.3.6.1.4.1.42.2.27.8.1.15
1938    pwdMinDelay             A     1.3.6.1.4.1.42.2.27.8.1.24
1939    pwdMaxDelay             A     1.3.6.1.4.1.42.2.27.8.1.25
1940    pwdMaxIdle              A     1.3.6.1.4.1.42.2.27.8.1.26
1941    pwdChangedTime          A     1.3.6.1.4.1.42.2.27.8.1.16
1942    pwdAccountLockedTime    A     1.3.6.1.4.1.42.2.27.8.1.17
1943    pwdFailureTime          A     1.3.6.1.4.1.42.2.27.8.1.19
1944    pwdHistory              A     1.3.6.1.4.1.42.2.27.8.1.20
1945    pwdGraceUseTime         A     1.3.6.1.4.1.42.2.27.8.1.21
1946    pwdReset                A     1.3.6.1.4.1.42.2.27.8.1.22
1947    pwdPolicySubEntry       A     1.3.6.1.4.1.42.2.27.8.1.23
1948    pwdStartTime            A     1.3.6.1.4.1.42.2.27.8.1.27
1949    pwdEndTime              A     1.3.6.1.4.1.42.2.27.8.1.28
1950    pwdLastSuccess          A     1.3.6.1.4.1.42.2.27.8.1.29
1951    </artwork></figure>
1952    <figure><artwork>
1953    Legend
1954    --------------------
1955    A => Attribute Type
1956    O => Object Class
1957    </artwork></figure>
1958    </t>
1959    </list></t>
1960
1961  </section>
1962  <section title="LDAP AttributeDescription Options">
1963
1964    <t>Registration of the AttributeDescription option specified
1965    in this document is requested.
1966
1967    <list style="empty">
1968    <t>Subject: Request for LDAP Attribute Description Option Registration</t>
1969    <t>Option Name: pwd-</t>
1970    <t>Family of Options: YES</t>
1971    <t>Person &amp; email address to contact for further information:
1972    <list style="empty">
1973    <t>Howard Chu &lt;hyc@symas.com></t>
1974    </list></t>
1975    <t>Specification: (I-D) draft-behera-ldap-password-policy</t>
1976    <t>Author/Change Controller: IESG</t>
1977    <t>Comments:
1978    <list style="empty">
1979    <t>Used with policy state attributes to specify to which password attribute
1980    the state belongs.</t></list>
1981    </t>
1982    </list></t>
1983  </section>
1984 </section>
1985 <section title="Acknowledgement">
1986
1987    <t>This document is based in part on prior work done by Valerie Chu from
1988    Netscape Communications Corp, published as
1989    draft-vchu-ldap-pwd-policy-00.txt (December 1998).  Prasanta Behera
1990    participated in early revisions of this document.</t>
1991 </section>
1992 </middle>
1993 <back>
1994 <references title="Normative References">
1995         &rfc2119;
1996         &rfc2195;
1997         &rfc4422;
1998         &rfc4511;
1999         &rfc4512;
2000         &rfc4513;
2001         &rfc4517;
2002         &rfc2831;
2003         &rfc3062;
2004         &rfc4520;
2005         &rfc3672;
2006
2007         <reference anchor="X.680">
2008                 <front>
2009                         <title>Abstract Syntax Notation One (ASN.1): Specification of basic notation</title>
2010                         <author>
2011                                 <organization abbrev="ITU-T">
2012                                 International Telecommunications Union</organization>
2013                         </author>
2014                         <date month="July" year="2002" />
2015                 </front>
2016                 <seriesInfo name="ITU-T Recommendation" value="X.680" />
2017         </reference>
2018
2019         <reference anchor="X.690">
2020                 <front>
2021                         <title>Information Technology - ASN.1 encoding rules: Specification of Basic
2022               Encoding Rules (BER),  Canonical Encoding Rules (CER) and
2023               Distinguished Encoding Rules (DER)</title>
2024                         <author>
2025                                 <organization abbrev="ITU-T">
2026                                 International Telecommunications Union</organization>
2027                         </author>
2028                         <date month="July" year="2002" />
2029                 </front>
2030                 <seriesInfo name="ITU-T Recommendation" value="X.690" />
2031         </reference>
2032 </references>
2033 </back>
2034 </rfc>