From: Arran Cudbard-Bell Date: Wed, 24 Oct 2018 17:19:22 +0000 (-0400) Subject: Load the EAP-AKA/EAP-SIM dictionaries and use the correct dictionary roots X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=14e75eaf60bb29bbfc6677696a68ee6de0328447;p=thirdparty%2Ffreeradius-server.git Load the EAP-AKA/EAP-SIM dictionaries and use the correct dictionary roots --- diff --git a/src/modules/rlm_eap/lib/sim/base.c b/src/modules/rlm_eap/lib/sim/base.c index f0c61c3bb21..e38e81e9142 100644 --- a/src/modules/rlm_eap/lib/sim/base.c +++ b/src/modules/rlm_eap/lib/sim/base.c @@ -40,10 +40,10 @@ RCSID("$Id$") static int instance_count = 0; -static fr_dict_t *dict_freeradius; -static fr_dict_t *dict_radius; -static fr_dict_t *dict_eap_sim; -static fr_dict_t *dict_eap_aka; +fr_dict_t *dict_freeradius; +fr_dict_t *dict_radius; +fr_dict_t *dict_eap_sim; +fr_dict_t *dict_eap_aka; extern fr_dict_autoload_t libfreeradius_sim_dict[]; fr_dict_autoload_t libfreeradius_sim_dict[] = { @@ -58,11 +58,9 @@ fr_dict_autoload_t libfreeradius_sim_dict[] = { fr_dict_attr_t const *attr_eap_aka_ak; fr_dict_attr_t const *attr_eap_aka_ck; fr_dict_attr_t const *attr_eap_aka_ik; -fr_dict_attr_t const *attr_eap_aka_root; fr_dict_attr_t const *attr_eap_aka_subtype; fr_dict_attr_t const *attr_eap_aka_xres; fr_dict_attr_t const *attr_eap_sim_kc; -fr_dict_attr_t const *attr_eap_sim_root; fr_dict_attr_t const *attr_eap_sim_sres; fr_dict_attr_t const *attr_eap_sim_subtype; fr_dict_attr_t const *attr_sim_amf; @@ -100,7 +98,6 @@ fr_dict_attr_autoload_t libfreeradius_sim_dict_attr[] = { { .out = &attr_eap_aka_padding, .name = "EAP-AKA-Padding", .type = FR_TYPE_OCTETS, .dict = &dict_eap_aka }, { .out = &attr_eap_aka_rand, .name = "EAP-AKA-RAND", .type = FR_TYPE_OCTETS, .dict = &dict_eap_aka }, { .out = &attr_eap_aka_res, .name = "EAP-AKA-RES", .type = FR_TYPE_OCTETS, .dict = &dict_eap_aka }, - { .out = &attr_eap_aka_root, .name = "EAP-AKA-Root", .type = FR_TYPE_TLV, .dict = &dict_eap_aka }, { .out = &attr_eap_aka_subtype, .name = "EAP-AKA-Subtype", .type = FR_TYPE_UINT32, .dict = &dict_eap_aka }, { .out = &attr_eap_aka_xres, .name = "EAP-AKA-XRES", .type = FR_TYPE_OCTETS, .dict = &dict_eap_aka }, @@ -110,7 +107,6 @@ fr_dict_attr_autoload_t libfreeradius_sim_dict_attr[] = { { .out = &attr_eap_sim_mac, .name = "EAP-SIM-MAC", .type = FR_TYPE_OCTETS, .dict = &dict_eap_sim }, { .out = &attr_eap_sim_padding, .name = "EAP-SIM-Padding", .type = FR_TYPE_OCTETS, .dict = &dict_eap_sim }, { .out = &attr_eap_sim_rand, .name = "EAP-SIM-RAND", .type = FR_TYPE_OCTETS, .dict = &dict_eap_sim }, - { .out = &attr_eap_sim_root, .name = "EAP-SIM-Root", .type = FR_TYPE_TLV, .dict = &dict_eap_sim }, { .out = &attr_eap_sim_sres, .name = "EAP-SIM-SRES", .type = FR_TYPE_OCTETS, .dict = &dict_eap_sim }, { .out = &attr_eap_sim_subtype, .name = "EAP-SIM-Subtype", .type = FR_TYPE_UINT32, .dict = &dict_eap_sim }, diff --git a/src/modules/rlm_eap/lib/sim/decode.c b/src/modules/rlm_eap/lib/sim/decode.c index 290f019bba4..40df4328f5e 100644 --- a/src/modules/rlm_eap/lib/sim/decode.c +++ b/src/modules/rlm_eap/lib/sim/decode.c @@ -1063,7 +1063,7 @@ static int decode_test_ctx_sim(void **out, TALLOC_CTX *ctx) test_ctx = test_ctx_init(ctx, k_encr, sizeof(k_encr)); if (!test_ctx) return -1; - test_ctx->root = attr_eap_sim_root; + test_ctx->root = fr_dict_root(dict_eap_sim); test_ctx->have_iv = true; /* Ensures IV is all zeros */ *out = test_ctx; @@ -1081,7 +1081,7 @@ static int decode_test_ctx_aka(void **out, TALLOC_CTX *ctx) test_ctx = test_ctx_init(ctx, k_encr, sizeof(k_encr)); if (!test_ctx) return -1; - test_ctx->root = attr_eap_aka_root; + test_ctx->root = fr_dict_root(dict_eap_aka); test_ctx->have_iv = true; /* Ensures IV is all zeros */ *out = test_ctx; @@ -1098,7 +1098,7 @@ static int decode_test_ctx_sim_rfc4186(void **out, TALLOC_CTX *ctx) test_ctx = test_ctx_init(ctx, k_encr, sizeof(k_encr)); if (!test_ctx) return -1; - test_ctx->root = attr_eap_sim_root; + test_ctx->root = fr_dict_root(dict_eap_sim); *out = test_ctx; diff --git a/src/modules/rlm_eap/lib/sim/encode.c b/src/modules/rlm_eap/lib/sim/encode.c index 32bef018c84..83928f003d9 100644 --- a/src/modules/rlm_eap/lib/sim/encode.c +++ b/src/modules/rlm_eap/lib/sim/encode.c @@ -1116,7 +1116,7 @@ static int encode_test_ctx_sim(void **out, TALLOC_CTX *ctx) test_ctx = test_ctx_init(ctx, k_encr, sizeof(k_encr)); if (!test_ctx) return -1; - test_ctx->root = attr_eap_sim_root; + test_ctx->root = fr_dict_root(dict_eap_sim); test_ctx->iv_included = true; /* Ensures IV is all zeros */ *out = test_ctx; @@ -1133,7 +1133,7 @@ static int encode_test_ctx_aka(void **out, TALLOC_CTX *ctx) test_ctx = test_ctx_init(ctx, k_encr, sizeof(k_encr)); if (!test_ctx) return -1; - test_ctx->root = attr_eap_aka_root; + test_ctx->root = fr_dict_root(dict_eap_aka); test_ctx->iv_included = true; /* Ensures IV is all zeros */ *out = test_ctx; @@ -1150,7 +1150,7 @@ static int encode_test_ctx_sim_rfc4186(void **out, TALLOC_CTX *ctx) test_ctx = test_ctx_init(ctx, k_encr, sizeof(k_encr)); if (!test_ctx) return -1; - test_ctx->root = attr_eap_sim_root; + test_ctx->root = fr_dict_root(dict_eap_sim); *out = test_ctx; diff --git a/src/modules/rlm_eap/lib/sim/sim_attrs.h b/src/modules/rlm_eap/lib/sim/sim_attrs.h index 85181949311..0c43bee2596 100644 --- a/src/modules/rlm_eap/lib/sim/sim_attrs.h +++ b/src/modules/rlm_eap/lib/sim/sim_attrs.h @@ -54,14 +54,17 @@ DICT_SANITY_CHECK(MAC); DICT_SANITY_CHECK(SUBTYPE); #define FR_SIM_SUBTYPE (FR_EAP_SIM_SUBTYPE & FR_EAP_AKA_SUBTYPE) +extern fr_dict_t *dict_freeradius; +extern fr_dict_t *dict_radius; +extern fr_dict_t *dict_eap_sim; +extern fr_dict_t *dict_eap_aka; + extern fr_dict_attr_t const *attr_eap_aka_ak; extern fr_dict_attr_t const *attr_eap_aka_ck; extern fr_dict_attr_t const *attr_eap_aka_ik; -extern fr_dict_attr_t const *attr_eap_aka_root; extern fr_dict_attr_t const *attr_eap_aka_subtype; extern fr_dict_attr_t const *attr_eap_aka_xres; extern fr_dict_attr_t const *attr_eap_sim_kc; -extern fr_dict_attr_t const *attr_eap_sim_root; extern fr_dict_attr_t const *attr_eap_sim_sres; extern fr_dict_attr_t const *attr_eap_sim_subtype; extern fr_dict_attr_t const *attr_sim_amf; diff --git a/src/modules/rlm_eap/types/rlm_eap_aka/rlm_eap_aka.c b/src/modules/rlm_eap/types/rlm_eap_aka/rlm_eap_aka.c index 62ce4a310f0..c4a865b8389 100644 --- a/src/modules/rlm_eap/types/rlm_eap_aka/rlm_eap_aka.c +++ b/src/modules/rlm_eap/types/rlm_eap_aka/rlm_eap_aka.c @@ -70,7 +70,6 @@ fr_dict_autoload_t rlm_eap_aka_dict[] = { { NULL } }; -static fr_dict_attr_t const *attr_eap_aka_root; static fr_dict_attr_t const *attr_eap_aka_subtype; static fr_dict_attr_t const *attr_sim_amf; @@ -96,7 +95,6 @@ static fr_dict_attr_t const *attr_eap_aka_result_ind; extern fr_dict_attr_autoload_t rlm_eap_aka_dict_attr[]; fr_dict_attr_autoload_t rlm_eap_aka_dict_attr[] = { - { .out = &attr_eap_aka_root, .name = "EAP-AKA-Root", .type = FR_TYPE_TLV, .dict = &dict_freeradius }, { .out = &attr_eap_aka_subtype, .name = "EAP-AKA-Subtype", .type = FR_TYPE_UINT32, .dict = &dict_freeradius }, { .out = &attr_sim_amf, .name = "SIM-AMF", .type = FR_TYPE_OCTETS, .dict = &dict_freeradius }, @@ -131,7 +129,7 @@ static int eap_aka_compose(eap_session_t *eap_session) REQUEST *request = eap_session->request; ssize_t ret; fr_sim_encode_ctx_t encoder_ctx = { - .root = attr_eap_aka_root, + .root = fr_dict_root(dict_eap_aka), .keys = &eap_aka_session->keys, .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -148,7 +146,7 @@ static int eap_aka_compose(eap_session_t *eap_session) fr_cursor_init(&to_encode, &head); while ((vp = fr_cursor_current(&cursor))) { - if (!fr_dict_parent_common(attr_eap_aka_root, vp->da, true)) { + if (!fr_dict_parent_common(encoder_ctx.root, vp->da, true)) { fr_cursor_next(&cursor); continue; } @@ -876,7 +874,7 @@ static rlm_rcode_t mod_process(UNUSED void *instance, eap_session_t *eap_session fr_sim_decode_ctx_t ctx = { .keys = &eap_aka_session->keys, - .root = attr_eap_aka_root + .root = fr_dict_root(dict_eap_aka) }; VALUE_PAIR *vp, *vps, *subtype_vp; fr_cursor_t cursor; diff --git a/src/modules/rlm_eap/types/rlm_eap_sim/rlm_eap_sim.c b/src/modules/rlm_eap/types/rlm_eap_sim/rlm_eap_sim.c index e3a9afa7640..5fb9a722b92 100644 --- a/src/modules/rlm_eap/types/rlm_eap_sim/rlm_eap_sim.c +++ b/src/modules/rlm_eap/types/rlm_eap_sim/rlm_eap_sim.c @@ -70,7 +70,6 @@ fr_dict_autoload_t rlm_eap_sim_dict[] = { }; static fr_dict_attr_t const *attr_eap_sim_mk; -static fr_dict_attr_t const *attr_eap_sim_root; static fr_dict_attr_t const *attr_eap_sim_subtype; static fr_dict_attr_t const *attr_ms_mppe_send_key; @@ -95,7 +94,6 @@ static fr_dict_attr_t const *attr_eap_sim_version_list; extern fr_dict_attr_autoload_t rlm_eap_sim_dict_attr[]; fr_dict_attr_autoload_t rlm_eap_sim_dict_attr[] = { { .out = &attr_eap_sim_mk, .name = "EAP-SIM-MK", .type = FR_TYPE_OCTETS, .dict = &dict_freeradius }, - { .out = &attr_eap_sim_root, .name = "EAP-SIM-Root", .type = FR_TYPE_TLV, .dict = &dict_freeradius }, { .out = &attr_eap_sim_subtype, .name = "EAP-SIM-Subtype", .type = FR_TYPE_UINT32, .dict = &dict_freeradius }, { .out = &attr_ms_mppe_send_key, .name = "MS-MPPE-Send-Key", .type = FR_TYPE_OCTETS, .dict = &dict_radius }, @@ -130,7 +128,7 @@ static int eap_sim_compose(eap_session_t *eap_session, uint8_t const *hmac_extra VALUE_PAIR *head = NULL, *vp; REQUEST *request = eap_session->request; fr_sim_encode_ctx_t encoder_ctx = { - .root = attr_eap_sim_root, + .root = fr_dict_root(dict_eap_sim), .keys = &eap_sim_session->keys, .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -152,7 +150,7 @@ static int eap_sim_compose(eap_session_t *eap_session, uint8_t const *hmac_extra fr_cursor_init(&to_encode, &head); while ((vp = fr_cursor_current(&cursor))) { - if (!fr_dict_parent_common(attr_eap_sim_root, vp->da, true)) { + if (!fr_dict_parent_common(fr_dict_root(dict_eap_sim), vp->da, true)) { fr_cursor_next(&cursor); continue; } @@ -871,7 +869,7 @@ static rlm_rcode_t mod_process(UNUSED void *instance, eap_session_t *eap_session eap_sim_session_t *eap_sim_session = talloc_get_type_abort(eap_session->opaque, eap_sim_session_t); fr_sim_decode_ctx_t ctx = { .keys = &eap_sim_session->keys, - .root = attr_eap_sim_root + .root = fr_dict_root(dict_eap_sim) }; VALUE_PAIR *subtype_vp, *from_peer, *vp; fr_cursor_t cursor; @@ -880,8 +878,6 @@ static rlm_rcode_t mod_process(UNUSED void *instance, eap_session_t *eap_session int ret; - rad_assert(attr_eap_sim_root); - /* * VPS is the data from the client */ diff --git a/src/tests/unit/eap_aka_decode.txt b/src/tests/unit/eap_aka_decode.txt index 8e6fd27127d..e1b110989d5 100644 --- a/src/tests/unit/eap_aka_decode.txt +++ b/src/tests/unit/eap_aka_decode.txt @@ -7,6 +7,7 @@ need-feature tls # Load the EAP-SIM module load eap-sim +load-dictionary eap-aka # # Encode some AKA attributes with special formats diff --git a/src/tests/unit/eap_aka_encode.txt b/src/tests/unit/eap_aka_encode.txt index bebf366d7af..5e4b1ce2b18 100644 --- a/src/tests/unit/eap_aka_encode.txt +++ b/src/tests/unit/eap_aka_encode.txt @@ -7,6 +7,7 @@ need-feature tls # Load the EAP-SIM module load eap-sim +load-dictionary eap-aka # # Encode some AKA attributes with special formats diff --git a/src/tests/unit/eap_aka_error.txt b/src/tests/unit/eap_aka_error.txt index 5ecd5a752c8..0af6177ba0e 100644 --- a/src/tests/unit/eap_aka_error.txt +++ b/src/tests/unit/eap_aka_error.txt @@ -9,6 +9,7 @@ need-feature tls # Load the EAP-SIM module load eap-sim +load-dictionary eap-aka # AKA_RES with invalid length (too small) decode-pair.aka_tp_decode 04 03 aa bb aa aa aa aa bb bb bb bb diff --git a/src/tests/unit/eap_sim_decode.txt b/src/tests/unit/eap_sim_decode.txt index a54e31b462d..f2d1946dd97 100644 --- a/src/tests/unit/eap_sim_decode.txt +++ b/src/tests/unit/eap_sim_decode.txt @@ -9,6 +9,7 @@ need-feature tls # Load the EAP-SIM module load eap-sim +load-dictionary eap-sim # Boolean attribute decode-pair.sim_tp_decode 0d 01 00 00 diff --git a/src/tests/unit/eap_sim_encode.txt b/src/tests/unit/eap_sim_encode.txt index 5c58e02eb9b..41133b91eb0 100644 --- a/src/tests/unit/eap_sim_encode.txt +++ b/src/tests/unit/eap_sim_encode.txt @@ -7,6 +7,7 @@ need-feature tls # Load the EAP-SIM module load eap-sim +load-dictionary eap-sim # Boolean attribute encode-pair.sim_tp_encode EAP-SIM-Any-ID-Req = yes diff --git a/src/tests/unit/eap_sim_error.txt b/src/tests/unit/eap_sim_error.txt index f6cee0a2214..b3cf46e7015 100644 --- a/src/tests/unit/eap_sim_error.txt +++ b/src/tests/unit/eap_sim_error.txt @@ -9,6 +9,7 @@ need-feature tls # Load the EAP-SIM module load eap-sim +load-dictionary eap-sim # Zero length attribute decode-pair.sim_tp_decode 0d 00