From: Alan T. DeKok Date: Tue, 29 Jul 2025 10:36:27 +0000 (-0400) Subject: don't assert if we fail to instantiate the dictionaries X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4644f501cf33cf8e01617fdd35cfdb7de1cb3157;p=thirdparty%2Ffreeradius-server.git don't assert if we fail to instantiate the dictionaries --- diff --git a/src/protocols/dhcpv4/base.c b/src/protocols/dhcpv4/base.c index 13b269eaab..02b9ba46ec 100644 --- a/src/protocols/dhcpv4/base.c +++ b/src/protocols/dhcpv4/base.c @@ -31,6 +31,7 @@ RCSID("$Id$") #include "attrs.h" static uint32_t instance_count = 0; +static bool instantiated = false; typedef struct { uint8_t code; @@ -622,16 +623,20 @@ int fr_dhcpv4_global_init(void) } } + instantiated = true; return 0; } void fr_dhcpv4_global_free(void) { + if (!instantiated) return; + fr_assert(instance_count > 0); if (--instance_count > 0) return; fr_dict_autofree(dhcpv4_dict); + instantiated = false; } diff --git a/src/protocols/dhcpv6/base.c b/src/protocols/dhcpv6/base.c index 144ef74ae4..44ded420fa 100644 --- a/src/protocols/dhcpv6/base.c +++ b/src/protocols/dhcpv6/base.c @@ -36,6 +36,7 @@ #include "attrs.h" static uint32_t instance_count = 0; +static bool instantiated = false; fr_dict_t const *dict_dhcpv6; @@ -935,16 +936,20 @@ int fr_dhcpv6_global_init(void) } } + instantiated = true; return 0; } void fr_dhcpv6_global_free(void) { + if (!instantiated) return; + fr_assert(instance_count > 0); if (--instance_count > 0) return; fr_dict_autofree(libfreeradius_dhcpv6_dict); + instantiated = false; } static bool attr_valid(fr_dict_attr_t *da) diff --git a/src/protocols/radius/base.c b/src/protocols/radius/base.c index 0997c38c13..efc8bd2b8c 100644 --- a/src/protocols/radius/base.c +++ b/src/protocols/radius/base.c @@ -39,6 +39,7 @@ RCSID("$Id$") #include static uint32_t instance_count = 0; +static bool instantiated = false; fr_dict_t const *dict_freeradius; fr_dict_t const *dict_radius; @@ -1251,11 +1252,14 @@ int fr_radius_global_init(void) goto fail; } + instantiated = true; return 0; } void fr_radius_global_free(void) { + if (!instantiated) return; + if (--instance_count != 0) return; fr_dict_autofree(libfreeradius_radius_dict); diff --git a/src/protocols/tacacs/base.c b/src/protocols/tacacs/base.c index a3e26881ba..2cdec93aa2 100644 --- a/src/protocols/tacacs/base.c +++ b/src/protocols/tacacs/base.c @@ -31,6 +31,7 @@ #include "attrs.h" static uint32_t instance_count = 0; +static bool instantiated = false; fr_dict_t const *dict_tacacs; @@ -161,16 +162,20 @@ int fr_tacacs_global_init(void) goto fail; } + instantiated = true; return 0; } void fr_tacacs_global_free(void) { + if (!instantiated) return; + fr_assert(instance_count > 0); if (--instance_count > 0) return; fr_dict_autofree(libfreeradius_tacacs_dict); + instantiated = false; } /** XOR the body based on the secret key.