7699d7ec |
#include <security/pam_modules.h>
|
01c00cfe |
#include <algorithm>
#include <vector>
#include <string>
|
7699d7ec |
#include "conversation.h"
|
2fade7af |
namespace
{
class impl : public conversation_ifc
{
public:
conversation_result initiate (const pam_request &request) {
return {"user","token"};
}
};
}
conversation create_conversation(pam &pam) {
return conversation(std::shared_ptr<conversation_ifc>(new impl));
}
|
f46fb7b6 |
/*
|
b017a4d2 |
pam_token_conversation::pam_token_conversation (pam_handle_t *pamh,
const pam_p pam)
|
cdf7fd74 |
{
|
01c00cfe |
pam_conversation_p pam_conversation;
|
b017a4d2 |
int get_conversation_result = pam->get_conversation (pamh,
pam_conversation);
|
1bbd05bc |
if (get_conversation_result != 0) {
|
662f2d36 |
return;
}
|
0b6e39a6 |
|
f9c4622b |
struct pam_message prompt;
|
b017a4d2 |
std::string message ("Dual control token: ");
prompt.msg = const_cast<char *> (message.c_str());
|
c9d7e817 |
prompt.msg_style = PAM_PROMPT_ECHO_OFF;
|
b017a4d2 |
std::vector<const struct pam_message *> prompts (1);
|
f9c4622b |
prompts[0] = &prompt;
|
b017a4d2 |
std::vector<struct pam_response *> answers (1);
int conversation_result = pam_conversation->conv (prompts, answers);
|
1bbd05bc |
if (conversation_result) {
return;
}
|
12570d65 |
if (answers[0]->resp_retcode) {
return;
}
|
b017a4d2 |
std::string answer (answers[0]->resp);
std::string::iterator delim = std::find (answer.begin(), answer.end(), ':');
|
24888e2d |
if (delim == answer.end()) {
return;
}
|
b017a4d2 |
std::string user_name (answer.begin(), delim);
std::string token (delim + 1, answer.end());
|
01c00cfe |
user_ = user_name;
token_ = token;
}
|
0b6e39a6 |
|
cdf7fd74 |
std::string pam_token_conversation::token()
{
|
01c00cfe |
return token_;
|
7699d7ec |
}
|
cdf7fd74 |
std::string pam_token_conversation::user_name()
{
|
01c00cfe |
return user_;
|
be7b0e04 |
}
|
f46fb7b6 |
*/
|
92957308 |
|