diff --git a/server/fwknopd.c b/server/fwknopd.c index 67e41237..3899a081 100644 --- a/server/fwknopd.c +++ b/server/fwknopd.c @@ -366,6 +366,11 @@ main(int argc, char **argv) */ fw_cleanup(); free_logging(); + +#if USE_FILE_CACHE + free_replay_list(&opts); +#endif + free_configs(&opts); return(0); diff --git a/server/replay_cache.c b/server/replay_cache.c index a3801498..7ec06c60 100644 --- a/server/replay_cache.c +++ b/server/replay_cache.c @@ -619,4 +619,36 @@ replay_check_dbm_cache(fko_srv_options_t *opts, fko_ctx_t ctx) } #endif /* USE_FILE_CACHE */ +#if USE_FILE_CACHE +/* Free replay list memory +*/ +void +free_replay_list(fko_srv_options_t *opts) +{ +#ifdef NO_DIGEST_CACHE + return; +#endif + struct digest_cache_list *digest_list_ptr = NULL, *digest_tmp = NULL; + + if (opts->digest_cache == NULL) + return; + + digest_list_ptr = opts->digest_cache; + while (digest_list_ptr != NULL) + { + digest_tmp = digest_list_ptr->next; + if (digest_list_ptr->cache_info.digest != NULL + && digest_list_ptr->cache_info.digest[0] != '\0') + { + free(digest_list_ptr->cache_info.digest); + } + free(digest_list_ptr); + digest_list_ptr = digest_tmp; + } + + return; +} +#endif + + /***EOF***/ diff --git a/server/replay_cache.h b/server/replay_cache.h index f3c6eda1..185d1600 100644 --- a/server/replay_cache.h +++ b/server/replay_cache.h @@ -63,6 +63,7 @@ int replay_check(fko_srv_options_t *opts, fko_ctx_t ctx); #ifdef USE_FILE_CACHE int replay_file_cache_init(fko_srv_options_t *opts); int replay_check_file_cache(fko_srv_options_t *opts, fko_ctx_t ctx); +void free_replay_list(fko_srv_options_t *opts); #else int replay_db_cache_init(fko_srv_options_t *opts); int replay_check_dbm_cache(fko_srv_options_t *opts, fko_ctx_t ctx);