Reorganizing the repository: swapping out what was HEAD (the old 3.1 branch)
[privoxy.git] / cgisimple.c
similarity index 93%
rename from src/cgisimple.c
rename to cgisimple.c
index 92d0e3f..3db9ab1 100644 (file)
@@ -1,7 +1,7 @@
-const char cgisimple_rcs[] = "$Id: cgisimple.c,v 2.2 2002/12/28 03:58:19 david__schmidt Exp $";
+const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.35.2.7 2006/01/29 23:10:56 david__schmidt Exp $";
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/cgisimple.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/cgisimple.c,v $
  *
  * Purpose     :  Simple CGIs to get information about Privoxy's
  *                status.
@@ -36,15 +36,33 @@ const char cgisimple_rcs[] = "$Id: cgisimple.c,v 2.2 2002/12/28 03:58:19 david__
  *
  * Revisions   :
  *    $Log: cgisimple.c,v $
- *    Revision 2.2  2002/12/28 03:58:19  david__schmidt
- *    Initial drop of dashboard instrumentation - enabled with
- *    --enable-activity-console
+ *    Revision 1.35.2.7  2006/01/29 23:10:56  david__schmidt
+ *    Multiple filter file support
  *
- *    Revision 2.1  2002/07/04 14:35:05  oes
+ *    Revision 1.35.2.6  2005/07/04 03:13:43  david__schmidt
+ *    Undo some damaging memory leak patches
+ *
+ *    Revision 1.35.2.5  2005/05/07 21:50:55  david__schmidt
+ *    A few memory leaks plugged (mostly on error paths)
+ *
+ *    Revision 1.35.2.4  2005/04/04 02:21:24  david__schmidt
+ *    Another instance of:
+ *    Don't show "Edit" buttons #ifndef FEATURE_CGI_EDIT_ACTIONS
+ *    Thanks to Magnus Holmgren for the patch
+ *
+ *    Revision 1.35.2.3  2003/12/17 16:34:15  oes
+ *     - Prevent line wrap beween "View/Edit" link buttons on status page
+ *     - Some (mostly irrelevant) fixes for Out-of-mem-case handling
+ *
+ *    Revision 1.35.2.2  2003/04/03 13:48:28  oes
+ *    Don't show "Edit" buttons #ifndef FEATURE_CGI_EDIT_ACTIONS
+ *
+ *    Revision 1.35.2.1  2002/07/04 15:02:38  oes
  *    Added ability to send redirects to send-banner CGI, so that it can completely mimic the image blocking action if called with type=auto
  *
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.35.2.1  2002/07/01 17:32:04  morcego
+ *    Applying patch from Andreas as provided by Hal on the list.
+ *    Message-ID: <20020701121218.V1606@feenix.burgiss.net>
  *
  *    Revision 1.35  2002/05/12 21:44:44  jongfoster
  *    Adding amiga.[ch] revision information, if on an amiga.
