120 lines
3.3 KiB
C
120 lines
3.3 KiB
C
#include <stdbool.h>
|
|
|
|
#include <osmocom/core/application.h>
|
|
#include <osmocom/core/logging.h>
|
|
|
|
#include <openbsc/debug.h>
|
|
#include <openbsc/gsm_data.h>
|
|
#include <openbsc/gsm_subscriber.h>
|
|
#include <openbsc/auth.h>
|
|
|
|
/* override, requires '-Wl,--wrap=db_get_authinfo_for_subscr' */
|
|
int __real_db_get_authinfo_for_subscr(struct gsm_auth_info *ainfo,
|
|
struct gsm_subscriber *subscr);
|
|
|
|
int test_get_authinfo_rc = 0;
|
|
struct gsm_auth_info test_auth_info = {0};
|
|
struct gsm_auth_info default_auth_info = {
|
|
.auth_algo = AUTH_ALGO_COMP128v1,
|
|
.a3a8_ki_len = 16,
|
|
.a3a8_ki = { 0 }
|
|
};
|
|
|
|
int __wrap_db_get_authinfo_for_subscr(struct gsm_auth_info *ainfo,
|
|
struct gsm_subscriber *subscr)
|
|
{
|
|
*ainfo = test_auth_info;
|
|
printf("wrapped: db_get_authinfo_for_subscr(): rc = %d\n", test_get_authinfo_rc);
|
|
return test_get_authinfo_rc;
|
|
}
|
|
|
|
/* override, requires '-Wl,--wrap=db_get_lastauthtuple_for_subscr' */
|
|
int __real_db_get_lastauthtuple_for_subscr(struct gsm_auth_tuple *atuple,
|
|
struct gsm_subscriber *subscr);
|
|
|
|
int test_get_lastauthtuple_rc = 0;
|
|
struct gsm_auth_tuple test_last_auth_tuple = { 0 };
|
|
struct gsm_auth_tuple default_auth_tuple = { 0 };
|
|
|
|
int __wrap_db_get_lastauthtuple_for_subscr(struct gsm_auth_tuple *atuple,
|
|
struct gsm_subscriber *subscr)
|
|
{
|
|
*atuple = test_last_auth_tuple;
|
|
printf("wrapped: db_get_lastauthtuple_for_subscr(): rc = %d\n", test_get_lastauthtuple_rc);
|
|
return test_get_lastauthtuple_rc;
|
|
}
|
|
|
|
/* override, requires '-Wl,--wrap=db_sync_lastauthtuple_for_subscr' */
|
|
int __real_db_sync_lastauthtuple_for_subscr(struct gsm_auth_tuple *atuple,
|
|
struct gsm_subscriber *subscr);
|
|
int test_sync_lastauthtuple_rc = 0;
|
|
int __wrap_db_sync_lastauthtuple_for_subscr(struct gsm_auth_tuple *atuple,
|
|
struct gsm_subscriber *subscr)
|
|
{
|
|
test_last_auth_tuple = *atuple;
|
|
printf("wrapped: db_sync_lastauthtuple_for_subscr(): rc = %d\n", test_sync_lastauthtuple_rc);
|
|
return test_sync_lastauthtuple_rc;
|
|
}
|
|
|
|
int auth_get_tuple_for_subscr_verbose(struct gsm_auth_tuple *atuple,
|
|
struct gsm_subscriber *subscr,
|
|
int key_seq)
|
|
{
|
|
int auth_action;
|
|
auth_action = auth_get_tuple_for_subscr(atuple, subscr, key_seq);
|
|
printf("auth_get_tuple_for_subscr(key_seq=%d) --> auth_action == %s\n",
|
|
key_seq, auth_action_str(auth_action));
|
|
return auth_action;
|
|
}
|
|
|
|
/* override libssl RAND_bytes() to get testable crypto results */
|
|
int RAND_bytes(uint8_t *rand, int len)
|
|
{
|
|
memset(rand, 23, len);
|
|
return 1;
|
|
}
|
|
|
|
static void test_error()
|
|
{
|
|
int auth_action;
|
|
|
|
struct gsm_auth_tuple atuple = {0};
|
|
struct gsm_subscriber subscr = {0};
|
|
int key_seq = 0;
|
|
|
|
printf("\n* test_error()\n");
|
|
|
|
/* any error (except -ENOENT) */
|
|
test_get_authinfo_rc = -EIO;
|
|
auth_action = auth_get_tuple_for_subscr_verbose(&atuple, &subscr,
|
|
key_seq);
|
|
OSMO_ASSERT(auth_action == -1);
|
|
}
|
|
|
|
static void test_auth_not_avail()
|
|
{
|
|
int auth_action;
|
|
|
|
struct gsm_auth_tuple atuple = {0};
|
|
struct gsm_subscriber subscr = {0};
|
|
int key_seq = 0;
|
|
|
|
printf("\n* test_auth_not_avail()\n");
|
|
|
|
/* no entry */
|
|
test_get_authinfo_rc = -ENOENT;
|
|
auth_action = auth_get_tuple_for_subscr_verbose(&atuple, &subscr,
|
|
key_seq);
|
|
OSMO_ASSERT(auth_action == AUTH_NOT_AVAIL);
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
osmo_init_logging(&log_info);
|
|
log_set_log_level(osmo_stderr_target, LOGL_INFO);
|
|
|
|
test_error();
|
|
test_auth_not_avail();
|
|
return 0;
|
|
}
|