git.fiddlerwoaroof.com
dual_control.cc
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
 }