]> git.sur5r.net Git - openldap/blob - doc/man/man5/slapd.access.5
Integer indexing - handle huge values
[openldap] / doc / man / man5 / slapd.access.5
1 .TH SLAPD.ACCESS 5 "RELEASEDATE" "OpenLDAP LDVERSION"
2 .\" Copyright 1998-2007 The OpenLDAP Foundation All Rights Reserved.
3 .\" Copying restrictions apply.  See COPYRIGHT/LICENSE.
4 .SH NAME
5 slapd.access \- access configuration for slapd, the stand-alone LDAP daemon
6 .SH SYNOPSIS
7 ETCDIR/slapd.conf
8 .SH DESCRIPTION
9 The 
10 .BR slapd.conf (5)
11 file contains configuration information for the
12 .BR slapd (8)
13 daemon. This configuration file is also used by the SLAPD tools
14 .BR slapacl (8),
15 .BR slapadd (8),
16 .BR slapauth (8),
17 .BR slapcat (8),
18 .BR slapdn (8),
19 .BR slapindex (8),
20 and
21 .BR slaptest (8).
22 .LP
23 The
24 .B slapd.conf
25 file consists of a series of global configuration options that apply to
26 .B slapd
27 as a whole (including all backends), followed by zero or more database
28 backend definitions that contain information specific to a backend
29 instance.
30 .LP
31 The general format of
32 .B slapd.conf
33 is as follows:
34 .LP
35 .nf
36     # comment - these options apply to every database
37     <global configuration options>
38     # first database definition & configuration options
39     database    <backend 1 type>
40     <configuration options specific to backend 1>
41     # subsequent database definitions & configuration options
42     ...
43 .fi
44 .LP
45 Both the global configuration and each backend-specific section can
46 contain access information.  Backend-specific access control
47 directives are used for those entries that belong to the backend,
48 according to their naming context.  In case no access control
49 directives are defined for a backend or those which are defined are
50 not applicable, the directives from the global configuration section
51 are then used.
52 .LP
53 If no access controls are present, the default policy
54 allows anyone and everyone to read anything but restricts
55 updates to rootdn.  (e.g., "access to * by * read").
56 The rootdn can always read and write EVERYTHING!
57 .LP
58 For entries not held in any backend (such as a root DSE), the
59 directives of the first backend (and any global directives) are
60 used.
61 .LP
62 Arguments that should be replaced by actual text are shown in
63 brackets <>.
64 .SH THE ACCESS DIRECTIVE
65 The structure of the access control directives is
66 .TP
67 .B access to <what> "[ by <who> [ <access> ] [ <control> ] ]+"
68 Grant access (specified by 
69 .BR <access> ) 
70 to a set of entries and/or attributes (specified by 
71 .BR <what> ) 
72 by one or more requestors (specified by 
73 .BR <who> ).
74
75 .LP
76 Lists of access directives are evaluated in the order they appear
77 in \fIslapd.conf\fP.
78 When a
79 .B <what>
80 clause matches the datum whose access is being evaluated, its
81 .B <who>
82 clause list is checked.
83 When a
84 .B <who>
85 clause matches the accessor's properties, its
86 .B <access>
87 and
88 .B <control>
89 clauses are evaluated.
90 Access control checking stops at the first match of the
91 .B <what>
92 and
93 .B <who>
94 clause, unless otherwise dictated by the
95 .B <control>
96 clause.
97 Each
98 .B <who>
99 clause list is implicitly terminated by a
100 .LP
101 .nf
102         by * none stop
103 .fi
104 .LP
105 clause that results in stopping the access control with no access 
106 privileges granted.
107 Each
108 .B <what>
109 clause list is implicitly terminated by a
110 .LP
111 .nf
112         access to *
113                 by * none
114 .fi
115 .LP
116 clause that results in granting no access privileges to an otherwise
117 unspecified datum.
118 .SH THE <WHAT> FIELD
119 The field
120 .BR <what>
121 specifies the entity the access control directive applies to.
122 It can have the forms
123 .LP
124 .nf
125         dn[.<dnstyle>]=<dnpattern>
126         filter=<ldapfilter>
127         attrs=<attrlist>[ val[/matchingRule][.<attrstyle>]=<attrval>]
128 .fi
129 .LP
130 with
131 .LP
132 .nf
133         <dnstyle>={{exact|base(object)}|regex
134                 |one(level)|sub(tree)|children}
135         <attrlist>={<attr>|[{!|@}]<objectClass>}[,<attrlist>]
136         <attrstyle>={{exact|base(object)}|regex
137                 |one(level)|sub(tree)|children}
138 .fi
139 .LP
140 The statement
141 .B dn=<dnpattern>
142 selects the entries based on their naming context.
143 The
144 .B <dnpattern>
145 is a string representation of the entry's DN.
146 The wildcard
147 .B *
148 stands for all the entries, and it is implied if no
149 .B dn
150 form is given.
151 .LP
152 The 
153 .B <dnstyle> 
154 is optional; however, it is recommended to specify it to avoid ambiguities.
155 .B Base 
156 (synonym of
157 .BR baseObject ),
158 the default,
159 or
160 .B exact 
161 (an alias of 
162 .BR base )
163 indicates the entry whose DN is equal to the
164 .BR <dnpattern> ;
165 .B one
166 (synonym of
167 .BR onelevel )
168 indicates all the entries immediately below the
169 .BR <dnpattern> ,
170 .B sub
171 (synonym of
172 .BR subtree )
173 indicates all entries in the subtree at the
174 .BR <dnpattern> ,
175 .B children
176 indicates all the entries below (subordinate to) the 
177 .BR <dnpattern> .
178 .LP
179 If the
180 .B <dnstyle>
181 qualifier is
182 .BR regex ,
183 then 
184 .B <dnpattern>
185 is a POSIX (''extended'') regular expression pattern,
186 as detailed in
187 .BR regex (7)
188 and/or
189 .BR re_format (7),
190 matching a normalized string representation of the entry's DN.
191 The regex form of the pattern does not (yet) support UTF\-8.
192 .LP
193 The statement
194 .B filter=<ldapfilter>
195 selects the entries based on a valid LDAP filter as described in RFC 4515.
196 A filter of
197 .B (objectClass=*)
198 is implied if no
199 .B filter
200 form is given.
201 .LP
202 The statement
203 .B attrs=<attrlist>
204 selects the attributes the access control rule applies to.
205 It is a comma-separated list of attribute types, plus the special names
206 .BR entry ,
207 indicating access to the entry itself, and
208 .BR children ,
209 indicating access to the entry's children. ObjectClass names may also
210 be specified in this list, which will affect all the attributes that
211 are required and/or allowed by that objectClass.
212 Actually, names in 
213 .B <attrlist>
214 that are prefixed by
215 .B @
216 are directly treated as objectClass names.  A name prefixed by
217 .B !
218 is also treated as an objectClass, but in this case the access rule
219 affects the attributes that are not required nor allowed 
220 by that objectClass.
221 If no
222 .B attrs
223 form is given, 
224 .B attrs=@extensibleObject
225 is implied, i.e. all attributes are addressed.
226 .LP
227 Using the form
228 .B attrs=<attr> val[/matchingRule][.<attrstyle>]=<attrval>
229 specifies access to a particular value of a single attribute.
230 In this case, only a single attribute type may be given. The
231 .B <attrstyle>
232 .B exact
233 (the default) uses the attribute's equality matching rule to compare the
234 value, unless a different (and compatible) matching rule is specified. If the
235 .B <attrstyle>
236 is
237 .BR regex ,
238 the provided value is used as a POSIX (''extended'') regular
239 expression pattern.  If the attribute has DN syntax, the 
240 .B <attrstyle>
241 can be any of
242 .BR base ,
243 .BR onelevel ,
244 .B subtree
245 or
246 .BR children ,
247 resulting in base, onelevel, subtree or children match, respectively.
248 .LP
249 The dn, filter, and attrs statements are additive; they can be used in sequence 
250 to select entities the access rule applies to based on naming context,
251 value and attribute type simultaneously.
252 .SH THE <WHO> FIELD
253 The field
254 .B <who>
255 indicates whom the access rules apply to.
256 Multiple 
257 .B <who>
258 statements can appear in an access control statement, indicating the
259 different access privileges to the same resource that apply to different
260 accessee.
261 It can have the forms
262 .LP
263 .nf
264         *
265         anonymous
266         users
267         self[.<selfstyle>]
268
269         dn[.<dnstyle>[,<modifier>]]=<DN>
270         dnattr=<attrname>
271
272         realanonymous
273         realusers
274         realself[.<selfstyle>]
275
276         realdn[.<dnstyle>[,<modifier>]]=<DN>
277         realdnattr=<attrname>
278
279         group[/<objectclass>[/<attrname>]]
280                 [.<groupstyle>]=<group>
281         peername[.<peernamestyle>]=<peername>
282         sockname[.<style>]=<sockname>
283         domain[.<domainstyle>[,<modifier>]]=<domain>
284         sockurl[.<style>]=<sockurl>
285         set[.<setstyle>]=<pattern>
286
287         ssf=<n>
288         transport_ssf=<n>
289         tls_ssf=<n>
290         sasl_ssf=<n>
291
292         dynacl/<name>[/<options>][.<dynstyle>][=<pattern>]
293 .fi
294 .LP
295 with
296 .LP
297 .nf
298         <style>={exact|regex|expand}
299         <selfstyle>={level{<n>}}
300         <dnstyle>={{exact|base(object)}|regex
301                 |one(level)|sub(tree)|children|level{<n>}}
302         <groupstyle>={exact|expand}
303         <peernamestyle>={<style>|ip|ipv6|path}
304         <domainstyle>={exact|regex|sub(tree)}
305         <setstyle>={exact|regex}
306         <modifier>={expand}
307         <name>=aci              <pattern>=<attrname>]
308 .fi
309 .LP
310 They may be specified in combination.
311 .LP
312 .nf
313 .fi
314 .LP
315 The wildcard
316 .B *
317 refers to everybody.
318 .LP
319 The keywords prefixed by
320 .B real
321 act as their counterparts without prefix; the checking respectively occurs
322 with the \fIauthentication\fP DN and the \fIauthorization\fP DN.
323 .LP
324 The keyword
325 .B anonymous
326 means access is granted to unauthenticated clients; it is mostly used 
327 to limit access to authentication resources (e.g. the
328 .B userPassword
329 attribute) to unauthenticated clients for authentication purposes.
330 .LP
331 The keyword
332 .B users
333 means access is granted to authenticated clients.
334 .LP
335 The keyword
336 .B self
337 means access to an entry is allowed to the entry itself (e.g. the entry
338 being accessed and the requesting entry must be the same).
339 It allows the 
340 .B level{<n>}
341 style, where \fI<n>\fP indicates what ancestor of the DN 
342 is to be used in matches.
343 A positive value indicates that the <n>-th ancestor of the user's DN
344 is to be considered; a negative value indicates that the <n>-th ancestor
345 of the target is to be considered.
346 For example, a "\fIby self.level{1} ...\fP" clause would match
347 when the object "\fIdc=example,dc=com\fP" is accessed
348 by "\fIcn=User,dc=example,dc=com\fP".
349 A "\fIby self.level{-1} ...\fP" clause would match when the same user
350 accesses the object "\fIou=Address Book,cn=User,dc=example,dc=com\fP".
351 .LP
352 The statement
353 .B dn=<DN>
354 means that access is granted to the matching DN.
355 The optional style qualifier
356 .B dnstyle
357 allows the same choices of the dn form of the
358 .B <what>
359 field.  In addition, the
360 .B regex
361 style can exploit substring substitution of submatches in the
362 .B <what>
363 dn.regex clause by using the form
364 .BR $<digit> ,
365 with 
366 .B digit
367 ranging from 0 to 9 (where 0 matches the entire string),
368 or the form
369 .BR ${<digit>+} ,
370 for submatches higher than 9.
371 Since the dollar character is used to indicate a substring replacement,
372 the dollar character that is used to indicate match up to the end of
373 the string must be escaped by a second dollar character, e.g.
374 .LP
375 .nf
376     access to dn.regex="^(.+,)?uid=([^,]+),dc=[^,]+,dc=com$"
377         by dn.regex="^uid=$2,dc=[^,]+,dc=com$$" write
378 .fi
379 .LP
380 The style qualifier
381 allows an optional
382 .BR modifier .
383 At present, the only type allowed is 
384 .BR expand ,
385 which causes substring substitution of submatches to take place
386 even if 
387 .B dnstyle
388 is not 
389 .BR regex .
390 Note that the 
391 .B regex 
392 dnstyle in the above example may be of use only if the 
393 .B <by>
394 clause needs to be a regex; otherwise, if the
395 value of the second (from the right)
396 .B dc=
397 portion of the DN in the above example were fixed, the form
398 .LP
399 .nf
400     access to dn.regex="^(.+,)?uid=([^,]+),dc=example,dc=com$"
401         by dn.exact,expand="uid=$2,dc=example,dc=com" write
402 .fi
403 .LP
404 could be used; if it had to match the value in the 
405 .B <what>
406 clause, the form
407 .LP
408 .nf
409     access to dn.regex="^(.+,)?uid=([^,]+),dc=([^,]+),dc=com$"
410         by dn.exact,expand="uid=$2,dc=$3,dc=com" write
411 .fi
412 .LP
413 could be used.
414 .LP
415 Forms of the 
416 .B <what>
417 clause other than regex may provide submatches as well.
418 The 
419 .BR base(object) ,
420 the
421 .BR sub(tree) ,
422 the
423 .BR one(level) ,
424 and the
425 .BR children
426 forms provide
427 .B $0
428 as the match of the entire string.
429 The 
430 .BR sub(tree) ,
431 the
432 .BR one(level) ,
433 and the
434 .BR children
435 forms also provide
436 .B $1
437 as the match of the rightmost part of the DN as defined in the
438 .B <what>
439 clause.
440 This may be useful, for instance, to provide access to all the 
441 ancestors of a user by defining
442 .LP
443 .nf
444     access to dn.subtree="dc=com"
445         by dn.subtree,expand="$1" read
446 .fi
447 .LP
448 which means that only access to entries that appear in the DN of the
449 .B <by>
450 clause is allowed.
451 .LP
452 The 
453 .BR level{<n>}
454 form is an extension and a generalization of the
455 .BR onelevel
456 form, which matches all DNs whose <n>-th ancestor is the pattern.
457 So, \fIlevel{1}\fP is equivalent to \fIonelevel\fP, 
458 and \fIlevel{0}\fP is equivalent to \fIbase\fP.
459 .LP
460 It is perfectly useless to give any access privileges to a DN 
461 that exactly matches the
462 .B rootdn
463 of the database the ACLs apply to, because it implicitly
464 possesses write privileges for the entire tree of that database.
465 Actually, access control is bypassed for the
466 .BR rootdn ,
467 to solve the intrinsic chicken-and-egg problem.
468 .LP
469 The statement
470 .B dnattr=<attrname>
471 means that access is granted to requests whose DN is listed in the
472 entry being accessed under the 
473 .B <attrname>
474 attribute.
475 .LP
476 The statement
477 .B group=<group>
478 means that access is granted to requests whose DN is listed
479 in the group entry whose DN is given by
480 .BR <group> .
481 The optional parameters
482 .B <objectclass>
483 and
484 .B <attrname>
485 define the objectClass and the member attributeType of the group entry.
486 The defaults are
487 .B groupOfNames
488 and
489 .BR member ,
490 respectively.
491 The optional style qualifier
492 .B <style>
493 can be
494 .BR expand ,
495 which means that
496 .B <group>
497 will be expanded as a replacement string (but not as a regular expression)
498 according to
499 .BR regex (7)
500 and/or
501 .BR re_format (7),
502 and
503 .BR exact ,
504 which means that exact match will be used.
505 If the style of the DN portion of the
506 .B <what>
507 clause is regex, the submatches are made available according to
508 .BR regex (7)
509 and/or
510 .BR re_format (7);
511 other styles provide limited submatches as discussed above about 
512 the DN form of the 
513 .B <by>
514 clause.
515 .LP
516 For static groups, the specified attributeType must have
517 .B DistinguishedName
518 or
519 .B NameAndOptionalUID
520 syntax. For dynamic groups the attributeType must
521 be a subtype of the
522 .B labeledURI
523 attributeType. Only LDAP URIs of the form
524 .B ldap:///<base>??<scope>?<filter>
525 will be evaluated in a dynamic group, by searching the local server only.
526 .LP
527 The statements
528 .BR peername=<peername> ,
529 .BR sockname=<sockname> ,
530 .BR domain=<domain> ,
531 and
532 .BR sockurl=<sockurl>
533 mean that the contacting host IP (in the form 
534 .BR "IP=<ip>:<port>"
535 for IPv4, or
536 .BR "IP=[<ipv6>]:<port>"
537 for IPv6)
538 or the contacting host named pipe file name (in the form
539 .B "PATH=<path>"
540 if connecting through a named pipe) for
541 .BR peername ,
542 the named pipe file name for
543 .BR sockname ,
544 the contacting host name for
545 .BR domain ,
546 and the contacting URL for
547 .BR sockurl
548 are compared against
549 .B pattern
550 to determine access.
551 The same
552 .B style
553 rules for pattern match described for the
554 .B group
555 case apply, plus the
556 .B regex
557 style, which implies submatch
558 .B expand
559 and regex match of the corresponding connection parameters.
560 The
561 .B exact
562 style of the
563 .BR <peername>
564 clause (the default) implies a case-exact match on the client's
565 .BR IP , 
566 including the
567 .B "IP="
568 prefix and the trailing
569 .BR ":<port>" , 
570 or the client's 
571 .BR path ,
572 including the
573 .B "PATH="
574 prefix if connecting through a named pipe.
575 The special
576 .B ip
577 style interprets the pattern as 
578 .BR <peername>=<ip>[%<mask>][{<n>}] ,
579 where
580 .B <ip>
581 and 
582 .B <mask>
583 are dotted digit representations of the IP and the mask, while
584 .BR <n> ,
585 delimited by curly brackets, is an optional port.
586 The same applies to IPv6 addresses when the special
587 .B ipv6
588 style is used.
589 When checking access privileges, the IP portion of the
590 .BR peername 
591 is extracted, eliminating the
592 .B "IP="
593 prefix and the
594 .B ":<port>"
595 part, and it is compared against the
596 .B <ip>
597 portion of the pattern after masking with
598 .BR <mask> .
599 As an example, 
600 .B peername.ip=127.0.0.1
601 and
602 .B peername.ipv6=::1
603 allow connections only from localhost,
604 .B peername.ip=192.168.1.0%255.255.255.0 
605 allows connections from any IP in the 192.168.1 class C domain, and
606 .B peername.ip=192.168.1.16%255.255.255.240{9009}
607 allows connections from any IP in the 192.168.1.[16-31] range 
608 of the same domain, only if port 9009 is used.
609 The special 
610 .B path
611 style eliminates the 
612 .B "PATH="
613 prefix from the 
614 .B peername
615 when connecting through a named pipe, and performs an exact match 
616 on the given pattern.
617 The
618 .BR <domain>
619 clause also allows the
620 .B subtree
621 style, which succeeds when a fully qualified name exactly matches the
622 .BR domain
623 pattern, or its trailing part, after a 
624 .BR dot ,
625 exactly matches the 
626 .BR domain
627 pattern.
628 The 
629 .B expand
630 style is allowed, implying an
631 .B exact 
632 match with submatch expansion; the use of 
633 .B expand 
634 as a style modifier is considered more appropriate.
635 As an example,
636 .B domain.subtree=example.com
637 will match www.example.com, but will not match www.anotherexample.com.
638 The
639 .B domain
640 of the contacting host is determined by performing a DNS reverse lookup.
641 As this lookup can easily be spoofed, use of the
642 .B domain
643 statement is strongly discouraged.  By default, reverse lookups are disabled.
644 The optional
645 .B domainstyle
646 qualifier of the
647 .B <domain>
648 clause allows a
649 .B modifier
650 option; the only value currently supported is
651 .BR expand ,
652 which causes substring substitution of submatches to take place even if
653 the 
654 .B domainstyle
655 is not 
656 .BR regex ,
657 much like the analogous usage in 
658 .B <dn>
659 clause.
660 .LP
661 The statement
662 .B set=<pattern>
663 is undocumented yet.
664 .LP
665 The statement
666 .B dynacl/<name>[/<options>][.<dynstyle>][=<pattern>]
667 means that access checking is delegated to the admin-defined method
668 indicated by
669 .BR <name> ,
670 which can be registered at run-time by means of the
671 .B moduleload
672 statement.
673 The fields
674 .BR <options> ,
675 .B <dynstyle>
676 and
677 .B <pattern>
678 are optional, and are directly passed to the registered parsing routine.
679 Dynacl is experimental; it must be enabled at compile time.
680 .LP
681 The statement
682 .B dynacl/aci[=<attrname>]
683 means that the access control is determined by the values in the
684 .B attrname
685 of the entry itself.
686 The optional
687 .B <attrname>
688 indicates what attributeType holds the ACI information in the entry.
689 By default, the 
690 .B OpenLDAPaci
691 operational attribute is used.
692 ACIs are experimental; they must be enabled at compile time.
693 .LP
694 The statements
695 .BR ssf=<n> ,
696 .BR transport_ssf=<n> ,
697 .BR tls_ssf=<n> ,
698 and
699 .BR sasl_ssf=<n>
700 set the minimum required Security Strength Factor (ssf) needed
701 to grant access.  The value should be positive integer.
702 .SH THE <ACCESS> FIELD
703 The optional field
704 .B <access> ::= [[real]self]{<level>|<priv>}
705 determines the access level or the specific access privileges the
706 .B who 
707 field will have.
708 Its component are defined as
709 .LP
710 .nf
711         <level> ::= none|disclose|auth|compare|search|read|write|manage
712         <priv> ::= {=|+|-}{m|w|r|s|c|x|d|0}+
713 .fi
714 .LP
715 The modifier
716 .B self
717 allows special operations like having a certain access level or privilege
718 only in case the operation involves the name of the user that's requesting
719 the access.
720 It implies the user that requests access is authorized.
721 The modifier
722 .B realself
723 refers to the authenticated DN as opposed to the authorized DN of the
724 .B self
725 modifier.
726 An example is the
727 .B selfwrite
728 access to the member attribute of a group, which allows one to add/delete
729 its own DN from the member list of a group, without affecting other members.
730 .LP
731 The 
732 .B level 
733 access model relies on an incremental interpretation of the access
734 privileges.
735 The possible levels are
736 .BR none ,
737 .BR disclose ,
738 .BR auth ,
739 .BR compare ,
740 .BR search ,
741 .BR read ,
742 and
743 .BR write .
744 Each access level implies all the preceding ones, thus 
745 .B manage
746 grants all access including administrative access,
747 .LP
748 The
749 .B none 
750 access level disallows all access including disclosure on error.
751 .LP
752 The
753 .B disclose
754 access level allows disclosure of information on error.
755 .LP
756 The 
757 .B auth
758 access level means that one is allowed access to an attribute to perform
759 authentication/authorization operations (e.g.
760 .BR bind )
761 with no other access.
762 This is useful to grant unauthenticated clients the least possible 
763 access level to critical resources, like passwords.
764 .LP
765 The
766 .B priv
767 access model relies on the explicit setting of access privileges
768 for each clause.
769 The
770 .B =
771 sign resets previously defined accesses; as a consequence, the final 
772 access privileges will be only those defined by the clause.
773 The 
774 .B +
775 and
776 .B -
777 signs add/remove access privileges to the existing ones.
778 The privileges are
779 .B m
780 for manage,
781 .B w
782 for write,
783 .B r
784 for read,
785 .B s 
786 for search,
787 .B c 
788 for compare,
789 .B x
790 for authentication, and
791 .B d
792 for disclose.
793 More than one of the above privileges can be added in one statement.
794 .B 0
795 indicates no privileges and is used only by itself (e.g., +0).
796 .LP
797 If no access is given, it defaults to 
798 .BR +0 .
799 .SH THE <CONTROL> FIELD
800 The optional field
801 .B <control>
802 controls the flow of access rule application.
803 It can have the forms
804 .LP
805 .nf
806         stop
807         continue
808         break
809 .fi
810 .LP
811 where
812 .BR stop ,
813 the default, means access checking stops in case of match.
814 The other two forms are used to keep on processing access clauses.
815 In detail, the
816 .B continue
817 form allows for other 
818 .B <who>
819 clauses in the same 
820 .B <access>
821 clause to be considered, so that they may result in incrementally altering
822 the privileges, while the
823 .B break
824 form allows for other
825 .B <access>
826 clauses that match the same target to be processed.
827 Consider the (silly) example
828 .LP
829 .nf
830         access to dn.subtree="dc=example,dc=com" attrs=cn
831                 by * =cs break
832
833         access to dn.subtree="ou=People,dc=example,dc=com"
834                 by * +r
835 .fi
836 .LP
837 which allows search and compare privileges to everybody under
838 the "dc=example,dc=com" tree, with the second rule allowing
839 also read in the "ou=People" subtree,
840 or the (even more silly) example
841 .LP
842 .nf
843         access to dn.subtree="dc=example,dc=com" attrs=cn
844                 by * =cs continue
845                 by users +r
846 .fi
847 .LP
848 which grants everybody search and compare privileges, and adds read
849 privileges to authenticated clients.
850 .LP
851 One useful application is to easily grant write privileges to an
852 .B updatedn
853 that is different from the
854 .BR rootdn .
855 In this case, since the
856 .B updatedn
857 needs write access to (almost) all data, one can use
858 .LP
859 .nf
860         access to *
861                 by dn.exact="cn=The Update DN,dc=example,dc=com" write
862                 by * break
863 .fi
864 .LP
865 as the first access rule.
866 As a consequence, unless the operation is performed with the 
867 .B updatedn
868 identity, control is passed straight to the subsequent rules.
869
870 .SH OPERATION REQUIREMENTS
871 Operations require different privileges on different portions of entries.
872 The following summary applies to primary database backends such as
873 the BDB and HDB backends.   Requirements for other backends may
874 (and often do) differ.
875
876 .LP
877 The
878 .B add
879 operation requires
880 .B write (=w)
881 privileges on the pseudo-attribute 
882 .B entry
883 of the entry being added, and 
884 .B write (=w)
885 privileges on the pseudo-attribute
886 .B children
887 of the entry's parent.
888 When adding the suffix entry of a database, write access to
889 .B children
890 of the empty DN ("") is required.
891
892 .LP
893 The 
894 .B bind
895 operation, when credentials are stored in the directory, requires 
896 .B auth (=x)
897 privileges on the attribute the credentials are stored in (usually
898 .BR userPassword ).
899
900 .LP
901 The
902 .B compare
903 operation requires 
904 .B compare (=c)
905 privileges on the attribute that is being compared.
906
907 .LP
908 The
909 .B delete
910 operation requires
911 .B write (=w)
912 privileges on the pseudo-attribute
913 .B entry 
914 of the entry being deleted, and
915 .B write (=w)
916 privileges on the
917 .B children
918 pseudo-attribute of the entry's parent.
919
920 .LP
921 The
922 .B modify
923 operation requires 
924 .B write (=w)
925 privileges on the attributes being modified.
926
927 .LP
928 The
929 .B modrdn
930 operation requires
931 .B write (=w)
932 privileges on the pseudo-attribute
933 .B entry
934 of the entry whose relative DN is being modified,
935 .B write (=w)
936 privileges on the pseudo-attribute
937 .B children
938 of the old and new entry's parents, and
939 .B write (=w)
940 privileges on the attributes that are present in the new relative DN.
941 .B Write (=w)
942 privileges are also required on the attributes that are present 
943 in the old relative DN if 
944 .B deleteoldrdn
945 is set to 1.
946
947 .LP
948 The
949 .B search
950 operation, requires 
951 .B search (=s)
952 privileges on the 
953 .B entry
954 pseudo-attribute of the searchBase (NOTE: this was introduced with 2.3).
955 Then, for each entry, it requires
956 .B search (=s)
957 privileges on the attributes that are defined in the filter.
958 The resulting entries are finally tested for 
959 .B read (=r)
960 privileges on the pseudo-attribute
961 .B entry
962 (for read access to the entry itself)
963 and for
964 .B read (=r)
965 access on each value of each attribute that is requested.
966 Also, for each
967 .B referral
968 object used in generating continuation references, the operation requires
969 .B read (=r)
970 access on the pseudo-attribute
971 .B entry
972 (for read access to the referral object itself),
973 as well as
974 .B read (=r)
975 access to the attribute holding the referral information
976 (generally the
977 .B ref
978 attribute).
979
980 .LP
981 Some internal operations and some
982 .B controls
983 require specific access privileges.
984 The
985 .B authzID
986 mapping and the 
987 .B proxyAuthz
988 control require
989 .B auth (=x)
990 privileges on all the attributes that are present in the search filter
991 of the URI regexp maps (the right-hand side of the
992 .B authz-regexp
993 directives).
994 .B Auth (=x)
995 privileges are also required on the
996 .B authzTo
997 attribute of the authorizing identity and/or on the 
998 .B authzFrom
999 attribute of the authorized identity.
1000
1001 .LP
1002 Access control to search entries is checked by the frontend,
1003 so it is fully honored by all backends; for all other operations
1004 and for the discovery phase of the search operation,
1005 full ACL semantics is only supported by the primary backends, i.e.
1006 .BR back-bdb (5),
1007 and
1008 .BR back-hdb (5).
1009
1010 Some other backend, like
1011 .BR back-sql (5),
1012 may fully support them; others may only support a portion of the 
1013 described semantics, or even differ in some aspects.
1014 The relevant details are described in the backend-specific man pages.
1015
1016 .SH CAVEATS
1017 It is strongly recommended to explicitly use the most appropriate
1018 .B <dnstyle>
1019 in
1020 .B <what>
1021 and
1022 .B <who>
1023 clauses, to avoid possible incorrect specifications of the access rules 
1024 as well as for performance (avoid unnecessary regex matching when an exact
1025 match suffices) reasons.
1026 .LP
1027 An administrator might create a rule of the form:
1028 .LP
1029 .nf
1030         access to dn.regex="dc=example,dc=com"
1031                 by ...
1032 .fi
1033 .LP
1034 expecting it to match all entries in the subtree "dc=example,dc=com".
1035 However, this rule actually matches any DN which contains anywhere
1036 the substring "dc=example,dc=com".  That is, the rule matches both
1037 "uid=joe,dc=example,dc=com" and "dc=example,dc=com,uid=joe".
1038 .LP
1039 To match the desired subtree, the rule would be more precisely
1040 written:
1041 .LP
1042 .nf
1043         access to dn.regex="^(.+,)?dc=example,dc=com$"
1044                 by ...
1045 .fi
1046 .LP
1047 For performance reasons, it would be better to use the subtree style.
1048 .LP
1049 .nf
1050         access to dn.subtree="dc=example,dc=com"
1051                 by ...
1052 .fi
1053 .LP
1054 When writing submatch rules, it may be convenient to avoid unnecessary
1055 .B regex
1056 .B <dnstyle>
1057 use; for instance, to allow access to the subtree of the user 
1058 that matches the
1059 .B <what>
1060 clause, one could use
1061 .LP
1062 .nf
1063         access to dn.regex="^(.+,)?uid=([^,]+),dc=example,dc=com$"
1064                 by dn.regex="^uid=$2,dc=example,dc=com$$" write
1065                 by ...
1066 .fi
1067 .LP
1068 However, since all that is required in the 
1069 .B <by>
1070 clause is substring expansion, a more efficient solution is
1071 .LP
1072 .nf
1073         access to dn.regex="^(.+,)?uid=([^,]+),dc=example,dc=com$"
1074                 by dn.exact,expand="uid=$2,dc=example,dc=com" write
1075                 by ...
1076 .fi
1077 .LP
1078 In fact, while a
1079 .B <dnstyle>
1080 of
1081 .B regex
1082 implies substring expansion, 
1083 .BR exact ,
1084 as well as all the other DN specific
1085 .B <dnstyle>
1086 values, does not, so it must be explicitly requested.
1087 .LP
1088 .SH FILES
1089 .TP
1090 ETCDIR/slapd.conf
1091 default slapd configuration file
1092 .SH SEE ALSO
1093 .BR slapd (8),
1094 .BR slapd-* (5),
1095 .BR slapacl (8),
1096 .BR regex (7),
1097 .BR re_format (7)
1098 .LP
1099 "OpenLDAP Administrator's Guide" (http://www.OpenLDAP.org/doc/admin/)
1100 .SH ACKNOWLEDGEMENTS
1101 .so ../Project