git.fiddlerwoaroof.com
dual_control.cc
7684972a
 /* Copyright (C) CJ Affiliate
  *
  * You may use, distribute and modify this code under  the
  * terms of the  GNU General Public License  version 2  or
  * later.
  *
  * You should have received a copy of the license with this
  * file. If not, you will find a copy in the "LICENSE" file
  * at https://github.com/cjdev/dual-control.
  */
 
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"
a9690b1d
 #include "logger.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;
 }
 
58902985
 namespace {
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
 }
58902985
 }
 dual_control dual_control::create (const dual_control_configuration
b017a4d2
                                   &configuration)
cdf7fd74
 {
a71244c0
     return dual_control (std::shared_ptr<dual_control_ifc> (new impl (
                              configuration)));
4a1812fd
 }