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:
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
 }