我正在编写一个自定义显示管理器,通过测试,我发现pam_authenticate总是返回PAM_AUTH_ERR。
我尝试使用用户名/密码,密码错误,密码字段为空以及用户名无法识别。所有这些尝试均返回PAM_AUTH_ERR。我是PAM的新手,所以我尝试了其他(强力)方法,例如将return设置为SUCCESS并将True返回给我的登录功能(对pam_authenticate的调用位于其中)。
这是身份验证所在的位置(err()是定义的宏,用于显示错误和“ login(...)”中的“ return False;”。
bool login(const char *username, const char *password, pid_t *child_pid) {
const char *data[2] = {username, password};
struct pam_conv pam_conv = {
conv, data
};
int result = pam_start(SERVICE_NAME, username, &pam_conv, &pam_handle);
if (result != PAM_SUCCESS) {
err("pam_start");
}
result = pam_authenticate(pam_handle, 0);
//result = PAM_SUCCESS;
if (result != PAM_SUCCESS) {
err("pam_authenticate");
//err("pam_authenticate");
}
...
}
以下是发生的情况:https://i.imgur.com/3291JtW.png。
我应该能够登录到用户帐户并继续正常进行。我不希望我的自定义显示管理器可以与复杂的Windows管理器一起使用,因此我正在与DWM进行会话。
谢谢您的帮助。