Index: cdr/cdr_pgsql.c
===================================================================
RCS file: /usr/cvsroot/asterisk/cdr/cdr_pgsql.c,v
retrieving revision 1.19
diff -u -r1.19 cdr_pgsql.c
--- cdr/cdr_pgsql.c	6 Jun 2005 22:12:18 -0000	1.19
+++ cdr/cdr_pgsql.c	26 Jun 2005 12:47:21 -0000
@@ -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);
@@ -168,40 +167,33 @@
 		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 +213,70 @@
 	}
 
 	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 = malloc(strlen(tmp) + 1);
+	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 = malloc(strlen(tmp) + 1);
+	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);
Index: cdr/cdr_odbc.c
===================================================================
RCS file: /usr/cvsroot/asterisk/cdr/cdr_odbc.c,v
retrieving revision 1.28
diff -u -r1.28 cdr_odbc.c
--- cdr/cdr_odbc.c	6 Jun 2005 22:12:18 -0000	1.28
+++ cdr/cdr_odbc.c	26 Jun 2005 12:47:21 -0000
@@ -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;
@@ -193,33 +192,29 @@
 		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;
@@ -252,20 +247,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 +267,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 +277,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 +312,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 +414,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)) {
