-const char parsers_rcs[] = "$Id: parsers.c,v 1.109 2007/09/08 14:25:48 fabiankeil Exp $";
+const char parsers_rcs[] = "$Id: parsers.c,v 1.114 2007/10/19 16:56:26 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/parsers.c,v $
*
* Revisions :
* $Log: parsers.c,v $
+ * Revision 1.114 2007/10/19 16:56:26 fabiankeil
+ * - Downgrade "Buffer limit reached" message to LOG_LEVEL_INFO.
+ * - Use shiny new content_filters_enabled() in client_range().
+ *
+ * Revision 1.113 2007/10/10 17:29:57 fabiankeil
+ * I forgot about Poland.
+ *
+ * Revision 1.112 2007/10/09 16:38:40 fabiankeil
+ * Remove Range and If-Range headers if content filtering is enabled.
+ *
+ * Revision 1.111 2007/10/04 18:07:00 fabiankeil
+ * Move ACTION_VANILLA_WAFER handling from jcc's chat() into
+ * client_cookie_adder() to make sure send-vanilla-wafer can be
+ * controlled through tags (and thus regression-tested).
+ *
+ * Revision 1.110 2007/09/29 10:42:37 fabiankeil
+ * - Remove "scanning headers for" log message again.
+ * - Some more whitespace fixes.
+ *
* Revision 1.109 2007/09/08 14:25:48 fabiankeil
* Refactor client_referrer() and add conditional-forge parameter.
*
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 client_range (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);
{ "max-forwards:", 13, client_max_forwards },
{ "Accept-Language:", 16, client_accept_language },
{ "if-none-match:", 14, client_if_none_match },
+ { "Range:", 6, client_range },
+ { "If-Range:", 9, client_range },
{ "X-Filter:", 9, client_x_filter },
{ "*", 0, crunch_client_header },
{ "*", 0, filter_header },
NULL
};
+/* The vanilla wafer. */
+static const char VANILLA_WAFER[] =
+ "NOTICE=TO_WHOM_IT_MAY_CONCERN_"
+ "Do_not_send_me_any_copyrighted_information_other_than_the_"
+ "document_that_I_am_requesting_or_any_of_its_necessary_components._"
+ "In_particular_do_not_send_me_any_cookies_that_"
+ "are_subject_to_a_claim_of_copyright_by_anybody._"
+ "Take_notice_that_I_refuse_to_be_bound_by_any_license_condition_"
+ "(copyright_or_otherwise)_applying_to_any_cookie._";
+
/*********************************************************************
*
* Function : flush_socket
*/
if (need > csp->config->buffer_limit)
{
- log_error(LOG_LEVEL_ERROR, "Buffer limit reached while extending the buffer (iob)");
+ log_error(LOG_LEVEL_INFO, "Buffer limit reached while extending the buffer (iob)");
return JB_ERR_MEMORY;
}
log_error(LOG_LEVEL_ERROR, "Crunching invalid header: %s", *header);
freez(*header);
}
- else
- {
- /*
- * Not supposed to be reached. direct_response() which
- * was already called earlier in chat() should have
- * intercepted the request.
- */
- log_error(LOG_LEVEL_ERROR,
- "Non-intercepted %s request with Max-Forwards zero!", csp->http->gpc);
- assert(max_forwards != 0);
- }
}
else
{
return JB_ERR_OK;
}
+
+/*********************************************************************
+ *
+ * Function : client_range
+ *
+ * Description : Removes Range and If-Range headers if content
+ * filtering is enabled. If the client's version of
+ * the document has been altered by Privoxy, the server
+ * could interpret the range differently than the client
+ * intended in which case the user could end up with
+ * corrupted content.
+ *
+ * Parameters :
+ * 1 : csp = Current client state (buffers, headers, etc...)
+ * 2 : header = On input, pointer to header to modify.
+ * On output, pointer to the modified header, or NULL
+ * to remove the header. This function frees the
+ * original string if necessary.
+ *
+ * Returns : JB_ERR_OK
+ *
+ *********************************************************************/
+static jb_err client_range(struct client_state *csp, char **header)
+{
+ if (content_filters_enabled(csp))
+ {
+ log_error(LOG_LEVEL_HEADER, "Content filtering is enabled."
+ " Crunching: \'%s\' to prevent range-mismatch problems.", *header);
+ freez(*header);
+ }
+
+ return JB_ERR_OK;
+}
+
/* the following functions add headers directly to the header list */
/*********************************************************************
{
char *tmp;
struct list_entry *wafer;
- struct list_entry *wafer_list = csp->action->multi[ACTION_MULTI_WAFER]->first;
+ struct list_entry *wafer_list;
jb_err err;
+ /*
+ * If the user has not supplied any wafers, and the user has not
+ * told us to suppress the vanilla wafer, then send the vanilla wafer.
+ */
+ if ((0 != (csp->action->flags & ACTION_VANILLA_WAFER))
+ && list_is_empty(csp->action->multi[ACTION_MULTI_WAFER]))
+ {
+ enlist(csp->action->multi[ACTION_MULTI_WAFER], VANILLA_WAFER);
+ }
+
+ wafer_list = csp->action->multi[ACTION_MULTI_WAFER]->first;
+
if (NULL == wafer_list)
{
/* Nothing to do */