]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Load the EAP-AKA/EAP-SIM dictionaries and use the correct dictionary roots
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 24 Oct 2018 17:19:22 +0000 (13:19 -0400)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 10 Dec 2018 16:20:32 +0000 (11:20 -0500)
12 files changed:
src/modules/rlm_eap/lib/sim/base.c
src/modules/rlm_eap/lib/sim/decode.c
src/modules/rlm_eap/lib/sim/encode.c
src/modules/rlm_eap/lib/sim/sim_attrs.h
src/modules/rlm_eap/types/rlm_eap_aka/rlm_eap_aka.c
src/modules/rlm_eap/types/rlm_eap_sim/rlm_eap_sim.c
src/tests/unit/eap_aka_decode.txt
src/tests/unit/eap_aka_encode.txt
src/tests/unit/eap_aka_error.txt
src/tests/unit/eap_sim_decode.txt
src/tests/unit/eap_sim_encode.txt
src/tests/unit/eap_sim_error.txt

index f0c61c3bb210301aa20018229ac73027774e9490..e38e81e91428534479c2414fd12b82e9c987dd9f 100644 (file)
@@ -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 },
 
index 290f019bba420cde50d8f9f9ecc074b54c1df13a..40df4328f5e4612c4c7b60205caf1f9fb56509f7 100644 (file)
@@ -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;
 
index 32bef018c84cd2423e0f8e8d0450b44254f791dd..83928f003d962aae618410c1cf774b10d4f3f5a0 100644 (file)
@@ -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;
 
index 85181949311c101c0004113791ad44e96e2e7326..0c43bee2596d2ffa0cce35d926bf4ba70bf3115e 100644 (file)
@@ -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;
index 62ce4a310f04c19932b434b62e806bd1d4944c27..c4a865b8389d9ee20ec05a7408e5fc62e837c29b 100644 (file)
@@ -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;
index e3a9afa76405e77adea5eba6a9935affc8ff839f..5fb9a722b92e764a921902b6a5ee8cc341c2e63d 100644 (file)
@@ -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
         */
index 8e6fd27127d92d113b937c565e76148372fa1ae2..e1b110989d58fb4b583910cd3b7d0b21307d74ac 100644 (file)
@@ -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
index bebf366d7afb8fa36a54d4f23fccf450ddc3c06e..5e4b1ce2b18ff909a92087891b034f1b8b94beff 100644 (file)
@@ -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
index 5ecd5a752c8fbb20e2ac8ff35ac02a87733c2727..0af6177ba0e0eec3ad0867cff6f774077f7fee4f 100644 (file)
@@ -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
index a54e31b462dd3e68247fc09f8f0e572a2a689a42..f2d1946dd97c87000836a1e9ddd1b5b847083c09 100644 (file)
@@ -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
index 5c58e02eb9bc7e911cf7193ad3e43ac05c18d6e2..41133b91eb0b82b5c09710d23185b345eec4caa5 100644 (file)
@@ -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
index f6cee0a2214eb28f57ab277ba9334247c44f2803..b3cf46e7015f29b07958a8b3c49b505cf1cd6df7 100644 (file)
@@ -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