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: |
f46fb7b6 | conversation conversation_; |
cdf7fd74 | 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) : |
f46fb7b6 | conversation_ (configuration.conversation), |
b017a4d2 | 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 | { |
f46fb7b6 | conversation_result input (conversation_.initiate (request)); |
caf7db60 | |
f46fb7b6 | int auth_result = validator_.validate (input.user_name, input.token) ? PAM_SUCCESS : PAM_AUTH_ERR; |
caf7db60 | |
f46fb7b6 | logger_.log (auth_result, input.user_name, input.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 | } |