相关疑难解决方法(0)

旧版应用程序的PAM身份验证

我有一个遗留应用程序,通过网络异步接收用户名/密码请求.由于我已将用户名和密码存储为变量,因此在Linux(Debian 6)上使用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);
Run Code Online (Sandbox Code Playgroud)

对话函数的初始尝试导致(密码被硬编码用于测试):

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 …
Run Code Online (Sandbox Code Playgroud)

c c++ linux authentication pam

8
推荐指数
1
解决办法
7191
查看次数

标签 统计

authentication ×1

c ×1

c++ ×1

linux ×1

pam ×1