- Be a bit more descriptive about why CGI access
[privoxy.git] / loadcfg.c
index eb24cd6..dff7325 100644 (file)
--- a/loadcfg.c
+++ b/loadcfg.c
@@ -1,4 +1,4 @@
-const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.50 2006/07/18 14:48:46 david__schmidt Exp $";
+const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.58 2006/12/31 14:24:29 fabiankeil Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/loadcfg.c,v $
@@ -35,6 +35,48 @@ const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.50 2006/07/18 14:48:46 david__sch
  *
  * Revisions   :
  *    $Log: loadcfg.c,v $
+ *    Revision 1.58  2006/12/31 14:24:29  fabiankeil
+ *    Fix gcc43 compiler warnings.
+ *
+ *    Revision 1.57  2006/12/21 12:57:48  fabiankeil
+ *    Add config option "split-large-forms"
+ *    to work around the browser bug reported
+ *    in BR #1570678.
+ *
+ *    Revision 1.56  2006/12/17 17:04:51  fabiankeil
+ *    Move the <br> in the generated HTML for the config
+ *    options from the beginning of the string to its end.
+ *    Keeps the white space in balance.
+ *
+ *    Revision 1.55  2006/11/28 15:31:52  fabiankeil
+ *    Fix memory leak in case of config file reloads.
+ *
+ *    Revision 1.54  2006/10/21 16:04:22  fabiankeil
+ *    Modified kludge for win32 to make ming32 menu
+ *    "Options/Edit Filters" (sort of) work again.
+ *    Same limitations as for the action files apply.
+ *    Fixes BR 1567373.
+ *
+ *    Revision 1.53  2006/09/06 18:45:03  fabiankeil
+ *    Incorporate modified version of Roland Rosenfeld's patch to
+ *    optionally access the user-manual via Privoxy. Closes patch 679075.
+ *
+ *    Formatting changed to Privoxy style, added call to
+ *    cgi_error_no_template if the requested file doesn't
+ *    exist and modified check whether or not Privoxy itself
+ *    should serve the manual. Should work cross-platform now.
+ *
+ *    Revision 1.52  2006/09/06 10:43:32  fabiankeil
+ *    Added config option enable-remote-http-toggle
+ *    to specify if Privoxy should recognize special
+ *    headers (currently only X-Filter) to change its
+ *    behaviour. Disabled by default.
+ *
+ *    Revision 1.51  2006/09/06 09:23:37  fabiankeil
+ *    Make number of retries in case of forwarded-connect problems
+ *    a config file option (forwarded-connect-retries) and use 0 as
+ *    default.
+ *
  *    Revision 1.50  2006/07/18 14:48:46  david__schmidt
  *    Reorganizing the repository: swapping out what was HEAD (the old 3.1 branch)
  *    with what was really the latest development (the v_3_0_branch branch)
@@ -426,41 +468,44 @@ static struct file_list *current_configfile = NULL;
  * console and GUI specific options last).
  */
 
