]> git.sur5r.net Git - openldap/blob - doc/man/man5/slapd.access.5
Delta-syncrepl doc updates
[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[/matchingRule][.<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[/matchingRule][.<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, unless a different (and compatible) matching rule is specified. 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[/<options>][.<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 defaults are
452 .B groupOfNames
453 and
454 .BR member ,
455 respectively.
456 The optional style qualifier
457 .B <style>
458 can be
459 .BR expand ,
460 which means that
461 .B <group>
462 will be expanded as a replacement string (but not as a regular expression)
463 according to
464 .BR regex (7)
465 and/or
466 .BR re_format (7),
467 and
468 .BR exact ,
469 which means that exact match will be used.
470 If the style of the DN portion of the
471 .B <what>
472 clause is regex, the submatches are made available according to
473 .BR regex (7)
474 and/or
475 .BR re_format (7);
476 other styles provide limited submatches as discussed above about 
477 the DN form of the 
478 .B <by>
479 clause.
480 .LP
481 For static groups, the specified attributeType must have
482 .B DistinguishedName
483 or
484 .B NameAndOptionalUID
485 syntax. For dynamic groups the attributeType must
486 be a subtype of the
487 .B labeledURI
488 attributeType. Only LDAP URIs of the form
489 .B ldap:///<base>??<scope>?<filter>
490 will be evaluated in a dynamic group, by searching the local server only.
491 .LP
492 The statements
493 .BR peername=<peername> ,
494 .BR sockname=<sockname> ,
495 .BR domain=<domain> ,
496 and
497 .BR sockurl=<sockurl>
498 mean that the contacting host IP (in the form 
499 .BR "IP=<ip>:<port>" )
500 or the contacting host named pipe file name (in the form
501 .B "PATH=<path>"
502 if connecting through a named pipe) for
503 .BR peername ,
504 the named pipe file name for
505 .BR sockname ,
506 the contacting host name for
507 .BR domain ,
508 and the contacting URL for
509 .BR sockurl
510 are compared against
511 .B pattern
512 to determine access.
513 The same
514 .B style
515 rules for pattern match described for the
516 .B group
517 case apply, plus the
518 .B regex
519 style, which implies submatch
520 .B expand
521 and regex match of the corresponding connection parameters.
522 The
523 .B exact
524 style of the
525 .BR <peername>
526 clause (the default) implies a case-exact match on the client's
527 .BR IP , 
528 including the
529 .B "IP="
530 prefix and the trailing
531 .BR ":<port>" , 
532 or the client's 
533 .BR path ,
534 including the
535 .B "PATH="
536 prefix if connecting through a named pipe.
537 The special
538 .B ip
539 style interprets the pattern as 
540 .BR <peername>=<ip>[%<mask>][{<n>}] ,
541 where
542 .B <ip>
543 and 
544 .B <mask>
545 are dotted digit representations of the IP and the mask, while
546 .BR <n> ,
547 delimited by curly brackets, is an optional port.
548 When checking access privileges, the IP portion of the
549 .BR peername 
550 is extracted, eliminating the
551 .B "IP="
552 prefix and the
553 .B ":<port>"
554 part, and it is compared against the
555 .B <ip>
556 portion of the pattern after masking with
557 .BR <mask> .
558 As an example, 
559 .B peername.ip=127.0.0.1
560 allows connections only from localhost,
561 .B peername.ip=192.168.1.0%255.255.255.0 
562 allows connections from any IP in the 192.168.1 class C domain, and
563 .B peername.ip=192.168.1.16%255.255.255.240{9009}
564 allows connections from any IP in the 192.168.1.[16-31] range 
565 of the same domain, only if port 9009 is used.
566 The special 
567 .B path
568 style eliminates the 
569 .B "PATH="
570 prefix from the 
571 .B peername
572 when connecting through a named pipe, and performs an exact match 
573 on the given pattern.
574 The
575 .BR <domain>
576 clause also allows the
577 .B subtree
578 style, which succeeds when a fully qualified name exactly matches the
579 .BR domain
580 pattern, or its trailing part, after a 
581 .BR dot ,
582 exactly matches the 
583 .BR domain
584 pattern.
585 The 
586 .B expand
587 style is allowed, implying an
588 .B exact 
589 match with submatch expansion; the use of 
590 .B expand 
591 as a style modifier is considered more appropriate.
592 As an example,
593 .B domain.subtree=example.com
594 will match www.example.com, but will not match www.anotherexample.com.
595 The
596 .B domain
597 of the contacting host is determined by performing a DNS reverse lookup.
598 As this lookup can easily be spoofed, use of the
599 .B domain
600 statement is strongly discouraged.  By default, reverse lookups are disabled.
601 The optional
602 .B domainstyle
603 qualifier of the
604 .B <domain>
605 clause allows a
606 .B modifier
607 option; the only value currently supported is
608 .BR expand ,
609 which causes substring substitution of submatches to take place even if
610 the 
611 .B domainstyle
612 is not 
613 .BR regex ,
614 much like the analogous usage in 
615 .B <dn>
616 clause.
617 .LP
618 The statement
619 .B set=<pattern>
620 is undocumented yet.
621 .LP
622 The statement
623 .B aci[=<attrname>]
624 means that the access control is determined by the values in the
625 .B attrname
626 of the entry itself.
627 The optional
628 .B <attrname>
629 indicates what attributeType holds the ACI information in the entry.
630 By default, the 
631 .B OpenLDAPaci
632 operational attribute is used.
633 ACIs are experimental; they must be enabled at compile time.
634 .LP
635 The statement
636 .B dynacl/<name>[/<options>][.<dynstyle>][=<pattern>]
637 means that access checking is delegated to the admin-defined method
638 indicated by
639 .BR <name> ,
640 which can be registered at run-time by means of the
641 .B moduleload
642 statement.
643 The fields
644 .BR <options> ,
645 .B <dynstyle>
646 and
647 .B <pattern>
648 are optional, and are directly passed to the registered parsing routine.
649 Dynacl is experimental; it must be enabled at compile time.
650 If dynacl and ACIs are both enabled, ACIs are cast into the dynacl scheme,
651 where 
652 .B <name>=aci
653 and, optionally,
654 .BR <patten>=<attrname> .
655 However, the original ACI syntax is preserved for backward compatibility.
656 .LP
657 The statements
658 .BR ssf=<n> ,
659 .BR transport_ssf=<n> ,
660 .BR tls_ssf=<n> ,
661 and
662 .BR sasl_ssf=<n>
663 set the minimum required Security Strength Factor (ssf) needed
664 to grant access.  The value should be positive integer.
665 .SH THE <ACCESS> FIELD
666 The field
667 .B <access> ::= [[real]self]{<level>|<priv>}
668 determines the access level or the specific access privileges the
669 .B who 
670 field will have.
671 Its component are defined as
672 .LP
673 .nf
674         <level> ::= none|disclose|auth|compare|search|read|write
675         <priv> ::= {=|+|-}{w|r|s|c|x|d|0}+
676 .fi
677 .LP
678 The modifier
679 .B self
680 allows special operations like having a certain access level or privilege
681 only in case the operation involves the name of the user that's requesting
682 the access.
683 It implies the user that requests access is authorized.
684 The modifier
685 .B realself
686 refers to the authenticated DN as opposed to the authorized DN of the
687 .B self
688 modifier.
689 An example is the
690 .B selfwrite
691 access to the member attribute of a group, which allows one to add/delete
692 its own DN from the member list of a group, without affecting other members.
693 .LP
694 The 
695 .B level 
696 access model relies on an incremental interpretation of the access
697 privileges.
698 The possible levels are
699 .BR none ,
700 .BR disclose ,
701 .BR auth ,
702 .BR compare ,
703 .BR search ,
704 .BR read ,
705 and
706 .BR write .
707 Each access level implies all the preceding ones, thus 
708 .B write
709 access will imply all accesses.
710 .LP
711 The
712 .B none 
713 access level disallows all access including disclosure on error.
714 .LP
715 The
716 .B disclose
717 access level allows disclosure of information on error.
718 .LP
719 The 
720 .B auth
721 access level means that one is allowed access to an attribute to perform
722 authentication/authorization operations (e.g.
723 .BR bind )
724 with no other access.
725 This is useful to grant unauthenticated clients the least possible 
726 access level to critical resources, like passwords.
727 .LP
728 The
729 .B priv
730 access model relies on the explicit setting of access privileges
731 for each clause.
732 The
733 .B =
734 sign resets previously defined accesses; as a consequence, the final 
735 access privileges will be only those defined by the clause.
736 The 
737 .B +
738 and
739 .B -
740 signs add/remove access privileges to the existing ones.
741 The privileges are
742 .B w
743 for write,
744 .B r
745 for read,
746 .B s 
747 for search,
748 .B c 
749 for compare,
750 .B x
751 for authentication, and
752 .B d
753 for disclose.
754 More than one of the above privileges can be added in one statement.
755 .B 0
756 indicates no privileges and is used only by itself (e.g., +0).
757 If no access is given, it defaults to 
758 .BR +0 .
759 .SH THE <CONTROL> FIELD
760 The optional field
761 .B <control>
762 controls the flow of access rule application.
763 It can have the forms
764 .LP
765 .nf
766         stop
767         continue
768         break
769 .fi
770 .LP
771 where
772 .BR stop ,
773 the default, means access checking stops in case of match.
774 The other two forms are used to keep on processing access clauses.
775 In detail, the
776 .B continue
777 form allows for other 
778 .B <who>
779 clauses in the same 
780 .B <access>
781 clause to be considered, so that they may result in incrementally altering
782 the privileges, while the
783 .B break
784 form allows for other
785 .B <access>
786 clauses that match the same target to be processed.
787 Consider the (silly) example
788 .LP
789 .nf
790         access to dn.subtree="dc=example,dc=com" attrs=cn
791                 by * =cs break
792
793         access to dn.subtree="ou=People,dc=example,dc=com"
794                 by * +r
795 .fi
796 .LP
797 which allows search and compare privileges to everybody under
798 the "dc=example,dc=com" tree, with the second rule allowing
799 also read in the "ou=People" subtree,
800 or the (even more silly) example
801 .LP
802 .nf
803         access to dn.subtree="dc=example,dc=com" attrs=cn
804                 by * =cs continue
805                 by users +r
806 .fi
807 .LP
808 which grants everybody search and compare privileges, and adds read
809 privileges to authenticated clients.
810 .LP
811 One useful application is to easily grant write privileges to an
812 .B updatedn
813 that is different from the
814 .BR rootdn .
815 In this case, since the
816 .B updatedn
817 needs write access to (almost) all data, one can use
818 .LP
819 .nf
820         access to *
821                 by dn.exact="cn=The Update DN,dc=example,dc=com" write
822                 by * break
823 .fi
824 .LP
825 as the first access rule.
826 As a consequence, unless the operation is performed with the 
827 .B updatedn
828 identity, control is passed straight to the subsequent rules.
829 .SH OPERATION REQUIREMENTS
830 Operations require different privileges on different portions of entries.
831 The following summary applies to primary database backends such as
832 the LDBM, BDB, and HDB backends.   Requirements for other backends may
833 (and often do) differ.
834 .LP
835 The
836 .B add
837 operation requires
838 .B write (=w)
839 privileges on the pseudo-attribute 
840 .B entry
841 of the entry being added, and 
842 .B write (=w)
843 privileges on the pseudo-attribute
844 .B children
845 of the entry's parent.
846 .LP
847 The 
848 .B bind
849 operation, when credentials are stored in the directory, requires 
850 .B auth (=x)
851 privileges on the attribute the credentials are stored in (usually
852 .BR userPassword ).
853 .LP
854 The
855 .B compare
856 operation requires 
857 .B compare (=c)
858 privileges on the attribute that is being compared.
859 .LP
860 The
861 .B delete
862 operation requires
863 .B write (=w)
864 privileges on the pseudo-attribute
865 .B entry 
866 of the entry being deleted, and
867 .B write (=w)
868 privileges on the
869 .B children
870 pseudo-attribute of the entry's parent.
871 .LP
872 The
873 .B modify
874 operation requires 
875 .B write (=w)
876 privileges on the attributes being modified.
877 .LP
878 The
879 .B modrdn
880 operation requires
881 .B write (=w)
882 privileges on the pseudo-attribute
883 .B entry
884 of the entry whose relative DN is being modified,
885 .B write (=w)
886 privileges on the pseudo-attribute
887 .B children
888 of the old and new entry's parents, and
889 .B write (=w)
890 privileges on the attributes that are present in the new relative DN.
891 .B Write (=w)
892 privileges are also required on the attributes that are present 
893 in the old relative DN if 
894 .B deleteoldrdn
895 is set to 1.
896 .LP
897 The
898 .B search
899 operation, requires 
900 .B search (=s)
901 privileges on the 
902 .B entry
903 pseudo-attribute of the searchBase (NOTE: this was introduced with 2.3).
904 Then, for each entry, it requires
905 .B search (=s)
906 privileges on the attributes that are defined in the filter.
907 The resulting entries are finally tested for 
908 .B read (=r)
909 privileges on the pseudo-attribute
910 .B entry
911 (for read access to the entry itself)
912 and for
913 .B read (=r)
914 access on each value of each attribute that is requested.
915 Also, for each
916 .B referral
917 object used in generating continuation references, the operation requires
918 .B read (=r)
919 access on the pseudo-attribute
920 .B entry
921 (for read access to the referral object itself),
922 as well as
923 .B read (=r)
924 access to the attribute holding the referral information
925 (generally the
926 .B ref
927 attribute).
928 .LP
929 Some internal operations and some
930 .B controls
931 require specific access privileges.
932 The
933 .B authzID
934 mapping and the 
935 .B proxyAuthz
936 control require
937 .B auth (=x)
938 privileges on all the attributes that are present in the search filter
939 of the URI regexp maps (the right-hand side of the
940 .B authz-regexp
941 directives).
942 .B Auth (=x)
943 privileges are also required on the
944 .B authzTo
945 attribute of the authorizing identity and/or on the 
946 .B authzFrom
947 attribute of the authorized identity.
948
949 .LP
950 Access control to search entries is checked by the frontend,
951 so it is fully honored by all backends; for all other operations
952 and for the discovery phase of the search operation,
953 full ACL semantics is only supported by the primary backends, i.e.
954 .BR back-bdb (5),
955 .BR back-hdb (5),
956 and
957 .BR back-ldbm (5).
958
959 Some other backend, like
960 .BR back-sql (5),
961 may fully support them; others may only support a portion of the 
962 described semantics, or even differ in some aspects.
963 The relevant details are described in the backend-specific man pages.
964
965 .SH CAVEATS
966 It is strongly recommended to explicitly use the most appropriate
967 .B <dnstyle>
968 in
969 .B <what>
970 and
971 .B <who>
972 clauses, to avoid possible incorrect specifications of the access rules 
973 as well as for performance (avoid unnecessary regex matching when an exact
974 match suffices) reasons.
975 .LP
976 An administrator might create a rule of the form:
977 .LP
978 .nf
979         access to dn.regex="dc=example,dc=com"
980                 by ...
981 .fi
982 .LP
983 expecting it to match all entries in the subtree "dc=example,dc=com".
984 However, this rule actually matches any DN which contains anywhere
985 the substring "dc=example,dc=com".  That is, the rule matches both
986 "uid=joe,dc=example,dc=com" and "dc=example,dc=com,uid=joe".
987 .LP
988 To match the desired subtree, the rule would be more precisely
989 written:
990 .LP
991 .nf
992         access to dn.regex="^(.+,)?dc=example,dc=com$"
993                 by ...
994 .fi
995 .LP
996 For performance reasons, it would be better to use the subtree style.
997 .LP
998 .nf
999         access to dn.subtree="dc=example,dc=com"
1000                 by ...
1001 .fi
1002 .LP
1003 When writing submatch rules, it may be convenient to avoid unnecessary
1004 .B regex
1005 .B <dnstyle>
1006 use; for instance, to allow access to the subtree of the user 
1007 that matches the
1008 .B <what>
1009 clause, one could use
1010 .LP
1011 .nf
1012         access to dn.regex="^(.+,)?uid=([^,]+),dc=example,dc=com$"
1013                 by dn.regex="^uid=$2,dc=example,dc=com$$" write
1014                 by ...
1015 .fi
1016 .LP
1017 However, since all that is required in the 
1018 .B <by>
1019 clause is substring expansion, a more efficient solution is
1020 .LP
1021 .nf
1022         access to dn.regex="^(.+,)?uid=([^,]+),dc=example,dc=com$"
1023                 by dn.exact,expand="uid=$2,dc=example,dc=com" write
1024                 by ...
1025 .fi
1026 .LP
1027 In fact, while a
1028 .B <dnstyle>
1029 of
1030 .B regex
1031 implies substring expansion, 
1032 .BR exact ,
1033 as well as all the other DN specific
1034 .B <dnstyle>
1035 values, does not, so it must be explicitly requested.
1036 .LP
1037 .SH FILES
1038 .TP
1039 ETCDIR/slapd.conf
1040 default slapd configuration file
1041 .SH SEE ALSO
1042 .BR slapd (8),
1043 .BR slapd-* (5),
1044 .BR slapacl (8),
1045 .BR regex (7),
1046 .BR re_format (7)
1047 .LP
1048 "OpenLDAP Administrator's Guide" (http://www.OpenLDAP.org/doc/admin/)
1049 .SH ACKNOWLEDGEMENTS
1050 .B OpenLDAP
1051 is developed and maintained by The OpenLDAP Project (http://www.openldap.org/).
1052 .B OpenLDAP
1053 is derived from University of Michigan LDAP 3.3 Release.