On Fri, Oct 29, 2010 at 19:56, Tom Lane <t...@sss.pgh.pa.us> wrote: > Magnus Hagander <mag...@hagander.net> writes: >> On Fri, Oct 29, 2010 at 10:01, Josh Berkus <j...@agliodbs.com> wrote: >>> Mind you, we *also* need a doc patch. ("This parameter is only available if >>> PostgreSQL was built with SSL support"). > >> Actually, I think it'd be more user friendly to make the parameter >> still exist and be a no-op (maybe show the value NULL?) on non-SSL >> enabled builds. Same goes for all other parameters that depend on a >> specific compile flag. That would make life easier on automated tools >> *and* on people sitting down at a new installation. > > Yeah, we're a bit schizophrenic about this. Some parameters still > exist, but can't be set to any value but "disabled", when the relevant > feature wasn't compiled. Others just aren't there. > > It takes code space and work to make a parameter be present but behave > differently if disabled. I don't think that we should institute a > blanket policy of requiring that to happen; in particular, there are a > number of debug-type parameters for which I argue that it's not worth > the trouble. But for user-facing parameters I agree we should do it, > and ssl_ciphers is one of those.
Here's a patch that does this for HEAD. AFAICT, only ssl_ciphers and the syslog parameters are actually "user facing parameters" - all the other ifdef'ed out ones are debug-style parameters. > In any case, a doc patch would be the right thing for the back branches. I can look at this too (yes, I know we just wrapped, but I'm working down the backlog :S). You mean something as simple as "this parameter is unavailable if the server was not compiled with support for SSL"? -- Magnus Hagander Me: http://www.hagander.net/ Work: http://www.redpill-linpro.com/
*** a/src/backend/libpq/be-secure.c --- b/src/backend/libpq/be-secure.c *************** *** 103,112 **** int ssl_renegotiation_limit; #ifdef USE_SSL static SSL_CTX *SSL_context = NULL; static bool ssl_loaded_verify_locations = false; /* GUC variable controlling SSL cipher list */ char *SSLCipherSuites = NULL; - #endif /* ------------------------------------------------------------ */ /* Hardcoded values */ --- 103,112 ---- #ifdef USE_SSL static SSL_CTX *SSL_context = NULL; static bool ssl_loaded_verify_locations = false; + #endif /* GUC variable controlling SSL cipher list */ char *SSLCipherSuites = NULL; /* ------------------------------------------------------------ */ /* Hardcoded values */ *** a/src/backend/utils/misc/guc.c --- b/src/backend/utils/misc/guc.c *************** *** 128,133 **** extern char *temp_tablespaces; --- 128,134 ---- extern bool synchronize_seqscans; extern bool fullPageWrites; extern int ssl_renegotiation_limit; + extern char *SSLCipherSuites; #ifdef TRACE_SORT extern bool trace_sort; *************** *** 139,148 **** extern bool trace_syncscan; extern bool optimize_bounded_sort; #endif - #ifdef USE_SSL - extern char *SSLCipherSuites; - #endif - static void set_config_sourcefile(const char *name, char *sourcefile, int sourceline); --- 140,145 ---- *************** *** 151,162 **** static const char *assign_log_destination(const char *value, #ifdef HAVE_SYSLOG static int syslog_facility = LOG_LOCAL0; static bool assign_syslog_facility(int newval, bool doit, GucSource source); static const char *assign_syslog_ident(const char *ident, bool doit, GucSource source); - #endif static bool assign_session_replication_role(int newval, bool doit, GucSource source); --- 148,161 ---- #ifdef HAVE_SYSLOG static int syslog_facility = LOG_LOCAL0; + #else + static int syslog_facility = 0; + #endif static bool assign_syslog_facility(int newval, bool doit, GucSource source); static const char *assign_syslog_ident(const char *ident, bool doit, GucSource source); static bool assign_session_replication_role(int newval, bool doit, GucSource source); *************** *** 280,287 **** static const struct config_enum_entry session_replication_role_options[] = { {NULL, 0, false} }; - #ifdef HAVE_SYSLOG static const struct config_enum_entry syslog_facility_options[] = { {"local0", LOG_LOCAL0, false}, {"local1", LOG_LOCAL1, false}, {"local2", LOG_LOCAL2, false}, --- 279,286 ---- {NULL, 0, false} }; static const struct config_enum_entry syslog_facility_options[] = { + #ifdef HAVE_SYSLOG {"local0", LOG_LOCAL0, false}, {"local1", LOG_LOCAL1, false}, {"local2", LOG_LOCAL2, false}, *************** *** 290,298 **** static const struct config_enum_entry syslog_facility_options[] = { {"local5", LOG_LOCAL5, false}, {"local6", LOG_LOCAL6, false}, {"local7", LOG_LOCAL7, false}, {NULL, 0} }; - #endif static const struct config_enum_entry track_function_options[] = { {"none", TRACK_FUNC_OFF, false}, --- 289,299 ---- {"local5", LOG_LOCAL5, false}, {"local6", LOG_LOCAL6, false}, {"local7", LOG_LOCAL7, false}, + #else + {"none", 0, false}, + #endif {NULL, 0} }; static const struct config_enum_entry track_function_options[] = { {"none", TRACK_FUNC_OFF, false}, *************** *** 410,418 **** int tcp_keepalives_count; */ static char *log_destination_string; - #ifdef HAVE_SYSLOG static char *syslog_ident_str; - #endif static bool phony_autocommit; static bool session_auth_is_superuser; static double phony_random_seed; --- 411,417 ---- *************** *** 2531,2537 **** static struct config_string ConfigureNamesString[] = "postgresql-%Y-%m-%d_%H%M%S.log", NULL, NULL }, - #ifdef HAVE_SYSLOG { {"syslog_ident", PGC_SIGHUP, LOGGING_WHERE, gettext_noop("Sets the program name used to identify PostgreSQL " --- 2530,2535 ---- *************** *** 2541,2547 **** static struct config_string ConfigureNamesString[] = &syslog_ident_str, "postgres", assign_syslog_ident, NULL }, - #endif { {"TimeZone", PGC_USERSET, CLIENT_CONN_LOCALE, --- 2539,2544 ---- *************** *** 2680,2686 **** static struct config_string ConfigureNamesString[] = "pg_catalog.simple", assignTSCurrentConfig, NULL }, - #ifdef USE_SSL { {"ssl_ciphers", PGC_POSTMASTER, CONN_AUTH_SECURITY, gettext_noop("Sets the list of allowed SSL ciphers."), --- 2677,2682 ---- *************** *** 2688,2696 **** static struct config_string ConfigureNamesString[] = GUC_SUPERUSER_ONLY }, &SSLCipherSuites, ! "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH", NULL, NULL }, - #endif /* USE_SSL */ { {"application_name", PGC_USERSET, LOGGING_WHAT, --- 2684,2696 ---- GUC_SUPERUSER_ONLY }, &SSLCipherSuites, ! #ifdef USE_SSL ! "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH", ! #else ! "none", ! #endif ! NULL, NULL }, { {"application_name", PGC_USERSET, LOGGING_WHAT, *************** *** 2807,2822 **** static struct config_enum ConfigureNamesEnum[] = LOGSTMT_NONE, log_statement_options, NULL, NULL }, - #ifdef HAVE_SYSLOG { {"syslog_facility", PGC_SIGHUP, LOGGING_WHERE, gettext_noop("Sets the syslog \"facility\" to be used when syslog enabled."), NULL }, &syslog_facility, ! LOG_LOCAL0, syslog_facility_options, assign_syslog_facility, NULL ! }, #endif { {"session_replication_role", PGC_SUSET, CLIENT_CONN_STATEMENT, --- 2807,2825 ---- LOGSTMT_NONE, log_statement_options, NULL, NULL }, { {"syslog_facility", PGC_SIGHUP, LOGGING_WHERE, gettext_noop("Sets the syslog \"facility\" to be used when syslog enabled."), NULL }, &syslog_facility, ! #ifdef HAVE_SYSLOG ! LOG_LOCAL0, ! #else ! 0, #endif + syslog_facility_options, assign_syslog_facility, NULL + }, { {"session_replication_role", PGC_SUSET, CLIENT_CONN_STATEMENT, *************** *** 7637,7650 **** assign_log_destination(const char *value, bool doit, GucSource source) return value; } - #ifdef HAVE_SYSLOG - static bool assign_syslog_facility(int newval, bool doit, GucSource source) { if (doit) set_syslog_parameters(syslog_ident_str ? syslog_ident_str : "postgres", newval); return true; } --- 7640,7654 ---- return value; } static bool assign_syslog_facility(int newval, bool doit, GucSource source) { + #ifdef HAVE_SYSLOG if (doit) set_syslog_parameters(syslog_ident_str ? syslog_ident_str : "postgres", newval); + #endif + /* Without syslog support, just ignore it */ return true; } *************** *** 7652,7663 **** assign_syslog_facility(int newval, bool doit, GucSource source) static const char * assign_syslog_ident(const char *ident, bool doit, GucSource source) { if (doit) set_syslog_parameters(ident, syslog_facility); return ident; } - #endif /* HAVE_SYSLOG */ static bool --- 7656,7669 ---- static const char * assign_syslog_ident(const char *ident, bool doit, GucSource source) { + #ifdef HAVE_SYSLOG if (doit) set_syslog_parameters(ident, syslog_facility); + #endif + /* Without syslog support, it will always be set to "none", so ignore */ return ident; } static bool
-- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs