git.fiddlerwoaroof.com
dual_control_test.c
dd920112
 #include <security/pam_appl.h>
 #include <security/pam_modules.h>
 #include <stdio.h>
 
7699d7ec
 #include "conversation.h"
 #include "token.h"
 
8c02415f
 
7699d7ec
 const char *token_to_return = "";
8c02415f
 int validation_to_return = 0;
 int log_success_invoked = 1;
 int at_least_one_failed_test = 0;
7699d7ec
 pam_handle_t *passed_pam_handle = NULL;
8c02415f
 
 #define reset_vars() \
   validation_to_return = 1; \
   passed_pam_handle = NULL; \
   log_success_invoked = 0;
 
 #define check_result(result, message) \
   if(!(result)) { \
     fprintf(stderr, message); \
     at_least_one_failed_test = 1; \
   }
 
7699d7ec
 const char *ask_for_token(pam_handle_t *pamh) {
     passed_pam_handle = pamh;
     return token_to_return;
 }
 
 int validate_token(const char *token) {
     return validation_to_return;
 }
 
798377c2
 void log_success() {
     log_success_invoked = 1;
b12c1d5d
 }
 
7699d7ec
 int pam_sm_setcred_returns_success() {
9404cc1a
     //given
8c02415f
     reset_vars()
9404cc1a
 
df73f11d
     //when
     int result = pam_sm_setcred(NULL, 0, 0, NULL);
 
     //then
     return result == PAM_SUCCESS;
 }
 
7699d7ec
 int pam_sm_authenticate_success_invokes_log_success() {
b12c1d5d
     // given
8c02415f
     reset_vars()
798377c2
     log_success_invoked = 0;
b12c1d5d
 
     //when
    pam_sm_authenticate(NULL, 0, 0, NULL);
798377c2
    return log_success_invoked;
b12c1d5d
 }
 
7699d7ec
 int succeeds_with_valid_token() {
     //given
8c02415f
     reset_vars()
7699d7ec
 
     //when
     int result = pam_sm_authenticate(NULL, 0, 0, NULL);
 
     //then
     return result == PAM_SUCCESS;
 }
 
 int fails_with_invalid_token() {
     //given
8c02415f
     reset_vars()
7699d7ec
     validation_to_return = 0;
 
     //when
     int result = pam_sm_authenticate(NULL, 0, 0, NULL);
 
     //then
     return result == PAM_AUTH_ERR;
 }
b12c1d5d
 
dd920112
 int main(int argc, char* argv[]) {
8c02415f
     check_result(pam_sm_setcred_returns_success(), "set cred failed\n");
     check_result(pam_sm_authenticate_success_invokes_log_success(), "authenticate invokes log_success failed\n");
     check_result(succeeds_with_valid_token(), "succeeds with valid token failed\n");
     check_result(fails_with_invalid_token(), "fails with invalid token failed\n")
9404cc1a
 
8c02415f
     if(at_least_one_failed_test) {
       return 1;
dd920112
     } else {
8c02415f
       fprintf(stderr, "dual_control_test: success!\n");
       return 0;
dd920112
     }
 }