Возможные причины:
1. Строка слишком большой длины.
2. Неверный тип — строка записывается в числовой атрибут.
3. Неправильное значение, например, атрибут может принимать только определённое значение, либо одно из набора значений.
Возможные причины:
1. При добавлении записи — один или несколько атрибутов в LDIF (или операции добавления/замены) для записи в точности совпадают (дублируются).
Дополнительный текст: unable to get TLS Client DN (невозможно получить DN клиента TLS).
Возможные причины:
1. Не предоставлен сертификат клиента в случае, если директива TLSVerifyClient установлена в ‘demand’.
2. Не предоставлен сертификат клиента в случае, если директива TLSVerifyClient установлена в ‘never’. В этом случае данное сообщение об ошибке не является фатальным и обслуживание клиента продолжается.
Дополнительный текст: no global superior knowledge (нет сведений о глобальном вышестоящем каталоге) — имя записи, которую собираются добавить или модифицировать, не находится ни в одном из контекстов именования и у сервера нет правильной отсылки на вышестоящий каталог.
Возможная причина: не задан атрибут olcSuffix (директива suffix в slapd.conf) для DIT, на которое идёт ссылка.
Дополнительный текст: Shadow context; no update referral (теневой контекст (реплика); отсылки для выполнения обновлений не указано) — DIT, в которое собираются вносить изменения, является репликой в режиме «только для чтения», и, из-за отсутствия директивы updateref, невозможно возвратить отсылку.
Возможные причины:
1. Была попытка произвести запись в реплику «только для чтения» (в конфигурации syncrepl потребитель всегда в режиме «только для чтения»).
2. В конфигурации syncrepl multi-master в файле slapd.conf возможно пропущена директива mirrormode true.
3. Если slapd при запуске использовал файл slapd.conf, а директория slapd.d (cn=config) также существует, то при последующих модификациях DIT могут возникать ошибки с выдачей этого сообщения. В частности, в FreeBSD требуется наличие явного указания в rc.conf (slapd_cn_config=»YES») для принудительного использования slapd.d.
Возможная причина:
Попытка удаления атрибута (особенно в cn=config), удаление которого запрещено.
Дополнительный текст: olcDbDirectory: value #0: invalid path: No such file or directory
Возможная причина: перед инициализацией новой базы данных директория для её размещения должна существовать.
Эта функция доступна в версиях Frontline Standard, Business Plus, Enterprise Standard и Enterprise Plus, Education Fundamentals, Education Standard, Teaching and Learning Upgrade и Education Plus, Enterprise Essentials Plus. Сравнение версий
В случае возникновения неполадок при выполнении запросов LDAP во время и после подключения LDAP-клиента сервис Secure LDAP возвращает коды ошибок. Доступность этих кодов ошибок конечным пользователям через LDAP-клиенты зависит от клиента. Описанные в этой статье коды также заносятся в журналы аудита.
PROTOCOL_ERROR (2)
- Возвращается, если в запросе упоминается неподдерживаемая версия LDAP. Сервис Secure LDAP поддерживает LDAP версии 3.
- Возвращается, если в запросе упоминается неподдерживаемое действие. Google поддерживает следующие действия: Abandon (Отменить), Bind (Привязать), Extended (Расширено) (для StartTLS), Search (Поиск) и Unbind (Отменить привязку). Неподдерживаемые действия: Add (Добавить), Compare (Сравнить), Del (Удалить), Modify (Изменить) и ModifyDn (Изменить уникальное имя).
- Возвращается, если в запросе упоминается неподдерживаемый идентификатор заказа Oid. Действие Extended (Расширено) поддерживается Google только для StartTLS (Oid 1.3.6.1.4.1.1466.20037) через ранее не защищенное подключение.
AUTH_METHOD_NOT_SUPPORTED (7)
- Возвращается, если в запросе Bind упоминается неподдерживаемый метод аутентификации. Google поддерживает методы SIMPLE, SASL PLAIN, and SASL EXTERNAL.
ADMIN_LIMIT_EXCEEDED (11)
- Возвращается при превышении квоты LDAP.о
CONFIDENTIALITY_REQUIRED (13)
- Возвращается, если запрос SASL Bind отправляется через незащищенное подключение.
- Возвращается, если действие Search запрашивает данные, не относящиеся к атрибутам сервера, и выполняется через незащищенное подключение.
NO_SUCH_OBJECT (32)
- Возвращается при поиске несуществующего объекта (например, неизвестного пользователя, группы или организационного подразделения).
- Возвращается при поиске идентификатора пользователя, которого нет в каталоге.
INVALID_DN_SYNTAX (34)
- Возвращается, если уникальное имя некорректно и не поддается анализу JNDI. Подробную информацию можно найти на странице javax.naming.ldap.LdapName (только на английском языке).
- Возвращается, если уникальное имя содержит атрибут со значением, не являющимся строковым. Поддерживаются только строковые значения. Подробную информацию можно найти на странице javax.naming.directory.Attribute (только на английском языке).
INAPPROPRIATE_AUTHENTICATION (48)
- Возвращается, если в запросе Bind указан некорректный сертификат клиента или сертификат с истекшим сроком действия.
- Возвращается, если в запросе SASL PLAIN Bind не указаны или указаны некорректные учетные данные.
INSUFFICIENT_ACCESS_RIGHTS (50)
- Возвращается, если сервис Secure LDAP отключен для LDAP-клиента.
- Возвращается, если у клиента нет лицензии на использование сервиса Secure LDAP.
- Возвращается, если в запросе Bind указан пользователь, у которого нет лицензии на использование сервиса Secure LDAP.
- Возвращается, если в запросе Bind указан отключенный пользователь.
- Возвращается, если в последующем запросе Bind (rebind) указан пользователь, не принадлежащий к организационному подразделению, для которого включена аутентификация в конфигурации Secure LDAP.
- Возвращается, если в запросе SIMPLE Bind не указаны учетные данные (без аутентификации).
UNWILLING_TO_PERFORM (53)
- Возвращается, если в запросе SIMPLE Bind не указаны учетные данные (без аутентификации).
OTHER (80)
- Эта ошибка возвращается при получении неожиданного результата по причине ошибки в коде. Если она у вас возникла, обратитесь в службу поддержки Google Workspace или службу поддержки Cloud Identity Premium.
CANCELED (118)
- Возвращается, если запрос Abandon прервал текущую операцию LDAP.
Эта информация оказалась полезной?
Как можно улучшить эту статью?
We have gathered LDAP Result Code from several sources including our own observations.
LDAP is a request-response protocol and each request, is followed by a response. A success result code (0) implies all is well.
Anyhow, here you can find many LDAP Result Codes and what they imply.
Hex | Decimal | Name | Owner | Reference | INIT | Short Summary |
---|---|---|---|---|---|---|
0x00 | 0 | LDAP_SUCCESS | IESG | RFC 4511 | DSA | This is used to indicate that the associated operation completed successfully. |
0x01 | 1 | LDAP_OPERATIONS_ERROR | IESG | RFC 4511 | DSA | This is used to indicate that the associated request was out of sequence with another operation in progress (e.g., a non-bind request in the middle of a multi-stage SASL bind).It does not indicate that the client has sent an erroneous message. eDirectory: In NDS 8.3x through NDS 7.xx, this was the default error for NDS errors that did not map to an LDAP error code. To conform to the new LDAP drafts, NDS 8.5 uses 80 (0x50) for such errors. |
0x02 | 2 | LDAP_PROTOCOL_ERROR | IESG | RFC 4511 | DSA | This is used to indicate that the client (DUA) sent data to the server that did not comprise a valid LDAP request. |
0x03 | 3 | LDAP_TIMELIMIT_EXCEEDED | IESG | RFC 4511 | DSA | This is used to indicate that processing on the associated request Timeout limit specified by either the client request or the server administration limits has been exceeded and has been terminated because it took too long to complete. For a SearchRequest operation, it is possible that some of the matching entries had been returned when the Timeout limit was reached. |
0x04 | 4 | LDAP_SIZELIMIT_EXCEEDED | IESG | RFC 4511 | DSA | This is used to indicate that there were more entries matching the criteria contained in a SearchRequest operation than were allowed to be returned by the size limit configuration. Incomplete results may be returned. |
0x05 | 5 | LDAP_COMPARE_FALSE | IESG | RFC 4511 | DSA | Does not indicate an error condition. This is used to indicate that a Compare Request operation completed successfully, but the provided attribute value assertion did not match the target entry. |
0x06 | 6 | LDAP_COMPARE_TRUE | IESG | RFC 4511 | DSA | Does not indicate an error condition. This is used to indicate that a Compare Request operation completed successfully, and the provided attribute value assertion matched the target entry. |
0x07 | 7 | LDAP_AUTH_METHOD_NOT_SUPPORTED | IESG | RFC 4511 | DSA | This is used to indicate that the Directory Server does not support the requested Authentication Method. |
0x08 | 8 | LDAP_STRONG_AUTH_REQUIRED | IESG | RFC 4511 | DSA | Indicates one of the following: * In Bind Requests, the LDAP server accepts only strong authentication. * In a client request, the client requested an operation such as Delete Request that requires strong authentication. * In an Unsolicited Notification of disconnection, the LDAP server discovers the security protecting the communication between the client and server has unexpectedly failed or been compromised. |
0x09 | 9 | reserved(partialResults) | IESG | RFC 4511 | N/A | (Deprecated) Was used when LDAPv2 where the Server (DSA) returned a «partial result» LDAP Result Codes response that contains the referral URL. |
0x0A | 10 | LDAP_REFERRAL | IESG | RFC 4511 | DSA | Does not indicate an error condition. In LDAPv3, indicates that the server does not hold the target entry of the request, but that the servers in the LDAP Referral field may. |
0x0B | 11 | LDAP_ADMINLIMIT_EXCEEDED | IESG | RFC 4511 | DSA | |
0x0C | 12 | LDAP_UNAVAILABLE_CRITICAL_EXTENSION | IESG | RFC 4511 | DSA | Indicates that the LDAP server was unable to satisfy a request because one or more critical extensions were not available. Either the server does not support the control or the control is not appropriate for the operation type. |
0x0D | 13 | LDAP_CONFIDENTIALITY_REQUIRED | IESG | RFC 4511 | DSA | Indicates that the session is not protected by a protocol such as Transport Layer Security (TLS), which provides session confidentiality and the request will not be handled without confidentiality enabled. |
0x0E | 14 | LDAP_SASL_BIND_IN_PROGRESS | IESG | RFC 4511 | DSA | Does not indicate an error condition, but indicates that the server is ready for the next step in the process. The client must send the server the same SASL Mechanism to continue the process. |
0x0F | 15 | Not used. | N/A | N/A | N/A | N/A |
0x10 | 16 | LDAP_NO_SUCH_ATTRIBUTE | IESG | RFC 4511 | DSA | Indicates that the attribute specified in the Modify Request or Compare Request operation does not exist in the entry. |
0x11 | 17 | LDAP_UNDEFINED_TYPE | IESG | RFC 4511 | DSA | Indicates that the attribute specified in the modify or add operation does not exist in the LDAP server’s schema. |
0x12 | 18 | LDAP_INAPPROPRIATE_MATCHING | IESG | RFC 4511 | DSA | Indicates that the matching rule specified in the search filter does not match a rule defined for the attribute’s syntax. |
0x13 | 19 | LDAP_CONSTRAINT_VIOLATION | IESG | RFC 4511 | DSA | Indicates that the attribute value specified in a Add Request, Modify Request or ModifyDNRequest operation violates constraints placed on the attribute. The constraint can be one of size or content (string only, no binary). |
0x14 | 20 | LDAP_TYPE_OR_VALUE_EXISTS | IESG | RFC 4511 | DSA | Indicates that the attribute value specified in a Add Request or Modify Request operation already exists as a value for that attribute. |
0x15 | 21 | LDAP_INVALID_SYNTAX | IESG | RFC 4511 | DSA | Indicates that the attribute value specified in an Add Request, Compare Request, or Modify Request operation is an unrecognized or invalid syntax for the attribute. |
N/A | 22-31 | Not used. | N/A | N/A | N/A | N/A |
0x20 | 32 | LDAP_NO_SUCH_OBJECT | IESG | RFC 4511 | DSA | Indicates the target object cannot be found. This code is NOT returned on following operations: * SearchRequest operations that find the BaseDN but cannot find any LDAP entries that match the search filter. * Bind Request operations. |
0x21 | 33 | LDAP_ALIAS_PROBLEM | IESG | RFC 4511 | DSA | Indicates that an error occurred when an alias was dereferenced. |
0x22 | 34 | LDAP_INVALID_DN_SYNTAX | IESG | RFC 4511 | DSA | Indicates that the syntax of the DN is incorrect. (If the DN syntax is correct, but the LDAP server’s structure rules do not permit the operation, the server returns LDAP_UNWILLING_TO_PERFORM.) |
0x23 | 35 | LDAP_IS_LEAF(Some Server RESERVED) | IESG | RFC 4511 | DSA | Indicates that the specified operation cannot be performed on a leaf entry. (This code is not currently in the LDAP specifications, but is reserved for this constant.) |
0x24 | 36 | LDAP_ALIAS_DEREF_PROBLEM | IESG | RFC 4511 | DSA | Indicates that during a SearchRequest operation, either the client does not have access rights to read the aliased object’s name or dereferencing is not allowed. |
N/A | 37-47 | reserved | N/A | N/A | N/A | N/A |
0x30 | 48 | LDAP_INAPPROPRIATE_AUTH | IESG | RFC 4511 | DSA | Indicates that during a Bind Request operation, the client is attempting to use an authentication Method that the client cannot use correctly. For example, either of the following cause this error: * The client returns simple credentials when strong credentials are required. * The client returns a DN and a password for a simple bind when the entry does not have a password defined. |
0x31 | 49 | LDAP_INVALID_CREDENTIALS | IESG | RFC 4511 | DSA | Indicates that during a Bind Request operation one of the following occurred: * The client passed either an incorrect DN or password. * The password is incorrect because it has expired, Intruder Detection has locked the account, or some other similar reason. |
0x32 | 50 | LDAP_INSUFFICIENT_ACCESS | IESG | RFC 4511 | DSA | Indicates that the caller does not have sufficient rights to perform the requested operation. |
0x33 | 51 | LDAP_BUSY | IESG | RFC 4511 | DSA | Indicates that the LDAP server is too busy to process the client request at this time but if the client waits and resubmits the request, the server may be able to process it then. |
0x34 | 52 | LDAP_UNAVAILABLE | IESG | RFC 4511 | DSA | Indicates that the LDAP server cannot process the client’s bind request, usually because it is shutting down. |
0x35 | 53 | LDAP_UNWILLING_TO_PERFORM | IESG | RFC 4511 | DSA | Indicates that the LDAP server cannot process the request because of server-defined restrictions. This error is returned for the following reasons: * The Add Request violates the server’s structure rules. * The Modify Request specifies attributes that users cannot modify. * Password restrictions prevent the action. * Connection restrictions prevent the action. |
0x36 | 54 | LDAP_LOOP_DETECT | IESG | RFC 4511 | DSA | Indicates that the client discovered an alias or LDAP Referral loop, and is thus unable to complete this request. |
N/A | 55-63 | reserved | IESG | N/A | N/A | N/A |
0x40 | 64 | LDAP_NAMING_VIOLATION | IESG | RFC 4511 | DSA | Indicates that the Add Request or Modify DN Request operation violates the schema’s structure rules. For example: * The request places the entry subordinate to an alias. * The request places the entry subordinate to a container that is forbidden by the containment rules. * The RDN for the entry uses a forbidden attribute type. |
0x41 | 65 | LDAP_OBJECT_CLASS_VIOLATION | IESG | RFC 4511 | DSA | Indicates that the Add Request, Modify Request, or modify DN operation violates the object class rules for the entry. For example, the following types of request return this error: * The add or modify operation tries to add an entry without a value for a required attribute. * The add or modify operation tries to add an entry with a value for an attribute which the class definition does not contain. * The modify operation tries to remove a required attribute without removing the auxiliary class that defines the attribute as required. |
0x42 | 66 | LDAP_NOT_ALLOWED_ON_NONLEAF | IESG | RFC 4511 | DSA | Indicates that the requested operation is permitted only on leaf entries. For example, the following types of requests return this error: * The client requests a delete operation on a parent entry. * The client request a modify DN operation on a parent entry. |
0x43 | 67 | LDAP_NOT_ALLOWED_ON_RDN | IESG | RFC 4511 | DSA | Indicates that the modify operation attempted to remove an attribute value that forms the entry’s relative distinguished name. |
0x44 | 68 | LDAP_ALREADY_EXISTS | IESG | RFC 4511 | DSA | Indicates that the add operation attempted to add an entry that already exists, or that the modify operation attempted to rename an entry to the name of an entry that already exists. |
0x45 | 69 | LDAP_NO_OBJECT_CLASS_MODS | IESG | RFC 4511 | DSA | Indicates that the modify operation attempted to modify the structure rules of an object class. |
0x46 | 70 | LDAP_RESULTS_TOO_LARGE | IESG | RFC 4511 | DSA | Reserved for CLDAP. |
0x47 | 71 | LDAP_AFFECTS_MULTIPLE_DSAS | DSA | Indicates that the modify DN operation moves the entry from one LDAP server to another and thus requires more than one LDAP server. | ||
N/A | 72-79 | reserved | IESG | N/A | N/A | N/A |
0x50 | 80 | LDAP_OTHER | IESG | RFC 4511 | DSA | Indicates an unknown error condition. This is the default value for NDS error codes which do not map to other LDAP error codes. |
N/A | 81-90 | reserved (LDAP Client Error And Result Codes) | IESG | RFC 4511 | DUA | reserved (LDAP Client Error And Result Codes) APIs May Vary by API Implementation |
0x51 | 81 | LDAP_SERVER_DOWN | DUA | client-side result code that indicates that the LDAP libraries cannot establish an initial connection with the LDAP server. Either the LDAP server is down or the specified host name or port number is incorrect. | ||
0x52 | 82 | LDAP_LOCAL_ERROR | DUA | client-side result code Indicates that the LDAP client has an error. This is usually a failed dynamic memory allocation error. | ||
0x53 | 83 | LDAP_ENCODING_ERROR | DUA | client-side result code Indicates that the LDAP client encountered errors when encoding an LDAP request intended for the LDAP server. | ||
0x54 | 84 | LDAP_DECODING_ERROR | DUA | client-side result code Indicates that the LDAP client encountered errors when decoding an LDAP response from the LDAP server. | ||
0x55 | 85 | LDAP_TIMEOUT | DUA | client-side result code that indicates that the Timeout limit of the LDAP client was exceeded while waiting for a result. | ||
0x56 | 86 | LDAP_AUTH_UNKNOWN | DUA | client-side result code Indicates that a bind method was called with an unknown authentication method. | ||
0x57 | 87 | LDAP_FILTER_ERROR | DUA | client-side result code Indicates that the search method was called with an invalid search filter. | ||
0x58 | 88 | LDAP_USER_CANCELLED | DUA | client-side result code Indicates that the user cancelled the LDAP operation. | ||
0x59 | 89 | LDAP_PARAM_ERROR | DUA | client-side result code Indicates that an invalid parameter was supplied | ||
0x5a | 90 | LDAP_NO_MEMORY | DUA | client-side result code Indicates that a dynamic memory allocation method failed when calling an LDAP method. | ||
0x5b | 91 | LDAP_CONNECT_ERROR | DUA | client-side result code that indicates that the LDAP client has lost either its connection or cannot establish a connection to the LDAP server. | ||
0x5c | 92 | LDAP_NOT_SUPPORTED | DUA | client-side result code Indicates that the requested functionality is not supported by the client. For example, if the LDAP client is established as an LDAPv2 client, the libraries set this error code when the client requests LDAPv3 functionality. | ||
0x5d | 93 | LDAP_CONTROL_NOT_FOUND | DUA | client-side result code Indicates that the client requested a control that the libraries cannot find in the list of supported controls sent by the LDAP server. | ||
0x5e | 94 | LDAP_NO_RESULTS_RETURNED | DUA | A client-side result code Indicates that the LDAP server sent no results. | ||
0x5f | 95 | LDAP_MORE_RESULTS_TO_RETURN | DUA | client-side result code that indicates that more results are chained in the result message. | ||
0x60 | 96 | LDAP_CLIENT_LOOP | DUA | client-side result code that indicates the LDAP libraries detected a loop. Usually this happens when following referrals. | ||
0x61 | 97 | LDAP_REFERRAL_LIMIT_EXCEEDED | DUA | client-side result code that indicates that the referral exceeds the hop limit. The default hop limit is ten. | ||
0x64 | 100 | INVALID_RESPONSE | DUA | This is a client-side result code that is used to indicate that the result received from the server was ambiguous (for example, there was more than one response received fro the associated operation). | ||
0x65 | 101 | AMBIGUOUS_RESPONSE | DUA | This is a client-side result code that is used to indicate that the result received from the server was ambiguous (for example, there was more than one response received fro the associated operation). | ||
0x70 | 112 | TLS_NOT_SUPPORTED | DSA | Indicates that TLS is not supported on the server. | ||
0x71 | 113 | lcupResourcesExhausted | IESG | RFC 3928 | DSA | The server is running out of resources. LDAP Client Update Protocol |
0x72 | 114 | lcupSecurityViolation | IESG | RFC 3928 | DSA | the client is suspected of malicious actions. LDAP Client Update Protocol |
0x73 | 115 | lcupInvalidData | IESG | RFC 3928 | DSA | invalid cookie was supplied by the client — both/either the scheme and/or the value part was invalid . LDAP Client Update Protocol |
0x74 | 116 | lcupUnsupportedScheme | IESG | RFC 3928 | DSA | The scheme part of the cookie is a valid OID but is not supported by this server. LDAP Client Update Protocol |
0x75 | 117 | lcupReloadRequired | IESG | RFC 3928 | DSA | indicates that client data needs to be reinitialized. This reason is returned if the server does not synchronize the client or if the server’s data was reloaded since the last synchronization session. LDAP Client Update Protocol |
0x78 | 118 | canceled | IESG | RFC 3909 | DSA | The Cancel request is an ExtendedRequest with the requestName field containing 1.3.6.1.1.8 and a requestValue field which contains a BER-encoded cancelRequestValue value. |
0x79 | 119 | noSuchOperation | IESG | RFC 3909 | DSA | Returned if the server has no knowledge of the operation requested for cancellation. |
0x7A | 120 | tooLate | IESG | RFC 3909 | DSA | Returned to indicate that it is too late to cancel the outstanding operation. |
0x7B | 121 | cannotCancel | IESG | RFC 3909 | DSA | Returned if the identified operation does not support cancellation or the cancel operation could not be performed. |
0x7C | 122 | assertionFailed | IESG | RFC 4528 | DSA | When the control is attached to an LDAP request, the processing of the request is conditional on the evaluation of the Filter as applied against the target of the operation. If the Filter evaluates to TRUE, then the request is processed normally. If the Filter evaluates to FALSE or Undefined, then assertionFailed (122) resultCode is returned, and no further processing is performed. |
0x7D | 123 | authorizationDenied | WELTMAN | RFC 4532 | DSA | Used to indicate that the server does not allow the client to assume the asserted identity. |
N/A | 4096-16383 | First Come, First Serve Range | N/A | N/A | N/A | First Come, First Serve Range |
0x7D | 4096 | e-syncRefreshRequired | Kurt Zeilenga Jong Hyuk Choi | RFC 4533 | DSA | specification describes the LDAP allowing a DUA to maintain a copy of a fragment of the DIT. |
The core LDAPv3 specification in RFC 4511 defines a number of result codes that are intended to be used in LDAP responses. This chapter describes each of those result codes, the types of operations for which that result code may be returned, and some of the potential causes for it. However, it does not attempt to provide every possible cause for every result code, since different directory servers have different capabilities, and some servers use different result codes for the same purpose. Further, because LDAP is an extensible protocol, and especially because it provides support for controls and extended operations, there may be yet-to-be-created conditions that warrant the use of a particular result code for an unexpected type of operation.
success (0)
Applicable operation types: add, bind, delete, extended, modify, modify DN, search
The success result code is used to indicate that the associated operation completed successfully. At least for some definition of success. It doesn’t necessarily mean that every single part of the operation completed exactly as intended. For example, if the request included a non-critical control that the server couldn’t honor for some reason, then it’s acceptable for the server to proceed as if the control hadn’t been included in the request and to return a response with the success result code if it completed all of the processing not related to that control.
For an add operation, the success result code indicates that the provided entry was created in the DIT.
For a bind operation, the success result code indicates that the provided credentials were valid, that the client connection was successfully authenticated as the target account, and that any requested authorization was applied.
For a delete operation, a success result code indicates that the targeted entry was removed.
For an extended operation, a success result code indicates that whatever processing is indicated for the associated request was completed without error. However, not all types of extended operations use the success result code for this purpose (for example, the cancel extended operation uses the canceled (118) result code to indicate that the target operation was successfully canceled). Just because an extended operation doesn’t return a result code of success doesn’t mean that an error occurred, so you should make sure that you understand the expected behavior for any extended operation that you expect to use.
For a modify operation, a success result code indicates that the request changes were applied to the targeted entry.
For a modify DN operation, a success result code indicates that the targeted entry was renamed or moved.
For a search operation, a success result code indicates that all appropriate search results were returned. There may have been matching entries (or attributes within matching entries) that weren’t returned because the client wasn’t permitted to access them or because they were otherwise outside the bounds of the search constraints.
Compare operations should never use the success result code. A compare operation that completes successfully should return either compareTrue (6) if the assertion matched or compareFalse (5) if it did not.
operationsError (1)
Applicable operation types: add, compare, delete, extended, modify, modify DN, search
The operationsError result code indicates that the operation could not be processed because it wasn’t in the expected order relative to other operations on the same connection. Some of the reasons that the server might return a response with an operationsError result code include:
- If an unauthenticated client sends a request that is only allowed for authenticated clients. In that case, the client should perform a bind to authenticate and then re-try the original request.
- If a client sends any request on a connection that is actively processing a bind, or if a client sends a non-bind request in the middle of a multi-stage SASL bind operation. Clients should not send any other requests on a connection while a bind is in progress.
- If a client sends a StartTLS extended request on a connection that has already been secured.
- If a client sends a StartTLS extended request on a connection that has one or more outstanding requests already in progress. The client should wait for any outstanding requests to complete before sending a StartTLS request.
Some directory servers incorrectly use the operationsError result code as if it meant “server error”. This isn’t the intended use for the operationsError result code, and the other (80) result code is the correct one to use for this purpose, but some servers do it nonetheless.
protocolError (2)
Applicable operation types: add, bind, compare, delete, extended, modify, modify DN, search
The protocolError result code indicates that there was a problem with the client’s use of the LDAP protocol. Some of the possible causes for the protocolError result code are:
- If the client sends a request that the server cannot parse. This may be a malformed LDAP message, an LDAP message with an unrecognized protocol operation type, or any other kind of improperly-formatted request. In some of these cases, it may be possible for the server to include the protocolError result code in a response to the requested operation, but this can only happen if the server can decode the request enough to determine the appropriate message ID and operation type for the response. But for many malformed requests, the server won’t be able to respond directly to that request, and will instead need to use the notice of disconnection unsolicited notification with a protocolError result code before terminating the connection.
- If the client sends a bind request with an unrecognized LDAP protocol version. At this point, clients should only ever use LDAPv3. Although some clients and servers still support LDAPv2, it was declared historic by RFC 3494 in 2003, and should no longer be used. Similarly, because LDAPv3 is highly extensible, there will probably never be a need for an LDAPv4.
- If the client sends an extended request with an unrecognized request OID. Clients should generally look at the supportedExtension attribute of a server’s root DSE to determine what types of extended operations the server supports before sending any extended requests.
- If the client sends an LDAP request with an illegal combination of critical controls. Before using multiple controls in an LDAP request, you should make sure that they can all be used together.
timeLimitExceeded (3)
Applicable operation types: add, bind, compare, delete, extended, modify, modify DN, search
The timeLimitExceeded result code indicates that the associated operation failed because it hadn’t completed by the time a maximum processing time limit had been reached. This result code can technically be returned in response to any kind of operation, but it’s most commonly used for searches because they have the most potential to take a very long time to complete (especially if the search matches a large number of entries or if the server doesn’t have the indexes necessary to process the request efficiently) and because only search requests allow the client to specify an upper bound for how long it wants the server to spend processing the operation.
Even though the client can specify the desired time limit in the search request, directory servers generally treat this as an upper bound. The server may impose its own time limit for the operation, and that time limit may be more restrictive than the one the client requested.
If a search operation fails with a timeLimitExceeded result code, then the server may have already returned a subset of the entries matching the search criteria. However, the client should not assume that this is the complete set of matching entries, and should not necessarily assume that they were returned in any particular order (unless the search request included a critical server-side sort request control).
The timeLimitExceeded result code may also be used in cases where the request is received by one LDAP server (or LDAP proxy server), and is then forwarded on to another server for processing. In the event the backend server takes too long to respond to this request, the intermediate server may give up and return a response with a timeLimitExceeded result code. If the requested operation is intended to alter the contents of the server, then the associated changes may or may not eventually be applied.
sizeLimitExceeded (4)
Applicable operation types: search
The sizeLimitExceeded result code indicates that the associated search operation failed because the server has determined that the number of entries that would be returned in response to the search would exceed the upper bound for that operation.
As with the timeLimitExceeded (3) result code, every search request includes an element that specifies the maximum size limit that the client wants to use, but the server may impose its own limit that is lower than the limit requested by the client. And the server may or may not have already returned some number of entries before encountering the size limit.
compareFalse (5)
Applicable operation types: compare
The compareFalse result code indicates that the associated compare request targeted an entry that exists and that contains the targeted attribute, but does not have any value that matches the provided assertion value.
compareTrue (6)
Applicable operation types: compare
The compareTrue result code indicates that the associated compare request targeted an entry that exists and that contains the targeted attribute with a value that matches the provided assertion value.
authMethodNotSupported (7)
Applicable operation types: bind
The authMethodNotSupported result code indicates that the associated bind operation failed because the client attempted to authenticate with a mechanism that the server does not support or that it does not allow the client to use. This result code can be returned in response to a simple bind request if the server does not permit simple authentication. It can be returned in response to a SASL bind request if the server does not support the requested SASL mechanism, or if the client is not allowed to authenticate with that SASL mechanism.
strongerAuthRequried (8)
Applicable operation types: add, bind, compare, delete, extended, modify, modify DN, search
The strongerAuthRequired (formerly strongAuthRequired) result code indicates that the server requires the client to authenticate with a stronger form of authentication.
If the strongerAuthRequired result code is received in response to a bind request, it indicates that the server requires a stronger form of authentication for that client. The client should try authenticating with a stronger mechanism.
If the strongerAuthRequired result code is received in response to some other type of request, it indicates that the requested operation is only allowed for clients that have completed some stronger form of authentication. The client should try authenticating with a stronger mechanism, and then re-submit the request that triggered this result code.
If the strongerAuthRequired result code is received in a notice of disconnection unsolicited notification, it indicates that the server believes that the security of the communication channel between the client and the server has failed or become compromised, and is terminating the connection as a result. The client should establish a new connection and negotiate a new security layer for that connection.
referral (10)
Applicable operation types: add, bind, compare, delete, extended, modify, modify DN, search
The referral result code indicates that the request cannot be processed exactly as issued, but that it might succeed if re-issued to a different server, or is updated to target a different location in the DIT. If the client supports following referrals, then it shouldn’t treat this as an error, but rather as an indication that the request needs to be tried again based on the information contained in the referral.
Some of the reasons that the server might return a response with the referral result code are:
- If the server is operating in a mode in which it cannot process the request but is aware of other servers that may be able to process it. For example, if a request attempts to apply some change to the data in a read-only server, then that server might use a referral to redirect the client to a server that supports write operations.
- If the DIT is broken up across multiple servers and the client targets an entry in a portion of the DIT that is not contained locally. If the directory server is aware of the servers that are expected to contain the targeted entry, then it may use a referral to redirect the client to those servers.
- If the request targets an entry at or below a “smart referral” in the DIT. A smart referral is a special kind of entry with the referral structural object class and the ref operational attribute whose values are the URIs that should be included in the response.
When processing a search operation, the referral result code should only be used when locating the base entry for the search (for example, if the search base DN references an entry known to be in a portion of the DIT housed elsewhere, or if it resides at or below a smart referral entry). If the entry targeted by the search base DN is held locally but one or more portions of the search scope might require the client to issue the search elsewhere, then those referral URIs should be returned to the client in the form of search result reference messages.
It is also possible that the referral result code could be returned in response to a bind request. If the referral URIs indicate that the client should send the bind request to a different server, then it is generally recommended that the client send all subsequent operations to the same server targeted by the bind referral. If a client follows a bind referral to a different server, then the original server will not have any knowledge of that bind attempt, and its authentication state will not have been updated to reflect the success or failure of the bind in the other server.
Clients must be aware of the possibility that a request sent in response to a referral could itself yield another referral. This could happen, for example, if the server that returned the previous referral had outdated information about the location of the targeted entry, or if the referral targeted a server that was temporarily unable to process the request. Any client that supports following referrals should be prepared to receive nested referrals, and should also have some mechanism for detecting and avoiding referral loops (in which one referral contains a URI that indicates that the client should send a request that it has already sent). This could be accomplished by ensuring that the client remembers all of the request details for each attempt at processing a given operation, and having that client abort if it would send a request that it has already sent. Alternately, it could be accomplished by maintaining a counter that is to be incremented each time the client follows a referral and having the client abort if the counter reaches a specified value. RFC 4511 section 4.1.10 indicates that a client must be able to handle at least ten nested referrals (but honestly, that seems pretty excessive).
If the client detects a referral loop, then it should use the clientLoop (96) client-side result code. If the server detects a referral loop (for example, when attempting to automatically follow a referral on behalf of the client), then the loopDetect (54) result code is more appropriate.
Referrals are described in detail in RFC 4511 section 4.1.10, including the behavior that clients should exhibit when encountering referrals. The basic rules are:
- If the referral URI includes a base DN value, then the client should use that DN in its next request. If the referral URI does not include a base DN, then the client should use the same DN as it used for the request that triggered the referral.
- If a referral URI returned in response to a search request includes a search filter, then the client should use that filter in the request that it issues when following the referral. If the referral URI does not include a filter, then the client should use the same filter as it used for the request that triggered the referral.
- If a referral URI returned in response to a search request includes a search scope, then the client should use that scope in the request that it issues when following the referral. If the referral URI does not include a scope, then the client should use the same scope as it used for the request that triggered the referral.
Other considerations for following referrals include:
- If the referral URI does not specify the address of the server to which the request is to be sent, then it generally indicates that the request should be sent to the same server but with different parameters. This is especially true for a referral URI that has a different base, scope, or filter than the request that triggered the referral. However, RFC 4516 does indicate that if a client encounters an LDAP URL without a host, then the client may be expected to have some a priori knowledge of the appropriate server to which the request should be sent.
- If a client needs to establish a new connection when following a referral, then the client should ensure that the new connection has at least the same level of security as the original connection. For example, if the original connection was protected with TLS, then the client should negotiate TLS security on any new connection that it establishes when following that referral.
- If a client needs to establish a new connection when following a referral for any type of operation other than a bind, the client should ensure that the new connection is authenticated before sending the referral request. Unless the client has specific knowledge that different credentials or a different authentication method are required when following the referral, it should use the same authentication method and credentials for any new connection that it establishes when following that referral.
adminLimitExceeded (11)
Applicable operation types: add, bind, compare, delete, extended, modify, modify DN, search
The adminLimitExceeded result code indicates that some administrative limit within the server was exceeded while processing the request. RFC 4511 does not provide any specific guidance on when this result code might be returned, but draft-just-ldapv3-rescodes suggests that a server might return it if there is some upper bound on the number of entries that it will examine in the course of processing a search. In fact, several directory servers do enforce such a limit, and that limit is often referred to as a lookthrough limit.
Another instance in which this result code might be returned would be in the case of a server that supports the subtree delete request control as described in draft-armijo-ldap-treedelete. If the server imposes an upper limit on the size of a subtree that may be deleted, then the server may return the adminLimitExceeded result code when trying to delete a subtree that contains more than that number of entries.
unavailableCriticalExtension (12)
Applicable operation types: add, bind, compare, delete, extended, modify, modify DN, search
The unavailableCriticalExtension result code indicates that the request includes a control with a criticality of true, but that control could not be honored for some reason. Some of the potential causes for this result code include:
- The server does not support the requested control. It’s generally a good idea for clients to look at the supportedControl operational attribute in the server’s root DSE to determine which request controls the server supports before using any controls.
- The requested control is not applicable to the requested type of operation (for example, if a server-side sort request control is included in an add request).
- The requested control is only supported for the requested type of operation when the request matches certain criteria, but those criteria were not satisfied (for example, the virtual list view request control can only be used in a search request that also includes the server-side sort request control).
- The requested control is only supported for entries in some portion of the DIT, but the request targets content in a location where the control is not supported (for example, some controls may only be supported when targeting user entries, but not when targeting server-provided entries like the root DSE, schema subentry, or configuration entries).
confidentialityRequired (13)
Applicable operation types: add, bind, compare, delete, extended, modify, modify DN, search
The confidentialityRequired result code indicates that the server is only willing to process the requested operation if it is received over a secure connection that does not allow an eavesdropper to decipher or alter the contents of the request or response. For example, a server may only permit operations that involve clear-text passwords (like a simple bind request or a password modify extended request) to be requested over a secure connection and could return this result code in response to an attempt to send a clear-text password over an insecure connection.
If a client receives the confidentialityRequired result code, then it should take steps to secure the existing connection (for example, using the StartTLS extended operation, or by binding with a SASL mechanism that supports the auth-conf quality of protection), or to establish a new secure connection (for example, using a TLS-based connection) before re-sending the request.
saslBindInProgress (14)
Applicable operation types: bind
The saslBindInProgress result code indicates that the server has completed a portion of the processing for the provided SASL bind request, but that it needs additional information from the client to complete the authentication. Certain SASL mechanisms, like CRAM-MD5, DIGEST-MD5, and GSSAPI, require multiple stages of processing and therefore require multiple request-response cycles with the server, and the saslBindInProgress result code is used in all bind responses except for the last one in the sequence (which will indicate whether the bind succeeded or failed).
This is not an error result, but it does mean that the client needs to send another bind request with the same SASL mechanism and additional credentials. The client must not send any other requests on the connection until it has sent a bind request and the server has returned a bind response with a non-saslBindInProgress result code. If a client sends any other kind of request in the middle of a multi-stage SASL bind, the server should reject that request with an operationsError (1) result code.
noSuchAttribute (16)
Applicable operation types: compare, modify
The noSuchAttribute result code indicates that the request targeted an attribute that does not exist in the specified entry.
For a compare request, it indicates that the targeted entry exists, but does not have any values for the attribute used in the compare assertion.
For a modify request, it indicates that the request attempted to delete one or more attribute values that don’t exist in the targeted entry, that the request attempted to delete an entire attribute that does not have any values in the targeted entry, or that attempted to increment the value of an attribute that does not have any values in the targeted entry.
undefinedAttributeType (17)
Applicable operation types: add, modify
The undefinedAttributeType result code indicates that the request attempted to provide one or more values for an attribute type that is not defined in the server schema.
For an add request, it indicates that the provided entry included an attribute for which there is no corresponding attribute type definition in the schema.
For a modify request, it indicates that a modification attempted to add one or more values, or to replace the entire set of values, for an attribute type that is not defined in the server schema.
inappropriateMatching (18)
Applicable operation types: search
The inappropriateMatching result code indicates that the search request tried to perform some type of matching that is not supported for the target attribute type. Some of the potential causes for this result code include:
- If the search filter contains an equality component that targets an attribute type without an equality matching rule.
- If the search filter contains a greater-or-equal or less-or-equal component that targets an attribute type without an ordering matching rule.
- If the search filter contains a substring component that targets an attribute type without a substring matching rule.
- If the search filter contains an approximate-match component that targets an attribute type for which approximate matching is not supported.
- If an extensible match filter attempts to use a matching rule in combination with an attribute type for which the requested matching rule is not supported.
- If a search request includes a server-side sort request control with a sort key that does not specify a matching rule and for which the attribute type does not have an ordering matching rule.
- If a search request includes a server-side sort request control with a sort key that specifies a matching rule that is not supported for the target attribute type.
constraintViolation (19)
Applicable operation types: add, modify, modify DN
The constraintViolation result code indicates that the requested operation would have resulted in an entry that violates some constraint defined within the server. Some of the potential causes for this result code are:
- If the requested operation would have resulted in a single-valued attribute having multiple values.
- If the server is configured to ensure that no two entries are allowed to have the same value for a particular attribute type, and the requested operation would have resulted in an entry with a value that is already in use in some other entry in the server.
- If the requested operation would have resulted in an attribute with at least one value that conforms to the syntax of the associated attribute type, but that violates some other constraint defined for that attribute (for example, if the server would have required a numeric value within a particular range, but the provided value was outside of that range).
attributeOrValueExists (20)
Applicable operation types: add, modify
The attributeOrValueExists result code indicates that the requested operation would have resulted in an attribute in which the same value appeared more than once.
For an add request, it indicates that at least one of the attributes in the provided entry had a duplicate value.
For a modify request, it indicates that either an add or replace modification included the same value multiple times, or that an add modification attempted to add a value that already exists in the entry.
invalidAttributeSyntax (21)
Applicable operation types: add, modify
The invalidAttributeSyntax result code indicates that the requested add or modify operation would have resulted in an entry that had at least one attribute value that does not conform to the constraints of the associated attribute syntax.
noSuchObject (32)
Applicable operation types: add, compare, delete, extended, modify, modify DN, search
The noSuchObject result code indicates that the requested operation targeted an entry that does not exist within the DIT.
For an add request, it means that the immediate parent of the entry to be added does not exist and that the DN of the entry to be added does not match any of the configured naming contexts.
For a compare, delete, or modify request, it indicates that the targeted entry does not exist.
For a modify DN request, it indicates that either the targeted entry does not exist, or that the provided new superior DN references an entry that does not exist.
For a search request, it indicates that the entry targeted by the search base DN does not exist.
The noSuchObject result code is not supposed to be returned in response to a bind operation. The invalidCredentials (49) result code should be used when the bind request targets an entry that does not exist, but some directory servers are known to incorrectly use the noSuchObject result code in this case.
A response that includes the noSuchObject result code may also include a matched DN to specify the DN of the nearest ancestor to the provided DN that does exist in the DIT. For example, if a modify request targets the nonexistent uid=missing,ou=People,dc=example,dc=com entry, but the ou=People,dc=example,dc=com entry does exist, then the modify response should have a result code of noSuchObject and a matched DN of ou=People,dc=example,dc=com. However, if none of the ancestors for the targeted entry exist in the DIT, or if the client does not have permission to access any of those ancestor entries, then the matched DN should be omitted from the response.
aliasProblem (33)
Applicable operation types: search
The aliasProblem result code indicates that a problem occurred while attempting to dereference an alias during search processing. For example, it may be used if an alias is encountered that references an entry that does not exist. In such cases, the search result done response may also include a matched DN that specifies the nearest ancestor to the dereferenced entry that does exist in the DIT.
Aliases are only to be dereferenced in the course of processing a search operation, so this result code does not apply to any other type of operation. If an alias-related problem is encountered for any other type of operation (for example, if a non-search operation targets an entry that is an alias), then the aliasDereferencingProblem (36) result code should be used.
invalidDNSyntax (34)
Applicable operation types: add, bind, compare, delete, extended, modify, modify DN, search
The invalidDNSyntax result code indicates that the request included a malformed entry DN. It may indicate that the provided DN does not conform to the syntax specified in RFC 4514, or that one or more of the attribute values included in the DN does not conform to the associated attribute syntax.
For an add, compare, delete, or modify request, it indicates that the provided target entry DN is malformed.
For a simple bind request, it indicates that the provided target entry DN is malformed. For a SASL bind request, it indicates that the authentication or authorization identity was specified using a malformed DN.
For a modify DN request, this indicates that at least one of the target entry DN, the new RDN, or the new superior DN is malformed.
For a search request, it indicates that the search base DN is malformed.
In the event that the server is able to partially decode the provided DN, the response may also include a matched DN that specifies the nearest ancestor to the decodable portion of the DN that does exist within the server and that the requester has permission to access.
aliasDereferencingProblem (36)
Applicable operation types: add, bind, compare, delete, extended, modify, modify DN, search
The aliasDereferencingProblem result code indicates that the server encountered an alias while processing the request and that there was some problem related to that alias.
The draft-just-ldapv3-rescodes draft suggests that this result code should only be returned for a search operation, especially if the client does not have permission to access the aliased entry, or if the client does not have permission to access the aliasedObjectName attribute in the alias entry. However, RFC 4511 also suggests that it may be returned in the event that an operation targets an alias entry in a manner that is not allowed. For example, aliases are not allowed to be dereferenced when processing non-search operations, so the aliasDereferencingProblem result code may be used to indicate that the targeted DN matched or was subordinate to the DN of an alias entry.
inappropriateAuthentication (48)
Applicable operation types: bind
The inappropriateAuthentication result code indicates that the client attempted to bind in an inappropriate manner that is inappropriate for the target account. Some possible reasons for this result code include:
- The client attempted to perform anonymous authentication, but the server does not permit anonymous authentication.
- The client attempted to perform a type of authentication for which the target account does not have an appropriate set of credentials. For example, this result code may be returned if a client attempts to perform a password-based bind when the target user’s entry does not contain a password.
- The client attempted to perform a type of authentication that is not allowed for that client. For example, the client attempted to perform a lower-security type of authentication (like simple authentication or SASL PLAIN) when a stronger method (e.g., a client certificate or a two-factor mechanism) is required.
invalidCredentials (49)
Applicable operation types: bind
The invalidCredentials result code indicates that the client attempted to bind with a set of credentials that cannot be used to authenticate. Some of the potential reasons that this result code might be returned are:
- The bind request targeted a user that does not exist.
- The client tried to authenticate with an incorrect password.
- The client tried to authenticate with a SASL bind request that included non-password credentials that could not be successfully verified.
- The bind request targeted a user that is not permitted to authenticate for some reason (for example, because the account has been locked, the user’s password has expired, etc.).
insufficientAccessRights (50)
Applicable operation types: add, compare, delete, extended, modify, modify DN, search
The insufficientAccessRights result code indicates that the client requested an operation for which it does not have the necessary access control permissions, with the following caveats:
- This result code should not be returned in response to a bind request. The invalidCredentials (49) result code is the correct one to use for that.
- This result code should only be returned in response to a search request if there is a problem with the search request itself (for example, if the client isn’t able to access the entry specified as the search base DN, or if it isn’t able to search with the provided filter). If there are any search result entries that the client doesn’t have permission to access, those entries should simply be omitted from the results that are returned to the client with no impact on the result code.
- This result code should not be returned in response to a search request if the base DN targets an alias entry that references an entry the client does not have permission to access. The aliasDereferencingProblem (36) result code is the correct one to use for that.
busy (51)
Applicable operation types: add, bind, compare, delete, extended, modify, modify DN, search
The busy result code indicates that the requested operation cannot be processed because the server is currently too busy. The client may wish to re-submit the request at a later time or send it to a different server.
unavailable (52)
Applicable operation types: add, bind, compare, delete, extended, modify, modify DN, search
The unavailable result code indicates that the server is currently not available to process the requested operation. Some of the uses for this result code include:
- If the server is in the process of shutting down and is no longer accepting requests.
- If the server is in the process of starting up but is not yet ready to accept requests.
- If a portion of the server is unavailable for some reason. For example, a directory server might return this result code if an administrative operation (e.g., importing data from LDIF, restoring a backup, rebuilding indexes, etc.) has made a portion of the DIT inaccessible.
- If the server depends on an external resource that is currently unavailable. For example, an LDAP proxy server might return this result code if all of the backend servers are unreachable.
If a client receives an unavailable result, it may wish to re-submit the request at a later time or send it to a different server.
unwillingToPerform (53)
Applicable operation types: add, bind, compare, delete, extended, modify, modify DN, search
The unwillingToPerform result code indicates that the server is not willing to process the requested operation for some reason. This is a fairly generic result code that may be used if the server refuses to process an operation for a reason that is not covered by a more specific result code. If there is a more specific result code, then that should be used instead. For example, if the client doesn’t have the necessary access control permissions that the operation requires, the server should return insufficientAccessRights (50) instead of unwillingToPerform.
There are many potential causes for this result code. Some of them include:
- If a simple bind request includes a DN but no password. This was allowed by the original LDAPv3 specification (RFC 2251), and the server was to treat it as an anonymous simple bind just like if both the bind DN and password elements of the bind request had been empty. However, this behavior was responsible for a number of security vulnerabilities in poorly-written applications (in which they didn’t bother to check whether the password was empty before using it to bind). The revised LDAPv3 specification (RFC 4513 section 5.1.2) now recommends rejecting a simple bind request with a DN but no password with the unwillingToPerform result code.
- If the server can determine that the requested operation would be too expensive to process. For example, the server may reject a search request if it can determine that it does not have an appropriate set of indexes in place that would be needed to process that search efficiently.
- If an add or modify request attempts to write values for attributes that are declared as NO-USER-MODIFICATION in the server schema.
loopDetect (54)
Applicable operation types: add, bind, compare, delete, extended, modify, modify DN, search
The loopDetect result code indicates that the server detected some kind of circular reference in the course of processing an operation. Some of the potential causes for this result code are:
- If the server supports aliases and the process of dereferencing an alias eventually leads the server back to an alias entry that it has already encountered.
- If the server supports following referrals on behalf of the client and it receives a referral that would require the server to issue a request to a server to which it has already issued that same request.
- If the server supports chaining and it detects a chaining loop between servers.
In some cases, the server may use the loopDetect result code even if it hasn’t actually detected a loop. For example, some servers use a counter to keep track of the number of hops they’ve had to make when following a reference, and may assume that there’s a loop if the number of hops would exceed some maximum.
namingViolation (64)
Applicable operation types: add, modify DN
The namingViolation result code indicates that the requested add or modify DN operation would have resulted in an entry that violates some naming constraint within the server. Some of the potential causes for this result code are:
- The operation would have resulted in an entry whose DN violates the constraints for a name form. Name forms may be used to restrict which attribute types can be used in an entry’s RDN based on the structural object class for that entry.
- The operation would have resulted in an entry that violates the constraints for a DIT structure rule. DIT structure rules may be used to ensure that entries with a specified structural object class can only have entries with one of a specified set of structural classes as their immediate subordinates.
- The request would have resulted in an entry that exists below an alias entry. All alias entries must be leaf entries.
objectClassViolation (65)
Applicable operation types: add, modify, modify DN
The objectClassViolation result code indicates that the requested operation would have resulted in an entry that has an inappropriate set of object classes, or whose attributes violate the constraints associated with its set of object classes. Some of the possible reasons for this include:
- The entry would have included an object class that is not defined in the schema.
- The entry would not have included any structural object class.
- The entry would have included multiple structural object classes.
- The entry would have included an auxiliary object class that is not permitted to be used in conjunction with its structural object class.
- The entry would have included an abstract object class that is not a superclass for any of the structural or auxiliary object classes for that entry.
- The entry would have been missing an attribute that is required by one of its object classes or its DIT content rule.
- The entry would have included an object class that is not permitted by any of its object classes, or that is prohibited by its DIT content rule.
notAllowedOnNonLeaf (66)
Applicable operation types: delete, modify DN
The notAllowedOnNonLeaf result code indicates that the requested operation is only supported for leaf entries, but the targeted entry has one or more subordinates.
For a delete request, this indicates that the targeted entry has one or more subordinate entries. Under normal circumstances, a delete request is only allowed to remove leaf entries, although some servers may provide support for a control (like the one described in draft-armijo-ldap-treedelete) that allow removing an entry and all of its subordinates in a single request.
For a modify DN request, this indicates that the targeted entry has one or more subordinate entries and that the server does not support moving or renaming entries with subordinates. Some servers do support this capability, but others do not.
notAllowedOnRDN (67)
Applicable operation types: modify
The notAllowedOnNonRDN result code indicates that the requested modify operation would have resulted in an entry that does not include all of the attributes used in its RDN. The following modification types are not allowed:
- A delete modification without any values (indicating that the entire attribute should be removed from the entry) that targets an attribute type used in the entry’s RDN.
- A delete modification with one or more values, including an attribute value used in the entry’s RDN.
- A replace modification without any values (indicating that the entire attribute should be removed from the entry) that targets an attribute type used in the entry’s RDN.
- A replace modification with one or more values (indicating that only the provided values should be used for that attribute) that targets an attribute type used in the entry’s RDN, but that omits a value used in the entry’s RDN.
If you wish to remove an attribute value from an entry, but that value is used in the entry’s RDN, you should use a modify DN request that specifies a new RDN that does not use that value, and whose “delete old RDN” flag is set to true. Standard LDAP does not provide a single type of operation that allows altering both an entry’s DN and other attributes in the entry that are not included in its DN, although some types of directory servers may provide some way to accomplish this in an atomic manner. For example, if a server supports LDAP transactions as described in RFC 5805, then a transaction may include both a modify DN request to update the entry’s DN and a modify request to make other changes to the entry’s attribute values.
entryAlreadyExists (68)
Applicable operation types: add, modify DN
The entryAlreadyExists result code indicates that the requested operation would have resulted in an entry with the same DN as an entry that already exists in the server.
For an add request, it means that the server already contains an entry whose DN matches the DN contained in the request.
For a modify DN request without a new superior DN, it means that the server already contains an entry below the same parent of the targeted entry whose RDN matches the new RDN contained in the request.
For a modify DN request with a new superior DN, it means that the server already contains an entry below the specified new superior DN whose RDN matches the new RDN contained in the request.
objectClassModsProhibited (69)
Applicable operation types: modify
The objectClassModsProhibited result code indicates that the requested modify operation would have altered the target entry’s set of object classes in a way that is not supported. This is typically returned in response to a modify request that would cause the target entry to have a different structural object class.
Changing an entry’s structural object class is technically permitted by LDAP, but many servers do not support it because it can require a substantial amount of validation effort to ensure that the changes do not violate any constraints. In addition to all of the validation normally associated with a modify operation, changing an entry’s structural object class requires the following additional validation:
- Identifying the new DIT content rule (if any) that applies to the entry and ensuring that all of its constraints are satisfied, including required attribute types, prohibited attribute types, and permitted auxiliary object classes.
- Identifying the new name form (if any) that applies to the entry and ensuring that the entry’s RDN satisfies all of its constraints, including ensuring that the RDN has all required attribute types and does not include any attribute types that are not permitted.
- Identifying the DIT structure rule (if any) that applies to the entry and ensuring that the entry is still permitted to exist beneath its parent.
- Identifying the DIT structure rules (if any) that apply to each of the entry’s subordinates and ensuring that they are still permitted to exist beneath the entry.
affectsMultipleDSAs (71)
Applicable operation types: add, delete, extended, modify, modify DN
The affectsMultipleDSAs result code indicates that the requested operation would have required manipulating information in multiple servers in a way that is not supported. Some of the potential conditions in which you might see this result code are:
- If the directory environment is configured so that different portions of the DIT are held in different servers (or in different databases in the same server), and a modify DN operation would require moving an entry from one server (or database) to another.
- If the directory environment is configured with data split across multiple servers (or multiple databases in the same server), and a transaction targets entries in multiple servers (or databases).
- If the directory environment is configured with data in a given subtree split across multiple servers (or multiple databases within the same server), and a subtree delete request would require removing entries from multiple servers (or databases).
- If the directory environment is configured so that entries within the same portion of the DIT may be split up across multiple servers (a practice sometimes called “sharding” or “entry balancing”), and a modify or modify DN operation would require moving an entry from one server to another.
- If the directory environment is configured so that entries within the same portion of the DIT may be split up across multiple servers, and in which each of those servers has the same parent entry at the top of that split DIT, and an operation attempts to add, delete, or modify that parent entry in a manner that would require the operation to be processed across all servers.
other (80)
Applicable operation types: add, bind, compare, delete, extended, modify, modify DN, search
The other result code is used when a problem occurs for which none of the other result codes is more appropriate. It is the correct result code to use in the event that an internal error occurs within the server (although some servers mistakenly use operationsError (1) for this purpose), but the other result code may be used for additional kinds of problems as well.
Loading…