LDAP을 사용 중 아래와 같이 access log에서 err= 혹은 ResultCode= 로 출력되는 코드를 보시적 있으신가요??
1 2 3 4 5 |
Sep 27 10:29:29 part3 slapd[31400]: send_ldap_response: msgid=7 tag=101 err=0 Sep 27 21:40:12 part3 slapd[23009]: conn=1005 op=1 RESULT tag=105 err=50 text= Sep 28 09:45:00 part3 slapd[4717]: conn=1003 op=2 SEARCH RESULT tag=101 err=32 nentries=0 text= Sep 27 21:43:31 part3 slapd[23009]: conn=1010 op=1 RESULT tag=105 err=34 text=invalid DN Sep 28 10:15:13 part3 slapd[5173]: conn=1000 op=11 RESULT tag=105 err=53 text=shadow context; no update referral |
1 2 3 4 5 6 7 8 9 |
[12/Jul/2017:16:50:20.885 +0900] SEARCH RESULT threadID=18 conn=6 op=0 msgID=1 b ase="" scope=0 filter="(objectclass=*)" attrs="namingContexts" resultCode=0 resu ltCodeName="Success" qtime=1 etime=0.531 entriesReturned=1 [25/Jul/2017:09:37:22.642 +0900] SEARCH RESULT threadID=30 conn=1 op=11 msgID=12 usingAdminSessionWorkerThread=true base="cn=Servers,cn=admin data" scope=0 filt er="(objectClass=*)" attrs="1.1" resultCode=32 resultCodeName="No Such Entry" me ssage="Entry cn=Servers,cn=admin data specified as the search base DN does not e xist" matchedDN="cn=admin data" qtime=0 etime=3.640 preAuthZUsedPrivileges="use- admin-session" entriesReturned=0 |
ResultCode는 클라이언트의 요청에 대한 LDAP의 응답 결과를 나타나며 해당 숫자코드를 클라이언트에게 반환하게 됩니다.
자 그럼 Result Code를 순서대로 나열하여 살펴 보겠습니다.
0 : Success
– LDAP 명령이 성공적이였음을 나타낸다.
1: Operation Error
– 현재 진행하려는 작업이 다른 작업과 관련하여 올바르게 순서가 지정되지 않았을 경우 출력
2: Protocol Error
– 올바른 형식이 아닌 데이터를 서버가 수신하였을때 출력.
– 요청에 정의된 문장에서 사용하는 속성 TYPE 이 서버에 의해 지원되지 않을때.
– 요청이 지원하지 않는 LDAP Version 으로 정의된 Bind 요청일 경우.
– Modify 요청 시 알 수 없는 명령 혹은 수정할 Entry가 존재 하지 않을 경우.
– DN Modify 요청 시 다음 중 한개의 조건이라도 만족 할때.
– 새로운 RDN이 유효 하지 않음.
– 새로운 상위 DN 정의 시 사용자가 LDAP v2 사용자로 식별됨.
– SEARCH 요청 시 다음 중 한 개의 조건이라도 만족할 때.
– 알 수 없는 Scope 가 정의됨
– 알 수 없는 filter Type이 정의가 됨.
– Filter Type이 LDAP _FILTER_GE 혹은 LDAP _FILTER_LE로 정의 되었으나 사용자가 LDAPv2 사용자로 식별됨.
– 요청이 확장 가능한 Filter를 포함하였으나( Matching Rules 사용), 사용자가 LDAPv2 사용자로 식별됨.
– LDAP_Auth_SIMPLE 혹은 LDAP_AUTH_SASL 이외의 다른 인증 방법이 정의 되었을때.
3: Time Limit Exceeded
– 클라이언트가 지정한 제한 시간이 초과 되어 작업을 완료할수없음을 나타낸다.
4: SizeLimit Exceeded
– 작업이 완료되기 전에 클라이언트가 지정한 크기제한을 초과했음을 나타낸다.
5: Compare false
– 비교 연산이 성공적으로 완료되고 그 결과로 FALSE or Undefined 로 평가되었음을 나타낸다.
6: Compare true
– 비교 연산이 성공적으로 완료되고, 그 결과로 TRUE로 평가 되었음을 나타낸다.
7:Authentication method not supported
– 현재 진행하는 인증방법 혹은 메커니즘을 지원하지 않음을 나타낸다.
8: Strong authentication required
– 서버가 작업을 완료하기 위해 강력한 인증을 요구함을 나타냅니다.
– 연결해제 알림작업과 함께 사용될 때 이 코드는 서버와 클라이언트 사이에 설정된 보안연결이 예기치 한게 실패 혹은 손상되었음을 감지합니다.
10: Referral received
– 작업을 끝 마치기 위해서 참조를 확인해야함을 나타낸다. (RFC 4511 Section 4.1.10 )
– LDAPv2 사용자가 다른 LDAP Server를 참조하게 하기 위해 사용자에게 보낸다. 이 Code를 사용자에게 보낼 때, Server는 다른 LDAP Server라고 식별된 새로운 LDAP URL들의 목록을 포함하여 보낸다. 만약 사용자가 요청 내 LDAPv3라고 식별되면, LDAP REFERRAL Result Code가 해당 Code 대신 보내진다.
11: Administrative limit exceeded
– 관리 제한을 초과했음을 나타낸다.
– SEARCH 수행이 초과된 상태에서 Look-Through 제한을 나타낸다. Look-Through 제한은 검색결과의 잠재적인 후보들의 목록을 얻을 때 서버에서 체크할 Entry의 최대 수이다 .
12: Unavailable critical extension
– 중요한 제어 또는 Matching Rules의 정의가 서버에서 지원하지 않을때 나타낸다.
– 클라이언트의 요청이 지원하지 않는 제어 혹은 SEARCH 요청에서 정의된 필터를 지원하지 않을때 해당 코드를 출력한다.
13: Confidentially required
– 작업 수행을 위해 기밀성이 필요할 때 나타낸다.
14: SASL bind in progress
– 인증이 성공하지 못하였으며, 클라이언트가 요청한 인증 처리를 계속하기 위해서 SASL Tool을 사용해 새로운 바인드 요청을 송신할것을 나타냅니다.(RFC 4511 Section 4.2)
16: No such attribute
– 정의된 attribute 가 Entry 내에 존재하지 않음을 나타낸다.
17: Undefined attribute type
– 클라이언트가 요청에 정의되지 않은 attribute Type 이 있음을 나타낸다.
18: Inappropriate matching
– 정의되지 않은 Matching Rules 를 포함하였음을 나타낸다.
19: Constraint violation
– 클라이언트가 설정된 제약조건을 따르지 않았음을 나타낸다.
– Single-Value 제약조건에서 Multiple-Value를 사용하였을 경우에 나타낸다.
20: Type or value exists
– 이미 존재하는 속성 Type 혹은 값에 대해 추가를 시도하는 요청이 있을 때 나타낸다.
– 추가하려는 값이 이미 존재할 경우
– Server의 Schema에 속성을 추가 할때, 속성의 OID가 이미 Schema 내에 ObjectClass에 의해 사용되고 있을 경우
21: Invalid syntax
– 잘못된 Syntax를 포함하고 있는 요청을 받을 시 나타낸다.
– Server가 잘못된 Syntax의 ACI(Access Control Instruction)을 동작할 때
– ACI의 속성을 추가 혹은 수정을 시도하는 요청에서 속성의 값이 잘못된 Syntax의 ACI 일 때
– Substring 필터를 포함한 Search 요청에서 필터의 Syntax가 잘못 되었을 때
– Schema 수정을 시도하는 요청에서 제공되는 값이 없을 때. (예를 들어, 요청이 Object Class 속성의 모든 값을 삭제하려 시도할 때.)
32: No such object
– Server가 요청 내에 정의된 엔트리를 찾을 수 없을 때 나타낸다
– 만약 요청된 Entry를 찾을수 없고 사용자에게 다른 LDAP Server를 알려줄수도 없다면 해당 코드를 출력한다.
33: Alias Problem
– 설정한 Alias 에 문제가 있음을 나타낸다.
34: Invalid DN syntax
– 잘못된 DN이 요청되었을 경우를 나타낸다.
35: Object is a leaf
– 정의된 Entry가 Leaf Entry 임을 나타낸다. ( Leaf Entry = 자식 Entry가 없음)
36: Alias dereferencing problem
– Alias가 역 참조되어 문제가 발생되었음을 나타냅니다.
48: Inappropriate authentication
– 자격의 종류가 인증의 방법으로 사용하기 적합하지 않음을 나타내며, 만약 Bind 요청에서 간단한 인증이 사용되는데 Entry 가 userPassword 속성을 갖고 있지 않다면 해당 코드를 클라이언트에게 반환한다.
49: Invalid credentials
– 요청에서 제공된 자격이 잘못 되었음을 나타내며, 만약 Bind 요청이 사용자를 위한 잘못된 자격을 갖고 있거나, 사용자의 패스워드가 이미 만료되었다면 해당 코드를 클라이언트에게 반환한다.
50: Insufficient access
– 사용자가 작업을 수행함에 있어 충분하지 않은 접근 권한으로 접근 했음을 나타낸다.
51: Server is busy
– 요청받은 작업을 진행하기 힘들정도로 서버가 바쁘다면 해당 코드를 반환한다.
52: Server is unavailable
– Server가 종료 중이거나 작업을 완료하는데 필요한 하위 시스템이 오프라인 상태임을 나타낸다.
53: Server is unwilling to perform
– Server가 요청 작업을 수행하기를 거부할 때 나타난다. 다음과 같은 상황에서 Server는 해당 Result Code를 반환한다.
– 사용자는 처음 로그인을 하고 비밀번호를 변경할 필요가 있는데 다른 LDAP 명령을 요청할 때. 이런 상황에선 만료된 Result Code가 만료된 비밀번호 제어와 함께 나타남
– NT-Sync 서비스가 실행 중 이고, 작업이 이 서비스에 의하여 거부 됐을 때
– DN을 Modify 하는 요청에서 최상위 DN이 정의 되었을때
– Read-Only 모드의 Directory 에 쓰기요청을 할 경우
– 삭제 요청에서 Root DSE를 삭제하려 시도할 때
– Modify DN 요청에서 Root DSE의 DN을 수정하려 시도 할때
– Schema Entry 를 수정하기 위한 Modify 요청이 다음 중 조건과 일치할 경우
– 작업이 LDAP_MOD_REPLACE 일 때. (Server는 Schema 엔트리 속성들을 대체하게 허용하지 않는다.)
– 요청이 다른 Object Class의 부모 Object Class를 삭제하려 시도할 때.
– 요청이 Read-Only인 Object Class 혹은 속성을 삭제하려 시도할 때.
– Server가 요청에 정의된 작업을 구현하지 않는 데이터베이스 Plug-in을 사용할 때
54: Detected
– Server가 내부적인 Loop 때문에 요청한 작업을 수행할 수 없음을 나타낸다.
64: Naming violation
– 요청이 DIT의 구조를 위배한다.
65: Object class violation
– 요청이 Server의 Schema를 준수하지 않고 새로운 Entry를 정의하거나 이미 존재하는 Entry 를 수정할때 나타난다.
– ADD 요청이 Schema를 준수하지 않는 새로운 Entry를 추가할때.
– Modify 요청이 Schema를 준수하지않는 Entry를 수정하려 할때.
66: Operation not permitted on a non-leaf entry
– 요청 작업이 오직 Leaf-Entry이 없는 Branch-Entry에만 적용될때 나타난다.
67: Operation not permitted on a RDN
– 요청 작업이 엔트리의 RDN에게 영향을 미치면 나타난다.
– 만약 Modify 요청이 RDN으로 사용되는 Entry의 속성 값을 삭제한다면 해당 코드를 반환한다.
68: Entry already exists
– 요청이 디렉토리 내 이미 존재하는 Entry를 추가하려 함을 나타낸다.
– ADD 요청이 디렉토리 내에 이미 존재하는 Entry를 추가하려 할때.
– Modify DN 요청이 한 Entry의 DN 을 다른 Entry에서 식별된 DN으로 수정하려 할때.
– Schema에 속성을 추가하는 요청에서 속성에 정의된 이름 혹은 OID가 이미 존재할 때.
69: Cannot modify object class
– 수정 할 수 없는 Object Class 를 수정을 시도할 경우를 나타냄
70: Results too large
– 요청의 크기가 너무 클경우 해당 코드가 반환된다.
71: Affects multiple servers
– 요청 작업이 여러대의 Server에서 수행이 필요할 경우 이작업이 허용되지 않을 경우 해당 코드가 반환된다.
76: Virtual list view error
80: Unknown error
– 알수 없는 에러
81: Cannot contact LDAP server
– C에 대한 LDAP SDK가 접속을 구성할 수 없거나 LDAP Server와 연결을 잃었을 때 나타난다. 만약 Server와 첫 연결 시 구성되지 않는다면 사용자가 정확한 Host Name과 Port Number를 정의하였는지 검증해야 하고 Server가 구동 중인지 검증해야 한다
82: Local error
– LDAP 사용자에서 Error가 발생하면 해당 코드를 반환한다.
83: Encoding error
– LDAP 사용자가 Server에게 보내기위해 LDAP 요청 을 Encoding 할 때 Error 가 발생하면 해당 코드를 반환한다.
84: Decoding error
– LDAP 사용자가 Server로부터 LDAP 응답을 받아 Decoding 할 때 Error가 발생할경우 해당 코드를 반환한다.
85: Timed out
– LDAP 사용자가 Server로부터 응답을 기다리는 동안 제한시간이 초과하게 되면 해당 코드를 반환한다.
86: Unknown authentication method
– 알수없는 인증 방법이 정의되었을때 반환된다.
– 만약 ldap_bind() 혹은 ldap_bind_s()가 호출되고 LDAP_AUTH_SIMPLE이 아닌 다른 인증 방법이 정의 되었다면, C에 대한 LDAP SDK 라이브러리는 해당 코드를 반환한다. (이 함수는 오직 사용자가 간단한 인증만 사용할게 허용한다.)
87: Bad search filter
– Search 필터를 정의할 때 Error가 발생하면 나타난다. 만약 LDAP Search 요청에서 정의된 Search 필터를 Encoding 할 수 없다면, C에 대한 LDAP SDK는 해당 코드를 반환한다.
88: User cancelled operation
– 사용자가 LDAP 작업을 취소하면 나타난다
89: Bad parameter to an LDAP routine
– 잘못된 매개변수 값을 사용하였을 경우 해당 코드를 반환한다.
90: Out of memory
– 가용할 메모리가 없다면 해당 코드를 반환한다.
91: Cannot connect to the LDAP server
– LDAP 사용자가 접속을 구성할수 없거나, LDAP 서버와의 연결을 잃었을 경우 해당 코드를 반환한다.
92: Not supported by this version of LDAP
– LDAP 사용자가 Server가 지원하지 않는 기능을 사용하려 시도할때 반환된다.
– 만약 사용자가 LDAPv2 사용자로 식별이 되고, 이 사용자가 LDAPv3 에서 사용가능한 기능을 사용하려 할때
– 확장된 작업을 요청하거나 확장된 응답을 분석하기 위해 ldap_extended_operation(), ldap_extended_operation_s(), 혹은 ldap_parse
_extended_result()를 호출할 때
– ldap_rename() 혹은 ldap_rename_s()를 호출하고 사용자가 Argument로서 새로운 ‘상위 DN’을 정의할 때
– 간단한 인증과 SASL 인증을 요청하거나 SASL bind 응답을 분석하기 위해 ldap_sasl_bind(), ldap_sasl_bind_s(), 혹은 ldap_parse_sasl_bind_
result()를 호출할 때.
– Server의 응답으로부터 가성 목록 제어를 분석하기 위해 ldap_parse_
virtuallist_control()을 호출할 때.
93: Requestd LDAP control not found
– 요청된 LDAP 제어를 찾을수 없을 경우 반환된다.
– 제어를 위한 Server의 응답을 분석하는데 요청된 제어를 찾을수 없을 때
– Ldap_parse_entrychange_control()이 호출되었으나 Server의 응답에 Entry Change Notification Control을 찾을 수 없을 때
– Ldap_parse_virtuallist_control()가 호출되었으나 Server의 응답에 Virtual list view response control을 찾을 수 없을 때
94: No results returned
– Server로 부터 반환되는 결과가 아무것도 없을 경우 해당 코드를 반환한다.
95: Additional results to return
– 일련의 결과에서 결과가 추가적으로 존재할 경우 반환된다.
– Ldap_parse_sasl_bind_result() 함수가 작업의 Result Code를 검색하기 위해 호출되고 Server로 부터 추가적인 Result Code가 LDAP 구성 내 가용할 때
96: Client detected loop
– LDAP 사용자가 Loop를 발견 했을 때 반환된다. ( 예를 들어 참조가 따라올 경우)
97: Referral hop limit exceeded
– Referral hop limit를 초과했을 경우 반환된다.
– 참조가 따라올 때 , 만약 사용자가 referral hop limit에 의하여 허용되는 것 보다 다른 Sever엣 더 여러번 호출 될때
[Reference]
http://www.openldap.org/doc/admin24/appendix-ldap-result-codes.html
https://docs.oracle.com/cd/E19957-01/817-707/resultcodes.html#wp30395
https://www.ldap.com/ldap-result-code-reference