#pragma once #include #include #include namespace rublon { class PamStub { public: rublon::NonOwningPtr< const char > ip() const { const void * ip = "127.0.0.1"; return ( const char * ) ip; } rublon::NonOwningPtr< const char > username() const { const char * user = "bwi"; return user; } template < typename... Ti > void print(const char * fmt, Ti... ti) const noexcept { char buf[256] = {}; sprintf(buf, fmt, std::forward< Ti >(ti)...); log(LogLevel::Debug, "pam_print: '%s'", buf); printf(fmt, std::forward< Ti >(ti)...); printf("\n"); } template < typename Fun, typename... Ti > auto scan(Fun && f, const char * fmt, Ti... ti) const noexcept { std::string response; char buf[256] = {}; sprintf(buf, fmt, std::forward< Ti >(ti)...); std::getline(std::cin, response); if(!response.empty()) { auto ret = f(response.c_str()); return ret; } return std::result_of_t< Fun(char *) >(); } void enableNoninteractive(){ } }; } // namespace rublon