]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Autoload sigtran dictionaries and attributes
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sun, 16 Dec 2018 01:39:45 +0000 (20:39 -0500)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sun, 16 Dec 2018 01:39:45 +0000 (20:39 -0500)
src/modules/rlm_sigtran/attrs.h [new file with mode: 0644]
src/modules/rlm_sigtran/client.c
src/modules/rlm_sigtran/rlm_sigtran.c

diff --git a/src/modules/rlm_sigtran/attrs.h b/src/modules/rlm_sigtran/attrs.h
new file mode 100644 (file)
index 0000000..c08e817
--- /dev/null
@@ -0,0 +1,40 @@
+#pragma once
+/*
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * $Id$
+ * @file rlm_sigtran/attrs.h
+ * @brief Sigtran attribute declarations
+ *
+ * @copyright 2018 Arran Cudbard-Bell (a.cudbardb@freeradius.org)
+ */
+RCSIDH(rlm_sigtran_attrs_h, "$Id$")
+
+#include <freeradius-devel/util/dict.h>
+
+extern fr_dict_t *dict_eap_sim;
+extern fr_dict_t *dict_eap_aka;
+
+extern fr_dict_attr_t const *attr_eap_aka_autn;
+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_rand;
+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_sres;
+extern fr_dict_attr_t const *attr_eap_aka_rand;
index 2e2d9d25ce023561f1e8e163f244a0357fb6f6ca..39c81570af57ffcfa91cbad9fc95fd5e7bf9fa35 100644 (file)
@@ -32,6 +32,8 @@
 #include <freeradius-devel/protocol/eap/sim/dictionary.h>
 #include <freeradius-devel/unlang/base.h>
 #include <freeradius-devel/server/module.h>