-#define hash_actions_file              1196306641ul /* "actionsfile" */
-#define hash_admin_address             4112573064ul /* "admin-address" */
-#define hash_buffer_limit              1881726070ul /* "buffer-limit */
-#define hash_confdir                      1978389ul /* "confdir" */
-#define hash_debug                          78263ul /* "debug" */
-#define hash_deny_access               1227333715ul /* "deny-access" */
-#define hash_enable_edit_actions       2517097536ul /* "enable-edit-actions" */
-#define hash_enable_remote_toggle      2979744683ul /* "enable-remote-toggle" */
-#define hash_filterfile                 250887266ul /* "filterfile" */
-#define hash_forward                      2029845ul /* "forward" */
-#define hash_forward_socks4            3963965521ul /* "forward-socks4" */
-#define hash_forward_socks4a           2639958518ul /* "forward-socks4a" */
-#define hash_forwarded_connect_retries  101465292ul /* "forwarded-connect-retries" */
-#define hash_jarfile                      2046641ul /* "jarfile" */
-#define hash_listen_address            1255650842ul /* "listen-address" */
-#define hash_logdir                        422889ul /* "logdir" */
-#define hash_logfile                      2114766ul /* "logfile" */
-#define hash_permit_access             3587953268ul /* "permit-access" */
-#define hash_proxy_info_url            3903079059ul /* "proxy-info-url" */
-#define hash_single_threaded           4250084780ul /* "single-threaded" */
-#define hash_suppress_blocklists       1948693308ul /* "suppress-blocklists" */
-#define hash_toggle                        447966ul /* "toggle" */
-#define hash_trust_info_url             430331967ul /* "trust-info-url" */
-#define hash_trustfile                   56494766ul /* "trustfile" */
-#define hash_usermanual                1416668518ul /* "user-manual" */
-#define hash_activity_animation        1817904738ul /* "activity-animation" */
-#define hash_close_button_minimizes    3651284693ul /* "close-button-minimizes" */
-#define hash_hide_console              2048809870ul /* "hide-console" */
-#define hash_log_buffer_size           2918070425ul /* "log-buffer-size" */
-#define hash_log_font_name             2866730124ul /* "log-font-name" */
-#define hash_log_font_size             2866731014ul /* "log-font-size" */
-#define hash_log_highlight_messages    4032101240ul /* "log-highlight-messages" */
-#define hash_log_max_lines             2868344173ul /* "log-max-lines" */
-#define hash_log_messages              2291744899ul /* "log-messages" */
-#define hash_show_on_task_bar           215410365ul /* "show-on-task-bar" */
+#define hash_actions_file                1196306641ul /* "actionsfile" */
+#define hash_accept_intercepted_requests 1513024973ul /* "accept-intercepted-requests" */
+#define hash_admin_address               4112573064ul /* "admin-address" */
+#define hash_buffer_limit                1881726070ul /* "buffer-limit */
+#define hash_confdir                        1978389ul /* "confdir" */
+#define hash_debug                            78263ul /* "debug" */
+#define hash_deny_access                 1227333715ul /* "deny-access" */
+#define hash_enable_edit_actions         2517097536ul /* "enable-edit-actions" */
+#define hash_enable_remote_toggle        2979744683ul /* "enable-remote-toggle" */
+#define hash_enable_remote_http_toggle    110543988ul /* "enable-remote-http-toggle" */
+#define hash_filterfile                   250887266ul /* "filterfile" */
+#define hash_forward                        2029845ul /* "forward" */
+#define hash_forward_socks4              3963965521ul /* "forward-socks4" */
+#define hash_forward_socks4a             2639958518ul /* "forward-socks4a" */
+#define hash_forwarded_connect_retries    101465292ul /* "forwarded-connect-retries" */
+#define hash_jarfile                        2046641ul /* "jarfile" */
+#define hash_listen_address              1255650842ul /* "listen-address" */
+#define hash_logdir                          422889ul /* "logdir" */
+#define hash_logfile                        2114766ul /* "logfile" */
+#define hash_permit_access               3587953268ul /* "permit-access" */
+#define hash_proxy_info_url              3903079059ul /* "proxy-info-url" */
+#define hash_single_threaded             4250084780ul /* "single-threaded" */
+#define hash_split_large_cgi_forms        671658948ul /* "split-large-cgi-forms" */
+#define hash_suppress_blocklists         1948693308ul /* "suppress-blocklists" */
+#define hash_toggle                          447966ul /* "toggle" */
+#define hash_trust_info_url               430331967ul /* "trust-info-url" */
+#define hash_trustfile                     56494766ul /* "trustfile" */
+#define hash_usermanual                  1416668518ul /* "user-manual" */
+#define hash_activity_animation          1817904738ul /* "activity-animation" */
+#define hash_close_button_minimizes      3651284693ul /* "close-button-minimizes" */
+#define hash_hide_console                2048809870ul /* "hide-console" */
+#define hash_log_buffer_size             2918070425ul /* "log-buffer-size" */
+#define hash_log_font_name               2866730124ul /* "log-font-name" */
+#define hash_log_font_size               2866731014ul /* "log-font-size" */
+#define hash_log_highlight_messages      4032101240ul /* "log-highlight-messages" */
+#define hash_log_max_lines               2868344173ul /* "log-max-lines" */
+#define hash_log_messages                2291744899ul /* "log-messages" */
+#define hash_show_on_task_bar             215410365ul /* "show-on-task-bar" */
 
 
 static void savearg(char *command, char *argument, struct configuration_spec * config);
@@ -525,6 +570,8 @@ void unload_configfile (void * data)
    {
       freez(config->actions_file_short[i]);
       freez(config->actions_file[i]);
+      freez(config->re_filterfile_short[i]);
+      freez(config->re_filterfile[i]);
    }
 
    freez(config->admin_address);
@@ -643,6 +690,9 @@ struct configuration_spec * load_config(void)
    config->usermanual                = strdup(USER_MANUAL_URL);
    config->proxy_args                = strdup("");
    config->forwarded_connect_retries = 0;
