Операционные системы - статьи


Делаем собственный PAM-модуль - часть 3


/* * The only thing _pam_set_credentials_unix() does is initialization of * UNIX group IDs. * * Well, everybody but me on linux-pam is convinced that it should not * initialize group IDs, so I am not doing it but don't say that I haven't * warned you. -- AOY * Перевожу: Единственная вещь которую делает pam_set_cred это инициализация Идентификаторов групп... короче в данном случае это нам совершенно не нужно */

PAM_EXTERN int pam_sm_setcred(pam_handle_t * pamh, int flags ,int argc, const char **argv) { unsigned int ctrl; int retval;

retval = PAM_SUCCESS; //Чтобы никто не заметил, что мы ничего не делаем ответим, что все в порядке return retval; }

// Это определение необходимо для статической линковки модулей PAM в приложениях. #ifdef PAM_STATIC struct pam_module _pam_unix_auth_modstruct = { "pam_test", pam_sm_authenticate, pam_sm_setcred, NULL, NULL, NULL, NULL, }; #endif

Вот и все. Просто. Дело в том, что мы тут описываем процедуру аутентификации и только ее - положительный эффект от грамотного разделения обязанностей. Повторим все основные этапы. В модуле, понятное дело ,должны существовать экспортируемые функции. В нашем случае это pam_sm_authenticate и pam_sm_setcred. Для каждого класса модулей свой набор функций. Дальше, внутри функций находится основной алгоритм принятия решения ответом является только "да" или "нет". Если же для принятия столь ответственного решения необходимо узнать дополнительную информацию от пользователя, то можно узнать указатель на диалоговую функцию программы.

Работа с другими классами модулей абсолютно идентична. Так что попробуйте сделать еще что-нибудь свое.




Начало  Назад  Вперед



Книжный магазин