a71244c0 | #include <string> #include <vector> #include <security/pam_modules.h> #include "request.h" |
a85aeaf0 | #include "dual_control.h" |
caf7db60 | #include "conversation.h" #include "validator.h" |
34ba20e5 | |
a71244c0 | int dual_control_ifc::authenticate (const pam_request &request) { return PAM_SERVICE_ERR; } int dual_control_ifc::setcred ( const pam_request &request) { return PAM_SERVICE_ERR; } |
cdf7fd74 | class impl : public dual_control_ifc { private: conversations conversations_; validator validator_; logger logger_; public: |
b017a4d2 | impl (const dual_control_configuration &configuration); |
a71244c0 | int authenticate (const pam_request &request); int setcred (const pam_request &request); |
4a1812fd | }; |
7699d7ec | |
b017a4d2 | impl::impl (const dual_control_configuration &configuration) : conversations_ (configuration.conversations), validator_ (configuration.validator), logger_ (configuration.logger) {} |
caf7db60 | |
a71244c0 | int impl::setcred (const pam_request &request) |
cdf7fd74 | { |
4a1812fd | return PAM_SUCCESS; |
9404cc1a | } |
df73f11d | |
a71244c0 | int impl::authenticate (const pam_request &request) |
cdf7fd74 | { |
caf7db60 | |
8a15acc6 | conversation_result conversation = conversations_.initiate_conversation(); |
47f9faed | std::string user_name = conversation.user_name(); std::string token = conversation.token(); |
caf7db60 | |
b017a4d2 | int auth_result = validator_.validate (user_name, token) ? PAM_SUCCESS : PAM_AUTH_ERR; |
47f9faed | |
b017a4d2 | logger_.log (auth_result, user_name, token); |
47f9faed | return auth_result; |
df73f11d | } |
704ed597 | |
b017a4d2 | dual_control create_dual_control (const dual_control_configuration &configuration) |
cdf7fd74 | { |
a71244c0 | return dual_control (std::shared_ptr<dual_control_ifc> (new impl ( configuration))); |
4a1812fd | } |