Harald Welte | e72cf55 | 2016-04-28 07:18:49 +0200 | [diff] [blame] | 1 | #include <string.h> |
| 2 | |
| 3 | #include <osmocom/core/utils.h> |
| 4 | #include <osmocom/core/application.h> |
| 5 | |
| 6 | #include "db.h" |
| 7 | #include "rand.h" |
| 8 | #include "logging.h" |
| 9 | |
| 10 | static struct db_context *g_dbc; |
| 11 | |
| 12 | static int test(const char *imsi) |
| 13 | { |
| 14 | struct osmo_auth_vector vec[3]; |
| 15 | int rc, i; |
| 16 | |
| 17 | /* initialize all vectors with a known token pattern */ |
| 18 | memset(vec, 0x55, sizeof(vec)); |
| 19 | for (i = 0; i < ARRAY_SIZE(vec); i++) |
| 20 | vec[i].res_len = 0; |
| 21 | |
| 22 | rc = db_get_auc(g_dbc, imsi, vec, ARRAY_SIZE(vec), NULL, NULL); |
| 23 | if (rc <= 0) { |
| 24 | LOGP(DMAIN, LOGL_ERROR, "Cannot obtain auth tuples for '%s'\n", imsi); |
| 25 | return rc; |
| 26 | } |
| 27 | LOGP(DMAIN, LOGL_INFO, "Obtained %u tuples for subscriber IMSI %s\n", |
| 28 | rc, imsi); |
| 29 | |
| 30 | for (i = 0; i < rc; i++) { |
| 31 | struct osmo_auth_vector *v = vec + i; |
| 32 | LOGP(DMAIN, LOGL_DEBUG, "Tuple %u, auth_types=0x%x\n", i, v->auth_types); |
| 33 | LOGP(DMAIN, LOGL_DEBUG, "RAND=%s\n", osmo_hexdump_nospc(v->rand, sizeof(v->rand))); |
| 34 | LOGP(DMAIN, LOGL_DEBUG, "AUTN=%s\n", osmo_hexdump_nospc(v->autn, sizeof(v->autn))); |
| 35 | LOGP(DMAIN, LOGL_DEBUG, "CK=%s\n", osmo_hexdump_nospc(v->ck, sizeof(v->ck))); |
| 36 | LOGP(DMAIN, LOGL_DEBUG, "IK=%s\n", osmo_hexdump_nospc(v->ik, sizeof(v->ik))); |
| 37 | LOGP(DMAIN, LOGL_DEBUG, "RES=%s\n", osmo_hexdump_nospc(v->res, v->res_len)); |
| 38 | LOGP(DMAIN, LOGL_DEBUG, "Kc=%s\n", osmo_hexdump_nospc(v->kc, sizeof(v->kc))); |
| 39 | LOGP(DMAIN, LOGL_DEBUG, "SRES=%s\n", osmo_hexdump_nospc(v->sres, sizeof(v->sres))); |
| 40 | } |
| 41 | |
| 42 | return rc; |
| 43 | } |
| 44 | |
| 45 | int main(int argc, char **argv) |
| 46 | { |
| 47 | int rc; |
| 48 | |
| 49 | rc = osmo_init_logging(&hlr_log_info); |
| 50 | if (rc < 0) { |
| 51 | fprintf(stderr, "Error initializing logging\n"); |
| 52 | exit(1); |
| 53 | } |
| 54 | LOGP(DMAIN, LOGL_NOTICE, "hlr starting\n"); |
| 55 | |
| 56 | rc = rand_init(); |
| 57 | if (rc < 0) { |
| 58 | LOGP(DMAIN, LOGL_ERROR, "Error initializing random source\n"); |
| 59 | exit(1); |
| 60 | } |
| 61 | |
| 62 | g_dbc = db_open(NULL, "hlr.db"); |
| 63 | if (!g_dbc) { |
| 64 | LOGP(DMAIN, LOGL_ERROR, "Error opening database\n"); |
| 65 | exit(1); |
| 66 | } |
| 67 | |
| 68 | /* non-existing subscriber */ |
| 69 | rc = test("901990123456789"); |
| 70 | /* 2G only AUC data (COMP128v1 / MILENAGE) */ |
| 71 | rc = test("901990000000001"); |
| 72 | /* 2G + 3G AUC data (COMP128v1 / MILENAGE) */ |
| 73 | rc = test("901990000000002"); |
| 74 | /* 3G AUC data (MILENAGE) */ |
| 75 | rc = test("901990000000003"); |
| 76 | |
| 77 | LOGP(DMAIN, LOGL_NOTICE, "Exiting\n"); |
| 78 | |
| 79 | db_close(g_dbc); |
| 80 | |
| 81 | log_fini(); |
| 82 | |
| 83 | exit(0); |
| 84 | } |