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