From: Arran Cudbard-Bell Date: Sun, 16 Dec 2018 01:39:45 +0000 (-0500) Subject: Autoload sigtran dictionaries and attributes X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8a5637ddd72f4b348499c82d759d7db83cd3500f;p=thirdparty%2Ffreeradius-server.git Autoload sigtran dictionaries and attributes --- diff --git a/src/modules/rlm_sigtran/attrs.h b/src/modules/rlm_sigtran/attrs.h new file mode 100644 index 00000000000..c08e8171510 --- /dev/null +++ b/src/modules/rlm_sigtran/attrs.h @@ -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 + +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; diff --git a/src/modules/rlm_sigtran/client.c b/src/modules/rlm_sigtran/client.c index 2e2d9d25ce0..39c81570af5 100644 --- a/src/modules/rlm_sigtran/client.c +++ b/src/modules/rlm_sigtran/client.c @@ -32,6 +32,8 @@ #include #include #include + +#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; } } diff --git a/src/modules/rlm_sigtran/rlm_sigtran.c b/src/modules/rlm_sigtran/rlm_sigtran.c index 2bf736aa42f..9939e9eb04d 100644 --- a/src/modules/rlm_sigtran/rlm_sigtran.c +++ b/src/modules/rlm_sigtran/rlm_sigtran.c @@ -47,6 +47,8 @@ RCSID("$Id$") #include #include "sigtran.h" +#include "attrs.h" + #include #include @@ -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;