]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Move password free to the atexit handlers
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 15 May 2024 01:46:13 +0000 (19:46 -0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 15 May 2024 01:46:13 +0000 (19:46 -0600)
src/lib/server/base.c
src/lib/server/password.c
src/lib/server/password.h

index 7420fe26d8cb5245dd3abb8b241f2f915afec15e..ab5ad9e729ec1780b240b8ffc235abe6aca9fb5c 100644 (file)
@@ -120,11 +120,6 @@ void server_free(void)
         */
        xlat_instances_free();
 
-       /*
-        *      Free password dictionaries
-        */
-       password_free();
-
        /*
         *      Now we're sure no more triggers can fire, free the
         *      trigger tree.
index 27b879af3a69211a15e11db0148b0bae7ac093e1..669c815efe18d82f9cceaf09b2f72bfbe4efb5bf 100644 (file)
@@ -25,6 +25,7 @@ RCSID("$Id$")
 
 #include <freeradius-devel/server/password.h>
 
+#include <freeradius-devel/util/atexit.h>
 #include <freeradius-devel/util/base64.h>
 #include <freeradius-devel/util/base16.h>
 #include <freeradius-devel/util/md4.h>
@@ -1025,10 +1026,7 @@ fr_pair_t *password_find(bool *ephemeral, TALLOC_CTX *ctx, request_t *request,
        return NULL;
 }
 
-/** Load our dictionaries
- *
- */
-int password_init(void)
+static int _password_init(UNUSED void *uctx)
 {
        if (fr_dict_autoload(password_dict) < 0) {
                PERROR("%s", __FUNCTION__);
@@ -1043,7 +1041,21 @@ int password_init(void)
        return 0;
 }
 
-void password_free(void)
+static int _password_free(UNUSED void *uctx)
 {
        fr_dict_autofree(password_dict);
+
+       return 0;
+}
+
+/** Load our dictionaries
+ *
+ */
+int password_init(void)
+{
+       int ret;
+
+       fr_atexit_global_once_ret(&ret, _password_init, _password_free, NULL);
+
+       return ret;
 }
index 071e90d51b3f5357b0c4604966c14b97710a134d..1207b891bd44e7e835532065708b1757358830f9 100644 (file)
@@ -38,8 +38,6 @@ fr_pair_t             *password_find(bool *ephemeral, TALLOC_CTX *ctx, request_t *request,
 
 int                    password_init(void);
 
-void                   password_free(void);
-
 #ifdef __cplusplus
 }
 #endif