ldapjs ничего не возвращает, но ldapsearch работает и журнал отладки показывает, что SearchEntry вернул - PullRequest
0 голосов
/ 03 октября 2019

У меня есть проблема, похожая на преобразование Ldapsearch в ldapjs , за исключением того, что я думаю, что я уже правильно использую scope.

Мой код такой:

            const ldap = require('ldapjs');
            var client = ldap.createClient({
                url: 'ldap://70.70.70.70:389',
                log,
            });
            client.bind('CN=vagrant,CN=Users,DC=perficientads,DC=com' /*'vagrant@perficientads.com'*/, 'vagrant', function(err) {
                if (err) {
                    return console.log('Error:', err);
                }
                client.search('DC=perficientads,DC=com',
                    {
                        //filter:'(&(|(objectClass=user)(objectClass=person))(!(objectClass=computer))(!(objectClass=group))(cn=*vagrant*))',
                        filter: '(sAMAccountName=vagrant)',
                        //filter: '(&(|(objectClass=user)(objectClass=person))(!(objectClass=computer))(!(objectClass=group)))',
                        attributes: [
                            'dn', 'sn', 'cn',
                            "mail",
                        ],
                        scope: 'sub',
                    },
                    function(err, res) {
                        res.on('searchEntry', function(entry) {
                            console.log('entry: ' + JSON.stringify(entry.object));
                            resolve(null);
                        });
                        res.on('searchReference', function(referral) {
                            console.log('referral: ' + referral.uris.join());
                            resolve(null);
                        });
                        res.on('error', function(err) {
                            console.error('error: ' + err.message);
                            resolve(null);

                        });
                        res.on('end', function(result) {
                            console.log('result status: ' + JSON.stringify(result));
                            resolve(null);
                        });
                    }
                );
            });

        });

Весь журнал отладки ldapjs доступен по адресу https://gist.github.com/davidpodhola/b8c851ca3e7c4cf0c66d8981cd250028#file-log-txt-L25;, самая важная часть которого состоит в том, что он содержит строки типа

{"name":"oecsc-rental","hostname":"PerficientAD","pid":4992,"clazz":"Client","level":10,"msg":"Parsing done: {\"messageID\":2,\"protocolOp\":\"SearchEntry\",\"objectName\":\"CN=vagrant,CN=Users,DC=perficientads,DC=com\",\"attributes\":[{\"type\":\"cn\",\"vals\":[\"vagrant\"]}],\"controls\":[]}","time":"2019-10-03T12:41:07.524Z","v":0}
{"name":"oecsc-rental","hostname":"PerficientAD","pid":4992,"clazz":"Client","ldap_id":"1__ldap://70.70.70.70:389","level":10,"msg":"response received","time":"2019-10-03T12:41:07.524Z","v":0}

, которые, я считаю, означают SearchEntry, которые должны быть возвращены.

Выполнение того же поиска с ldapsearch, как

ldapsearch -H ldap://70.70.70.70:389 -x -W -D "vagrant@perficientads.com" -b "DC=perficientads,DC=com" "(sAMAccountName=vagrant)" "mail"

, работает правильно.

Проблема в том, что событие 'end' запускается немедленно, а searchEntry не запускается.

Я думаю, что упустил что-то очень простое. Пожалуйста, помогите, спасибо!

...