diff options
author | João Valverde <joao.valverde@tecnico.ulisboa.pt> | 2017-08-08 18:32:43 +0100 |
---|---|---|
committer | João Valverde <j@v6e.pt> | 2017-09-07 18:33:32 +0000 |
commit | b4cd63921c7134ab27da71369b50e26109d485cd (patch) | |
tree | fea9fe4d5f14a7026eac6537a392748487abcc37 /epan/dissectors/packet-radius.c | |
parent | db63f75eab219c16c450d4fcd57bfeae1bcb8cb6 (diff) |
RADIUS: Use two dictionaries (personal + system)
Instead of choosing one or the other.
Ping-Bug: 6466
Change-Id: Ia95b79190d12ad0fa8af06a12743f042f73a7602
Reviewed-on: https://code.wireshark.org/review/23029
Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com>
Petri-Dish: João Valverde <j@v6e.pt>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: João Valverde <j@v6e.pt>
Diffstat (limited to 'epan/dissectors/packet-radius.c')
-rw-r--r-- | epan/dissectors/packet-radius.c | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/epan/dissectors/packet-radius.c b/epan/dissectors/packet-radius.c index 5952073d45..2c3a8f7e4a 100644 --- a/epan/dissectors/packet-radius.c +++ b/epan/dissectors/packet-radius.c @@ -2558,6 +2558,23 @@ radius_shutdown(void) } static void +_radius_load_dictionary(gchar* dir) +{ + gchar *dict_err_str = NULL; + + if (!dir || test_for_directory(dir) != EISDIR) { + return; + } + + radius_load_dictionary(dict, dir, "dictionary", &dict_err_str); + + if (dict_err_str) { + report_failure("radius: %s", dict_err_str); + g_free(dict_err_str); + } +} + +static void register_radius_fields(const char *unused _U_) { hf_register_info base_hf[] = { @@ -2756,7 +2773,6 @@ register_radius_fields(const char *unused _U_) expert_module_t *expert_radius; hfett_t ri; char *dir = NULL; - gchar *dict_err_str = NULL; ri.hf = wmem_array_new(wmem_epan_scope(), sizeof(hf_register_info)); ri.ett = wmem_array_new(wmem_epan_scope(), sizeof(gint *)); @@ -2765,33 +2781,16 @@ register_radius_fields(const char *unused _U_) wmem_array_append(ri.hf, base_hf, array_length(base_hf)); wmem_array_append(ri.ett, base_ett, array_length(base_ett)); - dir = get_persconffile_path("radius", FALSE); - - if (test_for_directory(dir) != EISDIR) { - /* Although dir isn't a directory it may still use memory */ - g_free(dir); - - dir = get_datafile_path("radius"); - - if (test_for_directory(dir) != EISDIR) { - g_free(dir); - dir = NULL; - } - } - - if (dir) { - radius_load_dictionary(dict, dir, "dictionary", &dict_err_str); - - if (dict_err_str) { - report_failure("radius: %s", dict_err_str); - g_free(dict_err_str); - } - - g_hash_table_foreach(dict->attrs_by_id, register_attrs, &ri); - g_hash_table_foreach(dict->vendors_by_id, register_vendors, &ri); - } + dir = get_datafile_path("radius"); + _radius_load_dictionary(dir); g_free(dir); + dir = get_persconffile_path("radius", FALSE); + _radius_load_dictionary(dir); + g_free(dir); + + g_hash_table_foreach(dict->attrs_by_id, register_attrs, &ri); + g_hash_table_foreach(dict->vendors_by_id, register_vendors, &ri); proto_register_field_array(proto_radius, (hf_register_info *)wmem_array_get_raw(ri.hf), wmem_array_get_count(ri.hf)); proto_register_subtree_array((gint **)wmem_array_get_raw(ri.ett), wmem_array_get_count(ri.ett)); |