From 93b60a3850c1e8631ca91a6f9902eccc8d5bf9ee Mon Sep 17 00:00:00 2001 From: Cody Cutrer Date: Thu, 28 Feb 2013 08:54:04 -0700 Subject: [PATCH] fix auth_user with session pooling the auth_user pool wasn't releasing the server conn, so the client would end up connected to the db as the auth_user --- include/bouncer.h | 1 + src/client.c | 1 + src/server.c | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/include/bouncer.h b/include/bouncer.h index bfeb0b2..4679cf2 100644 --- a/include/bouncer.h +++ b/include/bouncer.h @@ -311,6 +311,7 @@ struct PgSocket { bool close_needed:1; /* server: this socket must be closed ASAP */ bool setting_vars:1; /* server: setting client vars */ bool exec_on_connect:1; /* server: executing connect_query */ + bool resetting:1; /* server: executing reset query from auth login; don't release on flush */ bool wait_for_welcome:1;/* client: no server yet in pool, cannot send welcome msg */ bool wait_for_user_conn:1;/* client: waiting for auth_conn server connection */ diff --git a/src/client.c b/src/client.c index 4ea6d72..66bb46e 100644 --- a/src/client.c +++ b/src/client.c @@ -288,6 +288,7 @@ bool handle_auth_response(PgSocket *client, PktHdr *pkt) { disconnect_client(client, true, "No such user"); } else { slog_noise(client, "auth query complete"); + client->link->resetting = true; sbuf_continue(&client->sbuf); } return true; diff --git a/src/server.c b/src/server.c index 9a1e3e9..bbc6982 100644 --- a/src/server.c +++ b/src/server.c @@ -432,7 +432,8 @@ bool server_proto(SBuf *sbuf, SBufEvent evtype, struct MBuf *data) break; } - if (pool_pool_mode(pool) != POOL_SESSION || server->state == SV_TESTED) { + if (pool_pool_mode(pool) != POOL_SESSION || server->state == SV_TESTED || server->resetting) { + server->resetting = false; switch (server->state) { case SV_ACTIVE: case SV_TESTED: -- 2.39.5