git.fiddlerwoaroof.com
dual_control.h
bcf6f3d1
 /* PAM handlers class interface. The methods on the dual control class
  * correspond directly to the specified PAM handler entrypoints.
  *
  * See "dual_control_integrate.cc"
  */
 
e56d3c56
 #ifndef _DUAL_CONTROL_H
 #define _DUAL_CONTROL_H
 
 #include <memory>
 
a71244c0
 #include "request.h"
caf7db60
 #include "validator.h"
 #include "conversation.h"
47f9faed
 #include "logger.h"
caf7db60
 
a71244c0
 struct dual_control_configuration {
     validator validator;
f46fb7b6
     conversation conversation;
a71244c0
     logger logger;
 };
 
cdf7fd74
 class dual_control_ifc
 {
 public:
     virtual ~dual_control_ifc() {}
a71244c0
     virtual int authenticate (const pam_request &request);
     virtual int setcred (const pam_request &request);
e56d3c56
 };
4a1812fd
 
a71244c0
 class dual_control : public dual_control_ifc
 {
 private:
     std::shared_ptr<dual_control_ifc> delegate_;
 public:
     dual_control (std::shared_ptr<dual_control_ifc> delegate) : delegate_
         (delegate) {}
     dual_control() : dual_control (std::shared_ptr<dual_control_ifc>
                                        (new dual_control_ifc)) {}
     int authenticate (const pam_request &request)
     {
         return delegate_->authenticate (request);
     }
     int setcred (const pam_request &request)
     {
         return delegate_->setcred (request);
     }
 
caf7db60
 };
a71244c0
 
b017a4d2
 dual_control create_dual_control (const dual_control_configuration
                                   &configuration);
caf7db60
 
e56d3c56
 #endif