2 # Copyright 2007-2024 The OpenLDAP Foundation, All Rights Reserved.
3 # COPYING RESTRICTIONS APPLY, see COPYRIGHT.
5 H1: Common errors encountered when using OpenLDAP Software
7 The following sections attempt to summarize the most common causes of LDAP errors
10 H2: Common causes of LDAP errors
12 H3: ldap_*: Can't contact LDAP server
14 The {{B:Can't contact LDAP server}} error is usually returned when the LDAP
15 server cannot be contacted. This may occur for many reasons:
17 * the LDAP server is not running; this can be checked by running, for example,
19 > telnet <host> <port>
21 replacing {{<host>}} and {{<port>}} with the hostname and the port the server
22 is supposed to listen on.
23 * the client has not been instructed to contact a running server; with OpenLDAP
24 command-line tools this is accomplished by providing the -H switch, whose
25 argument is a valid LDAP url corresponding to the interface the server is
26 supposed to be listening on.
28 H3: ldap_*: No such object
30 The {{B:no such object}} error is generally returned when the target DN of the
31 operation cannot be located. This section details reasons common to all
32 operations. You should also look for answers specific to the operation
33 (as indicated in the error message).
35 The most common reason for this error is non-existence of the named object. First,
38 Also 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
40 server and get this message, it may simply be that you have yet to add the
41 object you are trying to locate.
43 The error commonly occurs because a DN was not specified and a default was not
46 If you have a suffix specified in slapd.conf eg.
48 > suffix "dc=example,dc=com"
52 > ldapsearch -b 'dc=example,dc=com' '(cn=jane*)'
54 to tell it where to start the search.
56 The {{F:-b}} should be specified for all LDAP commands unless you have an
57 {{ldap.conf}}(5) default configured.
59 See {{ldapsearch}}(1), {{ldapmodify}}(1)
61 Also, {{slapadd}}(8) and its ancillary programs are very strict about the
62 syntax of the LDIF file.
64 Some liberties in the LDIF file may result in an apparently successful creation
65 of the database, but accessing some parts of it may be difficult.
67 One known common error in database creation is putting a blank line before the
68 first entry in the LDIF file. {{B:There must be no leading blank lines in the
71 It is generally recommended that {{ldapadd}}(1) be used instead of {{slapadd}}(8)
72 when adding new entries your directory. {{slapadd}}(8) should be used to bulk
73 load entries known to be valid.
75 Another cause of this message is a referral
76 ({SECT:Constructing a Distributed Directory Service}}) entry to an unpopulated
79 Either remove the referral, or add a single record with the referral base DN
80 to the empty directory.
82 This error may also occur when slapd is unable to access the contents of its
83 database because of file permission problems. For instance, on a Red Hat Linux
84 system, slapd runs as user 'ldap'. When slapadd is run as root to create a
85 database from scratch, the contents of {{F:/var/lib/ldap}} are created with
86 user and group root and with permission 600, making the contents inaccessible
89 H3: ldap_*: Can't chase referral
91 This is caused by the line
93 > referral ldap://root.openldap.org
95 In {{F:slapd.conf}}, it was provided as an example for how to use referrals
96 in the original file. However if your machine is not permanently connected to
97 the Internet, it will fail to find the server, and hence produce an error message.
99 To resolve, just place a # in front of line and restart slapd or point it to
100 an available ldap server.
102 See also: {{ldapadd}}(1), {{ldapmodify}}(1) and {{slapd.conf}}(5)
104 H3: ldap_*: server is unwilling to perform
106 slapd will return an unwilling to perform error if the backend holding the
107 target entry does not support the given operation.
109 The password backend is only willing to perform searches. It will return an
110 unwilling to perform error for all other operations.
112 H3: ldap_*: Insufficient access
114 This error occurs when server denies the operation due to insufficient access.
115 This is usually caused by binding to a DN with insufficient privileges
116 (or binding anonymously) to perform the operation.
118 You can bind as the rootdn/rootpw specified in {{slapd.conf}}(5) to gain full
119 access. Otherwise, you must bind to an entry which has been granted the
120 appropriate rights through access controls.
123 H3: ldap_*: Invalid DN syntax
125 The target (or other) DN of the operation is invalid. This implies that either
126 the string representation of the DN is not in the required form, one of the
127 types in the attribute value assertions is not defined, or one of the values
128 in the attribute value assertions does not conform to the appropriate syntax.
130 H3: ldap_*: Referral hop limit exceeded
132 This error generally occurs when the client chases a referral which refers
133 itself back to a server it already contacted. The server responds as it did
134 before and the client loops. This loop is detected when the hop limit is exceeded.
136 This is most often caused through misconfiguration of the server's default
137 referral. The default referral should not be itself:
139 That is, on {{F:ldap://myldap/}} the default referral should not be {{F:ldap://myldap/}}
140 (or any hostname/ip which is equivalent to myldap).
142 H3: ldap_*: operations error
144 In some versions of {{slapd}}(8), {{operationsError}} was returned instead of other.
146 H3: ldap_*: other error
148 The other result code indicates an internal error has occurred.
149 While the additional information provided with the result code might provide
150 some hint as to the problem, often one will need to consult the server's log files.
152 H3: ldap_add/modify: Invalid syntax
154 This error is reported when a value of an attribute does not conform to syntax
155 restrictions. Additional information is commonly provided stating which value
156 of which attribute was found to be invalid. Double check this value and other
157 values (the server will only report the first error it finds).
159 Common causes include:
161 * extraneous whitespace (especially trailing whitespace)
162 * improperly encoded characters (LDAPv3 uses UTF-8 encoded Unicode)
163 * empty values (few syntaxes allow empty values)
166 For certain syntax, like OBJECT IDENTIFIER (OID), this error can indicate that
167 the OID descriptor (a "short name") provided is unrecognized. For instance,
168 this error is returned if the {{objectClass}} value provided is unrecognized.
170 H3: ldap_add/modify: Object class violation
172 This error is returned with the entry to be added or the entry as modified
173 violates the object class schema rules. Normally additional information is
174 returned the error detailing the violation. Some of these are detailed below.
176 Violations related to the entry's attributes:
178 > Attribute not allowed
180 A provided attribute is not allowed by the entry's object class(es).
182 > Missing required attribute
184 An attribute required by the entry's object class(es) was not provided.
186 Violations related to the entry's class(es):
188 > Entry has no objectClass attribute
190 The entry did not state which object classes it belonged to.
192 > Unrecognized objectClass
194 One (or more) of the listed objectClass values is not recognized.
196 > No structural object class provided
198 None of the listed objectClass values is structural.
200 > Invalid structural object class chain
202 Two or more structural objectClass values are not in same structural object
205 > Structural object class modification
207 Modify operation attempts to change the structural class of the entry.
209 > Instantiation of abstract objectClass.
211 An abstract class is not subordinate to any listed structural or auxiliary class.
213 > Invalid structural object class
215 Other structural object class problem.
217 > No structuralObjectClass operational attribute
219 This is commonly returned when a shadow server is provided an entry which does
220 not contain the structuralObjectClass operational attribute.
223 Note that the above error messages as well as the above answer assumes basic
224 knowledge of LDAP/X.500 schema.
226 H3: ldap_add: No such object
228 The "ldap_add: No such object" error is commonly returned if parent of the
229 entry being added does not exist. Add the parent entry first...
231 For example, if you are adding "cn=bob,dc=domain,dc=com" and you get:
233 > ldap_add: No such object
235 The entry "dc=domain,dc=com" likely doesn't exist. You can use ldapsearch to
238 > ldapsearch -b 'dc=domain,dc=com' -s base '(objectclass=*)'
240 If it doesn't, add it. See {{SECT:A Quick-Start Guide}} for assistance.
242 Note: if the entry being added is the same as database suffix, it's parent
243 isn't required. i.e.: if your suffix is "dc=domain,dc=com", "dc=com" doesn't
244 need to exist to add "dc=domain,dc=com".
246 This error will also occur if you try to add any entry that the server is not
249 For example, if your database suffix is "dc=domain,dc=com" and you attempt to
250 add "dc=domain2,dc=com", "dc=com", "dc=domain,dc=org", "o=domain,c=us", or an
251 other DN in the "dc=domain,dc=com" subtree, the server will return a
252 "No such object" (or referral) error.
254 {{slapd}}(8) will generally return "no global superior knowledge" as additional
255 information indicating its return noSuchObject instead of a referral as the
256 server is not configured with knowledge of a global superior server.
259 H3: ldap add: invalid structural object class chain
261 This particular error refers to the rule about STRUCTURAL objectclasses, which
262 states that an object is of one STRUCTURAL class, the structural class of the
263 object. The object is said to belong to this class, zero or more auxiliaries
264 classes, and their super classes.
266 While all of these classes are commonly listed in the objectClass attribute of
267 the entry, one of these classes is the structural object class of the entry.
268 Thus, it is OK for an objectClass attribute
269 to contain inetOrgPerson, organizationalPerson, and person because they inherit
270 one from another to form a single super class chain. That is, inetOrgPerson SUPs
271 organizationPerson SUPs person. On the other hand, it is invalid for both inetOrgPerson
272 and account to be listed in objectClass as inetOrgPerson and account are not
273 part of the same super class chain (unless some other class is also listed
274 with is a subclass of both).
276 To resolve this problem, one must determine which class will better serve
277 structural object class for the entry, adding this class to the objectClass
278 attribute (if not already present), and remove any other structural class from
279 the entry's objectClass attribute which is not a super class of the structural
282 Which object class is better depends on the particulars of the situation.
283 One generally should consult the documentation for the applications one is
284 using for help in making the determination.
286 H3: ldap_add: no structuralObjectClass operational attribute
288 ldapadd(1) may error:
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
294 when slapd(8) cannot determine, based upon the contents of the objectClass
295 attribute, what the structural class of the object should be.
298 H3: ldap_add/modify/rename: Naming violation
300 OpenLDAP's slapd checks for naming attributes and distinguished values consistency,
301 according to RFC 4512.
303 Naming attributes are those attributeTypes that appear in an entry's RDN;
304 distinguished values are the values of the naming attributes that appear in
305 an entry's RDN, e.g, in
307 > cn=Someone+mail=someone@example.com,dc=example,dc=com
309 the naming attributes are cn and mail, and the distinguished values are
310 Someone and someone@example.com.
312 OpenLDAP's slapd checks for consistency when:
315 * modifying an entry, if the values of the naming attributes are changed
316 * renaming an entry, if the RDN of the entry changes
318 Possible causes of error are:
320 * the naming attributes are not present in the entry; for example:
322 > dn: dc=example,dc=com
323 > objectClass: organization
325 > # note: "dc: example" is missing
327 * the naming attributes are present in the entry, but in the attributeType
328 definition they are marked as:
333 * the naming attributes are present in the entry, but the distinguished values
334 are not; for example:
336 > dn: dc=example,dc=com
337 > objectClass: domain
339 > # note: "dc" is present, but the value is not "example"
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
346 * the given distinguished values do not comply with their syntax
348 * other errors occurred during the validation/normalization/match process;
349 this is a catchall: look at previous logs for details in case none of the above
352 In any case, make sure that the attributeType definition for the naming attributes
353 contains an appropriate EQUALITY field; or that of the superior, if they are
354 defined based on a superior attributeType (look at the SUP field). See RFC 4512 for details.
357 H3: ldap_add/delete/modify/rename: no global superior knowledge
359 If the target entry name places is not within any of the databases the server
360 is configured to hold and the server has no knowledge of a global superior,
361 the server will indicate it is unwilling to perform the operation and provide
362 the text "no global superior knowledge" as additional text.
364 Likely the entry name is incorrect, or the server is not properly configured
365 to hold the named entry, or, in distributed directory environments, a default
366 referral was not configured.
369 H3: ldap_bind: Insufficient access
371 Current versions of slapd(8) requires that clients have authentication
372 permission to attribute types used for authentication purposes before accessing
373 them 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.
376 In the example ACL below grants the following access:
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
384 All other access is denied.
386 > access to attr=userPassword
395 H3: ldap_bind: Invalid credentials
397 The error usually occurs when the credentials (password) provided does not
398 match the userPassword held in entry you are binding to.
400 The error can also occur when the bind DN specified is not known to the server.
402 Check both! In addition to the cases mentioned above you should check if the
403 server denied access to userPassword on selected parts of the directory. In
404 fact, slapd always returns "Invalid credentials" in case of failed bind,
405 regardless of the failure reason, since other return codes could reveal the
406 validity of the user's name.
408 To debug access rules defined in slapd.conf, add "ACL" to log level.
410 H3: ldap_bind: Protocol error
412 There error is generally occurs when the LDAP version requested by the
413 client is not supported by the server.
415 The OpenLDAP Software 2.x server, by default, only accepts version 3 LDAP Bind
416 requests but can be configured to accept a version 2 LDAP Bind request.
418 Note: The 2.x server expects LDAPv3 [RFC4510] to be used when the client
419 requests version 3 and expects a limited LDAPv3 variant (basically, LDAPv3
420 syntax and semantics in an LDAPv2 PDUs) to be used when version 2 is expected.
422 This variant is also sometimes referred to as LDAPv2+, but differs from the U-Mich
423 LDAP variant in a number of ways.
425 H3: ldap_modify: cannot modify object class
427 This message is commonly returned when attempting to modify the objectClass
428 attribute in a manner inconsistent with the LDAP/X.500 information model. In
429 particular, it commonly occurs when one tries to change the structure of the
430 object from one class to another, for instance, trying to change an 'apple'
431 into a 'pear' or a 'fruit' into a 'pear'.
433 Such changes are disallowed by the slapd(8) in accordance with LDAP and X.500 restrictions.
436 H3: ldap_sasl_interactive_bind_s: ...
438 If you intended to bind using a DN and password and get an error from
439 ldap_sasl_interactive_bind_s, you likely forgot to provide a '-x' option to
440 the command. By default, SASL authentication is used. '-x' is necessary to
441 select "simple" authentication.
444 H3: ldap_sasl_interactive_bind_s: No such Object
446 This indicates that LDAP SASL authentication function could not read the
448 The error will occur when the server doesn't provide a root DSE. This may be
449 due to access controls.
452 H3: ldap_sasl_interactive_bind_s: No such attribute
454 This indicates that LDAP SASL authentication function could read the Root
455 DSE but it contained no supportedSASLMechanism attribute.
457 The supportedSASLmechanism attribute lists mechanisms currently available.
458 The list may be empty because none of the supported mechanisms are currently
459 available. For example, EXTERNAL is listed only if the client has established
460 its identity by authenticating at a lower level (e.g. TLS).
462 Note: the attribute may not be visible due to access controls
464 Note: 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).
466 H3: ldap_sasl_interactive_bind_s: Unknown authentication method
468 This indicates that none of the SASL authentication supported by the server
469 are supported by the client, or that they are too weak or otherwise inappropriate
470 for use by the client. Note that the default security options disallows the use
471 of certain mechanisms such as ANONYMOUS and PLAIN (without TLS).
473 Note: 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).
475 H3: ldap_sasl_interactive_bind_s: Local error (82)
477 Apparently not having forward and reverse DNS entries for the LDAP server can result in this error.
480 H3: ldap_search: Partial results and referral received
482 This error is returned with the server responses to an LDAPv2 search query
483 with both results (zero or more matched entries) and references (referrals to other servers).
484 See also: ldapsearch(1).
486 If the updatedn on the replica does not exist, a referral will be returned.
487 It may do this as well if the ACL needs tweaking.
489 H3: ldap_start_tls: Operations error
491 ldapsearch(1) and other tools will return
493 > ldap_start_tls: Operations error (1)
494 > additional info: TLS already started
496 When the user (though command line options and/or ldap.conf(5)) has requested
497 TLS (SSL) be started twice. For instance, when specifying both "-H ldaps://server.do.main" and "-ZZ".
501 H3: ber_get_next on fd X failed errno=34 (Numerical result out of range)
503 This slapd error generally indicates that the client sent a message that
504 exceeded an administrative limit. See sockbuf_max_incoming and sockbuf_max_incoming_auth
505 configuration directives in slapd.conf(5).
507 H3: ber_get_next on fd X failed errno=11 (Resource temporarily unavailable)
509 This message is not indicative of abnormal behavior or error. It simply means
510 that expected data is not yet available from the resource, in this context, a
511 network socket. slapd(8) will process the data once it does becomes available.
513 H3: daemon: socket() failed errno=97 (Address family not supported)
515 This message indicates that the operating system does not support one of the
516 (protocol) address families which slapd(8) was configured to support. Most
517 commonly, this occurs when slapd(8) was configured to support IPv6 yet the
518 operating system kernel wasn't. In such cases, the message can be ignored.
520 H3: GSSAPI: gss_acquire_cred: Miscellaneous failure; Permission denied;
522 This message means that slapd is not running as root and, thus, it cannot get
523 its Kerberos 5 key from the keytab, usually file /etc/krb5.keytab.
525 A keytab file is used to store keys that are to be used by services or daemons
526 that are started at boot time. It is very important that these secrets are kept
527 beyond reach of intruders.
529 That's why the default keytab file is owned by root and protected from being
530 read by others. Do not mess with these permissions, build a different keytab
531 file for slapd instead, and make sure it is owned by the user that slapd
534 To do this, start kadmin, and enter the following commands:
536 > addprinc -randkey ldap/ldap.example.com@EXAMPLE.COM
537 > ktadd -k /etc/openldap/ldap.keytab ldap/ldap.example.com@EXAMPLE.COM
539 Then, on the shell, do:
541 > chown ldap:ldap /etc/openldap/ldap.keytab
542 > chmod 600 /etc/openldap/ldap.keytab
544 Now you have to tell slapd (well, actually tell the gssapi library in Kerberos 5
545 that is invoked by Cyrus SASL) where to find the new keytab. You do this by
546 setting the environment variable KRB5_KTNAME like this:
548 > export KRB5_KTNAME="FILE:/etc/openldap/ldap.keytab"
550 Set that environment variable on the slapd start script (Red Hat users might
551 find /etc/sysconfig/ldap a perfect place).
553 This only works if you are using MIT kerberos. It doesn't work with Heimdal,
557 In Heimdal there is a function gsskrb5_register_acceptor_identity() that sets
558 the path of the keytab file you want to use. In Cyrus SASL 2 you can add
560 > keytab: /path/to/file
562 to your application's SASL config file to use this feature. This only works with Heimdal.
565 H3: access from unknown denied
567 This related to TCP wrappers. See hosts_access(5) for more information.
568 in the log file: "access from unknown denied" This related to TCP wrappers.
569 See hosts_access(5) for more information.
570 for example: add the line "slapd: .hosts.you.want.to.allow" in /etc/hosts.allow
571 to get rid of the error.
573 H3: ldap_read: want=# error=Resource temporarily unavailable
575 This message occurs normally. It means that pending data is not yet available
576 from the resource, a network socket. slapd(8) will process the data once it
579 H3: `make test' fails
581 Some times, `make test' fails at the very first test with an obscure message like
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 ...
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)
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
611 or so. Usually, the five lines
613 Waiting 5 seconds for slapd to start...
615 indicate that slapd didn't start at all.
617 In tests/testrun/slapd.1.log there is a full log of what slapd wrote while
618 trying to start. The log level can be increased by setting the environment
619 variable SLAPD_DEBUG to the corresponding value; see loglevel in slapd.conf(5)
620 for the meaning of log levels.
622 A typical reason for this behavior is a runtime link problem, i.e. slapd cannot
623 find some dynamic libraries it was linked against. Try running ldd(1) on slapd
624 (for those architectures that support runtime linking).
626 There might well be other reasons; the contents of the log file should help
629 Tests that fire up multiple instances of slapd typically log to tests/testrun/slapd.<n>.log,
630 with a distinct <n> for each instance of slapd; list tests/testrun/ for possible
633 H3: ldap_*: Internal (implementation specific) error (80) - additional info: entry index delete failed
635 This seems to be related with wrong ownership of the MDB's dir (/var/lib/ldap)
636 and files. The files must be owned by the user that slapd runs as.
638 > chown -R ldap:ldap /var/lib/ldap
643 H3: ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)
645 Using SASL, when a client contacts LDAP server, the slapd service dies
646 immediately and client gets an error :
648 > SASL/GSSAPI authentication started ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)
650 Then check the slapd service, it stopped.