我正在尝试创建一个简单的显示管理器,因此我需要对用户进行身份验证,因此我开始学习如何使用PAM。我想在没有控制台提示的情况下设置密码,所以我尝试将pam_set_item
与AUTHTOK
一起使用,但它会抛出Bad Item错误...这是一个最小的例子:
#include <security/pam_appl.h>
#include <stdio.h>
int main()
{
struct pam_conv conversation;
pam_handle_t* pam_handle;
int status = pam_start("test_pam", "myusername", &conversation, &pam_handle);
char* password = "mypassword";
status = pam_set_item(pam_handle, PAM_AUTHTOK, password);
printf("Error: %s\n", pam_strerror(pam_handle, status));
status = pam_end(pam_handle, status);
}
您是否知道如何将密码发送到PAM而无需从控制台提示符输入?
答案 0 :(得分:0)
它说: http://linux.die.net/man/3/pam_set_item
PAM_AUTHTOK身份验证令牌(通常是密码)。这个令牌 除了之外,所有模块功能都应该被忽略 pam_sm_authenticate(3)和pam_sm_chauthtok(3)。在前一个功能 它用于从一个传递最新的身份验证令牌 堆叠模块到另一个。在后一种功能中,使用令牌 为了另一个目的。它包含当前活动的身份验证 令牌。
除非您正在实现pam_sm_authenticate或pam_sm_chauthtok函数,否则无法设置PAM_AUTHTOK。