+   config->feature_flags            &= ~RUNTIME_FEATURE_CGI_TOGGLE;
+   config->feature_flags            &= ~RUNTIME_FEATURE_SPLIT_LARGE_FORMS;
+   config->feature_flags            &= ~RUNTIME_FEATURE_ACCEPT_INTERCEPTED_REQUESTS;
 
    if ((configfp = fopen(configfile, "r")) == NULL)
    {
@@ -694,7 +744,7 @@ struct configuration_spec * load_config(void)
       {
          if (ijb_isupper(*p))
          {
-            *p = ijb_tolower(*p);
+            *p = (char)ijb_tolower(*p);
          }
       }
 
@@ -732,6 +782,19 @@ struct configuration_spec * load_config(void)
             config->actions_file[i] = make_path(config->confdir, p);
             free(p);
             continue;
+/* *************************************************************************
+ * accept-intercepted-requests
+ * *************************************************************************/
+         case hash_accept_intercepted_requests:
+            if ((*arg != '\0') && (0 != atoi(arg)))
+            {
+               config->feature_flags |= RUNTIME_FEATURE_ACCEPT_INTERCEPTED_REQUESTS;
+            }
+            else
+            {
+               config->feature_flags &= ~RUNTIME_FEATURE_ACCEPT_INTERCEPTED_REQUESTS;
+            }
+            continue;
 
 /* *************************************************************************
  * admin-address email-address
@@ -745,7 +808,7 @@ struct configuration_spec * load_config(void)
  * buffer-limit n
  * *************************************************************************/
          case hash_buffer_limit :
-            config->buffer_limit = (size_t) 1024 * atoi(arg);
+            config->buffer_limit = (size_t)(1024 * atoi(arg));
             continue;
 
 /* *************************************************************************
@@ -871,6 +934,20 @@ struct configuration_spec * load_config(void)
             continue;
 #endif /* def FEATURE_CGI_EDIT_ACTIONS */
 
+/* *************************************************************************
+ * enable-remote-http-toggle 0|1
+ * *************************************************************************/
+         case hash_enable_remote_http_toggle:
+            if ((*arg != '\0') && (0 != atoi(arg)))
+            {
+               config->feature_flags |= RUNTIME_FEATURE_HTTP_TOGGLE;
+            }
+            else
+            {
+               config->feature_flags &= ~RUNTIME_FEATURE_HTTP_TOGGLE;
+            }
+            continue;
+
 /* *************************************************************************
  * filterfile file-name
  * In confdir by default.
@@ -1256,6 +1333,20 @@ struct configuration_spec * load_config(void)
             config->multi_threaded = 0;
             continue;
 
+/* *************************************************************************
+ * split-large-cgi-forms
+ * *************************************************************************/
+         case hash_split_large_cgi_forms :
+            if ((*arg != '\0') && (0 != atoi(arg)))
+            {
+               config->feature_flags |= RUNTIME_FEATURE_SPLIT_LARGE_FORMS;
+            }
+            else
+            {
+               config->feature_flags &= ~RUNTIME_FEATURE_SPLIT_LARGE_FORMS;
+            }
+            continue;
+
 /* *************************************************************************
  * toggle (0|1)
  * *************************************************************************/
@@ -1526,7 +1617,7 @@ struct configuration_spec * load_config(void)
 
    g_default_actions_file  = config->actions_file[1]; /* FIXME Hope this is default.action */
    g_user_actions_file = config->actions_file[2]; /* FIXME Hope this is user.action */
-   g_re_filterfile    = config->re_filterfile;
+   g_re_filterfile    = config->re_filterfile[0]; /* FIXME Hope this is default.filter */
 
 #ifdef FEATURE_TRUST
    g_trustfile        = config->trustfile;
@@ -1613,8 +1704,18 @@ static void savearg(char *command, char *argument, struct configuration_spec * c
     * Add config option name embedded in
     * link to it's section in the user-manual
     */
-   buf = strdup("\n<br><a href=\"");
-   string_append(&buf, config->usermanual);
+   buf = strdup("\n<a href=\"");
+   if (!strncmpic(config->usermanual, "file://", 7) ||
+       !strncmpic(config->usermanual, "http", 4))
+   {
+      string_append(&buf, config->usermanual);
+   }
+   else
+   {
+      string_append(&buf, "http://");
+      string_append(&buf, CGI_SITE_2_HOST);
+      string_append(&buf, "/user-manual/");
+   }
    string_append(&buf, CONFIG_HELP_PREFIX);
    string_join  (&buf, string_toupper(command));
    string_append(&buf, "\">");
@@ -1651,6 +1752,7 @@ static void savearg(char *command, char *argument, struct configuration_spec * c
       }
    }
 
+   string_append(&buf, "<br>");
    string_join(&config->proxy_args, buf);
 }