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