xref: /netbsd-src/external/bsd/openldap/dist/doc/guide/admin/appendix-common-errors.sdf (revision e670fd5c413e99c2f6a37901bb21c537fcd322d2)
1# $OpenLDAP$
2# Copyright 2007-2021 The OpenLDAP Foundation, All Rights Reserved.
3# COPYING RESTRICTIONS APPLY, see COPYRIGHT.
4
5H1: Common errors encountered when using OpenLDAP Software
6
7The following sections attempt to summarize the most common causes of LDAP errors
8when using OpenLDAP
9
10H2: Common causes of LDAP errors
11
12H3: ldap_*: Can't contact LDAP server
13
14The {{B:Can't contact LDAP server}} error is usually returned when the LDAP
15server cannot be contacted. This may occur for many reasons:
16
17* the LDAP server is not running; this can be checked by running, for example,
18
19>      telnet <host> <port>
20
21replacing {{<host>}} and {{<port>}} with the hostname and the port the server
22is supposed to listen on.
23* the client has not been instructed to contact a running server; with OpenLDAP
24command-line tools this is accomplished by providing the -H switch, whose
25argument is a valid LDAP url corresponding to the interface the server is
26supposed to be listening on.
27
28H3: ldap_*: No such object
29
30The {{B:no such object}} error is generally returned when the target DN of the
31operation cannot be located. This section details reasons common to all
32operations. You should also look for answers specific to the operation
33(as indicated in the error message).
34
35The most common reason for this error is non-existence of the named object. First,
36check for typos.
37
38Also note that, by default, a new directory server holds no objects
39(except for a few system entries). So, if you are setting up a new directory
40server and get this message, it may simply be that you have yet to add the
41object you are trying to locate.
42
43The error commonly occurs because a DN was not specified and a default was not
44properly configured.
45
46If you have a suffix specified in slapd.conf eg.
47
48>      suffix "dc=example,dc=com"
49
50You should use
51
52>      ldapsearch -b 'dc=example,dc=com' '(cn=jane*)'
53
54to tell it where to start the search.
55
56The {{F:-b}} should be specified for all LDAP commands unless you have an
57{{ldap.conf}}(5) default configured.
58
59See {{ldapsearch}}(1), {{ldapmodify}}(1)
60
61Also, {{slapadd}}(8) and its ancillary programs are very strict about the
62syntax of the LDIF file.
63
64Some liberties in the LDIF file may result in an apparently successful creation
65of the database, but accessing some parts of it may be difficult.
66
67One known common error in database creation is putting a blank line before the
68first entry in the LDIF file. {{B:There must be no leading blank lines in the
69LDIF file.}}
70
71It is generally recommended that {{ldapadd}}(1) be used instead of {{slapadd}}(8)
72when adding new entries your directory. {{slapadd}}(8) should be used to bulk
73load entries known to be valid.
74
75Another cause of this message is a referral
76({SECT:Constructing a Distributed Directory Service}}) entry to an unpopulated
77directory.
78
79Either remove the referral, or add a single record with the referral base DN
80to the empty directory.
81
82This error may also occur when slapd is unable to access the contents of its
83database because of file permission problems. For instance, on a Red Hat Linux
84system, slapd runs as user 'ldap'. When slapadd is run as root to create a
85database from scratch, the contents of {{F:/var/lib/ldap}} are created with
86user and group root and with permission 600, making the contents inaccessible
87to the slapd server.
88
89H3: ldap_*: Can't chase referral
90
91This is caused by the line
92
93>      referral        ldap://root.openldap.org
94
95In {{F:slapd.conf}}, it was provided as an example for how to use referrals
96in the original file. However if your machine is not permanently connected to
97the Internet, it will fail to find the server, and hence produce an error message.
98
99To resolve, just place a # in front of line and restart slapd or point it to
100an available ldap server.
101
102See also: {{ldapadd}}(1), {{ldapmodify}}(1) and {{slapd.conf}}(5)
103
104H3: ldap_*: server is unwilling to perform
105
106slapd will return an unwilling to perform error if the backend holding the
107target entry does not support the given operation.
108
109The password backend is only willing to perform searches. It will return an
110unwilling to perform error for all other operations.
111
112H3: ldap_*: Insufficient access
113
114This error occurs when server denies the operation due to insufficient access.
115This is usually caused by binding to a DN with insufficient privileges
116(or binding anonymously) to perform the operation.
117
118You can bind as the rootdn/rootpw specified in {{slapd.conf}}(5) to gain full
119access. Otherwise, you must bind to an entry which has been granted the
120appropriate rights through access controls.
121
122
123H3: ldap_*: Invalid DN syntax
124
125The target (or other) DN of the operation is invalid. This implies that either
126the string representation of the DN is not in the required form, one of the
127types in the attribute value assertions is not defined, or one of the values
128in the attribute value assertions does not conform to the appropriate syntax.
129
130H3: ldap_*: Referral hop limit exceeded
131
132This error generally occurs when the client chases a referral which refers
133itself back to a server it already contacted. The server responds as it did
134before and the client loops. This loop is detected when the hop limit is exceeded.
135
136This is most often caused through misconfiguration of the server's default
137referral. The default referral should not be itself:
138
139That is, on {{F:ldap://myldap/}} the default referral should not be {{F:ldap://myldap/}}
140 (or any hostname/ip which is equivalent to myldap).
141
142H3: ldap_*: operations error
143
144In some versions of {{slapd}}(8), {{operationsError}} was returned instead of other.
145
146H3: ldap_*: other error
147
148The other result code indicates an internal error has occurred.
149While the additional information provided with the result code might provide
150some hint as to the problem, often one will need to consult the server's log files.
151
152H3: ldap_add/modify: Invalid syntax
153
154This error is reported when a value of an attribute does not conform to syntax
155restrictions. Additional information is commonly provided stating which value
156of which attribute was found to be invalid. Double check this value and other
157values (the server will only report the first error it finds).
158
159Common causes include:
160
161* extraneous whitespace (especially trailing whitespace)
162* improperly encoded characters (LDAPv3 uses UTF-8 encoded Unicode)
163* empty values (few syntaxes allow empty values)
164
165
166For certain syntax, like OBJECT IDENTIFIER (OID), this error can indicate that
167the OID descriptor (a "short name") provided is unrecognized. For instance,
168this error is returned if the {{objectClass}} value provided is unrecognized.
169
170H3: ldap_add/modify: Object class violation
171
172This error is returned with the entry to be added or the entry as modified
173violates the object class schema rules. Normally additional information is
174returned the error detailing the violation. Some of these are detailed below.
175
176Violations related to the entry's attributes:
177
178>      Attribute not allowed
179
180A provided attribute is not allowed by the entry's object class(es).
181
182>      Missing required attribute
183
184An attribute required by the entry's object class(es) was not provided.
185
186Violations related to the entry's class(es):
187
188>      Entry has no objectClass attribute
189
190The entry did not state which object classes it belonged to.
191
192>      Unrecognized objectClass
193
194One (or more) of the listed objectClass values is not recognized.
195
196>      No structural object class provided
197
198None of the listed objectClass values is structural.
199
200>      Invalid structural object class chain
201
202Two or more structural objectClass values are not in same structural object
203class chain.
204
205>      Structural object class modification
206
207Modify operation attempts to change the structural class of the entry.
208
209>      Instantiation of abstract objectClass.
210
211An abstract class is not subordinate to any listed structural or auxiliary class.
212
213>      Invalid structural object class
214
215Other structural object class problem.
216
217>      No structuralObjectClass operational attribute
218
219This is commonly returned when a shadow server is provided an entry which does
220not contain the structuralObjectClass operational attribute.
221
222
223Note that the above error messages as well as the above answer assumes basic
224knowledge of LDAP/X.500 schema.
225
226H3: ldap_add: No such object
227
228The "ldap_add: No such object" error is commonly returned if parent of the
229entry being added does not exist. Add the parent entry first...
230
231For example, if you are adding "cn=bob,dc=domain,dc=com" and you get:
232
233>      ldap_add: No such object
234
235The entry "dc=domain,dc=com" likely doesn't exist. You can use ldapsearch to
236see if does exist:
237
238>      ldapsearch -b 'dc=domain,dc=com' -s base '(objectclass=*)'
239
240If it doesn't, add it. See {{SECT:A Quick-Start Guide}} for assistance.
241
242Note: if the entry being added is the same as database suffix, it's parent
243isn't required. i.e.: if your suffix is "dc=domain,dc=com", "dc=com" doesn't
244need to exist to add "dc=domain,dc=com".
245
246This error will also occur if you try to add any entry that the server is not
247configured to hold.
248
249For example, if your database suffix is "dc=domain,dc=com" and you attempt to
250add "dc=domain2,dc=com", "dc=com", "dc=domain,dc=org", "o=domain,c=us", or an
251other DN in the "dc=domain,dc=com" subtree, the server will return a
252 "No such object" (or referral) error.
253
254{{slapd}}(8) will generally return "no global superior knowledge" as additional
255information indicating its return noSuchObject instead of a referral as the
256server is not configured with knowledge of a global superior server.
257
258
259H3: ldap add: invalid structural object class chain
260
261This particular error refers to the rule about STRUCTURAL objectclasses, which
262states that an object is of one STRUCTURAL class, the structural class of the
263object. The object is said to belong to this class, zero or more auxiliaries
264 classes, and their super classes.
265
266While all of these classes are commonly listed in the objectClass attribute of
267the entry, one of these classes is the structural object class of the entry.
268Thus, it is OK for an objectClass attribute
269to contain inetOrgPerson, organizationalPerson, and person because they inherit
270 one from another to form a single super class chain. That is, inetOrgPerson SUPs
271organizationPerson SUPs person. On the other hand, it is invalid for both inetOrgPerson
272and account to be listed in objectClass as inetOrgPerson and account are not
273part of the same super class chain (unless some other class is also listed
274with is a subclass of both).
275
276To resolve this problem, one must determine which class will better serve
277structural object class for the entry, adding this class to the objectClass
278attribute (if not already present), and remove any other structural class from
279the entry's objectClass attribute which is not a super class of the structural
280object class.
281
282Which object class is better depends on the particulars of the situation.
283One generally should consult the documentation for the applications one is
284using for help in making the determination.
285
286H3: ldap_add: no structuralObjectClass operational attribute
287
288ldapadd(1) may error:
289
290>      adding new entry "uid=XXX,ou=People,o=campus,c=ru"
291>        ldap_add: Internal (implementation specific) error (80)
292>           additional info: no structuralObjectClass operational attribute
293
294when slapd(8) cannot determine, based upon the contents of the objectClass
295attribute, what the structural class of the object should be.
296
297
298H3: ldap_add/modify/rename: Naming violation
299
300OpenLDAP's slapd checks for naming attributes and distinguished values consistency,
301according to RFC 4512.
302
303Naming attributes are those attributeTypes that appear in an entry's RDN;
304 distinguished values are the values of the naming attributes that appear in
305an entry's RDN, e.g, in
306
307>      cn=Someone+mail=someone@example.com,dc=example,dc=com
308
309the naming attributes are cn and mail, and the distinguished values are
310Someone and someone@example.com.
311
312OpenLDAP's slapd checks for consistency when:
313
314* adding an entry
315* modifying an entry, if the values of the naming attributes are changed
316* renaming an entry, if the RDN of the entry changes
317
318Possible causes of error are:
319
320* the naming attributes are not present in the entry; for example:
321
322>                dn: dc=example,dc=com
323>                objectClass: organization
324>                o: Example
325>                # note: "dc: example" is missing
326
327* the naming attributes are present in the entry, but in the attributeType
328definition they are marked as:
329- collective
330- operational
331- obsolete
332
333* the naming attributes are present in the entry, but the distinguished values
334are not; for example:
335
336>                dn: dc=example,dc=com
337>                objectClass: domain
338>                dc: foobar
339>                # note: "dc" is present, but the value is not "example"
340
341* the naming attributes are present in the entry, with the distinguished values, but the naming attributes:
342- do not have an equality field, so equality cannot be asserted
343- the matching rule is not supported (yet)
344- the matching rule is not appropriate
345
346* the given distinguished values do not comply with their syntax
347
348* other errors occurred during the validation/normalization/match process;
349this is a catchall: look at previous logs for details in case none of the above
350apply to your case.
351
352In any case, make sure that the attributeType definition for the naming attributes
353contains an appropriate EQUALITY field; or that of the superior, if they are
354defined based on a superior attributeType (look at the SUP field). See RFC 4512 for details.
355
356
357H3: ldap_add/delete/modify/rename: no global superior knowledge
358
359If the target entry name places is not within any of the databases the server
360is configured to hold and the server has no knowledge of a global superior,
361the server will indicate it is unwilling to perform the operation and provide
362the text "no global superior knowledge" as additional text.
363
364Likely the entry name is incorrect, or the server is not properly configured
365to hold the named entry, or, in distributed directory environments, a default
366referral was not configured.
367
368
369H3: ldap_bind: Insufficient access
370
371Current versions of slapd(8) requires that clients have authentication
372permission to attribute types used for authentication purposes before accessing
373them to perform the bind operation. As all bind operations are done anonymously
374(regardless of previous bind success), the auth access must be granted to anonymous.
375
376In the example ACL below grants the following access:
377
378* to anonymous users:
379- permission to authenticate using values of userPassword
380* to authenticated users:
381- permission to update (but not read) their userPassword
382- permission to read any object excepting values of userPassword
383
384All other access is denied.
385
386>        access to attr=userPassword
387>          by self =w
388>          by anonymous auth
389
390>        access *
391>          by self write
392>          by users read
393
394
395H3: ldap_bind: Invalid credentials
396
397The error usually occurs when the credentials (password) provided does not
398match the userPassword held in entry you are binding to.
399
400The error can also occur when the bind DN specified is not known to the server.
401
402Check both! In addition to the cases mentioned above you should check if the
403server denied access to userPassword on selected parts of the directory. In
404fact, slapd always returns "Invalid credentials" in case of failed bind,
405regardless of the failure reason, since other return codes could reveal the
406validity of the user's name.
407
408To debug access rules defined in slapd.conf, add "ACL" to log level.
409
410H3: ldap_bind: Protocol error
411
412There error is generally occurs when the LDAP version requested by the
413client is not supported by the server.
414
415The OpenLDAP Software 2.x server, by default, only accepts version 3 LDAP Bind
416requests but can be configured to accept a version 2 LDAP Bind request.
417
418Note: The 2.x server expects LDAPv3 [RFC4510] to be used when the client
419requests version 3 and expects a limited LDAPv3 variant (basically, LDAPv3
420syntax and semantics in an LDAPv2 PDUs) to be used when version 2 is expected.
421
422This variant is also sometimes referred to as LDAPv2+, but differs from the U-Mich
423LDAP variant in a number of ways.
424
425H3: ldap_modify: cannot modify object class
426
427This message is commonly returned when attempting to modify the objectClass
428attribute in a manner inconsistent with the LDAP/X.500 information model. In
429particular, it commonly occurs when one tries to change the structure of the
430object from one class to another, for instance, trying to change an 'apple'
431into a 'pear' or a 'fruit' into a 'pear'.
432
433Such changes are disallowed by the slapd(8) in accordance with LDAP and X.500 restrictions.
434
435
436H3: ldap_sasl_interactive_bind_s: ...
437
438If you intended to bind using a DN and password and get an error from
439ldap_sasl_interactive_bind_s, you likely forgot to provide a '-x' option to
440the command. By default, SASL authentication is used. '-x' is necessary to
441select "simple" authentication.
442
443
444H3: ldap_sasl_interactive_bind_s: No such Object
445
446This indicates that LDAP SASL authentication function could not read the
447Root DSE.
448The error will occur when the server doesn't provide a root DSE. This may be
449due to access controls.
450
451
452H3: ldap_sasl_interactive_bind_s: No such attribute
453
454This indicates that LDAP SASL authentication function could read the Root
455DSE but it contained no supportedSASLMechanism attribute.
456
457The supportedSASLmechanism attribute lists mechanisms currently available.
458The list may be empty because none of the supported mechanisms are currently
459available. For example, EXTERNAL is listed only if the client has established
460its identity by authenticating at a lower level (e.g. TLS).
461
462Note: the attribute may not be visible due to access controls
463
464Note: SASL bind is the default for all OpenLDAP tools, e.g. ldapsearch(1), ldapmodify(1). To force use of "simple" bind, use the "-x" option. Use of "simple" bind is not recommended unless one has adequate confidentiality protection in place (e.g. TLS/SSL, IPSEC).
465
466H3: ldap_sasl_interactive_bind_s: Unknown authentication method
467
468This indicates that none of the SASL authentication supported by the server
469are supported by the client, or that they are too weak or otherwise inappropriate
470for use by the client. Note that the default security options disallows the use
471of certain mechanisms such as ANONYMOUS and PLAIN (without TLS).
472
473Note: SASL bind is the default for all OpenLDAP tools. To force use of "simple" bind, use the "-x" option. Use of "simple" bind is not recommended unless one has adequate confidentiality protection in place (e.g. TLS/SSL, IPSEC).
474
475H3: ldap_sasl_interactive_bind_s: Local error (82)
476
477Apparently not having forward and reverse DNS entries for the LDAP server can result in this error.
478
479
480H3: ldap_search: Partial results and referral received
481
482This error is returned with the server responses to an LDAPv2 search query
483with both results (zero or more matched entries) and references (referrals to other servers).
484See also: ldapsearch(1).
485
486If the updatedn on the replica does not exist, a referral will be returned.
487It may do this as well if the ACL needs tweaking.
488
489H3: ldap_start_tls: Operations error
490
491ldapsearch(1) and other tools will return
492
493>        ldap_start_tls: Operations error (1)
494>              additional info: TLS already started
495
496When the user (though command line options and/or ldap.conf(5)) has requested
497TLS (SSL) be started twice. For instance, when specifying both "-H ldaps://server.do.main" and "-ZZ".
498
499H2: Other Errors
500
501H3: ber_get_next on fd X failed errno=34 (Numerical result out of range)
502
503This slapd error generally indicates that the client sent a message that
504exceeded an administrative limit. See sockbuf_max_incoming and sockbuf_max_incoming_auth
505configuration directives in slapd.conf(5).
506
507H3: ber_get_next on fd X failed errno=11 (Resource temporarily unavailable)
508
509This message is not indicative of abnormal behavior or error. It simply means
510that expected data is not yet available from the resource, in this context, a
511network socket. slapd(8) will process the data once it does becomes available.
512
513H3: daemon: socket() failed errno=97 (Address family not supported)
514
515This message indicates that the operating system does not support one of the
516(protocol) address families which slapd(8) was configured to support. Most
517commonly, this occurs when slapd(8) was configured to support IPv6 yet the
518operating system kernel wasn't. In such cases, the message can be ignored.
519
520H3: GSSAPI: gss_acquire_cred: Miscellaneous failure; Permission denied;
521
522This message means that slapd is not running as root and, thus, it cannot get
523its Kerberos 5 key from the keytab, usually file /etc/krb5.keytab.
524
525A keytab file is used to store keys that are to be used by services or daemons
526that are started at boot time. It is very important that these secrets are kept
527beyond reach of intruders.
528
529That's why the default keytab file is owned by root and protected from being
530read by others. Do not mess with these permissions, build a different keytab
531file for slapd instead, and make sure it is owned by the user that slapd
532runs as.
533
534To do this, start kadmin, and enter the following commands:
535
536>     addprinc -randkey ldap/ldap.example.com@EXAMPLE.COM
537>     ktadd -k /etc/openldap/ldap.keytab ldap/ldap.example.com@EXAMPLE.COM
538
539Then, on the shell, do:
540
541>     chown ldap:ldap /etc/openldap/ldap.keytab
542>     chmod 600 /etc/openldap/ldap.keytab
543
544Now you have to tell slapd (well, actually tell the gssapi library in Kerberos 5
545that is invoked by Cyrus SASL) where to find the new keytab. You do this by
546setting the environment variable KRB5_KTNAME like this:
547
548>     export KRB5_KTNAME="FILE:/etc/openldap/ldap.keytab"
549
550Set that environment variable on the slapd start script (Red Hat users might
551find /etc/sysconfig/ldap a perfect place).
552
553This only works if you are using MIT kerberos. It doesn't work with Heimdal,
554for instance.
555
556
557In Heimdal there is a function gsskrb5_register_acceptor_identity() that sets
558the path of the keytab file you want to use. In Cyrus SASL 2 you can add
559
560>    keytab: /path/to/file
561
562to your application's SASL config file to use this feature. This only works with Heimdal.
563
564
565H3: access from unknown denied
566
567This related to TCP wrappers. See hosts_access(5) for more information.
568in the log file: "access from unknown denied" This related to TCP wrappers.
569See hosts_access(5) for more information.
570for example: add the line "slapd: .hosts.you.want.to.allow" in /etc/hosts.allow
571to get rid of the error.
572
573H3: ldap_read: want=# error=Resource temporarily unavailable
574
575This message occurs normally. It means that pending data is not yet available
576from the resource, a network socket. slapd(8) will process the data once it
577becomes available.
578
579H3: `make test' fails
580
581Some times, `make test' fails at the very first test with an obscure message like
582
583>    make test
584>    make[1]: Entering directory `/ldap_files/openldap-2.5.0/tests'
585>    make[2]: Entering directory `/ldap_files/openldap-2.5.0/tests'
586>    Initiating LDAP tests for MDB...
587>    Cleaning up test run directory leftover from previous run.
588>     Running ./scripts/all...
589>    >>>>> Executing all LDAP tests for mdb
590>    >>>>> Starting test000-rootdse ...
591>    running defines.sh
592>    Starting slapd on TCP/IP port 9011...
593>    Using ldapsearch to retrieve the root DSE...
594>    Waiting 5 seconds for slapd to start...
595>    ./scripts/test000-rootdse: line 40: 10607 Segmentation fault $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING >$LOG1 2>&1
596>    Waiting 5 seconds for slapd to start...
597>    Waiting 5 seconds for slapd to start...
598>    Waiting 5 seconds for slapd to start...
599>    Waiting 5 seconds for slapd to start...
600>    Waiting 5 seconds for slapd to start...
601>    ./scripts/test000-rootdse: kill: (10607) - No such pid
602>    ldap_sasl_bind_s: Can't contact LDAP server (-1)
603>    >>>>> Test failed
604>    >>>>> ./scripts/test000-rootdse failed (exit 1)
605>    make[2]: *** [mdb-yes] Error 1
606>    make[2]: Leaving directory `/ldap_files/openldap-2.5.0/tests'
607>    make[1]: *** [test] Error 2
608>    make[1]: Leaving directory `/ldap_files/openldap-2.5.0/tests'
609>    make: *** [test] Error 2
610
611or so. Usually, the five lines
612
613    Waiting 5 seconds for slapd to start...
614
615indicate that slapd didn't start at all.
616
617In tests/testrun/slapd.1.log there is a full log of what slapd wrote while
618trying to start. The log level can be increased by setting the environment
619variable SLAPD_DEBUG to the corresponding value; see loglevel in slapd.conf(5)
620for the meaning of log levels.
621
622A typical reason for this behavior is a runtime link problem, i.e. slapd cannot
623find some dynamic libraries it was linked against. Try running ldd(1) on slapd
624(for those architectures that support runtime linking).
625
626There might well be other reasons; the contents of the log file should help
627clarifying them.
628
629Tests that fire up multiple instances of slapd typically log to tests/testrun/slapd.<n>.log,
630with a distinct <n> for each instance of slapd; list tests/testrun/ for possible
631values of <n>.
632
633H3: ldap_*: Internal (implementation specific) error (80) - additional info: entry index delete failed
634
635This seems to be related with wrong ownership of the MDB's dir (/var/lib/ldap)
636and files. The files must be owned by the user that slapd runs as.
637
638>    chown -R ldap:ldap /var/lib/ldap
639
640fixes it in Debian
641
642
643H3: ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)
644
645Using SASL, when a client contacts LDAP server, the slapd service dies
646immediately and client gets an error :
647
648>     SASL/GSSAPI authentication started ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)
649
650Then check the slapd service, it stopped.
651