X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=loadcfg.c;h=334f07f860cc0a620c400c0854f0bfe0401cc45e;hp=dd32234460920e6f30796cbc151f910f149b68ea;hb=71e1ccf869288acf3d482f1931ea747aaea3f255;hpb=4a7d8d337c2f34bd11206494a775cddabafe6be0 diff --git a/loadcfg.c b/loadcfg.c index dd322344..334f07f8 100644 --- a/loadcfg.c +++ b/loadcfg.c @@ -1,4 +1,4 @@ -const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.63 2007/04/09 18:11:36 fabiankeil Exp $"; +const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.68 2007/10/19 16:32:34 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/loadcfg.c,v $ @@ -35,6 +35,31 @@ const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.63 2007/04/09 18:11:36 fabiankeil * * Revisions : * $Log: loadcfg.c,v $ + * Revision 1.68 2007/10/19 16:32:34 fabiankeil + * Plug memory leak introduced with my last commit. + * + * Revision 1.67 2007/10/14 14:12:41 fabiankeil + * When in daemon mode, close stderr after the configuration file has been + * parsed the first time. If logfile isn't set, stop logging. Fixes BR#897436. + * + * Revision 1.66 2007/08/05 14:02:09 fabiankeil + * #1763173 from Stefan Huehner: declare unload_configfile() static. + * + * Revision 1.65 2007/07/21 11:51:36 fabiankeil + * As Hal noticed, checking dispatch_cgi() as the last cruncher + * looks like a bug if CGI requests are blocked unintentionally, + * so don't do it unless the user enabled the new config option + * "allow-cgi-request-crunching". + * + * Revision 1.64 2007/05/21 10:44:08 fabiankeil + * - Use strlcpy() instead of strcpy(). + * - Stop treating actions files special. Expect a complete file name + * (with or without path) like it's done for the rest of the files. + * Closes FR#588084. + * - Remove an unnecessary temporary memory allocation. + * - Don't log anything to the console when running as + * daemon and no errors occurred. + * * Revision 1.63 2007/04/09 18:11:36 fabiankeil * Don't mistake VC++'s _snprintf() for a snprintf() replacement. * @@ -486,6 +511,7 @@ static struct file_list *current_configfile = NULL; #define hash_actions_file 1196306641ul /* "actionsfile" */ #define hash_accept_intercepted_requests 1513024973ul /* "accept-intercepted-requests" */ #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_confdir 1978389ul /* "confdir" */ #define hash_debug 78263ul /* "debug" */ @@ -539,7 +565,7 @@ static void savearg(char *command, char *argument, struct configuration_spec * c * Returns : N/A * *********************************************************************/ -void unload_configfile (void * data) +static void unload_configfile (void * data) { struct configuration_spec * config = (struct configuration_spec *)data; struct forward_spec *cur_fwd = config->forward; @@ -645,6 +671,9 @@ void unload_current_config_file(void) * * Description : Load the config file and all parameters. * + * XXX: more than thousand lines long + * and thus in serious need of refactoring. + * * Parameters : None * * Returns : The configuration_spec, or NULL on error. @@ -660,6 +689,7 @@ struct configuration_spec * load_config(void) struct file_list *fs; unsigned long linenum = 0; int i; + char *logfile = NULL; if ( !check_file_changed(current_configfile, configfile, &fs)) { @@ -818,6 +848,20 @@ struct configuration_spec * load_config(void) config->admin_address = strdup(arg); continue; +/* ************************************************************************* + * allow-cgi-request-crunching + * *************************************************************************/ + case hash_allow_cgi_request_crunching: + if ((*arg != '\0') && (0 != atoi(arg))) + { + config->feature_flags |= RUNTIME_FEATURE_CGI_CRUNCHING; + } + else + { + config->feature_flags &= ~RUNTIME_FEATURE_CGI_CRUNCHING; + } + continue; + /* ************************************************************************* * buffer-limit n * *************************************************************************/ @@ -1261,8 +1305,14 @@ struct configuration_spec * load_config(void) * In logdir by default * *************************************************************************/ case hash_logfile : - freez(config->logfile); - config->logfile = no_daemon ? NULL : make_path(config->logdir, arg); + if (!no_daemon) + { + logfile = make_path(config->logdir, arg); + if (NULL == logfile) + { + log_error(LOG_LEVEL_FATAL, "Out of memory while creating logfile path"); + } + } continue; /* ************************************************************************* @@ -1563,13 +1613,28 @@ struct configuration_spec * load_config(void) fclose(configfp); + set_debug_level(config->debug); + + freez(config->logfile); + + if (!no_daemon) + { + if (NULL != logfile) + { + config->logfile = logfile; + init_error_log(Argv[0], config->logfile); + } + else + { + disable_logging(); + } + } + if (NULL == config->proxy_args) { log_error(LOG_LEVEL_FATAL, "Out of memory loading config - insufficient memory for config->proxy_args"); } - init_error_log(Argv[0], config->logfile, config->debug); - if (config->actions_file[0]) { add_loader(load_actions_file, config);