X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=filters.c;h=cfa5b7775daed92c9b3b28912fc203dfe01a0360;hp=292db4bcceb0c546c5aec930198b63321e46bbe8;hb=173db7c670935dd7c9320c99f9ee514de1efd86f;hpb=1721ac4623bbe41eb6d73b08ebed5774642ec805 diff --git a/filters.c b/filters.c index 292db4bc..cfa5b777 100644 --- a/filters.c +++ b/filters.c @@ -1,4 +1,4 @@ -const char filters_rcs[] = "$Id: filters.c,v 1.96 2007/10/19 16:53:28 fabiankeil Exp $"; +const char filters_rcs[] = "$Id: filters.c,v 1.101 2008/02/23 16:57:12 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/filters.c,v $ @@ -13,7 +13,7 @@ const char filters_rcs[] = "$Id: filters.c,v 1.96 2007/10/19 16:53:28 fabiankeil * `jpeg_inspect_response', `execute_single_pcrs_command', * `rewrite_url', `get_last_url' * - * Copyright : Written by and Copyright (C) 2001, 2004-2007 the SourceForge + * Copyright : Written by and Copyright (C) 2001, 2004-2008 the SourceForge * Privoxy team. http://www.privoxy.org/ * * Based on the Internet Junkbuster originally written @@ -40,6 +40,24 @@ const char filters_rcs[] = "$Id: filters.c,v 1.96 2007/10/19 16:53:28 fabiankeil * * Revisions : * $Log: filters.c,v $ + * Revision 1.101 2008/02/23 16:57:12 fabiankeil + * Rename url_actions() to get_url_actions() and let it + * use the standard parameter ordering. + * + * Revision 1.100 2008/02/23 16:33:43 fabiankeil + * Let forward_url() use the standard parameter ordering + * and mark its second parameter immutable. + * + * Revision 1.99 2008/02/03 13:57:58 fabiankeil + * Add SOCKS5 support for forward-override{}. + * + * Revision 1.98 2008/01/04 17:43:45 fabiankeil + * Improve the warning messages that get logged if the action files + * "enable" filters but no filters of that type have been loaded. + * + * Revision 1.97 2007/11/30 15:37:03 fabiankeil + * Use freez instead of free. + * * Revision 1.96 2007/10/19 16:53:28 fabiankeil * Add helper function to check if any content filters are enabled. * @@ -804,6 +822,28 @@ int acl_addr(const char *aspec, struct access_control_addr *aca) #endif /* def FEATURE_ACL */ +/********************************************************************* + * + * Function : connect_port_is_forbidden + * + * Description : Check to see if CONNECT requests to the destination + * port of this request are forbidden. The check is + * independend of the actual request method. + * + * Parameters : + * 1 : csp = Current client state (buffers, headers, etc...) + * + * Returns : True if yes, false otherwise. + * + *********************************************************************/ +int connect_port_is_forbidden(const struct client_state *csp) +{ + return ((!(csp->action->flags & ACTION_LIMIT_CONNECT) && csp->http->port != 443) + || (csp->action->flags & ACTION_LIMIT_CONNECT && + !match_portlist(csp->action->string[ACTION_STRING_LIMIT_CONNECT], csp->http->port))); +} + + /********************************************************************* * * Function : block_url @@ -1036,7 +1076,20 @@ struct http_response *block_url(struct client_state *csp) if (!err) err = map(exports, "hostport", 1, html_encode(csp->http->hostport), 0); if (!err) err = map(exports, "path", 1, html_encode(csp->http->path), 0); if (!err) err = map(exports, "path-ue", 1, url_encode(csp->http->path), 0); - + if (!err) + { + const char *block_reason; + if (csp->action->string[ACTION_STRING_BLOCK] != NULL) + { + block_reason = csp->action->string[ACTION_STRING_BLOCK]; + } + else + { + assert(connect_port_is_forbidden(csp)); + block_reason = "Forbidden CONNECT port."; + } + err = map(exports, "block-reason", 1, html_encode(block_reason), 0); + } if (err) { free_map(exports); @@ -1805,7 +1858,8 @@ static char *pcrs_filter_response(struct client_state *csp) if (0 == found_filters) { - log_error(LOG_LEVEL_ERROR, "Unable to get current state of regexp filtering."); + log_error(LOG_LEVEL_ERROR, "Inconsistent configuration: " + "content filtering enabled, but no content filters available."); return(NULL); } @@ -2329,19 +2383,18 @@ char *execute_content_filter(struct client_state *csp, filter_function_ptr conte /********************************************************************* * - * Function : url_actions + * Function : get_url_actions * * Description : Gets the actions for this URL. * * Parameters : - * 1 : http = http_request request for blocked URLs - * 2 : csp = Current client state (buffers, headers, etc...) + * 1 : csp = Current client state (buffers, headers, etc...) + * 2 : http = http_request request for blocked URLs * * Returns : N/A * *********************************************************************/ -void url_actions(struct http_request *http, - struct client_state *csp) +void get_url_actions(struct client_state *csp, struct http_request *http) { struct file_list *fl; struct url_actions *b; @@ -2423,7 +2476,7 @@ void apply_url_actions(struct current_action_spec *action, * Invalid syntax is fatal. * *********************************************************************/ -static const struct forward_spec *get_forward_override_settings(struct client_state *csp) +const static struct forward_spec *get_forward_override_settings(struct client_state *csp) { const char *forward_override_line = csp->action->string[ACTION_STRING_FORWARD_OVERRIDE]; char forward_settings[BUFFER_SIZE]; @@ -2485,6 +2538,11 @@ static const struct forward_spec *get_forward_override_settings(struct client_st fwd->type = SOCKS_4A; socks_proxy = vec[1]; } + else if (!strcasecmp(vec[0], "forward-socks5")) + { + fwd->type = SOCKS_5; + socks_proxy = vec[1]; + } if (NULL != socks_proxy) { @@ -2545,17 +2603,15 @@ static const struct forward_spec *get_forward_override_settings(struct client_st * * Description : Should we forward this to another proxy? * - * XXX: Should be changed to make use of csp->fwd. - * * Parameters : - * 1 : http = http_request request for current URL - * 2 : csp = Current client state (buffers, headers, etc...) + * 1 : csp = Current client state (buffers, headers, etc...) + * 2 : http = http_request request for current URL * * Returns : Pointer to forwarding information. * *********************************************************************/ -const struct forward_spec * forward_url(struct http_request *http, - struct client_state *csp) +const struct forward_spec *forward_url(struct client_state *csp, + const struct http_request *http) { static const struct forward_spec fwd_default[1] = { FORWARD_SPEC_INITIALIZER }; struct forward_spec *fwd = csp->config->forward;