@@ -442,7 +460,6 @@ jb_err cgi_send_banner(struct client_state *csp,
                        const struct map *parameters)
 {
    char imagetype = lookup(parameters, "type")[0];
-   char *image_mimetype = BUILTIN_IMAGE_MIMETYPE;
 
    /*
     * If type is auto, then determine the right thing
@@ -474,10 +491,6 @@ jb_err cgi_send_banner(struct client_state *csp,
          {
             imagetype = 'p';
          }
-         else if (0 == strcmpic(p, "custom"))
-         {
-            imagetype = 'c';
-         }
 
          /*
           * If the action is to call this CGI, determine
@@ -530,12 +543,6 @@ jb_err cgi_send_banner(struct client_state *csp,
          rsp->body = bindup(image_blank_data, image_blank_length);
          rsp->content_length = image_blank_length;
       }
-      else if (imagetype == 'c')
-      {
-         rsp->body = bindup(csp->config->image_blocker_data, csp->config->image_blocker_length);
-         rsp->content_length = csp->config->image_blocker_length;
-         image_mimetype = csp->config->image_blocker_format;
-      }
       else
       {
          rsp->body = bindup(image_pattern_data, image_pattern_length);
@@ -546,11 +553,7 @@ jb_err cgi_send_banner(struct client_state *csp,
       {
          return JB_ERR_MEMORY;
       }
-      if (enlist(rsp->headers, "Content-Type: "))
-      {
-         return JB_ERR_MEMORY;
-      }
-      if (enlist(rsp->headers, image_mimetype))
+      if (enlist(rsp->headers, "Content-Type: " BUILTIN_IMAGE_MIMETYPE))
       {
          return JB_ERR_MEMORY;
       }
@@ -757,7 +760,7 @@ jb_err cgi_show_status(struct client_state *csp,
    switch (*(lookup(parameters, "file")))
    {
    case 'a':
-      if (!get_number_param(csp, parameters, "index", &i) && i < MAX_ACTION_FILES && csp->actions_list[i])
+      if (!get_number_param(csp, parameters, "index", &i) && i < MAX_AF_FILES && csp->actions_list[i])
       {
          filename = csp->actions_list[i]->filename;
          file_description = "Actions File";
@@ -765,9 +768,9 @@ jb_err cgi_show_status(struct client_state *csp,
       break;
 
    case 'f':
-      if (csp->rlist)
+      if (!get_number_param(csp, parameters, "index", &i) && i < MAX_AF_FILES && csp->rlist[i])
       {
-         filename = csp->rlist->filename;
+         filename = csp->rlist[i]->filename;
          file_description = "Filter File";
       }
       break;
@@ -882,19 +885,19 @@ jb_err cgi_show_status(struct client_state *csp,
     * FIXME: Shouldn't include hardwired HTML here, use line template instead!
     */
    s = strdup("");
-   for (i = 0; i < MAX_ACTION_FILES; i++)
+   for (i = 0; i < MAX_AF_FILES; i++)
    {
       if (((fl = csp->actions_list[i]) != NULL) && ((b = fl->f) != NULL))
       {
          if (!err) err = string_append(&s, "<tr><td>");
          if (!err) err = string_join(&s, html_encode(csp->actions_list[i]->filename));
-         snprintf(buf, 100, "</td><td class=\"buttons\"><a href=\"/show-status?file=actions&index=%d\">View</a> ", i);
+         snprintf(buf, 100, "</td><td class=\"buttons\"><a href=\"/show-status?file=actions&index=%d\">View</a>", i);
          if (!err) err = string_append(&s, buf);
 
 #ifdef FEATURE_CGI_EDIT_ACTIONS
          if (NULL == strstr(csp->actions_list[i]->filename, "standard.action") && NULL != csp->config->actions_file_short[i])
          {
-            snprintf(buf, 100, "<a href=\"/edit-actions-list?f=%s\">Edit</a>", csp->config->actions_file_short[i]);
+            snprintf(buf, 100, "&nbsp;&nbsp;<a href=\"/edit-actions-list?f=%s\">Edit</a>", csp->config->actions_file_short[i]);
             if (!err) err = string_append(&s, buf);
          }
 #endif
@@ -911,13 +914,29 @@ jb_err cgi_show_status(struct client_state *csp,
       if (!err) err = map(exports, "actions-filenames", 1, "<tr><td>None specified</td></tr>", 1);
    }
 
-   if (csp->rlist)
+   /* 
+    * List all re_filterfiles in use, together with view options.
+    * FIXME: Shouldn't include hardwired HTML here, use line template instead!
+    */
+   s = strdup("");
+   for (i = 0; i < MAX_AF_FILES; i++)
    {
-      if (!err) err = map(exports, "re-filter-filename", 1, html_encode(csp->rlist->filename), 0);
+      if (((fl = csp->rlist[i]) != NULL) && ((b = fl->f) != NULL))
+      {
+         if (!err) err = string_append(&s, "<tr><td>");
+         if (!err) err = string_join(&s, html_encode(csp->rlist[i]->filename));
+         snprintf(buf, 100, "</td><td class=\"buttons\"><a href=\"/show-status?file=filter&index=%d\">View</a>", i);
+         if (!err) err = string_append(&s, buf);
+         if (!err) err = string_append(&s, "</td></tr>\n");
+      }
+   }
+   if (*s != '\0')   
+   {
+      if (!err) err = map(exports, "re-filter-filename", 1, s, 0);
    }
    else
    {
-      if (!err) err = map(exports, "re-filter-filename", 1, "None specified", 1);
+      if (!err) err = map(exports, "re-filter-filename", 1, "<tr><td>None specified</td></tr>", 1);
       if (!err) err = map_block_killer(exports, "have-filterfile");
    }
 
@@ -1094,6 +1113,7 @@ jb_err cgi_show_url_info(struct client_state *csp,
 
       if (err == JB_ERR_MEMORY)
       {
+         free_http_request(url_to_query);
          free_current_action(action);
          free_map(exports);
          return JB_ERR_MEMORY;
@@ -1106,6 +1126,7 @@ jb_err cgi_show_url_info(struct client_state *csp,
          if (!err) err = map(exports, "final", 1, lookup(exports, "default"), 1);
 
          free_current_action(action);
+         free_http_request(url_to_query);
 
          if (err)
          {
@@ -1125,13 +1146,14 @@ jb_err cgi_show_url_info(struct client_state *csp,
          {
             free_current_action(action);
             free_map(exports);
+            free_http_request(url_to_query);
             return JB_ERR_MEMORY;
          }
       }
 
       matches = strdup("<table class=\"transparent\">");
 
-      for (i = 0; i < MAX_ACTION_FILES; i++)
+      for (i = 0; i < MAX_AF_FILES; i++)
       {
          if (NULL == csp->config->actions_file_short[i]
              || !strcmp(csp->config->actions_file_short[i], "standard")) continue;
@@ -1147,9 +1169,13 @@ jb_err cgi_show_url_info(struct client_state *csp,
                string_join  (&matches, html_encode(csp->config->actions_file_short[i]));
                snprintf(buf, 150, ".action <a class=\"cmd\" href=\"/show-status?file=actions&index=%d\">", i);
                string_append(&matches, buf);
-               string_append(&matches, "View</a> <a class=\"cmd\" href=\"/edit-actions-list?f=");
+               string_append(&matches, "View</a>");
+#ifdef FEATURE_CGI_EDIT_ACTIONS
+               string_append(&matches, " <a class=\"cmd\" href=\"/edit-actions-list?f=");
                string_join  (&matches, html_encode(csp->config->actions_file_short[i]));
-               string_append(&matches, "\">Edit</a></th></tr>\n");
+               string_append(&matches, "\">Edit</a>");
+#endif
+               string_append(&matches, "</th></tr>\n");
 
                hits = 0;
                b = b->next;
@@ -1434,9 +1460,6 @@ static char *show_rcs(void)
    SHOW_RCS(filters_rcs)
    SHOW_RCS(gateway_h_rcs)
    SHOW_RCS(gateway_rcs)
-#ifdef FEATURE_ACTIVITY_CONSOLE
-   SHOW_RCS(ipc_h_rcs)
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
    SHOW_RCS(jbsockets_h_rcs)
    SHOW_RCS(jbsockets_rcs)
    SHOW_RCS(jcc_h_rcs)
@@ -1460,10 +1483,6 @@ static char *show_rcs(void)
    SHOW_RCS(project_h_rcs)
    SHOW_RCS(ssplit_h_rcs)
    SHOW_RCS(ssplit_rcs)
-#ifdef FEATURE_ACTIVITY_CONSOLE
-   SHOW_RCS(stats_h_rcs)
-   SHOW_RCS(stats_rcs)
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
    SHOW_RCS(urlmatch_h_rcs)
    SHOW_RCS(urlmatch_rcs)
 #ifdef _WIN32