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