#include <security/pam_appl.h>
#include <security/pam_modules.h>
#include <stdio.h>
#include "conversation.h"
#include "token.h"
#include "testutil.h"
const char *token_to_return = "";
int validation_to_return = 0;
int log_success_invoked = 1;
int at_least_one_failed_test = 0;
pam_handle_t *passed_pam_handle = NULL;
#define reset_vars() \
validation_to_return = 1; \
passed_pam_handle = NULL; \
log_success_invoked = 0
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;
}
void log_success() {
log_success_invoked = 1;
}
int pam_sm_setcred_returns_success() {
//given
//when
int result = pam_sm_setcred(NULL, 0, 0, NULL);
//then
return result == PAM_SUCCESS;
}
int pam_sm_authenticate_success_invokes_log_success() {
// given
validation_to_return = 1;
log_success_invoked = 0;
//when
pam_sm_authenticate(NULL, 0, 0, NULL);
return log_success_invoked;
}
int succeeds_with_valid_token() {
//given
//when
int result = pam_sm_authenticate(NULL, 0, 0, NULL);
//then
return result == PAM_SUCCESS;
}
int fails_with_invalid_token() {
//given
validation_to_return = 0;
//when
int result = pam_sm_authenticate(NULL, 0, 0, NULL);
//then
return result == PAM_AUTH_ERR;
}
int runtests() {
test(pam_sm_setcred_returns_success);
test(pam_sm_authenticate_success_invokes_log_success);
test(succeeds_with_valid_token);
test(fails_with_invalid_token);
succeed();
}
int main(int argc, char* argv[]) {
return !runtests();
}