Способ передачи стандартной информации (такой как пароль) для PAM заключается в использовании переменных, установленных в дескрипторе pam с помощью pam_set_item (см. Справочную страницу для pam_set_item).
Вы можете установить все, что ваше приложение будетнужно использовать позже в pam_stack.Если вы хотите поместить пароль в стек pam_stack, вы сможете сделать это сразу после вызова pam_start (), установив переменную PAM_AUTHTOK в стек, как показано в псевдокоде ниже:
pam_handle_t* handle = NULL;
pam_start("common-auth", username, NULL, &handle);
pam_set_item( handle, PAM_AUTHTOK, password);
Это сделаетпароль, доступный в стеке для любого модуля, который хочет его использовать, но вы, как правило, должны указать модулю использовать его, установив стандартные параметры use_first_pass или try_first_pass в pam_configuration для службы (в данном случае / etc / pam.d / common-auth).
Стандартный модуль pam_unix поддерживает try_first_pass, поэтому было бы неплохо добавить это в конфигурацию pam в вашей системе (в конце строки для pam_unix).
После того, как вы сделаете это, любой вызов pam_authenticate () , который вызывается из службы общего аутентификации, должен просто подобрать пароль и пойти с ним.
Одна небольшая заметка оразница между use_first_pass и try_first_pass: они оба сообщают модулю (в данном случае pam_unix)попробовать пароль в pam_stack, но они отличаются по поведению, когда у них нет пароля / AUTHTOK.В пропущенном случае use_first_pass завершается неудачно, а try_first_pass позволяет модулю запрашивать пароль.