-const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.110 2010/07/21 14:29:59 fabiankeil Exp $";
+const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.112 2011/03/03 14:38:36 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/loadcfg.c,v $
#define hash_admin_address 4112573064ul /* "admin-address" */
#define hash_allow_cgi_request_crunching 258915987ul /* "allow-cgi-request-crunching" */
#define hash_buffer_limit 1881726070ul /* "buffer-limit */
+#define hash_compression_level 2464423563ul /* "compression-level" */
#define hash_confdir 1978389ul /* "confdir" */
#define hash_connection_sharing 1348841265ul /* "connection-sharing" */
#define hash_debug 78263ul /* "debug" */
*********************************************************************/
struct configuration_spec * load_config(void)
{
- char buf[BUFFER_SIZE];
+ char *buf = NULL;
char *p, *q;
FILE *configfp = NULL;
struct configuration_spec * config = NULL;
config->feature_flags &= ~RUNTIME_FEATURE_SPLIT_LARGE_FORMS;
config->feature_flags &= ~RUNTIME_FEATURE_ACCEPT_INTERCEPTED_REQUESTS;
config->feature_flags &= ~RUNTIME_FEATURE_EMPTY_DOC_RETURNS_OK;
+#ifdef FEATURE_COMPRESSION
+ /*
+ * XXX: Run some benchmarks to see if there are better default values.
+ */
+ config->compression_level = 1;
+#endif
configfp = fopen(configfile, "r");
if (NULL == configfp)
/* Never get here - LOG_LEVEL_FATAL causes program exit */
}
- while (read_config_line(buf, sizeof(buf), configfp, &linenum) != NULL)
+ while (read_config_line(configfp, &linenum, &buf) != NULL)
{
char cmd[BUFFER_SIZE];
char arg[BUFFER_SIZE];
}
/* Copy the argument into arg */
- strlcpy(arg, p, sizeof(arg));
+ if (strlcpy(arg, p, sizeof(arg)) >= sizeof(arg))
+ {
+ log_error(LOG_LEVEL_FATAL, "Config line too long: %s", buf);
+ }
/* Should never happen, but check this anyway */
if (*cmd == '\0')
{
+ freez(buf);
continue;
}
config->confdir = make_path( NULL, arg);
break;
+/* *************************************************************************
+ * compression-level 0-9
+ * *************************************************************************/
+#ifdef FEATURE_COMPRESSION
+ case hash_compression_level :
+ if (*arg != '\0')
+ {
+ int compression_level = atoi(arg);
+ if (-1 <= compression_level && compression_level <= 9)
+ {
+ config->compression_level = compression_level;;
+ }
+ else
+ {
+ log_error(LOG_LEVEL_FATAL,
+ "Invalid compression-level value: %s", arg);
+ }
+ }
+ else
+ {
+ log_error(LOG_LEVEL_FATAL,
+ "Invalid compression-level directive. Compression value missing");
+ }
+ break;
+#endif
+
/* *************************************************************************
* connection-sharing (0|1)
* *************************************************************************/
/* Save the argument for the show-status page. */
savearg(cmd, arg, config);
-
+ freez(buf);
} /* end while ( read_config_line(...) ) */
fclose(configfp);