【发布时间】:2014-09-03 10:40:22
【问题描述】:
我想使用搜索过滤器查询 LDAP。为了连接到 LDAP 服务器,我使用的是 node.js。
我可以使用搜索过滤器在 LDAP 中搜索任何名称。但是当我尝试搜索任何手机号码或电话号码时,我收到了错误:request timeout (client interrupt)。
这是我搜索名称时可以使用的 node.js 代码:
var ldap = require('ldapjs');
var sys = require('sys');
var assert = require('assert-plus');
var username = 'XXXXXXX';
var password = 'XXXXXXX';
var domain = "cts.com";
var searchBase = 'dc=cts,dc=com';
var client = ldap.createClient({
url: 'ldap://myipaddress:portnumber',
bindDN: "cts.com",
timeout: 5000,
connectTimeout: 10000
});
client.bind('cts\\'+username, password, function (err) {
if (err) {
console.log(err);
client.unbind(function (err) {
console.log('3');
if (!err) {
console.log('successfully unbind');
}
else {
console.log(err);
}
});
} else {
console.log('authenticated');
var searchResult = search();
}
});
function search(){
var opts = {
filter:'(sAMAccountName='+username+')',
scope: 'sub',
attributes: ['sAMAccountName','name','givenName','distinguishedName','displayName','cn','sn',
'mail','title','description','department','company','manager',
'telephoneNumber','mobile','co','c','l','st','postalCode'],
};
client.search(searchBase, opts, function(err, res) {
assert.ifError(err);
res.on('searchEntry', function(entry) {
console.log('searchEntry');
var user = entry.object;
console.log(user.objectGUID);
if(entry.object){
console.log('entry: %j ' + JSON.stringify(entry.object))
}
});
res.on('searchReference', function(referral) {
console.log('searchReference');
console.log('referral: ' + referral.uris.join());
});
res.on('error', function(err) {
console.error('error: ' + err.message);
});
res.on('end', function(result) {
console.log('status: ' + result.status);
return result;
});
});
}
我在命令提示符下运行上述代码后得到的结果是:
认证 不明确的 搜索条目 不明确的 条目:%j {"dn":"CN=anyname,OU=Users,OU=DLF,OU=Chennai,OU=India,OU=APAC,OU=mycompanyname,DC=cts,DC=com","controls" :[],"cn":"name","sn":"K-5","c":"IN","l":"C hennai","st":"TN","title":"Developer","description":"Associate","postalCode":"600089","telephoneNumber":"123455","givenName":"XXXXXXXXX" “区分 hedName":"CN=XXXXXXXX,OU=Users,OU=DLF,OU=Chennai,OU=India,OU=APAC,OU=Cognizant,DC=cts,DC=com","displayName":"XXXXXXXX"," co":"IND","department":"Mobility-MM","company":"任何公司名称","name":"anyname","sAMAccountName":"employeeID","mail":"mailid@ gmail.com","手机":"999-091-3918" }接下来我需要在 LDAP 中搜索“mobile”字段。所以我所做的是,我将搜索过滤器重写为
var searchNumber = '999-091-3918';
var opts = {
filter:'(mobile='+searchNumber+')',
scope: 'sub',
attributes: ['sAMAccountName','name','givenName','distinguishedName','displayName','cn','sn',
'mail','title','description','department','company','manager',
'telephoneNumber','mobile','co','c','l','st','postalCode'],
};
并运行代码。
这次我得到error request timeout (client interrupt)。谁能帮我在 LDAP 中为手机和电话号码编写搜索过滤器?
【问题讨论】:
-
手机号码是否作为多值属性存储在 LDAP 中?
-
如果其中一位用户的手机号码为“9990913918”,则搜索结果应通过搜索手机号码给出该用户的信息