--- /dev/null
+#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;
#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;
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;
}
}
#include <freeradius-devel/server/rad_assert.h>
#include "sigtran.h"
+#include "attrs.h"
+
#include <assert.h>
#include <limits.h>
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;