/* 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. */ /* PAM native handler entrypoints. Keep these dumb so the logic can * be tested. */ #include #include #include #include #include "conversation.h" #include "dual_control.h" #include "generator.h" #include "logger.h" #include "request.h" #include "session.h" #include "sys_fstream.h" #include "sys_pam.h" #include "sys_pwd.h" #include "sys_syslog.h" #include "sys_unistd.h" #include "token.h" #include "user.h" #include "validator.h" namespace { dual_control initialize() { dual_control_configuration configuration; pwd pwd (pwd::create()); unistd unistd (unistd::create()); directory directory (directory::create (unistd, pwd)); fstreams fstreams (fstreams::create()); sys_time time (sys_time::get()); int code_digits = 6; totp_generator generator = totp_generator (time, code_digits); random_source rand (random_source::create (fstreams)); tokens tokens (tokens::create (fstreams, generator, rand)); validator validator (validator::create (directory, tokens, unistd)); pam pam (pam::create()); conversation conversation (conversation::create (pam)); sys_syslog sys_syslog (sys_syslog::create()); logger logger (logger::create (sys_syslog)); sessions sessions (sessions::create (pam)); configuration.validator = validator; configuration.logger = logger; configuration.conversation = conversation; configuration.sessions = sessions; return dual_control::create (configuration); } dual_control dc = initialize(); } PAM_EXTERN int pam_sm_authenticate (pam_handle_t *pamh, int flags, int argc, const char **argv) { return dc.authenticate (pam_request (pamh, flags, argc, argv)); } PAM_EXTERN int pam_sm_setcred (pam_handle_t *pamh, int flags, int argc, const char **argv) { return dc.setcred (pam_request ( pamh, flags, argc, argv)); }