From be9d72b11d84747b802ba2ae45bf69b2d5cc8872 Mon Sep 17 00:00:00 2001 From: "Kevin P. Fleming" Date: Mon, 11 Jul 2005 21:06:27 +0000 Subject: remove complex malloc-avoidance (bug #4601) remove resetting of variables during unload that will only be freed or set to known values on reload git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6085 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- cdr/cdr_odbc.c | 80 +++++++++-------------------- cdr/cdr_pgsql.c | 154 ++++++++++++++++++-------------------------------------- 2 files changed, 75 insertions(+), 159 deletions(-) (limited to 'cdr') diff --git a/cdr/cdr_odbc.c b/cdr/cdr_odbc.c index 78971d4d0..c3f2a48ce 100755 --- a/cdr/cdr_odbc.c +++ b/cdr/cdr_odbc.c @@ -40,7 +40,6 @@ static char *desc = "ODBC CDR Backend"; static char *name = "ODBC"; static char *config = "cdr_odbc.conf"; static char *dsn = NULL, *username = NULL, *password = NULL, *table = NULL; -static int dsn_alloc = 0, username_alloc = 0, password_alloc = 0, table_alloc = 0; static int loguniqueid = 0; static int usegmtime = 0; static int dispositionstring = 0; @@ -191,39 +190,27 @@ static int odbc_unload_module(void) SQLDisconnect(ODBC_con); SQLFreeHandle(SQL_HANDLE_DBC, ODBC_con); SQLFreeHandle(SQL_HANDLE_ENV, ODBC_env); - connected = 0; } - if (dsn && dsn_alloc) { + if (dsn) { if (option_verbose > 10) ast_verbose( VERBOSE_PREFIX_4 "cdr_odbc: free dsn\n"); free(dsn); - dsn = NULL; - dsn_alloc = 0; } - if (username && username_alloc) { + if (username) { if (option_verbose > 10) ast_verbose( VERBOSE_PREFIX_4 "cdr_odbc: free username\n"); free(username); - username = NULL; - username_alloc = 0; } - if (password && password_alloc) { + if (password) { if (option_verbose > 10) ast_verbose( VERBOSE_PREFIX_4 "cdr_odbc: free password\n"); free(password); - password = NULL; - password_alloc = 0; } - if (table && table_alloc) { + if (table) { if (option_verbose > 10) ast_verbose( VERBOSE_PREFIX_4 "cdr_odbc: free table\n"); free(table); - table = NULL; - table_alloc = 0; } - loguniqueid = 0; - usegmtime = 0; - dispositionstring = 0; ast_cdr_unregister(name); ast_mutex_unlock(&odbc_lock); @@ -252,20 +239,15 @@ static int odbc_load_module(void) } tmp = ast_variable_retrieve(cfg,"global","dsn"); - if (tmp) { - dsn = malloc(strlen(tmp) + 1); - if (dsn != NULL) { - memset(dsn, 0, strlen(tmp) + 1); - dsn_alloc = 1; - strncpy(dsn, tmp, strlen(tmp)); - } else { - ast_log(LOG_ERROR,"cdr_odbc: Out of memory error.\n"); - res = -1; - goto out; - } - } else { + if (tmp == NULL) { ast_log(LOG_WARNING,"cdr_odbc: dsn not specified. Assuming asteriskdb\n"); - dsn = "asteriskdb"; + tmp = "asteriskdb"; + } + dsn = strdup(tmp); + if (dsn == NULL) { + ast_log(LOG_ERROR,"cdr_odbc: Out of memory error.\n"); + res = -1; + goto out; } tmp = ast_variable_retrieve(cfg,"global","dispositionstring"); @@ -277,12 +259,8 @@ static int odbc_load_module(void) tmp = ast_variable_retrieve(cfg,"global","username"); if (tmp) { - username = malloc(strlen(tmp) + 1); - if (username != NULL) { - memset(username, 0, strlen(tmp) + 1); - username_alloc = 1; - strncpy(username, tmp, strlen(tmp)); - } else { + username = strdup(tmp); + if (username == NULL) { ast_log(LOG_ERROR,"cdr_odbc: Out of memory error.\n"); res = -1; goto out; @@ -291,12 +269,8 @@ static int odbc_load_module(void) tmp = ast_variable_retrieve(cfg,"global","password"); if (tmp) { - password = malloc(strlen(tmp) + 1); - if (password != NULL) { - memset(password, 0, strlen(tmp) + 1); - password_alloc = 1; - strncpy(password, tmp, strlen(tmp)); - } else { + password = strdup(tmp); + if (password == NULL) { ast_log(LOG_ERROR,"cdr_odbc: Out of memory error.\n"); res = -1; goto out; @@ -330,20 +304,15 @@ static int odbc_load_module(void) } tmp = ast_variable_retrieve(cfg,"global","table"); - if (tmp) { - table = malloc(strlen(tmp) + 1); - if (table != NULL) { - memset(table, 0, strlen(tmp) + 1); - table_alloc = 1; - strncpy(table, tmp, strlen(tmp)); - } else { - ast_log(LOG_ERROR,"cdr_odbc: Out of memory error.\n"); - res = -1; - goto out; - } - } else { + if (tmp == NULL) { ast_log(LOG_WARNING,"cdr_odbc: table not specified. Assuming cdr\n"); - table = "cdr"; + tmp = "cdr"; + } + table = strdup(tmp); + if (table == NULL) { + ast_log(LOG_ERROR,"cdr_odbc: Out of memory error.\n"); + res = -1; + goto out; } ast_config_destroy(cfg); @@ -437,6 +406,7 @@ static int odbc_init(void) SQLSetConnectAttr(ODBC_con, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)10, 0); } + /* XXX note username and password could be NULL here */ ODBC_res = SQLConnect(ODBC_con, (SQLCHAR*)dsn, SQL_NTS, (SQLCHAR*)username, SQL_NTS, (SQLCHAR*)password, SQL_NTS); if ((ODBC_res != SQL_SUCCESS) && (ODBC_res != SQL_SUCCESS_WITH_INFO)) { diff --git a/cdr/cdr_pgsql.c b/cdr/cdr_pgsql.c index 99828ea30..cfba0cb03 100755 --- a/cdr/cdr_pgsql.c +++ b/cdr/cdr_pgsql.c @@ -42,7 +42,6 @@ static char *desc = "PostgreSQL CDR Backend"; static char *name = "pgsql"; static char *config = "cdr_pgsql.conf"; static char *pghostname = NULL, *pgdbname = NULL, *pgdbuser = NULL, *pgpassword = NULL, *pgdbsock = NULL, *pgdbport = NULL, *table = NULL; -static int hostname_alloc = 0, dbname_alloc = 0, dbuser_alloc = 0, password_alloc = 0, dbsock_alloc = 0, dbport_alloc = 0, table_alloc = 0; static int connected = 0; AST_MUTEX_DEFINE_STATIC(pgsql_lock); @@ -166,43 +165,20 @@ static int my_unload_module(void) { if (conn) PQfinish(conn); - conn = NULL; - connected = 0; - if (pghostname && hostname_alloc) { + if (pghostname) free(pghostname); - pghostname = NULL; - hostname_alloc = 0; - } - if (pgdbname && dbname_alloc) { + if (pgdbname) free(pgdbname); - pgdbname = NULL; - dbname_alloc = 0; - } - if (pgdbuser && dbuser_alloc) { + if (pgdbuser) free(pgdbuser); - pgdbuser = NULL; - dbuser_alloc = 0; - } - if (pgdbsock && dbsock_alloc) { + if (pgdbsock) free(pgdbsock); - pgdbsock = NULL; - dbsock_alloc = 0; - } - if (pgpassword && password_alloc) { + if (pgpassword) free(pgpassword); - pgpassword = NULL; - password_alloc = 0; - } - if (pgdbport && dbport_alloc) { + if (pgdbport) free(pgdbport); - pgdbport = NULL; - dbport_alloc = 0; - } - if (table && table_alloc) { + if (table) free(table); - table = NULL; - table_alloc = 0; - } ast_cdr_unregister(name); return 0; } @@ -221,99 +197,69 @@ static int process_my_load_module(struct ast_config *cfg) } tmp = ast_variable_retrieve(cfg,"global","hostname"); - if (tmp) { - pghostname = malloc(strlen(tmp) + 1); - if (pghostname != NULL) { - memset(pghostname, 0, strlen(tmp) + 1); - hostname_alloc = 1; - strncpy(pghostname, tmp, strlen(tmp)); - } else { - ast_log(LOG_ERROR,"Out of memory error.\n"); - return -1; - } - } else { + if (tmp == NULL) { ast_log(LOG_WARNING,"PostgreSQL server hostname not specified. Assuming localhost\n"); - pghostname = "localhost"; + tmp = "localhost"; + } + pghostname = strdup(tmp); + if (pghostname == NULL) { + ast_log(LOG_ERROR,"Out of memory error.\n"); + return -1; } tmp = ast_variable_retrieve(cfg,"global","dbname"); - if (tmp) { - pgdbname = malloc(strlen(tmp) + 1); - if (pgdbname != NULL) { - memset(pgdbname, 0, strlen(tmp) + 1); - dbname_alloc = 1; - strncpy(pgdbname, tmp, strlen(tmp)); - } else { - ast_log(LOG_ERROR,"Out of memory error.\n"); - return -1; - } - } else { + if (tmp == NULL) { ast_log(LOG_WARNING,"PostgreSQL database not specified. Assuming asterisk\n"); - pgdbname = "asteriskcdrdb"; + tmp = "asteriskcdrdb"; + } + pgdbname = strdup(tmp); + if (pgdbname == NULL) { + ast_log(LOG_ERROR,"Out of memory error.\n"); + return -1; } tmp = ast_variable_retrieve(cfg,"global","user"); - if (tmp) { - pgdbuser = malloc(strlen(tmp) + 1); - if (pgdbuser != NULL) { - memset(pgdbuser, 0, strlen(tmp) + 1); - dbuser_alloc = 1; - strncpy(pgdbuser, tmp, strlen(tmp)); - } else { - ast_log(LOG_ERROR,"Out of memory error.\n"); - return -1; - } - } else { + if (tmp == NULL) { ast_log(LOG_WARNING,"PostgreSQL database user not specified. Assuming root\n"); - pgdbuser = "root"; + tmp = "root"; + } + pgdbuser = strdup(tmp); + if (pgdbuser == NULL) { + ast_log(LOG_ERROR,"Out of memory error.\n"); + return -1; } tmp = ast_variable_retrieve(cfg,"global","password"); - if (tmp) { - pgpassword = malloc(strlen(tmp) + 1); - if (pgpassword != NULL) { - memset(pgpassword, 0, strlen(tmp) + 1); - password_alloc = 1; - strncpy(pgpassword, tmp, strlen(tmp)); - } else { - ast_log(LOG_ERROR,"Out of memory error.\n"); - return -1; - } - } else { + if (tmp == NULL) { ast_log(LOG_WARNING,"PostgreSQL database password not specified. Assuming blank\n"); - pgpassword = ""; + tmp = ""; + } + pgpassword = strdup(tmp); + if (pgpassword == NULL) { + ast_log(LOG_ERROR,"Out of memory error.\n"); + return -1; } tmp = ast_variable_retrieve(cfg,"global","port"); - if (tmp) { - pgdbport = malloc(strlen(tmp) + 1); - if (pgdbport != NULL) { - memset(pgdbport, 0, strlen(tmp) + 1); - dbport_alloc = 1; - strncpy(pgdbport, tmp, strlen(tmp)); - } else { - ast_log(LOG_ERROR,"Out of memory error.\n"); - return -1; - } - } else { + if (tmp == NULL) { ast_log(LOG_WARNING,"PostgreSQL database port not specified. Using default 5432.\n"); - pgdbport = "5432"; + tmp = "5432"; + } + pgdbport = strdup(tmp); + if (pgdbport == NULL) { + ast_log(LOG_ERROR,"Out of memory error.\n"); + return -1; } - /* Loading stuff for table name */ + tmp = ast_variable_retrieve(cfg,"global","table"); - if (tmp) { - table = malloc(strlen(tmp) + 1); - if (table != NULL) { - memset(table, 0, strlen(tmp) + 1); - table_alloc = 1; - strncpy(table, tmp, strlen(tmp)); - } else { - ast_log(LOG_ERROR,"Out of memory error.\n"); - return -1; - } - } else { + if (tmp == NULL) { ast_log(LOG_WARNING,"CDR table not specified. Assuming cdr\n"); - table = "cdr"; + tmp = "cdr"; + } + table = strdup(tmp); + if (table == NULL) { + ast_log(LOG_ERROR,"Out of memory error.\n"); + return -1; } ast_log(LOG_DEBUG,"cdr_pgsql: got hostname of %s\n",pghostname); -- cgit v1.2.3