From f789b7765baf68a471b9dda42181fd4204ca74e6 Mon Sep 17 00:00:00 2001 From: chrsmj <52975048+chrsmj@users.noreply.github.com> Date: Thu, 16 May 2024 14:12:51 -0600 Subject: [PATCH] cdr_pgsql: Fix crash when the module fails to load multiple times. Missing or corrupt cdr_pgsql.conf configuration file can cause the second attempt to load the PostgreSQL CDR module to crash Asterisk via the Command Line Interface because a null CLI command is registered on the first failed attempt to load the module. Resolves: #736 --- cdr/cdr_pgsql.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/cdr/cdr_pgsql.c b/cdr/cdr_pgsql.c index b189e0952e..58ee7c1c5e 100644 --- a/cdr/cdr_pgsql.c +++ b/cdr/cdr_pgsql.c @@ -783,12 +783,23 @@ static int config_module(int reload) static int load_module(void) { - ast_cli_register_multiple(cdr_pgsql_status_cli, sizeof(cdr_pgsql_status_cli) / sizeof(struct ast_cli_entry)); + int res; + if (config_module(0)) { - return AST_MODULE_LOAD_DECLINE; + res = AST_MODULE_LOAD_DECLINE; + } else if (ast_cdr_register(name, ast_module_info->description, pgsql_log)) { + res = AST_MODULE_LOAD_DECLINE; + } else if (ast_cli_register_multiple(cdr_pgsql_status_cli, ARRAY_LEN(cdr_pgsql_status_cli))) { + res = AST_MODULE_LOAD_DECLINE; + } else { + res = AST_MODULE_LOAD_SUCCESS; + } + + if (res != AST_MODULE_LOAD_SUCCESS) { + unload_module(); } - return ast_cdr_register(name, ast_module_info->description, pgsql_log) - ? AST_MODULE_LOAD_DECLINE : 0; + + return res; } static int reload(void)