]> granicus.if.org Git - pgbouncer/commitdiff
New config parameter: ignore_startup_parameters
authorMarko Kreen <markokr@gmail.com>
Wed, 25 Jun 2008 17:06:34 +0000 (17:06 +0000)
committerMarko Kreen <markokr@gmail.com>
Wed, 25 Jun 2008 17:06:34 +0000 (17:06 +0000)
Can be used to allow clients issue random parameters.

Mostly needed to handle JDBC extra_float_digits braindamage.

doc/config.txt
etc/pgbouncer.ini
include/bouncer.h
src/client.c
src/main.c

index 25c9a6a6a82bf9fd77a96273da3de4ce1513b281..116573cefc91dd8bb81e4c3489ce4c83049561c4 100644 (file)
@@ -145,6 +145,16 @@ achieving uniform load.
 
 Default: 0
 
+==== ignore_startup_parameters ====
+
+By default, PgBouncer allows only parameters it can keep track of in startup
+packets - `client_encoding`, `datestyle`, `timezone` and `standard_conforming_strings`.
+
+All others raise error.  To allow but ignore others too, they can be specified here,
+so that pgbouncer knows that they are handled by admin and it can ignore them.
+
+Default: empty
+
 === Log settings ===
 
 ==== syslog ====
index fef3bdcdec16a2d5a2813b6ca868910ae5be9853..95d6a8a32afcf50b885e861df3b4e1024750197b 100644 (file)
@@ -69,6 +69,12 @@ pool_mode = session
 ;
 server_reset_query = 
 
+;
+; Comma-separated list of parameters to ignore when given
+; in startup packet.
+;
+;ignore_startup_parameters = extra_float_digits
+
 ;
 ; When taking idle server into use, this query is ran first.
 ;   SELECT 1
index 83cd1a5a1a2728ab4b9fb70e79c087916e74a0db..608472a127739d34624411ba325a0a42d8812d48 100644 (file)
@@ -324,6 +324,8 @@ extern char *cf_auth_file;
 extern char *cf_logfile;
 extern char *cf_pidfile;
 
+extern char *cf_ignore_startup_params;
+
 extern char *cf_admin_users;
 extern char *cf_stats_users;
 extern int cf_stats_period;
index 5bd508743856acf8a557cf59a2e99f250ea995ce..bda55b71127f1d651e61fcadb1c6943a80bf7dfe 100644 (file)
@@ -113,7 +113,10 @@ static bool decide_startup_pool(PgSocket *client, PktHdr *pkt)
                        username = val;
                else if (varcache_set(&client->vars, key, val))
                        slog_debug(client, "got var: %s=%s", key, val);
-               else {
+               else if (strlist_contains(cf_ignore_startup_params, key)) {
+                       slog_debug(client, "ignoring startup parameter: %s=%s", key, val);
+               } else {
+                       slog_warning(client, "unsupported startup parameter: %s=%s", key, val);
                        disconnect_client(client, true, "Unknown startup parameter");
                        return false;
                }
index d2c1a8ce0895e9b2180683ab75207d3d068b7179..f19d147979f090db156cfce1bdafe99f8134b747 100644 (file)
@@ -94,6 +94,8 @@ char *cf_server_check_query = "select 1";
 usec_t cf_server_check_delay = 30 * USEC;
 int cf_server_round_robin = 0;
 
+char *cf_ignore_startup_params = "";
+
 usec_t cf_server_lifetime = 60*60*USEC;
 usec_t cf_server_idle_timeout = 10*60*USEC;
 usec_t cf_server_connect_timeout = 15*USEC;
@@ -149,6 +151,7 @@ ConfElem bouncer_params[] = {
 {"server_login_retry", true, CF_TIME, &cf_server_login_retry},
 {"server_round_robin", true, CF_INT, &cf_server_round_robin},
 {"suspend_timeout",    true, CF_TIME, &cf_suspend_timeout},
+{"ignore_startup_parameters", true, CF_STR, &cf_ignore_startup_params},
 
 {"pkt_buf",            false, CF_INT, &cf_sbuf_len},
 {"tcp_defer_accept",   true, {cf_get_int, set_defer_accept}, &cf_tcp_defer_accept},