Итак, дело было в Linux. Задача: наряду с passwd/shadow создать возможность авторизации пользователей из базы данных Firebird в операционной системе, а в перспективе — в почте, в самбе, на прокси и так далее.
Начав копать информацию по теме, я наткнулся на PAM. Оказалось, нужно написать PAM-модуль. Собственно, все там понятно и красиво, кроме одного.
В ответ на попытку авторизации модуль должен выяснить:
существует ли такой пользователь,
правильно ли указан пароль,
не истек ли срок аккаунта
и так далее.
Казалось бы, всего делов — взять за основу исходник pam_permit (этот модуль пускает всех без разбора) или пример модуля из какой-нибуь статьи (примеров по пальцам сосчитать, но их все же предостаточно), воткнуть его в систему и дорабатывать, тестировать.
Исходя из спецификации PAM-модулей для того, чтобы функция ответила вопрошающему приложению "да", достаточно в ее реализации вернуть PAM_SUCCESS и все.
То есть буквально пишу везде:
{
return PAM_SUCCESS;
}
в /etc/pam.d/ в login или даже system-auth для модуля пишу sufficient в auth и password
(кроме sufficient перепробовано и required и т. д.)
Проблема: не пускает.
Оставлял в конфиге уже одного его. Не пускает.
Чтобы избежать лишних предположений, скажу, что модуль успешно собирается, копируется в папку к другим модулям и ему даются теже права доступа, что и другим. Отладочные сообщения доказывают, что функции, которые должны выполняться из моего модуля таки выполняются точно.
Чего я хочу.
Пример конфигурации PAM, при котором работает хотя бы тот же pam_permit. То есть тупо пускает с любым логином/паролем. Далее разборки с доступом к базе, домашним каталогом, группой, правами, uid-ом и прочим хозяйством более-менее ясны. Уперся я именно в PAM. Чувствуется, что истина где-то рядом, но чего-то не хватает.
или
Задача сама по себе просто обязана возникать из-за растущего применения БД везде, где только можно. И дело тут даже не конкретно в Firebird-е. Наверное кто-то уже натыкался на эти грабли и может поделиться ссылками, кусками кода или конфигов. (ни одна из найденных мной статей (не меньше, чем штук пять, на этом сайте в том числе) решения на проблему не подкинула).
Что я упустил?