-const char cgi_rcs[] = "$Id: cgi.c,v 1.91 2007/01/27 13:09:16 fabiankeil Exp $";
+const char cgi_rcs[] = "$Id: cgi.c,v 1.92 2007/01/28 13:41:17 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/cgi.c,v $
*
* Revisions :
* $Log: cgi.c,v $
+ * Revision 1.92 2007/01/28 13:41:17 fabiankeil
+ * - Add HEAD support to finish_http_response.
+ * - Add error favicon to internal HTML error messages.
+ *
* Revision 1.91 2007/01/27 13:09:16 fabiankeil
* Add new config option "templdir" to
* change the templates directory.
return cgi_error_memory();
}
- log_error(LOG_LEVEL_GPC, "%s%s cgi call", csp->http->hostport, csp->http->path);
- log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 200 3",
- csp->ip_addr_str, csp->http->cmd);
-
/*
* Find and start the right CGI function
*/
if (!err)
{
/* It worked */
+ rsp->reason = RSP_REASON_CGI_CALL;
return finish_http_response(csp, rsp);
}
else
return cgi_error_memory();
}
+#ifdef FEATURE_FORCE_LOAD
if (csp->flags & CSP_FLAG_FORCED)
{
path = strdup(FORCE_PREFIX);
}
else
+#endif /* def FEATURE_FORCE_LOAD */
{
path = strdup("");
}
free_http_response(rsp);
return cgi_error_memory();
}
+ rsp->reason = RSP_REASON_NO_SUCH_DOMAIN;
}
else if (!strcmp(templatename, "forwarding-failed"))
{
free_http_response(rsp);
return cgi_error_memory();
}
+ rsp->reason = RSP_REASON_FORWARDING_FAILED;
}
else if (!strcmp(templatename, "connect-failed"))
{
free_http_response(rsp);
return cgi_error_memory();
}
+ rsp->reason = RSP_REASON_CONNECT_FAILED;
}
err = template_fill_for_cgi(csp, templatename, exports, rsp);
strlen(cgi_error_memory_response->head);
cgi_error_memory_response->content_length =
strlen(cgi_error_memory_response->body);
+ cgi_error_memory_response->reason = RSP_REASON_OUT_OF_MEMORY;
}
static const char body_suffix[] =
"</b></p>\r\n"
"<p>Please "
- "<a href=\"http://sourceforge.net/tracker/?group_id=11118&atid=111118\">"
+ "<a href=\"http://sourceforge.net/tracker/?group_id=11118&atid=111118\">"
"file a bug report</a>.</p>\r\n"
"</body>\r\n"
"</html>\r\n";
rsp->content_length = 0;
rsp->head_length = 0;
rsp->is_static = 0;
+ rsp->reason = RSP_REASON_INTERNAL_ERROR;
snprintf(errnumbuf, sizeof(errnumbuf), "%d", error_to_report);
rsp->content_length = 0;
}
- if ((rsp->status != NULL) && strncmpic(rsp->status, "302", 3))
+ if (strncmpic(rsp->status, "302", 3))
{
/*
* If it's not a redirect without any content,
* is older than Privoxy's error message, the server would send status code
* 304 and the browser would display the outdated error message again and again.
*
- * For documents delivered with status code 404 or 503 we set "Last-Modified"
+ * For documents delivered with status code 403, 404 and 503 we set "Last-Modified"
* to Tim Berners-Lee's birthday, which predates the age of any page on the web
* and can be safely used to "revalidate" without getting a status code 304.
*
get_http_time(0, buf);
if (!err) err = enlist_unique_header(rsp->headers, "Date", buf);
- if (!strncmpic(rsp->status, "404", 3) || !strncmpic(rsp->status, "503", 3))
+ if (!strncmpic(rsp->status, "403", 3)
+ || !strncmpic(rsp->status, "404", 3)
+ || !strncmpic(rsp->status, "503", 3))
{
if (!err) err = enlist_unique_header(rsp->headers, "Last-Modified", "Wed, 08 Jun 1955 12:00:00 GMT");
}
{
char *html_encoded_prefix;
+ /*
+ * Line breaks would be great, but break
+ * the "blocked" template's JavaScript.
+ */
string_append(&result, "<li><a href=\"");
html_encoded_prefix = html_encode(CGI_PREFIX);
if (html_encoded_prefix == NULL)
string_append(&result, d->name);
string_append(&result, "\">");
string_append(&result, d->description);
- string_append(&result, "</a></li>\n");
+ string_append(&result, "</a></li>");
}
}