#include #include #include #include #include #include "pam.h" class pam_conversation_impl : public pam_conversation { private: struct pam_conv *pam_conv_; public: pam_conversation_impl (pam_conv *conv) : pam_conv_ (conv) {} int conv (const std::vector &prompts, std::vector &answers); }; class pam_impl : public pam { public: int get_conversation (pam_handle_t *pamh, std::shared_ptr &conversation); }; int pam_impl::get_conversation (pam_handle_t *pamh, std::shared_ptr &conversation) { struct pam_conv *pam_conv; int result = pam_get_item (pamh, PAM_CONV, (const void **)&pam_conv); conversation.reset (new pam_conversation_impl (pam_conv)); return result; } int pam_conversation_impl::conv (const std::vector &prompts, std::vector &answers) { return pam_conv_->conv (prompts.size(), const_cast (prompts.data()), answers.data(), pam_conv_->appdata_ptr); } pam_p get_system_pam() { return (pam_p)new pam_impl; }