From 25e04d2d7db4f4e62e648a4e99351028990fa12e Mon Sep 17 00:00:00 2001 From: tilghman Date: Fri, 22 Feb 2008 22:39:21 +0000 Subject: Allow database password to be NULL and several other cleanups. (closes issue #12048) Reported by: bukaj Patches: 20080222__bug12048.diff.txt uploaded by Corydon76 (license 14) Tested by: bukaj git-svn-id: http://svn.digium.com/svn/asterisk/trunk@104036 f38db490-d61c-443f-a65b-d21fe96a405b --- res/res_config_pgsql.c | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) (limited to 'res') diff --git a/res/res_config_pgsql.c b/res/res_config_pgsql.c index 81da43456..df744592b 100644 --- a/res/res_config_pgsql.c +++ b/res/res_config_pgsql.c @@ -912,23 +912,21 @@ static int pgsql_reconnect(const char *database) pgsqlConn = NULL; } - if ((!pgsqlConn) && (!ast_strlen_zero(dbhost) || !ast_strlen_zero(dbsock)) && !ast_strlen_zero(dbuser) && !ast_strlen_zero(dbpass) && !ast_strlen_zero(my_database)) { - char *connInfo = NULL; - unsigned int size = 100 + strlen(dbhost) - + strlen(dbuser) - + strlen(dbpass) - + strlen(my_database); - - if (!(connInfo = ast_malloc(size))) - return 0; - - sprintf(connInfo, "host=%s port=%d dbname=%s user=%s password=%s", - dbhost, dbport, my_database, dbuser, dbpass); - ast_debug(1, "%u connInfo=%s\n", size, connInfo); - pgsqlConn = PQconnectdb(connInfo); - ast_debug(1, "%u connInfo=%s\n", size, connInfo); + /* DB password can legitimately be 0-length */ + if ((!pgsqlConn) && (!ast_strlen_zero(dbhost) || !ast_strlen_zero(dbsock)) && !ast_strlen_zero(dbuser) && dbpass && !ast_strlen_zero(my_database)) { + struct ast_str *connInfo = ast_str_create(32); + + ast_str_set(&connInfo, 0, "host=%s port=%d dbname=%s user=%s", + dbhost, dbport, my_database, dbuser); + if (!ast_strlen_zero(dbpass)) + ast_str_append(&connInfo, 0, " password=%s", dbpass); + + ast_debug(1, "%u connInfo=%s\n", connInfo->len, connInfo->str); + pgsqlConn = PQconnectdb(connInfo->str); + ast_debug(1, "%u connInfo=%s\n", connInfo->len, connInfo->str); ast_free(connInfo); connInfo = NULL; + ast_debug(1, "pgsqlConn=%p\n", pgsqlConn); if (pgsqlConn && PQstatus(pgsqlConn) == CONNECTION_OK) { ast_debug(1, "PostgreSQL RealTime: Successfully connected to database.\n"); @@ -936,13 +934,12 @@ static int pgsql_reconnect(const char *database) return 1; } else { ast_log(LOG_ERROR, - "PostgreSQL RealTime: Failed to connect database server %s on %s. Check debug for more info.\n", - dbname, dbhost); - ast_debug(1, "PostgreSQL RealTime: Cannot Connect: %s\n", PQresultErrorMessage(NULL)); + "PostgreSQL RealTime: Failed to connect database %s on %s: %s\n", + dbname, dbhost, PQresultErrorMessage(NULL)); return 0; } } else { - ast_debug(1, "PostgreSQL RealTime: Everything is fine.\n"); + ast_debug(1, "PostgreSQL RealTime: One or more of the parameters in the config does not pass our validity checks.\n"); return 1; } } -- cgit v1.2.3