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 |
}
}
|