Catch-all for false-positives that are just TOO obvious to let go
[privoxy.git] / cgi.c
diff --git a/cgi.c b/cgi.c
index d0c224d..93af14b 100644 (file)
--- a/cgi.c
+++ b/cgi.c
@@ -1,4 +1,4 @@
-const char cgi_rcs[] = "$Id: cgi.c,v 1.117 2009/05/16 13:27:20 fabiankeil Exp $";
+const char cgi_rcs[] = "$Id: cgi.c,v 1.125 2009/06/14 14:37:08 fabiankeil Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/cgi.c,v $
@@ -815,15 +815,13 @@ jb_err get_number_param(struct client_state *csp,
  * Parameters  :
  *          1  :  csp = Current client state (buffers, headers, etc...)
  *          2  :  templatename = Which template should be used for the answer
- *          3  :  sys_err = system error number
  *
  * Returns     :  A http_response.  If we run out of memory, this
  *                will be cgi_error_memory().
  *
  *********************************************************************/
 struct http_response *error_response(struct client_state *csp,
-                                     const char *templatename,
-                                     int sys_err)
+                                     const char *templatename)
 {
    jb_err err;
    struct http_response *rsp;
@@ -856,7 +854,6 @@ struct http_response *error_response(struct client_state *csp,
    if (!err) err = map(exports, "host", 1, html_encode(csp->http->host), 0);
    if (!err) err = map(exports, "hostport", 1, html_encode(csp->http->hostport), 0);
    if (!err) err = map(exports, "path", 1, html_encode_and_free_original(path), 0);
-   if (!err) err = map(exports, "error", 1, html_encode_and_free_original(safe_strerror(sys_err)), 0);
    if (!err) err = map(exports, "protocol", 1, csp->http->ssl ? "https://" : "http://", 1); 
    if (!err)
    {
@@ -879,12 +876,6 @@ struct http_response *error_response(struct client_state *csp,
    if (!strcmp(templatename, "no-such-domain"))
    {
       rsp->status = strdup("404 No such domain");
-      if (rsp->status == NULL)
-      {
-         free_map(exports);
-         free_http_response(rsp);
-         return cgi_error_memory();
-      }
       rsp->reason = RSP_REASON_NO_SUCH_DOMAIN;
    }
    else if (!strcmp(templatename, "forwarding-failed"))
@@ -939,27 +930,38 @@ struct http_response *error_response(struct client_state *csp,
 
       if (!err) err = map(exports, "forwarding-type", 1, socks_type, 1);
       if (!err) err = map(exports, "error-message", 1, html_encode(csp->error_message), 0);
-
-      if (!err) rsp->status = strdup("503 Forwarding failure");
-      if ((rsp->status == NULL) || (NULL == csp->error_message) || err)
+      if ((NULL == csp->error_message) || err)
       {
          free_map(exports);
          free_http_response(rsp);
          return cgi_error_memory();
       }
+
+      rsp->status = strdup("503 Forwarding failure");
       rsp->reason = RSP_REASON_FORWARDING_FAILED;
    }
    else if (!strcmp(templatename, "connect-failed"))
    {
       rsp->status = strdup("503 Connect failed");
-      if (rsp->status == NULL)
-      {
-         free_map(exports);
-         free_http_response(rsp);
-         return cgi_error_memory();
-      }
       rsp->reason = RSP_REASON_CONNECT_FAILED;
    }
+   else if (!strcmp(templatename, "connection-timeout"))
+   {
+      rsp->status = strdup("504 Connection timeout");
+      rsp->reason = RSP_REASON_CONNECTION_TIMEOUT;
+   }
+   else if (!strcmp(templatename, "no-server-data"))
+   {
+      rsp->status = strdup("502 No data received from server or forwarder");
+      rsp->reason = RSP_REASON_NO_SERVER_DATA;
+   }
+
+   if (rsp->status == NULL)
+   {
+      free_map(exports);
+      free_http_response(rsp);
+      return cgi_error_memory();
+   }
 
    err = template_fill_for_cgi(csp, templatename, exports, rsp);
    if (err)
@@ -1360,7 +1362,7 @@ char *add_help_link(const char *item,
    string_join  (&result, string_toupper(item));
    string_append(&result, "\">");
    string_append(&result, item);
-   string_append(&result, "</a> ");
+   string_append(&result, "</a>");
 
    return result;
 }
@@ -1409,7 +1411,7 @@ void get_http_time(int time_offset, char *buf, size_t buffer_size)
    /* get and save the gmt */
 #if HAVE_GMTIME_R
    t = gmtime_r(&current_time, &dummy);
-#elif def MUTEX_LOCKS_AVAILABLE
+#elif defined(MUTEX_LOCKS_AVAILABLE)
    privoxy_mutex_lock(&gmtime_mutex);
    t = gmtime(&current_time);
    privoxy_mutex_unlock(&gmtime_mutex);
@@ -1465,7 +1467,7 @@ static void get_locale_time(char *buf, size_t buffer_size)
 
 #if HAVE_LOCALTIME_R
    timeptr = localtime_r(&current_time, &dummy);
-#elif def MUTEX_LOCKS_AVAILABLE
+#elif defined(MUTEX_LOCKS_AVAILABLE)
    privoxy_mutex_lock(&localtime_mutex);
    timeptr = localtime(&current_time);
    privoxy_mutex_unlock(&localtime_mutex);
@@ -1620,7 +1622,9 @@ struct http_response *finish_http_response(const struct client_state *csp, struc
       if (!err) err = enlist_unique_header(rsp->headers, "Date", buf);
       if (!strncmpic(rsp->status, "403", 3)
        || !strncmpic(rsp->status, "404", 3)
-       || !strncmpic(rsp->status, "503", 3))
+       || !strncmpic(rsp->status, "502", 3)
+       || !strncmpic(rsp->status, "503", 3)
+       || !strncmpic(rsp->status, "504", 3))
       {
          if (!err) err = enlist_unique_header(rsp->headers, "Last-Modified", "Wed, 08 Jun 1955 12:00:00 GMT");
       }