[Asterisk-cvs] asterisk/cdr cdr_odbc.c, 1.28, 1.29 cdr_pgsql.c, 1.19, 1.20

kpfleming at lists.digium.com kpfleming at lists.digium.com
Mon Jul 11 16:58:12 CDT 2005


Update of /usr/cvsroot/asterisk/cdr
In directory mongoose.digium.com:/tmp/cvs-serv11280/cdr

Modified Files:
	cdr_odbc.c cdr_pgsql.c 
Log Message:
remove complex malloc-avoidance (bug #4601)
remove resetting of variables during unload that will only be freed or set to known values on reload


Index: cdr_odbc.c
===================================================================
RCS file: /usr/cvsroot/asterisk/cdr/cdr_odbc.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -d -r1.28 -r1.29
--- cdr_odbc.c	6 Jun 2005 22:12:18 -0000	1.28
+++ cdr_odbc.c	11 Jul 2005 21:06:27 -0000	1.29
@@ -40,7 +40,6 @@
 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 @@
 		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 @@
 	}
 
 	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 @@
 		
 	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 @@
 
 	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 @@
 	}
 
 	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 @@
 		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)) {

Index: cdr_pgsql.c
===================================================================
RCS file: /usr/cvsroot/asterisk/cdr/cdr_pgsql.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- cdr_pgsql.c	6 Jun 2005 22:12:18 -0000	1.19
+++ cdr_pgsql.c	11 Jul 2005 21:06:27 -0000	1.20
@@ -42,7 +42,6 @@
 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 @@
 { 
 	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 @@
 	}
 
 	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";
 	}
-        /* Loading stuff for table name */
+	pgdbport = strdup(tmp);
+	if (pgdbport == NULL) {
+		ast_log(LOG_ERROR,"Out of memory error.\n");
+		return -1;
+	}
+
 	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);




More information about the svn-commits mailing list