私は、ワイヤを通じて非同期にユーザー名/パスワード要求を受け取るレガシーアプリケーションを持っています。私はすでにユーザ名とパスワードを変数として保存しているので、Linux(Pian)の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);
}
任意の助けをいただければ幸いです。ここ
は私がやっているものです。ありがとうございました!
ありがとうございました!そして、ここで私は、会話機能を、バイパスして、その外の応答を使って作業するのではなく、その通信機能に触れる方法を見つけようとしていました。 –
これは 'root'(単に 'root'、他のすべてのユーザーは認証済みです)では機能しません。それはバグですか? – alexandernst
私は分かりません。私は根っこをしなかった。定期的にルートパスワードを使用する必要がある場合は、おそらく何か間違っているでしょう。 – Fantius