我尝试使用证书对带有分页的ldapsearch执行LDAP:
export LDAPTLS_CACERT=/home/test/ssl.pem
ldapsearch -x -H ldaps://test.test.com:636 -b "dc=test,dc=com" -E pr=100/noprompt
500结果后的上述命令,ldapsearch返回超出大小限制:
search: 6
result: 0 Success
control: 1.2.840.113556.1.4.319 false MA0CAQAECOYFAAAAAAAA
pagedresults: cookie=5gUAAAAAAAA=
# extended LDIF
#
# LDAPv3
# base <dc=test,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
# with pagedResults control: size=100
#
# search result
search: 7
result: 4 Size limit exceeded
# numResponses: 506
# numEntries: 500
但是,当我不仅传递证书而且传递用户名/密码时,事情也完美无缺:
export LDAPTLS_CACERT=/home/test/ssl.pem
ldapsearch -x -H ldaps://test.test.com:636 -b "dc=test,dc=com" \
-E pr=100/noprompt -D "cn=admin,dc=test,dc=com" -w myamazingpassword
1006结果后的上述命令,ldapsearch返回成功:
# search result
search: 12
result: 0 Success
control: 1.2.840.113556.1.4.319 false MAUCAQAEAA==
pagedresults: cookie=
# numResponses: 1017
# numEntries: 1006
为什么会这样?为什么我没有用户名/密码就无法在ldap上执行分页搜索?
答案 0 :(得分:0)
大多数服务器对不同用户实施不同的大小限制(管理员与普通用户和匿名用户)。 运行纯LDAPS搜索时,没有LDAP身份验证。服务器可能会将匿名用户的条目数限制为500.
如果要使用证书在LDAP级别对客户端进行身份验证,则应使用选项#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 4
void fillWithStrings( char* (foo)[SIZE][SIZE] ){
for( int i = 0; i < SIZE; i++ ) {
for( int j = 0; j < SIZE; j++ ) {
char * temp = malloc( 3 ); //sizeof(char) is always 1
if (j % 2) strcpy(temp, "lo");
else strcpy(temp,"hi");
foo[i][j] = temp;
}
}
}
int main(){
char * foo[SIZE][SIZE];
fillWithStrings( foo );
for( int i = 0; i < SIZE; i ++)
for (int j = 0; j < SIZE; j++)
printf("[%d][%d] = %s\n", i, j, foo[i][j]);
return 0;
}
请求SASL EXTERNAL身份验证。
答案 1 :(得分:-1)
如果您向Active Directory(AD)请求大量结果,则会收到“超出大小限制”错误消息:在不分页的情况下执行的Active Directory搜索仅限于返回前1000条记录中的最大值。
一种解决此搜索大小限制的方法是也通过ldapsearch
获取“页面”结果。
ldapsearch
提供了-E
选项,可以执行分页搜索。
我们只需提供正确的分页策略即可要求提供大型结果集的所有项目。
例如,我们可以使用-E
并提供值pr=1000/noprompt
来返回所有页面,每页包含1000个结果项,而无需进一步的用户交互(无提示)。
ldapsearch -E pr=1000/noprompt -x
-h adhost.domain.com
-p 389
-D cn=administrator,cn=users,dc=domain,dc=com
-w password
-s sub -b "OU=Users,DC=domain,DC=com"
"(objectClass=user)" dn