+
+#include "attrs.h"
 #include "sigtran.h"
 
 static pthread_mutex_t ctrl_pipe_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -305,89 +307,67 @@ static rlm_rcode_t sigtran_client_map_resume(REQUEST *request, UNUSED void *inst
                for (vec = res->vector; vec; vec = vec->next) {
                        switch (vec->type) {
                        case SIGTRAN_VECTOR_TYPE_SIM_TRIPLETS:
-                       {
-                               fr_dict_attr_t const *root;
-
                                rad_assert(vec->sim.rand);
                                rad_assert(vec->sim.sres);
                                rad_assert(vec->sim.kc);
 
-                               root = fr_dict_attr_child_by_num(fr_dict_root(fr_dict_internal), FR_EAP_SIM_ROOT);
-                               if (!root) {
-                                       REDEBUG("Can't find dict root for EAP-SIM");
-                               error:
-                                       talloc_free(txn);
-                                       return RLM_MODULE_FAIL;
-                               }
-
                                RDEBUG2("SIM auth vector %i", i);
                                RINDENT();
-                               vp = fr_pair_afrom_child_num(request, root, FR_EAP_SIM_RAND);
+                               vp = fr_pair_afrom_da(request, root, attr_eap_sim_rand);
                                fr_pair_value_memsteal(vp, vec->sim.rand);
                                RDEBUG2("&control:%pP", vp);
                                fr_cursor_append(&cursor, vp);
 
-                               vp = fr_pair_afrom_child_num(request, root, FR_EAP_SIM_SRES);
+                               vp = fr_pair_afrom_da(request, root, attr_eap_sim_sres);
                                fr_pair_value_memsteal(vp, vec->sim.sres);
                                RDEBUG2("&control:%pP", vp);
                                fr_cursor_append(&cursor, vp);
 
-                               vp = fr_pair_afrom_child_num(request, root, FR_EAP_SIM_KC);
+                               vp = fr_pair_afrom_da(request, root, attr_eap_sim_kc);
                                fr_pair_value_memsteal(vp, vec->sim.kc);
                                RDEBUG2("&control:%pP", vp);
                                fr_cursor_append(&cursor, vp);
                                REXDENT();
 
                                i++;
-                       }
                                break;
 
                        case SIGTRAN_VECTOR_TYPE_UMTS_QUINTUPLETS:
-                       {
-                               fr_dict_attr_t const *root;
-
                                rad_assert(vec->umts.rand);
                                rad_assert(vec->umts.xres);
                                rad_assert(vec->umts.ck);
                                rad_assert(vec->umts.ik);
                                rad_assert(vec->umts.authn);
 
-                               root = fr_dict_attr_child_by_num(fr_dict_root(fr_dict_internal), FR_EAP_AKA_ROOT);
-                               if (!root) {
-                                       REDEBUG("Can't find dict root for EAP-AKA");
-                                       goto error;
-                               }
-
                                RDEBUG2("UMTS auth vector %i", i);
                                RINDENT();
-                               vp = fr_pair_afrom_child_num(request, root, FR_EAP_AKA_RAND);
+                               vp = fr_pair_afrom_da(request, attr_eap_aka_rand);
                                fr_pair_value_memsteal(vp, vec->umts.rand);
                                RDEBUG2("&control:%pP", vp);
                                fr_cursor_append(&cursor, vp);
 
-                               vp = fr_pair_afrom_child_num(request, root, FR_EAP_AKA_XRES);
+                               vp = fr_pair_afrom_da(request, attr_eap_aka_xres);
                                fr_pair_value_memsteal(vp, vec->umts.xres);
                                RDEBUG2("&control:%pP", vp);
                                fr_cursor_append(&cursor, vp);
 
-                               vp = fr_pair_afrom_child_num(request, root, FR_EAP_AKA_CK);
+                               vp = fr_pair_afrom_da(request, attr_eap_aka_ck);
                                fr_pair_value_memsteal(vp, vec->umts.ck);
                                RDEBUG2("&control:%pP", vp);
                                fr_cursor_append(&cursor, vp);
 
-                               vp = fr_pair_afrom_child_num(request, root, FR_EAP_AKA_IK);
+                               vp = fr_pair_afrom_da(request, attr_eap_aka_ik);
                                fr_pair_value_memsteal(vp, vec->umts.ik);
                                RDEBUG2("&control:%pP", vp);
                                fr_cursor_append(&cursor, vp);
 
-                               vp = fr_pair_afrom_child_num(request, root, FR_EAP_AKA_AUTN);
+                               vp = fr_pair_afrom_da(request, attr_eap_aka_autn);
                                fr_pair_value_memsteal(vp, vec->umts.authn);
                                RDEBUG2("&control:%pP", vp);
                                fr_cursor_append(&cursor, vp);
                                REXDENT();
 
                                i++;
-                       }
                                break;
                        }
                }
index 2bf736aa42f9d3e3c7efa2ca72448966f826514a..9939e9eb04dee2b31e7839e25292bb188c29a9bd 100644 (file)
@@ -47,6 +47,8 @@ RCSID("$Id$")
 #include <freeradius-devel/server/rad_assert.h>
 
 #include "sigtran.h"
+#include "attrs.h"
+
 #include <assert.h>
 #include <limits.h>
 
@@ -154,6 +156,43 @@ static const CONF_PARSER module_config[] = {
        CONF_PARSER_TERMINATOR
 };
 
+fr_dict_t *dict_eap_sim;
+fr_dict_t *dict_eap_aka;
+
+fr_dict_attr_t const *attr_eap_aka_autn;
+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_rand;
+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_sres;
+fr_dict_attr_t const *attr_eap_aka_rand;
+
+extern fr_dict_autoload_t rlm_sigtran_dict[];
+fr_dict_autoload_t rlm_sigtran_dict[] = {
+       { .out = &dict_eap_sim, .proto = "eap-sim" },
+       { .out = &dict_eap_aka, .proto = "eap-aka" },
+       { NULL }
+};
+
+fr_dict_attr_t const *attr_auth_type;
+
+extern fr_dict_attr_autoload_t rlm_sigtran_dict_attr[];
+fr_dict_attr_autoload_t rlm_sigtran_dict_attr[] = {
+       { .out = &attr_eap_aka_autn, .name = "EAP-AKA-AUTN", .type = FR_TYPE_OCTETS, .dict = &dict_eap_aka },
+       { .out = &attr_eap_aka_ck, .name = "EAP-AKA-CK", .type = FR_TYPE_OCTETS, .dict = &dict_eap_aka },
+       { .out = &attr_eap_aka_ik, .name = "EAP-AKA-IK", .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_xres, .name = "EAP-AKA-XRES", .type = FR_TYPE_OCTETS, .dict = &dict_eap_aka },
+
+       { .out = &attr_eap_sim_kc, .name = "EAP-SIM-KC", .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_sres, .name = "EAP-SIM-SRES", .type = FR_TYPE_OCTETS, .dict = &dict_eap_sim },
+
+       { NULL }
+};
+
 static rlm_rcode_t CC_HINT(nonnull) mod_authorize(void *instance, void *thread, REQUEST *request)
 {
        rlm_sigtran_t const     *inst = instance;