01c00cfe | #include <string> #include <vector> #include <memory> #include <security/pam_modules.h> #include <security/pam_appl.h> #include "pam.h" |
cdf7fd74 | class pam_conversation_impl : public pam_conversation { private: struct pam_conv *pam_conv_; public: |
b017a4d2 | pam_conversation_impl (pam_conv *conv) : pam_conv_ (conv) {} int conv (const std::vector<const struct pam_message *> &prompts, std::vector<struct pam_response *> &answers); |
01c00cfe | }; |
cdf7fd74 | class pam_impl : public pam { public: |
b017a4d2 | int get_conversation (pam_handle_t *pamh, std::shared_ptr<pam_conversation> &conversation); |
01c00cfe | }; |
b017a4d2 | int pam_impl::get_conversation (pam_handle_t *pamh, std::shared_ptr<pam_conversation> &conversation) |
cdf7fd74 | { |
01c00cfe | struct pam_conv *pam_conv; |
b017a4d2 | int result = pam_get_item (pamh, PAM_CONV, (const void **)&pam_conv); conversation.reset (new pam_conversation_impl (pam_conv)); |
01c00cfe | return result; } |
b017a4d2 | int pam_conversation_impl::conv (const std::vector<const struct pam_message *> &prompts, std::vector<struct pam_response *> &answers) |
cdf7fd74 | { |
b017a4d2 | return pam_conv_->conv (prompts.size(), const_cast<const struct pam_message **> (prompts.data()), answers.data(), pam_conv_->appdata_ptr); |
01c00cfe | } |
cdf7fd74 | pam_p get_system_pam() { |
01c00cfe | return (pam_p)new pam_impl; } |
92957308 |