#include #include #include #include #include #include #include #include #include #define DLL_PUBLIC __attribute__((visibility("default"))) using namespace std; namespace { template < typename T > using Expected = tl::expected< T, rublon::PamAction >; } // namespace DLL_PUBLIC int pam_sm_setcred([[maybe_unused]] pam_handle_t * pamh, [[maybe_unused]] int flags, [[maybe_unused]] int argc, [[maybe_unused]] const char ** argv) { return PAM_SUCCESS; } DLL_PUBLIC int pam_sm_acct_mgmt([[maybe_unused]] pam_handle_t * pamh, [[maybe_unused]] int flags, [[maybe_unused]] int argc, [[maybe_unused]] const char ** argv) { return PAM_SUCCESS; } DLL_PUBLIC int pam_sm_authenticate(pam_handle_t * pamh, [[maybe_unused]] int flags, [[maybe_unused]] int argc, [[maybe_unused]] const char ** argv) { rublon::log(rublon::LogLevel::Debug, "pam start"); auto rublonConfig = rublon::ConfigurationFactory{}.systemConfig(); rublon::CoreHandler CH{rublonConfig.value()}; rublon::log(rublon::LogLevel::Debug, "Init"); auto method = rublon::Init{pamh, rublonConfig.value()}.fire(CH); rublon::log(rublon::LogLevel::Debug, "Method"); method.value().fire(CH); // .and_then([](const auto & value) { return tl::expected< rublon::Configuration, rublon::PamAction >{}; }) // // .and_then([](const auto & conf) { return tl::expected< rublon::Configuration, rublon::PamAction >{}; }); return PAM_SUCCESS; }