У меня возникают проблемы с получением информации о текущем пользователе Red Hat Enterprise 6, где пользователь является пользователем LDAP?
У меня есть код (фактически часть инструмента установки), который должен получить имя пользователя, домашний каталог и другие детали. Для этого используется вызов getpwuid () на основе идентификатора пользователя. Упрощенная разбивка:
uid_t uid = getuid();
printf("UID = %d\n", uid);
errno = 0;
struct passwd* udetails = getpwuid(uid);
if (udetails != NULL)
{
printf("User name = %s\n", udetails->pw_name);
}
else
{
printf("getpwuid returns NULL, errno=%d\n", errno);
}
Это работает без проблем, если пользователь является локальным пользователем (в / etc / passwd этой системы).
Когда пользователь является пользователем с аутентификацией LDAP, вызов getuid возвращает идентификатор пользователя или текущего пользователя, но вызов getpwuid возвращает 0, без кода ошибки, установленного в errno. Согласно документации, это означает, что пользователя не существует.
Должно ли это сработать? Согласно man-странице getpwuid:
Функция getpwnam () возвращает указатель на структуру, содержащую выделенные поля записи в базе данных паролей (например, локальный файл паролей / etc / passwd, NIS и LDAP), которая соответствует имени пользователя.
Функция getpwuid () возвращает указатель на структуру, содержащую выделенные поля записи в базе данных паролей, которая соответствует идентификатору пользователя uid.
Требуется ли альтернативный вызов для получения сведений, если текущий пользователь прошел аутентификацию с помощью LDAP? Обязательно ли открывать базу данных LDAP в приложении или это должен обрабатывать системный вызов?
Дополнительно: я также сейчас пробовал это на блоке RHEL 5, аутентифицируемом в том же каталоге LDAP. Может быть, это просто проблема конфигурации коробки RHEL 6? Или более широкий вопрос RHEL 6?
Дополнительно: /etc/nsswitch.conf по запросу Базиля Старынкевича (строки с комментариями удалены):
passwd: files sss
shadow: files sss
group: files sss
hosts: files dns
bootparams: nisplus [NOTFOUND=return] files
ethers: files
netmasks: files
networks: files
protocols: files
rpc: files
services: files sss
netgroup: files sss
publickey: nisplus
automount: files ldap
aliases: files nisplus
Я предполагаю, что некоторые из них должны упоминать ldap в какой-то момент? Фактически это говорит о том, что он вообще не использует LDAP ....
/etc/nsswitch.conf
файл. - person Basile Starynkevitch   schedule 02.09.2013