summaryrefslogtreecommitdiff
path: root/daemon
diff options
context:
space:
mode:
Diffstat (limited to 'daemon')
-rw-r--r--daemon/pgsql.c49
1 files changed, 46 insertions, 3 deletions
diff --git a/daemon/pgsql.c b/daemon/pgsql.c
index ce3d3b3..6bdb158 100644
--- a/daemon/pgsql.c
+++ b/daemon/pgsql.c
@@ -242,9 +242,48 @@ static int validate_password(ha_request_t* rq, pgsql_context_t* ctx, const char*
return HA_FALSE;
}
+static const char* make_pgsql_connstring(const ha_request_t* rq, pgsql_context_t* ctx)
+{
+ char num[16];
+
+ ASSERT(ctx->database);
+ ha_bufmcat(rq->buf, "dbname='", ctx->database, "'", NULL);
+
+ if(ctx->host)
+ {
+ ha_bufjoin(rq->buf);
+ ha_bufmcat(rq->buf, " host='", ctx->host, "'", NULL);
+ }
+
+ if(ctx->port)
+ {
+ ha_bufjoin(rq->buf);
+ ha_bufmcat(rq->buf, " port='", ctx->port, "'", NULL);
+ }
+
+ if(ctx->user)
+ {
+ ha_bufjoin(rq->buf);
+ ha_bufmcat(rq->buf, " user='", ctx->user, "'", NULL);
+ }
+
+ if(ctx->password)
+ {
+ ha_bufjoin(rq->buf);
+ ha_bufmcat(rq->buf, " password='", ctx->password, "'", NULL);
+ }
+
+ snprintf(num, 16, "%d", ctx->pgsql_timeout);
+ ha_bufjoin(rq->buf);
+ ha_bufmcat(rq->buf, " connect_timeout=", num, NULL);
+
+ return CHECK_RBUF(rq) ? NULL : ha_bufdata(rq->buf);
+}
+
static PGconn* get_pgsql_connection(const ha_request_t* rq, pgsql_context_t* ctx)
{
PGconn* pg;
+ const char* connstring;
int i;
ASSERT(ctx);
@@ -267,8 +306,13 @@ static PGconn* get_pgsql_connection(const ha_request_t* rq, pgsql_context_t* ctx
return NULL;
}
- pg = PQsetdbLogin(ctx->host, ctx->port, NULL, NULL, ctx->database,
- ctx->user, ctx->password);
+ connstring = make_pgsql_connstring(rq, ctx);
+ if(!connstring)
+ return NULL;
+
+ ha_messagex(rq, LOG_DEBUG, "connecting to postgres with: %s", connstring);
+
+ pg = PQconnectdb(connstring);
if(!pg)
{
ha_messagex(rq, LOG_CRIT, "internal error in postgres library");
@@ -653,7 +697,6 @@ int pgsql_config(ha_context_t* context, const char* name, const char* value)
else if(strcmp(name, "dbtimeout") == 0)
{
- /* TODO: Implement database timeouts */
return ha_confint(name, value, 0, 86400, &(ctx->pgsql_timeout));
}