From 0d085b253fd6807ea18ecac14a993ad265c3b9d9 Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Tue, 20 Jul 2004 00:33:21 +0000 Subject: Allow pgsql driver to accept login & password as separate parameters like other PDO drivers can. --- ext/pdo_pgsql/pgsql_driver.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'ext/pdo_pgsql/pgsql_driver.c') diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c index 063c34ed61..c1e4f5f7af 100644 --- a/ext/pdo_pgsql/pgsql_driver.c +++ b/ext/pdo_pgsql/pgsql_driver.c @@ -297,6 +297,7 @@ static int pdo_pgsql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_ { pdo_pgsql_db_handle *H; int ret = 0; + char *conn_str; H = pecalloc(1, sizeof(pdo_pgsql_db_handle), dbh->is_persistent); dbh->driver_data = H; @@ -304,7 +305,22 @@ static int pdo_pgsql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_ H->einfo.errcode = 0; H->einfo.errmsg = NULL; - H->server = PQconnectdb(dbh->data_source); + /* support both full connection string & connection string + login and/or password */ + if (!dbh->username || !dbh->password) { + conn_str = (char *) dbh->data_source; + } else if (dbh->username && dbh->password) { + spprintf(&conn_str, 0, "%s;user=%s;password=%s", dbh->data_source, dbh->username, dbh->password); + } else if (dbh->username) { + spprintf(&conn_str, 0, "%s;user=%s", dbh->data_source, dbh->username); + } else { + spprintf(&conn_str, 0, "%s;password=%s", dbh->data_source, dbh->password); + } + + H->server = PQconnectdb(dbh->data_source); + + if (conn_str != dbh->data_source) { + efree(conn_str); + } if (PQstatus(H->server) != CONNECTION_OK) { pdo_pgsql_error(dbh, PGRES_FATAL_ERROR); -- cgit v1.2.1