Назад | Перейти на главную страницу

nss_ldap: “getent passwd” works, “getent passwd <username>Не удается?</username>

Я установил nss_ldap, отредактировал nsswitch.conf, чтобы использовать ldap; вот мой /etc/ldap.conf содержание:

host ldap.<mycompany>.com
base o=<mycompany>,c=<cc>
bind_policy soft
nss_reconnect_tries 4
nss_reconnect_sleeptime 1
nss_reconnect_maxsleeptime 16
nss_reconnect_maxconntries 2

Когда я делаю

getent passwd

Я получаю правильное представление обо всех именах пользователей в компании. Но если я сделаю

getent passwd <some user>

с известным допустимым именем пользователя ничего не возвращается, как если бы пользователь не существовал. (работает для локальных пользователей, не использующих ldap)

Если я компилирую nss_ldap с включенной отладкой, первый выводит много отладочных сообщений, например: nss_ldap: ==> do_result nss_ldap: <== do_result nss_ldap: ==> _nss_ldap_assign_userpassword nss_ldap: <== _nss_serpass_assign_assign_

но последний ничего не показывает. В системном журнале тоже ничего нет.

Это меня весьма озадачивает. С чего начать искать проблему? какие идеи где это могло быть?

Клиент работает под управлением Gentoo linux, nss_ldap-264. Сервер LDAP вне моего контроля.

Вы используете nscd, демон кэширования имен? У него может быть отрицательный кеш пользователя, и в этом случае выполняется /usr/sbin/nscd -i passwd сделает кеш недействительным и вызовет повторную выборку.

getent passwd работает, потому что он обходит nscd.