From: Arran Cudbard-Bell Date: Tue, 30 Oct 2018 19:38:34 +0000 (-0400) Subject: Free dictionaries if we can't resolve the attributes X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ca1dd825dccfaf38b4e20a8930082c88ea0ad83a;p=thirdparty%2Ffreeradius-server.git Free dictionaries if we can't resolve the attributes --- diff --git a/src/lib/soh/soh.c b/src/lib/soh/soh.c index 9d11b4744ca..78e27643601 100644 --- a/src/lib/soh/soh.c +++ b/src/lib/soh/soh.c @@ -722,17 +722,14 @@ int fr_soh_init(void) return 0; } - if (fr_dict_autoload(soh_dict) < 0) { - PERROR("Failed initialising protocol library"); - return -1; - } + if (fr_dict_autoload(soh_dict) < 0) return -1; if (fr_dict_attr_autoload(soh_dict_attr) < 0) { - PERROR("Failed resolving attributes"); + fr_dict_autofree(soh_dict); return -1; } - + instance_count++; return 0; } diff --git a/src/modules/rlm_eap/lib/sim/base.c b/src/modules/rlm_eap/lib/sim/base.c index e38e81e9142..eaa569f478d 100644 --- a/src/modules/rlm_eap/lib/sim/base.c +++ b/src/modules/rlm_eap/lib/sim/base.c @@ -185,7 +185,11 @@ int fr_sim_init(void) } if (fr_dict_autoload(libfreeradius_sim_dict) < 0) return -1; - if (fr_dict_attr_autoload(libfreeradius_sim_dict_attr) < 0) return -1; + if (fr_dict_attr_autoload(libfreeradius_sim_dict_attr) < 0) { + fr_dict_autofree(libfreeradius_sim_dict); + return -1; + } + instance_count++; return 0; } diff --git a/src/protocols/dhcpv4/base.c b/src/protocols/dhcpv4/base.c index 7b830f0e31a..14b534ff421 100644 --- a/src/protocols/dhcpv4/base.c +++ b/src/protocols/dhcpv4/base.c @@ -501,7 +501,10 @@ int fr_dhcpv4_global_init(void) } if (fr_dict_autoload(dhcpv4_dict) < 0) return -1; - if (fr_dict_attr_autoload(dhcpv4_dict_attr) < 0) return -1; + if (fr_dict_attr_autoload(dhcpv4_dict_attr) < 0) { + fr_dict_autofree(dhcpv4_dict); + return -1; + } /* * Fixup dictionary entry for DHCP-Paramter-Request-List adding all the options diff --git a/src/protocols/dhcpv6/base.c b/src/protocols/dhcpv6/base.c index 262cfc1f31f..aefbd456a9f 100644 --- a/src/protocols/dhcpv6/base.c +++ b/src/protocols/dhcpv6/base.c @@ -99,6 +99,8 @@ int fr_dhcpv6_global_init(void) if (fr_dict_autoload(dhcpv6_dict) < 0) return -1; + instance_count++; + return 0; } diff --git a/src/protocols/radius/base.c b/src/protocols/radius/base.c index 92cb582ec5d..89d5e90f5dd 100644 --- a/src/protocols/radius/base.c +++ b/src/protocols/radius/base.c @@ -1074,7 +1074,6 @@ ssize_t fr_radius_decode(TALLOC_CTX *ctx, uint8_t *packet, size_t packet_len, ui return packet_len; } - static void print_hex_data(uint8_t const *ptr, int attrlen, int depth) { int i; @@ -1097,7 +1096,12 @@ int fr_radius_init(void) } if (fr_dict_autoload(libfreeradius_radius_dict) < 0) return -1; - if (fr_dict_attr_autoload(libfreeradius_radius_dict_attr) < 0) return -1; + if (fr_dict_attr_autoload(libfreeradius_radius_dict_attr) < 0) { + fr_dict_autofree(libfreeradius_radius_dict); + return -1; + } + + instance_count++; return 0; } diff --git a/src/protocols/vqp/base.c b/src/protocols/vqp/base.c index 9e56e80cbc0..095479425d7 100644 --- a/src/protocols/vqp/base.c +++ b/src/protocols/vqp/base.c @@ -59,7 +59,10 @@ int fr_vqp_init(void) } if (fr_dict_autoload(libfreeradius_vqp) < 0) return -1; - if (fr_dict_attr_autoload(libfreeradius_vqp_attr) < 0) return -1; + if (fr_dict_attr_autoload(libfreeradius_vqp_attr) < 0) { + fr_dict_autofree(libfreeradius_vqp); + return -1; + } instance_count++;