ネットワーク経由でユーザー名/パスワード要求を非同期に受信する従来のアプリがあります。ユーザー名とパスワードが変数として保存されているため、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);
そして、会話機能の最初の試行の結果は次のようになりました (パスワードはテスト用にハードコードされています)。
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);
}
どんな助けでも大歓迎です。ありがとうございました!