我有一个传统应用程序,通过线路异步接收用户名/密码请求。由于我已经将用户名和密码存储为变量,因此在Linux(Debian 6)上使用PAM进行身份验证的最佳方式是什么?传统应用程序的PAM验证
我已经尝试写我自己的对话功能,但我不知道获取密码的最佳方式。我曾考虑将其存储在appdata中,并从pam_conv结构中引用它,但几乎没有关于如何执行该操作的文档。
是否有一种更简单的方式来验证用户而不会过度使用对话功能?我无法成功使用pam_set_data,但我不确定这是否合适。
下面是我在做什么:
user = guiMessage->username;
pass = guiMessage->password;
pam_handle_t* pamh = NULL;
int pam_ret;
struct pam_conv conv = {
my_conv,
NULL
};
pam_start("nxs_login", user, &conv, &pamh);
pam_ret = pam_authenticate(pamh, 0);
if (pam_ret == PAM_SUCCESS)
permissions = 0xff;
pam_end(pamh, pam_ret);
和初步尝试在会话功能导致(密码是硬编码用于测试):
int
my_conv(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *data)
{
struct pam_response *aresp;
if (num_msg <= 0 || num_msg > PAM_MAX_NUM_MSG)
return (PAM_CONV_ERR);
if ((aresp = (pam_response*)calloc(num_msg, sizeof *aresp)) == NULL)
return (PAM_BUF_ERR);
aresp[0].resp_retcode = 0;
aresp[0].resp = strdup("mypassword");
*resp = aresp;
return (PAM_SUCCESS);
}
任何帮助,将不胜感激。谢谢!
谢谢!在这里,我试图找到方法来沟通_对话函数,而不是绕过并处理其外部的响应。 – 2011-05-12 19:26:46
这不适用于'root'(只是'root',所有其他用户都可以自动认证)。这是一个错误? – alexandernst 2013-04-28 16:44:04
我不知道。我没有尝试root。如果您需要定期使用root密码,那么您可能会出错。 – Fantius 2013-04-28 19:17:09