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


Делаем собственное PAM-приложение - часть 6


conv.conv = stdin_conv; conv.appdata_ptr = strdup(newPassword); // Мы только что заполнили структуры данных, необзодимые для диалога. // А именно Добавили пароль и указатель на функцию диалога.

// Запускаем PAM. Говорим, что нужно читать файл /etc/pam.d/passwd, // указываем имя пользователя и функция для ведения // диалога.

retval = pam_start("passwd", username, &conv, &pamh);

while (retval == PAM_SUCCESS) { retval = pam_chauthtok(pamh, 0); // Вот именно здесь все и происходит. PAM вызывает функцию-диалог, // анализирует ответ в месте с модулями заданными в // /etc/pam.d/passwd и изменяет пароль, если получается.

if (retval != PAM_SUCCESS) break; /* all done */ retval = pam_end(pamh, PAM_SUCCESS); if (retval != PAM_SUCCESS) break; /* quit gracefully */ sprintf(username, "all right!...\n"); //Поработали и хватит. server_done(); exit(0); }

if (retval != PAM_SUCCESS) sprintf(username, "passwd: %s\n", pam_strerror(pamh, retval));

if (pamh != NULL) { (void) pam_end(pamh,PAM_SUCCESS); pamh = NULL; }

// Пусть нам сегодня не повезло, но клиента тоже надо огорчить. server_done(); exit(1); }

Вот и весь сервер. Функций аутентификации заметно прибавилось, хотя они и скрылись за тремя могучими буквами PAM. Итак, повторим увиденное.

Для приложения важно запустить PAM (pam_start) и получить некоторый дескриптор. Затем определиться с диалоговой функцией. Сам PAM она не волнует, а волнует только выдаваемый ею ответ в специальной форме. Сделав это, запускаем требуюмую функцию: аутентификации (pam_authentificate), изменения пользовательских данных (pam_chauthtok) или какую еще. Наконец, торжественно завершаем концерт функцией pam_end. По-моему все просто и понятно, а теперь вперед к компьютеру...




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



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