-const char parsers_rcs[] = "$Id: parsers.c,v 1.103 2007/06/01 16:31:54 fabiankeil Exp $";
+const char parsers_rcs[] = "$Id: parsers.c,v 1.104 2007/07/14 07:38:19 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/parsers.c,v $
*
* Revisions :
* $Log: parsers.c,v $
+ * Revision 1.104 2007/07/14 07:38:19 fabiankeil
+ * Move the ACTION_FORCE_TEXT_MODE check out of
+ * server_content_type(). Signal other functions
+ * whether or not a content type has been declared.
+ * Part of the fix for BR#1750917.
+ *
* Revision 1.103 2007/06/01 16:31:54 fabiankeil
* Change sed() to return a jb_err in preparation for forward-override{}.
*
#define ijb_isupper(__X) isupper((int)(unsigned char)(__X))
#define ijb_tolower(__X) tolower((int)(unsigned char)(__X))
-jb_err header_tagger(struct client_state *csp, char *header);
-jb_err scan_headers(struct client_state *csp);
+static jb_err scan_headers(struct client_state *csp);
+static jb_err header_tagger(struct client_state *csp, char *header);
+static jb_err parse_header_time(const char *header_time, time_t *result);
+
+static jb_err crumble (struct client_state *csp, char **header);
+static jb_err connection (struct client_state *csp, char **header);
+static jb_err filter_header (struct client_state *csp, char **header);
+static jb_err client_referrer (struct client_state *csp, char **header);
+static jb_err client_uagent (struct client_state *csp, char **header);
+static jb_err client_ua (struct client_state *csp, char **header);
+static jb_err client_from (struct client_state *csp, char **header);
+static jb_err client_send_cookie (struct client_state *csp, char **header);
+static jb_err client_x_forwarded (struct client_state *csp, char **header);
+static jb_err client_accept_encoding (struct client_state *csp, char **header);
+static jb_err client_te (struct client_state *csp, char **header);
+static jb_err client_max_forwards (struct client_state *csp, char **header);
+static jb_err client_host (struct client_state *csp, char **header);
+static jb_err client_if_modified_since (struct client_state *csp, char **header);
+static jb_err client_accept_language (struct client_state *csp, char **header);
+static jb_err client_if_none_match (struct client_state *csp, char **header);
+static jb_err crunch_client_header (struct client_state *csp, char **header);
+static jb_err client_x_filter (struct client_state *csp, char **header);
+static jb_err server_set_cookie (struct client_state *csp, char **header);
+static jb_err server_content_type (struct client_state *csp, char **header);
+static jb_err server_content_length (struct client_state *csp, char **header);
+static jb_err server_content_md5 (struct client_state *csp, char **header);
+static jb_err server_content_encoding (struct client_state *csp, char **header);
+static jb_err server_transfer_coding (struct client_state *csp, char **header);
+static jb_err server_http (struct client_state *csp, char **header);
+static jb_err crunch_server_header (struct client_state *csp, char **header);
+static jb_err server_last_modified (struct client_state *csp, char **header);
+static jb_err server_content_disposition(struct client_state *csp, char **header);
+
+static jb_err client_host_adder (struct client_state *csp);
+static jb_err client_cookie_adder (struct client_state *csp);
+static jb_err client_xtra_adder (struct client_state *csp);
+static jb_err client_x_forwarded_adder(struct client_state *csp);
+static jb_err connection_close_adder (struct client_state *csp);
const struct parsers client_patterns[] = {
{ "referer:", 8, client_referrer },
* Returns : JB_ERR_OK
*
*********************************************************************/
-jb_err scan_headers(struct client_state *csp)
+static jb_err scan_headers(struct client_state *csp)
{
struct list_entry *h; /* Header */
jb_err err = JB_ERR_OK;
* Returns : JB_ERR_OK on success and always succeeds
*
*********************************************************************/
-jb_err header_tagger(struct client_state *csp, char *header)
+static jb_err header_tagger(struct client_state *csp, char *header)
{
int wanted_filter_type;
int multi_action_index;
* Returns : JB_ERR_OK on success and always succeeds
*
*********************************************************************/
-jb_err filter_header(struct client_state *csp, char **header)
+static jb_err filter_header(struct client_state *csp, char **header)
{
int hits=0;
int matches;
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err connection(struct client_state *csp, char **header)
+static jb_err connection(struct client_state *csp, char **header)
{
char *old_header = *header;
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err crumble(struct client_state *csp, char **header)
+static jb_err crumble(struct client_state *csp, char **header)
{
log_error(LOG_LEVEL_HEADER, "crumble crunched: %s!", *header);
freez(*header);
* Returns : JB_ERR_OK on success and always succeeds
*
*********************************************************************/
-jb_err crunch_server_header(struct client_state *csp, char **header)
+static jb_err crunch_server_header(struct client_state *csp, char **header)
{
const char *crunch_pattern;
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err server_content_type(struct client_state *csp, char **header)
+static jb_err server_content_type(struct client_state *csp, char **header)
{
/* Remove header if it isn't the first Content-Type header */
if ((csp->content_type & CT_DECLARED))
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err server_transfer_coding(struct client_state *csp, char **header)
+static jb_err server_transfer_coding(struct client_state *csp, char **header)
{
/*
* Turn off pcrs and gif filtering if body compressed
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err server_content_encoding(struct client_state *csp, char **header)
+static jb_err server_content_encoding(struct client_state *csp, char **header)
{
#ifdef FEATURE_ZLIB
if ((csp->flags & CSP_FLAG_MODIFIED)
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err server_content_length(struct client_state *csp, char **header)
+static jb_err server_content_length(struct client_state *csp, char **header)
{
const size_t max_header_length = 80;
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err server_content_md5(struct client_state *csp, char **header)
+static jb_err server_content_md5(struct client_state *csp, char **header)
{
if (csp->flags & CSP_FLAG_MODIFIED)
{
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err server_content_disposition(struct client_state *csp, char **header)
+static jb_err server_content_disposition(struct client_state *csp, char **header)
{
const char *newval;
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err server_last_modified(struct client_state *csp, char **header)
+static jb_err server_last_modified(struct client_state *csp, char **header)
{
const char *newval;
char buf[BUFFER_SIZE];
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err client_accept_encoding(struct client_state *csp, char **header)
+static jb_err client_accept_encoding(struct client_state *csp, char **header)
{
if ((csp->action->flags & ACTION_NO_COMPRESSION) != 0)
{
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err client_te(struct client_state *csp, char **header)
+static jb_err client_te(struct client_state *csp, char **header)
{
if ((csp->action->flags & ACTION_NO_COMPRESSION) != 0)
{
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err client_referrer(struct client_state *csp, char **header)
+static jb_err client_referrer(struct client_state *csp, char **header)
{
const char *newval;
const char *host;
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err client_accept_language(struct client_state *csp, char **header)
+static jb_err client_accept_language(struct client_state *csp, char **header)
{
const char *newval;
return (*header == NULL) ? JB_ERR_MEMORY : JB_ERR_OK;
}
+
/*********************************************************************
*
* Function : crunch_client_header
* Returns : JB_ERR_OK on success and always succeeds
*
*********************************************************************/
-jb_err crunch_client_header(struct client_state *csp, char **header)
+static jb_err crunch_client_header(struct client_state *csp, char **header)
{
const char *crunch_pattern;
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err client_uagent(struct client_state *csp, char **header)
+static jb_err client_uagent(struct client_state *csp, char **header)
{
const char *newval;
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err client_ua(struct client_state *csp, char **header)
+static jb_err client_ua(struct client_state *csp, char **header)
{
if ((csp->action->flags & ACTION_HIDE_USER_AGENT) != 0)
{
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err client_from(struct client_state *csp, char **header)
+static jb_err client_from(struct client_state *csp, char **header)
{
const char *newval;
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err client_send_cookie(struct client_state *csp, char **header)
+static jb_err client_send_cookie(struct client_state *csp, char **header)
{
if (csp->action->flags & ACTION_NO_COOKIE_READ)
{
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err client_max_forwards(struct client_state *csp, char **header)
+static jb_err client_max_forwards(struct client_state *csp, char **header)
{
int max_forwards;
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err client_host(struct client_state *csp, char **header)
+static jb_err client_host(struct client_state *csp, char **header)
{
char *p, *q;
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err client_if_modified_since(struct client_state *csp, char **header)
+static jb_err client_if_modified_since(struct client_state *csp, char **header)
{
char newheader[50];
#ifdef HAVE_GMTIME_R
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err client_if_none_match(struct client_state *csp, char **header)
+static jb_err client_if_none_match(struct client_state *csp, char **header)
{
if (csp->action->flags & ACTION_CRUNCH_IF_NONE_MATCH)
{
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err client_host_adder(struct client_state *csp)
+static jb_err client_host_adder(struct client_state *csp)
{
char *p;
jb_err err;
return err;
}
-
+#if 0
/*********************************************************************
*
* Function : client_accept_encoding_adder
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err client_accept_encoding_adder(struct client_state *csp)
+static jb_err client_accept_encoding_adder(struct client_state *csp)
{
- assert(0); /* Not in use */
-
if ( ((csp->action->flags & ACTION_NO_COMPRESSION) != 0)
&& (!strcmpic(csp->http->ver, "HTTP/1.1")) )
{
return JB_ERR_OK;
}
-
+#endif
/*********************************************************************
*
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err client_xtra_adder(struct client_state *csp)
+static jb_err client_xtra_adder(struct client_state *csp)
{
struct list_entry *lst;
jb_err err;
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err client_x_forwarded_adder(struct client_state *csp)
+static jb_err client_x_forwarded_adder(struct client_state *csp)
{
char *p = NULL;
jb_err err;
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err connection_close_adder(struct client_state *csp)
+static jb_err connection_close_adder(struct client_state *csp)
{
const unsigned int flags = csp->flags;
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err server_http(struct client_state *csp, char **header)
+static jb_err server_http(struct client_state *csp, char **header)
{
sscanf(*header, "HTTP/%*d.%*d %d", &(csp->http->status));
if (csp->http->status == 206)
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
-jb_err server_set_cookie(struct client_state *csp, char **header)
+static jb_err server_set_cookie(struct client_state *csp, char **header)
{
time_t now;
time_t cookie_time;
* JB_ERR_PARSE otherwise.
*
*********************************************************************/
-jb_err parse_header_time(const char *header_time, time_t *result)
+static jb_err parse_header_time(const char *header_time, time_t *result)
{
struct tm gmt;